@intentface/latch-server 0.17.0 → 0.18.0

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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @intentface/latch-server
2
2
 
3
- The mountable HTTP surface for a Latch runtime — **one framework-agnostic Web handler** you mount at a single route in any Web-standard host (TanStack Start, Next, Bun, Deno, serverless).
3
+ The mountable HTTP surface for a Latch runtime — **one framework-agnostic Web handler** you mount at a single route in any Web-standard host (TanStack Start, Next, Bun, Deno, serverless). Express, Fastify and NestJS mount it through `toNodeHandler` from `@intentface/latch-server/node`.
4
4
 
5
5
  ## What it does
6
6
 
@@ -10,7 +10,7 @@ The mountable HTTP surface for a Latch runtime — **one framework-agnostic Web
10
10
  - `POST /agents/:agent/:id/approvals` — submit HITL approval decisions (resumes the turn).
11
11
  - `POST /agents/:agent/:id/tool-result` — return a client-handled tool result (e.g. `ask_question`).
12
12
  - `GET /agents/:agent/:id/history`, `GET /chats`, `GET /runs` — projections for the UI.
13
- - `GET/POST/DELETE /schedules`, `GET /schedules/:id`, `POST /schedules/:id/run-now` — manage scheduled agents; `POST /cron/run` — the host-guarded tick.
13
+ - `GET/POST/DELETE /schedules`, `GET /schedules/:id`, `POST /schedules/:id/run-now` — manage scheduled agents; `GET`/`POST /cron/run` — the host-guarded tick (a bearer token or `x-latch-cron-secret`, so Vercel Cron can call it).
14
14
  - `GET /connections`, `…/:name/authorize`, `…/:name/callback`, `…/:name/disconnect`, `…/test` — generic MCP connection OAuth + status.
15
15
 
16
16
  `resolveContext(request)` turns a request into your `Principal` (bring-your-own auth). A Hono adapter is exported from the `/hono` subpath.
package/dist/app.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { type AgentFactory, type ContextDefinition, type Runtime, type RuntimeConfig, type Scheduler, type StorageAdapter } from "@intentface/latch-core";
1
+ import { type AgentFactory, type ContextInput, type Runtime, type RuntimeConfig, type Scheduler, type StorageAdapter } from "@intentface/latch-core";
2
2
  import { type ModelCatalog } from "@intentface/latch-core/models";
3
3
  import { type LatchHandler, type LatchHandlerConfig } from "./handler.js";
4
4
  /**
@@ -15,31 +15,33 @@ import { type LatchHandler, type LatchHandlerConfig } from "./handler.js";
15
15
  * A hello-world is the storage adapter plus one agent; see `apps/example`.
16
16
  */
17
17
  export interface LatchAppConfig<P, RC = unknown> {
18
- /** The storage adapter (e.g. `createSqliteAdapter(db, { owner })`). */
18
+ /** Where conversations, runs and usage are stored, for example `createPostgresAdapter(db, { owner })`. */
19
19
  storage: StorageAdapter<P>;
20
20
  /**
21
- * The agent registry — or a function of the loaded model catalog, so agents
22
- * can pick their model from `models.modelFor(...)` without loading the
23
- * catalog themselves.
21
+ * Your agents, by name. Pass a function to get the model catalog, so an
22
+ * agent can pick its model by id: `(models) => ({ assistant: defineAgent({
23
+ * model: models.modelFor("claude-sonnet-4-6"), … }) })`.
24
24
  */
25
25
  agents: Record<string, AgentFactory<P, any, any>> | ((models: ModelCatalog) => Record<string, AgentFactory<P, any, any>>);
26
- /** Your auth: request → Principal (null → 401). */
26
+ /** Your login: turns a request into the principal, or `null` for a `401`. */
27
27
  resolveContext: LatchHandlerConfig<P>["resolveContext"];
28
- /** Per-turn runtime context (default: `{}`). */
29
- context?: ContextDefinition<P, RC>;
30
- /** A preloaded model catalog (default: `loadModelCatalog()`). */
28
+ /** What your agents and tools can work with, built from who is asking on every turn: `async ({ principal }) => ({ … })`. @default `{}` */
29
+ context?: ContextInput<P, RC>;
30
+ /** A model catalog you already loaded. @default `loadModelCatalog()` */
31
31
  models?: ModelCatalog;
32
- /** Per-principal cache-key suffix for memory-scoped prompt caching (typically the owner key). */
32
+ /** A key per caller for prompt caching, so one person's cached prompt is never reused for another. Usually the same as the storage owner. */
33
33
  principalKey?: (principal: P) => string;
34
- /** Anything else on the runtime — or overrides of the defaults (listed last wins). */
34
+ /** Any other `createRuntime` option (limits, connections, schedules…), or a different value for one of the defaults. */
35
35
  runtime?: Partial<Omit<RuntimeConfig<P, RC>, "storage" | "agents" | "context">>;
36
- /** Handler options beyond `runtime` / `resolveContext` (basePath, connections, cronSecret, …). */
36
+ /** Any other `createLatchHandler` option, such as `basePath`, `connections` or `cronSecret`. */
37
37
  handler?: Partial<Omit<LatchHandlerConfig<P>, "runtime" | "resolveContext">>;
38
38
  /**
39
- * In-process cron cadence (ms) driving `runtime.cron()`. Default 30s on a
40
- * long-running process; `false` to disable. Auto-disabled on serverless
41
- * (VERCEL / AWS_LAMBDA_FUNCTION_NAME set) — point a platform cron at
42
- * `POST <basePath>/cron/run` there instead.
39
+ * How often to call `runtime.cron()` in this process, in ms, or `false` for
40
+ * never. Off on serverless (when `VERCEL` or `AWS_LAMBDA_FUNCTION_NAME` is
41
+ * set), where nothing runs between requests: call `runtime.cron()` from a
42
+ * cron route instead.
43
+ *
44
+ * @default 30000 on a long-running server
43
45
  */
44
46
  cronIntervalMs?: number | false;
45
47
  }
package/dist/app.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAsC,KAAK,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAEtG,OAAO,EAAsB,KAAK,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAG9F;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO;IAC7C,uEAAuE;IACvE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAC3B;;;;OAIG;IAEH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1H,mDAAmD;IACnD,cAAc,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IACxD,gDAAgD;IAChD,OAAO,CAAC,EAAE,iBAAiB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnC,iEAAiE;IACjE,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,iGAAiG;IACjG,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,MAAM,CAAC;IACxC,sFAAsF;IACtF,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC;IAChF,kGAAkG;IAClG,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC;IAC7E;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;CACjC;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC;IACrB,qDAAqD;IACrD,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,6CAA6C;IAC7C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAQD,wBAAsB,cAAc,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAiDtG"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAsC,KAAK,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAEtG,OAAO,EAAsB,KAAK,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAG9F;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO;IAC7C,0GAA0G;IAC1G,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAC3B;;;;OAIG;IAEH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1H,6EAA6E;IAC7E,cAAc,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IACxD,0IAA0I;IAC1I,OAAO,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9B,wEAAwE;IACxE,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,6IAA6I;IAC7I,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,MAAM,CAAC;IACxC,wHAAwH;IACxH,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC;IAChF,gGAAgG;IAChG,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC;IAC7E;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;CACjC;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC;IACrB,qDAAqD;IACrD,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,6CAA6C;IAC7C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAQD,wBAAsB,cAAc,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAoDtG"}
package/dist/app.js CHANGED
@@ -1,4 +1,4 @@
1
- import { createIntervalScheduler, createRuntime, defineContext, } from "@intentface/latch-core";
1
+ import { createIntervalScheduler, createRuntime, } from "@intentface/latch-core";
2
2
  import { loadModelCatalog, providerDefaults } from "@intentface/latch-core/models";
3
3
  import { defaultHarnessTools } from "@intentface/latch-core/harness";
4
4
  import { createLatchHandler } from "./handler.js";
@@ -11,7 +11,8 @@ export async function createLatchApp(cfg) {
11
11
  const agents = typeof cfg.agents === "function" ? cfg.agents(models) : cfg.agents;
12
12
  const runtime = createRuntime({
13
13
  storage: cfg.storage,
14
- context: cfg.context ?? defineContext({ build: () => ({}) }),
14
+ // Left out, the runtime builds an empty context.
15
+ context: cfg.context,
15
16
  agents,
16
17
  // Resume-after-crash on by default: it costs a lease heartbeat per turn
17
18
  // and is what makes `cron()`'s sweep half do anything.
@@ -25,8 +26,10 @@ export async function createLatchApp(cfg) {
25
26
  runtime,
26
27
  resolveContext: cfg.resolveContext,
27
28
  // The system-wide cron route is unauthenticated — enabled only when a
28
- // secret is set (the handler 404s it otherwise).
29
- cronSecret: env("LATCH_CRON_SECRET"),
29
+ // secret is set (the handler 404s it otherwise). CRON_SECRET is the one
30
+ // Vercel sends to its crons, so on Vercel a cron in vercel.json pointing
31
+ // at cron/run is all it takes.
32
+ cronSecret: env("LATCH_CRON_SECRET") ?? env("CRON_SECRET"),
30
33
  ...cfg.handler,
31
34
  });
32
35
  let scheduler;
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,aAAa,GAOd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAqB,MAAM,+BAA+B,CAAC;AACtG,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAA8C,MAAM,cAAc,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAwDlD,yGAAyG;AACzG,MAAM,GAAG,GAAG,CAAC,IAAY,EAAsB,EAAE,CAC9C,UAAyE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AAElG,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC;AAExE,MAAM,CAAC,KAAK,UAAU,cAAc,CAAkB,GAA0B;IAC9E,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,gBAAgB,EAAE,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;IAElF,MAAM,OAAO,GAAG,aAAa,CAAQ;QACnC,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,aAAa,CAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAO,EAAE,CAAC;QACzE,MAAM;QACN,wEAAwE;QACxE,uDAAuD;QACvD,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QAC7B,IAAI,EAAE,qBAAqB,EAAE;QAC7B,GAAG,gBAAgB,CAAQ,MAAM,EAAE,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC;QACtE,YAAY,EAAE,mBAAmB,EAAE;QACnC,GAAG,GAAG,CAAC,OAAO;KACf,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,kBAAkB,CAAI;QACpC,OAAO;QACP,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,sEAAsE;QACtE,iDAAiD;QACjD,UAAU,EAAE,GAAG,CAAC,mBAAmB,CAAC;QACpC,GAAG,GAAG,CAAC,OAAO;KACf,CAAC,CAAC;IAEH,IAAI,SAAgC,CAAC;IACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,cAAc,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACrE,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,SAAS,GAAG,uBAAuB,CAAC;YAClC,UAAU,EAAE,QAAQ;YACpB,MAAM,EAAE,KAAK,IAAI,EAAE;gBACjB,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC/B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM;oBAAE,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAC;YAC3E,CAAC;YACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC,CAAC;SACzD,CAAC,CAAC;QACH,SAAS,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,OAAO;QACL,OAAO;QACP,OAAO;QACP,MAAM;QACN,SAAS;QACT,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,SAAS,EAAE,IAAI,EAAE,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,aAAa,GAOd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAqB,MAAM,+BAA+B,CAAC;AACtG,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAA8C,MAAM,cAAc,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AA0DlD,yGAAyG;AACzG,MAAM,GAAG,GAAG,CAAC,IAAY,EAAsB,EAAE,CAC9C,UAAyE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AAElG,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC;AAExE,MAAM,CAAC,KAAK,UAAU,cAAc,CAAkB,GAA0B;IAC9E,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,gBAAgB,EAAE,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;IAElF,MAAM,OAAO,GAAG,aAAa,CAAQ;QACnC,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,iDAAiD;QACjD,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,MAAM;QACN,wEAAwE;QACxE,uDAAuD;QACvD,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QAC7B,IAAI,EAAE,qBAAqB,EAAE;QAC7B,GAAG,gBAAgB,CAAQ,MAAM,EAAE,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC;QACtE,YAAY,EAAE,mBAAmB,EAAE;QACnC,GAAG,GAAG,CAAC,OAAO;KACf,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,kBAAkB,CAAI;QACpC,OAAO;QACP,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,sEAAsE;QACtE,wEAAwE;QACxE,yEAAyE;QACzE,+BAA+B;QAC/B,UAAU,EAAE,GAAG,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,aAAa,CAAC;QAC1D,GAAG,GAAG,CAAC,OAAO;KACf,CAAC,CAAC;IAEH,IAAI,SAAgC,CAAC;IACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,cAAc,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACrE,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,SAAS,GAAG,uBAAuB,CAAC;YAClC,UAAU,EAAE,QAAQ;YACpB,MAAM,EAAE,KAAK,IAAI,EAAE;gBACjB,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC/B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM;oBAAE,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAC;YAC3E,CAAC;YACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC,CAAC;SACzD,CAAC,CAAC;QACH,SAAS,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,OAAO;QACL,OAAO;QACP,OAAO;QACP,MAAM;QACN,SAAS;QACT,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,SAAS,EAAE,IAAI,EAAE,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/handler.d.ts CHANGED
@@ -2,83 +2,80 @@ import type { Runtime } from "@intentface/latch-core";
2
2
  import type { McpConnections } from "@intentface/latch-mcp";
3
3
  export interface LatchHandlerConfig<P> {
4
4
  /**
5
- * The runtime, or a per-principal resolver. A resolver enables DB-per-tenant
6
- * isolation (a separate runtime/DB per tenant, e.g. one SQLite file per
7
- * workspace) — it's called after `resolveContext` yields the principal. A
8
- * single `Runtime` value fits column-scoped (`owner`) tenancy. Note: `POST
9
- * cron/run` (no principal) requires a static runtime OR a `cronRun` tick in
10
- * this config (the resolver-based setup's system-wide sweep).
5
+ * The runtime the routes call. For a database per customer, pass a function
6
+ * instead: it gets the principal from `resolveContext` and returns that
7
+ * customer's runtime. In that case also set `cronRun`, because the cron
8
+ * route has no principal to pick a runtime with.
11
9
  */
12
10
  runtime: Runtime<P> | ((principal: P) => Runtime<P> | Promise<Runtime<P>>);
13
11
  /**
14
- * Map a request to a Principal (your existing auth). Null → 401.
12
+ * Your login: turns a request into the principal, or `null` for a `401`.
15
13
  *
16
- * NEVER consulted for identity on the OAuth callback: every flow this
17
- * handler starts pins the resolved principal into the flow state, and the
18
- * callback rebuilds identity from that pin via `reconstructPrincipal`, so a
19
- * degraded session at redirect time can never change where credentials land.
20
- * A callback whose state carries no pin is rejected as expired.
14
+ * Not used when a sign-in to a connection returns (the OAuth callback): the
15
+ * principal that started the sign-in is saved with it and restored with
16
+ * `reconstructPrincipal`, so whatever session the returning browser has
17
+ * can't change whose account the credentials are saved to.
21
18
  */
22
19
  resolveContext: (request: Request) => P | null | Promise<P | null>;
23
20
  /**
24
- * Rebuild a Principal from the identity pinned into the OAuth flow state at
25
- * `authorize` time (the mirror of the runtime's `reconstructPrincipal` for
26
- * resume/cron). Called on the OAuth callback INSTEAD of `resolveContext` —
27
- * the pinned identity is the source of truth; the live session is not
28
- * consulted. Override to validate (e.g. re-check org membership) or
29
- * re-hydrate; return null to reject the callback (401). Default: cast.
21
+ * Restores the principal that started a connection sign-in, when the sign-in
22
+ * returns. Check it's still valid here (for example, still a member);
23
+ * return `null` to refuse with a `401`. By default the saved principal is
24
+ * used as is.
30
25
  */
31
26
  reconstructPrincipal?: (identity: unknown, request: Request) => P | null | Promise<P | null>;
32
27
  /**
33
- * Maximum age of an OAuth flow, from `authorize` to `callback`. A callback
34
- * whose pinned flow state is older redirects with `?error=flow_expired`.
35
- * Default: 30 minutes.
28
+ * How long a user has to finish signing in to a connection. A later return
29
+ * redirects with `?error=flow_expired`.
30
+ *
31
+ * @default 30 minutes
36
32
  */
37
33
  oauthFlowMaxAgeMs?: number;
38
34
  /**
39
- * Connection registry (enables the connection routes), or a per-principal
40
- * resolver — the latter lets a consumer build a tenant-scoped registry (e.g.
41
- * a workspace's installed connectors) after the principal is known.
35
+ * The services users can connect, from `createMcpConnections`. Adds the
36
+ * routes to list, sign in to, test and disconnect them. Pass a function to
37
+ * give each customer their own set.
42
38
  */
43
39
  connections?: McpConnections<P> | ((principal: P) => McpConnections<P> | Promise<McpConnections<P>>);
44
- /**
45
- * Called after a connection is successfully authorized (both the IdP callback
46
- * and the already-authorized short-circuit in `authorize`). A consumer can use
47
- * it to flip its own catalog/connector state to active.
48
- */
40
+ /** Called after a user connects a service, including when they were already connected. */
49
41
  onConnected?: (principal: P, connectionName: string) => void | Promise<void>;
50
42
  /**
51
- * Observe a failure the caller is deliberately not shown in full.
52
- *
53
- * A connection's OAuth errors quote the remote response, and the remote is an
54
- * address the MCP server operator chose — so the routes return a stable code
55
- * and at most an HTTP status, and hand the real error here. Without this the
56
- * detail is simply lost; wire it to your logger.
43
+ * Receives errors the client is only told about briefly. A connection's
44
+ * errors can quote the other server's response, so the client gets a short
45
+ * code and the full error comes here. Wire it to your logger, or the detail
46
+ * is lost.
57
47
  */
58
48
  onError?: (error: unknown, info: {
59
49
  route: string;
60
50
  name?: string;
61
51
  }) => void | Promise<void>;
62
52
  /**
63
- * Query param appended to the post-callback redirect signalling which
64
- * connection just connected (`?<connectedParam>=<name>`). Default "connected".
53
+ * The query parameter that tells your page which service was just connected,
54
+ * after a sign-in returns: `?connected=linear`.
55
+ *
56
+ * @default "connected"
65
57
  */
66
58
  connectedParam?: string;
67
- /** Path prefix the handler is mounted under (e.g. "/api/latch"). Default "/". */
59
+ /**
60
+ * Where the handler is mounted, for example `"/api/latch"`.
61
+ *
62
+ * @default "/"
63
+ */
68
64
  basePath?: string;
69
65
  /**
70
- * Shared secret guarding `POST /cron/run` (the system-wide schedule tick).
71
- * When set, the request must send it as `x-latch-cron-secret`. That route is
72
- * NOT user-authed — it fires all tenants' due schedules — so guard it at the
73
- * host (cron secret / network). Omit to disable the route entirely.
66
+ * Turns on `cron/run`, which calls `runtime.cron()` for every customer:
67
+ * fires due schedules and finishes interrupted answers. Requests must carry
68
+ * this secret, as `Authorization: Bearer <secret>` or in the
69
+ * `x-latch-cron-secret` header, with `GET` or `POST`. That means Vercel Cron
70
+ * can call it directly: set this to `process.env.CRON_SECRET` and point
71
+ * `vercel.json` at the route. Leave it out and the route doesn't exist.
74
72
  */
75
73
  cronSecret?: string;
76
74
  /**
77
- * The system-wide tick `POST /cron/run` fires. Required when `runtime` is a
78
- * resolver (DB-per-tenant): no principal exists on this route, so the host
79
- * must supply the tick that covers its tenants (each `runtime.cron()`). With
80
- * a static runtime it defaults to `runtime.cron()` — due schedules fired,
81
- * stalled runs reaped and resumed, in one call.
75
+ * What `POST /cron/run` does. Needed with a database per customer: call
76
+ * `cron()` on each customer's runtime.
77
+ *
78
+ * @default `runtime.cron()`
82
79
  */
83
80
  cronRun?: () => Promise<unknown>;
84
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgC,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AA0E5D,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC;;;;;;;OAOG;IACH,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E;;;;;;;;OAQG;IACH,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACnE;;;;;;;OAOG;IACH,oBAAoB,CAAC,EAAE,CACrB,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,OAAO,KACb,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAClC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,WAAW,CAAC,EACR,cAAc,CAAC,CAAC,CAAC,GACjB,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3F;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,MAAM,YAAY,GAAG,CACzB,OAAO,EAAE,OAAO,KACb,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;AAuHnC,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC5B,YAAY,CA2Yd"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgC,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AA0E5D,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC;;;;;OAKG;IACH,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E;;;;;;;OAOG;IACH,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACnE;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,CACrB,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,OAAO,KACb,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAClC;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,WAAW,CAAC,EACR,cAAc,CAAC,CAAC,CAAC,GACjB,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,0FAA0F;IAC1F,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E;;;;;OAKG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3F;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,MAAM,YAAY,GAAG,CACzB,OAAO,EAAE,OAAO,KACb,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;AAyInC,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC5B,YAAY,CA4Yd"}
package/dist/handler.js CHANGED
@@ -63,6 +63,25 @@ function connectionFailure(error, fallback) {
63
63
  const status = /\b(?:HTTP|status)\s(\d{3})\b/.exec(message)?.[1];
64
64
  return { error: fallback, ...(status ? { status: Number(status) } : {}) };
65
65
  }
66
+ /** The secret a cron request carries: a bearer token, or our own header. */
67
+ function cronSecretOf(request) {
68
+ // The scheme name is case-insensitive (RFC 9110); the token is not.
69
+ const bearer = request.headers.get("authorization")?.match(/^bearer\s+(.+)$/i);
70
+ if (bearer)
71
+ return bearer[1];
72
+ return request.headers.get("x-latch-cron-secret");
73
+ }
74
+ /** Compares in time that doesn't depend on where the strings first differ. */
75
+ function sameSecret(given, expected) {
76
+ if (given === null)
77
+ return false;
78
+ const a = new TextEncoder().encode(given);
79
+ const b = new TextEncoder().encode(expected);
80
+ let diff = a.length ^ b.length;
81
+ for (let i = 0; i < b.length; i++)
82
+ diff |= (a[i] ?? 0) ^ b[i];
83
+ return diff === 0;
84
+ }
66
85
  const json = (data, status = 200) => new Response(JSON.stringify(data), {
67
86
  status,
68
87
  headers: { "content-type": "application/json" },
@@ -516,13 +535,14 @@ export function createLatchHandler(config) {
516
535
  return json({ ok: true });
517
536
  }
518
537
  }
519
- // POST cron/run — system-wide tick: fire ALL tenants' due schedules, then
538
+ // cron/run — system-wide tick: fire ALL tenants' due schedules, then
520
539
  // reap + resume stalled runs. Host-guarded by `cronSecret`, NOT user auth.
521
- // Disabled if no secret set.
522
- if (seg[0] === "cron" && seg[1] === "run" && method === "POST") {
540
+ // Disabled if no secret set. GET as well as POST, and a bearer token as
541
+ // well as our header, because that's how Vercel Cron calls a URL.
542
+ if (seg[0] === "cron" && seg[1] === "run" && (method === "POST" || method === "GET")) {
523
543
  if (!config.cronSecret)
524
544
  return json({ error: "cron route disabled" }, 404);
525
- if (request.headers.get("x-latch-cron-secret") !== config.cronSecret) {
545
+ if (!sameSecret(cronSecretOf(request), config.cronSecret)) {
526
546
  return json({ error: "forbidden" }, 403);
527
547
  }
528
548
  // Host-supplied tick first — the only option for a resolver-based
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"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"}
package/dist/node.d.ts ADDED
@@ -0,0 +1,27 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ import type { LatchHandler } from "./handler.js";
3
+ /**
4
+ * The Latch handler for Node's `req` / `res`: Express, Fastify, NestJS, or a
5
+ * plain `http.createServer`. Request bodies and answers stream through; nothing
6
+ * is buffered.
7
+ *
8
+ * The returned function resolves `true` when it answered the request and
9
+ * `false` when the path isn't a Latch route, so your app can carry on:
10
+ *
11
+ * ```ts
12
+ * const latch = toNodeHandler(createLatchHandler({ runtime, resolveContext, basePath: "/api/latch" }));
13
+ * app.all("/api/latch/*", async (req, res, next) => {
14
+ * if (!(await latch(req, res))) next();
15
+ * });
16
+ * ```
17
+ *
18
+ * On Fastify, and NestJS on Fastify, pass the raw objects, and the body if
19
+ * Fastify already parsed it: `latch(request.raw, reply.raw, request.body)`.
20
+ * Better still, give the Latch route a passthrough content-type parser so the
21
+ * body streams (see the docs).
22
+ *
23
+ * It rejects if the answer's stream fails partway (the response is cut off);
24
+ * a client that leaves mid-answer is not an error.
25
+ */
26
+ export declare function toNodeHandler(handler: LatchHandler): (req: IncomingMessage, res: ServerResponse, parsedBody?: unknown) => Promise<boolean>;
27
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAIjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,YAAY,GACpB,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAOvF"}
package/dist/node.js ADDED
@@ -0,0 +1,147 @@
1
+ import { Readable } from "node:stream";
2
+ import { pipeline } from "node:stream/promises";
3
+ /**
4
+ * The Latch handler for Node's `req` / `res`: Express, Fastify, NestJS, or a
5
+ * plain `http.createServer`. Request bodies and answers stream through; nothing
6
+ * is buffered.
7
+ *
8
+ * The returned function resolves `true` when it answered the request and
9
+ * `false` when the path isn't a Latch route, so your app can carry on:
10
+ *
11
+ * ```ts
12
+ * const latch = toNodeHandler(createLatchHandler({ runtime, resolveContext, basePath: "/api/latch" }));
13
+ * app.all("/api/latch/*", async (req, res, next) => {
14
+ * if (!(await latch(req, res))) next();
15
+ * });
16
+ * ```
17
+ *
18
+ * On Fastify, and NestJS on Fastify, pass the raw objects, and the body if
19
+ * Fastify already parsed it: `latch(request.raw, reply.raw, request.body)`.
20
+ * Better still, give the Latch route a passthrough content-type parser so the
21
+ * body streams (see the docs).
22
+ *
23
+ * It rejects if the answer's stream fails partway (the response is cut off);
24
+ * a client that leaves mid-answer is not an error.
25
+ */
26
+ export function toNodeHandler(handler) {
27
+ return async (req, res, parsedBody) => {
28
+ const response = await handler(toWebRequest(req, parsedBody));
29
+ if (!response)
30
+ return false;
31
+ await writeNodeResponse(response, res);
32
+ return true;
33
+ };
34
+ }
35
+ /** Node request → Web Request, streaming the body. */
36
+ function toWebRequest(req, parsedBody) {
37
+ const host = req.headers.host ?? "localhost";
38
+ // A proxy chain sends "https,http": the first is what the client used.
39
+ // Without a proxy, the socket says whether this connection is TLS.
40
+ const forwarded = req.headers["x-forwarded-proto"];
41
+ const proto = (Array.isArray(forwarded) ? forwarded[0] : forwarded)?.split(",")[0]?.trim() ||
42
+ (req.socket?.encrypted ? "https" : "http");
43
+ const url = new URL(req.url ?? "/", `${proto}://${host}`);
44
+ const headers = new Headers();
45
+ for (const [key, value] of Object.entries(req.headers)) {
46
+ if (Array.isArray(value))
47
+ for (const v of value)
48
+ headers.append(key, v);
49
+ else if (value !== undefined)
50
+ headers.set(key, value);
51
+ }
52
+ const method = req.method ?? "GET";
53
+ return new Request(url, {
54
+ method,
55
+ headers,
56
+ body: method === "GET" || method === "HEAD" ? undefined : bodyOf(req, parsedBody),
57
+ duplex: "half",
58
+ });
59
+ }
60
+ /**
61
+ * The request body: the stream, unless a body parser read it first
62
+ * (`express.json()`, Fastify's default parser). Then it's what the parser left,
63
+ * on `req.body` or passed in, encoded again for the request's content type.
64
+ */
65
+ function bodyOf(req, given) {
66
+ // Fastify's passthrough parser hands the stream itself back as the body.
67
+ const passed = given instanceof Readable ? undefined : given;
68
+ if (passed === undefined && !req.readableEnded)
69
+ return lazyBodyOf(req);
70
+ const fromParser = passed ?? req.body;
71
+ if (fromParser === undefined) {
72
+ throw new Error("The request body was already read and nothing was kept: mount the Latch route before your body parser.");
73
+ }
74
+ if (typeof fromParser === "string" || fromParser instanceof Uint8Array)
75
+ return fromParser;
76
+ const type = String(req.headers["content-type"] ?? "").toLowerCase();
77
+ if (type.includes("application/x-www-form-urlencoded"))
78
+ return formOf(fromParser);
79
+ if (type === "" || type.includes("json"))
80
+ return JSON.stringify(fromParser);
81
+ throw new Error(`The request body was already parsed (${type}) and can't be sent on as it arrived: ` +
82
+ "mount the Latch route before your body parser.");
83
+ }
84
+ /**
85
+ * The request's body as a Web stream that doesn't touch `req` until something
86
+ * reads it. A route Latch declines leaves the body unread, for the host's next
87
+ * handler. (`Readable.toWeb` starts reading as soon as it's called.)
88
+ */
89
+ function lazyBodyOf(req) {
90
+ let reader;
91
+ return new ReadableStream({
92
+ async pull(controller) {
93
+ reader ??= Readable.toWeb(req).getReader();
94
+ const { done, value } = await reader.read();
95
+ if (done)
96
+ controller.close();
97
+ else
98
+ controller.enqueue(value);
99
+ },
100
+ cancel: (reason) => reader?.cancel(reason),
101
+ },
102
+ // Pull only when read: the default high-water mark of 1 pulls at once.
103
+ { highWaterMark: 0 });
104
+ }
105
+ /** A parsed form (`{ a: "1", b: ["2", "3"] }`) as form-encoded text again. */
106
+ function formOf(parsed) {
107
+ const form = new URLSearchParams();
108
+ for (const [key, value] of Object.entries(parsed)) {
109
+ for (const v of Array.isArray(value) ? value : [value]) {
110
+ if (typeof v === "object" && v !== null) {
111
+ throw new Error("The form body was parsed into nested objects: mount the Latch route before your body parser.");
112
+ }
113
+ form.append(key, String(v));
114
+ }
115
+ }
116
+ return form;
117
+ }
118
+ /** Web Response → Node response, streaming. */
119
+ async function writeNodeResponse(response, res) {
120
+ res.statusCode = response.status;
121
+ response.headers.forEach((value, key) => {
122
+ // Headers joins several Set-Cookie values into one, which breaks them.
123
+ if (key !== "set-cookie")
124
+ res.setHeader(key, value);
125
+ });
126
+ const cookies = response.headers.getSetCookie();
127
+ if (cookies.length > 0)
128
+ res.setHeader("set-cookie", cookies);
129
+ if (!response.body) {
130
+ res.end();
131
+ return;
132
+ }
133
+ // pipeline, not pipe: on an error, or when the client leaves, it closes both
134
+ // ends. A bare pipe leaves the error unhandled, and that can take the process
135
+ // down. The turn itself carries on and is saved on the server either way.
136
+ try {
137
+ await pipeline(Readable.fromWeb(response.body), res);
138
+ }
139
+ catch (e) {
140
+ // The client leaving isn't a failure; the answer's own stream failing is.
141
+ if (!CLIENT_LEFT.has(e.code ?? ""))
142
+ throw e;
143
+ }
144
+ }
145
+ /** How a write fails when the client has gone. */
146
+ const CLIENT_LEFT = new Set(["ERR_STREAM_PREMATURE_CLOSE", "ECONNRESET", "EPIPE"]);
147
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@intentface/latch-server",
3
- "version": "0.17.0",
4
- "description": "The mountable Latch HTTP surface — one framework-agnostic Web handler (chat, approvals, lists, MCP connection OAuth). Hono adapter in the /hono subpath.",
3
+ "version": "0.18.0",
4
+ "description": "The mountable Latch HTTP surface — one framework-agnostic Web handler (chat, approvals, lists, MCP connection OAuth). Hono adapter in the /hono subpath, Node (Express, Fastify, NestJS) in /node.",
5
5
  "keywords": [
6
6
  "ai",
7
7
  "ai-sdk",
@@ -9,7 +9,8 @@
9
9
  "llm",
10
10
  "http",
11
11
  "hono",
12
- "webhooks"
12
+ "webhooks",
13
+ "express"
13
14
  ],
14
15
  "license": "MIT",
15
16
  "type": "module",
@@ -24,6 +25,10 @@
24
25
  "./hono": {
25
26
  "types": "./dist/hono.d.ts",
26
27
  "import": "./dist/hono.js"
28
+ },
29
+ "./node": {
30
+ "types": "./dist/node.d.ts",
31
+ "import": "./dist/node.js"
27
32
  }
28
33
  },
29
34
  "files": [
@@ -36,8 +41,8 @@
36
41
  },
37
42
  "dependencies": {
38
43
  "croner": "^10.0.1",
39
- "@intentface/latch-core": "^0.17.0",
40
- "@intentface/latch-mcp": "^0.17.0"
44
+ "@intentface/latch-core": "^0.18.0",
45
+ "@intentface/latch-mcp": "^0.18.0"
41
46
  },
42
47
  "peerDependencies": {
43
48
  "ai": ">=7.0.0",
@@ -52,7 +57,8 @@
52
57
  "ai": "^7.0.106",
53
58
  "hono": "^4.6.0",
54
59
  "typescript": "^5.7.0",
55
- "vitest": "^4"
60
+ "vitest": "^4",
61
+ "@types/node": "^22"
56
62
  },
57
63
  "repository": {
58
64
  "type": "git",
@@ -60,7 +66,7 @@
60
66
  "directory": "packages/server"
61
67
  },
62
68
  "scripts": {
63
- "build": "tsc -p tsconfig.json",
69
+ "build": "tsc -p tsconfig.build.json",
64
70
  "typecheck": "tsc -p tsconfig.json --noEmit",
65
71
  "test": "vitest run"
66
72
  }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=handler.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handler.test.d.ts","sourceRoot":"","sources":["../src/handler.test.ts"],"names":[],"mappings":""}
@@ -1,343 +0,0 @@
1
- import { describe, expect, it, vi } from "vitest";
2
- import { createLatchHandler } from "./handler.js";
3
- /** Mirror of oauth.ts's payload half: `<csrf>.<b64url(JSON)>`. */
4
- function encodeState(payload) {
5
- const s = JSON.stringify(payload);
6
- let bin = "";
7
- for (const ch of new TextEncoder().encode(s))
8
- bin += String.fromCharCode(ch);
9
- const b64 = btoa(bin).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
10
- return `deadbeef.${b64}`;
11
- }
12
- function build(opts) {
13
- const start = vi.fn(async (_p, _o) => ({
14
- status: "redirect",
15
- authorizationUrl: "https://idp.example/authorize",
16
- }));
17
- const finish = vi.fn(async (_p, _params) => ({
18
- status: "authorized",
19
- }));
20
- const oauth = { isAuthorized: async () => false, start, finish, provider: () => ({}) };
21
- const conns = {
22
- oauth: (name) => (name === "loredex" ? oauth : undefined),
23
- status: async () => [],
24
- testTools: async () => [],
25
- };
26
- const resolveContext = vi.fn(opts?.resolveContext ?? (() => ({ orgId: "org_a", userId: "u1" })));
27
- const handler = createLatchHandler({
28
- runtime: {},
29
- connections: conns,
30
- basePath: "/api/latch",
31
- resolveContext,
32
- reconstructPrincipal: opts?.reconstructPrincipal,
33
- oauthFlowMaxAgeMs: opts?.oauthFlowMaxAgeMs,
34
- });
35
- return { handler, start, finish, resolveContext };
36
- }
37
- const authorize = (q = "") => new Request(`https://app.example/api/latch/connections/loredex/authorize${q}`);
38
- const callback = (state, code = "abc") => new Request(`https://app.example/api/latch/connections/loredex/callback?code=${code}&state=${encodeURIComponent(state)}`);
39
- describe("authorize", () => {
40
- it("pins the resolved principal (+ iat) into the flow state", async () => {
41
- const { handler, start } = build();
42
- const res = await handler(authorize("?returnTo=/chat/c1"));
43
- expect(res?.status).toBe(302);
44
- const state = start.mock.calls[0][1]?.state;
45
- expect(state.returnTo).toBe("/chat/c1");
46
- const pin = state.__latch;
47
- expect(pin.p).toEqual({ orgId: "org_a", userId: "u1" });
48
- expect(typeof pin.iat).toBe("number");
49
- expect(Math.abs(Date.now() - pin.iat)).toBeLessThan(5_000);
50
- });
51
- });
52
- describe("callback with a pinned principal", () => {
53
- const pinnedState = (iat = Date.now()) => encodeState({
54
- returnTo: "/chat/c1",
55
- __latch: { p: { orgId: "org_pinned", userId: "u_pinned" }, iat },
56
- });
57
- it("rebuilds identity from the pin — the session is never consulted", async () => {
58
- const { handler, finish, resolveContext } = build({
59
- // A live session would resolve to a DIFFERENT principal (the incident
60
- // shape: personal tenant). It must not be asked at all.
61
- resolveContext: () => {
62
- throw new Error("resolveContext must not run on a pinned callback");
63
- },
64
- });
65
- const res = await handler(callback(pinnedState()));
66
- expect(res?.status).toBe(302);
67
- expect(res?.headers.get("location")).toContain("connected=loredex");
68
- expect(resolveContext).not.toHaveBeenCalled();
69
- // finish — and therefore the token write — ran under the PINNED principal.
70
- expect(finish.mock.calls[0][0]).toEqual({ orgId: "org_pinned", userId: "u_pinned" });
71
- });
72
- it("routes the pin through reconstructPrincipal and 401s on null", async () => {
73
- const seen = [];
74
- const { handler, finish } = build({
75
- reconstructPrincipal: (identity) => {
76
- seen.push(identity);
77
- return null; // e.g. the user is no longer an org member
78
- },
79
- });
80
- const res = await handler(callback(pinnedState()));
81
- expect(res?.status).toBe(401);
82
- expect(seen).toEqual([{ orgId: "org_pinned", userId: "u_pinned" }]);
83
- expect(finish).not.toHaveBeenCalled();
84
- });
85
- it("rejects a stale pin with ?error=flow_expired", async () => {
86
- const { handler, finish } = build({ oauthFlowMaxAgeMs: 60_000 });
87
- const res = await handler(callback(pinnedState(Date.now() - 120_000)));
88
- expect(res?.status).toBe(302);
89
- const loc = res?.headers.get("location") ?? "";
90
- expect(loc).toContain("error=flow_expired");
91
- expect(loc.startsWith("/chat/c1")).toBe(true);
92
- expect(finish).not.toHaveBeenCalled();
93
- });
94
- });
95
- describe("callback without a pin", () => {
96
- it.each([
97
- ["no state param", "https://app.example/api/latch/connections/loredex/callback?code=abc"],
98
- ["malformed state", "https://app.example/api/latch/connections/loredex/callback?code=abc&state=not-a-state"],
99
- ])("%s is rejected as expired and never reaches the session", async (_label, href) => {
100
- const { handler, finish, resolveContext } = build({
101
- resolveContext: () => {
102
- throw new Error("resolveContext must not run on any callback");
103
- },
104
- });
105
- const res = await handler(new Request(href));
106
- expect(res?.status).toBe(302);
107
- const loc = res?.headers.get("location") ?? "";
108
- expect(loc.startsWith("/")).toBe(true);
109
- expect(loc).toContain("error=flow_expired");
110
- expect(resolveContext).not.toHaveBeenCalled();
111
- expect(finish).not.toHaveBeenCalled();
112
- });
113
- it("is rejected as expired — the session is never a stand-in for a flow", async () => {
114
- const { handler, finish, resolveContext } = build({
115
- resolveContext: () => {
116
- throw new Error("resolveContext must not run on any callback");
117
- },
118
- });
119
- const res = await handler(callback(encodeState({ returnTo: "/x" })));
120
- expect(res?.status).toBe(302);
121
- const loc = res?.headers.get("location") ?? "";
122
- expect(loc.startsWith("/x")).toBe(true);
123
- expect(loc).toContain("error=flow_expired");
124
- expect(resolveContext).not.toHaveBeenCalled();
125
- expect(finish).not.toHaveBeenCalled();
126
- });
127
- });
128
- function buildRoutes(opts) {
129
- const schedule = vi.fn(async (input) => ({
130
- id: "sch_1",
131
- ...input,
132
- }));
133
- const runScheduleNow = vi.fn(async (_i) => opts?.runNow ?? true);
134
- const unschedule = vi.fn(async (_i) => { });
135
- const listSchedules = vi.fn(async () => opts?.schedules ?? []);
136
- const listRuns = vi.fn(async () => [
137
- {
138
- id: "run_1",
139
- chatId: "chat_1",
140
- agent: "briefer",
141
- status: "awaiting_input",
142
- identity: { orgId: "org_a", userId: "u1", plan: "enterprise" },
143
- costTotal: 0.19,
144
- startedAt: 1,
145
- },
146
- ]);
147
- const handler = createLatchHandler({
148
- runtime: { schedule, runScheduleNow, unschedule, listSchedules, listRuns },
149
- connections: { oauth: () => undefined, status: async () => [], testTools: async () => [] },
150
- basePath: "/api/latch",
151
- resolveContext: () => ({ orgId: "org_a", userId: "u1" }),
152
- });
153
- return { handler, schedule, runScheduleNow, unschedule, listSchedules };
154
- }
155
- const post = (path, body) => new Request(`https://app.example/api/latch/${path}`, {
156
- method: "POST",
157
- ...(body === undefined ? {} : { body: JSON.stringify(body) }),
158
- });
159
- const get = (path) => new Request(`https://app.example/api/latch/${path}`);
160
- describe("POST /schedules", () => {
161
- it("forwards delivery and onParked to runtime.schedule", async () => {
162
- const { handler, schedule } = buildRoutes();
163
- const res = await handler(post("schedules", {
164
- agent: "briefer",
165
- cron: "0 8 * * *",
166
- timezone: "Europe/Helsinki",
167
- prompt: "morning brief",
168
- delivery: { kind: "slack", appId: "A1", channel: "C1" },
169
- onParked: "fire",
170
- }));
171
- expect(res?.status).toBe(200);
172
- const passed = schedule.mock.calls[0][0];
173
- expect(passed.delivery).toEqual({ kind: "slack", appId: "A1", channel: "C1" });
174
- expect(passed.onParked).toBe("fire");
175
- expect(passed.timezone).toBe("Europe/Helsinki");
176
- // Echoed back, so a caller can see what actually stuck.
177
- expect((await res.json()).schedule.delivery).toEqual({
178
- kind: "slack",
179
- appId: "A1",
180
- channel: "C1",
181
- });
182
- });
183
- it("omits both when unset — no invented defaults", async () => {
184
- const { handler, schedule } = buildRoutes();
185
- await handler(post("schedules", { agent: "briefer", cron: null, prompt: "brief" }));
186
- const passed = schedule.mock.calls[0][0];
187
- expect(passed.delivery).toBeUndefined();
188
- expect(passed.onParked).toBeUndefined();
189
- });
190
- it("400s an unknown onParked instead of silently defaulting it", async () => {
191
- const { handler, schedule } = buildRoutes();
192
- const res = await handler(post("schedules", { agent: "briefer", cron: null, prompt: "b", onParked: "skipp" }));
193
- expect(res?.status).toBe(400);
194
- expect(schedule).not.toHaveBeenCalled();
195
- });
196
- });
197
- describe("GET /schedules/:id and POST /schedules/:id/run-now", () => {
198
- it("returns one of the caller's schedules", async () => {
199
- const { handler } = buildRoutes({
200
- schedules: [{ id: "sch_1", agent: "briefer", prompt: "a" }],
201
- });
202
- const res = await handler(get("schedules/sch_1"));
203
- expect(res?.status).toBe(200);
204
- expect((await res.json()).schedule.id).toBe("sch_1");
205
- });
206
- it("404s an id that isn't in the caller's own list (another tenant's included)", async () => {
207
- const { handler } = buildRoutes({ schedules: [] });
208
- expect((await handler(get("schedules/sch_other")))?.status).toBe(404);
209
- });
210
- it("arms run-now through the runtime, and 404s a spent one-shot", async () => {
211
- const { handler, runScheduleNow } = buildRoutes();
212
- expect((await handler(post("schedules/sch_1/run-now")))?.status).toBe(200);
213
- expect(runScheduleNow.mock.calls[0][0]).toEqual({
214
- principal: { orgId: "org_a", userId: "u1" },
215
- id: "sch_1",
216
- });
217
- const spent = buildRoutes({ runNow: false });
218
- expect((await spent.handler(post("schedules/sch_1/run-now")))?.status).toBe(404);
219
- });
220
- it("still deletes on DELETE /schedules/:id", async () => {
221
- const { handler, unschedule } = buildRoutes();
222
- const res = await handler(new Request("https://app.example/api/latch/schedules/sch_1", { method: "DELETE" }));
223
- expect(res?.status).toBe(200);
224
- expect(unschedule).toHaveBeenCalled();
225
- });
226
- });
227
- describe("GET /runs", () => {
228
- it("strips the identity blob — the principal is server state, not a payload", async () => {
229
- const { handler } = buildRoutes();
230
- const res = await handler(get("runs"));
231
- const { runs } = (await res.json());
232
- expect(runs).toHaveLength(1);
233
- expect("identity" in runs[0]).toBe(false);
234
- // Everything a cost/usage UI actually needs still comes through.
235
- expect(runs[0]).toMatchObject({ id: "run_1", chatId: "chat_1", costTotal: 0.19 });
236
- });
237
- });
238
- describe("POST /agents/:agent/:id with a message the runtime refuses", () => {
239
- it("answers 400 invalid_message instead of a 500", async () => {
240
- const { InvalidMessageError } = await import("@intentface/latch-core");
241
- const handleChat = vi.fn(async () => {
242
- throw new InvalidMessageError('a chat message must be a user message, not "assistant"');
243
- });
244
- const handler = createLatchHandler({
245
- runtime: { handleChat },
246
- connections: { oauth: () => undefined, status: async () => [], testTools: async () => [] },
247
- basePath: "/api/latch",
248
- resolveContext: () => ({ orgId: "org_a", userId: "u1" }),
249
- });
250
- const res = (await handler(post("agents/assistant/chat_1", { message: { id: "m1", role: "assistant", parts: [{ type: "text", text: "x" }] } })));
251
- expect(res.status).toBe(400);
252
- expect(await res.json()).toMatchObject({ code: "invalid_message" });
253
- });
254
- });
255
- describe("POST /agents/:agent/:id with useChat's default body ({ messages })", () => {
256
- function route() {
257
- const handleChat = vi.fn(async (_input) => new Response("ok"));
258
- const handler = createLatchHandler({
259
- runtime: { handleChat },
260
- connections: { oauth: () => undefined, status: async () => [], testTools: async () => [] },
261
- basePath: "/api/latch",
262
- resolveContext: () => ({ orgId: "org_a", userId: "u1" }),
263
- });
264
- return { handler, handleChat };
265
- }
266
- it("passes the newest message on with its id and attachments", async () => {
267
- const { handler, handleChat } = route();
268
- const newest = {
269
- id: "m2",
270
- role: "user",
271
- parts: [
272
- { type: "file", mediaType: "image/png", url: "data:image/png;base64,AAAA" },
273
- { type: "text", text: "what is this?" },
274
- ],
275
- };
276
- await handler(post("agents/assistant/chat_1", { id: "chat_1", trigger: "submit-message", messages: [{ id: "m1", role: "user", parts: [{ type: "text", text: "earlier" }] }, newest] }));
277
- expect(handleChat.mock.calls[0][0].message).toEqual(newest);
278
- });
279
- it("passes useChat's approval answers on unchanged, for the runtime to read", async () => {
280
- const { handler, handleChat } = route();
281
- const answers = { id: "a1", role: "assistant", parts: [{ type: "tool-refund", toolCallId: "t1", state: "approval-responded", input: {}, approval: { id: "ap1", approved: true } }] };
282
- await handler(post("agents/assistant/chat_1", { messages: [answers] }));
283
- expect(handleChat.mock.calls[0][0].message).toEqual(answers);
284
- });
285
- it("still builds a message from { text }", async () => {
286
- const { handler, handleChat } = route();
287
- await handler(post("agents/assistant/chat_1", { text: "hello" }));
288
- expect(handleChat.mock.calls[0][0].message).toMatchObject({ role: "user", parts: [{ type: "text", text: "hello" }] });
289
- });
290
- });
291
- describe("POST /agents/:agent/:id regenerating or editing an earlier question", () => {
292
- it("answers 409 rewind_not_supported", async () => {
293
- const { RewindNotSupportedError } = await import("@intentface/latch-core");
294
- const handleChat = vi.fn(async () => {
295
- throw new RewindNotSupportedError("m1");
296
- });
297
- const handler = createLatchHandler({
298
- runtime: { handleChat },
299
- connections: { oauth: () => undefined, status: async () => [], testTools: async () => [] },
300
- basePath: "/api/latch",
301
- resolveContext: () => ({ orgId: "org_a", userId: "u1" }),
302
- });
303
- const res = (await handler(post("agents/assistant/chat_1", { message: { id: "m1", role: "user", parts: [{ type: "text", text: "x" }] } })));
304
- expect(res.status).toBe(409);
305
- expect(await res.json()).toMatchObject({ code: "rewind_not_supported" });
306
- });
307
- });
308
- describe("POST /agents/:agent/:id with params", () => {
309
- function route(impl) {
310
- const handleChat = vi.fn(impl);
311
- const handler = createLatchHandler({
312
- runtime: { handleChat },
313
- connections: { oauth: () => undefined, status: async () => [], testTools: async () => [] },
314
- basePath: "/api/latch",
315
- resolveContext: () => ({ orgId: "org_a", userId: "u1" }),
316
- });
317
- return { handler, handleChat };
318
- }
319
- const message = { id: "m1", role: "user", parts: [{ type: "text", text: "x" }] };
320
- it("passes body.params to the runtime, and nothing when absent", async () => {
321
- const { handler, handleChat } = route(async () => new Response("ok"));
322
- await handler(post("agents/support/chat_1", { message, params: { ticketId: "T-9" } }));
323
- await handler(post("agents/support/chat_1", { message }));
324
- expect(handleChat.mock.calls[0][0].params).toEqual({ ticketId: "T-9" });
325
- expect("params" in handleChat.mock.calls[1][0]).toBe(false);
326
- });
327
- it("answers 400 invalid_params and 409 params_fixed", async () => {
328
- const { InvalidParamsError, ParamsFixedError } = await import("@intentface/latch-core");
329
- const invalid = route(async () => {
330
- throw new InvalidParamsError('params for "support" don\'t match its schema');
331
- });
332
- const bad = (await invalid.handler(post("agents/support/chat_1", { message, params: {} })));
333
- expect(bad.status).toBe(400);
334
- expect(await bad.json()).toMatchObject({ code: "invalid_params" });
335
- const fixed = route(async () => {
336
- throw new ParamsFixedError("chat_1");
337
- });
338
- const changed = (await fixed.handler(post("agents/support/chat_1", { message, params: { ticketId: "T-10" } })));
339
- expect(changed.status).toBe(409);
340
- expect(await changed.json()).toMatchObject({ code: "params_fixed" });
341
- });
342
- });
343
- //# sourceMappingURL=handler.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handler.test.js","sourceRoot":"","sources":["../src/handler.test.ts"],"names":[],"mappings":"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"}