alchemy 0.32.0 → 0.33.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.
- package/lib/cloudflare/astro.d.ts +3 -3
- package/lib/cloudflare/astro.d.ts.map +1 -1
- package/lib/cloudflare/astro.js +11 -79
- package/lib/cloudflare/astro.js.map +1 -1
- package/lib/cloudflare/vite.d.ts +1 -1
- package/lib/cloudflare/vite.d.ts.map +1 -1
- package/lib/cloudflare/vite.js +2 -0
- package/lib/cloudflare/vite.js.map +1 -1
- package/lib/cloudflare/website.d.ts +6 -0
- package/lib/cloudflare/website.d.ts.map +1 -1
- package/lib/cloudflare/website.js +1 -1
- package/lib/cloudflare/website.js.map +1 -1
- package/lib/cloudflare/worker-assets.d.ts.map +1 -1
- package/lib/cloudflare/worker-assets.js +0 -3
- package/lib/cloudflare/worker-assets.js.map +1 -1
- package/lib/cloudflare/worker.d.ts +6 -8
- package/lib/cloudflare/worker.d.ts.map +1 -1
- package/lib/cloudflare/worker.js.map +1 -1
- package/lib/stripe/price.d.ts +112 -8
- package/lib/stripe/price.d.ts.map +1 -1
- package/lib/stripe/price.js +104 -9
- package/lib/stripe/price.js.map +1 -1
- package/package.json +1 -1
- package/src/cloudflare/astro.ts +15 -102
- package/src/cloudflare/vite.ts +4 -1
- package/src/cloudflare/website.ts +8 -1
- package/src/cloudflare/worker-assets.ts +0 -4
- package/src/cloudflare/worker.ts +6 -9
- package/src/stripe/price.ts +199 -12
package/lib/stripe/price.js
CHANGED
|
@@ -38,17 +38,56 @@ import { createStripeClient, handleStripeDeleteError } from "./client.js";
|
|
|
38
38
|
* });
|
|
39
39
|
*
|
|
40
40
|
* @example
|
|
41
|
-
* // Create a tiered price with
|
|
42
|
-
* const tieredPrice = await Price("
|
|
41
|
+
* // Create a graduated tiered price with usage-based billing
|
|
42
|
+
* const tieredPrice = await Price("api-usage", {
|
|
43
43
|
* currency: "usd",
|
|
44
|
-
* unitAmount: 10000, // $100.00
|
|
45
44
|
* product: "prod_xyz",
|
|
46
45
|
* billingScheme: "tiered",
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* }
|
|
46
|
+
* tiersMode: "graduated",
|
|
47
|
+
* recurring: {
|
|
48
|
+
* interval: "month",
|
|
49
|
+
* usageType: "metered"
|
|
50
|
+
* },
|
|
51
|
+
* tiers: [
|
|
52
|
+
* {
|
|
53
|
+
* upTo: 10000,
|
|
54
|
+
* unitAmount: 0 // First 10k API calls free
|
|
55
|
+
* },
|
|
56
|
+
* {
|
|
57
|
+
* upTo: 50000,
|
|
58
|
+
* unitAmount: 2 // $0.02 per call up to 50k
|
|
59
|
+
* },
|
|
60
|
+
* {
|
|
61
|
+
* upTo: "inf",
|
|
62
|
+
* unitAmount: 1 // $0.01 per call beyond 50k
|
|
63
|
+
* }
|
|
64
|
+
* ]
|
|
65
|
+
* });
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* // Create a volume-based tiered price with overage cap
|
|
69
|
+
* const volumePrice = await Price("storage", {
|
|
70
|
+
* currency: "usd",
|
|
71
|
+
* product: "prod_xyz",
|
|
72
|
+
* billingScheme: "tiered",
|
|
73
|
+
* tiersMode: "volume",
|
|
74
|
+
* recurring: {
|
|
75
|
+
* interval: "month"
|
|
76
|
+
* },
|
|
77
|
+
* tiers: [
|
|
78
|
+
* {
|
|
79
|
+
* upTo: 100,
|
|
80
|
+
* unitAmount: 500 // $5 per GB for up to 100GB
|
|
81
|
+
* },
|
|
82
|
+
* {
|
|
83
|
+
* upTo: 1000,
|
|
84
|
+
* unitAmount: 400 // $4 per GB for 101-1000GB
|
|
85
|
+
* },
|
|
86
|
+
* {
|
|
87
|
+
* upTo: "inf",
|
|
88
|
+
* flatAmount: 300000 // Cap at $3000 for unlimited storage
|
|
89
|
+
* }
|
|
90
|
+
* ]
|
|
52
91
|
* });
|
|
53
92
|
*/
|
|
54
93
|
export const Price = Resource("stripe::Price", async function (_id, props) {
|
|
@@ -65,6 +104,16 @@ export const Price = Resource("stripe::Price", async function (_id, props) {
|
|
|
65
104
|
}
|
|
66
105
|
return this.destroy();
|
|
67
106
|
}
|
|
107
|
+
// Validate tier-related constraints
|
|
108
|
+
if (props.tiers && props.billingScheme !== "tiered") {
|
|
109
|
+
throw new Error("Tiers can only be used with billingScheme: 'tiered'");
|
|
110
|
+
}
|
|
111
|
+
if (props.tiers && (props.unitAmount || props.unitAmountDecimal)) {
|
|
112
|
+
throw new Error("Cannot set both tiers and unitAmount/unitAmountDecimal");
|
|
113
|
+
}
|
|
114
|
+
if (props.tiersMode && !props.tiers) {
|
|
115
|
+
throw new Error("tiersMode requires tiers to be defined");
|
|
116
|
+
}
|
|
68
117
|
try {
|
|
69
118
|
let price;
|
|
70
119
|
if (this.phase === "update" && this.output?.id) {
|
|
@@ -75,6 +124,7 @@ export const Price = Resource("stripe::Price", async function (_id, props) {
|
|
|
75
124
|
nickname: props.nickname,
|
|
76
125
|
lookup_key: props.lookupKey,
|
|
77
126
|
transfer_lookup_key: props.transferLookupKey,
|
|
127
|
+
expand: ["tiers"],
|
|
78
128
|
};
|
|
79
129
|
price = await stripe.prices.update(this.output.id, updateParams);
|
|
80
130
|
}
|
|
@@ -90,6 +140,7 @@ export const Price = Resource("stripe::Price", async function (_id, props) {
|
|
|
90
140
|
tax_behavior: props.taxBehavior,
|
|
91
141
|
lookup_key: props.lookupKey,
|
|
92
142
|
transfer_lookup_key: props.transferLookupKey,
|
|
143
|
+
expand: ["tiers"],
|
|
93
144
|
};
|
|
94
145
|
// Add unit amount fields
|
|
95
146
|
if (props.unitAmount !== undefined) {
|
|
@@ -107,6 +158,26 @@ export const Price = Resource("stripe::Price", async function (_id, props) {
|
|
|
107
158
|
aggregate_usage: props.recurring.aggregateUsage,
|
|
108
159
|
};
|
|
109
160
|
}
|
|
161
|
+
// Add tier configuration if present
|
|
162
|
+
if (props.tiers) {
|
|
163
|
+
createParams.tiers = props.tiers.map((tier) => ({
|
|
164
|
+
up_to: tier.upTo === "inf" ? "inf" : tier.upTo,
|
|
165
|
+
flat_amount: tier.flatAmount,
|
|
166
|
+
flat_amount_decimal: tier.flatAmountDecimal,
|
|
167
|
+
unit_amount: tier.unitAmount,
|
|
168
|
+
unit_amount_decimal: tier.unitAmountDecimal,
|
|
169
|
+
}));
|
|
170
|
+
}
|
|
171
|
+
if (props.tiersMode) {
|
|
172
|
+
createParams.tiers_mode = props.tiersMode;
|
|
173
|
+
}
|
|
174
|
+
// Add transform quantity if present
|
|
175
|
+
if (props.transformQuantity) {
|
|
176
|
+
createParams.transform_quantity = {
|
|
177
|
+
divide_by: props.transformQuantity.divideBy,
|
|
178
|
+
round: props.transformQuantity.round,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
110
181
|
if (props.lookupKey) {
|
|
111
182
|
const existingPrices = await stripe.prices.list({
|
|
112
183
|
lookup_keys: [props.lookupKey],
|
|
@@ -121,11 +192,15 @@ export const Price = Resource("stripe::Price", async function (_id, props) {
|
|
|
121
192
|
nickname: props.nickname,
|
|
122
193
|
lookup_key: props.lookupKey,
|
|
123
194
|
transfer_lookup_key: props.transferLookupKey,
|
|
195
|
+
expand: ["tiers"],
|
|
124
196
|
};
|
|
125
197
|
price = await stripe.prices.update(existingPrice.id, updateParams);
|
|
126
198
|
}
|
|
127
199
|
else {
|
|
128
|
-
|
|
200
|
+
// Need to retrieve with expanded tiers
|
|
201
|
+
price = await stripe.prices.retrieve(existingPrices.data[0].id, {
|
|
202
|
+
expand: ["tiers"],
|
|
203
|
+
});
|
|
129
204
|
}
|
|
130
205
|
}
|
|
131
206
|
else {
|
|
@@ -148,6 +223,23 @@ export const Price = Resource("stripe::Price", async function (_id, props) {
|
|
|
148
223
|
.aggregate_usage,
|
|
149
224
|
}
|
|
150
225
|
: undefined;
|
|
226
|
+
// Transform Stripe tiers array to our format
|
|
227
|
+
const tiers = price.tiers
|
|
228
|
+
? price.tiers.map((tier) => ({
|
|
229
|
+
flatAmount: tier.flat_amount || undefined,
|
|
230
|
+
flatAmountDecimal: tier.flat_amount_decimal || undefined,
|
|
231
|
+
unitAmount: tier.unit_amount || undefined,
|
|
232
|
+
unitAmountDecimal: tier.unit_amount_decimal || undefined,
|
|
233
|
+
upTo: tier.up_to === null ? "inf" : tier.up_to,
|
|
234
|
+
}))
|
|
235
|
+
: undefined;
|
|
236
|
+
// Transform transform_quantity if present
|
|
237
|
+
const transformQuantity = price.transform_quantity
|
|
238
|
+
? {
|
|
239
|
+
divideBy: price.transform_quantity.divide_by,
|
|
240
|
+
round: price.transform_quantity.round,
|
|
241
|
+
}
|
|
242
|
+
: undefined;
|
|
151
243
|
// Map Stripe API response to our output format
|
|
152
244
|
return this({
|
|
153
245
|
id: price.id,
|
|
@@ -165,6 +257,9 @@ export const Price = Resource("stripe::Price", async function (_id, props) {
|
|
|
165
257
|
livemode: price.livemode,
|
|
166
258
|
type: price.type,
|
|
167
259
|
lookupKey: price.lookup_key || undefined,
|
|
260
|
+
tiers: tiers,
|
|
261
|
+
tiersMode: price.tiers_mode ?? undefined,
|
|
262
|
+
transformQuantity: transformQuantity,
|
|
168
263
|
});
|
|
169
264
|
}
|
|
170
265
|
catch (error) {
|
package/lib/stripe/price.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"price.js","sourceRoot":"","sources":["../../src/stripe/price.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"price.js","sourceRoot":"","sources":["../../src/stripe/price.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/cloudflare/astro.ts
CHANGED
|
@@ -1,17 +1,9 @@
|
|
|
1
|
-
import { writeFile } from "node:fs/promises";
|
|
2
1
|
import path from "node:path";
|
|
3
|
-
import {
|
|
4
|
-
import { Exec } from "../os/exec.ts";
|
|
5
|
-
import { Scope } from "../scope.ts";
|
|
6
|
-
import { Assets } from "./assets.ts";
|
|
2
|
+
import type { Assets } from "./assets.ts";
|
|
7
3
|
import type { Bindings } from "./bindings.ts";
|
|
8
|
-
import type {
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
Worker,
|
|
12
|
-
type WorkerProps,
|
|
13
|
-
} from "./worker.ts";
|
|
14
|
-
import { WranglerJson } from "./wrangler.json.ts";
|
|
4
|
+
import type { WebsiteProps } from "./website.ts";
|
|
5
|
+
import { Website } from "./website.ts";
|
|
6
|
+
import type { Worker } from "./worker.ts";
|
|
15
7
|
|
|
16
8
|
/**
|
|
17
9
|
* Properties for creating an Astro resource.
|
|
@@ -71,7 +63,7 @@ export type Astro<B extends Bindings> = B extends { ASSETS: any }
|
|
|
71
63
|
*/
|
|
72
64
|
export async function Astro<B extends Bindings>(
|
|
73
65
|
id: string,
|
|
74
|
-
props
|
|
66
|
+
props: AstroProps<B>,
|
|
75
67
|
): Promise<Astro<B>> {
|
|
76
68
|
if (props?.bindings?.ASSETS) {
|
|
77
69
|
throw new Error("ASSETS binding is reserved for internal use");
|
|
@@ -83,94 +75,15 @@ export async function Astro<B extends Bindings>(
|
|
|
83
75
|
? props?.assets
|
|
84
76
|
: (props?.assets?.dist ?? "dist");
|
|
85
77
|
|
|
86
|
-
return
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
78
|
+
return Website(id, {
|
|
79
|
+
...props,
|
|
80
|
+
noBundle: props.noBundle ?? true,
|
|
81
|
+
main,
|
|
82
|
+
assets: {
|
|
83
|
+
dist: assetsDir,
|
|
84
|
+
not_found_handling: "none",
|
|
85
|
+
run_worker_first: false,
|
|
90
86
|
},
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const fileName =
|
|
94
|
-
typeof wrangler === "boolean"
|
|
95
|
-
? "wrangler.jsonc"
|
|
96
|
-
: typeof wrangler === "string"
|
|
97
|
-
? wrangler
|
|
98
|
-
: (wrangler?.path ?? "wrangler.jsonc");
|
|
99
|
-
const wranglerPath =
|
|
100
|
-
fileName && path.relative(cwd, path.join(cwd, fileName));
|
|
101
|
-
const wranglerMain =
|
|
102
|
-
typeof wrangler === "object"
|
|
103
|
-
? (wrangler.main ?? props?.main)
|
|
104
|
-
: props?.main;
|
|
105
|
-
|
|
106
|
-
const workerName = props?.name ?? id;
|
|
107
|
-
|
|
108
|
-
const workerProps = {
|
|
109
|
-
...props,
|
|
110
|
-
compatibilityDate:
|
|
111
|
-
props?.compatibilityDate ?? DEFAULT_COMPATIBILITY_DATE,
|
|
112
|
-
compatibilityFlags: [
|
|
113
|
-
"nodejs_compat",
|
|
114
|
-
...(props?.compatibilityFlags ?? []),
|
|
115
|
-
],
|
|
116
|
-
name: workerName,
|
|
117
|
-
entrypoint: main,
|
|
118
|
-
assets: {
|
|
119
|
-
html_handling: "auto-trailing-slash",
|
|
120
|
-
not_found_handling: "single-page-application",
|
|
121
|
-
run_worker_first: false,
|
|
122
|
-
...(typeof props?.assets === "string" ? {} : props?.assets),
|
|
123
|
-
},
|
|
124
|
-
script: props?.main
|
|
125
|
-
? undefined
|
|
126
|
-
: `
|
|
127
|
-
export default {
|
|
128
|
-
async fetch(request, env) {
|
|
129
|
-
return new Response("Not Found", { status: 404 });
|
|
130
|
-
},
|
|
131
|
-
};`,
|
|
132
|
-
url: true,
|
|
133
|
-
adopt: true,
|
|
134
|
-
} as WorkerProps<any> & { name: string };
|
|
135
|
-
|
|
136
|
-
if (wrangler) {
|
|
137
|
-
await WranglerJson("wrangler.jsonc", {
|
|
138
|
-
path: wranglerPath,
|
|
139
|
-
worker: workerProps,
|
|
140
|
-
main: wranglerMain,
|
|
141
|
-
// hard-code the assets directory because we haven't yet included the assets binding
|
|
142
|
-
assets: {
|
|
143
|
-
binding: "ASSETS",
|
|
144
|
-
directory: assetsDir,
|
|
145
|
-
},
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
if (props?.command) {
|
|
150
|
-
await Exec("build", {
|
|
151
|
-
cwd,
|
|
152
|
-
command: props?.command,
|
|
153
|
-
env: props?.env,
|
|
154
|
-
memoize: props?.memoize,
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
await writeFile(
|
|
159
|
-
path.join(cwd, assetsDir, ".assetsignore"),
|
|
160
|
-
["_worker.js", "_routes.json"].join("\n"),
|
|
161
|
-
);
|
|
162
|
-
|
|
163
|
-
return (await Worker("worker", {
|
|
164
|
-
...workerProps,
|
|
165
|
-
bindings: {
|
|
166
|
-
...workerProps.bindings,
|
|
167
|
-
// we don't include the Assets binding until after build to make sure the asset manifest is correct
|
|
168
|
-
// we generate the wrangler.json using all the bind
|
|
169
|
-
ASSETS: await Assets("assets", {
|
|
170
|
-
path: assetsDir,
|
|
171
|
-
}),
|
|
172
|
-
},
|
|
173
|
-
} as WorkerProps<any> & { name: string })) as Website<B>;
|
|
174
|
-
},
|
|
175
|
-
);
|
|
87
|
+
wrangler,
|
|
88
|
+
});
|
|
176
89
|
}
|
package/src/cloudflare/vite.ts
CHANGED
|
@@ -4,7 +4,8 @@ import type { Bindings } from "./bindings.ts";
|
|
|
4
4
|
import { Website, type WebsiteProps } from "./website.ts";
|
|
5
5
|
import type { Worker } from "./worker.ts";
|
|
6
6
|
|
|
7
|
-
export interface ViteProps<B extends Bindings>
|
|
7
|
+
export interface ViteProps<B extends Bindings>
|
|
8
|
+
extends Omit<WebsiteProps<B>, "spa"> {}
|
|
8
9
|
|
|
9
10
|
// don't allow the ASSETS to be overriden
|
|
10
11
|
export type Vite<B extends Bindings> = B extends { ASSETS: any }
|
|
@@ -18,9 +19,11 @@ export async function Vite<B extends Bindings>(
|
|
|
18
19
|
const defaultAssets = path.join("dist", "client");
|
|
19
20
|
return Website(id, {
|
|
20
21
|
...props,
|
|
22
|
+
spa: true,
|
|
21
23
|
assets:
|
|
22
24
|
typeof props.assets === "object"
|
|
23
25
|
? {
|
|
26
|
+
...props.assets,
|
|
24
27
|
dist: props.assets.dist ?? defaultAssets,
|
|
25
28
|
}
|
|
26
29
|
: (props.assets ?? defaultAssets),
|
|
@@ -87,6 +87,13 @@ export interface WebsiteProps<B extends Bindings>
|
|
|
87
87
|
// override main
|
|
88
88
|
main?: string;
|
|
89
89
|
};
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Configures default routing to support client-side routing for Single Page Applications (SPA)
|
|
93
|
+
*
|
|
94
|
+
* @default false
|
|
95
|
+
*/
|
|
96
|
+
spa?: boolean;
|
|
90
97
|
}
|
|
91
98
|
|
|
92
99
|
export type Website<B extends Bindings> = B extends { ASSETS: any }
|
|
@@ -137,7 +144,7 @@ export async function Website<B extends Bindings>(
|
|
|
137
144
|
entrypoint: props.main,
|
|
138
145
|
assets: {
|
|
139
146
|
html_handling: "auto-trailing-slash",
|
|
140
|
-
not_found_handling: "single-page-application",
|
|
147
|
+
not_found_handling: props.spa ? "single-page-application" : "none",
|
|
141
148
|
run_worker_first: false,
|
|
142
149
|
...(typeof props.assets === "string" ? {} : props.assets),
|
|
143
150
|
},
|
|
@@ -164,10 +164,6 @@ export function createAssetConfig(config?: AssetsConfig): AssetsConfig {
|
|
|
164
164
|
if (config.run_worker_first !== undefined) {
|
|
165
165
|
assetConfig.run_worker_first = config.run_worker_first;
|
|
166
166
|
}
|
|
167
|
-
|
|
168
|
-
if (config.serve_directly !== undefined) {
|
|
169
|
-
assetConfig.serve_directly = config.serve_directly;
|
|
170
|
-
}
|
|
171
167
|
}
|
|
172
168
|
|
|
173
169
|
return assetConfig;
|
package/src/cloudflare/worker.ts
CHANGED
|
@@ -80,7 +80,8 @@ export interface AssetsConfig {
|
|
|
80
80
|
|
|
81
81
|
/**
|
|
82
82
|
* Determines the redirects and rewrites of requests for HTML content
|
|
83
|
-
*
|
|
83
|
+
*
|
|
84
|
+
* @default auto-trailing-slash
|
|
84
85
|
*/
|
|
85
86
|
html_handling?:
|
|
86
87
|
| "auto-trailing-slash"
|
|
@@ -90,22 +91,18 @@ export interface AssetsConfig {
|
|
|
90
91
|
|
|
91
92
|
/**
|
|
92
93
|
* Determines the response when a request does not match a static asset, and there is no Worker script
|
|
94
|
+
*
|
|
95
|
+
* @default none
|
|
93
96
|
*/
|
|
94
97
|
not_found_handling?: "none" | "404-page" | "single-page-application";
|
|
95
98
|
|
|
96
99
|
/**
|
|
97
100
|
* When true, requests will always invoke the Worker script.
|
|
98
101
|
* Otherwise, attempt to serve an asset matching the request, falling back to the Worker script.
|
|
102
|
+
*
|
|
103
|
+
* @default false
|
|
99
104
|
*/
|
|
100
105
|
run_worker_first?: boolean;
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* When true and the incoming request matches an asset, that will be served instead of invoking the Worker script.
|
|
104
|
-
* When false, requests will always invoke the Worker script.
|
|
105
|
-
* @default true
|
|
106
|
-
* @deprecated
|
|
107
|
-
*/
|
|
108
|
-
serve_directly?: boolean;
|
|
109
106
|
}
|
|
110
107
|
|
|
111
108
|
export interface BaseWorkerProps<
|