@blindmarket/sdk 0.1.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 (244) hide show
  1. package/README.md +72 -0
  2. package/biome.json +19 -0
  3. package/dist/BlindEscrowClient-CyPuKMge.d.cts +54 -0
  4. package/dist/BlindEscrowClient-R7iGpE-n.d.ts +54 -0
  5. package/dist/KeyStore-Be_SSpCt.d.cts +21 -0
  6. package/dist/KeyStore-k1JgYPJY.d.ts +21 -0
  7. package/dist/Signer-BnqH_qew.d.cts +38 -0
  8. package/dist/Signer-LColE0Uo.d.ts +38 -0
  9. package/dist/Storage-4QOrh7rm.d.ts +17 -0
  10. package/dist/Storage-Cf4IJRMk.d.cts +17 -0
  11. package/dist/TaskRegistryClient-Ch6lYqM_.d.ts +24 -0
  12. package/dist/TaskRegistryClient-CrQjddDc.d.cts +24 -0
  13. package/dist/aes-J-7HrHze.d.cts +17 -0
  14. package/dist/aes-J-7HrHze.d.ts +17 -0
  15. package/dist/agent/Agent.d.ts +59 -0
  16. package/dist/agent/Agent.js +73 -0
  17. package/dist/agent/index.cjs +425 -0
  18. package/dist/agent/index.cjs.map +1 -0
  19. package/dist/agent/index.d.cts +63 -0
  20. package/dist/agent/index.d.ts +1 -0
  21. package/dist/agent/index.js +1 -0
  22. package/dist/agent/index.js.map +1 -0
  23. package/dist/api/index.cjs +4 -0
  24. package/dist/api/index.cjs.map +1 -0
  25. package/dist/api/index.d.cts +2 -0
  26. package/dist/api/index.d.ts +1 -0
  27. package/dist/api/index.js +1 -0
  28. package/dist/api/index.js.map +1 -0
  29. package/dist/chain/BlindEscrowClient.d.ts +51 -0
  30. package/dist/chain/BlindEscrowClient.js +142 -0
  31. package/dist/chain/BlindReputationClient.d.ts +16 -0
  32. package/dist/chain/BlindReputationClient.js +45 -0
  33. package/dist/chain/ChainClient.d.ts +26 -0
  34. package/dist/chain/ChainClient.js +46 -0
  35. package/dist/chain/TaskRegistryClient.d.ts +21 -0
  36. package/dist/chain/TaskRegistryClient.js +70 -0
  37. package/dist/chain/abi/BlindEscrow.json +1113 -0
  38. package/dist/chain/abi/BlindReputation.json +447 -0
  39. package/dist/chain/abi/TaskRegistry.json +586 -0
  40. package/dist/chain/abi/index.d.ts +4 -0
  41. package/dist/chain/abi/index.js +4 -0
  42. package/dist/chain/errors.d.ts +8 -0
  43. package/dist/chain/errors.js +32 -0
  44. package/dist/chain/index.cjs +2484 -0
  45. package/dist/chain/index.cjs.map +1 -0
  46. package/dist/chain/index.d.cts +2305 -0
  47. package/dist/chain/index.d.ts +6 -0
  48. package/dist/chain/index.js +6 -0
  49. package/dist/chain/index.js.map +1 -0
  50. package/dist/compute/index.cjs +4 -0
  51. package/dist/compute/index.cjs.map +1 -0
  52. package/dist/compute/index.d.cts +2 -0
  53. package/dist/compute/index.d.ts +1 -0
  54. package/dist/compute/index.js +1 -0
  55. package/dist/compute/index.js.map +1 -0
  56. package/dist/crypto/aes.d.ts +15 -0
  57. package/dist/crypto/aes.js +81 -0
  58. package/dist/crypto/constants.d.ts +7 -0
  59. package/dist/crypto/constants.js +7 -0
  60. package/dist/crypto/ecies.d.ts +8 -0
  61. package/dist/crypto/ecies.js +51 -0
  62. package/dist/crypto/envelope.d.ts +35 -0
  63. package/dist/crypto/envelope.js +103 -0
  64. package/dist/crypto/hkdf.d.ts +5 -0
  65. package/dist/crypto/hkdf.js +34 -0
  66. package/dist/crypto/index.cjs +424 -0
  67. package/dist/crypto/index.cjs.map +1 -0
  68. package/dist/crypto/index.d.cts +74 -0
  69. package/dist/crypto/index.d.ts +6 -0
  70. package/dist/crypto/index.js +6 -0
  71. package/dist/crypto/index.js.map +1 -0
  72. package/dist/crypto/keys.d.ts +12 -0
  73. package/dist/crypto/keys.js +42 -0
  74. package/dist/errors/BlindBountyError.d.ts +14 -0
  75. package/dist/errors/BlindBountyError.js +30 -0
  76. package/dist/errors/codes.d.ts +19 -0
  77. package/dist/errors/codes.js +48 -0
  78. package/dist/errors/index.cjs +136 -0
  79. package/dist/errors/index.cjs.map +1 -0
  80. package/dist/errors/index.d.cts +60 -0
  81. package/dist/errors/index.d.ts +3 -0
  82. package/dist/errors/index.js +3 -0
  83. package/dist/errors/index.js.map +1 -0
  84. package/dist/errors/subclasses.d.ts +26 -0
  85. package/dist/errors/subclasses.js +41 -0
  86. package/dist/events/EventBus.d.ts +13 -0
  87. package/dist/events/EventBus.js +41 -0
  88. package/dist/events/index.cjs +41 -0
  89. package/dist/events/index.cjs.map +1 -0
  90. package/dist/events/index.d.cts +61 -0
  91. package/dist/events/index.d.ts +2 -0
  92. package/dist/events/index.js +2 -0
  93. package/dist/events/index.js.map +1 -0
  94. package/dist/events/types.d.ts +45 -0
  95. package/dist/events/types.js +1 -0
  96. package/dist/index.cjs +4 -0
  97. package/dist/index.cjs.map +1 -0
  98. package/dist/index.d.cts +2 -0
  99. package/dist/index.d.ts +129 -0
  100. package/dist/index.js +154 -0
  101. package/dist/index.js.map +1 -0
  102. package/dist/keystore/InMemoryKeyStore.d.ts +21 -0
  103. package/dist/keystore/InMemoryKeyStore.js +111 -0
  104. package/dist/keystore/KeyStore.d.ts +18 -0
  105. package/dist/keystore/KeyStore.js +1 -0
  106. package/dist/keystore/index.cjs +335 -0
  107. package/dist/keystore/index.cjs.map +1 -0
  108. package/dist/keystore/index.d.cts +23 -0
  109. package/dist/keystore/index.d.ts +2 -0
  110. package/dist/keystore/index.js +2 -0
  111. package/dist/keystore/index.js.map +1 -0
  112. package/dist/network/index.cjs +74 -0
  113. package/dist/network/index.cjs.map +1 -0
  114. package/dist/network/index.d.cts +36 -0
  115. package/dist/network/index.d.ts +3 -0
  116. package/dist/network/index.js +3 -0
  117. package/dist/network/index.js.map +1 -0
  118. package/dist/network/presets.d.ts +24 -0
  119. package/dist/network/presets.js +23 -0
  120. package/dist/network/resolve.d.ts +7 -0
  121. package/dist/network/resolve.js +17 -0
  122. package/dist/network/types.d.ts +16 -0
  123. package/dist/network/types.js +1 -0
  124. package/dist/signer/EthersSigner.d.ts +24 -0
  125. package/dist/signer/EthersSigner.js +68 -0
  126. package/dist/signer/PrivateKeySigner.d.ts +14 -0
  127. package/dist/signer/PrivateKeySigner.js +18 -0
  128. package/dist/signer/Signer.d.ts +35 -0
  129. package/dist/signer/Signer.js +1 -0
  130. package/dist/signer/index.cjs +121 -0
  131. package/dist/signer/index.cjs.map +1 -0
  132. package/dist/signer/index.d.cts +40 -0
  133. package/dist/signer/index.d.ts +3 -0
  134. package/dist/signer/index.js +3 -0
  135. package/dist/signer/index.js.map +1 -0
  136. package/dist/storage/MemoryStorage.d.ts +18 -0
  137. package/dist/storage/MemoryStorage.js +40 -0
  138. package/dist/storage/Storage.d.ts +14 -0
  139. package/dist/storage/Storage.js +1 -0
  140. package/dist/storage/ZgStorage.d.ts +24 -0
  141. package/dist/storage/ZgStorage.js +102 -0
  142. package/dist/storage/index.cjs +221 -0
  143. package/dist/storage/index.cjs.map +1 -0
  144. package/dist/storage/index.d.cts +44 -0
  145. package/dist/storage/index.d.ts +3 -0
  146. package/dist/storage/index.js +3 -0
  147. package/dist/storage/index.js.map +1 -0
  148. package/dist/testing/index.cjs +4 -0
  149. package/dist/testing/index.cjs.map +1 -0
  150. package/dist/testing/index.d.cts +2 -0
  151. package/dist/testing/index.d.ts +1 -0
  152. package/dist/testing/index.js +1 -0
  153. package/dist/testing/index.js.map +1 -0
  154. package/dist/types-BOG5Ub1z.d.cts +31 -0
  155. package/dist/types-BOG5Ub1z.d.ts +31 -0
  156. package/dist/types-V7_ZmUb-.d.cts +19 -0
  157. package/dist/types-hAsITUQ7.d.ts +19 -0
  158. package/dist/types.d.ts +58 -0
  159. package/dist/types.js +1 -0
  160. package/dist/verifier/index.cjs +4 -0
  161. package/dist/verifier/index.cjs.map +1 -0
  162. package/dist/verifier/index.d.cts +2 -0
  163. package/dist/verifier/index.d.ts +1 -0
  164. package/dist/verifier/index.js +1 -0
  165. package/dist/verifier/index.js.map +1 -0
  166. package/dist/worker/Worker.d.ts +53 -0
  167. package/dist/worker/Worker.js +53 -0
  168. package/dist/worker/index.cjs +382 -0
  169. package/dist/worker/index.cjs.map +1 -0
  170. package/dist/worker/index.d.cts +58 -0
  171. package/dist/worker/index.d.ts +1 -0
  172. package/dist/worker/index.js +1 -0
  173. package/dist/worker/index.js.map +1 -0
  174. package/examples/agent-demo.ts +121 -0
  175. package/package.json +46 -0
  176. package/scripts/gen-crypto-fixtures.mjs +72 -0
  177. package/src/agent/Agent.ts +122 -0
  178. package/src/agent/index.ts +1 -0
  179. package/src/api/index.ts +1 -0
  180. package/src/chain/BlindEscrowClient.ts +182 -0
  181. package/src/chain/BlindReputationClient.ts +55 -0
  182. package/src/chain/ChainClient.ts +59 -0
  183. package/src/chain/TaskRegistryClient.ts +82 -0
  184. package/src/chain/abi/BlindEscrow.json +1113 -0
  185. package/src/chain/abi/BlindReputation.json +447 -0
  186. package/src/chain/abi/TaskRegistry.json +586 -0
  187. package/src/chain/abi/index.ts +5 -0
  188. package/src/chain/errors.ts +43 -0
  189. package/src/chain/index.ts +6 -0
  190. package/src/compute/index.ts +1 -0
  191. package/src/crypto/aes.ts +104 -0
  192. package/src/crypto/constants.ts +7 -0
  193. package/src/crypto/ecies.ts +60 -0
  194. package/src/crypto/envelope.ts +131 -0
  195. package/src/crypto/hkdf.ts +45 -0
  196. package/src/crypto/index.ts +6 -0
  197. package/src/crypto/keys.ts +56 -0
  198. package/src/errors/BlindMarketError.ts +38 -0
  199. package/src/errors/codes.ts +67 -0
  200. package/src/errors/index.ts +3 -0
  201. package/src/errors/subclasses.ts +59 -0
  202. package/src/events/EventBus.ts +45 -0
  203. package/src/events/index.ts +2 -0
  204. package/src/events/types.ts +13 -0
  205. package/src/index.ts +222 -0
  206. package/src/keystore/InMemoryKeyStore.ts +146 -0
  207. package/src/keystore/KeyStore.ts +19 -0
  208. package/src/keystore/index.ts +2 -0
  209. package/src/network/index.ts +3 -0
  210. package/src/network/presets.ts +27 -0
  211. package/src/network/resolve.ts +19 -0
  212. package/src/network/types.ts +18 -0
  213. package/src/signer/EthersSigner.ts +82 -0
  214. package/src/signer/PrivateKeySigner.ts +19 -0
  215. package/src/signer/Signer.ts +40 -0
  216. package/src/signer/index.ts +3 -0
  217. package/src/storage/MemoryStorage.ts +49 -0
  218. package/src/storage/Storage.ts +15 -0
  219. package/src/storage/ZgStorage.ts +124 -0
  220. package/src/storage/index.ts +3 -0
  221. package/src/testing/index.ts +1 -0
  222. package/src/types.ts +76 -0
  223. package/src/verifier/index.ts +1 -0
  224. package/src/worker/Worker.ts +98 -0
  225. package/src/worker/index.ts +1 -0
  226. package/test/agent.test.ts +193 -0
  227. package/test/chain.test.ts +145 -0
  228. package/test/crypto.aes.test.ts +81 -0
  229. package/test/crypto.compat.test.ts +33 -0
  230. package/test/crypto.ecies.test.ts +64 -0
  231. package/test/envelope.test.ts +82 -0
  232. package/test/errors.test.ts +64 -0
  233. package/test/events.test.ts +59 -0
  234. package/test/fixtures/crypto.json +16 -0
  235. package/test/keystore.test.ts +103 -0
  236. package/test/network.test.ts +53 -0
  237. package/test/signer.test.ts +66 -0
  238. package/test/smoke.test.ts +7 -0
  239. package/test/storage.test.ts +55 -0
  240. package/test/worker.test.ts +181 -0
  241. package/tsconfig.build.json +1 -0
  242. package/tsconfig.json +13 -0
  243. package/tsup.config.ts +32 -0
  244. package/vitest.config.ts +17 -0
@@ -0,0 +1,74 @@
1
+ export { a as aesDecrypt, b as aesEncrypt, g as generateAesKey, s as sha256 } from '../aes-J-7HrHze.cjs';
2
+
3
+ declare const IV_LENGTH = 12;
4
+ declare const TAG_LENGTH = 16;
5
+ declare const KEY_LENGTH = 32;
6
+ declare const ECIES_PUBKEY_LENGTH = 65;
7
+ declare const ECIES_HKDF_INFO: Uint8Array<ArrayBuffer>;
8
+ declare const AES_MIN_BLOB: number;
9
+ declare const ECIES_MIN_BLOB: number;
10
+
11
+ /**
12
+ * ECIES-secp256k1 encrypt to a recipient's uncompressed public key.
13
+ * Wire format: [65 ephemeral pubkey][12 IV][16 tag][ciphertext].
14
+ * Byte-compatible with backend/src/services/crypto.ts.
15
+ */
16
+ declare function eciesEncrypt(plaintext: Uint8Array, recipientPubKey: string): Promise<Uint8Array>;
17
+ /** ECIES-secp256k1 decrypt with the recipient's private key. */
18
+ declare function eciesDecrypt(blob: Uint8Array, recipientPrivKey: string): Promise<Uint8Array>;
19
+
20
+ interface KeyPair {
21
+ privateKey: string;
22
+ publicKey: string;
23
+ }
24
+ /** Fresh secp256k1 keypair. Hex strings returned un-prefixed (no 0x). */
25
+ declare function generateKeyPair(): KeyPair;
26
+ /** Recover the uncompressed public key (un-prefixed hex) from a private key. */
27
+ declare function derivePublicKey(privateKey: string): string;
28
+ declare function strip(hex: string): string;
29
+ declare function assertUncompressedPubKey(pub: string): void;
30
+ declare function hexToBytes(hex: string): Uint8Array;
31
+ declare function bytesToHex(u: Uint8Array): string;
32
+
33
+ interface EvidenceEnvelope {
34
+ wrappedForAgent: Uint8Array;
35
+ wrappedForEnclave: Uint8Array;
36
+ aesCiphertext: Uint8Array;
37
+ }
38
+ interface SealEvidenceInput {
39
+ evidence: Uint8Array;
40
+ agentPubKey: string;
41
+ enclavePubKey: string;
42
+ }
43
+ interface SealEvidenceOutput {
44
+ envelope: Uint8Array;
45
+ aesKey: Uint8Array;
46
+ }
47
+ /**
48
+ * Seal evidence for the agent + TEE enclave. Generates a fresh AES key,
49
+ * encrypts the evidence, ECIES-wraps the key twice, and concatenates the
50
+ * result as an EvidenceEnvelope. Returns both the on-wire envelope and
51
+ * the raw AES key (for audit / diagnostic use — do NOT persist beyond
52
+ * the submission).
53
+ */
54
+ declare function sealEvidence(input: SealEvidenceInput): Promise<SealEvidenceOutput>;
55
+ /**
56
+ * Open an evidence envelope as the agent — extracts the AES key wrapped
57
+ * to the agent's pubkey, decrypts the ciphertext, and returns the plaintext
58
+ * evidence. The enclave-wrapped key is ignored by agents (TEE-only).
59
+ */
60
+ declare function openEvidenceAsAgent(envelope: Uint8Array, agentPrivKey: string): Promise<Uint8Array>;
61
+ declare function pack(parts: EvidenceEnvelope): Uint8Array;
62
+ declare function parse(blob: Uint8Array): EvidenceEnvelope;
63
+ declare const __internals: {
64
+ pack: typeof pack;
65
+ parse: typeof parse;
66
+ };
67
+
68
+ /**
69
+ * HKDF-SHA256. Defaults match backend: empty salt, the ECIES domain separation info,
70
+ * 32-byte output length. Pass custom values for other uses.
71
+ */
72
+ declare function hkdfSha256(ikm: Uint8Array, length?: number, info?: Uint8Array, salt?: Uint8Array): Promise<Uint8Array>;
73
+
74
+ export { AES_MIN_BLOB, ECIES_HKDF_INFO, ECIES_MIN_BLOB, ECIES_PUBKEY_LENGTH, type EvidenceEnvelope, IV_LENGTH, KEY_LENGTH, type KeyPair, type SealEvidenceInput, type SealEvidenceOutput, TAG_LENGTH, __internals, assertUncompressedPubKey, bytesToHex, derivePublicKey, eciesDecrypt, eciesEncrypt, generateKeyPair, hexToBytes, hkdfSha256, openEvidenceAsAgent, sealEvidence, strip };
@@ -0,0 +1,6 @@
1
+ export * from './constants.js';
2
+ export * from './aes.js';
3
+ export * from './ecies.js';
4
+ export * from './keys.js';
5
+ export * from './envelope.js';
6
+ export { hkdfSha256 } from './hkdf.js';
@@ -0,0 +1,6 @@
1
+ export * from './constants.js';
2
+ export * from './aes.js';
3
+ export * from './ecies.js';
4
+ export * from './keys.js';
5
+ export * from './envelope.js';
6
+ export { hkdfSha256 } from './hkdf.js';
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/crypto/constants.ts","../../src/errors/codes.ts","../../src/errors/BlindBountyError.ts","../../src/errors/subclasses.ts","../../src/errors/index.ts","../../src/crypto/aes.ts","../../src/crypto/hkdf.ts","../../src/crypto/keys.ts","../../src/crypto/ecies.ts","../../src/crypto/index.ts","../../src/crypto/envelope.ts"],"names":["toArrayBuffer","ethers","eciesDecrypt"],"mappings":"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","file":"index.js","sourcesContent":["export const IV_LENGTH = 12;\nexport const TAG_LENGTH = 16;\nexport const KEY_LENGTH = 32;\nexport const ECIES_PUBKEY_LENGTH = 65;\nexport const ECIES_HKDF_INFO = new TextEncoder().encode('BlindBounty-ECIES-v1');\nexport const AES_MIN_BLOB = IV_LENGTH + TAG_LENGTH;\nexport const ECIES_MIN_BLOB = ECIES_PUBKEY_LENGTH + AES_MIN_BLOB;\n","export const ErrorCodes = {\n Config: ['CONFIG/INVALID_NETWORK', 'CONFIG/MISSING_SIGNER', 'CONFIG/BAD_CONFIG'] as const,\n Crypto: [\n 'CRYPTO/INVALID_KEY',\n 'CRYPTO/DECRYPT_FAILED',\n 'CRYPTO/INTEGRITY_CHECK',\n 'CRYPTO/UNSUPPORTED_CIPHER',\n ] as const,\n Storage: [\n 'STORAGE/UPLOAD_FAILED',\n 'STORAGE/DOWNLOAD_FAILED',\n 'STORAGE/MERKLE_MISMATCH',\n 'STORAGE/NOT_FOUND',\n 'STORAGE/INDEXER_UNREACHABLE',\n ] as const,\n Chain: [\n 'CHAIN/TX_REVERTED',\n 'CHAIN/TX_TIMED_OUT',\n 'CHAIN/NONCE_CONFLICT',\n 'CHAIN/INSUFFICIENT_BALANCE',\n 'CHAIN/NETWORK_MISMATCH',\n 'CHAIN/CONTRACT_NOT_DEPLOYED',\n ] as const,\n Compute: [\n 'COMPUTE/BROKER_UNREACHABLE',\n 'COMPUTE/NO_PROVIDERS',\n 'COMPUTE/LEDGER_INSUFFICIENT',\n 'COMPUTE/TEE_ATTESTATION_INVALID',\n 'COMPUTE/VERIFICATION_TIMEOUT',\n ] as const,\n Api: [\n 'API/AUTH_REQUIRED',\n 'API/AUTH_EXPIRED',\n 'API/FORBIDDEN',\n 'API/RATE_LIMITED',\n 'API/VALIDATION',\n 'API/SERVER',\n 'API/NOT_FOUND',\n ] as const,\n Lifecycle: [\n 'LIFECYCLE/ILLEGAL_TRANSITION',\n 'LIFECYCLE/TASK_NOT_FOUND',\n 'LIFECYCLE/NOT_ASSIGNED',\n 'LIFECYCLE/ALREADY_SUBMITTED',\n 'LIFECYCLE/CLAIM_NOT_READY',\n ] as const,\n Timeout: ['TIMEOUT'] as const,\n} as const;\n\nexport type ConfigCode = (typeof ErrorCodes.Config)[number];\nexport type CryptoCode = (typeof ErrorCodes.Crypto)[number];\nexport type StorageCode = (typeof ErrorCodes.Storage)[number];\nexport type ChainCode = (typeof ErrorCodes.Chain)[number];\nexport type ComputeCode = (typeof ErrorCodes.Compute)[number];\nexport type ApiCode = (typeof ErrorCodes.Api)[number];\nexport type LifecycleCode = (typeof ErrorCodes.Lifecycle)[number];\nexport type TimeoutCode = (typeof ErrorCodes.Timeout)[number];\n\nexport type ErrorCode =\n | ConfigCode\n | CryptoCode\n | StorageCode\n | ChainCode\n | ComputeCode\n | ApiCode\n | LifecycleCode\n | TimeoutCode;\n","import type { ErrorCode } from './codes.js';\n\nexport interface ErrorOptions {\n retriable?: boolean;\n context?: Record<string, unknown>;\n cause?: unknown;\n}\n\nexport abstract class BlindBountyError extends Error {\n readonly code: ErrorCode;\n readonly retriable: boolean;\n readonly context?: Record<string, unknown>;\n override readonly cause?: unknown;\n\n constructor(code: ErrorCode, message: string, opts: ErrorOptions = {}) {\n super(message);\n this.code = code;\n this.retriable = opts.retriable ?? false;\n if (opts.context !== undefined) this.context = opts.context;\n if (opts.cause !== undefined) this.cause = opts.cause;\n Object.defineProperty(this, 'name', {\n value: this.constructor.name,\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n retriable: this.retriable,\n ...(this.context ? { context: this.context } : {}),\n };\n }\n}\n","import { BlindBountyError, type ErrorOptions } from './BlindBountyError.js';\nimport type {\n ApiCode,\n ChainCode,\n ComputeCode,\n ConfigCode,\n CryptoCode,\n LifecycleCode,\n StorageCode,\n TimeoutCode,\n} from './codes.js';\n\nexport class ConfigError extends BlindBountyError {\n constructor(code: ConfigCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n\nexport class CryptoError extends BlindBountyError {\n constructor(code: CryptoCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n\nexport class StorageError extends BlindBountyError {\n constructor(code: StorageCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n\nexport class ChainError extends BlindBountyError {\n constructor(code: ChainCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n\nexport class ComputeError extends BlindBountyError {\n constructor(code: ComputeCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n\nexport class ApiError extends BlindBountyError {\n constructor(code: ApiCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n\nexport class LifecycleError extends BlindBountyError {\n constructor(code: LifecycleCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n\nexport class TimeoutError extends BlindBountyError {\n constructor(code: TimeoutCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n","export * from './codes.js';\nexport * from './BlindBountyError.js';\nexport * from './subclasses.js';\n","import { CryptoError } from '../errors/index.js';\nimport { AES_MIN_BLOB, IV_LENGTH, KEY_LENGTH, TAG_LENGTH } from './constants.js';\n\nfunction getCrypto(): Crypto {\n const c = (globalThis as { crypto?: Crypto }).crypto;\n if (!c?.subtle) {\n throw new CryptoError('CRYPTO/UNSUPPORTED_CIPHER', 'Web Crypto (crypto.subtle) is not available');\n }\n return c;\n}\n\nfunction toArrayBuffer(u: Uint8Array): ArrayBuffer {\n const ab = new ArrayBuffer(u.byteLength);\n new Uint8Array(ab).set(u);\n return ab;\n}\n\n/** Generate a fresh 32-byte AES-256 key. */\nexport async function generateAesKey(): Promise<Uint8Array> {\n const key = new Uint8Array(KEY_LENGTH);\n getCrypto().getRandomValues(key);\n return key;\n}\n\n/**\n * AES-256-GCM encrypt. Output format: [12 IV][16 tag][ciphertext].\n * This ordering matches backend/src/services/crypto.ts and frontend/src/lib/crypto.ts\n * byte-for-byte, so SDK blobs decrypt anywhere in the stack.\n */\nexport async function aesEncrypt(plaintext: Uint8Array, key: Uint8Array): Promise<Uint8Array> {\n if (key.byteLength !== KEY_LENGTH) {\n throw new CryptoError(\n 'CRYPTO/INVALID_KEY',\n `AES key must be ${KEY_LENGTH} bytes, got ${key.byteLength}`,\n );\n }\n const c = getCrypto();\n const iv = new Uint8Array(IV_LENGTH);\n c.getRandomValues(iv);\n try {\n const ck = await c.subtle.importKey('raw', toArrayBuffer(key), 'AES-GCM', false, ['encrypt']);\n const wcOut = new Uint8Array(\n await c.subtle.encrypt(\n { name: 'AES-GCM', iv: toArrayBuffer(iv), tagLength: TAG_LENGTH * 8 },\n ck,\n toArrayBuffer(plaintext),\n ),\n );\n // WebCrypto returns [ciphertext || tag]. Rewrite to [IV || tag || ciphertext].\n const ctLen = wcOut.length - TAG_LENGTH;\n const ct = wcOut.subarray(0, ctLen);\n const tag = wcOut.subarray(ctLen);\n const blob = new Uint8Array(IV_LENGTH + TAG_LENGTH + ctLen);\n blob.set(iv, 0);\n blob.set(tag, IV_LENGTH);\n blob.set(ct, IV_LENGTH + TAG_LENGTH);\n return blob;\n } catch (cause) {\n throw new CryptoError('CRYPTO/DECRYPT_FAILED', 'AES-GCM encryption failed', { cause });\n }\n}\n\n/**\n * AES-256-GCM decrypt. Input format: [12 IV][16 tag][ciphertext].\n * Throws CRYPTO/INTEGRITY_CHECK on truncation or tag mismatch.\n */\nexport async function aesDecrypt(blob: Uint8Array, key: Uint8Array): Promise<Uint8Array> {\n if (key.byteLength !== KEY_LENGTH) {\n throw new CryptoError(\n 'CRYPTO/INVALID_KEY',\n `AES key must be ${KEY_LENGTH} bytes, got ${key.byteLength}`,\n );\n }\n if (blob.byteLength < AES_MIN_BLOB) {\n throw new CryptoError(\n 'CRYPTO/INTEGRITY_CHECK',\n `AES blob too short: need ≥${AES_MIN_BLOB} bytes, got ${blob.byteLength}`,\n );\n }\n const iv = blob.subarray(0, IV_LENGTH);\n const tag = blob.subarray(IV_LENGTH, IV_LENGTH + TAG_LENGTH);\n const ct = blob.subarray(IV_LENGTH + TAG_LENGTH);\n const combined = new Uint8Array(ct.length + TAG_LENGTH);\n combined.set(ct, 0);\n combined.set(tag, ct.length);\n try {\n const c = getCrypto();\n const ck = await c.subtle.importKey('raw', toArrayBuffer(key), 'AES-GCM', false, ['decrypt']);\n const pt = await c.subtle.decrypt(\n { name: 'AES-GCM', iv: toArrayBuffer(iv), tagLength: TAG_LENGTH * 8 },\n ck,\n toArrayBuffer(combined),\n );\n return new Uint8Array(pt);\n } catch (cause) {\n throw new CryptoError('CRYPTO/DECRYPT_FAILED', 'AES-GCM decryption failed (wrong key or tampered data)', { cause });\n }\n}\n\n/** SHA-256 of arbitrary bytes. Returns 32-byte digest. */\nexport async function sha256(data: Uint8Array): Promise<Uint8Array> {\n const digest = await getCrypto().subtle.digest('SHA-256', toArrayBuffer(data));\n return new Uint8Array(digest);\n}\n","import { CryptoError } from '../errors/index.js';\nimport { ECIES_HKDF_INFO } from './constants.js';\n\nfunction getSubtle(): SubtleCrypto {\n const c = (globalThis as { crypto?: Crypto }).crypto;\n if (!c?.subtle) {\n throw new CryptoError('CRYPTO/UNSUPPORTED_CIPHER', 'Web Crypto (crypto.subtle) is not available');\n }\n return c.subtle;\n}\n\nfunction toArrayBuffer(u: Uint8Array): ArrayBuffer {\n const ab = new ArrayBuffer(u.byteLength);\n new Uint8Array(ab).set(u);\n return ab;\n}\n\n/**\n * HKDF-SHA256. Defaults match backend: empty salt, the ECIES domain separation info,\n * 32-byte output length. Pass custom values for other uses.\n */\nexport async function hkdfSha256(\n ikm: Uint8Array,\n length = 32,\n info: Uint8Array = ECIES_HKDF_INFO,\n salt: Uint8Array = new Uint8Array(0),\n): Promise<Uint8Array> {\n try {\n const subtle = getSubtle();\n const baseKey = await subtle.importKey('raw', toArrayBuffer(ikm), 'HKDF', false, ['deriveBits']);\n const derived = await subtle.deriveBits(\n {\n name: 'HKDF',\n hash: 'SHA-256',\n info: toArrayBuffer(info),\n salt: toArrayBuffer(salt),\n },\n baseKey,\n length * 8,\n );\n return new Uint8Array(derived);\n } catch (cause) {\n throw new CryptoError('CRYPTO/INVALID_KEY', 'HKDF derivation failed', { cause });\n }\n}\n","import { ethers } from 'ethers';\nimport { CryptoError } from '../errors/index.js';\n\nexport interface KeyPair {\n privateKey: string;\n publicKey: string;\n}\n\n/** Fresh secp256k1 keypair. Hex strings returned un-prefixed (no 0x). */\nexport function generateKeyPair(): KeyPair {\n const w = ethers.Wallet.createRandom();\n return {\n privateKey: w.privateKey.slice(2),\n publicKey: w.signingKey.publicKey.slice(2),\n };\n}\n\n/** Recover the uncompressed public key (un-prefixed hex) from a private key. */\nexport function derivePublicKey(privateKey: string): string {\n const sk = new ethers.SigningKey(`0x${strip(privateKey)}`);\n return sk.publicKey.slice(2);\n}\n\nexport function strip(hex: string): string {\n return hex.startsWith('0x') || hex.startsWith('0X') ? hex.slice(2) : hex;\n}\n\nexport function assertUncompressedPubKey(pub: string): void {\n const s = strip(pub);\n if (s.length !== 130 || !/^04/i.test(s)) {\n throw new CryptoError(\n 'CRYPTO/INVALID_KEY',\n 'expected uncompressed secp256k1 pubkey (65 bytes hex, starts with 04)',\n );\n }\n}\n\nexport function hexToBytes(hex: string): Uint8Array {\n const s = strip(hex);\n if (s.length % 2 !== 0) {\n throw new CryptoError('CRYPTO/INVALID_KEY', 'hex string has odd length');\n }\n const out = new Uint8Array(s.length / 2);\n for (let i = 0; i < out.length; i++) {\n const byte = Number.parseInt(s.substring(i * 2, i * 2 + 2), 16);\n if (Number.isNaN(byte)) {\n throw new CryptoError('CRYPTO/INVALID_KEY', `invalid hex byte at position ${i * 2}`);\n }\n out[i] = byte;\n }\n return out;\n}\n\nexport function bytesToHex(u: Uint8Array): string {\n return Array.from(u, (b) => b.toString(16).padStart(2, '0')).join('');\n}\n","import { ethers } from 'ethers';\nimport { CryptoError } from '../errors/index.js';\nimport { aesDecrypt, aesEncrypt } from './aes.js';\nimport { ECIES_MIN_BLOB, ECIES_PUBKEY_LENGTH, KEY_LENGTH } from './constants.js';\nimport { hkdfSha256 } from './hkdf.js';\nimport { assertUncompressedPubKey, bytesToHex, hexToBytes, strip } from './keys.js';\n\n/**\n * ECIES-secp256k1 encrypt to a recipient's uncompressed public key.\n * Wire format: [65 ephemeral pubkey][12 IV][16 tag][ciphertext].\n * Byte-compatible with backend/src/services/crypto.ts.\n */\nexport async function eciesEncrypt(plaintext: Uint8Array, recipientPubKey: string): Promise<Uint8Array> {\n assertUncompressedPubKey(recipientPubKey);\n const ephemeral = ethers.Wallet.createRandom();\n const shared = deriveSharedSecretX(ephemeral.privateKey, `0x${strip(recipientPubKey)}`);\n const aesKey = await hkdfSha256(shared, KEY_LENGTH);\n const aesBlob = await aesEncrypt(plaintext, aesKey);\n const ephPub = hexToBytes(strip(ephemeral.signingKey.publicKey));\n if (ephPub.byteLength !== ECIES_PUBKEY_LENGTH) {\n throw new CryptoError('CRYPTO/INVALID_KEY', `ephemeral pubkey length ${ephPub.byteLength}`);\n }\n const blob = new Uint8Array(ECIES_PUBKEY_LENGTH + aesBlob.byteLength);\n blob.set(ephPub, 0);\n blob.set(aesBlob, ECIES_PUBKEY_LENGTH);\n return blob;\n}\n\n/** ECIES-secp256k1 decrypt with the recipient's private key. */\nexport async function eciesDecrypt(blob: Uint8Array, recipientPrivKey: string): Promise<Uint8Array> {\n if (blob.byteLength < ECIES_MIN_BLOB) {\n throw new CryptoError(\n 'CRYPTO/INTEGRITY_CHECK',\n `ECIES blob too short: need ≥${ECIES_MIN_BLOB} bytes, got ${blob.byteLength}`,\n );\n }\n const ephPub = blob.subarray(0, ECIES_PUBKEY_LENGTH);\n const aesBlob = blob.subarray(ECIES_PUBKEY_LENGTH);\n const shared = deriveSharedSecretX(`0x${strip(recipientPrivKey)}`, `0x${bytesToHex(ephPub)}`);\n const aesKey = await hkdfSha256(shared, KEY_LENGTH);\n return aesDecrypt(aesBlob, aesKey);\n}\n\n/**\n * Compute the ECDH shared secret X coordinate (32 bytes) between a private key\n * and a peer's public key. Matches Node createECDH.computeSecret() output used by\n * the backend — ethers v6 returns 0x04||X||Y, so we slice X.\n */\nfunction deriveSharedSecretX(privHex: string, pubHex: string): Uint8Array {\n const sk = new ethers.SigningKey(privHex);\n const shared = sk.computeSharedSecret(pubHex);\n const bytes = hexToBytes(strip(shared));\n if (bytes.byteLength !== 65 || bytes[0] !== 0x04) {\n throw new CryptoError(\n 'CRYPTO/INVALID_KEY',\n `unexpected shared secret shape (len=${bytes.byteLength}, prefix=${bytes[0]?.toString(16) ?? 'none'})`,\n );\n }\n return bytes.subarray(1, 33);\n}\n","export * from './constants.js';\nexport * from './aes.js';\nexport * from './ecies.js';\nexport * from './keys.js';\nexport * from './envelope.js';\nexport { hkdfSha256 } from './hkdf.js';\n","import { CryptoError } from '../errors/index.js';\nimport { aesDecrypt, aesEncrypt, generateAesKey } from './aes.js';\nimport { eciesEncrypt } from './ecies.js';\n\n/**\n * Evidence envelope — the single blob a worker uploads to Storage containing:\n * 1. The AES key wrapped to the agent's pubkey (so agent can decrypt later)\n * 2. The AES key wrapped to the TEE enclave's pubkey (so Sealed Inference can decrypt)\n * 3. The evidence ciphertext under that AES key\n *\n * Wire format (big-endian):\n * bytes 0..1 magic = 0x42 0x42 (\"BB\")\n * byte 2 version = 0x01\n * bytes 3..6 wrappedAgentLen (uint32)\n * bytes 7.. wrappedAgent (ECIES blob)\n * 4-byte uint32 wrappedEnclaveLen\n * bytes wrappedEnclave (ECIES blob)\n * bytes aesCiphertext (rest of the blob — AES blob [IV||tag||ct])\n *\n * The layout is versioned so we can rev it without breaking old blobs.\n */\n\nconst MAGIC_0 = 0x42;\nconst MAGIC_1 = 0x42;\nconst VERSION = 0x01;\nconst HEADER_LEN = 3;\n\nexport interface EvidenceEnvelope {\n wrappedForAgent: Uint8Array;\n wrappedForEnclave: Uint8Array;\n aesCiphertext: Uint8Array;\n}\n\nexport interface SealEvidenceInput {\n evidence: Uint8Array;\n agentPubKey: string;\n enclavePubKey: string;\n}\n\nexport interface SealEvidenceOutput {\n envelope: Uint8Array;\n aesKey: Uint8Array;\n}\n\n/**\n * Seal evidence for the agent + TEE enclave. Generates a fresh AES key,\n * encrypts the evidence, ECIES-wraps the key twice, and concatenates the\n * result as an EvidenceEnvelope. Returns both the on-wire envelope and\n * the raw AES key (for audit / diagnostic use — do NOT persist beyond\n * the submission).\n */\nexport async function sealEvidence(input: SealEvidenceInput): Promise<SealEvidenceOutput> {\n const aesKey = await generateAesKey();\n const aesCiphertext = await aesEncrypt(input.evidence, aesKey);\n const wrappedForAgent = await eciesEncrypt(aesKey, input.agentPubKey);\n const wrappedForEnclave = await eciesEncrypt(aesKey, input.enclavePubKey);\n const envelope = pack({ wrappedForAgent, wrappedForEnclave, aesCiphertext });\n return { envelope, aesKey };\n}\n\n/**\n * Open an evidence envelope as the agent — extracts the AES key wrapped\n * to the agent's pubkey, decrypts the ciphertext, and returns the plaintext\n * evidence. The enclave-wrapped key is ignored by agents (TEE-only).\n */\nexport async function openEvidenceAsAgent(\n envelope: Uint8Array,\n agentPrivKey: string,\n): Promise<Uint8Array> {\n const parsed = parse(envelope);\n const { eciesDecrypt } = await import('./ecies.js');\n const aesKey = await eciesDecrypt(parsed.wrappedForAgent, agentPrivKey);\n return aesDecrypt(parsed.aesCiphertext, aesKey);\n}\n\nfunction pack(parts: EvidenceEnvelope): Uint8Array {\n const { wrappedForAgent, wrappedForEnclave, aesCiphertext } = parts;\n const total =\n HEADER_LEN +\n 4 + wrappedForAgent.byteLength +\n 4 + wrappedForEnclave.byteLength +\n aesCiphertext.byteLength;\n const out = new Uint8Array(total);\n const view = new DataView(out.buffer);\n let off = 0;\n out[off++] = MAGIC_0;\n out[off++] = MAGIC_1;\n out[off++] = VERSION;\n view.setUint32(off, wrappedForAgent.byteLength, false);\n off += 4;\n out.set(wrappedForAgent, off);\n off += wrappedForAgent.byteLength;\n view.setUint32(off, wrappedForEnclave.byteLength, false);\n off += 4;\n out.set(wrappedForEnclave, off);\n off += wrappedForEnclave.byteLength;\n out.set(aesCiphertext, off);\n return out;\n}\n\nfunction parse(blob: Uint8Array): EvidenceEnvelope {\n if (blob.byteLength < HEADER_LEN + 4 + 4) {\n throw new CryptoError('CRYPTO/INTEGRITY_CHECK', `envelope too short: ${blob.byteLength}`);\n }\n if (blob[0] !== MAGIC_0 || blob[1] !== MAGIC_1) {\n throw new CryptoError('CRYPTO/INTEGRITY_CHECK', 'bad envelope magic');\n }\n if (blob[2] !== VERSION) {\n throw new CryptoError('CRYPTO/UNSUPPORTED_CIPHER', `unknown envelope version ${blob[2]}`);\n }\n const view = new DataView(blob.buffer, blob.byteOffset, blob.byteLength);\n let off = HEADER_LEN;\n const agentLen = view.getUint32(off, false);\n off += 4;\n if (off + agentLen + 4 > blob.byteLength) {\n throw new CryptoError('CRYPTO/INTEGRITY_CHECK', 'envelope truncated (agent)');\n }\n const wrappedForAgent = blob.slice(off, off + agentLen);\n off += agentLen;\n const enclaveLen = view.getUint32(off, false);\n off += 4;\n if (off + enclaveLen > blob.byteLength) {\n throw new CryptoError('CRYPTO/INTEGRITY_CHECK', 'envelope truncated (enclave)');\n }\n const wrappedForEnclave = blob.slice(off, off + enclaveLen);\n off += enclaveLen;\n const aesCiphertext = blob.slice(off);\n return { wrappedForAgent, wrappedForEnclave, aesCiphertext };\n}\n\nexport const __internals = { pack, parse };\n"]}
@@ -0,0 +1,12 @@
1
+ export interface KeyPair {
2
+ privateKey: string;
3
+ publicKey: string;
4
+ }
5
+ /** Fresh secp256k1 keypair. Hex strings returned un-prefixed (no 0x). */
6
+ export declare function generateKeyPair(): KeyPair;
7
+ /** Recover the uncompressed public key (un-prefixed hex) from a private key. */
8
+ export declare function derivePublicKey(privateKey: string): string;
9
+ export declare function strip(hex: string): string;
10
+ export declare function assertUncompressedPubKey(pub: string): void;
11
+ export declare function hexToBytes(hex: string): Uint8Array;
12
+ export declare function bytesToHex(u: Uint8Array): string;
@@ -0,0 +1,42 @@
1
+ import { ethers } from 'ethers';
2
+ import { CryptoError } from '../errors/index.js';
3
+ /** Fresh secp256k1 keypair. Hex strings returned un-prefixed (no 0x). */
4
+ export function generateKeyPair() {
5
+ const w = ethers.Wallet.createRandom();
6
+ return {
7
+ privateKey: w.privateKey.slice(2),
8
+ publicKey: w.signingKey.publicKey.slice(2),
9
+ };
10
+ }
11
+ /** Recover the uncompressed public key (un-prefixed hex) from a private key. */
12
+ export function derivePublicKey(privateKey) {
13
+ const sk = new ethers.SigningKey(`0x${strip(privateKey)}`);
14
+ return sk.publicKey.slice(2);
15
+ }
16
+ export function strip(hex) {
17
+ return hex.startsWith('0x') || hex.startsWith('0X') ? hex.slice(2) : hex;
18
+ }
19
+ export function assertUncompressedPubKey(pub) {
20
+ const s = strip(pub);
21
+ if (s.length !== 130 || !/^04/i.test(s)) {
22
+ throw new CryptoError('CRYPTO/INVALID_KEY', 'expected uncompressed secp256k1 pubkey (65 bytes hex, starts with 04)');
23
+ }
24
+ }
25
+ export function hexToBytes(hex) {
26
+ const s = strip(hex);
27
+ if (s.length % 2 !== 0) {
28
+ throw new CryptoError('CRYPTO/INVALID_KEY', 'hex string has odd length');
29
+ }
30
+ const out = new Uint8Array(s.length / 2);
31
+ for (let i = 0; i < out.length; i++) {
32
+ const byte = Number.parseInt(s.substring(i * 2, i * 2 + 2), 16);
33
+ if (Number.isNaN(byte)) {
34
+ throw new CryptoError('CRYPTO/INVALID_KEY', `invalid hex byte at position ${i * 2}`);
35
+ }
36
+ out[i] = byte;
37
+ }
38
+ return out;
39
+ }
40
+ export function bytesToHex(u) {
41
+ return Array.from(u, (b) => b.toString(16).padStart(2, '0')).join('');
42
+ }
@@ -0,0 +1,14 @@
1
+ import type { ErrorCode } from './codes.js';
2
+ export interface ErrorOptions {
3
+ retriable?: boolean;
4
+ context?: Record<string, unknown>;
5
+ cause?: unknown;
6
+ }
7
+ export declare abstract class BlindBountyError extends Error {
8
+ readonly code: ErrorCode;
9
+ readonly retriable: boolean;
10
+ readonly context?: Record<string, unknown>;
11
+ readonly cause?: unknown;
12
+ constructor(code: ErrorCode, message: string, opts?: ErrorOptions);
13
+ toJSON(): Record<string, unknown>;
14
+ }
@@ -0,0 +1,30 @@
1
+ export class BlindBountyError extends Error {
2
+ code;
3
+ retriable;
4
+ context;
5
+ cause;
6
+ constructor(code, message, opts = {}) {
7
+ super(message);
8
+ this.code = code;
9
+ this.retriable = opts.retriable ?? false;
10
+ if (opts.context !== undefined)
11
+ this.context = opts.context;
12
+ if (opts.cause !== undefined)
13
+ this.cause = opts.cause;
14
+ Object.defineProperty(this, 'name', {
15
+ value: this.constructor.name,
16
+ enumerable: false,
17
+ configurable: true,
18
+ writable: true,
19
+ });
20
+ }
21
+ toJSON() {
22
+ return {
23
+ name: this.name,
24
+ code: this.code,
25
+ message: this.message,
26
+ retriable: this.retriable,
27
+ ...(this.context ? { context: this.context } : {}),
28
+ };
29
+ }
30
+ }
@@ -0,0 +1,19 @@
1
+ export declare const ErrorCodes: {
2
+ readonly Config: readonly ["CONFIG/INVALID_NETWORK", "CONFIG/MISSING_SIGNER", "CONFIG/BAD_CONFIG"];
3
+ readonly Crypto: readonly ["CRYPTO/INVALID_KEY", "CRYPTO/DECRYPT_FAILED", "CRYPTO/INTEGRITY_CHECK", "CRYPTO/UNSUPPORTED_CIPHER"];
4
+ readonly Storage: readonly ["STORAGE/UPLOAD_FAILED", "STORAGE/DOWNLOAD_FAILED", "STORAGE/MERKLE_MISMATCH", "STORAGE/NOT_FOUND", "STORAGE/INDEXER_UNREACHABLE"];
5
+ readonly Chain: readonly ["CHAIN/TX_REVERTED", "CHAIN/TX_TIMED_OUT", "CHAIN/NONCE_CONFLICT", "CHAIN/INSUFFICIENT_BALANCE", "CHAIN/NETWORK_MISMATCH", "CHAIN/CONTRACT_NOT_DEPLOYED"];
6
+ readonly Compute: readonly ["COMPUTE/BROKER_UNREACHABLE", "COMPUTE/NO_PROVIDERS", "COMPUTE/LEDGER_INSUFFICIENT", "COMPUTE/TEE_ATTESTATION_INVALID", "COMPUTE/VERIFICATION_TIMEOUT"];
7
+ readonly Api: readonly ["API/AUTH_REQUIRED", "API/AUTH_EXPIRED", "API/FORBIDDEN", "API/RATE_LIMITED", "API/VALIDATION", "API/SERVER", "API/NOT_FOUND"];
8
+ readonly Lifecycle: readonly ["LIFECYCLE/ILLEGAL_TRANSITION", "LIFECYCLE/TASK_NOT_FOUND", "LIFECYCLE/NOT_ASSIGNED", "LIFECYCLE/ALREADY_SUBMITTED", "LIFECYCLE/CLAIM_NOT_READY"];
9
+ readonly Timeout: readonly ["TIMEOUT"];
10
+ };
11
+ export type ConfigCode = (typeof ErrorCodes.Config)[number];
12
+ export type CryptoCode = (typeof ErrorCodes.Crypto)[number];
13
+ export type StorageCode = (typeof ErrorCodes.Storage)[number];
14
+ export type ChainCode = (typeof ErrorCodes.Chain)[number];
15
+ export type ComputeCode = (typeof ErrorCodes.Compute)[number];
16
+ export type ApiCode = (typeof ErrorCodes.Api)[number];
17
+ export type LifecycleCode = (typeof ErrorCodes.Lifecycle)[number];
18
+ export type TimeoutCode = (typeof ErrorCodes.Timeout)[number];
19
+ export type ErrorCode = ConfigCode | CryptoCode | StorageCode | ChainCode | ComputeCode | ApiCode | LifecycleCode | TimeoutCode;
@@ -0,0 +1,48 @@
1
+ export const ErrorCodes = {
2
+ Config: ['CONFIG/INVALID_NETWORK', 'CONFIG/MISSING_SIGNER', 'CONFIG/BAD_CONFIG'],
3
+ Crypto: [
4
+ 'CRYPTO/INVALID_KEY',
5
+ 'CRYPTO/DECRYPT_FAILED',
6
+ 'CRYPTO/INTEGRITY_CHECK',
7
+ 'CRYPTO/UNSUPPORTED_CIPHER',
8
+ ],
9
+ Storage: [
10
+ 'STORAGE/UPLOAD_FAILED',
11
+ 'STORAGE/DOWNLOAD_FAILED',
12
+ 'STORAGE/MERKLE_MISMATCH',
13
+ 'STORAGE/NOT_FOUND',
14
+ 'STORAGE/INDEXER_UNREACHABLE',
15
+ ],
16
+ Chain: [
17
+ 'CHAIN/TX_REVERTED',
18
+ 'CHAIN/TX_TIMED_OUT',
19
+ 'CHAIN/NONCE_CONFLICT',
20
+ 'CHAIN/INSUFFICIENT_BALANCE',
21
+ 'CHAIN/NETWORK_MISMATCH',
22
+ 'CHAIN/CONTRACT_NOT_DEPLOYED',
23
+ ],
24
+ Compute: [
25
+ 'COMPUTE/BROKER_UNREACHABLE',
26
+ 'COMPUTE/NO_PROVIDERS',
27
+ 'COMPUTE/LEDGER_INSUFFICIENT',
28
+ 'COMPUTE/TEE_ATTESTATION_INVALID',
29
+ 'COMPUTE/VERIFICATION_TIMEOUT',
30
+ ],
31
+ Api: [
32
+ 'API/AUTH_REQUIRED',
33
+ 'API/AUTH_EXPIRED',
34
+ 'API/FORBIDDEN',
35
+ 'API/RATE_LIMITED',
36
+ 'API/VALIDATION',
37
+ 'API/SERVER',
38
+ 'API/NOT_FOUND',
39
+ ],
40
+ Lifecycle: [
41
+ 'LIFECYCLE/ILLEGAL_TRANSITION',
42
+ 'LIFECYCLE/TASK_NOT_FOUND',
43
+ 'LIFECYCLE/NOT_ASSIGNED',
44
+ 'LIFECYCLE/ALREADY_SUBMITTED',
45
+ 'LIFECYCLE/CLAIM_NOT_READY',
46
+ ],
47
+ Timeout: ['TIMEOUT'],
48
+ };
@@ -0,0 +1,136 @@
1
+ 'use strict';
2
+
3
+ // src/errors/codes.ts
4
+ var ErrorCodes = {
5
+ Config: ["CONFIG/INVALID_NETWORK", "CONFIG/MISSING_SIGNER", "CONFIG/BAD_CONFIG"],
6
+ Crypto: [
7
+ "CRYPTO/INVALID_KEY",
8
+ "CRYPTO/DECRYPT_FAILED",
9
+ "CRYPTO/INTEGRITY_CHECK",
10
+ "CRYPTO/UNSUPPORTED_CIPHER"
11
+ ],
12
+ Storage: [
13
+ "STORAGE/UPLOAD_FAILED",
14
+ "STORAGE/DOWNLOAD_FAILED",
15
+ "STORAGE/MERKLE_MISMATCH",
16
+ "STORAGE/NOT_FOUND",
17
+ "STORAGE/INDEXER_UNREACHABLE"
18
+ ],
19
+ Chain: [
20
+ "CHAIN/TX_REVERTED",
21
+ "CHAIN/TX_TIMED_OUT",
22
+ "CHAIN/NONCE_CONFLICT",
23
+ "CHAIN/INSUFFICIENT_BALANCE",
24
+ "CHAIN/NETWORK_MISMATCH",
25
+ "CHAIN/CONTRACT_NOT_DEPLOYED"
26
+ ],
27
+ Compute: [
28
+ "COMPUTE/BROKER_UNREACHABLE",
29
+ "COMPUTE/NO_PROVIDERS",
30
+ "COMPUTE/LEDGER_INSUFFICIENT",
31
+ "COMPUTE/TEE_ATTESTATION_INVALID",
32
+ "COMPUTE/VERIFICATION_TIMEOUT"
33
+ ],
34
+ Api: [
35
+ "API/AUTH_REQUIRED",
36
+ "API/AUTH_EXPIRED",
37
+ "API/FORBIDDEN",
38
+ "API/RATE_LIMITED",
39
+ "API/VALIDATION",
40
+ "API/SERVER",
41
+ "API/NOT_FOUND"
42
+ ],
43
+ Lifecycle: [
44
+ "LIFECYCLE/ILLEGAL_TRANSITION",
45
+ "LIFECYCLE/TASK_NOT_FOUND",
46
+ "LIFECYCLE/NOT_ASSIGNED",
47
+ "LIFECYCLE/ALREADY_SUBMITTED",
48
+ "LIFECYCLE/CLAIM_NOT_READY"
49
+ ],
50
+ Timeout: ["TIMEOUT"]
51
+ };
52
+
53
+ // src/errors/BlindBountyError.ts
54
+ var BlindBountyError = class extends Error {
55
+ code;
56
+ retriable;
57
+ context;
58
+ cause;
59
+ constructor(code, message, opts = {}) {
60
+ super(message);
61
+ this.code = code;
62
+ this.retriable = opts.retriable ?? false;
63
+ if (opts.context !== void 0) this.context = opts.context;
64
+ if (opts.cause !== void 0) this.cause = opts.cause;
65
+ Object.defineProperty(this, "name", {
66
+ value: this.constructor.name,
67
+ enumerable: false,
68
+ configurable: true,
69
+ writable: true
70
+ });
71
+ }
72
+ toJSON() {
73
+ return {
74
+ name: this.name,
75
+ code: this.code,
76
+ message: this.message,
77
+ retriable: this.retriable,
78
+ ...this.context ? { context: this.context } : {}
79
+ };
80
+ }
81
+ };
82
+
83
+ // src/errors/subclasses.ts
84
+ var ConfigError = class extends BlindBountyError {
85
+ constructor(code, msg, opts) {
86
+ super(code, msg, opts);
87
+ }
88
+ };
89
+ var CryptoError = class extends BlindBountyError {
90
+ constructor(code, msg, opts) {
91
+ super(code, msg, opts);
92
+ }
93
+ };
94
+ var StorageError = class extends BlindBountyError {
95
+ constructor(code, msg, opts) {
96
+ super(code, msg, opts);
97
+ }
98
+ };
99
+ var ChainError = class extends BlindBountyError {
100
+ constructor(code, msg, opts) {
101
+ super(code, msg, opts);
102
+ }
103
+ };
104
+ var ComputeError = class extends BlindBountyError {
105
+ constructor(code, msg, opts) {
106
+ super(code, msg, opts);
107
+ }
108
+ };
109
+ var ApiError = class extends BlindBountyError {
110
+ constructor(code, msg, opts) {
111
+ super(code, msg, opts);
112
+ }
113
+ };
114
+ var LifecycleError = class extends BlindBountyError {
115
+ constructor(code, msg, opts) {
116
+ super(code, msg, opts);
117
+ }
118
+ };
119
+ var TimeoutError = class extends BlindBountyError {
120
+ constructor(code, msg, opts) {
121
+ super(code, msg, opts);
122
+ }
123
+ };
124
+
125
+ exports.ApiError = ApiError;
126
+ exports.BlindBountyError = BlindBountyError;
127
+ exports.ChainError = ChainError;
128
+ exports.ComputeError = ComputeError;
129
+ exports.ConfigError = ConfigError;
130
+ exports.CryptoError = CryptoError;
131
+ exports.ErrorCodes = ErrorCodes;
132
+ exports.LifecycleError = LifecycleError;
133
+ exports.StorageError = StorageError;
134
+ exports.TimeoutError = TimeoutError;
135
+ //# sourceMappingURL=index.cjs.map
136
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/errors/codes.ts","../../src/errors/BlindBountyError.ts","../../src/errors/subclasses.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["export const ErrorCodes = {\n Config: ['CONFIG/INVALID_NETWORK', 'CONFIG/MISSING_SIGNER', 'CONFIG/BAD_CONFIG'] as const,\n Crypto: [\n 'CRYPTO/INVALID_KEY',\n 'CRYPTO/DECRYPT_FAILED',\n 'CRYPTO/INTEGRITY_CHECK',\n 'CRYPTO/UNSUPPORTED_CIPHER',\n ] as const,\n Storage: [\n 'STORAGE/UPLOAD_FAILED',\n 'STORAGE/DOWNLOAD_FAILED',\n 'STORAGE/MERKLE_MISMATCH',\n 'STORAGE/NOT_FOUND',\n 'STORAGE/INDEXER_UNREACHABLE',\n ] as const,\n Chain: [\n 'CHAIN/TX_REVERTED',\n 'CHAIN/TX_TIMED_OUT',\n 'CHAIN/NONCE_CONFLICT',\n 'CHAIN/INSUFFICIENT_BALANCE',\n 'CHAIN/NETWORK_MISMATCH',\n 'CHAIN/CONTRACT_NOT_DEPLOYED',\n ] as const,\n Compute: [\n 'COMPUTE/BROKER_UNREACHABLE',\n 'COMPUTE/NO_PROVIDERS',\n 'COMPUTE/LEDGER_INSUFFICIENT',\n 'COMPUTE/TEE_ATTESTATION_INVALID',\n 'COMPUTE/VERIFICATION_TIMEOUT',\n ] as const,\n Api: [\n 'API/AUTH_REQUIRED',\n 'API/AUTH_EXPIRED',\n 'API/FORBIDDEN',\n 'API/RATE_LIMITED',\n 'API/VALIDATION',\n 'API/SERVER',\n 'API/NOT_FOUND',\n ] as const,\n Lifecycle: [\n 'LIFECYCLE/ILLEGAL_TRANSITION',\n 'LIFECYCLE/TASK_NOT_FOUND',\n 'LIFECYCLE/NOT_ASSIGNED',\n 'LIFECYCLE/ALREADY_SUBMITTED',\n 'LIFECYCLE/CLAIM_NOT_READY',\n ] as const,\n Timeout: ['TIMEOUT'] as const,\n} as const;\n\nexport type ConfigCode = (typeof ErrorCodes.Config)[number];\nexport type CryptoCode = (typeof ErrorCodes.Crypto)[number];\nexport type StorageCode = (typeof ErrorCodes.Storage)[number];\nexport type ChainCode = (typeof ErrorCodes.Chain)[number];\nexport type ComputeCode = (typeof ErrorCodes.Compute)[number];\nexport type ApiCode = (typeof ErrorCodes.Api)[number];\nexport type LifecycleCode = (typeof ErrorCodes.Lifecycle)[number];\nexport type TimeoutCode = (typeof ErrorCodes.Timeout)[number];\n\nexport type ErrorCode =\n | ConfigCode\n | CryptoCode\n | StorageCode\n | ChainCode\n | ComputeCode\n | ApiCode\n | LifecycleCode\n | TimeoutCode;\n","import type { ErrorCode } from './codes.js';\n\nexport interface ErrorOptions {\n retriable?: boolean;\n context?: Record<string, unknown>;\n cause?: unknown;\n}\n\nexport abstract class BlindBountyError extends Error {\n readonly code: ErrorCode;\n readonly retriable: boolean;\n readonly context?: Record<string, unknown>;\n override readonly cause?: unknown;\n\n constructor(code: ErrorCode, message: string, opts: ErrorOptions = {}) {\n super(message);\n this.code = code;\n this.retriable = opts.retriable ?? false;\n if (opts.context !== undefined) this.context = opts.context;\n if (opts.cause !== undefined) this.cause = opts.cause;\n Object.defineProperty(this, 'name', {\n value: this.constructor.name,\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n retriable: this.retriable,\n ...(this.context ? { context: this.context } : {}),\n };\n }\n}\n","import { BlindBountyError, type ErrorOptions } from './BlindBountyError.js';\nimport type {\n ApiCode,\n ChainCode,\n ComputeCode,\n ConfigCode,\n CryptoCode,\n LifecycleCode,\n StorageCode,\n TimeoutCode,\n} from './codes.js';\n\nexport class ConfigError extends BlindBountyError {\n constructor(code: ConfigCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n\nexport class CryptoError extends BlindBountyError {\n constructor(code: CryptoCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n\nexport class StorageError extends BlindBountyError {\n constructor(code: StorageCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n\nexport class ChainError extends BlindBountyError {\n constructor(code: ChainCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n\nexport class ComputeError extends BlindBountyError {\n constructor(code: ComputeCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n\nexport class ApiError extends BlindBountyError {\n constructor(code: ApiCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n\nexport class LifecycleError extends BlindBountyError {\n constructor(code: LifecycleCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n\nexport class TimeoutError extends BlindBountyError {\n constructor(code: TimeoutCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n"]}
@@ -0,0 +1,60 @@
1
+ declare const ErrorCodes: {
2
+ readonly Config: readonly ["CONFIG/INVALID_NETWORK", "CONFIG/MISSING_SIGNER", "CONFIG/BAD_CONFIG"];
3
+ readonly Crypto: readonly ["CRYPTO/INVALID_KEY", "CRYPTO/DECRYPT_FAILED", "CRYPTO/INTEGRITY_CHECK", "CRYPTO/UNSUPPORTED_CIPHER"];
4
+ readonly Storage: readonly ["STORAGE/UPLOAD_FAILED", "STORAGE/DOWNLOAD_FAILED", "STORAGE/MERKLE_MISMATCH", "STORAGE/NOT_FOUND", "STORAGE/INDEXER_UNREACHABLE"];
5
+ readonly Chain: readonly ["CHAIN/TX_REVERTED", "CHAIN/TX_TIMED_OUT", "CHAIN/NONCE_CONFLICT", "CHAIN/INSUFFICIENT_BALANCE", "CHAIN/NETWORK_MISMATCH", "CHAIN/CONTRACT_NOT_DEPLOYED"];
6
+ readonly Compute: readonly ["COMPUTE/BROKER_UNREACHABLE", "COMPUTE/NO_PROVIDERS", "COMPUTE/LEDGER_INSUFFICIENT", "COMPUTE/TEE_ATTESTATION_INVALID", "COMPUTE/VERIFICATION_TIMEOUT"];
7
+ readonly Api: readonly ["API/AUTH_REQUIRED", "API/AUTH_EXPIRED", "API/FORBIDDEN", "API/RATE_LIMITED", "API/VALIDATION", "API/SERVER", "API/NOT_FOUND"];
8
+ readonly Lifecycle: readonly ["LIFECYCLE/ILLEGAL_TRANSITION", "LIFECYCLE/TASK_NOT_FOUND", "LIFECYCLE/NOT_ASSIGNED", "LIFECYCLE/ALREADY_SUBMITTED", "LIFECYCLE/CLAIM_NOT_READY"];
9
+ readonly Timeout: readonly ["TIMEOUT"];
10
+ };
11
+ type ConfigCode = (typeof ErrorCodes.Config)[number];
12
+ type CryptoCode = (typeof ErrorCodes.Crypto)[number];
13
+ type StorageCode = (typeof ErrorCodes.Storage)[number];
14
+ type ChainCode = (typeof ErrorCodes.Chain)[number];
15
+ type ComputeCode = (typeof ErrorCodes.Compute)[number];
16
+ type ApiCode = (typeof ErrorCodes.Api)[number];
17
+ type LifecycleCode = (typeof ErrorCodes.Lifecycle)[number];
18
+ type TimeoutCode = (typeof ErrorCodes.Timeout)[number];
19
+ type ErrorCode = ConfigCode | CryptoCode | StorageCode | ChainCode | ComputeCode | ApiCode | LifecycleCode | TimeoutCode;
20
+
21
+ interface ErrorOptions {
22
+ retriable?: boolean;
23
+ context?: Record<string, unknown>;
24
+ cause?: unknown;
25
+ }
26
+ declare abstract class BlindBountyError extends Error {
27
+ readonly code: ErrorCode;
28
+ readonly retriable: boolean;
29
+ readonly context?: Record<string, unknown>;
30
+ readonly cause?: unknown;
31
+ constructor(code: ErrorCode, message: string, opts?: ErrorOptions);
32
+ toJSON(): Record<string, unknown>;
33
+ }
34
+
35
+ declare class ConfigError extends BlindBountyError {
36
+ constructor(code: ConfigCode, msg: string, opts?: ErrorOptions);
37
+ }
38
+ declare class CryptoError extends BlindBountyError {
39
+ constructor(code: CryptoCode, msg: string, opts?: ErrorOptions);
40
+ }
41
+ declare class StorageError extends BlindBountyError {
42
+ constructor(code: StorageCode, msg: string, opts?: ErrorOptions);
43
+ }
44
+ declare class ChainError extends BlindBountyError {
45
+ constructor(code: ChainCode, msg: string, opts?: ErrorOptions);
46
+ }
47
+ declare class ComputeError extends BlindBountyError {
48
+ constructor(code: ComputeCode, msg: string, opts?: ErrorOptions);
49
+ }
50
+ declare class ApiError extends BlindBountyError {
51
+ constructor(code: ApiCode, msg: string, opts?: ErrorOptions);
52
+ }
53
+ declare class LifecycleError extends BlindBountyError {
54
+ constructor(code: LifecycleCode, msg: string, opts?: ErrorOptions);
55
+ }
56
+ declare class TimeoutError extends BlindBountyError {
57
+ constructor(code: TimeoutCode, msg: string, opts?: ErrorOptions);
58
+ }
59
+
60
+ export { type ApiCode, ApiError, BlindBountyError, type ChainCode, ChainError, type ComputeCode, ComputeError, type ConfigCode, ConfigError, type CryptoCode, CryptoError, type ErrorCode, ErrorCodes, type ErrorOptions, type LifecycleCode, LifecycleError, type StorageCode, StorageError, type TimeoutCode, TimeoutError };
@@ -0,0 +1,3 @@
1
+ export * from './codes.js';
2
+ export * from './BlindBountyError.js';
3
+ export * from './subclasses.js';
@@ -0,0 +1,3 @@
1
+ export * from './codes.js';
2
+ export * from './BlindBountyError.js';
3
+ export * from './subclasses.js';
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/errors/codes.ts","../../src/errors/BlindBountyError.ts","../../src/errors/subclasses.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export const ErrorCodes = {\n Config: ['CONFIG/INVALID_NETWORK', 'CONFIG/MISSING_SIGNER', 'CONFIG/BAD_CONFIG'] as const,\n Crypto: [\n 'CRYPTO/INVALID_KEY',\n 'CRYPTO/DECRYPT_FAILED',\n 'CRYPTO/INTEGRITY_CHECK',\n 'CRYPTO/UNSUPPORTED_CIPHER',\n ] as const,\n Storage: [\n 'STORAGE/UPLOAD_FAILED',\n 'STORAGE/DOWNLOAD_FAILED',\n 'STORAGE/MERKLE_MISMATCH',\n 'STORAGE/NOT_FOUND',\n 'STORAGE/INDEXER_UNREACHABLE',\n ] as const,\n Chain: [\n 'CHAIN/TX_REVERTED',\n 'CHAIN/TX_TIMED_OUT',\n 'CHAIN/NONCE_CONFLICT',\n 'CHAIN/INSUFFICIENT_BALANCE',\n 'CHAIN/NETWORK_MISMATCH',\n 'CHAIN/CONTRACT_NOT_DEPLOYED',\n ] as const,\n Compute: [\n 'COMPUTE/BROKER_UNREACHABLE',\n 'COMPUTE/NO_PROVIDERS',\n 'COMPUTE/LEDGER_INSUFFICIENT',\n 'COMPUTE/TEE_ATTESTATION_INVALID',\n 'COMPUTE/VERIFICATION_TIMEOUT',\n ] as const,\n Api: [\n 'API/AUTH_REQUIRED',\n 'API/AUTH_EXPIRED',\n 'API/FORBIDDEN',\n 'API/RATE_LIMITED',\n 'API/VALIDATION',\n 'API/SERVER',\n 'API/NOT_FOUND',\n ] as const,\n Lifecycle: [\n 'LIFECYCLE/ILLEGAL_TRANSITION',\n 'LIFECYCLE/TASK_NOT_FOUND',\n 'LIFECYCLE/NOT_ASSIGNED',\n 'LIFECYCLE/ALREADY_SUBMITTED',\n 'LIFECYCLE/CLAIM_NOT_READY',\n ] as const,\n Timeout: ['TIMEOUT'] as const,\n} as const;\n\nexport type ConfigCode = (typeof ErrorCodes.Config)[number];\nexport type CryptoCode = (typeof ErrorCodes.Crypto)[number];\nexport type StorageCode = (typeof ErrorCodes.Storage)[number];\nexport type ChainCode = (typeof ErrorCodes.Chain)[number];\nexport type ComputeCode = (typeof ErrorCodes.Compute)[number];\nexport type ApiCode = (typeof ErrorCodes.Api)[number];\nexport type LifecycleCode = (typeof ErrorCodes.Lifecycle)[number];\nexport type TimeoutCode = (typeof ErrorCodes.Timeout)[number];\n\nexport type ErrorCode =\n | ConfigCode\n | CryptoCode\n | StorageCode\n | ChainCode\n | ComputeCode\n | ApiCode\n | LifecycleCode\n | TimeoutCode;\n","import type { ErrorCode } from './codes.js';\n\nexport interface ErrorOptions {\n retriable?: boolean;\n context?: Record<string, unknown>;\n cause?: unknown;\n}\n\nexport abstract class BlindBountyError extends Error {\n readonly code: ErrorCode;\n readonly retriable: boolean;\n readonly context?: Record<string, unknown>;\n override readonly cause?: unknown;\n\n constructor(code: ErrorCode, message: string, opts: ErrorOptions = {}) {\n super(message);\n this.code = code;\n this.retriable = opts.retriable ?? false;\n if (opts.context !== undefined) this.context = opts.context;\n if (opts.cause !== undefined) this.cause = opts.cause;\n Object.defineProperty(this, 'name', {\n value: this.constructor.name,\n enumerable: false,\n configurable: true,\n writable: true,\n });\n }\n\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n retriable: this.retriable,\n ...(this.context ? { context: this.context } : {}),\n };\n }\n}\n","import { BlindBountyError, type ErrorOptions } from './BlindBountyError.js';\nimport type {\n ApiCode,\n ChainCode,\n ComputeCode,\n ConfigCode,\n CryptoCode,\n LifecycleCode,\n StorageCode,\n TimeoutCode,\n} from './codes.js';\n\nexport class ConfigError extends BlindBountyError {\n constructor(code: ConfigCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n\nexport class CryptoError extends BlindBountyError {\n constructor(code: CryptoCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n\nexport class StorageError extends BlindBountyError {\n constructor(code: StorageCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n\nexport class ChainError extends BlindBountyError {\n constructor(code: ChainCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n\nexport class ComputeError extends BlindBountyError {\n constructor(code: ComputeCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n\nexport class ApiError extends BlindBountyError {\n constructor(code: ApiCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n\nexport class LifecycleError extends BlindBountyError {\n constructor(code: LifecycleCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n\nexport class TimeoutError extends BlindBountyError {\n constructor(code: TimeoutCode, msg: string, opts?: ErrorOptions) {\n super(code, msg, opts);\n }\n}\n"]}
@@ -0,0 +1,26 @@
1
+ import { BlindBountyError, type ErrorOptions } from './BlindBountyError.js';
2
+ import type { ApiCode, ChainCode, ComputeCode, ConfigCode, CryptoCode, LifecycleCode, StorageCode, TimeoutCode } from './codes.js';
3
+ export declare class ConfigError extends BlindBountyError {
4
+ constructor(code: ConfigCode, msg: string, opts?: ErrorOptions);
5
+ }
6
+ export declare class CryptoError extends BlindBountyError {
7
+ constructor(code: CryptoCode, msg: string, opts?: ErrorOptions);
8
+ }
9
+ export declare class StorageError extends BlindBountyError {
10
+ constructor(code: StorageCode, msg: string, opts?: ErrorOptions);
11
+ }
12
+ export declare class ChainError extends BlindBountyError {
13
+ constructor(code: ChainCode, msg: string, opts?: ErrorOptions);
14
+ }
15
+ export declare class ComputeError extends BlindBountyError {
16
+ constructor(code: ComputeCode, msg: string, opts?: ErrorOptions);
17
+ }
18
+ export declare class ApiError extends BlindBountyError {
19
+ constructor(code: ApiCode, msg: string, opts?: ErrorOptions);
20
+ }
21
+ export declare class LifecycleError extends BlindBountyError {
22
+ constructor(code: LifecycleCode, msg: string, opts?: ErrorOptions);
23
+ }
24
+ export declare class TimeoutError extends BlindBountyError {
25
+ constructor(code: TimeoutCode, msg: string, opts?: ErrorOptions);
26
+ }