From 882d5c3cc905a3baea21bd27143472a4026d89f5 Mon Sep 17 00:00:00 2001 From: Justin Poehnelt Date: Fri, 19 Dec 2025 15:31:45 -0700 Subject: [PATCH 1/2] feat: Add `script.external_request` scope and its corresponding test. --- .changeset/fiery-colts-send.md | 5 +++++ packages/vscode-extension/src/scopes.ts | 5 +++++ packages/vscode-extension/src/test/scopes.test.ts | 8 ++++++++ 3 files changed, 18 insertions(+) create mode 100644 .changeset/fiery-colts-send.md diff --git a/.changeset/fiery-colts-send.md b/.changeset/fiery-colts-send.md new file mode 100644 index 0000000..1686e8c --- /dev/null +++ b/.changeset/fiery-colts-send.md @@ -0,0 +1,5 @@ +--- +"google-workspace-developer-tools": patch +--- + +Add Apps Script specific `https://www.googleapis.com/auth/script.external_request` which is not part of any API. diff --git a/packages/vscode-extension/src/scopes.ts b/packages/vscode-extension/src/scopes.ts index 2ed37ec..1420be0 100644 --- a/packages/vscode-extension/src/scopes.ts +++ b/packages/vscode-extension/src/scopes.ts @@ -64,6 +64,11 @@ for (const { title, version, documentationLink, scopes } of GOOGLE_APIS || []) { } } +SCOPES.set("https://www.googleapis.com/auth/script.external_request", { + description: "Connect to an external service", + apis: [], +}); + const RESTRICTED_SCOPES = [ "https://www.googleapis.com/auth/chat.admin.delete", "https://www.googleapis.com/auth/chat.app.delete", diff --git a/packages/vscode-extension/src/test/scopes.test.ts b/packages/vscode-extension/src/test/scopes.test.ts index daa28e9..38f2604 100644 --- a/packages/vscode-extension/src/test/scopes.test.ts +++ b/packages/vscode-extension/src/test/scopes.test.ts @@ -27,4 +27,12 @@ suite("getScopeMarkdown", () => { const markdown = getScopeMarkdown("https://example.com"); assert.strictEqual(markdown, "**https://example.com** (Unknown scope)"); }); + + test("it returns scope for script.external_request", () => { + const scope = SCOPES.get( + "https://www.googleapis.com/auth/script.external_request", + ); + assert.ok(scope); + assert.strictEqual(scope?.description, "Connect to an external service"); + }); }); From 837db319a20f48ad322eabd16b576a32a5f3a24c Mon Sep 17 00:00:00 2001 From: Justin Poehnelt Date: Fri, 19 Dec 2025 15:45:24 -0700 Subject: [PATCH 2/2] refactor: extract script.external_request scope string into a named constant --- packages/vscode-extension/src/scopes.ts | 5 ++++- packages/vscode-extension/src/test/scopes.test.ts | 10 ++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/vscode-extension/src/scopes.ts b/packages/vscode-extension/src/scopes.ts index 1420be0..597e522 100644 --- a/packages/vscode-extension/src/scopes.ts +++ b/packages/vscode-extension/src/scopes.ts @@ -64,7 +64,10 @@ for (const { title, version, documentationLink, scopes } of GOOGLE_APIS || []) { } } -SCOPES.set("https://www.googleapis.com/auth/script.external_request", { +export const SCRIPT_EXTERNAL_REQUEST_SCOPE = + "https://www.googleapis.com/auth/script.external_request"; + +SCOPES.set(SCRIPT_EXTERNAL_REQUEST_SCOPE, { description: "Connect to an external service", apis: [], }); diff --git a/packages/vscode-extension/src/test/scopes.test.ts b/packages/vscode-extension/src/test/scopes.test.ts index 38f2604..7c4aab6 100644 --- a/packages/vscode-extension/src/test/scopes.test.ts +++ b/packages/vscode-extension/src/test/scopes.test.ts @@ -15,7 +15,11 @@ */ import * as assert from "node:assert"; -import { SCOPES, getScopeMarkdown } from "../scopes.js"; +import { + SCOPES, + SCRIPT_EXTERNAL_REQUEST_SCOPE, + getScopeMarkdown, +} from "../scopes.js"; suite("getScopeMarkdown", () => { test("it returns markdown for a known scope", () => { @@ -29,9 +33,7 @@ suite("getScopeMarkdown", () => { }); test("it returns scope for script.external_request", () => { - const scope = SCOPES.get( - "https://www.googleapis.com/auth/script.external_request", - ); + const scope = SCOPES.get(SCRIPT_EXTERNAL_REQUEST_SCOPE); assert.ok(scope); assert.strictEqual(scope?.description, "Connect to an external service"); });