@every-app/sdk 0.3.0-rc.8 → 0.3.0

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 (146) hide show
  1. package/README.md +75 -74
  2. package/dist/cloudflare/catalogSettings.generated.d.ts +20 -6
  3. package/dist/cloudflare/catalogSettings.generated.d.ts.map +1 -1
  4. package/dist/cloudflare/catalogSettings.generated.js +45 -14
  5. package/dist/cloudflare/index.d.ts +1 -1
  6. package/dist/cloudflare/index.d.ts.map +1 -1
  7. package/dist/cloudflare/sentinel.d.ts +3 -0
  8. package/dist/cloudflare/sentinel.d.ts.map +1 -1
  9. package/dist/cloudflare/sentinel.js +10 -0
  10. package/dist/cloudflare/worker.d.ts +67 -23
  11. package/dist/cloudflare/worker.d.ts.map +1 -1
  12. package/dist/cloudflare/worker.js +68 -32
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/internal/aiDefault.d.ts +36 -79
  16. package/dist/internal/aiDefault.d.ts.map +1 -1
  17. package/dist/internal/aiDefault.js +47 -149
  18. package/dist/internal/aiProviders.d.ts +1 -1
  19. package/dist/internal/aiProviders.d.ts.map +1 -1
  20. package/dist/internal/aiProviders.js +2 -2
  21. package/dist/internal/appSettings.d.ts +140 -89
  22. package/dist/internal/appSettings.d.ts.map +1 -1
  23. package/dist/internal/appSettings.js +264 -156
  24. package/dist/internal/capabilities.d.ts +145 -503
  25. package/dist/internal/capabilities.d.ts.map +1 -1
  26. package/dist/internal/capabilities.js +29 -550
  27. package/dist/internal/catalog/commerce.js +1 -1
  28. package/dist/internal/catalog/comms.d.ts +37 -0
  29. package/dist/internal/catalog/comms.d.ts.map +1 -1
  30. package/dist/internal/catalog/comms.js +43 -0
  31. package/dist/internal/catalog/index.d.ts +72 -0
  32. package/dist/internal/catalog/index.d.ts.map +1 -1
  33. package/dist/internal/catalog/infra.d.ts +35 -0
  34. package/dist/internal/catalog/infra.d.ts.map +1 -1
  35. package/dist/internal/catalog/infra.js +65 -0
  36. package/dist/internal/devProviders.d.ts +1 -19
  37. package/dist/internal/devProviders.d.ts.map +1 -1
  38. package/dist/internal/devProviders.js +7 -1
  39. package/dist/internal/events.d.ts +52 -1
  40. package/dist/internal/events.d.ts.map +1 -1
  41. package/dist/internal/events.js +66 -2
  42. package/dist/internal/gatewaySettings.d.ts +6 -16
  43. package/dist/internal/gatewaySettings.d.ts.map +1 -1
  44. package/dist/internal/gatewaySettings.js +6 -24
  45. package/dist/internal/index.d.ts +1 -0
  46. package/dist/internal/index.d.ts.map +1 -1
  47. package/dist/internal/index.js +1 -0
  48. package/dist/internal/mcpOAuth.d.ts +210 -0
  49. package/dist/internal/mcpOAuth.d.ts.map +1 -0
  50. package/dist/internal/mcpOAuth.js +735 -0
  51. package/dist/internal/oauthClient.d.ts +7 -47
  52. package/dist/internal/oauthClient.d.ts.map +1 -1
  53. package/dist/internal/oauthClient.js +1 -115
  54. package/dist/internal/oauthPresets.d.ts +356 -20
  55. package/dist/internal/oauthPresets.d.ts.map +1 -1
  56. package/dist/internal/oauthPresets.js +183 -861
  57. package/dist/internal/oauthScopes.d.ts +43 -155
  58. package/dist/internal/oauthScopes.d.ts.map +1 -1
  59. package/dist/internal/oauthScopes.js +82 -475
  60. package/dist/internal/oauthSpec.d.ts +28 -71
  61. package/dist/internal/oauthSpec.d.ts.map +1 -1
  62. package/dist/internal/oauthSpec.js +172 -448
  63. package/dist/internal/protocol.d.ts +39 -15
  64. package/dist/internal/protocol.d.ts.map +1 -1
  65. package/dist/internal/protocol.js +40 -7
  66. package/dist/internal/providerApps.d.ts +2 -2
  67. package/dist/internal/providerApps.js +2 -2
  68. package/dist/internal/providerRegistry.d.ts +5 -64
  69. package/dist/internal/providerRegistry.d.ts.map +1 -1
  70. package/dist/internal/providerRegistry.js +19 -118
  71. package/dist/internal/providerSpec.d.ts.map +1 -1
  72. package/dist/internal/providerSpec.js +14 -36
  73. package/dist/internal/remoteMcp.d.ts +191 -47
  74. package/dist/internal/remoteMcp.d.ts.map +1 -1
  75. package/dist/internal/remoteMcp.js +338 -133
  76. package/dist/internal/signInProviders.d.ts +1 -1
  77. package/dist/internal/signInProviders.d.ts.map +1 -1
  78. package/dist/internal/tools.d.ts +15 -8
  79. package/dist/internal/tools.d.ts.map +1 -1
  80. package/dist/internal/tools.js +9 -8
  81. package/dist/manifest.d.ts +96 -28
  82. package/dist/manifest.d.ts.map +1 -1
  83. package/dist/manifest.js +1 -1
  84. package/dist/server/ai.d.ts +1 -93
  85. package/dist/server/ai.d.ts.map +1 -1
  86. package/dist/server/ai.js +17 -111
  87. package/dist/server/attribution.d.ts +10 -1
  88. package/dist/server/attribution.d.ts.map +1 -1
  89. package/dist/server/attribution.js +7 -1
  90. package/dist/server/connectUrl.d.ts +4 -9
  91. package/dist/server/connectUrl.d.ts.map +1 -1
  92. package/dist/server/connectUrl.js +17 -14
  93. package/dist/server/context.d.ts +12 -14
  94. package/dist/server/context.d.ts.map +1 -1
  95. package/dist/server/context.js +23 -25
  96. package/dist/server/emit.d.ts.map +1 -1
  97. package/dist/server/emit.js +2 -2
  98. package/dist/server/env.d.ts +3 -0
  99. package/dist/server/env.d.ts.map +1 -1
  100. package/dist/server/eventsEndpoint.d.ts +48 -0
  101. package/dist/server/eventsEndpoint.d.ts.map +1 -0
  102. package/dist/server/eventsEndpoint.js +145 -0
  103. package/dist/server/everyApp.d.ts +16 -26
  104. package/dist/server/everyApp.d.ts.map +1 -1
  105. package/dist/server/everyApp.js +22 -46
  106. package/dist/server/gatewayFetch.d.ts +19 -1
  107. package/dist/server/gatewayFetch.d.ts.map +1 -1
  108. package/dist/server/gatewayFetch.js +45 -3
  109. package/dist/server/index.d.ts +6 -9
  110. package/dist/server/index.d.ts.map +1 -1
  111. package/dist/server/index.js +4 -8
  112. package/dist/server/integrationFetch.d.ts +60 -72
  113. package/dist/server/integrationFetch.d.ts.map +1 -1
  114. package/dist/server/integrationFetch.js +124 -397
  115. package/dist/server/listMembers.d.ts.map +1 -1
  116. package/dist/server/listMembers.js +2 -2
  117. package/dist/server/refusal.d.ts +0 -9
  118. package/dist/server/refusal.d.ts.map +1 -1
  119. package/dist/server/refusal.js +0 -22
  120. package/dist/server/sendEmail.d.ts.map +1 -1
  121. package/dist/server/sendEmail.js +2 -2
  122. package/dist/server/tools.d.ts +17 -6
  123. package/dist/server/tools.d.ts.map +1 -1
  124. package/dist/server/tools.js +14 -4
  125. package/dist/server/toolsEndpoint.d.ts +2 -1
  126. package/dist/server/toolsEndpoint.d.ts.map +1 -1
  127. package/dist/server/toolsEndpoint.js +4 -3
  128. package/dist/server/webhooks.d.ts +56 -0
  129. package/dist/server/webhooks.d.ts.map +1 -0
  130. package/dist/server/webhooks.js +205 -0
  131. package/dist/testing/index.d.ts +2 -3
  132. package/dist/testing/index.d.ts.map +1 -1
  133. package/dist/testing/index.js +2 -6
  134. package/package.json +6 -1
  135. package/dist/server/aiBinding.d.ts +0 -68
  136. package/dist/server/aiBinding.d.ts.map +0 -1
  137. package/dist/server/aiBinding.js +0 -294
  138. package/dist/server/authorizeUrl.d.ts +0 -43
  139. package/dist/server/authorizeUrl.d.ts.map +0 -1
  140. package/dist/server/authorizeUrl.js +0 -106
  141. package/dist/server/emailBinding.d.ts +0 -72
  142. package/dist/server/emailBinding.d.ts.map +0 -1
  143. package/dist/server/emailBinding.js +0 -124
  144. package/dist/server/fromMcpTools.d.ts +0 -89
  145. package/dist/server/fromMcpTools.d.ts.map +0 -1
  146. package/dist/server/fromMcpTools.js +0 -192
@@ -48,7 +48,6 @@ const PROVIDER_GATEWAY_SETTINGS = [
48
48
  ].filter((name) => !INSTALL_OWNED.has(name));
49
49
  /** The Gateway's own optional settings `everyapp secret set` changes: nothing a provider reads. */
50
50
  export const GATEWAY_OWN_SETTINGS = [
51
- "AI_PROXY_EXTRA_ROUTES",
52
51
  // Email's providers: Cloudflare's REST token, Resend's key, the choice.
53
52
  "EMAIL_REST_API_TOKEN",
54
53
  "RESEND_API_KEY",
@@ -66,8 +65,6 @@ export const GATEWAY_OWN_SETTINGS = [
66
65
  "CLOUDFLARE_ACCESS_TEAM_DOMAIN",
67
66
  "CLOUDFLARE_ACCESS_AUD",
68
67
  "CLOUDFLARE_ACCESS_APPS_AUD",
69
- "CLOUDFLARE_ACCESS_AUTO_JOIN_DOMAINS",
70
- "CLOUDFLARE_ACCESS_OUTER_RING_AUTO_JOIN",
71
68
  "EMAIL_PASSWORD_SIGN_IN",
72
69
  // "false" keeps the hosted gateway's sign-up invite-only.
73
70
  "HOSTED_OPEN_SIGNUP",
@@ -75,7 +72,7 @@ export const GATEWAY_OWN_SETTINGS = [
75
72
  // gate, THIRD_PARTY_DEPLOYS, is never set from here: it is opened by
76
73
  // hand once the launch checks pass (docs/runbooks/hosted-install.md).
77
74
  "CF_DEPLOY_TOKEN",
78
- // Self-hosted browser installs are on by default; "off" opts out.
75
+ // Self-hosted Gateway app installs: off unless exactly "on" (everyapp deploy-token add).
79
76
  "BROWSER_APP_INSTALLS",
80
77
  "DISPATCH_NAMESPACE",
81
78
  "THIRD_PARTY_DOMAIN",
@@ -94,25 +91,13 @@ export const SETTABLE_GATEWAY_SETTINGS = [
94
91
  ];
95
92
  const SETTABLE = new Set(SETTABLE_GATEWAY_SETTINGS);
96
93
  /**
97
- * The credential names of remote MCP apps (`everyapp mcp add <url>`,
98
- * ./remoteMcp.ts): `<ID>_MCP_TOKEN` by default, any name ending in
99
- * `_MCP_TOKEN` by choice. A family rather than a list, so the names a
100
- * registry row declares at run time route to the Gateway like the fixed
101
- * names (`everyapp secret set` reads no registry to decide), an app's own
102
- * secret can never take one (the manifest validator refuses the family),
103
- * and a remote server can never be given a fixed provider key.
104
- */
105
- export const REMOTE_MCP_SECRET_PATTERN = /^[A-Z][A-Z0-9_]*_MCP_TOKEN$/;
106
- /** Whether `name` is a remote MCP app's credential name (`TREG_MCP_TOKEN`). */
107
- export function isRemoteMcpSecretName(name) {
108
- return REMOTE_MCP_SECRET_PATTERN.test(name);
109
- }
110
- /**
111
- * Whether `everyapp secret set <name>` changes the Gateway: one of the
112
- * fixed settings, or a remote MCP app's credential name.
94
+ * Whether `everyapp secret set <name>` changes the Gateway because the
95
+ * catalog or the Gateway itself reads it. A registered provider row's
96
+ * settings (a remote MCP app's `<APPID>_MCP_TOKEN` among them) are the
97
+ * registry's (`providerRegistry().settingNames()`), checked at run time.
113
98
  */
114
99
  export function isSettableGatewaySetting(name) {
115
- return SETTABLE.has(name) || isRemoteMcpSecretName(name);
100
+ return SETTABLE.has(name);
116
101
  }
117
102
  /**
118
103
  * Settable Gateway settings whose value is a plain word, address, list
@@ -126,7 +111,6 @@ export const PLAIN_GATEWAY_SETTINGS = [
126
111
  "EMAIL_FROM_NAME",
127
112
  "EMAIL_PROVIDER",
128
113
  "EMAIL_PASSWORD_SIGN_IN",
129
- "AI_PROXY_EXTRA_ROUTES",
130
114
  "MCP_OAUTH_ENABLED",
131
115
  "MCP_DCR_ENABLED",
132
116
  "MCP_ALLOWED_ORIGINS",
@@ -137,8 +121,6 @@ export const PLAIN_GATEWAY_SETTINGS = [
137
121
  "CLOUDFLARE_ACCESS_TEAM_DOMAIN",
138
122
  "CLOUDFLARE_ACCESS_AUD",
139
123
  "CLOUDFLARE_ACCESS_APPS_AUD",
140
- "CLOUDFLARE_ACCESS_AUTO_JOIN_DOMAINS",
141
- "CLOUDFLARE_ACCESS_OUTER_RING_AUTO_JOIN",
142
124
  "HOSTED_OPEN_SIGNUP",
143
125
  "BROWSER_APP_INSTALLS",
144
126
  "DISPATCH_NAMESPACE",
@@ -18,6 +18,7 @@ export * from "./audit.js";
18
18
  export * from "./providerSpec.js";
19
19
  export * from "./providerRegistry.js";
20
20
  export * from "./remoteMcp.js";
21
+ export * from "./mcpOAuth.js";
21
22
  export * from "./signInProviders.js";
22
23
  export * from "./devProviders.js";
23
24
  export { ConfigurationError, IdentityError, assertOrganizationPin, getIdentityFromRequest, parsePublicKeys, resolveVerifyOptions, verifyIdentity, verifyIdentityJwt, verifyPublicMarkerJwt, verifySystemJwt, type IdentityResult, type RequestIdentityOptions, type VerifiedIdentity, type VerifyOptions, } from "./identity.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/internal/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACrB,sBAAsB,EACtB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/internal/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACrB,sBAAsB,EACtB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,eAAe,CAAC"}
@@ -18,6 +18,7 @@ export * from "./audit.js";
18
18
  export * from "./providerSpec.js";
19
19
  export * from "./providerRegistry.js";
20
20
  export * from "./remoteMcp.js";
21
+ export * from "./mcpOAuth.js";
21
22
  export * from "./signInProviders.js";
22
23
  export * from "./devProviders.js";
23
24
  export { ConfigurationError, IdentityError, assertOrganizationPin, getIdentityFromRequest, parsePublicKeys, resolveVerifyOptions, verifyIdentity, verifyIdentityJwt, verifyPublicMarkerJwt, verifySystemJwt, } from "./identity.js";
@@ -0,0 +1,210 @@
1
+ /**
2
+ * OAuth to remote MCP servers (docs/design/2026-11-mcp-apps-auth.md, the
3
+ * MCP authorization spec): discovering a server's authorization server,
4
+ * registering a client with it, and the provider specs `everyapp mcp add`
5
+ * and the Gateway's "Add an MCP server" write for an app's own credential
6
+ * (`<appId>-mcp`, ./remoteMcp.ts). Pure apart from the injected `fetch`:
7
+ * the CLI runs it from the operator's machine, the Gateway in-process.
8
+ *
9
+ * Every fetch here is bounded the same way: https only, a public host
10
+ * (`publicHostProblem`, and no IP literal), the default port, no redirects
11
+ * followed (`redirect: "manual"`; a 3xx is a failure), at most
12
+ * {@link MCP_OAUTH_MAX_BODY} bytes of answer and {@link MCP_OAUTH_TIMEOUT_MS}
13
+ * per request. Nothing fetched here ever carries a credential except the
14
+ * registration request, which carries none either (RFC 7591's open
15
+ * registration).
16
+ *
17
+ * A client: the one the server registers for this Gateway (RFC 7591 DCR),
18
+ * else, for a server that registers none but takes OAuth client ID
19
+ * metadata documents (CIMD, `client_id_metadata_document_supported`), the
20
+ * URL of the document the Gateway serves about itself as the client id: a
21
+ * public client (PKCE, no secret) whose one redirect URI is the Gateway's
22
+ * callback for that app.
23
+ *
24
+ * Discovery (RFC 9728, then RFC 8414 / OpenID discovery):
25
+ * 1. the protected resource metadata: `resourceMetadataUrl` (the 401's
26
+ * `resource_metadata`) when given, else
27
+ * `<origin>/.well-known/oauth-protected-resource<path>`, then
28
+ * `<origin>/.well-known/oauth-protected-resource`. Its `resource` must
29
+ * be the MCP URL or a path prefix of it on the same origin;
30
+ * `authorization_servers[0]` is the issuer.
31
+ * 2. the issuer's metadata: `/.well-known/oauth-authorization-server`
32
+ * path-inserted, then `/.well-known/openid-configuration` path-inserted
33
+ * and path-appended. `issuer` must be the one asked for; PKCE S256
34
+ * must be supported.
35
+ * 3. a server without resource metadata (the 2025-03-26 spec): the
36
+ * authorization server metadata at the MCP URL's origin.
37
+ */
38
+ import type { OAuthClientInjection } from "./capabilities.js";
39
+ import { type RemoteMcpStaticKind } from "./remoteMcp.js";
40
+ /** The largest answer a discovery or registration fetch reads: 64 KiB. */
41
+ export declare const MCP_OAUTH_MAX_BODY: number;
42
+ /** How long one discovery or registration fetch may take. */
43
+ export declare const MCP_OAUTH_TIMEOUT_MS = 10000;
44
+ /** The fetch this module is given (the global one, or a test's). */
45
+ export type McpOAuthFetch = (input: string, init: RequestInit) => Promise<Response>;
46
+ /** What a `WWW-Authenticate: Bearer …` challenge says (RFC 6750, RFC 9728 section 5.1). */
47
+ export interface McpBearerChallenge {
48
+ /** `resource_metadata`: where the protected resource metadata is. */
49
+ resourceMetadata?: string;
50
+ /** `scope`: the scopes the server wants for the request, space-separated. */
51
+ scope?: string;
52
+ /** `error`: `invalid_token`, `insufficient_scope`, … */
53
+ error?: string;
54
+ }
55
+ /**
56
+ * The Bearer challenge of a `WWW-Authenticate` header, or null when the
57
+ * header carries none. Reads several challenges in one header
58
+ * (`Basic realm="x", Bearer resource_metadata="…"`), quoted and bare
59
+ * values, and parameter names in any case.
60
+ */
61
+ export declare function parseWwwAuthenticate(header: string | null | undefined): McpBearerChallenge | null;
62
+ /** What discovery found: everything the synthesized OAuth row needs. */
63
+ export interface McpOAuthDiscovery {
64
+ /** The protected resource (RFC 8707 `resource`): the metadata's `resource`, or the MCP URL for a server without metadata. */
65
+ resource: string;
66
+ /** The authorization server's issuer, as its metadata spells it (what `iss` must equal). */
67
+ issuer: string;
68
+ authorizationEndpoint: string;
69
+ tokenEndpoint: string;
70
+ registrationEndpoint?: string;
71
+ revocationEndpoint?: string;
72
+ /** The scopes to ask for: the challenge's `scope`, else the resource's `scopes_supported`, else none. */
73
+ scopes: string[];
74
+ /** The resource's `scopes_supported`, every one a token may carry. */
75
+ supportedScopes?: string[];
76
+ /** `token_endpoint_auth_methods_supported`, `["client_secret_basic"]` when the server says nothing (RFC 8414's default). */
77
+ tokenEndpointAuthMethods: string[];
78
+ /** Whether the server had protected resource metadata (false: the 2025-03-26 fallback). */
79
+ resourceMetadata: boolean;
80
+ /** Whether the authorization server takes a client metadata document's URL as a client id (CIMD). */
81
+ clientIdMetadataDocument?: boolean;
82
+ }
83
+ export type McpOAuthDiscoveryResult = {
84
+ ok: true;
85
+ discovery: McpOAuthDiscovery;
86
+ } | {
87
+ ok: false;
88
+ problem: string;
89
+ };
90
+ /** Why `url` can't be fetched by discovery, or null when it can. */
91
+ export declare function mcpOAuthUrlProblem(url: string, { query }?: {
92
+ query?: boolean;
93
+ }): string | null;
94
+ /**
95
+ * Find how `url`'s MCP server takes OAuth: its protected resource, its
96
+ * authorization server, the endpoints, the scopes to ask for and the
97
+ * client authentication it accepts. Refuses (with the reason) anything
98
+ * the Gateway would not run: no PKCE S256, a resource that isn't this
99
+ * server, metadata naming another issuer, an endpoint off https or on a
100
+ * private host, a redirect anywhere.
101
+ */
102
+ export declare function discoverMcpOAuth(input: {
103
+ url: string;
104
+ fetch: McpOAuthFetch;
105
+ /** The 401's `resource_metadata` ({@link parseWwwAuthenticate}). */
106
+ resourceMetadataUrl?: string | null;
107
+ /** The 401's `scope`, asked for ahead of `scopes_supported`. */
108
+ scope?: string | null;
109
+ }): Promise<McpOAuthDiscoveryResult>;
110
+ export type McpClientRegistration = {
111
+ ok: true;
112
+ clientId: string;
113
+ clientSecret?: string;
114
+ /** Where the client goes on the token request: HTTP Basic, or the form body. */
115
+ inject: OAuthClientInjection;
116
+ /** The method the server registered (`client_secret_basic`, `client_secret_post`, `none`). */
117
+ authMethod: string;
118
+ } | {
119
+ ok: false;
120
+ problem: string;
121
+ /** The server offers no registration endpoint: a client must be pasted. */
122
+ unsupported?: boolean;
123
+ };
124
+ /** The token endpoint auth method to ask for: Basic when offered, else the form, else a public client. */
125
+ export declare function chooseTokenEndpointAuthMethod(supported: readonly string[]): "client_secret_basic" | "client_secret_post" | "none" | null;
126
+ /**
127
+ * Register a client with the server's authorization server (RFC 7591
128
+ * dynamic client registration): the Gateway's callback as the one
129
+ * redirect URI, the authorization-code and refresh grants, and the token
130
+ * endpoint auth method {@link chooseTokenEndpointAuthMethod} picks. Reads
131
+ * back what the server registered: its method decides `inject`.
132
+ */
133
+ export declare function registerMcpClient(input: {
134
+ discovery: McpOAuthDiscovery;
135
+ redirectUri: string;
136
+ clientName: string;
137
+ fetch: McpOAuthFetch;
138
+ }): Promise<McpClientRegistration>;
139
+ /**
140
+ * The client metadata document the Gateway serves at `clientId` (CIMD):
141
+ * a public client (`token_endpoint_auth_method: none`, so PKCE is its
142
+ * proof) with the Gateway's callback for the app as its one redirect URI.
143
+ */
144
+ export declare function mcpClientMetadataDocument(input: {
145
+ clientId: string;
146
+ redirectUri: string;
147
+ clientName: string;
148
+ clientUri: string;
149
+ }): Record<string, unknown>;
150
+ /**
151
+ * A client for the Gateway at the server: the one it registers (RFC 7591),
152
+ * else, when it registers none, the Gateway's client metadata document's
153
+ * URL (`documentUrl`, null for a Gateway not on https) where the server
154
+ * takes CIMD and public clients. `unsupported` when neither can be had: a
155
+ * client must be registered by hand and pasted.
156
+ */
157
+ export declare function obtainMcpClient(input: {
158
+ discovery: McpOAuthDiscovery;
159
+ redirectUri: string;
160
+ clientName: string;
161
+ documentUrl: string | null;
162
+ fetch: McpOAuthFetch;
163
+ }): Promise<McpClientRegistration & {
164
+ via?: "dcr" | "cimd";
165
+ }>;
166
+ /** A built spec, checked by `parseProviderSpec`, or why it can't be. */
167
+ export type McpProviderSpecResult = {
168
+ ok: true;
169
+ id: string;
170
+ spec: Record<string, unknown>;
171
+ } | {
172
+ ok: false;
173
+ problem: string;
174
+ };
175
+ /**
176
+ * The `oauth2-user` spec of an app's own OAuth row (`<appId>-mcp`): the
177
+ * MCP URL's host as its one API host (the token goes there and nowhere
178
+ * else), the discovered endpoints, the client in `<APPID>_MCP_CLIENT_ID`
179
+ * (and `_SECRET` for a confidential client), PKCE, the `resource` and
180
+ * `issuer`. The scopes the connect asks for are the app's (its manifest's
181
+ * entry, from discovery); the ones the server says it supports are
182
+ * tolerated on a token.
183
+ */
184
+ export declare function mcpOAuthProviderSpec(input: {
185
+ appId: string;
186
+ name: string;
187
+ url: string;
188
+ discovery: McpOAuthDiscovery;
189
+ client: {
190
+ hasSecret: boolean;
191
+ inject: OAuthClientInjection;
192
+ };
193
+ }): McpProviderSpecResult;
194
+ /**
195
+ * The API-key spec of an app's own static credential (`<appId>-mcp`): the
196
+ * MCP URL's host as its one host, the value in `<APPID>_MCP_TOKEN`, placed
197
+ * as `kind` says: `Authorization: Bearer` (or `<prefix>` as the scheme),
198
+ * a header (`header`, `prefix`), a query parameter (`param`), or HTTP
199
+ * Basic with the value as `user:password`.
200
+ */
201
+ export declare function mcpStaticProviderSpec(input: {
202
+ appId: string;
203
+ name: string;
204
+ url: string;
205
+ kind: RemoteMcpStaticKind;
206
+ header?: string | null;
207
+ prefix?: string | null;
208
+ param?: string | null;
209
+ }): McpProviderSpecResult;
210
+ //# sourceMappingURL=mcpOAuth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpOAuth.d.ts","sourceRoot":"","sources":["../../src/internal/mcpOAuth.ts"],"names":[],"mappings":"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"}