@thewhateverapp/platform 0.13.9 → 0.13.11

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 (106) hide show
  1. package/dist/ai/index.d.ts.map +1 -1
  2. package/dist/ai/index.js +12 -1
  3. package/dist/ai/index.js.map +1 -1
  4. package/dist/ai/mock-provider.d.ts +16 -0
  5. package/dist/ai/mock-provider.d.ts.map +1 -0
  6. package/dist/ai/mock-provider.js +50 -0
  7. package/dist/ai/mock-provider.js.map +1 -0
  8. package/dist/ai/providers/http-proxy-ai.d.ts +29 -0
  9. package/dist/ai/providers/http-proxy-ai.d.ts.map +1 -0
  10. package/dist/ai/providers/http-proxy-ai.js +81 -0
  11. package/dist/ai/providers/http-proxy-ai.js.map +1 -0
  12. package/dist/ai/providers/index.d.ts +10 -0
  13. package/dist/ai/providers/index.d.ts.map +1 -0
  14. package/dist/ai/providers/index.js +15 -0
  15. package/dist/ai/providers/index.js.map +1 -0
  16. package/dist/ai/providers/three-tier-ai.d.ts +35 -0
  17. package/dist/ai/providers/three-tier-ai.d.ts.map +1 -0
  18. package/dist/ai/providers/three-tier-ai.js +43 -0
  19. package/dist/ai/providers/three-tier-ai.js.map +1 -0
  20. package/dist/ai/providers.d.ts +2 -0
  21. package/dist/ai/providers.d.ts.map +1 -1
  22. package/dist/ai/providers.js +4 -0
  23. package/dist/ai/providers.js.map +1 -1
  24. package/dist/ai/types.d.ts +5 -0
  25. package/dist/ai/types.d.ts.map +1 -1
  26. package/dist/database/index.d.ts.map +1 -1
  27. package/dist/database/index.js +11 -23
  28. package/dist/database/index.js.map +1 -1
  29. package/dist/database/mock-provider.d.ts +10 -0
  30. package/dist/database/mock-provider.d.ts.map +1 -0
  31. package/dist/database/mock-provider.js +145 -0
  32. package/dist/database/mock-provider.js.map +1 -0
  33. package/dist/database/providers/http-proxy-db.d.ts +24 -0
  34. package/dist/database/providers/http-proxy-db.d.ts.map +1 -0
  35. package/dist/database/providers/http-proxy-db.js +122 -0
  36. package/dist/database/providers/http-proxy-db.js.map +1 -0
  37. package/dist/database/providers/index.d.ts +2 -0
  38. package/dist/database/providers/index.d.ts.map +1 -1
  39. package/dist/database/providers/index.js +2 -0
  40. package/dist/database/providers/index.js.map +1 -1
  41. package/dist/database/providers/three-tier-db.d.ts +33 -0
  42. package/dist/database/providers/three-tier-db.d.ts.map +1 -0
  43. package/dist/database/providers/three-tier-db.js +105 -0
  44. package/dist/database/providers/three-tier-db.js.map +1 -0
  45. package/dist/database/types.d.ts +6 -1
  46. package/dist/database/types.d.ts.map +1 -1
  47. package/dist/env.d.ts +16 -0
  48. package/dist/env.d.ts.map +1 -1
  49. package/dist/env.js.map +1 -1
  50. package/dist/keyspace/index.d.ts.map +1 -1
  51. package/dist/keyspace/index.js +12 -0
  52. package/dist/keyspace/index.js.map +1 -1
  53. package/dist/keyspace/mock-provider.d.ts +31 -0
  54. package/dist/keyspace/mock-provider.d.ts.map +1 -0
  55. package/dist/keyspace/mock-provider.js +328 -0
  56. package/dist/keyspace/mock-provider.js.map +1 -0
  57. package/dist/keyspace/providers/http-proxy-keyspace.d.ts +36 -0
  58. package/dist/keyspace/providers/http-proxy-keyspace.d.ts.map +1 -0
  59. package/dist/keyspace/providers/http-proxy-keyspace.js +210 -0
  60. package/dist/keyspace/providers/http-proxy-keyspace.js.map +1 -0
  61. package/dist/keyspace/providers/index.d.ts +8 -0
  62. package/dist/keyspace/providers/index.d.ts.map +1 -0
  63. package/dist/keyspace/providers/index.js +10 -0
  64. package/dist/keyspace/providers/index.js.map +1 -0
  65. package/dist/keyspace/providers/three-tier-keyspace.d.ts +42 -0
  66. package/dist/keyspace/providers/three-tier-keyspace.d.ts.map +1 -0
  67. package/dist/keyspace/providers/three-tier-keyspace.js +106 -0
  68. package/dist/keyspace/providers/three-tier-keyspace.js.map +1 -0
  69. package/dist/keyspace/types.d.ts +5 -0
  70. package/dist/keyspace/types.d.ts.map +1 -1
  71. package/dist/kv/index.js +10 -10
  72. package/dist/kv/index.js.map +1 -1
  73. package/dist/kv/providers/index.d.ts +1 -0
  74. package/dist/kv/providers/index.d.ts.map +1 -1
  75. package/dist/kv/providers/index.js +1 -0
  76. package/dist/kv/providers/index.js.map +1 -1
  77. package/dist/kv/providers/three-tier-kv.d.ts +44 -0
  78. package/dist/kv/providers/three-tier-kv.d.ts.map +1 -0
  79. package/dist/kv/providers/three-tier-kv.js +69 -0
  80. package/dist/kv/providers/three-tier-kv.js.map +1 -0
  81. package/dist/providers/three-tier-provider.d.ts +77 -0
  82. package/dist/providers/three-tier-provider.d.ts.map +1 -0
  83. package/dist/providers/three-tier-provider.js +165 -0
  84. package/dist/providers/three-tier-provider.js.map +1 -0
  85. package/dist/r2/index.d.ts.map +1 -1
  86. package/dist/r2/index.js +11 -18
  87. package/dist/r2/index.js.map +1 -1
  88. package/dist/r2/mock-provider.d.ts +23 -0
  89. package/dist/r2/mock-provider.d.ts.map +1 -0
  90. package/dist/r2/mock-provider.js +161 -0
  91. package/dist/r2/mock-provider.js.map +1 -0
  92. package/dist/r2/providers/http-proxy-r2.d.ts +40 -0
  93. package/dist/r2/providers/http-proxy-r2.d.ts.map +1 -0
  94. package/dist/r2/providers/http-proxy-r2.js +195 -0
  95. package/dist/r2/providers/http-proxy-r2.js.map +1 -0
  96. package/dist/r2/providers/index.d.ts +2 -0
  97. package/dist/r2/providers/index.d.ts.map +1 -1
  98. package/dist/r2/providers/index.js +2 -0
  99. package/dist/r2/providers/index.js.map +1 -1
  100. package/dist/r2/providers/three-tier-r2.d.ts +43 -0
  101. package/dist/r2/providers/three-tier-r2.d.ts.map +1 -0
  102. package/dist/r2/providers/three-tier-r2.js +82 -0
  103. package/dist/r2/providers/three-tier-r2.js.map +1 -0
  104. package/dist/r2/types.d.ts +6 -1
  105. package/dist/r2/types.d.ts.map +1 -1
  106. package/package.json +1 -1
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Three-Tier KV Provider
3
+ *
4
+ * Implements the three-tier fallback system:
5
+ * 1. Production - Real Cloudflare KV binding
6
+ * 2. Preview via Proxy - HTTP proxy to skeleton worker
7
+ * 3. Mock/In-Memory - Fallback when skeleton not ready
8
+ */
9
+ import { CloudflareKV } from './cloudflare-kv';
10
+ import { HTTPProxyKV } from './http-proxy-kv';
11
+ import { MockKV } from '../mock';
12
+ import { ThreeTierProvider } from '../../providers/three-tier-provider';
13
+ /**
14
+ * Three-Tier KV Provider
15
+ *
16
+ * Automatically selects between production, preview proxy, and mock based on availability
17
+ * and skeleton deployment readiness.
18
+ */
19
+ export class ThreeTierKV {
20
+ provider;
21
+ constructor(config) {
22
+ const production = config.production ? new CloudflareKV(config.production) : undefined;
23
+ const previewProxy = config.previewProxy ? new HTTPProxyKV(config.previewProxy) : undefined;
24
+ const mock = new MockKV({ debug: config.debug });
25
+ this.provider = new ThreeTierProvider({
26
+ production,
27
+ previewProxy,
28
+ mock,
29
+ debug: config.debug,
30
+ });
31
+ }
32
+ async get(key) {
33
+ return this.provider.execute('GET', (kv) => kv.get(key));
34
+ }
35
+ async put(key, value, options) {
36
+ return this.provider.execute('PUT', (kv) => kv.put(key, value, options));
37
+ }
38
+ async getJson(key) {
39
+ return this.provider.execute('GET_JSON', (kv) => kv.getJson(key));
40
+ }
41
+ async putJson(key, value, options) {
42
+ return this.provider.execute('PUT_JSON', (kv) => kv.putJson(key, value, options));
43
+ }
44
+ async set(key, value, options) {
45
+ return this.put(key, value, options);
46
+ }
47
+ async delete(key) {
48
+ return this.provider.execute('DELETE', (kv) => kv.delete(key));
49
+ }
50
+ async deleteMany(keys) {
51
+ return this.provider.execute('DELETE_MANY', (kv) => kv.deleteMany(keys));
52
+ }
53
+ async has(key) {
54
+ return this.provider.execute('HAS', (kv) => kv.has(key));
55
+ }
56
+ async list(prefix) {
57
+ return this.provider.execute('LIST', (kv) => kv.list(prefix));
58
+ }
59
+ async getMetadata(key) {
60
+ return this.provider.execute('GET_METADATA', (kv) => kv.getMetadata(key));
61
+ }
62
+ async increment(key, amount = 1) {
63
+ return this.provider.execute('INCREMENT', (kv) => kv.increment(key, amount));
64
+ }
65
+ async decrement(key, amount = 1) {
66
+ return this.provider.execute('DECREMENT', (kv) => kv.decrement(key, amount));
67
+ }
68
+ }
69
+ //# sourceMappingURL=three-tier-kv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"three-tier-kv.js","sourceRoot":"","sources":["../../../src/kv/providers/three-tier-kv.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Three-Tier Provider System
3
+ *
4
+ * Provides a unified fallback chain for platform services:
5
+ * 1. Production - Real Cloudflare bindings (KV, D1, R2)
6
+ * 2. Preview via Proxy - HTTP proxy to skeleton worker
7
+ * 3. Mock/In-Memory - Fallback when skeleton not ready
8
+ *
9
+ * This ensures graceful degradation during the first ~60 seconds of tile generation
10
+ * when the skeleton deployment might return 530 errors or not be ready yet.
11
+ */
12
+ /**
13
+ * Provider mode enum
14
+ */
15
+ export declare enum ProviderMode {
16
+ Production = "production",
17
+ PreviewProxy = "preview-proxy",
18
+ Mock = "mock"
19
+ }
20
+ /**
21
+ * Check if an error indicates the skeleton deployment isn't ready
22
+ */
23
+ export declare function isSkeletonNotReadyError(error: unknown): boolean;
24
+ /**
25
+ * Three-tier provider configuration
26
+ */
27
+ export interface ThreeTierConfig<TProduction, TProxy, TMock> {
28
+ /** Production provider (real Cloudflare bindings) */
29
+ production?: TProduction;
30
+ /** Preview proxy provider (HTTP to skeleton worker) */
31
+ previewProxy?: TProxy;
32
+ /** Mock provider (in-memory fallback) */
33
+ mock: TMock;
34
+ /** Debug logging */
35
+ debug?: boolean;
36
+ }
37
+ /**
38
+ * Three-tier provider base class
39
+ *
40
+ * Implements the three-tier fallback logic:
41
+ * 1. Use production if available
42
+ * 2. Use preview proxy if available, fall back to mock on skeleton errors
43
+ * 3. Use mock as final fallback
44
+ */
45
+ export declare class ThreeTierProvider<TProvider> {
46
+ private production?;
47
+ private previewProxy?;
48
+ private mock;
49
+ private debug;
50
+ private currentMode;
51
+ private skeletonFailed;
52
+ private failureCount;
53
+ private readonly maxFailures;
54
+ constructor(config: ThreeTierConfig<TProvider, TProvider, TProvider>);
55
+ private log;
56
+ /**
57
+ * Get the appropriate provider based on current mode and fallback logic
58
+ */
59
+ private getProvider;
60
+ /**
61
+ * Execute an operation with automatic fallback
62
+ */
63
+ execute<T>(operation: string, fn: (provider: TProvider) => Promise<T>): Promise<T>;
64
+ /**
65
+ * Get the current provider mode
66
+ */
67
+ getMode(): ProviderMode;
68
+ /**
69
+ * Check if skeleton has failed
70
+ */
71
+ isSkeletonFailed(): boolean;
72
+ /**
73
+ * Reset skeleton failure state (for testing)
74
+ */
75
+ resetSkeletonState(): void;
76
+ }
77
+ //# sourceMappingURL=three-tier-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"three-tier-provider.d.ts","sourceRoot":"","sources":["../../src/providers/three-tier-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,oBAAY,YAAY;IACtB,UAAU,eAAe;IACzB,YAAY,kBAAkB;IAC9B,IAAI,SAAS;CACd;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAkB/D;AAED;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK;IACzD,qDAAqD;IACrD,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,IAAI,EAAE,KAAK,CAAC;IACZ,oBAAoB;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,qBAAa,iBAAiB,CAAC,SAAS;IACtC,OAAO,CAAC,UAAU,CAAC,CAAY;IAC/B,OAAO,CAAC,YAAY,CAAC,CAAY;IACjC,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,KAAK,CAAU;IAEvB,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAK;gBAErB,MAAM,EAAE,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;IAmBpE,OAAO,CAAC,GAAG;IAMX;;OAEG;IACH,OAAO,CAAC,WAAW;IAqBnB;;OAEG;IACG,OAAO,CAAC,CAAC,EACb,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,GACtC,OAAO,CAAC,CAAC,CAAC;IA2Cb;;OAEG;IACH,OAAO,IAAI,YAAY;IAUvB;;OAEG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;OAEG;IACH,kBAAkB,IAAI,IAAI;CAI3B"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Three-Tier Provider System
3
+ *
4
+ * Provides a unified fallback chain for platform services:
5
+ * 1. Production - Real Cloudflare bindings (KV, D1, R2)
6
+ * 2. Preview via Proxy - HTTP proxy to skeleton worker
7
+ * 3. Mock/In-Memory - Fallback when skeleton not ready
8
+ *
9
+ * This ensures graceful degradation during the first ~60 seconds of tile generation
10
+ * when the skeleton deployment might return 530 errors or not be ready yet.
11
+ */
12
+ /**
13
+ * Provider mode enum
14
+ */
15
+ export var ProviderMode;
16
+ (function (ProviderMode) {
17
+ ProviderMode["Production"] = "production";
18
+ ProviderMode["PreviewProxy"] = "preview-proxy";
19
+ ProviderMode["Mock"] = "mock";
20
+ })(ProviderMode || (ProviderMode = {}));
21
+ /**
22
+ * Check if an error indicates the skeleton deployment isn't ready
23
+ */
24
+ export function isSkeletonNotReadyError(error) {
25
+ if (!(error instanceof Error))
26
+ return false;
27
+ const message = error.message.toLowerCase();
28
+ // 530 errors indicate the Worker isn't ready yet
29
+ if (message.includes('530'))
30
+ return true;
31
+ // Network errors during initial deployment
32
+ if (message.includes('fetch failed') || message.includes('network error'))
33
+ return true;
34
+ // Connection refused during deployment
35
+ if (message.includes('econnrefused') || message.includes('connection refused'))
36
+ return true;
37
+ // Timeout errors
38
+ if (message.includes('timeout'))
39
+ return true;
40
+ return false;
41
+ }
42
+ /**
43
+ * Three-tier provider base class
44
+ *
45
+ * Implements the three-tier fallback logic:
46
+ * 1. Use production if available
47
+ * 2. Use preview proxy if available, fall back to mock on skeleton errors
48
+ * 3. Use mock as final fallback
49
+ */
50
+ export class ThreeTierProvider {
51
+ production;
52
+ previewProxy;
53
+ mock;
54
+ debug;
55
+ currentMode;
56
+ skeletonFailed = false;
57
+ failureCount = 0;
58
+ maxFailures = 3;
59
+ constructor(config) {
60
+ this.production = config.production;
61
+ this.previewProxy = config.previewProxy;
62
+ this.mock = config.mock;
63
+ this.debug = config.debug ?? false;
64
+ // Determine initial mode
65
+ if (this.production) {
66
+ this.currentMode = ProviderMode.Production;
67
+ this.log('Initialized in PRODUCTION mode');
68
+ }
69
+ else if (this.previewProxy) {
70
+ this.currentMode = ProviderMode.PreviewProxy;
71
+ this.log('Initialized in PREVIEW PROXY mode with mock fallback');
72
+ }
73
+ else {
74
+ this.currentMode = ProviderMode.Mock;
75
+ this.log('Initialized in MOCK mode');
76
+ }
77
+ }
78
+ log(message, ...args) {
79
+ if (this.debug) {
80
+ console.log(`[ThreeTierProvider:${this.currentMode}] ${message}`, ...args);
81
+ }
82
+ }
83
+ /**
84
+ * Get the appropriate provider based on current mode and fallback logic
85
+ */
86
+ getProvider() {
87
+ // If in production mode, always use production
88
+ if (this.currentMode === ProviderMode.Production) {
89
+ return this.production;
90
+ }
91
+ // If in preview proxy mode and skeleton has failed, use mock
92
+ if (this.currentMode === ProviderMode.PreviewProxy && this.skeletonFailed) {
93
+ this.log('Using MOCK (skeleton previously failed)');
94
+ return this.mock;
95
+ }
96
+ // If in preview proxy mode, use proxy
97
+ if (this.currentMode === ProviderMode.PreviewProxy && this.previewProxy) {
98
+ return this.previewProxy;
99
+ }
100
+ // Default to mock
101
+ return this.mock;
102
+ }
103
+ /**
104
+ * Execute an operation with automatic fallback
105
+ */
106
+ async execute(operation, fn) {
107
+ // If in production mode, no fallback needed
108
+ if (this.currentMode === ProviderMode.Production) {
109
+ return fn(this.production);
110
+ }
111
+ // If skeleton already failed or in mock mode, use mock directly
112
+ if (this.skeletonFailed || this.currentMode === ProviderMode.Mock) {
113
+ this.log(`${operation}: Using mock`);
114
+ return fn(this.mock);
115
+ }
116
+ // Try preview proxy with fallback to mock
117
+ try {
118
+ this.log(`${operation}: Trying preview proxy`);
119
+ return await fn(this.previewProxy);
120
+ }
121
+ catch (error) {
122
+ // Check if this is a skeleton-not-ready error
123
+ if (isSkeletonNotReadyError(error)) {
124
+ this.failureCount++;
125
+ console.warn(`[ThreeTierProvider] ${operation}: Skeleton not ready (attempt ${this.failureCount}/${this.maxFailures}), falling back to mock:`, error instanceof Error ? error.message : error);
126
+ // After max failures, mark skeleton as failed
127
+ if (this.failureCount >= this.maxFailures) {
128
+ this.skeletonFailed = true;
129
+ console.warn(`[ThreeTierProvider] Skeleton marked as unavailable after ${this.maxFailures} failures`);
130
+ }
131
+ // Fall back to mock
132
+ this.log(`${operation}: Using mock fallback`);
133
+ return fn(this.mock);
134
+ }
135
+ // For other errors, re-throw (don't mask genuine errors)
136
+ throw error;
137
+ }
138
+ }
139
+ /**
140
+ * Get the current provider mode
141
+ */
142
+ getMode() {
143
+ if (this.currentMode === ProviderMode.Production) {
144
+ return ProviderMode.Production;
145
+ }
146
+ if (this.skeletonFailed) {
147
+ return ProviderMode.Mock;
148
+ }
149
+ return this.currentMode;
150
+ }
151
+ /**
152
+ * Check if skeleton has failed
153
+ */
154
+ isSkeletonFailed() {
155
+ return this.skeletonFailed;
156
+ }
157
+ /**
158
+ * Reset skeleton failure state (for testing)
159
+ */
160
+ resetSkeletonState() {
161
+ this.skeletonFailed = false;
162
+ this.failureCount = 0;
163
+ }
164
+ }
165
+ //# sourceMappingURL=three-tier-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"three-tier-provider.js","sourceRoot":"","sources":["../../src/providers/three-tier-provider.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/r2/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAKrF,mBAAmB,SAAS,CAAC;AAE7B;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CACxB,GAAG,CAAC,EAAE,cAAc,GAAG;IAAE,GAAG,EAAE,oBAAoB,CAAA;CAAE,GAAG,oBAAoB,GAC1E,eAAe,CAuDjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,oBAAoB,GAAG,eAAe,CAexE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/r2/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAKrF,mBAAmB,SAAS,CAAC;AAE7B;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CACxB,GAAG,CAAC,EAAE,cAAc,GAAG;IAAE,GAAG,EAAE,oBAAoB,CAAA;CAAE,GAAG,oBAAoB,GAC1E,eAAe,CAyCjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,oBAAoB,GAAG,eAAe,CAexE"}
package/dist/r2/index.js CHANGED
@@ -25,7 +25,7 @@
25
25
  * }
26
26
  * ```
27
27
  */
28
- import { CloudflareR2 } from './providers';
28
+ import { CloudflareR2, ThreeTierR2 } from './providers';
29
29
  import { getPlatformEnv, isPlatformEnvConfigured } from '../env';
30
30
  /**
31
31
  * Get a storage instance for the current request
@@ -62,25 +62,18 @@ export function getStorage(req) {
62
62
  if (!env) {
63
63
  throw new Error('No environment found in request. Ensure you are running in edge runtime.');
64
64
  }
65
- // Check for R2 binding
66
- if (!env.STORAGE) {
65
+ // Use three-tier provider system
66
+ const config = {
67
+ production: env.STORAGE,
68
+ publicUrl: env.STORAGE_PUBLIC_URL,
69
+ previewProxy: env.__STORAGE_HTTP_PROXY__,
70
+ debug: true,
71
+ };
72
+ // If no production binding and no preview proxy, throw error
73
+ if (!config.production && !config.previewProxy) {
67
74
  throw new Error('No R2 bucket binding found. Add an R2 bucket binding named "STORAGE" to your wrangler.jsonc');
68
75
  }
69
- // Get provider from environment (defaults to 'r2')
70
- const provider = env.STORAGE_PROVIDER || 'r2';
71
- switch (provider) {
72
- case 'r2':
73
- return new CloudflareR2(env.STORAGE, env.STORAGE_PUBLIC_URL);
74
- case 's3':
75
- // Future: AWS S3 implementation
76
- throw new Error('AWS S3 provider not yet implemented. Use STORAGE_PROVIDER=r2 or remove STORAGE_PROVIDER.');
77
- case 'backblaze':
78
- // Future: Backblaze B2 implementation
79
- throw new Error('Backblaze B2 provider not yet implemented. Use STORAGE_PROVIDER=r2 or remove STORAGE_PROVIDER.');
80
- default:
81
- console.warn(`Unknown STORAGE_PROVIDER: ${provider}. Falling back to Cloudflare R2.`);
82
- return new CloudflareR2(env.STORAGE, env.STORAGE_PUBLIC_URL);
83
- }
76
+ return new ThreeTierR2(config);
84
77
  }
85
78
  /**
86
79
  * Create a storage instance directly (for advanced usage)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/r2/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,QAAQ,CAAC;AAKjE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,UAAU,CACxB,GAA2E;IAE3E,IAAI,GAAqC,CAAC;IAE1C,2DAA2D;IAC3D,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,6EAA6E;gBAC3E,qHAAqH,CACxH,CAAC;QACJ,CAAC;QACD,GAAG,GAAG,cAAc,EAA0B,CAAC;IACjD,CAAC;SAAM,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IAChB,CAAC;SAAM,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;QAC5B,oBAAoB;QACpB,GAAG,GAAG,GAA2B,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,GAAG,GAAI,GAAW,CAAC,GAAG,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAC9F,CAAC;IAED,uBAAuB;IACvB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAC;IACJ,CAAC;IAED,mDAAmD;IACnD,MAAM,QAAQ,GAAG,GAAG,CAAC,gBAAgB,IAAI,IAAI,CAAC;IAE9C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,IAAI;YACP,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAE/D,KAAK,IAAI;YACP,gCAAgC;YAChC,MAAM,IAAI,KAAK,CACb,0FAA0F,CAC3F,CAAC;QAEJ,KAAK,WAAW;YACd,sCAAsC;YACtC,MAAM,IAAI,KAAK,CACb,gGAAgG,CACjG,CAAC;QAEJ;YACE,OAAO,CAAC,IAAI,CAAC,6BAA6B,QAAQ,kCAAkC,CAAC,CAAC;YACtF,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,GAAyB;IACrD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,gBAAgB,IAAI,IAAI,CAAC;IAE9C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,IAAI;YACP,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAE/D;YACE,OAAO,CAAC,IAAI,CAAC,6BAA6B,QAAQ,kCAAkC,CAAC,CAAC;YACtF,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACjE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/r2/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAmD,MAAM,aAAa,CAAC;AACzG,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,QAAQ,CAAC;AAKjE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,UAAU,CACxB,GAA2E;IAE3E,IAAI,GAAqC,CAAC;IAE1C,2DAA2D;IAC3D,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,6EAA6E;gBAC3E,qHAAqH,CACxH,CAAC;QACJ,CAAC;QACD,GAAG,GAAG,cAAc,EAA0B,CAAC;IACjD,CAAC;SAAM,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IAChB,CAAC;SAAM,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;QAC5B,oBAAoB;QACpB,GAAG,GAAG,GAA2B,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,GAAG,GAAI,GAAW,CAAC,GAAG,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAC9F,CAAC;IAED,iCAAiC;IACjC,MAAM,MAAM,GAAsB;QAChC,UAAU,EAAE,GAAG,CAAC,OAAO;QACvB,SAAS,EAAE,GAAG,CAAC,kBAAkB;QACjC,YAAY,EAAE,GAAG,CAAC,sBAAwD;QAC1E,KAAK,EAAE,IAAI;KACZ,CAAC;IAEF,6DAA6D;IAC7D,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,GAAyB;IACrD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,gBAAgB,IAAI,IAAI,CAAC;IAE9C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,IAAI;YACP,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAE/D;YACE,OAAO,CAAC,IAAI,CAAC,6BAA6B,QAAQ,kCAAkC,CAAC,CAAC;YACtF,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACjE,CAAC;AACH,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Simple in-memory mock R2 storage provider
3
+ * Implements StorageProvider interface for preview/testing
4
+ */
5
+ import type { StorageProvider, StorageObject, StorageMetadata, ListOptions, ListResult, PutOptions, PutResult, GetOptions } from './types';
6
+ export declare class MockR2Provider implements StorageProvider {
7
+ private objects;
8
+ private debug;
9
+ constructor(config?: {
10
+ debug?: boolean;
11
+ });
12
+ private log;
13
+ put(key: string, value: ArrayBuffer | ReadableStream | Blob | string, options?: PutOptions): Promise<PutResult>;
14
+ get(key: string, options?: GetOptions): Promise<StorageObject | null>;
15
+ delete(key: string): Promise<void>;
16
+ deleteMany(keys: string[]): Promise<void>;
17
+ head(key: string): Promise<StorageMetadata | null>;
18
+ list(options?: ListOptions): Promise<ListResult>;
19
+ exists(key: string): Promise<boolean>;
20
+ copy(sourceKey: string, destinationKey: string): Promise<void>;
21
+ getPublicUrl(key: string): string;
22
+ }
23
+ //# sourceMappingURL=mock-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-provider.d.ts","sourceRoot":"","sources":["../../src/r2/mock-provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,WAAW,EACX,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACX,MAAM,SAAS,CAAC;AAWjB,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,OAAO,CAA6C;IAC5D,OAAO,CAAC,KAAK,CAAU;gBAEX,MAAM,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO;IAI5C,OAAO,CAAC,GAAG;IAML,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,cAAc,GAAG,IAAI,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IAiD/G,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAwBrE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAkBlD,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAmChD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKrC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAepE,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;CAKlC"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Simple in-memory mock R2 storage provider
3
+ * Implements StorageProvider interface for preview/testing
4
+ */
5
+ export class MockR2Provider {
6
+ objects = new Map();
7
+ debug;
8
+ constructor(config = {}) {
9
+ this.debug = config.debug ?? false;
10
+ }
11
+ log(message, ...args) {
12
+ if (this.debug) {
13
+ console.log(`[MockR2] ${message}`, ...args);
14
+ }
15
+ }
16
+ async put(key, value, options) {
17
+ this.log('PUT', key, options);
18
+ // Convert value to ArrayBuffer
19
+ let buffer;
20
+ if (typeof value === 'string') {
21
+ buffer = new TextEncoder().encode(value).buffer;
22
+ }
23
+ else if (value instanceof Blob) {
24
+ buffer = await value.arrayBuffer();
25
+ }
26
+ else if (value instanceof ReadableStream) {
27
+ // Read stream to buffer
28
+ const reader = value.getReader();
29
+ const chunks = [];
30
+ while (true) {
31
+ const { done, value: chunk } = await reader.read();
32
+ if (done)
33
+ break;
34
+ chunks.push(chunk);
35
+ }
36
+ const totalLength = chunks.reduce((acc, chunk) => acc + chunk.length, 0);
37
+ const combined = new Uint8Array(totalLength);
38
+ let offset = 0;
39
+ for (const chunk of chunks) {
40
+ combined.set(chunk, offset);
41
+ offset += chunk.length;
42
+ }
43
+ buffer = combined.buffer;
44
+ }
45
+ else {
46
+ buffer = value;
47
+ }
48
+ const obj = {
49
+ key,
50
+ value: buffer,
51
+ metadata: options?.customMetadata,
52
+ contentType: options?.metadata?.contentType,
53
+ uploaded: new Date(),
54
+ size: buffer.byteLength,
55
+ };
56
+ this.objects.set(key, obj);
57
+ return {
58
+ key,
59
+ etag: `mock-etag-${Date.now()}`,
60
+ size: buffer.byteLength,
61
+ versionId: `mock-version-${Date.now()}`,
62
+ };
63
+ }
64
+ async get(key, options) {
65
+ this.log('GET', key, options);
66
+ const obj = this.objects.get(key);
67
+ if (!obj) {
68
+ return null;
69
+ }
70
+ return {
71
+ key: obj.key,
72
+ body: new ReadableStream({
73
+ start(controller) {
74
+ controller.enqueue(new Uint8Array(obj.value));
75
+ controller.close();
76
+ },
77
+ }),
78
+ size: obj.size,
79
+ etag: `mock-etag-${obj.uploaded.getTime()}`,
80
+ uploaded: obj.uploaded,
81
+ httpMetadata: obj.contentType ? { contentType: obj.contentType } : {},
82
+ metadata: obj.metadata,
83
+ };
84
+ }
85
+ async delete(key) {
86
+ this.log('DELETE', key);
87
+ this.objects.delete(key);
88
+ }
89
+ async deleteMany(keys) {
90
+ this.log('DELETE_MANY', keys);
91
+ for (const key of keys) {
92
+ this.objects.delete(key);
93
+ }
94
+ }
95
+ async head(key) {
96
+ this.log('HEAD', key);
97
+ const obj = this.objects.get(key);
98
+ if (!obj) {
99
+ return null;
100
+ }
101
+ return {
102
+ key: obj.key,
103
+ size: obj.size,
104
+ etag: `mock-etag-${obj.uploaded.getTime()}`,
105
+ uploaded: obj.uploaded,
106
+ httpMetadata: obj.contentType ? { contentType: obj.contentType } : {},
107
+ metadata: obj.metadata,
108
+ };
109
+ }
110
+ async list(options) {
111
+ this.log('LIST', options);
112
+ let keys = Array.from(this.objects.keys());
113
+ // Filter by prefix
114
+ if (options?.prefix) {
115
+ keys = keys.filter((key) => key.startsWith(options.prefix));
116
+ }
117
+ // Apply limit
118
+ const limit = options?.limit || 1000;
119
+ const truncated = keys.length > limit;
120
+ keys = keys.slice(0, limit);
121
+ // Get metadata for each key
122
+ const objects = keys.map((key) => {
123
+ const obj = this.objects.get(key);
124
+ return {
125
+ key: obj.key,
126
+ size: obj.size,
127
+ etag: `mock-etag-${obj.uploaded.getTime()}`,
128
+ uploaded: obj.uploaded,
129
+ httpMetadata: obj.contentType ? { contentType: obj.contentType } : undefined,
130
+ metadata: obj.metadata,
131
+ };
132
+ });
133
+ return {
134
+ objects,
135
+ truncated,
136
+ cursor: truncated ? keys[keys.length - 1] : undefined,
137
+ };
138
+ }
139
+ async exists(key) {
140
+ this.log('EXISTS', key);
141
+ return this.objects.has(key);
142
+ }
143
+ async copy(sourceKey, destinationKey) {
144
+ this.log('COPY', sourceKey, '->', destinationKey);
145
+ const obj = this.objects.get(sourceKey);
146
+ if (!obj) {
147
+ throw new Error(`Source key not found: ${sourceKey}`);
148
+ }
149
+ this.objects.set(destinationKey, {
150
+ ...obj,
151
+ key: destinationKey,
152
+ uploaded: new Date(),
153
+ });
154
+ }
155
+ getPublicUrl(key) {
156
+ this.log('GET_PUBLIC_URL', key);
157
+ // Return a mock public URL
158
+ return `https://mock-r2.storage/${key}`;
159
+ }
160
+ }
161
+ //# sourceMappingURL=mock-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-provider.js","sourceRoot":"","sources":["../../src/r2/mock-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * HTTP Proxy R2 provider for preview mode
3
+ *
4
+ * Proxies all R2 storage operations to a deployed tile's /proxy/storage/op endpoint.
5
+ * Used in browser previews to access real Cloudflare R2 via the deployed skeleton tile.
6
+ */
7
+ import type { StorageProvider, StorageValue, PutOptions, PutResult, GetOptions, StorageObject, StorageMetadata, ListOptions, ListResult, PublicUrlOptions, SignedUrlOptions } from '../types';
8
+ export interface HTTPProxyR2Options {
9
+ /** Base URL of the deployed tile (e.g., https://tile-id.whatever.tube) */
10
+ deploymentUrl: string;
11
+ /** Optional auth token for authenticated requests */
12
+ authToken?: string;
13
+ }
14
+ /**
15
+ * HTTP Proxy R2 implementation
16
+ *
17
+ * All operations are proxied to the deployed tile's /proxy/storage/op endpoint.
18
+ */
19
+ export declare class HTTPProxyR2 implements StorageProvider {
20
+ private deploymentUrl;
21
+ private authToken?;
22
+ private prefix;
23
+ constructor(options: HTTPProxyR2Options);
24
+ private proxyRequest;
25
+ /**
26
+ * Encode data to base64 for transmission
27
+ */
28
+ private encodeData;
29
+ put(key: string, data: StorageValue, options?: PutOptions): Promise<PutResult>;
30
+ get(key: string, options?: GetOptions): Promise<StorageObject | null>;
31
+ delete(key: string): Promise<void>;
32
+ deleteMany(keys: string[]): Promise<void>;
33
+ exists(key: string): Promise<boolean>;
34
+ list(options?: ListOptions): Promise<ListResult>;
35
+ head(key: string): Promise<StorageMetadata | null>;
36
+ getPublicUrl(key: string, options?: PublicUrlOptions): string;
37
+ getSignedUrl(key: string, options?: SignedUrlOptions): Promise<string>;
38
+ copy(sourceKey: string, destinationKey: string): Promise<void>;
39
+ }
40
+ //# sourceMappingURL=http-proxy-r2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-proxy-r2.d.ts","sourceRoot":"","sources":["../../../src/r2/providers/http-proxy-r2.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,UAAU,EACV,SAAS,EACT,UAAU,EACV,aAAa,EACb,eAAe,EACf,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,kBAAkB;IACjC,0EAA0E;IAC1E,aAAa,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,qBAAa,WAAY,YAAW,eAAe;IACjD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAmB;gBAErB,OAAO,EAAE,kBAAkB;YAMzB,YAAY;IAiC1B;;OAEG;YACW,UAAU;IA8ClB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IAU9E,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAkDrE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKrC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAKhD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAexD,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,MAAM;IAQvD,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAItE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAQrE"}