@astrale-os/kernel-client 0.2.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.
Files changed (257) hide show
  1. package/dist/client/batch.d.ts +26 -0
  2. package/dist/client/batch.d.ts.map +1 -0
  3. package/dist/client/batch.js +8 -0
  4. package/dist/client/batch.js.map +1 -0
  5. package/dist/client/bound.d.ts +27 -0
  6. package/dist/client/bound.d.ts.map +1 -0
  7. package/dist/client/bound.js +14 -0
  8. package/dist/client/bound.js.map +1 -0
  9. package/dist/client/client.d.ts +93 -0
  10. package/dist/client/client.d.ts.map +1 -0
  11. package/dist/client/client.js +393 -0
  12. package/dist/client/client.js.map +1 -0
  13. package/dist/client/config.d.ts +112 -0
  14. package/dist/client/config.d.ts.map +1 -0
  15. package/dist/client/config.js +10 -0
  16. package/dist/client/config.js.map +1 -0
  17. package/dist/client/fn-map.d.ts +61 -0
  18. package/dist/client/fn-map.d.ts.map +1 -0
  19. package/dist/client/fn-map.js +2 -0
  20. package/dist/client/fn-map.js.map +1 -0
  21. package/dist/client/freeze.d.ts +32 -0
  22. package/dist/client/freeze.d.ts.map +1 -0
  23. package/dist/client/freeze.js +42 -0
  24. package/dist/client/freeze.js.map +1 -0
  25. package/dist/client/hooks.d.ts +49 -0
  26. package/dist/client/hooks.d.ts.map +1 -0
  27. package/dist/client/hooks.js +2 -0
  28. package/dist/client/hooks.js.map +1 -0
  29. package/dist/client/index.d.ts +7 -0
  30. package/dist/client/index.d.ts.map +1 -0
  31. package/dist/client/index.js +2 -0
  32. package/dist/client/index.js.map +1 -0
  33. package/dist/delegation/cache.d.ts +133 -0
  34. package/dist/delegation/cache.d.ts.map +1 -0
  35. package/dist/delegation/cache.js +258 -0
  36. package/dist/delegation/cache.js.map +1 -0
  37. package/dist/delegation/errors.d.ts +44 -0
  38. package/dist/delegation/errors.d.ts.map +1 -0
  39. package/dist/delegation/errors.js +62 -0
  40. package/dist/delegation/errors.js.map +1 -0
  41. package/dist/delegation/index.d.ts +6 -0
  42. package/dist/delegation/index.d.ts.map +1 -0
  43. package/dist/delegation/index.js +4 -0
  44. package/dist/delegation/index.js.map +1 -0
  45. package/dist/delegation/policy.d.ts +175 -0
  46. package/dist/delegation/policy.d.ts.map +1 -0
  47. package/dist/delegation/policy.js +109 -0
  48. package/dist/delegation/policy.js.map +1 -0
  49. package/dist/errors/errors.d.ts +103 -0
  50. package/dist/errors/errors.d.ts.map +1 -0
  51. package/dist/errors/errors.js +170 -0
  52. package/dist/errors/errors.js.map +1 -0
  53. package/dist/errors/index.d.ts +4 -0
  54. package/dist/errors/index.d.ts.map +1 -0
  55. package/dist/errors/index.js +3 -0
  56. package/dist/errors/index.js.map +1 -0
  57. package/dist/errors/session-error.d.ts +21 -0
  58. package/dist/errors/session-error.d.ts.map +1 -0
  59. package/dist/errors/session-error.js +25 -0
  60. package/dist/errors/session-error.js.map +1 -0
  61. package/dist/index.d.ts +17 -0
  62. package/dist/index.d.ts.map +1 -0
  63. package/dist/index.js +10 -0
  64. package/dist/index.js.map +1 -0
  65. package/dist/pacer/batcher.d.ts +11 -0
  66. package/dist/pacer/batcher.d.ts.map +1 -0
  67. package/dist/pacer/batcher.js +15 -0
  68. package/dist/pacer/batcher.js.map +1 -0
  69. package/dist/pacer/defaults.d.ts +18 -0
  70. package/dist/pacer/defaults.d.ts.map +1 -0
  71. package/dist/pacer/defaults.js +18 -0
  72. package/dist/pacer/defaults.js.map +1 -0
  73. package/dist/pacer/index.d.ts +10 -0
  74. package/dist/pacer/index.d.ts.map +1 -0
  75. package/dist/pacer/index.js +11 -0
  76. package/dist/pacer/index.js.map +1 -0
  77. package/dist/pacer/queue.d.ts +11 -0
  78. package/dist/pacer/queue.d.ts.map +1 -0
  79. package/dist/pacer/queue.js +15 -0
  80. package/dist/pacer/queue.js.map +1 -0
  81. package/dist/pacer/rate-limiter.d.ts +11 -0
  82. package/dist/pacer/rate-limiter.d.ts.map +1 -0
  83. package/dist/pacer/rate-limiter.js +15 -0
  84. package/dist/pacer/rate-limiter.js.map +1 -0
  85. package/dist/pacer/retry.d.ts +14 -0
  86. package/dist/pacer/retry.d.ts.map +1 -0
  87. package/dist/pacer/retry.js +50 -0
  88. package/dist/pacer/retry.js.map +1 -0
  89. package/dist/persistence/index.d.ts +3 -0
  90. package/dist/persistence/index.d.ts.map +1 -0
  91. package/dist/persistence/index.js +2 -0
  92. package/dist/persistence/index.js.map +1 -0
  93. package/dist/persistence/persistence.d.ts +52 -0
  94. package/dist/persistence/persistence.d.ts.map +1 -0
  95. package/dist/persistence/persistence.js +32 -0
  96. package/dist/persistence/persistence.js.map +1 -0
  97. package/dist/pool/errors.d.ts +13 -0
  98. package/dist/pool/errors.d.ts.map +1 -0
  99. package/dist/pool/errors.js +16 -0
  100. package/dist/pool/errors.js.map +1 -0
  101. package/dist/pool/index.d.ts +4 -0
  102. package/dist/pool/index.d.ts.map +1 -0
  103. package/dist/pool/index.js +3 -0
  104. package/dist/pool/index.js.map +1 -0
  105. package/dist/pool/pool.d.ts +63 -0
  106. package/dist/pool/pool.d.ts.map +1 -0
  107. package/dist/pool/pool.js +87 -0
  108. package/dist/pool/pool.js.map +1 -0
  109. package/dist/redirect/errors.d.ts +45 -0
  110. package/dist/redirect/errors.d.ts.map +1 -0
  111. package/dist/redirect/errors.js +52 -0
  112. package/dist/redirect/errors.js.map +1 -0
  113. package/dist/redirect/index.d.ts +4 -0
  114. package/dist/redirect/index.d.ts.map +1 -0
  115. package/dist/redirect/index.js +3 -0
  116. package/dist/redirect/index.js.map +1 -0
  117. package/dist/redirect/policy.d.ts +79 -0
  118. package/dist/redirect/policy.d.ts.map +1 -0
  119. package/dist/redirect/policy.js +69 -0
  120. package/dist/redirect/policy.js.map +1 -0
  121. package/dist/schema/call-args.d.ts +6 -0
  122. package/dist/schema/call-args.d.ts.map +1 -0
  123. package/dist/schema/call-args.js +21 -0
  124. package/dist/schema/call-args.js.map +1 -0
  125. package/dist/schema/class-proxy.d.ts +8 -0
  126. package/dist/schema/class-proxy.d.ts.map +1 -0
  127. package/dist/schema/class-proxy.js +38 -0
  128. package/dist/schema/class-proxy.js.map +1 -0
  129. package/dist/schema/extract.d.ts +9 -0
  130. package/dist/schema/extract.d.ts.map +1 -0
  131. package/dist/schema/extract.js +16 -0
  132. package/dist/schema/extract.js.map +1 -0
  133. package/dist/schema/from-entries.d.ts +12 -0
  134. package/dist/schema/from-entries.d.ts.map +1 -0
  135. package/dist/schema/from-entries.js +39 -0
  136. package/dist/schema/from-entries.js.map +1 -0
  137. package/dist/schema/index.d.ts +11 -0
  138. package/dist/schema/index.d.ts.map +1 -0
  139. package/dist/schema/index.js +9 -0
  140. package/dist/schema/index.js.map +1 -0
  141. package/dist/schema/node-proxy.d.ts +9 -0
  142. package/dist/schema/node-proxy.d.ts.map +1 -0
  143. package/dist/schema/node-proxy.js +32 -0
  144. package/dist/schema/node-proxy.js.map +1 -0
  145. package/dist/schema/proxy-types.d.ts +112 -0
  146. package/dist/schema/proxy-types.d.ts.map +1 -0
  147. package/dist/schema/proxy-types.js +2 -0
  148. package/dist/schema/proxy-types.js.map +1 -0
  149. package/dist/schema/registry.d.ts +51 -0
  150. package/dist/schema/registry.d.ts.map +1 -0
  151. package/dist/schema/registry.js +111 -0
  152. package/dist/schema/registry.js.map +1 -0
  153. package/dist/schema/resolve.d.ts +26 -0
  154. package/dist/schema/resolve.d.ts.map +1 -0
  155. package/dist/schema/resolve.js +27 -0
  156. package/dist/schema/resolve.js.map +1 -0
  157. package/dist/schema/typed-client.d.ts +10 -0
  158. package/dist/schema/typed-client.d.ts.map +1 -0
  159. package/dist/schema/typed-client.js +26 -0
  160. package/dist/schema/typed-client.js.map +1 -0
  161. package/dist/schema/types.d.ts +9 -0
  162. package/dist/schema/types.d.ts.map +1 -0
  163. package/dist/schema/types.js +2 -0
  164. package/dist/schema/types.js.map +1 -0
  165. package/dist/session/bound.d.ts +11 -0
  166. package/dist/session/bound.d.ts.map +1 -0
  167. package/dist/session/bound.js +24 -0
  168. package/dist/session/bound.js.map +1 -0
  169. package/dist/session/client-session.d.ts +61 -0
  170. package/dist/session/client-session.d.ts.map +1 -0
  171. package/dist/session/client-session.js +635 -0
  172. package/dist/session/client-session.js.map +1 -0
  173. package/dist/session/config.d.ts +157 -0
  174. package/dist/session/config.d.ts.map +1 -0
  175. package/dist/session/config.js +2 -0
  176. package/dist/session/config.js.map +1 -0
  177. package/dist/session/errors/index.d.ts +6 -0
  178. package/dist/session/errors/index.d.ts.map +1 -0
  179. package/dist/session/errors/index.js +8 -0
  180. package/dist/session/errors/index.js.map +1 -0
  181. package/dist/session/errors/session-errors.d.ts +52 -0
  182. package/dist/session/errors/session-errors.d.ts.map +1 -0
  183. package/dist/session/errors/session-errors.js +70 -0
  184. package/dist/session/errors/session-errors.js.map +1 -0
  185. package/dist/session/forward.d.ts +14 -0
  186. package/dist/session/forward.d.ts.map +1 -0
  187. package/dist/session/forward.js +44 -0
  188. package/dist/session/forward.js.map +1 -0
  189. package/dist/session/helpers.d.ts +23 -0
  190. package/dist/session/helpers.d.ts.map +1 -0
  191. package/dist/session/helpers.js +56 -0
  192. package/dist/session/helpers.js.map +1 -0
  193. package/dist/session/hooks.d.ts +140 -0
  194. package/dist/session/hooks.d.ts.map +1 -0
  195. package/dist/session/hooks.js +2 -0
  196. package/dist/session/hooks.js.map +1 -0
  197. package/dist/session/index.d.ts +6 -0
  198. package/dist/session/index.d.ts.map +1 -0
  199. package/dist/session/index.js +3 -0
  200. package/dist/session/index.js.map +1 -0
  201. package/dist/session/types.d.ts +38 -0
  202. package/dist/session/types.d.ts.map +1 -0
  203. package/dist/session/types.js +2 -0
  204. package/dist/session/types.js.map +1 -0
  205. package/dist/transport/binary.d.ts +15 -0
  206. package/dist/transport/binary.d.ts.map +1 -0
  207. package/dist/transport/binary.js +2 -0
  208. package/dist/transport/binary.js.map +1 -0
  209. package/dist/transport/contract.d.ts +58 -0
  210. package/dist/transport/contract.d.ts.map +1 -0
  211. package/dist/transport/contract.js +11 -0
  212. package/dist/transport/contract.js.map +1 -0
  213. package/dist/transport/fetch.d.ts +28 -0
  214. package/dist/transport/fetch.d.ts.map +1 -0
  215. package/dist/transport/fetch.js +74 -0
  216. package/dist/transport/fetch.js.map +1 -0
  217. package/dist/transport/http-envelope.d.ts +49 -0
  218. package/dist/transport/http-envelope.d.ts.map +1 -0
  219. package/dist/transport/http-envelope.js +405 -0
  220. package/dist/transport/http-envelope.js.map +1 -0
  221. package/dist/transport/http-routed.d.ts +61 -0
  222. package/dist/transport/http-routed.d.ts.map +1 -0
  223. package/dist/transport/http-routed.js +409 -0
  224. package/dist/transport/http-routed.js.map +1 -0
  225. package/dist/transport/index.d.ts +8 -0
  226. package/dist/transport/index.d.ts.map +1 -0
  227. package/dist/transport/index.js +6 -0
  228. package/dist/transport/index.js.map +1 -0
  229. package/dist/transport/request-id.d.ts +9 -0
  230. package/dist/transport/request-id.d.ts.map +1 -0
  231. package/dist/transport/request-id.js +12 -0
  232. package/dist/transport/request-id.js.map +1 -0
  233. package/dist/transport/ws-envelope.d.ts +74 -0
  234. package/dist/transport/ws-envelope.d.ts.map +1 -0
  235. package/dist/transport/ws-envelope.js +560 -0
  236. package/dist/transport/ws-envelope.js.map +1 -0
  237. package/dist/util/race-signal.d.ts +12 -0
  238. package/dist/util/race-signal.d.ts.map +1 -0
  239. package/dist/util/race-signal.js +34 -0
  240. package/dist/util/race-signal.js.map +1 -0
  241. package/dist/wire/controller.d.ts +38 -0
  242. package/dist/wire/controller.d.ts.map +1 -0
  243. package/dist/wire/controller.js +38 -0
  244. package/dist/wire/controller.js.map +1 -0
  245. package/dist/wire/index.d.ts +7 -0
  246. package/dist/wire/index.d.ts.map +1 -0
  247. package/dist/wire/index.js +4 -0
  248. package/dist/wire/index.js.map +1 -0
  249. package/dist/wire/meta.d.ts +81 -0
  250. package/dist/wire/meta.d.ts.map +1 -0
  251. package/dist/wire/meta.js +44 -0
  252. package/dist/wire/meta.js.map +1 -0
  253. package/dist/wire/sse.d.ts +67 -0
  254. package/dist/wire/sse.d.ts.map +1 -0
  255. package/dist/wire/sse.js +170 -0
  256. package/dist/wire/sse.js.map +1 -0
  257. package/package.json +104 -0
@@ -0,0 +1,111 @@
1
+ import { Ref } from '@astrale-os/kernel-core/domain';
2
+ import { dequal } from 'dequal';
3
+ import { resolveMethodKey } from './resolve';
4
+ const OWNER_NAMESPACES = ['class', 'interface'];
5
+ /**
6
+ * Cross-realm brand so `isSchemaRegistry(x)` works even when two copies
7
+ * of `@astrale-os/kernel-client` end up in the same process (peer-dep
8
+ * drift, iframe + parent page, etc). `instanceof SchemaRegistry` fails
9
+ * in that case; the Symbol.for-based check does not.
10
+ */
11
+ export const SCHEMA_REGISTRY_BRAND = Symbol.for('astrale.SchemaRegistry');
12
+ /**
13
+ * Client-side cache of function schemas keyed by canonical ref.
14
+ *
15
+ * Two ways to populate it:
16
+ * - `load(schemas)` — one-shot, rejects duplicates. Used when the caller
17
+ * brings the schemas with them (static domain imports, `Function.list`
18
+ * prefetch).
19
+ * - `save(schema)` — upsert learned from a redirect response. Strict:
20
+ * input/output/output-mode must match any existing entry; only `binding`
21
+ * is allowed to change (URL relocation is legitimate, contract drift is
22
+ * not).
23
+ */
24
+ export class SchemaRegistry {
25
+ [SCHEMA_REGISTRY_BRAND] = true;
26
+ methods = new Map();
27
+ load(schemas) {
28
+ for (const schema of schemas) {
29
+ if (this.methods.has(schema.ref)) {
30
+ throw new Error(`SchemaRegistry: duplicate method ref "${schema.ref}". ` +
31
+ `A schema with this ref is already registered. ` +
32
+ `This can happen when two domains define the same class and method name.`);
33
+ }
34
+ this.methods.set(schema.ref, schema);
35
+ }
36
+ }
37
+ /**
38
+ * Upsert a schema — typically one learned from a `redirect` response.
39
+ *
40
+ * If no entry exists for the ref, inserts verbatim. If an entry exists,
41
+ * asserts that the contract shape (input / output / output mode) matches
42
+ * and updates only the `binding`. Contract drift throws — a server that
43
+ * ships a mismatched schema is either misconfigured or malicious.
44
+ */
45
+ save(schema) {
46
+ const existing = this.methods.get(schema.ref);
47
+ if (!existing) {
48
+ this.methods.set(schema.ref, schema);
49
+ return;
50
+ }
51
+ if (!sameContract(existing, schema)) {
52
+ throw new Error(`SchemaRegistry.save: contract mismatch for "${schema.ref}". ` +
53
+ `The saved schema's input/output or output mode differs from the ` +
54
+ `previously registered version. Refusing to clobber a registered contract.`);
55
+ }
56
+ this.methods.set(schema.ref, { ...existing, binding: schema.binding });
57
+ }
58
+ get(ref) {
59
+ return this.methods.get(ref);
60
+ }
61
+ has(ref) {
62
+ return this.methods.has(ref);
63
+ }
64
+ clear() {
65
+ this.methods.clear();
66
+ }
67
+ /**
68
+ * Type guard for `SchemaRegistry | FunctionSchema[]` unions. Works
69
+ * across package-duplicate realms, unlike `instanceof`.
70
+ */
71
+ static is(value) {
72
+ return (typeof value === 'object' &&
73
+ value !== null &&
74
+ value[SCHEMA_REGISTRY_BRAND] === true);
75
+ }
76
+ /**
77
+ * Resolve a wire method address to its schema entry.
78
+ *
79
+ * Delegates normalization to `resolveMethodKey`. When the input lacks a
80
+ * namespace (an instance dispatch or a `:member:method` path), probes the
81
+ * `class` and `interface` namespaces in that order.
82
+ */
83
+ resolve(method, classHint) {
84
+ const key = resolveMethodKey(method, classHint);
85
+ if (!key)
86
+ return undefined;
87
+ if (key.kind === 'ref')
88
+ return this.methods.get(key.ref);
89
+ for (const ns of OWNER_NAMESPACES) {
90
+ const ref = Ref.method(ns, key.owner, key.method).toString();
91
+ const schema = this.methods.get(ref);
92
+ if (schema)
93
+ return schema;
94
+ }
95
+ return undefined;
96
+ }
97
+ }
98
+ // ─── Helpers ────────────────────────────────────────────────────────────────
99
+ /**
100
+ * Structural equality over the fields that define a contract — the pieces a
101
+ * client legitimately depends on matching across redirects. Uses a recursive
102
+ * compare (rather than `JSON.stringify`) so key-order permutations between
103
+ * serializers don't trigger false negatives.
104
+ */
105
+ function sameContract(a, b) {
106
+ return (a.output === b.output &&
107
+ dequal(a.inputSchema, b.inputSchema) &&
108
+ dequal(a.outputSchema, b.outputSchema) &&
109
+ dequal(a.code, b.code));
110
+ }
111
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/schema/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gCAAgC,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAI/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAE5C,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,WAAW,CAAU,CAAA;AAExD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;AAEzE;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,cAAc;IAChB,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAA;IAC/B,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAA;IAEnD,IAAI,CAAC,OAAyB;QAC5B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CACb,yCAAyC,MAAM,CAAC,GAAG,KAAK;oBACtD,gDAAgD;oBAChD,yEAAyE,CAC5E,CAAA;YACH,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACtC,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,CAAC,MAAsB;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;YACpC,OAAM;QACR,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACb,+CAA+C,MAAM,CAAC,GAAG,KAAK;gBAC5D,kEAAkE;gBAClE,2EAA2E,CAC9E,CAAA;QACH,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;IACxE,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC9B,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC9B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,KAAc;QACtB,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI;YACb,KAA+C,CAAC,qBAAqB,CAAC,KAAK,IAAI,CACjF,CAAA;IACH,CAAC;IAED;;;;;;OAMG;IACH,OAAO,CAAC,MAAc,EAAE,SAAkB;QACxC,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;QAC/C,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAA;QAC1B,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACxD,KAAK,MAAM,EAAE,IAAI,gBAAgB,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;YAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACpC,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAA;QAC3B,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;CACF;AAED,+EAA+E;AAE/E;;;;;GAKG;AACH,SAAS,YAAY,CAAC,CAAiB,EAAE,CAAiB;IACxD,OAAO,CACL,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QACrB,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,WAAW,CAAC;QACpC,MAAM,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,YAAY,CAAC;QACtC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CACvB,CAAA;AACH,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * A method key that hasn't been narrowed to a namespace yet.
3
+ * The registry probes `class` then `interface` to resolve it.
4
+ */
5
+ export type OwnerMethod = {
6
+ kind: 'owner-method';
7
+ owner: string;
8
+ method: string;
9
+ };
10
+ export type ResolvedMethodKey = {
11
+ kind: 'ref';
12
+ ref: string;
13
+ } | OwnerMethod;
14
+ /**
15
+ * Normalize a wire method address to a registry-lookup key.
16
+ *
17
+ * Accepts any of:
18
+ * - A canonical `Ref` string (`class.Author.method.deactivate`) — returned as-is.
19
+ * - A typed `MethodPath` (`/:domain:Class:method`) — yields `{ owner, method }`.
20
+ * - A typed `InstanceMethodPath` (`@id::method`) — yields `{ owner, method }`
21
+ * using `classHint` as the owner.
22
+ *
23
+ * Returns `undefined` when the input is not a recognized method reference.
24
+ */
25
+ export declare function resolveMethodKey(method: string, classHint?: string): ResolvedMethodKey | undefined;
26
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/schema/resolve.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEjF,MAAM,MAAM,iBAAiB,GAAG;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CAAA;AAE1E;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,iBAAiB,GAAG,SAAS,CAY/B"}
@@ -0,0 +1,27 @@
1
+ import { Path } from '@astrale-os/kernel-core';
2
+ import { InstanceMethodPath, MethodPath, Ref } from '@astrale-os/kernel-core/domain';
3
+ /**
4
+ * Normalize a wire method address to a registry-lookup key.
5
+ *
6
+ * Accepts any of:
7
+ * - A canonical `Ref` string (`class.Author.method.deactivate`) — returned as-is.
8
+ * - A typed `MethodPath` (`/:domain:Class:method`) — yields `{ owner, method }`.
9
+ * - A typed `InstanceMethodPath` (`@id::method`) — yields `{ owner, method }`
10
+ * using `classHint` as the owner.
11
+ *
12
+ * Returns `undefined` when the input is not a recognized method reference.
13
+ */
14
+ export function resolveMethodKey(method, classHint) {
15
+ const ref = Ref.tryParse(method);
16
+ if (ref?.isMethod)
17
+ return { kind: 'ref', ref: ref.toString() };
18
+ const path = Path.tryParse(method);
19
+ if (path instanceof MethodPath) {
20
+ return { kind: 'owner-method', owner: path.member, method: path.method };
21
+ }
22
+ if (path instanceof InstanceMethodPath && classHint) {
23
+ return { kind: 'owner-method', owner: classHint, method: path.methodName };
24
+ }
25
+ return undefined;
26
+ }
27
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/schema/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAC9C,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,gCAAgC,CAAA;AAUpF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAc,EACd,SAAkB;IAElB,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAChC,IAAI,GAAG,EAAE,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAA;IAE9D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAClC,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;QAC/B,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAA;IAC1E,CAAC;IACD,IAAI,IAAI,YAAY,kBAAkB,IAAI,SAAS,EAAE,CAAC;QACpD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,CAAA;IAC5E,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Schema } from '@astrale-os/kernel-dsl';
2
+ import type { ProxyCaller, SchemaTypedClient } from './proxy-types';
3
+ /**
4
+ * Create a SchemaTypedClient — a schema-bound view of a client.
5
+ *
6
+ * Accepts a `ProxyCaller` — a function that sends calls through the
7
+ * client with the right credential strategy already baked in.
8
+ */
9
+ export declare function createSchemaClient<S extends Schema>(caller: ProxyCaller, schema: S): SchemaTypedClient<S>;
10
+ //# sourceMappingURL=typed-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typed-client.d.ts","sourceRoot":"","sources":["../../src/schema/typed-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAEpD,OAAO,KAAK,EAIV,WAAW,EACX,iBAAiB,EAClB,MAAM,eAAe,CAAA;AAMtB;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,EACjD,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,CAAC,GACR,iBAAiB,CAAC,CAAC,CAAC,CA2BtB"}
@@ -0,0 +1,26 @@
1
+ import { createClassProxy } from './class-proxy';
2
+ import { extractMethodsByClass } from './extract';
3
+ import { createNodeProxy } from './node-proxy';
4
+ /**
5
+ * Create a SchemaTypedClient — a schema-bound view of a client.
6
+ *
7
+ * Accepts a `ProxyCaller` — a function that sends calls through the
8
+ * client with the right credential strategy already baked in.
9
+ */
10
+ export function createSchemaClient(caller, schema) {
11
+ const domain = schema.domain;
12
+ if (!domain || typeof domain !== 'string') {
13
+ throw new Error('Schema must have a non-empty domain string');
14
+ }
15
+ const methodsByClass = extractMethodsByClass(schema);
16
+ return {
17
+ schema,
18
+ node(className, nodeId) {
19
+ return createNodeProxy(caller, className, nodeId, methodsByClass.get(className));
20
+ },
21
+ static(className) {
22
+ return createClassProxy(caller, domain, className, methodsByClass.get(className));
23
+ },
24
+ };
25
+ }
26
+ //# sourceMappingURL=typed-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typed-client.js","sourceRoot":"","sources":["../../src/schema/typed-client.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAmB,EACnB,MAAS;IAET,MAAM,MAAM,GAAG,MAAM,CAAC,MAAgB,CAAA;IACtC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;IAC/D,CAAC;IAED,MAAM,cAAc,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAA;IAEpD,OAAO;QACL,MAAM;QAEN,IAAI,CAA0B,SAAY,EAAE,MAAc;YACxD,OAAO,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAG9E,CAAA;QACH,CAAC;QAED,MAAM,CAA0B,SAAY;YAC1C,OAAO,gBAAgB,CACrB,MAAM,EACN,MAAM,EACN,SAAS,EACT,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CACV,CAAA;QACvB,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Function schema — canonical shape of a method as it travels on the wire.
3
+ *
4
+ * Re-exported from `@astrale-os/kernel-core/domain` so the client and the
5
+ * server agree on a single type. See
6
+ * `kernel/core/domain/compile/method/serialized.ts` for the definition.
7
+ */
8
+ export type { FunctionSchema } from '@astrale-os/kernel-core/domain';
9
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,YAAY,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import type { CredentialInput } from '@astrale-os/kernel-core';
2
+ import type { FnMap } from '../client/fn-map';
3
+ import type { ClientSession } from './client-session';
4
+ import type { BoundClientSessionView } from './types';
5
+ /**
6
+ * Credential-bound view over a `ClientSession`. Every dispatch primitive delegates
7
+ * to the underlying ClientSession with `opts.credential` replaced by the captured
8
+ * credential. `as(next)` returns a fresh view — rebindings don't mutate.
9
+ */
10
+ export declare function createBoundSessionView<M extends FnMap>(session: ClientSession<M>, credential: CredentialInput | (() => CredentialInput)): BoundClientSessionView<M>;
11
+ //# sourceMappingURL=bound.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bound.d.ts","sourceRoot":"","sources":["../../src/session/bound.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAE9D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAErD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,KAAK,EACpD,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,EACzB,UAAU,EAAE,eAAe,GAAG,CAAC,MAAM,eAAe,CAAC,GACpD,sBAAsB,CAAC,CAAC,CAAC,CAoB3B"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Credential-bound view over a `ClientSession`. Every dispatch primitive delegates
3
+ * to the underlying ClientSession with `opts.credential` replaced by the captured
4
+ * credential. `as(next)` returns a fresh view — rebindings don't mutate.
5
+ */
6
+ export function createBoundSessionView(session, credential) {
7
+ const cred = () => (typeof credential === 'function' ? credential() : credential);
8
+ return {
9
+ get default() {
10
+ return session.default;
11
+ },
12
+ get registry() {
13
+ return session.registry;
14
+ },
15
+ call: (method, params, opts) => session.call(method, params, { ...opts, credential: cred() }),
16
+ stream: (method, params, opts) => session.stream(method, params, { ...opts, credential: cred() }),
17
+ binary: (method, params, opts) => session.binary(method, params, { ...opts, credential: cred() }),
18
+ signal: (method, params, opts) => session.signal(method, params, { ...opts, credential: cred() }),
19
+ describe: (method) => session.describe(method),
20
+ withSchema: (schema) => session.withSchema(schema),
21
+ as: (next) => createBoundSessionView(session, next),
22
+ };
23
+ }
24
+ //# sourceMappingURL=bound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bound.js","sourceRoot":"","sources":["../../src/session/bound.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAyB,EACzB,UAAqD;IAErD,MAAM,IAAI,GAAG,GAAoB,EAAE,CAAC,CAAC,OAAO,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;IAClG,OAAO;QACL,IAAI,OAAO;YACT,OAAO,OAAO,CAAC,OAAO,CAAA;QACxB,CAAC;QACD,IAAI,QAAQ;YACV,OAAO,OAAO,CAAC,QAAQ,CAAA;QACzB,CAAC;QACD,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;QAC7F,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAC/B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;QACjE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAC/B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;QACjE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAC/B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;QACjE,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC9C,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;QAClD,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC;KACpD,CAAA;AACH,CAAC"}
@@ -0,0 +1,61 @@
1
+ import type { CredentialInput } from '@astrale-os/kernel-core';
2
+ import type { Schema } from '@astrale-os/kernel-dsl';
3
+ import type { BinaryFns, CallFns, FnMap, SignalFns, StreamFns } from '../client/fn-map';
4
+ import type { DelegationCache } from '../delegation/cache';
5
+ import type { ClientPool } from '../pool/pool';
6
+ import type { BinaryResponse } from '../transport/binary';
7
+ import type { ClientSessionCallOptions, ClientSessionConfig } from './config';
8
+ import type { BoundClientSessionView, SchemaTypedClientSession } from './types';
9
+ import { SchemaRegistry } from '../schema/registry';
10
+ /**
11
+ * ClientSession — the orchestration layer above `KernelClient`.
12
+ *
13
+ * Composes `ClientPool`, `DelegationCache`, `DelegationPolicy`,
14
+ * `RedirectPolicy`, and `SchemaPersistence` into a single call
15
+ * surface. See `docs/specs/kernel-client-session.md`.
16
+ */
17
+ export declare class ClientSession<M extends FnMap = FnMap> {
18
+ #private;
19
+ readonly default: string;
20
+ readonly registry: SchemaRegistry;
21
+ constructor(config: ClientSessionConfig<M>);
22
+ /**
23
+ * Idempotent teardown. Tears down the pool (and every cached client).
24
+ * Registry, schema store, and delegation cache are untouched — they may
25
+ * be shared across ClientSessions.
26
+ */
27
+ disconnect(): void;
28
+ get pool(): ClientPool<M>;
29
+ get delegation(): DelegationCache | undefined;
30
+ describe(method: string): ReturnType<SchemaRegistry['resolve']>;
31
+ /**
32
+ * Await schema-persistence hydration. Every dispatch primitive awaits this
33
+ * implicitly; consumers can await it explicitly to front-load load failures.
34
+ */
35
+ ready(): Promise<void>;
36
+ call<K extends CallFns<M>>(method: K, params: M[K]['params'], opts?: ClientSessionCallOptions): Promise<M[K]['result']>;
37
+ stream<K extends StreamFns<M>>(method: K, params: M[K]['params'], opts?: ClientSessionCallOptions): Promise<AsyncIterable<M[K]['result']>>;
38
+ binary<K extends BinaryFns<M>>(method: K, params: M[K]['params'], opts?: ClientSessionCallOptions): Promise<BinaryResponse>;
39
+ signal<K extends SignalFns<M>>(method: K, params: M[K]['params'], opts?: ClientSessionCallOptions): void;
40
+ as(credential: CredentialInput | (() => CredentialInput)): BoundClientSessionView<M>;
41
+ withSchema<S extends Schema>(schema: S): SchemaTypedClientSession<S>;
42
+ private dispatch;
43
+ private runSignal;
44
+ /**
45
+ * Wrap the caller's mint to fire `onDelegationMint` with the list of
46
+ * waiter cids — read AFTER the mint resolves so late joiners to the dedup
47
+ * are included.
48
+ */
49
+ private wrapMint;
50
+ private trackPendingMint;
51
+ private untrackPendingMint;
52
+ private hydrate;
53
+ private resolveIdentity;
54
+ private audienceFor;
55
+ private resolveDelegatedCredential;
56
+ private wireSend;
57
+ private decorate;
58
+ private fire;
59
+ private fireError;
60
+ }
61
+ //# sourceMappingURL=client-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-session.d.ts","sourceRoot":"","sources":["../../src/session/client-session.ts"],"names":[],"mappings":"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"}