@cotal-ai/core 0.85.0 → 0.87.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 (204) hide show
  1. package/dist/agent-file.d.ts.map +1 -1
  2. package/dist/agent-file.js +10 -3
  3. package/dist/agent-file.js.map +1 -1
  4. package/dist/base64url.d.ts +5 -0
  5. package/dist/base64url.d.ts.map +1 -0
  6. package/dist/base64url.js +14 -0
  7. package/dist/base64url.js.map +1 -0
  8. package/dist/browser-control.d.ts +149 -0
  9. package/dist/browser-control.d.ts.map +1 -0
  10. package/dist/browser-control.js +167 -0
  11. package/dist/browser-control.js.map +1 -0
  12. package/dist/browser-validators-build.d.ts +23 -0
  13. package/dist/browser-validators-build.d.ts.map +1 -0
  14. package/dist/browser-validators-build.js +149 -0
  15. package/dist/browser-validators-build.js.map +1 -0
  16. package/dist/canonical-json.d.ts +14 -0
  17. package/dist/canonical-json.d.ts.map +1 -0
  18. package/dist/canonical-json.js +121 -0
  19. package/dist/canonical-json.js.map +1 -0
  20. package/dist/canonical.d.ts +2 -10
  21. package/dist/canonical.d.ts.map +1 -1
  22. package/dist/canonical.js +2 -108
  23. package/dist/canonical.js.map +1 -1
  24. package/dist/channels.d.ts +4 -0
  25. package/dist/channels.d.ts.map +1 -1
  26. package/dist/channels.js +6 -2
  27. package/dist/channels.js.map +1 -1
  28. package/dist/checkpoint-answer.d.ts.map +1 -1
  29. package/dist/checkpoint-answer.js +3 -4
  30. package/dist/checkpoint-answer.js.map +1 -1
  31. package/dist/connector-setup.d.ts +10 -1
  32. package/dist/connector-setup.d.ts.map +1 -1
  33. package/dist/digest-id.d.ts +4 -0
  34. package/dist/digest-id.d.ts.map +1 -0
  35. package/dist/digest-id.js +7 -0
  36. package/dist/digest-id.js.map +1 -0
  37. package/dist/endpoint-action.d.ts +2 -2
  38. package/dist/endpoint-action.d.ts.map +1 -1
  39. package/dist/endpoint-action.js +6 -44
  40. package/dist/endpoint-action.js.map +1 -1
  41. package/dist/endpoint-auth-digest.d.ts +7 -0
  42. package/dist/endpoint-auth-digest.d.ts.map +1 -0
  43. package/dist/endpoint-auth-digest.js +13 -0
  44. package/dist/endpoint-auth-digest.js.map +1 -0
  45. package/dist/endpoint-call.d.ts +176 -0
  46. package/dist/endpoint-call.d.ts.map +1 -0
  47. package/dist/endpoint-call.js +490 -0
  48. package/dist/endpoint-call.js.map +1 -0
  49. package/dist/endpoint-caller.d.ts +113 -0
  50. package/dist/endpoint-caller.d.ts.map +1 -0
  51. package/dist/endpoint-caller.js +260 -0
  52. package/dist/endpoint-caller.js.map +1 -0
  53. package/dist/endpoint-checkpoint.d.ts.map +1 -1
  54. package/dist/endpoint-checkpoint.js +5 -14
  55. package/dist/endpoint-checkpoint.js.map +1 -1
  56. package/dist/endpoint-envelope.d.ts +0 -6
  57. package/dist/endpoint-envelope.d.ts.map +1 -1
  58. package/dist/endpoint-envelope.js +17 -18
  59. package/dist/endpoint-envelope.js.map +1 -1
  60. package/dist/endpoint-goal-follow.d.ts +37 -0
  61. package/dist/endpoint-goal-follow.d.ts.map +1 -0
  62. package/dist/endpoint-goal-follow.js +328 -0
  63. package/dist/endpoint-goal-follow.js.map +1 -0
  64. package/dist/endpoint-grants.d.ts +0 -4
  65. package/dist/endpoint-grants.d.ts.map +1 -1
  66. package/dist/endpoint-grants.js +1 -7
  67. package/dist/endpoint-grants.js.map +1 -1
  68. package/dist/endpoint-guard.d.ts.map +1 -1
  69. package/dist/endpoint-guard.js +2 -10
  70. package/dist/endpoint-guard.js.map +1 -1
  71. package/dist/endpoint-invoke.d.ts +37 -143
  72. package/dist/endpoint-invoke.d.ts.map +1 -1
  73. package/dist/endpoint-invoke.js +60 -605
  74. package/dist/endpoint-invoke.js.map +1 -1
  75. package/dist/endpoint-publish-denial.d.ts +1 -1
  76. package/dist/endpoint-publish-denial.d.ts.map +1 -1
  77. package/dist/endpoint-publish-denial.js +1 -1
  78. package/dist/endpoint-publish-denial.js.map +1 -1
  79. package/dist/endpoint-receipt.d.ts.map +1 -1
  80. package/dist/endpoint-receipt.js +2 -16
  81. package/dist/endpoint-receipt.js.map +1 -1
  82. package/dist/endpoint-signing.d.ts +1 -1
  83. package/dist/endpoint-signing.d.ts.map +1 -1
  84. package/dist/endpoint-signing.js +1 -1
  85. package/dist/endpoint-signing.js.map +1 -1
  86. package/dist/endpoint-subjects.d.ts +4 -0
  87. package/dist/endpoint-subjects.d.ts.map +1 -1
  88. package/dist/endpoint-subjects.js +6 -0
  89. package/dist/endpoint-subjects.js.map +1 -1
  90. package/dist/endpoint-traits.d.ts.map +1 -1
  91. package/dist/endpoint-traits.js +3 -20
  92. package/dist/endpoint-traits.js.map +1 -1
  93. package/dist/endpoint-verbs.d.ts +18 -151
  94. package/dist/endpoint-verbs.d.ts.map +1 -1
  95. package/dist/endpoint-verbs.js +4 -500
  96. package/dist/endpoint-verbs.js.map +1 -1
  97. package/dist/endpoint-work.d.ts.map +1 -1
  98. package/dist/endpoint-work.js +2 -17
  99. package/dist/endpoint-work.js.map +1 -1
  100. package/dist/endpoint.d.ts +113 -24
  101. package/dist/endpoint.d.ts.map +1 -1
  102. package/dist/endpoint.js +330 -78
  103. package/dist/endpoint.js.map +1 -1
  104. package/dist/goal-result-fact.d.ts +13 -0
  105. package/dist/goal-result-fact.d.ts.map +1 -0
  106. package/dist/goal-result-fact.js +40 -0
  107. package/dist/goal-result-fact.js.map +1 -0
  108. package/dist/index.d.ts +5 -0
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.js +5 -0
  111. package/dist/index.js.map +1 -1
  112. package/dist/issued-accepted.d.ts +27 -0
  113. package/dist/issued-accepted.d.ts.map +1 -0
  114. package/dist/issued-accepted.js +62 -0
  115. package/dist/issued-accepted.js.map +1 -0
  116. package/dist/issued-authority.d.ts +3 -18
  117. package/dist/issued-authority.d.ts.map +1 -1
  118. package/dist/issued-authority.js +4 -55
  119. package/dist/issued-authority.js.map +1 -1
  120. package/dist/jetstream-missing.d.ts +4 -0
  121. package/dist/jetstream-missing.d.ts.map +1 -1
  122. package/dist/jetstream-missing.js +6 -0
  123. package/dist/jetstream-missing.js.map +1 -1
  124. package/dist/kv-scan.d.ts +15 -0
  125. package/dist/kv-scan.d.ts.map +1 -1
  126. package/dist/kv-scan.js +32 -0
  127. package/dist/kv-scan.js.map +1 -1
  128. package/dist/launch-material.d.ts.map +1 -1
  129. package/dist/launch-material.js +6 -2
  130. package/dist/launch-material.js.map +1 -1
  131. package/dist/lease.d.ts +50 -0
  132. package/dist/lease.d.ts.map +1 -1
  133. package/dist/lease.js +71 -0
  134. package/dist/lease.js.map +1 -1
  135. package/dist/lifecycle-state.d.ts +3 -0
  136. package/dist/lifecycle-state.d.ts.map +1 -1
  137. package/dist/lifecycle-state.js +7 -0
  138. package/dist/lifecycle-state.js.map +1 -1
  139. package/dist/manager-caller.d.ts.map +1 -1
  140. package/dist/manager-caller.js +2 -1
  141. package/dist/manager-caller.js.map +1 -1
  142. package/dist/one-line.d.ts +6 -0
  143. package/dist/one-line.d.ts.map +1 -0
  144. package/dist/one-line.js +8 -0
  145. package/dist/one-line.js.map +1 -0
  146. package/dist/peer-label.d.ts +16 -0
  147. package/dist/peer-label.d.ts.map +1 -0
  148. package/dist/peer-label.js +15 -0
  149. package/dist/peer-label.js.map +1 -0
  150. package/dist/permission-denied.d.ts +8 -0
  151. package/dist/permission-denied.d.ts.map +1 -0
  152. package/dist/permission-denied.js +15 -0
  153. package/dist/permission-denied.js.map +1 -0
  154. package/dist/presence-text.d.ts +6 -0
  155. package/dist/presence-text.d.ts.map +1 -0
  156. package/dist/presence-text.js +25 -0
  157. package/dist/presence-text.js.map +1 -0
  158. package/dist/private-tool-results.d.ts +253 -0
  159. package/dist/private-tool-results.d.ts.map +1 -0
  160. package/dist/private-tool-results.js +141 -0
  161. package/dist/private-tool-results.js.map +1 -0
  162. package/dist/provision.d.ts +5 -0
  163. package/dist/provision.d.ts.map +1 -1
  164. package/dist/provision.js +40 -16
  165. package/dist/provision.js.map +1 -1
  166. package/dist/remote-manager-authority.d.ts +17 -0
  167. package/dist/remote-manager-authority.d.ts.map +1 -1
  168. package/dist/remote-manager-authority.js +40 -1
  169. package/dist/remote-manager-authority.js.map +1 -1
  170. package/dist/resolve.d.ts +2 -13
  171. package/dist/resolve.d.ts.map +1 -1
  172. package/dist/resolve.js +2 -12
  173. package/dist/resolve.js.map +1 -1
  174. package/dist/run-driver-grants.d.ts +5 -0
  175. package/dist/run-driver-grants.d.ts.map +1 -1
  176. package/dist/run-driver-grants.js +16 -4
  177. package/dist/run-driver-grants.js.map +1 -1
  178. package/dist/run-journal.d.ts.map +1 -1
  179. package/dist/run-journal.js +1 -6
  180. package/dist/run-journal.js.map +1 -1
  181. package/dist/run-migration.d.ts +21 -0
  182. package/dist/run-migration.d.ts.map +1 -1
  183. package/dist/run-migration.js +2 -27
  184. package/dist/run-migration.js.map +1 -1
  185. package/dist/run-notice.d.ts +20 -0
  186. package/dist/run-notice.d.ts.map +1 -1
  187. package/dist/run-notice.js +3 -28
  188. package/dist/run-notice.js.map +1 -1
  189. package/dist/schema-bounds.d.ts +24 -0
  190. package/dist/schema-bounds.d.ts.map +1 -0
  191. package/dist/schema-bounds.js +74 -0
  192. package/dist/schema-bounds.js.map +1 -0
  193. package/dist/schema-profile.d.ts +11 -24
  194. package/dist/schema-profile.d.ts.map +1 -1
  195. package/dist/schema-profile.js +16 -73
  196. package/dist/schema-profile.js.map +1 -1
  197. package/dist/subjects.d.ts +17 -0
  198. package/dist/subjects.d.ts.map +1 -1
  199. package/dist/subjects.js +30 -2
  200. package/dist/subjects.js.map +1 -1
  201. package/dist/turn-contract.d.ts.map +1 -1
  202. package/dist/turn-contract.js +14 -4
  203. package/dist/turn-contract.js.map +1 -1
  204. package/package.json +14 -1
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Build-time generator for `@cotal-ai/core/browser-control` (`@cotal-ai/core/browser-validators-build`).
3
+ * Node only: it runs Ajv's code generation at the host's build, so the page never does.
4
+ *
5
+ * Input: the cluster documents and schema roots of the endpoints a host will call, as data. Each
6
+ * cluster and closure digest is recomputed with THIS core's §13.7 profile, and a digest that does
7
+ * not match the recorded one refuses. Output: one ES module exporting `contracts`, a
8
+ * `BrowserContractSet` with one standalone validator per closure digest (`standaloneContractSource`,
9
+ * the same profile options as `compileContract`) and the cluster documents by cluster digest.
10
+ */
11
+ import { parse } from "acorn";
12
+ import { singleDocumentClosure, standaloneContractSource } from "./schema-profile.js";
13
+ /** Ajv's standalone output still names its runtime helpers with `require`, even in ESM mode. Each
14
+ * `require("ajv/dist/runtime/<helper>").<name>` read is rewritten to an ESM namespace import. The
15
+ * check walks the parsed validator, so schema data in a string literal or a comment is never taken
16
+ * for code: any other reference to `require`, `eval` or `Function`, or a call of a member with one
17
+ * of those names, refuses. */
18
+ const RUNTIME_HELPERS = new Set(["ucs2length", "equal", "uri", "quote", "timestamp", "re2", "parseJson"]);
19
+ const RUNTIME_PREFIX = "ajv/dist/runtime/";
20
+ const EXECUTABLE = new Set(["require", "eval", "Function"]);
21
+ const HEADER = /^"use strict";\s*export const validate = (\w+);\s*export default \1;/;
22
+ const PROLOGUE = '(() => {\n"use strict";\n';
23
+ const isNode = (value) => typeof value === "object" && value !== null && typeof value.type === "string";
24
+ /** The name a callee reads: `x`, `o.x` and `o["x"]` all name `x`. */
25
+ function calleeName(node) {
26
+ if (node.type === "Identifier")
27
+ return node.name;
28
+ if (node.type !== "MemberExpression")
29
+ return undefined;
30
+ const property = node.property;
31
+ if (!node.computed)
32
+ return property.type === "Identifier" ? property.name : undefined;
33
+ return property.type === "Literal" && typeof property.value === "string" ? property.value : undefined;
34
+ }
35
+ /** `require("ajv/dist/runtime/<helper>").<name>` with a known helper, as that helper and name. */
36
+ function runtimeHelper(node) {
37
+ if (node.type !== "MemberExpression" || node.computed || node.optional)
38
+ return undefined;
39
+ const call = node.object;
40
+ const property = node.property;
41
+ if (call.type !== "CallExpression" || call.optional || property.type !== "Identifier")
42
+ return undefined;
43
+ const callee = call.callee;
44
+ const args = call.arguments;
45
+ const spec = args[0];
46
+ if (callee.type !== "Identifier" || callee.name !== "require" || args.length !== 1 || spec?.type !== "Literal")
47
+ return undefined;
48
+ if (typeof spec.value !== "string" || !spec.value.startsWith(RUNTIME_PREFIX))
49
+ return undefined;
50
+ const helper = spec.value.slice(RUNTIME_PREFIX.length);
51
+ return RUNTIME_HELPERS.has(helper) ? { helper, name: property.name } : undefined;
52
+ }
53
+ function collectHelperReads(node, digest, reads) {
54
+ const read = runtimeHelper(node);
55
+ if (read) {
56
+ reads.push({ start: node.start, end: node.end, ...read });
57
+ return;
58
+ }
59
+ const callee = node.type === "CallExpression" || node.type === "NewExpression" ? node.callee
60
+ : node.type === "TaggedTemplateExpression" ? node.tag
61
+ : undefined;
62
+ const called = callee && calleeName(callee);
63
+ if ((node.type === "Identifier" && EXECUTABLE.has(node.name)) || (called !== undefined && EXECUTABLE.has(called)))
64
+ throw new Error(`closure ${digest}: standalone output still needs require or runtime evaluation`);
65
+ for (const [key, value] of Object.entries(node)) {
66
+ // A property name is not a reference: `data.eval` reads the field a schema calls "eval".
67
+ if (!node.computed && ((node.type === "MemberExpression" && key === "property") || (node.type === "Property" && key === "key")))
68
+ continue;
69
+ for (const child of Array.isArray(value) ? value : [value])
70
+ if (isNode(child))
71
+ collectHelperReads(child, digest, reads);
72
+ }
73
+ }
74
+ function validatorBody(source, digest, helpers) {
75
+ const head = HEADER.exec(source);
76
+ if (!head)
77
+ throw new Error(`closure ${digest}: unexpected standalone output shape`);
78
+ const body = source.slice(head[0].length);
79
+ const epilogue = `\nreturn ${head[1]};\n})()`;
80
+ let program;
81
+ try {
82
+ program = parse(PROLOGUE + body + epilogue, { ecmaVersion: "latest", sourceType: "script" });
83
+ }
84
+ catch (error) {
85
+ throw new Error(`closure ${digest}: standalone output does not parse: ${error.message}`);
86
+ }
87
+ const reads = [];
88
+ collectHelperReads(program, digest, reads);
89
+ let rewritten = body;
90
+ for (const { start, end, helper, name } of reads.sort((a, b) => b.start - a.start)) {
91
+ helpers.add(helper);
92
+ rewritten = `${rewritten.slice(0, start - PROLOGUE.length)}__rt(__rt_${helper}, ${JSON.stringify(name)})${rewritten.slice(end - PROLOGUE.length)}`;
93
+ }
94
+ return PROLOGUE + rewritten + epilogue;
95
+ }
96
+ /** The generated module text, and how many clusters and closures it carries. */
97
+ export function generateBrowserContracts(sources) {
98
+ if (sources.length === 0)
99
+ throw new Error("no contract sources");
100
+ const clusters = new Map();
101
+ const roots = new Map();
102
+ for (const src of sources) {
103
+ const clusterDigest = singleDocumentClosure(src.document).closureDigest;
104
+ if (clusterDigest !== src.clusterDigest)
105
+ throw new Error(`${src.label}: cluster document recomputes to ${clusterDigest}, the source recorded ${src.clusterDigest}`);
106
+ for (const root of src.roots)
107
+ roots.set(singleDocumentClosure(root).closureDigest, root);
108
+ for (const command of src.document.commands)
109
+ for (const digest of [command.inputDigest, command.outputDigest])
110
+ if (!roots.has(digest))
111
+ throw new Error(`${src.label}: ${command.name} names closure ${digest} with no schema root`);
112
+ const seen = clusters.get(clusterDigest);
113
+ if (seen)
114
+ seen.labels.push(src.label);
115
+ else
116
+ clusters.set(clusterDigest, { labels: [src.label], document: src.document });
117
+ }
118
+ const helpers = new Set();
119
+ const validators = [];
120
+ for (const [digest, root] of [...roots].sort(([a], [b]) => a.localeCompare(b))) {
121
+ const { closureDigest, source } = standaloneContractSource({ root });
122
+ if (closureDigest !== digest)
123
+ throw new Error(`closure ${digest} compiles as ${closureDigest}`);
124
+ validators.push(` ${JSON.stringify(digest)}: ${validatorBody(source, digest, helpers)},`);
125
+ }
126
+ const imports = [...helpers].sort().map((m) => `import * as __rt_${m} from "ajv/dist/runtime/${m}.js";`);
127
+ const clusterRows = [...clusters].sort(([a], [b]) => a.localeCompare(b))
128
+ .map(([digest, c]) => ` ${JSON.stringify(digest)}: ${JSON.stringify({ sources: c.labels, ...c.document })},`);
129
+ const text = [
130
+ "// @ts-nocheck",
131
+ "// GENERATED by @cotal-ai/core/browser-validators-build. Do not edit; regenerate from the contract sources.",
132
+ ...imports,
133
+ "/** An Ajv runtime helper from a CommonJS module, whichever way the importer exposes its exports. */",
134
+ "const __rt = (ns, name) => {",
135
+ " const exports = ns.default !== null && typeof ns.default === \"object\" && name in ns.default ? ns.default : ns;",
136
+ " const value = exports[name];",
137
+ " if (typeof value !== \"function\") throw new Error(`ajv runtime helper ${name} is not a function`);",
138
+ " return value;",
139
+ "};",
140
+ "export const contracts = Object.freeze({ validators: Object.freeze({",
141
+ ...validators,
142
+ "}), clusters: Object.freeze({",
143
+ ...clusterRows,
144
+ "}) });",
145
+ "",
146
+ ].join("\n");
147
+ return { text, clusters: clusters.size, closures: roots.size };
148
+ }
149
+ //# sourceMappingURL=browser-validators-build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-validators-build.js","sourceRoot":"","sources":["../src/browser-validators-build.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,KAAK,EAAa,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAWtF;;;;+BAI+B;AAC/B,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;AAC1G,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAC3C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAC5D,MAAM,MAAM,GAAG,sEAAsE,CAAC;AACtF,MAAM,QAAQ,GAAG,2BAA2B,CAAC;AAM7C,MAAM,MAAM,GAAG,CAAC,KAAc,EAAoB,EAAE,CAClD,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAQ,KAA4B,CAAC,IAAI,KAAK,QAAQ,CAAC;AAExG,qEAAqE;AACrE,SAAS,UAAU,CAAC,IAAa;IAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC,IAAc,CAAC;IAC3D,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB;QAAE,OAAO,SAAS,CAAC;IACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAmB,CAAC;IAC1C,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,OAAO,QAAQ,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAE,QAAQ,CAAC,IAAe,CAAC,CAAC,CAAC,SAAS,CAAC;IAClG,OAAO,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACxG,CAAC;AAED,kGAAkG;AAClG,SAAS,aAAa,CAAC,IAAa;IAClC,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IACzF,MAAM,IAAI,GAAG,IAAI,CAAC,MAAiB,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAmB,CAAC;IAC1C,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,SAAS,CAAC;IACxG,MAAM,MAAM,GAAG,IAAI,CAAC,MAAiB,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAsB,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACjI,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/F,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACvD,OAAO,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7F,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAa,EAAE,MAAc,EAAE,KAAmB;IAC5E,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GACV,IAAI,CAAC,IAAI,KAAK,gBAAgB,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,CAAE,IAAI,CAAC,MAAkB;QAC1F,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,0BAA0B,CAAC,CAAC,CAAE,IAAI,CAAC,GAAe;YAClE,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,MAAM,GAAG,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAc,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzH,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,+DAA+D,CAAC,CAAC;IACpG,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,yFAAyF;QACzF,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,kBAAkB,IAAI,GAAG,KAAK,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC;YAAE,SAAS;QAC1I,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAAE,IAAI,MAAM,CAAC,KAAK,CAAC;gBAAE,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC1H,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,MAAc,EAAE,MAAc,EAAE,OAAoB;IACzE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,sCAAsC,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,YAAY,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9C,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,KAAK,CAAC,QAAQ,GAAG,IAAI,GAAG,QAAQ,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAuB,CAAC;IACrH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,uCAAwC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IACtG,CAAC;IACD,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC3C,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,KAAK,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,SAAS,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;IACrJ,CAAC;IACD,OAAO,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AACzC,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,wBAAwB,CAAC,OAAyC;IAChF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA6E,CAAC;IACtG,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,aAAa,GAAG,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC;QACxE,IAAI,aAAa,KAAK,GAAG,CAAC,aAAa;YACrC,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,oCAAoC,aAAa,yBAAyB,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;QAC7H,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK;YAAE,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QACzF,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ;YACzC,KAAK,MAAM,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,YAAY,CAAC;gBAC9D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,kBAAkB,MAAM,sBAAsB,CAAC,CAAC;QACzH,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACzC,IAAI,IAAI;YAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;;YACjC,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,wBAAwB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,IAAI,aAAa,KAAK,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,gBAAgB,aAAa,EAAE,CAAC,CAAC;QAChG,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7F,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC;IACzG,MAAM,WAAW,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SACrE,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;IACjH,MAAM,IAAI,GAAG;QACX,gBAAgB;QAChB,6GAA6G;QAC7G,GAAG,OAAO;QACV,sGAAsG;QACtG,8BAA8B;QAC9B,oHAAoH;QACpH,gCAAgC;QAChC,uGAAuG;QACvG,iBAAiB;QACjB,IAAI;QACJ,sEAAsE;QACtE,GAAG,UAAU;QACb,+BAA+B;QAC/B,GAAG,WAAW;QACd,QAAQ;QACR,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;AACjE,CAAC"}
@@ -0,0 +1,14 @@
1
+ /** Digest identity form used everywhere a contract artifact is referenced: `sha256:<hex>`. */
2
+ export declare const DIGEST_PREFIX: "sha256:";
3
+ /** True iff `s` is a well-formed `sha256:<hex>` artifact digest. */
4
+ export declare function isContractDigest(s: string): boolean;
5
+ /** True iff the string is well-formed UTF-16 (no unpaired surrogate). A lone surrogate has NO
6
+ * UTF-8 byte encoding — encoders silently substitute U+FFFD, so two distinct malformed strings
7
+ * can collapse to one byte sequence; anything digest- or wire-bound must refuse them. */
8
+ export declare function isWellFormedUnicode(s: string): boolean;
9
+ /** True iff the string contains an unpaired UTF-16 surrogate (not well-formed / I-JSON
10
+ * violation). Manual scan: the repo's TS lib target predates `String#isWellFormed`. */
11
+ export declare function hasLoneSurrogate(s: string): boolean;
12
+ /** RFC 8785 canonical JSON text of a value (strict: I-JSON enforced, no undefined→null). */
13
+ export declare function canonicalJson(value: unknown): string;
14
+ //# sourceMappingURL=canonical-json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-json.d.ts","sourceRoot":"","sources":["../src/canonical-json.ts"],"names":[],"mappings":"AAGA,8FAA8F;AAC9F,eAAO,MAAM,aAAa,EAAG,SAAkB,CAAC;AAGhD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;0FAE0F;AAC1F,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;wFACwF;AACxF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAYnD;AAkFD,4FAA4F;AAC5F,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEpD"}
@@ -0,0 +1,121 @@
1
+ /** The node-free half of `canonical.ts`: digest grammar and RFC 8785 canonical JSON. */
2
+ import { canonicalizeEx } from "json-canonicalize";
3
+ /** Digest identity form used everywhere a contract artifact is referenced: `sha256:<hex>`. */
4
+ export const DIGEST_PREFIX = "sha256:";
5
+ const DIGEST_RE = /^sha256:[0-9a-f]{64}$/;
6
+ /** True iff `s` is a well-formed `sha256:<hex>` artifact digest. */
7
+ export function isContractDigest(s) {
8
+ return DIGEST_RE.test(s);
9
+ }
10
+ /** True iff the string is well-formed UTF-16 (no unpaired surrogate). A lone surrogate has NO
11
+ * UTF-8 byte encoding — encoders silently substitute U+FFFD, so two distinct malformed strings
12
+ * can collapse to one byte sequence; anything digest- or wire-bound must refuse them. */
13
+ export function isWellFormedUnicode(s) {
14
+ return !hasLoneSurrogate(s);
15
+ }
16
+ /** True iff the string contains an unpaired UTF-16 surrogate (not well-formed / I-JSON
17
+ * violation). Manual scan: the repo's TS lib target predates `String#isWellFormed`. */
18
+ export function hasLoneSurrogate(s) {
19
+ for (let i = 0; i < s.length; i++) {
20
+ const c = s.charCodeAt(i);
21
+ if (c >= 0xd800 && c <= 0xdbff) {
22
+ const n = s.charCodeAt(i + 1);
23
+ if (!(n >= 0xdc00 && n <= 0xdfff))
24
+ return true;
25
+ i++; // well-formed pair; skip the low half
26
+ }
27
+ else if (c >= 0xdc00 && c <= 0xdfff) {
28
+ return true; // low surrogate with no preceding high half
29
+ }
30
+ }
31
+ return false;
32
+ }
33
+ /** Walk a JSON value once and return a plain copy of what the walk read, throwing on anything
34
+ * that cannot canonicalize EXACTLY (D28: verification and digesting must never run over a
35
+ * normalizing projection):
36
+ * - strings that are not well-formed UTF-16 (a lone surrogate violates I-JSON; canonicalizing
37
+ * it would mint a digest for text that cannot interchange), in values AND keys;
38
+ * - `undefined` anywhere and non-finite numbers (RFC 8785 cannot represent them);
39
+ * - NON-PLAIN-DATA graphs. `Object.entries` sees only enumerable string-keyed own data props,
40
+ * and the canonicalizer applies `toJSON`, so a symbol-keyed or non-enumerable own property,
41
+ * an accessor, or a class/exotic instance (Date → ISO string, Map → `{}`) would be SILENTLY
42
+ * projected away or rewritten — the exact field-dropping class D28 forbids (an artifact
43
+ * carrying state its signature never covered must refuse, not launder through the
44
+ * projection). Objects must be ordinary with a `null`/`Object.prototype` prototype and only
45
+ * enumerable string-keyed own DATA properties; arrays must be ordinary `Array.prototype`
46
+ * arrays with no holes and no extra own properties.
47
+ * The serializer gets the copy, never the input, and each copied value is the one in the
48
+ * descriptor the check inspected: a Proxy can answer a second read, or `toJSON`, differently,
49
+ * and the text must encode only data that was checked. */
50
+ function interchangeableCopy(v, path) {
51
+ if (v === null)
52
+ return null;
53
+ switch (typeof v) {
54
+ case "string":
55
+ if (hasLoneSurrogate(v))
56
+ throw new Error(`canonicalJson: lone surrogate in string at ${path} (I-JSON violation)`);
57
+ return v;
58
+ case "number":
59
+ if (!Number.isFinite(v))
60
+ throw new Error(`canonicalJson: non-finite number at ${path}`);
61
+ return v;
62
+ case "boolean":
63
+ return v;
64
+ case "undefined":
65
+ throw new Error(`canonicalJson: undefined at ${path} (strict mode never coerces to null)`);
66
+ case "object": {
67
+ if (Array.isArray(v)) {
68
+ if (Object.getPrototypeOf(v) !== Array.prototype)
69
+ throw new Error(`canonicalJson: non-ordinary array at ${path} (a subclassed/exotic array canonicalizes through projections)`);
70
+ // One read of `length`, from its descriptor, bounds both the index check and the copy. A
71
+ // second read could add an element no index check covered or drop one the check accepted.
72
+ const length = Object.getOwnPropertyDescriptor(v, "length")?.value;
73
+ if (typeof length !== "number" || !Number.isInteger(length) || length < 0)
74
+ throw new Error(`canonicalJson: invalid array length at ${path} (refusing the projection)`);
75
+ for (const k of Reflect.ownKeys(v)) {
76
+ if (typeof k !== "string")
77
+ throw new Error(`canonicalJson: symbol-keyed own property on array at ${path} (invisible to canonicalization; refusing the projection)`);
78
+ if (k === "length")
79
+ continue;
80
+ if (!/^(0|[1-9][0-9]*)$/.test(k) || Number(k) >= length)
81
+ throw new Error(`canonicalJson: non-index own property "${k}" on array at ${path} (invisible to canonicalization; refusing the projection)`);
82
+ }
83
+ const copy = [];
84
+ for (let i = 0; i < length; i++) {
85
+ const d = Object.getOwnPropertyDescriptor(v, i);
86
+ if (d === undefined)
87
+ throw new Error(`canonicalJson: hole at ${path}[${i}] (a hole would be coerced to null; refusing the projection)`);
88
+ if (!d.enumerable || d.get !== undefined || d.set !== undefined)
89
+ throw new Error(`canonicalJson: non-enumerable or accessor element at ${path}[${i}] (refusing the projection)`);
90
+ copy.push(interchangeableCopy(d.value, `${path}[${i}]`));
91
+ }
92
+ return copy;
93
+ }
94
+ const proto = Object.getPrototypeOf(v);
95
+ if (proto !== Object.prototype && proto !== null)
96
+ throw new Error(`canonicalJson: non-plain object at ${path} (a class/exotic instance canonicalizes through projections like toJSON; only plain data objects are interchangeable)`);
97
+ // A null prototype keeps an own `__proto__` key a key instead of a prototype assignment.
98
+ const copy = Object.create(null);
99
+ for (const k of Reflect.ownKeys(v)) {
100
+ if (typeof k !== "string")
101
+ throw new Error(`canonicalJson: symbol-keyed own property at ${path} (invisible to canonicalization; refusing the projection)`);
102
+ if (hasLoneSurrogate(k))
103
+ throw new Error(`canonicalJson: lone surrogate in key at ${path}.${k}`);
104
+ const d = Object.getOwnPropertyDescriptor(v, k);
105
+ if (!d.enumerable)
106
+ throw new Error(`canonicalJson: non-enumerable own property "${k}" at ${path} (invisible to canonicalization; refusing the projection)`);
107
+ if (d.get !== undefined || d.set !== undefined)
108
+ throw new Error(`canonicalJson: accessor property "${k}" at ${path} (a getter is code, not data; refusing the projection)`);
109
+ copy[k] = interchangeableCopy(d.value, `${path}.${k}`);
110
+ }
111
+ return copy;
112
+ }
113
+ default:
114
+ throw new Error(`canonicalJson: unsupported ${typeof v} at ${path}`);
115
+ }
116
+ }
117
+ /** RFC 8785 canonical JSON text of a value (strict: I-JSON enforced, no undefined→null). */
118
+ export function canonicalJson(value) {
119
+ return canonicalizeEx(interchangeableCopy(value, "$"), { undefinedInArrayToNull: false });
120
+ }
121
+ //# sourceMappingURL=canonical-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-json.js","sourceRoot":"","sources":["../src/canonical-json.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,5 @@
1
- /** Digest identity form used everywhere a contract artifact is referenced: `sha256:<hex>`. */
2
- export declare const DIGEST_PREFIX: "sha256:";
3
- /** True iff `s` is a well-formed `sha256:<hex>` artifact digest. */
4
- export declare function isContractDigest(s: string): boolean;
5
- /** True iff the string is well-formed UTF-16 (no unpaired surrogate). A lone surrogate has NO
6
- * UTF-8 byte encoding — encoders silently substitute U+FFFD, so two distinct malformed strings
7
- * can collapse to one byte sequence; anything digest- or wire-bound must refuse them. */
8
- export declare function isWellFormedUnicode(s: string): boolean;
9
- /** RFC 8785 canonical JSON text of a value (strict: I-JSON enforced, no undefined→null). */
10
- export declare function canonicalJson(value: unknown): string;
1
+ import { DIGEST_PREFIX, canonicalJson, isContractDigest, isWellFormedUnicode } from "./canonical-json.js";
2
+ export { DIGEST_PREFIX, canonicalJson, isContractDigest, isWellFormedUnicode };
11
3
  /** Content address of a contract artifact: `sha256:<hex>` over its RFC 8785 form (SPEC §13.7). */
12
4
  export declare function contractDigest(value: unknown): string;
13
5
  /** `sha256:<hex>` over RAW bytes (a string digests as its UTF-8 encoding), NEVER re-canonicalized:
@@ -1 +1 @@
1
- {"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../src/canonical.ts"],"names":[],"mappings":"AAYA,8FAA8F;AAC9F,eAAO,MAAM,aAAa,EAAG,SAAkB,CAAC;AAGhD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;0FAE0F;AAC1F,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEtD;AAsFD,4FAA4F;AAC5F,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGpD;AAED,kGAAkG;AAClG,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAErD;AAED;;;;;qEAKqE;AACrE,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAS3D;AAED;;;;;;;;;;0CAU0C;AAC1C,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAK5E;AAED;;;8DAG8D;AAC9D,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAWzE"}
1
+ {"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../src/canonical.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAoB,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE5H,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,CAAC;AAE/E,kGAAkG;AAClG,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAErD;AAED;;;;;qEAKqE;AACrE,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAS3D;AAED;;;;;;;;;;0CAU0C;AAC1C,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAK5E;AAED;;;8DAG8D;AAC9D,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAWzE"}
package/dist/canonical.js CHANGED
@@ -8,114 +8,8 @@
8
8
  * error, not data, and MUST NOT silently become `null`.
9
9
  */
10
10
  import { createHash } from "node:crypto";
11
- import { canonicalizeEx } from "json-canonicalize";
12
- /** Digest identity form used everywhere a contract artifact is referenced: `sha256:<hex>`. */
13
- export const DIGEST_PREFIX = "sha256:";
14
- const DIGEST_RE = /^sha256:[0-9a-f]{64}$/;
15
- /** True iff `s` is a well-formed `sha256:<hex>` artifact digest. */
16
- export function isContractDigest(s) {
17
- return DIGEST_RE.test(s);
18
- }
19
- /** True iff the string is well-formed UTF-16 (no unpaired surrogate). A lone surrogate has NO
20
- * UTF-8 byte encoding — encoders silently substitute U+FFFD, so two distinct malformed strings
21
- * can collapse to one byte sequence; anything digest- or wire-bound must refuse them. */
22
- export function isWellFormedUnicode(s) {
23
- return !hasLoneSurrogate(s);
24
- }
25
- /** True iff the string contains an unpaired UTF-16 surrogate (not well-formed / I-JSON
26
- * violation). Manual scan: the repo's TS lib target predates `String#isWellFormed`. */
27
- function hasLoneSurrogate(s) {
28
- for (let i = 0; i < s.length; i++) {
29
- const c = s.charCodeAt(i);
30
- if (c >= 0xd800 && c <= 0xdbff) {
31
- const n = s.charCodeAt(i + 1);
32
- if (!(n >= 0xdc00 && n <= 0xdfff))
33
- return true;
34
- i++; // well-formed pair; skip the low half
35
- }
36
- else if (c >= 0xdc00 && c <= 0xdfff) {
37
- return true; // low surrogate with no preceding high half
38
- }
39
- }
40
- return false;
41
- }
42
- /** Walk a JSON value and throw on anything that cannot canonicalize EXACTLY (D28: verification
43
- * and digesting must never run over a normalizing projection):
44
- * - strings that are not well-formed UTF-16 (a lone surrogate violates I-JSON; canonicalizing
45
- * it would mint a digest for text that cannot interchange), in values AND keys;
46
- * - `undefined` anywhere and non-finite numbers (RFC 8785 cannot represent them);
47
- * - NON-PLAIN-DATA graphs. `Object.entries` sees only enumerable string-keyed own data props,
48
- * and the canonicalizer applies `toJSON`, so a symbol-keyed or non-enumerable own property,
49
- * an accessor, or a class/exotic instance (Date → ISO string, Map → `{}`) would be SILENTLY
50
- * projected away or rewritten — the exact field-dropping class D28 forbids (an artifact
51
- * carrying state its signature never covered must refuse, not launder through the
52
- * projection). Objects must be ordinary with a `null`/`Object.prototype` prototype and only
53
- * enumerable string-keyed own DATA properties; arrays must be ordinary `Array.prototype`
54
- * arrays with no holes and no extra own properties. */
55
- function assertInterchangeable(v, path) {
56
- if (v === null)
57
- return;
58
- switch (typeof v) {
59
- case "string":
60
- if (hasLoneSurrogate(v))
61
- throw new Error(`canonicalJson: lone surrogate in string at ${path} (I-JSON violation)`);
62
- return;
63
- case "number":
64
- if (!Number.isFinite(v))
65
- throw new Error(`canonicalJson: non-finite number at ${path}`);
66
- return;
67
- case "boolean":
68
- return;
69
- case "undefined":
70
- throw new Error(`canonicalJson: undefined at ${path} (strict mode never coerces to null)`);
71
- case "object": {
72
- if (Array.isArray(v)) {
73
- if (Object.getPrototypeOf(v) !== Array.prototype)
74
- throw new Error(`canonicalJson: non-ordinary array at ${path} (a subclassed/exotic array canonicalizes through projections)`);
75
- for (const k of Reflect.ownKeys(v)) {
76
- if (typeof k !== "string")
77
- throw new Error(`canonicalJson: symbol-keyed own property on array at ${path} (invisible to canonicalization; refusing the projection)`);
78
- if (k === "length")
79
- continue;
80
- if (!/^(0|[1-9][0-9]*)$/.test(k) || Number(k) >= v.length)
81
- throw new Error(`canonicalJson: non-index own property "${k}" on array at ${path} (invisible to canonicalization; refusing the projection)`);
82
- }
83
- for (let i = 0; i < v.length; i++) {
84
- const d = Object.getOwnPropertyDescriptor(v, i);
85
- if (d === undefined)
86
- throw new Error(`canonicalJson: hole at ${path}[${i}] (a hole would be coerced to null; refusing the projection)`);
87
- if (!d.enumerable || d.get !== undefined || d.set !== undefined)
88
- throw new Error(`canonicalJson: non-enumerable or accessor element at ${path}[${i}] (refusing the projection)`);
89
- assertInterchangeable(v[i], `${path}[${i}]`);
90
- }
91
- return;
92
- }
93
- const proto = Object.getPrototypeOf(v);
94
- if (proto !== Object.prototype && proto !== null)
95
- throw new Error(`canonicalJson: non-plain object at ${path} (a class/exotic instance canonicalizes through projections like toJSON; only plain data objects are interchangeable)`);
96
- for (const k of Reflect.ownKeys(v)) {
97
- if (typeof k !== "string")
98
- throw new Error(`canonicalJson: symbol-keyed own property at ${path} (invisible to canonicalization; refusing the projection)`);
99
- if (hasLoneSurrogate(k))
100
- throw new Error(`canonicalJson: lone surrogate in key at ${path}.${k}`);
101
- const d = Object.getOwnPropertyDescriptor(v, k);
102
- if (!d.enumerable)
103
- throw new Error(`canonicalJson: non-enumerable own property "${k}" at ${path} (invisible to canonicalization; refusing the projection)`);
104
- if (d.get !== undefined || d.set !== undefined)
105
- throw new Error(`canonicalJson: accessor property "${k}" at ${path} (a getter is code, not data; refusing the projection)`);
106
- assertInterchangeable(v[k], `${path}.${k}`);
107
- }
108
- return;
109
- }
110
- default:
111
- throw new Error(`canonicalJson: unsupported ${typeof v} at ${path}`);
112
- }
113
- }
114
- /** RFC 8785 canonical JSON text of a value (strict: I-JSON enforced, no undefined→null). */
115
- export function canonicalJson(value) {
116
- assertInterchangeable(value, "$");
117
- return canonicalizeEx(value, { undefinedInArrayToNull: false });
118
- }
11
+ import { DIGEST_PREFIX, canonicalJson, hasLoneSurrogate, isContractDigest, isWellFormedUnicode } from "./canonical-json.js";
12
+ export { DIGEST_PREFIX, canonicalJson, isContractDigest, isWellFormedUnicode };
119
13
  /** Content address of a contract artifact: `sha256:<hex>` over its RFC 8785 form (SPEC §13.7). */
120
14
  export function contractDigest(value) {
121
15
  return DIGEST_PREFIX + createHash("sha256").update(canonicalJson(value), "utf8").digest("hex");
@@ -1 +1 @@
1
- {"version":3,"file":"canonical.js","sourceRoot":"","sources":["../src/canonical.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canonical.js","sourceRoot":"","sources":["../src/canonical.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE5H,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,CAAC;AAE/E,kGAAkG;AAClG,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjG,CAAC;AAED;;;;;qEAKqE;AACrE,MAAM,UAAU,SAAS,CAAC,IAAyB;IACjD,MAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC/B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,gBAAgB,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qHAAqH,CAAC,CAAC;QACnK,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;;;0CAU0C;AAC1C,MAAM,UAAU,cAAc,CAAC,KAAiB,EAAE,MAAc;IAC9D,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7G,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,MAAM,KAAK,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,KAAK,CAAC,UAAU,sBAAsB,MAAM,gBAAgB,MAAM,EAAE,CAAC,CAAC;IACrJ,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;8DAG8D;AAC9D,MAAM,UAAU,cAAc,CAAC,KAAiB,EAAE,MAAc;IAC9D,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7G,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/E,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,6BAA8B,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7G,CAAC;IACD,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,MAAM,KAAK,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,MAAM,gBAAgB,MAAM,EAAE,CAAC,CAAC;IACtH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -114,5 +114,9 @@ export declare function readChannelRegistry(opts: {
114
114
  * world-readable in-space, so no elevated view is needed for the read side. */
115
115
  bearer?: string;
116
116
  sentinelCreds?: string;
117
+ /** Read with one batched Direct Get ({@link lastKvEntries}) and bind no consumer. For a credential
118
+ * that holds the bare `$JS.API.DIRECT.GET` row on the registry stream (the `operator` profile) and
119
+ * no CONSUMER.DELETE there: the default scan's consumer outlives the read by five minutes (#4091). */
120
+ directGet?: boolean;
117
121
  }): Promise<ChannelRegistryFile>;
118
122
  //# sourceMappingURL=channels.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../src/channels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../src/channels.ts"],"names":[],"mappings":"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"}
package/dist/channels.js CHANGED
@@ -12,7 +12,7 @@ import {} from "@nats-io/transport-node";
12
12
  import { dialerFor } from "./endpoint.js";
13
13
  import { channelBucket, CHANNEL_DEFAULTS_KEY } from "./subjects.js";
14
14
  import { standaloneConnectOpts } from "./streams.js";
15
- import { liveKvEntries } from "./kv-scan.js";
15
+ import { lastKvEntries, liveKvEntries } from "./kv-scan.js";
16
16
  /** Length caps on the model-facing registry text — unbounded text would stuff every agent's
17
17
  * context and bloat the KV, so a write past these throws rather than clamps. */
18
18
  export const MAX_CHANNEL_DESCRIPTION = 200;
@@ -196,7 +196,11 @@ export async function readChannelRegistry(opts) {
196
196
  let defaults;
197
197
  try {
198
198
  // ONE pass: this was a `keys()` scan plus a per-key `get()`, so one round trip per channel.
199
- for (const e of await liveKvEntries(kv)) {
199
+ // A Direct Get to a missing stream has no responder, so its 404 comes from STREAM.INFO first.
200
+ const entries = opts.directGet
201
+ ? (await kv.status(), (await lastKvEntries(kv)).filter((e) => e.operation !== "DEL" && e.operation !== "PURGE"))
202
+ : await liveKvEntries(kv);
203
+ for (const e of entries) {
200
204
  if (e.key === CHANNEL_DEFAULTS_KEY) {
201
205
  try {
202
206
  defaults = decodeChannelEntry(e);
@@ -1 +1 @@
1
- {"version":3,"file":"channels.js","sourceRoot":"","sources":["../src/channels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channels.js","sourceRoot":"","sources":["../src/channels.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,GAAG,EAAyB,MAAM,aAAa,CAAC;AACzD,OAAO,EAAuB,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAS5D;iFACiF;AACjF,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAC3C,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C;;qBAEqB;AACrB,MAAM,UAAU,qBAAqB,CAAC,GAAkB;IACtD,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC7B,YAAY,CAAC,aAAa,EAAE,GAAG,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;IACtE,YAAY,CAAC,cAAc,EAAE,GAAG,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,IAAwB,EAAE,GAAW;IACxE,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO;IAC/B,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,mBAAmB,CAAC,CAAC;IACnF,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,cAAc,IAAI,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;AACtG,CAAC;AAED;;sDAEsD;AACtD,MAAM,UAAU,uBAAuB,CAAC,CAAkB;IACxD,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,SAAS;QACzD,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,MAAM,4BAA4B,CAAC,CAAC;IAC3E,IAAI,CAAC,CAAC,YAAY,KAAK,SAAS;QAAE,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,wBAAwB;IACzF,IAAI,CAAC,CAAC,aAAa,KAAK,SAAS,IAAI,CAAC,CAAC,aAAa,KAAK,MAAM,IAAI,CAAC,CAAC,aAAa,KAAK,SAAS;QAC9F,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,aAAa,kCAAkC,CAAC,CAAC;AACjG,CAAC;AAED;;;iFAGiF;AACjF,MAAM,UAAU,kBAAkB,CAAC,CAAU;IAC3C,MAAM,KAAK,GAAY,CAAC,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,IAAI,CAAC,CAAC,GAAG,KAAK,oBAAoB;QAAE,uBAAuB,CAAC,KAAK,CAAC,CAAC;;QAC9D,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC;AACf,CAAC;AAED;8EAC8E;AAC9E,MAAM,UAAU,aAAa,CAAC,CAAS;IACrC,MAAM,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,4CAA4C,CAAC,CAAC;IAC5F,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAA0B,CAAC,CAAC;IACjG,OAAO,CAAC,GAAG,IAAI,CAAC;AAClB,CAAC;AAED;8EAC8E;AAC9E,MAAM,UAAU,eAAe,CAC7B,GAA8B,EAC9B,QAAqC;IAErC,OAAO,GAAG,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,IAAI,IAAI,CAAC;AACjD,CAAC;AAED;8EAC8E;AAC9E,MAAM,UAAU,uBAAuB,CACrC,GAA8B,EAC9B,QAAqC;IAErC,MAAM,CAAC,GAAG,GAAG,EAAE,YAAY,IAAI,QAAQ,EAAE,YAAY,CAAC;IACtD,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;;8CAI8C;AAC9C,MAAM,UAAU,sBAAsB,CACpC,GAA8B,EAC9B,QAAqC;IAErC,OAAO,GAAG,EAAE,aAAa,IAAI,QAAQ,EAAE,aAAa,IAAI,SAAS,CAAC;AACpE,CAAC;AAED;;wFAEwF;AACxF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,EAAkB,EAClB,KAAa,EACb,OAA6B,EAAE;IAE/B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC;IACxB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,iEAAiE;AACjE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,EAAM,EACN,OAAe;IAEf,OAAO,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED,4DAA4D;AAC5D,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,EAAM;IAC9C,OAAO,MAAM,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;AAC1C,CAAC;AAED;gFACgF;AAChF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,EAAM,EACN,OAAe,EACf,KAAoB;IAEpB,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAkB,EAAE,GAAG,CAAC,MAAM,iBAAiB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC;IACtF,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAChD,CAAC;AAED;wFACwF;AACxF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,EAAM,EAAE,KAAsB;IACvE,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAoB,EAAE,GAAG,CAAC,MAAM,mBAAmB,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC;IACjF,MAAM,EAAE,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,EAAM,EAAE,GAAW;IACvC,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK,IAAI,CAAC,CAAC,SAAS,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC;IAC7E,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;iGAGiG;AACjG,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAQzC;IACC,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,qBAAqB,CAAC,EAAE,GAAG,IAAI,EAAE,8EAA8E,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACtM,IAAI,CAAC;QACH,oHAAoH;QACpH,0FAA0F;QAC1F,uEAAuE;QACvE,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACvE,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,MAAM,oBAAoB,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3E,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;YACnE,MAAM,kBAAkB,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC/C,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;mGAKmG;AACnG,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,IAKhD;IACC,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,qBAAqB,CAAC,EAAE,GAAG,IAAI,EAAE,8EAA8E,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACtM,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,MAAM,mBAAmB,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC/E,MAAM,oBAAoB,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;iDAIiD;AACjD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAQpC;IACC,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,qBAAqB,CAAC,EAAE,GAAG,IAAI,EAAE,8EAA8E,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACtM,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACxE,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ;YAAE,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChE,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;qCAEqC;AACrC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAYzC;IACC,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,qBAAqB,CAAC,EAAE,GAAG,IAAI,EAAE,8EAA8E,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACtM,IAAI,CAAC;QACH,iGAAiG;QACjG,iGAAiG;QACjG,gGAAgG;QAChG,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAkC,EAAE,CAAC;QACnD,IAAI,QAAqC,CAAC;QAC1C,IAAI,CAAC;YACH,4FAA4F;YAC5F,8FAA8F;YAC9F,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS;gBAC5B,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,IAAI,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC;gBAChH,CAAC,CAAC,MAAM,aAAa,CAAC,EAAE,CAAC,CAAC;YAC5B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,IAAI,CAAC,CAAC,GAAG,KAAK,oBAAoB,EAAE,CAAC;oBACnC,IAAI,CAAC;wBAAC,QAAQ,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAC,uCAAuC,CAAC,CAAC;oBAC3F,SAAS;gBACX,CAAC;gBACD,IAAI,GAA8B,CAAC;gBACnC,IAAI,CAAC;oBAAC,GAAG,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC;gBACrE,uFAAuF;gBACvF,wFAAwF;gBACxF,IAAI,GAAG;oBACL,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE;wBACrC,KAAK,EAAE,GAAG;wBACV,UAAU,EAAE,IAAI;wBAChB,YAAY,EAAE,IAAI;wBAClB,QAAQ,EAAE,IAAI;qBACf,CAAC,CAAC;YACP,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,iGAAiG;YACjG,IAAK,CAAuB,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAE,CAAW,CAAC,OAAO,CAAC;gBAAE,MAAM,CAAC,CAAC;QACjG,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAChC,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"checkpoint-answer.d.ts","sourceRoot":"","sources":["../src/checkpoint-answer.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAOtC;oGACoG;AACpG,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACd,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,oFAAoF;IACpF,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;uEACmE;IACnE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,uFAAuF;IACvF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AA+BD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAU/G;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAe5C;AAED,wEAAwE;AACxE,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAO5C;AAED;;;;;;;4EAO4E;AAC5E,wBAAsB,wBAAwB,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAQxH"}
1
+ {"version":3,"file":"checkpoint-answer.d.ts","sourceRoot":"","sources":["../src/checkpoint-answer.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAQtC;oGACoG;AACpG,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACd,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,oFAAoF;IACpF,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;uEACmE;IACnE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,uFAAuF;IACvF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AA+BD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAQ/G;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAe5C;AAED,wEAAwE;AACxE,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAO5C;AAED;;;;;;;4EAO4E;AAC5E,wBAAsB,wBAAwB,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAQxH"}
@@ -27,9 +27,10 @@
27
27
  * acted on the accepted answer and that stays true. It exists so a participant who changes their
28
28
  * position records the change where the original sits, and a reader of the run sees both.
29
29
  */
30
- import { createHash, randomBytes } from "node:crypto";
30
+ import { randomBytes } from "node:crypto";
31
31
  import { EpEnvelopeError } from "./endpoint-envelope.js";
32
32
  import { assertIdToken, endpointToken } from "./endpoint-subjects.js";
33
+ import { digestIdToken } from "./digest-id.js";
33
34
  import { RECORD_KINDS, createRecordEntry, recordAtomicKey } from "./endpoint-records.js";
34
35
  import { canonicalJson } from "./canonical.js";
35
36
  import { walkKvEntries } from "./kv-scan.js";
@@ -79,9 +80,7 @@ export function checkpointAnswerId(a) {
79
80
  value: a.value ?? null,
80
81
  artifact: a.artifact ?? null,
81
82
  });
82
- // base64url of the sha256, truncated to 43 chars — the same shape and alphabet the run's own
83
- // request ids use, so an answer id is a `<token>` by construction rather than by hope.
84
- return createHash("sha256").update(canonical, "utf8").digest("base64url").slice(0, 43);
83
+ return digestIdToken(canonical);
85
84
  }
86
85
  /**
87
86
  * The id an AMENDMENT is filed under: fresh for every filing, never derived from its content.