@astrale-os/adapter-cloudflare 0.5.0-beta.18 → 0.5.0-beta.19

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 (93) hide show
  1. package/dist/adapter.d.ts +20 -0
  2. package/dist/adapter.d.ts.map +1 -0
  3. package/dist/adapter.js +323 -0
  4. package/dist/adapter.js.map +1 -0
  5. package/dist/build/artifact.d.ts +9 -0
  6. package/dist/build/artifact.d.ts.map +1 -0
  7. package/dist/build/artifact.js +145 -0
  8. package/dist/build/artifact.js.map +1 -0
  9. package/dist/build/closure.d.ts +3 -0
  10. package/dist/build/closure.d.ts.map +1 -0
  11. package/dist/build/closure.js +23 -0
  12. package/dist/build/closure.js.map +1 -0
  13. package/dist/build/codegen/execution.d.ts +14 -0
  14. package/dist/build/codegen/execution.d.ts.map +1 -0
  15. package/dist/build/codegen/{worker.js → execution.js} +11 -10
  16. package/dist/build/codegen/execution.js.map +1 -0
  17. package/dist/build/codegen/wrangler.d.ts +2 -0
  18. package/dist/build/codegen/wrangler.d.ts.map +1 -1
  19. package/dist/build/codegen/wrangler.js +4 -4
  20. package/dist/build/codegen/wrangler.js.map +1 -1
  21. package/dist/build/configuration.d.ts +9 -0
  22. package/dist/build/configuration.d.ts.map +1 -0
  23. package/dist/build/configuration.js +26 -0
  24. package/dist/build/configuration.js.map +1 -0
  25. package/dist/build/frontend-v1.d.ts +17 -0
  26. package/dist/build/frontend-v1.d.ts.map +1 -0
  27. package/dist/build/frontend-v1.js +134 -0
  28. package/dist/build/frontend-v1.js.map +1 -0
  29. package/dist/build/index.d.ts +6 -15
  30. package/dist/build/index.d.ts.map +1 -1
  31. package/dist/build/index.js +6 -15
  32. package/dist/build/index.js.map +1 -1
  33. package/dist/build/metafile.d.ts +6 -0
  34. package/dist/build/metafile.d.ts.map +1 -0
  35. package/dist/build/metafile.js +15 -0
  36. package/dist/build/metafile.js.map +1 -0
  37. package/dist/build/qualification.d.ts +6 -0
  38. package/dist/build/qualification.d.ts.map +1 -0
  39. package/dist/build/qualification.js +8 -0
  40. package/dist/build/qualification.js.map +1 -0
  41. package/dist/build/roots.d.ts +3 -0
  42. package/dist/build/roots.d.ts.map +1 -0
  43. package/dist/build/roots.js +35 -0
  44. package/dist/build/roots.js.map +1 -0
  45. package/dist/build/wrangler-cli.d.ts +30 -3
  46. package/dist/build/wrangler-cli.d.ts.map +1 -1
  47. package/dist/build/wrangler-cli.js +100 -6
  48. package/dist/build/wrangler-cli.js.map +1 -1
  49. package/dist/cloudflare.d.ts +1 -44
  50. package/dist/cloudflare.d.ts.map +1 -1
  51. package/dist/cloudflare.js +1 -201
  52. package/dist/cloudflare.js.map +1 -1
  53. package/dist/worker/entry.d.ts +34 -0
  54. package/dist/worker/entry.d.ts.map +1 -0
  55. package/dist/worker/entry.js +158 -0
  56. package/dist/worker/entry.js.map +1 -0
  57. package/dist/worker/index.d.ts +1 -60
  58. package/dist/worker/index.d.ts.map +1 -1
  59. package/dist/worker/index.js +1 -220
  60. package/dist/worker/index.js.map +1 -1
  61. package/package.json +16 -15
  62. package/template/astrale.config.ts +12 -10
  63. package/dist/build/codegen/worker.d.ts +0 -12
  64. package/dist/build/codegen/worker.d.ts.map +0 -1
  65. package/dist/build/codegen/worker.js.map +0 -1
  66. package/dist/build/frontend.d.ts +0 -27
  67. package/dist/build/frontend.d.ts.map +0 -1
  68. package/dist/build/frontend.js +0 -252
  69. package/dist/build/frontend.js.map +0 -1
  70. package/dist/build/prepare.d.ts +0 -18
  71. package/dist/build/prepare.d.ts.map +0 -1
  72. package/dist/build/prepare.js +0 -138
  73. package/dist/build/prepare.js.map +0 -1
  74. package/dist/build/worker.d.ts +0 -15
  75. package/dist/build/worker.d.ts.map +0 -1
  76. package/dist/build/worker.js +0 -21
  77. package/dist/build/worker.js.map +0 -1
  78. package/src/build/codegen/identity.ts +0 -40
  79. package/src/build/codegen/merge.ts +0 -92
  80. package/src/build/codegen/worker.ts +0 -53
  81. package/src/build/codegen/wrangler.ts +0 -128
  82. package/src/build/frontend.ts +0 -298
  83. package/src/build/index.ts +0 -29
  84. package/src/build/parse-output.ts +0 -60
  85. package/src/build/prepare.ts +0 -189
  86. package/src/build/worker.ts +0 -37
  87. package/src/build/wrangler-cli.ts +0 -372
  88. package/src/cloudflare.ts +0 -275
  89. package/src/index.ts +0 -21
  90. package/src/params.ts +0 -92
  91. package/src/worker/fetch.ts +0 -46
  92. package/src/worker/index.ts +0 -335
  93. package/src/worker/tsconfig.json +0 -10
@@ -0,0 +1,20 @@
1
+ import { type Release } from '@astrale-os/sdk/deployment/release';
2
+ import { verifyReadiness } from '@astrale-os/sdk/deployment/verify';
3
+ import type { CloudflareParams } from './params.js';
4
+ import { artifact, materialize } from './build/artifact.js';
5
+ import { startFrontend } from './build/frontend-v1.js';
6
+ import { bulkPutSecrets, runWranglerDeploymentStatus, runWranglerDeploy, runWranglerDev } from './build/wrangler-cli.js';
7
+ export interface CloudflareDependencies {
8
+ readonly artifact: typeof artifact;
9
+ readonly materialize: typeof materialize;
10
+ readonly runWranglerDeploy: typeof runWranglerDeploy;
11
+ readonly runWranglerDeploymentStatus: typeof runWranglerDeploymentStatus;
12
+ readonly runWranglerDev: typeof runWranglerDev;
13
+ readonly bulkPutSecrets: typeof bulkPutSecrets;
14
+ readonly startFrontend: typeof startFrontend;
15
+ readonly waitForReadiness: (release: Release) => Promise<void>;
16
+ }
17
+ export declare function cloudflare(environments: Readonly<Record<string, CloudflareParams>>): import("@astrale-os/sdk/deployment/adapter").Adapter<CloudflareParams>;
18
+ export declare function cloudflareWithDependencies(environments: Readonly<Record<string, CloudflareParams>>, dependencies: CloudflareDependencies): import("@astrale-os/sdk/deployment/adapter").Adapter<CloudflareParams>;
19
+ export declare function waitForReadiness(verify: typeof verifyReadiness, release: Release): Promise<void>;
20
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAOA,OAAO,EAIL,KAAK,OAAO,EACb,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AAKnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEnD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAG3D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,EACL,cAAc,EACd,2BAA2B,EAC3B,iBAAiB,EACjB,cAAc,EAEf,MAAM,yBAAyB,CAAA;AAMhC,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,OAAO,QAAQ,CAAA;IAClC,QAAQ,CAAC,WAAW,EAAE,OAAO,WAAW,CAAA;IACxC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,iBAAiB,CAAA;IACpD,QAAQ,CAAC,2BAA2B,EAAE,OAAO,2BAA2B,CAAA;IACxE,QAAQ,CAAC,cAAc,EAAE,OAAO,cAAc,CAAA;IAC9C,QAAQ,CAAC,cAAc,EAAE,OAAO,cAAc,CAAA;IAC9C,QAAQ,CAAC,aAAa,EAAE,OAAO,aAAa,CAAA;IAC5C,QAAQ,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC/D;AAED,wBAAgB,UAAU,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,0EAWlF;AAED,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,EACxD,YAAY,EAAE,sBAAsB,0EAwNrC;AA8GD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,OAAO,eAAe,EAC9B,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAaf"}
@@ -0,0 +1,323 @@
1
+ import { defineAdapter } from '@astrale-os/sdk/deployment/adapter';
2
+ import { addressing, assemble, } from '@astrale-os/sdk/deployment/release';
3
+ import { verifyReadiness } from '@astrale-os/sdk/deployment/verify';
4
+ import { writeFile } from 'node:fs/promises';
5
+ import { createRequire } from 'node:module';
6
+ import { join } from 'node:path';
7
+ import { artifact, materialize } from './build/artifact.js';
8
+ import { generateWranglerConfig } from './build/codegen/wrangler.js';
9
+ import { resolveRouter, workerName } from './build/configuration.js';
10
+ import { startFrontend } from './build/frontend-v1.js';
11
+ import { bulkPutSecrets, runWranglerDeploymentStatus, runWranglerDeploy, runWranglerDev, WranglerDeployError, } from './build/wrangler-cli.js';
12
+ const NONE = Object.freeze({ kind: 'none' });
13
+ const packageVersion = createRequire(import.meta.url)('../package.json')
14
+ .version;
15
+ export function cloudflare(environments) {
16
+ return cloudflareWithDependencies(environments, {
17
+ artifact,
18
+ materialize,
19
+ runWranglerDeploy,
20
+ runWranglerDeploymentStatus,
21
+ runWranglerDev,
22
+ bulkPutSecrets,
23
+ startFrontend,
24
+ waitForReadiness: (release) => waitForReadiness(verifyReadiness, release),
25
+ });
26
+ }
27
+ export function cloudflareWithDependencies(environments, dependencies) {
28
+ return defineAdapter({
29
+ name: 'cloudflare',
30
+ version: packageVersion,
31
+ environments,
32
+ prepare: dependencies.artifact,
33
+ async watch(parameters, context) {
34
+ const directory = join(context.projectDir, '.astrale', 'runtime');
35
+ await dependencies.materialize(directory, context.artifact.files);
36
+ const frontend = await dependencies.startFrontend({
37
+ frontend: context.artifact.build.frontend,
38
+ projectDir: context.projectDir,
39
+ });
40
+ const name = workerName(parameters, context.artifact.build.schema.compiled.root.origin);
41
+ const router = resolveRouter(parameters.router);
42
+ const configPath = join(directory, 'wrangler.watch.jsonc');
43
+ await writeFile(configPath, generateWranglerConfig({
44
+ workerName: name,
45
+ vars: {
46
+ ...parameters.vars,
47
+ ...context.secrets,
48
+ ...(parameters.host === undefined ? {} : { WORKER_URL: parameters.host }),
49
+ ...(frontend === undefined ? {} : { FRONTEND_DEV_URL: frontend.url }),
50
+ },
51
+ ...(context.artifact.build.frontend?.source.kind === 'vite'
52
+ ? {
53
+ frontend: {
54
+ directory: './frontend',
55
+ routes: frontendRoutes(context.artifact),
56
+ dev: true,
57
+ },
58
+ }
59
+ : {}),
60
+ ...(router === undefined
61
+ ? {}
62
+ : { router: { binding: router.binding, service: router.service } }),
63
+ ...(parameters.wrangler === undefined ? {} : { wrangler: parameters.wrangler }),
64
+ selfBinding: true,
65
+ }));
66
+ let worker;
67
+ try {
68
+ worker = await dependencies.runWranglerDev({
69
+ projectDir: context.projectDir,
70
+ configPath,
71
+ port: parameters.port ?? 8787,
72
+ remote: parameters.remote ?? false,
73
+ autoPickPort: parameters.port === undefined,
74
+ ...(parameters.host === undefined ? {} : { ip: '0.0.0.0' }),
75
+ onReload: context.onReload,
76
+ });
77
+ }
78
+ catch (cause) {
79
+ await frontend?.stop().catch(() => undefined);
80
+ throw cause;
81
+ }
82
+ return Object.freeze({
83
+ url: parameters.host ?? worker.url,
84
+ localUrl: worker.url,
85
+ async stop() {
86
+ const results = await Promise.allSettled([
87
+ worker.stop(),
88
+ frontend?.stop() ?? Promise.resolve(),
89
+ ]);
90
+ const failures = results.filter((result) => result.status === 'rejected');
91
+ if (failures.length === 1)
92
+ throw failures[0].reason;
93
+ if (failures.length > 1) {
94
+ throw new AggregateError(failures.map((failure) => failure.reason), 'Cloudflare development cleanup failed.');
95
+ }
96
+ },
97
+ });
98
+ },
99
+ async deploy(parameters, context) {
100
+ const directory = join(context.projectDir, '.astrale', 'deploy');
101
+ await dependencies.materialize(directory, context.artifact.files);
102
+ const name = workerName(parameters, context.artifact.build.schema.compiled.root.origin);
103
+ const configPath = join(directory, 'wrangler.jsonc');
104
+ const fallbackConfigPath = join(directory, 'wrangler.no-self.jsonc');
105
+ let deployed;
106
+ try {
107
+ deployed = await dependencies.runWranglerDeploy({
108
+ projectDir: context.projectDir,
109
+ configPath,
110
+ fallbackConfigPath,
111
+ workerName: name,
112
+ ...(parameters.route === undefined ? {} : { route: parameters.route }),
113
+ });
114
+ }
115
+ catch (cause) {
116
+ const provider = cause instanceof WranglerDeployError && cause.applied !== undefined
117
+ ? partialProvider(cause, context.artifact)
118
+ : { kind: 'unknown' };
119
+ return failed('provider', progress({ provider }), cause);
120
+ }
121
+ const submitted = Object.freeze({
122
+ provider: 'cloudflare',
123
+ deployment: deployed.deploymentVersion,
124
+ artifact: context.artifact.digest,
125
+ });
126
+ let selected;
127
+ try {
128
+ selected = observeAddressing(context.artifact, deployed.url, name);
129
+ }
130
+ catch (cause) {
131
+ return failed('addressing', progress({ provider: { kind: 'partial', evidence: submitted } }), cause);
132
+ }
133
+ let observed;
134
+ try {
135
+ observed = await dependencies.runWranglerDeploymentStatus({
136
+ projectDir: context.projectDir,
137
+ configPath,
138
+ workerName: name,
139
+ });
140
+ requireCurrentDeployment(observed, deployed.deploymentVersion);
141
+ }
142
+ catch (cause) {
143
+ return failed('readiness', progress({
144
+ provider: {
145
+ kind: 'partial',
146
+ evidence: { ...submitted, issuer: selected.issuer },
147
+ },
148
+ }), cause);
149
+ }
150
+ let provider = Object.freeze({
151
+ kind: 'applied',
152
+ evidence: Object.freeze({
153
+ provider: 'cloudflare',
154
+ deployment: observed.deployment,
155
+ artifact: context.artifact.digest,
156
+ issuer: selected.issuer,
157
+ }),
158
+ });
159
+ if (Object.keys(context.secrets).length > 0) {
160
+ try {
161
+ await dependencies.bulkPutSecrets({
162
+ projectDir: context.projectDir,
163
+ configPath,
164
+ secrets: { ...context.secrets },
165
+ });
166
+ }
167
+ catch (cause) {
168
+ return failed('configuration', progress({ provider, configuration: { kind: 'unknown' } }), cause);
169
+ }
170
+ try {
171
+ observed = await dependencies.runWranglerDeploymentStatus({
172
+ projectDir: context.projectDir,
173
+ configPath,
174
+ workerName: name,
175
+ });
176
+ requireCurrentDeployment(observed);
177
+ provider = Object.freeze({
178
+ kind: 'applied',
179
+ evidence: Object.freeze({
180
+ provider: 'cloudflare',
181
+ deployment: observed.deployment,
182
+ artifact: context.artifact.digest,
183
+ issuer: selected.issuer,
184
+ }),
185
+ });
186
+ }
187
+ catch (cause) {
188
+ return failed('readiness', progress({
189
+ provider,
190
+ configuration: {
191
+ kind: 'applied',
192
+ evidence: { names: Object.keys(context.secrets).sort() },
193
+ },
194
+ }), cause);
195
+ }
196
+ }
197
+ const configuration = Object.keys(context.secrets).length === 0
198
+ ? NONE
199
+ : Object.freeze({
200
+ kind: 'applied',
201
+ evidence: Object.freeze({ names: Object.keys(context.secrets).sort() }),
202
+ });
203
+ let release;
204
+ try {
205
+ release = assemble(context.artifact.build, selected);
206
+ }
207
+ catch (cause) {
208
+ return failed('release', progress({ provider, configuration }), cause);
209
+ }
210
+ try {
211
+ await dependencies.waitForReadiness(release);
212
+ }
213
+ catch (cause) {
214
+ return failed('readiness', progress({ provider, configuration }), cause, release);
215
+ }
216
+ return Object.freeze({
217
+ status: 'ready',
218
+ phase: 'complete',
219
+ progress: Object.freeze({ ...progress({ configuration }), provider }),
220
+ release,
221
+ });
222
+ },
223
+ secretsFile: (parameters) => parameters.secrets,
224
+ });
225
+ }
226
+ function partialProvider(cause, artifact) {
227
+ const applied = cause.applied;
228
+ if (applied?.deploymentVersion === undefined)
229
+ return Object.freeze({ kind: 'partial' });
230
+ let issuer;
231
+ if (applied.url !== undefined) {
232
+ try {
233
+ issuer = addressing(applied.url).issuer;
234
+ }
235
+ catch {
236
+ // The provider effect is known even when its printed URL is not admissible Addressing.
237
+ }
238
+ }
239
+ return Object.freeze({
240
+ kind: 'partial',
241
+ evidence: Object.freeze({
242
+ provider: 'cloudflare',
243
+ deployment: applied.deploymentVersion,
244
+ artifact: artifact.digest,
245
+ ...(issuer === undefined ? {} : { issuer }),
246
+ }),
247
+ });
248
+ }
249
+ function requireCurrentDeployment(observed, expectedVersion) {
250
+ if (observed.versions.length !== 1 ||
251
+ observed.versions[0].percentage !== 100 ||
252
+ (expectedVersion !== undefined && observed.versions[0].version !== expectedVersion)) {
253
+ throw new TypeError('Cloudflare current deployment is not one exact Worker version at 100%.');
254
+ }
255
+ }
256
+ function observeAddressing(artifact, deployedUrl, expectedWorker) {
257
+ const observed = addressing(deployedUrl);
258
+ if (artifact.addressing.kind === 'configured') {
259
+ if (observed.issuer !== artifact.addressing.addressing.issuer) {
260
+ throw new TypeError('Cloudflare deployed URL differs from configured Addressing.');
261
+ }
262
+ return observed;
263
+ }
264
+ if (artifact.addressing.claim !== expectedWorker) {
265
+ throw new TypeError('PreparedArtifact worker claim differs from the deployment target.');
266
+ }
267
+ const url = new URL(observed.issuer);
268
+ const labels = url.hostname.split('.');
269
+ if (url.protocol !== 'https:' ||
270
+ labels.length < 4 ||
271
+ labels[0] !== artifact.addressing.claim ||
272
+ labels.at(-2) !== 'workers' ||
273
+ labels.at(-1) !== 'dev') {
274
+ throw new TypeError('Cloudflare workers.dev URL does not satisfy its prepared worker claim.');
275
+ }
276
+ return observed;
277
+ }
278
+ function frontendRoutes(artifact) {
279
+ const frontend = artifact.build.frontend;
280
+ if (frontend === undefined || frontend.source.kind !== 'vite')
281
+ return [];
282
+ return Object.freeze(frontend.routes
283
+ .flatMap((route) => frontend.source.kind === 'vite' && frontend.source.spa && route.path !== '/'
284
+ ? [route.path, `${route.path}/*`]
285
+ : route.path === '/'
286
+ ? ['/*']
287
+ : [route.path])
288
+ .sort());
289
+ }
290
+ function progress(input) {
291
+ return Object.freeze({
292
+ prerequisite: input.prerequisite ?? NONE,
293
+ provider: input.provider ?? NONE,
294
+ configuration: input.configuration ?? NONE,
295
+ installation: input.installation ?? NONE,
296
+ });
297
+ }
298
+ function failed(phase, progressValue, cause, release) {
299
+ const error = cause instanceof Error ? cause : new Error(String(cause));
300
+ return Object.freeze({
301
+ status: 'failed',
302
+ phase,
303
+ progress: progressValue,
304
+ error,
305
+ ...(release === undefined ? {} : { release }),
306
+ });
307
+ }
308
+ export async function waitForReadiness(verify, release) {
309
+ const deadline = Date.now() + 90_000;
310
+ let last;
311
+ while (Date.now() < deadline) {
312
+ try {
313
+ await verify(release, { signal: AbortSignal.timeout(5_000) });
314
+ return;
315
+ }
316
+ catch (cause) {
317
+ last = cause;
318
+ await new Promise((resolve) => setTimeout(resolve, 1_000));
319
+ }
320
+ }
321
+ throw last instanceof Error ? last : new Error('Cloudflare Release did not become ready.');
322
+ }
323
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ArtifactSource, PrepareContext } from '@astrale-os/sdk/deployment/adapter';
2
+ import type { CloudflareParams } from '../params.js';
3
+ /** Prepare one self-contained Worker bundle without provider mutation. */
4
+ export declare function artifact(params: CloudflareParams, context: PrepareContext): Promise<ArtifactSource>;
5
+ export declare function materialize(root: string, files: readonly {
6
+ readonly path: string;
7
+ bytes(): Uint8Array;
8
+ }[]): Promise<void>;
9
+ //# sourceMappingURL=artifact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact.d.ts","sourceRoot":"","sources":["../../src/build/artifact.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AAQxF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAYpD,0EAA0E;AAC1E,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,cAAc,CAAC,CAuGzB;AAgCD,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,IAAI,UAAU,CAAA;CAAE,EAAE,GAC/D,OAAO,CAAC,IAAI,CAAC,CAOf"}
@@ -0,0 +1,145 @@
1
+ import { material } from '@astrale-os/sdk/deployment/build';
2
+ import { addressing } from '@astrale-os/sdk/deployment/release';
3
+ import { copyFile, readFile, writeFile, mkdir, rm } from 'node:fs/promises';
4
+ import { dirname, join, relative, resolve } from 'node:path';
5
+ import { pathToFileURL } from 'node:url';
6
+ import { generateExecutionEntry } from './codegen/execution.js';
7
+ import { ensureIdentity } from './codegen/identity.js';
8
+ import { generateWranglerConfig } from './codegen/wrangler.js';
9
+ import { resolveRouter, workerName } from './configuration.js';
10
+ import { frontendFiles } from './frontend-v1.js';
11
+ import { qualifyWorkerBundle } from './qualification.js';
12
+ import { runWranglerBundle } from './wrangler-cli.js';
13
+ const encoder = new TextEncoder();
14
+ /** Prepare one self-contained Worker bundle without provider mutation. */
15
+ export async function artifact(params, context) {
16
+ const stateDirectory = join(context.projectDir, '.astrale');
17
+ const directory = join(stateDirectory, 'runtime');
18
+ await mkdir(directory, { recursive: true });
19
+ await ensureIdentity(stateDirectory, context.build.schema.compiled.root.origin);
20
+ await copyFile(join(stateDirectory, 'identity.ts'), join(directory, 'identity.ts'));
21
+ const runtimePath = resolve(context.projectDir, context.runtime.reference.path);
22
+ const runtimeSpecifier = moduleSpecifier(relative(directory, runtimePath));
23
+ const router = resolveRouter(params.router);
24
+ const name = workerName(params, context.build.schema.compiled.root.origin);
25
+ const configuredIssuer = params.route === undefined ? params.host : `https://${params.route}`;
26
+ const source = generateExecutionEntry({
27
+ origin: context.build.schema.compiled.root.origin,
28
+ runtimeSpecifier,
29
+ material: material(context.build),
30
+ ...(configuredIssuer === undefined ? { providerAssignedWorker: name } : {}),
31
+ ...(router === undefined
32
+ ? {}
33
+ : {
34
+ router: {
35
+ binding: router.binding,
36
+ hostSuffix: router.hostSuffix,
37
+ minLabels: router.minLabels,
38
+ },
39
+ }),
40
+ });
41
+ const sourcePath = join(directory, 'worker.gen.ts');
42
+ await writeFile(sourcePath, source);
43
+ const configPath = join(directory, 'wrangler.prepare.jsonc');
44
+ await writeFile(configPath, generateWranglerConfig({
45
+ workerName: name,
46
+ ...(params.route === undefined ? {} : { route: params.route }),
47
+ vars: {
48
+ ...params.vars,
49
+ ...(configuredIssuer === undefined ? {} : { WORKER_URL: configuredIssuer }),
50
+ },
51
+ ...(router === undefined
52
+ ? {}
53
+ : { router: { binding: router.binding, service: router.service } }),
54
+ ...(params.wrangler === undefined ? {} : { wrangler: params.wrangler }),
55
+ selfBinding: true,
56
+ }));
57
+ const output = join(directory, 'dist-prepare');
58
+ await rm(output, { recursive: true, force: true });
59
+ const emitted = await runWranglerBundle({
60
+ projectDir: context.projectDir,
61
+ configPath,
62
+ outDir: output,
63
+ });
64
+ const frontend = await frontendFiles({
65
+ frontend: context.build.frontend,
66
+ projectDir: context.projectDir,
67
+ });
68
+ await qualifyWorkerBundle({
69
+ metafilePath: emitted.metafilePath,
70
+ inputRoot: dirname(configPath),
71
+ });
72
+ await admitBundle(emitted.bundlePath);
73
+ const bundle = await readFile(emitted.bundlePath);
74
+ const deploymentConfig = (selfBinding) => generateWranglerConfig({
75
+ workerName: name,
76
+ main: './bundle/index.mjs',
77
+ ...(params.route === undefined ? {} : { route: params.route }),
78
+ vars: {
79
+ ...params.vars,
80
+ ...(configuredIssuer === undefined ? {} : { WORKER_URL: configuredIssuer }),
81
+ },
82
+ ...(context.build.frontend?.source.kind === 'vite'
83
+ ? {
84
+ frontend: {
85
+ directory: './frontend',
86
+ routes: frontendRoutes(context.build.frontend),
87
+ dev: false,
88
+ },
89
+ }
90
+ : {}),
91
+ ...(router === undefined
92
+ ? {}
93
+ : { router: { binding: router.binding, service: router.service } }),
94
+ ...(params.wrangler === undefined ? {} : { wrangler: params.wrangler }),
95
+ selfBinding,
96
+ });
97
+ const files = [
98
+ { path: 'wrangler.jsonc', content: encoder.encode(deploymentConfig(true)) },
99
+ { path: 'wrangler.no-self.jsonc', content: encoder.encode(deploymentConfig(false)) },
100
+ { path: 'bundle/index.mjs', content: new Uint8Array(bundle) },
101
+ ...frontend.map((file) => ({
102
+ path: `frontend/${file.path}`,
103
+ content: file.bytes(),
104
+ })),
105
+ ];
106
+ return Object.freeze({
107
+ entrypoint: 'bundle/index.mjs',
108
+ files: Object.freeze(files),
109
+ addressing: configuredIssuer === undefined
110
+ ? Object.freeze({ kind: 'provider-assigned', claim: name })
111
+ : Object.freeze({ kind: 'configured', addressing: addressing(configuredIssuer) }),
112
+ });
113
+ }
114
+ async function admitBundle(path) {
115
+ const loaded = (await import(`${pathToFileURL(path).href}?admit=${Date.now()}`));
116
+ if (loaded.default === null ||
117
+ typeof loaded.default !== 'object' ||
118
+ typeof Reflect.get(loaded.default, 'fetch') !== 'function') {
119
+ throw new TypeError('Generated Worker bundle does not export a Fetch handler.');
120
+ }
121
+ }
122
+ function frontendRoutes(frontend) {
123
+ if (frontend.source.kind !== 'vite')
124
+ return [];
125
+ return Object.freeze(frontend.routes
126
+ .flatMap((route) => frontend.source.kind === 'vite' && frontend.source.spa && route.path !== '/'
127
+ ? [route.path, `${route.path}/*`]
128
+ : route.path === '/'
129
+ ? ['/*']
130
+ : [route.path])
131
+ .sort());
132
+ }
133
+ export async function materialize(root, files) {
134
+ await rm(root, { recursive: true, force: true });
135
+ for (const file of files) {
136
+ const path = join(root, file.path);
137
+ await mkdir(dirname(path), { recursive: true });
138
+ await writeFile(path, file.bytes());
139
+ }
140
+ }
141
+ function moduleSpecifier(input) {
142
+ const normalized = input.split('\\').join('/');
143
+ return normalized.startsWith('.') ? normalized : `./${normalized}`;
144
+ }
145
+ //# sourceMappingURL=artifact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact.js","sourceRoot":"","sources":["../../src/build/artifact.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Prove emitted Worker reachability excludes authoring, compilation, and broad Core Schema owners. */
2
+ export declare function assertRuntimeClosure(metafilePath: string): Promise<void>;
3
+ //# sourceMappingURL=closure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"closure.d.ts","sourceRoot":"","sources":["../../src/build/closure.ts"],"names":[],"mappings":"AAaA,uGAAuG;AACvG,wBAAsB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAY9E"}
@@ -0,0 +1,23 @@
1
+ import { readWranglerMetafile } from './metafile.js';
2
+ const FORBIDDEN_RUNTIME_INPUTS = [
3
+ '/v1/builder/',
4
+ '/v1/compiled/compiler/',
5
+ '/node_modules/ajv/',
6
+ '/node_modules/re2js/',
7
+ '/kernel-core/domain/',
8
+ '/core/domain/',
9
+ '/kernel-core/schema/index.',
10
+ '/core/schema/index.',
11
+ ];
12
+ /** Prove emitted Worker reachability excludes authoring, compilation, and broad Core Schema owners. */
13
+ export async function assertRuntimeClosure(metafilePath) {
14
+ const metafile = await readWranglerMetafile(metafilePath);
15
+ const forbidden = Object.keys(metafile.inputs).filter((input) => {
16
+ const normalized = `/${input.replaceAll('\\', '/')}`.replace(/(\/node_modules\/@astrale-os\/kernel-[^/]+)\/dist\//gu, '$1/');
17
+ return FORBIDDEN_RUNTIME_INPUTS.some((fragment) => normalized.includes(fragment));
18
+ });
19
+ if (forbidden.length > 0) {
20
+ throw new Error(`Cloudflare Worker reaches build-side modules: ${forbidden.sort().join(', ')}.`);
21
+ }
22
+ }
23
+ //# sourceMappingURL=closure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"closure.js","sourceRoot":"","sources":["../../src/build/closure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAEpD,MAAM,wBAAwB,GAAG;IAC/B,cAAc;IACd,wBAAwB;IACxB,oBAAoB;IACpB,sBAAsB;IACtB,sBAAsB;IACtB,eAAe;IACf,4BAA4B;IAC5B,qBAAqB;CACb,CAAA;AAEV,uGAAuG;AACvG,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,YAAoB;IAC7D,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,YAAY,CAAC,CAAA;IACzD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC9D,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,OAAO,CAC1D,uDAAuD,EACvD,KAAK,CACN,CAAA;QACD,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;IACnF,CAAC,CAAC,CAAA;IACF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,iDAAiD,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAClG,CAAC;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { BuildMaterial } from '@astrale-os/sdk/deployment/build';
2
+ export interface ExecutionCodegenOptions {
3
+ readonly origin: string;
4
+ readonly runtimeSpecifier: string;
5
+ readonly material: BuildMaterial;
6
+ readonly providerAssignedWorker?: string;
7
+ readonly router?: {
8
+ readonly binding: string;
9
+ readonly hostSuffix: string;
10
+ readonly minLabels: number;
11
+ };
12
+ }
13
+ export declare function generateExecutionEntry(options: ExecutionCodegenOptions): string;
14
+ //# sourceMappingURL=execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../../src/build/codegen/execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAA;AAErE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAA;IAChC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAA;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;QACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;QAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;KAC3B,CAAA;CACF;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,CA0C/E"}
@@ -1,11 +1,10 @@
1
- /** Codegen for the Cloudflare module entry owned by the adapter. */
2
- export function generateWorkerEntry(options) {
1
+ export function generateExecutionEntry(options) {
3
2
  const router = options.router;
4
3
  const routerPredicate = router === undefined
5
4
  ? ''
6
5
  : `
7
6
  function isInstanceHost(host: string): boolean {
8
- return host.endsWith('${router.hostSuffix}') && host.split('.').length >= ${router.minLabels}
7
+ return host.endsWith(${JSON.stringify(router.hostSuffix)}) && host.split('.').length >= ${router.minLabels}
9
8
  }
10
9
  `;
11
10
  const routeSubrequest = router === undefined
@@ -18,23 +17,25 @@ function isInstanceHost(host: string): boolean {
18
17
  return null
19
18
  },`;
20
19
  return `// AUTO-GENERATED by @astrale-os/adapter-cloudflare — do not edit.
21
- // Regenerated by every Astrale Domain build, dev, and deploy operation.
22
20
  // Domain origin: ${options.origin}
21
+ import type { BuildMaterial } from '@astrale-os/sdk/deployment/build'
23
22
  import type { CloudflareAdapterBindings } from '@astrale-os/adapter-cloudflare/worker'
24
- import type { ApplicationEnvironment } from '../implementation.js'
25
23
 
26
24
  import { cloudflareWorkerEntry } from '@astrale-os/adapter-cloudflare/worker'
27
- import { domain } from '../implementation.js'
25
+ import runtime from ${JSON.stringify(options.runtimeSpecifier)}
28
26
  import { PRIVATE_JWK } from './identity.js'
29
27
 
30
- type WorkerEnv = CloudflareEnv & ApplicationEnvironment & CloudflareAdapterBindings
28
+ type WorkerEnv = CloudflareEnv & CloudflareAdapterBindings
29
+ const MATERIAL = ${JSON.stringify(options.material)} as const satisfies BuildMaterial
31
30
  ${routerPredicate}
32
31
  export default cloudflareWorkerEntry<WorkerEnv>()({
33
- definition: domain,
32
+ runtime,
33
+ material: MATERIAL,
34
34
  privateKey: PRIVATE_JWK,
35
- resolveUrl: (env, requestOrigin) => env.WORKER_URL ?? requestOrigin,
35
+ resolveUrl: (env, requestOrigin) => env.WORKER_URL ?? env.IDENTITY_ISS ?? requestOrigin,
36
+ ${options.providerAssignedWorker === undefined ? '' : `providerAssignedWorker: ${JSON.stringify(options.providerAssignedWorker)},`}
36
37
  selfBinding: (env) => env.SELF,${routeSubrequest}
37
38
  })
38
39
  `;
39
40
  }
40
- //# sourceMappingURL=worker.js.map
41
+ //# sourceMappingURL=execution.js.map