@veraanchor/verifier 0.0.0-stage → 0.1.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 (214) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/CONTRIBUTING.md +33 -0
  3. package/LICENSE +21 -0
  4. package/NOTICE +4 -0
  5. package/README.md +263 -2
  6. package/SECURITY.md +21 -0
  7. package/dist/cli/commandV1.d.ts +5 -0
  8. package/dist/cli/commandV1.d.ts.map +1 -0
  9. package/dist/cli/commandV1.js +440 -0
  10. package/dist/cli/commandV1.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +5 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/contracts/verification.d.ts +77 -0
  16. package/dist/contracts/verification.d.ts.map +1 -0
  17. package/dist/contracts/verification.js +6 -0
  18. package/dist/contracts/verification.js.map +1 -0
  19. package/dist/crypto/sha3.d.ts +15 -0
  20. package/dist/crypto/sha3.d.ts.map +1 -0
  21. package/dist/crypto/sha3.js +27 -0
  22. package/dist/crypto/sha3.js.map +1 -0
  23. package/dist/crypto/streamSha3.d.ts +26 -0
  24. package/dist/crypto/streamSha3.d.ts.map +1 -0
  25. package/dist/crypto/streamSha3.js +52 -0
  26. package/dist/crypto/streamSha3.js.map +1 -0
  27. package/dist/hf/hashContractV1.d.ts +48 -0
  28. package/dist/hf/hashContractV1.d.ts.map +1 -0
  29. package/dist/hf/hashContractV1.js +185 -0
  30. package/dist/hf/hashContractV1.js.map +1 -0
  31. package/dist/index.d.ts +80 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +57 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/merkle/membership.d.ts +30 -0
  36. package/dist/merkle/membership.d.ts.map +1 -0
  37. package/dist/merkle/membership.js +105 -0
  38. package/dist/merkle/membership.js.map +1 -0
  39. package/dist/policy/contractV1.d.ts +37 -0
  40. package/dist/policy/contractV1.d.ts.map +1 -0
  41. package/dist/policy/contractV1.js +2 -0
  42. package/dist/policy/contractV1.js.map +1 -0
  43. package/dist/policy/evaluateV1.d.ts +24 -0
  44. package/dist/policy/evaluateV1.d.ts.map +1 -0
  45. package/dist/policy/evaluateV1.js +320 -0
  46. package/dist/policy/evaluateV1.js.map +1 -0
  47. package/dist/profiles/dataset/sourceV1.d.ts +22 -0
  48. package/dist/profiles/dataset/sourceV1.d.ts.map +1 -0
  49. package/dist/profiles/dataset/sourceV1.js +73 -0
  50. package/dist/profiles/dataset/sourceV1.js.map +1 -0
  51. package/dist/profiles/dataset/v1.d.ts +39 -0
  52. package/dist/profiles/dataset/v1.d.ts.map +1 -0
  53. package/dist/profiles/dataset/v1.js +362 -0
  54. package/dist/profiles/dataset/v1.js.map +1 -0
  55. package/dist/profiles/execution/contractV1.d.ts +279 -0
  56. package/dist/profiles/execution/contractV1.d.ts.map +1 -0
  57. package/dist/profiles/execution/contractV1.js +364 -0
  58. package/dist/profiles/execution/contractV1.js.map +1 -0
  59. package/dist/profiles/execution/independentStandardsV1.d.ts +44 -0
  60. package/dist/profiles/execution/independentStandardsV1.d.ts.map +1 -0
  61. package/dist/profiles/execution/independentStandardsV1.js +336 -0
  62. package/dist/profiles/execution/independentStandardsV1.js.map +1 -0
  63. package/dist/profiles/execution/reasonCodesV1.d.ts +30 -0
  64. package/dist/profiles/execution/reasonCodesV1.d.ts.map +1 -0
  65. package/dist/profiles/execution/reasonCodesV1.js +20 -0
  66. package/dist/profiles/execution/reasonCodesV1.js.map +1 -0
  67. package/dist/profiles/execution/recomputationV1.d.ts +11 -0
  68. package/dist/profiles/execution/recomputationV1.d.ts.map +1 -0
  69. package/dist/profiles/execution/recomputationV1.js +144 -0
  70. package/dist/profiles/execution/recomputationV1.js.map +1 -0
  71. package/dist/profiles/execution/rulesV1.d.ts +6 -0
  72. package/dist/profiles/execution/rulesV1.d.ts.map +1 -0
  73. package/dist/profiles/execution/rulesV1.js +855 -0
  74. package/dist/profiles/execution/rulesV1.js.map +1 -0
  75. package/dist/profiles/execution/standardsPlanV1.d.ts +18 -0
  76. package/dist/profiles/execution/standardsPlanV1.d.ts.map +1 -0
  77. package/dist/profiles/execution/standardsPlanV1.js +16 -0
  78. package/dist/profiles/execution/standardsPlanV1.js.map +1 -0
  79. package/dist/profiles/execution/verificationV1.d.ts +28 -0
  80. package/dist/profiles/execution/verificationV1.d.ts.map +1 -0
  81. package/dist/profiles/execution/verificationV1.js +188 -0
  82. package/dist/profiles/execution/verificationV1.js.map +1 -0
  83. package/dist/profiles/ingest/sourceV1.d.ts +36 -0
  84. package/dist/profiles/ingest/sourceV1.d.ts.map +1 -0
  85. package/dist/profiles/ingest/sourceV1.js +99 -0
  86. package/dist/profiles/ingest/sourceV1.js.map +1 -0
  87. package/dist/profiles/ingest/v1.d.ts +65 -0
  88. package/dist/profiles/ingest/v1.d.ts.map +1 -0
  89. package/dist/profiles/ingest/v1.js +477 -0
  90. package/dist/profiles/ingest/v1.js.map +1 -0
  91. package/dist/profiles/sourceV1Helpers.d.ts +48 -0
  92. package/dist/profiles/sourceV1Helpers.d.ts.map +1 -0
  93. package/dist/profiles/sourceV1Helpers.js +141 -0
  94. package/dist/profiles/sourceV1Helpers.js.map +1 -0
  95. package/dist/reports/coreV1.d.ts +7 -0
  96. package/dist/reports/coreV1.d.ts.map +1 -0
  97. package/dist/reports/coreV1.js +195 -0
  98. package/dist/reports/coreV1.js.map +1 -0
  99. package/dist/reports/portableV1.d.ts +48 -0
  100. package/dist/reports/portableV1.d.ts.map +1 -0
  101. package/dist/reports/portableV1.js +279 -0
  102. package/dist/reports/portableV1.js.map +1 -0
  103. package/dist/reports/validationV1.d.ts +19 -0
  104. package/dist/reports/validationV1.d.ts.map +1 -0
  105. package/dist/reports/validationV1.js +441 -0
  106. package/dist/reports/validationV1.js.map +1 -0
  107. package/dist/resolvers/executionMirrorV1.d.ts +15 -0
  108. package/dist/resolvers/executionMirrorV1.d.ts.map +1 -0
  109. package/dist/resolvers/executionMirrorV1.js +206 -0
  110. package/dist/resolvers/executionMirrorV1.js.map +1 -0
  111. package/dist/resolvers/explorerExecutionV1.d.ts +17 -0
  112. package/dist/resolvers/explorerExecutionV1.d.ts.map +1 -0
  113. package/dist/resolvers/explorerExecutionV1.js +61 -0
  114. package/dist/resolvers/explorerExecutionV1.js.map +1 -0
  115. package/dist/resolvers/explorerPublicV1.d.ts +37 -0
  116. package/dist/resolvers/explorerPublicV1.d.ts.map +1 -0
  117. package/dist/resolvers/explorerPublicV1.js +210 -0
  118. package/dist/resolvers/explorerPublicV1.js.map +1 -0
  119. package/dist/resolvers/explorerPublicationV1.d.ts +20 -0
  120. package/dist/resolvers/explorerPublicationV1.d.ts.map +1 -0
  121. package/dist/resolvers/explorerPublicationV1.js +195 -0
  122. package/dist/resolvers/explorerPublicationV1.js.map +1 -0
  123. package/dist/resolvers/explorerTransportV1.d.ts +17 -0
  124. package/dist/resolvers/explorerTransportV1.d.ts.map +1 -0
  125. package/dist/resolvers/explorerTransportV1.js +112 -0
  126. package/dist/resolvers/explorerTransportV1.js.map +1 -0
  127. package/dist/resolvers/hcs11MirrorV1.d.ts +49 -0
  128. package/dist/resolvers/hcs11MirrorV1.d.ts.map +1 -0
  129. package/dist/resolvers/hcs11MirrorV1.js +293 -0
  130. package/dist/resolvers/hcs11MirrorV1.js.map +1 -0
  131. package/dist/resolvers/hcs13MirrorV1.d.ts +35 -0
  132. package/dist/resolvers/hcs13MirrorV1.d.ts.map +1 -0
  133. package/dist/resolvers/hcs13MirrorV1.js +72 -0
  134. package/dist/resolvers/hcs13MirrorV1.js.map +1 -0
  135. package/dist/resolvers/hcs1MirrorV1.d.ts +28 -0
  136. package/dist/resolvers/hcs1MirrorV1.d.ts.map +1 -0
  137. package/dist/resolvers/hcs1MirrorV1.js +220 -0
  138. package/dist/resolvers/hcs1MirrorV1.js.map +1 -0
  139. package/dist/resolvers/hcs26MirrorV1.d.ts +67 -0
  140. package/dist/resolvers/hcs26MirrorV1.d.ts.map +1 -0
  141. package/dist/resolvers/hcs26MirrorV1.js +218 -0
  142. package/dist/resolvers/hcs26MirrorV1.js.map +1 -0
  143. package/dist/resolvers/hcs26RegistryMirrorV1.d.ts +26 -0
  144. package/dist/resolvers/hcs26RegistryMirrorV1.d.ts.map +1 -0
  145. package/dist/resolvers/hcs26RegistryMirrorV1.js +200 -0
  146. package/dist/resolvers/hcs26RegistryMirrorV1.js.map +1 -0
  147. package/dist/resolvers/hcs2MirrorV1.d.ts +26 -0
  148. package/dist/resolvers/hcs2MirrorV1.d.ts.map +1 -0
  149. package/dist/resolvers/hcs2MirrorV1.js +196 -0
  150. package/dist/resolvers/hcs2MirrorV1.js.map +1 -0
  151. package/dist/resolvers/hederaMirrorV1.d.ts +22 -0
  152. package/dist/resolvers/hederaMirrorV1.d.ts.map +1 -0
  153. package/dist/resolvers/hederaMirrorV1.js +338 -0
  154. package/dist/resolvers/hederaMirrorV1.js.map +1 -0
  155. package/dist/standards/hcs/hcs11V1.d.ts +51 -0
  156. package/dist/standards/hcs/hcs11V1.d.ts.map +1 -0
  157. package/dist/standards/hcs/hcs11V1.js +289 -0
  158. package/dist/standards/hcs/hcs11V1.js.map +1 -0
  159. package/dist/standards/hcs/hcs13V1.d.ts +39 -0
  160. package/dist/standards/hcs/hcs13V1.d.ts.map +1 -0
  161. package/dist/standards/hcs/hcs13V1.js +114 -0
  162. package/dist/standards/hcs/hcs13V1.js.map +1 -0
  163. package/dist/standards/hcs/hcs14V1.d.ts +35 -0
  164. package/dist/standards/hcs/hcs14V1.d.ts.map +1 -0
  165. package/dist/standards/hcs/hcs14V1.js +168 -0
  166. package/dist/standards/hcs/hcs14V1.js.map +1 -0
  167. package/dist/standards/hcs/hcs1V1.d.ts +30 -0
  168. package/dist/standards/hcs/hcs1V1.d.ts.map +1 -0
  169. package/dist/standards/hcs/hcs1V1.js +140 -0
  170. package/dist/standards/hcs/hcs1V1.js.map +1 -0
  171. package/dist/standards/hcs/hcs26V1.d.ts +58 -0
  172. package/dist/standards/hcs/hcs26V1.d.ts.map +1 -0
  173. package/dist/standards/hcs/hcs26V1.js +339 -0
  174. package/dist/standards/hcs/hcs26V1.js.map +1 -0
  175. package/dist/standards/hcs/hcs2V1.d.ts +36 -0
  176. package/dist/standards/hcs/hcs2V1.d.ts.map +1 -0
  177. package/dist/standards/hcs/hcs2V1.js +181 -0
  178. package/dist/standards/hcs/hcs2V1.js.map +1 -0
  179. package/dist/standards/hcs/jsonCanonicalV1.d.ts +15 -0
  180. package/dist/standards/hcs/jsonCanonicalV1.d.ts.map +1 -0
  181. package/dist/standards/hcs/jsonCanonicalV1.js +160 -0
  182. package/dist/standards/hcs/jsonCanonicalV1.js.map +1 -0
  183. package/dist/triangulation/compareV1.d.ts +50 -0
  184. package/dist/triangulation/compareV1.d.ts.map +1 -0
  185. package/dist/triangulation/compareV1.js +236 -0
  186. package/dist/triangulation/compareV1.js.map +1 -0
  187. package/dist/triangulation/executionPlanV1.d.ts +39 -0
  188. package/dist/triangulation/executionPlanV1.d.ts.map +1 -0
  189. package/dist/triangulation/executionPlanV1.js +208 -0
  190. package/dist/triangulation/executionPlanV1.js.map +1 -0
  191. package/dist/triangulation/executionPublicV1.d.ts +22 -0
  192. package/dist/triangulation/executionPublicV1.d.ts.map +1 -0
  193. package/dist/triangulation/executionPublicV1.js +39 -0
  194. package/dist/triangulation/executionPublicV1.js.map +1 -0
  195. package/dist/triangulation/messageObservationV1.d.ts +26 -0
  196. package/dist/triangulation/messageObservationV1.d.ts.map +1 -0
  197. package/dist/triangulation/messageObservationV1.js +69 -0
  198. package/dist/triangulation/messageObservationV1.js.map +1 -0
  199. package/dist/triangulation/publicV1.d.ts +29 -0
  200. package/dist/triangulation/publicV1.d.ts.map +1 -0
  201. package/dist/triangulation/publicV1.js +170 -0
  202. package/dist/triangulation/publicV1.js.map +1 -0
  203. package/dist/verification/sourceIntentV1.d.ts +15 -0
  204. package/dist/verification/sourceIntentV1.d.ts.map +1 -0
  205. package/dist/verification/sourceIntentV1.js +206 -0
  206. package/dist/verification/sourceIntentV1.js.map +1 -0
  207. package/docs/cli-v0.1.md +237 -0
  208. package/docs/conformance.md +38 -0
  209. package/docs/threat-model.md +37 -0
  210. package/docs/verification-semantics.md +65 -0
  211. package/examples/README.md +35 -0
  212. package/examples/dataset-offline.mjs +58 -0
  213. package/examples/dataset-policy.mjs +59 -0
  214. package/package.json +65 -4
@@ -0,0 +1,339 @@
1
+ /** Pinned HCS-26 Draft v1.1: offline discovery/version/skill checks.
2
+ * Only supported registry operations and content supplied to this module are
3
+ * inspected. No Hedera lookup, ownership, execution, or current-state claim.
4
+ */
5
+ import { createHash } from "node:crypto";
6
+ import { parseHcs1ReferenceV1 } from "./hcs1V1.js";
7
+ import { canonicalHcsJsonV1, cloneHcsJsonV1, HcsJsonV1Error, parseStrictHcsJsonV1 } from "./jsonCanonicalV1.js";
8
+ export const MAX_HCS26_V1_MANIFEST_BYTES = 256 * 1024;
9
+ const RAW_MANIFEST_BYTES = MAX_HCS26_V1_MANIFEST_BYTES + 64 * 1024;
10
+ const TOPIC = /^0\.0\.[0-9]+$/;
11
+ const SHA256 = /^[0-9a-f]{64}$/;
12
+ const COMMIT = /^[0-9a-f]{40}$/;
13
+ const SEMVER = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/;
14
+ const KEYS_DISCOVERY = new Set(["p", "op", "t_id", "account_id", "metadata", "m"]);
15
+ const KEYS_UPDATE = new Set(["p", "op", "uid", "account_id", "metadata", "m"]);
16
+ const KEYS_VERSION = new Set(["p", "op", "skill_uid", "version", "t_id", "checksum", "status", "m"]);
17
+ const KEYS_METADATA = new Set(["name", "description", "author", "license", "tags", "languages", "capabilities", "homepage", "icon", "repo", "commit"]);
18
+ const KEYS_MANIFEST = new Set(["name", "description", "version", "license", "author", "tags", "languages", "homepage", "repo", "commit", "entrypoints", "files"]);
19
+ const KEYS_FILE = new Set(["path", "hrl", "sha256", "mime"]);
20
+ export class Hcs26V1Error extends Error {
21
+ code;
22
+ constructor(code) {
23
+ super(code);
24
+ this.code = code;
25
+ this.name = "Hcs26V1Error";
26
+ }
27
+ }
28
+ function fail(code) { throw new Hcs26V1Error(code); }
29
+ function object(value, code = "HCS26_FIELD_INVALID") {
30
+ if (!value || typeof value !== "object" || Array.isArray(value) ||
31
+ ![null, Object.prototype].includes(Object.getPrototypeOf(value)))
32
+ return fail(code);
33
+ return value;
34
+ }
35
+ function keys(value, allowed) {
36
+ for (const key of Object.keys(value))
37
+ if (!allowed.has(key))
38
+ return fail("HCS26_FIELD_UNSUPPORTED");
39
+ }
40
+ function text(value, max) {
41
+ if (typeof value !== "string")
42
+ return fail("HCS26_FIELD_INVALID");
43
+ const out = value.trim();
44
+ if (!out || out.length > max || /[\u0000-\u001f\u007f]/.test(out))
45
+ return fail("HCS26_FIELD_INVALID");
46
+ return out;
47
+ }
48
+ function optional(value, max) {
49
+ return value == null || value === "" || (typeof value === "string" && !value.trim()) ? null : text(value, max);
50
+ }
51
+ function topic(value) {
52
+ const out = text(value, 64);
53
+ if (!TOPIC.test(out))
54
+ return fail("HCS26_TOPIC_INVALID");
55
+ return out;
56
+ }
57
+ function version(value) {
58
+ const out = text(value, 64);
59
+ if (!SEMVER.test(out))
60
+ return fail("HCS26_VERSION_INVALID");
61
+ return out;
62
+ }
63
+ function sha(value) {
64
+ if (typeof value !== "string")
65
+ return fail("HCS26_CHECKSUM_INVALID");
66
+ const raw = value.startsWith("sha256:") ? value.slice(7) : value;
67
+ if (!SHA256.test(raw))
68
+ return fail("HCS26_CHECKSUM_INVALID");
69
+ return raw;
70
+ }
71
+ function positive(value) {
72
+ const n = Number(value);
73
+ if (value == null || value === "" || !Number.isSafeInteger(n) || n < 1)
74
+ return fail("HCS26_SKILL_UID_INVALID");
75
+ return n;
76
+ }
77
+ function uid(value) {
78
+ const out = text(value, 256);
79
+ if (!/^[1-9]\d*$/.test(out) || !Number.isSafeInteger(Number(out)))
80
+ return fail("HCS26_SKILL_UID_INVALID");
81
+ return out;
82
+ }
83
+ function hcs1ref(value) {
84
+ try {
85
+ return parseHcs1ReferenceV1(text(value, 256)).reference;
86
+ }
87
+ catch {
88
+ return fail("HCS1_REF_INVALID");
89
+ }
90
+ }
91
+ function authors(value) {
92
+ if (typeof value === "string")
93
+ return text(value, 512);
94
+ const author = object(value);
95
+ keys(author, new Set(["name", "contact", "url"]));
96
+ return {
97
+ name: text(author.name, 256),
98
+ ...(optional(author.contact, 512) == null ? {} : { contact: optional(author.contact, 512) }),
99
+ ...(optional(author.url, 2048) == null ? {} : { url: optional(author.url, 2048) }),
100
+ };
101
+ }
102
+ function ints(value) {
103
+ if (!Array.isArray(value))
104
+ return fail("HCS26_FIELD_INVALID");
105
+ const result = value.map(Number);
106
+ if (result.some((n) => !Number.isSafeInteger(n) || n < 0))
107
+ return fail("HCS26_FIELD_INVALID");
108
+ return [...new Set(result)].sort((a, b) => a - b);
109
+ }
110
+ function strings(value) {
111
+ if (!Array.isArray(value))
112
+ return fail("HCS26_FIELD_INVALID");
113
+ return value.map((v) => text(v, 256));
114
+ }
115
+ function metadata(value, update = false) {
116
+ if (typeof value === "string")
117
+ return hcs1ref(value);
118
+ const obj = object(value);
119
+ keys(obj, KEYS_METADATA);
120
+ if (update && Object.keys(obj).length === 0)
121
+ return fail("HCS26_FIELD_INVALID");
122
+ const out = {};
123
+ for (const [key, limit] of [["name", 256], ["description", 4096], ["license", 128]]) {
124
+ if (!update || Object.hasOwn(obj, key))
125
+ out[key] = text(obj[key], limit);
126
+ }
127
+ if (!update || Object.hasOwn(obj, "author"))
128
+ out.author = authors(obj.author);
129
+ for (const key of ["tags", "languages", "capabilities"]) {
130
+ if (!Object.hasOwn(obj, key))
131
+ continue;
132
+ const val = obj[key];
133
+ if (val == null && !update)
134
+ continue;
135
+ out[key] = val == null ? [] : key === "tags" ? ints(val) : strings(val);
136
+ }
137
+ for (const [key, limit] of [["homepage", 2048], ["icon", 4096], ["repo", 4096]]) {
138
+ if (!Object.hasOwn(obj, key))
139
+ continue;
140
+ const val = update ? text(obj[key], limit) : optional(obj[key], limit);
141
+ if (val != null)
142
+ out[key] = val;
143
+ }
144
+ if (Object.hasOwn(obj, "commit")) {
145
+ const value = text(obj.commit, 40);
146
+ if (!COMMIT.test(value))
147
+ return fail("HCS26_COMMIT_INVALID");
148
+ out.commit = value;
149
+ }
150
+ return out;
151
+ }
152
+ function parseWire(value) {
153
+ let parsed;
154
+ try {
155
+ parsed = parseStrictHcsJsonV1(value, 1024);
156
+ }
157
+ catch (error) {
158
+ if (error instanceof HcsJsonV1Error && error.code === "JSON_TOO_LARGE")
159
+ return fail("HCS26_MESSAGE_TOO_LARGE");
160
+ return fail("HCS26_MESSAGE_INVALID");
161
+ }
162
+ return object(parsed, "HCS26_MESSAGE_INVALID");
163
+ }
164
+ function wireSize(value) {
165
+ if (Buffer.byteLength(JSON.stringify(value), "utf8") > 1024)
166
+ return fail("HCS26_MESSAGE_TOO_LARGE");
167
+ }
168
+ function memoText(value) { return optional(value, 500) == null ? {} : { m: optional(value, 500) }; }
169
+ export function parseHcs26MemoV1(value) {
170
+ const match = typeof value === "string" ? /^hcs-26:(0|1):(\d+):(0|1)$/.exec(value.trim()) : null;
171
+ if (!match)
172
+ return fail("HCS26_MEMO_INVALID");
173
+ const ttl = Number(match[2]);
174
+ if (!Number.isSafeInteger(ttl) || ttl > 31_536_000)
175
+ return fail("HCS26_TTL_INVALID");
176
+ const type_code = Number(match[3]);
177
+ return Object.freeze({ memo: value.trim(), indexed: match[1] === "0", ttl,
178
+ type: type_code === 0 ? "discovery" : "version", type_code });
179
+ }
180
+ /** Supplied historical raw registry message; not a read of current registry state. */
181
+ export function parseHcs26DiscoveryRegisterV1(raw) {
182
+ const obj = parseWire(raw);
183
+ if (obj.p !== "hcs-26" || obj.op !== "register" || obj.skill_uid != null || obj.version != null)
184
+ return fail("HCS26_OPERATION_INVALID");
185
+ keys(obj, KEYS_DISCOVERY);
186
+ const record = { p: "hcs-26", op: "register", t_id: topic(obj.t_id), account_id: topic(obj.account_id),
187
+ metadata: metadata(obj.metadata), ...memoText(obj.m) };
188
+ wireSize(record);
189
+ return Object.freeze(record);
190
+ }
191
+ export function parseHcs26DiscoveryUpdateV1(raw) {
192
+ const obj = parseWire(raw);
193
+ if (obj.p !== "hcs-26" || obj.op !== "update" || obj.uid == null)
194
+ return fail("HCS26_OPERATION_INVALID");
195
+ keys(obj, KEYS_UPDATE);
196
+ if (obj.account_id == null && obj.metadata == null)
197
+ return fail("HCS26_UPDATE_EMPTY");
198
+ const record = { p: "hcs-26", op: "update", uid: uid(obj.uid),
199
+ ...(obj.account_id == null ? {} : { account_id: topic(obj.account_id) }),
200
+ ...(obj.metadata == null ? {} : { metadata: metadata(obj.metadata, true) }), ...memoText(obj.m) };
201
+ wireSize(record);
202
+ return Object.freeze(record);
203
+ }
204
+ export function parseHcs26VersionRegisterV1(raw) {
205
+ const obj = parseWire(raw);
206
+ if (obj.p !== "hcs-26" || obj.op !== "register" || obj.skill_uid == null || obj.version == null)
207
+ return fail("HCS26_OPERATION_INVALID");
208
+ keys(obj, KEYS_VERSION);
209
+ const status = obj.status == null ? "active" : text(obj.status, 40).toLowerCase();
210
+ if (status !== "active" && status !== "deprecated" && status !== "yanked")
211
+ return fail("HCS26_STATUS_INVALID");
212
+ const record = { p: "hcs-26", op: "register", skill_uid: positive(obj.skill_uid),
213
+ version: version(obj.version), t_id: topic(obj.t_id), checksum: `sha256:${sha(obj.checksum)}`,
214
+ status, ...memoText(obj.m) };
215
+ wireSize(record);
216
+ return Object.freeze(record);
217
+ }
218
+ function filePath(value) {
219
+ const path = text(value, 512).replace(/\\/g, "/");
220
+ const parts = path.split("/");
221
+ if (path.startsWith("/") || /^[A-Za-z]:/.test(path) || parts.some((p) => !p || p === "." || p === "..")) {
222
+ return fail("HCS26_PATH_INVALID");
223
+ }
224
+ return path;
225
+ }
226
+ function manifestFile(value) {
227
+ const obj = object(value);
228
+ keys(obj, KEYS_FILE);
229
+ const path = filePath(obj.path);
230
+ const digest = text(obj.sha256, 64).toLowerCase();
231
+ if (!SHA256.test(digest))
232
+ return fail("HCS26_FILE_HASH_INVALID");
233
+ return { path, hrl: hcs1ref(obj.hrl), sha256: digest, mime: text(obj.mime, 256) };
234
+ }
235
+ export function finalizeHcs26SkillManifestV1(value) {
236
+ const obj = object(value);
237
+ keys(obj, KEYS_MANIFEST);
238
+ if (!Array.isArray(obj.files) || obj.files.length < 1 || obj.files.length > 256)
239
+ return fail("HCS26_FILES_INVALID");
240
+ const files = obj.files.map(manifestFile);
241
+ const paths = new Set();
242
+ for (const file of files) {
243
+ if (paths.has(file.path))
244
+ return fail("HCS26_PATH_DUPLICATE");
245
+ paths.add(file.path);
246
+ }
247
+ if (!paths.has("SKILL.md"))
248
+ return fail("HCS26_SKILL_MD_REQUIRED");
249
+ files.sort((a, b) => Buffer.compare(Buffer.from(a.path), Buffer.from(b.path)));
250
+ const normalized = {
251
+ name: text(obj.name, 256), description: text(obj.description, 4096),
252
+ version: version(obj.version), license: text(obj.license, 128), author: authors(obj.author),
253
+ };
254
+ if (obj.tags != null)
255
+ normalized.tags = ints(obj.tags);
256
+ if (obj.languages != null)
257
+ normalized.languages = strings(obj.languages);
258
+ for (const [key, limit] of [["homepage", 2048], ["repo", 4096]]) {
259
+ const val = optional(obj[key], limit);
260
+ if (val != null)
261
+ normalized[key] = val;
262
+ }
263
+ if (obj.commit != null) {
264
+ const commit = text(obj.commit, 40);
265
+ if (!COMMIT.test(commit))
266
+ return fail("HCS26_COMMIT_INVALID");
267
+ normalized.commit = commit;
268
+ }
269
+ if (obj.entrypoints != null) {
270
+ if (!Array.isArray(obj.entrypoints))
271
+ return fail("HCS26_FIELD_INVALID");
272
+ normalized.entrypoints = obj.entrypoints;
273
+ }
274
+ normalized.files = files;
275
+ let canonical;
276
+ try {
277
+ canonical = canonicalHcsJsonV1(normalized, MAX_HCS26_V1_MANIFEST_BYTES);
278
+ }
279
+ catch (error) {
280
+ if (error instanceof HcsJsonV1Error) {
281
+ return fail(error.code === "JSON_TOO_LARGE" ? "HCS26_MANIFEST_TOO_LARGE" : "HCS26_CANONICALIZATION_FAILED");
282
+ }
283
+ throw error;
284
+ }
285
+ const bytes = Buffer.from(canonical, "utf8");
286
+ return Object.freeze({ manifest: cloneHcsJsonV1(normalized), canonical_payload: canonical,
287
+ sha256: createHash("sha256").update(bytes).digest("hex"), byte_length: bytes.byteLength });
288
+ }
289
+ export function parseHcs26SkillManifestV1(raw) {
290
+ let parsed;
291
+ try {
292
+ parsed = parseStrictHcsJsonV1(raw, RAW_MANIFEST_BYTES);
293
+ }
294
+ catch (error) {
295
+ if (error instanceof HcsJsonV1Error) {
296
+ return fail(error.code === "JSON_TOO_LARGE" ? "HCS26_MANIFEST_TOO_LARGE" : "HCS26_MANIFEST_JSON_INVALID");
297
+ }
298
+ throw error;
299
+ }
300
+ return finalizeHcs26SkillManifestV1(parsed);
301
+ }
302
+ /** Cross-check a supplied historical version register against actual SKILL.json
303
+ * canonical content. This does not authenticate where the register came from.
304
+ */
305
+ export function verifyHcs26SkillVersionV1(input) {
306
+ let register = null;
307
+ let sha256 = null;
308
+ let checksumMatch = "not_checked";
309
+ const result = (status, reason) => Object.freeze({ status, reason_code: reason, skill_uid: register?.skill_uid ?? null,
310
+ version: register?.version ?? null, manifest_topic_id: register?.t_id ?? null,
311
+ version_status: register?.status ?? null, checksum_match: checksumMatch, sha256 });
312
+ try {
313
+ if (!input || typeof input !== "object")
314
+ return fail("HCS26_INPUT_INVALID");
315
+ register = parseHcs26VersionRegisterV1(input.version_register);
316
+ if (input.expected_skill_uid != null && positive(input.expected_skill_uid) !== register.skill_uid)
317
+ return fail("HCS26_SKILL_UID_MISMATCH");
318
+ if (input.expected_version != null && version(input.expected_version) !== register.version)
319
+ return fail("HCS26_VERSION_MISMATCH");
320
+ if (input.expected_manifest_topic_id != null && topic(input.expected_manifest_topic_id) !== register.t_id)
321
+ return fail("HCS26_TOPIC_MISMATCH");
322
+ const manifest = parseHcs26SkillManifestV1(input.manifest);
323
+ sha256 = manifest.sha256;
324
+ checksumMatch = sha256 === register.checksum.slice(7) ? "match" : "mismatch";
325
+ if (checksumMatch === "mismatch")
326
+ return fail("HCS26_CHECKSUM_MISMATCH");
327
+ if (manifest.manifest.version !== register.version)
328
+ return fail("HCS26_VERSION_MISMATCH");
329
+ if (input.expected_sha256 != null && sha(input.expected_sha256) !== sha256)
330
+ return fail("HCS26_EXPECTED_CHECKSUM_MISMATCH");
331
+ return result("pass", null);
332
+ }
333
+ catch (error) {
334
+ if (error instanceof Hcs26V1Error)
335
+ return result("fail", error.code);
336
+ throw error;
337
+ }
338
+ }
339
+ //# sourceMappingURL=hcs26V1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hcs26V1.js","sourceRoot":"","sources":["../../../src/standards/hcs/hcs26V1.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /** Pinned HCS-2 registry memo and historical register verification. Pure; no network I/O. */
2
+ export type Hcs2V1Memo = Readonly<{
3
+ memo: string;
4
+ indexed: boolean;
5
+ ttl: number;
6
+ }>;
7
+ export type Hcs2V1Register = Readonly<{
8
+ p: "hcs-2";
9
+ op: "register";
10
+ t_id: string;
11
+ metadata?: string;
12
+ m?: string;
13
+ }>;
14
+ export type Hcs2V1VerificationInput = Readonly<{
15
+ /** Unauthenticated in offline mode, unless independently established by caller. */
16
+ memo: unknown;
17
+ /** Original registry message bytes. A single register operation is supported. */
18
+ message: string | Uint8Array;
19
+ /** Independent relying-party expectation, not extracted from the register itself. */
20
+ expected_t_id?: string | null;
21
+ }>;
22
+ export type Hcs2V1VerificationResult = Readonly<{
23
+ status: "pass" | "fail";
24
+ reason_code: string | null;
25
+ memo: Hcs2V1Memo | null;
26
+ register: Hcs2V1Register | null;
27
+ target_match: "match" | "not_checked" | "mismatch";
28
+ }>;
29
+ export declare class Hcs2V1Error extends Error {
30
+ readonly code: string;
31
+ constructor(code: string);
32
+ }
33
+ export declare function parseHcs2MemoV1(value: unknown): Hcs2V1Memo;
34
+ export declare function parseHcs2RegisterV1(message: unknown): Hcs2V1Register;
35
+ export declare function verifyHcs2RegisterV1(input: Hcs2V1VerificationInput): Hcs2V1VerificationResult;
36
+ //# sourceMappingURL=hcs2V1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hcs2V1.d.ts","sourceRoot":"","sources":["../../../src/standards/hcs/hcs2V1.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAS7F,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;IACpC,CAAC,EAAE,OAAO,CAAC;IACX,EAAE,EAAE,UAAU,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ,CAAC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC;IAC7C,mFAAmF;IACnF,IAAI,EAAE,OAAO,CAAC;IACd,iFAAiF;IACjF,OAAO,EAAE,MAAM,GAAG,UAAU,CAAC;IAC7B,qFAAqF;IACrF,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC9C,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,YAAY,EAAE,OAAO,GAAG,aAAa,GAAG,UAAU,CAAC;CACpD,CAAC,CAAC;AAEH,qBAAa,WAAY,SAAQ,KAAK;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM;CAClC;AAID,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAQ1D;AAuFD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,CAapE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,uBAAuB,GAAG,wBAAwB,CAiB7F"}
@@ -0,0 +1,181 @@
1
+ /** Pinned HCS-2 registry memo and historical register verification. Pure; no network I/O. */
2
+ const TOPIC_ID = /^0\.0\.[0-9]+$/;
3
+ const MEMO = /^hcs-2:(0|1):([0-9]+)$/;
4
+ const CONTROL = /[\u0000-\u001f\u007f]/;
5
+ const MAX_MESSAGE_BYTES = 1024;
6
+ const MAX_TTL = 31_536_000;
7
+ const ALLOWED_KEYS = new Set(["p", "op", "t_id", "metadata", "m"]);
8
+ export class Hcs2V1Error extends Error {
9
+ code;
10
+ constructor(code) {
11
+ super(code);
12
+ this.code = code;
13
+ this.name = "Hcs2V1Error";
14
+ }
15
+ }
16
+ function invalid(code) { throw new Hcs2V1Error(code); }
17
+ export function parseHcs2MemoV1(value) {
18
+ if (typeof value !== "string" || value.length > 256)
19
+ invalid("HCS2_MEMO_INVALID");
20
+ const memo = value.trim();
21
+ const match = MEMO.exec(memo);
22
+ if (!match)
23
+ invalid("HCS2_MEMO_INVALID");
24
+ const ttl = Number(match[2]);
25
+ if (!Number.isSafeInteger(ttl) || ttl > MAX_TTL)
26
+ invalid("HCS2_TTL_INVALID");
27
+ return Object.freeze({ memo, indexed: match[1] === "0", ttl });
28
+ }
29
+ function topicId(value) {
30
+ if (typeof value !== "string" || value.length > 128 || !TOPIC_ID.test(value.trim())) {
31
+ invalid("HCS2_TOPIC_INVALID");
32
+ }
33
+ return value.trim();
34
+ }
35
+ function optionalText(value, max) {
36
+ if (value == null)
37
+ return null;
38
+ if (typeof value !== "string")
39
+ invalid("HCS2_TEXT_INVALID");
40
+ const text = value.trim();
41
+ if (!text)
42
+ return null;
43
+ if (text.length > max || CONTROL.test(text))
44
+ invalid("HCS2_TEXT_INVALID");
45
+ return text;
46
+ }
47
+ /** Scan JSON strings to reject ambiguous duplicate top-level keys (including escaped aliases). */
48
+ function readString(text, offset) {
49
+ if (text[offset] !== '"')
50
+ invalid("HCS2_MESSAGE_INVALID");
51
+ let end = offset + 1;
52
+ while (end < text.length) {
53
+ if (text[end] === "\\") {
54
+ end += 2;
55
+ continue;
56
+ }
57
+ if (text[end] === '"') {
58
+ let value;
59
+ try {
60
+ value = JSON.parse(text.slice(offset, end + 1));
61
+ }
62
+ catch {
63
+ invalid("HCS2_MESSAGE_INVALID");
64
+ }
65
+ if (typeof value !== "string")
66
+ invalid("HCS2_MESSAGE_INVALID");
67
+ return { value, end: end + 1 };
68
+ }
69
+ end++;
70
+ }
71
+ return invalid("HCS2_MESSAGE_INVALID");
72
+ }
73
+ function parseFlatRegister(message) {
74
+ if (!(message instanceof Uint8Array) && typeof message !== "string") {
75
+ invalid("HCS2_MESSAGE_INVALID");
76
+ }
77
+ if (typeof message === "string" && message.length > MAX_MESSAGE_BYTES) {
78
+ invalid("HCS2_MESSAGE_TOO_LARGE");
79
+ }
80
+ const bytes = typeof message === "string" ? Buffer.from(message, "utf8") : message;
81
+ if (bytes.byteLength > MAX_MESSAGE_BYTES)
82
+ invalid("HCS2_MESSAGE_TOO_LARGE");
83
+ if (bytes.byteLength < 2)
84
+ invalid("HCS2_MESSAGE_INVALID");
85
+ let text;
86
+ try {
87
+ text = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
88
+ }
89
+ catch {
90
+ invalid("HCS2_MESSAGE_INVALID");
91
+ }
92
+ let json;
93
+ try {
94
+ json = JSON.parse(text);
95
+ }
96
+ catch {
97
+ invalid("HCS2_MESSAGE_INVALID");
98
+ }
99
+ if (!json || typeof json !== "object" || Array.isArray(json))
100
+ invalid("HCS2_MESSAGE_INVALID");
101
+ // All supported register values are strings or optional null. Reject nested
102
+ // objects, ambiguous duplicate properties, and non-string coercions.
103
+ let i = 0;
104
+ const skip = () => { while (/\s/.test(text[i] ?? "") && i < text.length)
105
+ i++; };
106
+ skip();
107
+ if (text[i++] !== "{")
108
+ invalid("HCS2_MESSAGE_INVALID");
109
+ const seen = new Set();
110
+ skip();
111
+ if (text[i] === "}")
112
+ invalid("HCS2_MESSAGE_INVALID");
113
+ while (i < text.length) {
114
+ skip();
115
+ const key = readString(text, i);
116
+ if (seen.has(key.value) || !ALLOWED_KEYS.has(key.value))
117
+ invalid("HCS2_MESSAGE_INVALID");
118
+ seen.add(key.value);
119
+ i = key.end;
120
+ skip();
121
+ if (text[i++] !== ":")
122
+ invalid("HCS2_MESSAGE_INVALID");
123
+ skip();
124
+ if (text[i] === '"') {
125
+ i = readString(text, i).end;
126
+ }
127
+ else if (text.slice(i, i + 4) === "null") {
128
+ i += 4;
129
+ }
130
+ else {
131
+ invalid("HCS2_MESSAGE_INVALID");
132
+ }
133
+ skip();
134
+ if (text[i] === "}") {
135
+ i++;
136
+ break;
137
+ }
138
+ if (text[i++] !== ",")
139
+ invalid("HCS2_MESSAGE_INVALID");
140
+ }
141
+ skip();
142
+ if (i !== text.length)
143
+ invalid("HCS2_MESSAGE_INVALID");
144
+ return json;
145
+ }
146
+ export function parseHcs2RegisterV1(message) {
147
+ const record = parseFlatRegister(message);
148
+ if (record.p !== "hcs-2" || record.op !== "register")
149
+ invalid("HCS2_OPERATION_INVALID");
150
+ const t_id = topicId(record.t_id);
151
+ const metadata = optionalText(record.metadata, 4096);
152
+ const m = optionalText(record.m, 500);
153
+ // The pinned publisher's 1024-byte ceiling applies to the normalized wire form.
154
+ const normalized = { p: "hcs-2", op: "register", t_id,
155
+ ...(metadata === null ? {} : { metadata }), ...(m === null ? {} : { m }) };
156
+ if (Buffer.byteLength(JSON.stringify(normalized), "utf8") > MAX_MESSAGE_BYTES) {
157
+ invalid("HCS2_MESSAGE_TOO_LARGE");
158
+ }
159
+ return Object.freeze(normalized);
160
+ }
161
+ export function verifyHcs2RegisterV1(input) {
162
+ let memo = null;
163
+ let register = null;
164
+ try {
165
+ memo = parseHcs2MemoV1(input?.memo);
166
+ register = parseHcs2RegisterV1(input?.message);
167
+ if (input.expected_t_id != null && topicId(input.expected_t_id) !== register.t_id) {
168
+ return Object.freeze({ status: "fail", reason_code: "HCS2_TARGET_MISMATCH", memo,
169
+ register, target_match: "mismatch" });
170
+ }
171
+ return Object.freeze({ status: "pass", reason_code: null, memo, register,
172
+ target_match: input.expected_t_id == null ? "not_checked" : "match" });
173
+ }
174
+ catch (error) {
175
+ if (!(error instanceof Hcs2V1Error))
176
+ throw error;
177
+ return Object.freeze({ status: "fail", reason_code: error.code, memo, register,
178
+ target_match: "not_checked" });
179
+ }
180
+ }
181
+ //# sourceMappingURL=hcs2V1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hcs2V1.js","sourceRoot":"","sources":["../../../src/standards/hcs/hcs2V1.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAE7F,MAAM,QAAQ,GAAG,gBAAgB,CAAC;AAClC,MAAM,IAAI,GAAG,wBAAwB,CAAC;AACtC,MAAM,OAAO,GAAG,uBAAuB,CAAC;AACxC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B,MAAM,OAAO,GAAG,UAAU,CAAC;AAC3B,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;AAiCnE,MAAM,OAAO,WAAY,SAAQ,KAAK;IACf;IAArB,YAAqB,IAAY;QAAI,KAAK,CAAC,IAAI,CAAC,CAAC;QAA5B,SAAI,GAAJ,IAAI,CAAQ;QAAiB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAAC,CAAC;CAC/E;AAED,SAAS,OAAO,CAAC,IAAY,IAAW,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEtE,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG;QAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAClF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,OAAO;QAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC7E,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QACpF,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,YAAY,CAAC,KAAc,EAAE,GAAW;IAC/C,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC1B,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kGAAkG;AAClG,SAAS,UAAU,CAAC,IAAY,EAAE,MAAc;IAC9C,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG;QAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC1D,IAAI,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC;IACrB,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAAC,GAAG,IAAI,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QAC/C,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;YACtB,IAAI,KAAc,CAAC;YACnB,IAAI,CAAC;gBAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YACxD,MAAM,CAAC;gBAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;YAAC,CAAC;YAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC;YAC/D,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;QACjC,CAAC;QACD,GAAG,EAAE,CAAC;IACR,CAAC;IACD,OAAO,OAAO,CAAC,sBAAsB,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAgB;IACzC,IAAI,CAAC,CAAC,OAAO,YAAY,UAAU,CAAC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QACpE,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACtE,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACnF,IAAI,KAAK,CAAC,UAAU,GAAG,iBAAiB;QAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAC5E,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC;QAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC1D,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QAAC,IAAI,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAAC,CAAC;IACvE,MAAM,CAAC;QAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAAC,CAAC;IAC1C,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IAChC,MAAM,CAAC;QAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAAC,CAAC;IAC1C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC9F,4EAA4E;IAC5E,qEAAqE;IACrE,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,MAAM,IAAI,GAAG,GAAG,EAAE,GAAG,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM;QAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAChF,IAAI,EAAE,CAAC;IACP,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG;QAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,EAAE,CAAC;IACP,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,IAAI,EAAE,CAAC;QACP,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC;QACzF,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;QACZ,IAAI,EAAE,CAAC;QACP,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG;YAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC;QACvD,IAAI,EAAE,CAAC;QACP,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACpB,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAC9B,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YAC3C,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,EAAE,CAAC;QACP,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAAC,CAAC,EAAE,CAAC;YAAC,MAAM;QAAC,CAAC;QACpC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG;YAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,EAAE,CAAC;IACP,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACvD,OAAO,IAA+B,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,CAAC,KAAK,OAAO,IAAI,MAAM,CAAC,EAAE,KAAK,UAAU;QAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACxF,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACrD,MAAM,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtC,gFAAgF;IAChF,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,OAAgB,EAAE,EAAE,EAAE,UAAmB,EAAE,IAAI;QACrE,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC7E,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,GAAG,iBAAiB,EAAE,CAAC;QAC9E,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAA8B;IACjE,IAAI,IAAI,GAAsB,IAAI,CAAC;IACnC,IAAI,QAAQ,GAA0B,IAAI,CAAC;IAC3C,IAAI,CAAC;QACH,IAAI,GAAG,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACpC,QAAQ,GAAG,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClF,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,sBAAsB,EAAE,IAAI;gBAC9E,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ;YACtE,YAAY,EAAE,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,WAAW,CAAC;YAAE,MAAM,KAAK,CAAC;QACjD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ;YAC5E,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC;IACnC,CAAC;AACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ /** Internal bounded, strict I-JSON/JCS substrate for pinned open HCS schemas/skills.
2
+ * Do not use this as a generic JSON Schema evaluator or as an authenticated source.
3
+ */
4
+ export declare class HcsJsonV1Error extends Error {
5
+ readonly code: "JSON_INVALID" | "JSON_AMBIGUOUS" | "JSON_TOO_LARGE";
6
+ constructor(code: "JSON_INVALID" | "JSON_AMBIGUOUS" | "JSON_TOO_LARGE");
7
+ }
8
+ /** Canonical JSON ordering uses ECMAScript UTF-16 code-unit order as required by RFC 8785. */
9
+ export declare function canonicalHcsJsonV1(value: unknown, maxBytes: number): string;
10
+ /** Parse after strict UTF-8 decoding and before any canonicalization.
11
+ * Duplicate property names (including Unicode escape aliases) are rejected.
12
+ */
13
+ export declare function parseStrictHcsJsonV1(value: Uint8Array | string, maxBytes: number): unknown;
14
+ export declare function cloneHcsJsonV1<T>(item: T): T;
15
+ //# sourceMappingURL=jsonCanonicalV1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonCanonicalV1.d.ts","sourceRoot":"","sources":["../../../src/standards/hcs/jsonCanonicalV1.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,cAAe,SAAQ,KAAK;IAC3B,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB,GAAG,gBAAgB;gBAA1D,IAAI,EAAE,cAAc,GAAG,gBAAgB,GAAG,gBAAgB;CAIhF;AAcD,8FAA8F;AAC9F,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CA+B3E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAsD1F;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAI5C"}