@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,51 @@
1
+ "use strict";
2
+ /**
3
+ * ACTP SDK Utilities
4
+ *
5
+ * This module exports all utility classes for the ACTP SDK.
6
+ *
7
+ * @module utils
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.DisputeWindow = exports.State = exports.Bytes32 = exports.Address = exports.Deadline = exports.USDC = exports.createUsedAttestationTracker = exports.FileBasedUsedAttestationTracker = exports.InMemoryUsedAttestationTracker = exports.createReceivedNonceTracker = exports.SetBasedReceivedNonceTracker = exports.InMemoryReceivedNonceTracker = exports.shutdownSDK = exports.registerDisposable = exports.onShutdown = exports.sdkLifecycle = exports.SDKLifecycle = exports.sdkMetrics = exports.sdkLogger = exports.MetricsCollector = exports.Logger = exports.APIProtector = exports.CircuitBreaker = exports.RateLimiter = exports.withRecoveryGuidance = exports.ErrorRecoveryGuide = void 0;
11
+ // Error Recovery (HIGH-6)
12
+ var ErrorRecoveryGuide_1 = require("./ErrorRecoveryGuide");
13
+ Object.defineProperty(exports, "ErrorRecoveryGuide", { enumerable: true, get: function () { return ErrorRecoveryGuide_1.ErrorRecoveryGuide; } });
14
+ Object.defineProperty(exports, "withRecoveryGuidance", { enumerable: true, get: function () { return ErrorRecoveryGuide_1.withRecoveryGuidance; } });
15
+ // Rate Limiting & Circuit Breaker (M-4, M-5)
16
+ var RateLimiter_1 = require("./RateLimiter");
17
+ Object.defineProperty(exports, "RateLimiter", { enumerable: true, get: function () { return RateLimiter_1.RateLimiter; } });
18
+ Object.defineProperty(exports, "CircuitBreaker", { enumerable: true, get: function () { return RateLimiter_1.CircuitBreaker; } });
19
+ Object.defineProperty(exports, "APIProtector", { enumerable: true, get: function () { return RateLimiter_1.APIProtector; } });
20
+ // Logging & Metrics (M-6, M-7)
21
+ var Logger_1 = require("./Logger");
22
+ Object.defineProperty(exports, "Logger", { enumerable: true, get: function () { return Logger_1.Logger; } });
23
+ Object.defineProperty(exports, "MetricsCollector", { enumerable: true, get: function () { return Logger_1.MetricsCollector; } });
24
+ Object.defineProperty(exports, "sdkLogger", { enumerable: true, get: function () { return Logger_1.sdkLogger; } });
25
+ Object.defineProperty(exports, "sdkMetrics", { enumerable: true, get: function () { return Logger_1.sdkMetrics; } });
26
+ // SDK Lifecycle (M-8)
27
+ var SDKLifecycle_1 = require("./SDKLifecycle");
28
+ Object.defineProperty(exports, "SDKLifecycle", { enumerable: true, get: function () { return SDKLifecycle_1.SDKLifecycle; } });
29
+ Object.defineProperty(exports, "sdkLifecycle", { enumerable: true, get: function () { return SDKLifecycle_1.sdkLifecycle; } });
30
+ Object.defineProperty(exports, "onShutdown", { enumerable: true, get: function () { return SDKLifecycle_1.onShutdown; } });
31
+ Object.defineProperty(exports, "registerDisposable", { enumerable: true, get: function () { return SDKLifecycle_1.registerDisposable; } });
32
+ Object.defineProperty(exports, "shutdownSDK", { enumerable: true, get: function () { return SDKLifecycle_1.shutdownSDK; } });
33
+ // Nonce Tracking (Security)
34
+ var ReceivedNonceTracker_1 = require("./ReceivedNonceTracker");
35
+ Object.defineProperty(exports, "InMemoryReceivedNonceTracker", { enumerable: true, get: function () { return ReceivedNonceTracker_1.InMemoryReceivedNonceTracker; } });
36
+ Object.defineProperty(exports, "SetBasedReceivedNonceTracker", { enumerable: true, get: function () { return ReceivedNonceTracker_1.SetBasedReceivedNonceTracker; } });
37
+ Object.defineProperty(exports, "createReceivedNonceTracker", { enumerable: true, get: function () { return ReceivedNonceTracker_1.createReceivedNonceTracker; } });
38
+ // Attestation Tracking (Security)
39
+ var UsedAttestationTracker_1 = require("./UsedAttestationTracker");
40
+ Object.defineProperty(exports, "InMemoryUsedAttestationTracker", { enumerable: true, get: function () { return UsedAttestationTracker_1.InMemoryUsedAttestationTracker; } });
41
+ Object.defineProperty(exports, "FileBasedUsedAttestationTracker", { enumerable: true, get: function () { return UsedAttestationTracker_1.FileBasedUsedAttestationTracker; } });
42
+ Object.defineProperty(exports, "createUsedAttestationTracker", { enumerable: true, get: function () { return UsedAttestationTracker_1.createUsedAttestationTracker; } });
43
+ // Helper Utilities (L-7)
44
+ var Helpers_1 = require("./Helpers");
45
+ Object.defineProperty(exports, "USDC", { enumerable: true, get: function () { return Helpers_1.USDC; } });
46
+ Object.defineProperty(exports, "Deadline", { enumerable: true, get: function () { return Helpers_1.Deadline; } });
47
+ Object.defineProperty(exports, "Address", { enumerable: true, get: function () { return Helpers_1.Address; } });
48
+ Object.defineProperty(exports, "Bytes32", { enumerable: true, get: function () { return Helpers_1.Bytes32; } });
49
+ Object.defineProperty(exports, "State", { enumerable: true, get: function () { return Helpers_1.State; } });
50
+ Object.defineProperty(exports, "DisputeWindow", { enumerable: true, get: function () { return Helpers_1.DisputeWindow; } });
51
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,0BAA0B;AAC1B,2DAM8B;AAL5B,wHAAA,kBAAkB,OAAA;AAClB,0HAAA,oBAAoB,OAAA;AAMtB,6CAA6C;AAC7C,6CASuB;AARrB,0GAAA,WAAW,OAAA;AACX,6GAAA,cAAc,OAAA;AACd,2GAAA,YAAY,OAAA;AAQd,+BAA+B;AAC/B,mCASkB;AARhB,gGAAA,MAAM,OAAA;AACN,0GAAA,gBAAgB,OAAA;AAChB,mGAAA,SAAS,OAAA;AACT,oGAAA,UAAU,OAAA;AAOZ,sBAAsB;AACtB,+CAUwB;AATtB,4GAAA,YAAY,OAAA;AACZ,4GAAA,YAAY,OAAA;AACZ,0GAAA,UAAU,OAAA;AACV,kHAAA,kBAAkB,OAAA;AAClB,2GAAA,WAAW,OAAA;AAOb,4BAA4B;AAC5B,+DAMgC;AAL9B,oIAAA,4BAA4B,OAAA;AAC5B,oIAAA,4BAA4B,OAAA;AAC5B,kIAAA,0BAA0B,OAAA;AAK5B,kCAAkC;AAClC,mEAKkC;AAJhC,wIAAA,8BAA8B,OAAA;AAC9B,yIAAA,+BAA+B,OAAA;AAC/B,sIAAA,4BAA4B,OAAA;AAI9B,yBAAyB;AACzB,qCAOmB;AANjB,+FAAA,IAAI,OAAA;AACJ,mGAAA,QAAQ,OAAA;AACR,kGAAA,OAAO,OAAA;AACP,kGAAA,OAAO,OAAA;AACP,gGAAA,KAAK,OAAA;AACL,wGAAA,aAAa,OAAA"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Security Utilities for ACTP SDK
3
+ *
4
+ * SECURITY FIXES:
5
+ * - H-7: Constant-time string comparison (timing attack prevention)
6
+ * - H-6: Path traversal prevention
7
+ * - H-2: Input validation and sanitization
8
+ * - C-3: Safe JSON parsing with schema validation
9
+ *
10
+ * @module utils/security
11
+ */
12
+ /**
13
+ * H-7: Constant-time string comparison to prevent timing attacks
14
+ *
15
+ * Never use === for comparing signatures, hashes, or other security-sensitive strings
16
+ * as it can leak timing information that attackers can exploit.
17
+ *
18
+ * @param a - First string to compare
19
+ * @param b - Second string to compare
20
+ * @returns true if strings are equal, false otherwise
21
+ */
22
+ export declare function timingSafeEqual(a: string, b: string): boolean;
23
+ /**
24
+ * H-6: Validate and sanitize directory path to prevent path traversal
25
+ *
26
+ * Ensures that the provided path:
27
+ * 1. Does not contain '..' sequences
28
+ * 2. Resolves to a location within the allowed base directory
29
+ * 3. Does not follow symlinks (optional)
30
+ *
31
+ * @param requestedPath - The path to validate
32
+ * @param baseDirectory - The base directory to restrict paths to
33
+ * @returns Sanitized absolute path
34
+ * @throws Error if path is invalid or contains traversal attempts
35
+ */
36
+ export declare function validatePath(requestedPath: string, baseDirectory: string): string;
37
+ /**
38
+ * H-2: Validate and sanitize service name
39
+ *
40
+ * Ensures service name:
41
+ * 1. Contains only safe characters (alphanumeric, dash, dot, underscore)
42
+ * 2. Does not exceed maximum length
43
+ * 3. Does not contain special characters that could cause injection
44
+ *
45
+ * @param serviceName - The service name to validate
46
+ * @returns Sanitized service name
47
+ * @throws Error if service name is invalid
48
+ */
49
+ export declare function validateServiceName(serviceName: string): string;
50
+ /**
51
+ * H-5: Validate Ethereum address format
52
+ *
53
+ * Ensures address:
54
+ * 1. Is a valid hex string
55
+ * 2. Has correct length (42 chars including '0x' prefix)
56
+ * 3. Uses valid checksum if provided (EIP-55)
57
+ *
58
+ * @param address - The Ethereum address to validate
59
+ * @returns true if address is valid, false otherwise
60
+ */
61
+ export declare function isValidAddress(address: string): boolean;
62
+ /**
63
+ * C-3: Safe JSON parsing with schema validation
64
+ *
65
+ * Prevents code injection and prototype pollution attacks by:
66
+ * 1. Safely parsing JSON with error handling
67
+ * 2. Validating the parsed object against an expected schema
68
+ * 3. Removing __proto__, constructor, and prototype properties
69
+ * 4. Returning only whitelisted fields
70
+ *
71
+ * @param jsonString - The JSON string to parse
72
+ * @param schema - Expected schema (object with field names and types)
73
+ * @returns Parsed and validated object, or null if invalid
74
+ */
75
+ export declare function safeJSONParse<T = any>(jsonString: string, schema?: Record<string, string>): T | null;
76
+ /**
77
+ * LRU (Least Recently Used) cache with maximum size
78
+ * Used for preventing unbounded memory growth
79
+ *
80
+ * @template K - Key type
81
+ * @template V - Value type
82
+ */
83
+ export declare class LRUCache<K, V> {
84
+ private cache;
85
+ private readonly maxSize;
86
+ constructor(maxSize?: number);
87
+ /**
88
+ * Get value from cache
89
+ *
90
+ * @param key - Cache key
91
+ * @returns Cached value or undefined
92
+ */
93
+ get(key: K): V | undefined;
94
+ /**
95
+ * Set value in cache
96
+ *
97
+ * @param key - Cache key
98
+ * @param value - Value to cache
99
+ */
100
+ set(key: K, value: V): void;
101
+ /**
102
+ * Check if key exists in cache
103
+ *
104
+ * SECURITY FIX (N-1): Use Map's native has() instead of get()
105
+ * to avoid modifying LRU order on read-only operations.
106
+ *
107
+ * @param key - Cache key
108
+ * @returns true if key exists
109
+ */
110
+ has(key: K): boolean;
111
+ /**
112
+ * Delete key from cache
113
+ *
114
+ * @param key - Cache key
115
+ */
116
+ delete(key: K): void;
117
+ /**
118
+ * Clear all entries
119
+ */
120
+ clear(): void;
121
+ /**
122
+ * Get current cache size
123
+ */
124
+ get size(): number;
125
+ /**
126
+ * Get all values from cache
127
+ *
128
+ * SECURITY FIX (N-2): Add iterator support for LRUCache.
129
+ * Returns values in LRU order (oldest to newest).
130
+ *
131
+ * @returns Array of all cached values
132
+ */
133
+ values(): V[];
134
+ /**
135
+ * Get all keys from cache
136
+ *
137
+ * @returns Array of all cached keys
138
+ */
139
+ keys(): K[];
140
+ /**
141
+ * Get all entries from cache
142
+ *
143
+ * @returns Array of all cached [key, value] pairs
144
+ */
145
+ entries(): [K, V][];
146
+ }
147
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/utils/security.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAkB7D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CA4BjF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAgC/D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAyBvD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,CAAC,GAAG,GAAG,EACnC,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,CAAC,GAAG,IAAI,CAoEV;AAqCD;;;;;;GAMG;AACH,qBAAa,QAAQ,CAAC,CAAC,EAAE,CAAC;IACxB,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,GAAE,MAAa;IAOlC;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAU1B;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAmB3B;;;;;;;;OAQG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIpB;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI;IAIpB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;;;OAOG;IACH,MAAM,IAAI,CAAC,EAAE;IAIb;;;;OAIG;IACH,IAAI,IAAI,CAAC,EAAE;IAIX;;;;OAIG;IACH,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;CAGpB"}
@@ -0,0 +1,391 @@
1
+ "use strict";
2
+ /**
3
+ * Security Utilities for ACTP SDK
4
+ *
5
+ * SECURITY FIXES:
6
+ * - H-7: Constant-time string comparison (timing attack prevention)
7
+ * - H-6: Path traversal prevention
8
+ * - H-2: Input validation and sanitization
9
+ * - C-3: Safe JSON parsing with schema validation
10
+ *
11
+ * @module utils/security
12
+ */
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.LRUCache = exports.safeJSONParse = exports.isValidAddress = exports.validateServiceName = exports.validatePath = exports.timingSafeEqual = void 0;
38
+ const crypto = __importStar(require("crypto"));
39
+ const path = __importStar(require("path"));
40
+ /**
41
+ * H-7: Constant-time string comparison to prevent timing attacks
42
+ *
43
+ * Never use === for comparing signatures, hashes, or other security-sensitive strings
44
+ * as it can leak timing information that attackers can exploit.
45
+ *
46
+ * @param a - First string to compare
47
+ * @param b - Second string to compare
48
+ * @returns true if strings are equal, false otherwise
49
+ */
50
+ function timingSafeEqual(a, b) {
51
+ if (typeof a !== 'string' || typeof b !== 'string') {
52
+ return false;
53
+ }
54
+ // Convert to buffers for crypto.timingSafeEqual
55
+ const bufA = Buffer.from(a);
56
+ const bufB = Buffer.from(b);
57
+ // If lengths differ, still use timingSafeEqual to prevent timing leaks
58
+ if (bufA.length !== bufB.length) {
59
+ // Compare against a dummy buffer of the same length to maintain constant time
60
+ const dummy = Buffer.alloc(bufA.length);
61
+ crypto.timingSafeEqual(bufA, dummy);
62
+ return false;
63
+ }
64
+ return crypto.timingSafeEqual(bufA, bufB);
65
+ }
66
+ exports.timingSafeEqual = timingSafeEqual;
67
+ /**
68
+ * H-6: Validate and sanitize directory path to prevent path traversal
69
+ *
70
+ * Ensures that the provided path:
71
+ * 1. Does not contain '..' sequences
72
+ * 2. Resolves to a location within the allowed base directory
73
+ * 3. Does not follow symlinks (optional)
74
+ *
75
+ * @param requestedPath - The path to validate
76
+ * @param baseDirectory - The base directory to restrict paths to
77
+ * @returns Sanitized absolute path
78
+ * @throws Error if path is invalid or contains traversal attempts
79
+ */
80
+ function validatePath(requestedPath, baseDirectory) {
81
+ // Check for null bytes (can be used to bypass security checks)
82
+ if (requestedPath.includes('\0')) {
83
+ throw new Error('Invalid path: null byte detected');
84
+ }
85
+ // Normalize the path BEFORE checking for '..'
86
+ // This prevents tricks like '.../...//' or 'foo/../../../etc/passwd'
87
+ const normalized = path.normalize(requestedPath);
88
+ // Check for '..' sequences after normalization
89
+ if (normalized.includes('..')) {
90
+ throw new Error('Invalid path: path traversal detected (..)');
91
+ }
92
+ // Resolve to absolute path
93
+ const absolute = path.resolve(baseDirectory, normalized);
94
+ // Ensure the resolved path is still within the base directory
95
+ // This prevents attacks like:
96
+ // - Symlink following to escape the directory
97
+ // - Absolute paths that ignore the base directory
98
+ const normalizedBase = path.resolve(baseDirectory);
99
+ if (!absolute.startsWith(normalizedBase + path.sep) && absolute !== normalizedBase) {
100
+ throw new Error(`Invalid path: resolved path '${absolute}' is outside base directory '${normalizedBase}'`);
101
+ }
102
+ return absolute;
103
+ }
104
+ exports.validatePath = validatePath;
105
+ /**
106
+ * H-2: Validate and sanitize service name
107
+ *
108
+ * Ensures service name:
109
+ * 1. Contains only safe characters (alphanumeric, dash, dot, underscore)
110
+ * 2. Does not exceed maximum length
111
+ * 3. Does not contain special characters that could cause injection
112
+ *
113
+ * @param serviceName - The service name to validate
114
+ * @returns Sanitized service name
115
+ * @throws Error if service name is invalid
116
+ */
117
+ function validateServiceName(serviceName) {
118
+ if (!serviceName || typeof serviceName !== 'string') {
119
+ throw new Error('Invalid service name: must be a non-empty string');
120
+ }
121
+ // Trim whitespace
122
+ const trimmed = serviceName.trim();
123
+ // Check length (max 256 chars)
124
+ if (trimmed.length === 0) {
125
+ throw new Error('Invalid service name: cannot be empty');
126
+ }
127
+ if (trimmed.length > 256) {
128
+ throw new Error('Invalid service name: exceeds maximum length of 256 characters');
129
+ }
130
+ // Validate format: alphanumeric, dash, dot, underscore only
131
+ // This prevents injection attacks and ensures compatibility across systems
132
+ const validPattern = /^[a-zA-Z0-9._-]+$/;
133
+ if (!validPattern.test(trimmed)) {
134
+ throw new Error('Invalid service name: only alphanumeric characters, dots, dashes, and underscores are allowed');
135
+ }
136
+ // Prevent names that could cause issues
137
+ if (trimmed === '.' || trimmed === '..' || trimmed.startsWith('.')) {
138
+ throw new Error('Invalid service name: cannot start with a dot');
139
+ }
140
+ return trimmed;
141
+ }
142
+ exports.validateServiceName = validateServiceName;
143
+ /**
144
+ * H-5: Validate Ethereum address format
145
+ *
146
+ * Ensures address:
147
+ * 1. Is a valid hex string
148
+ * 2. Has correct length (42 chars including '0x' prefix)
149
+ * 3. Uses valid checksum if provided (EIP-55)
150
+ *
151
+ * @param address - The Ethereum address to validate
152
+ * @returns true if address is valid, false otherwise
153
+ */
154
+ function isValidAddress(address) {
155
+ if (!address || typeof address !== 'string') {
156
+ return false;
157
+ }
158
+ // Must start with 0x
159
+ if (!address.startsWith('0x')) {
160
+ return false;
161
+ }
162
+ // Must be exactly 42 characters (0x + 40 hex chars)
163
+ if (address.length !== 42) {
164
+ return false;
165
+ }
166
+ // Must contain only valid hex characters
167
+ const hexPattern = /^0x[a-fA-F0-9]{40}$/;
168
+ if (!hexPattern.test(address)) {
169
+ return false;
170
+ }
171
+ // Note: Full EIP-55 checksum validation would be more complex
172
+ // For now, we just validate format. In production, consider using ethers.utils.getAddress()
173
+ return true;
174
+ }
175
+ exports.isValidAddress = isValidAddress;
176
+ /**
177
+ * C-3: Safe JSON parsing with schema validation
178
+ *
179
+ * Prevents code injection and prototype pollution attacks by:
180
+ * 1. Safely parsing JSON with error handling
181
+ * 2. Validating the parsed object against an expected schema
182
+ * 3. Removing __proto__, constructor, and prototype properties
183
+ * 4. Returning only whitelisted fields
184
+ *
185
+ * @param jsonString - The JSON string to parse
186
+ * @param schema - Expected schema (object with field names and types)
187
+ * @returns Parsed and validated object, or null if invalid
188
+ */
189
+ function safeJSONParse(jsonString, schema) {
190
+ if (!jsonString || typeof jsonString !== 'string') {
191
+ return null;
192
+ }
193
+ // SECURITY FIX (C-3): Check JSON size to prevent DoS attacks
194
+ const MAX_JSON_SIZE = 1000000; // 1MB
195
+ if (jsonString.length > MAX_JSON_SIZE) {
196
+ return null;
197
+ }
198
+ let parsed;
199
+ try {
200
+ // Basic JSON parsing
201
+ parsed = JSON.parse(jsonString);
202
+ }
203
+ catch (error) {
204
+ // Invalid JSON
205
+ return null;
206
+ }
207
+ // Ensure we got an object (not a primitive or array at the top level)
208
+ if (typeof parsed !== 'object' || parsed === null) {
209
+ return null;
210
+ }
211
+ // Remove dangerous properties that could be used for prototype pollution
212
+ const dangerous = ['__proto__', 'constructor', 'prototype'];
213
+ for (const key of dangerous) {
214
+ delete parsed[key];
215
+ }
216
+ // If schema is provided, validate and whitelist
217
+ if (schema) {
218
+ const validated = {};
219
+ for (const [field, expectedType] of Object.entries(schema)) {
220
+ const value = parsed[field];
221
+ // Skip if field doesn't exist
222
+ if (value === undefined) {
223
+ continue;
224
+ }
225
+ // Type check
226
+ const actualType = Array.isArray(value) ? 'array' : typeof value;
227
+ if (actualType !== expectedType && expectedType !== 'any') {
228
+ // Type mismatch - skip this field
229
+ continue;
230
+ }
231
+ // Recursively sanitize nested objects
232
+ if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
233
+ validated[field] = sanitizeObject(value);
234
+ }
235
+ else if (Array.isArray(value)) {
236
+ validated[field] = value.map((item) => typeof item === 'object' && item !== null ? sanitizeObject(item) : item);
237
+ }
238
+ else {
239
+ validated[field] = value;
240
+ }
241
+ }
242
+ return validated;
243
+ }
244
+ // No schema - return sanitized object
245
+ return sanitizeObject(parsed);
246
+ }
247
+ exports.safeJSONParse = safeJSONParse;
248
+ /**
249
+ * Recursively sanitize an object by removing dangerous properties
250
+ *
251
+ * @param obj - Object to sanitize
252
+ * @returns Sanitized object
253
+ */
254
+ function sanitizeObject(obj) {
255
+ if (typeof obj !== 'object' || obj === null) {
256
+ return obj;
257
+ }
258
+ const sanitized = {};
259
+ const dangerous = ['__proto__', 'constructor', 'prototype'];
260
+ for (const [key, value] of Object.entries(obj)) {
261
+ // Skip dangerous keys
262
+ if (dangerous.includes(key)) {
263
+ continue;
264
+ }
265
+ // Recursively sanitize nested objects
266
+ if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
267
+ sanitized[key] = sanitizeObject(value);
268
+ }
269
+ else if (Array.isArray(value)) {
270
+ sanitized[key] = value.map((item) => typeof item === 'object' && item !== null ? sanitizeObject(item) : item);
271
+ }
272
+ else {
273
+ sanitized[key] = value;
274
+ }
275
+ }
276
+ return sanitized;
277
+ }
278
+ /**
279
+ * LRU (Least Recently Used) cache with maximum size
280
+ * Used for preventing unbounded memory growth
281
+ *
282
+ * @template K - Key type
283
+ * @template V - Value type
284
+ */
285
+ class LRUCache {
286
+ constructor(maxSize = 1000) {
287
+ this.cache = new Map();
288
+ if (maxSize <= 0) {
289
+ throw new Error('LRU cache maxSize must be positive');
290
+ }
291
+ this.maxSize = maxSize;
292
+ }
293
+ /**
294
+ * Get value from cache
295
+ *
296
+ * @param key - Cache key
297
+ * @returns Cached value or undefined
298
+ */
299
+ get(key) {
300
+ const value = this.cache.get(key);
301
+ if (value !== undefined) {
302
+ // Move to end (most recently used)
303
+ this.cache.delete(key);
304
+ this.cache.set(key, value);
305
+ }
306
+ return value;
307
+ }
308
+ /**
309
+ * Set value in cache
310
+ *
311
+ * @param key - Cache key
312
+ * @param value - Value to cache
313
+ */
314
+ set(key, value) {
315
+ // Delete if already exists (to update position)
316
+ if (this.cache.has(key)) {
317
+ this.cache.delete(key);
318
+ }
319
+ // Evict oldest if at capacity
320
+ if (this.cache.size >= this.maxSize) {
321
+ const firstKey = this.cache.keys().next().value;
322
+ // TypeScript doesn't know that Map iterator always returns defined values when size > 0
323
+ // But we check size >= maxSize above, so this is safe
324
+ if (firstKey !== undefined) {
325
+ this.cache.delete(firstKey);
326
+ }
327
+ }
328
+ this.cache.set(key, value);
329
+ }
330
+ /**
331
+ * Check if key exists in cache
332
+ *
333
+ * SECURITY FIX (N-1): Use Map's native has() instead of get()
334
+ * to avoid modifying LRU order on read-only operations.
335
+ *
336
+ * @param key - Cache key
337
+ * @returns true if key exists
338
+ */
339
+ has(key) {
340
+ return this.cache.has(key);
341
+ }
342
+ /**
343
+ * Delete key from cache
344
+ *
345
+ * @param key - Cache key
346
+ */
347
+ delete(key) {
348
+ this.cache.delete(key);
349
+ }
350
+ /**
351
+ * Clear all entries
352
+ */
353
+ clear() {
354
+ this.cache.clear();
355
+ }
356
+ /**
357
+ * Get current cache size
358
+ */
359
+ get size() {
360
+ return this.cache.size;
361
+ }
362
+ /**
363
+ * Get all values from cache
364
+ *
365
+ * SECURITY FIX (N-2): Add iterator support for LRUCache.
366
+ * Returns values in LRU order (oldest to newest).
367
+ *
368
+ * @returns Array of all cached values
369
+ */
370
+ values() {
371
+ return Array.from(this.cache.values());
372
+ }
373
+ /**
374
+ * Get all keys from cache
375
+ *
376
+ * @returns Array of all cached keys
377
+ */
378
+ keys() {
379
+ return Array.from(this.cache.keys());
380
+ }
381
+ /**
382
+ * Get all entries from cache
383
+ *
384
+ * @returns Array of all cached [key, value] pairs
385
+ */
386
+ entries() {
387
+ return Array.from(this.cache.entries());
388
+ }
389
+ }
390
+ exports.LRUCache = LRUCache;
391
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/utils/security.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,46 @@
1
+ /**
2
+ * Input validation utilities
3
+ */
4
+ /**
5
+ * Validate Ethereum address
6
+ */
1
7
  export declare function validateAddress(address: string, fieldName?: string): void;
8
+ /**
9
+ * Validate amount (must be > 0)
10
+ */
2
11
  export declare function validateAmount(amount: bigint, _fieldName?: string): void;
12
+ /**
13
+ * Validate deadline (must be future timestamp)
14
+ */
3
15
  export declare function validateDeadline(deadline: number, fieldName?: string): void;
16
+ /**
17
+ * Validate dispute window (max 30 days per spec)
18
+ */
4
19
  export declare function validateDisputeWindow(disputeWindow: number, fieldName?: string): void;
20
+ /**
21
+ * Validate transaction ID format
22
+ */
5
23
  export declare function validateTxId(txId: string, fieldName?: string): void;
24
+ /**
25
+ * Validate endpoint URL (for AgentRegistry)
26
+ *
27
+ * SECURITY FIX (H-1): Enhanced SSRF protection with DNS resolution
28
+ *
29
+ * Security checks:
30
+ * - Valid URL format
31
+ * - HTTPS or IPFS protocols only
32
+ * - Maximum length 256 characters
33
+ * - DNS resolution check (hostname → IP validation)
34
+ * - No private/local IP addresses (SSRF protection)
35
+ * - Blocks AWS metadata endpoint (169.254.169.254)
36
+ * - Fail-secure: if DNS lookup fails, reject
37
+ *
38
+ * **CRITICAL**: This function is now ASYNC due to DNS resolution.
39
+ * All callers MUST await this function.
40
+ *
41
+ * @param endpoint - URL to validate
42
+ * @param fieldName - Field name for error messages
43
+ * @throws {ValidationError} If endpoint is invalid or points to private IP
44
+ */
45
+ export declare function validateEndpointURL(endpoint: string, fieldName?: string): Promise<void>;
6
46
  //# sourceMappingURL=validation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAcA,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,MAAkB,GAAG,IAAI,CAQpF;AAKD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,MAAiB,GAAG,IAAI,CASlF;AAKD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,MAAmB,GAAG,IAAI,CASvF;AAKD,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,MAAM,EACrB,SAAS,GAAE,MAAwB,GAClC,IAAI,CAaN;AAKD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAe,GAAG,IAAI,CAI3E"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAOA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,MAAkB,GAAG,IAAI,CAQpF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,MAAiB,GAAG,IAAI,CASlF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,MAAmB,GAAG,IAAI,CASvF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,MAAM,EACrB,SAAS,GAAE,MAAwB,GAClC,IAAI,CAaN;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAe,GAAG,IAAI,CAI3E;AAwDD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,MAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuFzG"}