@voyant-travel/hono 0.121.0 → 0.121.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"app-workflows.d.ts","sourceRoot":"","sources":["../src/app-workflows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,qBAAqB,EACrB,MAAM,EACN,eAAe,EACf,kBAAkB,EACnB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAOrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AASjD,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC9B,kBAAkB,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAA;IACrD,gBAAgB,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAA;IACtD,MAAM,EAAE,cAAc,CAAA;IACtB,WAAW,EAAE,YAAY,GAAG,SAAS,GAAG,aAAa,CAAA;IACrD,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE;QACR,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,OAAO,CAAA;KACvF,CAAA;CACF;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkDtF;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,eAAe,GAAG;IACtE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAAA;IAC3B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;CAC3B,CASA;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,SAAS,GACpD,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAclF"}
1
+ {"version":3,"file":"app-workflows.d.ts","sourceRoot":"","sources":["../src/app-workflows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,qBAAqB,EAErB,MAAM,EACN,eAAe,EACf,kBAAkB,EACnB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAGrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAgBjD,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC9B,kBAAkB,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAA;IACrD,gBAAgB,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAA;IACtD,MAAM,EAAE,cAAc,CAAA;IACtB,WAAW,EAAE,YAAY,GAAG,SAAS,GAAG,aAAa,CAAA;IACrD,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE;QACR,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,OAAO,CAAA;KACvF,CAAA;CACF;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwDtF;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,eAAe,GAAG;IACtE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAAA;IAC3B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;CAC3B,CASA;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,SAAS,GACpD,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAclF"}
@@ -1,4 +1,4 @@
1
- import { buildManifest, } from "@voyant-travel/workflows/events";
1
+ import { buildManifest } from "@voyant-travel/workflows/events";
2
2
  function toManifestWorkflowDescriptor(wf) {
3
3
  const candidate = wf;
4
4
  return candidate.config ? { id: wf.id, config: candidate.config } : { id: wf.id };
@@ -22,7 +22,13 @@ export async function wireWorkflowRuntime(args) {
22
22
  `@voyant-travel/workflows - the public EventFilterDescriptor is the structural minimum, but ` +
23
23
  `createApp() needs the manifest payload to register with the driver.`);
24
24
  }
25
- filterEntries.push(candidate);
25
+ filterEntries.push({
26
+ id: candidate.manifest.id,
27
+ eventType: candidate.manifest.eventType,
28
+ manifest: candidate.manifest,
29
+ declaration: { target: { id: candidate.manifest.targetWorkflowId } },
30
+ targetWorkflowId: candidate.manifest.targetWorkflowId,
31
+ });
26
32
  }
27
33
  const manifest = await buildManifest({
28
34
  projectId: args.projectId,
@@ -37,7 +43,7 @@ export async function wireWorkflowRuntime(args) {
37
43
  // Install one EventBus subscriber per unique eventType. Each subscriber
38
44
  // forwards the envelope through `driver.ingestEvent(...)`, which routes
39
45
  // through the same predicate/mapper machinery the HTTP ingest path uses.
40
- const eventTypes = new Set(filterEntries.map((f) => f.eventType));
46
+ const eventTypes = new Set(filterEntries.map((f) => f.manifest.eventType));
41
47
  for (const eventType of eventTypes) {
42
48
  args.eventBus.subscribe(eventType, async (envelope) => {
43
49
  const stamped = ensureMetadataEventId(envelope);
@@ -49,7 +49,7 @@ export interface LazyHonoRoutes {
49
49
  * relative-route loaders, or `"/"` for loaders that already return absolute
50
50
  * routes.
51
51
  */
52
- export declare function createLazyRouteHandler(mountPrefix: string, load: LazyRoutesLoader): (c: Context) => Promise<Response>;
52
+ export declare function createLazyRouteHandler(mountPrefix: string, load: LazyRoutesLoader): (c: Context, next?: () => Promise<void>) => Promise<Response>;
53
53
  /**
54
54
  * Register a single lazy surface on `app` at `prefix` (loader returns RELATIVE
55
55
  * routes). Matches both the prefix root (`POST /v1/admin/foo`) and any sub-path
@@ -1 +1 @@
1
- {"version":3,"file":"lazy-routes.d.ts","sourceRoot":"","sources":["../src/lazy-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,MAAM,CAAA;AAMrD,KAAK,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;AAE5B,oEAAoE;AACpE,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;AAErD;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACxB,IAAI,EAAE,gBAAgB,CAAA;CACvB;AAKD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,IA0ClE,GAAG,OAAO,KAAG,OAAO,CAAC,QAAQ,CAAC,CAO7C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAI5F;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,IAAI,EAAE,gBAAgB,GACrB,IAAI,CAKN"}
1
+ {"version":3,"file":"lazy-routes.d.ts","sourceRoot":"","sources":["../src/lazy-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,MAAM,CAAA;AAMrD,KAAK,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;AAE5B,oEAAoE;AACpE,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;AAErD;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACxB,IAAI,EAAE,gBAAgB,CAAA;CACvB;AAgBD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,IA6ClE,GAAG,OAAO,EAAE,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,KAAG,OAAO,CAAC,QAAQ,CAAC,CAezE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAI5F;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,IAAI,EAAE,gBAAgB,GACrB,IAAI,CAKN"}
@@ -2,6 +2,16 @@ import { Hono } from "hono";
2
2
  import { tryGetExecutionCtx } from "./lib/execution-ctx.js";
3
3
  /** Private carrier key for snapshotting `c.var` across the forward. */
4
4
  const LAZY_CONTEXT_CARRIER = Symbol.for("voyant.hono.lazyContextCarrier");
5
+ const LAZY_ROUTE_MISS_HEADER = "x-voyant-lazy-route-miss";
6
+ function withoutLazyRouteMissHeader(response) {
7
+ const headers = new Headers(response.headers);
8
+ headers.delete(LAZY_ROUTE_MISS_HEADER);
9
+ return new Response(response.body, {
10
+ status: response.status,
11
+ statusText: response.statusText,
12
+ headers,
13
+ });
14
+ }
5
15
  /**
6
16
  * Build a cached, context-preserving request handler. `mountPrefix` is where the
7
17
  * loaded routes are re-mounted in the wrapper sub-app so the forwarded absolute
@@ -27,6 +37,7 @@ export function createLazyRouteHandler(mountPrefix, load) {
27
37
  wrapped.onError((err) => {
28
38
  throw err;
29
39
  });
40
+ wrapped.notFound(() => new Response(null, { status: 404, headers: { [LAZY_ROUTE_MISS_HEADER]: "1" } }));
30
41
  wrapped.use("*", async (cc, next) => {
31
42
  const carried = cc.env?.[LAZY_CONTEXT_CARRIER];
32
43
  if (carried) {
@@ -47,12 +58,20 @@ export function createLazyRouteHandler(mountPrefix, load) {
47
58
  }
48
59
  return cached;
49
60
  }
50
- return async (c) => {
61
+ return async (c, next) => {
51
62
  const app = await getApp();
52
63
  const snapshot = { ...c.var };
53
64
  const env = { ...c.env, [LAZY_CONTEXT_CARRIER]: snapshot };
54
65
  // biome-ignore lint/suspicious/noExplicitAny: forward the host execution context when present -- owner: hono.
55
- return app.fetch(c.req.raw, env, tryGetExecutionCtx(c));
66
+ const response = await app.fetch(c.req.raw, env, tryGetExecutionCtx(c));
67
+ const routeMiss = response.headers.get(LAZY_ROUTE_MISS_HEADER) === "1";
68
+ if (routeMiss && next) {
69
+ // Match eager `app.route(...)` composition: overlapping lazy mounts under
70
+ // the same prefix must let later modules/extensions try the request.
71
+ await next();
72
+ return c.res;
73
+ }
74
+ return routeMiss ? withoutLazyRouteMissHeader(response) : response;
56
75
  };
57
76
  }
58
77
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voyant-travel/hono",
3
- "version": "0.121.0",
3
+ "version": "0.121.2",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {
@@ -135,19 +135,19 @@
135
135
  "drizzle-orm": "^0.45.2",
136
136
  "hono": "^4.12.27",
137
137
  "zod": "^4.4.3",
138
- "@voyant-travel/core": "^0.112.0",
138
+ "@voyant-travel/core": "^0.112.2",
139
139
  "@voyant-travel/db": "^0.109.5",
140
140
  "@voyant-travel/storage": "^0.106.0",
141
141
  "@voyant-travel/types": "^0.107.0",
142
142
  "@voyant-travel/utils": "^0.105.6",
143
- "@voyant-travel/workflows": "^0.111.15"
143
+ "@voyant-travel/workflows": "^0.111.17"
144
144
  },
145
145
  "devDependencies": {
146
146
  "@cloudflare/workers-types": "^4.20260702.1",
147
147
  "typescript": "^6.0.3",
148
148
  "vitest": "^4.1.9",
149
149
  "@voyant-travel/voyant-typescript-config": "^0.1.0",
150
- "@voyant-travel/workflows-orchestrator": "^0.111.15"
150
+ "@voyant-travel/workflows-orchestrator": "^0.111.17"
151
151
  },
152
152
  "files": [
153
153
  "dist"