@kya-os/mcp-i 0.1.0-alpha.2.8 → 0.1.0-alpha.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 (85) hide show
  1. package/dist/{crypto.js → cjs/crypto.js} +17 -2
  2. package/dist/{index.d.ts → cjs/index.d.ts} +1 -0
  3. package/dist/{index.js → cjs/index.js} +31 -13
  4. package/dist/cjs/nextjs.d.ts +10 -0
  5. package/dist/cjs/nextjs.js +82 -0
  6. package/dist/cjs/vercel-adapter.d.ts +8 -0
  7. package/dist/cjs/vercel-adapter.js +67 -0
  8. package/dist/esm/auto.d.ts +13 -0
  9. package/dist/esm/auto.d.ts.map +1 -0
  10. package/dist/esm/auto.js +30 -0
  11. package/dist/esm/auto.js.map +1 -0
  12. package/dist/esm/crypto.d.ts +51 -0
  13. package/dist/esm/crypto.d.ts.map +1 -0
  14. package/dist/esm/crypto.js +230 -0
  15. package/dist/esm/crypto.js.map +1 -0
  16. package/dist/esm/dev-helper.d.ts +15 -0
  17. package/dist/esm/dev-helper.d.ts.map +1 -0
  18. package/dist/esm/dev-helper.js +63 -0
  19. package/dist/esm/dev-helper.js.map +1 -0
  20. package/dist/esm/encrypted-storage.d.ts +19 -0
  21. package/dist/esm/encrypted-storage.d.ts.map +1 -0
  22. package/dist/esm/encrypted-storage.js +48 -0
  23. package/dist/esm/encrypted-storage.js.map +1 -0
  24. package/dist/esm/index.d.ts +128 -0
  25. package/dist/esm/index.d.ts.map +1 -0
  26. package/dist/esm/index.js +671 -0
  27. package/dist/esm/index.js.map +1 -0
  28. package/dist/esm/logger.d.ts +46 -0
  29. package/dist/esm/logger.d.ts.map +1 -0
  30. package/dist/esm/logger.js +76 -0
  31. package/dist/esm/logger.js.map +1 -0
  32. package/dist/esm/nextjs.d.ts +22 -0
  33. package/dist/esm/nextjs.d.ts.map +1 -0
  34. package/dist/esm/nextjs.js +82 -0
  35. package/dist/esm/nextjs.js.map +1 -0
  36. package/dist/esm/registry/index.d.ts +43 -0
  37. package/dist/esm/registry/index.d.ts.map +1 -0
  38. package/dist/esm/registry/index.js +89 -0
  39. package/dist/esm/registry/index.js.map +1 -0
  40. package/dist/esm/registry/knowthat.d.ts +30 -0
  41. package/dist/esm/registry/knowthat.d.ts.map +1 -0
  42. package/dist/esm/registry/knowthat.js +106 -0
  43. package/dist/esm/registry/knowthat.js.map +1 -0
  44. package/dist/esm/rotation.d.ts +57 -0
  45. package/dist/esm/rotation.d.ts.map +1 -0
  46. package/dist/esm/rotation.js +133 -0
  47. package/dist/esm/rotation.js.map +1 -0
  48. package/dist/esm/storage.d.ts +65 -0
  49. package/dist/esm/storage.d.ts.map +1 -0
  50. package/dist/esm/storage.js +160 -0
  51. package/dist/esm/storage.js.map +1 -0
  52. package/dist/esm/transport.d.ts +52 -0
  53. package/dist/esm/transport.d.ts.map +1 -0
  54. package/dist/esm/transport.js +209 -0
  55. package/dist/esm/transport.js.map +1 -0
  56. package/dist/esm/types.d.ts +188 -0
  57. package/dist/esm/types.d.ts.map +1 -0
  58. package/dist/esm/types.js +5 -0
  59. package/dist/esm/types.js.map +1 -0
  60. package/dist/esm/vercel-adapter.d.ts +26 -0
  61. package/dist/esm/vercel-adapter.d.ts.map +1 -0
  62. package/dist/esm/vercel-adapter.js +80 -0
  63. package/dist/esm/vercel-adapter.js.map +1 -0
  64. package/package.json +27 -13
  65. /package/dist/{auto.d.ts → cjs/auto.d.ts} +0 -0
  66. /package/dist/{auto.js → cjs/auto.js} +0 -0
  67. /package/dist/{crypto.d.ts → cjs/crypto.d.ts} +0 -0
  68. /package/dist/{dev-helper.d.ts → cjs/dev-helper.d.ts} +0 -0
  69. /package/dist/{dev-helper.js → cjs/dev-helper.js} +0 -0
  70. /package/dist/{encrypted-storage.d.ts → cjs/encrypted-storage.d.ts} +0 -0
  71. /package/dist/{encrypted-storage.js → cjs/encrypted-storage.js} +0 -0
  72. /package/dist/{logger.d.ts → cjs/logger.d.ts} +0 -0
  73. /package/dist/{logger.js → cjs/logger.js} +0 -0
  74. /package/dist/{registry → cjs/registry}/index.d.ts +0 -0
  75. /package/dist/{registry → cjs/registry}/index.js +0 -0
  76. /package/dist/{registry → cjs/registry}/knowthat.d.ts +0 -0
  77. /package/dist/{registry → cjs/registry}/knowthat.js +0 -0
  78. /package/dist/{rotation.d.ts → cjs/rotation.d.ts} +0 -0
  79. /package/dist/{rotation.js → cjs/rotation.js} +0 -0
  80. /package/dist/{storage.d.ts → cjs/storage.d.ts} +0 -0
  81. /package/dist/{storage.js → cjs/storage.js} +0 -0
  82. /package/dist/{transport.d.ts → cjs/transport.d.ts} +0 -0
  83. /package/dist/{transport.js → cjs/transport.js} +0 -0
  84. /package/dist/{types.d.ts → cjs/types.d.ts} +0 -0
  85. /package/dist/{types.js → cjs/types.js} +0 -0
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Key rotation support for MCP-I
3
+ */
4
+ import { generateKeyPair, sign } from './crypto.js';
5
+ export class KeyRotationManager {
6
+ identity;
7
+ transport;
8
+ policy;
9
+ signatureCount = 0;
10
+ keyCreatedAt;
11
+ lastRotatedAt;
12
+ constructor(identity, transport, policy = {}) {
13
+ this.identity = identity;
14
+ this.transport = transport;
15
+ this.policy = policy;
16
+ this.keyCreatedAt = new Date(identity.registeredAt);
17
+ }
18
+ /**
19
+ * Check key health and rotation needs
20
+ */
21
+ checkKeyHealth() {
22
+ const now = new Date();
23
+ const age = now.getTime() - this.keyCreatedAt.getTime();
24
+ const maxAge = this.policy.maxAge || 90 * 24 * 60 * 60 * 1000; // 90 days default
25
+ const maxSignatures = this.policy.maxSignatures || 1000000; // 1M default
26
+ const shouldRotate = age > maxAge || this.signatureCount > maxSignatures;
27
+ return {
28
+ age,
29
+ signatureCount: this.signatureCount,
30
+ shouldRotate,
31
+ lastRotated: this.lastRotatedAt
32
+ };
33
+ }
34
+ /**
35
+ * Increment signature count
36
+ */
37
+ incrementSignatureCount() {
38
+ this.signatureCount++;
39
+ }
40
+ /**
41
+ * Rotate keys with the registry
42
+ */
43
+ async rotateKeys(reason = 'scheduled') {
44
+ try {
45
+ // Generate new key pair
46
+ const newKeyPair = await generateKeyPair();
47
+ // Create rotation request
48
+ const timestamp = Date.now();
49
+ const message = `rotate-keys:${this.identity.did}:${timestamp}:${reason}`;
50
+ const signature = await sign(message, this.identity.privateKey);
51
+ // Prepare rotation payload
52
+ const rotationRequest = {
53
+ newPublicKey: {
54
+ type: 'Ed25519VerificationKey2020',
55
+ publicKeyBase64: newKeyPair.publicKey
56
+ },
57
+ rotationReason: reason,
58
+ signedStatement: signature,
59
+ timestamp
60
+ };
61
+ // Get the correct registry URL
62
+ const registryUrl = this.getRegistryUrl();
63
+ const agentId = this.extractAgentId();
64
+ // Submit rotation request
65
+ const response = await this.transport.post(`${registryUrl}/api/agents/${agentId}/rotate-key`, rotationRequest, {
66
+ headers: {
67
+ 'Authorization': `DID-Auth ${signature}`,
68
+ 'Content-Type': 'application/json'
69
+ }
70
+ });
71
+ if (response.data.success) {
72
+ // Update local identity with new keys
73
+ this.identity.publicKey = newKeyPair.publicKey;
74
+ this.identity.privateKey = newKeyPair.privateKey;
75
+ this.lastRotatedAt = new Date();
76
+ this.keyCreatedAt = new Date();
77
+ this.signatureCount = 0;
78
+ return {
79
+ success: true,
80
+ newKeyId: response.data.newKeyId,
81
+ oldKeyId: response.data.oldKeyId,
82
+ gracePeriodEnd: new Date(response.data.gracePeriodEnd)
83
+ };
84
+ }
85
+ else {
86
+ return {
87
+ success: false,
88
+ error: response.data.error || 'Key rotation failed'
89
+ };
90
+ }
91
+ }
92
+ catch (error) {
93
+ return {
94
+ success: false,
95
+ error: error.message || 'Key rotation error'
96
+ };
97
+ }
98
+ }
99
+ /**
100
+ * Setup automatic rotation based on policy
101
+ */
102
+ setupAutoRotation(callback) {
103
+ const checkInterval = 24 * 60 * 60 * 1000; // Check daily
104
+ return setInterval(async () => {
105
+ const health = this.checkKeyHealth();
106
+ if (health.shouldRotate) {
107
+ const result = await this.rotateKeys('auto-rotation');
108
+ if (callback) {
109
+ callback(result);
110
+ }
111
+ }
112
+ }, checkInterval);
113
+ }
114
+ /**
115
+ * Get registry URL based on DID host
116
+ */
117
+ getRegistryUrl() {
118
+ // Always use knowthat.ai as the registry
119
+ return 'https://knowthat.ai';
120
+ }
121
+ /**
122
+ * Extract agent ID from DID or identity
123
+ */
124
+ extractAgentId() {
125
+ if (this.identity.agentId) {
126
+ return this.identity.agentId;
127
+ }
128
+ // Extract from DID (e.g., did:web:knowthat.ai:agents:my-agent -> my-agent)
129
+ const parts = this.identity.did.split(':');
130
+ return parts[parts.length - 1];
131
+ }
132
+ }
133
+ //# sourceMappingURL=rotation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rotation.js","sourceRoot":"","sources":["../../src/rotation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Storage abstraction for MCP-I identity
3
+ * Supports both file-based and in-memory storage for different runtime environments
4
+ */
5
+ import { PersistedIdentity } from './types';
6
+ export interface StorageProvider {
7
+ load(): Promise<PersistedIdentity | null>;
8
+ save(identity: PersistedIdentity): Promise<void>;
9
+ exists(): Promise<boolean>;
10
+ }
11
+ /**
12
+ * File-based storage for traditional Node.js environments
13
+ */
14
+ export declare class FileStorage implements StorageProvider {
15
+ private filePath;
16
+ constructor(customPath?: string);
17
+ load(): Promise<PersistedIdentity | null>;
18
+ save(identity: PersistedIdentity): Promise<void>;
19
+ exists(): Promise<boolean>;
20
+ }
21
+ /**
22
+ * In-memory storage for Lambda/Edge runtime environments
23
+ */
24
+ export declare class MemoryStorage implements StorageProvider {
25
+ private static instances;
26
+ private key;
27
+ constructor(key?: string);
28
+ load(): Promise<PersistedIdentity | null>;
29
+ save(identity: PersistedIdentity): Promise<void>;
30
+ exists(): Promise<boolean>;
31
+ /**
32
+ * Clear all stored identities (useful for testing)
33
+ */
34
+ static clear(): void;
35
+ }
36
+ /**
37
+ * Environment variable storage loader
38
+ * This works with both file and memory storage as a fallback
39
+ */
40
+ export declare class EnvironmentStorage {
41
+ static load(): PersistedIdentity | null;
42
+ }
43
+ /**
44
+ * Combined storage that tries multiple providers in order
45
+ */
46
+ export declare class CombinedStorage implements StorageProvider {
47
+ private providers;
48
+ private primaryProvider;
49
+ constructor(providers: StorageProvider[]);
50
+ load(): Promise<PersistedIdentity | null>;
51
+ save(identity: PersistedIdentity): Promise<void>;
52
+ exists(): Promise<boolean>;
53
+ }
54
+ /**
55
+ * Storage factory based on runtime detection
56
+ */
57
+ export declare class StorageFactory {
58
+ static create(options?: {
59
+ storage?: 'file' | 'memory' | 'auto';
60
+ customPath?: string;
61
+ memoryKey?: string;
62
+ encryptionPassword?: string;
63
+ }): StorageProvider;
64
+ }
65
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/storage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,IAAI,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC5B;AAED;;GAEG;AACH,qBAAa,WAAY,YAAW,eAAe;IACjD,OAAO,CAAC,QAAQ,CAAS;gBAEb,UAAU,CAAC,EAAE,MAAM;IAIzB,IAAI,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAYzC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;CAGjC;AAED;;GAEG;AACH,qBAAa,aAAc,YAAW,eAAe;IACnD,OAAO,CAAC,MAAM,CAAC,SAAS,CAAwC;IAChE,OAAO,CAAC,GAAG,CAAS;gBAER,GAAG,CAAC,EAAE,MAAM;IAKlB,IAAI,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAIzC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAIhC;;OAEG;IACH,MAAM,CAAC,KAAK,IAAI,IAAI;CAGrB;AAED;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,MAAM,CAAC,IAAI,IAAI,iBAAiB,GAAG,IAAI;CAaxC;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,eAAe;IACrD,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,eAAe,CAAkB;gBAE7B,SAAS,EAAE,eAAe,EAAE;IAQlC,IAAI,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAiBzC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;CASjC;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;QACtB,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;QACrC,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B,GAAG,eAAe;CAiCpB"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Storage abstraction for MCP-I identity
3
+ * Supports both file-based and in-memory storage for different runtime environments
4
+ */
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ /**
8
+ * File-based storage for traditional Node.js environments
9
+ */
10
+ export class FileStorage {
11
+ filePath;
12
+ constructor(customPath) {
13
+ this.filePath = customPath || path.join(process.cwd(), '.mcp-identity.json');
14
+ }
15
+ async load() {
16
+ try {
17
+ if (fs.existsSync(this.filePath)) {
18
+ const content = fs.readFileSync(this.filePath, 'utf-8');
19
+ return JSON.parse(content);
20
+ }
21
+ }
22
+ catch {
23
+ // Ignore errors
24
+ }
25
+ return null;
26
+ }
27
+ async save(identity) {
28
+ fs.writeFileSync(this.filePath, JSON.stringify(identity, null, 2));
29
+ }
30
+ async exists() {
31
+ return fs.existsSync(this.filePath);
32
+ }
33
+ }
34
+ /**
35
+ * In-memory storage for Lambda/Edge runtime environments
36
+ */
37
+ export class MemoryStorage {
38
+ static instances = new Map();
39
+ key;
40
+ constructor(key) {
41
+ // Use a unique key for this instance (e.g., based on agent name)
42
+ this.key = key || 'default';
43
+ }
44
+ async load() {
45
+ return MemoryStorage.instances.get(this.key) || null;
46
+ }
47
+ async save(identity) {
48
+ MemoryStorage.instances.set(this.key, identity);
49
+ }
50
+ async exists() {
51
+ return MemoryStorage.instances.has(this.key);
52
+ }
53
+ /**
54
+ * Clear all stored identities (useful for testing)
55
+ */
56
+ static clear() {
57
+ MemoryStorage.instances.clear();
58
+ }
59
+ }
60
+ /**
61
+ * Environment variable storage loader
62
+ * This works with both file and memory storage as a fallback
63
+ */
64
+ export class EnvironmentStorage {
65
+ static load() {
66
+ if (process.env.AGENT_DID && process.env.AGENT_PUBLIC_KEY && process.env.AGENT_PRIVATE_KEY) {
67
+ return {
68
+ did: process.env.AGENT_DID,
69
+ publicKey: process.env.AGENT_PUBLIC_KEY,
70
+ privateKey: process.env.AGENT_PRIVATE_KEY,
71
+ agentId: process.env.AGENT_ID || '',
72
+ agentSlug: process.env.AGENT_SLUG || '',
73
+ registeredAt: process.env.AGENT_REGISTERED_AT || new Date().toISOString()
74
+ };
75
+ }
76
+ return null;
77
+ }
78
+ }
79
+ /**
80
+ * Combined storage that tries multiple providers in order
81
+ */
82
+ export class CombinedStorage {
83
+ providers;
84
+ primaryProvider;
85
+ constructor(providers) {
86
+ if (providers.length === 0) {
87
+ throw new Error('At least one storage provider is required');
88
+ }
89
+ this.providers = providers;
90
+ this.primaryProvider = providers[0];
91
+ }
92
+ async load() {
93
+ // Try environment variables first
94
+ const envIdentity = EnvironmentStorage.load();
95
+ if (envIdentity) {
96
+ return envIdentity;
97
+ }
98
+ // Try each provider in order
99
+ for (const provider of this.providers) {
100
+ const identity = await provider.load();
101
+ if (identity) {
102
+ return identity;
103
+ }
104
+ }
105
+ return null;
106
+ }
107
+ async save(identity) {
108
+ // Save to primary provider only
109
+ await this.primaryProvider.save(identity);
110
+ }
111
+ async exists() {
112
+ // Check if identity exists in any provider
113
+ for (const provider of this.providers) {
114
+ if (await provider.exists()) {
115
+ return true;
116
+ }
117
+ }
118
+ return false;
119
+ }
120
+ }
121
+ /**
122
+ * Storage factory based on runtime detection
123
+ */
124
+ export class StorageFactory {
125
+ static create(options) {
126
+ const storageType = options?.storage || 'auto';
127
+ let baseStorage;
128
+ if (storageType === 'memory') {
129
+ baseStorage = new MemoryStorage(options?.memoryKey);
130
+ }
131
+ else if (storageType === 'file') {
132
+ baseStorage = new FileStorage(options?.customPath);
133
+ }
134
+ else if (storageType === 'auto') {
135
+ // Auto-detect based on runtime
136
+ // Check if we're in a Lambda/Edge environment
137
+ if (process.env.AWS_LAMBDA_FUNCTION_NAME ||
138
+ process.env.VERCEL ||
139
+ process.env.NETLIFY ||
140
+ !fs.existsSync ||
141
+ typeof fs.writeFileSync !== 'function') {
142
+ baseStorage = new MemoryStorage(options?.memoryKey);
143
+ }
144
+ else {
145
+ // Default to file storage for Node.js
146
+ baseStorage = new FileStorage(options?.customPath);
147
+ }
148
+ }
149
+ else {
150
+ throw new Error(`Unknown storage type: ${storageType}`);
151
+ }
152
+ // Wrap with encryption if password provided
153
+ if (options?.encryptionPassword) {
154
+ const { createEncryptedStorage } = require('./encrypted-storage');
155
+ return createEncryptedStorage(baseStorage, options.encryptionPassword);
156
+ }
157
+ return baseStorage;
158
+ }
159
+ }
160
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/storage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAS7B;;GAEG;AACH,MAAM,OAAO,WAAW;IACd,QAAQ,CAAS;IAEzB,YAAY,UAAmB;QAC7B,IAAI,CAAC,QAAQ,GAAG,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACxD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAA2B;QACpC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,aAAa;IAChB,MAAM,CAAC,SAAS,GAAG,IAAI,GAAG,EAA6B,CAAC;IACxD,GAAG,CAAS;IAEpB,YAAY,GAAY;QACtB,iEAAiE;QACjE,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,SAAS,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,IAAI;QACR,OAAO,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAA2B;QACpC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK;QACV,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;;AAGH;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IAC7B,MAAM,CAAC,IAAI;QACT,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;YAC3F,OAAO;gBACL,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;gBAC1B,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;gBACvC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;gBACzC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE;gBACnC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE;gBACvC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aAC1E,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAe;IAClB,SAAS,CAAoB;IAC7B,eAAe,CAAkB;IAEzC,YAAY,SAA4B;QACtC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,kCAAkC;QAClC,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,6BAA6B;QAC7B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAA2B;QACpC,gCAAgC;QAChC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,MAAM;QACV,2CAA2C;QAC3C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,cAAc;IACzB,MAAM,CAAC,MAAM,CAAC,OAKb;QACC,MAAM,WAAW,GAAG,OAAO,EAAE,OAAO,IAAI,MAAM,CAAC;QAC/C,IAAI,WAA4B,CAAC;QAEjC,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;YAC7B,WAAW,GAAG,IAAI,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACtD,CAAC;aAAM,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;YAClC,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACrD,CAAC;aAAM,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;YAClC,+BAA+B;YAC/B,8CAA8C;YAC9C,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB;gBACpC,OAAO,CAAC,GAAG,CAAC,MAAM;gBAClB,OAAO,CAAC,GAAG,CAAC,OAAO;gBACnB,CAAC,EAAE,CAAC,UAAU;gBACd,OAAO,EAAE,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC;gBAC3C,WAAW,GAAG,IAAI,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,sCAAsC;gBACtC,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,yBAAyB,WAAW,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,4CAA4C;QAC5C,IAAI,OAAO,EAAE,kBAAkB,EAAE,CAAC;YAChC,MAAM,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;YAClE,OAAO,sBAAsB,CAAC,WAAW,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;CACF"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Transport abstraction for HTTP requests
3
+ * Supports both axios and native fetch with runtime detection
4
+ */
5
+ export interface TransportOptions {
6
+ timeout?: number;
7
+ headers?: Record<string, string>;
8
+ }
9
+ export interface TransportResponse<T = any> {
10
+ data: T;
11
+ status: number;
12
+ headers: Record<string, string>;
13
+ }
14
+ export interface Transport {
15
+ post<T = any>(url: string, data: any, options?: TransportOptions): Promise<TransportResponse<T>>;
16
+ get<T = any>(url: string, options?: TransportOptions): Promise<TransportResponse<T>>;
17
+ }
18
+ /**
19
+ * Native fetch-based transport (preferred for Edge runtimes)
20
+ */
21
+ export declare class FetchTransport implements Transport {
22
+ post<T = any>(url: string, data: any, options?: TransportOptions): Promise<TransportResponse<T>>;
23
+ get<T = any>(url: string, options?: TransportOptions): Promise<TransportResponse<T>>;
24
+ }
25
+ /**
26
+ * Axios-based transport (for Node.js environments)
27
+ */
28
+ export declare class AxiosTransport implements Transport {
29
+ private axiosInstance;
30
+ post<T = any>(url: string, data: any, options?: TransportOptions): Promise<TransportResponse<T>>;
31
+ get<T = any>(url: string, options?: TransportOptions): Promise<TransportResponse<T>>;
32
+ private getAxios;
33
+ }
34
+ /**
35
+ * Runtime detection for optimal transport selection
36
+ */
37
+ export declare class RuntimeDetector {
38
+ static isEdgeRuntime(): boolean;
39
+ static isNodeRuntime(): boolean;
40
+ static isNextJs(): boolean;
41
+ static hasFetch(): boolean;
42
+ static isLambda(): boolean;
43
+ }
44
+ /**
45
+ * Transport factory with runtime detection
46
+ */
47
+ export declare class TransportFactory {
48
+ static create(options?: {
49
+ transport?: 'axios' | 'fetch' | 'auto';
50
+ }): Transport;
51
+ }
52
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/transport.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,GAAG;IACxC,IAAI,EAAE,CAAC,CAAC;IACR,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IACjG,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;CACtF;AAED;;GAEG;AACH,qBAAa,cAAe,YAAW,SAAS;IACxC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAwChG,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;CAmC3F;AAED;;GAEG;AACH,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,aAAa,CAAM;IAErB,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IA0BhG,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAuB5E,QAAQ;CAgBvB;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,MAAM,CAAC,aAAa,IAAI,OAAO;IAU/B,MAAM,CAAC,aAAa,IAAI,OAAO;IAQ/B,MAAM,CAAC,QAAQ,IAAI,OAAO;IAQ1B,MAAM,CAAC,QAAQ,IAAI,OAAO;IAI1B,MAAM,CAAC,QAAQ,IAAI,OAAO;CAO3B;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;QACtB,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;KACxC,GAAG,SAAS;CA+Cd"}
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Transport abstraction for HTTP requests
3
+ * Supports both axios and native fetch with runtime detection
4
+ */
5
+ /**
6
+ * Native fetch-based transport (preferred for Edge runtimes)
7
+ */
8
+ export class FetchTransport {
9
+ async post(url, data, options) {
10
+ const controller = new AbortController();
11
+ const timeout = options?.timeout || 30000;
12
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
13
+ try {
14
+ const response = await fetch(url, {
15
+ method: 'POST',
16
+ headers: {
17
+ 'Content-Type': 'application/json',
18
+ ...options?.headers
19
+ },
20
+ body: JSON.stringify(data),
21
+ signal: controller.signal
22
+ });
23
+ clearTimeout(timeoutId);
24
+ if (!response.ok) {
25
+ const error = await response.text();
26
+ throw new Error(`HTTP ${response.status}: ${error}`);
27
+ }
28
+ const responseData = await response.json();
29
+ return {
30
+ data: responseData,
31
+ status: response.status,
32
+ headers: Object.fromEntries(response.headers.entries())
33
+ };
34
+ }
35
+ catch (error) {
36
+ clearTimeout(timeoutId);
37
+ if (error.name === 'AbortError') {
38
+ throw new Error('Request timeout');
39
+ }
40
+ throw error;
41
+ }
42
+ }
43
+ async get(url, options) {
44
+ const controller = new AbortController();
45
+ const timeout = options?.timeout || 30000;
46
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
47
+ try {
48
+ const response = await fetch(url, {
49
+ method: 'GET',
50
+ headers: options?.headers,
51
+ signal: controller.signal
52
+ });
53
+ clearTimeout(timeoutId);
54
+ if (!response.ok) {
55
+ const error = await response.text();
56
+ throw new Error(`HTTP ${response.status}: ${error}`);
57
+ }
58
+ const responseData = await response.json();
59
+ return {
60
+ data: responseData,
61
+ status: response.status,
62
+ headers: Object.fromEntries(response.headers.entries())
63
+ };
64
+ }
65
+ catch (error) {
66
+ clearTimeout(timeoutId);
67
+ if (error.name === 'AbortError') {
68
+ throw new Error('Request timeout');
69
+ }
70
+ throw error;
71
+ }
72
+ }
73
+ }
74
+ /**
75
+ * Axios-based transport (for Node.js environments)
76
+ */
77
+ export class AxiosTransport {
78
+ axiosInstance;
79
+ async post(url, data, options) {
80
+ const axios = await this.getAxios();
81
+ try {
82
+ const response = await axios.post(url, data, {
83
+ timeout: options?.timeout || 30000,
84
+ headers: options?.headers
85
+ });
86
+ return {
87
+ data: response.data,
88
+ status: response.status,
89
+ headers: response.headers
90
+ };
91
+ }
92
+ catch (error) {
93
+ if (error.response?.status === 429) {
94
+ throw new Error('Rate limit exceeded. Please try again later.');
95
+ }
96
+ throw new Error(error.response?.data?.message ||
97
+ error.message ||
98
+ 'Request failed');
99
+ }
100
+ }
101
+ async get(url, options) {
102
+ const axios = await this.getAxios();
103
+ try {
104
+ const response = await axios.get(url, {
105
+ timeout: options?.timeout || 30000,
106
+ headers: options?.headers
107
+ });
108
+ return {
109
+ data: response.data,
110
+ status: response.status,
111
+ headers: response.headers
112
+ };
113
+ }
114
+ catch (error) {
115
+ throw new Error(error.response?.data?.message ||
116
+ error.message ||
117
+ 'Request failed');
118
+ }
119
+ }
120
+ async getAxios() {
121
+ if (!this.axiosInstance) {
122
+ try {
123
+ // Try to require axios - if it fails, we'll throw a helpful error
124
+ // @ts-ignore - dynamic require for optional dependency
125
+ const axios = require('axios');
126
+ this.axiosInstance = axios.default || axios;
127
+ }
128
+ catch (error) {
129
+ throw new Error('axios is not installed. Please install it with: npm install axios\n' +
130
+ 'Or use the fetch transport instead by setting transport: "fetch" in options');
131
+ }
132
+ }
133
+ return this.axiosInstance;
134
+ }
135
+ }
136
+ /**
137
+ * Runtime detection for optimal transport selection
138
+ */
139
+ export class RuntimeDetector {
140
+ static isEdgeRuntime() {
141
+ return !!(globalThis.EdgeRuntime ||
142
+ process.env.NEXT_RUNTIME === 'edge' ||
143
+ process.env.VERCEL_EDGE ||
144
+ globalThis.Deno ||
145
+ globalThis.Bun);
146
+ }
147
+ static isNodeRuntime() {
148
+ return !!(process.versions?.node &&
149
+ !this.isEdgeRuntime() &&
150
+ !this.isNextJs());
151
+ }
152
+ static isNextJs() {
153
+ return !!(process.env.NEXT_RUNTIME ||
154
+ globalThis.__NEXT_DATA__ ||
155
+ process.env.NEXT_PUBLIC_VERCEL_ENV);
156
+ }
157
+ static hasFetch() {
158
+ return typeof globalThis.fetch === 'function';
159
+ }
160
+ static isLambda() {
161
+ return !!(process.env.AWS_LAMBDA_FUNCTION_NAME ||
162
+ process.env.LAMBDA_TASK_ROOT ||
163
+ process.env._HANDLER);
164
+ }
165
+ }
166
+ /**
167
+ * Transport factory with runtime detection
168
+ */
169
+ export class TransportFactory {
170
+ static create(options) {
171
+ const transportType = options?.transport || 'auto';
172
+ if (transportType === 'fetch') {
173
+ if (!RuntimeDetector.hasFetch()) {
174
+ throw new Error('Fetch is not available in this runtime');
175
+ }
176
+ return new FetchTransport();
177
+ }
178
+ if (transportType === 'axios') {
179
+ return new AxiosTransport();
180
+ }
181
+ // Auto-detect based on runtime
182
+ if (transportType === 'auto') {
183
+ // Prefer fetch for edge runtimes
184
+ if (RuntimeDetector.isEdgeRuntime() && RuntimeDetector.hasFetch()) {
185
+ return new FetchTransport();
186
+ }
187
+ // Use fetch for Next.js to avoid bundling issues
188
+ if (RuntimeDetector.isNextJs() && RuntimeDetector.hasFetch()) {
189
+ return new FetchTransport();
190
+ }
191
+ // Use fetch if available and we're in a Lambda (lighter weight)
192
+ if (RuntimeDetector.isLambda() && RuntimeDetector.hasFetch()) {
193
+ return new FetchTransport();
194
+ }
195
+ // Default to axios for Node.js
196
+ if (RuntimeDetector.isNodeRuntime()) {
197
+ return new AxiosTransport();
198
+ }
199
+ // Fallback to fetch if available
200
+ if (RuntimeDetector.hasFetch()) {
201
+ return new FetchTransport();
202
+ }
203
+ // Last resort: axios
204
+ return new AxiosTransport();
205
+ }
206
+ throw new Error(`Unknown transport type: ${transportType}`);
207
+ }
208
+ }
209
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/transport.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkBH;;GAEG;AACH,MAAM,OAAO,cAAc;IACzB,KAAK,CAAC,IAAI,CAAU,GAAW,EAAE,IAAS,EAAE,OAA0B;QACpE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC;QAE1C,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;QAEhE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,GAAG,OAAO,EAAE,OAAO;iBACpB;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,YAAY,CAAC,SAAS,CAAC,CAAC;YAExB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC,CAAC;YACvD,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAE3C,OAAO;gBACL,IAAI,EAAE,YAAiB;gBACvB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;aACxD,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACrC,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAU,GAAW,EAAE,OAA0B;QACxD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC;QAE1C,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;QAEhE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,OAAO,EAAE,OAAO;gBACzB,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,YAAY,CAAC,SAAS,CAAC,CAAC;YAExB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC,CAAC;YACvD,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAE3C,OAAO;gBACL,IAAI,EAAE,YAAiB;gBACvB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;aACxD,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACrC,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,cAAc;IACjB,aAAa,CAAM;IAE3B,KAAK,CAAC,IAAI,CAAU,GAAW,EAAE,IAAS,EAAE,OAA0B;QACpE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEpC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE;gBAC3C,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,KAAK;gBAClC,OAAO,EAAE,OAAO,EAAE,OAAO;aAC1B,CAAC,CAAC;YAEH,OAAO;gBACL,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;aAC1B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAClE,CAAC;YACD,MAAM,IAAI,KAAK,CACb,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO;gBAC7B,KAAK,CAAC,OAAO;gBACb,gBAAgB,CACjB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAU,GAAW,EAAE,OAA0B;QACxD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEpC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;gBACpC,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,KAAK;gBAClC,OAAO,EAAE,OAAO,EAAE,OAAO;aAC1B,CAAC,CAAC;YAEH,OAAO;gBACL,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;aAC1B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO;gBAC7B,KAAK,CAAC,OAAO;gBACb,gBAAgB,CACjB,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,kEAAkE;gBAClE,uDAAuD;gBACvD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC/B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC;YAC9C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CACb,qEAAqE;oBACrE,6EAA6E,CAC9E,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAe;IAC1B,MAAM,CAAC,aAAa;QAClB,OAAO,CAAC,CAAC,CACN,UAAkB,CAAC,WAAW;YAC/B,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,MAAM;YACnC,OAAO,CAAC,GAAG,CAAC,WAAW;YACtB,UAAkB,CAAC,IAAI;YACvB,UAAkB,CAAC,GAAG,CACxB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,aAAa;QAClB,OAAO,CAAC,CAAC,CACP,OAAO,CAAC,QAAQ,EAAE,IAAI;YACtB,CAAC,IAAI,CAAC,aAAa,EAAE;YACrB,CAAC,IAAI,CAAC,QAAQ,EAAE,CACjB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,QAAQ;QACb,OAAO,CAAC,CAAC,CACP,OAAO,CAAC,GAAG,CAAC,YAAY;YACvB,UAAkB,CAAC,aAAa;YACjC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CACnC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,QAAQ;QACb,OAAO,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,QAAQ;QACb,OAAO,CAAC,CAAC,CACP,OAAO,CAAC,GAAG,CAAC,wBAAwB;YACpC,OAAO,CAAC,GAAG,CAAC,gBAAgB;YAC5B,OAAO,CAAC,GAAG,CAAC,QAAQ,CACrB,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAC3B,MAAM,CAAC,MAAM,CAAC,OAEb;QACC,MAAM,aAAa,GAAG,OAAO,EAAE,SAAS,IAAI,MAAM,CAAC;QAEnD,IAAI,aAAa,KAAK,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC5D,CAAC;YACD,OAAO,IAAI,cAAc,EAAE,CAAC;QAC9B,CAAC;QAED,IAAI,aAAa,KAAK,OAAO,EAAE,CAAC;YAC9B,OAAO,IAAI,cAAc,EAAE,CAAC;QAC9B,CAAC;QAED,+BAA+B;QAC/B,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;YAC7B,iCAAiC;YACjC,IAAI,eAAe,CAAC,aAAa,EAAE,IAAI,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC;gBAClE,OAAO,IAAI,cAAc,EAAE,CAAC;YAC9B,CAAC;YAED,iDAAiD;YACjD,IAAI,eAAe,CAAC,QAAQ,EAAE,IAAI,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC;gBAC7D,OAAO,IAAI,cAAc,EAAE,CAAC;YAC9B,CAAC;YAED,gEAAgE;YAChE,IAAI,eAAe,CAAC,QAAQ,EAAE,IAAI,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC;gBAC7D,OAAO,IAAI,cAAc,EAAE,CAAC;YAC9B,CAAC;YAED,+BAA+B;YAC/B,IAAI,eAAe,CAAC,aAAa,EAAE,EAAE,CAAC;gBACpC,OAAO,IAAI,cAAc,EAAE,CAAC;YAC9B,CAAC;YAED,iCAAiC;YACjC,IAAI,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC;gBAC/B,OAAO,IAAI,cAAc,EAAE,CAAC;YAC9B,CAAC;YAED,qBAAqB;YACrB,OAAO,IAAI,cAAc,EAAE,CAAC;QAC9B,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,2BAA2B,aAAa,EAAE,CAAC,CAAC;IAC9D,CAAC;CACF"}