alchemy 0.1.16 → 0.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/$.d.ts +12 -0
- package/lib/$.d.ts.map +1 -0
- package/lib/$.js +42 -0
- package/lib/$.js.map +1 -0
- package/lib/alchemize.d.ts +47 -0
- package/lib/alchemize.d.ts.map +1 -0
- package/lib/alchemize.js +116 -0
- package/lib/alchemize.js.map +1 -0
- package/lib/apply.d.ts +23 -0
- package/lib/apply.d.ts.map +1 -1
- package/lib/apply.js +4 -0
- package/lib/apply.js.map +1 -1
- package/lib/aws/account-id.d.ts +5 -0
- package/lib/aws/account-id.d.ts.map +1 -0
- package/lib/aws/account-id.js +10 -0
- package/lib/aws/account-id.js.map +1 -0
- package/lib/aws/bucket.d.ts +21 -0
- package/lib/aws/bucket.d.ts.map +1 -0
- package/lib/aws/bucket.js +114 -0
- package/lib/aws/bucket.js.map +1 -0
- package/lib/aws/function.d.ts +53 -0
- package/lib/aws/function.d.ts.map +1 -0
- package/lib/aws/function.js +195 -0
- package/lib/aws/function.js.map +1 -0
- package/lib/aws/index.d.ts +9 -0
- package/lib/aws/index.d.ts.map +1 -0
- package/lib/aws/index.js +9 -0
- package/lib/aws/index.js.map +1 -0
- package/lib/aws/oidc/github-oidc-provider.d.ts +11 -0
- package/lib/aws/oidc/github-oidc-provider.d.ts.map +1 -0
- package/lib/aws/oidc/github-oidc-provider.js +22 -0
- package/lib/aws/oidc/github-oidc-provider.js.map +1 -0
- package/lib/aws/oidc/index.d.ts +3 -0
- package/lib/aws/oidc/index.d.ts.map +1 -0
- package/lib/aws/oidc/index.js +3 -0
- package/lib/aws/oidc/index.js.map +1 -0
- package/lib/aws/oidc/oidc-provider.d.ts +60 -0
- package/lib/aws/oidc/oidc-provider.d.ts.map +1 -0
- package/lib/aws/oidc/oidc-provider.js +140 -0
- package/lib/aws/oidc/oidc-provider.js.map +1 -0
- package/lib/aws/policy.d.ts +46 -0
- package/lib/aws/policy.d.ts.map +1 -0
- package/lib/aws/policy.js +139 -0
- package/lib/aws/policy.js.map +1 -0
- package/lib/aws/queue.d.ts +62 -0
- package/lib/aws/queue.d.ts.map +1 -0
- package/lib/aws/queue.js +167 -0
- package/lib/aws/queue.js.map +1 -0
- package/lib/aws/role.d.ts +27 -0
- package/lib/aws/role.d.ts.map +1 -0
- package/lib/aws/role.js +197 -0
- package/lib/aws/role.js.map +1 -0
- package/lib/aws/ses.d.ts +75 -0
- package/lib/aws/ses.d.ts.map +1 -0
- package/lib/aws/ses.js +189 -0
- package/lib/aws/ses.js.map +1 -0
- package/lib/aws/table.d.ts +26 -0
- package/lib/aws/table.d.ts.map +1 -0
- package/lib/aws/table.js +154 -0
- package/lib/aws/table.js.map +1 -0
- package/lib/cloudflare/api.d.ts +88 -0
- package/lib/cloudflare/api.d.ts.map +1 -0
- package/lib/cloudflare/api.js +184 -0
- package/lib/cloudflare/api.js.map +1 -0
- package/lib/cloudflare/asset-manifest.d.ts +15 -0
- package/lib/cloudflare/asset-manifest.d.ts.map +1 -0
- package/lib/cloudflare/asset-manifest.js +2 -0
- package/lib/cloudflare/asset-manifest.js.map +1 -0
- package/lib/cloudflare/auth.d.ts +52 -0
- package/lib/cloudflare/auth.d.ts.map +1 -0
- package/lib/cloudflare/auth.js +114 -0
- package/lib/cloudflare/auth.js.map +1 -0
- package/lib/cloudflare/bindings.d.ts +261 -0
- package/lib/cloudflare/bindings.d.ts.map +1 -0
- package/lib/cloudflare/bindings.js +2 -0
- package/lib/cloudflare/bindings.js.map +1 -0
- package/lib/cloudflare/bound.d.ts +8 -0
- package/lib/cloudflare/bound.d.ts.map +1 -0
- package/lib/cloudflare/bound.js +2 -0
- package/lib/cloudflare/bound.js.map +1 -0
- package/lib/cloudflare/bucket.d.ts +54 -0
- package/lib/cloudflare/bucket.d.ts.map +1 -0
- package/lib/cloudflare/bucket.js +120 -0
- package/lib/cloudflare/bucket.js.map +1 -0
- package/lib/cloudflare/durable-object-namespace.d.ts +20 -0
- package/lib/cloudflare/durable-object-namespace.d.ts.map +1 -0
- package/lib/cloudflare/durable-object-namespace.js +21 -0
- package/lib/cloudflare/durable-object-namespace.js.map +1 -0
- package/lib/cloudflare/generate-asset-manifest.d.ts +3 -0
- package/lib/cloudflare/generate-asset-manifest.d.ts.map +1 -0
- package/lib/cloudflare/generate-asset-manifest.js +69 -0
- package/lib/cloudflare/generate-asset-manifest.js.map +1 -0
- package/lib/cloudflare/index.d.ts +8 -0
- package/lib/cloudflare/index.d.ts.map +1 -0
- package/lib/cloudflare/index.js +8 -0
- package/lib/cloudflare/index.js.map +1 -0
- package/lib/cloudflare/kv-namespace.d.ts +64 -0
- package/lib/cloudflare/kv-namespace.d.ts.map +1 -0
- package/lib/cloudflare/kv-namespace.js +114 -0
- package/lib/cloudflare/kv-namespace.js.map +1 -0
- package/lib/cloudflare/state.d.ts +83 -0
- package/lib/cloudflare/state.d.ts.map +1 -0
- package/lib/cloudflare/state.js +109 -0
- package/lib/cloudflare/state.js.map +1 -0
- package/lib/cloudflare/static-site-router.d.ts +19 -0
- package/lib/cloudflare/static-site-router.d.ts.map +1 -0
- package/lib/cloudflare/static-site-router.js +110 -0
- package/lib/cloudflare/static-site-router.js.map +1 -0
- package/lib/cloudflare/static-site.d.ts +166 -0
- package/lib/cloudflare/static-site.d.ts.map +1 -0
- package/lib/cloudflare/static-site.js +161 -0
- package/lib/cloudflare/static-site.js.map +1 -0
- package/lib/cloudflare/types.d.ts +52 -0
- package/lib/cloudflare/types.d.ts.map +1 -0
- package/lib/cloudflare/types.js +21 -0
- package/lib/cloudflare/types.js.map +1 -0
- package/lib/cloudflare/upload-asset-manifest.d.ts +12 -0
- package/lib/cloudflare/upload-asset-manifest.d.ts.map +1 -0
- package/lib/cloudflare/upload-asset-manifest.js +55 -0
- package/lib/cloudflare/upload-asset-manifest.js.map +1 -0
- package/lib/cloudflare/worker-metadata.d.ts +130 -0
- package/lib/cloudflare/worker-metadata.d.ts.map +1 -0
- package/lib/cloudflare/worker-metadata.js +2 -0
- package/lib/cloudflare/worker-metadata.js.map +1 -0
- package/lib/cloudflare/worker-migration.d.ts +110 -0
- package/lib/cloudflare/worker-migration.d.ts.map +1 -0
- package/lib/cloudflare/worker-migration.js +11 -0
- package/lib/cloudflare/worker-migration.js.map +1 -0
- package/lib/cloudflare/worker.d.ts +114 -0
- package/lib/cloudflare/worker.d.ts.map +1 -0
- package/lib/cloudflare/worker.js +419 -0
- package/lib/cloudflare/worker.js.map +1 -0
- package/lib/destroy.d.ts +19 -0
- package/lib/encrypt.d.ts +17 -0
- package/lib/encrypt.d.ts.map +1 -0
- package/lib/encrypt.js +45 -0
- package/lib/encrypt.js.map +1 -0
- package/lib/error.d.ts +2 -0
- package/lib/error.d.ts.map +1 -0
- package/lib/error.js +13 -0
- package/lib/error.js.map +1 -0
- package/lib/esbuild.d.ts +152 -0
- package/lib/esbuild.d.ts.map +1 -0
- package/lib/esbuild.js +67 -0
- package/lib/esbuild.js.map +1 -0
- package/lib/fs.d.ts +12 -0
- package/lib/fs.d.ts.map +1 -0
- package/lib/fs.js +41 -0
- package/lib/fs.js.map +1 -0
- package/lib/github/client.d.ts +34 -0
- package/lib/github/client.d.ts.map +1 -0
- package/lib/github/client.js +91 -0
- package/lib/github/client.js.map +1 -0
- package/lib/github/index.d.ts +2 -0
- package/lib/github/index.d.ts.map +1 -0
- package/lib/github/index.js +2 -0
- package/lib/github/index.js.map +1 -0
- package/lib/github/secret.d.ts +47 -0
- package/lib/github/secret.d.ts.map +1 -0
- package/lib/github/secret.js +99 -0
- package/lib/github/secret.js.map +1 -0
- package/lib/global.d.ts +16 -0
- package/lib/global.d.ts.map +1 -0
- package/lib/global.js +42 -0
- package/lib/global.js.map +1 -0
- package/lib/index.d.ts +11 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +10 -0
- package/lib/index.js.map +1 -0
- package/lib/input.d.ts +7 -0
- package/lib/input.d.ts.map +1 -0
- package/lib/input.js +2 -0
- package/lib/input.js.map +1 -0
- package/lib/main.d.ts +3 -0
- package/lib/main.d.ts.map +1 -0
- package/lib/main.js +32 -0
- package/lib/main.js.map +1 -0
- package/lib/output.d.ts +25 -0
- package/lib/output.d.ts.map +1 -0
- package/lib/output.js +23 -0
- package/lib/output.js.map +1 -0
- package/lib/print.d.ts +7 -0
- package/lib/print.d.ts.map +1 -0
- package/lib/print.js +10 -0
- package/lib/print.js.map +1 -0
- package/lib/resource.d.ts +71 -0
- package/lib/resource.d.ts.map +1 -0
- package/lib/resource.js +276 -0
- package/lib/resource.js.map +1 -0
- package/lib/scope.d.ts +18 -0
- package/lib/scope.d.ts.map +1 -0
- package/lib/scope.js +30 -0
- package/lib/scope.js.map +1 -0
- package/lib/secret.d.ts +12 -0
- package/lib/secret.d.ts.map +1 -0
- package/lib/secret.js +30 -0
- package/lib/secret.js.map +1 -0
- package/lib/serde.d.ts +3 -0
- package/lib/serde.d.ts.map +1 -0
- package/lib/serde.js +37 -0
- package/lib/serde.js.map +1 -0
- package/lib/slug.d.ts +2 -0
- package/lib/slug.d.ts.map +1 -0
- package/lib/slug.js +4 -0
- package/lib/slug.js.map +1 -0
- package/lib/state.d.ts +40 -0
- package/lib/state.d.ts.map +1 -0
- package/lib/state.js +74 -0
- package/lib/state.js.map +1 -0
- package/lib/stripe/index.d.ts +4 -0
- package/lib/stripe/index.d.ts.map +1 -0
- package/lib/stripe/index.js +4 -0
- package/lib/stripe/index.js.map +1 -0
- package/lib/stripe/price.d.ts +109 -0
- package/lib/stripe/price.d.ts.map +1 -0
- package/lib/stripe/price.js +112 -0
- package/lib/stripe/price.js.map +1 -0
- package/lib/stripe/product.d.ts +86 -0
- package/lib/stripe/product.d.ts.map +1 -0
- package/lib/stripe/product.js +90 -0
- package/lib/stripe/product.js.map +1 -0
- package/lib/stripe/webhook.d.ts +73 -0
- package/lib/stripe/webhook.d.ts.map +1 -0
- package/lib/stripe/webhook.js +94 -0
- package/lib/stripe/webhook.js.map +1 -0
- package/lib/utils/content-type.d.ts +8 -0
- package/lib/utils/content-type.d.ts.map +1 -0
- package/lib/utils/content-type.js +41 -0
- package/lib/utils/content-type.js.map +1 -0
- package/lib/utils/retry.d.ts +13 -0
- package/lib/utils/retry.d.ts.map +1 -0
- package/lib/utils/retry.js +32 -0
- package/lib/utils/retry.js.map +1 -0
- package/package.json +3 -6
- package/src/alchemize.ts +9 -0
- package/src/apply.ts +3 -0
- package/src/cloudflare/bindings.ts +9 -1
- package/src/cloudflare/bound.ts +18 -0
- package/src/cloudflare/bucket.ts +240 -0
- package/src/cloudflare/index.ts +1 -0
- package/src/cloudflare/static-site.ts +14 -2
- package/src/cloudflare/worker.ts +84 -59
- package/src/encrypt.ts +79 -0
- package/src/github/secret.ts +34 -33
- package/src/index.ts +1 -0
- package/src/input.ts +13 -10
- package/src/output.ts +13 -9
- package/src/secret.ts +41 -0
- package/src/serde.ts +46 -0
- package/src/state.ts +3 -2
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import Stripe from "stripe";
|
|
2
|
+
import { Resource } from "../resource";
|
|
3
|
+
export class Product extends Resource("stripe::Product", async (ctx, props) => {
|
|
4
|
+
// Get Stripe API key from context or environment
|
|
5
|
+
const apiKey = process.env.STRIPE_API_KEY;
|
|
6
|
+
if (!apiKey) {
|
|
7
|
+
throw new Error("STRIPE_API_KEY environment variable is required");
|
|
8
|
+
}
|
|
9
|
+
// Initialize Stripe client
|
|
10
|
+
const stripe = new Stripe(apiKey);
|
|
11
|
+
if (ctx.event === "delete") {
|
|
12
|
+
try {
|
|
13
|
+
if (ctx.event === "delete" && ctx.output?.id) {
|
|
14
|
+
await stripe.products.update(ctx.output.id, { active: false });
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
// Ignore if the product doesn't exist
|
|
19
|
+
console.error("Error deactivating product:", error);
|
|
20
|
+
}
|
|
21
|
+
// Return a minimal output for deleted state
|
|
22
|
+
return {
|
|
23
|
+
...props,
|
|
24
|
+
id: "",
|
|
25
|
+
createdAt: 0,
|
|
26
|
+
updatedAt: 0,
|
|
27
|
+
livemode: false,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
try {
|
|
32
|
+
let product;
|
|
33
|
+
if (ctx.event === "update" && ctx.output?.id) {
|
|
34
|
+
// Update existing product
|
|
35
|
+
product = await stripe.products.update(ctx.output.id, {
|
|
36
|
+
name: props.name,
|
|
37
|
+
description: props.description,
|
|
38
|
+
active: props.active,
|
|
39
|
+
images: props.images,
|
|
40
|
+
url: props.url,
|
|
41
|
+
statement_descriptor: props.statementDescriptor,
|
|
42
|
+
metadata: props.metadata,
|
|
43
|
+
tax_code: props.taxCode,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
// Create new product
|
|
48
|
+
product = await stripe.products.create({
|
|
49
|
+
name: props.name,
|
|
50
|
+
description: props.description,
|
|
51
|
+
active: props.active,
|
|
52
|
+
images: props.images,
|
|
53
|
+
url: props.url,
|
|
54
|
+
shippable: props.shippable,
|
|
55
|
+
type: props.type,
|
|
56
|
+
unit_label: props.unitLabel,
|
|
57
|
+
statement_descriptor: props.statementDescriptor,
|
|
58
|
+
metadata: props.metadata,
|
|
59
|
+
tax_code: props.taxCode,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
// Map Stripe API response to our output format
|
|
63
|
+
const output = {
|
|
64
|
+
id: product.id,
|
|
65
|
+
name: product.name,
|
|
66
|
+
description: product.description || undefined,
|
|
67
|
+
active: product.active,
|
|
68
|
+
images: product.images || undefined,
|
|
69
|
+
url: product.url || undefined,
|
|
70
|
+
shippable: product.shippable || undefined,
|
|
71
|
+
type: product.type,
|
|
72
|
+
unitLabel: product.unit_label || undefined,
|
|
73
|
+
statementDescriptor: product.statement_descriptor || undefined,
|
|
74
|
+
metadata: product.metadata || undefined,
|
|
75
|
+
taxCode: typeof product.tax_code === "string" ? product.tax_code : undefined,
|
|
76
|
+
createdAt: product.created,
|
|
77
|
+
livemode: product.livemode,
|
|
78
|
+
updatedAt: product.updated,
|
|
79
|
+
packageDimensions: product.package_dimensions || undefined,
|
|
80
|
+
};
|
|
81
|
+
return output;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
console.error("Error creating/updating product:", error);
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}) {
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=product.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"product.js","sourceRoot":"","sources":["../../src/stripe/product.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAmGvC,MAAM,OAAO,OAAQ,SAAQ,QAAQ,CACnC,iBAAiB,EACjB,KAAK,EAAE,GAA2B,EAAE,KAAmB,EAAE,EAAE;IACzD,iDAAiD;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAED,2BAA2B;IAC3B,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;IAElC,IAAI,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC;gBAC7C,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;QAED,4CAA4C;QAC5C,OAAO;YACL,GAAG,KAAK;YACR,EAAE,EAAE,EAAE;YACN,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,CAAC;YACZ,QAAQ,EAAE,KAAK;SAChB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,IAAI,OAAuB,CAAC;YAE5B,IAAI,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC;gBAC7C,0BAA0B;gBAC1B,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE;oBACpD,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,GAAG,EAAE,KAAK,CAAC,GAAG;oBACd,oBAAoB,EAAE,KAAK,CAAC,mBAAmB;oBAC/C,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,QAAQ,EAAE,KAAK,CAAC,OAAO;iBACxB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,qBAAqB;gBACrB,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACrC,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,GAAG,EAAE,KAAK,CAAC,GAAG;oBACd,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,IAAI,EAAE,KAAK,CAAC,IAAuC;oBACnD,UAAU,EAAE,KAAK,CAAC,SAAS;oBAC3B,oBAAoB,EAAE,KAAK,CAAC,mBAAmB;oBAC/C,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,QAAQ,EAAE,KAAK,CAAC,OAAO;iBACxB,CAAC,CAAC;YACL,CAAC;YAED,+CAA+C;YAC/C,MAAM,MAAM,GAAkB;gBAC5B,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,SAAS;gBAC7C,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,SAAS;gBACnC,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,SAAS;gBAC7B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;gBACzC,IAAI,EAAE,OAAO,CAAC,IAAmB;gBACjC,SAAS,EAAE,OAAO,CAAC,UAAU,IAAI,SAAS;gBAC1C,mBAAmB,EAAE,OAAO,CAAC,oBAAoB,IAAI,SAAS;gBAC9D,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,SAAS;gBACvC,OAAO,EACL,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;gBACrE,SAAS,EAAE,OAAO,CAAC,OAAO;gBAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,SAAS,EAAE,OAAO,CAAC,OAAO;gBAC1B,iBAAiB,EAAE,OAAO,CAAC,kBAAkB,IAAI,SAAS;aAC3D,CAAC;YAEF,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;YACzD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC,CACF;CAAG"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import Stripe from "stripe";
|
|
2
|
+
export type EnabledEvent = Stripe.WebhookEndpointUpdateParams.EnabledEvent;
|
|
3
|
+
/**
|
|
4
|
+
* Properties for creating a Stripe webhook endpoint
|
|
5
|
+
*/
|
|
6
|
+
export interface WebhookEndpointProps {
|
|
7
|
+
/**
|
|
8
|
+
* The URL of the webhook endpoint
|
|
9
|
+
*/
|
|
10
|
+
url: string;
|
|
11
|
+
/**
|
|
12
|
+
* The list of events to enable for this endpoint
|
|
13
|
+
*/
|
|
14
|
+
enabledEvents: EnabledEvent[];
|
|
15
|
+
/**
|
|
16
|
+
* Description of the webhook
|
|
17
|
+
*/
|
|
18
|
+
description?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Whether the webhook is active
|
|
21
|
+
*/
|
|
22
|
+
active?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* The API version events are rendered as for this webhook
|
|
25
|
+
*/
|
|
26
|
+
apiVersion?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Whether to include mounted endpoint events automatically
|
|
29
|
+
*/
|
|
30
|
+
connect?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Webhook endpoint metadata
|
|
33
|
+
*/
|
|
34
|
+
metadata?: Record<string, string>;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Output from the Stripe webhook endpoint
|
|
38
|
+
*/
|
|
39
|
+
export interface WebhookEndpointOutput extends WebhookEndpointProps {
|
|
40
|
+
/**
|
|
41
|
+
* The ID of the webhook
|
|
42
|
+
*/
|
|
43
|
+
id: string;
|
|
44
|
+
/**
|
|
45
|
+
* The webhook endpoint's secret key, used to verify signatures on received events
|
|
46
|
+
*/
|
|
47
|
+
secret: string;
|
|
48
|
+
/**
|
|
49
|
+
* The webhook endpoint's application
|
|
50
|
+
*/
|
|
51
|
+
application?: string;
|
|
52
|
+
/**
|
|
53
|
+
* Time at which the object was created
|
|
54
|
+
*/
|
|
55
|
+
createdAt: number;
|
|
56
|
+
/**
|
|
57
|
+
* Has the value true if the object exists in live mode or the value false if the object exists in test mode
|
|
58
|
+
*/
|
|
59
|
+
livemode: boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Time at which the object was last updated
|
|
62
|
+
*/
|
|
63
|
+
updatedAt: number;
|
|
64
|
+
/**
|
|
65
|
+
* The status of the webhook
|
|
66
|
+
*/
|
|
67
|
+
status: string;
|
|
68
|
+
}
|
|
69
|
+
declare const WebhookEndpoint_base: import("../resource").Provider<"stripe::WebhookEndpoint", [props: WebhookEndpointProps], WebhookEndpointOutput>;
|
|
70
|
+
export declare class WebhookEndpoint extends WebhookEndpoint_base {
|
|
71
|
+
}
|
|
72
|
+
export {};
|
|
73
|
+
//# sourceMappingURL=webhook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/stripe/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAI5B,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,2BAA2B,CAAC,YAAY,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,aAAa,EAAE,YAAY,EAAE,CAAC;IAE9B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB;IACjE;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;;AAED,qBAAa,eAAgB,SAAQ,oBAiGpC;CAAG"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import Stripe from "stripe";
|
|
2
|
+
import { Resource } from "../resource";
|
|
3
|
+
export class WebhookEndpoint extends Resource("stripe::WebhookEndpoint", async (ctx, props) => {
|
|
4
|
+
// Get Stripe API key from context or environment
|
|
5
|
+
const apiKey = process.env.STRIPE_API_KEY;
|
|
6
|
+
if (!apiKey) {
|
|
7
|
+
throw new Error("STRIPE_API_KEY environment variable is required");
|
|
8
|
+
}
|
|
9
|
+
// Initialize Stripe client
|
|
10
|
+
const stripe = new Stripe(apiKey);
|
|
11
|
+
if (ctx.event === "delete") {
|
|
12
|
+
try {
|
|
13
|
+
// Get the webhook ID from the stored output
|
|
14
|
+
if (ctx.event === "delete" && ctx.output?.id) {
|
|
15
|
+
await stripe.webhookEndpoints.del(ctx.output.id);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
// Ignore if the webhook doesn't exist
|
|
20
|
+
console.error("Error deleting webhook:", error);
|
|
21
|
+
}
|
|
22
|
+
// Return a minimal output for deleted state
|
|
23
|
+
return {
|
|
24
|
+
...props,
|
|
25
|
+
id: "",
|
|
26
|
+
secret: "",
|
|
27
|
+
createdAt: 0,
|
|
28
|
+
updatedAt: 0,
|
|
29
|
+
livemode: false,
|
|
30
|
+
status: "deleted",
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
try {
|
|
35
|
+
let webhook;
|
|
36
|
+
if (ctx.event === "update" && ctx.output?.id) {
|
|
37
|
+
// Update existing webhook
|
|
38
|
+
webhook = await stripe.webhookEndpoints.update(ctx.output.id, {
|
|
39
|
+
url: props.url,
|
|
40
|
+
enabled_events: props.enabledEvents,
|
|
41
|
+
description: props.description,
|
|
42
|
+
disabled: props.active === false,
|
|
43
|
+
metadata: props.metadata,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
// Create new webhook
|
|
48
|
+
webhook = await stripe.webhookEndpoints.create({
|
|
49
|
+
url: props.url,
|
|
50
|
+
enabled_events: props.enabledEvents,
|
|
51
|
+
description: props.description,
|
|
52
|
+
metadata: props.metadata,
|
|
53
|
+
});
|
|
54
|
+
// For connect parameter, need to handle it separately if it exists
|
|
55
|
+
if (props.connect !== undefined) {
|
|
56
|
+
// Note: connect is specified at creation time and cannot be updated
|
|
57
|
+
console.log("Note: 'connect' parameter will be applied at creation time only");
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Store the secret if available
|
|
61
|
+
let secret = "";
|
|
62
|
+
if (webhook.secret) {
|
|
63
|
+
secret = webhook.secret;
|
|
64
|
+
}
|
|
65
|
+
else if (ctx.event === "update" && ctx.output?.secret) {
|
|
66
|
+
secret = ctx.output.secret;
|
|
67
|
+
}
|
|
68
|
+
// Map Stripe API response to our output format
|
|
69
|
+
const output = {
|
|
70
|
+
id: webhook.id,
|
|
71
|
+
url: webhook.url,
|
|
72
|
+
enabledEvents: webhook.enabled_events,
|
|
73
|
+
description: webhook.description || undefined,
|
|
74
|
+
active: webhook.status === "enabled",
|
|
75
|
+
apiVersion: webhook.api_version || undefined,
|
|
76
|
+
// connect: !!webhook.connect,
|
|
77
|
+
metadata: webhook.metadata || undefined,
|
|
78
|
+
secret: secret,
|
|
79
|
+
application: webhook.application || undefined,
|
|
80
|
+
createdAt: webhook.created,
|
|
81
|
+
livemode: webhook.livemode,
|
|
82
|
+
updatedAt: webhook.created, // Using created timestamp as updated
|
|
83
|
+
status: webhook.status,
|
|
84
|
+
};
|
|
85
|
+
return output;
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
console.error("Error creating/updating webhook:", error);
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}) {
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=webhook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/stripe/webhook.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-type.d.ts","sourceRoot":"","sources":["../../src/utils/content-type.ts"],"names":[],"mappings":"AAgCA;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGvD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
// Common MIME types
|
|
3
|
+
const mimeTypes = {
|
|
4
|
+
".html": "text/html",
|
|
5
|
+
".htm": "text/html",
|
|
6
|
+
".css": "text/css",
|
|
7
|
+
".js": "application/javascript",
|
|
8
|
+
".json": "application/json",
|
|
9
|
+
".xml": "application/xml",
|
|
10
|
+
".txt": "text/plain",
|
|
11
|
+
".md": "text/markdown",
|
|
12
|
+
".png": "image/png",
|
|
13
|
+
".jpg": "image/jpeg",
|
|
14
|
+
".jpeg": "image/jpeg",
|
|
15
|
+
".gif": "image/gif",
|
|
16
|
+
".webp": "image/webp",
|
|
17
|
+
".svg": "image/svg+xml",
|
|
18
|
+
".ico": "image/x-icon",
|
|
19
|
+
".pdf": "application/pdf",
|
|
20
|
+
".zip": "application/zip",
|
|
21
|
+
".woff": "font/woff",
|
|
22
|
+
".woff2": "font/woff2",
|
|
23
|
+
".ttf": "font/ttf",
|
|
24
|
+
".otf": "font/otf",
|
|
25
|
+
".eot": "application/vnd.ms-fontobject",
|
|
26
|
+
".mp4": "video/mp4",
|
|
27
|
+
".webm": "video/webm",
|
|
28
|
+
".mp3": "audio/mpeg",
|
|
29
|
+
".wav": "audio/wav",
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Gets the content type for a file based on its extension
|
|
33
|
+
*
|
|
34
|
+
* @param filePath Path to the file
|
|
35
|
+
* @returns The content type for the file
|
|
36
|
+
*/
|
|
37
|
+
export function getContentType(filePath) {
|
|
38
|
+
const extension = path.extname(filePath).toLowerCase();
|
|
39
|
+
return mimeTypes[extension] || "application/octet-stream";
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=content-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-type.js","sourceRoot":"","sources":["../../src/utils/content-type.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,oBAAoB;AACpB,MAAM,SAAS,GAA2B;IACxC,OAAO,EAAE,WAAW;IACpB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,UAAU;IAClB,KAAK,EAAE,wBAAwB;IAC/B,OAAO,EAAE,kBAAkB;IAC3B,MAAM,EAAE,iBAAiB;IACzB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,eAAe;IACtB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,eAAe;IACvB,MAAM,EAAE,cAAc;IACtB,MAAM,EAAE,iBAAiB;IACzB,MAAM,EAAE,iBAAiB;IACzB,OAAO,EAAE,WAAW;IACpB,QAAQ,EAAE,YAAY;IACtB,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,+BAA+B;IACvC,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,WAAW;CACpB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,OAAO,SAAS,CAAC,SAAS,CAAC,IAAI,0BAA0B,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility function for exponential backoff retry
|
|
3
|
+
* Retries an operation with exponential backoff when a retryable error occurs
|
|
4
|
+
*
|
|
5
|
+
* @param operation The async operation to execute and potentially retry
|
|
6
|
+
* @param isRetryable Function to determine if an error should trigger a retry
|
|
7
|
+
* @param maxAttempts Maximum number of attempts before giving up
|
|
8
|
+
* @param initialDelayMs Initial delay in milliseconds before first retry
|
|
9
|
+
* @returns Result of the operation
|
|
10
|
+
* @throws The last error encountered if all retries fail
|
|
11
|
+
*/
|
|
12
|
+
export declare function withExponentialBackoff<T>(operation: () => Promise<T>, isRetryable: (error: any) => boolean, maxAttempts?: number, initialDelayMs?: number): Promise<T>;
|
|
13
|
+
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,WAAW,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,EACpC,WAAW,SAAI,EACf,cAAc,SAAM,GACnB,OAAO,CAAC,CAAC,CAAC,CAoBZ"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility function for exponential backoff retry
|
|
3
|
+
* Retries an operation with exponential backoff when a retryable error occurs
|
|
4
|
+
*
|
|
5
|
+
* @param operation The async operation to execute and potentially retry
|
|
6
|
+
* @param isRetryable Function to determine if an error should trigger a retry
|
|
7
|
+
* @param maxAttempts Maximum number of attempts before giving up
|
|
8
|
+
* @param initialDelayMs Initial delay in milliseconds before first retry
|
|
9
|
+
* @returns Result of the operation
|
|
10
|
+
* @throws The last error encountered if all retries fail
|
|
11
|
+
*/
|
|
12
|
+
export async function withExponentialBackoff(operation, isRetryable, maxAttempts = 5, initialDelayMs = 100) {
|
|
13
|
+
let attempt = 0;
|
|
14
|
+
let delay = initialDelayMs;
|
|
15
|
+
while (true) {
|
|
16
|
+
try {
|
|
17
|
+
return await operation();
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
attempt++;
|
|
21
|
+
if (attempt >= maxAttempts || !isRetryable(error)) {
|
|
22
|
+
console.warn("Failed after ", attempt, " attempts");
|
|
23
|
+
throw error;
|
|
24
|
+
}
|
|
25
|
+
// Exponential backoff with jitter
|
|
26
|
+
const jitter = Math.random() * 0.1 * delay;
|
|
27
|
+
await new Promise((resolve) => setTimeout(resolve, delay + jitter));
|
|
28
|
+
delay *= 2; // Double the delay for next attempt
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,SAA2B,EAC3B,WAAoC,EACpC,WAAW,GAAG,CAAC,EACf,cAAc,GAAG,GAAG;IAEpB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,KAAK,GAAG,cAAc,CAAC;IAE3B,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;YACV,IAAI,OAAO,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClD,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;gBACpD,MAAM,KAAK,CAAC;YACd,CAAC;YAED,kCAAkC;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC;YAC3C,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;YACpE,KAAK,IAAI,CAAC,CAAC,CAAC,oCAAoC;QAClD,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,24 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "alchemy",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.18",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"module": "./lib/index.js",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"publish:npm": "rm -rf ./lib && tsc -b && npm publish"
|
|
7
|
+
"publish:npm": "rm -rf ./*.tsbuildinfo && rm -rf ./lib && tsc -b && npm publish"
|
|
8
8
|
},
|
|
9
9
|
"files": ["lib", "src"],
|
|
10
10
|
"exports": {
|
|
11
11
|
".": "./lib/index.js",
|
|
12
|
-
"./agent": "./lib/agent/index.js",
|
|
13
12
|
"./aws": "./lib/aws/index.js",
|
|
14
13
|
"./aws/oidc": "./lib/aws/oidc/index.js",
|
|
15
14
|
"./cloudflare": "./lib/cloudflare/index.js",
|
|
16
15
|
"./esbuild": "./lib/esbuild.js",
|
|
17
|
-
"./markdown": "./lib/markdown/index.js",
|
|
18
16
|
"./fs": "./lib/fs.js",
|
|
19
17
|
"./github": "./lib/github/index.js",
|
|
20
|
-
"./stripe": "./lib/stripe/index.js"
|
|
21
|
-
"./typescript": "./lib/typescript/index.js"
|
|
18
|
+
"./stripe": "./lib/stripe/index.js"
|
|
22
19
|
},
|
|
23
20
|
"peerDependencies": {
|
|
24
21
|
"@ai-sdk/openai": "^1.1.9",
|
package/src/alchemize.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { evaluate } from "./apply";
|
|
|
2
2
|
import { destroy } from "./destroy";
|
|
3
3
|
import { defaultStage, defaultStateStore, providers } from "./global";
|
|
4
4
|
import { type Scope, getScope } from "./scope";
|
|
5
|
+
import { setSecretPassphrase } from "./secret";
|
|
5
6
|
import type { StateStoreType } from "./state";
|
|
6
7
|
|
|
7
8
|
export interface AlchemizeOptions {
|
|
@@ -37,6 +38,11 @@ export interface AlchemizeOptions {
|
|
|
37
38
|
* @default false
|
|
38
39
|
*/
|
|
39
40
|
quiet?: boolean;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* A passphrase to use to encrypt/decrypt secrets.
|
|
44
|
+
*/
|
|
45
|
+
password?: string;
|
|
40
46
|
}
|
|
41
47
|
|
|
42
48
|
/**
|
|
@@ -52,6 +58,9 @@ export async function alchemize(options?: AlchemizeOptions) {
|
|
|
52
58
|
scope.getScopePath(stage),
|
|
53
59
|
);
|
|
54
60
|
const callbacks = scope.callbacks;
|
|
61
|
+
if (options?.password) {
|
|
62
|
+
setSecretPassphrase(options.password);
|
|
63
|
+
}
|
|
55
64
|
|
|
56
65
|
if (nodes.size > 0) {
|
|
57
66
|
await stateStore.init?.();
|
package/src/apply.ts
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
isResource,
|
|
9
9
|
} from "./resource";
|
|
10
10
|
import { type Scope as IScope, getScope } from "./scope";
|
|
11
|
+
import { Secret } from "./secret";
|
|
11
12
|
import type { StateStore } from "./state";
|
|
12
13
|
|
|
13
14
|
export interface ApplyOptions {
|
|
@@ -110,6 +111,8 @@ export async function evaluate<T>(
|
|
|
110
111
|
);
|
|
111
112
|
} else if (output instanceof Date) {
|
|
112
113
|
return new Evaluated(output as T);
|
|
114
|
+
} else if (output instanceof Secret) {
|
|
115
|
+
return new Evaluated(output as T);
|
|
113
116
|
} else if (output && typeof output === "object") {
|
|
114
117
|
const entries = Object.entries(output);
|
|
115
118
|
const evaluatedEntries = await Promise.all(
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
* Based on Cloudflare API documentation:
|
|
4
4
|
* https://developers.cloudflare.com/api/resources/workers/subresources/scripts/methods/update/
|
|
5
5
|
*/
|
|
6
|
+
import type { Secret } from "../secret";
|
|
7
|
+
import type { R2Bucket } from "./bucket";
|
|
6
8
|
import type { DurableObjectNamespace } from "./durable-object-namespace";
|
|
7
9
|
import type { KVNamespace } from "./kv-namespace";
|
|
8
10
|
import type { Worker } from "./worker";
|
|
@@ -14,7 +16,13 @@ export type Bindings = {
|
|
|
14
16
|
/**
|
|
15
17
|
* L2 Binding Resources.
|
|
16
18
|
*/
|
|
17
|
-
export type Binding =
|
|
19
|
+
export type Binding =
|
|
20
|
+
| DurableObjectNamespace
|
|
21
|
+
| KVNamespace
|
|
22
|
+
| Worker
|
|
23
|
+
| R2Bucket
|
|
24
|
+
| Secret
|
|
25
|
+
| string;
|
|
18
26
|
|
|
19
27
|
/**
|
|
20
28
|
* Union type for all Worker binding types (API spec)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Secret } from "../secret";
|
|
2
|
+
import type { Binding } from "./bindings";
|
|
3
|
+
import type { R2Bucket as _R2Bucket } from "./bucket";
|
|
4
|
+
import type { DurableObjectNamespace as _DurableObjectNamespace } from "./durable-object-namespace";
|
|
5
|
+
import type { KVNamespace as _KVNamespace } from "./kv-namespace";
|
|
6
|
+
import type { Worker as _Worker } from "./worker";
|
|
7
|
+
|
|
8
|
+
export type Bound<T extends Binding> = T extends _DurableObjectNamespace
|
|
9
|
+
? DurableObjectNamespace
|
|
10
|
+
: T extends _KVNamespace
|
|
11
|
+
? KVNamespace
|
|
12
|
+
: T extends _Worker
|
|
13
|
+
? Worker
|
|
14
|
+
: T extends _R2Bucket
|
|
15
|
+
? R2Bucket
|
|
16
|
+
: T extends Secret
|
|
17
|
+
? string
|
|
18
|
+
: never;
|