@agirails/sdk 2.0.1-beta → 2.0.2

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 (405) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +116 -108
  3. package/bin/actp +10 -0
  4. package/dist/ACTPClient.d.ts +456 -33
  5. package/dist/ACTPClient.d.ts.map +1 -1
  6. package/dist/ACTPClient.js +477 -93
  7. package/dist/ACTPClient.js.map +1 -1
  8. package/dist/abi/AgentRegistry.json +782 -0
  9. package/dist/abi/EscrowVault.json +106 -38
  10. package/dist/abi/IdentityRegistry.json +316 -0
  11. package/dist/adapters/BaseAdapter.d.ts +231 -0
  12. package/dist/adapters/BaseAdapter.d.ts.map +1 -0
  13. package/dist/adapters/BaseAdapter.js +393 -0
  14. package/dist/adapters/BaseAdapter.js.map +1 -0
  15. package/dist/adapters/BeginnerAdapter.d.ts +152 -0
  16. package/dist/adapters/BeginnerAdapter.d.ts.map +1 -0
  17. package/dist/adapters/BeginnerAdapter.js +168 -0
  18. package/dist/adapters/BeginnerAdapter.js.map +1 -0
  19. package/dist/adapters/IntermediateAdapter.d.ts +211 -0
  20. package/dist/adapters/IntermediateAdapter.d.ts.map +1 -0
  21. package/dist/adapters/IntermediateAdapter.js +260 -0
  22. package/dist/adapters/IntermediateAdapter.js.map +1 -0
  23. package/dist/adapters/index.d.ts +15 -0
  24. package/dist/adapters/index.d.ts.map +1 -0
  25. package/dist/adapters/index.js +26 -0
  26. package/dist/adapters/index.js.map +1 -0
  27. package/dist/builders/DeliveryProofBuilder.d.ts +60 -1
  28. package/dist/builders/DeliveryProofBuilder.d.ts.map +1 -1
  29. package/dist/builders/DeliveryProofBuilder.js +81 -5
  30. package/dist/builders/DeliveryProofBuilder.js.map +1 -1
  31. package/dist/builders/QuoteBuilder.d.ts +101 -0
  32. package/dist/builders/QuoteBuilder.d.ts.map +1 -1
  33. package/dist/builders/QuoteBuilder.js +120 -3
  34. package/dist/builders/QuoteBuilder.js.map +1 -1
  35. package/dist/builders/index.d.ts +4 -0
  36. package/dist/builders/index.d.ts.map +1 -1
  37. package/dist/builders/index.js +4 -0
  38. package/dist/builders/index.js.map +1 -1
  39. package/dist/cli/commands/balance.d.ts +13 -0
  40. package/dist/cli/commands/balance.d.ts.map +1 -0
  41. package/dist/cli/commands/balance.js +89 -0
  42. package/dist/cli/commands/balance.js.map +1 -0
  43. package/dist/cli/commands/batch.d.ts +24 -0
  44. package/dist/cli/commands/batch.d.ts.map +1 -0
  45. package/dist/cli/commands/batch.js +424 -0
  46. package/dist/cli/commands/batch.js.map +1 -0
  47. package/dist/cli/commands/config.d.ts +13 -0
  48. package/dist/cli/commands/config.d.ts.map +1 -0
  49. package/dist/cli/commands/config.js +192 -0
  50. package/dist/cli/commands/config.js.map +1 -0
  51. package/dist/cli/commands/init.d.ts +19 -0
  52. package/dist/cli/commands/init.d.ts.map +1 -0
  53. package/dist/cli/commands/init.js +143 -0
  54. package/dist/cli/commands/init.js.map +1 -0
  55. package/dist/cli/commands/mint.d.ts +13 -0
  56. package/dist/cli/commands/mint.d.ts.map +1 -0
  57. package/dist/cli/commands/mint.js +91 -0
  58. package/dist/cli/commands/mint.js.map +1 -0
  59. package/dist/cli/commands/pay.d.ts +18 -0
  60. package/dist/cli/commands/pay.d.ts.map +1 -0
  61. package/dist/cli/commands/pay.js +87 -0
  62. package/dist/cli/commands/pay.js.map +1 -0
  63. package/dist/cli/commands/simulate.d.ts +32 -0
  64. package/dist/cli/commands/simulate.d.ts.map +1 -0
  65. package/dist/cli/commands/simulate.js +290 -0
  66. package/dist/cli/commands/simulate.js.map +1 -0
  67. package/dist/cli/commands/time.d.ts +29 -0
  68. package/dist/cli/commands/time.d.ts.map +1 -0
  69. package/dist/cli/commands/time.js +252 -0
  70. package/dist/cli/commands/time.js.map +1 -0
  71. package/dist/cli/commands/tx.d.ts +16 -0
  72. package/dist/cli/commands/tx.d.ts.map +1 -0
  73. package/dist/cli/commands/tx.js +379 -0
  74. package/dist/cli/commands/tx.js.map +1 -0
  75. package/dist/cli/commands/watch.d.ts +20 -0
  76. package/dist/cli/commands/watch.d.ts.map +1 -0
  77. package/dist/cli/commands/watch.js +160 -0
  78. package/dist/cli/commands/watch.js.map +1 -0
  79. package/dist/cli/index.d.ts +17 -0
  80. package/dist/cli/index.d.ts.map +1 -0
  81. package/dist/cli/index.js +104 -0
  82. package/dist/cli/index.js.map +1 -0
  83. package/dist/cli/utils/client.d.ts +70 -0
  84. package/dist/cli/utils/client.d.ts.map +1 -0
  85. package/dist/cli/utils/client.js +240 -0
  86. package/dist/cli/utils/client.js.map +1 -0
  87. package/dist/cli/utils/config.d.ts +91 -0
  88. package/dist/cli/utils/config.d.ts.map +1 -0
  89. package/dist/cli/utils/config.js +240 -0
  90. package/dist/cli/utils/config.js.map +1 -0
  91. package/dist/cli/utils/output.d.ts +174 -0
  92. package/dist/cli/utils/output.d.ts.map +1 -0
  93. package/dist/cli/utils/output.js +380 -0
  94. package/dist/cli/utils/output.js.map +1 -0
  95. package/dist/config/networks.d.ts +28 -0
  96. package/dist/config/networks.d.ts.map +1 -1
  97. package/dist/config/networks.js +60 -12
  98. package/dist/config/networks.js.map +1 -1
  99. package/dist/errors/index.d.ts +165 -2
  100. package/dist/errors/index.d.ts.map +1 -1
  101. package/dist/errors/index.js +260 -2
  102. package/dist/errors/index.js.map +1 -1
  103. package/dist/index.d.ts +61 -13
  104. package/dist/index.d.ts.map +1 -1
  105. package/dist/index.js +141 -36
  106. package/dist/index.js.map +1 -1
  107. package/dist/level0/Provider.d.ts +106 -0
  108. package/dist/level0/Provider.d.ts.map +1 -0
  109. package/dist/level0/Provider.js +10 -0
  110. package/dist/level0/Provider.js.map +1 -0
  111. package/dist/level0/ServiceDirectory.d.ts +74 -0
  112. package/dist/level0/ServiceDirectory.d.ts.map +1 -0
  113. package/dist/level0/ServiceDirectory.js +122 -0
  114. package/dist/level0/ServiceDirectory.js.map +1 -0
  115. package/dist/level0/index.d.ts +10 -0
  116. package/dist/level0/index.d.ts.map +1 -0
  117. package/dist/level0/index.js +15 -0
  118. package/dist/level0/index.js.map +1 -0
  119. package/dist/level0/provide.d.ts +51 -0
  120. package/dist/level0/provide.d.ts.map +1 -0
  121. package/dist/level0/provide.js +113 -0
  122. package/dist/level0/provide.js.map +1 -0
  123. package/dist/level0/request.d.ts +53 -0
  124. package/dist/level0/request.d.ts.map +1 -0
  125. package/dist/level0/request.js +462 -0
  126. package/dist/level0/request.js.map +1 -0
  127. package/dist/level1/Agent.d.ts +472 -0
  128. package/dist/level1/Agent.d.ts.map +1 -0
  129. package/dist/level1/Agent.js +1091 -0
  130. package/dist/level1/Agent.js.map +1 -0
  131. package/dist/level1/index.d.ts +10 -0
  132. package/dist/level1/index.d.ts.map +1 -0
  133. package/dist/level1/index.js +30 -0
  134. package/dist/level1/index.js.map +1 -0
  135. package/dist/level1/pricing/PriceCalculator.d.ts +62 -0
  136. package/dist/level1/pricing/PriceCalculator.d.ts.map +1 -0
  137. package/dist/level1/pricing/PriceCalculator.js +237 -0
  138. package/dist/level1/pricing/PriceCalculator.js.map +1 -0
  139. package/dist/level1/pricing/PricingStrategy.d.ts +179 -0
  140. package/dist/level1/pricing/PricingStrategy.d.ts.map +1 -0
  141. package/dist/level1/pricing/PricingStrategy.js +11 -0
  142. package/dist/level1/pricing/PricingStrategy.js.map +1 -0
  143. package/dist/level1/types/Job.d.ts +166 -0
  144. package/dist/level1/types/Job.d.ts.map +1 -0
  145. package/dist/level1/types/Job.js +11 -0
  146. package/dist/level1/types/Job.js.map +1 -0
  147. package/dist/level1/types/Options.d.ts +258 -0
  148. package/dist/level1/types/Options.d.ts.map +1 -0
  149. package/dist/level1/types/Options.js +8 -0
  150. package/dist/level1/types/Options.js.map +1 -0
  151. package/dist/level1/types/index.d.ts +8 -0
  152. package/dist/level1/types/index.d.ts.map +1 -0
  153. package/dist/level1/types/index.js +8 -0
  154. package/dist/level1/types/index.js.map +1 -0
  155. package/dist/protocol/ACTPKernel.d.ts +229 -2
  156. package/dist/protocol/ACTPKernel.d.ts.map +1 -1
  157. package/dist/protocol/ACTPKernel.js +367 -33
  158. package/dist/protocol/ACTPKernel.js.map +1 -1
  159. package/dist/protocol/AgentRegistry.d.ts +177 -0
  160. package/dist/protocol/AgentRegistry.d.ts.map +1 -0
  161. package/dist/protocol/AgentRegistry.js +449 -0
  162. package/dist/protocol/AgentRegistry.js.map +1 -0
  163. package/dist/protocol/DIDManager.d.ts +289 -0
  164. package/dist/protocol/DIDManager.d.ts.map +1 -0
  165. package/dist/protocol/DIDManager.js +481 -0
  166. package/dist/protocol/DIDManager.js.map +1 -0
  167. package/dist/protocol/DIDResolver.d.ts +236 -0
  168. package/dist/protocol/DIDResolver.d.ts.map +1 -0
  169. package/dist/protocol/DIDResolver.js +495 -0
  170. package/dist/protocol/DIDResolver.js.map +1 -0
  171. package/dist/protocol/EASHelper.d.ts +57 -2
  172. package/dist/protocol/EASHelper.d.ts.map +1 -1
  173. package/dist/protocol/EASHelper.js +230 -37
  174. package/dist/protocol/EASHelper.js.map +1 -1
  175. package/dist/protocol/EscrowVault.d.ts +93 -2
  176. package/dist/protocol/EscrowVault.d.ts.map +1 -1
  177. package/dist/protocol/EscrowVault.js +122 -33
  178. package/dist/protocol/EscrowVault.js.map +1 -1
  179. package/dist/protocol/EventMonitor.d.ts +45 -1
  180. package/dist/protocol/EventMonitor.d.ts.map +1 -1
  181. package/dist/protocol/EventMonitor.js +64 -8
  182. package/dist/protocol/EventMonitor.js.map +1 -1
  183. package/dist/protocol/MessageSigner.d.ts +116 -2
  184. package/dist/protocol/MessageSigner.d.ts.map +1 -1
  185. package/dist/protocol/MessageSigner.js +215 -9
  186. package/dist/protocol/MessageSigner.js.map +1 -1
  187. package/dist/protocol/ProofGenerator.d.ts +93 -0
  188. package/dist/protocol/ProofGenerator.d.ts.map +1 -1
  189. package/dist/protocol/ProofGenerator.js +194 -9
  190. package/dist/protocol/ProofGenerator.js.map +1 -1
  191. package/dist/protocol/QuoteBuilder.d.ts +8 -0
  192. package/dist/protocol/QuoteBuilder.d.ts.map +1 -1
  193. package/dist/protocol/QuoteBuilder.js +8 -0
  194. package/dist/protocol/QuoteBuilder.js.map +1 -1
  195. package/dist/runtime/BlockchainRuntime.d.ts +360 -0
  196. package/dist/runtime/BlockchainRuntime.d.ts.map +1 -0
  197. package/dist/runtime/BlockchainRuntime.js +767 -0
  198. package/dist/runtime/BlockchainRuntime.js.map +1 -0
  199. package/dist/runtime/IACTPRuntime.d.ts +271 -0
  200. package/dist/runtime/IACTPRuntime.d.ts.map +1 -0
  201. package/dist/runtime/IACTPRuntime.js +15 -0
  202. package/dist/runtime/IACTPRuntime.js.map +1 -0
  203. package/dist/runtime/MockRuntime.d.ts +445 -0
  204. package/dist/runtime/MockRuntime.d.ts.map +1 -0
  205. package/dist/runtime/MockRuntime.js +1065 -0
  206. package/dist/runtime/MockRuntime.js.map +1 -0
  207. package/dist/runtime/MockStateManager.d.ts +233 -0
  208. package/dist/runtime/MockStateManager.d.ts.map +1 -0
  209. package/dist/runtime/MockStateManager.js +533 -0
  210. package/dist/runtime/MockStateManager.js.map +1 -0
  211. package/dist/runtime/index.d.ts +14 -0
  212. package/dist/runtime/index.d.ts.map +1 -0
  213. package/dist/runtime/index.js +42 -0
  214. package/dist/runtime/index.js.map +1 -0
  215. package/dist/runtime/types/MockState.d.ts +167 -0
  216. package/dist/runtime/types/MockState.d.ts.map +1 -0
  217. package/dist/runtime/types/MockState.js +43 -0
  218. package/dist/runtime/types/MockState.js.map +1 -0
  219. package/dist/types/agent.d.ts +76 -0
  220. package/dist/types/agent.d.ts.map +1 -0
  221. package/dist/types/agent.js +8 -0
  222. package/dist/types/agent.js.map +1 -0
  223. package/dist/types/did.d.ts +192 -0
  224. package/dist/types/did.d.ts.map +1 -0
  225. package/dist/types/did.js +38 -0
  226. package/dist/types/did.js.map +1 -0
  227. package/dist/types/eip712.d.ts +34 -0
  228. package/dist/types/eip712.d.ts.map +1 -1
  229. package/dist/types/eip712.js +31 -5
  230. package/dist/types/eip712.js.map +1 -1
  231. package/dist/types/escrow.d.ts +17 -10
  232. package/dist/types/escrow.d.ts.map +1 -1
  233. package/dist/types/index.d.ts +5 -0
  234. package/dist/types/index.d.ts.map +1 -1
  235. package/dist/types/index.js +8 -0
  236. package/dist/types/index.js.map +1 -1
  237. package/dist/types/message.d.ts +32 -0
  238. package/dist/types/message.d.ts.map +1 -1
  239. package/dist/types/message.js +4 -0
  240. package/dist/types/message.js.map +1 -1
  241. package/dist/types/state.d.ts +28 -0
  242. package/dist/types/state.d.ts.map +1 -1
  243. package/dist/types/state.js +37 -6
  244. package/dist/types/state.js.map +1 -1
  245. package/dist/types/transaction.d.ts +17 -0
  246. package/dist/types/transaction.d.ts.map +1 -1
  247. package/dist/utils/ErrorRecoveryGuide.d.ts +125 -0
  248. package/dist/utils/ErrorRecoveryGuide.d.ts.map +1 -0
  249. package/dist/utils/ErrorRecoveryGuide.js +579 -0
  250. package/dist/utils/ErrorRecoveryGuide.js.map +1 -0
  251. package/dist/utils/Helpers.d.ts +453 -0
  252. package/dist/utils/Helpers.d.ts.map +1 -0
  253. package/dist/utils/Helpers.js +623 -0
  254. package/dist/utils/Helpers.js.map +1 -0
  255. package/dist/utils/IPFSClient.d.ts +113 -0
  256. package/dist/utils/IPFSClient.d.ts.map +1 -1
  257. package/dist/utils/IPFSClient.js +128 -7
  258. package/dist/utils/IPFSClient.js.map +1 -1
  259. package/dist/utils/Logger.d.ts +195 -0
  260. package/dist/utils/Logger.d.ts.map +1 -0
  261. package/dist/utils/Logger.js +382 -0
  262. package/dist/utils/Logger.js.map +1 -0
  263. package/dist/utils/NonceManager.d.ts +234 -1
  264. package/dist/utils/NonceManager.d.ts.map +1 -1
  265. package/dist/utils/NonceManager.js +372 -7
  266. package/dist/utils/NonceManager.js.map +1 -1
  267. package/dist/utils/RateLimiter.d.ts +253 -0
  268. package/dist/utils/RateLimiter.d.ts.map +1 -0
  269. package/dist/utils/RateLimiter.js +424 -0
  270. package/dist/utils/RateLimiter.js.map +1 -0
  271. package/dist/utils/ReceivedNonceTracker.d.ts +175 -0
  272. package/dist/utils/ReceivedNonceTracker.d.ts.map +1 -1
  273. package/dist/utils/ReceivedNonceTracker.js +261 -5
  274. package/dist/utils/ReceivedNonceTracker.js.map +1 -1
  275. package/dist/utils/SDKLifecycle.d.ts +156 -0
  276. package/dist/utils/SDKLifecycle.d.ts.map +1 -0
  277. package/dist/utils/SDKLifecycle.js +347 -0
  278. package/dist/utils/SDKLifecycle.js.map +1 -0
  279. package/dist/utils/SecureNonce.d.ts +57 -0
  280. package/dist/utils/SecureNonce.d.ts.map +1 -0
  281. package/dist/utils/SecureNonce.js +80 -0
  282. package/dist/utils/SecureNonce.js.map +1 -0
  283. package/dist/utils/Semaphore.d.ts +123 -0
  284. package/dist/utils/Semaphore.d.ts.map +1 -0
  285. package/dist/utils/Semaphore.js +247 -0
  286. package/dist/utils/Semaphore.js.map +1 -0
  287. package/dist/utils/UsedAttestationTracker.d.ts +167 -0
  288. package/dist/utils/UsedAttestationTracker.d.ts.map +1 -0
  289. package/dist/utils/UsedAttestationTracker.js +309 -0
  290. package/dist/utils/UsedAttestationTracker.js.map +1 -0
  291. package/dist/utils/canonicalJson.d.ts +22 -0
  292. package/dist/utils/canonicalJson.d.ts.map +1 -1
  293. package/dist/utils/canonicalJson.js +26 -3
  294. package/dist/utils/canonicalJson.js.map +1 -1
  295. package/dist/utils/computeTypeHash.d.ts +14 -0
  296. package/dist/utils/computeTypeHash.d.ts.map +1 -1
  297. package/dist/utils/computeTypeHash.js +19 -2
  298. package/dist/utils/computeTypeHash.js.map +1 -1
  299. package/dist/utils/fsSafe.d.ts +14 -0
  300. package/dist/utils/fsSafe.d.ts.map +1 -0
  301. package/dist/utils/fsSafe.js +89 -0
  302. package/dist/utils/fsSafe.js.map +1 -0
  303. package/dist/utils/index.d.ts +15 -0
  304. package/dist/utils/index.d.ts.map +1 -0
  305. package/dist/utils/index.js +51 -0
  306. package/dist/utils/index.js.map +1 -0
  307. package/dist/utils/security.d.ts +147 -0
  308. package/dist/utils/security.d.ts.map +1 -0
  309. package/dist/utils/security.js +391 -0
  310. package/dist/utils/security.js.map +1 -0
  311. package/dist/utils/validation.d.ts +40 -0
  312. package/dist/utils/validation.d.ts.map +1 -1
  313. package/dist/utils/validation.js +184 -7
  314. package/dist/utils/validation.js.map +1 -1
  315. package/package.json +54 -37
  316. package/src/ACTPClient.ts +692 -178
  317. package/src/abi/AgentRegistry.json +782 -0
  318. package/src/abi/EscrowVault.json +106 -38
  319. package/src/abi/IdentityRegistry.json +316 -0
  320. package/src/adapters/BaseAdapter.ts +473 -0
  321. package/src/adapters/BeginnerAdapter.ts +232 -0
  322. package/src/adapters/IntermediateAdapter.ts +316 -0
  323. package/src/adapters/index.ts +25 -0
  324. package/src/builders/DeliveryProofBuilder.ts +3 -2
  325. package/src/cli/commands/balance.ts +110 -0
  326. package/src/cli/commands/batch.ts +487 -0
  327. package/src/cli/commands/config.ts +231 -0
  328. package/src/cli/commands/init.ts +161 -0
  329. package/src/cli/commands/mint.ts +116 -0
  330. package/src/cli/commands/pay.ts +113 -0
  331. package/src/cli/commands/simulate.ts +345 -0
  332. package/src/cli/commands/time.ts +303 -0
  333. package/src/cli/commands/tx.ts +448 -0
  334. package/src/cli/commands/watch.ts +211 -0
  335. package/src/cli/index.ts +116 -0
  336. package/src/cli/utils/client.ts +249 -0
  337. package/src/cli/utils/config.ts +282 -0
  338. package/src/cli/utils/output.ts +465 -0
  339. package/src/config/networks.ts +32 -9
  340. package/src/errors/index.ts +298 -1
  341. package/src/index.ts +207 -71
  342. package/src/level0/Provider.ts +117 -0
  343. package/src/level0/ServiceDirectory.ts +131 -0
  344. package/src/level0/index.ts +10 -0
  345. package/src/level0/provide.ts +131 -0
  346. package/src/level0/request.ts +494 -0
  347. package/src/level1/Agent.ts +1432 -0
  348. package/src/level1/index.ts +10 -0
  349. package/src/level1/pricing/PriceCalculator.ts +255 -0
  350. package/src/level1/pricing/PricingStrategy.ts +198 -0
  351. package/src/level1/types/Job.ts +179 -0
  352. package/src/level1/types/Options.ts +291 -0
  353. package/src/level1/types/index.ts +8 -0
  354. package/src/protocol/ACTPKernel.ts +175 -23
  355. package/src/protocol/AgentRegistry.ts +559 -0
  356. package/src/protocol/DIDManager.ts +629 -0
  357. package/src/protocol/DIDResolver.ts +554 -0
  358. package/src/protocol/EASHelper.ts +230 -46
  359. package/src/protocol/EscrowVault.ts +68 -50
  360. package/src/protocol/EventMonitor.ts +44 -15
  361. package/src/protocol/MessageSigner.ts +193 -13
  362. package/src/protocol/ProofGenerator.ts +223 -4
  363. package/src/runtime/BlockchainRuntime.ts +993 -0
  364. package/src/runtime/IACTPRuntime.ts +284 -0
  365. package/src/runtime/MockRuntime.ts +1244 -0
  366. package/src/runtime/MockStateManager.ts +576 -0
  367. package/src/runtime/index.ts +25 -0
  368. package/src/runtime/types/MockState.ts +227 -0
  369. package/src/types/agent.ts +79 -0
  370. package/src/types/did.ts +223 -0
  371. package/src/types/escrow.ts +12 -11
  372. package/src/types/index.ts +5 -1
  373. package/src/types/state.ts +12 -3
  374. package/src/types/transaction.ts +4 -1
  375. package/src/utils/ErrorRecoveryGuide.ts +675 -0
  376. package/src/utils/Helpers.ts +688 -0
  377. package/src/utils/IPFSClient.ts +122 -5
  378. package/src/utils/Logger.ts +484 -0
  379. package/src/utils/NonceManager.ts +305 -8
  380. package/src/utils/RateLimiter.ts +534 -0
  381. package/src/utils/ReceivedNonceTracker.ts +170 -0
  382. package/src/utils/SDKLifecycle.ts +416 -0
  383. package/src/utils/SecureNonce.ts +78 -0
  384. package/src/utils/Semaphore.ts +276 -0
  385. package/src/utils/UsedAttestationTracker.ts +387 -0
  386. package/src/utils/fsSafe.ts +75 -0
  387. package/src/utils/index.ts +80 -0
  388. package/src/utils/security.ts +418 -0
  389. package/src/utils/validation.ts +164 -0
  390. package/src/__tests__/ProofGenerator.test.ts +0 -124
  391. package/src/__tests__/QuoteBuilder.test.ts +0 -516
  392. package/src/__tests__/StateMachine.test.ts +0 -82
  393. package/src/__tests__/builders/DeliveryProofBuilder.test.ts +0 -581
  394. package/src/__tests__/integration/ACTPClient.test.ts +0 -263
  395. package/src/__tests__/integration.test.ts +0 -289
  396. package/src/__tests__/protocol/EASHelper.test.ts +0 -472
  397. package/src/__tests__/protocol/EventMonitor.test.ts +0 -382
  398. package/src/__tests__/security/ACTPKernel.security.test.ts +0 -1167
  399. package/src/__tests__/security/EscrowVault.security.test.ts +0 -570
  400. package/src/__tests__/security/MessageSigner.security.test.ts +0 -286
  401. package/src/__tests__/security/NonceReplay.security.test.ts +0 -501
  402. package/src/__tests__/security/validation.security.test.ts +0 -376
  403. package/src/__tests__/utils/IPFSClient.test.ts +0 -262
  404. package/src/__tests__/utils/NonceManager.test.ts +0 -205
  405. package/src/__tests__/utils/canonicalJson.test.ts +0 -153
@@ -0,0 +1,495 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DIDResolver = void 0;
4
+ const ethers_1 = require("ethers");
5
+ // NOTE: These imports require npm packages to be installed:
6
+ // - did-resolver
7
+ // - ethr-did-resolver
8
+ const did_resolver_1 = require("did-resolver");
9
+ const ethr_did_resolver_1 = require("ethr-did-resolver");
10
+ const networks_1 = require("../config/networks");
11
+ const errors_1 = require("../errors");
12
+ /**
13
+ * DIDResolver - Resolve DIDs to DID Documents (AIP-7 §2.2)
14
+ *
15
+ * Uses ethr-did-resolver library for resolution against AGIRAILS Identity Registry.
16
+ * Supports did:ethr method with explicit chainId format: did:ethr:<chainId>:<address>
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const resolver = await DIDResolver.create({ network: 'base-sepolia' });
21
+ *
22
+ * // Resolve DID to DID Document
23
+ * const result = await resolver.resolve('did:ethr:84532:0x742d35cc6634c0532925a3b844bc9e7595f0beb');
24
+ * console.log(result.didDocument);
25
+ *
26
+ * // Verify signature
27
+ * const isValid = await resolver.verifySignature(
28
+ * 'did:ethr:84532:0x742d35cc...',
29
+ * 'Hello AGIRAILS',
30
+ * '0x1234...',
31
+ * { chainId: 84532 }
32
+ * );
33
+ * ```
34
+ *
35
+ * @security
36
+ * - Always validates DID format before resolution
37
+ * - Checks chainId matches expected network
38
+ * - Verifies signatures using ethers.js verifyMessage
39
+ * - Prevents cross-chain replay attacks via chainId validation
40
+ */
41
+ class DIDResolver {
42
+ /**
43
+ * Private constructor - use DIDResolver.create() factory method
44
+ */
45
+ constructor(config) {
46
+ this.config = config;
47
+ }
48
+ /**
49
+ * Factory method to create DIDResolver instance
50
+ *
51
+ * @param config - Configuration options
52
+ * @returns Configured DIDResolver instance
53
+ * @throws ValidationError if configuration is invalid
54
+ *
55
+ * @example
56
+ * ```typescript
57
+ * // Using predefined network
58
+ * const resolver = await DIDResolver.create({ network: 'base-sepolia' });
59
+ *
60
+ * // Using custom RPC and registry
61
+ * const resolver = await DIDResolver.create({
62
+ * chainId: 84532,
63
+ * rpcUrl: 'https://sepolia.base.org',
64
+ * registryAddress: '0x...'
65
+ * });
66
+ * ```
67
+ */
68
+ static async create(config = {}) {
69
+ // Resolve configuration with defaults
70
+ const resolvedConfig = DIDResolver.resolveConfig(config);
71
+ // Validate configuration
72
+ DIDResolver.validateConfig(resolvedConfig);
73
+ // Initialize did-resolver with ethr-did-resolver
74
+ const providerConfig = {
75
+ networks: [
76
+ {
77
+ name: resolvedConfig.network || `chain-${resolvedConfig.chainId}`,
78
+ chainId: `0x${resolvedConfig.chainId.toString(16)}`,
79
+ rpcUrl: resolvedConfig.rpcUrl,
80
+ registry: resolvedConfig.registryAddress
81
+ }
82
+ ]
83
+ };
84
+ const ethrResolver = (0, ethr_did_resolver_1.getResolver)(providerConfig);
85
+ const resolver = new did_resolver_1.Resolver(ethrResolver);
86
+ const instance = new DIDResolver(resolvedConfig);
87
+ instance.resolver = resolver;
88
+ return instance;
89
+ }
90
+ /**
91
+ * Resolve configuration with defaults from network config
92
+ */
93
+ static resolveConfig(config) {
94
+ // If network specified, use network defaults
95
+ if (config.network) {
96
+ const networkConfig = (0, networks_1.getNetwork)(config.network);
97
+ return {
98
+ network: config.network,
99
+ chainId: config.chainId || networkConfig.chainId,
100
+ rpcUrl: config.rpcUrl || networkConfig.rpcUrl,
101
+ registryAddress: config.registryAddress || networkConfig.contracts.agentRegistry || ''
102
+ };
103
+ }
104
+ // Custom configuration (must provide all required fields)
105
+ if (!config.chainId || !config.rpcUrl) {
106
+ throw new errors_1.ValidationError('config', 'Must provide either network name or (chainId + rpcUrl)');
107
+ }
108
+ return {
109
+ network: config.network || '',
110
+ chainId: config.chainId,
111
+ rpcUrl: config.rpcUrl,
112
+ registryAddress: config.registryAddress || ''
113
+ };
114
+ }
115
+ /**
116
+ * Validate configuration
117
+ */
118
+ static validateConfig(config) {
119
+ if (!config.chainId || config.chainId <= 0) {
120
+ throw new errors_1.ValidationError('chainId', 'Invalid chainId');
121
+ }
122
+ if (!config.rpcUrl || !config.rpcUrl.startsWith('http')) {
123
+ throw new errors_1.ValidationError('rpcUrl', 'Invalid RPC URL');
124
+ }
125
+ // Registry address is optional (will use default if not provided)
126
+ // But if provided, must be valid address
127
+ if (config.registryAddress) {
128
+ try {
129
+ (0, ethers_1.getAddress)(config.registryAddress);
130
+ }
131
+ catch (error) {
132
+ throw new errors_1.ValidationError('registryAddress', 'Invalid registry address');
133
+ }
134
+ }
135
+ }
136
+ /**
137
+ * Get resolver configuration
138
+ */
139
+ getConfig() {
140
+ return { ...this.config };
141
+ }
142
+ /**
143
+ * Resolve DID to DID Document
144
+ *
145
+ * @param did - DID to resolve (format: did:ethr:<chainId>:<address>)
146
+ * @returns DID resolution result with document and metadata
147
+ * @throws ValidationError if DID format is invalid
148
+ *
149
+ * @example
150
+ * ```typescript
151
+ * const result = await resolver.resolve('did:ethr:84532:0x742d35cc6634c0532925a3b844bc9e7595f0beb');
152
+ *
153
+ * if (result.didDocument) {
154
+ * console.log('Identity owner:', result.didDocument.verificationMethod[0].controller);
155
+ * console.log('Service endpoints:', result.didDocument.service);
156
+ * } else {
157
+ * console.error('Resolution failed:', result.didResolutionMetadata.error);
158
+ * }
159
+ * ```
160
+ */
161
+ async resolve(did) {
162
+ // Validate DID format
163
+ const parsed = DIDResolver.parseDID(did);
164
+ // Check chainId matches expected network
165
+ if (parsed.chainId !== this.config.chainId) {
166
+ return {
167
+ didDocument: null,
168
+ didResolutionMetadata: {
169
+ error: 'invalidDid',
170
+ message: `DID chainId ${parsed.chainId} does not match resolver chainId ${this.config.chainId}`
171
+ },
172
+ didDocumentMetadata: {}
173
+ };
174
+ }
175
+ // Perform resolution using did-resolver
176
+ const result = await this.resolver.resolve(did);
177
+ return result;
178
+ }
179
+ /**
180
+ * Verify a signature was made by DID controller or authorized delegate
181
+ *
182
+ * @param did - DID of expected signer
183
+ * @param message - Original message that was signed
184
+ * @param signature - Signature to verify (0x-prefixed hex string)
185
+ * @param options - Verification options (chainId validation, domain separation, etc.)
186
+ * @returns Verification result with validity and signer info
187
+ *
188
+ * @security
189
+ * - Validates chainId to prevent cross-chain replay attacks
190
+ * - Uses domain separation to prevent cross-protocol replay attacks (MEDIUM finding fix)
191
+ * - Resolves DID to get current owner and delegates
192
+ * - Checks if signer is owner or valid delegate (MEDIUM finding fix)
193
+ * - Validates delegate expiration timestamps if provided
194
+ *
195
+ * @example
196
+ * ```typescript
197
+ * // With domain separation (recommended - default)
198
+ * const result = await resolver.verifySignature(
199
+ * 'did:ethr:84532:0x742d35cc...',
200
+ * 'Hello AGIRAILS',
201
+ * '0x1234...',
202
+ * { chainId: 84532, useDomainSeparation: true }
203
+ * );
204
+ *
205
+ * // Without domain separation (backwards compatibility only)
206
+ * const legacyResult = await resolver.verifySignature(
207
+ * 'did:ethr:84532:0x742d35cc...',
208
+ * 'Hello AGIRAILS',
209
+ * '0x1234...',
210
+ * { chainId: 84532, useDomainSeparation: false }
211
+ * );
212
+ *
213
+ * if (result.valid) {
214
+ * console.log('Signature is valid!');
215
+ * console.log('Signer:', result.signer);
216
+ * console.log('Is delegate:', result.isDelegate);
217
+ * if (result.isDelegate) {
218
+ * console.log('Delegate type:', result.delegateType);
219
+ * }
220
+ * } else {
221
+ * console.error('Invalid signature:', result.error);
222
+ * }
223
+ * ```
224
+ */
225
+ async verifySignature(did, message, signature, options) {
226
+ try {
227
+ // Validate DID format
228
+ const parsed = DIDResolver.parseDID(did);
229
+ // Validate chainId matches
230
+ if (parsed.chainId !== options.chainId) {
231
+ return {
232
+ valid: false,
233
+ error: `DID chainId ${parsed.chainId} does not match expected chainId ${options.chainId}`
234
+ };
235
+ }
236
+ // SECURITY FIX (MEDIUM): Domain separation to prevent cross-protocol replay attacks
237
+ // Default to true for security, but allow opt-out for backwards compatibility
238
+ const useDomainSeparation = options.useDomainSeparation !== false;
239
+ const messageToVerify = useDomainSeparation
240
+ ? this.createDomainSeparatedMessage(message, parsed.chainId, did)
241
+ : message;
242
+ // Recover signer from signature
243
+ const recoveredAddress = (0, ethers_1.verifyMessage)(messageToVerify, signature);
244
+ const signerLower = recoveredAddress.toLowerCase();
245
+ const didAddressLower = parsed.address.toLowerCase();
246
+ // Check if signer is the DID address itself (owner)
247
+ if (signerLower === didAddressLower) {
248
+ return {
249
+ valid: true,
250
+ signer: recoveredAddress,
251
+ isDelegate: false
252
+ };
253
+ }
254
+ // SECURITY FIX (MEDIUM): Implement delegate validation
255
+ // Check if signer is a valid delegate in the DID Document
256
+ const resolution = await this.resolve(did);
257
+ if (resolution.didDocument && resolution.didDocument.authentication) {
258
+ // Iterate through authentication methods to find valid delegates
259
+ for (const auth of resolution.didDocument.authentication) {
260
+ // auth can be a string (reference to verificationMethod) or VerificationMethod object
261
+ const verificationMethod = typeof auth === 'string'
262
+ ? resolution.didDocument.verificationMethod?.find(vm => vm.id === auth)
263
+ : auth;
264
+ if (verificationMethod) {
265
+ // Extract delegate address from verification method
266
+ const delegateAddress = this.extractAddressFromVerificationMethod(verificationMethod);
267
+ if (delegateAddress && delegateAddress.toLowerCase() === signerLower) {
268
+ // Check delegate validity if timestamp provided
269
+ if (options.timestamp && verificationMethod.validTo) {
270
+ const validToTimestamp = typeof verificationMethod.validTo === 'bigint'
271
+ ? Number(verificationMethod.validTo)
272
+ : verificationMethod.validTo;
273
+ if (options.timestamp > validToTimestamp) {
274
+ return {
275
+ valid: false,
276
+ signer: recoveredAddress,
277
+ error: 'Delegate expired'
278
+ };
279
+ }
280
+ }
281
+ return {
282
+ valid: true,
283
+ signer: recoveredAddress,
284
+ isDelegate: true,
285
+ delegateType: verificationMethod.type
286
+ };
287
+ }
288
+ }
289
+ }
290
+ }
291
+ // Signer is neither owner nor valid delegate
292
+ return {
293
+ valid: false,
294
+ signer: recoveredAddress,
295
+ error: 'Signer is not the DID controller or a valid delegate'
296
+ };
297
+ }
298
+ catch (error) {
299
+ return {
300
+ valid: false,
301
+ error: error instanceof Error ? error.message : 'Signature verification failed'
302
+ };
303
+ }
304
+ }
305
+ /**
306
+ * Build DID from address and chainId
307
+ *
308
+ * @param address - Ethereum address (with or without 0x prefix)
309
+ * @param chainId - Chain ID (e.g., 84532 for Base Sepolia)
310
+ * @returns Canonical DID string (lowercase address)
311
+ *
312
+ * @example
313
+ * ```typescript
314
+ * const did = DIDResolver.buildDID('0x742d35cc6634c0532925a3b844bc9e7595f0beb', 84532);
315
+ * // Returns: 'did:ethr:84532:0x742d35cc6634c0532925a3b844bc9e7595f0beb'
316
+ * ```
317
+ */
318
+ static buildDID(address, chainId) {
319
+ // Validate and checksum address
320
+ const checksummed = (0, ethers_1.getAddress)(address);
321
+ // Convert to lowercase for canonical format (per AIP-7 §2.1)
322
+ const canonical = checksummed.toLowerCase();
323
+ return `did:ethr:${chainId}:${canonical}`;
324
+ }
325
+ /**
326
+ * Parse DID to extract components
327
+ *
328
+ * @param did - DID to parse
329
+ * @returns Parsed components
330
+ * @throws ValidationError if DID format is invalid
331
+ *
332
+ * @example
333
+ * ```typescript
334
+ * const parsed = DIDResolver.parseDID('did:ethr:84532:0x742d35cc6634c0532925a3b844bc9e7595f0beb');
335
+ * console.log(parsed.method); // 'ethr'
336
+ * console.log(parsed.chainId); // 84532
337
+ * console.log(parsed.address); // '0x742d35cc6634c0532925a3b844bc9e7595f0beb'
338
+ * ```
339
+ */
340
+ static parseDID(did) {
341
+ // Validate basic format
342
+ if (!did || typeof did !== 'string') {
343
+ throw new errors_1.ValidationError('did', 'DID must be a non-empty string');
344
+ }
345
+ // DID format: did:ethr:<chainId>:<address>
346
+ const parts = did.split(':');
347
+ if (parts.length !== 4) {
348
+ throw new errors_1.ValidationError('did', 'Invalid DID format. Expected: did:ethr:<chainId>:<address>');
349
+ }
350
+ const [scheme, method, chainIdStr, address] = parts;
351
+ // Validate scheme
352
+ if (scheme !== 'did') {
353
+ throw new errors_1.ValidationError('did', `Invalid DID scheme: ${scheme}. Expected: did`);
354
+ }
355
+ // Validate method
356
+ if (method !== 'ethr') {
357
+ throw new errors_1.ValidationError('did', `Invalid DID method: ${method}. Expected: ethr`);
358
+ }
359
+ // Validate chainId
360
+ const chainId = parseInt(chainIdStr, 10);
361
+ if (isNaN(chainId) || chainId <= 0) {
362
+ throw new errors_1.ValidationError('did', `Invalid chainId: ${chainIdStr}`);
363
+ }
364
+ // Validate address
365
+ try {
366
+ const checksummed = (0, ethers_1.getAddress)(address);
367
+ return {
368
+ method,
369
+ chainId,
370
+ address: checksummed.toLowerCase() // Canonical format per AIP-7
371
+ };
372
+ }
373
+ catch (error) {
374
+ throw new errors_1.ValidationError('did', `Invalid Ethereum address: ${address}`);
375
+ }
376
+ }
377
+ /**
378
+ * Validate DID format
379
+ *
380
+ * @param did - DID to validate
381
+ * @returns True if valid, false otherwise
382
+ */
383
+ static isValidDID(did) {
384
+ try {
385
+ DIDResolver.parseDID(did);
386
+ return true;
387
+ }
388
+ catch {
389
+ return false;
390
+ }
391
+ }
392
+ /**
393
+ * Extract address from DID
394
+ *
395
+ * @param did - DID to extract from
396
+ * @returns Ethereum address (lowercase)
397
+ * @throws ValidationError if DID format is invalid
398
+ */
399
+ static extractAddress(did) {
400
+ const parsed = DIDResolver.parseDID(did);
401
+ return parsed.address;
402
+ }
403
+ /**
404
+ * Extract chainId from DID
405
+ *
406
+ * @param did - DID to extract from
407
+ * @returns Chain ID
408
+ * @throws ValidationError if DID format is invalid
409
+ */
410
+ static extractChainId(did) {
411
+ const parsed = DIDResolver.parseDID(did);
412
+ return parsed.chainId;
413
+ }
414
+ /**
415
+ * Create domain-separated message to prevent cross-protocol replay attacks
416
+ *
417
+ * @param message - Original message
418
+ * @param chainId - Chain ID for domain separation
419
+ * @param did - DID for additional context binding
420
+ * @returns Domain-separated message
421
+ *
422
+ * @security
423
+ * - Binds signature to AGIRAILS protocol
424
+ * - Binds signature to specific chainId (prevents cross-chain replay)
425
+ * - Binds signature to specific DID (prevents cross-identity replay)
426
+ *
427
+ * @example
428
+ * ```typescript
429
+ * const domainMsg = this.createDomainSeparatedMessage('Hello', 84532, 'did:ethr:84532:0x...');
430
+ * // Returns: "AGIRAILS:84532:did:ethr:84532:0x...\nHello"
431
+ * ```
432
+ */
433
+ createDomainSeparatedMessage(message, chainId, did) {
434
+ return `AGIRAILS:${chainId}:${did}\n${message}`;
435
+ }
436
+ /**
437
+ * Extract Ethereum address from a verification method
438
+ *
439
+ * @param vm - Verification method from DID Document
440
+ * @returns Ethereum address (checksummed) or null if not found
441
+ *
442
+ * @security
443
+ * - Handles multiple address formats (blockchainAccountId, ethereumAddress, controller DID)
444
+ * - Validates extracted address format
445
+ * - Returns null instead of throwing for graceful error handling
446
+ *
447
+ * @example
448
+ * ```typescript
449
+ * const vm = {
450
+ * id: 'did:ethr:84532:0x123...#delegate1',
451
+ * type: 'EcdsaSecp256k1RecoveryMethod2020',
452
+ * controller: 'did:ethr:84532:0x123...',
453
+ * blockchainAccountId: '0x456...@eip155:84532'
454
+ * };
455
+ * const address = this.extractAddressFromVerificationMethod(vm);
456
+ * // Returns: '0x456...' (checksummed)
457
+ * ```
458
+ */
459
+ extractAddressFromVerificationMethod(vm) {
460
+ // Try blockchainAccountId first (CAIP-10 format: "0x123...@eip155:chainId")
461
+ if (vm.blockchainAccountId) {
462
+ const match = vm.blockchainAccountId.match(/^(0x[a-fA-F0-9]{40})@/);
463
+ if (match) {
464
+ try {
465
+ return (0, ethers_1.getAddress)(match[1]); // Checksum the address
466
+ }
467
+ catch {
468
+ return null;
469
+ }
470
+ }
471
+ }
472
+ // Try ethereumAddress field
473
+ if (vm.ethereumAddress) {
474
+ try {
475
+ return (0, ethers_1.getAddress)(vm.ethereumAddress);
476
+ }
477
+ catch {
478
+ return null;
479
+ }
480
+ }
481
+ // Try extracting from controller DID
482
+ if (vm.controller) {
483
+ try {
484
+ const { address } = DIDResolver.parseDID(vm.controller);
485
+ return (0, ethers_1.getAddress)(address); // Already lowercase, checksum it
486
+ }
487
+ catch {
488
+ return null;
489
+ }
490
+ }
491
+ return null;
492
+ }
493
+ }
494
+ exports.DIDResolver = DIDResolver;
495
+ //# sourceMappingURL=DIDResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DIDResolver.js","sourceRoot":"","sources":["../../src/protocol/DIDResolver.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { Signer } from 'ethers';
2
2
  import { DeliveryProof } from '../types';
3
+ import { IUsedAttestationTracker } from '../utils/UsedAttestationTracker';
3
4
  export interface EASConfig {
4
5
  contractAddress: string;
5
6
  deliveryProofSchemaId: string;
@@ -8,16 +9,70 @@ export interface AttestationResponse {
8
9
  uid: string;
9
10
  transactionHash: string;
10
11
  }
12
+ /**
13
+ * EASHelper - utility wrapper for Ethereum Attestation Service interactions
14
+ */
11
15
  export declare class EASHelper {
12
16
  private readonly config;
13
17
  private readonly eas;
14
- constructor(signer: Signer, config: EASConfig);
18
+ private readonly attestationTracker;
19
+ /**
20
+ * Create EASHelper instance
21
+ *
22
+ * @param signer - Ethers signer for signing attestations
23
+ * @param config - EAS configuration
24
+ * @param attestationTracker - Optional tracker for replay attack prevention (C-1 fix)
25
+ *
26
+ * SECURITY FIX (NEW-M-2): Validates schema UID format in constructor
27
+ */
28
+ constructor(signer: Signer, config: EASConfig, attestationTracker?: IUsedAttestationTracker);
29
+ /**
30
+ * Get the attestation tracker for external use
31
+ */
32
+ getAttestationTracker(): IUsedAttestationTracker;
33
+ /**
34
+ * Create an attestation for a delivery proof. Returns the attestation UID and transaction hash.
35
+ */
15
36
  attestDeliveryProof(proof: DeliveryProof, recipient: string, options?: {
16
37
  expirationTime?: number;
17
38
  revocable?: boolean;
18
39
  }): Promise<AttestationResponse>;
40
+ /**
41
+ * Revoke a previously issued attestation by UID.
42
+ */
19
43
  revokeAttestation(uid: string): Promise<string>;
20
- getAttestation(uid: string): Promise<any>;
44
+ /**
45
+ * Fetch attestation data from the EAS contract.
46
+ */
47
+ getAttestation(uid: string): Promise<import("@ethereum-attestation-service/eas-sdk").Attestation>;
48
+ /**
49
+ * Verify that a delivery attestation belongs to the specified transaction.
50
+ *
51
+ * SECURITY: ACTPKernel V1 accepts any bytes32 as attestationUID without validation.
52
+ * This means a malicious provider could submit attestation from Transaction A
53
+ * for Transaction B. This method provides SDK-side protection by verifying:
54
+ *
55
+ * 1. Attestation exists and is not revoked
56
+ * 2. Attestation uses the canonical delivery schema UID
57
+ * 3. Attestation's txId matches the expected transaction ID
58
+ * 4. Attestation has not expired
59
+ *
60
+ * @param txId - Expected transaction ID (bytes32)
61
+ * @param attestationUID - Attestation UID to verify (bytes32)
62
+ * @returns true if attestation is valid for this transaction, false otherwise
63
+ * @throws Error if attestation is revoked, expired, schema mismatch, or txId mismatch
64
+ */
21
65
  verifyDeliveryAttestation(txId: string, attestationUID: string): Promise<boolean>;
66
+ /**
67
+ * Verify attestation for escrow release with mandatory replay protection
68
+ *
69
+ * SECURITY FIX (C-4): This method MUST be called before releaseEscrow()
70
+ * to prevent attestation replay attacks.
71
+ *
72
+ * @param txId - Expected transaction ID (bytes32)
73
+ * @param attestationUID - Attestation UID to verify (bytes32)
74
+ * @throws Error if verification fails or replay attack detected
75
+ */
76
+ verifyAndRecordForRelease(txId: string, attestationUID: string): Promise<void>;
22
77
  }
23
78
  //# sourceMappingURL=EASHelper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EASHelper.d.ts","sourceRoot":"","sources":["../../src/protocol/EASHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAA0B,MAAM,QAAQ,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;CACzB;AAYD,qBAAa,SAAS;IAGQ,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAW;gBAEnB,MAAM,EAAE,MAAM,EAAmB,MAAM,EAAE,SAAS;IAOxD,mBAAmB,CACvB,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GACzD,OAAO,CAAC,mBAAmB,CAAC;IAoDzB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAY/C,cAAc,CAAC,GAAG,EAAE,MAAM;IAqB1B,yBAAyB,CAC7B,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC;CAsEpB"}
1
+ {"version":3,"file":"EASHelper.d.ts","sourceRoot":"","sources":["../../src/protocol/EASHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EACL,uBAAuB,EAExB,MAAM,iCAAiC,CAAC;AAEzC,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,SAAS;IAelB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAdzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA0B;IAE7D;;;;;;;;OAQG;gBAED,MAAM,EAAE,MAAM,EACG,MAAM,EAAE,SAAS,EAClC,kBAAkB,CAAC,EAAE,uBAAuB;IAsC9C;;OAEG;IACH,qBAAqB,IAAI,uBAAuB;IAIhD;;OAEG;IACG,mBAAmB,CACvB,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GACzD,OAAO,CAAC,mBAAmB,CAAC;IA4C/B;;OAEG;IACG,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYrD;;OAEG;IACG,cAAc,CAAC,GAAG,EAAE,MAAM;IAOhC;;;;;;;;;;;;;;;;OAgBG;IACG,yBAAyB,CAC7B,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC;IAwLnB;;;;;;;;;OASG;IACG,yBAAyB,CAC7B,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC;CAIjB"}