@kya-os/mcp-i-cloudflare 1.2.8 → 1.3.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/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/runtime/oauth-handler.d.ts +84 -0
- package/dist/runtime/oauth-handler.d.ts.map +1 -0
- package/dist/runtime/oauth-handler.js +345 -0
- package/dist/runtime/oauth-handler.js.map +1 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ export { KVProofArchive, type DetachedProof, type ProofRecord, type ProofQuery,
|
|
|
13
13
|
export { CloudflareProofGenerator, type ProofMeta, type SessionContext, type ToolRequest, type ToolResponse, type ProofOptions } from './proof-generator';
|
|
14
14
|
export { CloudflareRuntime, type ToolCallContext } from './runtime';
|
|
15
15
|
export { KVToolProtectionCache, type KVNamespace } from './cache/kv-tool-protection-cache';
|
|
16
|
+
export { createOAuthCallbackHandler, extractDelegationToken, type HonoContext, type OAuthCallbackConfig, type OAuthSuccessData, type OAuthErrorData, type OAuthState, type TokenExchangeResponse } from './runtime/oauth-handler';
|
|
16
17
|
export type { AgentIdentity } from '@kya-os/mcp-i-core';
|
|
17
18
|
export interface CloudflareEnv {
|
|
18
19
|
NONCE_CACHE: KVNamespace;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAkF,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3I,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAG9C,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACxB,CAAC;AAGF,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGpI,OAAO,EACL,wBAAwB,EACxB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAGpE,OAAO,EAAE,qBAAqB,EAAE,KAAK,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAG3F,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,gBAAgB,CAAC,EAAE,WAAW,CAAC;IAC/B,kBAAkB,CAAC,EAAE,WAAW,CAAC;IACjC,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,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,mBAAmB,CAAC,EAAE,kBAAkB,CAAC;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,aAAa,CAAC;IACnB,WAAW,CAAC,EAAE,aAAa,GAAG,YAAY,CAAC;IAC3C,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;KACxC,CAAC;IACF,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;CAC/C;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,GAAG,iBAAiB,CA6BvF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,oBAAoB;mBAIrC,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;EA0EnD;AAGD,OAAO,EAAE,2BAA2B,EAAE,KAAK,2BAA2B,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAkF,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3I,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAG9C,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACxB,CAAC;AAGF,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGpI,OAAO,EACL,wBAAwB,EACxB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAGpE,OAAO,EAAE,qBAAqB,EAAE,KAAK,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAG3F,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,qBAAqB,EAC3B,MAAM,yBAAyB,CAAC;AAGjC,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,gBAAgB,CAAC,EAAE,WAAW,CAAC;IAC/B,kBAAkB,CAAC,EAAE,WAAW,CAAC;IACjC,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,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,mBAAmB,CAAC,EAAE,kBAAkB,CAAC;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,aAAa,CAAC;IACnB,WAAW,CAAC,EAAE,aAAa,GAAG,YAAY,CAAC;IAC3C,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;KACxC,CAAC;IACF,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;CAC/C;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,GAAG,iBAAiB,CA6BvF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,oBAAoB;mBAIrC,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;EA0EnD;AAGD,OAAO,EAAE,2BAA2B,EAAE,KAAK,2BAA2B,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -18,6 +18,8 @@ export { CloudflareProofGenerator } from './proof-generator';
|
|
|
18
18
|
export { CloudflareRuntime } from './runtime';
|
|
19
19
|
// Re-export cache implementations
|
|
20
20
|
export { KVToolProtectionCache } from './cache/kv-tool-protection-cache';
|
|
21
|
+
// Re-export OAuth handler utilities
|
|
22
|
+
export { createOAuthCallbackHandler, extractDelegationToken } from './runtime/oauth-handler';
|
|
21
23
|
/**
|
|
22
24
|
* Create MCP-I runtime for Cloudflare Workers
|
|
23
25
|
*
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAyD,uBAAuB,EAAyB,MAAM,oBAAoB,CAAC;AAC3I,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,sBAAsB;AACtB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACxB,CAAC;AAEF,4BAA4B;AAC5B,OAAO,EAAE,cAAc,EAA0E,MAAM,4BAA4B,CAAC;AAEpI,6BAA6B;AAC7B,OAAO,EACL,wBAAwB,EAMzB,MAAM,mBAAmB,CAAC;AAE3B,6DAA6D;AAC7D,OAAO,EAAE,iBAAiB,EAAwB,MAAM,WAAW,CAAC;AAEpE,kCAAkC;AAClC,OAAO,EAAE,qBAAqB,EAAoB,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth Authorization Code Flow Handler for MCP-I Cloudflare Runtime
|
|
3
|
+
*
|
|
4
|
+
* Provides reusable OAuth callback handler for agents using delegation flow
|
|
5
|
+
*/
|
|
6
|
+
export interface HonoContext {
|
|
7
|
+
env: any;
|
|
8
|
+
req: {
|
|
9
|
+
query: (key: string) => string | undefined;
|
|
10
|
+
header: (name: string) => string | undefined;
|
|
11
|
+
};
|
|
12
|
+
html: (html: string, status?: number) => Response;
|
|
13
|
+
json: (object: any, status?: number) => Response;
|
|
14
|
+
}
|
|
15
|
+
export interface OAuthCallbackConfig {
|
|
16
|
+
/**
|
|
17
|
+
* AgentShield API URL (defaults to AGENTSHIELD_API_URL env var)
|
|
18
|
+
*/
|
|
19
|
+
agentShieldApiUrl?: string;
|
|
20
|
+
/**
|
|
21
|
+
* KV namespace binding for delegation storage
|
|
22
|
+
*/
|
|
23
|
+
delegationStorage?: KVNamespace;
|
|
24
|
+
/**
|
|
25
|
+
* Custom success HTML template (optional)
|
|
26
|
+
*/
|
|
27
|
+
successTemplate?: (data: OAuthSuccessData) => string;
|
|
28
|
+
/**
|
|
29
|
+
* Custom error HTML template (optional)
|
|
30
|
+
*/
|
|
31
|
+
errorTemplate?: (error: OAuthErrorData) => string;
|
|
32
|
+
/**
|
|
33
|
+
* Whether to auto-close success page after delay (default: true)
|
|
34
|
+
*/
|
|
35
|
+
autoClose?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Auto-close delay in milliseconds (default: 5000)
|
|
38
|
+
*/
|
|
39
|
+
autoCloseDelay?: number;
|
|
40
|
+
}
|
|
41
|
+
export interface OAuthSuccessData {
|
|
42
|
+
delegationId: string;
|
|
43
|
+
sessionId: string;
|
|
44
|
+
scopes: string[];
|
|
45
|
+
expiresIn: number;
|
|
46
|
+
}
|
|
47
|
+
export interface OAuthErrorData {
|
|
48
|
+
error: string;
|
|
49
|
+
description: string;
|
|
50
|
+
}
|
|
51
|
+
export interface OAuthState {
|
|
52
|
+
project_id: string;
|
|
53
|
+
agent_did: string;
|
|
54
|
+
session_id?: string;
|
|
55
|
+
delegation_id: string;
|
|
56
|
+
}
|
|
57
|
+
export interface TokenExchangeResponse {
|
|
58
|
+
delegation_token: string;
|
|
59
|
+
token_type: string;
|
|
60
|
+
expires_in: number;
|
|
61
|
+
delegation_id: string;
|
|
62
|
+
scopes: string[];
|
|
63
|
+
session_id?: string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Create OAuth callback handler for Hono app
|
|
67
|
+
*
|
|
68
|
+
* @param config OAuth callback configuration
|
|
69
|
+
* @returns Hono route handler
|
|
70
|
+
*/
|
|
71
|
+
export declare function createOAuthCallbackHandler(config?: OAuthCallbackConfig): (c: HonoContext) => Promise<Response>;
|
|
72
|
+
/**
|
|
73
|
+
* Helper to extract delegation token from request
|
|
74
|
+
*
|
|
75
|
+
* Checks for delegation token in:
|
|
76
|
+
* 1. Authorization header (Bearer token)
|
|
77
|
+
* 2. x-delegation-token header
|
|
78
|
+
* 3. Query parameter (?delegation_token=)
|
|
79
|
+
*
|
|
80
|
+
* @param c Hono context
|
|
81
|
+
* @returns Delegation token or null
|
|
82
|
+
*/
|
|
83
|
+
export declare function extractDelegationToken(c: HonoContext): string | null;
|
|
84
|
+
//# sourceMappingURL=oauth-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-handler.d.ts","sourceRoot":"","sources":["../../src/runtime/oauth-handler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,GAAG,CAAC;IACT,GAAG,EAAE;QACH,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;QAC3C,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;KAC9C,CAAC;IACF,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,QAAQ,CAAC;IAClD,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,QAAQ,CAAC;CAClD;AAID,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,iBAAiB,CAAC,EAAE,WAAW,CAAC;IAEhC;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,MAAM,CAAC;IAErD;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,MAAM,CAAC;IAElD;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA8KD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,GAAE,mBAAwB,IAC3D,GAAG,WAAW,uBAgK7B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAoBpE"}
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth Authorization Code Flow Handler for MCP-I Cloudflare Runtime
|
|
3
|
+
*
|
|
4
|
+
* Provides reusable OAuth callback handler for agents using delegation flow
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Default success page template
|
|
8
|
+
*/
|
|
9
|
+
const defaultSuccessTemplate = (data) => `
|
|
10
|
+
<!DOCTYPE html>
|
|
11
|
+
<html>
|
|
12
|
+
<head>
|
|
13
|
+
<title>Authorization Successful</title>
|
|
14
|
+
<style>
|
|
15
|
+
body {
|
|
16
|
+
font-family: system-ui, -apple-system, sans-serif;
|
|
17
|
+
padding: 2rem;
|
|
18
|
+
max-width: 600px;
|
|
19
|
+
margin: 0 auto;
|
|
20
|
+
background: linear-gradient(to bottom, #f8f9fa, #e9ecef);
|
|
21
|
+
min-height: 100vh;
|
|
22
|
+
}
|
|
23
|
+
.container {
|
|
24
|
+
background: white;
|
|
25
|
+
border-radius: 8px;
|
|
26
|
+
padding: 2rem;
|
|
27
|
+
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
|
28
|
+
}
|
|
29
|
+
h1 { color: #28a745; margin-bottom: 1rem; }
|
|
30
|
+
.success {
|
|
31
|
+
background: #d4edda;
|
|
32
|
+
padding: 1rem;
|
|
33
|
+
border-radius: 4px;
|
|
34
|
+
margin: 1rem 0;
|
|
35
|
+
border: 1px solid #c3e6cb;
|
|
36
|
+
}
|
|
37
|
+
.code {
|
|
38
|
+
background: #f5f5f5;
|
|
39
|
+
padding: 0.5rem;
|
|
40
|
+
border-radius: 4px;
|
|
41
|
+
font-family: monospace;
|
|
42
|
+
word-break: break-all;
|
|
43
|
+
font-size: 0.875rem;
|
|
44
|
+
}
|
|
45
|
+
.info { margin: 1.5rem 0; }
|
|
46
|
+
.info p {
|
|
47
|
+
margin-bottom: 0.5rem;
|
|
48
|
+
font-weight: 600;
|
|
49
|
+
color: #495057;
|
|
50
|
+
}
|
|
51
|
+
.button {
|
|
52
|
+
background: #007bff;
|
|
53
|
+
color: white;
|
|
54
|
+
padding: 0.75rem 1.5rem;
|
|
55
|
+
border-radius: 4px;
|
|
56
|
+
text-decoration: none;
|
|
57
|
+
display: inline-block;
|
|
58
|
+
margin-top: 1rem;
|
|
59
|
+
border: none;
|
|
60
|
+
cursor: pointer;
|
|
61
|
+
font-size: 1rem;
|
|
62
|
+
}
|
|
63
|
+
.button:hover { background: #0056b3; }
|
|
64
|
+
.auto-close {
|
|
65
|
+
color: #6c757d;
|
|
66
|
+
font-size: 0.875rem;
|
|
67
|
+
margin-top: 2rem;
|
|
68
|
+
text-align: center;
|
|
69
|
+
}
|
|
70
|
+
</style>
|
|
71
|
+
<script>
|
|
72
|
+
if (window.opener) {
|
|
73
|
+
setTimeout(() => window.close(), ${data.expiresIn || 5000});
|
|
74
|
+
}
|
|
75
|
+
</script>
|
|
76
|
+
</head>
|
|
77
|
+
<body>
|
|
78
|
+
<div class="container">
|
|
79
|
+
<h1>✅ Authorization Successful!</h1>
|
|
80
|
+
<div class="success">
|
|
81
|
+
<strong>Delegation has been granted successfully.</strong>
|
|
82
|
+
</div>
|
|
83
|
+
|
|
84
|
+
<div class="info">
|
|
85
|
+
<p>Delegation ID:</p>
|
|
86
|
+
<div class="code">${data.delegationId}</div>
|
|
87
|
+
</div>
|
|
88
|
+
|
|
89
|
+
<div class="info">
|
|
90
|
+
<p>Session ID:</p>
|
|
91
|
+
<div class="code">${data.sessionId}</div>
|
|
92
|
+
</div>
|
|
93
|
+
|
|
94
|
+
<div class="info">
|
|
95
|
+
<p>Authorized Scopes:</p>
|
|
96
|
+
<div class="code">${data.scopes.join(', ')}</div>
|
|
97
|
+
</div>
|
|
98
|
+
|
|
99
|
+
<p>You can now close this window and return to Claude Desktop. The authorized tools are ready to use.</p>
|
|
100
|
+
|
|
101
|
+
<button onclick="window.close()" class="button">Close Window</button>
|
|
102
|
+
|
|
103
|
+
<div class="auto-close">
|
|
104
|
+
This window will close automatically in ${Math.floor((data.expiresIn || 5000) / 1000)} seconds.
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
</body>
|
|
108
|
+
</html>
|
|
109
|
+
`;
|
|
110
|
+
/**
|
|
111
|
+
* Default error page template
|
|
112
|
+
*/
|
|
113
|
+
const defaultErrorTemplate = (error) => `
|
|
114
|
+
<!DOCTYPE html>
|
|
115
|
+
<html>
|
|
116
|
+
<head>
|
|
117
|
+
<title>Authorization Failed</title>
|
|
118
|
+
<style>
|
|
119
|
+
body {
|
|
120
|
+
font-family: system-ui, -apple-system, sans-serif;
|
|
121
|
+
padding: 2rem;
|
|
122
|
+
max-width: 600px;
|
|
123
|
+
margin: 0 auto;
|
|
124
|
+
background: linear-gradient(to bottom, #f8f9fa, #e9ecef);
|
|
125
|
+
min-height: 100vh;
|
|
126
|
+
}
|
|
127
|
+
.container {
|
|
128
|
+
background: white;
|
|
129
|
+
border-radius: 8px;
|
|
130
|
+
padding: 2rem;
|
|
131
|
+
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
|
132
|
+
}
|
|
133
|
+
h1 { color: #dc3545; margin-bottom: 1rem; }
|
|
134
|
+
.error {
|
|
135
|
+
background: #f8d7da;
|
|
136
|
+
padding: 1rem;
|
|
137
|
+
border-radius: 4px;
|
|
138
|
+
margin: 1rem 0;
|
|
139
|
+
border: 1px solid #f5c6cb;
|
|
140
|
+
}
|
|
141
|
+
.code {
|
|
142
|
+
background: #f5f5f5;
|
|
143
|
+
padding: 0.25rem 0.5rem;
|
|
144
|
+
border-radius: 4px;
|
|
145
|
+
font-family: monospace;
|
|
146
|
+
display: inline-block;
|
|
147
|
+
}
|
|
148
|
+
.button {
|
|
149
|
+
background: #6c757d;
|
|
150
|
+
color: white;
|
|
151
|
+
padding: 0.75rem 1.5rem;
|
|
152
|
+
border-radius: 4px;
|
|
153
|
+
text-decoration: none;
|
|
154
|
+
display: inline-block;
|
|
155
|
+
margin-top: 1rem;
|
|
156
|
+
border: none;
|
|
157
|
+
cursor: pointer;
|
|
158
|
+
font-size: 1rem;
|
|
159
|
+
}
|
|
160
|
+
.button:hover { background: #5a6268; }
|
|
161
|
+
</style>
|
|
162
|
+
</head>
|
|
163
|
+
<body>
|
|
164
|
+
<div class="container">
|
|
165
|
+
<h1>❌ Authorization Failed</h1>
|
|
166
|
+
<div class="error">
|
|
167
|
+
<p><strong>Error:</strong> <span class="code">${error.error}</span></p>
|
|
168
|
+
<p><strong>Description:</strong> ${error.description}</p>
|
|
169
|
+
</div>
|
|
170
|
+
<p>Please close this window and try again.</p>
|
|
171
|
+
<button onclick="window.close()" class="button">Close Window</button>
|
|
172
|
+
</div>
|
|
173
|
+
</body>
|
|
174
|
+
</html>
|
|
175
|
+
`;
|
|
176
|
+
/**
|
|
177
|
+
* Create OAuth callback handler for Hono app
|
|
178
|
+
*
|
|
179
|
+
* @param config OAuth callback configuration
|
|
180
|
+
* @returns Hono route handler
|
|
181
|
+
*/
|
|
182
|
+
export function createOAuthCallbackHandler(config = {}) {
|
|
183
|
+
return async (c) => {
|
|
184
|
+
const env = c.env;
|
|
185
|
+
// Get configuration with defaults
|
|
186
|
+
const { agentShieldApiUrl = env.AGENTSHIELD_API_URL || 'https://hobbs.work', delegationStorage, successTemplate = defaultSuccessTemplate, errorTemplate = defaultErrorTemplate, autoClose = true, autoCloseDelay = 5000 } = config;
|
|
187
|
+
// Get query parameters
|
|
188
|
+
const code = c.req.query('code');
|
|
189
|
+
const stateParam = c.req.query('state');
|
|
190
|
+
const error = c.req.query('error');
|
|
191
|
+
// Handle OAuth errors
|
|
192
|
+
if (error) {
|
|
193
|
+
const errorDescription = c.req.query('error_description') || 'Authorization failed';
|
|
194
|
+
console.error('[OAuth] Error from provider:', error, errorDescription);
|
|
195
|
+
const html = errorTemplate({
|
|
196
|
+
error,
|
|
197
|
+
description: errorDescription
|
|
198
|
+
});
|
|
199
|
+
return c.html(html, 400);
|
|
200
|
+
}
|
|
201
|
+
// Validate required parameters
|
|
202
|
+
if (!code || !stateParam) {
|
|
203
|
+
console.error('[OAuth] Missing code or state parameter');
|
|
204
|
+
const html = errorTemplate({
|
|
205
|
+
error: 'invalid_request',
|
|
206
|
+
description: 'Missing authorization code or state parameter'
|
|
207
|
+
});
|
|
208
|
+
return c.html(html, 400);
|
|
209
|
+
}
|
|
210
|
+
// Decode state parameter
|
|
211
|
+
let state;
|
|
212
|
+
try {
|
|
213
|
+
state = JSON.parse(atob(stateParam));
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
console.error('[OAuth] Failed to decode state:', err);
|
|
217
|
+
const html = errorTemplate({
|
|
218
|
+
error: 'invalid_state',
|
|
219
|
+
description: 'Invalid state parameter'
|
|
220
|
+
});
|
|
221
|
+
return c.html(html, 400);
|
|
222
|
+
}
|
|
223
|
+
const { project_id, agent_did, session_id, delegation_id } = state;
|
|
224
|
+
// Validate session ID
|
|
225
|
+
if (!session_id) {
|
|
226
|
+
console.error('[OAuth] No session ID in state');
|
|
227
|
+
const html = errorTemplate({
|
|
228
|
+
error: 'missing_session',
|
|
229
|
+
description: 'No session ID provided in OAuth state'
|
|
230
|
+
});
|
|
231
|
+
return c.html(html, 400);
|
|
232
|
+
}
|
|
233
|
+
console.log('[OAuth] Processing authorization code exchange:', {
|
|
234
|
+
projectId: project_id,
|
|
235
|
+
agentDid: agent_did.substring(0, 20) + '...',
|
|
236
|
+
sessionId: session_id,
|
|
237
|
+
delegationId: delegation_id
|
|
238
|
+
});
|
|
239
|
+
try {
|
|
240
|
+
// Exchange authorization code for delegation token
|
|
241
|
+
const tokenEndpoint = `${agentShieldApiUrl}/api/v1/bouncer/oauth/token`;
|
|
242
|
+
const tokenResponse = await fetch(tokenEndpoint, {
|
|
243
|
+
method: 'POST',
|
|
244
|
+
headers: {
|
|
245
|
+
'Content-Type': 'application/json',
|
|
246
|
+
'Accept': 'application/json'
|
|
247
|
+
},
|
|
248
|
+
body: JSON.stringify({
|
|
249
|
+
grant_type: 'authorization_code',
|
|
250
|
+
code: code,
|
|
251
|
+
agent_did: agent_did,
|
|
252
|
+
project_id: project_id
|
|
253
|
+
})
|
|
254
|
+
});
|
|
255
|
+
if (!tokenResponse.ok) {
|
|
256
|
+
const errorText = await tokenResponse.text();
|
|
257
|
+
console.error('[OAuth] Token exchange failed:', {
|
|
258
|
+
status: tokenResponse.status,
|
|
259
|
+
error: errorText
|
|
260
|
+
});
|
|
261
|
+
const html = errorTemplate({
|
|
262
|
+
error: 'token_exchange_failed',
|
|
263
|
+
description: 'Failed to exchange authorization code for delegation token'
|
|
264
|
+
});
|
|
265
|
+
return c.html(html, tokenResponse.status);
|
|
266
|
+
}
|
|
267
|
+
const tokenData = await tokenResponse.json();
|
|
268
|
+
// Validate token response
|
|
269
|
+
if (!tokenData.delegation_token) {
|
|
270
|
+
console.error('[OAuth] No delegation token in response:', tokenData);
|
|
271
|
+
const html = errorTemplate({
|
|
272
|
+
error: 'invalid_response',
|
|
273
|
+
description: 'Invalid token response from authorization server'
|
|
274
|
+
});
|
|
275
|
+
return c.html(html, 500);
|
|
276
|
+
}
|
|
277
|
+
console.log('[OAuth] Token exchange successful:', {
|
|
278
|
+
delegationId: tokenData.delegation_id,
|
|
279
|
+
sessionId: tokenData.session_id || session_id,
|
|
280
|
+
expiresIn: tokenData.expires_in,
|
|
281
|
+
scopes: tokenData.scopes
|
|
282
|
+
});
|
|
283
|
+
// Store delegation token in KV if storage is configured
|
|
284
|
+
if (delegationStorage) {
|
|
285
|
+
const ttl = tokenData.expires_in || (7 * 24 * 60 * 60); // Default 7 days
|
|
286
|
+
const key = `session:${session_id}`;
|
|
287
|
+
await delegationStorage.put(key, tokenData.delegation_token, {
|
|
288
|
+
expirationTtl: ttl
|
|
289
|
+
});
|
|
290
|
+
console.log('[OAuth] Delegation token stored in KV:', {
|
|
291
|
+
key,
|
|
292
|
+
ttl,
|
|
293
|
+
sessionId: session_id,
|
|
294
|
+
delegationId: tokenData.delegation_id
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
// Return success page
|
|
298
|
+
const html = successTemplate({
|
|
299
|
+
delegationId: tokenData.delegation_id || delegation_id,
|
|
300
|
+
sessionId: session_id,
|
|
301
|
+
scopes: tokenData.scopes || [],
|
|
302
|
+
expiresIn: autoClose ? autoCloseDelay : 0
|
|
303
|
+
});
|
|
304
|
+
return c.html(html);
|
|
305
|
+
}
|
|
306
|
+
catch (error) {
|
|
307
|
+
console.error('[OAuth] Unexpected error:', error);
|
|
308
|
+
const html = errorTemplate({
|
|
309
|
+
error: 'internal_error',
|
|
310
|
+
description: error instanceof Error ? error.message : 'An unexpected error occurred'
|
|
311
|
+
});
|
|
312
|
+
return c.html(html, 500);
|
|
313
|
+
}
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Helper to extract delegation token from request
|
|
318
|
+
*
|
|
319
|
+
* Checks for delegation token in:
|
|
320
|
+
* 1. Authorization header (Bearer token)
|
|
321
|
+
* 2. x-delegation-token header
|
|
322
|
+
* 3. Query parameter (?delegation_token=)
|
|
323
|
+
*
|
|
324
|
+
* @param c Hono context
|
|
325
|
+
* @returns Delegation token or null
|
|
326
|
+
*/
|
|
327
|
+
export function extractDelegationToken(c) {
|
|
328
|
+
// Check Authorization header
|
|
329
|
+
const authHeader = c.req.header('Authorization');
|
|
330
|
+
if (authHeader?.startsWith('Bearer ')) {
|
|
331
|
+
return authHeader.substring(7);
|
|
332
|
+
}
|
|
333
|
+
// Check custom header
|
|
334
|
+
const customHeader = c.req.header('x-delegation-token');
|
|
335
|
+
if (customHeader) {
|
|
336
|
+
return customHeader;
|
|
337
|
+
}
|
|
338
|
+
// Check query parameter
|
|
339
|
+
const queryParam = c.req.query('delegation_token');
|
|
340
|
+
if (queryParam) {
|
|
341
|
+
return queryParam;
|
|
342
|
+
}
|
|
343
|
+
return null;
|
|
344
|
+
}
|
|
345
|
+
//# sourceMappingURL=oauth-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-handler.js","sourceRoot":"","sources":["../../src/runtime/oauth-handler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA4EH;;GAEG;AACH,MAAM,sBAAsB,GAAG,CAAC,IAAsB,EAAU,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6CAgEtB,IAAI,CAAC,SAAS,IAAI,IAAI;;;;;;;;;;;;;8BAarC,IAAI,CAAC,YAAY;;;;;8BAKjB,IAAI,CAAC,SAAS;;;;;8BAKd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;oDAQA,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;;;;;CAK9F,CAAC;AAEF;;GAEG;AACH,MAAM,oBAAoB,GAAG,CAAC,KAAqB,EAAU,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0DAsDN,KAAK,CAAC,KAAK;6CACxB,KAAK,CAAC,WAAW;;;;;;;CAO7D,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,SAA8B,EAAE;IACzE,OAAO,KAAK,EAAE,CAAc,EAAE,EAAE;QAC9B,MAAM,GAAG,GAAG,CAAC,CAAC,GAA0C,CAAC;QAEzD,kCAAkC;QAClC,MAAM,EACJ,iBAAiB,GAAG,GAAG,CAAC,mBAAmB,IAAI,oBAAoB,EACnE,iBAAiB,EACjB,eAAe,GAAG,sBAAsB,EACxC,aAAa,GAAG,oBAAoB,EACpC,SAAS,GAAG,IAAI,EAChB,cAAc,GAAG,IAAI,EACtB,GAAG,MAAM,CAAC;QAEX,uBAAuB;QACvB,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEnC,sBAAsB;QACtB,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,gBAAgB,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,sBAAsB,CAAC;YACpF,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;YAEvE,MAAM,IAAI,GAAG,aAAa,CAAC;gBACzB,KAAK;gBACL,WAAW,EAAE,gBAAgB;aAC9B,CAAC,CAAC;YACH,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC3B,CAAC;QAED,+BAA+B;QAC/B,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACzD,MAAM,IAAI,GAAG,aAAa,CAAC;gBACzB,KAAK,EAAE,iBAAiB;gBACxB,WAAW,EAAE,+CAA+C;aAC7D,CAAC,CAAC;YACH,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC3B,CAAC;QAED,yBAAyB;QACzB,IAAI,KAAiB,CAAC;QACtB,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;YACtD,MAAM,IAAI,GAAG,aAAa,CAAC;gBACzB,KAAK,EAAE,eAAe;gBACtB,WAAW,EAAE,yBAAyB;aACvC,CAAC,CAAC;YACH,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;QAEnE,sBAAsB;QACtB,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,aAAa,CAAC;gBACzB,KAAK,EAAE,iBAAiB;gBACxB,WAAW,EAAE,uCAAuC;aACrD,CAAC,CAAC;YACH,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC3B,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,iDAAiD,EAAE;YAC7D,SAAS,EAAE,UAAU;YACrB,QAAQ,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK;YAC5C,SAAS,EAAE,UAAU;YACrB,YAAY,EAAE,aAAa;SAC5B,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,mDAAmD;YACnD,MAAM,aAAa,GAAG,GAAG,iBAAiB,6BAA6B,CAAC;YAExE,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,aAAa,EAAE;gBAC/C,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,QAAQ,EAAE,kBAAkB;iBAC7B;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,UAAU,EAAE,oBAAoB;oBAChC,IAAI,EAAE,IAAI;oBACV,SAAS,EAAE,SAAS;oBACpB,UAAU,EAAE,UAAU;iBACvB,CAAC;aACH,CAAC,CAAC;YAEH,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;gBACtB,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;gBAC7C,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE;oBAC9C,MAAM,EAAE,aAAa,CAAC,MAAM;oBAC5B,KAAK,EAAE,SAAS;iBACjB,CAAC,CAAC;gBAEH,MAAM,IAAI,GAAG,aAAa,CAAC;oBACzB,KAAK,EAAE,uBAAuB;oBAC9B,WAAW,EAAE,4DAA4D;iBAC1E,CAAC,CAAC;gBACH,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;YAC5C,CAAC;YAED,MAAM,SAAS,GAA0B,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;YAEpE,0BAA0B;YAC1B,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;gBAChC,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,SAAS,CAAC,CAAC;gBACrE,MAAM,IAAI,GAAG,aAAa,CAAC;oBACzB,KAAK,EAAE,kBAAkB;oBACzB,WAAW,EAAE,kDAAkD;iBAChE,CAAC,CAAC;gBACH,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC3B,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE;gBAChD,YAAY,EAAE,SAAS,CAAC,aAAa;gBACrC,SAAS,EAAE,SAAS,CAAC,UAAU,IAAI,UAAU;gBAC7C,SAAS,EAAE,SAAS,CAAC,UAAU;gBAC/B,MAAM,EAAE,SAAS,CAAC,MAAM;aACzB,CAAC,CAAC;YAEH,wDAAwD;YACxD,IAAI,iBAAiB,EAAE,CAAC;gBACtB,MAAM,GAAG,GAAG,SAAS,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,iBAAiB;gBACzE,MAAM,GAAG,GAAG,WAAW,UAAU,EAAE,CAAC;gBAEpC,MAAM,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,gBAAgB,EAAE;oBAC3D,aAAa,EAAE,GAAG;iBACnB,CAAC,CAAC;gBAEH,OAAO,CAAC,GAAG,CAAC,wCAAwC,EAAE;oBACpD,GAAG;oBACH,GAAG;oBACH,SAAS,EAAE,UAAU;oBACrB,YAAY,EAAE,SAAS,CAAC,aAAa;iBACtC,CAAC,CAAC;YACL,CAAC;YAED,sBAAsB;YACtB,MAAM,IAAI,GAAG,eAAe,CAAC;gBAC3B,YAAY,EAAE,SAAS,CAAC,aAAa,IAAI,aAAa;gBACtD,SAAS,EAAE,UAAU;gBACrB,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,EAAE;gBAC9B,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;aAC1C,CAAC,CAAC;YAEH,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YAElD,MAAM,IAAI,GAAG,aAAa,CAAC;gBACzB,KAAK,EAAE,gBAAgB;gBACvB,WAAW,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,8BAA8B;aACrF,CAAC,CAAC;YACH,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,CAAc;IACnD,6BAA6B;IAC7B,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACjD,IAAI,UAAU,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,sBAAsB;IACtB,MAAM,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACxD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,wBAAwB;IACxB,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACnD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|