@astrale-os/sdk 0.1.7 → 0.1.8

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/cli/run.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * The `astrale-domain` CLI — dev | build | deploy.
2
+ * The `astrale-domain` CLI — dev | build | deploy | publish.
3
3
  *
4
4
  * Thin by design: it reads `astrale.config.ts`, resolves `envs[<env>] → params`
5
5
  * via the adapter, loads the env's secrets file, then drives `adapter.watch`
@@ -18,30 +18,35 @@
18
18
  * astrale-domain prod # = deploy prod
19
19
  * astrale-domain deploy <env> # any env key
20
20
  * astrale-domain build # rebuild spec only (placeholder URL)
21
- * astrale-domain publish [env] # = deploy [prod] then register the URL
21
+ * astrale-domain publish [env] # register the deployed URL in the admin catalog (NO deploy)
22
22
  *
23
- * `publish` (and the `--publish` tail-flag on deploy) deploys, then registers
24
- * the resulting URL in the admin catalog by SHELLING OUT to the operator CLI
25
- * (`astrale domain publish --origin --name --public-url`). Auth lives entirely
26
- * in that CLI this build tool never touches credentials; it just hands off the
27
- * fresh URL it alone knows. Requires `astrale` on PATH (the same CLI the deploy
28
- * footer already points you at for `domain install`).
23
+ * `publish` registers a domain's ALREADY-deployed URL in the admin catalog by
24
+ * SHELLING OUT to the operator CLI (`astrale domain publish --origin --name
25
+ * --public-url`); it does NOT deploy — run `prod` / `deploy <env>` first, or use
26
+ * `deploy --publish` to deploy AND register in one step. Standalone publish
27
+ * defaults the registered address to `https://<origin>` (what every fleet domain
28
+ * serves at); pass `--public-url` for workers.dev / split-host deploys. Auth
29
+ * lives entirely in the operator CLI — this build tool never touches
30
+ * credentials. Requires `astrale` on PATH (the same CLI the deploy footer
31
+ * already points you at for `domain install`).
29
32
  */
30
33
  import type { DeployConfig } from '../config/deploy';
31
34
  type ParsedArgs = {
32
- command: 'dev' | 'build' | 'deploy';
35
+ command: 'dev' | 'build' | 'deploy' | 'publish';
33
36
  env: string;
34
37
  watch: boolean;
35
38
  /** `--port <n>` (dev only) — overrides the env's local dev port. */
36
39
  port?: number;
37
40
  /** `--host <url>` (dev only) — public URL of a tunnel/proxy front: binds 0.0.0.0 + pins WORKER_URL. */
38
41
  host?: string;
39
- /** Register the deployed URL in the admin catalog (the `publish` command / `--publish` flag). */
42
+ /** `--publish` tail-flag on deploy/prod: ALSO register the freshly-deployed URL (deploy + register). */
40
43
  publish?: boolean;
41
- /** `--name <slug>` — registry name to publish under (default: package.json `name`). */
44
+ /** `--name <slug>` — registry name to publish under (default: the origin's first label, e.g. `ai-gateway`). */
42
45
  name?: string;
43
46
  /** `--install-by-default` — mark the published domain for install on every new instance. */
44
47
  installByDefault?: boolean;
48
+ /** `--public-url <url>` — (publish only) the address the catalog points at (default: `https://<origin>`). */
49
+ publicUrl?: string;
45
50
  };
46
51
  export declare function run(argv: readonly string[]): Promise<number>;
47
52
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAUH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAOpD,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAA;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,OAAO,CAAA;IACd,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uGAAuG;IACvG,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,iGAAiG;IACjG,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,uFAAuF;IACvF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,4FAA4F;IAC5F,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,wBAAsB,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAyIlE;AAqHD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,YAAY,CAAA;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB,GAAG,MAAM,IAAI,CAiFb;AAwGD,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CA6E7D"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAUH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAOpD,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAA;IAC/C,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,OAAO,CAAA;IACd,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uGAAuG;IACvG,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,wGAAwG;IACxG,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,+GAA+G;IAC/G,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,4FAA4F;IAC5F,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,6GAA6G;IAC7G,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAsB,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA6JlE;AAqHD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,YAAY,CAAA;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB,GAAG,MAAM,IAAI,CAiFb;AAwGD,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAsF7D"}
package/dist/cli/run.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * The `astrale-domain` CLI — dev | build | deploy.
2
+ * The `astrale-domain` CLI — dev | build | deploy | publish.
3
3
  *
4
4
  * Thin by design: it reads `astrale.config.ts`, resolves `envs[<env>] → params`
5
5
  * via the adapter, loads the env's secrets file, then drives `adapter.watch`
@@ -18,14 +18,17 @@
18
18
  * astrale-domain prod # = deploy prod
19
19
  * astrale-domain deploy <env> # any env key
20
20
  * astrale-domain build # rebuild spec only (placeholder URL)
21
- * astrale-domain publish [env] # = deploy [prod] then register the URL
21
+ * astrale-domain publish [env] # register the deployed URL in the admin catalog (NO deploy)
22
22
  *
23
- * `publish` (and the `--publish` tail-flag on deploy) deploys, then registers
24
- * the resulting URL in the admin catalog by SHELLING OUT to the operator CLI
25
- * (`astrale domain publish --origin --name --public-url`). Auth lives entirely
26
- * in that CLI this build tool never touches credentials; it just hands off the
27
- * fresh URL it alone knows. Requires `astrale` on PATH (the same CLI the deploy
28
- * footer already points you at for `domain install`).
23
+ * `publish` registers a domain's ALREADY-deployed URL in the admin catalog by
24
+ * SHELLING OUT to the operator CLI (`astrale domain publish --origin --name
25
+ * --public-url`); it does NOT deploy — run `prod` / `deploy <env>` first, or use
26
+ * `deploy --publish` to deploy AND register in one step. Standalone publish
27
+ * defaults the registered address to `https://<origin>` (what every fleet domain
28
+ * serves at); pass `--public-url` for workers.dev / split-host deploys. Auth
29
+ * lives entirely in the operator CLI — this build tool never touches
30
+ * credentials. Requires `astrale` on PATH (the same CLI the deploy footer
31
+ * already points you at for `domain install`).
29
32
  */
30
33
  import { spawn } from 'node:child_process';
31
34
  import { existsSync, readFileSync, watch as watchFs } from 'node:fs';
@@ -100,6 +103,24 @@ export async function run(argv) {
100
103
  info(`note: built at placeholder ${placeholderUrl} — its schemaHash differs from a deployed worker.`);
101
104
  return 0;
102
105
  }
106
+ if (parsed.command === 'publish') {
107
+ // Register the already-deployed URL in the admin catalog — NO deploy. The
108
+ // public address defaults to `https://<origin>` (the canonical custom-domain
109
+ // prod URL — what every fleet domain serves at); `--public-url` overrides it
110
+ // for workers.dev / split-host deploys. No adapter, secrets, or params: this
111
+ // only points the registry at an address the author already deployed.
112
+ const pkg = readPackageMeta(projectDir);
113
+ const name = parsed.name ?? def.origin.split('.')[0] ?? def.origin;
114
+ const url = parsed.publicUrl ?? `https://${def.origin}`;
115
+ info(`registering ${def.origin} → ${url} in the admin catalog (no deploy)`);
116
+ return await publishToAdmin({
117
+ origin: def.origin,
118
+ name,
119
+ url,
120
+ ...(pkg.description ? { description: pkg.description } : {}),
121
+ ...(parsed.installByDefault ? { installByDefault: true } : {}),
122
+ });
123
+ }
103
124
  const adapter = def.adapter;
104
125
  // CLI param overrides — applied over the env's params here AND re-applied by
105
126
  // the config hot-regen path, which re-resolves `adapter.params` from the
@@ -150,9 +171,10 @@ export async function run(argv) {
150
171
  if (parsed.publish) {
151
172
  const pkg = readPackageMeta(projectDir);
152
173
  // The registry `name` is a short catalog slug, distinct from the FQDN-like
153
- // `origin`. It isn't in the domain definition, so default to the project's
154
- // package.json `name`, then the origin's first label; `--name` overrides.
155
- const name = parsed.name ?? pkg.name ?? def.origin.split('.')[0] ?? def.origin;
174
+ // `origin` AND from the npm package name (`@scope/…` for a published domain —
175
+ // illegal as a catalog slug). Default to the origin's first label (the fleet
176
+ // convention, e.g. `ai-gateway`); `--name` overrides.
177
+ const name = parsed.name ?? def.origin.split('.')[0] ?? def.origin;
156
178
  return await publishToAdmin({
157
179
  origin: def.origin,
158
180
  name,
@@ -439,6 +461,7 @@ export function parseArgs(argv) {
439
461
  let port;
440
462
  let host;
441
463
  let name;
464
+ let publicUrl;
442
465
  const cleaned = [];
443
466
  for (let i = 0; i < rest.length; i++) {
444
467
  const a = rest[i];
@@ -467,6 +490,14 @@ export function parseArgs(argv) {
467
490
  else if (a.startsWith('--name=')) {
468
491
  name = a.slice('--name='.length);
469
492
  }
493
+ else if (a === '--public-url') {
494
+ publicUrl = rest[++i];
495
+ if (!publicUrl)
496
+ throw new Error('--public-url needs a value (the address the catalog points at)');
497
+ }
498
+ else if (a.startsWith('--public-url=')) {
499
+ publicUrl = a.slice('--public-url='.length);
500
+ }
470
501
  else {
471
502
  cleaned.push(a);
472
503
  }
@@ -496,13 +527,15 @@ export function parseArgs(argv) {
496
527
  return { command: 'deploy', env, watch, ...(publish ? { publish } : {}), ...pub };
497
528
  }
498
529
  case 'publish':
499
- // Sugar for `deploy [prod] --publish`: deploy, then register the URL.
530
+ // Register the ALREADY-deployed URL in the admin catalog NO deploy.
531
+ // (Use `deploy [env] --publish` to deploy AND register in one step.) The
532
+ // public address defaults to `https://<origin>`; `--public-url` overrides.
500
533
  return {
501
- command: 'deploy',
534
+ command: 'publish',
502
535
  env: positionals[0] ?? 'prod',
503
536
  watch: false,
504
- publish: true,
505
537
  ...pub,
538
+ ...(publicUrl !== undefined ? { publicUrl } : {}),
506
539
  };
507
540
  case 'build':
508
541
  // Spec-only — no env resolution happens on this path.
@@ -558,11 +591,12 @@ function printUsage(msg) {
558
591
  ` astrale-domain dev # deploy dev --watch (hot-reload, prints URL)\n` +
559
592
  ` astrale-domain prod # deploy prod\n` +
560
593
  ` astrale-domain deploy <env> # deploy any env key (--watch optional)\n` +
561
- ` astrale-domain publish [env] # deploy [prod], then register the URL in the admin catalog\n` +
594
+ ` astrale-domain publish [env] # register the already-deployed URL in the admin catalog (NO deploy)\n` +
562
595
  ` astrale-domain build # rebuild the diagnostic spec only\n` +
563
596
  `\nFlags:\n` +
564
- ` --publish # on deploy/prod: register the deployed URL (= the publish command)\n` +
565
- ` --name <slug> # registry name to publish under (default: package.json name)\n` +
597
+ ` --publish # on deploy/prod: ALSO register the deployed URL (deploy + register)\n` +
598
+ ` --name <slug> # registry name to publish under (default: the origin's first label)\n` +
599
+ ` --public-url <url> # (publish) address the catalog points at (default: https://<origin>)\n` +
566
600
  ` --install-by-default # mark the published domain for install on every new instance\n` +
567
601
  `\n publish shells out to \`astrale domain publish\` (needs \`astrale\` on PATH).\n\n`);
568
602
  }
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,46 @@ import type { RemoteServerConfig } from './config';
25
25
  type Fetcher = {
26
26
  fetch(request: Request): Response | Promise<Response>;
27
27
  };
28
+ type App = {
29
+ fetch(request: Request): Response | Promise<Response>;
30
+ };
31
+ /** A built app cached by its serving URL: `origin` for same-origin matching,
32
+ * `app` for in-process self-dispatch. */
33
+ type CachedApp = {
34
+ origin: string;
35
+ app: App;
36
+ };
37
+ /**
38
+ * Choose where an OUTBOUND subrequest to `u` is routed — or `null` to let the
39
+ * real `fetch` handle it. Order matters and same-origin wins FIRST: a call to
40
+ * this worker's OWN serving origin is a self-dispatch, not an edge fetch — and
41
+ * the caller's `routeSubrequest` policy may itself match our own host (e.g. an
42
+ * `isInstanceHost` predicate matches every `*.svc.astrale.ai`, ours included),
43
+ * so it must never get first look at a same-origin call.
44
+ *
45
+ * • same-origin + SELF binding present → the SELF fetcher: a fresh same-script
46
+ * invocation. The normal Cloudflare path — a Worker can't fetch its own
47
+ * hostname over the edge, so it re-enters itself through the binding.
48
+ * • same-origin + NO SELF binding → the cached app, dispatched IN-PROCESS. A
49
+ * Workers-for-Platforms dispatch-namespace tenant can't service-bind to
50
+ * itself (its script name is platform-renamed), so it has no SELF binding; an
51
+ * in-process dispatch reaches the same script with no edge hop and no binding.
52
+ * `App` and the SELF `Fetcher` share the `{ fetch(request) }` shape, so the
53
+ * caller drives both identically.
54
+ * • else, the caller's `routeSubrequest` policy matched → its fetcher.
55
+ * • else → `null`: passthrough to the real network fetch.
56
+ *
57
+ * Pure (no closure over instance state) so the routing decision is unit-testable
58
+ * without standing up a real app.
59
+ */
60
+ export declare function selectSubrequestTarget<TDeps>(u: URL, ctx: {
61
+ self: Fetcher | null;
62
+ apps: Iterable<CachedApp>;
63
+ routeEnv: TDeps | null;
64
+ routeSubrequest?: (url: URL, env: TDeps) => Fetcher | null | undefined;
65
+ }): {
66
+ fetch(request: Request): Response | Promise<Response>;
67
+ } | null;
28
68
  export interface WorkerEntryConfig<TDeps> {
29
69
  /**
30
70
  * Build the `createRemoteServer` config for the resolved serving `url`. Called
@@ -1 +1 @@
1
- {"version":3,"file":"worker-entry.d.ts","sourceRoot":"","sources":["../../src/server/worker-entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAMlD,KAAK,OAAO,GAAG;IAAE,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CAAE,CAAA;AAGxE,MAAM,WAAW,iBAAiB,CAAC,KAAK;IACtC;;;;OAIG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,KAAK,kBAAkB,CAAC,KAAK,CAAC,CAAA;IAC7D;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,KAAK,MAAM,CAAA;IAC1D,gFAAgF;IAChF,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;IACxD;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,KAAK,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;IACtE;;;;;OAKG;IACH,MAAM,CAAC,EAAE,CACP,GAAG,EAAE,KAAK,EACV,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,OAAO,KACb,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAA;IACzD;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAA;CAC3D;AAED,MAAM,WAAW,WAAW,CAAC,KAAK;IAChC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CAClE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAM/D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE;IAClC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;IACnD,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CACrD,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,SAAS,CAiBvF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CA0E7F"}
1
+ {"version":3,"file":"worker-entry.d.ts","sourceRoot":"","sources":["../../src/server/worker-entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAMlD,KAAK,OAAO,GAAG;IAAE,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CAAE,CAAA;AACxE,KAAK,GAAG,GAAG;IAAE,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CAAE,CAAA;AAEpE;yCACyC;AACzC,KAAK,SAAS,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,GAAG,CAAA;CAAE,CAAA;AAE7C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAC1C,CAAC,EAAE,GAAG,EACN,GAAG,EAAE;IACH,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;IACpB,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAA;IACzB,QAAQ,EAAE,KAAK,GAAG,IAAI,CAAA;IACtB,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,KAAK,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;CACvE,GACA;IAAE,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CAAE,GAAG,IAAI,CAWlE;AAED,MAAM,WAAW,iBAAiB,CAAC,KAAK;IACtC;;;;OAIG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,KAAK,kBAAkB,CAAC,KAAK,CAAC,CAAA;IAC7D;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,KAAK,MAAM,CAAA;IAC1D,gFAAgF;IAChF,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;IACxD;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,KAAK,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;IACtE;;;;;OAKG;IACH,MAAM,CAAC,EAAE,CACP,GAAG,EAAE,KAAK,EACV,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,OAAO,KACb,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAA;IACzD;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAA;CAC3D;AAED,MAAM,WAAW,WAAW,CAAC,KAAK;IAChC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CAClE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAM/D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE;IAClC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;IACnD,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CACrD,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,SAAS,CAiBvF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAsE7F"}
@@ -24,6 +24,43 @@
24
24
  import { createRemoteServer } from './create';
25
25
  import { requireEnv } from './require-env';
26
26
  import { canonicalizeServingUrl } from './serving-url';
27
+ /**
28
+ * Choose where an OUTBOUND subrequest to `u` is routed — or `null` to let the
29
+ * real `fetch` handle it. Order matters and same-origin wins FIRST: a call to
30
+ * this worker's OWN serving origin is a self-dispatch, not an edge fetch — and
31
+ * the caller's `routeSubrequest` policy may itself match our own host (e.g. an
32
+ * `isInstanceHost` predicate matches every `*.svc.astrale.ai`, ours included),
33
+ * so it must never get first look at a same-origin call.
34
+ *
35
+ * • same-origin + SELF binding present → the SELF fetcher: a fresh same-script
36
+ * invocation. The normal Cloudflare path — a Worker can't fetch its own
37
+ * hostname over the edge, so it re-enters itself through the binding.
38
+ * • same-origin + NO SELF binding → the cached app, dispatched IN-PROCESS. A
39
+ * Workers-for-Platforms dispatch-namespace tenant can't service-bind to
40
+ * itself (its script name is platform-renamed), so it has no SELF binding; an
41
+ * in-process dispatch reaches the same script with no edge hop and no binding.
42
+ * `App` and the SELF `Fetcher` share the `{ fetch(request) }` shape, so the
43
+ * caller drives both identically.
44
+ * • else, the caller's `routeSubrequest` policy matched → its fetcher.
45
+ * • else → `null`: passthrough to the real network fetch.
46
+ *
47
+ * Pure (no closure over instance state) so the routing decision is unit-testable
48
+ * without standing up a real app.
49
+ */
50
+ export function selectSubrequestTarget(u, ctx) {
51
+ // Same-origin self-subrequest → the same script (SELF binding, else in-process).
52
+ for (const cached of ctx.apps) {
53
+ if (cached.origin === u.origin)
54
+ return ctx.self ?? cached.app;
55
+ }
56
+ // Caller policy (e.g. a platform router on the same zone) → its fetcher.
57
+ if (ctx.routeSubrequest && ctx.routeEnv) {
58
+ const via = ctx.routeSubrequest(u, ctx.routeEnv);
59
+ if (via)
60
+ return via;
61
+ }
62
+ return null;
63
+ }
27
64
  /**
28
65
  * The request origin as the CLIENT reached it — i.e. the origin a fallback
29
66
  * serving URL (and therefore the `iss`) may be derived from. Behind a
@@ -104,31 +141,26 @@ export function createWorkerEntry(config) {
104
141
  apps.set(url, { origin: new URL(url).origin, app });
105
142
  return app;
106
143
  }
107
- // A Worker can't fetch its own hostname (SELF), nor — on Cloudflare — a
144
+ // A Worker can't fetch its own hostname over the edge, nor — on Cloudflare — a
108
145
  // same-zone hostname routed to another Worker (the `routeSubrequest` case).
109
146
  // When either is configured, override `globalThis.fetch` to redirect those
110
- // subrequests through the caller's fetcher. Workers with neither get no global
111
- // mutation. (A self-issued credential's JWKS is resolved in-memory by the
112
- // verifier, not fetched see `auth/verify.ts` so no self-JWKS shim is needed.)
147
+ // subrequests through the right target (see `selectSubrequestTarget`). Workers
148
+ // with neither selfBinding nor routeSubrequest get no global mutation. (A
149
+ // self-issued credential's JWKS is resolved in-memory by the verifier, not
150
+ // fetched — see `auth/verify.ts` — so no self-JWKS shim is needed.)
113
151
  if (config.selfBinding || config.routeSubrequest) {
114
152
  const originalFetch = globalThis.fetch;
115
153
  globalThis.fetch = (async (input, init) => {
116
154
  const href = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;
117
155
  try {
118
- const u = new URL(href);
119
- // same-origin → SELF (a Worker can't fetch its own hostname)
120
- if (self && apps.size > 0) {
121
- for (const cached of apps.values()) {
122
- if (cached.origin === u.origin)
123
- return self.fetch(new Request(input, init));
124
- }
125
- }
126
- // caller policy → its fetcher (e.g. a platform router on the same zone)
127
- if (config.routeSubrequest && routeEnv) {
128
- const via = config.routeSubrequest(u, routeEnv);
129
- if (via)
130
- return via.fetch(new Request(input, init));
131
- }
156
+ const target = selectSubrequestTarget(new URL(href), {
157
+ self,
158
+ apps: apps.values(),
159
+ routeEnv,
160
+ routeSubrequest: config.routeSubrequest,
161
+ });
162
+ if (target)
163
+ return target.fetch(new Request(input, init));
132
164
  }
133
165
  catch {
134
166
  // non-absolute URL — fall through to the original fetch
@@ -1 +1 @@
1
- {"version":3,"file":"worker-entry.js","sourceRoot":"","sources":["../../src/server/worker-entry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker-entry.js","sourceRoot":"","sources":["../../src/server/worker-entry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astrale-os/sdk",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "description": "Astrale Remote Domain SDK - Define and deploy domains as standalone Hono servers",
5
5
  "keywords": [
6
6
  "astrale",
package/src/cli/run.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * The `astrale-domain` CLI — dev | build | deploy.
2
+ * The `astrale-domain` CLI — dev | build | deploy | publish.
3
3
  *
4
4
  * Thin by design: it reads `astrale.config.ts`, resolves `envs[<env>] → params`
5
5
  * via the adapter, loads the env's secrets file, then drives `adapter.watch`
@@ -18,14 +18,17 @@
18
18
  * astrale-domain prod # = deploy prod
19
19
  * astrale-domain deploy <env> # any env key
20
20
  * astrale-domain build # rebuild spec only (placeholder URL)
21
- * astrale-domain publish [env] # = deploy [prod] then register the URL
21
+ * astrale-domain publish [env] # register the deployed URL in the admin catalog (NO deploy)
22
22
  *
23
- * `publish` (and the `--publish` tail-flag on deploy) deploys, then registers
24
- * the resulting URL in the admin catalog by SHELLING OUT to the operator CLI
25
- * (`astrale domain publish --origin --name --public-url`). Auth lives entirely
26
- * in that CLI this build tool never touches credentials; it just hands off the
27
- * fresh URL it alone knows. Requires `astrale` on PATH (the same CLI the deploy
28
- * footer already points you at for `domain install`).
23
+ * `publish` registers a domain's ALREADY-deployed URL in the admin catalog by
24
+ * SHELLING OUT to the operator CLI (`astrale domain publish --origin --name
25
+ * --public-url`); it does NOT deploy — run `prod` / `deploy <env>` first, or use
26
+ * `deploy --publish` to deploy AND register in one step. Standalone publish
27
+ * defaults the registered address to `https://<origin>` (what every fleet domain
28
+ * serves at); pass `--public-url` for workers.dev / split-host deploys. Auth
29
+ * lives entirely in the operator CLI — this build tool never touches
30
+ * credentials. Requires `astrale` on PATH (the same CLI the deploy footer
31
+ * already points you at for `domain install`).
29
32
  */
30
33
 
31
34
  import { spawn } from 'node:child_process'
@@ -44,19 +47,21 @@ import { buildProjectSpec } from './spec'
44
47
  const CONFIG_NAMES = ['astrale.config.ts', 'astrale.config.js', 'astrale.config.mjs']
45
48
 
46
49
  type ParsedArgs = {
47
- command: 'dev' | 'build' | 'deploy'
50
+ command: 'dev' | 'build' | 'deploy' | 'publish'
48
51
  env: string
49
52
  watch: boolean
50
53
  /** `--port <n>` (dev only) — overrides the env's local dev port. */
51
54
  port?: number
52
55
  /** `--host <url>` (dev only) — public URL of a tunnel/proxy front: binds 0.0.0.0 + pins WORKER_URL. */
53
56
  host?: string
54
- /** Register the deployed URL in the admin catalog (the `publish` command / `--publish` flag). */
57
+ /** `--publish` tail-flag on deploy/prod: ALSO register the freshly-deployed URL (deploy + register). */
55
58
  publish?: boolean
56
- /** `--name <slug>` — registry name to publish under (default: package.json `name`). */
59
+ /** `--name <slug>` — registry name to publish under (default: the origin's first label, e.g. `ai-gateway`). */
57
60
  name?: string
58
61
  /** `--install-by-default` — mark the published domain for install on every new instance. */
59
62
  installByDefault?: boolean
63
+ /** `--public-url <url>` — (publish only) the address the catalog points at (default: `https://<origin>`). */
64
+ publicUrl?: string
60
65
  }
61
66
 
62
67
  export async function run(argv: readonly string[]): Promise<number> {
@@ -131,6 +136,25 @@ export async function run(argv: readonly string[]): Promise<number> {
131
136
  return 0
132
137
  }
133
138
 
139
+ if (parsed.command === 'publish') {
140
+ // Register the already-deployed URL in the admin catalog — NO deploy. The
141
+ // public address defaults to `https://<origin>` (the canonical custom-domain
142
+ // prod URL — what every fleet domain serves at); `--public-url` overrides it
143
+ // for workers.dev / split-host deploys. No adapter, secrets, or params: this
144
+ // only points the registry at an address the author already deployed.
145
+ const pkg = readPackageMeta(projectDir)
146
+ const name = parsed.name ?? def.origin.split('.')[0] ?? def.origin
147
+ const url = parsed.publicUrl ?? `https://${def.origin}`
148
+ info(`registering ${def.origin} → ${url} in the admin catalog (no deploy)`)
149
+ return await publishToAdmin({
150
+ origin: def.origin,
151
+ name,
152
+ url,
153
+ ...(pkg.description ? { description: pkg.description } : {}),
154
+ ...(parsed.installByDefault ? { installByDefault: true } : {}),
155
+ })
156
+ }
157
+
134
158
  const adapter = def.adapter as DomainAdapter<unknown>
135
159
  // CLI param overrides — applied over the env's params here AND re-applied by
136
160
  // the config hot-regen path, which re-resolves `adapter.params` from the
@@ -184,9 +208,10 @@ export async function run(argv: readonly string[]): Promise<number> {
184
208
  if (parsed.publish) {
185
209
  const pkg = readPackageMeta(projectDir)
186
210
  // The registry `name` is a short catalog slug, distinct from the FQDN-like
187
- // `origin`. It isn't in the domain definition, so default to the project's
188
- // package.json `name`, then the origin's first label; `--name` overrides.
189
- const name = parsed.name ?? pkg.name ?? def.origin.split('.')[0] ?? def.origin
211
+ // `origin` AND from the npm package name (`@scope/…` for a published domain —
212
+ // illegal as a catalog slug). Default to the origin's first label (the fleet
213
+ // convention, e.g. `ai-gateway`); `--name` overrides.
214
+ const name = parsed.name ?? def.origin.split('.')[0] ?? def.origin
190
215
  return await publishToAdmin({
191
216
  origin: def.origin,
192
217
  name,
@@ -539,6 +564,7 @@ export function parseArgs(argv: readonly string[]): ParsedArgs {
539
564
  let port: number | undefined
540
565
  let host: string | undefined
541
566
  let name: string | undefined
567
+ let publicUrl: string | undefined
542
568
  const cleaned: string[] = []
543
569
  for (let i = 0; i < rest.length; i++) {
544
570
  const a = rest[i]!
@@ -560,6 +586,12 @@ export function parseArgs(argv: readonly string[]): ParsedArgs {
560
586
  if (!name) throw new Error('--name needs a value (the registry slug to publish under)')
561
587
  } else if (a.startsWith('--name=')) {
562
588
  name = a.slice('--name='.length)
589
+ } else if (a === '--public-url') {
590
+ publicUrl = rest[++i]
591
+ if (!publicUrl)
592
+ throw new Error('--public-url needs a value (the address the catalog points at)')
593
+ } else if (a.startsWith('--public-url=')) {
594
+ publicUrl = a.slice('--public-url='.length)
563
595
  } else {
564
596
  cleaned.push(a)
565
597
  }
@@ -590,13 +622,15 @@ export function parseArgs(argv: readonly string[]): ParsedArgs {
590
622
  return { command: 'deploy', env, watch, ...(publish ? { publish } : {}), ...pub }
591
623
  }
592
624
  case 'publish':
593
- // Sugar for `deploy [prod] --publish`: deploy, then register the URL.
625
+ // Register the ALREADY-deployed URL in the admin catalog NO deploy.
626
+ // (Use `deploy [env] --publish` to deploy AND register in one step.) The
627
+ // public address defaults to `https://<origin>`; `--public-url` overrides.
594
628
  return {
595
- command: 'deploy',
629
+ command: 'publish',
596
630
  env: positionals[0] ?? 'prod',
597
631
  watch: false,
598
- publish: true,
599
632
  ...pub,
633
+ ...(publicUrl !== undefined ? { publicUrl } : {}),
600
634
  }
601
635
  case 'build':
602
636
  // Spec-only — no env resolution happens on this path.
@@ -664,11 +698,12 @@ function printUsage(msg?: string): void {
664
698
  ` astrale-domain dev # deploy dev --watch (hot-reload, prints URL)\n` +
665
699
  ` astrale-domain prod # deploy prod\n` +
666
700
  ` astrale-domain deploy <env> # deploy any env key (--watch optional)\n` +
667
- ` astrale-domain publish [env] # deploy [prod], then register the URL in the admin catalog\n` +
701
+ ` astrale-domain publish [env] # register the already-deployed URL in the admin catalog (NO deploy)\n` +
668
702
  ` astrale-domain build # rebuild the diagnostic spec only\n` +
669
703
  `\nFlags:\n` +
670
- ` --publish # on deploy/prod: register the deployed URL (= the publish command)\n` +
671
- ` --name <slug> # registry name to publish under (default: package.json name)\n` +
704
+ ` --publish # on deploy/prod: ALSO register the deployed URL (deploy + register)\n` +
705
+ ` --name <slug> # registry name to publish under (default: the origin's first label)\n` +
706
+ ` --public-url <url> # (publish) address the catalog points at (default: https://<origin>)\n` +
672
707
  ` --install-by-default # mark the published domain for install on every new instance\n` +
673
708
  `\n publish shells out to \`astrale domain publish\` (needs \`astrale\` on PATH).\n\n`,
674
709
  )
@@ -31,6 +31,54 @@ import { canonicalizeServingUrl } from './serving-url'
31
31
  type Fetcher = { fetch(request: Request): Response | Promise<Response> }
32
32
  type App = { fetch(request: Request): Response | Promise<Response> }
33
33
 
34
+ /** A built app cached by its serving URL: `origin` for same-origin matching,
35
+ * `app` for in-process self-dispatch. */
36
+ type CachedApp = { origin: string; app: App }
37
+
38
+ /**
39
+ * Choose where an OUTBOUND subrequest to `u` is routed — or `null` to let the
40
+ * real `fetch` handle it. Order matters and same-origin wins FIRST: a call to
41
+ * this worker's OWN serving origin is a self-dispatch, not an edge fetch — and
42
+ * the caller's `routeSubrequest` policy may itself match our own host (e.g. an
43
+ * `isInstanceHost` predicate matches every `*.svc.astrale.ai`, ours included),
44
+ * so it must never get first look at a same-origin call.
45
+ *
46
+ * • same-origin + SELF binding present → the SELF fetcher: a fresh same-script
47
+ * invocation. The normal Cloudflare path — a Worker can't fetch its own
48
+ * hostname over the edge, so it re-enters itself through the binding.
49
+ * • same-origin + NO SELF binding → the cached app, dispatched IN-PROCESS. A
50
+ * Workers-for-Platforms dispatch-namespace tenant can't service-bind to
51
+ * itself (its script name is platform-renamed), so it has no SELF binding; an
52
+ * in-process dispatch reaches the same script with no edge hop and no binding.
53
+ * `App` and the SELF `Fetcher` share the `{ fetch(request) }` shape, so the
54
+ * caller drives both identically.
55
+ * • else, the caller's `routeSubrequest` policy matched → its fetcher.
56
+ * • else → `null`: passthrough to the real network fetch.
57
+ *
58
+ * Pure (no closure over instance state) so the routing decision is unit-testable
59
+ * without standing up a real app.
60
+ */
61
+ export function selectSubrequestTarget<TDeps>(
62
+ u: URL,
63
+ ctx: {
64
+ self: Fetcher | null
65
+ apps: Iterable<CachedApp>
66
+ routeEnv: TDeps | null
67
+ routeSubrequest?: (url: URL, env: TDeps) => Fetcher | null | undefined
68
+ },
69
+ ): { fetch(request: Request): Response | Promise<Response> } | null {
70
+ // Same-origin self-subrequest → the same script (SELF binding, else in-process).
71
+ for (const cached of ctx.apps) {
72
+ if (cached.origin === u.origin) return ctx.self ?? cached.app
73
+ }
74
+ // Caller policy (e.g. a platform router on the same zone) → its fetcher.
75
+ if (ctx.routeSubrequest && ctx.routeEnv) {
76
+ const via = ctx.routeSubrequest(u, ctx.routeEnv)
77
+ if (via) return via
78
+ }
79
+ return null
80
+ }
81
+
34
82
  export interface WorkerEntryConfig<TDeps> {
35
83
  /**
36
84
  * Build the `createRemoteServer` config for the resolved serving `url`. Called
@@ -152,7 +200,7 @@ export function createWorkerEntry<TDeps>(config: WorkerEntryConfig<TDeps>): Work
152
200
  // every alternation. The bound caps abuse via attacker-minted Host /
153
201
  // X-Forwarded-Proto values on that same fallback path.
154
202
  const MAX_CACHED_APPS = 4
155
- const apps = new Map<string, { origin: string; app: App }>()
203
+ const apps = new Map<string, CachedApp>()
156
204
  let self: Fetcher | null = null
157
205
  let routeEnv: TDeps | null = null
158
206
 
@@ -168,29 +216,25 @@ export function createWorkerEntry<TDeps>(config: WorkerEntryConfig<TDeps>): Work
168
216
  return app
169
217
  }
170
218
 
171
- // A Worker can't fetch its own hostname (SELF), nor — on Cloudflare — a
219
+ // A Worker can't fetch its own hostname over the edge, nor — on Cloudflare — a
172
220
  // same-zone hostname routed to another Worker (the `routeSubrequest` case).
173
221
  // When either is configured, override `globalThis.fetch` to redirect those
174
- // subrequests through the caller's fetcher. Workers with neither get no global
175
- // mutation. (A self-issued credential's JWKS is resolved in-memory by the
176
- // verifier, not fetched see `auth/verify.ts` so no self-JWKS shim is needed.)
222
+ // subrequests through the right target (see `selectSubrequestTarget`). Workers
223
+ // with neither selfBinding nor routeSubrequest get no global mutation. (A
224
+ // self-issued credential's JWKS is resolved in-memory by the verifier, not
225
+ // fetched — see `auth/verify.ts` — so no self-JWKS shim is needed.)
177
226
  if (config.selfBinding || config.routeSubrequest) {
178
227
  const originalFetch = globalThis.fetch
179
228
  globalThis.fetch = (async (input: RequestInfo | URL, init?: RequestInit) => {
180
229
  const href = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url
181
230
  try {
182
- const u = new URL(href)
183
- // same-origin → SELF (a Worker can't fetch its own hostname)
184
- if (self && apps.size > 0) {
185
- for (const cached of apps.values()) {
186
- if (cached.origin === u.origin) return self.fetch(new Request(input, init))
187
- }
188
- }
189
- // caller policy → its fetcher (e.g. a platform router on the same zone)
190
- if (config.routeSubrequest && routeEnv) {
191
- const via = config.routeSubrequest(u, routeEnv)
192
- if (via) return via.fetch(new Request(input, init))
193
- }
231
+ const target = selectSubrequestTarget(new URL(href), {
232
+ self,
233
+ apps: apps.values(),
234
+ routeEnv,
235
+ routeSubrequest: config.routeSubrequest,
236
+ })
237
+ if (target) return target.fetch(new Request(input, init))
194
238
  } catch {
195
239
  // non-absolute URL — fall through to the original fetch
196
240
  }