@rindle/router 0.1.2 → 0.1.3

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/http.d.ts CHANGED
@@ -4,6 +4,7 @@ export declare const ROUTER_PATHS: {
4
4
  readonly materialize: "/materialize";
5
5
  readonly query: "/query";
6
6
  readonly dematerialize: "/dematerialize";
7
+ readonly executeSqlRead: "/execute-sql-read";
7
8
  readonly assertPins: "/assert-pins";
8
9
  };
9
10
  /** Dispatch one parsed request to the router (the runtime-agnostic core — drive it from any HTTP
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,eAAO,MAAM,YAAY;;;;;CAKf,CAAC;AAEX;;iDAEiD;AACjD,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAgBvG;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,+FAA+F;IAC/F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,mGAAmG;AACnG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CAyBnF;AAOD;;mEAEmE;AACnE,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,IAAI,EAAE,SAAS,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,sBAAsB,GAAG,eAAe,CAgBnF"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,eAAO,MAAM,YAAY;;;;;;CAMf,CAAC;AAEX;;iDAEiD;AACjD,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAkBvG;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,+FAA+F;IAC/F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,mGAAmG;AACnG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CAyBnF;AAOD;;mEAEmE;AACnE,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,IAAI,EAAE,SAAS,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,sBAAsB,GAAG,eAAe,CAgBnF"}
package/dist/http.js CHANGED
@@ -10,6 +10,7 @@ export const ROUTER_PATHS = {
10
10
  materialize: "/materialize",
11
11
  query: "/query",
12
12
  dematerialize: "/dematerialize",
13
+ executeSqlRead: "/execute-sql-read",
13
14
  assertPins: "/assert-pins",
14
15
  };
15
16
  /** Dispatch one parsed request to the router (the runtime-agnostic core — drive it from any HTTP
@@ -26,6 +27,8 @@ export function dispatchRouter(router, path, body) {
26
27
  return router.query(msg);
27
28
  case ROUTER_PATHS.dematerialize:
28
29
  return router.dematerialize(msg);
30
+ case ROUTER_PATHS.executeSqlRead:
31
+ return router.executeSqlRead(msg);
29
32
  case ROUTER_PATHS.assertPins:
30
33
  return router.assertPins(msg.pins ?? []).then(() => ({ ok: true }));
31
34
  default:
package/dist/http.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
package/dist/router.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { type DematerializeInput, type DematerializeOutput, type MaterializeInput, type MaterializeOutput, type MigrateInput, type MigrateOutput, type MutationRejection, type MutationRejectionOutput, type QueryOnceInput, type QueryOnceOutput, type RindleDaemonClient, type RowChangeTxn, type RowChangeTxnOutput, type SqlTxn, type SqlTxnOutput } from "@rindle/daemon-client";
1
+ import { type DematerializeInput, type DematerializeOutput, type MaterializeInput, type MaterializeOutput, type MigrateInput, type MigrateOutput, type MutationRejection, type MutationRejectionOutput, type QueryOnceInput, type QueryOnceOutput, type RindleDaemonClient, type RowChangeTxn, type RowChangeTxnOutput, type SqlRead, type SqlReadOutput, type SqlTxn, type SqlTxnOutput } from "@rindle/daemon-client";
2
2
  import type { Follower, FollowerRegistry } from "./registry.ts";
3
3
  /** Build a control-plane client for one follower (the seam tests inject recording fakes through). */
4
4
  export type FollowerClientFactory = (follower: Follower) => RindleDaemonClient;
@@ -26,6 +26,13 @@ export declare class RoutingReadClient implements RindleDaemonClient {
26
26
  constructor(opts: RoutingReadClientOptions);
27
27
  materialize(input: MaterializeInput): Promise<MaterializeOutput>;
28
28
  query(input: QueryOnceInput): Promise<QueryOnceOutput>;
29
+ /** A raw one-shot SQL read placed on ONE follower (its read-only connection serves the latest
30
+ * committed REPLICA snapshot — eventually consistent; the api-server routes `consistency:"strong"`
31
+ * reads to the master instead, never here). No lease/subscription and no follow-up ws connect, so
32
+ * nothing to stamp. Placement key: the caller's `routingKey` (co-locate by tenant) ?? the SQL text
33
+ * (deterministic, spreads distinct queries + warms each follower's cache for the ones it owns; a
34
+ * single hot query should pass a `routingKey` to spread it). */
35
+ executeSqlRead(input: SqlRead): Promise<SqlReadOutput>;
29
36
  /** Un-pin / drop by query identity — fans across ALL live followers, because a `materializationId`
30
37
  * is follower-local and unroutable and un-pin is by NAME (§4.2). `removed` is true if any
31
38
  * follower removed it. */
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAWA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,MAAM,EACX,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEhE,qGAAqG;AACrG,MAAM,MAAM,qBAAqB,GAAG,CAAC,QAAQ,EAAE,QAAQ,KAAK,kBAAkB,CAAC;AAE/E,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B;wEACoE;IACpE,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC;uEACmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;2EAC2E;AAC3E,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,MAAM,OAAO;;CAKvB;AAED,qBAAa,iBAAkB,YAAW,kBAAkB;IAC1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAwB;IAC1D;2FACuF;IACvF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkE;gBAE9E,IAAI,EAAE,wBAAwB;IAapC,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAMhE,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAQ5D;;+BAE2B;IACrB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAS5E;;;mFAG+E;IACzE,UAAU,CAAC,IAAI,EAAE,SAAS,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBlE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAGpD,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAG3E,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAGpE,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAMrD,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,QAAQ;CAOjB"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAYA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEhE,qGAAqG;AACrG,MAAM,MAAM,qBAAqB,GAAG,CAAC,QAAQ,EAAE,QAAQ,KAAK,kBAAkB,CAAC;AAE/E,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B;wEACoE;IACpE,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC;uEACmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;2EAC2E;AAC3E,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,MAAM,OAAO;;CAKvB;AAED,qBAAa,iBAAkB,YAAW,kBAAkB;IAC1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAwB;IAC1D;2FACuF;IACvF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkE;gBAE9E,IAAI,EAAE,wBAAwB;IAapC,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAMhE,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAQ5D;;;;;qEAKiE;IAC3D,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAK5D;;+BAE2B;IACrB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAS5E;;;mFAG+E;IACzE,UAAU,CAAC,IAAI,EAAE,SAAS,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBlE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAGpD,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAG3E,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAGpE,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAMrD,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,QAAQ;CAOjB"}
package/dist/router.js CHANGED
@@ -1,7 +1,8 @@
1
1
  // The stateless routing read-client (READ-ROUTER-DESIGN.md §2.1). From the api-server's view it IS
2
- // the read daemon — it implements `RindleDaemonClient` for the read legs (`materialize`, `query`)
3
- // and routes each to ONE follower by HRW, stamping that follower's public `wsEndpoint` onto the
4
- // output so the browser connects to the node holding its lease. It also exposes an EXPLICIT fleet
2
+ // the read daemon — it implements `RindleDaemonClient` for the read legs (`materialize`, `query`,
3
+ // and raw `executeSqlRead`) and routes each to ONE follower by HRW, stamping the follower's public
4
+ // `wsEndpoint` onto the lease-bearing outputs so the browser connects to the node holding its lease
5
+ // (a one-shot `executeSqlRead` has no lease, so nothing to stamp). It also exposes an EXPLICIT fleet
5
6
  // pin-assert (`assertPins`) that fans a pin across ALL live followers — distinct, on purpose, from a
6
7
  // per-viewer `materialize` (never inferred from `policy.kind`, §4). It holds NO per-session and NO
7
8
  // pin state: routing is a pure function of `(key, live())`, so a fresh instance routes identically.
@@ -47,6 +48,16 @@ export class RoutingReadClient {
47
48
  const out = await this.clientOf(f).query(input);
48
49
  return { ...out, wsEndpoint: f.wsEndpoint };
49
50
  }
51
+ /** A raw one-shot SQL read placed on ONE follower (its read-only connection serves the latest
52
+ * committed REPLICA snapshot — eventually consistent; the api-server routes `consistency:"strong"`
53
+ * reads to the master instead, never here). No lease/subscription and no follow-up ws connect, so
54
+ * nothing to stamp. Placement key: the caller's `routingKey` (co-locate by tenant) ?? the SQL text
55
+ * (deterministic, spreads distinct queries + warms each follower's cache for the ones it owns; a
56
+ * single hot query should pass a `routingKey` to spread it). */
57
+ async executeSqlRead(input) {
58
+ const f = this.place(input.routingKey ?? input.sql);
59
+ return this.clientOf(f).executeSqlRead(input);
60
+ }
50
61
  /** Un-pin / drop by query identity — fans across ALL live followers, because a `materializationId`
51
62
  * is follower-local and unroutable and un-pin is by NAME (§4.2). `removed` is true if any
52
63
  * follower removed it. */
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rindle/router",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -25,7 +25,7 @@
25
25
  "README.md"
26
26
  ],
27
27
  "dependencies": {
28
- "@rindle/daemon-client": "0.1.2"
28
+ "@rindle/daemon-client": "0.1.3"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@types/node": "^22.10.0",
package/src/http.ts CHANGED
@@ -17,6 +17,7 @@ export const ROUTER_PATHS = {
17
17
  materialize: "/materialize",
18
18
  query: "/query",
19
19
  dematerialize: "/dematerialize",
20
+ executeSqlRead: "/execute-sql-read",
20
21
  assertPins: "/assert-pins",
21
22
  } as const;
22
23
 
@@ -34,6 +35,8 @@ export function dispatchRouter(router: RoutingReadClient, path: string, body: un
34
35
  return router.query(msg as unknown as Parameters<RoutingReadClient["query"]>[0]);
35
36
  case ROUTER_PATHS.dematerialize:
36
37
  return router.dematerialize(msg as Parameters<RoutingReadClient["dematerialize"]>[0]);
38
+ case ROUTER_PATHS.executeSqlRead:
39
+ return router.executeSqlRead(msg as unknown as Parameters<RoutingReadClient["executeSqlRead"]>[0]);
37
40
  case ROUTER_PATHS.assertPins:
38
41
  return router.assertPins((msg.pins as MaterializeInput[]) ?? []).then(() => ({ ok: true }));
39
42
  default:
package/src/router.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  // The stateless routing read-client (READ-ROUTER-DESIGN.md §2.1). From the api-server's view it IS
2
- // the read daemon — it implements `RindleDaemonClient` for the read legs (`materialize`, `query`)
3
- // and routes each to ONE follower by HRW, stamping that follower's public `wsEndpoint` onto the
4
- // output so the browser connects to the node holding its lease. It also exposes an EXPLICIT fleet
2
+ // the read daemon — it implements `RindleDaemonClient` for the read legs (`materialize`, `query`,
3
+ // and raw `executeSqlRead`) and routes each to ONE follower by HRW, stamping the follower's public
4
+ // `wsEndpoint` onto the lease-bearing outputs so the browser connects to the node holding its lease
5
+ // (a one-shot `executeSqlRead` has no lease, so nothing to stamp). It also exposes an EXPLICIT fleet
5
6
  // pin-assert (`assertPins`) that fans a pin across ALL live followers — distinct, on purpose, from a
6
7
  // per-viewer `materialize` (never inferred from `policy.kind`, §4). It holds NO per-session and NO
7
8
  // pin state: routing is a pure function of `(key, live())`, so a fresh instance routes identically.
@@ -24,6 +25,8 @@ import {
24
25
  type RindleDaemonClient,
25
26
  type RowChangeTxn,
26
27
  type RowChangeTxnOutput,
28
+ type SqlRead,
29
+ type SqlReadOutput,
27
30
  type SqlTxn,
28
31
  type SqlTxnOutput,
29
32
  } from "@rindle/daemon-client";
@@ -88,6 +91,17 @@ export class RoutingReadClient implements RindleDaemonClient {
88
91
  return { ...out, wsEndpoint: f.wsEndpoint };
89
92
  }
90
93
 
94
+ /** A raw one-shot SQL read placed on ONE follower (its read-only connection serves the latest
95
+ * committed REPLICA snapshot — eventually consistent; the api-server routes `consistency:"strong"`
96
+ * reads to the master instead, never here). No lease/subscription and no follow-up ws connect, so
97
+ * nothing to stamp. Placement key: the caller's `routingKey` (co-locate by tenant) ?? the SQL text
98
+ * (deterministic, spreads distinct queries + warms each follower's cache for the ones it owns; a
99
+ * single hot query should pass a `routingKey` to spread it). */
100
+ async executeSqlRead(input: SqlRead): Promise<SqlReadOutput> {
101
+ const f = this.place(input.routingKey ?? input.sql);
102
+ return this.clientOf(f).executeSqlRead(input);
103
+ }
104
+
91
105
  /** Un-pin / drop by query identity — fans across ALL live followers, because a `materializationId`
92
106
  * is follower-local and unroutable and un-pin is by NAME (§4.2). `removed` is true if any
93
107
  * follower removed it. */