@usesigil/kit 0.1.0

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 (631) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +190 -0
  3. package/dist/advanced-analytics.d.ts +118 -0
  4. package/dist/advanced-analytics.d.ts.map +1 -0
  5. package/dist/advanced-analytics.js +341 -0
  6. package/dist/advanced-analytics.js.map +1 -0
  7. package/dist/agent-analytics.d.ts +76 -0
  8. package/dist/agent-analytics.d.ts.map +1 -0
  9. package/dist/agent-analytics.js +179 -0
  10. package/dist/agent-analytics.js.map +1 -0
  11. package/dist/agent-errors.d.ts +151 -0
  12. package/dist/agent-errors.d.ts.map +1 -0
  13. package/dist/agent-errors.js +2001 -0
  14. package/dist/agent-errors.js.map +1 -0
  15. package/dist/alt-config.d.ts +43 -0
  16. package/dist/alt-config.d.ts.map +1 -0
  17. package/dist/alt-config.js +78 -0
  18. package/dist/alt-config.js.map +1 -0
  19. package/dist/alt-loader.d.ts +47 -0
  20. package/dist/alt-loader.d.ts.map +1 -0
  21. package/dist/alt-loader.js +143 -0
  22. package/dist/alt-loader.js.map +1 -0
  23. package/dist/balance-tracker.d.ts +87 -0
  24. package/dist/balance-tracker.d.ts.map +1 -0
  25. package/dist/balance-tracker.js +181 -0
  26. package/dist/balance-tracker.js.map +1 -0
  27. package/dist/composer.d.ts +56 -0
  28. package/dist/composer.d.ts.map +1 -0
  29. package/dist/composer.js +77 -0
  30. package/dist/composer.js.map +1 -0
  31. package/dist/core/engine.d.ts +17 -0
  32. package/dist/core/engine.d.ts.map +1 -0
  33. package/dist/core/engine.js +177 -0
  34. package/dist/core/engine.js.map +1 -0
  35. package/dist/core/errors.d.ts +24 -0
  36. package/dist/core/errors.d.ts.map +1 -0
  37. package/dist/core/errors.js +16 -0
  38. package/dist/core/errors.js.map +1 -0
  39. package/dist/core/index.d.ts +9 -0
  40. package/dist/core/index.d.ts.map +1 -0
  41. package/dist/core/index.js +10 -0
  42. package/dist/core/index.js.map +1 -0
  43. package/dist/core/policies.d.ts +75 -0
  44. package/dist/core/policies.d.ts.map +1 -0
  45. package/dist/core/policies.js +126 -0
  46. package/dist/core/policies.js.map +1 -0
  47. package/dist/core/registry.d.ts +29 -0
  48. package/dist/core/registry.d.ts.map +1 -0
  49. package/dist/core/registry.js +125 -0
  50. package/dist/core/registry.js.map +1 -0
  51. package/dist/core/state.d.ts +71 -0
  52. package/dist/core/state.d.ts.map +1 -0
  53. package/dist/core/state.js +169 -0
  54. package/dist/core/state.js.map +1 -0
  55. package/dist/create-vault.d.ts +58 -0
  56. package/dist/create-vault.d.ts.map +1 -0
  57. package/dist/create-vault.js +90 -0
  58. package/dist/create-vault.js.map +1 -0
  59. package/dist/custody-adapter.d.ts +54 -0
  60. package/dist/custody-adapter.d.ts.map +1 -0
  61. package/dist/custody-adapter.js +45 -0
  62. package/dist/custody-adapter.js.map +1 -0
  63. package/dist/event-analytics.d.ts +45 -0
  64. package/dist/event-analytics.d.ts.map +1 -0
  65. package/dist/event-analytics.js +277 -0
  66. package/dist/event-analytics.js.map +1 -0
  67. package/dist/events.d.ts +56 -0
  68. package/dist/events.d.ts.map +1 -0
  69. package/dist/events.js +151 -0
  70. package/dist/events.js.map +1 -0
  71. package/dist/formatting.d.ts +103 -0
  72. package/dist/formatting.d.ts.map +1 -0
  73. package/dist/formatting.js +244 -0
  74. package/dist/formatting.js.map +1 -0
  75. package/dist/generated/accounts/agentSpendOverlay.d.ts +54 -0
  76. package/dist/generated/accounts/agentSpendOverlay.d.ts.map +1 -0
  77. package/dist/generated/accounts/agentSpendOverlay.js +74 -0
  78. package/dist/generated/accounts/agentSpendOverlay.js.map +1 -0
  79. package/dist/generated/accounts/agentVault.d.ts +95 -0
  80. package/dist/generated/accounts/agentVault.d.ts.map +1 -0
  81. package/dist/generated/accounts/agentVault.js +83 -0
  82. package/dist/generated/accounts/agentVault.js.map +1 -0
  83. package/dist/generated/accounts/escrowDeposit.d.ts +50 -0
  84. package/dist/generated/accounts/escrowDeposit.d.ts.map +1 -0
  85. package/dist/generated/accounts/escrowDeposit.js +76 -0
  86. package/dist/generated/accounts/escrowDeposit.js.map +1 -0
  87. package/dist/generated/accounts/index.d.ts +17 -0
  88. package/dist/generated/accounts/index.d.ts.map +1 -0
  89. package/dist/generated/accounts/index.js +17 -0
  90. package/dist/generated/accounts/index.js.map +1 -0
  91. package/dist/generated/accounts/instructionConstraints.d.ts +37 -0
  92. package/dist/generated/accounts/instructionConstraints.d.ts.map +1 -0
  93. package/dist/generated/accounts/instructionConstraints.js +64 -0
  94. package/dist/generated/accounts/instructionConstraints.js.map +1 -0
  95. package/dist/generated/accounts/pendingConstraintsUpdate.d.ts +53 -0
  96. package/dist/generated/accounts/pendingConstraintsUpdate.d.ts.map +1 -0
  97. package/dist/generated/accounts/pendingConstraintsUpdate.js +68 -0
  98. package/dist/generated/accounts/pendingConstraintsUpdate.js.map +1 -0
  99. package/dist/generated/accounts/pendingPolicyUpdate.d.ts +72 -0
  100. package/dist/generated/accounts/pendingPolicyUpdate.d.ts.map +1 -0
  101. package/dist/generated/accounts/pendingPolicyUpdate.js +97 -0
  102. package/dist/generated/accounts/pendingPolicyUpdate.js.map +1 -0
  103. package/dist/generated/accounts/policyConfig.d.ts +180 -0
  104. package/dist/generated/accounts/policyConfig.d.ts.map +1 -0
  105. package/dist/generated/accounts/policyConfig.js +88 -0
  106. package/dist/generated/accounts/policyConfig.js.map +1 -0
  107. package/dist/generated/accounts/sessionAuthority.d.ts +104 -0
  108. package/dist/generated/accounts/sessionAuthority.d.ts.map +1 -0
  109. package/dist/generated/accounts/sessionAuthority.js +86 -0
  110. package/dist/generated/accounts/sessionAuthority.js.map +1 -0
  111. package/dist/generated/accounts/spendTracker.d.ts +60 -0
  112. package/dist/generated/accounts/spendTracker.d.ts.map +1 -0
  113. package/dist/generated/accounts/spendTracker.js +74 -0
  114. package/dist/generated/accounts/spendTracker.js.map +1 -0
  115. package/dist/generated/errors/index.d.ts +9 -0
  116. package/dist/generated/errors/index.d.ts.map +1 -0
  117. package/dist/generated/errors/index.js +9 -0
  118. package/dist/generated/errors/index.js.map +1 -0
  119. package/dist/generated/errors/sigil.d.ts +162 -0
  120. package/dist/generated/errors/sigil.d.ts.map +1 -0
  121. package/dist/generated/errors/sigil.js +237 -0
  122. package/dist/generated/errors/sigil.js.map +1 -0
  123. package/dist/generated/event-discriminators.d.ts +2 -0
  124. package/dist/generated/event-discriminators.d.ts.map +1 -0
  125. package/dist/generated/event-discriminators.js +39 -0
  126. package/dist/generated/event-discriminators.js.map +1 -0
  127. package/dist/generated/index.d.ts +13 -0
  128. package/dist/generated/index.d.ts.map +1 -0
  129. package/dist/generated/index.js +13 -0
  130. package/dist/generated/index.js.map +1 -0
  131. package/dist/generated/instructions/agentTransfer.d.ts +109 -0
  132. package/dist/generated/instructions/agentTransfer.d.ts.map +1 -0
  133. package/dist/generated/instructions/agentTransfer.js +211 -0
  134. package/dist/generated/instructions/agentTransfer.js.map +1 -0
  135. package/dist/generated/instructions/applyConstraintsUpdate.d.ts +55 -0
  136. package/dist/generated/instructions/applyConstraintsUpdate.d.ts.map +1 -0
  137. package/dist/generated/instructions/applyConstraintsUpdate.js +129 -0
  138. package/dist/generated/instructions/applyConstraintsUpdate.js.map +1 -0
  139. package/dist/generated/instructions/applyPendingPolicy.d.ts +55 -0
  140. package/dist/generated/instructions/applyPendingPolicy.d.ts.map +1 -0
  141. package/dist/generated/instructions/applyPendingPolicy.js +122 -0
  142. package/dist/generated/instructions/applyPendingPolicy.js.map +1 -0
  143. package/dist/generated/instructions/cancelConstraintsUpdate.d.ts +51 -0
  144. package/dist/generated/instructions/cancelConstraintsUpdate.d.ts.map +1 -0
  145. package/dist/generated/instructions/cancelConstraintsUpdate.js +115 -0
  146. package/dist/generated/instructions/cancelConstraintsUpdate.js.map +1 -0
  147. package/dist/generated/instructions/cancelPendingPolicy.d.ts +55 -0
  148. package/dist/generated/instructions/cancelPendingPolicy.d.ts.map +1 -0
  149. package/dist/generated/instructions/cancelPendingPolicy.js +122 -0
  150. package/dist/generated/instructions/cancelPendingPolicy.js.map +1 -0
  151. package/dist/generated/instructions/closeInstructionConstraints.d.ts +55 -0
  152. package/dist/generated/instructions/closeInstructionConstraints.d.ts.map +1 -0
  153. package/dist/generated/instructions/closeInstructionConstraints.js +120 -0
  154. package/dist/generated/instructions/closeInstructionConstraints.js.map +1 -0
  155. package/dist/generated/instructions/closeSettledEscrow.d.ts +72 -0
  156. package/dist/generated/instructions/closeSettledEscrow.d.ts.map +1 -0
  157. package/dist/generated/instructions/closeSettledEscrow.js +127 -0
  158. package/dist/generated/instructions/closeSettledEscrow.js.map +1 -0
  159. package/dist/generated/instructions/closeVault.d.ts +69 -0
  160. package/dist/generated/instructions/closeVault.d.ts.map +1 -0
  161. package/dist/generated/instructions/closeVault.js +142 -0
  162. package/dist/generated/instructions/closeVault.js.map +1 -0
  163. package/dist/generated/instructions/createEscrow.d.ts +131 -0
  164. package/dist/generated/instructions/createEscrow.d.ts.map +1 -0
  165. package/dist/generated/instructions/createEscrow.js +272 -0
  166. package/dist/generated/instructions/createEscrow.js.map +1 -0
  167. package/dist/generated/instructions/createInstructionConstraints.d.ts +69 -0
  168. package/dist/generated/instructions/createInstructionConstraints.d.ts.map +1 -0
  169. package/dist/generated/instructions/createInstructionConstraints.js +145 -0
  170. package/dist/generated/instructions/createInstructionConstraints.js.map +1 -0
  171. package/dist/generated/instructions/depositFunds.d.ts +82 -0
  172. package/dist/generated/instructions/depositFunds.d.ts.map +1 -0
  173. package/dist/generated/instructions/depositFunds.js +198 -0
  174. package/dist/generated/instructions/depositFunds.js.map +1 -0
  175. package/dist/generated/instructions/finalizeSession.d.ts +126 -0
  176. package/dist/generated/instructions/finalizeSession.d.ts.map +1 -0
  177. package/dist/generated/instructions/finalizeSession.js +218 -0
  178. package/dist/generated/instructions/finalizeSession.js.map +1 -0
  179. package/dist/generated/instructions/freezeVault.d.ts +40 -0
  180. package/dist/generated/instructions/freezeVault.d.ts.map +1 -0
  181. package/dist/generated/instructions/freezeVault.js +66 -0
  182. package/dist/generated/instructions/freezeVault.js.map +1 -0
  183. package/dist/generated/instructions/index.d.ts +37 -0
  184. package/dist/generated/instructions/index.d.ts.map +1 -0
  185. package/dist/generated/instructions/index.js +37 -0
  186. package/dist/generated/instructions/index.js.map +1 -0
  187. package/dist/generated/instructions/initializeVault.d.ts +122 -0
  188. package/dist/generated/instructions/initializeVault.d.ts.map +1 -0
  189. package/dist/generated/instructions/initializeVault.js +187 -0
  190. package/dist/generated/instructions/initializeVault.js.map +1 -0
  191. package/dist/generated/instructions/pauseAgent.d.ts +44 -0
  192. package/dist/generated/instructions/pauseAgent.d.ts.map +1 -0
  193. package/dist/generated/instructions/pauseAgent.js +72 -0
  194. package/dist/generated/instructions/pauseAgent.js.map +1 -0
  195. package/dist/generated/instructions/queueConstraintsUpdate.d.ts +73 -0
  196. package/dist/generated/instructions/queueConstraintsUpdate.d.ts.map +1 -0
  197. package/dist/generated/instructions/queueConstraintsUpdate.js +168 -0
  198. package/dist/generated/instructions/queueConstraintsUpdate.js.map +1 -0
  199. package/dist/generated/instructions/queuePolicyUpdate.d.ts +116 -0
  200. package/dist/generated/instructions/queuePolicyUpdate.d.ts.map +1 -0
  201. package/dist/generated/instructions/queuePolicyUpdate.js +173 -0
  202. package/dist/generated/instructions/queuePolicyUpdate.js.map +1 -0
  203. package/dist/generated/instructions/reactivateVault.d.ts +47 -0
  204. package/dist/generated/instructions/reactivateVault.d.ts.map +1 -0
  205. package/dist/generated/instructions/reactivateVault.js +74 -0
  206. package/dist/generated/instructions/reactivateVault.js.map +1 -0
  207. package/dist/generated/instructions/refundEscrow.d.ts +74 -0
  208. package/dist/generated/instructions/refundEscrow.d.ts.map +1 -0
  209. package/dist/generated/instructions/refundEscrow.js +142 -0
  210. package/dist/generated/instructions/refundEscrow.js.map +1 -0
  211. package/dist/generated/instructions/registerAgent.d.ts +55 -0
  212. package/dist/generated/instructions/registerAgent.d.ts.map +1 -0
  213. package/dist/generated/instructions/registerAgent.js +85 -0
  214. package/dist/generated/instructions/registerAgent.js.map +1 -0
  215. package/dist/generated/instructions/revokeAgent.d.ts +49 -0
  216. package/dist/generated/instructions/revokeAgent.d.ts.map +1 -0
  217. package/dist/generated/instructions/revokeAgent.js +81 -0
  218. package/dist/generated/instructions/revokeAgent.js.map +1 -0
  219. package/dist/generated/instructions/settleEscrow.d.ts +80 -0
  220. package/dist/generated/instructions/settleEscrow.d.ts.map +1 -0
  221. package/dist/generated/instructions/settleEscrow.js +173 -0
  222. package/dist/generated/instructions/settleEscrow.js.map +1 -0
  223. package/dist/generated/instructions/syncPositions.d.ts +44 -0
  224. package/dist/generated/instructions/syncPositions.d.ts.map +1 -0
  225. package/dist/generated/instructions/syncPositions.js +72 -0
  226. package/dist/generated/instructions/syncPositions.js.map +1 -0
  227. package/dist/generated/instructions/unpauseAgent.d.ts +44 -0
  228. package/dist/generated/instructions/unpauseAgent.d.ts.map +1 -0
  229. package/dist/generated/instructions/unpauseAgent.js +72 -0
  230. package/dist/generated/instructions/unpauseAgent.js.map +1 -0
  231. package/dist/generated/instructions/updateAgentPermissions.d.ts +68 -0
  232. package/dist/generated/instructions/updateAgentPermissions.d.ts.map +1 -0
  233. package/dist/generated/instructions/updateAgentPermissions.js +139 -0
  234. package/dist/generated/instructions/updateAgentPermissions.js.map +1 -0
  235. package/dist/generated/instructions/updateInstructionConstraints.d.ts +65 -0
  236. package/dist/generated/instructions/updateInstructionConstraints.d.ts.map +1 -0
  237. package/dist/generated/instructions/updateInstructionConstraints.js +131 -0
  238. package/dist/generated/instructions/updateInstructionConstraints.js.map +1 -0
  239. package/dist/generated/instructions/updatePolicy.d.ts +108 -0
  240. package/dist/generated/instructions/updatePolicy.d.ts.map +1 -0
  241. package/dist/generated/instructions/updatePolicy.js +143 -0
  242. package/dist/generated/instructions/updatePolicy.js.map +1 -0
  243. package/dist/generated/instructions/validateAndAuthorize.d.ts +171 -0
  244. package/dist/generated/instructions/validateAndAuthorize.d.ts.map +1 -0
  245. package/dist/generated/instructions/validateAndAuthorize.js +271 -0
  246. package/dist/generated/instructions/validateAndAuthorize.js.map +1 -0
  247. package/dist/generated/instructions/withdrawFunds.d.ts +74 -0
  248. package/dist/generated/instructions/withdrawFunds.d.ts.map +1 -0
  249. package/dist/generated/instructions/withdrawFunds.js +166 -0
  250. package/dist/generated/instructions/withdrawFunds.js.map +1 -0
  251. package/dist/generated/programs/index.d.ts +9 -0
  252. package/dist/generated/programs/index.d.ts.map +1 -0
  253. package/dist/generated/programs/index.js +9 -0
  254. package/dist/generated/programs/index.js.map +1 -0
  255. package/dist/generated/programs/sigil.d.ts +173 -0
  256. package/dist/generated/programs/sigil.d.ts.map +1 -0
  257. package/dist/generated/programs/sigil.js +443 -0
  258. package/dist/generated/programs/sigil.js.map +1 -0
  259. package/dist/generated/types/accountConstraint.d.ts +18 -0
  260. package/dist/generated/types/accountConstraint.d.ts.map +1 -0
  261. package/dist/generated/types/accountConstraint.js +24 -0
  262. package/dist/generated/types/accountConstraint.js.map +1 -0
  263. package/dist/generated/types/actionAuthorized.d.ts +39 -0
  264. package/dist/generated/types/actionAuthorized.d.ts.map +1 -0
  265. package/dist/generated/types/actionAuthorized.js +43 -0
  266. package/dist/generated/types/actionAuthorized.js.map +1 -0
  267. package/dist/generated/types/actionType.d.ts +37 -0
  268. package/dist/generated/types/actionType.d.ts.map +1 -0
  269. package/dist/generated/types/actionType.js +43 -0
  270. package/dist/generated/types/actionType.js.map +1 -0
  271. package/dist/generated/types/agentContributionEntry.d.ts +49 -0
  272. package/dist/generated/types/agentContributionEntry.d.ts.map +1 -0
  273. package/dist/generated/types/agentContributionEntry.js +26 -0
  274. package/dist/generated/types/agentContributionEntry.js.map +1 -0
  275. package/dist/generated/types/agentEntry.d.ts +24 -0
  276. package/dist/generated/types/agentEntry.d.ts.map +1 -0
  277. package/dist/generated/types/agentEntry.js +28 -0
  278. package/dist/generated/types/agentEntry.js.map +1 -0
  279. package/dist/generated/types/agentPausedEvent.d.ts +22 -0
  280. package/dist/generated/types/agentPausedEvent.d.ts.map +1 -0
  281. package/dist/generated/types/agentPausedEvent.js +26 -0
  282. package/dist/generated/types/agentPausedEvent.js.map +1 -0
  283. package/dist/generated/types/agentPermissionsUpdated.d.ts +24 -0
  284. package/dist/generated/types/agentPermissionsUpdated.d.ts.map +1 -0
  285. package/dist/generated/types/agentPermissionsUpdated.js +28 -0
  286. package/dist/generated/types/agentPermissionsUpdated.js.map +1 -0
  287. package/dist/generated/types/agentRegistered.d.ts +26 -0
  288. package/dist/generated/types/agentRegistered.d.ts.map +1 -0
  289. package/dist/generated/types/agentRegistered.js +30 -0
  290. package/dist/generated/types/agentRegistered.js.map +1 -0
  291. package/dist/generated/types/agentRevoked.d.ts +24 -0
  292. package/dist/generated/types/agentRevoked.d.ts.map +1 -0
  293. package/dist/generated/types/agentRevoked.js +28 -0
  294. package/dist/generated/types/agentRevoked.js.map +1 -0
  295. package/dist/generated/types/agentSpendLimitChecked.d.ts +28 -0
  296. package/dist/generated/types/agentSpendLimitChecked.d.ts.map +1 -0
  297. package/dist/generated/types/agentSpendLimitChecked.js +32 -0
  298. package/dist/generated/types/agentSpendLimitChecked.js.map +1 -0
  299. package/dist/generated/types/agentTransferExecuted.d.ts +24 -0
  300. package/dist/generated/types/agentTransferExecuted.d.ts.map +1 -0
  301. package/dist/generated/types/agentTransferExecuted.js +28 -0
  302. package/dist/generated/types/agentTransferExecuted.js.map +1 -0
  303. package/dist/generated/types/agentUnpausedEvent.d.ts +22 -0
  304. package/dist/generated/types/agentUnpausedEvent.d.ts.map +1 -0
  305. package/dist/generated/types/agentUnpausedEvent.js +26 -0
  306. package/dist/generated/types/agentUnpausedEvent.js.map +1 -0
  307. package/dist/generated/types/constraintEntry.d.ts +23 -0
  308. package/dist/generated/types/constraintEntry.d.ts.map +1 -0
  309. package/dist/generated/types/constraintEntry.js +27 -0
  310. package/dist/generated/types/constraintEntry.js.map +1 -0
  311. package/dist/generated/types/constraintOperator.d.ts +22 -0
  312. package/dist/generated/types/constraintOperator.d.ts.map +1 -0
  313. package/dist/generated/types/constraintOperator.js +28 -0
  314. package/dist/generated/types/constraintOperator.js.map +1 -0
  315. package/dist/generated/types/constraintsChangeApplied.d.ts +20 -0
  316. package/dist/generated/types/constraintsChangeApplied.d.ts.map +1 -0
  317. package/dist/generated/types/constraintsChangeApplied.js +24 -0
  318. package/dist/generated/types/constraintsChangeApplied.js.map +1 -0
  319. package/dist/generated/types/constraintsChangeCancelled.d.ts +16 -0
  320. package/dist/generated/types/constraintsChangeCancelled.d.ts.map +1 -0
  321. package/dist/generated/types/constraintsChangeCancelled.js +18 -0
  322. package/dist/generated/types/constraintsChangeCancelled.js.map +1 -0
  323. package/dist/generated/types/constraintsChangeQueued.d.ts +20 -0
  324. package/dist/generated/types/constraintsChangeQueued.d.ts.map +1 -0
  325. package/dist/generated/types/constraintsChangeQueued.js +24 -0
  326. package/dist/generated/types/constraintsChangeQueued.js.map +1 -0
  327. package/dist/generated/types/dataConstraint.d.ts +23 -0
  328. package/dist/generated/types/dataConstraint.d.ts.map +1 -0
  329. package/dist/generated/types/dataConstraint.js +27 -0
  330. package/dist/generated/types/dataConstraint.js.map +1 -0
  331. package/dist/generated/types/delegationRevoked.d.ts +22 -0
  332. package/dist/generated/types/delegationRevoked.d.ts.map +1 -0
  333. package/dist/generated/types/delegationRevoked.js +26 -0
  334. package/dist/generated/types/delegationRevoked.js.map +1 -0
  335. package/dist/generated/types/epochBucket.d.ts +28 -0
  336. package/dist/generated/types/epochBucket.d.ts.map +1 -0
  337. package/dist/generated/types/epochBucket.js +24 -0
  338. package/dist/generated/types/epochBucket.js.map +1 -0
  339. package/dist/generated/types/escrowCreated.d.ts +30 -0
  340. package/dist/generated/types/escrowCreated.d.ts.map +1 -0
  341. package/dist/generated/types/escrowCreated.js +34 -0
  342. package/dist/generated/types/escrowCreated.js.map +1 -0
  343. package/dist/generated/types/escrowRefunded.d.ts +26 -0
  344. package/dist/generated/types/escrowRefunded.d.ts.map +1 -0
  345. package/dist/generated/types/escrowRefunded.js +30 -0
  346. package/dist/generated/types/escrowRefunded.js.map +1 -0
  347. package/dist/generated/types/escrowSettled.d.ts +26 -0
  348. package/dist/generated/types/escrowSettled.d.ts.map +1 -0
  349. package/dist/generated/types/escrowSettled.js +30 -0
  350. package/dist/generated/types/escrowSettled.js.map +1 -0
  351. package/dist/generated/types/escrowStatus.d.ts +18 -0
  352. package/dist/generated/types/escrowStatus.d.ts.map +1 -0
  353. package/dist/generated/types/escrowStatus.js +24 -0
  354. package/dist/generated/types/escrowStatus.js.map +1 -0
  355. package/dist/generated/types/feesCollected.d.ts +38 -0
  356. package/dist/generated/types/feesCollected.d.ts.map +1 -0
  357. package/dist/generated/types/feesCollected.js +42 -0
  358. package/dist/generated/types/feesCollected.js.map +1 -0
  359. package/dist/generated/types/fundsDeposited.d.ts +24 -0
  360. package/dist/generated/types/fundsDeposited.d.ts.map +1 -0
  361. package/dist/generated/types/fundsDeposited.js +28 -0
  362. package/dist/generated/types/fundsDeposited.js.map +1 -0
  363. package/dist/generated/types/fundsWithdrawn.d.ts +26 -0
  364. package/dist/generated/types/fundsWithdrawn.d.ts.map +1 -0
  365. package/dist/generated/types/fundsWithdrawn.js +30 -0
  366. package/dist/generated/types/fundsWithdrawn.js.map +1 -0
  367. package/dist/generated/types/index.d.ts +50 -0
  368. package/dist/generated/types/index.d.ts.map +1 -0
  369. package/dist/generated/types/index.js +50 -0
  370. package/dist/generated/types/index.js.map +1 -0
  371. package/dist/generated/types/instructionConstraintsClosed.d.ts +20 -0
  372. package/dist/generated/types/instructionConstraintsClosed.d.ts.map +1 -0
  373. package/dist/generated/types/instructionConstraintsClosed.js +24 -0
  374. package/dist/generated/types/instructionConstraintsClosed.js.map +1 -0
  375. package/dist/generated/types/instructionConstraintsCreated.d.ts +24 -0
  376. package/dist/generated/types/instructionConstraintsCreated.d.ts.map +1 -0
  377. package/dist/generated/types/instructionConstraintsCreated.js +28 -0
  378. package/dist/generated/types/instructionConstraintsCreated.js.map +1 -0
  379. package/dist/generated/types/instructionConstraintsUpdated.d.ts +24 -0
  380. package/dist/generated/types/instructionConstraintsUpdated.d.ts.map +1 -0
  381. package/dist/generated/types/instructionConstraintsUpdated.js +28 -0
  382. package/dist/generated/types/instructionConstraintsUpdated.js.map +1 -0
  383. package/dist/generated/types/policyChangeApplied.d.ts +20 -0
  384. package/dist/generated/types/policyChangeApplied.d.ts.map +1 -0
  385. package/dist/generated/types/policyChangeApplied.js +24 -0
  386. package/dist/generated/types/policyChangeApplied.js.map +1 -0
  387. package/dist/generated/types/policyChangeCancelled.d.ts +16 -0
  388. package/dist/generated/types/policyChangeCancelled.d.ts.map +1 -0
  389. package/dist/generated/types/policyChangeCancelled.js +18 -0
  390. package/dist/generated/types/policyChangeCancelled.js.map +1 -0
  391. package/dist/generated/types/policyChangeQueued.d.ts +20 -0
  392. package/dist/generated/types/policyChangeQueued.d.ts.map +1 -0
  393. package/dist/generated/types/policyChangeQueued.js +24 -0
  394. package/dist/generated/types/policyChangeQueued.js.map +1 -0
  395. package/dist/generated/types/policyUpdated.d.ts +34 -0
  396. package/dist/generated/types/policyUpdated.d.ts.map +1 -0
  397. package/dist/generated/types/policyUpdated.js +38 -0
  398. package/dist/generated/types/policyUpdated.js.map +1 -0
  399. package/dist/generated/types/positionsSynced.d.ts +24 -0
  400. package/dist/generated/types/positionsSynced.d.ts.map +1 -0
  401. package/dist/generated/types/positionsSynced.js +28 -0
  402. package/dist/generated/types/positionsSynced.js.map +1 -0
  403. package/dist/generated/types/protocolSpendCounter.d.ts +33 -0
  404. package/dist/generated/types/protocolSpendCounter.d.ts.map +1 -0
  405. package/dist/generated/types/protocolSpendCounter.js +26 -0
  406. package/dist/generated/types/protocolSpendCounter.js.map +1 -0
  407. package/dist/generated/types/sessionFinalized.d.ts +32 -0
  408. package/dist/generated/types/sessionFinalized.d.ts.map +1 -0
  409. package/dist/generated/types/sessionFinalized.js +36 -0
  410. package/dist/generated/types/sessionFinalized.js.map +1 -0
  411. package/dist/generated/types/vaultClosed.d.ts +22 -0
  412. package/dist/generated/types/vaultClosed.d.ts.map +1 -0
  413. package/dist/generated/types/vaultClosed.js +26 -0
  414. package/dist/generated/types/vaultClosed.js.map +1 -0
  415. package/dist/generated/types/vaultCreated.d.ts +24 -0
  416. package/dist/generated/types/vaultCreated.d.ts.map +1 -0
  417. package/dist/generated/types/vaultCreated.js +28 -0
  418. package/dist/generated/types/vaultCreated.js.map +1 -0
  419. package/dist/generated/types/vaultFrozen.d.ts +24 -0
  420. package/dist/generated/types/vaultFrozen.d.ts.map +1 -0
  421. package/dist/generated/types/vaultFrozen.js +28 -0
  422. package/dist/generated/types/vaultFrozen.js.map +1 -0
  423. package/dist/generated/types/vaultReactivated.d.ts +24 -0
  424. package/dist/generated/types/vaultReactivated.d.ts.map +1 -0
  425. package/dist/generated/types/vaultReactivated.js +28 -0
  426. package/dist/generated/types/vaultReactivated.js.map +1 -0
  427. package/dist/generated/types/vaultStatus.d.ts +19 -0
  428. package/dist/generated/types/vaultStatus.d.ts.map +1 -0
  429. package/dist/generated/types/vaultStatus.js +25 -0
  430. package/dist/generated/types/vaultStatus.js.map +1 -0
  431. package/dist/index.d.ts +74 -0
  432. package/dist/index.d.ts.map +1 -0
  433. package/dist/index.js +113 -0
  434. package/dist/index.js.map +1 -0
  435. package/dist/inscribe.d.ts +134 -0
  436. package/dist/inscribe.d.ts.map +1 -0
  437. package/dist/inscribe.js +149 -0
  438. package/dist/inscribe.js.map +1 -0
  439. package/dist/inspector.d.ts +85 -0
  440. package/dist/inspector.d.ts.map +1 -0
  441. package/dist/inspector.js +188 -0
  442. package/dist/inspector.js.map +1 -0
  443. package/dist/math-utils.d.ts +15 -0
  444. package/dist/math-utils.d.ts.map +1 -0
  445. package/dist/math-utils.js +29 -0
  446. package/dist/math-utils.js.map +1 -0
  447. package/dist/owner-transaction.d.ts +42 -0
  448. package/dist/owner-transaction.d.ts.map +1 -0
  449. package/dist/owner-transaction.js +71 -0
  450. package/dist/owner-transaction.js.map +1 -0
  451. package/dist/policies.d.ts +70 -0
  452. package/dist/policies.d.ts.map +1 -0
  453. package/dist/policies.js +87 -0
  454. package/dist/policies.js.map +1 -0
  455. package/dist/portfolio-analytics.d.ts +82 -0
  456. package/dist/portfolio-analytics.d.ts.map +1 -0
  457. package/dist/portfolio-analytics.js +232 -0
  458. package/dist/portfolio-analytics.js.map +1 -0
  459. package/dist/presets.d.ts +108 -0
  460. package/dist/presets.d.ts.map +1 -0
  461. package/dist/presets.js +110 -0
  462. package/dist/presets.js.map +1 -0
  463. package/dist/priority-fees.d.ts +49 -0
  464. package/dist/priority-fees.d.ts.map +1 -0
  465. package/dist/priority-fees.js +175 -0
  466. package/dist/priority-fees.js.map +1 -0
  467. package/dist/protocol-analytics.d.ts +35 -0
  468. package/dist/protocol-analytics.d.ts.map +1 -0
  469. package/dist/protocol-analytics.js +64 -0
  470. package/dist/protocol-analytics.js.map +1 -0
  471. package/dist/protocol-names.d.ts +9 -0
  472. package/dist/protocol-names.d.ts.map +1 -0
  473. package/dist/protocol-names.js +18 -0
  474. package/dist/protocol-names.js.map +1 -0
  475. package/dist/protocol-resolver.d.ts +54 -0
  476. package/dist/protocol-resolver.d.ts.map +1 -0
  477. package/dist/protocol-resolver.js +123 -0
  478. package/dist/protocol-resolver.js.map +1 -0
  479. package/dist/resolve-accounts.d.ts +38 -0
  480. package/dist/resolve-accounts.d.ts.map +1 -0
  481. package/dist/resolve-accounts.js +120 -0
  482. package/dist/resolve-accounts.js.map +1 -0
  483. package/dist/rpc-helpers.d.ts +50 -0
  484. package/dist/rpc-helpers.d.ts.map +1 -0
  485. package/dist/rpc-helpers.js +119 -0
  486. package/dist/rpc-helpers.js.map +1 -0
  487. package/dist/seal.d.ts +211 -0
  488. package/dist/seal.d.ts.map +1 -0
  489. package/dist/seal.js +569 -0
  490. package/dist/seal.js.map +1 -0
  491. package/dist/security-analytics.d.ts +85 -0
  492. package/dist/security-analytics.d.ts.map +1 -0
  493. package/dist/security-analytics.js +510 -0
  494. package/dist/security-analytics.js.map +1 -0
  495. package/dist/shield.d.ts +235 -0
  496. package/dist/shield.d.ts.map +1 -0
  497. package/dist/shield.js +701 -0
  498. package/dist/shield.js.map +1 -0
  499. package/dist/simulation.d.ts +111 -0
  500. package/dist/simulation.d.ts.map +1 -0
  501. package/dist/simulation.js +514 -0
  502. package/dist/simulation.js.map +1 -0
  503. package/dist/spending-analytics.d.ts +91 -0
  504. package/dist/spending-analytics.d.ts.map +1 -0
  505. package/dist/spending-analytics.js +217 -0
  506. package/dist/spending-analytics.js.map +1 -0
  507. package/dist/state-resolver.d.ts +173 -0
  508. package/dist/state-resolver.d.ts.map +1 -0
  509. package/dist/state-resolver.js +660 -0
  510. package/dist/state-resolver.js.map +1 -0
  511. package/dist/tee/cache.d.ts +28 -0
  512. package/dist/tee/cache.d.ts.map +1 -0
  513. package/dist/tee/cache.js +75 -0
  514. package/dist/tee/cache.js.map +1 -0
  515. package/dist/tee/index.d.ts +9 -0
  516. package/dist/tee/index.d.ts.map +1 -0
  517. package/dist/tee/index.js +9 -0
  518. package/dist/tee/index.js.map +1 -0
  519. package/dist/tee/nitro-root.d.ts +11 -0
  520. package/dist/tee/nitro-root.d.ts.map +1 -0
  521. package/dist/tee/nitro-root.js +24 -0
  522. package/dist/tee/nitro-root.js.map +1 -0
  523. package/dist/tee/providers/crossmint.d.ts +12 -0
  524. package/dist/tee/providers/crossmint.d.ts.map +1 -0
  525. package/dist/tee/providers/crossmint.js +73 -0
  526. package/dist/tee/providers/crossmint.js.map +1 -0
  527. package/dist/tee/providers/privy.d.ts +12 -0
  528. package/dist/tee/providers/privy.d.ts.map +1 -0
  529. package/dist/tee/providers/privy.js +73 -0
  530. package/dist/tee/providers/privy.js.map +1 -0
  531. package/dist/tee/providers/turnkey.d.ts +34 -0
  532. package/dist/tee/providers/turnkey.d.ts.map +1 -0
  533. package/dist/tee/providers/turnkey.js +401 -0
  534. package/dist/tee/providers/turnkey.js.map +1 -0
  535. package/dist/tee/types.d.ts +124 -0
  536. package/dist/tee/types.d.ts.map +1 -0
  537. package/dist/tee/types.js +51 -0
  538. package/dist/tee/types.js.map +1 -0
  539. package/dist/tee/verify.d.ts +34 -0
  540. package/dist/tee/verify.d.ts.map +1 -0
  541. package/dist/tee/verify.js +177 -0
  542. package/dist/tee/verify.js.map +1 -0
  543. package/dist/tee/wallet-types.d.ts +61 -0
  544. package/dist/tee/wallet-types.d.ts.map +1 -0
  545. package/dist/tee/wallet-types.js +42 -0
  546. package/dist/tee/wallet-types.js.map +1 -0
  547. package/dist/testing/devnet.d.ts +64 -0
  548. package/dist/testing/devnet.d.ts.map +1 -0
  549. package/dist/testing/devnet.js +222 -0
  550. package/dist/testing/devnet.js.map +1 -0
  551. package/dist/testing/index.d.ts +3 -0
  552. package/dist/testing/index.d.ts.map +1 -0
  553. package/dist/testing/index.js +9 -0
  554. package/dist/testing/index.js.map +1 -0
  555. package/dist/testing/mock-rpc.d.ts +31 -0
  556. package/dist/testing/mock-rpc.d.ts.map +1 -0
  557. package/dist/testing/mock-rpc.js +50 -0
  558. package/dist/testing/mock-rpc.js.map +1 -0
  559. package/dist/testing/mock-state.d.ts +35 -0
  560. package/dist/testing/mock-state.d.ts.map +1 -0
  561. package/dist/testing/mock-state.js +86 -0
  562. package/dist/testing/mock-state.js.map +1 -0
  563. package/dist/tokens.d.ts +35 -0
  564. package/dist/tokens.d.ts.map +1 -0
  565. package/dist/tokens.js +157 -0
  566. package/dist/tokens.js.map +1 -0
  567. package/dist/transaction-executor.d.ts +116 -0
  568. package/dist/transaction-executor.d.ts.map +1 -0
  569. package/dist/transaction-executor.js +165 -0
  570. package/dist/transaction-executor.js.map +1 -0
  571. package/dist/types.d.ts +102 -0
  572. package/dist/types.d.ts.map +1 -0
  573. package/dist/types.js +216 -0
  574. package/dist/types.js.map +1 -0
  575. package/dist/vault-analytics.d.ts +83 -0
  576. package/dist/vault-analytics.d.ts.map +1 -0
  577. package/dist/vault-analytics.js +175 -0
  578. package/dist/vault-analytics.js.map +1 -0
  579. package/dist/velocity-tracker.d.ts +79 -0
  580. package/dist/velocity-tracker.d.ts.map +1 -0
  581. package/dist/velocity-tracker.js +183 -0
  582. package/dist/velocity-tracker.js.map +1 -0
  583. package/dist/x402/amount-guard.d.ts +26 -0
  584. package/dist/x402/amount-guard.d.ts.map +1 -0
  585. package/dist/x402/amount-guard.js +80 -0
  586. package/dist/x402/amount-guard.js.map +1 -0
  587. package/dist/x402/audit-trail.d.ts +26 -0
  588. package/dist/x402/audit-trail.d.ts.map +1 -0
  589. package/dist/x402/audit-trail.js +32 -0
  590. package/dist/x402/audit-trail.js.map +1 -0
  591. package/dist/x402/codec.d.ts +26 -0
  592. package/dist/x402/codec.d.ts.map +1 -0
  593. package/dist/x402/codec.js +95 -0
  594. package/dist/x402/codec.js.map +1 -0
  595. package/dist/x402/errors.d.ts +34 -0
  596. package/dist/x402/errors.d.ts.map +1 -0
  597. package/dist/x402/errors.js +53 -0
  598. package/dist/x402/errors.js.map +1 -0
  599. package/dist/x402/facilitator-verify.d.ts +24 -0
  600. package/dist/x402/facilitator-verify.d.ts.map +1 -0
  601. package/dist/x402/facilitator-verify.js +74 -0
  602. package/dist/x402/facilitator-verify.js.map +1 -0
  603. package/dist/x402/index.d.ts +14 -0
  604. package/dist/x402/index.d.ts.map +1 -0
  605. package/dist/x402/index.js +23 -0
  606. package/dist/x402/index.js.map +1 -0
  607. package/dist/x402/nonce-tracker.d.ts +65 -0
  608. package/dist/x402/nonce-tracker.d.ts.map +1 -0
  609. package/dist/x402/nonce-tracker.js +123 -0
  610. package/dist/x402/nonce-tracker.js.map +1 -0
  611. package/dist/x402/payment-selector.d.ts +20 -0
  612. package/dist/x402/payment-selector.d.ts.map +1 -0
  613. package/dist/x402/payment-selector.js +49 -0
  614. package/dist/x402/payment-selector.js.map +1 -0
  615. package/dist/x402/policy-bridge.d.ts +23 -0
  616. package/dist/x402/policy-bridge.d.ts.map +1 -0
  617. package/dist/x402/policy-bridge.js +67 -0
  618. package/dist/x402/policy-bridge.js.map +1 -0
  619. package/dist/x402/shielded-fetch.d.ts +46 -0
  620. package/dist/x402/shielded-fetch.d.ts.map +1 -0
  621. package/dist/x402/shielded-fetch.js +342 -0
  622. package/dist/x402/shielded-fetch.js.map +1 -0
  623. package/dist/x402/transfer-builder.d.ts +43 -0
  624. package/dist/x402/transfer-builder.d.ts.map +1 -0
  625. package/dist/x402/transfer-builder.js +126 -0
  626. package/dist/x402/transfer-builder.js.map +1 -0
  627. package/dist/x402/types.d.ts +109 -0
  628. package/dist/x402/types.d.ts.map +1 -0
  629. package/dist/x402/types.js +8 -0
  630. package/dist/x402/types.js.map +1 -0
  631. package/package.json +98 -0
package/dist/shield.js ADDED
@@ -0,0 +1,701 @@
1
+ /**
2
+ * Shield — Kit-native Client-Side Policy Enforcement (Defense-in-Depth)
3
+ *
4
+ * Wraps instruction signing with spending limits, rate limits,
5
+ * program allowlists, and custom checks.
6
+ *
7
+ * IMPORTANT: Shield is a CLIENT-SIDE advisory layer, NOT a security boundary.
8
+ * The on-chain program (validate_and_authorize + finalize_session) provides the
9
+ * hard enforcement of spending caps, permissions, and protocol allowlists.
10
+ * Shield reduces blast radius by catching violations before signing, but callers
11
+ * CAN bypass Shield by using the underlying TransactionSigner directly.
12
+ * This is by design — Shield prevents accidents, on-chain prevents catastrophe.
13
+ *
14
+ * State (spending counters, velocity limits) is in-memory and resets on process
15
+ * restart. Use syncFromOnChain() to re-sync with the authoritative on-chain state.
16
+ */
17
+ import { getBase64EncodedWireTransaction } from "@solana/kit";
18
+ import { analyzeInstructions, } from "./inspector.js";
19
+ import { resolvePolicies, } from "./policies.js";
20
+ import { simulateBeforeSend } from "./simulation.js";
21
+ import { SIGIL_PROGRAM_ADDRESS } from "./generated/programs/sigil.js";
22
+ import { VALIDATE_AND_AUTHORIZE_DISCRIMINATOR } from "./generated/instructions/validateAndAuthorize.js";
23
+ import { FINALIZE_SESSION_DISCRIMINATOR } from "./generated/instructions/finalizeSession.js";
24
+ import { resolveVaultState, } from "./state-resolver.js";
25
+ import { isStablecoinMint, validateNetwork } from "./types.js";
26
+ export class ShieldDeniedError extends Error {
27
+ violations;
28
+ code;
29
+ constructor(violations, code) {
30
+ const msgs = violations.map((v) => v.message).join("; ");
31
+ super(`Shield denied: ${msgs}`);
32
+ this.violations = violations;
33
+ this.name = "ShieldDeniedError";
34
+ this.code = code;
35
+ }
36
+ }
37
+ export class ShieldState {
38
+ spendEntries = [];
39
+ txEntries = [];
40
+ // On-chain sync state
41
+ _resolvedState = null;
42
+ _localUsdAdditions = 0n;
43
+ _network = null;
44
+ // S-7: Mutual exclusivity tracking
45
+ _enforceUsed = false;
46
+ getSpendInWindow(mint, windowMs) {
47
+ const cutoff = Date.now() - windowMs;
48
+ return this.spendEntries
49
+ .filter((e) => e.mint === mint && e.timestamp >= cutoff)
50
+ .reduce((sum, e) => sum + e.amount, 0n);
51
+ }
52
+ getTotalSpendInWindow(windowMs) {
53
+ const cutoff = Date.now() - windowMs;
54
+ return this.spendEntries
55
+ .filter((e) => e.timestamp >= cutoff)
56
+ .reduce((sum, e) => sum + e.amount, 0n);
57
+ }
58
+ getTransactionCountInWindow(windowMs) {
59
+ const cutoff = Date.now() - windowMs;
60
+ return this.txEntries.filter((e) => e.timestamp >= cutoff).length;
61
+ }
62
+ recordSpend(mint, amount) {
63
+ this.spendEntries.push({ mint, amount, timestamp: Date.now() });
64
+ this.prune();
65
+ }
66
+ recordTransaction() {
67
+ this.txEntries.push({ timestamp: Date.now() });
68
+ this.prune();
69
+ }
70
+ /** Prune stale entries when arrays exceed threshold. */
71
+ prune() {
72
+ const PRUNE_THRESHOLD = 10_000;
73
+ if (this.spendEntries.length > PRUNE_THRESHOLD) {
74
+ const cutoff = Date.now() - 86_400_000;
75
+ this.spendEntries = this.spendEntries.filter((e) => e.timestamp >= cutoff);
76
+ }
77
+ if (this.txEntries.length > PRUNE_THRESHOLD) {
78
+ const cutoff = Date.now() - 86_400_000;
79
+ this.txEntries = this.txEntries.filter((e) => e.timestamp >= cutoff);
80
+ }
81
+ }
82
+ /** Sync spending baseline from on-chain state. Resets local additions. */
83
+ syncFromOnChain(state, network) {
84
+ this._resolvedState = state;
85
+ this._localUsdAdditions = 0n;
86
+ if (network !== undefined) {
87
+ this._network = network;
88
+ }
89
+ }
90
+ /** Record local USD spend (optimistic addition on top of on-chain baseline). */
91
+ recordUsdSpend(amount) {
92
+ this._localUsdAdditions += amount;
93
+ }
94
+ /** Effective 24h global spend: on-chain baseline + local additions. */
95
+ getEffectiveGlobalSpent24h() {
96
+ if (!this._resolvedState)
97
+ return this._localUsdAdditions;
98
+ return this._resolvedState.globalBudget.spent24h + this._localUsdAdditions;
99
+ }
100
+ /** Effective 24h remaining against on-chain cap. Returns null if not synced. */
101
+ getEffectiveGlobalRemaining() {
102
+ if (!this._resolvedState)
103
+ return null;
104
+ const cap = this._resolvedState.globalBudget.cap;
105
+ const spent = this.getEffectiveGlobalSpent24h();
106
+ return spent < cap ? cap - spent : 0n;
107
+ }
108
+ /** Resolved on-chain state, or null if never synced. */
109
+ get resolvedState() {
110
+ return this._resolvedState;
111
+ }
112
+ /** Local USD additions since last sync. */
113
+ get localUsdAdditions() {
114
+ return this._localUsdAdditions;
115
+ }
116
+ /** Network configured during sync. Null if never synced with network. */
117
+ get network() {
118
+ return this._network;
119
+ }
120
+ /** Effective 24h agent spend: on-chain baseline + local additions. Null if no agent budget. */
121
+ getEffectiveAgentSpent24h() {
122
+ if (!this._resolvedState?.agentBudget)
123
+ return null;
124
+ return this._resolvedState.agentBudget.spent24h + this._localUsdAdditions;
125
+ }
126
+ /** Effective 24h remaining against agent cap. Null if no agent budget or not synced. */
127
+ getEffectiveAgentRemaining() {
128
+ if (!this._resolvedState?.agentBudget)
129
+ return null;
130
+ const cap = this._resolvedState.agentBudget.cap;
131
+ const spent = this._resolvedState.agentBudget.spent24h + this._localUsdAdditions;
132
+ return spent < cap ? cap - spent : 0n;
133
+ }
134
+ /** S-7: Whether enforce() has been called on this state. */
135
+ get enforceUsed() {
136
+ return this._enforceUsed;
137
+ }
138
+ /** S-7: Mark that enforce() was used. */
139
+ markEnforceUsed() {
140
+ this._enforceUsed = true;
141
+ }
142
+ checkpoint() {
143
+ return {
144
+ spendEntries: [...this.spendEntries],
145
+ txEntries: [...this.txEntries],
146
+ resolvedState: this._resolvedState,
147
+ localUsdAdditions: this._localUsdAdditions,
148
+ network: this._network,
149
+ enforceUsed: this._enforceUsed,
150
+ };
151
+ }
152
+ rollback(cp) {
153
+ this.spendEntries = [...cp.spendEntries];
154
+ this.txEntries = [...cp.txEntries];
155
+ this._resolvedState = cp.resolvedState;
156
+ this._localUsdAdditions = cp.localUsdAdditions;
157
+ this._network = cp.network;
158
+ this._enforceUsed = cp.enforceUsed;
159
+ }
160
+ reset() {
161
+ this.spendEntries = [];
162
+ this.txEntries = [];
163
+ this._resolvedState = null;
164
+ this._localUsdAdditions = 0n;
165
+ this._network = null;
166
+ this._enforceUsed = false;
167
+ }
168
+ }
169
+ // ─── Policy Evaluation ──────────────────────────────────────────────────────
170
+ /**
171
+ * Evaluate a set of instructions against resolved policies.
172
+ * When state has on-chain sync, also checks vault/agent caps (requires network).
173
+ */
174
+ export function evaluateInstructions(instructions, signerAddress, resolved, state, network) {
175
+ if (network)
176
+ validateNetwork(network);
177
+ const violations = [];
178
+ const analysis = analyzeInstructions(instructions, signerAddress);
179
+ // 1. Program allowlist check
180
+ if (resolved.blockUnknownPrograms && resolved.allowedProtocols) {
181
+ for (const pid of analysis.programIds) {
182
+ if (!SYSTEM_PROGRAMS.has(pid) && !resolved.allowedProtocols.has(pid)) {
183
+ violations.push({
184
+ rule: "program_allowlist",
185
+ message: `Program ${pid} is not in the allowed list`,
186
+ suggestion: "Use a protocol that is explicitly allowed by the policy",
187
+ });
188
+ }
189
+ }
190
+ }
191
+ // 2. Spend limit check
192
+ if (resolved.spendLimits) {
193
+ for (const limit of resolved.spendLimits) {
194
+ const windowMs = limit.windowMs ?? 86_400_000;
195
+ const currentSpend = state.getSpendInWindow(limit.mint, windowMs);
196
+ const txSpend = analysis.tokenTransfers
197
+ .filter((t) => t.authority === signerAddress &&
198
+ (t.mint === limit.mint || t.mint === null))
199
+ .reduce((sum, t) => sum + t.amount, 0n);
200
+ if (currentSpend + txSpend > limit.amount) {
201
+ violations.push({
202
+ rule: "spend_limit",
203
+ message: `Spend limit exceeded for ${limit.mint}: ${currentSpend + txSpend} > ${limit.amount}`,
204
+ suggestion: "Reduce the transaction amount or wait for the rolling window to reset",
205
+ });
206
+ }
207
+ }
208
+ }
209
+ // 3. Rate limit check
210
+ if (resolved.rateLimit) {
211
+ const count = state.getTransactionCountInWindow(resolved.rateLimit.windowMs);
212
+ if (count >= resolved.rateLimit.maxTransactions) {
213
+ violations.push({
214
+ rule: "rate_limit",
215
+ message: `Rate limit exceeded: ${count}/${resolved.rateLimit.maxTransactions} transactions in window`,
216
+ suggestion: "Wait before sending more transactions",
217
+ });
218
+ }
219
+ }
220
+ // 4. Custom check
221
+ if (resolved.customCheck) {
222
+ const customAnalysis = {
223
+ programIds: analysis.programIds,
224
+ transfers: analysis.tokenTransfers.map((t) => ({
225
+ mint: (t.mint ?? ""),
226
+ amount: t.amount,
227
+ direction: (t.authority === signerAddress ? "outgoing" : "unknown"),
228
+ destination: t.destination,
229
+ })),
230
+ estimatedValueLamports: analysis.estimatedValue,
231
+ };
232
+ const customResult = resolved.customCheck(customAnalysis);
233
+ if (!customResult.allowed) {
234
+ violations.push({
235
+ rule: "custom",
236
+ message: customResult.reason ?? "Custom policy check failed",
237
+ });
238
+ }
239
+ }
240
+ // 5. On-chain vault/agent cap check (when synced)
241
+ const effectiveNetwork = network ?? state.network;
242
+ if (state.resolvedState && effectiveNetwork) {
243
+ const rs = state.resolvedState;
244
+ const stablecoinUsdAmount = computeStablecoinUsd(analysis.tokenTransfers, signerAddress, effectiveNetwork);
245
+ if (stablecoinUsdAmount > 0n) {
246
+ // Transaction size
247
+ if (stablecoinUsdAmount > rs.maxTransactionUsd) {
248
+ violations.push({
249
+ rule: "on_chain_tx_size",
250
+ message: `Transaction ${stablecoinUsdAmount} exceeds max ${rs.maxTransactionUsd}`,
251
+ suggestion: "Reduce the transaction amount",
252
+ });
253
+ }
254
+ // Global vault cap
255
+ const effectiveGlobalSpent = state.getEffectiveGlobalSpent24h();
256
+ if (effectiveGlobalSpent + stablecoinUsdAmount > rs.globalBudget.cap) {
257
+ violations.push({
258
+ rule: "on_chain_vault_cap",
259
+ message: `Would exceed on-chain daily cap: ${effectiveGlobalSpent + stablecoinUsdAmount} > ${rs.globalBudget.cap}`,
260
+ suggestion: "Reduce amount or wait for the 24h window to roll",
261
+ });
262
+ }
263
+ // Per-agent cap
264
+ const effectiveAgentSpent = state.getEffectiveAgentSpent24h();
265
+ if (effectiveAgentSpent !== null && rs.agentBudget) {
266
+ if (effectiveAgentSpent + stablecoinUsdAmount > rs.agentBudget.cap) {
267
+ violations.push({
268
+ rule: "on_chain_agent_cap",
269
+ message: `Would exceed agent spend limit: ${effectiveAgentSpent + stablecoinUsdAmount} > ${rs.agentBudget.cap}`,
270
+ suggestion: "Reduce amount or wait",
271
+ });
272
+ }
273
+ }
274
+ }
275
+ }
276
+ return { violations, analysis };
277
+ }
278
+ const SYSTEM_PROGRAMS = new Set([
279
+ "11111111111111111111111111111111",
280
+ "ComputeBudget111111111111111111111111111111",
281
+ "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
282
+ ]);
283
+ /**
284
+ * Sum USD value of outgoing stablecoin transfers only.
285
+ * Plain Transfer instructions have mint=null — skip those.
286
+ * On-chain uses stablecoin identity: USDC/USDT amount / 10^6 = USD.
287
+ */
288
+ function computeStablecoinUsd(transfers, signerAddress, network) {
289
+ return transfers
290
+ .filter((t) => t.authority === signerAddress &&
291
+ t.mint !== null &&
292
+ isStablecoinMint(t.mint, network))
293
+ .reduce((sum, t) => sum + t.amount, 0n);
294
+ }
295
+ /**
296
+ * Create a Kit-native shield context for client-side policy enforcement.
297
+ *
298
+ * Unlike the web3.js shield() which wraps wallet signing,
299
+ * this works at the instruction level:
300
+ * - check() validates instructions without side effects
301
+ * - enforce() validates and records, throwing on violation
302
+ */
303
+ export function shield(policies, options) {
304
+ let resolved = resolvePolicies(policies);
305
+ const state = new ShieldState();
306
+ let paused = false;
307
+ const syncConfig = options?.onChainSync;
308
+ if (syncConfig)
309
+ validateNetwork(syncConfig.network);
310
+ const stalenessThreshold = options?.stalenessWarnThresholdSec ?? 300;
311
+ // S-1: Warn when no onChainSync — spend tracking is ephemeral
312
+ if (!syncConfig) {
313
+ console.warn("[Shield] No onChainSync configured — spend tracking is client-side only " +
314
+ "and will reset on process restart.");
315
+ }
316
+ return {
317
+ check(instructions, signerAddress) {
318
+ if (paused) {
319
+ return {
320
+ allowed: false,
321
+ violations: [
322
+ {
323
+ rule: "paused",
324
+ message: "Shield is paused — all operations blocked until resume()",
325
+ suggestion: "Call resume() to re-enable",
326
+ },
327
+ ],
328
+ };
329
+ }
330
+ // S-2: Staleness warning
331
+ _warnIfStale(state, stalenessThreshold);
332
+ const { violations } = evaluateInstructions(instructions, signerAddress, resolved, state, syncConfig?.network);
333
+ return { allowed: violations.length === 0, violations };
334
+ },
335
+ enforce(instructions, signerAddress) {
336
+ if (paused) {
337
+ const error = new ShieldDeniedError([
338
+ {
339
+ rule: "paused",
340
+ message: "Shield is paused — all operations blocked until resume()",
341
+ suggestion: "Call resume() to re-enable",
342
+ },
343
+ ]);
344
+ options?.onDenied?.(error);
345
+ throw error;
346
+ }
347
+ // S-2: Staleness warning
348
+ _warnIfStale(state, stalenessThreshold);
349
+ const { violations, analysis } = evaluateInstructions(instructions, signerAddress, resolved, state, syncConfig?.network);
350
+ if (violations.length > 0) {
351
+ const error = new ShieldDeniedError(violations);
352
+ options?.onDenied?.(error);
353
+ throw error;
354
+ }
355
+ // Record the transaction — reuse analysis from evaluateInstructions
356
+ for (const transfer of analysis.tokenTransfers) {
357
+ if (transfer.authority === signerAddress) {
358
+ state.recordSpend(transfer.mint ?? "", transfer.amount);
359
+ }
360
+ }
361
+ state.recordTransaction();
362
+ // Record aggregate stablecoin USD for on-chain cap tracking
363
+ if (state.resolvedState && syncConfig) {
364
+ const stablecoinUsd = computeStablecoinUsd(analysis.tokenTransfers, signerAddress, syncConfig.network);
365
+ if (stablecoinUsd > 0n) {
366
+ state.recordUsdSpend(stablecoinUsd);
367
+ }
368
+ }
369
+ // S-7: Mark that enforce() was used
370
+ state.markEnforceUsed();
371
+ options?.onApproved?.();
372
+ },
373
+ get resolvedPolicies() {
374
+ return resolved;
375
+ },
376
+ get isPaused() {
377
+ return paused;
378
+ },
379
+ updatePolicies(newPolicies) {
380
+ resolved = resolvePolicies(newPolicies);
381
+ options?.onPolicyUpdate?.(newPolicies);
382
+ },
383
+ resetState() {
384
+ state.reset();
385
+ },
386
+ pause() {
387
+ paused = true;
388
+ options?.onPause?.();
389
+ },
390
+ resume() {
391
+ paused = false;
392
+ options?.onResume?.();
393
+ },
394
+ getSpendingSummary() {
395
+ const tokens = (resolved.spendLimits ?? []).map((limit) => {
396
+ const windowMs = limit.windowMs ?? 86_400_000;
397
+ const spent = state.getSpendInWindow(limit.mint, windowMs);
398
+ const remaining = limit.amount > spent ? limit.amount - spent : 0n;
399
+ return {
400
+ mint: limit.mint,
401
+ spent,
402
+ limit: limit.amount,
403
+ remaining,
404
+ windowMs,
405
+ };
406
+ });
407
+ const rl = resolved.rateLimit ?? {
408
+ maxTransactions: 60,
409
+ windowMs: 3_600_000,
410
+ };
411
+ const txCount = state.getTransactionCountInWindow(rl.windowMs);
412
+ const rs = state.resolvedState;
413
+ const onChain = rs
414
+ ? {
415
+ globalSpent24h: state.getEffectiveGlobalSpent24h(),
416
+ globalCap: rs.globalBudget.cap,
417
+ globalRemaining: state.getEffectiveGlobalRemaining() ?? 0n,
418
+ agentSpent24h: state.getEffectiveAgentSpent24h(),
419
+ agentCap: rs.agentBudget?.cap ?? null,
420
+ agentRemaining: state.getEffectiveAgentRemaining(),
421
+ maxTransactionUsd: rs.maxTransactionUsd,
422
+ localAdditions: state.localUsdAdditions,
423
+ syncedAt: rs.resolvedAtTimestamp,
424
+ }
425
+ : undefined;
426
+ return {
427
+ tokens,
428
+ rateLimit: {
429
+ count: txCount,
430
+ limit: rl.maxTransactions,
431
+ remaining: Math.max(0, rl.maxTransactions - txCount),
432
+ windowMs: rl.windowMs,
433
+ },
434
+ isPaused: paused,
435
+ onChain,
436
+ };
437
+ },
438
+ async sync() {
439
+ if (!syncConfig) {
440
+ throw new Error("Cannot sync: onChainSync not configured in ShieldOptions");
441
+ }
442
+ const resolved = await resolveVaultState(syncConfig.rpc, syncConfig.vaultAddress, syncConfig.agentAddress);
443
+ state.syncFromOnChain(resolved, syncConfig.network);
444
+ },
445
+ get hasOnChainSync() {
446
+ return syncConfig !== undefined;
447
+ },
448
+ get state() {
449
+ return state;
450
+ },
451
+ };
452
+ }
453
+ /**
454
+ * Create a TransactionSigner that enforces a 5-property pre-sign gate.
455
+ *
456
+ * Intercepts every signing call and runs:
457
+ * 1. Intent-TX correspondence (SOFT — logs warning)
458
+ * 2. Velocity ceiling (HARD — throws)
459
+ * 3. Simulation liveness (HARD — throws)
460
+ * 4. Instruction allowlist via ShieldedContext (HARD — throws)
461
+ * 5. Session binding (SOFT — logs warning)
462
+ *
463
+ * On pass, delegates to the baseSigner. On HARD fail, throws ShieldDeniedError.
464
+ *
465
+ * @param baseSigner - The underlying TransactionSigner to delegate to
466
+ * @param shieldCtx - ShieldedContext providing policy evaluation and state
467
+ * @param options - Optional configuration for each property
468
+ */
469
+ export function createShieldedSigner(baseSigner, shieldCtx, options) {
470
+ return {
471
+ address: baseSigner.address,
472
+ async modifyAndSignTransactions(txs) {
473
+ for (const tx of txs) {
474
+ const instructions = _extractInstructionsFromCompiled(tx, options?.altCache);
475
+ // Property 2: Velocity ceiling (HARD)
476
+ if (options?.velocityThresholds) {
477
+ checkVelocityCeiling(shieldCtx.state, instructions, baseSigner.address, options.velocityThresholds);
478
+ }
479
+ // Property 3: Simulation liveness (HARD)
480
+ if (options?.rpc && !options?.skipSimulation) {
481
+ let wireBase64;
482
+ try {
483
+ wireBase64 = getBase64EncodedWireTransaction(tx);
484
+ }
485
+ catch (encodeErr) {
486
+ // Fail-closed: if we can't encode the TX, block signing
487
+ throw new ShieldDeniedError([
488
+ {
489
+ rule: "simulation",
490
+ message: `Cannot encode transaction for simulation: ${encodeErr instanceof Error ? encodeErr.message : "unknown error"}`,
491
+ suggestion: "Ensure the transaction is properly formed",
492
+ },
493
+ ]);
494
+ }
495
+ const result = await simulateBeforeSend(options.rpc, wireBase64);
496
+ if (!result.success) {
497
+ throw new ShieldDeniedError([
498
+ {
499
+ rule: "simulation",
500
+ message: `Simulation failed: ${result.error?.message ?? "unknown error"}`,
501
+ suggestion: result.error?.suggestion ?? "Check transaction validity",
502
+ },
503
+ ]);
504
+ }
505
+ }
506
+ // Property 4: Instruction allowlist (HARD)
507
+ const checkResult = shieldCtx.check(instructions, baseSigner.address);
508
+ if (!checkResult.allowed) {
509
+ throw new ShieldDeniedError(checkResult.violations);
510
+ }
511
+ // Property 5: Session binding (severity controlled by S-4)
512
+ if (options?.sessionContext) {
513
+ checkSessionBinding(tx, SIGIL_PROGRAM_ADDRESS, options?.sessionBindingSeverity ?? "hard");
514
+ }
515
+ // S-7: Warn about double-counting risk if enforce() was already used
516
+ if (shieldCtx.state.enforceUsed) {
517
+ console.warn("[ShieldedSigner] enforce() was already called on this ShieldState — " +
518
+ "using ShieldedSigner after enforce() may double-count spending");
519
+ }
520
+ // All checks passed — record spend and transaction in shared state
521
+ const analysis = analyzeInstructions(instructions, baseSigner.address);
522
+ for (const transfer of analysis.tokenTransfers) {
523
+ if (transfer.authority === baseSigner.address) {
524
+ shieldCtx.state.recordSpend(transfer.mint ?? "", transfer.amount);
525
+ }
526
+ }
527
+ shieldCtx.state.recordTransaction();
528
+ // Record aggregate stablecoin USD for on-chain cap tracking
529
+ if (shieldCtx.state.resolvedState && shieldCtx.state.network) {
530
+ const stablecoinUsd = computeStablecoinUsd(analysis.tokenTransfers, baseSigner.address, shieldCtx.state.network);
531
+ if (stablecoinUsd > 0n) {
532
+ shieldCtx.state.recordUsdSpend(stablecoinUsd);
533
+ }
534
+ }
535
+ }
536
+ // Delegate to base signer
537
+ const signer = baseSigner;
538
+ if (signer.modifyAndSignTransactions) {
539
+ return signer.modifyAndSignTransactions(txs);
540
+ }
541
+ else if (signer.signTransactions) {
542
+ const sigs = await signer.signTransactions(txs);
543
+ return txs.map((tx, i) => ({
544
+ ...tx,
545
+ signatures: { ...tx.signatures, ...sigs[i] },
546
+ }));
547
+ }
548
+ throw new Error("Unsupported signer type: must implement signTransactions or modifyAndSignTransactions");
549
+ },
550
+ };
551
+ }
552
+ // ─── Internal Helpers ────────────────────────────────────────────────────────
553
+ /**
554
+ * Extract InspectableInstruction[] from a compiled transaction object.
555
+ * Resolves program addresses from staticAccounts[programAddressIndex].
556
+ * When ALTs are used, resolves ALT-compressed account indices via AltCache.
557
+ *
558
+ * Exported as _extractInstructionsFromCompiled for direct testing.
559
+ */
560
+ export function _extractInstructionsFromCompiled(tx, altCache, warnings) {
561
+ const msg = tx.compiledMessage;
562
+ if (!msg?.staticAccounts?.length || !msg?.instructions?.length) {
563
+ return [];
564
+ }
565
+ // Build combined account table: static + ALT-resolved
566
+ let accountTable = [...msg.staticAccounts];
567
+ if (msg.addressTableLookups?.length && altCache) {
568
+ // S-3: Resolve ALT index with bounds check, accumulating warnings on OOB
569
+ const resolveAltIndex = (idx, resolved) => {
570
+ if (idx < resolved.length)
571
+ return resolved[idx];
572
+ warnings?.push(`ALT index ${idx} out of bounds (table has ${resolved.length} entries) — account substituted with system program for analysis`);
573
+ return "11111111111111111111111111111111";
574
+ };
575
+ // Two-pass ordering: Solana compiled messages order ALL writables from
576
+ // ALL lookups first, then ALL readonlys from ALL lookups.
577
+ // Pass 1: ALL writables from ALL lookups (in lookup order)
578
+ for (const lookup of msg.addressTableLookups) {
579
+ const resolved = altCache.getCachedAddresses(lookup.lookupTableAddress);
580
+ if (resolved) {
581
+ for (const idx of lookup.writableIndexes ?? []) {
582
+ accountTable.push(resolveAltIndex(idx, resolved));
583
+ }
584
+ }
585
+ }
586
+ // Pass 2: ALL readonlys from ALL lookups
587
+ for (const lookup of msg.addressTableLookups) {
588
+ const resolved = altCache.getCachedAddresses(lookup.lookupTableAddress);
589
+ if (resolved) {
590
+ for (const idx of lookup.readonlyIndexes ?? []) {
591
+ accountTable.push(resolveAltIndex(idx, resolved));
592
+ }
593
+ }
594
+ }
595
+ }
596
+ else if (msg.addressTableLookups?.length) {
597
+ console.warn("[ShieldedSigner] ALT-compressed accounts cannot be resolved without AltCache");
598
+ }
599
+ return msg.instructions.map((ix) => ({
600
+ programAddress: accountTable[ix.programAddressIndex],
601
+ accounts: (ix.accountIndices ?? []).map((i) => ({
602
+ address: accountTable[i],
603
+ })),
604
+ data: ix.data ? new Uint8Array(ix.data) : new Uint8Array(),
605
+ }));
606
+ }
607
+ /**
608
+ * Property 2: Check velocity ceilings. HARD — throws ShieldDeniedError.
609
+ */
610
+ function checkVelocityCeiling(state, instructions, signerAddress, thresholds) {
611
+ if (thresholds.maxTxPerHour !== undefined) {
612
+ const count = state.getTransactionCountInWindow(3_600_000);
613
+ if (count >= thresholds.maxTxPerHour) {
614
+ throw new ShieldDeniedError([
615
+ {
616
+ rule: "velocity_ceiling",
617
+ message: `Transaction rate ${count}/${thresholds.maxTxPerHour} per hour exceeded`,
618
+ suggestion: "Wait before sending more transactions",
619
+ },
620
+ ]);
621
+ }
622
+ }
623
+ if (thresholds.maxUsdPerHour !== undefined) {
624
+ const analysis = analyzeInstructions(instructions, signerAddress);
625
+ const currentSpend = state.getTotalSpendInWindow(3_600_000);
626
+ const projectedSpend = currentSpend + analysis.estimatedValue;
627
+ if (projectedSpend > thresholds.maxUsdPerHour) {
628
+ throw new ShieldDeniedError([
629
+ {
630
+ rule: "velocity_ceiling",
631
+ message: `Hourly USD spend ${projectedSpend} exceeds ceiling ${thresholds.maxUsdPerHour}`,
632
+ suggestion: "Reduce transaction amounts or wait for the window to reset",
633
+ },
634
+ ]);
635
+ }
636
+ }
637
+ }
638
+ /**
639
+ * Property 5: Check session binding (validate+finalize sandwich).
640
+ * S-4: severity controls behavior — 'hard' throws, 'soft' warns.
641
+ */
642
+ function checkSessionBinding(tx, programAddress, severity = "hard") {
643
+ const msg = tx.compiledMessage;
644
+ if (!msg?.staticAccounts?.length || !msg?.instructions?.length) {
645
+ const message = "[ShieldedSigner] Cannot verify session binding: no compiled message";
646
+ if (severity === "hard") {
647
+ throw new ShieldDeniedError([{ rule: "session_binding", message }]);
648
+ }
649
+ console.warn(message);
650
+ return;
651
+ }
652
+ const sigilIxs = msg.instructions.filter((ix) => msg.staticAccounts[ix.programAddressIndex] === programAddress);
653
+ if (sigilIxs.length === 0) {
654
+ const message = "[ShieldedSigner] No Sigil instructions found in transaction";
655
+ if (severity === "hard") {
656
+ throw new ShieldDeniedError([{ rule: "session_binding", message }]);
657
+ }
658
+ console.warn(message);
659
+ return;
660
+ }
661
+ const firstData = sigilIxs[0].data;
662
+ const lastData = sigilIxs[sigilIxs.length - 1].data;
663
+ const hasValidate = firstData &&
664
+ firstData.length >= 8 &&
665
+ matchesDiscriminator(firstData, VALIDATE_AND_AUTHORIZE_DISCRIMINATOR);
666
+ const hasFinalize = lastData &&
667
+ lastData.length >= 8 &&
668
+ matchesDiscriminator(lastData, FINALIZE_SESSION_DISCRIMINATOR);
669
+ if (!hasValidate || !hasFinalize) {
670
+ const message = `[ShieldedSigner] Session binding incomplete: validate=${!!hasValidate}, finalize=${!!hasFinalize}`;
671
+ if (severity === "hard") {
672
+ throw new ShieldDeniedError([{ rule: "session_binding", message }]);
673
+ }
674
+ console.warn(message);
675
+ }
676
+ }
677
+ /**
678
+ * S-2: Warn when resolved state is stale (older than threshold).
679
+ */
680
+ function _warnIfStale(state, thresholdSec) {
681
+ if (!state.resolvedState)
682
+ return;
683
+ const age = Math.floor(Date.now() / 1000) -
684
+ Number(state.resolvedState.resolvedAtTimestamp);
685
+ if (age > thresholdSec) {
686
+ console.warn(`[Shield] Resolved state is ${age}s old (threshold: ${thresholdSec}s) — call sync() for fresh data`);
687
+ }
688
+ }
689
+ /**
690
+ * Compare first N bytes of data against a discriminator.
691
+ */
692
+ function matchesDiscriminator(data, disc) {
693
+ if (data.length < disc.length)
694
+ return false;
695
+ for (let i = 0; i < disc.length; i++) {
696
+ if (data[i] !== disc[i])
697
+ return false;
698
+ }
699
+ return true;
700
+ }
701
+ //# sourceMappingURL=shield.js.map