@kya-os/mcp-i-cloudflare 1.5.10-canary.9 → 1.6.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.
- package/README.md +130 -0
- package/dist/__tests__/e2e/test-config.d.ts +37 -0
- package/dist/__tests__/e2e/test-config.d.ts.map +1 -0
- package/dist/__tests__/e2e/test-config.js +62 -0
- package/dist/__tests__/e2e/test-config.js.map +1 -0
- package/dist/adapter.d.ts +44 -1
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +712 -112
- package/dist/adapter.js.map +1 -1
- package/dist/agent.d.ts +117 -25
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +664 -40
- package/dist/agent.js.map +1 -1
- package/dist/app.d.ts +0 -8
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +348 -119
- package/dist/app.js.map +1 -1
- package/dist/cache/kv-oauth-config-cache.d.ts +47 -0
- package/dist/cache/kv-oauth-config-cache.d.ts.map +1 -0
- package/dist/cache/kv-oauth-config-cache.js +82 -0
- package/dist/cache/kv-oauth-config-cache.js.map +1 -0
- package/dist/cache/kv-tool-protection-cache.d.ts +26 -1
- package/dist/cache/kv-tool-protection-cache.d.ts.map +1 -1
- package/dist/cache/kv-tool-protection-cache.js +19 -11
- package/dist/cache/kv-tool-protection-cache.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +39 -14
- package/dist/config.js.map +1 -1
- package/dist/helpers/env-mapper.d.ts +60 -1
- package/dist/helpers/env-mapper.d.ts.map +1 -1
- package/dist/helpers/env-mapper.js +136 -6
- package/dist/helpers/env-mapper.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -3
- package/dist/index.js.map +1 -1
- package/dist/runtime/audit-logger.d.ts +96 -0
- package/dist/runtime/audit-logger.d.ts.map +1 -0
- package/dist/runtime/audit-logger.js +276 -0
- package/dist/runtime/audit-logger.js.map +1 -0
- package/dist/runtime/oauth-handler.d.ts +5 -0
- package/dist/runtime/oauth-handler.d.ts.map +1 -1
- package/dist/runtime/oauth-handler.js +287 -35
- package/dist/runtime/oauth-handler.js.map +1 -1
- package/dist/runtime.d.ts +12 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +34 -4
- package/dist/runtime.js.map +1 -1
- package/dist/server.d.ts +7 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +120 -29
- package/dist/server.js.map +1 -1
- package/dist/services/admin.service.d.ts +1 -3
- package/dist/services/admin.service.d.ts.map +1 -1
- package/dist/services/admin.service.js +175 -146
- package/dist/services/admin.service.js.map +1 -1
- package/dist/services/consent-audit.service.d.ts +91 -0
- package/dist/services/consent-audit.service.d.ts.map +1 -0
- package/dist/services/consent-audit.service.js +243 -0
- package/dist/services/consent-audit.service.js.map +1 -0
- package/dist/services/consent-config.service.d.ts +2 -2
- package/dist/services/consent-config.service.d.ts.map +1 -1
- package/dist/services/consent-config.service.js +55 -28
- package/dist/services/consent-config.service.js.map +1 -1
- package/dist/services/consent-page-renderer.d.ts +14 -0
- package/dist/services/consent-page-renderer.d.ts.map +1 -1
- package/dist/services/consent-page-renderer.js +54 -27
- package/dist/services/consent-page-renderer.js.map +1 -1
- package/dist/services/consent.service.d.ts +93 -8
- package/dist/services/consent.service.d.ts.map +1 -1
- package/dist/services/consent.service.js +1817 -553
- package/dist/services/consent.service.js.map +1 -1
- package/dist/services/delegation.service.d.ts.map +1 -1
- package/dist/services/delegation.service.js +67 -29
- package/dist/services/delegation.service.js.map +1 -1
- package/dist/services/idp-token-storage.d.ts +68 -0
- package/dist/services/idp-token-storage.d.ts.map +1 -0
- package/dist/services/idp-token-storage.js +157 -0
- package/dist/services/idp-token-storage.js.map +1 -0
- package/dist/services/oauth-service.d.ts +66 -0
- package/dist/services/oauth-service.d.ts.map +1 -0
- package/dist/services/oauth-service.js +223 -0
- package/dist/services/oauth-service.js.map +1 -0
- package/dist/services/proof.service.d.ts +8 -6
- package/dist/services/proof.service.d.ts.map +1 -1
- package/dist/services/proof.service.js +131 -75
- package/dist/services/proof.service.js.map +1 -1
- package/dist/services/tool-context-builder.d.ts +55 -0
- package/dist/services/tool-context-builder.d.ts.map +1 -0
- package/dist/services/tool-context-builder.js +124 -0
- package/dist/services/tool-context-builder.js.map +1 -0
- package/dist/types/tool-context.d.ts +35 -0
- package/dist/types/tool-context.d.ts.map +1 -0
- package/dist/types/tool-context.js +13 -0
- package/dist/types/tool-context.js.map +1 -0
- package/dist/types.d.ts +31 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/oauth-service-registry.d.ts +65 -0
- package/dist/utils/oauth-service-registry.d.ts.map +1 -0
- package/dist/utils/oauth-service-registry.js +125 -0
- package/dist/utils/oauth-service-registry.js.map +1 -0
- package/package.json +27 -60
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-context-builder.js","sourceRoot":"","sources":["../../src/services/tool-context-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Execution Context
|
|
3
|
+
*
|
|
4
|
+
* Execution context passed to tool handlers, enabling tools to access
|
|
5
|
+
* IDP tokens for external API calls (GitHub, Google, etc.).
|
|
6
|
+
*
|
|
7
|
+
* All fields are optional for backward compatibility - tools that don't
|
|
8
|
+
* require OAuth will receive undefined context.
|
|
9
|
+
*
|
|
10
|
+
* @package @kya-os/mcp-i-cloudflare
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Execution context passed to tool handlers
|
|
14
|
+
*
|
|
15
|
+
* Enables tools to access IDP tokens for external API calls.
|
|
16
|
+
* Context is only provided when:
|
|
17
|
+
* - Tool requires OAuth (has requiredScopes)
|
|
18
|
+
* - User DID is available
|
|
19
|
+
* - IDP token is successfully resolved
|
|
20
|
+
*/
|
|
21
|
+
export interface ToolExecutionContext {
|
|
22
|
+
/** IDP access token for external API calls (e.g., GitHub, Google) */
|
|
23
|
+
idpToken?: string;
|
|
24
|
+
/** OAuth provider name (e.g., "github", "google") */
|
|
25
|
+
provider?: string;
|
|
26
|
+
/** Scopes granted for this token */
|
|
27
|
+
scopes?: string[];
|
|
28
|
+
/** User DID associated with this token */
|
|
29
|
+
userDid?: string;
|
|
30
|
+
/** Session ID */
|
|
31
|
+
sessionId?: string;
|
|
32
|
+
/** Delegation token (MCP-I internal authorization) */
|
|
33
|
+
delegationToken?: string;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=tool-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-context.d.ts","sourceRoot":"","sources":["../../src/types/tool-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB;IACnC,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAElB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,sDAAsD;IACtD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Execution Context
|
|
3
|
+
*
|
|
4
|
+
* Execution context passed to tool handlers, enabling tools to access
|
|
5
|
+
* IDP tokens for external API calls (GitHub, Google, etc.).
|
|
6
|
+
*
|
|
7
|
+
* All fields are optional for backward compatibility - tools that don't
|
|
8
|
+
* require OAuth will receive undefined context.
|
|
9
|
+
*
|
|
10
|
+
* @package @kya-os/mcp-i-cloudflare
|
|
11
|
+
*/
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=tool-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-context.js","sourceRoot":"","sources":["../../src/types/tool-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
|
package/dist/types.d.ts
CHANGED
|
@@ -3,15 +3,42 @@
|
|
|
3
3
|
*
|
|
4
4
|
* These types are separated to avoid circular dependencies.
|
|
5
5
|
*/
|
|
6
|
-
import type { KVNamespace, DurableObjectState } from
|
|
6
|
+
import type { KVNamespace, DurableObjectState } from '@cloudflare/workers-types';
|
|
7
7
|
/**
|
|
8
8
|
* Cloudflare environment bindings for MCP-I
|
|
9
|
+
*
|
|
10
|
+
* This is the normalized format after prefix mapping. All components expect
|
|
11
|
+
* this format with standard KV binding names (e.g., `NONCE_CACHE`, not `_17429_NONCE_CACHE`).
|
|
12
|
+
*
|
|
13
|
+
* To handle prefixed KV bindings (required for multi-agent deployments in the same account),
|
|
14
|
+
* use `normalizeCloudflareEnv()` from `@kya-os/mcp-i-cloudflare/helpers/env-mapper` before
|
|
15
|
+
* passing the environment to components.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* import { normalizeCloudflareEnv } from '@kya-os/mcp-i-cloudflare/helpers/env-mapper';
|
|
20
|
+
*
|
|
21
|
+
* // With prefixed bindings
|
|
22
|
+
* const env = { _17429_NONCE_CACHE: kvNamespace };
|
|
23
|
+
* const normalized = normalizeCloudflareEnv(env, '_17429');
|
|
24
|
+
* // normalized.NONCE_CACHE is now available
|
|
25
|
+
*
|
|
26
|
+
* // Without prefix (direct access)
|
|
27
|
+
* const env2 = { NONCE_CACHE: kvNamespace };
|
|
28
|
+
* const normalized2 = normalizeCloudflareEnv(env2);
|
|
29
|
+
* // normalized2.NONCE_CACHE is available
|
|
30
|
+
* ```
|
|
9
31
|
*/
|
|
10
32
|
export interface CloudflareEnv {
|
|
33
|
+
/** KV namespace for nonce cache (required for replay attack prevention) */
|
|
11
34
|
NONCE_CACHE: KVNamespace;
|
|
35
|
+
/** KV namespace for proof archive (optional, for auditability) */
|
|
12
36
|
PROOF_ARCHIVE?: KVNamespace;
|
|
37
|
+
/** KV namespace for identity storage (optional, for persistent agent identity) */
|
|
13
38
|
IDENTITY_STORAGE?: KVNamespace;
|
|
39
|
+
/** KV namespace for tool protection config cache (optional, for dashboard-controlled delegation) */
|
|
14
40
|
TOOL_PROTECTION_KV?: KVNamespace;
|
|
41
|
+
/** KV namespace for delegation storage (required for OAuth/delegation flows) */
|
|
15
42
|
DELEGATION_STORAGE?: KVNamespace;
|
|
16
43
|
MCP_IDENTITY_PRIVATE_KEY?: string;
|
|
17
44
|
MCP_IDENTITY_PUBLIC_KEY?: string;
|
|
@@ -20,10 +47,12 @@ export interface CloudflareEnv {
|
|
|
20
47
|
AGENTSHIELD_API_URL?: string;
|
|
21
48
|
AGENTSHIELD_API_KEY?: string;
|
|
22
49
|
AGENTSHIELD_PROJECT_ID?: string;
|
|
50
|
+
/** Optional encryption secret for OAuth token encryption (CSRF protection) */
|
|
51
|
+
OAUTH_ENCRYPTION_SECRET?: string;
|
|
23
52
|
MCPI_ENV?: string;
|
|
24
53
|
ENVIRONMENT?: string;
|
|
25
54
|
ADMIN_API_KEY?: string;
|
|
55
|
+
/** Optional Durable Object state for identity persistence */
|
|
26
56
|
_durableObjectState?: DurableObjectState;
|
|
27
57
|
}
|
|
28
|
-
export type { MCPICloudflareAdapterConfig } from "./adapter";
|
|
29
58
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEjF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,WAAW,EAAE,WAAW,CAAC;IACzB,kEAAkE;IAClE,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,kFAAkF;IAClF,gBAAgB,CAAC,EAAE,WAAW,CAAC;IAC/B,oGAAoG;IACpG,kBAAkB,CAAC,EAAE,WAAW,CAAC;IACjC,gFAAgF;IAChF,kBAAkB,CAAC,EAAE,WAAW,CAAC;IACjC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,8EAA8E;IAC9E,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,mBAAmB,CAAC,EAAE,kBAAkB,CAAC;CAC1C"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth Service Registry - Centralized tree-shaking prevention
|
|
3
|
+
*
|
|
4
|
+
* This module solves a critical bundling issue with Cloudflare Workers:
|
|
5
|
+
* Wrangler uses esbuild which aggressively tree-shakes imports that are
|
|
6
|
+
* only used inside async functions with conditional execution.
|
|
7
|
+
*
|
|
8
|
+
* Solution: Register OAuth services on globalThis at module load time,
|
|
9
|
+
* creating an observable side effect that esbuild cannot eliminate.
|
|
10
|
+
*
|
|
11
|
+
* @module oauth-service-registry
|
|
12
|
+
* @see https://esbuild.github.io/api/#tree-shaking
|
|
13
|
+
*/
|
|
14
|
+
import { OAuthConfigService, OAuthProviderRegistry, ProviderResolver } from "@kya-os/mcp-i-core";
|
|
15
|
+
/**
|
|
16
|
+
* Type definition for the OAuth services registry
|
|
17
|
+
*/
|
|
18
|
+
export interface OAuthServicesRegistry {
|
|
19
|
+
OAuthConfigService: typeof OAuthConfigService;
|
|
20
|
+
OAuthProviderRegistry: typeof OAuthProviderRegistry;
|
|
21
|
+
ProviderResolver: typeof ProviderResolver;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Error thrown when OAuth services are not available
|
|
25
|
+
*/
|
|
26
|
+
export declare class OAuthServicesUnavailableError extends Error {
|
|
27
|
+
constructor(serviceName: string);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get OAuth services from the global registry
|
|
31
|
+
*
|
|
32
|
+
* This is the primary API for retrieving OAuth services.
|
|
33
|
+
* It retrieves services that were registered on globalThis at module load,
|
|
34
|
+
* ensuring they survive esbuild's tree-shaking.
|
|
35
|
+
*
|
|
36
|
+
* @returns The OAuth services registry containing all constructors
|
|
37
|
+
* @throws {OAuthServicesUnavailableError} If services are not registered
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* const { OAuthConfigService, OAuthProviderRegistry } = getOAuthServices();
|
|
42
|
+
* const configService = new OAuthConfigService({ ... });
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function getOAuthServices(): OAuthServicesRegistry;
|
|
46
|
+
/**
|
|
47
|
+
* Check if OAuth services are available without throwing
|
|
48
|
+
*
|
|
49
|
+
* Useful for conditional initialization where missing services
|
|
50
|
+
* should be handled gracefully rather than throwing.
|
|
51
|
+
*
|
|
52
|
+
* @returns true if all OAuth services are registered and valid
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* if (isOAuthServicesAvailable()) {
|
|
57
|
+
* const services = getOAuthServices();
|
|
58
|
+
* // Initialize OAuth functionality
|
|
59
|
+
* } else {
|
|
60
|
+
* console.warn("OAuth services not available");
|
|
61
|
+
* }
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export declare function isOAuthServicesAvailable(): boolean;
|
|
65
|
+
//# sourceMappingURL=oauth-service-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-service-registry.d.ts","sourceRoot":"","sources":["../../src/utils/oauth-service-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAQ5B;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;IAC9C,qBAAqB,EAAE,OAAO,qBAAqB,CAAC;IACpD,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;CAC3C;AA6CD;;GAEG;AACH,qBAAa,6BAA8B,SAAQ,KAAK;gBAC1C,WAAW,EAAE,MAAM;CAQhC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,IAAI,qBAAqB,CAqBxD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,wBAAwB,IAAI,OAAO,CAelD"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth Service Registry - Centralized tree-shaking prevention
|
|
3
|
+
*
|
|
4
|
+
* This module solves a critical bundling issue with Cloudflare Workers:
|
|
5
|
+
* Wrangler uses esbuild which aggressively tree-shakes imports that are
|
|
6
|
+
* only used inside async functions with conditional execution.
|
|
7
|
+
*
|
|
8
|
+
* Solution: Register OAuth services on globalThis at module load time,
|
|
9
|
+
* creating an observable side effect that esbuild cannot eliminate.
|
|
10
|
+
*
|
|
11
|
+
* @module oauth-service-registry
|
|
12
|
+
* @see https://esbuild.github.io/api/#tree-shaking
|
|
13
|
+
*/
|
|
14
|
+
import { OAuthConfigService, OAuthProviderRegistry, ProviderResolver, } from "@kya-os/mcp-i-core";
|
|
15
|
+
/**
|
|
16
|
+
* Global registry key for OAuth services
|
|
17
|
+
* Using a unique symbol-like string to avoid collisions
|
|
18
|
+
*/
|
|
19
|
+
const REGISTRY_KEY = "__MCPI_OAUTH_SERVICES__";
|
|
20
|
+
/**
|
|
21
|
+
* The services object containing all OAuth-related constructors
|
|
22
|
+
* This is created at module load time to ensure bundler inclusion
|
|
23
|
+
*/
|
|
24
|
+
const _oauthServices = {
|
|
25
|
+
OAuthConfigService,
|
|
26
|
+
OAuthProviderRegistry,
|
|
27
|
+
ProviderResolver,
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* CRITICAL: Register on globalThis at module load
|
|
31
|
+
*
|
|
32
|
+
* This creates an observable side effect that esbuild cannot optimize away.
|
|
33
|
+
* The write to globalThis MUST happen for the program to work correctly,
|
|
34
|
+
* so esbuild will include all the OAuth service classes in the bundle.
|
|
35
|
+
*/
|
|
36
|
+
globalThis[REGISTRY_KEY] = _oauthServices;
|
|
37
|
+
/**
|
|
38
|
+
* Validate registration succeeded
|
|
39
|
+
* Logs errors at module load if services are missing (indicates bundler issue)
|
|
40
|
+
*/
|
|
41
|
+
const _registeredServices = globalThis[REGISTRY_KEY];
|
|
42
|
+
if (!_registeredServices?.OAuthConfigService) {
|
|
43
|
+
console.error("[OAuthServiceRegistry] CRITICAL: OAuthConfigService not registered - bundler issue");
|
|
44
|
+
}
|
|
45
|
+
if (!_registeredServices?.OAuthProviderRegistry) {
|
|
46
|
+
console.error("[OAuthServiceRegistry] CRITICAL: OAuthProviderRegistry not registered - bundler issue");
|
|
47
|
+
}
|
|
48
|
+
if (!_registeredServices?.ProviderResolver) {
|
|
49
|
+
console.error("[OAuthServiceRegistry] CRITICAL: ProviderResolver not registered - bundler issue");
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Error thrown when OAuth services are not available
|
|
53
|
+
*/
|
|
54
|
+
export class OAuthServicesUnavailableError extends Error {
|
|
55
|
+
constructor(serviceName) {
|
|
56
|
+
super(`${serviceName} not available from OAuth service registry. ` +
|
|
57
|
+
`This indicates a bundler tree-shaking issue. ` +
|
|
58
|
+
`The globalThis registration should have happened at module load.`);
|
|
59
|
+
this.name = "OAuthServicesUnavailableError";
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get OAuth services from the global registry
|
|
64
|
+
*
|
|
65
|
+
* This is the primary API for retrieving OAuth services.
|
|
66
|
+
* It retrieves services that were registered on globalThis at module load,
|
|
67
|
+
* ensuring they survive esbuild's tree-shaking.
|
|
68
|
+
*
|
|
69
|
+
* @returns The OAuth services registry containing all constructors
|
|
70
|
+
* @throws {OAuthServicesUnavailableError} If services are not registered
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* const { OAuthConfigService, OAuthProviderRegistry } = getOAuthServices();
|
|
75
|
+
* const configService = new OAuthConfigService({ ... });
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export function getOAuthServices() {
|
|
79
|
+
const services = globalThis[REGISTRY_KEY];
|
|
80
|
+
if (!services) {
|
|
81
|
+
throw new OAuthServicesUnavailableError("OAuth services registry");
|
|
82
|
+
}
|
|
83
|
+
// Validate each service is a constructor
|
|
84
|
+
if (typeof services.OAuthConfigService !== "function") {
|
|
85
|
+
throw new OAuthServicesUnavailableError("OAuthConfigService");
|
|
86
|
+
}
|
|
87
|
+
if (typeof services.OAuthProviderRegistry !== "function") {
|
|
88
|
+
throw new OAuthServicesUnavailableError("OAuthProviderRegistry");
|
|
89
|
+
}
|
|
90
|
+
if (typeof services.ProviderResolver !== "function") {
|
|
91
|
+
throw new OAuthServicesUnavailableError("ProviderResolver");
|
|
92
|
+
}
|
|
93
|
+
return services;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Check if OAuth services are available without throwing
|
|
97
|
+
*
|
|
98
|
+
* Useful for conditional initialization where missing services
|
|
99
|
+
* should be handled gracefully rather than throwing.
|
|
100
|
+
*
|
|
101
|
+
* @returns true if all OAuth services are registered and valid
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* ```typescript
|
|
105
|
+
* if (isOAuthServicesAvailable()) {
|
|
106
|
+
* const services = getOAuthServices();
|
|
107
|
+
* // Initialize OAuth functionality
|
|
108
|
+
* } else {
|
|
109
|
+
* console.warn("OAuth services not available");
|
|
110
|
+
* }
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
export function isOAuthServicesAvailable() {
|
|
114
|
+
try {
|
|
115
|
+
const services = globalThis[REGISTRY_KEY];
|
|
116
|
+
return (!!services &&
|
|
117
|
+
typeof services.OAuthConfigService === "function" &&
|
|
118
|
+
typeof services.OAuthProviderRegistry === "function" &&
|
|
119
|
+
typeof services.ProviderResolver === "function");
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=oauth-service-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-service-registry.js","sourceRoot":"","sources":["../../src/utils/oauth-service-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAE5B;;;GAGG;AACH,MAAM,YAAY,GAAG,yBAAyB,CAAC;AAW/C;;;GAGG;AACH,MAAM,cAAc,GAA0B;IAC5C,kBAAkB;IAClB,qBAAqB;IACrB,gBAAgB;CACjB,CAAC;AAEF;;;;;;GAMG;AACF,UAAsC,CAAC,YAAY,CAAC,GAAG,cAAc,CAAC;AAEvE;;;GAGG;AACH,MAAM,mBAAmB,GAAI,UAAsC,CACjE,YAAY,CACwB,CAAC;AAEvC,IAAI,CAAC,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;IAC7C,OAAO,CAAC,KAAK,CACX,oFAAoF,CACrF,CAAC;AACJ,CAAC;AACD,IAAI,CAAC,mBAAmB,EAAE,qBAAqB,EAAE,CAAC;IAChD,OAAO,CAAC,KAAK,CACX,uFAAuF,CACxF,CAAC;AACJ,CAAC;AACD,IAAI,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,CAAC;IAC3C,OAAO,CAAC,KAAK,CACX,kFAAkF,CACnF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,6BAA8B,SAAQ,KAAK;IACtD,YAAY,WAAmB;QAC7B,KAAK,CACH,GAAG,WAAW,8CAA8C;YAC1D,+CAA+C;YAC/C,kEAAkE,CACrE,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;IAC9C,CAAC;CACF;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,QAAQ,GAAI,UAAsC,CAAC,YAAY,CAExD,CAAC;IAEd,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,6BAA6B,CAAC,yBAAyB,CAAC,CAAC;IACrE,CAAC;IAED,yCAAyC;IACzC,IAAI,OAAO,QAAQ,CAAC,kBAAkB,KAAK,UAAU,EAAE,CAAC;QACtD,MAAM,IAAI,6BAA6B,CAAC,oBAAoB,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,OAAO,QAAQ,CAAC,qBAAqB,KAAK,UAAU,EAAE,CAAC;QACzD,MAAM,IAAI,6BAA6B,CAAC,uBAAuB,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,OAAO,QAAQ,CAAC,gBAAgB,KAAK,UAAU,EAAE,CAAC;QACpD,MAAM,IAAI,6BAA6B,CAAC,kBAAkB,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,wBAAwB;IACtC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAI,UAAsC,CAAC,YAAY,CAExD,CAAC;QAEd,OAAO,CACL,CAAC,CAAC,QAAQ;YACV,OAAO,QAAQ,CAAC,kBAAkB,KAAK,UAAU;YACjD,OAAO,QAAQ,CAAC,qBAAqB,KAAK,UAAU;YACpD,OAAO,QAAQ,CAAC,gBAAgB,KAAK,UAAU,CAChD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,74 +1,41 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kya-os/mcp-i-cloudflare",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Cloudflare Workers
|
|
3
|
+
"version": "1.6.1",
|
|
4
|
+
"description": "Cloudflare Workers adapter for MCP-I framework",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
|
-
"type": "module",
|
|
8
|
-
"exports": {
|
|
9
|
-
".": {
|
|
10
|
-
"import": "./dist/index.js",
|
|
11
|
-
"types": "./dist/index.d.ts"
|
|
12
|
-
},
|
|
13
|
-
"./config": {
|
|
14
|
-
"import": "./dist/config.js",
|
|
15
|
-
"types": "./dist/config.d.ts"
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
7
|
"files": [
|
|
19
|
-
"dist
|
|
20
|
-
"README.md"
|
|
8
|
+
"dist"
|
|
21
9
|
],
|
|
22
10
|
"scripts": {
|
|
23
11
|
"build": "tsc",
|
|
24
|
-
"
|
|
25
|
-
"test": "vitest --
|
|
26
|
-
"test:
|
|
27
|
-
"lint": "eslint
|
|
28
|
-
"
|
|
29
|
-
"prepublishOnly": "npm run build && node ../create-mcpi-app/scripts/validate-
|
|
12
|
+
"test": "vitest run",
|
|
13
|
+
"test:coverage": "vitest run --coverage",
|
|
14
|
+
"test:watch": "vitest",
|
|
15
|
+
"lint": "eslint .",
|
|
16
|
+
"clean": "rm -rf dist .turbo node_modules",
|
|
17
|
+
"prepublishOnly": "npm run build && node ../create-mcpi-app/scripts/validate-no-workspace.js"
|
|
30
18
|
},
|
|
31
|
-
"keywords": [
|
|
32
|
-
"mcp-i",
|
|
33
|
-
"mcp",
|
|
34
|
-
"identity",
|
|
35
|
-
"did",
|
|
36
|
-
"cloudflare",
|
|
37
|
-
"workers",
|
|
38
|
-
"edge"
|
|
39
|
-
],
|
|
40
19
|
"dependencies": {
|
|
41
|
-
"@kya-os/contracts": "^1.
|
|
42
|
-
"@kya-os/mcp-i-core": "^1.
|
|
43
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
44
|
-
"
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
"
|
|
48
|
-
"
|
|
20
|
+
"@kya-os/contracts": "^1.6.0",
|
|
21
|
+
"@kya-os/mcp-i-core": "^1.3.0",
|
|
22
|
+
"@modelcontextprotocol/sdk": "^1.22.0",
|
|
23
|
+
"agents": "^0.2.21",
|
|
24
|
+
"base-x": "^5.0.0",
|
|
25
|
+
"hono": "^4.6.3",
|
|
26
|
+
"jose": "^5.6.3",
|
|
27
|
+
"zod": "^3.23.8"
|
|
49
28
|
},
|
|
50
29
|
"devDependencies": {
|
|
51
|
-
"@cloudflare/workers-types": "^4.
|
|
52
|
-
"@types/node": "^20.
|
|
53
|
-
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
54
|
-
"@typescript-eslint/parser": "^6.0.0",
|
|
30
|
+
"@cloudflare/workers-types": "^4.20240701.0",
|
|
31
|
+
"@types/node": "^20.14.9",
|
|
55
32
|
"@vitest/coverage-v8": "^4.0.5",
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
},
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
}
|
|
64
|
-
"author": "MCP-I Team",
|
|
65
|
-
"license": "MIT",
|
|
66
|
-
"repository": {
|
|
67
|
-
"type": "git",
|
|
68
|
-
"url": "git+https://github.com/modelcontextprotocol-identity/mcp-i.git"
|
|
69
|
-
},
|
|
70
|
-
"bugs": {
|
|
71
|
-
"url": "https://github.com/modelcontextprotocol-identity/mcp-i/issues"
|
|
72
|
-
},
|
|
73
|
-
"homepage": "https://github.com/modelcontextprotocol-identity/mcp-i#readme"
|
|
33
|
+
"dotenv": "^16.3.1",
|
|
34
|
+
"eslint": "^8.57.0",
|
|
35
|
+
"typescript": "^5.5.3",
|
|
36
|
+
"vitest": "^4.0.5"
|
|
37
|
+
},
|
|
38
|
+
"publishConfig": {
|
|
39
|
+
"access": "public"
|
|
40
|
+
}
|
|
74
41
|
}
|