@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,80 @@
1
+ "use strict";
2
+ /**
3
+ * SecureNonce - Cryptographically secure nonce generation
4
+ *
5
+ * SECURITY FIX (NEW-H-3): Provides secure random nonce generation
6
+ * to prevent weak randomness vulnerabilities in EIP-712 message signing.
7
+ *
8
+ * Reference: V7 Re-Audit NEW-H-3 (Weak Random Nonce Generation)
9
+ *
10
+ * @module utils/SecureNonce
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.generateSecureNonces = exports.isValidNonce = exports.generateSecureNonce = void 0;
14
+ const ethers_1 = require("ethers");
15
+ /**
16
+ * Generate a cryptographically secure random nonce (bytes32)
17
+ *
18
+ * Uses ethers.js randomBytes() which:
19
+ * - Uses Node.js crypto.randomBytes() (CSPRNG)
20
+ * - Uses Web Crypto API in browsers (window.crypto.getRandomValues)
21
+ * - Guaranteed to be cryptographically secure
22
+ *
23
+ * @returns 32-byte hex string (0x...)
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * import { generateSecureNonce } from '@agirails/sdk';
28
+ *
29
+ * const nonce = generateSecureNonce();
30
+ * console.log(nonce); // 0x1234...abcd (64 hex chars)
31
+ * ```
32
+ */
33
+ function generateSecureNonce() {
34
+ return ethers_1.ethers.hexlify(ethers_1.ethers.randomBytes(32));
35
+ }
36
+ exports.generateSecureNonce = generateSecureNonce;
37
+ /**
38
+ * Validate nonce format (must be bytes32)
39
+ *
40
+ * @param nonce - Nonce to validate
41
+ * @returns true if valid bytes32 format
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * isValidNonce('0x' + '00'.repeat(32)); // true
46
+ * isValidNonce('0x1234'); // false (too short)
47
+ * isValidNonce('not-hex'); // false (invalid format)
48
+ * ```
49
+ */
50
+ function isValidNonce(nonce) {
51
+ return /^0x[a-fA-F0-9]{64}$/.test(nonce);
52
+ }
53
+ exports.isValidNonce = isValidNonce;
54
+ /**
55
+ * Generate an array of secure nonces
56
+ *
57
+ * @param count - Number of nonces to generate
58
+ * @returns Array of bytes32 hex strings
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * const nonces = generateSecureNonces(10);
63
+ * console.log(nonces.length); // 10
64
+ * ```
65
+ */
66
+ function generateSecureNonces(count) {
67
+ if (count <= 0) {
68
+ throw new Error('Count must be positive');
69
+ }
70
+ if (count > 10000) {
71
+ throw new Error('Count exceeds maximum allowed (10000)');
72
+ }
73
+ const nonces = [];
74
+ for (let i = 0; i < count; i++) {
75
+ nonces.push(generateSecureNonce());
76
+ }
77
+ return nonces;
78
+ }
79
+ exports.generateSecureNonces = generateSecureNonces;
80
+ //# sourceMappingURL=SecureNonce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecureNonce.js","sourceRoot":"","sources":["../../src/utils/SecureNonce.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAEH,mCAAgC;AAEhC;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAgB,mBAAmB;IACjC,OAAO,eAAM,CAAC,OAAO,CAAC,eAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AAChD,CAAC;AAFD,kDAEC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,YAAY,CAAC,KAAa;IACxC,OAAO,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC;AAFD,oCAEC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,oBAAoB,CAAC,KAAa;IAChD,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAbD,oDAaC"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Semaphore - Concurrency limiter for ACTP SDK
3
+ *
4
+ * SECURITY FIX (MEDIUM-4): Prevents unbounded concurrent execution
5
+ * which could lead to resource exhaustion (memory/CPU DoS).
6
+ *
7
+ * @module utils/Semaphore
8
+ */
9
+ /**
10
+ * Simple semaphore for limiting concurrent operations
11
+ *
12
+ * Uses a FIFO queue to ensure fair scheduling of waiting tasks.
13
+ */
14
+ export declare class Semaphore {
15
+ private permits;
16
+ private readonly maxPermits;
17
+ private readonly waitQueue;
18
+ /**
19
+ * Create a semaphore with specified concurrency limit
20
+ *
21
+ * @param maxPermits - Maximum concurrent permits (default: 10)
22
+ * @throws Error if maxPermits is not positive
23
+ */
24
+ constructor(maxPermits?: number);
25
+ /**
26
+ * Acquire a permit, waiting if necessary
27
+ *
28
+ * @param timeoutMs - Optional timeout in milliseconds (0 = no timeout)
29
+ * @returns Promise that resolves when permit is acquired
30
+ * @throws Error if timeout is exceeded
31
+ */
32
+ acquire(timeoutMs?: number): Promise<void>;
33
+ /**
34
+ * Try to acquire a permit without waiting
35
+ *
36
+ * @returns true if permit was acquired, false if none available
37
+ */
38
+ tryAcquire(): boolean;
39
+ /**
40
+ * Release a permit
41
+ *
42
+ * @throws Error if releasing more permits than acquired
43
+ */
44
+ release(): void;
45
+ /**
46
+ * Execute a function with semaphore protection
47
+ *
48
+ * Automatically acquires before execution and releases after,
49
+ * even if the function throws.
50
+ *
51
+ * @param fn - Function to execute
52
+ * @param timeoutMs - Optional timeout for acquiring permit
53
+ * @returns Result of the function
54
+ */
55
+ run<T>(fn: () => Promise<T> | T, timeoutMs?: number): Promise<T>;
56
+ /**
57
+ * Get current available permits
58
+ */
59
+ get availablePermits(): number;
60
+ /**
61
+ * Get number of waiters in queue
62
+ */
63
+ get queueLength(): number;
64
+ /**
65
+ * Get maximum permits
66
+ */
67
+ get limit(): number;
68
+ /**
69
+ * Check if semaphore is fully utilized
70
+ */
71
+ get isFull(): boolean;
72
+ /**
73
+ * Cancel all waiting tasks
74
+ *
75
+ * @param reason - Error message for rejected promises
76
+ */
77
+ cancelAll(reason?: string): void;
78
+ }
79
+ /**
80
+ * Rate limiter using sliding window algorithm
81
+ *
82
+ * SECURITY FIX (MEDIUM-4): Complements semaphore for rate-based limiting
83
+ */
84
+ export declare class RateLimiter {
85
+ private readonly timestamps;
86
+ private readonly windowMs;
87
+ private readonly maxRequests;
88
+ /**
89
+ * Create a rate limiter
90
+ *
91
+ * @param maxRequests - Maximum requests per window
92
+ * @param windowMs - Time window in milliseconds
93
+ */
94
+ constructor(maxRequests: number, windowMs: number);
95
+ /**
96
+ * Check if a request is allowed and record it
97
+ *
98
+ * @returns true if request is allowed, false if rate limited
99
+ */
100
+ tryAcquire(): boolean;
101
+ /**
102
+ * Wait until a request is allowed
103
+ *
104
+ * @param timeoutMs - Optional timeout
105
+ * @returns Promise that resolves when request is allowed
106
+ */
107
+ acquire(timeoutMs?: number): Promise<void>;
108
+ /**
109
+ * Get time until next slot is available
110
+ *
111
+ * @returns Milliseconds until next slot, or 0 if slot available
112
+ */
113
+ timeUntilNextSlot(): number;
114
+ /**
115
+ * Get current usage stats
116
+ */
117
+ get stats(): {
118
+ current: number;
119
+ max: number;
120
+ windowMs: number;
121
+ };
122
+ }
123
+ //# sourceMappingURL=Semaphore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Semaphore.d.ts","sourceRoot":"","sources":["../../src/utils/Semaphore.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;GAIG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAGlB;IAER;;;;;OAKG;gBACS,UAAU,GAAE,MAAW;IAQnC;;;;;;OAMG;IACG,OAAO,CAAC,SAAS,GAAE,MAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BnD;;;;OAIG;IACH,UAAU,IAAI,OAAO;IAQrB;;;;OAIG;IACH,OAAO,IAAI,IAAI;IAcf;;;;;;;;;OASG;IACG,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,SAAS,GAAE,MAAU,GAAG,OAAO,CAAC,CAAC,CAAC;IASzE;;OAEG;IACH,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED;;;;OAIG;IACH,SAAS,CAAC,MAAM,GAAE,MAA8B,GAAG,IAAI;CAMxD;AAED;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAErC;;;;;OAKG;gBACS,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAWjD;;;;OAIG;IACH,UAAU,IAAI,OAAO;IAmBrB;;;;;OAKG;IACG,OAAO,CAAC,SAAS,GAAE,MAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAcnD;;;;OAIG;IACH,iBAAiB,IAAI,MAAM;IAgB3B;;OAEG;IACH,IAAI,KAAK,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAa9D;CACF"}
@@ -0,0 +1,247 @@
1
+ "use strict";
2
+ /**
3
+ * Semaphore - Concurrency limiter for ACTP SDK
4
+ *
5
+ * SECURITY FIX (MEDIUM-4): Prevents unbounded concurrent execution
6
+ * which could lead to resource exhaustion (memory/CPU DoS).
7
+ *
8
+ * @module utils/Semaphore
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.RateLimiter = exports.Semaphore = void 0;
12
+ /**
13
+ * Simple semaphore for limiting concurrent operations
14
+ *
15
+ * Uses a FIFO queue to ensure fair scheduling of waiting tasks.
16
+ */
17
+ class Semaphore {
18
+ /**
19
+ * Create a semaphore with specified concurrency limit
20
+ *
21
+ * @param maxPermits - Maximum concurrent permits (default: 10)
22
+ * @throws Error if maxPermits is not positive
23
+ */
24
+ constructor(maxPermits = 10) {
25
+ this.waitQueue = [];
26
+ if (maxPermits <= 0 || !Number.isInteger(maxPermits)) {
27
+ throw new Error(`maxPermits must be a positive integer, got: ${maxPermits}`);
28
+ }
29
+ this.maxPermits = maxPermits;
30
+ this.permits = maxPermits;
31
+ }
32
+ /**
33
+ * Acquire a permit, waiting if necessary
34
+ *
35
+ * @param timeoutMs - Optional timeout in milliseconds (0 = no timeout)
36
+ * @returns Promise that resolves when permit is acquired
37
+ * @throws Error if timeout is exceeded
38
+ */
39
+ async acquire(timeoutMs = 0) {
40
+ if (this.permits > 0) {
41
+ this.permits--;
42
+ return;
43
+ }
44
+ // No permits available, queue the request
45
+ return new Promise((resolve, reject) => {
46
+ const waiter = { resolve, reject };
47
+ this.waitQueue.push(waiter);
48
+ // Set up timeout if specified
49
+ if (timeoutMs > 0) {
50
+ const timeoutId = setTimeout(() => {
51
+ const index = this.waitQueue.indexOf(waiter);
52
+ if (index >= 0) {
53
+ this.waitQueue.splice(index, 1);
54
+ reject(new Error(`Semaphore acquire timeout after ${timeoutMs}ms`));
55
+ }
56
+ }, timeoutMs);
57
+ // Clear timeout when resolved
58
+ const originalResolve = waiter.resolve;
59
+ waiter.resolve = () => {
60
+ clearTimeout(timeoutId);
61
+ originalResolve();
62
+ };
63
+ }
64
+ });
65
+ }
66
+ /**
67
+ * Try to acquire a permit without waiting
68
+ *
69
+ * @returns true if permit was acquired, false if none available
70
+ */
71
+ tryAcquire() {
72
+ if (this.permits > 0) {
73
+ this.permits--;
74
+ return true;
75
+ }
76
+ return false;
77
+ }
78
+ /**
79
+ * Release a permit
80
+ *
81
+ * @throws Error if releasing more permits than acquired
82
+ */
83
+ release() {
84
+ if (this.permits >= this.maxPermits) {
85
+ throw new Error('Cannot release: no permits held');
86
+ }
87
+ // If there are waiters, give permit to first in queue (FIFO)
88
+ if (this.waitQueue.length > 0) {
89
+ const waiter = this.waitQueue.shift();
90
+ waiter.resolve();
91
+ }
92
+ else {
93
+ this.permits++;
94
+ }
95
+ }
96
+ /**
97
+ * Execute a function with semaphore protection
98
+ *
99
+ * Automatically acquires before execution and releases after,
100
+ * even if the function throws.
101
+ *
102
+ * @param fn - Function to execute
103
+ * @param timeoutMs - Optional timeout for acquiring permit
104
+ * @returns Result of the function
105
+ */
106
+ async run(fn, timeoutMs = 0) {
107
+ await this.acquire(timeoutMs);
108
+ try {
109
+ return await fn();
110
+ }
111
+ finally {
112
+ this.release();
113
+ }
114
+ }
115
+ /**
116
+ * Get current available permits
117
+ */
118
+ get availablePermits() {
119
+ return this.permits;
120
+ }
121
+ /**
122
+ * Get number of waiters in queue
123
+ */
124
+ get queueLength() {
125
+ return this.waitQueue.length;
126
+ }
127
+ /**
128
+ * Get maximum permits
129
+ */
130
+ get limit() {
131
+ return this.maxPermits;
132
+ }
133
+ /**
134
+ * Check if semaphore is fully utilized
135
+ */
136
+ get isFull() {
137
+ return this.permits === 0;
138
+ }
139
+ /**
140
+ * Cancel all waiting tasks
141
+ *
142
+ * @param reason - Error message for rejected promises
143
+ */
144
+ cancelAll(reason = 'Semaphore cancelled') {
145
+ while (this.waitQueue.length > 0) {
146
+ const waiter = this.waitQueue.shift();
147
+ waiter.reject(new Error(reason));
148
+ }
149
+ }
150
+ }
151
+ exports.Semaphore = Semaphore;
152
+ /**
153
+ * Rate limiter using sliding window algorithm
154
+ *
155
+ * SECURITY FIX (MEDIUM-4): Complements semaphore for rate-based limiting
156
+ */
157
+ class RateLimiter {
158
+ /**
159
+ * Create a rate limiter
160
+ *
161
+ * @param maxRequests - Maximum requests per window
162
+ * @param windowMs - Time window in milliseconds
163
+ */
164
+ constructor(maxRequests, windowMs) {
165
+ this.timestamps = [];
166
+ if (maxRequests <= 0) {
167
+ throw new Error('maxRequests must be positive');
168
+ }
169
+ if (windowMs <= 0) {
170
+ throw new Error('windowMs must be positive');
171
+ }
172
+ this.maxRequests = maxRequests;
173
+ this.windowMs = windowMs;
174
+ }
175
+ /**
176
+ * Check if a request is allowed and record it
177
+ *
178
+ * @returns true if request is allowed, false if rate limited
179
+ */
180
+ tryAcquire() {
181
+ const now = Date.now();
182
+ const windowStart = now - this.windowMs;
183
+ // Remove timestamps outside the window
184
+ while (this.timestamps.length > 0 && this.timestamps[0] < windowStart) {
185
+ this.timestamps.shift();
186
+ }
187
+ // Check if we're at the limit
188
+ if (this.timestamps.length >= this.maxRequests) {
189
+ return false;
190
+ }
191
+ // Record this request
192
+ this.timestamps.push(now);
193
+ return true;
194
+ }
195
+ /**
196
+ * Wait until a request is allowed
197
+ *
198
+ * @param timeoutMs - Optional timeout
199
+ * @returns Promise that resolves when request is allowed
200
+ */
201
+ async acquire(timeoutMs = 0) {
202
+ const startTime = Date.now();
203
+ while (!this.tryAcquire()) {
204
+ if (timeoutMs > 0 && Date.now() - startTime >= timeoutMs) {
205
+ throw new Error(`Rate limiter timeout after ${timeoutMs}ms`);
206
+ }
207
+ // Wait a short time before retrying
208
+ const waitTime = Math.min(100, this.timeUntilNextSlot());
209
+ await new Promise((resolve) => setTimeout(resolve, waitTime));
210
+ }
211
+ }
212
+ /**
213
+ * Get time until next slot is available
214
+ *
215
+ * @returns Milliseconds until next slot, or 0 if slot available
216
+ */
217
+ timeUntilNextSlot() {
218
+ if (this.timestamps.length < this.maxRequests) {
219
+ return 0;
220
+ }
221
+ const now = Date.now();
222
+ const windowStart = now - this.windowMs;
223
+ const oldestTimestamp = this.timestamps[0];
224
+ if (oldestTimestamp <= windowStart) {
225
+ return 0;
226
+ }
227
+ return oldestTimestamp - windowStart;
228
+ }
229
+ /**
230
+ * Get current usage stats
231
+ */
232
+ get stats() {
233
+ // Clean up old timestamps
234
+ const now = Date.now();
235
+ const windowStart = now - this.windowMs;
236
+ while (this.timestamps.length > 0 && this.timestamps[0] < windowStart) {
237
+ this.timestamps.shift();
238
+ }
239
+ return {
240
+ current: this.timestamps.length,
241
+ max: this.maxRequests,
242
+ windowMs: this.windowMs,
243
+ };
244
+ }
245
+ }
246
+ exports.RateLimiter = RateLimiter;
247
+ //# sourceMappingURL=Semaphore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Semaphore.js","sourceRoot":"","sources":["../../src/utils/Semaphore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * UsedAttestationTracker - Prevents EAS Attestation Replay Attacks (C-1)
3
+ *
4
+ * Tracks which attestation UIDs have been used for which transaction IDs.
5
+ * This prevents a malicious provider from reusing an attestation from
6
+ * Transaction A to settle Transaction B.
7
+ *
8
+ * SECURITY: ACTPKernel V1 contract accepts any attestationUID without validation.
9
+ * This tracker provides SDK-side protection until contract is upgraded.
10
+ *
11
+ * @module utils/UsedAttestationTracker
12
+ */
13
+ /**
14
+ * Interface for tracking used attestations
15
+ */
16
+ export interface IUsedAttestationTracker {
17
+ /**
18
+ * Record that an attestation was used for a transaction
19
+ * @param attestationUID - EAS attestation UID (bytes32)
20
+ * @param txId - Transaction ID (bytes32)
21
+ * @returns true if recorded, false if already used for different transaction
22
+ *
23
+ * SECURITY FIX (HIGH-1): This method is now async to ensure persistence completes
24
+ * before returning. Use recordUsageSync() for fire-and-forget behavior.
25
+ */
26
+ recordUsage(attestationUID: string, txId: string): Promise<boolean>;
27
+ /**
28
+ * Check if attestation has been used
29
+ * @param attestationUID - EAS attestation UID (bytes32)
30
+ * @returns Transaction ID if used, null if not used
31
+ */
32
+ getUsageForAttestation(attestationUID: string): string | null;
33
+ /**
34
+ * Check if attestation is valid for transaction
35
+ * @param attestationUID - EAS attestation UID
36
+ * @param txId - Transaction ID
37
+ * @returns true if attestation is unused or already used for this txId
38
+ */
39
+ isValidForTransaction(attestationUID: string, txId: string): boolean;
40
+ /**
41
+ * Clear all tracked attestations
42
+ */
43
+ clear(): void;
44
+ }
45
+ /**
46
+ * In-Memory Used Attestation Tracker
47
+ *
48
+ * SECURITY FIX (C-1): Prevents attestation replay attacks by tracking
49
+ * which attestation UIDs have been used for which transactions.
50
+ *
51
+ * SECURITY FIX (NEW-H-2): LRU-style cache with max size to prevent DoS
52
+ *
53
+ * WARNING: In-memory only. For production:
54
+ * - Use persistent storage (Redis, PostgreSQL, etc.)
55
+ * - Implement recovery from blockchain events
56
+ */
57
+ export declare class InMemoryUsedAttestationTracker implements IUsedAttestationTracker {
58
+ private usedAttestations;
59
+ private readonly maxSize;
60
+ /**
61
+ * Create in-memory tracker with optional max size
62
+ * @param maxSize - Maximum entries to store (default: 100,000)
63
+ */
64
+ constructor(maxSize?: number);
65
+ /**
66
+ * Record that an attestation was used for a transaction
67
+ * @param attestationUID - EAS attestation UID (bytes32)
68
+ * @param txId - Transaction ID (bytes32)
69
+ * @returns true if recorded, false if already used for different transaction
70
+ *
71
+ * SECURITY FIX (NEW-H-2): LRU eviction when max size reached
72
+ * SECURITY FIX (HIGH-1): Now async for interface consistency
73
+ */
74
+ recordUsage(attestationUID: string, txId: string): Promise<boolean>;
75
+ /**
76
+ * Synchronous version of recordUsage (for backward compatibility)
77
+ * @param attestationUID - EAS attestation UID (bytes32)
78
+ * @param txId - Transaction ID (bytes32)
79
+ * @returns true if recorded, false if already used for different transaction
80
+ */
81
+ recordUsageSync(attestationUID: string, txId: string): boolean;
82
+ /**
83
+ * Check if attestation has been used
84
+ * @param attestationUID - EAS attestation UID (bytes32)
85
+ * @returns Transaction ID if used, null if not used
86
+ *
87
+ * SECURITY FIX (MEDIUM-4): Updates access order for true LRU behavior
88
+ * Accessed items are moved to end of Map (most recently used)
89
+ */
90
+ getUsageForAttestation(attestationUID: string): string | null;
91
+ /**
92
+ * Check if attestation is valid for transaction
93
+ * @param attestationUID - EAS attestation UID
94
+ * @param txId - Transaction ID
95
+ * @returns true if attestation is unused or already used for this txId
96
+ *
97
+ * SECURITY FIX (MEDIUM-4): Updates access order for true LRU behavior
98
+ */
99
+ isValidForTransaction(attestationUID: string, txId: string): boolean;
100
+ /**
101
+ * Clear all tracked attestations
102
+ */
103
+ clear(): void;
104
+ /**
105
+ * Get all tracked attestations (for debugging/persistence)
106
+ */
107
+ getAllUsages(): Record<string, string>;
108
+ /**
109
+ * Get count of tracked attestations
110
+ */
111
+ getCount(): number;
112
+ /**
113
+ * Cleanup old entries based on timestamp (optional)
114
+ *
115
+ * SECURITY FIX (NEW-H-2): Manual cleanup for old entries
116
+ * Note: This requires external timestamp tracking. For automatic cleanup,
117
+ * use FileBasedUsedAttestationTracker with periodic cleanup.
118
+ *
119
+ * @param maxAgeHours - Remove entries older than this many hours
120
+ */
121
+ cleanupOldEntries(maxAgeHours: number): number;
122
+ }
123
+ /**
124
+ * File-based Used Attestation Tracker for persistence
125
+ *
126
+ * SECURITY FIX (C-1): Persistent storage for attestation tracking
127
+ * SECURITY FIX (NEW-H-4): File locking to prevent concurrent write corruption
128
+ *
129
+ * Survives process restarts.
130
+ */
131
+ export declare class FileBasedUsedAttestationTracker implements IUsedAttestationTracker {
132
+ private inMemory;
133
+ private filePath;
134
+ private fs;
135
+ private path;
136
+ private lockfile;
137
+ constructor(stateDirectory: string);
138
+ private loadFromFile;
139
+ /**
140
+ * Save data to file with file locking
141
+ *
142
+ * SECURITY FIX (NEW-H-4): File locking prevents concurrent write corruption
143
+ * SECURITY FIX (NEW-HIGH-1): Create file before locking if it doesn't exist
144
+ */
145
+ private saveToFile;
146
+ /**
147
+ * Record attestation usage with guaranteed persistence
148
+ *
149
+ * SECURITY FIX (HIGH-1): Now properly awaits persistence to prevent data loss
150
+ */
151
+ recordUsage(attestationUID: string, txId: string): Promise<boolean>;
152
+ /**
153
+ * Fire-and-forget version for backward compatibility
154
+ * WARNING: May lose data if process crashes before save completes
155
+ */
156
+ recordUsageSync(attestationUID: string, txId: string): boolean;
157
+ getUsageForAttestation(attestationUID: string): string | null;
158
+ isValidForTransaction(attestationUID: string, txId: string): boolean;
159
+ clear(): void;
160
+ }
161
+ /**
162
+ * Factory to create attestation tracker
163
+ * @param stateDirectory - Optional directory for persistent storage
164
+ * @returns IUsedAttestationTracker instance
165
+ */
166
+ export declare function createUsedAttestationTracker(stateDirectory?: string): IUsedAttestationTracker;
167
+ //# sourceMappingURL=UsedAttestationTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UsedAttestationTracker.d.ts","sourceRoot":"","sources":["../../src/utils/UsedAttestationTracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;;;;;OAQG;IACH,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpE;;;;OAIG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAE9D;;;;;OAKG;IACH,qBAAqB,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAErE;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,8BAA+B,YAAW,uBAAuB;IAE5E,OAAO,CAAC,gBAAgB,CAAkC;IAG1D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC;;;OAGG;gBACS,OAAO,GAAE,MAAe;IAOpC;;;;;;;;OAQG;IACG,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzE;;;;;OAKG;IACH,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IA4B9D;;;;;;;OAOG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAc7D;;;;;;;OAOG;IACH,qBAAqB,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAgBpE;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAItC;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;;;;;;;OAQG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;CAS/C;AAED;;;;;;;GAOG;AACH,qBAAa,+BAAgC,YAAW,uBAAuB;IAC7E,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,EAAE,CAAsB;IAChC,OAAO,CAAC,IAAI,CAAwB;IACpC,OAAO,CAAC,QAAQ,CAAmC;gBAEvC,cAAc,EAAE,MAAM;IAiBlC,OAAO,CAAC,YAAY;IA6BpB;;;;;OAKG;YACW,UAAU;IAgDxB;;;;OAIG;IACG,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASzE;;;OAGG;IACH,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAU9D,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI7D,qBAAqB,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAIpE,KAAK,IAAI,IAAI;CAMd;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,cAAc,CAAC,EAAE,MAAM,GACtB,uBAAuB,CAKzB"}