@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.
- package/LICENSE +191 -0
- package/README.md +190 -0
- package/dist/advanced-analytics.d.ts +118 -0
- package/dist/advanced-analytics.d.ts.map +1 -0
- package/dist/advanced-analytics.js +341 -0
- package/dist/advanced-analytics.js.map +1 -0
- package/dist/agent-analytics.d.ts +76 -0
- package/dist/agent-analytics.d.ts.map +1 -0
- package/dist/agent-analytics.js +179 -0
- package/dist/agent-analytics.js.map +1 -0
- package/dist/agent-errors.d.ts +151 -0
- package/dist/agent-errors.d.ts.map +1 -0
- package/dist/agent-errors.js +2001 -0
- package/dist/agent-errors.js.map +1 -0
- package/dist/alt-config.d.ts +43 -0
- package/dist/alt-config.d.ts.map +1 -0
- package/dist/alt-config.js +78 -0
- package/dist/alt-config.js.map +1 -0
- package/dist/alt-loader.d.ts +47 -0
- package/dist/alt-loader.d.ts.map +1 -0
- package/dist/alt-loader.js +143 -0
- package/dist/alt-loader.js.map +1 -0
- package/dist/balance-tracker.d.ts +87 -0
- package/dist/balance-tracker.d.ts.map +1 -0
- package/dist/balance-tracker.js +181 -0
- package/dist/balance-tracker.js.map +1 -0
- package/dist/composer.d.ts +56 -0
- package/dist/composer.d.ts.map +1 -0
- package/dist/composer.js +77 -0
- package/dist/composer.js.map +1 -0
- package/dist/core/engine.d.ts +17 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +177 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/errors.d.ts +24 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +16 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +10 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/policies.d.ts +75 -0
- package/dist/core/policies.d.ts.map +1 -0
- package/dist/core/policies.js +126 -0
- package/dist/core/policies.js.map +1 -0
- package/dist/core/registry.d.ts +29 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +125 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/state.d.ts +71 -0
- package/dist/core/state.d.ts.map +1 -0
- package/dist/core/state.js +169 -0
- package/dist/core/state.js.map +1 -0
- package/dist/create-vault.d.ts +58 -0
- package/dist/create-vault.d.ts.map +1 -0
- package/dist/create-vault.js +90 -0
- package/dist/create-vault.js.map +1 -0
- package/dist/custody-adapter.d.ts +54 -0
- package/dist/custody-adapter.d.ts.map +1 -0
- package/dist/custody-adapter.js +45 -0
- package/dist/custody-adapter.js.map +1 -0
- package/dist/event-analytics.d.ts +45 -0
- package/dist/event-analytics.d.ts.map +1 -0
- package/dist/event-analytics.js +277 -0
- package/dist/event-analytics.js.map +1 -0
- package/dist/events.d.ts +56 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +151 -0
- package/dist/events.js.map +1 -0
- package/dist/formatting.d.ts +103 -0
- package/dist/formatting.d.ts.map +1 -0
- package/dist/formatting.js +244 -0
- package/dist/formatting.js.map +1 -0
- package/dist/generated/accounts/agentSpendOverlay.d.ts +54 -0
- package/dist/generated/accounts/agentSpendOverlay.d.ts.map +1 -0
- package/dist/generated/accounts/agentSpendOverlay.js +74 -0
- package/dist/generated/accounts/agentSpendOverlay.js.map +1 -0
- package/dist/generated/accounts/agentVault.d.ts +95 -0
- package/dist/generated/accounts/agentVault.d.ts.map +1 -0
- package/dist/generated/accounts/agentVault.js +83 -0
- package/dist/generated/accounts/agentVault.js.map +1 -0
- package/dist/generated/accounts/escrowDeposit.d.ts +50 -0
- package/dist/generated/accounts/escrowDeposit.d.ts.map +1 -0
- package/dist/generated/accounts/escrowDeposit.js +76 -0
- package/dist/generated/accounts/escrowDeposit.js.map +1 -0
- package/dist/generated/accounts/index.d.ts +17 -0
- package/dist/generated/accounts/index.d.ts.map +1 -0
- package/dist/generated/accounts/index.js +17 -0
- package/dist/generated/accounts/index.js.map +1 -0
- package/dist/generated/accounts/instructionConstraints.d.ts +37 -0
- package/dist/generated/accounts/instructionConstraints.d.ts.map +1 -0
- package/dist/generated/accounts/instructionConstraints.js +64 -0
- package/dist/generated/accounts/instructionConstraints.js.map +1 -0
- package/dist/generated/accounts/pendingConstraintsUpdate.d.ts +53 -0
- package/dist/generated/accounts/pendingConstraintsUpdate.d.ts.map +1 -0
- package/dist/generated/accounts/pendingConstraintsUpdate.js +68 -0
- package/dist/generated/accounts/pendingConstraintsUpdate.js.map +1 -0
- package/dist/generated/accounts/pendingPolicyUpdate.d.ts +72 -0
- package/dist/generated/accounts/pendingPolicyUpdate.d.ts.map +1 -0
- package/dist/generated/accounts/pendingPolicyUpdate.js +97 -0
- package/dist/generated/accounts/pendingPolicyUpdate.js.map +1 -0
- package/dist/generated/accounts/policyConfig.d.ts +180 -0
- package/dist/generated/accounts/policyConfig.d.ts.map +1 -0
- package/dist/generated/accounts/policyConfig.js +88 -0
- package/dist/generated/accounts/policyConfig.js.map +1 -0
- package/dist/generated/accounts/sessionAuthority.d.ts +104 -0
- package/dist/generated/accounts/sessionAuthority.d.ts.map +1 -0
- package/dist/generated/accounts/sessionAuthority.js +86 -0
- package/dist/generated/accounts/sessionAuthority.js.map +1 -0
- package/dist/generated/accounts/spendTracker.d.ts +60 -0
- package/dist/generated/accounts/spendTracker.d.ts.map +1 -0
- package/dist/generated/accounts/spendTracker.js +74 -0
- package/dist/generated/accounts/spendTracker.js.map +1 -0
- package/dist/generated/errors/index.d.ts +9 -0
- package/dist/generated/errors/index.d.ts.map +1 -0
- package/dist/generated/errors/index.js +9 -0
- package/dist/generated/errors/index.js.map +1 -0
- package/dist/generated/errors/sigil.d.ts +162 -0
- package/dist/generated/errors/sigil.d.ts.map +1 -0
- package/dist/generated/errors/sigil.js +237 -0
- package/dist/generated/errors/sigil.js.map +1 -0
- package/dist/generated/event-discriminators.d.ts +2 -0
- package/dist/generated/event-discriminators.d.ts.map +1 -0
- package/dist/generated/event-discriminators.js +39 -0
- package/dist/generated/event-discriminators.js.map +1 -0
- package/dist/generated/index.d.ts +13 -0
- package/dist/generated/index.d.ts.map +1 -0
- package/dist/generated/index.js +13 -0
- package/dist/generated/index.js.map +1 -0
- package/dist/generated/instructions/agentTransfer.d.ts +109 -0
- package/dist/generated/instructions/agentTransfer.d.ts.map +1 -0
- package/dist/generated/instructions/agentTransfer.js +211 -0
- package/dist/generated/instructions/agentTransfer.js.map +1 -0
- package/dist/generated/instructions/applyConstraintsUpdate.d.ts +55 -0
- package/dist/generated/instructions/applyConstraintsUpdate.d.ts.map +1 -0
- package/dist/generated/instructions/applyConstraintsUpdate.js +129 -0
- package/dist/generated/instructions/applyConstraintsUpdate.js.map +1 -0
- package/dist/generated/instructions/applyPendingPolicy.d.ts +55 -0
- package/dist/generated/instructions/applyPendingPolicy.d.ts.map +1 -0
- package/dist/generated/instructions/applyPendingPolicy.js +122 -0
- package/dist/generated/instructions/applyPendingPolicy.js.map +1 -0
- package/dist/generated/instructions/cancelConstraintsUpdate.d.ts +51 -0
- package/dist/generated/instructions/cancelConstraintsUpdate.d.ts.map +1 -0
- package/dist/generated/instructions/cancelConstraintsUpdate.js +115 -0
- package/dist/generated/instructions/cancelConstraintsUpdate.js.map +1 -0
- package/dist/generated/instructions/cancelPendingPolicy.d.ts +55 -0
- package/dist/generated/instructions/cancelPendingPolicy.d.ts.map +1 -0
- package/dist/generated/instructions/cancelPendingPolicy.js +122 -0
- package/dist/generated/instructions/cancelPendingPolicy.js.map +1 -0
- package/dist/generated/instructions/closeInstructionConstraints.d.ts +55 -0
- package/dist/generated/instructions/closeInstructionConstraints.d.ts.map +1 -0
- package/dist/generated/instructions/closeInstructionConstraints.js +120 -0
- package/dist/generated/instructions/closeInstructionConstraints.js.map +1 -0
- package/dist/generated/instructions/closeSettledEscrow.d.ts +72 -0
- package/dist/generated/instructions/closeSettledEscrow.d.ts.map +1 -0
- package/dist/generated/instructions/closeSettledEscrow.js +127 -0
- package/dist/generated/instructions/closeSettledEscrow.js.map +1 -0
- package/dist/generated/instructions/closeVault.d.ts +69 -0
- package/dist/generated/instructions/closeVault.d.ts.map +1 -0
- package/dist/generated/instructions/closeVault.js +142 -0
- package/dist/generated/instructions/closeVault.js.map +1 -0
- package/dist/generated/instructions/createEscrow.d.ts +131 -0
- package/dist/generated/instructions/createEscrow.d.ts.map +1 -0
- package/dist/generated/instructions/createEscrow.js +272 -0
- package/dist/generated/instructions/createEscrow.js.map +1 -0
- package/dist/generated/instructions/createInstructionConstraints.d.ts +69 -0
- package/dist/generated/instructions/createInstructionConstraints.d.ts.map +1 -0
- package/dist/generated/instructions/createInstructionConstraints.js +145 -0
- package/dist/generated/instructions/createInstructionConstraints.js.map +1 -0
- package/dist/generated/instructions/depositFunds.d.ts +82 -0
- package/dist/generated/instructions/depositFunds.d.ts.map +1 -0
- package/dist/generated/instructions/depositFunds.js +198 -0
- package/dist/generated/instructions/depositFunds.js.map +1 -0
- package/dist/generated/instructions/finalizeSession.d.ts +126 -0
- package/dist/generated/instructions/finalizeSession.d.ts.map +1 -0
- package/dist/generated/instructions/finalizeSession.js +218 -0
- package/dist/generated/instructions/finalizeSession.js.map +1 -0
- package/dist/generated/instructions/freezeVault.d.ts +40 -0
- package/dist/generated/instructions/freezeVault.d.ts.map +1 -0
- package/dist/generated/instructions/freezeVault.js +66 -0
- package/dist/generated/instructions/freezeVault.js.map +1 -0
- package/dist/generated/instructions/index.d.ts +37 -0
- package/dist/generated/instructions/index.d.ts.map +1 -0
- package/dist/generated/instructions/index.js +37 -0
- package/dist/generated/instructions/index.js.map +1 -0
- package/dist/generated/instructions/initializeVault.d.ts +122 -0
- package/dist/generated/instructions/initializeVault.d.ts.map +1 -0
- package/dist/generated/instructions/initializeVault.js +187 -0
- package/dist/generated/instructions/initializeVault.js.map +1 -0
- package/dist/generated/instructions/pauseAgent.d.ts +44 -0
- package/dist/generated/instructions/pauseAgent.d.ts.map +1 -0
- package/dist/generated/instructions/pauseAgent.js +72 -0
- package/dist/generated/instructions/pauseAgent.js.map +1 -0
- package/dist/generated/instructions/queueConstraintsUpdate.d.ts +73 -0
- package/dist/generated/instructions/queueConstraintsUpdate.d.ts.map +1 -0
- package/dist/generated/instructions/queueConstraintsUpdate.js +168 -0
- package/dist/generated/instructions/queueConstraintsUpdate.js.map +1 -0
- package/dist/generated/instructions/queuePolicyUpdate.d.ts +116 -0
- package/dist/generated/instructions/queuePolicyUpdate.d.ts.map +1 -0
- package/dist/generated/instructions/queuePolicyUpdate.js +173 -0
- package/dist/generated/instructions/queuePolicyUpdate.js.map +1 -0
- package/dist/generated/instructions/reactivateVault.d.ts +47 -0
- package/dist/generated/instructions/reactivateVault.d.ts.map +1 -0
- package/dist/generated/instructions/reactivateVault.js +74 -0
- package/dist/generated/instructions/reactivateVault.js.map +1 -0
- package/dist/generated/instructions/refundEscrow.d.ts +74 -0
- package/dist/generated/instructions/refundEscrow.d.ts.map +1 -0
- package/dist/generated/instructions/refundEscrow.js +142 -0
- package/dist/generated/instructions/refundEscrow.js.map +1 -0
- package/dist/generated/instructions/registerAgent.d.ts +55 -0
- package/dist/generated/instructions/registerAgent.d.ts.map +1 -0
- package/dist/generated/instructions/registerAgent.js +85 -0
- package/dist/generated/instructions/registerAgent.js.map +1 -0
- package/dist/generated/instructions/revokeAgent.d.ts +49 -0
- package/dist/generated/instructions/revokeAgent.d.ts.map +1 -0
- package/dist/generated/instructions/revokeAgent.js +81 -0
- package/dist/generated/instructions/revokeAgent.js.map +1 -0
- package/dist/generated/instructions/settleEscrow.d.ts +80 -0
- package/dist/generated/instructions/settleEscrow.d.ts.map +1 -0
- package/dist/generated/instructions/settleEscrow.js +173 -0
- package/dist/generated/instructions/settleEscrow.js.map +1 -0
- package/dist/generated/instructions/syncPositions.d.ts +44 -0
- package/dist/generated/instructions/syncPositions.d.ts.map +1 -0
- package/dist/generated/instructions/syncPositions.js +72 -0
- package/dist/generated/instructions/syncPositions.js.map +1 -0
- package/dist/generated/instructions/unpauseAgent.d.ts +44 -0
- package/dist/generated/instructions/unpauseAgent.d.ts.map +1 -0
- package/dist/generated/instructions/unpauseAgent.js +72 -0
- package/dist/generated/instructions/unpauseAgent.js.map +1 -0
- package/dist/generated/instructions/updateAgentPermissions.d.ts +68 -0
- package/dist/generated/instructions/updateAgentPermissions.d.ts.map +1 -0
- package/dist/generated/instructions/updateAgentPermissions.js +139 -0
- package/dist/generated/instructions/updateAgentPermissions.js.map +1 -0
- package/dist/generated/instructions/updateInstructionConstraints.d.ts +65 -0
- package/dist/generated/instructions/updateInstructionConstraints.d.ts.map +1 -0
- package/dist/generated/instructions/updateInstructionConstraints.js +131 -0
- package/dist/generated/instructions/updateInstructionConstraints.js.map +1 -0
- package/dist/generated/instructions/updatePolicy.d.ts +108 -0
- package/dist/generated/instructions/updatePolicy.d.ts.map +1 -0
- package/dist/generated/instructions/updatePolicy.js +143 -0
- package/dist/generated/instructions/updatePolicy.js.map +1 -0
- package/dist/generated/instructions/validateAndAuthorize.d.ts +171 -0
- package/dist/generated/instructions/validateAndAuthorize.d.ts.map +1 -0
- package/dist/generated/instructions/validateAndAuthorize.js +271 -0
- package/dist/generated/instructions/validateAndAuthorize.js.map +1 -0
- package/dist/generated/instructions/withdrawFunds.d.ts +74 -0
- package/dist/generated/instructions/withdrawFunds.d.ts.map +1 -0
- package/dist/generated/instructions/withdrawFunds.js +166 -0
- package/dist/generated/instructions/withdrawFunds.js.map +1 -0
- package/dist/generated/programs/index.d.ts +9 -0
- package/dist/generated/programs/index.d.ts.map +1 -0
- package/dist/generated/programs/index.js +9 -0
- package/dist/generated/programs/index.js.map +1 -0
- package/dist/generated/programs/sigil.d.ts +173 -0
- package/dist/generated/programs/sigil.d.ts.map +1 -0
- package/dist/generated/programs/sigil.js +443 -0
- package/dist/generated/programs/sigil.js.map +1 -0
- package/dist/generated/types/accountConstraint.d.ts +18 -0
- package/dist/generated/types/accountConstraint.d.ts.map +1 -0
- package/dist/generated/types/accountConstraint.js +24 -0
- package/dist/generated/types/accountConstraint.js.map +1 -0
- package/dist/generated/types/actionAuthorized.d.ts +39 -0
- package/dist/generated/types/actionAuthorized.d.ts.map +1 -0
- package/dist/generated/types/actionAuthorized.js +43 -0
- package/dist/generated/types/actionAuthorized.js.map +1 -0
- package/dist/generated/types/actionType.d.ts +37 -0
- package/dist/generated/types/actionType.d.ts.map +1 -0
- package/dist/generated/types/actionType.js +43 -0
- package/dist/generated/types/actionType.js.map +1 -0
- package/dist/generated/types/agentContributionEntry.d.ts +49 -0
- package/dist/generated/types/agentContributionEntry.d.ts.map +1 -0
- package/dist/generated/types/agentContributionEntry.js +26 -0
- package/dist/generated/types/agentContributionEntry.js.map +1 -0
- package/dist/generated/types/agentEntry.d.ts +24 -0
- package/dist/generated/types/agentEntry.d.ts.map +1 -0
- package/dist/generated/types/agentEntry.js +28 -0
- package/dist/generated/types/agentEntry.js.map +1 -0
- package/dist/generated/types/agentPausedEvent.d.ts +22 -0
- package/dist/generated/types/agentPausedEvent.d.ts.map +1 -0
- package/dist/generated/types/agentPausedEvent.js +26 -0
- package/dist/generated/types/agentPausedEvent.js.map +1 -0
- package/dist/generated/types/agentPermissionsUpdated.d.ts +24 -0
- package/dist/generated/types/agentPermissionsUpdated.d.ts.map +1 -0
- package/dist/generated/types/agentPermissionsUpdated.js +28 -0
- package/dist/generated/types/agentPermissionsUpdated.js.map +1 -0
- package/dist/generated/types/agentRegistered.d.ts +26 -0
- package/dist/generated/types/agentRegistered.d.ts.map +1 -0
- package/dist/generated/types/agentRegistered.js +30 -0
- package/dist/generated/types/agentRegistered.js.map +1 -0
- package/dist/generated/types/agentRevoked.d.ts +24 -0
- package/dist/generated/types/agentRevoked.d.ts.map +1 -0
- package/dist/generated/types/agentRevoked.js +28 -0
- package/dist/generated/types/agentRevoked.js.map +1 -0
- package/dist/generated/types/agentSpendLimitChecked.d.ts +28 -0
- package/dist/generated/types/agentSpendLimitChecked.d.ts.map +1 -0
- package/dist/generated/types/agentSpendLimitChecked.js +32 -0
- package/dist/generated/types/agentSpendLimitChecked.js.map +1 -0
- package/dist/generated/types/agentTransferExecuted.d.ts +24 -0
- package/dist/generated/types/agentTransferExecuted.d.ts.map +1 -0
- package/dist/generated/types/agentTransferExecuted.js +28 -0
- package/dist/generated/types/agentTransferExecuted.js.map +1 -0
- package/dist/generated/types/agentUnpausedEvent.d.ts +22 -0
- package/dist/generated/types/agentUnpausedEvent.d.ts.map +1 -0
- package/dist/generated/types/agentUnpausedEvent.js +26 -0
- package/dist/generated/types/agentUnpausedEvent.js.map +1 -0
- package/dist/generated/types/constraintEntry.d.ts +23 -0
- package/dist/generated/types/constraintEntry.d.ts.map +1 -0
- package/dist/generated/types/constraintEntry.js +27 -0
- package/dist/generated/types/constraintEntry.js.map +1 -0
- package/dist/generated/types/constraintOperator.d.ts +22 -0
- package/dist/generated/types/constraintOperator.d.ts.map +1 -0
- package/dist/generated/types/constraintOperator.js +28 -0
- package/dist/generated/types/constraintOperator.js.map +1 -0
- package/dist/generated/types/constraintsChangeApplied.d.ts +20 -0
- package/dist/generated/types/constraintsChangeApplied.d.ts.map +1 -0
- package/dist/generated/types/constraintsChangeApplied.js +24 -0
- package/dist/generated/types/constraintsChangeApplied.js.map +1 -0
- package/dist/generated/types/constraintsChangeCancelled.d.ts +16 -0
- package/dist/generated/types/constraintsChangeCancelled.d.ts.map +1 -0
- package/dist/generated/types/constraintsChangeCancelled.js +18 -0
- package/dist/generated/types/constraintsChangeCancelled.js.map +1 -0
- package/dist/generated/types/constraintsChangeQueued.d.ts +20 -0
- package/dist/generated/types/constraintsChangeQueued.d.ts.map +1 -0
- package/dist/generated/types/constraintsChangeQueued.js +24 -0
- package/dist/generated/types/constraintsChangeQueued.js.map +1 -0
- package/dist/generated/types/dataConstraint.d.ts +23 -0
- package/dist/generated/types/dataConstraint.d.ts.map +1 -0
- package/dist/generated/types/dataConstraint.js +27 -0
- package/dist/generated/types/dataConstraint.js.map +1 -0
- package/dist/generated/types/delegationRevoked.d.ts +22 -0
- package/dist/generated/types/delegationRevoked.d.ts.map +1 -0
- package/dist/generated/types/delegationRevoked.js +26 -0
- package/dist/generated/types/delegationRevoked.js.map +1 -0
- package/dist/generated/types/epochBucket.d.ts +28 -0
- package/dist/generated/types/epochBucket.d.ts.map +1 -0
- package/dist/generated/types/epochBucket.js +24 -0
- package/dist/generated/types/epochBucket.js.map +1 -0
- package/dist/generated/types/escrowCreated.d.ts +30 -0
- package/dist/generated/types/escrowCreated.d.ts.map +1 -0
- package/dist/generated/types/escrowCreated.js +34 -0
- package/dist/generated/types/escrowCreated.js.map +1 -0
- package/dist/generated/types/escrowRefunded.d.ts +26 -0
- package/dist/generated/types/escrowRefunded.d.ts.map +1 -0
- package/dist/generated/types/escrowRefunded.js +30 -0
- package/dist/generated/types/escrowRefunded.js.map +1 -0
- package/dist/generated/types/escrowSettled.d.ts +26 -0
- package/dist/generated/types/escrowSettled.d.ts.map +1 -0
- package/dist/generated/types/escrowSettled.js +30 -0
- package/dist/generated/types/escrowSettled.js.map +1 -0
- package/dist/generated/types/escrowStatus.d.ts +18 -0
- package/dist/generated/types/escrowStatus.d.ts.map +1 -0
- package/dist/generated/types/escrowStatus.js +24 -0
- package/dist/generated/types/escrowStatus.js.map +1 -0
- package/dist/generated/types/feesCollected.d.ts +38 -0
- package/dist/generated/types/feesCollected.d.ts.map +1 -0
- package/dist/generated/types/feesCollected.js +42 -0
- package/dist/generated/types/feesCollected.js.map +1 -0
- package/dist/generated/types/fundsDeposited.d.ts +24 -0
- package/dist/generated/types/fundsDeposited.d.ts.map +1 -0
- package/dist/generated/types/fundsDeposited.js +28 -0
- package/dist/generated/types/fundsDeposited.js.map +1 -0
- package/dist/generated/types/fundsWithdrawn.d.ts +26 -0
- package/dist/generated/types/fundsWithdrawn.d.ts.map +1 -0
- package/dist/generated/types/fundsWithdrawn.js +30 -0
- package/dist/generated/types/fundsWithdrawn.js.map +1 -0
- package/dist/generated/types/index.d.ts +50 -0
- package/dist/generated/types/index.d.ts.map +1 -0
- package/dist/generated/types/index.js +50 -0
- package/dist/generated/types/index.js.map +1 -0
- package/dist/generated/types/instructionConstraintsClosed.d.ts +20 -0
- package/dist/generated/types/instructionConstraintsClosed.d.ts.map +1 -0
- package/dist/generated/types/instructionConstraintsClosed.js +24 -0
- package/dist/generated/types/instructionConstraintsClosed.js.map +1 -0
- package/dist/generated/types/instructionConstraintsCreated.d.ts +24 -0
- package/dist/generated/types/instructionConstraintsCreated.d.ts.map +1 -0
- package/dist/generated/types/instructionConstraintsCreated.js +28 -0
- package/dist/generated/types/instructionConstraintsCreated.js.map +1 -0
- package/dist/generated/types/instructionConstraintsUpdated.d.ts +24 -0
- package/dist/generated/types/instructionConstraintsUpdated.d.ts.map +1 -0
- package/dist/generated/types/instructionConstraintsUpdated.js +28 -0
- package/dist/generated/types/instructionConstraintsUpdated.js.map +1 -0
- package/dist/generated/types/policyChangeApplied.d.ts +20 -0
- package/dist/generated/types/policyChangeApplied.d.ts.map +1 -0
- package/dist/generated/types/policyChangeApplied.js +24 -0
- package/dist/generated/types/policyChangeApplied.js.map +1 -0
- package/dist/generated/types/policyChangeCancelled.d.ts +16 -0
- package/dist/generated/types/policyChangeCancelled.d.ts.map +1 -0
- package/dist/generated/types/policyChangeCancelled.js +18 -0
- package/dist/generated/types/policyChangeCancelled.js.map +1 -0
- package/dist/generated/types/policyChangeQueued.d.ts +20 -0
- package/dist/generated/types/policyChangeQueued.d.ts.map +1 -0
- package/dist/generated/types/policyChangeQueued.js +24 -0
- package/dist/generated/types/policyChangeQueued.js.map +1 -0
- package/dist/generated/types/policyUpdated.d.ts +34 -0
- package/dist/generated/types/policyUpdated.d.ts.map +1 -0
- package/dist/generated/types/policyUpdated.js +38 -0
- package/dist/generated/types/policyUpdated.js.map +1 -0
- package/dist/generated/types/positionsSynced.d.ts +24 -0
- package/dist/generated/types/positionsSynced.d.ts.map +1 -0
- package/dist/generated/types/positionsSynced.js +28 -0
- package/dist/generated/types/positionsSynced.js.map +1 -0
- package/dist/generated/types/protocolSpendCounter.d.ts +33 -0
- package/dist/generated/types/protocolSpendCounter.d.ts.map +1 -0
- package/dist/generated/types/protocolSpendCounter.js +26 -0
- package/dist/generated/types/protocolSpendCounter.js.map +1 -0
- package/dist/generated/types/sessionFinalized.d.ts +32 -0
- package/dist/generated/types/sessionFinalized.d.ts.map +1 -0
- package/dist/generated/types/sessionFinalized.js +36 -0
- package/dist/generated/types/sessionFinalized.js.map +1 -0
- package/dist/generated/types/vaultClosed.d.ts +22 -0
- package/dist/generated/types/vaultClosed.d.ts.map +1 -0
- package/dist/generated/types/vaultClosed.js +26 -0
- package/dist/generated/types/vaultClosed.js.map +1 -0
- package/dist/generated/types/vaultCreated.d.ts +24 -0
- package/dist/generated/types/vaultCreated.d.ts.map +1 -0
- package/dist/generated/types/vaultCreated.js +28 -0
- package/dist/generated/types/vaultCreated.js.map +1 -0
- package/dist/generated/types/vaultFrozen.d.ts +24 -0
- package/dist/generated/types/vaultFrozen.d.ts.map +1 -0
- package/dist/generated/types/vaultFrozen.js +28 -0
- package/dist/generated/types/vaultFrozen.js.map +1 -0
- package/dist/generated/types/vaultReactivated.d.ts +24 -0
- package/dist/generated/types/vaultReactivated.d.ts.map +1 -0
- package/dist/generated/types/vaultReactivated.js +28 -0
- package/dist/generated/types/vaultReactivated.js.map +1 -0
- package/dist/generated/types/vaultStatus.d.ts +19 -0
- package/dist/generated/types/vaultStatus.d.ts.map +1 -0
- package/dist/generated/types/vaultStatus.js +25 -0
- package/dist/generated/types/vaultStatus.js.map +1 -0
- package/dist/index.d.ts +74 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +113 -0
- package/dist/index.js.map +1 -0
- package/dist/inscribe.d.ts +134 -0
- package/dist/inscribe.d.ts.map +1 -0
- package/dist/inscribe.js +149 -0
- package/dist/inscribe.js.map +1 -0
- package/dist/inspector.d.ts +85 -0
- package/dist/inspector.d.ts.map +1 -0
- package/dist/inspector.js +188 -0
- package/dist/inspector.js.map +1 -0
- package/dist/math-utils.d.ts +15 -0
- package/dist/math-utils.d.ts.map +1 -0
- package/dist/math-utils.js +29 -0
- package/dist/math-utils.js.map +1 -0
- package/dist/owner-transaction.d.ts +42 -0
- package/dist/owner-transaction.d.ts.map +1 -0
- package/dist/owner-transaction.js +71 -0
- package/dist/owner-transaction.js.map +1 -0
- package/dist/policies.d.ts +70 -0
- package/dist/policies.d.ts.map +1 -0
- package/dist/policies.js +87 -0
- package/dist/policies.js.map +1 -0
- package/dist/portfolio-analytics.d.ts +82 -0
- package/dist/portfolio-analytics.d.ts.map +1 -0
- package/dist/portfolio-analytics.js +232 -0
- package/dist/portfolio-analytics.js.map +1 -0
- package/dist/presets.d.ts +108 -0
- package/dist/presets.d.ts.map +1 -0
- package/dist/presets.js +110 -0
- package/dist/presets.js.map +1 -0
- package/dist/priority-fees.d.ts +49 -0
- package/dist/priority-fees.d.ts.map +1 -0
- package/dist/priority-fees.js +175 -0
- package/dist/priority-fees.js.map +1 -0
- package/dist/protocol-analytics.d.ts +35 -0
- package/dist/protocol-analytics.d.ts.map +1 -0
- package/dist/protocol-analytics.js +64 -0
- package/dist/protocol-analytics.js.map +1 -0
- package/dist/protocol-names.d.ts +9 -0
- package/dist/protocol-names.d.ts.map +1 -0
- package/dist/protocol-names.js +18 -0
- package/dist/protocol-names.js.map +1 -0
- package/dist/protocol-resolver.d.ts +54 -0
- package/dist/protocol-resolver.d.ts.map +1 -0
- package/dist/protocol-resolver.js +123 -0
- package/dist/protocol-resolver.js.map +1 -0
- package/dist/resolve-accounts.d.ts +38 -0
- package/dist/resolve-accounts.d.ts.map +1 -0
- package/dist/resolve-accounts.js +120 -0
- package/dist/resolve-accounts.js.map +1 -0
- package/dist/rpc-helpers.d.ts +50 -0
- package/dist/rpc-helpers.d.ts.map +1 -0
- package/dist/rpc-helpers.js +119 -0
- package/dist/rpc-helpers.js.map +1 -0
- package/dist/seal.d.ts +211 -0
- package/dist/seal.d.ts.map +1 -0
- package/dist/seal.js +569 -0
- package/dist/seal.js.map +1 -0
- package/dist/security-analytics.d.ts +85 -0
- package/dist/security-analytics.d.ts.map +1 -0
- package/dist/security-analytics.js +510 -0
- package/dist/security-analytics.js.map +1 -0
- package/dist/shield.d.ts +235 -0
- package/dist/shield.d.ts.map +1 -0
- package/dist/shield.js +701 -0
- package/dist/shield.js.map +1 -0
- package/dist/simulation.d.ts +111 -0
- package/dist/simulation.d.ts.map +1 -0
- package/dist/simulation.js +514 -0
- package/dist/simulation.js.map +1 -0
- package/dist/spending-analytics.d.ts +91 -0
- package/dist/spending-analytics.d.ts.map +1 -0
- package/dist/spending-analytics.js +217 -0
- package/dist/spending-analytics.js.map +1 -0
- package/dist/state-resolver.d.ts +173 -0
- package/dist/state-resolver.d.ts.map +1 -0
- package/dist/state-resolver.js +660 -0
- package/dist/state-resolver.js.map +1 -0
- package/dist/tee/cache.d.ts +28 -0
- package/dist/tee/cache.d.ts.map +1 -0
- package/dist/tee/cache.js +75 -0
- package/dist/tee/cache.js.map +1 -0
- package/dist/tee/index.d.ts +9 -0
- package/dist/tee/index.d.ts.map +1 -0
- package/dist/tee/index.js +9 -0
- package/dist/tee/index.js.map +1 -0
- package/dist/tee/nitro-root.d.ts +11 -0
- package/dist/tee/nitro-root.d.ts.map +1 -0
- package/dist/tee/nitro-root.js +24 -0
- package/dist/tee/nitro-root.js.map +1 -0
- package/dist/tee/providers/crossmint.d.ts +12 -0
- package/dist/tee/providers/crossmint.d.ts.map +1 -0
- package/dist/tee/providers/crossmint.js +73 -0
- package/dist/tee/providers/crossmint.js.map +1 -0
- package/dist/tee/providers/privy.d.ts +12 -0
- package/dist/tee/providers/privy.d.ts.map +1 -0
- package/dist/tee/providers/privy.js +73 -0
- package/dist/tee/providers/privy.js.map +1 -0
- package/dist/tee/providers/turnkey.d.ts +34 -0
- package/dist/tee/providers/turnkey.d.ts.map +1 -0
- package/dist/tee/providers/turnkey.js +401 -0
- package/dist/tee/providers/turnkey.js.map +1 -0
- package/dist/tee/types.d.ts +124 -0
- package/dist/tee/types.d.ts.map +1 -0
- package/dist/tee/types.js +51 -0
- package/dist/tee/types.js.map +1 -0
- package/dist/tee/verify.d.ts +34 -0
- package/dist/tee/verify.d.ts.map +1 -0
- package/dist/tee/verify.js +177 -0
- package/dist/tee/verify.js.map +1 -0
- package/dist/tee/wallet-types.d.ts +61 -0
- package/dist/tee/wallet-types.d.ts.map +1 -0
- package/dist/tee/wallet-types.js +42 -0
- package/dist/tee/wallet-types.js.map +1 -0
- package/dist/testing/devnet.d.ts +64 -0
- package/dist/testing/devnet.d.ts.map +1 -0
- package/dist/testing/devnet.js +222 -0
- package/dist/testing/devnet.js.map +1 -0
- package/dist/testing/index.d.ts +3 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +9 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/mock-rpc.d.ts +31 -0
- package/dist/testing/mock-rpc.d.ts.map +1 -0
- package/dist/testing/mock-rpc.js +50 -0
- package/dist/testing/mock-rpc.js.map +1 -0
- package/dist/testing/mock-state.d.ts +35 -0
- package/dist/testing/mock-state.d.ts.map +1 -0
- package/dist/testing/mock-state.js +86 -0
- package/dist/testing/mock-state.js.map +1 -0
- package/dist/tokens.d.ts +35 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +157 -0
- package/dist/tokens.js.map +1 -0
- package/dist/transaction-executor.d.ts +116 -0
- package/dist/transaction-executor.d.ts.map +1 -0
- package/dist/transaction-executor.js +165 -0
- package/dist/transaction-executor.js.map +1 -0
- package/dist/types.d.ts +102 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +216 -0
- package/dist/types.js.map +1 -0
- package/dist/vault-analytics.d.ts +83 -0
- package/dist/vault-analytics.d.ts.map +1 -0
- package/dist/vault-analytics.js +175 -0
- package/dist/vault-analytics.js.map +1 -0
- package/dist/velocity-tracker.d.ts +79 -0
- package/dist/velocity-tracker.d.ts.map +1 -0
- package/dist/velocity-tracker.js +183 -0
- package/dist/velocity-tracker.js.map +1 -0
- package/dist/x402/amount-guard.d.ts +26 -0
- package/dist/x402/amount-guard.d.ts.map +1 -0
- package/dist/x402/amount-guard.js +80 -0
- package/dist/x402/amount-guard.js.map +1 -0
- package/dist/x402/audit-trail.d.ts +26 -0
- package/dist/x402/audit-trail.d.ts.map +1 -0
- package/dist/x402/audit-trail.js +32 -0
- package/dist/x402/audit-trail.js.map +1 -0
- package/dist/x402/codec.d.ts +26 -0
- package/dist/x402/codec.d.ts.map +1 -0
- package/dist/x402/codec.js +95 -0
- package/dist/x402/codec.js.map +1 -0
- package/dist/x402/errors.d.ts +34 -0
- package/dist/x402/errors.d.ts.map +1 -0
- package/dist/x402/errors.js +53 -0
- package/dist/x402/errors.js.map +1 -0
- package/dist/x402/facilitator-verify.d.ts +24 -0
- package/dist/x402/facilitator-verify.d.ts.map +1 -0
- package/dist/x402/facilitator-verify.js +74 -0
- package/dist/x402/facilitator-verify.js.map +1 -0
- package/dist/x402/index.d.ts +14 -0
- package/dist/x402/index.d.ts.map +1 -0
- package/dist/x402/index.js +23 -0
- package/dist/x402/index.js.map +1 -0
- package/dist/x402/nonce-tracker.d.ts +65 -0
- package/dist/x402/nonce-tracker.d.ts.map +1 -0
- package/dist/x402/nonce-tracker.js +123 -0
- package/dist/x402/nonce-tracker.js.map +1 -0
- package/dist/x402/payment-selector.d.ts +20 -0
- package/dist/x402/payment-selector.d.ts.map +1 -0
- package/dist/x402/payment-selector.js +49 -0
- package/dist/x402/payment-selector.js.map +1 -0
- package/dist/x402/policy-bridge.d.ts +23 -0
- package/dist/x402/policy-bridge.d.ts.map +1 -0
- package/dist/x402/policy-bridge.js +67 -0
- package/dist/x402/policy-bridge.js.map +1 -0
- package/dist/x402/shielded-fetch.d.ts +46 -0
- package/dist/x402/shielded-fetch.d.ts.map +1 -0
- package/dist/x402/shielded-fetch.js +342 -0
- package/dist/x402/shielded-fetch.js.map +1 -0
- package/dist/x402/transfer-builder.d.ts +43 -0
- package/dist/x402/transfer-builder.d.ts.map +1 -0
- package/dist/x402/transfer-builder.js +126 -0
- package/dist/x402/transfer-builder.js.map +1 -0
- package/dist/x402/types.d.ts +109 -0
- package/dist/x402/types.d.ts.map +1 -0
- package/dist/x402/types.js +8 -0
- package/dist/x402/types.js.map +1 -0
- package/package.json +98 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vault analytics — health assessment and one-call summary.
|
|
3
|
+
*
|
|
4
|
+
* getVaultHealth(): Pure function (no RPC) — derives health, cap metrics,
|
|
5
|
+
* security checks from already-resolved vault state.
|
|
6
|
+
*
|
|
7
|
+
* getVaultSummary(): Async function — parallel RPC calls for state, P&L,
|
|
8
|
+
* balances, pending policy. Returns everything a vault detail page needs.
|
|
9
|
+
*/
|
|
10
|
+
import { VaultStatus } from "./generated/types/vaultStatus.js";
|
|
11
|
+
import { resolveVaultStateForOwner, getPendingPolicyForVault, } from "./state-resolver.js";
|
|
12
|
+
import { getVaultPnL, getVaultTokenBalances, } from "./balance-tracker.js";
|
|
13
|
+
import { getSpendingVelocity } from "./spending-analytics.js";
|
|
14
|
+
import { FULL_PERMISSIONS, PROTOCOL_MODE_ALLOWLIST, EPOCH_DURATION, NUM_EPOCHS, } from "./types.js";
|
|
15
|
+
// ─── getVaultHealth ──────────────────────────────────────────────────────────
|
|
16
|
+
/**
|
|
17
|
+
* Single-call vault health assessment. Pure function — no RPC.
|
|
18
|
+
*
|
|
19
|
+
* Derives isHealthy, capUtilization, capResetsIn, security checks from
|
|
20
|
+
* already-resolved vault state. The dashboard vault card renders this directly.
|
|
21
|
+
*/
|
|
22
|
+
export function getVaultHealth(state, nowUnix) {
|
|
23
|
+
const { vault, policy, tracker, globalBudget, constraints } = state;
|
|
24
|
+
// VaultStatus is a numeric enum (Active=0, Frozen=1, Closed=2).
|
|
25
|
+
// Use reverse mapping for display string.
|
|
26
|
+
const STATUS_NAMES = {
|
|
27
|
+
[VaultStatus.Active]: "Active",
|
|
28
|
+
[VaultStatus.Frozen]: "Frozen",
|
|
29
|
+
[VaultStatus.Closed]: "Closed",
|
|
30
|
+
};
|
|
31
|
+
const status = STATUS_NAMES[vault.status] ?? "Closed";
|
|
32
|
+
const agentCount = vault.agents.length;
|
|
33
|
+
const pausedAgentCount = vault.agents.filter((a) => a.paused).length;
|
|
34
|
+
// Cap utilization
|
|
35
|
+
const capUtilization = globalBudget.cap > 0n
|
|
36
|
+
? Number((globalBudget.spent24h * 10000n) / globalBudget.cap) / 100
|
|
37
|
+
: 0;
|
|
38
|
+
// Cap reset time: when does the oldest epoch in the window roll off?
|
|
39
|
+
let capResetsIn = 0;
|
|
40
|
+
if (tracker) {
|
|
41
|
+
const epochDuration = BigInt(EPOCH_DURATION);
|
|
42
|
+
const currentEpoch = nowUnix / epochDuration;
|
|
43
|
+
let oldestEpoch = currentEpoch;
|
|
44
|
+
for (const bucket of tracker.buckets) {
|
|
45
|
+
if (bucket.usdAmount > 0n && bucket.epochId > 0n) {
|
|
46
|
+
if (bucket.epochId >= currentEpoch - BigInt(NUM_EPOCHS) &&
|
|
47
|
+
bucket.epochId < oldestEpoch) {
|
|
48
|
+
oldestEpoch = bucket.epochId;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const expiresAt = (oldestEpoch + BigInt(NUM_EPOCHS)) * epochDuration;
|
|
53
|
+
capResetsIn = Math.max(0, Number(expiresAt - nowUnix));
|
|
54
|
+
}
|
|
55
|
+
// Velocity for time-to-cap
|
|
56
|
+
const velocity = getSpendingVelocity(tracker, nowUnix, globalBudget);
|
|
57
|
+
// Security checks
|
|
58
|
+
const securityChecks = [
|
|
59
|
+
{
|
|
60
|
+
id: "no-full-perms",
|
|
61
|
+
label: "No agent has full permissions",
|
|
62
|
+
passed: !vault.agents.some((a) => a.permissions === FULL_PERMISSIONS),
|
|
63
|
+
severity: "critical",
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
id: "cap-configured",
|
|
67
|
+
label: "Daily spending cap is configured",
|
|
68
|
+
passed: policy.dailySpendingCapUsd > 0n,
|
|
69
|
+
severity: "critical",
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
id: "agent-limits",
|
|
73
|
+
label: "All agents have spending limits",
|
|
74
|
+
passed: vault.agents.every((a) => a.spendingLimitUsd > 0n),
|
|
75
|
+
severity: "warning",
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
id: "protocol-allowlist",
|
|
79
|
+
label: "Protocol mode is allowlist",
|
|
80
|
+
passed: policy.protocolMode === PROTOCOL_MODE_ALLOWLIST,
|
|
81
|
+
severity: "warning",
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
id: "timelock-enabled",
|
|
85
|
+
label: "Policy timelock is enabled",
|
|
86
|
+
passed: policy.timelockDuration > 0n,
|
|
87
|
+
severity: "warning",
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
id: "slippage-reasonable",
|
|
91
|
+
label: "Max slippage below 10%",
|
|
92
|
+
passed: policy.maxSlippageBps < 1000,
|
|
93
|
+
severity: "warning",
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
id: "constraints-configured",
|
|
97
|
+
label: "Instruction constraints are set",
|
|
98
|
+
passed: constraints !== null,
|
|
99
|
+
severity: "info",
|
|
100
|
+
},
|
|
101
|
+
];
|
|
102
|
+
const criticalFailures = securityChecks.filter((c) => c.severity === "critical" && !c.passed);
|
|
103
|
+
const isHealthy = status === "Active" &&
|
|
104
|
+
agentCount > 0 &&
|
|
105
|
+
pausedAgentCount < agentCount &&
|
|
106
|
+
capUtilization < 95 &&
|
|
107
|
+
criticalFailures.length === 0;
|
|
108
|
+
return {
|
|
109
|
+
status,
|
|
110
|
+
isHealthy,
|
|
111
|
+
agentCount,
|
|
112
|
+
pausedAgentCount,
|
|
113
|
+
openPositions: vault.openPositions,
|
|
114
|
+
activeEscrowCount: vault.activeEscrowCount,
|
|
115
|
+
capUtilization,
|
|
116
|
+
capRemaining: globalBudget.remaining,
|
|
117
|
+
capResetsIn,
|
|
118
|
+
timeToCapAtCurrentRate: velocity.timeToCapSeconds,
|
|
119
|
+
hasConstraints: constraints !== null,
|
|
120
|
+
hasTimelock: policy.timelockDuration > 0n,
|
|
121
|
+
timelockDuration: Number(policy.timelockDuration),
|
|
122
|
+
hasPendingPolicyChange: false, // Overridden by getVaultSummary()
|
|
123
|
+
lastActivityTimestamp: tracker && tracker.lastWriteEpoch > 0n
|
|
124
|
+
? Number(tracker.lastWriteEpoch * BigInt(EPOCH_DURATION))
|
|
125
|
+
: 0,
|
|
126
|
+
securityChecks,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
// ─── getVaultSummary ─────────────────────────────────────────────────────────
|
|
130
|
+
/**
|
|
131
|
+
* Complete vault summary in one call. Parallel RPC for state, P&L, balances,
|
|
132
|
+
* pending policy. Returns everything the vault detail page header needs.
|
|
133
|
+
*/
|
|
134
|
+
export async function getVaultSummary(rpc, vault, network = "mainnet-beta") {
|
|
135
|
+
const [state, pnl, tokenBalances, pendingPolicy] = await Promise.all([
|
|
136
|
+
resolveVaultStateForOwner(rpc, vault, undefined, network),
|
|
137
|
+
getVaultPnL(rpc, vault, network),
|
|
138
|
+
getVaultTokenBalances(rpc, vault, network),
|
|
139
|
+
getPendingPolicyForVault(rpc, vault).catch(() => null),
|
|
140
|
+
]);
|
|
141
|
+
const nowUnix = state.resolvedAtTimestamp;
|
|
142
|
+
const health = getVaultHealth(state, nowUnix);
|
|
143
|
+
health.hasPendingPolicyChange = pendingPolicy !== null;
|
|
144
|
+
const v = state.vault;
|
|
145
|
+
const createdAtSec = Number(v.createdAt);
|
|
146
|
+
const nowSec = Number(nowUnix);
|
|
147
|
+
const ageInDays = Math.max(1, Math.floor((nowSec - createdAtSec) / 86400));
|
|
148
|
+
const stats = {
|
|
149
|
+
totalTransactions: v.totalTransactions,
|
|
150
|
+
totalVolume: v.totalVolume,
|
|
151
|
+
totalFeesCollected: v.totalFeesCollected,
|
|
152
|
+
totalDeposited: v.totalDepositedUsd,
|
|
153
|
+
totalWithdrawn: v.totalWithdrawnUsd,
|
|
154
|
+
createdAt: v.createdAt,
|
|
155
|
+
ageInDays,
|
|
156
|
+
avgDailyVolume: ageInDays > 0 ? v.totalVolume / BigInt(ageInDays) : 0n,
|
|
157
|
+
avgTransactionSize: v.totalTransactions > 0n ? v.totalVolume / v.totalTransactions : 0n,
|
|
158
|
+
feeRate: v.totalVolume > 0n
|
|
159
|
+
? Number((v.totalFeesCollected * 10000n) / v.totalVolume)
|
|
160
|
+
: 0,
|
|
161
|
+
};
|
|
162
|
+
const totalValueUsd = state.stablecoinBalances.usdc + state.stablecoinBalances.usdt;
|
|
163
|
+
return {
|
|
164
|
+
address: vault,
|
|
165
|
+
owner: v.owner,
|
|
166
|
+
vaultId: v.vaultId,
|
|
167
|
+
health,
|
|
168
|
+
pnl,
|
|
169
|
+
tokenBalances,
|
|
170
|
+
totalValueUsd,
|
|
171
|
+
state,
|
|
172
|
+
stats,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=vault-analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-analytics.js","sourceRoot":"","sources":["../src/vault-analytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VelocityTracker — Kit-native Agent Manipulation Defense
|
|
3
|
+
*
|
|
4
|
+
* Monitors transaction velocity (TX/min, TX/hr, USD/hr) and detects
|
|
5
|
+
* rapid-fire transaction patterns that may indicate agent manipulation.
|
|
6
|
+
*
|
|
7
|
+
* Integrates with ShieldState for unified spending tracking.
|
|
8
|
+
*/
|
|
9
|
+
import type { Address } from "@solana/kit";
|
|
10
|
+
import type { ShieldState } from "./shield.js";
|
|
11
|
+
export interface SpendStatus {
|
|
12
|
+
globalSpent24h: bigint;
|
|
13
|
+
globalCap: bigint | null;
|
|
14
|
+
globalRemaining: bigint | null;
|
|
15
|
+
agentSpent24h: bigint | null;
|
|
16
|
+
agentCap: bigint | null;
|
|
17
|
+
source: "on-chain" | "client-side";
|
|
18
|
+
}
|
|
19
|
+
export interface VelocityConfig {
|
|
20
|
+
/** Max transactions per minute (default: 10) */
|
|
21
|
+
maxTxPerMinute?: number;
|
|
22
|
+
/** Max transactions per hour (default: 60) */
|
|
23
|
+
maxTxPerHour?: number;
|
|
24
|
+
/** Max USD spend per hour in base units (default: 500_000_000n = $500) */
|
|
25
|
+
maxUsdPerHour?: bigint;
|
|
26
|
+
/** Rapid-fire detection: count transactions within windowMs */
|
|
27
|
+
rapidFireThreshold?: {
|
|
28
|
+
count: number;
|
|
29
|
+
windowMs: number;
|
|
30
|
+
};
|
|
31
|
+
/** Cooldown period in ms after velocity breach (default: 30_000 = 30s) */
|
|
32
|
+
cooldownMs?: number;
|
|
33
|
+
}
|
|
34
|
+
export declare class VelocityTracker {
|
|
35
|
+
private readonly state;
|
|
36
|
+
private readonly config;
|
|
37
|
+
private cooldownUntil;
|
|
38
|
+
private txTimestamps;
|
|
39
|
+
constructor(state: ShieldState, config?: VelocityConfig);
|
|
40
|
+
/**
|
|
41
|
+
* Check velocity constraints. Throws ShieldDeniedError (code 7022) on breach.
|
|
42
|
+
*
|
|
43
|
+
* @param signerAddress - The signer to check
|
|
44
|
+
* @param dryRun - S-6: When true, checks without incrementing the rapid-fire counter.
|
|
45
|
+
* Useful for precheck queries that shouldn't pollute velocity state.
|
|
46
|
+
*/
|
|
47
|
+
check(signerAddress: Address, dryRun?: boolean): void;
|
|
48
|
+
/**
|
|
49
|
+
* Record a transaction after successful send.
|
|
50
|
+
*/
|
|
51
|
+
recordTransaction(usdAmount?: bigint): void;
|
|
52
|
+
/**
|
|
53
|
+
* Whether the tracker is in a cooldown period after a velocity breach.
|
|
54
|
+
*/
|
|
55
|
+
isInCooldown(): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Get remaining cooldown time in ms. Returns 0 if not in cooldown.
|
|
58
|
+
*/
|
|
59
|
+
getCooldownRemainingMs(): number;
|
|
60
|
+
/**
|
|
61
|
+
* Reset the tracker (clears cooldown and timestamps).
|
|
62
|
+
*/
|
|
63
|
+
reset(): void;
|
|
64
|
+
/**
|
|
65
|
+
* Get current spend status. Returns on-chain data when ShieldState is synced.
|
|
66
|
+
*/
|
|
67
|
+
getSpendStatus(): SpendStatus;
|
|
68
|
+
/**
|
|
69
|
+
* Get current velocity stats.
|
|
70
|
+
*/
|
|
71
|
+
getStats(): {
|
|
72
|
+
txPerMinute: number;
|
|
73
|
+
txPerHour: number;
|
|
74
|
+
usdPerHour: bigint;
|
|
75
|
+
inCooldown: boolean;
|
|
76
|
+
cooldownRemainingMs: number;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=velocity-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"velocity-tracker.d.ts","sourceRoot":"","sources":["../src/velocity-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,UAAU,GAAG,aAAa,CAAC;CACpC;AAID,MAAM,WAAW,cAAc;IAC7B,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,kBAAkB,CAAC,EAAE;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAYD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,YAAY,CAAgB;gBAExB,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,cAAc;IAYvD;;;;;;OAMG;IACH,KAAK,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,UAAQ,GAAG,IAAI;IAuFnD;;OAEG;IACH,iBAAiB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAO3C;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,sBAAsB,IAAI,MAAM;IAKhC;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,cAAc,IAAI,WAAW;IAuB7B;;OAEG;IACH,QAAQ,IAAI;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;QACpB,mBAAmB,EAAE,MAAM,CAAC;KAC7B;CASF"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VelocityTracker — Kit-native Agent Manipulation Defense
|
|
3
|
+
*
|
|
4
|
+
* Monitors transaction velocity (TX/min, TX/hr, USD/hr) and detects
|
|
5
|
+
* rapid-fire transaction patterns that may indicate agent manipulation.
|
|
6
|
+
*
|
|
7
|
+
* Integrates with ShieldState for unified spending tracking.
|
|
8
|
+
*/
|
|
9
|
+
import { ShieldDeniedError } from "./shield.js";
|
|
10
|
+
const DEFAULT_CONFIG = {
|
|
11
|
+
maxTxPerMinute: 10,
|
|
12
|
+
maxTxPerHour: 60,
|
|
13
|
+
maxUsdPerHour: 500000000n,
|
|
14
|
+
rapidFireThreshold: { count: 5, windowMs: 10_000 },
|
|
15
|
+
cooldownMs: 30_000,
|
|
16
|
+
};
|
|
17
|
+
// ─── VelocityTracker ────────────────────────────────────────────────────────
|
|
18
|
+
export class VelocityTracker {
|
|
19
|
+
state;
|
|
20
|
+
config;
|
|
21
|
+
cooldownUntil = 0;
|
|
22
|
+
txTimestamps = [];
|
|
23
|
+
constructor(state, config) {
|
|
24
|
+
this.state = state;
|
|
25
|
+
this.config = {
|
|
26
|
+
maxTxPerMinute: config?.maxTxPerMinute ?? DEFAULT_CONFIG.maxTxPerMinute,
|
|
27
|
+
maxTxPerHour: config?.maxTxPerHour ?? DEFAULT_CONFIG.maxTxPerHour,
|
|
28
|
+
maxUsdPerHour: config?.maxUsdPerHour ?? DEFAULT_CONFIG.maxUsdPerHour,
|
|
29
|
+
rapidFireThreshold: config?.rapidFireThreshold ?? DEFAULT_CONFIG.rapidFireThreshold,
|
|
30
|
+
cooldownMs: config?.cooldownMs ?? DEFAULT_CONFIG.cooldownMs,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Check velocity constraints. Throws ShieldDeniedError (code 7022) on breach.
|
|
35
|
+
*
|
|
36
|
+
* @param signerAddress - The signer to check
|
|
37
|
+
* @param dryRun - S-6: When true, checks without incrementing the rapid-fire counter.
|
|
38
|
+
* Useful for precheck queries that shouldn't pollute velocity state.
|
|
39
|
+
*/
|
|
40
|
+
check(signerAddress, dryRun = false) {
|
|
41
|
+
const violations = [];
|
|
42
|
+
// 0. Cooldown check
|
|
43
|
+
if (this.isInCooldown()) {
|
|
44
|
+
const remainingMs = this.cooldownUntil - Date.now();
|
|
45
|
+
throw new ShieldDeniedError([
|
|
46
|
+
{
|
|
47
|
+
rule: "velocity_cooldown",
|
|
48
|
+
message: `Velocity cooldown active — ${Math.ceil(remainingMs / 1000)}s remaining`,
|
|
49
|
+
suggestion: "Wait for the cooldown period to expire",
|
|
50
|
+
},
|
|
51
|
+
]);
|
|
52
|
+
}
|
|
53
|
+
// 1. TX/minute check
|
|
54
|
+
const txPerMinute = this.state.getTransactionCountInWindow(60_000);
|
|
55
|
+
if (txPerMinute >= this.config.maxTxPerMinute) {
|
|
56
|
+
violations.push({
|
|
57
|
+
rule: "velocity_tx_per_minute",
|
|
58
|
+
message: `Transaction rate ${txPerMinute}/${this.config.maxTxPerMinute} per minute exceeded`,
|
|
59
|
+
suggestion: "Wait before sending more transactions",
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
// 2. TX/hour check
|
|
63
|
+
const txPerHour = this.state.getTransactionCountInWindow(3_600_000);
|
|
64
|
+
if (txPerHour >= this.config.maxTxPerHour) {
|
|
65
|
+
violations.push({
|
|
66
|
+
rule: "velocity_tx_per_hour",
|
|
67
|
+
message: `Transaction rate ${txPerHour}/${this.config.maxTxPerHour} per hour exceeded`,
|
|
68
|
+
suggestion: "Wait before sending more transactions",
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
// 3. USD/hour check (cross-mint aggregation — BUG-3 fix)
|
|
72
|
+
const usdPerHour = this.state.getTotalSpendInWindow(3_600_000);
|
|
73
|
+
if (usdPerHour >= this.config.maxUsdPerHour) {
|
|
74
|
+
violations.push({
|
|
75
|
+
rule: "velocity_usd_per_hour",
|
|
76
|
+
message: `Hourly USD spend ${usdPerHour} exceeds ceiling ${this.config.maxUsdPerHour}`,
|
|
77
|
+
suggestion: "Reduce transaction amounts or wait for the window to reset",
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
// 3b. On-chain 24h cap check (when synced)
|
|
81
|
+
const rs = this.state.resolvedState;
|
|
82
|
+
if (rs) {
|
|
83
|
+
const effectiveSpent = this.state.getEffectiveGlobalSpent24h();
|
|
84
|
+
if (effectiveSpent >= rs.globalBudget.cap) {
|
|
85
|
+
violations.push({
|
|
86
|
+
rule: "velocity_on_chain_cap",
|
|
87
|
+
message: `On-chain daily cap reached: ${effectiveSpent} >= ${rs.globalBudget.cap}`,
|
|
88
|
+
suggestion: "Wait for the 24h rolling window to expire some spend",
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// 4. Rapid-fire detection
|
|
93
|
+
const now = Date.now();
|
|
94
|
+
// S-6: Filter existing timestamps regardless of dryRun
|
|
95
|
+
const cutoff = now - this.config.rapidFireThreshold.windowMs;
|
|
96
|
+
this.txTimestamps = this.txTimestamps.filter((t) => t >= cutoff);
|
|
97
|
+
// Compute what the count would be if we added this check
|
|
98
|
+
const wouldBeCount = this.txTimestamps.length + 1;
|
|
99
|
+
if (wouldBeCount >= this.config.rapidFireThreshold.count) {
|
|
100
|
+
violations.push({
|
|
101
|
+
rule: "velocity_rapid_fire",
|
|
102
|
+
message: `Rapid-fire detected: ${wouldBeCount} transactions in ${this.config.rapidFireThreshold.windowMs}ms`,
|
|
103
|
+
suggestion: "Possible agent manipulation — transactions blocked",
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
if (violations.length > 0) {
|
|
107
|
+
// Trigger cooldown
|
|
108
|
+
this.cooldownUntil = now + this.config.cooldownMs;
|
|
109
|
+
throw new ShieldDeniedError(violations);
|
|
110
|
+
}
|
|
111
|
+
// S-6: Only push timestamp if not a dry run
|
|
112
|
+
if (!dryRun) {
|
|
113
|
+
this.txTimestamps.push(now);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Record a transaction after successful send.
|
|
118
|
+
*/
|
|
119
|
+
recordTransaction(usdAmount) {
|
|
120
|
+
this.state.recordTransaction();
|
|
121
|
+
if (usdAmount !== undefined) {
|
|
122
|
+
this.state.recordSpend("", usdAmount);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Whether the tracker is in a cooldown period after a velocity breach.
|
|
127
|
+
*/
|
|
128
|
+
isInCooldown() {
|
|
129
|
+
return Date.now() < this.cooldownUntil;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get remaining cooldown time in ms. Returns 0 if not in cooldown.
|
|
133
|
+
*/
|
|
134
|
+
getCooldownRemainingMs() {
|
|
135
|
+
const remaining = this.cooldownUntil - Date.now();
|
|
136
|
+
return remaining > 0 ? remaining : 0;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Reset the tracker (clears cooldown and timestamps).
|
|
140
|
+
*/
|
|
141
|
+
reset() {
|
|
142
|
+
this.cooldownUntil = 0;
|
|
143
|
+
this.txTimestamps = [];
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Get current spend status. Returns on-chain data when ShieldState is synced.
|
|
147
|
+
*/
|
|
148
|
+
getSpendStatus() {
|
|
149
|
+
const rs = this.state.resolvedState;
|
|
150
|
+
if (rs) {
|
|
151
|
+
return {
|
|
152
|
+
globalSpent24h: this.state.getEffectiveGlobalSpent24h(),
|
|
153
|
+
globalCap: rs.globalBudget.cap,
|
|
154
|
+
globalRemaining: this.state.getEffectiveGlobalRemaining(),
|
|
155
|
+
agentSpent24h: this.state.getEffectiveAgentSpent24h(),
|
|
156
|
+
agentCap: rs.agentBudget?.cap ?? null,
|
|
157
|
+
source: "on-chain",
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
const clientSpend = this.state.getTotalSpendInWindow(86_400_000);
|
|
161
|
+
return {
|
|
162
|
+
globalSpent24h: clientSpend,
|
|
163
|
+
globalCap: null,
|
|
164
|
+
globalRemaining: null,
|
|
165
|
+
agentSpent24h: null,
|
|
166
|
+
agentCap: null,
|
|
167
|
+
source: "client-side",
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Get current velocity stats.
|
|
172
|
+
*/
|
|
173
|
+
getStats() {
|
|
174
|
+
return {
|
|
175
|
+
txPerMinute: this.state.getTransactionCountInWindow(60_000),
|
|
176
|
+
txPerHour: this.state.getTransactionCountInWindow(3_600_000),
|
|
177
|
+
usdPerHour: this.state.getTotalSpendInWindow(3_600_000),
|
|
178
|
+
inCooldown: this.isInCooldown(),
|
|
179
|
+
cooldownRemainingMs: this.getCooldownRemainingMs(),
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=velocity-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"velocity-tracker.js","sourceRoot":"","sources":["../src/velocity-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* x402 Amount Guard — Kit-native
|
|
3
|
+
*
|
|
4
|
+
* Validates payment amounts beyond simple maxPayment ceiling.
|
|
5
|
+
* Detects zero, negative, NaN, per-request ceiling, and spike anomalies.
|
|
6
|
+
*/
|
|
7
|
+
import type { X402Config } from "./types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Validate a payment amount against sanity checks.
|
|
10
|
+
*
|
|
11
|
+
* @throws X402PaymentError on invalid or suspicious amounts
|
|
12
|
+
*/
|
|
13
|
+
export declare function validatePaymentAmount(amount: string, config?: X402Config): bigint;
|
|
14
|
+
/**
|
|
15
|
+
* Record a successful payment amount for spike detection.
|
|
16
|
+
*/
|
|
17
|
+
export declare function recordPaymentAmount(amount: bigint): void;
|
|
18
|
+
/**
|
|
19
|
+
* Reset the recent payments history (for testing).
|
|
20
|
+
*/
|
|
21
|
+
export declare function resetPaymentHistory(): void;
|
|
22
|
+
/**
|
|
23
|
+
* Get the current payment history length (for testing).
|
|
24
|
+
*/
|
|
25
|
+
export declare function getPaymentHistoryLength(): number;
|
|
26
|
+
//# sourceMappingURL=amount-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"amount-guard.d.ts","sourceRoot":"","sources":["../../src/x402/amount-guard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAe7C;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,UAAU,GAClB,MAAM,CAuCR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAKxD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* x402 Amount Guard — Kit-native
|
|
3
|
+
*
|
|
4
|
+
* Validates payment amounts beyond simple maxPayment ceiling.
|
|
5
|
+
* Detects zero, negative, NaN, per-request ceiling, and spike anomalies.
|
|
6
|
+
*/
|
|
7
|
+
import { X402PaymentError } from "./errors.js";
|
|
8
|
+
/**
|
|
9
|
+
* Recent payment amounts for spike detection.
|
|
10
|
+
* Intentionally module-level (global): all shieldedFetch instances share spike
|
|
11
|
+
* history so cross-instance spike detection catches manipulation attempts.
|
|
12
|
+
* Use resetPaymentHistory() in tests to clear between suites.
|
|
13
|
+
*/
|
|
14
|
+
const recentPayments = [];
|
|
15
|
+
const MAX_RECENT = 20;
|
|
16
|
+
/** Spike detection threshold: payment > 10x median = suspicious */
|
|
17
|
+
const SPIKE_MULTIPLIER = 10n;
|
|
18
|
+
/**
|
|
19
|
+
* Validate a payment amount against sanity checks.
|
|
20
|
+
*
|
|
21
|
+
* @throws X402PaymentError on invalid or suspicious amounts
|
|
22
|
+
*/
|
|
23
|
+
export function validatePaymentAmount(amount, config) {
|
|
24
|
+
// 1. Parse and validate
|
|
25
|
+
let parsed;
|
|
26
|
+
try {
|
|
27
|
+
parsed = BigInt(amount);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
throw new X402PaymentError(`Invalid payment amount: "${amount}" is not a valid integer`);
|
|
31
|
+
}
|
|
32
|
+
// 2. Reject zero and negative
|
|
33
|
+
if (parsed <= 0n) {
|
|
34
|
+
throw new X402PaymentError(`Invalid payment amount: ${amount} must be positive`);
|
|
35
|
+
}
|
|
36
|
+
// 3. Per-request ceiling
|
|
37
|
+
if (config?.maxPaymentPerRequest !== undefined &&
|
|
38
|
+
parsed > config.maxPaymentPerRequest) {
|
|
39
|
+
throw new X402PaymentError(`Payment amount ${amount} exceeds per-request ceiling ${config.maxPaymentPerRequest}`);
|
|
40
|
+
}
|
|
41
|
+
// 4. Spike detection: if payment > 10x median of recent payments
|
|
42
|
+
if (recentPayments.length >= 3) {
|
|
43
|
+
const median = getMedian(recentPayments);
|
|
44
|
+
if (median > 0n && parsed > median * SPIKE_MULTIPLIER) {
|
|
45
|
+
throw new X402PaymentError(`Suspicious payment spike: ${amount} is > 10x the median of recent payments (${median})`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return parsed;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Record a successful payment amount for spike detection.
|
|
52
|
+
*/
|
|
53
|
+
export function recordPaymentAmount(amount) {
|
|
54
|
+
recentPayments.push(amount);
|
|
55
|
+
if (recentPayments.length > MAX_RECENT) {
|
|
56
|
+
recentPayments.shift();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Reset the recent payments history (for testing).
|
|
61
|
+
*/
|
|
62
|
+
export function resetPaymentHistory() {
|
|
63
|
+
recentPayments.length = 0;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get the current payment history length (for testing).
|
|
67
|
+
*/
|
|
68
|
+
export function getPaymentHistoryLength() {
|
|
69
|
+
return recentPayments.length;
|
|
70
|
+
}
|
|
71
|
+
/** Compute median of a bigint array. */
|
|
72
|
+
function getMedian(arr) {
|
|
73
|
+
const sorted = [...arr].sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
|
|
74
|
+
const mid = Math.floor(sorted.length / 2);
|
|
75
|
+
if (sorted.length % 2 === 0) {
|
|
76
|
+
return (sorted[mid - 1] + sorted[mid]) / 2n;
|
|
77
|
+
}
|
|
78
|
+
return sorted[mid];
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=amount-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"amount-guard.js","sourceRoot":"","sources":["../../src/x402/amount-guard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,cAAc,GAAa,EAAE,CAAC;AACpC,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB,mEAAmE;AACnE,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAc,EACd,MAAmB;IAEnB,wBAAwB;IACxB,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,gBAAgB,CACxB,4BAA4B,MAAM,0BAA0B,CAC7D,CAAC;IACJ,CAAC;IAED,8BAA8B;IAC9B,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,gBAAgB,CACxB,2BAA2B,MAAM,mBAAmB,CACrD,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,IACE,MAAM,EAAE,oBAAoB,KAAK,SAAS;QAC1C,MAAM,GAAG,MAAM,CAAC,oBAAoB,EACpC,CAAC;QACD,MAAM,IAAI,gBAAgB,CACxB,kBAAkB,MAAM,gCAAgC,MAAM,CAAC,oBAAoB,EAAE,CACtF,CAAC;IACJ,CAAC;IAED,iEAAiE;IACjE,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;QACzC,IAAI,MAAM,GAAG,EAAE,IAAI,MAAM,GAAG,MAAM,GAAG,gBAAgB,EAAE,CAAC;YACtD,MAAM,IAAI,gBAAgB,CACxB,6BAA6B,MAAM,4CAA4C,MAAM,GAAG,CACzF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,IAAI,cAAc,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;QACvC,cAAc,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,cAAc,CAAC,MAAM,CAAC;AAC/B,CAAC;AAED,wCAAwC;AACxC,SAAS,SAAS,CAAC,GAAa;IAC9B,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* x402 Audit Trail — Kit-native
|
|
3
|
+
*
|
|
4
|
+
* Structured X402PaymentEvent emitter.
|
|
5
|
+
* Calls config.onPayment() if configured.
|
|
6
|
+
*/
|
|
7
|
+
import type { X402Config, X402PaymentEvent, SettleResponse } from "./types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Emit a structured payment event through the audit callback.
|
|
10
|
+
*/
|
|
11
|
+
export declare function emitPaymentEvent(config: X402Config | undefined, event: X402PaymentEvent): void;
|
|
12
|
+
/**
|
|
13
|
+
* Create a payment event from the flow parameters.
|
|
14
|
+
*/
|
|
15
|
+
export declare function createPaymentEvent(params: {
|
|
16
|
+
url: string;
|
|
17
|
+
payTo: string;
|
|
18
|
+
asset: string;
|
|
19
|
+
amount: string;
|
|
20
|
+
paid: boolean;
|
|
21
|
+
deniedReason?: string;
|
|
22
|
+
settlement?: SettleResponse;
|
|
23
|
+
startTime: number;
|
|
24
|
+
nonce?: string;
|
|
25
|
+
}): X402PaymentEvent;
|
|
26
|
+
//# sourceMappingURL=audit-trail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-trail.d.ts","sourceRoot":"","sources":["../../src/x402/audit-trail.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/E;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,KAAK,EAAE,gBAAgB,GACtB,IAAI,CAIN;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,gBAAgB,CAanB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* x402 Audit Trail — Kit-native
|
|
3
|
+
*
|
|
4
|
+
* Structured X402PaymentEvent emitter.
|
|
5
|
+
* Calls config.onPayment() if configured.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Emit a structured payment event through the audit callback.
|
|
9
|
+
*/
|
|
10
|
+
export function emitPaymentEvent(config, event) {
|
|
11
|
+
if (config?.onPayment) {
|
|
12
|
+
config.onPayment(event);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Create a payment event from the flow parameters.
|
|
17
|
+
*/
|
|
18
|
+
export function createPaymentEvent(params) {
|
|
19
|
+
return {
|
|
20
|
+
timestamp: Date.now(),
|
|
21
|
+
url: params.url,
|
|
22
|
+
payTo: params.payTo,
|
|
23
|
+
asset: params.asset,
|
|
24
|
+
amount: params.amount,
|
|
25
|
+
paid: params.paid,
|
|
26
|
+
deniedReason: params.deniedReason,
|
|
27
|
+
settlement: params.settlement,
|
|
28
|
+
nonce: params.nonce,
|
|
29
|
+
durationMs: Date.now() - params.startTime,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=audit-trail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-trail.js","sourceRoot":"","sources":["../../src/x402/audit-trail.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAA8B,EAC9B,KAAuB;IAEvB,IAAI,MAAM,EAAE,SAAS,EAAE,CAAC;QACtB,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAUlC;IACC,OAAO;QACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS;KAC1C,CAAC;AACJ,CAAC"}
|