@executor-js/plugin-openapi 1.4.33 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/AddOpenApiSource-7M52SRUX.js +893 -0
  2. package/dist/AddOpenApiSource-7M52SRUX.js.map +1 -0
  3. package/dist/EditOpenApiSource-WTAMRJUK.js +68 -0
  4. package/dist/EditOpenApiSource-WTAMRJUK.js.map +1 -0
  5. package/dist/OpenApiAccountsPanel-3VJJXNQF.js +112 -0
  6. package/dist/OpenApiAccountsPanel-3VJJXNQF.js.map +1 -0
  7. package/dist/api/group.d.ts +104 -225
  8. package/dist/api/index.d.ts +127 -271
  9. package/dist/{chunk-BB5IAKRG.js → chunk-AQ7JDDRM.js} +12 -2
  10. package/dist/chunk-AQ7JDDRM.js.map +1 -0
  11. package/dist/chunk-BSLE6HCE.js +181 -0
  12. package/dist/chunk-BSLE6HCE.js.map +1 -0
  13. package/dist/chunk-MZWZQ24W.js +226 -0
  14. package/dist/chunk-MZWZQ24W.js.map +1 -0
  15. package/dist/chunk-OSIFYIQP.js +623 -0
  16. package/dist/chunk-OSIFYIQP.js.map +1 -0
  17. package/dist/chunk-QSSRVK6M.js +139 -0
  18. package/dist/chunk-QSSRVK6M.js.map +1 -0
  19. package/dist/chunk-V7VCHYOY.js +1544 -0
  20. package/dist/chunk-V7VCHYOY.js.map +1 -0
  21. package/dist/{chunk-AN4HJFNP.js → chunk-YVRI7KRC.js} +162 -186
  22. package/dist/chunk-YVRI7KRC.js.map +1 -0
  23. package/dist/client.js +9 -8
  24. package/dist/client.js.map +1 -1
  25. package/dist/core.js +28 -11
  26. package/dist/index.js +11 -4
  27. package/dist/react/AddOpenApiSource.d.ts +2 -13
  28. package/dist/react/GoogleProductPicker.d.ts +9 -0
  29. package/dist/react/OpenApiAccountsPanel.d.ts +6 -0
  30. package/dist/react/OpenApiSourceDetailsFields.d.ts +3 -2
  31. package/dist/react/atoms.d.ts +177 -192
  32. package/dist/react/auth-method-config.d.ts +15 -0
  33. package/dist/react/client.d.ts +103 -224
  34. package/dist/react/index.d.ts +2 -2
  35. package/dist/react/source-plugin.d.ts +2 -2
  36. package/dist/sdk/config.d.ts +75 -0
  37. package/dist/sdk/configure.test.d.ts +1 -0
  38. package/dist/sdk/describe-auth-methods.test.d.ts +1 -0
  39. package/dist/sdk/errors.d.ts +4 -6
  40. package/dist/sdk/extract.d.ts +7 -5
  41. package/dist/sdk/google-bundle.test.d.ts +1 -0
  42. package/dist/sdk/google-discovery.d.ts +43 -0
  43. package/dist/sdk/google-discovery.test.d.ts +1 -0
  44. package/dist/sdk/google-oauth-batches.d.ts +13 -0
  45. package/dist/sdk/google-oauth-batches.test.d.ts +1 -0
  46. package/dist/sdk/google-oauth-scopes.d.ts +3 -0
  47. package/dist/sdk/google-oauth-scopes.test.d.ts +1 -0
  48. package/dist/sdk/google-presets.d.ts +16 -0
  49. package/dist/sdk/google-presets.test.d.ts +1 -0
  50. package/dist/sdk/google-product-picker-scopes.test.d.ts +1 -0
  51. package/dist/sdk/index.d.ts +7 -5
  52. package/dist/sdk/invoke.d.ts +6 -9
  53. package/dist/sdk/openapi-utils.d.ts +1 -0
  54. package/dist/sdk/plugin.d.ts +74 -231
  55. package/dist/sdk/presets.d.ts +2 -1
  56. package/dist/sdk/preview.d.ts +20 -15
  57. package/dist/sdk/query-serialization.test.d.ts +1 -0
  58. package/dist/sdk/store.d.ts +14 -41
  59. package/dist/sdk/types.d.ts +23 -51
  60. package/dist/testing/index.d.ts +49 -38
  61. package/dist/testing.js +46 -18
  62. package/dist/testing.js.map +1 -1
  63. package/package.json +6 -4
  64. package/dist/AddOpenApiSource-NSCULGTM.js +0 -19
  65. package/dist/AddOpenApiSource-NSCULGTM.js.map +0 -1
  66. package/dist/EditOpenApiSource-MV7NYTRP.js +0 -774
  67. package/dist/EditOpenApiSource-MV7NYTRP.js.map +0 -1
  68. package/dist/OpenApiSourceSummary-7JBS7PUV.js +0 -122
  69. package/dist/OpenApiSourceSummary-7JBS7PUV.js.map +0 -1
  70. package/dist/chunk-2ZKKZYZH.js +0 -1181
  71. package/dist/chunk-2ZKKZYZH.js.map +0 -1
  72. package/dist/chunk-AN4HJFNP.js.map +0 -1
  73. package/dist/chunk-BB5IAKRG.js.map +0 -1
  74. package/dist/chunk-PRVJDE43.js +0 -2101
  75. package/dist/chunk-PRVJDE43.js.map +0 -1
  76. package/dist/chunk-X5JX3KTA.js +0 -201
  77. package/dist/chunk-X5JX3KTA.js.map +0 -1
  78. package/dist/react/OpenApiSourceSummary.d.ts +0 -5
  79. package/dist/sdk/credential-status.d.ts +0 -23
  80. package/dist/sdk/source-contracts.d.ts +0 -55
  81. /package/dist/{sdk/credential-status.test.d.ts → react/auth-method-config.test.d.ts} +0 -0
@@ -0,0 +1,181 @@
1
+ import {
2
+ OpenApiExtractionError,
3
+ OpenApiOAuthError,
4
+ OpenApiParseError,
5
+ SpecPreview
6
+ } from "./chunk-YVRI7KRC.js";
7
+
8
+ // src/react/atoms.ts
9
+ import * as Atom from "effect/unstable/reactivity/Atom";
10
+ import { ReactivityKey } from "@executor-js/react/api/reactivity-keys";
11
+
12
+ // src/react/client.ts
13
+ import { createPluginAtomClient } from "@executor-js/sdk/client";
14
+ import {
15
+ getExecutorApiBaseUrl,
16
+ getExecutorServerAuthorizationHeader
17
+ } from "@executor-js/react/api/server-connection";
18
+
19
+ // src/api/group.ts
20
+ import { HttpApiEndpoint, HttpApiGroup } from "effect/unstable/httpapi";
21
+ import { Schema } from "effect";
22
+ import {
23
+ InternalError,
24
+ IntegrationAlreadyExistsError,
25
+ IntegrationSlug
26
+ } from "@executor-js/sdk/shared";
27
+ var DomainErrors = [
28
+ InternalError,
29
+ OpenApiParseError,
30
+ OpenApiExtractionError,
31
+ OpenApiOAuthError,
32
+ IntegrationAlreadyExistsError
33
+ ];
34
+ var SlugParams = {
35
+ slug: Schema.String
36
+ };
37
+ var OpenApiSpecInputPayload = Schema.Union([
38
+ Schema.Struct({ kind: Schema.Literal("url"), url: Schema.String }),
39
+ Schema.Struct({ kind: Schema.Literal("blob"), value: Schema.String }),
40
+ Schema.Struct({
41
+ kind: Schema.Literal("googleDiscovery"),
42
+ url: Schema.String
43
+ }),
44
+ Schema.Struct({
45
+ kind: Schema.Literal("googleDiscoveryBundle"),
46
+ urls: Schema.Array(Schema.String)
47
+ })
48
+ ]);
49
+ var AuthenticationVariablePayload = Schema.Struct({
50
+ type: Schema.Literal("variable"),
51
+ name: Schema.String
52
+ });
53
+ var AuthenticationTemplateValuePayload = Schema.Union([
54
+ Schema.String,
55
+ Schema.Array(Schema.Union([Schema.String, AuthenticationVariablePayload]))
56
+ ]);
57
+ var AuthenticationPayload = Schema.Union([
58
+ Schema.Struct({
59
+ slug: Schema.String,
60
+ type: Schema.Literal("apiKey"),
61
+ headers: Schema.optional(Schema.Record(Schema.String, AuthenticationTemplateValuePayload)),
62
+ queryParams: Schema.optional(Schema.Record(Schema.String, AuthenticationTemplateValuePayload))
63
+ }),
64
+ Schema.Struct({
65
+ slug: Schema.String,
66
+ type: Schema.Literal("oauth"),
67
+ authorizationUrl: Schema.String,
68
+ tokenUrl: Schema.String,
69
+ scopes: Schema.Array(Schema.String)
70
+ })
71
+ ]);
72
+ var AddSpecPayload = Schema.Struct({
73
+ spec: OpenApiSpecInputPayload,
74
+ slug: Schema.String,
75
+ description: Schema.optional(Schema.String),
76
+ baseUrl: Schema.optional(Schema.String),
77
+ headers: Schema.optional(Schema.Record(Schema.String, Schema.String)),
78
+ queryParams: Schema.optional(Schema.Record(Schema.String, Schema.String)),
79
+ authenticationTemplate: Schema.optional(Schema.Array(AuthenticationPayload))
80
+ });
81
+ var PreviewSpecPayload = Schema.Struct({
82
+ spec: Schema.String
83
+ });
84
+ var ConfigurePayload = Schema.Struct({
85
+ authenticationTemplate: Schema.Array(AuthenticationPayload),
86
+ mode: Schema.optional(Schema.Literals(["merge", "replace"]))
87
+ });
88
+ var AddSpecResponse = Schema.Struct({
89
+ slug: IntegrationSlug,
90
+ toolCount: Schema.Number
91
+ });
92
+ var IntegrationView = Schema.Struct({
93
+ slug: IntegrationSlug,
94
+ description: Schema.String,
95
+ kind: Schema.String,
96
+ canRemove: Schema.Boolean,
97
+ canRefresh: Schema.Boolean
98
+ });
99
+ var OpenApiConfigView = Schema.Struct({
100
+ spec: Schema.String,
101
+ sourceUrl: Schema.optional(Schema.String),
102
+ googleDiscoveryUrls: Schema.optional(Schema.Array(Schema.String)),
103
+ baseUrl: Schema.optional(Schema.String),
104
+ headers: Schema.optional(Schema.Record(Schema.String, Schema.String)),
105
+ queryParams: Schema.optional(Schema.Record(Schema.String, Schema.String)),
106
+ authenticationTemplate: Schema.optional(Schema.Array(AuthenticationPayload))
107
+ });
108
+ var ConfigureResponse = Schema.Struct({
109
+ authenticationTemplate: Schema.Array(AuthenticationPayload)
110
+ });
111
+ var OpenApiGroup = HttpApiGroup.make("openapi").add(
112
+ HttpApiEndpoint.post("previewSpec", "/openapi/preview", {
113
+ payload: PreviewSpecPayload,
114
+ success: SpecPreview,
115
+ error: DomainErrors
116
+ })
117
+ ).add(
118
+ HttpApiEndpoint.post("addSpec", "/openapi/specs", {
119
+ payload: AddSpecPayload,
120
+ success: AddSpecResponse,
121
+ error: DomainErrors
122
+ })
123
+ ).add(
124
+ HttpApiEndpoint.get("getIntegration", "/openapi/integrations/:slug", {
125
+ params: SlugParams,
126
+ success: Schema.NullOr(IntegrationView),
127
+ error: DomainErrors
128
+ })
129
+ ).add(
130
+ HttpApiEndpoint.get("getConfig", "/openapi/integrations/:slug/config", {
131
+ params: SlugParams,
132
+ success: Schema.NullOr(OpenApiConfigView),
133
+ error: DomainErrors
134
+ })
135
+ ).add(
136
+ HttpApiEndpoint.post("configure", "/openapi/integrations/:slug/config", {
137
+ params: SlugParams,
138
+ payload: ConfigurePayload,
139
+ success: ConfigureResponse,
140
+ error: DomainErrors
141
+ })
142
+ ).add(
143
+ HttpApiEndpoint.delete("removeSpec", "/openapi/integrations/:slug", {
144
+ params: SlugParams,
145
+ success: Schema.Void,
146
+ error: DomainErrors
147
+ })
148
+ );
149
+
150
+ // src/react/client.ts
151
+ var OpenApiClient = createPluginAtomClient(OpenApiGroup, {
152
+ baseUrl: getExecutorApiBaseUrl,
153
+ authorizationHeader: getExecutorServerAuthorizationHeader
154
+ });
155
+
156
+ // src/react/atoms.ts
157
+ var openApiIntegrationAtom = (slug) => OpenApiClient.query("openapi", "getIntegration", {
158
+ params: { slug },
159
+ timeToLive: "15 seconds",
160
+ reactivityKeys: [ReactivityKey.integrations, ReactivityKey.tools]
161
+ });
162
+ var openApiConfigAtom = (slug) => OpenApiClient.query("openapi", "getConfig", {
163
+ params: { slug },
164
+ timeToLive: "15 seconds",
165
+ reactivityKeys: [ReactivityKey.integrations, ReactivityKey.tools]
166
+ });
167
+ var previewOpenApiSpec = OpenApiClient.mutation("openapi", "previewSpec");
168
+ var addOpenApiSpec = OpenApiClient.mutation("openapi", "addSpec");
169
+ var removeOpenApiSpec = OpenApiClient.mutation("openapi", "removeSpec");
170
+ var openapiConfigure = OpenApiClient.mutation("openapi", "configure");
171
+ var openApiIntegrationFamily = Atom.family(openApiIntegrationAtom);
172
+ var openApiConfigFamily = Atom.family(openApiConfigAtom);
173
+
174
+ export {
175
+ openApiIntegrationAtom,
176
+ openApiConfigAtom,
177
+ previewOpenApiSpec,
178
+ addOpenApiSpec,
179
+ openapiConfigure
180
+ };
181
+ //# sourceMappingURL=chunk-BSLE6HCE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/react/atoms.ts","../src/react/client.ts","../src/api/group.ts"],"sourcesContent":["import type { IntegrationSlug } from \"@executor-js/sdk/shared\";\nimport * as Atom from \"effect/unstable/reactivity/Atom\";\nimport { ReactivityKey } from \"@executor-js/react/api/reactivity-keys\";\nimport { OpenApiClient } from \"./client\";\n\n// ---------------------------------------------------------------------------\n// Query atoms — v2: the integration catalog is the unit of identity (the v1\n// per-scope `source` row is gone). `getIntegration` returns the catalog entry\n// (slug/description/kind/canRemove/canRefresh); credentials are owner-scoped\n// connections read from the shared `connections` API, not bound per source.\n// ---------------------------------------------------------------------------\n\nexport const openApiIntegrationAtom = (slug: IntegrationSlug) =>\n OpenApiClient.query(\"openapi\", \"getIntegration\", {\n params: { slug },\n timeToLive: \"15 seconds\",\n reactivityKeys: [ReactivityKey.integrations, ReactivityKey.tools],\n });\n\n// The full opaque config (including `authenticationTemplate`), used by the\n// configure UX to render existing auth methods and add custom ones.\nexport const openApiConfigAtom = (slug: IntegrationSlug) =>\n OpenApiClient.query(\"openapi\", \"getConfig\", {\n params: { slug },\n timeToLive: \"15 seconds\",\n reactivityKeys: [ReactivityKey.integrations, ReactivityKey.tools],\n });\n\n// ---------------------------------------------------------------------------\n// Mutation atoms\n// ---------------------------------------------------------------------------\n\nexport const previewOpenApiSpec = OpenApiClient.mutation(\"openapi\", \"previewSpec\");\n\nexport const addOpenApiSpec = OpenApiClient.mutation(\"openapi\", \"addSpec\");\n\nexport const removeOpenApiSpec = OpenApiClient.mutation(\"openapi\", \"removeSpec\");\n\n// Add / merge custom auth methods onto an integration's `authenticationTemplate`.\nexport const openapiConfigure = OpenApiClient.mutation(\"openapi\", \"configure\");\n\n// `getIntegration` is read-only; the atom family lets a caller pass a slug.\nexport const openApiIntegrationFamily = Atom.family(openApiIntegrationAtom);\n\n// `getConfig` is read-only; the atom family lets a caller pass a slug.\nexport const openApiConfigFamily = Atom.family(openApiConfigAtom);\n","import { createPluginAtomClient } from \"@executor-js/sdk/client\";\nimport {\n getExecutorApiBaseUrl,\n getExecutorServerAuthorizationHeader,\n} from \"@executor-js/react/api/server-connection\";\nimport { OpenApiGroup } from \"../api/group\";\n\nexport const OpenApiClient = createPluginAtomClient(OpenApiGroup, {\n baseUrl: getExecutorApiBaseUrl,\n authorizationHeader: getExecutorServerAuthorizationHeader,\n});\n","import { HttpApiEndpoint, HttpApiGroup } from \"effect/unstable/httpapi\";\nimport { Schema } from \"effect\";\nimport {\n InternalError,\n IntegrationAlreadyExistsError,\n IntegrationSlug,\n} from \"@executor-js/sdk/shared\";\n\nimport { OpenApiParseError, OpenApiExtractionError, OpenApiOAuthError } from \"../sdk/errors\";\nimport { SpecPreview } from \"../sdk/preview\";\n\n// ---------------------------------------------------------------------------\n// Errors — the plugin-domain tagged errors flow directly to clients\n// (4xx, each carrying its own `httpApiStatus`). `InternalError` is the shared\n// opaque 500 surface; `StorageError` → `InternalError` translation happens at\n// service wiring time. `IntegrationAlreadyExistsError` (409) blocks re-adding\n// an existing slug — see addSpec.\n// ---------------------------------------------------------------------------\n\nconst DomainErrors = [\n InternalError,\n OpenApiParseError,\n OpenApiExtractionError,\n OpenApiOAuthError,\n IntegrationAlreadyExistsError,\n] as const;\n\nconst SlugParams = {\n slug: Schema.String,\n};\n\n// ---------------------------------------------------------------------------\n// Payloads\n// ---------------------------------------------------------------------------\n\nconst OpenApiSpecInputPayload = Schema.Union([\n Schema.Struct({ kind: Schema.Literal(\"url\"), url: Schema.String }),\n Schema.Struct({ kind: Schema.Literal(\"blob\"), value: Schema.String }),\n Schema.Struct({\n kind: Schema.Literal(\"googleDiscovery\"),\n url: Schema.String,\n }),\n Schema.Struct({\n kind: Schema.Literal(\"googleDiscoveryBundle\"),\n urls: Schema.Array(Schema.String),\n }),\n]);\n\nconst AuthenticationVariablePayload = Schema.Struct({\n type: Schema.Literal(\"variable\"),\n name: Schema.String,\n});\nconst AuthenticationTemplateValuePayload = Schema.Union([\n Schema.String,\n Schema.Array(Schema.Union([Schema.String, AuthenticationVariablePayload])),\n]);\nconst AuthenticationPayload = Schema.Union([\n Schema.Struct({\n slug: Schema.String,\n type: Schema.Literal(\"apiKey\"),\n headers: Schema.optional(Schema.Record(Schema.String, AuthenticationTemplateValuePayload)),\n queryParams: Schema.optional(Schema.Record(Schema.String, AuthenticationTemplateValuePayload)),\n }),\n Schema.Struct({\n slug: Schema.String,\n type: Schema.Literal(\"oauth\"),\n authorizationUrl: Schema.String,\n tokenUrl: Schema.String,\n scopes: Schema.Array(Schema.String),\n }),\n]);\n\nconst AddSpecPayload = Schema.Struct({\n spec: OpenApiSpecInputPayload,\n slug: Schema.String,\n description: Schema.optional(Schema.String),\n baseUrl: Schema.optional(Schema.String),\n headers: Schema.optional(Schema.Record(Schema.String, Schema.String)),\n queryParams: Schema.optional(Schema.Record(Schema.String, Schema.String)),\n authenticationTemplate: Schema.optional(Schema.Array(AuthenticationPayload)),\n});\n\nconst PreviewSpecPayload = Schema.Struct({\n spec: Schema.String,\n});\n\n// The `configure` payload — the new/updated auth methods to merge onto the\n// integration's `authenticationTemplate`. Reuses the same `AuthenticationPayload`\n// schema as `addSpec` so a custom apiKey method round-trips identically.\nconst ConfigurePayload = Schema.Struct({\n authenticationTemplate: Schema.Array(AuthenticationPayload),\n mode: Schema.optional(Schema.Literals([\"merge\", \"replace\"])),\n});\n\n// ---------------------------------------------------------------------------\n// Responses\n// ---------------------------------------------------------------------------\n\nconst AddSpecResponse = Schema.Struct({\n slug: IntegrationSlug,\n toolCount: Schema.Number,\n});\n\nconst IntegrationView = Schema.Struct({\n slug: IntegrationSlug,\n description: Schema.String,\n kind: Schema.String,\n canRemove: Schema.Boolean,\n canRefresh: Schema.Boolean,\n});\n\n// The full opaque integration config, surfaced for the configure UX. Unlike\n// `IntegrationView` (catalog identity only), this carries the\n// `authenticationTemplate` the configure flow reads/writes.\nconst OpenApiConfigView = Schema.Struct({\n spec: Schema.String,\n sourceUrl: Schema.optional(Schema.String),\n googleDiscoveryUrls: Schema.optional(Schema.Array(Schema.String)),\n baseUrl: Schema.optional(Schema.String),\n headers: Schema.optional(Schema.Record(Schema.String, Schema.String)),\n queryParams: Schema.optional(Schema.Record(Schema.String, Schema.String)),\n authenticationTemplate: Schema.optional(Schema.Array(AuthenticationPayload)),\n});\n\n// The configure result — the merged `authenticationTemplate` after the new\n// custom methods were appended/replaced.\nconst ConfigureResponse = Schema.Struct({\n authenticationTemplate: Schema.Array(AuthenticationPayload),\n});\n\n// ---------------------------------------------------------------------------\n// Group — addSpec/preview/get/remove over the integration catalog.\n// ---------------------------------------------------------------------------\n\nexport const OpenApiGroup = HttpApiGroup.make(\"openapi\")\n .add(\n HttpApiEndpoint.post(\"previewSpec\", \"/openapi/preview\", {\n payload: PreviewSpecPayload,\n success: SpecPreview,\n error: DomainErrors,\n }),\n )\n .add(\n HttpApiEndpoint.post(\"addSpec\", \"/openapi/specs\", {\n payload: AddSpecPayload,\n success: AddSpecResponse,\n error: DomainErrors,\n }),\n )\n .add(\n HttpApiEndpoint.get(\"getIntegration\", \"/openapi/integrations/:slug\", {\n params: SlugParams,\n success: Schema.NullOr(IntegrationView),\n error: DomainErrors,\n }),\n )\n .add(\n HttpApiEndpoint.get(\"getConfig\", \"/openapi/integrations/:slug/config\", {\n params: SlugParams,\n success: Schema.NullOr(OpenApiConfigView),\n error: DomainErrors,\n }),\n )\n .add(\n HttpApiEndpoint.post(\"configure\", \"/openapi/integrations/:slug/config\", {\n params: SlugParams,\n payload: ConfigurePayload,\n success: ConfigureResponse,\n error: DomainErrors,\n }),\n )\n .add(\n HttpApiEndpoint.delete(\"removeSpec\", \"/openapi/integrations/:slug\", {\n params: SlugParams,\n success: Schema.Void,\n error: DomainErrors,\n }),\n );\n"],"mappings":"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","names":[]}
@@ -0,0 +1,226 @@
1
+ // src/sdk/google-presets.ts
2
+ var gd = (service, version) => `https://www.googleapis.com/discovery/v1/apis/${service}/${version}/rest`;
3
+ var GOOGLE_G = "https://fonts.gstatic.com/s/i/productlogos/googleg/v6/192px.svg";
4
+ var GOOGLE_BUNDLE_PRESET_ID = "google";
5
+ var googleOpenApiBundlePreset = {
6
+ id: GOOGLE_BUNDLE_PRESET_ID,
7
+ name: "Google",
8
+ summary: "Bundle Gmail, Calendar, Drive, Docs, and other Google APIs into one source.",
9
+ icon: GOOGLE_G,
10
+ featured: true
11
+ };
12
+ var googleOpenApiPresets = [
13
+ {
14
+ id: "google-calendar",
15
+ name: "Google Calendar",
16
+ summary: "Calendars, events, ACLs, and scheduling.",
17
+ url: gd("calendar", "v3"),
18
+ icon: "https://fonts.gstatic.com/s/i/productlogos/calendar_2020q4/v8/192px.svg",
19
+ featured: true,
20
+ oauthAudience: "standard-user"
21
+ },
22
+ {
23
+ id: "google-gmail",
24
+ name: "Gmail",
25
+ summary: "Messages, threads, labels, and drafts.",
26
+ url: gd("gmail", "v1"),
27
+ icon: "https://fonts.gstatic.com/s/i/productlogos/gmail_2020q4/v8/web-96dp/logo_gmail_2020q4_color_2x_web_96dp.png",
28
+ featured: true,
29
+ oauthAudience: "standard-user"
30
+ },
31
+ {
32
+ id: "google-sheets",
33
+ name: "Google Sheets",
34
+ summary: "Spreadsheets, values, ranges, and formatting.",
35
+ url: gd("sheets", "v4"),
36
+ icon: "https://fonts.gstatic.com/s/i/productlogos/sheets_2020q4/v8/192px.svg",
37
+ featured: true,
38
+ oauthAudience: "standard-user"
39
+ },
40
+ {
41
+ id: "google-drive",
42
+ name: "Google Drive",
43
+ summary: "Files, folders, permissions, and shared drives.",
44
+ url: gd("drive", "v3"),
45
+ icon: "https://fonts.gstatic.com/s/i/productlogos/drive_2020q4/v8/192px.svg",
46
+ featured: true,
47
+ oauthAudience: "standard-user"
48
+ },
49
+ {
50
+ id: "google-docs",
51
+ name: "Google Docs",
52
+ summary: "Documents, structural edits, and formatting.",
53
+ url: gd("docs", "v1"),
54
+ icon: "https://fonts.gstatic.com/s/i/productlogos/docs_2020q4/v12/192px.svg",
55
+ featured: true,
56
+ oauthAudience: "standard-user"
57
+ },
58
+ {
59
+ id: "google-slides",
60
+ name: "Google Slides",
61
+ summary: "Presentations, slides, page elements, and deck updates.",
62
+ url: gd("slides", "v1"),
63
+ icon: "https://fonts.gstatic.com/s/i/productlogos/slides_2020q4/v12/192px.svg",
64
+ oauthAudience: "standard-user"
65
+ },
66
+ {
67
+ id: "google-forms",
68
+ name: "Google Forms",
69
+ summary: "Forms, questions, responses, and quizzes.",
70
+ url: "https://forms.googleapis.com/$discovery/rest?version=v1",
71
+ icon: "https://fonts.gstatic.com/s/i/productlogos/forms_2020q4/v6/192px.svg",
72
+ oauthAudience: "standard-user"
73
+ },
74
+ {
75
+ id: "google-tasks",
76
+ name: "Google Tasks",
77
+ summary: "Task lists, task items, notes, and due dates.",
78
+ url: gd("tasks", "v1"),
79
+ icon: "https://fonts.gstatic.com/s/i/productlogos/tasks/v5/192px.svg",
80
+ oauthAudience: "standard-user"
81
+ },
82
+ {
83
+ id: "google-people",
84
+ name: "Google People",
85
+ summary: "Contacts, profiles, directory people, and contact groups.",
86
+ url: gd("people", "v1"),
87
+ icon: "https://fonts.gstatic.com/s/i/productlogos/contacts_2022/v2/192px.svg",
88
+ oauthAudience: "standard-user"
89
+ },
90
+ {
91
+ id: "google-chat",
92
+ name: "Google Chat",
93
+ summary: "Spaces, messages, members, reactions, and chat workflows.",
94
+ url: gd("chat", "v1"),
95
+ icon: "https://fonts.gstatic.com/s/i/productlogos/chat_2020q4/v8/192px.svg",
96
+ oauthAudience: "workspace-admin"
97
+ },
98
+ {
99
+ id: "google-keep",
100
+ name: "Google Keep",
101
+ summary: "Notes, lists, attachments, and annotations.",
102
+ url: "https://keep.googleapis.com/$discovery/rest?version=v1",
103
+ icon: "https://fonts.gstatic.com/s/i/productlogos/keep_2020q4/v8/192px.svg",
104
+ oauthAudience: "unsupported-user"
105
+ },
106
+ {
107
+ id: "google-youtube-data",
108
+ name: "YouTube Data",
109
+ summary: "Channels, playlists, videos, comments, and uploads.",
110
+ url: gd("youtube", "v3"),
111
+ icon: "https://fonts.gstatic.com/s/i/productlogos/youtube/v9/192px.svg",
112
+ oauthAudience: "advanced-user"
113
+ },
114
+ {
115
+ id: "google-search-console",
116
+ name: "Google Search Console",
117
+ summary: "Sites, sitemaps, URL inspection, and search performance.",
118
+ url: gd("searchconsole", "v1"),
119
+ icon: GOOGLE_G,
120
+ oauthAudience: "standard-user"
121
+ },
122
+ {
123
+ id: "google-classroom",
124
+ name: "Google Classroom",
125
+ summary: "Courses, rosters, coursework, and grading.",
126
+ url: gd("classroom", "v1"),
127
+ icon: "https://fonts.gstatic.com/s/i/productlogos/classroom/v7/192px.svg",
128
+ oauthAudience: "advanced-user"
129
+ },
130
+ {
131
+ id: "google-admin-directory",
132
+ name: "Google Admin Directory",
133
+ summary: "Users, groups, org units, roles, and domain resources.",
134
+ url: "https://admin.googleapis.com/$discovery/rest?version=directory_v1",
135
+ icon: "https://fonts.gstatic.com/s/i/productlogos/admin_2020q4/v6/192px.svg",
136
+ oauthAudience: "workspace-admin"
137
+ },
138
+ {
139
+ id: "google-admin-reports",
140
+ name: "Google Admin Reports",
141
+ summary: "Audit events, usage reports, and admin activity logs.",
142
+ url: "https://admin.googleapis.com/$discovery/rest?version=reports_v1",
143
+ icon: "https://fonts.gstatic.com/s/i/productlogos/admin_2020q4/v6/192px.svg",
144
+ oauthAudience: "workspace-admin"
145
+ },
146
+ {
147
+ id: "google-apps-script",
148
+ name: "Google Apps Script",
149
+ summary: "Projects, deployments, and script execution.",
150
+ url: gd("script", "v1"),
151
+ icon: "https://fonts.gstatic.com/s/i/productlogos/apps_script/v10/192px.svg",
152
+ oauthAudience: "advanced-user"
153
+ },
154
+ {
155
+ id: "google-bigquery",
156
+ name: "Google BigQuery",
157
+ summary: "Datasets, tables, jobs, and analytical queries.",
158
+ url: gd("bigquery", "v2"),
159
+ icon: "https://fonts.gstatic.com/s/i/productlogos/google_cloud/v6/192px.svg",
160
+ oauthAudience: "advanced-user"
161
+ },
162
+ {
163
+ id: "google-cloud-resource-manager",
164
+ name: "Google Cloud Resource Manager",
165
+ summary: "Projects, folders, organizations, and IAM hierarchy.",
166
+ url: "https://cloudresourcemanager.googleapis.com/$discovery/rest?version=v3",
167
+ icon: "https://fonts.gstatic.com/s/i/productlogos/google_cloud/v6/192px.svg",
168
+ oauthAudience: "advanced-user"
169
+ }
170
+ ];
171
+ var googleStandardUserOAuthPresets = googleOpenApiPresets.filter(
172
+ (preset) => preset.oauthAudience === "standard-user"
173
+ );
174
+ var googleOAuthConsentScopes = {
175
+ "google-calendar": ["https://www.googleapis.com/auth/calendar"],
176
+ "google-gmail": ["https://mail.google.com/"],
177
+ "google-sheets": ["https://www.googleapis.com/auth/spreadsheets"],
178
+ "google-drive": ["https://www.googleapis.com/auth/drive"],
179
+ "google-docs": ["https://www.googleapis.com/auth/documents"],
180
+ "google-slides": ["https://www.googleapis.com/auth/presentations"],
181
+ "google-forms": ["https://www.googleapis.com/auth/forms.body"],
182
+ "google-tasks": ["https://www.googleapis.com/auth/tasks"],
183
+ "google-people": ["https://www.googleapis.com/auth/contacts"],
184
+ "google-chat": ["https://www.googleapis.com/auth/chat.spaces"],
185
+ "google-keep": ["https://www.googleapis.com/auth/keep"],
186
+ "google-youtube-data": ["https://www.googleapis.com/auth/youtube"],
187
+ "google-search-console": ["https://www.googleapis.com/auth/webmasters"],
188
+ "google-classroom": ["https://www.googleapis.com/auth/classroom.courses"],
189
+ "google-admin-directory": ["https://www.googleapis.com/auth/admin.directory.user"],
190
+ "google-admin-reports": ["https://www.googleapis.com/auth/admin.reports.audit.readonly"],
191
+ "google-apps-script": ["https://www.googleapis.com/auth/script.projects"],
192
+ "google-bigquery": ["https://www.googleapis.com/auth/bigquery"],
193
+ "google-cloud-resource-manager": ["https://www.googleapis.com/auth/cloud-platform"]
194
+ };
195
+ var googleOAuthConsentScopesForPreset = (presetId) => googleOAuthConsentScopes[presetId] ?? [];
196
+ var normalizeGooglePresetUrl = (url) => {
197
+ const trimmed = url.trim();
198
+ if (!URL.canParse(trimmed)) return trimmed.replace(/\/$/, "");
199
+ const parsed = new URL(trimmed);
200
+ parsed.hash = "";
201
+ parsed.searchParams.sort();
202
+ return parsed.toString().replace(/\/$/, "");
203
+ };
204
+ var googlePresetsByNormalizedUrl = new Map(
205
+ googleOpenApiPresets.flatMap(
206
+ (preset) => preset.url ? [[normalizeGooglePresetUrl(preset.url), preset]] : []
207
+ )
208
+ );
209
+ var googlePresetForDiscoveryUrl = (url) => googlePresetsByNormalizedUrl.get(normalizeGooglePresetUrl(url));
210
+ var googleAudienceWarningsForUrls = (urls) => {
211
+ const seen = /* @__PURE__ */ new Set();
212
+ for (const url of urls) {
213
+ const audience = googlePresetForDiscoveryUrl(url)?.oauthAudience;
214
+ if (audience === "workspace-admin" || audience === "unsupported-user") seen.add(audience);
215
+ }
216
+ return [...seen];
217
+ };
218
+
219
+ export {
220
+ GOOGLE_BUNDLE_PRESET_ID,
221
+ googleOpenApiBundlePreset,
222
+ googleOpenApiPresets,
223
+ googleOAuthConsentScopesForPreset,
224
+ googleAudienceWarningsForUrls
225
+ };
226
+ //# sourceMappingURL=chunk-MZWZQ24W.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/sdk/google-presets.ts"],"sourcesContent":["import type { OpenApiPreset } from \"./presets\";\n\nexport type GoogleOpenApiOAuthAudience =\n | \"standard-user\"\n | \"advanced-user\"\n | \"workspace-admin\"\n | \"unsupported-user\";\n\nexport type GoogleOpenApiPreset = OpenApiPreset & {\n readonly oauthAudience: GoogleOpenApiOAuthAudience;\n};\n\nconst gd = (service: string, version: string) =>\n `https://www.googleapis.com/discovery/v1/apis/${service}/${version}/rest`;\n\nconst GOOGLE_G = \"https://fonts.gstatic.com/s/i/productlogos/googleg/v6/192px.svg\";\nexport const GOOGLE_BUNDLE_PRESET_ID = \"google\";\n\nexport const googleOpenApiBundlePreset: OpenApiPreset = {\n id: GOOGLE_BUNDLE_PRESET_ID,\n name: \"Google\",\n summary: \"Bundle Gmail, Calendar, Drive, Docs, and other Google APIs into one source.\",\n icon: GOOGLE_G,\n featured: true,\n};\n\nexport const googleOpenApiPresets: readonly GoogleOpenApiPreset[] = [\n {\n id: \"google-calendar\",\n name: \"Google Calendar\",\n summary: \"Calendars, events, ACLs, and scheduling.\",\n url: gd(\"calendar\", \"v3\"),\n icon: \"https://fonts.gstatic.com/s/i/productlogos/calendar_2020q4/v8/192px.svg\",\n featured: true,\n oauthAudience: \"standard-user\",\n },\n {\n id: \"google-gmail\",\n name: \"Gmail\",\n summary: \"Messages, threads, labels, and drafts.\",\n url: gd(\"gmail\", \"v1\"),\n icon: \"https://fonts.gstatic.com/s/i/productlogos/gmail_2020q4/v8/web-96dp/logo_gmail_2020q4_color_2x_web_96dp.png\",\n featured: true,\n oauthAudience: \"standard-user\",\n },\n {\n id: \"google-sheets\",\n name: \"Google Sheets\",\n summary: \"Spreadsheets, values, ranges, and formatting.\",\n url: gd(\"sheets\", \"v4\"),\n icon: \"https://fonts.gstatic.com/s/i/productlogos/sheets_2020q4/v8/192px.svg\",\n featured: true,\n oauthAudience: \"standard-user\",\n },\n {\n id: \"google-drive\",\n name: \"Google Drive\",\n summary: \"Files, folders, permissions, and shared drives.\",\n url: gd(\"drive\", \"v3\"),\n icon: \"https://fonts.gstatic.com/s/i/productlogos/drive_2020q4/v8/192px.svg\",\n featured: true,\n oauthAudience: \"standard-user\",\n },\n {\n id: \"google-docs\",\n name: \"Google Docs\",\n summary: \"Documents, structural edits, and formatting.\",\n url: gd(\"docs\", \"v1\"),\n icon: \"https://fonts.gstatic.com/s/i/productlogos/docs_2020q4/v12/192px.svg\",\n featured: true,\n oauthAudience: \"standard-user\",\n },\n {\n id: \"google-slides\",\n name: \"Google Slides\",\n summary: \"Presentations, slides, page elements, and deck updates.\",\n url: gd(\"slides\", \"v1\"),\n icon: \"https://fonts.gstatic.com/s/i/productlogos/slides_2020q4/v12/192px.svg\",\n oauthAudience: \"standard-user\",\n },\n {\n id: \"google-forms\",\n name: \"Google Forms\",\n summary: \"Forms, questions, responses, and quizzes.\",\n url: \"https://forms.googleapis.com/$discovery/rest?version=v1\",\n icon: \"https://fonts.gstatic.com/s/i/productlogos/forms_2020q4/v6/192px.svg\",\n oauthAudience: \"standard-user\",\n },\n {\n id: \"google-tasks\",\n name: \"Google Tasks\",\n summary: \"Task lists, task items, notes, and due dates.\",\n url: gd(\"tasks\", \"v1\"),\n icon: \"https://fonts.gstatic.com/s/i/productlogos/tasks/v5/192px.svg\",\n oauthAudience: \"standard-user\",\n },\n {\n id: \"google-people\",\n name: \"Google People\",\n summary: \"Contacts, profiles, directory people, and contact groups.\",\n url: gd(\"people\", \"v1\"),\n icon: \"https://fonts.gstatic.com/s/i/productlogos/contacts_2022/v2/192px.svg\",\n oauthAudience: \"standard-user\",\n },\n {\n id: \"google-chat\",\n name: \"Google Chat\",\n summary: \"Spaces, messages, members, reactions, and chat workflows.\",\n url: gd(\"chat\", \"v1\"),\n icon: \"https://fonts.gstatic.com/s/i/productlogos/chat_2020q4/v8/192px.svg\",\n oauthAudience: \"workspace-admin\",\n },\n {\n id: \"google-keep\",\n name: \"Google Keep\",\n summary: \"Notes, lists, attachments, and annotations.\",\n url: \"https://keep.googleapis.com/$discovery/rest?version=v1\",\n icon: \"https://fonts.gstatic.com/s/i/productlogos/keep_2020q4/v8/192px.svg\",\n oauthAudience: \"unsupported-user\",\n },\n {\n id: \"google-youtube-data\",\n name: \"YouTube Data\",\n summary: \"Channels, playlists, videos, comments, and uploads.\",\n url: gd(\"youtube\", \"v3\"),\n icon: \"https://fonts.gstatic.com/s/i/productlogos/youtube/v9/192px.svg\",\n oauthAudience: \"advanced-user\",\n },\n {\n id: \"google-search-console\",\n name: \"Google Search Console\",\n summary: \"Sites, sitemaps, URL inspection, and search performance.\",\n url: gd(\"searchconsole\", \"v1\"),\n icon: GOOGLE_G,\n oauthAudience: \"standard-user\",\n },\n {\n id: \"google-classroom\",\n name: \"Google Classroom\",\n summary: \"Courses, rosters, coursework, and grading.\",\n url: gd(\"classroom\", \"v1\"),\n icon: \"https://fonts.gstatic.com/s/i/productlogos/classroom/v7/192px.svg\",\n oauthAudience: \"advanced-user\",\n },\n {\n id: \"google-admin-directory\",\n name: \"Google Admin Directory\",\n summary: \"Users, groups, org units, roles, and domain resources.\",\n url: \"https://admin.googleapis.com/$discovery/rest?version=directory_v1\",\n icon: \"https://fonts.gstatic.com/s/i/productlogos/admin_2020q4/v6/192px.svg\",\n oauthAudience: \"workspace-admin\",\n },\n {\n id: \"google-admin-reports\",\n name: \"Google Admin Reports\",\n summary: \"Audit events, usage reports, and admin activity logs.\",\n url: \"https://admin.googleapis.com/$discovery/rest?version=reports_v1\",\n icon: \"https://fonts.gstatic.com/s/i/productlogos/admin_2020q4/v6/192px.svg\",\n oauthAudience: \"workspace-admin\",\n },\n {\n id: \"google-apps-script\",\n name: \"Google Apps Script\",\n summary: \"Projects, deployments, and script execution.\",\n url: gd(\"script\", \"v1\"),\n icon: \"https://fonts.gstatic.com/s/i/productlogos/apps_script/v10/192px.svg\",\n oauthAudience: \"advanced-user\",\n },\n {\n id: \"google-bigquery\",\n name: \"Google BigQuery\",\n summary: \"Datasets, tables, jobs, and analytical queries.\",\n url: gd(\"bigquery\", \"v2\"),\n icon: \"https://fonts.gstatic.com/s/i/productlogos/google_cloud/v6/192px.svg\",\n oauthAudience: \"advanced-user\",\n },\n {\n id: \"google-cloud-resource-manager\",\n name: \"Google Cloud Resource Manager\",\n summary: \"Projects, folders, organizations, and IAM hierarchy.\",\n url: \"https://cloudresourcemanager.googleapis.com/$discovery/rest?version=v3\",\n icon: \"https://fonts.gstatic.com/s/i/productlogos/google_cloud/v6/192px.svg\",\n oauthAudience: \"advanced-user\",\n },\n];\n\nexport const googleStandardUserOAuthPresets = googleOpenApiPresets.filter(\n (preset) => preset.oauthAudience === \"standard-user\",\n);\n\n// ---------------------------------------------------------------------------\n// Representative consent scopes per preset.\n//\n// The picker shows the OAuth consent a user is about to grant BEFORE connecting\n// (the \"View scopes\" panel), but the authoritative scope list only exists in\n// each API's live Discovery document — which the add flow fetches lazily at\n// `addSpec` time. To preview consent without N network round-trips, each preset\n// declares the broad top-level scope(s) a full integration grants. These flow\n// through `googleOAuthConsentBatches` (which compacts sub-scopes under their\n// broad parent), so the previewed grant matches the unioned scopes the bundle\n// converter ultimately stores. Grounded against each API's published Discovery\n// `auth.oauth2.scopes`.\n// ---------------------------------------------------------------------------\n\nexport const googleOAuthConsentScopes: Readonly<Record<string, readonly string[]>> = {\n \"google-calendar\": [\"https://www.googleapis.com/auth/calendar\"],\n \"google-gmail\": [\"https://mail.google.com/\"],\n \"google-sheets\": [\"https://www.googleapis.com/auth/spreadsheets\"],\n \"google-drive\": [\"https://www.googleapis.com/auth/drive\"],\n \"google-docs\": [\"https://www.googleapis.com/auth/documents\"],\n \"google-slides\": [\"https://www.googleapis.com/auth/presentations\"],\n \"google-forms\": [\"https://www.googleapis.com/auth/forms.body\"],\n \"google-tasks\": [\"https://www.googleapis.com/auth/tasks\"],\n \"google-people\": [\"https://www.googleapis.com/auth/contacts\"],\n \"google-chat\": [\"https://www.googleapis.com/auth/chat.spaces\"],\n \"google-keep\": [\"https://www.googleapis.com/auth/keep\"],\n \"google-youtube-data\": [\"https://www.googleapis.com/auth/youtube\"],\n \"google-search-console\": [\"https://www.googleapis.com/auth/webmasters\"],\n \"google-classroom\": [\"https://www.googleapis.com/auth/classroom.courses\"],\n \"google-admin-directory\": [\"https://www.googleapis.com/auth/admin.directory.user\"],\n \"google-admin-reports\": [\"https://www.googleapis.com/auth/admin.reports.audit.readonly\"],\n \"google-apps-script\": [\"https://www.googleapis.com/auth/script.projects\"],\n \"google-bigquery\": [\"https://www.googleapis.com/auth/bigquery\"],\n \"google-cloud-resource-manager\": [\"https://www.googleapis.com/auth/cloud-platform\"],\n};\n\nexport const googleOAuthConsentScopesForPreset = (presetId: string): readonly string[] =>\n googleOAuthConsentScopes[presetId] ?? [];\n\n// ---------------------------------------------------------------------------\n// Resolve a stored/normalized Discovery URL back to its preset, so a bundled\n// `google` integration can surface each selected API's `oauthAudience` (e.g. a\n// caution on a connection's auth method when admin-only or unsupported-consent\n// APIs are part of the bundle).\n// ---------------------------------------------------------------------------\n\nconst normalizeGooglePresetUrl = (url: string): string => {\n const trimmed = url.trim();\n if (!URL.canParse(trimmed)) return trimmed.replace(/\\/$/, \"\");\n const parsed = new URL(trimmed);\n parsed.hash = \"\";\n parsed.searchParams.sort();\n return parsed.toString().replace(/\\/$/, \"\");\n};\n\nconst googlePresetsByNormalizedUrl: ReadonlyMap<string, GoogleOpenApiPreset> = new Map(\n googleOpenApiPresets.flatMap((preset) =>\n preset.url ? [[normalizeGooglePresetUrl(preset.url), preset] as const] : [],\n ),\n);\n\nexport const googlePresetForDiscoveryUrl = (url: string): GoogleOpenApiPreset | undefined =>\n googlePresetsByNormalizedUrl.get(normalizeGooglePresetUrl(url));\n\n/** The distinct caution-tier audiences (`workspace-admin`, `unsupported-user`)\n * among the supplied Discovery URLs — the ones whose consent the user should be\n * warned about. Returns `[]` when every URL is a standard/advanced API. */\nexport const googleAudienceWarningsForUrls = (\n urls: readonly string[],\n): readonly GoogleOpenApiOAuthAudience[] => {\n const seen = new Set<GoogleOpenApiOAuthAudience>();\n for (const url of urls) {\n const audience = googlePresetForDiscoveryUrl(url)?.oauthAudience;\n if (audience === \"workspace-admin\" || audience === \"unsupported-user\") seen.add(audience);\n }\n return [...seen];\n};\n"],"mappings":"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","names":[]}