@astrale-os/adapter-astrale 0.2.0 → 0.2.1

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/dist/astrale.d.ts CHANGED
@@ -18,8 +18,8 @@
18
18
  * account, no wrangler auth — the only credential is the author's Astrale
19
19
  * identity, supplied by the `astrale` CLI session this adapter shells out to.
20
20
  *
21
- * REQUIRES the `services` domain installed on the target instance. An instance
22
- * without it can't host managed deploys — `deploy` fails loud with that hint.
21
+ * Ensures the `services` domain is installed on the target instance before the
22
+ * build/deploy work starts; without it the instance cannot host managed deploys.
23
23
  *
24
24
  * `watch` is identical to the Cloudflare adapter's local dev (wrangler dev on
25
25
  * localhost) — managed deploys change WHERE the worker runs, not how you iterate.
@@ -1 +1 @@
1
- {"version":3,"file":"astrale.d.ts","sourceRoot":"","sources":["../src/astrale.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAmBpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAK7C,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,aAAa,CAAC,aAAa,CAAC,CA8LzF;AAgED,gGAAgG;AAChG,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;;oFAGoF;AACpF,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKrD"}
1
+ {"version":3,"file":"astrale.d.ts","sourceRoot":"","sources":["../src/astrale.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAmBpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAY7C,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,aAAa,CAAC,aAAa,CAAC,CAyNzF;AAgED,gGAAgG;AAChG,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;;oFAGoF;AACpF,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKrD"}
package/dist/astrale.js CHANGED
@@ -18,8 +18,8 @@
18
18
  * account, no wrangler auth — the only credential is the author's Astrale
19
19
  * identity, supplied by the `astrale` CLI session this adapter shells out to.
20
20
  *
21
- * REQUIRES the `services` domain installed on the target instance. An instance
22
- * without it can't host managed deploys — `deploy` fails loud with that hint.
21
+ * Ensures the `services` domain is installed on the target instance before the
22
+ * build/deploy work starts; without it the instance cannot host managed deploys.
23
23
  *
24
24
  * `watch` is identical to the Cloudflare adapter's local dev (wrangler dev on
25
25
  * localhost) — managed deploys change WHERE the worker runs, not how you iterate.
@@ -33,6 +33,7 @@ import { loadDotenvFile } from '@astrale-os/sdk/cli';
33
33
  import { spawn } from 'node:child_process';
34
34
  import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
35
35
  import { join, relative } from 'node:path';
36
+ import { ensureServicesDomainInstalled, readExpectedSchemaHash, runManagedInstallWithRetry, waitForManagedServiceReady, } from './managed-service';
36
37
  const DEFAULT_PORT = 8787;
37
38
  const DEFAULT_SERVICES_ORIGIN = 'services.astrale.ai';
38
39
  export function astrale(envs) {
@@ -78,6 +79,14 @@ export function astrale(envs) {
78
79
  }
79
80
  const servicesOrigin = params.servicesOrigin ?? DEFAULT_SERVICES_ORIGIN;
80
81
  const name = params.name ?? serviceNameFor(ctx.domain.origin);
82
+ const runProjectAstrale = (args) => runAstrale(astraleBin(ctx.projectDir), ctx.projectDir, args);
83
+ await ensureServicesDomainInstalled({
84
+ runAstrale: runProjectAstrale,
85
+ instance,
86
+ servicesOrigin,
87
+ identityArgs: identityArgs(params),
88
+ log,
89
+ });
81
90
  // Build + pack the client SPA: the services worker serves it under /ui.
82
91
  let assetFiles = [];
83
92
  if (ctx.clientDir) {
@@ -171,13 +180,20 @@ export function astrale(envs) {
171
180
  });
172
181
  }
173
182
  }
183
+ // Cloudflare's dispatch namespace can acknowledge a script before the
184
+ // public tenant host is consistently serving the new worker. Installing
185
+ // before `/meta` + JWKS are reachable turns that propagation window into a
186
+ // postInstall fetch abort and leaves partial graph state behind.
187
+ const expectedSchemaHash = readExpectedSchemaHash(ctx.specPath);
188
+ log(`waiting for managed service "${ctx.domain.origin}" at ${url}…`);
189
+ await waitForManagedServiceReady(url, ctx.domain.origin, { log, expectedSchemaHash });
174
190
  // 4. Install the domain on the instance from the hosted URL. The child
175
191
  // kernel fetches the signed bundle, verifies it, and runs its postInstall.
176
192
  // A managed deploy ALWAYS aliases identity — the domain's origin
177
193
  // (`ctx.domain.origin`) is served from the platform host (`…svc.<routing>`)
178
194
  // it never matches — so consent to the override is implicit and required.
179
195
  log(`installing "${ctx.domain.origin}" on "${instance}" from ${url}…`);
180
- await runAstrale(astraleBin(ctx.projectDir), ctx.projectDir, [
196
+ await runManagedInstallWithRetry(() => runAstrale(astraleBin(ctx.projectDir), ctx.projectDir, [
181
197
  'instance',
182
198
  'install',
183
199
  url,
@@ -187,7 +203,11 @@ export function astrale(envs) {
187
203
  '--json',
188
204
  '--timeout',
189
205
  '240000',
190
- ]);
206
+ ...identityArgs(params),
207
+ ]), {
208
+ log,
209
+ beforeRetry: () => waitForManagedServiceReady(url, ctx.domain.origin, { log, expectedSchemaHash }),
210
+ });
191
211
  return {
192
212
  url,
193
213
  nextSteps: ` installed on "${instance}" — call it:\n` +
@@ -284,8 +304,7 @@ async function astraleCall(projectDir, params, call) {
284
304
  // default. Target the instance (`-i`), not admin — the services domain lives
285
305
  // on the instance.
286
306
  const args = ['call', call.path, '-i', call.instance, '--json', '--timeout', '240000'];
287
- if (params.identity)
288
- args.push('--as', params.identity);
307
+ args.push(...identityArgs(params));
289
308
  const payload = JSON.stringify(call.data);
290
309
  if (!call.viaStdin)
291
310
  args.push('--data', payload);
@@ -297,6 +316,9 @@ async function astraleCall(projectDir, params, call) {
297
316
  throw new Error(`astrale call ${call.path}: could not parse CLI output: ${out.slice(0, 300)}`);
298
317
  }
299
318
  }
319
+ function identityArgs(params) {
320
+ return params.identity ? ['--as', params.identity] : [];
321
+ }
300
322
  /** Spawn the astrale CLI, feed optional stdin, return stdout+stderr. Throws on non-zero exit. */
301
323
  async function runAstrale(bin, cwd, args, stdin) {
302
324
  const { code, out } = await new Promise((resolve, reject) => {
@@ -1 +1 @@
1
- {"version":3,"file":"astrale.js","sourceRoot":"","sources":["../src/astrale.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"astrale.js","sourceRoot":"","sources":["../src/astrale.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ type ManagedMeta = {
2
+ domainName?: string;
3
+ iss?: string;
4
+ schemaHash?: string;
5
+ };
6
+ type JsonFetch = typeof fetch;
7
+ type SleepFn = (ms: number) => Promise<void>;
8
+ type RunAstrale = (args: string[]) => Promise<string>;
9
+ type ManagedReadyOptions = {
10
+ timeoutMs?: number;
11
+ retryMs?: number;
12
+ expectedSchemaHash?: string;
13
+ fetch?: JsonFetch;
14
+ sleep?: SleepFn;
15
+ log?: (line: string) => void;
16
+ };
17
+ type ManagedInstallRetryOptions = {
18
+ attempts?: number;
19
+ retryMs?: number;
20
+ sleep?: SleepFn;
21
+ log?: (line: string) => void;
22
+ beforeRetry?: () => Promise<unknown>;
23
+ };
24
+ type EnsureServicesDomainOptions = {
25
+ runAstrale: RunAstrale;
26
+ instance: string;
27
+ servicesOrigin: string;
28
+ identityArgs?: string[];
29
+ log: (line: string) => void;
30
+ };
31
+ export declare function waitForManagedServiceReady(url: string, expectedDomain: string, opts?: ManagedReadyOptions): Promise<ManagedMeta>;
32
+ export declare function runManagedInstallWithRetry<T>(run: () => Promise<T>, opts?: ManagedInstallRetryOptions): Promise<T>;
33
+ export declare function isTransientManagedInstallError(error: unknown): boolean;
34
+ export declare function ensureServicesDomainInstalled(opts: EnsureServicesDomainOptions): Promise<void>;
35
+ export declare function readExpectedSchemaHash(specPath: string): string | undefined;
36
+ export {};
37
+ //# sourceMappingURL=managed-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-service.d.ts","sourceRoot":"","sources":["../src/managed-service.ts"],"names":[],"mappings":"AAOA,KAAK,WAAW,GAAG;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAC7E,KAAK,SAAS,GAAG,OAAO,KAAK,CAAA;AAC7B,KAAK,OAAO,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAC5C,KAAK,UAAU,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;AAErD,KAAK,mBAAmB,GAAG;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAC7B,CAAA;AAED,KAAK,0BAA0B,GAAG;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;CACrC,CAAA;AAED,KAAK,2BAA2B,GAAG;IACjC,UAAU,EAAE,UAAU,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAC5B,CAAA;AAED,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,MAAM,EACtB,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,WAAW,CAAC,CA4CtB;AAED,wBAAsB,0BAA0B,CAAC,CAAC,EAChD,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACrB,IAAI,GAAE,0BAA+B,GACpC,OAAO,CAAC,CAAC,CAAC,CAsBZ;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAItE;AAED,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,IAAI,CAAC,CAmCf;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAO3E"}
@@ -0,0 +1,130 @@
1
+ import { readFileSync } from 'node:fs';
2
+ const MANAGED_READY_TIMEOUT_MS = 90_000;
3
+ const MANAGED_READY_FETCH_TIMEOUT_MS = 5_000;
4
+ const MANAGED_READY_RETRY_MS = 1_000;
5
+ const MANAGED_INSTALL_ATTEMPTS = 3;
6
+ export async function waitForManagedServiceReady(url, expectedDomain, opts = {}) {
7
+ const base = normalizeBaseUrl(url);
8
+ const fetcher = opts.fetch ?? fetch;
9
+ const sleepFn = opts.sleep ?? sleep;
10
+ const retryMs = opts.retryMs ?? MANAGED_READY_RETRY_MS;
11
+ const timeoutMs = opts.timeoutMs ?? MANAGED_READY_TIMEOUT_MS;
12
+ const deadline = Date.now() + timeoutMs;
13
+ let lastReason = '';
14
+ while (true) {
15
+ let reason = 'not checked';
16
+ try {
17
+ const meta = await fetchJson(fetcher, `${base}/meta`);
18
+ const metaIssuer = meta.iss ? normalizeBaseUrl(meta.iss) : base;
19
+ if (meta.domainName !== expectedDomain) {
20
+ reason = `/meta domainName=${JSON.stringify(meta.domainName)} expected=${expectedDomain}`;
21
+ }
22
+ else if (opts.expectedSchemaHash && meta.schemaHash !== opts.expectedSchemaHash) {
23
+ reason = `/meta schemaHash=${JSON.stringify(meta.schemaHash)} expected=${opts.expectedSchemaHash}`;
24
+ }
25
+ else if (metaIssuer !== base) {
26
+ reason = `/meta iss=${meta.iss} expected=${base}`;
27
+ }
28
+ else {
29
+ const jwks = await fetchJson(fetcher, `${metaIssuer}/.well-known/jwks.json`);
30
+ const keys = Array.isArray(jwks.keys) ? jwks.keys : [];
31
+ if (keys.length)
32
+ return meta;
33
+ reason = 'JWKS returned no keys';
34
+ }
35
+ }
36
+ catch (error) {
37
+ reason = errorMessage(error);
38
+ }
39
+ if (reason !== lastReason) {
40
+ opts.log?.(` service not ready yet: ${reason}`);
41
+ lastReason = reason;
42
+ }
43
+ const remaining = deadline - Date.now();
44
+ if (remaining <= 0) {
45
+ throw new Error(`managed service ${base} was not ready within ${timeoutMs}ms: ${lastReason}`);
46
+ }
47
+ await sleepFn(Math.min(retryMs, remaining));
48
+ }
49
+ }
50
+ export async function runManagedInstallWithRetry(run, opts = {}) {
51
+ const attempts = opts.attempts ?? MANAGED_INSTALL_ATTEMPTS;
52
+ const retryMs = opts.retryMs ?? MANAGED_READY_RETRY_MS;
53
+ const sleepFn = opts.sleep ?? sleep;
54
+ let lastError;
55
+ for (let attempt = 1; attempt <= attempts; attempt++) {
56
+ try {
57
+ return await run();
58
+ }
59
+ catch (error) {
60
+ lastError = error;
61
+ if (attempt >= attempts || !isTransientManagedInstallError(error))
62
+ throw error;
63
+ opts.log?.(` install attempt ${attempt}/${attempts} hit a transient failure: ` +
64
+ `${errorMessage(error).slice(0, 220)}; retrying…`);
65
+ await opts.beforeRetry?.();
66
+ await sleepFn(retryMs);
67
+ }
68
+ }
69
+ throw lastError instanceof Error ? lastError : new Error(String(lastError));
70
+ }
71
+ export function isTransientManagedInstallError(error) {
72
+ return /network fetch failed|operation was aborted|fetch failed|und_err|econnreset|etimedout|timeout|503|504|522|524|worker startup timed out/i.test(errorMessage(error));
73
+ }
74
+ export async function ensureServicesDomainInstalled(opts) {
75
+ const identityArgs = opts.identityArgs ?? [];
76
+ const target = `/${opts.servicesOrigin}`;
77
+ const probeArgs = [
78
+ 'ls',
79
+ target,
80
+ '-i',
81
+ opts.instance,
82
+ '--json',
83
+ '--timeout',
84
+ '60000',
85
+ ...identityArgs,
86
+ ];
87
+ try {
88
+ await opts.runAstrale(probeArgs);
89
+ return;
90
+ }
91
+ catch (error) {
92
+ opts.log(`services domain "${opts.servicesOrigin}" is not installed on "${opts.instance}" yet; installing it…`);
93
+ opts.log(` probe failed: ${errorMessage(error).slice(0, 220)}`);
94
+ }
95
+ await opts.runAstrale([
96
+ 'domain',
97
+ 'install',
98
+ opts.servicesOrigin,
99
+ '-i',
100
+ opts.instance,
101
+ '--json',
102
+ '--timeout',
103
+ '240000',
104
+ ...identityArgs,
105
+ ]);
106
+ await opts.runAstrale(probeArgs);
107
+ }
108
+ export function readExpectedSchemaHash(specPath) {
109
+ try {
110
+ const spec = JSON.parse(readFileSync(specPath, 'utf8'));
111
+ return typeof spec.schemaHash === 'string' ? spec.schemaHash : undefined;
112
+ }
113
+ catch {
114
+ return undefined;
115
+ }
116
+ }
117
+ async function fetchJson(fetcher, url) {
118
+ const res = await fetcher(url, { signal: AbortSignal.timeout(MANAGED_READY_FETCH_TIMEOUT_MS) });
119
+ if (!res.ok)
120
+ throw new Error(`GET ${url} -> ${res.status}`);
121
+ return (await res.json());
122
+ }
123
+ function normalizeBaseUrl(url) {
124
+ return url.replace(/\/+$/, '');
125
+ }
126
+ function errorMessage(error) {
127
+ return error instanceof Error ? error.message : String(error);
128
+ }
129
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
130
+ //# sourceMappingURL=managed-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-service.js","sourceRoot":"","sources":["../src/managed-service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astrale-os/adapter-astrale",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Deploy an Astrale domain as a managed service through the Astrale platform",
5
5
  "keywords": [
6
6
  "adapter",
@@ -27,8 +27,8 @@
27
27
  "./package.json": "./package.json"
28
28
  },
29
29
  "dependencies": {
30
- "@astrale-os/sdk": "^0.1.7",
31
- "@astrale-os/adapter-cloudflare": "^0.2.0"
30
+ "@astrale-os/adapter-cloudflare": "^0.2.1",
31
+ "@astrale-os/sdk": "^0.1.9"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@astrale-os/ox": ">=0.1.0 <1.0.0",
package/src/astrale.ts CHANGED
@@ -18,8 +18,8 @@
18
18
  * account, no wrangler auth — the only credential is the author's Astrale
19
19
  * identity, supplied by the `astrale` CLI session this adapter shells out to.
20
20
  *
21
- * REQUIRES the `services` domain installed on the target instance. An instance
22
- * without it can't host managed deploys — `deploy` fails loud with that hint.
21
+ * Ensures the `services` domain is installed on the target instance before the
22
+ * build/deploy work starts; without it the instance cannot host managed deploys.
23
23
  *
24
24
  * `watch` is identical to the Cloudflare adapter's local dev (wrangler dev on
25
25
  * localhost) — managed deploys change WHERE the worker runs, not how you iterate.
@@ -46,6 +46,13 @@ import { join, relative } from 'node:path'
46
46
 
47
47
  import type { AstraleParams } from './params'
48
48
 
49
+ import {
50
+ ensureServicesDomainInstalled,
51
+ readExpectedSchemaHash,
52
+ runManagedInstallWithRetry,
53
+ waitForManagedServiceReady,
54
+ } from './managed-service'
55
+
49
56
  const DEFAULT_PORT = 8787
50
57
  const DEFAULT_SERVICES_ORIGIN = 'services.astrale.ai'
51
58
 
@@ -106,6 +113,16 @@ export function astrale(envs: Record<string, AstraleParams>): DomainAdapter<Astr
106
113
  const servicesOrigin = params.servicesOrigin ?? DEFAULT_SERVICES_ORIGIN
107
114
  const name = params.name ?? serviceNameFor(ctx.domain.origin)
108
115
 
116
+ const runProjectAstrale = (args: string[]) =>
117
+ runAstrale(astraleBin(ctx.projectDir), ctx.projectDir, args)
118
+ await ensureServicesDomainInstalled({
119
+ runAstrale: runProjectAstrale,
120
+ instance,
121
+ servicesOrigin,
122
+ identityArgs: identityArgs(params),
123
+ log,
124
+ })
125
+
109
126
  // Build + pack the client SPA: the services worker serves it under /ui.
110
127
  let assetFiles: AssetFile[] = []
111
128
  if (ctx.clientDir) {
@@ -209,23 +226,40 @@ export function astrale(envs: Record<string, AstraleParams>): DomainAdapter<Astr
209
226
  }
210
227
  }
211
228
 
229
+ // Cloudflare's dispatch namespace can acknowledge a script before the
230
+ // public tenant host is consistently serving the new worker. Installing
231
+ // before `/meta` + JWKS are reachable turns that propagation window into a
232
+ // postInstall fetch abort and leaves partial graph state behind.
233
+ const expectedSchemaHash = readExpectedSchemaHash(ctx.specPath)
234
+ log(`waiting for managed service "${ctx.domain.origin}" at ${url}…`)
235
+ await waitForManagedServiceReady(url, ctx.domain.origin, { log, expectedSchemaHash })
236
+
212
237
  // 4. Install the domain on the instance from the hosted URL. The child
213
238
  // kernel fetches the signed bundle, verifies it, and runs its postInstall.
214
239
  // A managed deploy ALWAYS aliases identity — the domain's origin
215
240
  // (`ctx.domain.origin`) is served from the platform host (`…svc.<routing>`)
216
241
  // it never matches — so consent to the override is implicit and required.
217
242
  log(`installing "${ctx.domain.origin}" on "${instance}" from ${url}…`)
218
- await runAstrale(astraleBin(ctx.projectDir), ctx.projectDir, [
219
- 'instance',
220
- 'install',
221
- url,
222
- '-i',
223
- instance,
224
- '--allow-identity-override',
225
- '--json',
226
- '--timeout',
227
- '240000',
228
- ])
243
+ await runManagedInstallWithRetry(
244
+ () =>
245
+ runAstrale(astraleBin(ctx.projectDir), ctx.projectDir, [
246
+ 'instance',
247
+ 'install',
248
+ url,
249
+ '-i',
250
+ instance,
251
+ '--allow-identity-override',
252
+ '--json',
253
+ '--timeout',
254
+ '240000',
255
+ ...identityArgs(params),
256
+ ]),
257
+ {
258
+ log,
259
+ beforeRetry: () =>
260
+ waitForManagedServiceReady(url, ctx.domain.origin, { log, expectedSchemaHash }),
261
+ },
262
+ )
229
263
 
230
264
  return {
231
265
  url,
@@ -335,7 +369,7 @@ async function astraleCall(
335
369
  // default. Target the instance (`-i`), not admin — the services domain lives
336
370
  // on the instance.
337
371
  const args = ['call', call.path, '-i', call.instance, '--json', '--timeout', '240000']
338
- if (params.identity) args.push('--as', params.identity)
372
+ args.push(...identityArgs(params))
339
373
  const payload = JSON.stringify(call.data)
340
374
  if (!call.viaStdin) args.push('--data', payload)
341
375
 
@@ -352,6 +386,10 @@ async function astraleCall(
352
386
  }
353
387
  }
354
388
 
389
+ function identityArgs(params: AstraleParams): string[] {
390
+ return params.identity ? ['--as', params.identity] : []
391
+ }
392
+
355
393
  /** Spawn the astrale CLI, feed optional stdin, return stdout+stderr. Throws on non-zero exit. */
356
394
  async function runAstrale(
357
395
  bin: string,
@@ -0,0 +1,183 @@
1
+ import { readFileSync } from 'node:fs'
2
+
3
+ const MANAGED_READY_TIMEOUT_MS = 90_000
4
+ const MANAGED_READY_FETCH_TIMEOUT_MS = 5_000
5
+ const MANAGED_READY_RETRY_MS = 1_000
6
+ const MANAGED_INSTALL_ATTEMPTS = 3
7
+
8
+ type ManagedMeta = { domainName?: string; iss?: string; schemaHash?: string }
9
+ type JsonFetch = typeof fetch
10
+ type SleepFn = (ms: number) => Promise<void>
11
+ type RunAstrale = (args: string[]) => Promise<string>
12
+
13
+ type ManagedReadyOptions = {
14
+ timeoutMs?: number
15
+ retryMs?: number
16
+ expectedSchemaHash?: string
17
+ fetch?: JsonFetch
18
+ sleep?: SleepFn
19
+ log?: (line: string) => void
20
+ }
21
+
22
+ type ManagedInstallRetryOptions = {
23
+ attempts?: number
24
+ retryMs?: number
25
+ sleep?: SleepFn
26
+ log?: (line: string) => void
27
+ beforeRetry?: () => Promise<unknown>
28
+ }
29
+
30
+ type EnsureServicesDomainOptions = {
31
+ runAstrale: RunAstrale
32
+ instance: string
33
+ servicesOrigin: string
34
+ identityArgs?: string[]
35
+ log: (line: string) => void
36
+ }
37
+
38
+ export async function waitForManagedServiceReady(
39
+ url: string,
40
+ expectedDomain: string,
41
+ opts: ManagedReadyOptions = {},
42
+ ): Promise<ManagedMeta> {
43
+ const base = normalizeBaseUrl(url)
44
+ const fetcher = opts.fetch ?? fetch
45
+ const sleepFn = opts.sleep ?? sleep
46
+ const retryMs = opts.retryMs ?? MANAGED_READY_RETRY_MS
47
+ const timeoutMs = opts.timeoutMs ?? MANAGED_READY_TIMEOUT_MS
48
+ const deadline = Date.now() + timeoutMs
49
+ let lastReason = ''
50
+
51
+ while (true) {
52
+ let reason = 'not checked'
53
+ try {
54
+ const meta = await fetchJson<ManagedMeta>(fetcher, `${base}/meta`)
55
+ const metaIssuer = meta.iss ? normalizeBaseUrl(meta.iss) : base
56
+ if (meta.domainName !== expectedDomain) {
57
+ reason = `/meta domainName=${JSON.stringify(meta.domainName)} expected=${expectedDomain}`
58
+ } else if (opts.expectedSchemaHash && meta.schemaHash !== opts.expectedSchemaHash) {
59
+ reason = `/meta schemaHash=${JSON.stringify(meta.schemaHash)} expected=${opts.expectedSchemaHash}`
60
+ } else if (metaIssuer !== base) {
61
+ reason = `/meta iss=${meta.iss} expected=${base}`
62
+ } else {
63
+ const jwks = await fetchJson<{ keys?: unknown[] }>(
64
+ fetcher,
65
+ `${metaIssuer}/.well-known/jwks.json`,
66
+ )
67
+ const keys = Array.isArray(jwks.keys) ? jwks.keys : []
68
+ if (keys.length) return meta
69
+ reason = 'JWKS returned no keys'
70
+ }
71
+ } catch (error) {
72
+ reason = errorMessage(error)
73
+ }
74
+
75
+ if (reason !== lastReason) {
76
+ opts.log?.(` service not ready yet: ${reason}`)
77
+ lastReason = reason
78
+ }
79
+
80
+ const remaining = deadline - Date.now()
81
+ if (remaining <= 0) {
82
+ throw new Error(`managed service ${base} was not ready within ${timeoutMs}ms: ${lastReason}`)
83
+ }
84
+ await sleepFn(Math.min(retryMs, remaining))
85
+ }
86
+ }
87
+
88
+ export async function runManagedInstallWithRetry<T>(
89
+ run: () => Promise<T>,
90
+ opts: ManagedInstallRetryOptions = {},
91
+ ): Promise<T> {
92
+ const attempts = opts.attempts ?? MANAGED_INSTALL_ATTEMPTS
93
+ const retryMs = opts.retryMs ?? MANAGED_READY_RETRY_MS
94
+ const sleepFn = opts.sleep ?? sleep
95
+ let lastError: unknown
96
+
97
+ for (let attempt = 1; attempt <= attempts; attempt++) {
98
+ try {
99
+ return await run()
100
+ } catch (error) {
101
+ lastError = error
102
+ if (attempt >= attempts || !isTransientManagedInstallError(error)) throw error
103
+ opts.log?.(
104
+ ` install attempt ${attempt}/${attempts} hit a transient failure: ` +
105
+ `${errorMessage(error).slice(0, 220)}; retrying…`,
106
+ )
107
+ await opts.beforeRetry?.()
108
+ await sleepFn(retryMs)
109
+ }
110
+ }
111
+
112
+ throw lastError instanceof Error ? lastError : new Error(String(lastError))
113
+ }
114
+
115
+ export function isTransientManagedInstallError(error: unknown): boolean {
116
+ return /network fetch failed|operation was aborted|fetch failed|und_err|econnreset|etimedout|timeout|503|504|522|524|worker startup timed out/i.test(
117
+ errorMessage(error),
118
+ )
119
+ }
120
+
121
+ export async function ensureServicesDomainInstalled(
122
+ opts: EnsureServicesDomainOptions,
123
+ ): Promise<void> {
124
+ const identityArgs = opts.identityArgs ?? []
125
+ const target = `/${opts.servicesOrigin}`
126
+ const probeArgs = [
127
+ 'ls',
128
+ target,
129
+ '-i',
130
+ opts.instance,
131
+ '--json',
132
+ '--timeout',
133
+ '60000',
134
+ ...identityArgs,
135
+ ]
136
+ try {
137
+ await opts.runAstrale(probeArgs)
138
+ return
139
+ } catch (error) {
140
+ opts.log(
141
+ `services domain "${opts.servicesOrigin}" is not installed on "${opts.instance}" yet; installing it…`,
142
+ )
143
+ opts.log(` probe failed: ${errorMessage(error).slice(0, 220)}`)
144
+ }
145
+
146
+ await opts.runAstrale([
147
+ 'domain',
148
+ 'install',
149
+ opts.servicesOrigin,
150
+ '-i',
151
+ opts.instance,
152
+ '--json',
153
+ '--timeout',
154
+ '240000',
155
+ ...identityArgs,
156
+ ])
157
+ await opts.runAstrale(probeArgs)
158
+ }
159
+
160
+ export function readExpectedSchemaHash(specPath: string): string | undefined {
161
+ try {
162
+ const spec = JSON.parse(readFileSync(specPath, 'utf8')) as { schemaHash?: unknown }
163
+ return typeof spec.schemaHash === 'string' ? spec.schemaHash : undefined
164
+ } catch {
165
+ return undefined
166
+ }
167
+ }
168
+
169
+ async function fetchJson<T>(fetcher: JsonFetch, url: string): Promise<T> {
170
+ const res = await fetcher(url, { signal: AbortSignal.timeout(MANAGED_READY_FETCH_TIMEOUT_MS) })
171
+ if (!res.ok) throw new Error(`GET ${url} -> ${res.status}`)
172
+ return (await res.json()) as T
173
+ }
174
+
175
+ function normalizeBaseUrl(url: string): string {
176
+ return url.replace(/\/+$/, '')
177
+ }
178
+
179
+ function errorMessage(error: unknown): string {
180
+ return error instanceof Error ? error.message : String(error)
181
+ }
182
+
183
+ const sleep: SleepFn = (ms) => new Promise((resolve) => setTimeout(resolve, ms))