@kya-os/mcp-i-cloudflare 1.5.10-canary.8 → 1.6.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 (102) hide show
  1. package/README.md +130 -0
  2. package/dist/__tests__/e2e/test-config.d.ts +37 -0
  3. package/dist/__tests__/e2e/test-config.d.ts.map +1 -0
  4. package/dist/__tests__/e2e/test-config.js +62 -0
  5. package/dist/__tests__/e2e/test-config.js.map +1 -0
  6. package/dist/adapter.d.ts +44 -1
  7. package/dist/adapter.d.ts.map +1 -1
  8. package/dist/adapter.js +712 -112
  9. package/dist/adapter.js.map +1 -1
  10. package/dist/agent.d.ts +103 -25
  11. package/dist/agent.d.ts.map +1 -1
  12. package/dist/agent.js +617 -40
  13. package/dist/agent.js.map +1 -1
  14. package/dist/app.d.ts +0 -8
  15. package/dist/app.d.ts.map +1 -1
  16. package/dist/app.js +277 -119
  17. package/dist/app.js.map +1 -1
  18. package/dist/cache/kv-oauth-config-cache.d.ts +47 -0
  19. package/dist/cache/kv-oauth-config-cache.d.ts.map +1 -0
  20. package/dist/cache/kv-oauth-config-cache.js +82 -0
  21. package/dist/cache/kv-oauth-config-cache.js.map +1 -0
  22. package/dist/cache/kv-tool-protection-cache.d.ts +26 -1
  23. package/dist/cache/kv-tool-protection-cache.d.ts.map +1 -1
  24. package/dist/cache/kv-tool-protection-cache.js +19 -11
  25. package/dist/cache/kv-tool-protection-cache.js.map +1 -1
  26. package/dist/config.d.ts.map +1 -1
  27. package/dist/config.js +39 -14
  28. package/dist/config.js.map +1 -1
  29. package/dist/helpers/env-mapper.d.ts +60 -1
  30. package/dist/helpers/env-mapper.d.ts.map +1 -1
  31. package/dist/helpers/env-mapper.js +136 -6
  32. package/dist/helpers/env-mapper.js.map +1 -1
  33. package/dist/index.d.ts +4 -2
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +16 -3
  36. package/dist/index.js.map +1 -1
  37. package/dist/runtime/audit-logger.d.ts +96 -0
  38. package/dist/runtime/audit-logger.d.ts.map +1 -0
  39. package/dist/runtime/audit-logger.js +276 -0
  40. package/dist/runtime/audit-logger.js.map +1 -0
  41. package/dist/runtime/oauth-handler.d.ts +5 -0
  42. package/dist/runtime/oauth-handler.d.ts.map +1 -1
  43. package/dist/runtime/oauth-handler.js +287 -35
  44. package/dist/runtime/oauth-handler.js.map +1 -1
  45. package/dist/runtime.d.ts +12 -1
  46. package/dist/runtime.d.ts.map +1 -1
  47. package/dist/runtime.js +34 -4
  48. package/dist/runtime.js.map +1 -1
  49. package/dist/server.d.ts +7 -0
  50. package/dist/server.d.ts.map +1 -1
  51. package/dist/server.js +133 -18
  52. package/dist/server.js.map +1 -1
  53. package/dist/services/admin.service.d.ts +1 -3
  54. package/dist/services/admin.service.d.ts.map +1 -1
  55. package/dist/services/admin.service.js +175 -146
  56. package/dist/services/admin.service.js.map +1 -1
  57. package/dist/services/consent-audit.service.d.ts +91 -0
  58. package/dist/services/consent-audit.service.d.ts.map +1 -0
  59. package/dist/services/consent-audit.service.js +243 -0
  60. package/dist/services/consent-audit.service.js.map +1 -0
  61. package/dist/services/consent-config.service.d.ts +2 -2
  62. package/dist/services/consent-config.service.d.ts.map +1 -1
  63. package/dist/services/consent-config.service.js +55 -28
  64. package/dist/services/consent-config.service.js.map +1 -1
  65. package/dist/services/consent-page-renderer.d.ts +14 -0
  66. package/dist/services/consent-page-renderer.d.ts.map +1 -1
  67. package/dist/services/consent-page-renderer.js +54 -27
  68. package/dist/services/consent-page-renderer.js.map +1 -1
  69. package/dist/services/consent.service.d.ts +93 -8
  70. package/dist/services/consent.service.d.ts.map +1 -1
  71. package/dist/services/consent.service.js +1817 -553
  72. package/dist/services/consent.service.js.map +1 -1
  73. package/dist/services/delegation.service.d.ts.map +1 -1
  74. package/dist/services/delegation.service.js +67 -29
  75. package/dist/services/delegation.service.js.map +1 -1
  76. package/dist/services/idp-token-storage.d.ts +68 -0
  77. package/dist/services/idp-token-storage.d.ts.map +1 -0
  78. package/dist/services/idp-token-storage.js +157 -0
  79. package/dist/services/idp-token-storage.js.map +1 -0
  80. package/dist/services/oauth-service.d.ts +66 -0
  81. package/dist/services/oauth-service.d.ts.map +1 -0
  82. package/dist/services/oauth-service.js +223 -0
  83. package/dist/services/oauth-service.js.map +1 -0
  84. package/dist/services/proof.service.d.ts +8 -6
  85. package/dist/services/proof.service.d.ts.map +1 -1
  86. package/dist/services/proof.service.js +131 -75
  87. package/dist/services/proof.service.js.map +1 -1
  88. package/dist/services/tool-context-builder.d.ts +55 -0
  89. package/dist/services/tool-context-builder.d.ts.map +1 -0
  90. package/dist/services/tool-context-builder.js +124 -0
  91. package/dist/services/tool-context-builder.js.map +1 -0
  92. package/dist/types/tool-context.d.ts +35 -0
  93. package/dist/types/tool-context.d.ts.map +1 -0
  94. package/dist/types/tool-context.js +13 -0
  95. package/dist/types/tool-context.js.map +1 -0
  96. package/dist/types.d.ts +31 -2
  97. package/dist/types.d.ts.map +1 -1
  98. package/dist/utils/oauth-service-registry.d.ts +65 -0
  99. package/dist/utils/oauth-service-registry.d.ts.map +1 -0
  100. package/dist/utils/oauth-service-registry.js +125 -0
  101. package/dist/utils/oauth-service-registry.js.map +1 -0
  102. package/package.json +27 -60
@@ -0,0 +1,157 @@
1
+ /**
2
+ * IDP Token Storage Service
3
+ *
4
+ * Stores and retrieves IDP (Identity Provider) tokens encrypted in KV storage.
5
+ * Tokens are encrypted at rest using AES-GCM encryption.
6
+ *
7
+ * Storage key format: `idp_token:user:{userDid}:provider:{provider}:scopes:{scopeHash}`
8
+ *
9
+ * @package @kya-os/mcp-i-cloudflare
10
+ */
11
+ /**
12
+ * Service for storing and retrieving IDP tokens
13
+ *
14
+ * Cloudflare Workers implementation using KV storage and AES-GCM encryption.
15
+ */
16
+ export class IdpTokenStorage {
17
+ config;
18
+ constructor(config) {
19
+ this.config = {
20
+ storage: config.storage,
21
+ oauthSecurityService: config.oauthSecurityService,
22
+ logger: config.logger || (() => { }),
23
+ };
24
+ }
25
+ /**
26
+ * Store IDP tokens encrypted in KV storage
27
+ *
28
+ * @param userDid - User DID to associate tokens with
29
+ * @param provider - OAuth provider name (e.g., "github", "google")
30
+ * @param scopes - Scopes granted for these tokens
31
+ * @param tokens - IDP tokens to store
32
+ */
33
+ async storeToken(userDid, provider, scopes, tokens) {
34
+ const scopeHash = this.hashScopes(scopes);
35
+ const key = `idp_token:user:${userDid}:provider:${provider}:scopes:${scopeHash}`;
36
+ // Prepare token data for storage
37
+ const tokenData = {
38
+ access_token: tokens.access_token,
39
+ refresh_token: tokens.refresh_token,
40
+ expires_at: tokens.expires_at,
41
+ token_type: tokens.token_type,
42
+ scope: tokens.scope,
43
+ stored_at: Date.now(),
44
+ };
45
+ // Encrypt token data before storage
46
+ const encrypted = await this.config.oauthSecurityService.encryptToken(JSON.stringify(tokenData));
47
+ // Calculate TTL (expiration time - current time, in seconds)
48
+ // Default to 7 days if expires_at not available
49
+ const expiresAt = tokens.expires_at || Date.now() + 7 * 24 * 60 * 60 * 1000;
50
+ const ttl = Math.max(0, Math.floor((expiresAt - Date.now()) / 1000));
51
+ await this.config.storage.put(key, encrypted, {
52
+ expirationTtl: ttl,
53
+ });
54
+ this.config.logger("[IdpTokenStorage] Token stored", {
55
+ userDid: userDid.substring(0, 20) + "...",
56
+ provider,
57
+ scopes,
58
+ scopeHash,
59
+ expiresAt: new Date(expiresAt).toISOString(),
60
+ ttl,
61
+ });
62
+ }
63
+ /**
64
+ * Retrieve IDP tokens from KV storage
65
+ *
66
+ * @param userDid - User DID to retrieve tokens for
67
+ * @param provider - OAuth provider name
68
+ * @param scopes - Scopes to retrieve tokens for
69
+ * @returns IDP tokens or null if not found
70
+ */
71
+ async getToken(userDid, provider, scopes) {
72
+ const scopeHash = this.hashScopes(scopes);
73
+ const key = `idp_token:user:${userDid}:provider:${provider}:scopes:${scopeHash}`;
74
+ const encrypted = await this.config.storage.get(key, "text");
75
+ if (!encrypted) {
76
+ this.config.logger("[IdpTokenStorage] Token not found", {
77
+ userDid: userDid.substring(0, 20) + "...",
78
+ provider,
79
+ scopes,
80
+ scopeHash,
81
+ });
82
+ return null;
83
+ }
84
+ try {
85
+ // Decrypt token data
86
+ const decrypted = await this.config.oauthSecurityService.decryptToken(encrypted);
87
+ const tokenData = JSON.parse(decrypted);
88
+ // Reconstruct IdpTokens object
89
+ const tokens = {
90
+ access_token: tokenData.access_token,
91
+ refresh_token: tokenData.refresh_token,
92
+ expires_at: tokenData.expires_at,
93
+ token_type: tokenData.token_type,
94
+ scope: tokenData.scope,
95
+ expires_in: tokenData.expires_at
96
+ ? Math.floor((tokenData.expires_at - Date.now()) / 1000)
97
+ : undefined,
98
+ };
99
+ this.config.logger("[IdpTokenStorage] Token retrieved", {
100
+ userDid: userDid.substring(0, 20) + "...",
101
+ provider,
102
+ scopes,
103
+ expiresAt: new Date(tokens.expires_at).toISOString(),
104
+ isExpired: tokens.expires_at < Date.now(),
105
+ });
106
+ return tokens;
107
+ }
108
+ catch (error) {
109
+ this.config.logger("[IdpTokenStorage] Token decryption failed", {
110
+ error: error instanceof Error ? error.message : String(error),
111
+ userDid: userDid.substring(0, 20) + "...",
112
+ provider,
113
+ });
114
+ return null;
115
+ }
116
+ }
117
+ /**
118
+ * Delete IDP tokens from storage
119
+ *
120
+ * @param userDid - User DID
121
+ * @param provider - OAuth provider name
122
+ * @param scopes - Scopes
123
+ */
124
+ async deleteToken(userDid, provider, scopes) {
125
+ const scopeHash = this.hashScopes(scopes);
126
+ const key = `idp_token:user:${userDid}:provider:${provider}:scopes:${scopeHash}`;
127
+ await this.config.storage.delete(key);
128
+ this.config.logger("[IdpTokenStorage] Token deleted", {
129
+ userDid: userDid.substring(0, 20) + "...",
130
+ provider,
131
+ scopes,
132
+ scopeHash,
133
+ });
134
+ }
135
+ /**
136
+ * Hash scopes deterministically for storage key
137
+ *
138
+ * Uses sorted scopes joined with comma, then base64url encoded.
139
+ * This ensures the same scopes always produce the same hash.
140
+ *
141
+ * @param scopes - Array of scope strings
142
+ * @returns Deterministic hash of scopes
143
+ */
144
+ hashScopes(scopes) {
145
+ // Sort scopes to ensure deterministic hashing
146
+ const sorted = scopes.sort().join(",");
147
+ // Simple hash: base64url encode first 16 bytes of UTF-8 encoding
148
+ const encoder = new TextEncoder();
149
+ const bytes = encoder.encode(sorted);
150
+ const hashBytes = bytes.slice(0, 16); // Use first 16 bytes
151
+ return btoa(String.fromCharCode(...hashBytes))
152
+ .replace(/\+/g, "-")
153
+ .replace(/\//g, "_")
154
+ .replace(/=/g, "");
155
+ }
156
+ }
157
+ //# sourceMappingURL=idp-token-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idp-token-storage.js","sourceRoot":"","sources":["../../src/services/idp-token-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * OAuth Service
3
+ *
4
+ * Handles OAuth token exchange and refresh using PKCE (Proof Key for Code Exchange).
5
+ * Supports both direct PKCE exchange with OAuth providers and proxy mode via AgentShield.
6
+ *
7
+ * @package @kya-os/mcp-i-cloudflare
8
+ */
9
+ import type { OAuthConfigService } from "@kya-os/mcp-i-core";
10
+ import type { IdpTokens } from "@kya-os/contracts/config";
11
+ export interface OAuthServiceConfig {
12
+ /** OAuth config service for fetching provider configurations */
13
+ configService: OAuthConfigService;
14
+ /** Project ID for fetching OAuth config */
15
+ projectId: string;
16
+ /** Optional logger callback for diagnostics */
17
+ logger?: (message: string, data?: unknown) => void;
18
+ }
19
+ /**
20
+ * Service for OAuth token exchange and refresh
21
+ */
22
+ export declare class OAuthService {
23
+ private config;
24
+ constructor(config: OAuthServiceConfig);
25
+ /**
26
+ * Exchange authorization code for IDP tokens using PKCE
27
+ *
28
+ * For PKCE providers: Exchanges code directly with OAuth provider (no client secret)
29
+ * For proxy mode: Exchanges code via AgentShield API
30
+ *
31
+ * @param provider - OAuth provider name (e.g., "github", "google")
32
+ * @param code - Authorization code from OAuth callback
33
+ * @param codeVerifier - PKCE code verifier (must match code_challenge from authorization)
34
+ * @param redirectUri - Redirect URI used in authorization request
35
+ * @returns IDP tokens (access_token, refresh_token, expires_at, etc.)
36
+ */
37
+ exchangeToken(provider: string, code: string, codeVerifier: string, redirectUri: string): Promise<IdpTokens>;
38
+ /**
39
+ * Exchange token directly with OAuth provider using PKCE
40
+ */
41
+ private exchangeTokenPKCE;
42
+ /**
43
+ * Exchange token via AgentShield proxy (for providers that require proxy mode)
44
+ */
45
+ private exchangeTokenProxy;
46
+ /**
47
+ * Refresh IDP access token using refresh token
48
+ *
49
+ * For PKCE providers: Refreshes directly with OAuth provider
50
+ * For proxy mode: Refreshes via AgentShield API
51
+ *
52
+ * @param provider - OAuth provider name
53
+ * @param refreshToken - Refresh token from previous token exchange
54
+ * @returns New IDP tokens or null if refresh failed
55
+ */
56
+ refreshToken(provider: string, refreshToken: string): Promise<IdpTokens | null>;
57
+ /**
58
+ * Refresh token directly with OAuth provider using PKCE
59
+ */
60
+ private refreshTokenPKCE;
61
+ /**
62
+ * Refresh token via AgentShield proxy
63
+ */
64
+ private refreshTokenProxy;
65
+ }
66
+ //# sourceMappingURL=oauth-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-service.d.ts","sourceRoot":"","sources":["../../src/services/oauth-service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAiB,MAAM,0BAA0B,CAAC;AAEzE,MAAM,WAAW,kBAAkB;IACjC,gEAAgE;IAChE,aAAa,EAAE,kBAAkB,CAAC;IAElC,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAElB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACpD;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAEZ;gBAEU,MAAM,EAAE,kBAAkB;IAQtC;;;;;;;;;;;OAWG;IACG,aAAa,CACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,SAAS,CAAC;IA2CrB;;OAEG;YACW,iBAAiB;IA8E/B;;OAEG;YACW,kBAAkB;IAiBhC;;;;;;;;;OASG;IACG,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IA2B5B;;OAEG;YACW,gBAAgB;IAiE9B;;OAEG;YACW,iBAAiB;CAShC"}
@@ -0,0 +1,223 @@
1
+ /**
2
+ * OAuth Service
3
+ *
4
+ * Handles OAuth token exchange and refresh using PKCE (Proof Key for Code Exchange).
5
+ * Supports both direct PKCE exchange with OAuth providers and proxy mode via AgentShield.
6
+ *
7
+ * @package @kya-os/mcp-i-cloudflare
8
+ */
9
+ /**
10
+ * Service for OAuth token exchange and refresh
11
+ */
12
+ export class OAuthService {
13
+ config;
14
+ constructor(config) {
15
+ this.config = {
16
+ configService: config.configService,
17
+ projectId: config.projectId,
18
+ logger: config.logger || (() => { }),
19
+ };
20
+ }
21
+ /**
22
+ * Exchange authorization code for IDP tokens using PKCE
23
+ *
24
+ * For PKCE providers: Exchanges code directly with OAuth provider (no client secret)
25
+ * For proxy mode: Exchanges code via AgentShield API
26
+ *
27
+ * @param provider - OAuth provider name (e.g., "github", "google")
28
+ * @param code - Authorization code from OAuth callback
29
+ * @param codeVerifier - PKCE code verifier (must match code_challenge from authorization)
30
+ * @param redirectUri - Redirect URI used in authorization request
31
+ * @returns IDP tokens (access_token, refresh_token, expires_at, etc.)
32
+ */
33
+ async exchangeToken(provider, code, codeVerifier, redirectUri) {
34
+ // Fetch provider config
35
+ const oauthConfig = await this.config.configService.getOAuthConfig(this.config.projectId);
36
+ const providerConfig = oauthConfig.providers[provider];
37
+ if (!providerConfig) {
38
+ throw new Error(`Provider "${provider}" not configured for project "${this.config.projectId}"`);
39
+ }
40
+ // Check if provider supports PKCE
41
+ if (!providerConfig.supportsPKCE) {
42
+ throw new Error(`Provider "${provider}" does not support PKCE. Only PKCE providers are supported in Phase 1.`);
43
+ }
44
+ // For PKCE providers, exchange directly with OAuth provider
45
+ if (providerConfig.supportsPKCE && !providerConfig.proxyMode) {
46
+ return this.exchangeTokenPKCE(providerConfig, code, codeVerifier, redirectUri);
47
+ }
48
+ // For proxy mode, exchange via AgentShield
49
+ if (providerConfig.proxyMode) {
50
+ return this.exchangeTokenProxy(providerConfig, code, codeVerifier, redirectUri);
51
+ }
52
+ throw new Error(`Provider "${provider}" configuration is invalid: must support PKCE or use proxy mode`);
53
+ }
54
+ /**
55
+ * Exchange token directly with OAuth provider using PKCE
56
+ */
57
+ async exchangeTokenPKCE(providerConfig, code, codeVerifier, redirectUri) {
58
+ this.config.logger("[OAuthService] Exchanging token with PKCE", {
59
+ provider: providerConfig.authorizationUrl,
60
+ tokenUrl: providerConfig.tokenUrl,
61
+ });
62
+ const response = await fetch(providerConfig.tokenUrl, {
63
+ method: "POST",
64
+ headers: {
65
+ "Content-Type": "application/x-www-form-urlencoded",
66
+ Accept: "application/json",
67
+ },
68
+ body: new URLSearchParams({
69
+ grant_type: "authorization_code",
70
+ code,
71
+ redirect_uri: redirectUri,
72
+ client_id: providerConfig.clientId,
73
+ code_verifier: codeVerifier,
74
+ }),
75
+ });
76
+ if (!response.ok) {
77
+ const errorText = await response.text().catch(() => "Unknown error");
78
+ let errorData;
79
+ try {
80
+ errorData = JSON.parse(errorText);
81
+ }
82
+ catch {
83
+ errorData = { error: errorText };
84
+ }
85
+ const errorMessage = errorData.error_description || errorData.error || errorText;
86
+ this.config.logger("[OAuthService] Token exchange failed", {
87
+ status: response.status,
88
+ error: errorMessage,
89
+ provider: providerConfig.tokenUrl,
90
+ });
91
+ throw new Error(`Token exchange failed: ${errorMessage} (${response.status})`);
92
+ }
93
+ const tokens = await response.json();
94
+ // Validate required fields
95
+ if (!tokens.access_token) {
96
+ throw new Error("Token response missing access_token");
97
+ }
98
+ // Calculate expiration timestamp
99
+ const expiresIn = tokens.expires_in || 3600; // Default 1 hour
100
+ const expiresAt = Date.now() + expiresIn * 1000;
101
+ const idpTokens = {
102
+ access_token: tokens.access_token,
103
+ refresh_token: tokens.refresh_token,
104
+ expires_in: expiresIn,
105
+ expires_at: expiresAt,
106
+ token_type: tokens.token_type || "Bearer",
107
+ scope: tokens.scope,
108
+ };
109
+ this.config.logger("[OAuthService] Token exchange successful", {
110
+ provider: providerConfig.tokenUrl,
111
+ expiresAt: new Date(expiresAt).toISOString(),
112
+ hasRefreshToken: !!idpTokens.refresh_token,
113
+ });
114
+ return idpTokens;
115
+ }
116
+ /**
117
+ * Exchange token via AgentShield proxy (for providers that require proxy mode)
118
+ */
119
+ async exchangeTokenProxy(providerConfig, code, codeVerifier, redirectUri) {
120
+ // Get AgentShield API URL from config service
121
+ const oauthConfig = await this.config.configService.getOAuthConfig(this.config.projectId);
122
+ // Note: We need access to baseUrl and apiKey from configService
123
+ // For now, this is a placeholder - will need to pass these through config
124
+ throw new Error("Proxy mode token exchange not yet implemented. Use PKCE mode for Phase 1.");
125
+ }
126
+ /**
127
+ * Refresh IDP access token using refresh token
128
+ *
129
+ * For PKCE providers: Refreshes directly with OAuth provider
130
+ * For proxy mode: Refreshes via AgentShield API
131
+ *
132
+ * @param provider - OAuth provider name
133
+ * @param refreshToken - Refresh token from previous token exchange
134
+ * @returns New IDP tokens or null if refresh failed
135
+ */
136
+ async refreshToken(provider, refreshToken) {
137
+ // Fetch provider config
138
+ const oauthConfig = await this.config.configService.getOAuthConfig(this.config.projectId);
139
+ const providerConfig = oauthConfig.providers[provider];
140
+ if (!providerConfig) {
141
+ this.config.logger("[OAuthService] Provider not found for refresh", {
142
+ provider,
143
+ });
144
+ return null;
145
+ }
146
+ // For PKCE providers, refresh directly with OAuth provider
147
+ if (providerConfig.supportsPKCE && !providerConfig.proxyMode) {
148
+ return this.refreshTokenPKCE(providerConfig, refreshToken);
149
+ }
150
+ // For proxy mode, refresh via AgentShield
151
+ if (providerConfig.proxyMode) {
152
+ return this.refreshTokenProxy(providerConfig, refreshToken);
153
+ }
154
+ return null;
155
+ }
156
+ /**
157
+ * Refresh token directly with OAuth provider using PKCE
158
+ */
159
+ async refreshTokenPKCE(providerConfig, refreshToken) {
160
+ this.config.logger("[OAuthService] Refreshing token with PKCE", {
161
+ provider: providerConfig.tokenUrl,
162
+ });
163
+ try {
164
+ const response = await fetch(providerConfig.tokenUrl, {
165
+ method: "POST",
166
+ headers: {
167
+ "Content-Type": "application/x-www-form-urlencoded",
168
+ Accept: "application/json",
169
+ },
170
+ body: new URLSearchParams({
171
+ grant_type: "refresh_token",
172
+ refresh_token: refreshToken,
173
+ client_id: providerConfig.clientId,
174
+ }),
175
+ });
176
+ if (!response.ok) {
177
+ this.config.logger("[OAuthService] Token refresh failed", {
178
+ status: response.status,
179
+ provider: providerConfig.tokenUrl,
180
+ });
181
+ return null;
182
+ }
183
+ const tokens = await response.json();
184
+ if (!tokens.access_token) {
185
+ this.config.logger("[OAuthService] Token refresh response missing access_token");
186
+ return null;
187
+ }
188
+ // Calculate expiration timestamp
189
+ const expiresIn = tokens.expires_in || 3600; // Default 1 hour
190
+ const expiresAt = Date.now() + expiresIn * 1000;
191
+ const idpTokens = {
192
+ access_token: tokens.access_token,
193
+ refresh_token: tokens.refresh_token || refreshToken, // Use new refresh token if provided, otherwise keep old one
194
+ expires_in: expiresIn,
195
+ expires_at: expiresAt,
196
+ token_type: tokens.token_type || "Bearer",
197
+ scope: tokens.scope,
198
+ };
199
+ this.config.logger("[OAuthService] Token refresh successful", {
200
+ provider: providerConfig.tokenUrl,
201
+ expiresAt: new Date(expiresAt).toISOString(),
202
+ });
203
+ return idpTokens;
204
+ }
205
+ catch (error) {
206
+ this.config.logger("[OAuthService] Token refresh error", {
207
+ error: error instanceof Error ? error.message : String(error),
208
+ provider: providerConfig.tokenUrl,
209
+ });
210
+ return null;
211
+ }
212
+ }
213
+ /**
214
+ * Refresh token via AgentShield proxy
215
+ */
216
+ async refreshTokenProxy(providerConfig, refreshToken) {
217
+ // Placeholder for proxy mode refresh
218
+ // Will need access to AgentShield API URL and key
219
+ this.config.logger("[OAuthService] Proxy mode refresh not yet implemented");
220
+ return null;
221
+ }
222
+ }
223
+ //# sourceMappingURL=oauth-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-service.js","sourceRoot":"","sources":["../../src/services/oauth-service.ts"],"names":[],"mappings":"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"}
@@ -6,16 +6,18 @@
6
6
  *
7
7
  * Supports both direct submission and batch queue submission.
8
8
  */
9
- import type { DetachedProof } from '@kya-os/contracts/proof';
10
- import type { CloudflareRuntimeConfig } from '../config';
11
- import type { CloudflareRuntime } from '../runtime';
9
+ import type { DetachedProof } from "@kya-os/contracts/proof";
10
+ import type { ConsentEventContext } from "@kya-os/contracts/agentshield-api";
11
+ import type { CloudflareRuntimeConfig } from "../config";
12
+ import type { CloudflareRuntime } from "../runtime";
12
13
  export interface ProofSubmissionContext {
13
14
  session: {
14
15
  id: string;
15
16
  };
16
- toolName: string;
17
- args: Record<string, unknown>;
18
- result: unknown;
17
+ toolName?: string;
18
+ args?: Record<string, unknown>;
19
+ result?: unknown;
20
+ consentEvent?: ConsentEventContext;
19
21
  mcpServerUrl?: string;
20
22
  }
21
23
  export declare class ProofService {
@@ -1 +1 @@
1
- {"version":3,"file":"proof.service.d.ts","sourceRoot":"","sources":["../../src/services/proof.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAmB,MAAM,YAAY,CAAC;AAIrE,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,OAAO,CAAC,CAAoB;IACpC,OAAO,CAAC,UAAU,CAAC,CAAkB;IACrC,OAAO,CAAC,mBAAmB,CAAS;gBAExB,MAAM,EAAE,uBAAuB,EAAE,OAAO,CAAC,EAAE,iBAAiB;IAqFxE;;;;;;;;;OASG;IACG,WAAW,CACf,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC;IA0ChB;;OAEG;YACW,iBAAiB;IA2M/B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ7B"}
1
+ {"version":3,"file":"proof.service.d.ts","sourceRoot":"","sources":["../../src/services/proof.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAEV,mBAAmB,EACpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAmB,MAAM,YAAY,CAAC;AAQrE,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAGxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,YAAY,CAAC,EAAE,mBAAmB,CAAC;IAEnC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,OAAO,CAAC,CAAoB;IACpC,OAAO,CAAC,UAAU,CAAC,CAAkB;IACrC,OAAO,CAAC,mBAAmB,CAAS;gBAExB,MAAM,EAAE,uBAAuB,EAAE,OAAO,CAAC,EAAE,iBAAiB;IAmHxE;;;;;;;;;OASG;IACG,WAAW,CACf,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC;IAiDhB;;OAEG;YACW,iBAAiB;IAkS/B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ7B"}