From 92e2b018749f1294cbf9410ac0a95bd600bc460b Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Fri, 21 Nov 2025 20:55:21 +0000 Subject: [PATCH 1/5] fix(adminSDK): resolve type errors Resolved TypeScript type errors in the adminSDK directory by adding JSDoc annotations and null checks. --- adminSDK/directory/quickstart.gs | 11 +++++++++-- adminSDK/reports/quickstart.gs | 14 ++++++++++---- adminSDK/reseller/quickstart.gs | 13 ++++++++++--- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/adminSDK/directory/quickstart.gs b/adminSDK/directory/quickstart.gs index 18d2b744c..8d0c15c3d 100644 --- a/adminSDK/directory/quickstart.gs +++ b/adminSDK/directory/quickstart.gs @@ -25,6 +25,9 @@ function listUsers() { orderBy: 'email' }; try { + if (!AdminDirectory || !AdminDirectory.Users) { + throw new Error('Enable the AdminDirectory Advanced Service.'); + } const response = AdminDirectory.Users.list(optionalArgs); const users = response.users; if (!users || users.length === 0) { @@ -34,11 +37,15 @@ function listUsers() { // Print the list of user's full name and email console.log('Users:'); for (const user of users) { - console.log('%s (%s)', user.primaryEmail, user.name.fullName); + if (user.name) { + console.log('%s (%s)', user.primaryEmail, user.name.fullName); + } else { + console.log('%s', user.primaryEmail); + } } } catch (err) { // TODO (developer)- Handle exception from the Directory API - console.log('Failed with error %s', err.message); + console.log('Failed with error %s', /** @type {Error} */ (err).message); } } // [END admin_sdk_directory_quickstart] diff --git a/adminSDK/reports/quickstart.gs b/adminSDK/reports/quickstart.gs index 5b5778886..77769a7a5 100644 --- a/adminSDK/reports/quickstart.gs +++ b/adminSDK/reports/quickstart.gs @@ -25,7 +25,11 @@ function listLogins() { maxResults: 10 }; try { - const response = AdminReports.Activities.list(userKey, applicationName, optionalArgs); + if (!AdminReports || !AdminReports.Activities) { + throw new Error('Enable the AdminReports Advanced Service.'); + } + const response = AdminReports.Activities.list( + userKey, applicationName, optionalArgs); const activities = response.items; if (!activities || activities.length === 0) { console.log('No logins found.'); @@ -34,12 +38,14 @@ function listLogins() { // Print login events console.log('Logins:'); for (const activity of activities) { - console.log('%s: %s (%s)', activity.id.time, activity.actor.email, - activity.events[0].name); + if (activity.id && activity.actor && activity.events && activity.events.length > 0) { + console.log('%s: %s (%s)', activity.id.time, activity.actor.email, + activity.events[0].name); + } } } catch (err) { // TODO (developer)- Handle exception from the Report API - console.log('Failed with error %s', err.message); + console.log('Failed with error %s', /** @type {Error} */ (err).message); } } // [END admin_sdk_reports_quickstart] diff --git a/adminSDK/reseller/quickstart.gs b/adminSDK/reseller/quickstart.gs index 3e7ee0e6b..8a17d89d6 100644 --- a/adminSDK/reseller/quickstart.gs +++ b/adminSDK/reseller/quickstart.gs @@ -23,6 +23,9 @@ function listSubscriptions() { maxResults: 10 }; try { + if (!AdminReseller || !AdminReseller.Subscriptions) { + throw new Error('Enable the AdminReseller Advanced Service.'); + } const response = AdminReseller.Subscriptions.list(optionalArgs); const subscriptions = response.subscriptions; if (!subscriptions || subscriptions.length === 0) { @@ -31,12 +34,16 @@ function listSubscriptions() { } console.log('Subscriptions:'); for (const subscription of subscriptions) { - console.log('%s (%s, %s)', subscription.customerId, subscription.skuId, - subscription.plan.planName); + if (subscription.plan) { + console.log('%s (%s, %s)', subscription.customerId, subscription.skuId, + subscription.plan.planName); + } else { + console.log('%s (%s)', subscription.customerId, subscription.skuId); + } } } catch (err) { // TODO (developer)- Handle exception from the Reseller API - console.log('Failed with error %s', err.message); + console.log('Failed with error %s', /** @type {Error} */ (err).message); } } // [END admin_sdk_reseller_quickstart] From 4dc24a71a00644da14cc82f46db50dffae52bf15 Mon Sep 17 00:00:00 2001 From: Justin Poehnelt Date: Fri, 21 Nov 2025 14:37:49 -0800 Subject: [PATCH 2/5] Update adminSDK/reseller/quickstart.gs Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- adminSDK/reseller/quickstart.gs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adminSDK/reseller/quickstart.gs b/adminSDK/reseller/quickstart.gs index 8a17d89d6..11a9044a5 100644 --- a/adminSDK/reseller/quickstart.gs +++ b/adminSDK/reseller/quickstart.gs @@ -34,7 +34,7 @@ function listSubscriptions() { } console.log('Subscriptions:'); for (const subscription of subscriptions) { - if (subscription.plan) { + if (subscription.plan?.planName) { console.log('%s (%s, %s)', subscription.customerId, subscription.skuId, subscription.plan.planName); } else { From bfb27dc68a4e2cdfff125fec189e6834a70078a2 Mon Sep 17 00:00:00 2001 From: Justin Poehnelt Date: Fri, 21 Nov 2025 14:37:55 -0800 Subject: [PATCH 3/5] Update adminSDK/directory/quickstart.gs Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- adminSDK/directory/quickstart.gs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adminSDK/directory/quickstart.gs b/adminSDK/directory/quickstart.gs index 8d0c15c3d..08f9511ba 100644 --- a/adminSDK/directory/quickstart.gs +++ b/adminSDK/directory/quickstart.gs @@ -37,7 +37,7 @@ function listUsers() { // Print the list of user's full name and email console.log('Users:'); for (const user of users) { - if (user.name) { + if (user.name?.fullName) { console.log('%s (%s)', user.primaryEmail, user.name.fullName); } else { console.log('%s', user.primaryEmail); From 579b40d3b79385f1eb130826b7dc3545c6fb6e4c Mon Sep 17 00:00:00 2001 From: Justin Poehnelt Date: Fri, 21 Nov 2025 14:38:02 -0800 Subject: [PATCH 4/5] Update adminSDK/reports/quickstart.gs Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- adminSDK/reports/quickstart.gs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adminSDK/reports/quickstart.gs b/adminSDK/reports/quickstart.gs index 77769a7a5..486c68bcb 100644 --- a/adminSDK/reports/quickstart.gs +++ b/adminSDK/reports/quickstart.gs @@ -38,7 +38,7 @@ function listLogins() { // Print login events console.log('Logins:'); for (const activity of activities) { - if (activity.id && activity.actor && activity.events && activity.events.length > 0) { + if (activity.id?.time && activity.actor?.email && activity.events?.[0]?.name) { console.log('%s: %s (%s)', activity.id.time, activity.actor.email, activity.events[0].name); } From 0bcf262795f420d6a0b0a13131a6afef0cafa3ab Mon Sep 17 00:00:00 2001 From: Justin Poehnelt Date: Fri, 21 Nov 2025 16:33:38 -0700 Subject: [PATCH 5/5] fix(adminSDK): address PR comments, improve safety checks --- adminSDK/directory/quickstart.gs | 29 +++++++++++-------------- adminSDK/reports/quickstart.gs | 37 ++++++++++++++------------------ adminSDK/reseller/quickstart.gs | 27 +++++++++++------------ 3 files changed, 41 insertions(+), 52 deletions(-) diff --git a/adminSDK/directory/quickstart.gs b/adminSDK/directory/quickstart.gs index 08f9511ba..78fe433c0 100644 --- a/adminSDK/directory/quickstart.gs +++ b/adminSDK/directory/quickstart.gs @@ -24,28 +24,25 @@ function listUsers() { maxResults: 10, orderBy: 'email' }; - try { - if (!AdminDirectory || !AdminDirectory.Users) { - throw new Error('Enable the AdminDirectory Advanced Service.'); - } - const response = AdminDirectory.Users.list(optionalArgs); - const users = response.users; - if (!users || users.length === 0) { - console.log('No users found.'); - return; - } - // Print the list of user's full name and email - console.log('Users:'); - for (const user of users) { + if (!AdminDirectory || !AdminDirectory.Users) { + throw new Error('Enable the AdminDirectory Advanced Service.'); + } + const response = AdminDirectory.Users.list(optionalArgs); + const users = response.users; + if (!users || users.length === 0) { + console.log('No users found.'); + return; + } + // Print the list of user's full name and email + console.log('Users:'); + for (const user of users) { + if (user.primaryEmail) { if (user.name?.fullName) { console.log('%s (%s)', user.primaryEmail, user.name.fullName); } else { console.log('%s', user.primaryEmail); } } - } catch (err) { - // TODO (developer)- Handle exception from the Directory API - console.log('Failed with error %s', /** @type {Error} */ (err).message); } } // [END admin_sdk_directory_quickstart] diff --git a/adminSDK/reports/quickstart.gs b/adminSDK/reports/quickstart.gs index 486c68bcb..9612f39aa 100644 --- a/adminSDK/reports/quickstart.gs +++ b/adminSDK/reports/quickstart.gs @@ -24,28 +24,23 @@ function listLogins() { const optionalArgs = { maxResults: 10 }; - try { - if (!AdminReports || !AdminReports.Activities) { - throw new Error('Enable the AdminReports Advanced Service.'); - } - const response = AdminReports.Activities.list( - userKey, applicationName, optionalArgs); - const activities = response.items; - if (!activities || activities.length === 0) { - console.log('No logins found.'); - return; - } - // Print login events - console.log('Logins:'); - for (const activity of activities) { - if (activity.id?.time && activity.actor?.email && activity.events?.[0]?.name) { - console.log('%s: %s (%s)', activity.id.time, activity.actor.email, - activity.events[0].name); - } + if (!AdminReports || !AdminReports.Activities) { + throw new Error('Enable the AdminReports Advanced Service.'); + } + const response = AdminReports.Activities.list( + userKey, applicationName, optionalArgs); + const activities = response.items; + if (!activities || activities.length === 0) { + console.log('No logins found.'); + return; + } + // Print login events + console.log('Logins:'); + for (const activity of activities) { + if (activity.id?.time && activity.actor?.email && activity.events?.[0]?.name) { + console.log('%s: %s (%s)', activity.id.time, activity.actor.email, + activity.events[0].name); } - } catch (err) { - // TODO (developer)- Handle exception from the Report API - console.log('Failed with error %s', /** @type {Error} */ (err).message); } } // [END admin_sdk_reports_quickstart] diff --git a/adminSDK/reseller/quickstart.gs b/adminSDK/reseller/quickstart.gs index 11a9044a5..95947e24c 100644 --- a/adminSDK/reseller/quickstart.gs +++ b/adminSDK/reseller/quickstart.gs @@ -22,18 +22,18 @@ function listSubscriptions() { const optionalArgs = { maxResults: 10 }; - try { - if (!AdminReseller || !AdminReseller.Subscriptions) { - throw new Error('Enable the AdminReseller Advanced Service.'); - } - const response = AdminReseller.Subscriptions.list(optionalArgs); - const subscriptions = response.subscriptions; - if (!subscriptions || subscriptions.length === 0) { - console.log('No subscriptions found.'); - return; - } - console.log('Subscriptions:'); - for (const subscription of subscriptions) { + if (!AdminReseller || !AdminReseller.Subscriptions) { + throw new Error('Enable the AdminReseller Advanced Service.'); + } + const response = AdminReseller.Subscriptions.list(optionalArgs); + const subscriptions = response.subscriptions; + if (!subscriptions || subscriptions.length === 0) { + console.log('No subscriptions found.'); + return; + } + console.log('Subscriptions:'); + for (const subscription of subscriptions) { + if (subscription.customerId && subscription.skuId) { if (subscription.plan?.planName) { console.log('%s (%s, %s)', subscription.customerId, subscription.skuId, subscription.plan.planName); @@ -41,9 +41,6 @@ function listSubscriptions() { console.log('%s (%s)', subscription.customerId, subscription.skuId); } } - } catch (err) { - // TODO (developer)- Handle exception from the Reseller API - console.log('Failed with error %s', /** @type {Error} */ (err).message); } } // [END admin_sdk_reseller_quickstart]