@mikeargento/bitgraph 1.9.1 → 1.10.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 (248) hide show
  1. package/README.md +21 -21
  2. package/dist/fuse-cli.js +2 -2
  3. package/dist/fuse-cli.js.map +1 -1
  4. package/dist/fuse.d.ts +15 -1
  5. package/dist/fuse.d.ts.map +1 -1
  6. package/dist/fuse.js +29 -12
  7. package/dist/fuse.js.map +1 -1
  8. package/package.json +12 -8
  9. package/src/fuse-cli.ts +2 -2
  10. package/src/fuse.ts +46 -13
  11. package/dist/__tests__/audit-anchors.test.d.ts +0 -2
  12. package/dist/__tests__/audit-anchors.test.d.ts.map +0 -1
  13. package/dist/__tests__/audit-anchors.test.js +0 -152
  14. package/dist/__tests__/audit-anchors.test.js.map +0 -1
  15. package/dist/__tests__/audit-anomalies.test.d.ts +0 -2
  16. package/dist/__tests__/audit-anomalies.test.d.ts.map +0 -1
  17. package/dist/__tests__/audit-anomalies.test.js +0 -663
  18. package/dist/__tests__/audit-anomalies.test.js.map +0 -1
  19. package/dist/__tests__/audit-attestation.test.d.ts +0 -2
  20. package/dist/__tests__/audit-attestation.test.d.ts.map +0 -1
  21. package/dist/__tests__/audit-attestation.test.js +0 -403
  22. package/dist/__tests__/audit-attestation.test.js.map +0 -1
  23. package/dist/__tests__/audit-bench-smoke.test.d.ts +0 -2
  24. package/dist/__tests__/audit-bench-smoke.test.d.ts.map +0 -1
  25. package/dist/__tests__/audit-bench-smoke.test.js +0 -87
  26. package/dist/__tests__/audit-bench-smoke.test.js.map +0 -1
  27. package/dist/__tests__/audit-boundary.test.d.ts +0 -20
  28. package/dist/__tests__/audit-boundary.test.d.ts.map +0 -1
  29. package/dist/__tests__/audit-boundary.test.js +0 -84
  30. package/dist/__tests__/audit-boundary.test.js.map +0 -1
  31. package/dist/__tests__/audit-cli.test.d.ts +0 -2
  32. package/dist/__tests__/audit-cli.test.d.ts.map +0 -1
  33. package/dist/__tests__/audit-cli.test.js +0 -239
  34. package/dist/__tests__/audit-cli.test.js.map +0 -1
  35. package/dist/__tests__/audit-dependencies.test.d.ts +0 -2
  36. package/dist/__tests__/audit-dependencies.test.d.ts.map +0 -1
  37. package/dist/__tests__/audit-dependencies.test.js +0 -116
  38. package/dist/__tests__/audit-dependencies.test.js.map +0 -1
  39. package/dist/__tests__/audit-fixtures.d.ts +0 -265
  40. package/dist/__tests__/audit-fixtures.d.ts.map +0 -1
  41. package/dist/__tests__/audit-fixtures.js +0 -511
  42. package/dist/__tests__/audit-fixtures.js.map +0 -1
  43. package/dist/__tests__/audit-ingest.test.d.ts +0 -2
  44. package/dist/__tests__/audit-ingest.test.d.ts.map +0 -1
  45. package/dist/__tests__/audit-ingest.test.js +0 -473
  46. package/dist/__tests__/audit-ingest.test.js.map +0 -1
  47. package/dist/__tests__/audit-memory-ingest.test.d.ts +0 -12
  48. package/dist/__tests__/audit-memory-ingest.test.d.ts.map +0 -1
  49. package/dist/__tests__/audit-memory-ingest.test.js +0 -135
  50. package/dist/__tests__/audit-memory-ingest.test.js.map +0 -1
  51. package/dist/__tests__/audit-property.test.d.ts +0 -2
  52. package/dist/__tests__/audit-property.test.d.ts.map +0 -1
  53. package/dist/__tests__/audit-property.test.js +0 -771
  54. package/dist/__tests__/audit-property.test.js.map +0 -1
  55. package/dist/__tests__/audit-real-fixtures.test.d.ts +0 -2
  56. package/dist/__tests__/audit-real-fixtures.test.d.ts.map +0 -1
  57. package/dist/__tests__/audit-real-fixtures.test.js +0 -132
  58. package/dist/__tests__/audit-real-fixtures.test.js.map +0 -1
  59. package/dist/__tests__/audit-real-live.test.d.ts +0 -2
  60. package/dist/__tests__/audit-real-live.test.d.ts.map +0 -1
  61. package/dist/__tests__/audit-real-live.test.js +0 -107
  62. package/dist/__tests__/audit-real-live.test.js.map +0 -1
  63. package/dist/__tests__/audit-reconstruct.test.d.ts +0 -2
  64. package/dist/__tests__/audit-reconstruct.test.d.ts.map +0 -1
  65. package/dist/__tests__/audit-reconstruct.test.js +0 -287
  66. package/dist/__tests__/audit-reconstruct.test.js.map +0 -1
  67. package/dist/__tests__/audit-report.test.d.ts +0 -2
  68. package/dist/__tests__/audit-report.test.d.ts.map +0 -1
  69. package/dist/__tests__/audit-report.test.js +0 -186
  70. package/dist/__tests__/audit-report.test.js.map +0 -1
  71. package/dist/__tests__/audit-roundtrip.test.d.ts +0 -2
  72. package/dist/__tests__/audit-roundtrip.test.d.ts.map +0 -1
  73. package/dist/__tests__/audit-roundtrip.test.js +0 -368
  74. package/dist/__tests__/audit-roundtrip.test.js.map +0 -1
  75. package/dist/__tests__/audit-temporal.test.d.ts +0 -2
  76. package/dist/__tests__/audit-temporal.test.d.ts.map +0 -1
  77. package/dist/__tests__/audit-temporal.test.js +0 -364
  78. package/dist/__tests__/audit-temporal.test.js.map +0 -1
  79. package/dist/__tests__/audit-tiers.test.d.ts +0 -2
  80. package/dist/__tests__/audit-tiers.test.d.ts.map +0 -1
  81. package/dist/__tests__/audit-tiers.test.js +0 -282
  82. package/dist/__tests__/audit-tiers.test.js.map +0 -1
  83. package/dist/__tests__/audit-witness-real.test.d.ts +0 -19
  84. package/dist/__tests__/audit-witness-real.test.d.ts.map +0 -1
  85. package/dist/__tests__/audit-witness-real.test.js +0 -82
  86. package/dist/__tests__/audit-witness-real.test.js.map +0 -1
  87. package/dist/__tests__/audit-witness.test.d.ts +0 -2
  88. package/dist/__tests__/audit-witness.test.d.ts.map +0 -1
  89. package/dist/__tests__/audit-witness.test.js +0 -308
  90. package/dist/__tests__/audit-witness.test.js.map +0 -1
  91. package/dist/__tests__/canonical.test.d.ts +0 -2
  92. package/dist/__tests__/canonical.test.d.ts.map +0 -1
  93. package/dist/__tests__/canonical.test.js +0 -162
  94. package/dist/__tests__/canonical.test.js.map +0 -1
  95. package/dist/__tests__/chain-hash-anchor.test.d.ts +0 -22
  96. package/dist/__tests__/chain-hash-anchor.test.d.ts.map +0 -1
  97. package/dist/__tests__/chain-hash-anchor.test.js +0 -55
  98. package/dist/__tests__/chain-hash-anchor.test.js.map +0 -1
  99. package/dist/__tests__/commit-service.integration.test.d.ts +0 -2
  100. package/dist/__tests__/commit-service.integration.test.d.ts.map +0 -1
  101. package/dist/__tests__/commit-service.integration.test.js +0 -95
  102. package/dist/__tests__/commit-service.integration.test.js.map +0 -1
  103. package/dist/__tests__/constructor.test.d.ts +0 -2
  104. package/dist/__tests__/constructor.test.d.ts.map +0 -1
  105. package/dist/__tests__/constructor.test.js +0 -267
  106. package/dist/__tests__/constructor.test.js.map +0 -1
  107. package/dist/__tests__/declared-proof-fixture.d.ts +0 -66
  108. package/dist/__tests__/declared-proof-fixture.d.ts.map +0 -1
  109. package/dist/__tests__/declared-proof-fixture.js +0 -66
  110. package/dist/__tests__/declared-proof-fixture.js.map +0 -1
  111. package/dist/__tests__/fuse-inline.test.d.ts +0 -2
  112. package/dist/__tests__/fuse-inline.test.d.ts.map +0 -1
  113. package/dist/__tests__/fuse-inline.test.js +0 -181
  114. package/dist/__tests__/fuse-inline.test.js.map +0 -1
  115. package/dist/__tests__/fuse-placement.test.d.ts +0 -2
  116. package/dist/__tests__/fuse-placement.test.d.ts.map +0 -1
  117. package/dist/__tests__/fuse-placement.test.js +0 -31
  118. package/dist/__tests__/fuse-placement.test.js.map +0 -1
  119. package/dist/__tests__/fuse-roundtrip.test.d.ts +0 -2
  120. package/dist/__tests__/fuse-roundtrip.test.d.ts.map +0 -1
  121. package/dist/__tests__/fuse-roundtrip.test.js +0 -241
  122. package/dist/__tests__/fuse-roundtrip.test.js.map +0 -1
  123. package/dist/__tests__/fuse-sdk.test.d.ts +0 -2
  124. package/dist/__tests__/fuse-sdk.test.d.ts.map +0 -1
  125. package/dist/__tests__/fuse-sdk.test.js +0 -117
  126. package/dist/__tests__/fuse-sdk.test.js.map +0 -1
  127. package/dist/__tests__/fuse-set-sdk.test.d.ts +0 -2
  128. package/dist/__tests__/fuse-set-sdk.test.d.ts.map +0 -1
  129. package/dist/__tests__/fuse-set-sdk.test.js +0 -721
  130. package/dist/__tests__/fuse-set-sdk.test.js.map +0 -1
  131. package/dist/__tests__/fuse-set.test.d.ts +0 -2
  132. package/dist/__tests__/fuse-set.test.d.ts.map +0 -1
  133. package/dist/__tests__/fuse-set.test.js +0 -889
  134. package/dist/__tests__/fuse-set.test.js.map +0 -1
  135. package/dist/__tests__/fuse-set2.test.d.ts +0 -2
  136. package/dist/__tests__/fuse-set2.test.d.ts.map +0 -1
  137. package/dist/__tests__/fuse-set2.test.js +0 -294
  138. package/dist/__tests__/fuse-set2.test.js.map +0 -1
  139. package/dist/__tests__/fuse-vectors.test.d.ts +0 -2
  140. package/dist/__tests__/fuse-vectors.test.d.ts.map +0 -1
  141. package/dist/__tests__/fuse-vectors.test.js +0 -175
  142. package/dist/__tests__/fuse-vectors.test.js.map +0 -1
  143. package/dist/__tests__/fuse-verify.test.d.ts +0 -2
  144. package/dist/__tests__/fuse-verify.test.d.ts.map +0 -1
  145. package/dist/__tests__/fuse-verify.test.js +0 -250
  146. package/dist/__tests__/fuse-verify.test.js.map +0 -1
  147. package/dist/__tests__/hello-world.test.d.ts +0 -2
  148. package/dist/__tests__/hello-world.test.d.ts.map +0 -1
  149. package/dist/__tests__/hello-world.test.js +0 -9
  150. package/dist/__tests__/hello-world.test.js.map +0 -1
  151. package/dist/__tests__/mock-proof-fixture.d.ts +0 -15
  152. package/dist/__tests__/mock-proof-fixture.d.ts.map +0 -1
  153. package/dist/__tests__/mock-proof-fixture.js +0 -34
  154. package/dist/__tests__/mock-proof-fixture.js.map +0 -1
  155. package/dist/__tests__/policy-enforcement.test.d.ts +0 -2
  156. package/dist/__tests__/policy-enforcement.test.d.ts.map +0 -1
  157. package/dist/__tests__/policy-enforcement.test.js +0 -188
  158. package/dist/__tests__/policy-enforcement.test.js.map +0 -1
  159. package/dist/__tests__/proof-hash-regression.test.d.ts +0 -2
  160. package/dist/__tests__/proof-hash-regression.test.d.ts.map +0 -1
  161. package/dist/__tests__/proof-hash-regression.test.js +0 -95
  162. package/dist/__tests__/proof-hash-regression.test.js.map +0 -1
  163. package/dist/__tests__/proof-hash.test.d.ts +0 -2
  164. package/dist/__tests__/proof-hash.test.d.ts.map +0 -1
  165. package/dist/__tests__/proof-hash.test.js +0 -116
  166. package/dist/__tests__/proof-hash.test.js.map +0 -1
  167. package/dist/__tests__/proof-integrity.test.d.ts +0 -2
  168. package/dist/__tests__/proof-integrity.test.d.ts.map +0 -1
  169. package/dist/__tests__/proof-integrity.test.js +0 -454
  170. package/dist/__tests__/proof-integrity.test.js.map +0 -1
  171. package/dist/__tests__/realistic-proof-fixture.d.ts +0 -56
  172. package/dist/__tests__/realistic-proof-fixture.d.ts.map +0 -1
  173. package/dist/__tests__/realistic-proof-fixture.js +0 -57
  174. package/dist/__tests__/realistic-proof-fixture.js.map +0 -1
  175. package/dist/__tests__/run.test.d.ts +0 -2
  176. package/dist/__tests__/run.test.d.ts.map +0 -1
  177. package/dist/__tests__/run.test.js +0 -178
  178. package/dist/__tests__/run.test.js.map +0 -1
  179. package/dist/__tests__/verifier.test.d.ts +0 -2
  180. package/dist/__tests__/verifier.test.d.ts.map +0 -1
  181. package/dist/__tests__/verifier.test.js +0 -531
  182. package/dist/__tests__/verifier.test.js.map +0 -1
  183. package/dist/canonical.d.ts +0 -54
  184. package/dist/canonical.d.ts.map +0 -1
  185. package/dist/canonical.js +0 -119
  186. package/dist/canonical.js.map +0 -1
  187. package/dist/proof-hash.d.ts +0 -9
  188. package/dist/proof-hash.d.ts.map +0 -1
  189. package/dist/proof-hash.js +0 -75
  190. package/dist/proof-hash.js.map +0 -1
  191. package/dist/types.d.ts +0 -705
  192. package/dist/types.d.ts.map +0 -1
  193. package/dist/types.js +0 -3
  194. package/dist/types.js.map +0 -1
  195. package/dist/verifier.d.ts +0 -27
  196. package/dist/verifier.d.ts.map +0 -1
  197. package/dist/verifier.js +0 -844
  198. package/dist/verifier.js.map +0 -1
  199. package/src/__tests__/audit-anchors.test.ts +0 -188
  200. package/src/__tests__/audit-anomalies.test.ts +0 -815
  201. package/src/__tests__/audit-attestation.test.ts +0 -529
  202. package/src/__tests__/audit-bench-smoke.test.ts +0 -108
  203. package/src/__tests__/audit-boundary.test.ts +0 -96
  204. package/src/__tests__/audit-cli.test.ts +0 -288
  205. package/src/__tests__/audit-dependencies.test.ts +0 -141
  206. package/src/__tests__/audit-fixtures.ts +0 -736
  207. package/src/__tests__/audit-ingest.test.ts +0 -575
  208. package/src/__tests__/audit-memory-ingest.test.ts +0 -156
  209. package/src/__tests__/audit-property.test.ts +0 -892
  210. package/src/__tests__/audit-real-fixtures.test.ts +0 -153
  211. package/src/__tests__/audit-real-live.test.ts +0 -128
  212. package/src/__tests__/audit-reconstruct.test.ts +0 -353
  213. package/src/__tests__/audit-report.test.ts +0 -222
  214. package/src/__tests__/audit-roundtrip.test.ts +0 -464
  215. package/src/__tests__/audit-temporal.test.ts +0 -446
  216. package/src/__tests__/audit-tiers.test.ts +0 -343
  217. package/src/__tests__/audit-witness-real.test.ts +0 -92
  218. package/src/__tests__/audit-witness.test.ts +0 -345
  219. package/src/__tests__/canonical.test.ts +0 -253
  220. package/src/__tests__/chain-hash-anchor.test.ts +0 -67
  221. package/src/__tests__/commit-service.integration.test.ts +0 -117
  222. package/src/__tests__/constructor.test.ts +0 -340
  223. package/src/__tests__/declared-proof-fixture.ts +0 -65
  224. package/src/__tests__/fuse-inline.test.ts +0 -211
  225. package/src/__tests__/fuse-placement.test.ts +0 -32
  226. package/src/__tests__/fuse-roundtrip.test.ts +0 -243
  227. package/src/__tests__/fuse-sdk.test.ts +0 -142
  228. package/src/__tests__/fuse-set-sdk.test.ts +0 -852
  229. package/src/__tests__/fuse-set.test.ts +0 -1027
  230. package/src/__tests__/fuse-set2.test.ts +0 -343
  231. package/src/__tests__/fuse-vectors.test.ts +0 -218
  232. package/src/__tests__/fuse-verify.test.ts +0 -278
  233. package/src/__tests__/hello-world.test.ts +0 -10
  234. package/src/__tests__/mock-proof-fixture.ts +0 -36
  235. package/src/__tests__/policy-enforcement.test.ts +0 -226
  236. package/src/__tests__/proof-hash-regression.test.ts +0 -107
  237. package/src/__tests__/proof-hash.test.ts +0 -129
  238. package/src/__tests__/proof-integrity.test.ts +0 -576
  239. package/src/__tests__/real-fixtures/anchor-after-112762.json +0 -47
  240. package/src/__tests__/real-fixtures/anchor-with-ethereum-112758.json +0 -47
  241. package/src/__tests__/real-fixtures/live-proof-0.json +0 -42
  242. package/src/__tests__/real-fixtures/live-proof-1.json +0 -43
  243. package/src/__tests__/real-fixtures/live-proof-2.json +0 -43
  244. package/src/__tests__/real-fixtures/successor-112760.json +0 -38
  245. package/src/__tests__/real-fixtures/witness-25525146.json +0 -6
  246. package/src/__tests__/real-fixtures/witness-25525147.json +0 -6
  247. package/src/__tests__/realistic-proof-fixture.ts +0 -57
  248. package/src/__tests__/verifier.test.ts +0 -624
@@ -1,181 +0,0 @@
1
- // Copyright (c) Argento Computing Inc. All rights reserved. See LICENSE.
2
- /**
3
- * The marker's title in its second vocabulary: an ENCODING rather than a
4
- * placement, for an artifact MADE with the commitment inside it.
5
- *
6
- * A placement is a recipe, so a holder of the original rebuilds the committed
7
- * artifact byte for byte. An encoding says there is no recipe and no original:
8
- * the commitment was in the thing while it was being made (a prompt, a build
9
- * id, a commit message), so the only thing to do is look for it. One marker
10
- * answers both, which is why this file tests verifyFuse and not a second
11
- * function. It was briefly a second profile, bitgraph-run/1, on 2026-09-07.
12
- *
13
- * The positive case is real: the canonical inline artifact minted on
14
- * production, enclave v8, slot 2072 consumed at commit 2075. Categories that
15
- * need a key under this test's control mint their own proofs, because every one
16
- * of them is reached by changing something the enclave signed.
17
- */
18
- import { describe, test } from "node:test";
19
- import * as assert from "node:assert/strict";
20
- import { readFileSync } from "node:fs";
21
- import { fileURLToPath } from "node:url";
22
- import { sha256 } from "@noble/hashes/sha256";
23
- import { getPublicKeyAsync, signAsync, utils } from "@noble/ed25519";
24
- import { verifyFuse, inlineAttribution, isCarryEncoding, findCommitment, computeSlotCommitment, canonicalize, bytesToBase64, ENCODING_BASE64URL, } from "@mikeargento/bitgraph-verify";
25
- const FIX = fileURLToPath(new URL("../../src/__tests__/fuse-fixtures/", import.meta.url));
26
- const b64 = (b) => bytesToBase64(b);
27
- const b64u = (b) => b64(b).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
28
- const utf8 = (s) => new TextEncoder().encode(s);
29
- const liveProof = JSON.parse(readFileSync(FIX + "inline.proof.json", "utf8"));
30
- const liveBytes = new Uint8Array(readFileSync(FIX + "inline.artifact.txt"));
31
- /** Mint a proof the way the enclave does, so the signature covers the marker. */
32
- async function mint(makeBytes, opts = {}) {
33
- const seed = utils.randomPrivateKey();
34
- const publicKeyB64 = b64(await getPublicKeyAsync(seed));
35
- const slotBody = {
36
- version: "bitgraph/slot/1",
37
- nonceB64: b64(new Uint8Array(32).fill(7)),
38
- counter: "41",
39
- epochId: "inline-test-epoch",
40
- publicKeyB64,
41
- };
42
- const slotAllocation = { ...slotBody, signatureB64: b64(await signAsync(canonicalize(slotBody), seed)) };
43
- const commitment = b64u(computeSlotCommitment(slotAllocation));
44
- const bytes = makeBytes(commitment);
45
- const digestB64 = b64(sha256(bytes));
46
- const attribution = { name: "bitgraph-fuse/1", title: opts.title ?? ENCODING_BASE64URL };
47
- if (opts.message !== undefined)
48
- attribution["message"] = opts.message;
49
- const commit = {
50
- nonceB64: slotBody.nonceB64,
51
- counter: "42",
52
- slotCounter: "41",
53
- slotHashB64: b64(sha256(canonicalize(slotBody))),
54
- epochId: "inline-test-epoch",
55
- };
56
- const signedBody = {
57
- version: "bitgraph/1",
58
- artifact: { hashAlg: "sha256", digestB64 },
59
- commit,
60
- publicKeyB64,
61
- enforcement: "measured-tee",
62
- measurement: "inline-test-measurement",
63
- attribution,
64
- };
65
- const proof = {
66
- version: "bitgraph/1",
67
- artifact: signedBody.artifact,
68
- commit,
69
- signer: { publicKeyB64, signatureB64: b64(await signAsync(canonicalize(signedBody), seed)) },
70
- environment: { enforcement: "measured-tee", measurement: "inline-test-measurement" },
71
- slotAllocation,
72
- attribution,
73
- };
74
- return { proof, bytes, commitment };
75
- }
76
- describe("carry encodings", () => {
77
- test("base64url is registered; a placement id and nonsense are not", () => {
78
- assert.equal(isCarryEncoding(ENCODING_BASE64URL), true);
79
- for (const id of ["trailer/1", "container/2", "set/1", "hex/1", "", null, undefined]) {
80
- assert.equal(isCarryEncoding(id), false, `${String(id)} should not be an encoding`);
81
- }
82
- });
83
- test("inlineAttribution declares the encoding and no origin, because there is none", () => {
84
- const a = inlineAttribution();
85
- assert.deepEqual(a, { name: "bitgraph-fuse/1", title: ENCODING_BASE64URL });
86
- assert.equal("message" in a, false, "a 32-byte message would be read as an origin digest");
87
- assert.deepEqual(a, liveProof.attribution);
88
- });
89
- test("findCommitment locates every occurrence, and none for an unregistered encoding", () => {
90
- const c = new Uint8Array(32).fill(3);
91
- const text = b64u(c);
92
- assert.deepEqual(findCommitment(utf8(`a${text}b${text}`), c, ENCODING_BASE64URL), [1, 1 + text.length + 1]);
93
- assert.deepEqual(findCommitment(utf8("nothing"), c, ENCODING_BASE64URL), []);
94
- assert.deepEqual(findCommitment(utf8(text), c, "hex/1"), []);
95
- });
96
- });
97
- describe("the canonical inline artifact (slot 2072, commit 2075)", () => {
98
- test("CARRIED_INLINE, located, and named as carried by an encoding", async () => {
99
- const r = await verifyFuse({ proof: liveProof, bytes: liveBytes });
100
- assert.equal(r.category, "CARRIED_INLINE");
101
- assert.equal(r.proof.valid, true);
102
- assert.equal(r.reason, null);
103
- assert.deepEqual(r.carriedBy, { kind: "encoding", id: ENCODING_BASE64URL });
104
- assert.equal(r.placement, null, "an inline artifact has no placement: there is no recipe");
105
- assert.equal(r.originDigestB64, null, "and no original");
106
- assert.equal(r.offsets.length, 1);
107
- // The bytes at the reported offset really are the commitment.
108
- const at = Buffer.from(liveBytes.slice(r.offsets[0], r.offsets[0] + 43)).toString("utf8");
109
- assert.equal(at, r.slotCommitmentB64.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, ""));
110
- });
111
- test("the span is the real one, and the statements name it", async () => {
112
- const r = await verifyFuse({ proof: liveProof, bytes: liveBytes });
113
- assert.equal(r.span?.slotCounter, "2072");
114
- assert.equal(r.span?.commitCounter, "2075");
115
- assert.match(r.statements[0] ?? "", /slot at position 2072/);
116
- assert.match(r.statements[1] ?? "", /committed at position 2075/);
117
- });
118
- test("the limit rides with the claim and is carried by nothing else", async () => {
119
- const r = await verifyFuse({ proof: liveProof, bytes: liveBytes });
120
- assert.equal(r.limits.length, 1);
121
- assert.match(r.limits[0] ?? "", /appended to a finished file pass the same check/);
122
- const { proof, bytes } = await mint(() => utf8("no commitment in here"));
123
- assert.deepEqual((await verifyFuse({ proof, bytes })).limits, [], "a result that establishes nothing carries no limits");
124
- });
125
- test("one edited byte is refused on the proof, not on the search", async () => {
126
- const edited = new Uint8Array(liveBytes);
127
- edited[edited.length - 2] = edited[edited.length - 2] ^ 0x01;
128
- const r = await verifyFuse({ proof: liveProof, bytes: edited });
129
- assert.equal(r.category, "NO_MATCH", "the bytes are neither the artifact nor a declared original");
130
- });
131
- test("a measurement outside the pinned list is refused", async () => {
132
- const r = await verifyFuse({ proof: liveProof, bytes: liveBytes, trustAnchors: { allowedMeasurements: ["0".repeat(96)] } });
133
- assert.equal(r.category, "INVALID_UNDERLYING_PROOF");
134
- });
135
- });
136
- describe("the other inline outcomes", () => {
137
- test("every occurrence is counted and the first is the one the statement names", async () => {
138
- const { proof, bytes } = await mint((c) => utf8(`${c}\nmiddle\n${c}\n`));
139
- const r = await verifyFuse({ proof, bytes });
140
- assert.equal(r.category, "CARRIED_INLINE");
141
- assert.deepEqual(r.offsets.length, 2);
142
- assert.equal(r.offsets[0], 0);
143
- assert.match(r.statements[1] ?? "", /byte 0/);
144
- });
145
- test("COMMITMENT_ABSENT: the proof is valid, the bytes simply do not carry it", async () => {
146
- const { proof, bytes } = await mint(() => utf8("nothing of the sort in here\n"));
147
- const r = await verifyFuse({ proof, bytes });
148
- assert.equal(r.category, "COMMITMENT_ABSENT");
149
- assert.equal(r.proof.valid, true);
150
- assert.deepEqual(r.offsets, []);
151
- assert.deepEqual(r.statements, []);
152
- });
153
- test("an inline marker that declares an origin is refused: there is no original to name", async () => {
154
- const { proof, bytes } = await mint((c) => utf8(`token ${c}\n`), { message: b64(new Uint8Array(32).fill(9)) });
155
- const r = await verifyFuse({ proof, bytes });
156
- assert.equal(r.category, "INVALID_ORIGIN_ATTRIBUTION");
157
- assert.match(r.reason ?? "", /has no original/);
158
- });
159
- test("an unregistered title is UNDETERMINED_PLACEMENT, neither a pass nor a failure", async () => {
160
- const { proof, bytes } = await mint((c) => utf8(`token ${c}\n`), { title: "hex/1" });
161
- const r = await verifyFuse({ proof, bytes });
162
- assert.equal(r.category, "UNDETERMINED_PLACEMENT");
163
- });
164
- test("a commitment appended to finished work passes, and the limit says so", async () => {
165
- const { proof, bytes } = await mint((c) => utf8(`the work was already done\n${c}\n`));
166
- const r = await verifyFuse({ proof, bytes });
167
- assert.equal(r.category, "CARRIED_INLINE");
168
- assert.ok((r.offsets[0] ?? 0) > 0);
169
- assert.match(r.limits[0] ?? "", /producer's claim/);
170
- });
171
- test("a fused artifact still reports a placement, and carries no limits", async () => {
172
- const fused = JSON.parse(readFileSync(FIX + "trailer.proof.json", "utf8"));
173
- const bytes = new Uint8Array(readFileSync(FIX + "fused-trailer.bin"));
174
- const r = await verifyFuse({ proof: fused, bytes });
175
- assert.equal(r.category, "FUSED_DIRECT");
176
- assert.deepEqual(r.carriedBy, { kind: "placement", id: r.placement });
177
- assert.deepEqual(r.limits, []);
178
- assert.deepEqual(r.offsets, []);
179
- });
180
- });
181
- //# sourceMappingURL=fuse-inline.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fuse-inline.test.js","sourceRoot":"","sources":["../../src/__tests__/fuse-inline.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=fuse-placement.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fuse-placement.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/fuse-placement.test.ts"],"names":[],"mappings":""}
@@ -1,31 +0,0 @@
1
- // Copyright (c) Argento Computing Inc. All rights reserved. See LICENSE.
2
- import { describe, it } from "node:test";
3
- import * as assert from "node:assert/strict";
4
- import { placementForBytes, fusedNamesFor } from "../fuse.js";
5
- const bytes = (...b) => new Uint8Array([...b, ...new Array(24).fill(0)]);
6
- describe("placementForBytes: decided from the bytes, never the name", () => {
7
- it("formats that ignore trailing data take trailer/1", () => {
8
- assert.equal(placementForBytes(bytes(0xff, 0xd8, 0xff, 0xe0)), "trailer/1", "JPEG");
9
- assert.equal(placementForBytes(bytes(0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a)), "trailer/1", "PNG");
10
- assert.equal(placementForBytes(bytes(0x47, 0x49, 0x46, 0x38, 0x39, 0x61)), "trailer/1", "GIF");
11
- assert.equal(placementForBytes(bytes(0x49, 0x49, 0x2a, 0x00)), "trailer/1", "TIFF, DNG, CR2");
12
- assert.equal(placementForBytes(bytes(0x4d, 0x4d, 0x00, 0x2a)), "trailer/1", "TIFF big-endian, NEF");
13
- assert.equal(placementForBytes(bytes(0x42, 0x4d)), "trailer/1", "BMP");
14
- assert.equal(placementForBytes(bytes(0x52, 0x49, 0x46, 0x46, 0, 0, 0, 0, 0x57, 0x45, 0x42, 0x50)), "trailer/1", "RIFF WebP");
15
- });
16
- it("everything else takes container/2", () => {
17
- assert.equal(placementForBytes(new TextEncoder().encode("%PDF-1.7\n")), "container/2", "PDF");
18
- assert.equal(placementForBytes(bytes(0x50, 0x4b, 0x03, 0x04)), "container/2", "ZIP, Office, EPUB");
19
- assert.equal(placementForBytes(bytes(0, 0, 0, 0x18, 0x66, 0x74, 0x79, 0x70)), "container/2", "ISO base media");
20
- assert.equal(placementForBytes(bytes(0x1a, 0x45, 0xdf, 0xa3)), "container/2", "Matroska");
21
- assert.equal(placementForBytes(bytes(0x49, 0x44, 0x33)), "container/2", "MP3");
22
- assert.equal(placementForBytes(new TextEncoder().encode("# markdown\n")), "container/2", "text");
23
- assert.equal(placementForBytes(new Uint8Array(0)), "container/2", "empty");
24
- });
25
- it("names keep the extension for trailers and use .tar for containers", () => {
26
- assert.deepEqual(fusedNamesFor("IMG_0001.jpg", "trailer/1"), { fusedName: "IMG_0001.fused.jpg", frameName: "IMG_0001.jpg.bitgraph-fuse.json" });
27
- assert.deepEqual(fusedNamesFor("contract.pdf", "container/2"), { fusedName: "contract.fused.tar", frameName: "contract.pdf.bitgraph-fuse.json" });
28
- assert.deepEqual(fusedNamesFor("README", "container/2"), { fusedName: "README.fused.tar", frameName: "README.bitgraph-fuse.json" });
29
- });
30
- });
31
- //# sourceMappingURL=fuse-placement.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fuse-placement.test.js","sourceRoot":"","sources":["../../src/__tests__/fuse-placement.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=fuse-roundtrip.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fuse-roundtrip.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/fuse-roundtrip.test.ts"],"names":[],"mappings":""}
@@ -1,241 +0,0 @@
1
- // Copyright (c) Argento Computing Inc. All rights reserved. See LICENSE.
2
- /**
3
- * BitGraph Fuse: reconstruction round trips (spec 15.3). A placement enters
4
- * the registry only with this test passing: original plus proof rebuilds
5
- * bytes whose hash equals the artifact digest, from fixed vectors.
6
- */
7
- import { describe, test } from "node:test";
8
- import * as assert from "node:assert/strict";
9
- import { readFileSync } from "node:fs";
10
- import { fileURLToPath } from "node:url";
11
- import { sha256 } from "@noble/hashes/sha256";
12
- import { PLACEMENTS, getPlacement, computeSlotCommitment, bytesToBase64, buildFrame, parseFrame, readFrameMarker, readFuseAttribution, fuseAttribution } from "@mikeargento/bitgraph-verify";
13
- const FIX = fileURLToPath(new URL("../../src/__tests__/fuse-fixtures/", import.meta.url));
14
- const bytes = (name) => new Uint8Array(readFileSync(FIX + name));
15
- const proofOf = (name) => JSON.parse(readFileSync(FIX + name, "utf8"));
16
- describe("registry", () => {
17
- test("fixed order and ids", () => {
18
- assert.deepEqual(PLACEMENTS.map((p) => p.id), ["trailer/1", "container/1", "container/2", "produced/1"]);
19
- assert.deepEqual(PLACEMENTS.map((p) => p.byteExact), [true, true, true, false]);
20
- assert.equal(getPlacement("xmp/9"), undefined);
21
- assert.equal(getPlacement(""), undefined);
22
- });
23
- });
24
- describe("trailer/1", () => {
25
- const p = getPlacement("trailer/1");
26
- test("original + proof rebuilds the committed bytes", () => {
27
- const proof = proofOf("trailer.proof.json");
28
- const rebuilt = p.build({ original: bytes("original.txt"), commitment: computeSlotCommitment(proof.slotAllocation) });
29
- assert.deepEqual(rebuilt, bytes("fused-trailer.bin"));
30
- assert.equal(bytesToBase64(sha256(rebuilt)), proof.artifact.digestB64);
31
- });
32
- test("locate returns the commitment and the exact original prefix", () => {
33
- const proof = proofOf("trailer.proof.json");
34
- const l = p.locate(bytes("fused-trailer.bin"));
35
- assert.deepEqual(l.commitment, computeSlotCommitment(proof.slotAllocation));
36
- assert.deepEqual(l.originalBytes, bytes("original.txt"));
37
- assert.equal(l.originDigest, undefined, "trailer/1 writes no origin digest");
38
- });
39
- test("locate refuses short input, wrong magic, non-zero reserved bytes", () => {
40
- assert.equal(p.locate(new Uint8Array(47)), null);
41
- const f = bytes("fused-trailer.bin");
42
- const magic = f.slice();
43
- magic[magic.length - 48] = 0x58;
44
- assert.equal(p.locate(magic), null);
45
- const reserved = f.slice();
46
- reserved[reserved.length - 40] = 1;
47
- assert.equal(p.locate(reserved), null);
48
- assert.equal(p.locate(bytes("original.txt")), null, "an unfused file has no trailer");
49
- });
50
- test("build refuses a bad commitment length and a missing original", () => {
51
- assert.throws(() => p.build({ commitment: new Uint8Array(32) }), /original/);
52
- assert.throws(() => p.build({ original: new Uint8Array(1), commitment: new Uint8Array(31) }), /32 bytes/);
53
- });
54
- });
55
- describe("container/1", () => {
56
- const p = getPlacement("container/1");
57
- test("original + proof rebuilds the committed archive byte for byte, twice", () => {
58
- const proof = proofOf("container.proof.json");
59
- const c = computeSlotCommitment(proof.slotAllocation);
60
- const a = p.build({ original: bytes("image.png"), commitment: c });
61
- const b = p.build({ original: bytes("image.png"), commitment: c });
62
- assert.deepEqual(a, b, "deterministic");
63
- assert.deepEqual(a, bytes("fused-container.tar"));
64
- assert.equal(bytesToBase64(sha256(a)), proof.artifact.digestB64);
65
- });
66
- test("locate returns commitment, origin digest and the original bytes", () => {
67
- const proof = proofOf("container.proof.json");
68
- const l = p.locate(bytes("fused-container.tar"));
69
- assert.deepEqual(l.commitment, computeSlotCommitment(proof.slotAllocation));
70
- assert.deepEqual(l.originDigest, sha256(bytes("image.png")));
71
- assert.deepEqual(l.originalBytes, bytes("image.png"));
72
- });
73
- test("locate refuses any deviation from the fixed layout", () => {
74
- const f = bytes("fused-container.tar");
75
- const mtime = f.slice();
76
- mtime[136] = 0x31; // manifest header mtime
77
- assert.equal(p.locate(mtime), null, "non-zero mtime");
78
- const uid = f.slice();
79
- uid[108] = 0x31;
80
- assert.equal(p.locate(uid), null, "uid");
81
- const truncated = f.subarray(0, f.length - 512);
82
- assert.equal(p.locate(truncated), null, "missing end block");
83
- const extra = new Uint8Array(f.length + 512);
84
- extra.set(f);
85
- assert.equal(p.locate(extra), null, "extra trailing block");
86
- // Swap entry order: rebuild with the original first is not this placement.
87
- const swapped = f.slice();
88
- swapped[0] = 0x78; // corrupt the manifest name
89
- assert.equal(p.locate(swapped), null, "wrong entry name");
90
- assert.equal(p.locate(bytes("image.png")), null, "not a tar");
91
- assert.equal(p.locate(bytes("fused-trailer.bin")), null);
92
- });
93
- test("an archive with a wrong manifest origin does not locate", () => {
94
- const proof = proofOf("container.proof.json");
95
- const c = computeSlotCommitment(proof.slotAllocation);
96
- const lying = p.build({ original: bytes("image.png"), originDigest: sha256(bytes("original.txt")), commitment: c });
97
- // build accepts a caller-supplied origin digest; locate returns what is written,
98
- // and the verifier compares it against the marker and the original's hash.
99
- const l = p.locate(lying);
100
- assert.deepEqual(l.originDigest, sha256(bytes("original.txt")));
101
- assert.notDeepEqual(l.originDigest, sha256(l.originalBytes));
102
- });
103
- });
104
- describe("produced/1", () => {
105
- const p = getPlacement("produced/1");
106
- test("build and locate agree, with and without an origin", () => {
107
- for (const [name, proofName] of [["produced-origin.json", "produced-origin.proof.json"], ["produced-bare.json", "produced-bare.proof.json"]]) {
108
- const proof = proofOf(proofName);
109
- const l = p.locate(bytes(name));
110
- assert.deepEqual(l.commitment, computeSlotCommitment(proof.slotAllocation));
111
- assert.equal(bytesToBase64(sha256(bytes(name))), proof.artifact.digestB64);
112
- }
113
- assert.equal(p.locate(bytes("original.txt")), null);
114
- assert.throws(() => p.build({ original: new Uint8Array(1), commitment: new Uint8Array(32) }), /no original/);
115
- });
116
- });
117
- describe("legacy files that carry a nonce line", () => {
118
- test("a file with a 'nonce:' line and no trailer, container or payload locates nothing", () => {
119
- // ~/BitGraph holds recordings whose bytes begin with a test label and a line
120
- // "nonce: <hex>" (the proto pattern, minted 2026-06-27 and 2026-08-06). That
121
- // line is content, not a commitment: every registered placement must miss.
122
- const legacy = new TextEncoder().encode("BitGraph test subject folder-02 file-02\nnonce: e317096692576a308263bc283d66b42e\nuoJjpYb8igrEhhSlczKKTKDyw6guO2iU5iHdBRF+mPELQqBfjrO2WZYrSWyHEuKK\n");
123
- for (const p of PLACEMENTS)
124
- assert.equal(p.locate(legacy), null, p.id);
125
- });
126
- });
127
- describe("attribution and Frame", () => {
128
- test("fused attribution carries placement in title and origin in message (standard base64)", () => {
129
- const origin = sha256(bytes("original.txt"));
130
- const a = fuseAttribution("trailer/1", origin);
131
- assert.deepEqual(a, { name: "bitgraph-fuse/1", title: "trailer/1", message: bytesToBase64(origin) });
132
- assert.deepEqual(fuseAttribution("produced/1"), { name: "bitgraph-fuse/1", title: "produced/1" });
133
- const proof = proofOf("trailer.proof.json");
134
- const m = readFuseAttribution(proof);
135
- assert.equal(m.placement, "trailer/1");
136
- assert.equal(m.placementSource, "attribution");
137
- assert.equal(m.source, "attribution");
138
- assert.deepEqual(m.originDigest, origin);
139
- assert.equal(m.originSource, "attribution");
140
- const bare = readFuseAttribution(proofOf("trailer-undeclared.proof.json"));
141
- assert.equal(bare.originDigest, undefined);
142
- assert.equal(bare.originSource, undefined);
143
- assert.equal(readFuseAttribution(proofOf("recorded.proof.json")), null, "an ordinary proof has no marker");
144
- });
145
- test("a Frame parses regardless of outer formatting and the nested proof is untouched", () => {
146
- const text = readFileSync(FIX + "trailer.bitgraph-fuse.json", "utf8");
147
- const a = parseFrame(text);
148
- const b = parseFrame(JSON.stringify(JSON.parse(text)));
149
- assert.deepEqual(a, b);
150
- assert.equal(a.manifest.placement, "trailer/1");
151
- assert.deepEqual(a.proof, proofOf("trailer.proof.json"));
152
- const marker = readFrameMarker(a);
153
- assert.equal(marker.source, "manifest");
154
- assert.equal(marker.placementSource, "manifest");
155
- assert.deepEqual(marker.originDigest, sha256(bytes("original.txt")));
156
- const undeclared = parseFrame({ type: "bitgraph-fuse/1", manifest: { artifact: { algorithm: "sha256", digest: "00".repeat(32) }, fusedFile: null }, proof: proofOf("trailer.proof.json") });
157
- assert.equal(readFrameMarker(undeclared).placement, null, "a manifest may leave the placement undeclared");
158
- assert.equal(parseFrame(proofOf("trailer.proof.json")), null, "a bare proof is not a Frame");
159
- assert.equal(parseFrame("{not json"), null);
160
- assert.equal(parseFrame({ type: "bitgraph-fuse/1", manifest: { placement: "trailer/1", artifact: { algorithm: "sha256", digest: "zz" }, fusedFile: null }, proof: {} }), null);
161
- });
162
- test("a Frame is never proof-shaped", () => {
163
- const f = JSON.parse(readFileSync(FIX + "produced-origin.bitgraph-fuse.json", "utf8"));
164
- assert.equal(f.version, undefined);
165
- assert.equal(f.artifact, undefined);
166
- assert.equal(f.signer, undefined);
167
- assert.equal(f.type, "bitgraph-fuse/1");
168
- assert.ok(f.fusePayload, "Form C frames carry the parsed payload view");
169
- assert.throws(() => buildFrame({ proof: proofOf("produced-origin.proof.json"), placement: "produced/1", artifactDigest: new Uint8Array(32), fusedFile: null, fusePayload: new Uint8Array([1]) }), /canonical/);
170
- });
171
- });
172
- describe("container/2: the original first, then the manifest", () => {
173
- const p = getPlacement("container/2");
174
- const commitment = new Uint8Array(32).fill(0x5a);
175
- const other = new Uint8Array(32).fill(0xa5);
176
- const sizes = [0, 1, 511, 512, 513, 1023, 1024, 1025, 100_000, 1_048_579];
177
- const filled = (n) => { const b = new Uint8Array(n); for (let i = 0; i < n; i++)
178
- b[i] = (i * 13 + 7) & 0xff; return b; };
179
- test("build carries the original whole and first; locate reads it back and each container refuses the other's bytes", () => {
180
- for (const n of sizes) {
181
- const original = filled(n);
182
- const fused = p.build({ original, commitment });
183
- assert.equal(new TextDecoder().decode(fused.subarray(0, 22)), "bitgraph-fuse/original");
184
- const l = p.locate(fused);
185
- assert.ok(l, `locate ${n}`);
186
- assert.deepEqual(l.commitment, commitment);
187
- assert.deepEqual(l.originDigest, sha256(original));
188
- assert.deepEqual(l.originalBytes, original);
189
- const c1 = getPlacement("container/1").build({ original, commitment });
190
- assert.equal(p.locate(c1), null, `container/2 refuses container/1 bytes (${n})`);
191
- assert.equal(getPlacement("container/1").locate(fused), null, `container/1 refuses container/2 bytes (${n})`);
192
- const tampered = new Uint8Array(fused);
193
- tampered[tampered.length - 600] = (tampered[tampered.length - 600] ?? 0) ^ 1;
194
- assert.equal(p.locate(tampered), null);
195
- }
196
- });
197
- test("frame: prefix, original, suffix is the build, byte for byte, for every Form A and B placement and size", () => {
198
- for (const id of ["trailer/1", "container/1", "container/2"]) {
199
- const q = getPlacement(id);
200
- for (const n of sizes) {
201
- const original = filled(n);
202
- const originDigest = sha256(original);
203
- for (const c of [commitment, other]) {
204
- const f = q.frame({ originalSize: n, originDigest, commitment: c });
205
- const joined = new Uint8Array(f.prefix.length + n + f.suffix.length);
206
- joined.set(f.prefix, 0);
207
- joined.set(original, f.prefix.length);
208
- joined.set(f.suffix, f.prefix.length + n);
209
- assert.deepEqual(joined, q.build({ original, originDigest, commitment: c }), `${id} ${n}`);
210
- }
211
- }
212
- }
213
- });
214
- test("scanPrefix: fixed for trailer/1 (empty) and container/2 (the original's header), null for container/1 whose prefix carries the commitment", () => {
215
- for (const n of sizes) {
216
- const originDigest = sha256(filled(n));
217
- assert.deepEqual(getPlacement("trailer/1").scanPrefix(n), new Uint8Array(0));
218
- const pre = p.scanPrefix(n);
219
- assert.equal(pre.length, 512);
220
- for (const c of [commitment, other])
221
- assert.deepEqual(p.frame({ originalSize: n, originDigest, commitment: c }).prefix, pre, `the same prefix under any commitment (${n})`);
222
- assert.equal(getPlacement("container/1").scanPrefix(n), null);
223
- }
224
- assert.equal(getPlacement("produced/1").frame, undefined);
225
- assert.equal(getPlacement("set/1").frame, undefined);
226
- });
227
- test("a hasher state saved after prefix and original, finished with the suffix, is the fused digest: the file is read once", () => {
228
- for (const n of [0, 1, 511, 512, 513, 100_000]) {
229
- const original = filled(n);
230
- const originDigest = sha256(original);
231
- const h = sha256.create();
232
- h.update(p.scanPrefix(n));
233
- h.update(original);
234
- for (const c of [commitment, other]) {
235
- const finished = h.clone().update(p.frame({ originalSize: n, originDigest, commitment: c }).suffix).digest();
236
- assert.deepEqual(finished, sha256(p.build({ original, originDigest, commitment: c })), `${n} bytes`);
237
- }
238
- }
239
- });
240
- });
241
- //# sourceMappingURL=fuse-roundtrip.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fuse-roundtrip.test.js","sourceRoot":"","sources":["../../src/__tests__/fuse-roundtrip.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=fuse-sdk.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fuse-sdk.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/fuse-sdk.test.ts"],"names":[],"mappings":""}