alchemy 0.17.2 → 0.18.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 (54) hide show
  1. package/lib/ai/document.d.ts +11 -0
  2. package/lib/ai/document.d.ts.map +1 -1
  3. package/lib/ai/document.js +1 -1
  4. package/lib/ai/document.js.map +1 -1
  5. package/lib/alchemy.d.ts.map +1 -1
  6. package/lib/alchemy.js +1 -2
  7. package/lib/alchemy.js.map +1 -1
  8. package/lib/aws/control/client.d.ts +134 -0
  9. package/lib/aws/control/client.d.ts.map +1 -0
  10. package/lib/aws/control/client.js +232 -0
  11. package/lib/aws/control/client.js.map +1 -0
  12. package/lib/aws/control/error.d.ts +63 -0
  13. package/lib/aws/control/error.d.ts.map +1 -0
  14. package/lib/aws/control/error.js +93 -0
  15. package/lib/aws/control/error.js.map +1 -0
  16. package/lib/aws/control/index.d.ts +6 -0
  17. package/lib/aws/control/index.d.ts.map +1 -0
  18. package/lib/aws/control/index.js +6 -0
  19. package/lib/aws/control/index.js.map +1 -0
  20. package/lib/aws/control/properties.d.ts +1874 -0
  21. package/lib/aws/control/properties.d.ts.map +1 -0
  22. package/lib/aws/control/properties.js +6945 -0
  23. package/lib/aws/control/properties.js.map +1 -0
  24. package/lib/aws/control/proxy.d.ts +7 -0
  25. package/lib/aws/control/proxy.d.ts.map +1 -0
  26. package/lib/aws/control/proxy.js +29 -0
  27. package/lib/aws/control/proxy.js.map +1 -0
  28. package/lib/aws/control/resource.d.ts +110 -0
  29. package/lib/aws/control/resource.d.ts.map +1 -0
  30. package/lib/aws/control/resource.js +192 -0
  31. package/lib/aws/control/resource.js.map +1 -0
  32. package/lib/destroy.d.ts.map +1 -1
  33. package/lib/destroy.js +2 -2
  34. package/lib/destroy.js.map +1 -1
  35. package/lib/resource.d.ts +7 -1
  36. package/lib/resource.d.ts.map +1 -1
  37. package/lib/resource.js +20 -0
  38. package/lib/resource.js.map +1 -1
  39. package/lib/test/bun.d.ts.map +1 -1
  40. package/lib/test/bun.js +1 -2
  41. package/lib/test/bun.js.map +1 -1
  42. package/package.json +5 -1
  43. package/src/ai/document.ts +1 -1
  44. package/src/alchemy.ts +2 -3
  45. package/src/aws/control/client.ts +450 -0
  46. package/src/aws/control/error.ts +84 -0
  47. package/src/aws/control/index.ts +6 -0
  48. package/src/aws/control/properties.ts +6946 -0
  49. package/src/aws/control/proxy.ts +40 -0
  50. package/src/aws/control/resource.ts +346 -0
  51. package/src/aws/control/types.d.ts +85129 -0
  52. package/src/destroy.ts +4 -7
  53. package/src/resource.ts +32 -1
  54. package/src/test/bun.ts +1 -2
@@ -1 +1 @@
1
- {"version":3,"file":"destroy.js","sourceRoot":"","sources":["../src/destroy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"destroy.js","sourceRoot":"","sources":["../src/destroy.ts"],"names":[],"mappings":"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"}
package/lib/resource.d.ts CHANGED
@@ -1,6 +1,12 @@
1
1
  import type { Context } from "./context.js";
2
2
  import { type Scope } from "./scope.js";
3
- export declare const PROVIDERS: Map<string, any>;
3
+ export declare const PROVIDERS: Map<ResourceKind, Provider<string, any>>;
4
+ export type DynamicResourceResolver = (typeName: string) => Provider | undefined;
5
+ /**
6
+ * Register a function that will be called if a Resource Type cannot be found during deletion.
7
+ */
8
+ export declare function registerDynamicResource(handler: DynamicResourceResolver): void;
9
+ export declare function resolveDeletionHandler(typeName: string): Provider | undefined;
4
10
  export type ResourceID = string;
5
11
  export declare const ResourceID: unique symbol;
6
12
  export type ResourceFQN = string;
@@ -1 +1 @@
1
- {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"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"}
package/lib/resource.js CHANGED
@@ -1,6 +1,26 @@
1
1
  import { apply } from "./apply.js";
2
2
  import { Scope as _Scope } from "./scope.js";
3
3
  export const PROVIDERS = new Map();
4
+ const DYNAMIC_RESOURCE_RESOLVERS = [];
5
+ /**
6
+ * Register a function that will be called if a Resource Type cannot be found during deletion.
7
+ */
8
+ export function registerDynamicResource(handler) {
9
+ DYNAMIC_RESOURCE_RESOLVERS.push(handler);
10
+ }
11
+ export function resolveDeletionHandler(typeName) {
12
+ const provider = PROVIDERS.get(typeName);
13
+ if (provider) {
14
+ return provider;
15
+ }
16
+ for (const handler of DYNAMIC_RESOURCE_RESOLVERS) {
17
+ const result = handler(typeName);
18
+ if (result) {
19
+ return result;
20
+ }
21
+ }
22
+ return undefined;
23
+ }
4
24
  export const ResourceID = Symbol.for("alchemy::ResourceID");
5
25
  export const ResourceFQN = Symbol.for("alchemy::ResourceFQN");
6
26
  export const ResourceKind = Symbol.for("alchemy::ResourceKind");
@@ -1 +1 @@
1
- {"version":3,"file":"resource.js","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource.js","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"bun.d.ts","sourceRoot":"","sources":["../../src/test/bun.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;GAEG;AACH,OAAO,QAAQ,eAAe,CAAC;IAC7B,UAAU,OAAO;QACf,IAAI,EAAE,OAAO,IAAI,CAAC;KACnB;CACF;AAOD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;IAE5B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,KAAK,IAAI,GAAG;IACV;;;;;OAKG;IACH,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3E;;;;;;OAMG;IACH,CACE,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,EACpB,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,GAAG,CAAC,EAClC,OAAO,CAAC,EAAE,MAAM,GACf,IAAI,CAAC;IAER;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAEjC,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAErD,QAAQ,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEpD;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,WAAW,GAAG,IAAI,CA6FzE"}
1
+ {"version":3,"file":"bun.d.ts","sourceRoot":"","sources":["../../src/test/bun.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;GAEG;AACH,OAAO,QAAQ,eAAe,CAAC;IAC7B,UAAU,OAAO;QACf,IAAI,EAAE,OAAO,IAAI,CAAC;KACnB;CACF;AAOD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;IAE5B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,KAAK,IAAI,GAAG;IACV;;;;;OAKG;IACH,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3E;;;;;;OAMG;IACH,CACE,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,EACpB,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,GAAG,CAAC,EAClC,OAAO,CAAC,EAAE,MAAM,GACf,IAAI,CAAC;IAER;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAEjC,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAErD,QAAQ,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEpD;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,WAAW,GAAG,IAAI,CA4FzE"}
package/lib/test/bun.js CHANGED
@@ -81,11 +81,10 @@ export function test(meta, defaultOptions) {
81
81
  ...spread(_options),
82
82
  };
83
83
  const fn = typeof args[1] === "function" ? args[1] : args[2];
84
- return it(testName, async () => alchemy.run(testName, {
84
+ return it(testName, () => alchemy.run(testName, {
85
85
  ...options,
86
86
  parent: scope,
87
87
  }, async (scope) => {
88
- // Enter test scope since bun calls from different scope
89
88
  await scope.run(() => fn(scope));
90
89
  }), timeout);
91
90
  }
@@ -1 +1 @@
1
- {"version":3,"file":"bun.js","sourceRoot":"","sources":["../../src/test/bun.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bun.js","sourceRoot":"","sources":["../../src/test/bun.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alchemy",
3
- "version": "0.17.2",
3
+ "version": "0.18.0",
4
4
  "type": "module",
5
5
  "module": "./lib/index.js",
6
6
  "scripts": {
@@ -15,6 +15,7 @@
15
15
  ".": "./lib/index.js",
16
16
  "./ai": "./lib/ai/index.js",
17
17
  "./aws": "./lib/aws/index.js",
18
+ "./aws/control": "./lib/aws/control/index.js",
18
19
  "./aws/oidc": "./lib/aws/oidc/index.js",
19
20
  "./cloudflare": "./lib/cloudflare/index.js",
20
21
  "./dns": "./lib/dns/index.js",
@@ -49,6 +50,8 @@
49
50
  "@aws-sdk/client-sesv2": "^3.0.0",
50
51
  "@aws-sdk/client-sqs": "^3.0.0",
51
52
  "@aws-sdk/client-sts": "^3.0.0",
53
+ "@aws-sdk/credential-providers": "^3.0.0",
54
+ "@aws-sdk/node-config-provider": "^3.374.0",
52
55
  "@cloudflare/unenv-preset": "^2.3.1",
53
56
  "@cloudflare/workers-shared": "^0.17.5",
54
57
  "@iarna/toml": "^2.2.5",
@@ -60,6 +63,7 @@
60
63
  "cloudflare": "^4.0.0",
61
64
  "diff": "^7.0.0",
62
65
  "esbuild": "^0.25.1",
66
+ "fast-json-patch": "^3.1.1",
63
67
  "glob": "^10.0.0",
64
68
  "hono": "^4.0.0",
65
69
  "jszip": "^3.0.0",
@@ -329,7 +329,7 @@ export const Document = Resource(
329
329
  * @param text The text to extract markdown content from
330
330
  * @returns The extracted markdown content or error message
331
331
  */
332
- function extractMarkdownContent(text: string): {
332
+ export function extractMarkdownContent(text: string): {
333
333
  content: string;
334
334
  error?: string;
335
335
  } {
package/src/alchemy.ts CHANGED
@@ -1,15 +1,15 @@
1
1
  import fs from "node:fs/promises";
2
2
  import path from "node:path";
3
3
 
4
- import { destroy, DestroyedSignal } from "./destroy.js";
4
+ import { DestroyedSignal, destroy } from "./destroy.js";
5
5
  import { env } from "./env.js";
6
6
  import {
7
+ type PendingResource,
7
8
  ResourceFQN,
8
9
  ResourceID,
9
10
  ResourceKind,
10
11
  ResourceScope,
11
12
  ResourceSeq,
12
- type PendingResource,
13
13
  } from "./resource.js";
14
14
  import { isRuntime } from "./runtime/global.js";
15
15
  import { Scope } from "./scope.js";
@@ -378,7 +378,6 @@ async function run<T>(
378
378
  return await _scope.run(async () => fn.bind(_scope)(_scope));
379
379
  } catch (error) {
380
380
  if (!(error instanceof DestroyedSignal)) {
381
- // console.log(error);
382
381
  _scope.fail();
383
382
  }
384
383
  throw error;
@@ -0,0 +1,450 @@
1
+ import { fromNodeProviderChain } from "@aws-sdk/credential-providers";
2
+ import { loadConfig } from "@aws-sdk/node-config-provider";
3
+ import { AwsClient } from "aws4fetch";
4
+
5
+ import {
6
+ AlreadyExistsError,
7
+ CloudControlError,
8
+ ConcurrentOperationError,
9
+ NetworkError,
10
+ NotFoundError,
11
+ RequestError,
12
+ ResourceNotFoundException,
13
+ ThrottlingException,
14
+ UpdateFailedError,
15
+ ValidationException,
16
+ } from "./error.js";
17
+
18
+ /**
19
+ * Status of a Cloud Control API operation
20
+ */
21
+ export type OperationStatus =
22
+ | "PENDING"
23
+ | "IN_PROGRESS"
24
+ | "SUCCESS"
25
+ | "FAILED"
26
+ | "CANCEL_IN_PROGRESS"
27
+ | "CANCEL_COMPLETE";
28
+
29
+ /**
30
+ * Progress event from a Cloud Control API operation
31
+ */
32
+ export interface ProgressEvent {
33
+ /**
34
+ * Error code if the operation failed
35
+ */
36
+ ErrorCode?: string;
37
+
38
+ /**
39
+ * Time when the event occurred
40
+ */
41
+ EventTime?: number;
42
+
43
+ /**
44
+ * Token for hooks associated with the request
45
+ */
46
+ HooksRequestToken?: string;
47
+
48
+ /**
49
+ * Resource identifier
50
+ */
51
+ Identifier: string;
52
+
53
+ /**
54
+ * Operation being performed (CREATE, READ, UPDATE, DELETE)
55
+ */
56
+ Operation?: string;
57
+
58
+ /**
59
+ * Current status of the operation
60
+ */
61
+ OperationStatus: OperationStatus;
62
+
63
+ /**
64
+ * Token that identifies the request
65
+ */
66
+ RequestToken: string;
67
+
68
+ /**
69
+ * JSON string representation of the resource model
70
+ */
71
+ ResourceModel?: string;
72
+
73
+ /**
74
+ * Number of seconds to wait before retrying
75
+ */
76
+ RetryAfter?: number;
77
+
78
+ /**
79
+ * Status message providing details about the operation
80
+ */
81
+ StatusMessage: string;
82
+
83
+ /**
84
+ * Type name of the resource
85
+ */
86
+ TypeName?: string;
87
+ }
88
+
89
+ /**
90
+ * Options for Cloud Control API requests
91
+ */
92
+ export interface CloudControlOptions {
93
+ /**
94
+ * AWS region to use (defaults to us-east-1)
95
+ */
96
+ region?: string;
97
+
98
+ /**
99
+ * AWS access key ID (overrides environment variable)
100
+ */
101
+ accessKeyId?: string;
102
+
103
+ /**
104
+ * AWS secret access key (overrides environment variable)
105
+ */
106
+ secretAccessKey?: string;
107
+
108
+ /**
109
+ * AWS session token for temporary credentials
110
+ */
111
+ sessionToken?: string;
112
+
113
+ /**
114
+ * Initial delay in milliseconds between polling attempts
115
+ */
116
+ initialPollingDelay?: number;
117
+
118
+ /**
119
+ * Maximum delay in milliseconds between polling attempts
120
+ */
121
+ maxPollingDelay?: number;
122
+
123
+ /**
124
+ * Maximum number of retries for retryable errors
125
+ */
126
+ maxRetries?: number;
127
+ }
128
+
129
+ const getRegion = loadConfig({
130
+ environmentVariableSelector: (env) =>
131
+ env.AWS_REGION || env.AWS_DEFAULT_REGION,
132
+ configFileSelector: (profile) => profile.region,
133
+ default: undefined,
134
+ });
135
+
136
+ /**
137
+ * Create a Cloud Control API client
138
+ */
139
+ export async function createCloudControlClient(
140
+ options: CloudControlOptions = {},
141
+ ) {
142
+ const credentials = await fromNodeProviderChain()();
143
+
144
+ const region =
145
+ options.region ?? // 1. favor explicit region passed in
146
+ (await getRegion()) ?? // 2-4. resolve from AWS profile, loadConfig, and environment
147
+ process.env.AWS_REGION ??
148
+ process.env.AWS_DEFAULT_REGION;
149
+
150
+ if (!region) {
151
+ throw new Error(
152
+ "No region found. Please set AWS_REGION or AWS_DEFAULT_REGION in the environment or in your AWS profile.",
153
+ );
154
+ }
155
+
156
+ const client = new AwsClient({
157
+ ...credentials,
158
+ service: "cloudcontrolapi",
159
+ region,
160
+ });
161
+
162
+ return new CloudControlClient(client, {
163
+ ...options,
164
+ region,
165
+ });
166
+ }
167
+
168
+ export class CloudControlClient {
169
+ private region: string;
170
+ private initialPollingDelay: number;
171
+ private maxPollingDelay: number;
172
+ private maxRetries: number;
173
+
174
+ constructor(
175
+ private readonly client: AwsClient,
176
+ options: CloudControlOptions,
177
+ ) {
178
+ this.region = options.region || "us-east-1";
179
+ this.initialPollingDelay = options.initialPollingDelay || 1000;
180
+ this.maxPollingDelay = options.maxPollingDelay || 10000;
181
+ this.maxRetries = options.maxRetries || 3;
182
+ }
183
+
184
+ /**
185
+ * Create a new resource
186
+ */
187
+ public async createResource(
188
+ typeName: string,
189
+ desiredState: Record<string, any>,
190
+ ): Promise<ProgressEvent> {
191
+ return this.sync("CreateResource", {
192
+ TypeName: typeName,
193
+ DesiredState: JSON.stringify(desiredState),
194
+ });
195
+ }
196
+
197
+ /**
198
+ * Get a resource's current state
199
+ */
200
+ public async getResource(
201
+ typeName: string,
202
+ identifier: string,
203
+ ): Promise<Record<string, any> | undefined> {
204
+ try {
205
+ return JSON.parse(
206
+ (
207
+ await this.fetch<{
208
+ ResourceDescription: {
209
+ Properties: string;
210
+ };
211
+ }>("GetResource", {
212
+ TypeName: typeName,
213
+ Identifier: identifier,
214
+ })
215
+ ).ResourceDescription.Properties,
216
+ );
217
+ } catch (error: any) {
218
+ if (error instanceof ResourceNotFoundException) {
219
+ return undefined;
220
+ }
221
+ throw error;
222
+ }
223
+ }
224
+
225
+ /**
226
+ * Update a resource
227
+ */
228
+ public async updateResource(
229
+ typeName: string,
230
+ identifier: string,
231
+ patchDocument: Record<string, any>,
232
+ ): Promise<ProgressEvent> {
233
+ return this.sync("UpdateResource", {
234
+ TypeName: typeName,
235
+ Identifier: identifier,
236
+ PatchDocument: JSON.stringify(patchDocument),
237
+ });
238
+ }
239
+
240
+ /**
241
+ * Delete a resource
242
+ */
243
+ public async deleteResource(
244
+ typeName: string,
245
+ identifier: string,
246
+ ): Promise<ProgressEvent> {
247
+ return this.sync("DeleteResource", {
248
+ TypeName: typeName,
249
+ Identifier: identifier,
250
+ });
251
+ }
252
+
253
+ /**
254
+ * List resources of a given type
255
+ */
256
+ public listResources(typeName: string, nextToken?: string) {
257
+ return this.fetch<{
258
+ ResourceDescriptions: Array<{
259
+ Identifier: string;
260
+ Properties: Record<string, any>;
261
+ }>;
262
+ NextToken?: string;
263
+ }>("ListResources", {
264
+ TypeName: typeName,
265
+ NextToken: nextToken,
266
+ });
267
+ }
268
+
269
+ /**
270
+ * Poll an operation until it completes
271
+ */
272
+ public async poll(
273
+ requestToken: string,
274
+ action?: "CreateResource" | "UpdateResource" | "DeleteResource",
275
+ ): Promise<ProgressEvent> {
276
+ let delay = this.initialPollingDelay;
277
+ let logged = false;
278
+
279
+ while (true) {
280
+ try {
281
+ const response = await this.fetch<{
282
+ ProgressEvent: ProgressEvent;
283
+ }>("GetResourceRequestStatus", {
284
+ RequestToken: requestToken,
285
+ });
286
+
287
+ if (response.ProgressEvent.OperationStatus === "SUCCESS") {
288
+ return response.ProgressEvent;
289
+ }
290
+
291
+ if (response.ProgressEvent.OperationStatus === "FAILED") {
292
+ const errorCode = response.ProgressEvent.ErrorCode;
293
+ const progressEvent = response.ProgressEvent;
294
+ if (errorCode === "AlreadyExists") {
295
+ throw new AlreadyExistsError(progressEvent);
296
+ } else if (errorCode === "NotFound") {
297
+ throw new NotFoundError(progressEvent);
298
+ }
299
+ throw new UpdateFailedError(progressEvent);
300
+ }
301
+
302
+ // Use the suggested retry delay if provided
303
+ const waitTime = response.ProgressEvent.RetryAfter
304
+ ? Math.max(100, response.ProgressEvent.RetryAfter * 1000 - Date.now())
305
+ : delay;
306
+
307
+ if (!logged) {
308
+ logged = true;
309
+ console.log(
310
+ `Polling for ${response.ProgressEvent.Identifier} (${response.ProgressEvent.TypeName}) to stabilize`,
311
+ );
312
+ }
313
+
314
+ await new Promise((resolve) => setTimeout(resolve, waitTime));
315
+ delay = Math.min(delay * 2, this.maxPollingDelay);
316
+ } catch (error: any) {
317
+ if (error instanceof NotFoundError && action === "DeleteResource") {
318
+ return error.progressEvent;
319
+ } else if (error instanceof CloudControlError) {
320
+ throw error;
321
+ } else if (error instanceof ValidationException) {
322
+ throw error;
323
+ }
324
+
325
+ // For retryable errors, continue polling
326
+ await new Promise((resolve) =>
327
+ setTimeout(resolve, Math.min(delay * 2, this.maxPollingDelay)),
328
+ );
329
+ delay = Math.min(delay * 2, this.maxPollingDelay);
330
+ }
331
+ }
332
+ }
333
+
334
+ public async sync(
335
+ action: "CreateResource" | "UpdateResource" | "DeleteResource",
336
+ props?: any,
337
+ ): Promise<ProgressEvent> {
338
+ const { ProgressEvent } = await this.fetch<{
339
+ ProgressEvent: ProgressEvent;
340
+ }>(action, props);
341
+
342
+ return this.poll(ProgressEvent.RequestToken, action);
343
+ }
344
+
345
+ public async fetch<T>(
346
+ action: string,
347
+ params?: any,
348
+ options?: {
349
+ maxRetries?: number;
350
+ },
351
+ ): Promise<T> {
352
+ let attempt = 0;
353
+ const maxRetries = options?.maxRetries || this.maxRetries;
354
+
355
+ while (true) {
356
+ try {
357
+ const args = [
358
+ `https://cloudcontrolapi.${this.region}.amazonaws.com/?Action=${action}&Version=2021-09-30`,
359
+ {
360
+ method: "POST",
361
+ headers: {
362
+ "content-type": "application/x-amz-json-1.0",
363
+ "x-amz-target": `CloudApiService.${action}`,
364
+ },
365
+ body: JSON.stringify(params),
366
+ },
367
+ ] as const;
368
+ const signedRequest = await this.client.sign(...args);
369
+ const response = await fetch(signedRequest);
370
+
371
+ if (!response.ok) {
372
+ const data: any = await response.json();
373
+ if (
374
+ data.__type ===
375
+ "com.amazon.cloudapiservice#ResourceNotFoundException"
376
+ ) {
377
+ throw new ResourceNotFoundException(response);
378
+ }
379
+ if (
380
+ data.__type ===
381
+ "com.amazon.cloudapiservice#ConcurrentOperationException"
382
+ ) {
383
+ // Extract request token from message
384
+ const message = data.Message || "";
385
+ const requestTokenMatch = message.match(
386
+ /RequestToken\s+([a-fA-F0-9-]+)/,
387
+ );
388
+ if (!requestTokenMatch) {
389
+ throw new RequestError(response, {
390
+ ...data,
391
+ message: `ConcurrentOperationException without request token: ${message}`,
392
+ });
393
+ }
394
+ throw new ConcurrentOperationError(message, requestTokenMatch[1]);
395
+ }
396
+ if (
397
+ data.__type === "com.amazon.coral.availability#ThrottlingException"
398
+ ) {
399
+ throw new ThrottlingException(response, data);
400
+ }
401
+ if (data.__type === "com.amazon.coral.validate#ValidationException") {
402
+ throw new ValidationException(response, data);
403
+ }
404
+ throw new RequestError(response, data);
405
+ }
406
+
407
+ return (await response.json()) as T;
408
+ } catch (error: any) {
409
+ // Handle other CloudControl errors (don't retry, except ThrottlingException)
410
+ if (
411
+ error instanceof CloudControlError &&
412
+ !(error instanceof ThrottlingException)
413
+ ) {
414
+ throw error;
415
+ }
416
+
417
+ // Handle retryable errors (throttling and network errors)
418
+ if (attempt < maxRetries) {
419
+ // Use exponential backoff with jitter, capped at 3 seconds
420
+ const baseDelay = Math.min(2 ** attempt * 1000, 3000);
421
+ const jitter = Math.random() * 0.1 * baseDelay;
422
+ const retryDelay = baseDelay + jitter;
423
+
424
+ const errorType =
425
+ error instanceof ThrottlingException
426
+ ? "Throttling"
427
+ : "Network error";
428
+ console.log(
429
+ `${errorType} detected, retrying in ${Math.round(retryDelay)}ms (attempt ${attempt + 1}/${maxRetries + 1})`,
430
+ );
431
+ await new Promise((resolve) => setTimeout(resolve, retryDelay));
432
+ attempt++;
433
+ continue;
434
+ }
435
+
436
+ // Max retries exceeded
437
+ if (error instanceof ThrottlingException) {
438
+ console.error(
439
+ `Max retries (${maxRetries}) exceeded for throttling exception`,
440
+ );
441
+ throw error;
442
+ }
443
+
444
+ throw new NetworkError(
445
+ error.message || "Network error during Cloud Control API request",
446
+ );
447
+ }
448
+ }
449
+ }
450
+ }