@provablehq/sdk 0.10.2 → 0.10.4

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 (219) hide show
  1. package/dist/dynamic/browser.cjs +12 -0
  2. package/dist/dynamic/browser.d.cts +8 -0
  3. package/dist/dynamic/browser.d.ts +2 -2
  4. package/dist/dynamic/node.cjs +12 -0
  5. package/dist/dynamic/node.d.cts +8 -0
  6. package/dist/dynamic/node.d.ts +2 -2
  7. package/dist/mainnet/account.d.cts +347 -0
  8. package/dist/mainnet/browser.cjs +8530 -0
  9. package/dist/mainnet/browser.cjs.map +1 -0
  10. package/dist/mainnet/browser.d.cts +72 -0
  11. package/dist/mainnet/browser.d.ts +3 -3
  12. package/dist/mainnet/browser.js +78 -32
  13. package/dist/mainnet/browser.js.map +1 -1
  14. package/dist/mainnet/constants.d.cts +40 -0
  15. package/dist/mainnet/external-signing.d.cts +76 -0
  16. package/dist/mainnet/integrations/sealance/merkle-tree.d.cts +192 -0
  17. package/dist/mainnet/keys/keystore/error.d.cts +24 -0
  18. package/dist/mainnet/keys/keystore/file.d.cts +177 -0
  19. package/dist/mainnet/keys/keystore/interface.d.cts +161 -0
  20. package/dist/mainnet/keys/provider/interface.d.cts +170 -0
  21. package/dist/mainnet/keys/provider/memory.d.cts +213 -0
  22. package/dist/mainnet/keys/provider/memory.d.ts +6 -2
  23. package/dist/mainnet/keys/provider/offline.d.cts +365 -0
  24. package/dist/mainnet/keys/verifier/interface.d.cts +70 -0
  25. package/dist/mainnet/keys/verifier/memory.d.cts +37 -0
  26. package/dist/mainnet/keys/verifier/memory.d.ts +1 -1
  27. package/dist/mainnet/models/authorization.d.cts +6 -0
  28. package/dist/mainnet/models/authorization.d.ts +2 -2
  29. package/dist/mainnet/models/blockJSON.d.cts +33 -0
  30. package/dist/mainnet/models/confirmed_transaction.d.cts +9 -0
  31. package/dist/mainnet/models/cryptoBoxPubkey.d.cts +4 -0
  32. package/dist/mainnet/models/deployment/deploymentJSON.d.cts +6 -0
  33. package/dist/mainnet/models/deployment/deploymentObject.d.cts +6 -0
  34. package/dist/mainnet/models/encryptedProvingRequest.d.cts +4 -0
  35. package/dist/mainnet/models/execution/executionJSON.d.cts +11 -0
  36. package/dist/mainnet/models/execution/executionObject.d.cts +11 -0
  37. package/dist/mainnet/models/external-signing.d.cts +123 -0
  38. package/dist/mainnet/models/finalizeJSON.d.cts +6 -0
  39. package/dist/mainnet/models/functionInput.d.cts +7 -0
  40. package/dist/mainnet/models/functionObject.d.cts +8 -0
  41. package/dist/mainnet/models/imports.d.cts +7 -0
  42. package/dist/mainnet/models/input/inputJSON.d.cts +10 -0
  43. package/dist/mainnet/models/input/inputObject.d.cts +15 -0
  44. package/dist/mainnet/models/inputID.d.cts +4 -0
  45. package/dist/mainnet/models/keyPair.d.cts +4 -0
  46. package/dist/mainnet/models/output/outputJSON.d.cts +7 -0
  47. package/dist/mainnet/models/output/outputObject.d.cts +18 -0
  48. package/dist/mainnet/models/owner/ownerJSON.d.cts +4 -0
  49. package/dist/mainnet/models/owner/ownerObject.d.cts +5 -0
  50. package/dist/mainnet/models/plaintext/array.d.cts +3 -0
  51. package/dist/mainnet/models/plaintext/literal.d.cts +1 -0
  52. package/dist/mainnet/models/plaintext/plaintext.d.cts +5 -0
  53. package/dist/mainnet/models/plaintext/struct.d.cts +5 -0
  54. package/dist/mainnet/models/provingRequest.d.cts +6 -0
  55. package/dist/mainnet/models/provingRequest.d.ts +1 -1
  56. package/dist/mainnet/models/provingResponse.d.cts +51 -0
  57. package/dist/mainnet/models/ratification.d.cts +4 -0
  58. package/dist/mainnet/models/record-provider/encryptedRecord.d.cts +58 -0
  59. package/dist/mainnet/models/record-provider/ownedRecord.d.cts +60 -0
  60. package/dist/mainnet/models/record-provider/recordSearchParams.d.cts +19 -0
  61. package/dist/mainnet/models/record-scanner/encryptedRecordsResult.d.cts +7 -0
  62. package/dist/mainnet/models/record-scanner/encryptedRegistrationRequest.d.cts +8 -0
  63. package/dist/mainnet/models/record-scanner/error.d.cts +47 -0
  64. package/dist/mainnet/models/record-scanner/error.d.ts +1 -1
  65. package/dist/mainnet/models/record-scanner/ownedFilter.d.cts +22 -0
  66. package/dist/mainnet/models/record-scanner/ownedFilter.d.ts +3 -3
  67. package/dist/mainnet/models/record-scanner/ownedRecordsResponseFilter.d.cts +42 -0
  68. package/dist/mainnet/models/record-scanner/ownedRecordsResult.d.cts +13 -0
  69. package/dist/mainnet/models/record-scanner/recordsFilter.d.cts +35 -0
  70. package/dist/mainnet/models/record-scanner/recordsFilter.d.ts +2 -2
  71. package/dist/mainnet/models/record-scanner/recordsResponseFilter.d.cts +42 -0
  72. package/dist/mainnet/models/record-scanner/registrationRequest.d.cts +13 -0
  73. package/dist/mainnet/models/record-scanner/registrationResponse.d.cts +13 -0
  74. package/dist/mainnet/models/record-scanner/registrationResult.d.cts +9 -0
  75. package/dist/mainnet/models/record-scanner/revokeResult.d.cts +17 -0
  76. package/dist/mainnet/models/record-scanner/serialNumbersResult.d.cts +15 -0
  77. package/dist/mainnet/models/record-scanner/statusResponse.d.cts +13 -0
  78. package/dist/mainnet/models/record-scanner/statusResult.d.cts +13 -0
  79. package/dist/mainnet/models/record-scanner/tagsResult.d.cts +12 -0
  80. package/dist/mainnet/models/request.d.cts +14 -0
  81. package/dist/mainnet/models/request.d.ts +1 -1
  82. package/dist/mainnet/models/solution.d.cts +14 -0
  83. package/dist/mainnet/models/transaction/transactionJSON.d.cts +11 -0
  84. package/dist/mainnet/models/transaction/transactionObject.d.cts +14 -0
  85. package/dist/mainnet/models/transition/transitionJSON.d.cts +13 -0
  86. package/dist/mainnet/models/transition/transitionObject.d.cts +15 -0
  87. package/dist/mainnet/network-client.d.cts +850 -0
  88. package/dist/mainnet/network-client.d.ts +3 -0
  89. package/dist/mainnet/node-polyfill.cjs +238 -0
  90. package/dist/mainnet/node-polyfill.cjs.map +1 -0
  91. package/dist/mainnet/node-polyfill.d.cts +5 -0
  92. package/dist/mainnet/node-polyfill.js +1 -1
  93. package/dist/mainnet/node-polyfill.js.map +1 -1
  94. package/dist/mainnet/node.cjs +686 -0
  95. package/dist/mainnet/node.cjs.map +1 -0
  96. package/dist/mainnet/node.d.cts +3 -0
  97. package/dist/mainnet/node.js +2 -2
  98. package/dist/mainnet/polyfill/crypto.d.cts +1 -0
  99. package/dist/mainnet/polyfill/fetch.d.cts +1 -0
  100. package/dist/mainnet/polyfill/shared.d.cts +1 -0
  101. package/dist/mainnet/polyfill/worker.d.cts +1 -0
  102. package/dist/mainnet/polyfill/xmlhttprequest.d.cts +1 -0
  103. package/dist/mainnet/program-manager.d.cts +1600 -0
  104. package/dist/mainnet/program-manager.d.ts +13 -1
  105. package/dist/mainnet/record-provider.d.cts +274 -0
  106. package/dist/mainnet/record-scanner.d.cts +371 -0
  107. package/dist/mainnet/record-scanner.d.ts +9 -6
  108. package/dist/mainnet/security.d.cts +62 -0
  109. package/dist/mainnet/security.d.ts +5 -5
  110. package/dist/mainnet/utils.d.cts +23 -0
  111. package/dist/mainnet/utils.d.ts +10 -2
  112. package/dist/mainnet/wasm.d.cts +1 -0
  113. package/dist/testnet/account.d.cts +347 -0
  114. package/dist/testnet/browser.cjs +8530 -0
  115. package/dist/testnet/browser.cjs.map +1 -0
  116. package/dist/testnet/browser.d.cts +72 -0
  117. package/dist/testnet/browser.d.ts +3 -3
  118. package/dist/testnet/browser.js +78 -32
  119. package/dist/testnet/browser.js.map +1 -1
  120. package/dist/testnet/constants.d.cts +40 -0
  121. package/dist/testnet/external-signing.d.cts +76 -0
  122. package/dist/testnet/integrations/sealance/merkle-tree.d.cts +192 -0
  123. package/dist/testnet/keys/keystore/error.d.cts +24 -0
  124. package/dist/testnet/keys/keystore/file.d.cts +177 -0
  125. package/dist/testnet/keys/keystore/interface.d.cts +161 -0
  126. package/dist/testnet/keys/provider/interface.d.cts +170 -0
  127. package/dist/testnet/keys/provider/memory.d.cts +213 -0
  128. package/dist/testnet/keys/provider/memory.d.ts +6 -2
  129. package/dist/testnet/keys/provider/offline.d.cts +365 -0
  130. package/dist/testnet/keys/verifier/interface.d.cts +70 -0
  131. package/dist/testnet/keys/verifier/memory.d.cts +37 -0
  132. package/dist/testnet/keys/verifier/memory.d.ts +1 -1
  133. package/dist/testnet/models/authorization.d.cts +6 -0
  134. package/dist/testnet/models/authorization.d.ts +2 -2
  135. package/dist/testnet/models/blockJSON.d.cts +33 -0
  136. package/dist/testnet/models/confirmed_transaction.d.cts +9 -0
  137. package/dist/testnet/models/cryptoBoxPubkey.d.cts +4 -0
  138. package/dist/testnet/models/deployment/deploymentJSON.d.cts +6 -0
  139. package/dist/testnet/models/deployment/deploymentObject.d.cts +6 -0
  140. package/dist/testnet/models/encryptedProvingRequest.d.cts +4 -0
  141. package/dist/testnet/models/execution/executionJSON.d.cts +11 -0
  142. package/dist/testnet/models/execution/executionObject.d.cts +11 -0
  143. package/dist/testnet/models/external-signing.d.cts +123 -0
  144. package/dist/testnet/models/finalizeJSON.d.cts +6 -0
  145. package/dist/testnet/models/functionInput.d.cts +7 -0
  146. package/dist/testnet/models/functionObject.d.cts +8 -0
  147. package/dist/testnet/models/imports.d.cts +7 -0
  148. package/dist/testnet/models/input/inputJSON.d.cts +10 -0
  149. package/dist/testnet/models/input/inputObject.d.cts +15 -0
  150. package/dist/testnet/models/inputID.d.cts +4 -0
  151. package/dist/testnet/models/keyPair.d.cts +4 -0
  152. package/dist/testnet/models/output/outputJSON.d.cts +7 -0
  153. package/dist/testnet/models/output/outputObject.d.cts +18 -0
  154. package/dist/testnet/models/owner/ownerJSON.d.cts +4 -0
  155. package/dist/testnet/models/owner/ownerObject.d.cts +5 -0
  156. package/dist/testnet/models/plaintext/array.d.cts +3 -0
  157. package/dist/testnet/models/plaintext/literal.d.cts +1 -0
  158. package/dist/testnet/models/plaintext/plaintext.d.cts +5 -0
  159. package/dist/testnet/models/plaintext/struct.d.cts +5 -0
  160. package/dist/testnet/models/provingRequest.d.cts +6 -0
  161. package/dist/testnet/models/provingRequest.d.ts +1 -1
  162. package/dist/testnet/models/provingResponse.d.cts +51 -0
  163. package/dist/testnet/models/ratification.d.cts +4 -0
  164. package/dist/testnet/models/record-provider/encryptedRecord.d.cts +58 -0
  165. package/dist/testnet/models/record-provider/ownedRecord.d.cts +60 -0
  166. package/dist/testnet/models/record-provider/recordSearchParams.d.cts +19 -0
  167. package/dist/testnet/models/record-scanner/encryptedRecordsResult.d.cts +7 -0
  168. package/dist/testnet/models/record-scanner/encryptedRegistrationRequest.d.cts +8 -0
  169. package/dist/testnet/models/record-scanner/error.d.cts +47 -0
  170. package/dist/testnet/models/record-scanner/error.d.ts +1 -1
  171. package/dist/testnet/models/record-scanner/ownedFilter.d.cts +22 -0
  172. package/dist/testnet/models/record-scanner/ownedFilter.d.ts +3 -3
  173. package/dist/testnet/models/record-scanner/ownedRecordsResponseFilter.d.cts +42 -0
  174. package/dist/testnet/models/record-scanner/ownedRecordsResult.d.cts +13 -0
  175. package/dist/testnet/models/record-scanner/recordsFilter.d.cts +35 -0
  176. package/dist/testnet/models/record-scanner/recordsFilter.d.ts +2 -2
  177. package/dist/testnet/models/record-scanner/recordsResponseFilter.d.cts +42 -0
  178. package/dist/testnet/models/record-scanner/registrationRequest.d.cts +13 -0
  179. package/dist/testnet/models/record-scanner/registrationResponse.d.cts +13 -0
  180. package/dist/testnet/models/record-scanner/registrationResult.d.cts +9 -0
  181. package/dist/testnet/models/record-scanner/revokeResult.d.cts +17 -0
  182. package/dist/testnet/models/record-scanner/serialNumbersResult.d.cts +15 -0
  183. package/dist/testnet/models/record-scanner/statusResponse.d.cts +13 -0
  184. package/dist/testnet/models/record-scanner/statusResult.d.cts +13 -0
  185. package/dist/testnet/models/record-scanner/tagsResult.d.cts +12 -0
  186. package/dist/testnet/models/request.d.cts +14 -0
  187. package/dist/testnet/models/request.d.ts +1 -1
  188. package/dist/testnet/models/solution.d.cts +14 -0
  189. package/dist/testnet/models/transaction/transactionJSON.d.cts +11 -0
  190. package/dist/testnet/models/transaction/transactionObject.d.cts +14 -0
  191. package/dist/testnet/models/transition/transitionJSON.d.cts +13 -0
  192. package/dist/testnet/models/transition/transitionObject.d.cts +15 -0
  193. package/dist/testnet/network-client.d.cts +850 -0
  194. package/dist/testnet/network-client.d.ts +3 -0
  195. package/dist/testnet/node-polyfill.cjs +238 -0
  196. package/dist/testnet/node-polyfill.cjs.map +1 -0
  197. package/dist/testnet/node-polyfill.d.cts +5 -0
  198. package/dist/testnet/node-polyfill.js +1 -1
  199. package/dist/testnet/node-polyfill.js.map +1 -1
  200. package/dist/testnet/node.cjs +686 -0
  201. package/dist/testnet/node.cjs.map +1 -0
  202. package/dist/testnet/node.d.cts +3 -0
  203. package/dist/testnet/node.js +2 -2
  204. package/dist/testnet/polyfill/crypto.d.cts +1 -0
  205. package/dist/testnet/polyfill/fetch.d.cts +1 -0
  206. package/dist/testnet/polyfill/shared.d.cts +1 -0
  207. package/dist/testnet/polyfill/worker.d.cts +1 -0
  208. package/dist/testnet/polyfill/xmlhttprequest.d.cts +1 -0
  209. package/dist/testnet/program-manager.d.cts +1600 -0
  210. package/dist/testnet/program-manager.d.ts +13 -1
  211. package/dist/testnet/record-provider.d.cts +274 -0
  212. package/dist/testnet/record-scanner.d.cts +371 -0
  213. package/dist/testnet/record-scanner.d.ts +9 -6
  214. package/dist/testnet/security.d.cts +62 -0
  215. package/dist/testnet/security.d.ts +5 -5
  216. package/dist/testnet/utils.d.cts +23 -0
  217. package/dist/testnet/utils.d.ts +10 -2
  218. package/dist/testnet/wasm.d.cts +1 -0
  219. package/package.json +51 -9
@@ -0,0 +1,686 @@
1
+ 'use strict';
2
+
3
+ require('./node-polyfill.cjs');
4
+ var fs = require('node:fs/promises');
5
+ var $fs = require('node:fs');
6
+ var path = require('path');
7
+ var browser = require('./browser.cjs');
8
+ var mainnet_js = require('@provablehq/wasm/mainnet.js');
9
+ require('core-js/proposals/json-parse-with-source.js');
10
+ require('node:crypto');
11
+ require('mime/lite');
12
+ require('xmlhttprequest-ssl');
13
+ require('node:worker_threads');
14
+ require('node:os');
15
+ require('@serenity-kit/noble-sodium');
16
+ require('@scure/base');
17
+
18
+ function _interopNamespaceDefault(e) {
19
+ var n = Object.create(null);
20
+ if (e) {
21
+ Object.keys(e).forEach(function (k) {
22
+ if (k !== 'default') {
23
+ var d = Object.getOwnPropertyDescriptor(e, k);
24
+ Object.defineProperty(n, k, d.get ? d : {
25
+ enumerable: true,
26
+ get: function () { return e[k]; }
27
+ });
28
+ }
29
+ });
30
+ }
31
+ n.default = e;
32
+ return Object.freeze(n);
33
+ }
34
+
35
+ var fs__namespace = /*#__PURE__*/_interopNamespaceDefault(fs);
36
+ var $fs__namespace = /*#__PURE__*/_interopNamespaceDefault($fs);
37
+ var path__namespace = /*#__PURE__*/_interopNamespaceDefault(path);
38
+
39
+ class LocalFileKeyStore {
40
+ directory;
41
+ keyVerifier = new browser.MemKeyVerifier();
42
+ /**
43
+ * Creates a new directory at the given path or CURRENTDIR/.aleo if none is provided to store keys.
44
+ * If a custom directory is passed and its last path segment is not ".aleo", ".aleo" is appended
45
+ * so keys are stored under that subdirectory (e.g. /home/project → /home/project/.aleo).
46
+ *
47
+ * @param {string} [directory] - Optional custom directory path for key storage. Defaults to ".aleo" in current working directory.
48
+ * @throws {Error} If directory creation fails.
49
+ */
50
+ constructor(directory) {
51
+ this.directory = directory ?? path__namespace.join(process.cwd(), ".aleo");
52
+ if (directory !== undefined && path__namespace.basename(this.directory) !== ".aleo") {
53
+ this.directory = path__namespace.join(this.directory, ".aleo");
54
+ }
55
+ $fs__namespace.mkdirSync(this.directory, { recursive: true });
56
+ }
57
+ /**
58
+ * Validates a single locator component for unsafe filesystem characters.
59
+ *
60
+ * @private
61
+ * @param {string} value - The component value to validate.
62
+ * @param {string} label - Label for error messages (e.g. "program", "functionName").
63
+ * @throws {InvalidLocatorError} If the value is empty, contains traversal sequences, path separators, or null bytes.
64
+ */
65
+ validateComponent(value, label) {
66
+ if (value === "" || value === ".") {
67
+ throw new browser.InvalidLocatorError(`KeyLocator ${label} must not be empty or "." (got "${value}")`, value, "reserved_name");
68
+ }
69
+ if (value.includes("..")) {
70
+ throw new browser.InvalidLocatorError(`KeyLocator ${label} must not contain ".." (got "${value}")`, value, "path_traversal");
71
+ }
72
+ if (value.includes("/") || value.includes("\\") || value.includes("\0")) {
73
+ throw new browser.InvalidLocatorError(`KeyLocator ${label} must not contain path separators or null bytes (got "${value}")`, value, "path_separator");
74
+ }
75
+ }
76
+ /**
77
+ * Validates that a numeric locator field is not negative.
78
+ *
79
+ * @private
80
+ * @param {number} value - The numeric value to validate.
81
+ * @param {string} label - Label for error messages (e.g. "edition", "amendment").
82
+ * @throws {InvalidLocatorError} If the value is negative.
83
+ */
84
+ validateNonNegative(value, label) {
85
+ if (!Number.isInteger(value) || value < 0) {
86
+ throw new browser.InvalidLocatorError(`KeyLocator ${label} must be a non-negative integer (got ${value})`, String(value), "negative_value");
87
+ }
88
+ }
89
+ /**
90
+ * Serializes a {@link KeyLocator} to a filesystem-safe flat string, validating components first.
91
+ *
92
+ * For prover/verifier keys: `{program}.{functionName}.e{edition}.a{amendment}.{network}.{keyType}`
93
+ * For translation keys: `{program}.{functionName}.e{edition}.a{amendment}.{network}.translation.{recordName}.{recordInputPosition}`
94
+ *
95
+ * Note: The optional `checksum` field is excluded — it is used for integrity verification only
96
+ * (via {@link checksumToFingerprint}) and is not part of the key identity.
97
+ *
98
+ * @private
99
+ * @param {KeyLocator} locator - The key locator.
100
+ * @returns {string} A dot-delimited string safe for use as a filename.
101
+ * @throws {InvalidLocatorError} If any component contains unsafe characters.
102
+ */
103
+ serializeLocator(locator) {
104
+ this.validateComponent(locator.program, "program");
105
+ this.validateComponent(locator.functionName, "functionName");
106
+ this.validateComponent(locator.network, "network");
107
+ this.validateNonNegative(locator.edition, "edition");
108
+ this.validateNonNegative(locator.amendment, "amendment");
109
+ const base = `${locator.program}.${locator.functionName}.e${locator.edition}.a${locator.amendment}.${locator.network}.${locator.keyType}`;
110
+ if (locator.keyType === "translation") {
111
+ this.validateComponent(locator.recordName, "recordName");
112
+ this.validateNonNegative(locator.recordInputPosition, "recordInputPosition");
113
+ return `${base}.${locator.recordName}.${locator.recordInputPosition}`;
114
+ }
115
+ return base;
116
+ }
117
+ /**
118
+ * Converts an optional checksum string from a locator into a KeyFingerprint
119
+ * suitable for the key verifier, using the actual key byte length for size.
120
+ *
121
+ * @private
122
+ */
123
+ checksumToFingerprint(checksum, keyBytes) {
124
+ if (!checksum)
125
+ return undefined;
126
+ return { checksum, size: keyBytes.length };
127
+ }
128
+ /**
129
+ * Generates the path for a key metadata file based on the locator.
130
+ *
131
+ * @private
132
+ * @param {string} locator - Unique identifier for the key.
133
+ * @returns {string} Full filesystem path to the metadata file.
134
+ */
135
+ metadataPath(locator) {
136
+ return path__namespace.join(this.directory, `${locator}.metadata`);
137
+ }
138
+ /**
139
+ * Reads and parses the key fingerprint metadata from storage.
140
+ *
141
+ * @private
142
+ * @param {string} locator - Unique identifier for the key.
143
+ * @returns {Promise<KeyFingerprint | null>} The key fingerprint if found, null if file doesn't exist.
144
+ * @throws {Error} If file read fails for any reason other than not found.
145
+ */
146
+ async readKeyMetadata(locator) {
147
+ try {
148
+ const data = await fs__namespace.readFile(this.metadataPath(locator), "utf-8");
149
+ return JSON.parse(data);
150
+ }
151
+ catch (err) {
152
+ if (err &&
153
+ typeof err === "object" &&
154
+ "code" in err &&
155
+ err.code === "ENOENT")
156
+ return null;
157
+ throw err;
158
+ }
159
+ }
160
+ /**
161
+ * Writes key fingerprint metadata to storage.
162
+ *
163
+ * @private
164
+ * @param {string} locator - Unique identifier for the key.
165
+ * @param {KeyFingerprint} metadata - Key fingerprint metadata to store.
166
+ * @returns {Promise<void>}
167
+ * @throws {Error} If directory creation or file write fails.
168
+ */
169
+ async writeKeyMetadata(locator, metadata) {
170
+ await fs__namespace.mkdir(path__namespace.dirname(this.metadataPath(locator)), {
171
+ recursive: true,
172
+ });
173
+ await fs__namespace.writeFile(this.metadataPath(locator), JSON.stringify(metadata, null, 0), "utf-8");
174
+ }
175
+ async readFileOptional(filepath) {
176
+ try {
177
+ const data = await fs__namespace.readFile(filepath);
178
+ return new Uint8Array(data);
179
+ }
180
+ catch (err) {
181
+ if (err.code === "ENOENT")
182
+ return null;
183
+ throw err;
184
+ }
185
+ }
186
+ /**
187
+ * Atomically writes data to a file, ensuring the parent directories exist.
188
+ *
189
+ * @private
190
+ * @param {string} filepath - Full path to the file to write
191
+ * @param {Uint8Array} data - Binary data to write to the file
192
+ * @returns {Promise<void>} Resolves when write is complete
193
+ * @throws {Error} If directory creation or file write fails
194
+ */
195
+ async writeFileAtomic(filepath, data) {
196
+ const dir = path__namespace.dirname(filepath);
197
+ await fs__namespace.mkdir(dir, { recursive: true });
198
+ const tempPath = path__namespace.join(dir, `.${path__namespace.basename(filepath)}.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`);
199
+ await fs__namespace.writeFile(tempPath, data);
200
+ try {
201
+ await fs__namespace.rename(tempPath, filepath);
202
+ }
203
+ catch (err) {
204
+ const code = err && typeof err === "object" && "code" in err ? err.code : undefined;
205
+ // Windows often throws EEXIST when target exists; EPERM/EACCES happen with locks/AV.
206
+ if (code === "EEXIST" || code === "EPERM" || code === "EACCES") {
207
+ await fs__namespace.unlink(filepath).catch(() => { });
208
+ try {
209
+ await fs__namespace.rename(tempPath, filepath);
210
+ }
211
+ catch (err2) {
212
+ await fs__namespace.unlink(tempPath).catch(() => { });
213
+ throw err2;
214
+ }
215
+ }
216
+ else {
217
+ await fs__namespace.unlink(tempPath).catch(() => { });
218
+ throw err;
219
+ }
220
+ }
221
+ }
222
+ /**
223
+ * Recursively removes all files and subdirectories under the given directory, then removes the directory itself.
224
+ * Uses fs.rm with recursive: true and force: true so that symbolic links are removed without following them,
225
+ * avoiding deletion of content outside the keystore.
226
+ *
227
+ * @private
228
+ * @param {string} dir - Directory path to clear
229
+ * @returns {Promise<void>} Resolves when clearing is complete
230
+ * @throws {Error} If directory removal fails for reasons other than non-existence
231
+ */
232
+ async clearDirectory(dir) {
233
+ try {
234
+ await fs__namespace.rm(dir, { recursive: true, force: true });
235
+ }
236
+ catch (err) {
237
+ const code = err && typeof err === "object" && "code" in err ? err.code : undefined;
238
+ if (code === "ENOENT") {
239
+ return;
240
+ }
241
+ throw err;
242
+ }
243
+ }
244
+ // -------------------------------------------------------
245
+ // KEYSTORE INTERFACE
246
+ // -------------------------------------------------------
247
+ /**
248
+ * Retrieves the key bytes from storage and optionally verifies them.
249
+ *
250
+ * @param {KeyLocator} locator - The key locator with optional checksum for verification.
251
+ * @returns {Promise<Uint8Array | null>} The key bytes if found and verified, null if not found.
252
+ * @throws {KeyVerificationError} If verification fails.
253
+ */
254
+ async getKeyBytes(locator) {
255
+ const fileKey = this.serializeLocator(locator);
256
+ // Attempt to read key bytes from storage (under this.directory).
257
+ const keyBytes = await this.readFileOptional(path__namespace.join(this.directory, fileKey));
258
+ // If no key bytes were found, return null.
259
+ if (!keyBytes)
260
+ return null;
261
+ // Use caller-provided checksum or metadata stored on disk for verification.
262
+ const fingerprint = this.checksumToFingerprint(locator.checksum, keyBytes) ?? (await this.getKeyMetadata(locator));
263
+ if (fingerprint) {
264
+ await this.keyVerifier.verifyKeyBytes({
265
+ keyBytes,
266
+ locator: fileKey,
267
+ fingerprint,
268
+ });
269
+ }
270
+ // Return the verified key bytes.
271
+ return keyBytes;
272
+ }
273
+ /**
274
+ * Retrieves and verifies a proving key from storage.
275
+ *
276
+ * @param {ProvingKeyLocator} locator - The proving key locator.
277
+ * @returns {Promise<ProvingKey | null>} The proving key if found and verified, null if not found.
278
+ * @throws {KeyVerificationError} If verification fails.
279
+ * @throws {Error} If key bytes cannot be parsed into a valid ProvingKey.
280
+ */
281
+ async getProvingKey(locator) {
282
+ const proverBytes = await this.getKeyBytes(locator);
283
+ if (!proverBytes)
284
+ return null;
285
+ return mainnet_js.ProvingKey.fromBytes(proverBytes);
286
+ }
287
+ /**
288
+ * Retrieves and verifies a verifying key from storage.
289
+ *
290
+ * @param {VerifyingKeyLocator} locator - The verifying key locator.
291
+ * @returns {Promise<VerifyingKey | null>} The verifying key if found and verified, null if not found.
292
+ * @throws {KeyVerificationError} If verification fails.
293
+ * @throws {Error} If key bytes cannot be parsed into a valid VerifyingKey.
294
+ */
295
+ async getVerifyingKey(locator) {
296
+ const verifierBytes = await this.getKeyBytes(locator);
297
+ if (!verifierBytes)
298
+ return null;
299
+ return mainnet_js.VerifyingKey.fromBytes(verifierBytes);
300
+ }
301
+ /**
302
+ * Stores proving and verifying keys in key storage.
303
+ *
304
+ * @param {ProvingKeyLocator} proverLocator The locator for the proving key.
305
+ * @param {VerifyingKeyLocator} verifierLocator The locator for the verifying key.
306
+ * @param {FunctionKeyPair} keys The proving and verifying keys.
307
+ */
308
+ async setKeys(proverLocator, verifierLocator, keys) {
309
+ const proverKey = this.serializeLocator(proverLocator);
310
+ const verifierKey = this.serializeLocator(verifierLocator);
311
+ // Convert the WASM keys to raw bytes.
312
+ const [provingKey, verifyingKey] = keys;
313
+ const [provingKeyBytes, verifyingKeyBytes] = [
314
+ provingKey.toBytes(),
315
+ verifyingKey.toBytes(),
316
+ ];
317
+ // Compute the fingerprints for the proving and verifying keys, verify against expected checksums if provided.
318
+ const [proverFingerPrint, verifierFingerPrint] = await Promise.all([
319
+ this.keyVerifier.computeKeyMetadata({
320
+ keyBytes: provingKeyBytes,
321
+ locator: proverKey,
322
+ fingerprint: this.checksumToFingerprint(proverLocator.checksum, provingKeyBytes),
323
+ }),
324
+ this.keyVerifier.computeKeyMetadata({
325
+ keyBytes: verifyingKeyBytes,
326
+ locator: verifierKey,
327
+ fingerprint: this.checksumToFingerprint(verifierLocator.checksum, verifyingKeyBytes),
328
+ }),
329
+ ]);
330
+ // Write the proving and verifying key bytes and their metadata to storage (under this.directory).
331
+ await this.writeFileAtomic(path__namespace.join(this.directory, proverKey), provingKeyBytes);
332
+ await this.writeFileAtomic(path__namespace.join(this.directory, verifierKey), verifyingKeyBytes);
333
+ await this.writeKeyMetadata(proverKey, proverFingerPrint);
334
+ await this.writeKeyMetadata(verifierKey, verifierFingerPrint);
335
+ }
336
+ /**
337
+ * Store a raw key in storage along with its fingerprint metadata for future verification.
338
+ *
339
+ * @param {Uint8Array} keyBytes The raw key bytes.
340
+ * @param {KeyLocator} locator The unique locator for the key.
341
+ * @returns {Promise<void>}
342
+ * @throws {Error} If computing key metadata or writing to storage fails
343
+ */
344
+ async setKeyBytes(keyBytes, locator) {
345
+ const fileKey = this.serializeLocator(locator);
346
+ // Compute the key metadata including fingerprint
347
+ const computedMetadata = await this.keyVerifier.computeKeyMetadata({
348
+ keyBytes: keyBytes,
349
+ locator: fileKey,
350
+ fingerprint: this.checksumToFingerprint(locator.checksum, keyBytes),
351
+ });
352
+ // Write the key bytes and metadata atomically (key file under this.directory).
353
+ await this.writeFileAtomic(path__namespace.join(this.directory, fileKey), keyBytes);
354
+ await this.writeKeyMetadata(fileKey, computedMetadata);
355
+ }
356
+ /**
357
+ * Returns stored metadata for a key, if any.
358
+ *
359
+ * @param {KeyLocator} locator The unique locator for the key.
360
+ * @returns {Promise<KeyFingerprint | null>} The stored fingerprint metadata, or null if none exists.
361
+ */
362
+ async getKeyMetadata(locator) {
363
+ const fileKey = this.serializeLocator(locator);
364
+ return this.readKeyMetadata(fileKey);
365
+ }
366
+ /**
367
+ * Checks if a key exists for the given locator.
368
+ *
369
+ * @param {KeyLocator} locator - The unique key locator.
370
+ * @returns {Promise<boolean>} True if key exists, false otherwise.
371
+ */
372
+ async has(locator) {
373
+ const fileKey = this.serializeLocator(locator);
374
+ const keyPath = path__namespace.join(this.directory, fileKey);
375
+ return await fs__namespace
376
+ .access(keyPath)
377
+ .then(() => true)
378
+ .catch(() => false);
379
+ }
380
+ /**
381
+ * Deletes a key and its associated metadata from storage. Silently ignores errors if files don't exist.
382
+ *
383
+ * @param {KeyLocator} locator - The unique key locator.
384
+ * @returns {Promise<void>}
385
+ */
386
+ async delete(locator) {
387
+ const fileKey = this.serializeLocator(locator);
388
+ const p = path__namespace.join(this.directory, fileKey);
389
+ const m = this.metadataPath(fileKey);
390
+ await fs__namespace.unlink(p).catch(() => { });
391
+ await fs__namespace.unlink(m).catch(() => { });
392
+ }
393
+ /**
394
+ * Clears the key storage directory by recursively removing all files and subdirectories under it, then removes the keystore directory itself.
395
+ *
396
+ * @returns {Promise<void>}
397
+ * @throws {Error} If directory listing fails for reasons other than non-existence.
398
+ */
399
+ async clear() {
400
+ await this.clearDirectory(this.directory);
401
+ }
402
+ }
403
+
404
+ exports.Account = browser.Account;
405
+ exports.AleoKeyProvider = browser.AleoKeyProvider;
406
+ exports.AleoKeyProviderParams = browser.AleoKeyProviderParams;
407
+ exports.AleoNetworkClient = browser.AleoNetworkClient;
408
+ exports.BlockHeightSearch = browser.BlockHeightSearch;
409
+ exports.CREDITS_PROGRAM_KEYS = browser.CREDITS_PROGRAM_KEYS;
410
+ exports.ChecksumMismatchError = browser.ChecksumMismatchError;
411
+ exports.DecryptionNotEnabledError = browser.DecryptionNotEnabledError;
412
+ exports.InvalidLocatorError = browser.InvalidLocatorError;
413
+ exports.KEY_STORE = browser.KEY_STORE;
414
+ exports.KeyVerificationError = browser.ChecksumMismatchError;
415
+ exports.MemKeyVerifier = browser.MemKeyVerifier;
416
+ exports.NetworkRecordProvider = browser.NetworkRecordProvider;
417
+ exports.OfflineKeyProvider = browser.OfflineKeyProvider;
418
+ exports.OfflineSearchParams = browser.OfflineSearchParams;
419
+ exports.PRIVATE_TO_PUBLIC_TRANSFER = browser.PRIVATE_TO_PUBLIC_TRANSFER;
420
+ exports.PRIVATE_TRANSFER = browser.PRIVATE_TRANSFER;
421
+ exports.PRIVATE_TRANSFER_TYPES = browser.PRIVATE_TRANSFER_TYPES;
422
+ exports.PUBLIC_TO_PRIVATE_TRANSFER = browser.PUBLIC_TO_PRIVATE_TRANSFER;
423
+ exports.PUBLIC_TRANSFER = browser.PUBLIC_TRANSFER;
424
+ exports.PUBLIC_TRANSFER_AS_SIGNER = browser.PUBLIC_TRANSFER_AS_SIGNER;
425
+ exports.ProgramManager = browser.ProgramManager;
426
+ exports.RECORD_DOMAIN = browser.RECORD_DOMAIN;
427
+ exports.RecordNotFoundError = browser.RecordNotFoundError;
428
+ exports.RecordScanner = browser.RecordScanner;
429
+ exports.RecordScannerRequestError = browser.RecordScannerRequestError;
430
+ exports.SealanceMerkleTree = browser.SealanceMerkleTree;
431
+ exports.UUIDError = browser.UUIDError;
432
+ exports.VALID_TRANSFER_TYPES = browser.VALID_TRANSFER_TYPES;
433
+ exports.ViewKeyNotStoredError = browser.ViewKeyNotStoredError;
434
+ exports.buildExecutionRequestFromExternallySignedData = browser.buildExecutionRequestFromExternallySignedData;
435
+ exports.computeExternalSigningInputs = browser.computeExternalSigningInputs;
436
+ exports.encryptAuthorization = browser.encryptAuthorization;
437
+ exports.encryptProvingRequest = browser.encryptProvingRequest;
438
+ exports.encryptRegistrationRequest = browser.encryptRegistrationRequest;
439
+ exports.encryptViewKey = browser.encryptViewKey;
440
+ exports.initializeWasm = browser.initializeWasm;
441
+ exports.inputsToFields = browser.inputsToFields;
442
+ exports.isInputIdStrategy = browser.isInputIdStrategy;
443
+ exports.isProveApiErrorBody = browser.isProveApiErrorBody;
444
+ exports.isProvingResponse = browser.isProvingResponse;
445
+ exports.isRecordViewKeyStrategy = browser.isRecordViewKeyStrategy;
446
+ exports.isViewKeyStrategy = browser.isViewKeyStrategy;
447
+ exports.logAndThrow = browser.logAndThrow;
448
+ exports.programChecksum = browser.programChecksum;
449
+ exports.provingKeyLocator = browser.provingKeyLocator;
450
+ exports.sha256Hex = browser.sha256Hex;
451
+ exports.toAddress = browser.toAddress;
452
+ exports.toField = browser.toField;
453
+ exports.toGroup = browser.toGroup;
454
+ exports.toSignature = browser.toSignature;
455
+ exports.toViewKey = browser.toViewKey;
456
+ exports.translationKeyLocator = browser.translationKeyLocator;
457
+ exports.verifyBatchProof = browser.verifyBatchProof;
458
+ exports.verifyProof = browser.verifyProof;
459
+ exports.verifyingKeyLocator = browser.verifyingKeyLocator;
460
+ exports.zeroizeBytes = browser.zeroizeBytes;
461
+ Object.defineProperty(exports, "Address", {
462
+ enumerable: true,
463
+ get: function () { return mainnet_js.Address; }
464
+ });
465
+ Object.defineProperty(exports, "Authorization", {
466
+ enumerable: true,
467
+ get: function () { return mainnet_js.Authorization; }
468
+ });
469
+ Object.defineProperty(exports, "BHP1024", {
470
+ enumerable: true,
471
+ get: function () { return mainnet_js.BHP1024; }
472
+ });
473
+ Object.defineProperty(exports, "BHP256", {
474
+ enumerable: true,
475
+ get: function () { return mainnet_js.BHP256; }
476
+ });
477
+ Object.defineProperty(exports, "BHP512", {
478
+ enumerable: true,
479
+ get: function () { return mainnet_js.BHP512; }
480
+ });
481
+ Object.defineProperty(exports, "BHP768", {
482
+ enumerable: true,
483
+ get: function () { return mainnet_js.BHP768; }
484
+ });
485
+ Object.defineProperty(exports, "Boolean", {
486
+ enumerable: true,
487
+ get: function () { return mainnet_js.Boolean; }
488
+ });
489
+ Object.defineProperty(exports, "Ciphertext", {
490
+ enumerable: true,
491
+ get: function () { return mainnet_js.Ciphertext; }
492
+ });
493
+ Object.defineProperty(exports, "ComputeKey", {
494
+ enumerable: true,
495
+ get: function () { return mainnet_js.ComputeKey; }
496
+ });
497
+ Object.defineProperty(exports, "DynamicRecord", {
498
+ enumerable: true,
499
+ get: function () { return mainnet_js.DynamicRecord; }
500
+ });
501
+ Object.defineProperty(exports, "EncryptionToolkit", {
502
+ enumerable: true,
503
+ get: function () { return mainnet_js.EncryptionToolkit; }
504
+ });
505
+ Object.defineProperty(exports, "ExecutionRequest", {
506
+ enumerable: true,
507
+ get: function () { return mainnet_js.ExecutionRequest; }
508
+ });
509
+ Object.defineProperty(exports, "ExecutionResponse", {
510
+ enumerable: true,
511
+ get: function () { return mainnet_js.ExecutionResponse; }
512
+ });
513
+ Object.defineProperty(exports, "Field", {
514
+ enumerable: true,
515
+ get: function () { return mainnet_js.Field; }
516
+ });
517
+ Object.defineProperty(exports, "FunctionExecution", {
518
+ enumerable: true,
519
+ get: function () { return mainnet_js.Execution; }
520
+ });
521
+ Object.defineProperty(exports, "GraphKey", {
522
+ enumerable: true,
523
+ get: function () { return mainnet_js.GraphKey; }
524
+ });
525
+ Object.defineProperty(exports, "Group", {
526
+ enumerable: true,
527
+ get: function () { return mainnet_js.Group; }
528
+ });
529
+ Object.defineProperty(exports, "I128", {
530
+ enumerable: true,
531
+ get: function () { return mainnet_js.I128; }
532
+ });
533
+ Object.defineProperty(exports, "I16", {
534
+ enumerable: true,
535
+ get: function () { return mainnet_js.I16; }
536
+ });
537
+ Object.defineProperty(exports, "I32", {
538
+ enumerable: true,
539
+ get: function () { return mainnet_js.I32; }
540
+ });
541
+ Object.defineProperty(exports, "I64", {
542
+ enumerable: true,
543
+ get: function () { return mainnet_js.I64; }
544
+ });
545
+ Object.defineProperty(exports, "I8", {
546
+ enumerable: true,
547
+ get: function () { return mainnet_js.I8; }
548
+ });
549
+ Object.defineProperty(exports, "OfflineQuery", {
550
+ enumerable: true,
551
+ get: function () { return mainnet_js.OfflineQuery; }
552
+ });
553
+ Object.defineProperty(exports, "Pedersen128", {
554
+ enumerable: true,
555
+ get: function () { return mainnet_js.Pedersen128; }
556
+ });
557
+ Object.defineProperty(exports, "Pedersen64", {
558
+ enumerable: true,
559
+ get: function () { return mainnet_js.Pedersen64; }
560
+ });
561
+ Object.defineProperty(exports, "Plaintext", {
562
+ enumerable: true,
563
+ get: function () { return mainnet_js.Plaintext; }
564
+ });
565
+ Object.defineProperty(exports, "Poseidon2", {
566
+ enumerable: true,
567
+ get: function () { return mainnet_js.Poseidon2; }
568
+ });
569
+ Object.defineProperty(exports, "Poseidon4", {
570
+ enumerable: true,
571
+ get: function () { return mainnet_js.Poseidon4; }
572
+ });
573
+ Object.defineProperty(exports, "Poseidon8", {
574
+ enumerable: true,
575
+ get: function () { return mainnet_js.Poseidon8; }
576
+ });
577
+ Object.defineProperty(exports, "PrivateKey", {
578
+ enumerable: true,
579
+ get: function () { return mainnet_js.PrivateKey; }
580
+ });
581
+ Object.defineProperty(exports, "PrivateKeyCiphertext", {
582
+ enumerable: true,
583
+ get: function () { return mainnet_js.PrivateKeyCiphertext; }
584
+ });
585
+ Object.defineProperty(exports, "Program", {
586
+ enumerable: true,
587
+ get: function () { return mainnet_js.Program; }
588
+ });
589
+ Object.defineProperty(exports, "ProgramManagerBase", {
590
+ enumerable: true,
591
+ get: function () { return mainnet_js.ProgramManager; }
592
+ });
593
+ Object.defineProperty(exports, "Proof", {
594
+ enumerable: true,
595
+ get: function () { return mainnet_js.Proof; }
596
+ });
597
+ Object.defineProperty(exports, "ProvingKey", {
598
+ enumerable: true,
599
+ get: function () { return mainnet_js.ProvingKey; }
600
+ });
601
+ Object.defineProperty(exports, "ProvingRequest", {
602
+ enumerable: true,
603
+ get: function () { return mainnet_js.ProvingRequest; }
604
+ });
605
+ Object.defineProperty(exports, "RecordCiphertext", {
606
+ enumerable: true,
607
+ get: function () { return mainnet_js.RecordCiphertext; }
608
+ });
609
+ Object.defineProperty(exports, "RecordPlaintext", {
610
+ enumerable: true,
611
+ get: function () { return mainnet_js.RecordPlaintext; }
612
+ });
613
+ Object.defineProperty(exports, "Scalar", {
614
+ enumerable: true,
615
+ get: function () { return mainnet_js.Scalar; }
616
+ });
617
+ Object.defineProperty(exports, "Signature", {
618
+ enumerable: true,
619
+ get: function () { return mainnet_js.Signature; }
620
+ });
621
+ Object.defineProperty(exports, "Transaction", {
622
+ enumerable: true,
623
+ get: function () { return mainnet_js.Transaction; }
624
+ });
625
+ Object.defineProperty(exports, "Transition", {
626
+ enumerable: true,
627
+ get: function () { return mainnet_js.Transition; }
628
+ });
629
+ Object.defineProperty(exports, "U128", {
630
+ enumerable: true,
631
+ get: function () { return mainnet_js.U128; }
632
+ });
633
+ Object.defineProperty(exports, "U16", {
634
+ enumerable: true,
635
+ get: function () { return mainnet_js.U16; }
636
+ });
637
+ Object.defineProperty(exports, "U32", {
638
+ enumerable: true,
639
+ get: function () { return mainnet_js.U32; }
640
+ });
641
+ Object.defineProperty(exports, "U64", {
642
+ enumerable: true,
643
+ get: function () { return mainnet_js.U64; }
644
+ });
645
+ Object.defineProperty(exports, "U8", {
646
+ enumerable: true,
647
+ get: function () { return mainnet_js.U8; }
648
+ });
649
+ Object.defineProperty(exports, "Value", {
650
+ enumerable: true,
651
+ get: function () { return mainnet_js.Value; }
652
+ });
653
+ Object.defineProperty(exports, "VerifyingKey", {
654
+ enumerable: true,
655
+ get: function () { return mainnet_js.VerifyingKey; }
656
+ });
657
+ Object.defineProperty(exports, "ViewKey", {
658
+ enumerable: true,
659
+ get: function () { return mainnet_js.ViewKey; }
660
+ });
661
+ Object.defineProperty(exports, "getOrInitConsensusVersionTestHeights", {
662
+ enumerable: true,
663
+ get: function () { return mainnet_js.getOrInitConsensusVersionTestHeights; }
664
+ });
665
+ Object.defineProperty(exports, "initThreadPool", {
666
+ enumerable: true,
667
+ get: function () { return mainnet_js.initThreadPool; }
668
+ });
669
+ Object.defineProperty(exports, "snarkVerify", {
670
+ enumerable: true,
671
+ get: function () { return mainnet_js.snarkVerify; }
672
+ });
673
+ Object.defineProperty(exports, "snarkVerifyBatch", {
674
+ enumerable: true,
675
+ get: function () { return mainnet_js.snarkVerifyBatch; }
676
+ });
677
+ Object.defineProperty(exports, "stringToField", {
678
+ enumerable: true,
679
+ get: function () { return mainnet_js.stringToField; }
680
+ });
681
+ Object.defineProperty(exports, "verifyFunctionExecution", {
682
+ enumerable: true,
683
+ get: function () { return mainnet_js.verifyFunctionExecution; }
684
+ });
685
+ exports.LocalFileKeyStore = LocalFileKeyStore;
686
+ //# sourceMappingURL=node.cjs.map