@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,168 @@
1
+ /** Pinned HCS-14 Draft: deterministic DID-backed UAID checks (uaid:did only).
2
+ * Structural consistency does not authenticate DID control or a Hedera account.
3
+ */
4
+ const DID = /^did:([a-z0-9]+):(.+)$/;
5
+ const PREFIX = "uaid:did:";
6
+ const ORDER = ["uid", "registry", "proto", "nativeId", "domain", "src"];
7
+ const ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
8
+ export class Hcs14V1Error extends Error {
9
+ code;
10
+ constructor(code) {
11
+ super(code);
12
+ this.code = code;
13
+ this.name = "Hcs14V1Error";
14
+ }
15
+ }
16
+ function fail(code) { throw new Hcs14V1Error(code); }
17
+ function text(value, _name, max) {
18
+ if (typeof value !== "string" || !value.trim() || value.trim().length > max ||
19
+ /[\u0000-\u001f\u007f;]/.test(value))
20
+ return fail("HCS14_FIELD_INVALID");
21
+ return value.trim();
22
+ }
23
+ function didParts(value) {
24
+ if (typeof value !== "string")
25
+ return fail("HCS14_DID_INVALID");
26
+ const did = value.trim();
27
+ const match = DID.exec(did);
28
+ if (!match)
29
+ return fail("HCS14_DID_INVALID");
30
+ const methodSpecificId = match[2];
31
+ const cut = methodSpecificId.search(/[;?#]/);
32
+ const id = cut < 0 ? methodSpecificId : methodSpecificId.slice(0, cut);
33
+ if (!id || id.includes(";"))
34
+ return fail("HCS14_DID_ID_INVALID");
35
+ return { did, id, sanitized: cut >= 0 };
36
+ }
37
+ function base58encode(bytes) {
38
+ let leading = 0;
39
+ while (leading < bytes.length && bytes[leading] === 0)
40
+ leading++;
41
+ let n = 0n;
42
+ for (const value of bytes)
43
+ n = (n << 8n) + BigInt(value);
44
+ let out = "";
45
+ while (n > 0n) {
46
+ out = ALPHABET[Number(n % 58n)] + out;
47
+ n /= 58n;
48
+ }
49
+ return `z${"1".repeat(leading)}${out || (leading ? "" : "1")}`;
50
+ }
51
+ function base58decode(input) {
52
+ if (!/^z[1-9A-HJ-NP-Za-km-z]+$/.test(input))
53
+ return fail("HCS14_SRC_INVALID");
54
+ const encoded = input.slice(1);
55
+ let leading = 0;
56
+ while (leading < encoded.length && encoded[leading] === "1")
57
+ leading++;
58
+ let n = 0n;
59
+ for (const c of encoded) {
60
+ const digit = ALPHABET.indexOf(c);
61
+ if (digit < 0)
62
+ return fail("HCS14_SRC_INVALID");
63
+ n = n * 58n + BigInt(digit);
64
+ }
65
+ const reversed = [];
66
+ while (n > 0n) {
67
+ reversed.push(Number(n & 255n));
68
+ n >>= 8n;
69
+ }
70
+ reversed.reverse();
71
+ const result = Uint8Array.from([...Array(leading).fill(0), ...reversed]);
72
+ if (base58encode(result) !== input)
73
+ return fail("HCS14_SRC_INVALID");
74
+ return result;
75
+ }
76
+ export function parseHcs14DidUaidV1(value) {
77
+ if (typeof value !== "string")
78
+ return fail("HCS14_UAID_INVALID");
79
+ if (value.length > 8192)
80
+ return fail("HCS14_UAID_INVALID");
81
+ const uaid = value.trim();
82
+ if (!uaid.startsWith(PREFIX)) {
83
+ return fail(uaid.startsWith("uaid:aid:") ? "HCS14_TARGET_UNSUPPORTED" : "HCS14_UAID_INVALID");
84
+ }
85
+ if (uaid.length > 8192)
86
+ return fail("HCS14_UAID_INVALID");
87
+ const body = uaid.slice(PREFIX.length);
88
+ const pos = body.indexOf(";");
89
+ if (pos < 1)
90
+ return fail("HCS14_UAID_INVALID");
91
+ const id = body.slice(0, pos);
92
+ if (/[\u0000-\u001f\u007f]/.test(id))
93
+ return fail("HCS14_UAID_INVALID");
94
+ const rawParams = body.slice(pos + 1).split(";");
95
+ const params = {};
96
+ const seen = [];
97
+ for (const entry of rawParams) {
98
+ const eq = entry.indexOf("=");
99
+ if (eq <= 0)
100
+ return fail("HCS14_PARAMETER_INVALID");
101
+ const key = entry.slice(0, eq);
102
+ if (!ORDER.includes(key) || Object.prototype.hasOwnProperty.call(params, key)) {
103
+ return fail("HCS14_PARAMETER_INVALID");
104
+ }
105
+ // The pinned parser accepts up to 512 chars for every parameter except nativeId.
106
+ const limit = key === "nativeId" ? 2048 : 512;
107
+ const value = text(entry.slice(eq + 1), key, limit);
108
+ params[key] = value;
109
+ seen.push(key);
110
+ }
111
+ if (seen.join("\0") !== ORDER.filter((key) => params[key] !== undefined).join("\0")) {
112
+ return fail("HCS14_PARAMETER_ORDER_INVALID");
113
+ }
114
+ for (const key of ["uid", "registry", "proto", "nativeId"]) {
115
+ if (!params[key])
116
+ return fail("HCS14_PARAMETER_MISSING");
117
+ }
118
+ return Object.freeze({ uaid, target: "did", id, params: Object.freeze(params) });
119
+ }
120
+ /** Build a deterministic UAID for supplied DID material; this does not issue an identity. */
121
+ export function buildHcs14DidUaidV1(input) {
122
+ const did = didParts(input.base_did);
123
+ const params = {
124
+ uid: text(input.uid ?? "0", "uid", 256),
125
+ registry: text(input.registry ?? "self", "registry", 128),
126
+ proto: text(input.proto, "proto", 64),
127
+ nativeId: text(input.native_id, "nativeId", 2048),
128
+ };
129
+ if (input.domain != null && input.domain.trim())
130
+ params.domain = text(input.domain, "domain", 253);
131
+ if (did.sanitized)
132
+ params.src = base58encode(Buffer.from(did.did, "utf8"));
133
+ return parseHcs14DidUaidV1(`${PREFIX}${did.id};${ORDER.filter((k) => params[k] !== undefined).map((k) => `${k}=${params[k]}`).join(";")}`);
134
+ }
135
+ /** Compare against a separately supplied base DID. This does not resolve or authenticate it. */
136
+ export function verifyHcs14DidBindingV1(input) {
137
+ let binding = null;
138
+ try {
139
+ binding = parseHcs14DidUaidV1(input?.uaid);
140
+ const did = didParts(input?.base_did);
141
+ if (binding.id !== did.id)
142
+ return fail("HCS14_DID_BINDING_MISMATCH");
143
+ const src = binding.params.src;
144
+ if (did.sanitized) {
145
+ if (!src)
146
+ return fail("HCS14_SRC_REQUIRED");
147
+ const bytes = base58decode(src);
148
+ let recovered;
149
+ try {
150
+ recovered = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
151
+ }
152
+ catch {
153
+ return fail("HCS14_SRC_INVALID");
154
+ }
155
+ if (recovered !== did.did)
156
+ return fail("HCS14_SRC_MISMATCH");
157
+ }
158
+ else if (src)
159
+ return fail("HCS14_SRC_UNEXPECTED");
160
+ return Object.freeze({ status: "pass", reason_code: null, binding });
161
+ }
162
+ catch (error) {
163
+ if (error instanceof Hcs14V1Error)
164
+ return Object.freeze({ status: "fail", reason_code: error.code, binding });
165
+ throw error;
166
+ }
167
+ }
168
+ //# sourceMappingURL=hcs14V1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hcs14V1.js","sourceRoot":"","sources":["../../../src/standards/hcs/hcs14V1.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export declare const MAX_HCS1_V1_FILE_BYTES: number;
2
+ export declare const MAX_HCS1_V1_CHUNKS = 4096;
3
+ export type Hcs1V1ContentInput = Readonly<{
4
+ /** Supplied topic memo; not independently authenticated in offline mode. */
5
+ memo: unknown;
6
+ /** Original HCS message bytes containing {o,c} chunk JSON. */
7
+ messages: readonly Uint8Array[];
8
+ /** Optional independently established checksum. */
9
+ expected_sha256?: string | null;
10
+ }>;
11
+ export type Hcs1V1ContentOptions = Readonly<{
12
+ max_file_bytes?: number;
13
+ /** Explicit optional runtime adapter; never obtained from untrusted evidence. */
14
+ decompress_zstd?: (compressed: Uint8Array, maxOutputBytes: number) => Uint8Array | Promise<Uint8Array>;
15
+ }>;
16
+ export type Hcs1V1ContentResult = Readonly<{
17
+ status: "pass" | "fail" | "unsupported";
18
+ reason_code: string | null;
19
+ sha256: string | null;
20
+ mime_type: string | null;
21
+ chunk_count: number;
22
+ /** Returned only after the checksum is recomputed and matches all expectations. */
23
+ bytes: Uint8Array | null;
24
+ }>;
25
+ export declare function parseHcs1ReferenceV1(value: unknown): Readonly<{
26
+ reference: string;
27
+ topic_id: string;
28
+ }>;
29
+ export declare function verifyHcs1ContentV1(input: Hcs1V1ContentInput, options?: Hcs1V1ContentOptions): Promise<Hcs1V1ContentResult>;
30
+ //# sourceMappingURL=hcs1V1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hcs1V1.d.ts","sourceRoot":"","sources":["../../../src/standards/hcs/hcs1V1.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,sBAAsB,QAAkB,CAAC;AACtD,eAAO,MAAM,kBAAkB,OAAO,CAAC;AASvC,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACxC,4EAA4E;IAC5E,IAAI,EAAE,OAAO,CAAC;IACd,8DAA8D;IAC9D,QAAQ,EAAE,SAAS,UAAU,EAAE,CAAC;IAChC,mDAAmD;IACnD,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CACxG,CAAC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACzC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;IACxC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;CAC1B,CAAC,CAAC;AAMH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAItG;AAoCD,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,kBAAkB,EACzB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CA+D9B"}
@@ -0,0 +1,140 @@
1
+ /** Pinned HCS-1 zstd/base64 integrity verification; offline, with no network I/O. */
2
+ import { createHash } from "node:crypto";
3
+ import * as zlib from "node:zlib";
4
+ export const MAX_HCS1_V1_FILE_BYTES = 8 * 1024 * 1024;
5
+ export const MAX_HCS1_V1_CHUNKS = 4096;
6
+ const MAX_MESSAGE_BYTES = 1024;
7
+ const MAX_COMPRESSED_BYTES = MAX_HCS1_V1_CHUNKS * MAX_MESSAGE_BYTES;
8
+ const REF = /^hcs:\/\/1\/(0\.0\.[0-9]+)$/;
9
+ const MEMO = /^([0-9a-f]{64}):zstd:base64$/;
10
+ const SHA256 = /^[0-9a-f]{64}$/;
11
+ const MIME = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.+\-/]{0,126}$/;
12
+ const BASE64 = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;
13
+ class Hcs1Failure extends Error {
14
+ code;
15
+ unsupported;
16
+ constructor(code, unsupported = false) {
17
+ super(code);
18
+ this.code = code;
19
+ this.unsupported = unsupported;
20
+ }
21
+ }
22
+ export function parseHcs1ReferenceV1(value) {
23
+ const match = typeof value === "string" ? REF.exec(value) : null;
24
+ if (!match)
25
+ throw new TypeError("HCS1_REFERENCE_INVALID");
26
+ return Object.freeze({ reference: value, topic_id: match[1] });
27
+ }
28
+ function failed(code, count = 0, unsupported = false) {
29
+ return Object.freeze({ status: unsupported ? "unsupported" : "fail",
30
+ reason_code: code, sha256: null, mime_type: null, chunk_count: count, bytes: null });
31
+ }
32
+ function boundFileBytes(options) {
33
+ const n = options.max_file_bytes ?? MAX_HCS1_V1_FILE_BYTES;
34
+ if (!Number.isSafeInteger(n) || n < 1 || n > MAX_HCS1_V1_FILE_BYTES) {
35
+ throw new TypeError("HCS1_FILE_LIMIT_INVALID");
36
+ }
37
+ return n;
38
+ }
39
+ async function decompress(compressed, limit, options) {
40
+ if (options.decompress_zstd) {
41
+ const out = await options.decompress_zstd(new Uint8Array(compressed), limit);
42
+ if (!(out instanceof Uint8Array))
43
+ throw new Hcs1Failure("HCS1_DECOMPRESSION_INVALID");
44
+ if (out.byteLength > limit)
45
+ throw new Hcs1Failure("HCS1_FILE_TOO_LARGE");
46
+ return Buffer.from(out);
47
+ }
48
+ const fn = zlib.zstdDecompressSync;
49
+ if (typeof fn !== "function")
50
+ throw new Hcs1Failure("HCS1_ZSTD_UNAVAILABLE", true);
51
+ try {
52
+ return fn(compressed, { maxOutputLength: limit });
53
+ }
54
+ catch (error) {
55
+ if (error?.code === "ERR_BUFFER_TOO_LARGE") {
56
+ throw new Hcs1Failure("HCS1_FILE_TOO_LARGE");
57
+ }
58
+ throw new Hcs1Failure("HCS1_DECOMPRESSION_INVALID");
59
+ }
60
+ }
61
+ export async function verifyHcs1ContentV1(input, options = {}) {
62
+ const limit = boundFileBytes(options);
63
+ const count = Array.isArray(input?.messages) ? input.messages.length : 0;
64
+ try {
65
+ const memo = typeof input?.memo === "string" ? MEMO.exec(input.memo) : null;
66
+ if (!memo)
67
+ throw new Hcs1Failure("HCS1_MEMO_INVALID");
68
+ const expected = input.expected_sha256 == null ? null :
69
+ typeof input.expected_sha256 === "string" ? input.expected_sha256.toLowerCase() : "";
70
+ if (expected !== null && !SHA256.test(expected))
71
+ throw new Hcs1Failure("HCS1_EXPECTED_CHECKSUM_INVALID");
72
+ if (!Array.isArray(input.messages) || count < 1 || count > MAX_HCS1_V1_CHUNKS) {
73
+ throw new Hcs1Failure("HCS1_CHUNKS_INVALID");
74
+ }
75
+ const byOrder = new Map();
76
+ for (const message of input.messages) {
77
+ if (!(message instanceof Uint8Array) || message.byteLength > MAX_MESSAGE_BYTES || !message.byteLength) {
78
+ throw new Hcs1Failure("HCS1_MESSAGE_INVALID");
79
+ }
80
+ let chunk;
81
+ try {
82
+ chunk = JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(message));
83
+ }
84
+ catch {
85
+ throw new Hcs1Failure("HCS1_CHUNK_INVALID");
86
+ }
87
+ if (!chunk || typeof chunk !== "object" || Array.isArray(chunk)) {
88
+ throw new Hcs1Failure("HCS1_CHUNK_INVALID");
89
+ }
90
+ const obj = chunk;
91
+ if (Object.keys(obj).sort().join("\0") !== "c\0o" ||
92
+ !Number.isSafeInteger(obj.o) || obj.o < 0 ||
93
+ typeof obj.c !== "string" || !obj.c) {
94
+ throw new Hcs1Failure("HCS1_CHUNK_INVALID");
95
+ }
96
+ if (byOrder.has(obj.o))
97
+ throw new Hcs1Failure("HCS1_CHUNK_DUPLICATE");
98
+ byOrder.set(obj.o, obj.c);
99
+ }
100
+ const parts = [];
101
+ for (let i = 0; i < count; i += 1) {
102
+ const chunk = byOrder.get(i);
103
+ if (chunk === undefined)
104
+ throw new Hcs1Failure("HCS1_CHUNK_GAP");
105
+ parts.push(chunk);
106
+ }
107
+ const prefix = /^data:([^;]+);base64,/.exec(parts[0]);
108
+ if (!prefix || !MIME.test(prefix[1]))
109
+ throw new Hcs1Failure("HCS1_PREFIX_INVALID");
110
+ parts[0] = parts[0].slice(prefix[0].length);
111
+ const encoded = parts.join("");
112
+ if (!encoded || encoded.length > Math.ceil(MAX_COMPRESSED_BYTES * 4 / 3) + 4 ||
113
+ encoded.length % 4 !== 0 || !BASE64.test(encoded)) {
114
+ throw new Hcs1Failure("HCS1_BASE64_INVALID");
115
+ }
116
+ const compressed = Buffer.from(encoded, "base64");
117
+ if (compressed.toString("base64") !== encoded || compressed.byteLength > MAX_COMPRESSED_BYTES) {
118
+ throw new Hcs1Failure("HCS1_BASE64_INVALID");
119
+ }
120
+ const bytes = await decompress(compressed, limit, options);
121
+ if (!bytes.byteLength || bytes.byteLength > limit)
122
+ throw new Hcs1Failure("HCS1_FILE_TOO_LARGE");
123
+ const actual = createHash("sha256").update(bytes).digest("hex");
124
+ if (actual !== memo[1])
125
+ throw new Hcs1Failure("HCS1_CHECKSUM_MISMATCH");
126
+ if (expected && actual !== expected)
127
+ throw new Hcs1Failure("HCS1_EXPECTED_CHECKSUM_MISMATCH");
128
+ return Object.freeze({ status: "pass", reason_code: null, sha256: actual,
129
+ mime_type: prefix[1], chunk_count: count, bytes: new Uint8Array(bytes) });
130
+ }
131
+ catch (error) {
132
+ if (error instanceof Hcs1Failure)
133
+ return failed(error.code, count, error.unsupported);
134
+ // An explicitly supplied decompressor may throw on malformed bytes.
135
+ if (options.decompress_zstd)
136
+ return failed("HCS1_DECOMPRESSION_INVALID", count);
137
+ throw error;
138
+ }
139
+ }
140
+ //# sourceMappingURL=hcs1V1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hcs1V1.js","sourceRoot":"","sources":["../../../src/standards/hcs/hcs1V1.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ export declare const MAX_HCS26_V1_MANIFEST_BYTES: number;
2
+ export declare class Hcs26V1Error extends Error {
3
+ readonly code: string;
4
+ constructor(code: string);
5
+ }
6
+ export type Hcs26MemoV1 = Readonly<{
7
+ memo: string;
8
+ indexed: boolean;
9
+ ttl: number;
10
+ type: "discovery" | "version";
11
+ type_code: 0 | 1;
12
+ }>;
13
+ export declare function parseHcs26MemoV1(value: unknown): Hcs26MemoV1;
14
+ /** Supplied historical raw registry message; not a read of current registry state. */
15
+ export declare function parseHcs26DiscoveryRegisterV1(raw: string | Uint8Array): Readonly<Record<string, unknown>>;
16
+ export declare function parseHcs26DiscoveryUpdateV1(raw: string | Uint8Array): Readonly<Record<string, unknown>>;
17
+ export type Hcs26VersionRegisterV1 = Readonly<{
18
+ p: "hcs-26";
19
+ op: "register";
20
+ skill_uid: number;
21
+ version: string;
22
+ t_id: string;
23
+ checksum: string;
24
+ status: "active" | "deprecated" | "yanked";
25
+ m?: string;
26
+ }>;
27
+ export declare function parseHcs26VersionRegisterV1(raw: string | Uint8Array): Hcs26VersionRegisterV1;
28
+ export type Hcs26SkillManifestV1 = Readonly<{
29
+ manifest: Readonly<Record<string, unknown>>;
30
+ canonical_payload: string;
31
+ sha256: string;
32
+ byte_length: number;
33
+ }>;
34
+ export declare function finalizeHcs26SkillManifestV1(value: unknown): Hcs26SkillManifestV1;
35
+ export declare function parseHcs26SkillManifestV1(raw: Uint8Array | string): Hcs26SkillManifestV1;
36
+ export type Hcs26VersionVerificationV1 = Readonly<{
37
+ status: "pass" | "fail";
38
+ reason_code: string | null;
39
+ skill_uid: number | null;
40
+ version: string | null;
41
+ manifest_topic_id: string | null;
42
+ checksum_match: "match" | "mismatch" | "not_checked";
43
+ /** Version state is recorded as historical register state, not current policy. */
44
+ version_status: Hcs26VersionRegisterV1["status"] | null;
45
+ sha256: string | null;
46
+ }>;
47
+ /** Cross-check a supplied historical version register against actual SKILL.json
48
+ * canonical content. This does not authenticate where the register came from.
49
+ */
50
+ export declare function verifyHcs26SkillVersionV1(input: Readonly<{
51
+ version_register: string | Uint8Array;
52
+ manifest: string | Uint8Array;
53
+ expected_skill_uid?: number | null;
54
+ expected_version?: string | null;
55
+ expected_manifest_topic_id?: string | null;
56
+ expected_sha256?: string | null;
57
+ }>): Hcs26VersionVerificationV1;
58
+ //# sourceMappingURL=hcs26V1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hcs26V1.d.ts","sourceRoot":"","sources":["../../../src/standards/hcs/hcs26V1.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,2BAA2B,QAAa,CAAC;AAatD,qBAAa,YAAa,SAAQ,KAAK;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM;CAClC;AA+GD,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,GAAG,SAAS,CAAC;IAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAA;CAAE,CAAC,CAAC;AACrI,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAQ5D;AAED,sFAAsF;AACtF,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAQzG;AACD,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAUvG;AACD,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC5C,CAAC,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAChE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,YAAY,GAAG,QAAQ,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,CAAC;CACxF,CAAC,CAAC;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,sBAAsB,CAW5F;AAkBD,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;CAC7G,CAAC,CAAC;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,CA2CjF;AACD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,GAAG,oBAAoB,CAUxF;AAED,MAAM,MAAM,0BAA0B,GAAG,QAAQ,CAAC;IAChD,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,cAAc,EAAE,OAAO,GAAG,UAAU,GAAG,aAAa,CAAC;IACrD,kFAAkF;IAClF,cAAc,EAAE,sBAAsB,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IACxD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC,CAAC;AACH;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,QAAQ,CAAC;IACxD,gBAAgB,EAAE,MAAM,GAAG,UAAU,CAAC;IACtC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,0BAA0B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC,GAAG,0BAA0B,CAyB9B"}