@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 +2 -2
- package/dist/astrale.d.ts.map +1 -1
- package/dist/astrale.js +28 -6
- package/dist/astrale.js.map +1 -1
- package/dist/managed-service.d.ts +37 -0
- package/dist/managed-service.d.ts.map +1 -0
- package/dist/managed-service.js +130 -0
- package/dist/managed-service.js.map +1 -0
- package/package.json +3 -3
- package/src/astrale.ts +52 -14
- package/src/managed-service.ts +183 -0
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
|
-
*
|
|
22
|
-
* without it
|
|
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.
|
package/dist/astrale.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
*
|
|
22
|
-
* without it
|
|
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
|
-
|
|
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) => {
|
package/dist/astrale.js.map
CHANGED
|
@@ -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.
|
|
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/
|
|
31
|
-
"@astrale-os/
|
|
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
|
-
*
|
|
22
|
-
* without it
|
|
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
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
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
|
-
|
|
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))
|