@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,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security analytics — posture checklist, alert conditions, audit trail.
|
|
3
|
+
*
|
|
4
|
+
* The Security tab renders:
|
|
5
|
+
* - Binary pass/fail checklist (getSecurityPosture)
|
|
6
|
+
* - Alert conditions (evaluateAlertConditions) for toasts, email, webhooks
|
|
7
|
+
*
|
|
8
|
+
* Why binary pass/fail instead of a score: A vault with FULL_PERMISSIONS on one
|
|
9
|
+
* agent and perfect everything else would get "90/100" — dangerously misleading.
|
|
10
|
+
*/
|
|
11
|
+
import type { Address } from "@solana/kit";
|
|
12
|
+
import type { ResolvedVaultState, ResolvedVaultStateForOwner } from "./state-resolver.js";
|
|
13
|
+
import type { DecodedSigilEvent } from "./events.js";
|
|
14
|
+
export interface SecurityCheck {
|
|
15
|
+
id: string;
|
|
16
|
+
label: string;
|
|
17
|
+
passed: boolean;
|
|
18
|
+
severity: "critical" | "warning" | "info";
|
|
19
|
+
detail: string;
|
|
20
|
+
remediation: string | null;
|
|
21
|
+
}
|
|
22
|
+
export interface SecurityPosture {
|
|
23
|
+
checks: SecurityCheck[];
|
|
24
|
+
passCount: number;
|
|
25
|
+
failCount: number;
|
|
26
|
+
criticalFailures: SecurityCheck[];
|
|
27
|
+
}
|
|
28
|
+
export interface Alert {
|
|
29
|
+
id: string;
|
|
30
|
+
severity: "info" | "warning" | "critical";
|
|
31
|
+
title: string;
|
|
32
|
+
description: string;
|
|
33
|
+
vaultAddress: Address;
|
|
34
|
+
agentAddress: Address | null;
|
|
35
|
+
actionHref: string;
|
|
36
|
+
actionLabel: string;
|
|
37
|
+
}
|
|
38
|
+
export interface AuditEntry {
|
|
39
|
+
timestamp: number;
|
|
40
|
+
txSignature: string;
|
|
41
|
+
category: "policy_change" | "agent_change" | "emergency" | "escrow" | "constraint_change";
|
|
42
|
+
action: string;
|
|
43
|
+
actor: Address;
|
|
44
|
+
details: Record<string, unknown>;
|
|
45
|
+
description: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 20-point security posture checklist. Pure function — no RPC.
|
|
49
|
+
* Checks 1-13: base. 14-17: timelock, fee, constraint alignment, permission concentration.
|
|
50
|
+
* Checks 18-19: discriminator staleness, allowlist coverage. Check 20: mode-ALL warning.
|
|
51
|
+
*/
|
|
52
|
+
export declare function getSecurityPosture(state: ResolvedVaultState): SecurityPosture;
|
|
53
|
+
/**
|
|
54
|
+
* Evaluate alert conditions based on current vault state.
|
|
55
|
+
* Returns active alerts sorted by severity (critical first).
|
|
56
|
+
*/
|
|
57
|
+
export declare function evaluateAlertConditions(state: ResolvedVaultState | ResolvedVaultStateForOwner, vaultAddress: Address, previousState?: ResolvedVaultState | ResolvedVaultStateForOwner): Alert[];
|
|
58
|
+
/**
|
|
59
|
+
* Filter decoded events into a compliance-focused audit trail.
|
|
60
|
+
* Shows only security-relevant events (policy, agent, emergency, escrow, constraints).
|
|
61
|
+
*
|
|
62
|
+
* Supports optional filtering by category, timestamp, and actor.
|
|
63
|
+
*
|
|
64
|
+
* Note on event field availability (verified against events.rs):
|
|
65
|
+
* - 10 of 22 events have no `timestamp` field — fallback through `executes_at`, `applied_at`, then 0.
|
|
66
|
+
* - 7+ events have neither `owner` nor `agent` — fallback through `settled_by`, `refunded_by`, `vault`.
|
|
67
|
+
* - `txSignature` requires enrichment from transaction envelope (DecodedSigilEvent has no such field).
|
|
68
|
+
*/
|
|
69
|
+
export declare function getAuditTrail(events: DecodedSigilEvent[], options?: {
|
|
70
|
+
/** Filter to specific categories. If omitted, returns all. */
|
|
71
|
+
categories?: AuditEntry["category"][];
|
|
72
|
+
/** Filter to events after this Unix timestamp. */
|
|
73
|
+
since?: number;
|
|
74
|
+
/** Filter to events by a specific actor address. */
|
|
75
|
+
actor?: Address;
|
|
76
|
+
}): AuditEntry[];
|
|
77
|
+
export interface AuditTrailSummary {
|
|
78
|
+
totalEntries: number;
|
|
79
|
+
byCategory: Record<AuditEntry["category"], number>;
|
|
80
|
+
latestTimestamp: number;
|
|
81
|
+
uniqueActors: Address[];
|
|
82
|
+
}
|
|
83
|
+
/** Summarize an audit trail into per-category counts. */
|
|
84
|
+
export declare function getAuditTrailSummary(trail: AuditEntry[]): AuditTrailSummary;
|
|
85
|
+
//# sourceMappingURL=security-analytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-analytics.d.ts","sourceRoot":"","sources":["../src/security-analytics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAC1F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AASrD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,aAAa,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,eAAe,GAAG,cAAc,GAAG,WAAW,GAAG,QAAQ,GAAG,mBAAmB,CAAC;IAC1F,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;CACrB;AAiBD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,eAAe,CAuP7E;AAID;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,kBAAkB,GAAG,0BAA0B,EACtD,YAAY,EAAE,OAAO,EACrB,aAAa,CAAC,EAAE,kBAAkB,GAAG,0BAA0B,GAC9D,KAAK,EAAE,CA6JT;AA6BD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,iBAAiB,EAAE,EAC3B,OAAO,CAAC,EAAE;IACR,8DAA8D;IAC9D,UAAU,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;IACtC,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GACA,UAAU,EAAE,CAqCd;AAID,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;IACnD,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,OAAO,EAAE,CAAC;CACzB;AAED,yDAAyD;AACzD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,iBAAiB,CAuB3E"}
|
|
@@ -0,0 +1,510 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security analytics — posture checklist, alert conditions, audit trail.
|
|
3
|
+
*
|
|
4
|
+
* The Security tab renders:
|
|
5
|
+
* - Binary pass/fail checklist (getSecurityPosture)
|
|
6
|
+
* - Alert conditions (evaluateAlertConditions) for toasts, email, webhooks
|
|
7
|
+
*
|
|
8
|
+
* Why binary pass/fail instead of a score: A vault with FULL_PERMISSIONS on one
|
|
9
|
+
* agent and perfect everything else would get "90/100" — dangerously misleading.
|
|
10
|
+
*/
|
|
11
|
+
import { VaultStatus } from "./generated/types/vaultStatus.js";
|
|
12
|
+
import { getSpendingVelocity } from "./spending-analytics.js";
|
|
13
|
+
import { describeEvent } from "./event-analytics.js";
|
|
14
|
+
import { formatUsd, formatAddress } from "./formatting.js";
|
|
15
|
+
import { FULL_PERMISSIONS, PROTOCOL_MODE_ALLOWLIST, EPOCH_DURATION, MAX_DEVELOPER_FEE_RATE } from "./types.js";
|
|
16
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
17
|
+
/** Count set bits in a bigint permission bitmask. */
|
|
18
|
+
function countBits(n) {
|
|
19
|
+
let count = 0;
|
|
20
|
+
let v = n;
|
|
21
|
+
while (v > 0n) {
|
|
22
|
+
count += Number(v & 1n);
|
|
23
|
+
v >>= 1n;
|
|
24
|
+
}
|
|
25
|
+
return count;
|
|
26
|
+
}
|
|
27
|
+
// ─── getSecurityPosture ──────────────────────────────────────────────────────
|
|
28
|
+
/**
|
|
29
|
+
* 20-point security posture checklist. Pure function — no RPC.
|
|
30
|
+
* Checks 1-13: base. 14-17: timelock, fee, constraint alignment, permission concentration.
|
|
31
|
+
* Checks 18-19: discriminator staleness, allowlist coverage. Check 20: mode-ALL warning.
|
|
32
|
+
*/
|
|
33
|
+
export function getSecurityPosture(state) {
|
|
34
|
+
const { vault, policy, constraints } = state;
|
|
35
|
+
const checks = [
|
|
36
|
+
{
|
|
37
|
+
id: "no-full-perms",
|
|
38
|
+
label: "No agent has full permissions",
|
|
39
|
+
passed: !vault.agents.some((a) => a.permissions === FULL_PERMISSIONS),
|
|
40
|
+
severity: "critical",
|
|
41
|
+
detail: "An agent with all 21 permission bits can perform any action including transfers.",
|
|
42
|
+
remediation: vault.agents.some((a) => a.permissions === FULL_PERMISSIONS)
|
|
43
|
+
? "Restrict agent permissions to only the actions they need."
|
|
44
|
+
: null,
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
id: "cap-configured",
|
|
48
|
+
label: "Daily spending cap is configured",
|
|
49
|
+
passed: policy.dailySpendingCapUsd > 0n,
|
|
50
|
+
severity: "critical",
|
|
51
|
+
detail: "Without a cap, agents can spend unlimited amounts in 24 hours.",
|
|
52
|
+
remediation: policy.dailySpendingCapUsd === 0n
|
|
53
|
+
? "Set a daily spending cap. Start with your expected daily volume + 20% buffer."
|
|
54
|
+
: null,
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
id: "fee-destination-valid",
|
|
58
|
+
label: "Fee destination is not system program",
|
|
59
|
+
passed: vault.feeDestination !== "11111111111111111111111111111111",
|
|
60
|
+
severity: "critical",
|
|
61
|
+
detail: "Fees sent to the system program address are effectively burned.",
|
|
62
|
+
remediation: "Fee destination is immutable after vault creation. If incorrect, close and recreate the vault.",
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
id: "agent-limits",
|
|
66
|
+
label: "All agents have spending limits",
|
|
67
|
+
passed: vault.agents.length === 0 || vault.agents.every((a) => a.spendingLimitUsd > 0n),
|
|
68
|
+
severity: "warning",
|
|
69
|
+
detail: "Per-agent limits prevent any single agent from consuming the entire vault cap.",
|
|
70
|
+
remediation: vault.agents.some((a) => a.spendingLimitUsd === 0n)
|
|
71
|
+
? "Set per-agent spending limits."
|
|
72
|
+
: null,
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
id: "protocol-allowlist",
|
|
76
|
+
label: "Protocol mode is allowlist",
|
|
77
|
+
passed: policy.protocolMode === PROTOCOL_MODE_ALLOWLIST,
|
|
78
|
+
severity: "warning",
|
|
79
|
+
detail: "Allowlist mode restricts agents to approved protocols only.",
|
|
80
|
+
remediation: policy.protocolMode !== PROTOCOL_MODE_ALLOWLIST
|
|
81
|
+
? "Switch to Allowlist mode and add only the protocols your agents need."
|
|
82
|
+
: null,
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
id: "timelock-enabled",
|
|
86
|
+
label: "Policy changes require waiting period",
|
|
87
|
+
passed: policy.timelockDuration > 0n,
|
|
88
|
+
severity: "warning",
|
|
89
|
+
detail: "A timelock prevents instant policy changes. Gives time to respond if owner key is compromised.",
|
|
90
|
+
remediation: policy.timelockDuration === 0n
|
|
91
|
+
? "Enable timelock (recommended: 1-24 hours)."
|
|
92
|
+
: null,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
id: "slippage-reasonable",
|
|
96
|
+
label: "Max slippage below 10%",
|
|
97
|
+
passed: policy.maxSlippageBps < 1000,
|
|
98
|
+
severity: "warning",
|
|
99
|
+
detail: "High slippage tolerance allows agents to accept unfavorable trade prices.",
|
|
100
|
+
remediation: policy.maxSlippageBps >= 1000
|
|
101
|
+
? `Current max slippage is ${policy.maxSlippageBps / 100}%. Reduce to 1-3% for most strategies.`
|
|
102
|
+
: null,
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
id: "agent-limits-sum",
|
|
106
|
+
label: "Agent limits don't exceed vault cap",
|
|
107
|
+
passed: (() => {
|
|
108
|
+
if (vault.agents.length === 0)
|
|
109
|
+
return true;
|
|
110
|
+
const sumLimits = vault.agents.reduce((s, a) => s + a.spendingLimitUsd, 0n);
|
|
111
|
+
const allHaveLimits = vault.agents.every((a) => a.spendingLimitUsd > 0n);
|
|
112
|
+
return !allHaveLimits || sumLimits <= policy.dailySpendingCapUsd;
|
|
113
|
+
})(),
|
|
114
|
+
severity: "warning",
|
|
115
|
+
detail: "If per-agent limits sum to more than the vault cap, agents may assume they have more budget than exists.",
|
|
116
|
+
remediation: "Reduce per-agent limits so their sum is at or below the vault daily cap.",
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
id: "constraints-configured",
|
|
120
|
+
label: "Instruction constraints are set",
|
|
121
|
+
passed: constraints !== null,
|
|
122
|
+
severity: "info",
|
|
123
|
+
detail: "Instruction constraints add byte-level validation on DeFi instructions.",
|
|
124
|
+
remediation: constraints === null
|
|
125
|
+
? "Consider adding instruction constraints for high-value vaults."
|
|
126
|
+
: null,
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
id: "has-agents",
|
|
130
|
+
label: "At least one agent is registered",
|
|
131
|
+
passed: vault.agents.length > 0,
|
|
132
|
+
severity: "info",
|
|
133
|
+
detail: "A vault without agents cannot execute any DeFi operations.",
|
|
134
|
+
remediation: vault.agents.length === 0 ? "Register an agent to start using this vault." : null,
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
id: "not-all-paused",
|
|
138
|
+
label: "At least one agent is active",
|
|
139
|
+
passed: vault.agents.length === 0 || vault.agents.some((a) => !a.paused),
|
|
140
|
+
severity: "info",
|
|
141
|
+
detail: "If all agents are paused, no DeFi operations can be executed.",
|
|
142
|
+
remediation: vault.agents.length > 0 && vault.agents.every((a) => a.paused)
|
|
143
|
+
? "Unpause at least one agent to resume operations."
|
|
144
|
+
: null,
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
id: "vault-has-balance",
|
|
148
|
+
label: "Vault has non-zero token balance",
|
|
149
|
+
passed: state.stablecoinBalances.usdc > 0n || state.stablecoinBalances.usdt > 0n,
|
|
150
|
+
severity: "info",
|
|
151
|
+
detail: "A vault with zero balance cannot execute any DeFi operations.",
|
|
152
|
+
remediation: "Deposit funds to the vault to enable agent trading.",
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
id: "recent-activity",
|
|
156
|
+
label: "Vault has recent activity (within 7 days)",
|
|
157
|
+
passed: (() => {
|
|
158
|
+
if (!state.tracker)
|
|
159
|
+
return true;
|
|
160
|
+
const epochDuration = BigInt(EPOCH_DURATION);
|
|
161
|
+
const lastEpochTimestamp = state.tracker.lastWriteEpoch * epochDuration;
|
|
162
|
+
const sevenDaysAgo = state.resolvedAtTimestamp - 604800n;
|
|
163
|
+
return lastEpochTimestamp > sevenDaysAgo || state.tracker.lastWriteEpoch === 0n;
|
|
164
|
+
})(),
|
|
165
|
+
severity: "info",
|
|
166
|
+
detail: "A vault with no recent activity may indicate a broken or stopped agent.",
|
|
167
|
+
remediation: "Check agent health and ensure it's connected and running.",
|
|
168
|
+
},
|
|
169
|
+
// ---- Step 8: 4 new checks (14-17) ----
|
|
170
|
+
{
|
|
171
|
+
id: "timelock-meaningful",
|
|
172
|
+
label: "Timelock is at least 1 hour",
|
|
173
|
+
passed: policy.timelockDuration === 0n || policy.timelockDuration >= 3600n,
|
|
174
|
+
severity: "warning",
|
|
175
|
+
detail: "A timelock under 1 hour may not provide enough reaction time if the owner key is compromised. " +
|
|
176
|
+
"A zero timelock (disabled) is caught by the 'timelock-enabled' check above.",
|
|
177
|
+
remediation: policy.timelockDuration > 0n && policy.timelockDuration < 3600n
|
|
178
|
+
? `Current timelock is ${Number(policy.timelockDuration)}s. Increase to at least 3600s (1 hour).`
|
|
179
|
+
: null,
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
id: "fee-rate-reasonable",
|
|
183
|
+
label: "Developer fee rate is at or below maximum",
|
|
184
|
+
passed: (policy.developerFeeRate ?? 0) <= MAX_DEVELOPER_FEE_RATE,
|
|
185
|
+
severity: "info",
|
|
186
|
+
detail: "Developer fee rate must be at or below 500 (5 BPS = 0.05%). " +
|
|
187
|
+
"A zero rate is valid (no developer revenue). A rate at the maximum is valid but should be intentional.",
|
|
188
|
+
remediation: (policy.developerFeeRate ?? 0) > MAX_DEVELOPER_FEE_RATE
|
|
189
|
+
? `Fee rate ${policy.developerFeeRate} exceeds maximum ${MAX_DEVELOPER_FEE_RATE}. This should not be possible on-chain.`
|
|
190
|
+
: (policy.developerFeeRate ?? 0) === MAX_DEVELOPER_FEE_RATE
|
|
191
|
+
? "Developer fee rate is at the maximum (5 BPS). Verify this is intentional."
|
|
192
|
+
: null,
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
id: "constraints-protocol-aligned",
|
|
196
|
+
label: "Constraint programs are in allowlist",
|
|
197
|
+
passed: (() => {
|
|
198
|
+
if (!constraints || !constraints.entries || policy.protocolMode !== PROTOCOL_MODE_ALLOWLIST)
|
|
199
|
+
return true;
|
|
200
|
+
if (!policy.protocols)
|
|
201
|
+
return true;
|
|
202
|
+
const allowedSet = new Set(policy.protocols.map(String));
|
|
203
|
+
for (const entry of constraints.entries) {
|
|
204
|
+
if (entry.programId && !allowedSet.has(String(entry.programId)))
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
return true;
|
|
208
|
+
})(),
|
|
209
|
+
severity: "warning",
|
|
210
|
+
detail: "Instruction constraints reference program addresses not in the protocol allowlist. " +
|
|
211
|
+
"These constraints will never trigger because the protocol is already blocked.",
|
|
212
|
+
remediation: "Update the allowlist to include constrained programs, or remove stale constraints.",
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
id: "no-permission-concentration",
|
|
216
|
+
label: "No agent has more than 15 permissions",
|
|
217
|
+
passed: !vault.agents.some((a) => countBits(a.permissions) > 15),
|
|
218
|
+
severity: "warning",
|
|
219
|
+
detail: "An agent with more than 15 of 21 permission bits is effectively unrestricted. " +
|
|
220
|
+
"Use least-privilege — grant only the actions the agent's strategy requires.",
|
|
221
|
+
remediation: "Review agent permissions and restrict to only necessary action types.",
|
|
222
|
+
},
|
|
223
|
+
// ---- Step 18: 2 more checks (18-19) — council security findings ----
|
|
224
|
+
{
|
|
225
|
+
id: "constraints-current",
|
|
226
|
+
label: "Constraint discriminators are current",
|
|
227
|
+
passed: !constraints || !constraints.entries || constraints.entries.length === 0 || (() => {
|
|
228
|
+
// Verify constraint entries reference known program discriminators.
|
|
229
|
+
// Stale constraints silently stop matching after protocol upgrades.
|
|
230
|
+
for (const entry of constraints.entries) {
|
|
231
|
+
if (entry.dataConstraints && entry.dataConstraints.length === 0 &&
|
|
232
|
+
entry.accountConstraints && entry.accountConstraints.length === 0) {
|
|
233
|
+
return false; // Empty entry = likely stale or misconfigured
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return true;
|
|
237
|
+
})(),
|
|
238
|
+
severity: "warning",
|
|
239
|
+
detail: "Stale or empty constraint entries may not match current protocol instruction formats. " +
|
|
240
|
+
"Review constraints when protocols upgrade.",
|
|
241
|
+
remediation: "Review and update InstructionConstraints entries. Remove empty entries.",
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
id: "constraints-cover-allowlist",
|
|
245
|
+
label: "All allowlisted protocols have constraint entries",
|
|
246
|
+
passed: !constraints || !constraints.entries || policy.protocolMode !== PROTOCOL_MODE_ALLOWLIST ||
|
|
247
|
+
!policy.protocols ||
|
|
248
|
+
policy.protocols.every((p) => constraints.entries.some((e) => String(e.programId) === String(p))),
|
|
249
|
+
severity: "info",
|
|
250
|
+
detail: "Protocols on the allowlist without constraint entries rely solely on spending caps for protection.",
|
|
251
|
+
remediation: "Add InstructionConstraints entries for all allowlisted protocols.",
|
|
252
|
+
},
|
|
253
|
+
// ---- Step 20: 1 more check (20) — council security finding ----
|
|
254
|
+
{
|
|
255
|
+
id: "mode-all-unguarded",
|
|
256
|
+
label: "Protocol mode ALL has constraint protection",
|
|
257
|
+
passed: policy.protocolMode !== 0 /* PROTOCOL_MODE_ALL */ ||
|
|
258
|
+
(constraints !== null && constraints.strictMode === true),
|
|
259
|
+
severity: "critical",
|
|
260
|
+
detail: "Protocol mode ALL allows agents to call any program. Without strict-mode constraints, " +
|
|
261
|
+
"agents have unrestricted program access beyond spending caps and SPL transfer blocking.",
|
|
262
|
+
remediation: "Switch to Allowlist mode, or enable InstructionConstraints with strict_mode=true.",
|
|
263
|
+
},
|
|
264
|
+
];
|
|
265
|
+
const passCount = checks.filter((c) => c.passed).length;
|
|
266
|
+
const failCount = checks.filter((c) => !c.passed).length;
|
|
267
|
+
const criticalFailures = checks.filter((c) => c.severity === "critical" && !c.passed);
|
|
268
|
+
return { checks, passCount, failCount, criticalFailures };
|
|
269
|
+
}
|
|
270
|
+
// ─── evaluateAlertConditions ─────────────────────────────────────────────────
|
|
271
|
+
/**
|
|
272
|
+
* Evaluate alert conditions based on current vault state.
|
|
273
|
+
* Returns active alerts sorted by severity (critical first).
|
|
274
|
+
*/
|
|
275
|
+
export function evaluateAlertConditions(state, vaultAddress, previousState) {
|
|
276
|
+
const alerts = [];
|
|
277
|
+
const { vault, globalBudget } = state;
|
|
278
|
+
// VaultStatus is a numeric enum (Active=0, Frozen=1, Closed=2)
|
|
279
|
+
const statusNum = vault.status;
|
|
280
|
+
const status = statusNum === VaultStatus.Active
|
|
281
|
+
? "Active"
|
|
282
|
+
: statusNum === VaultStatus.Frozen
|
|
283
|
+
? "Frozen"
|
|
284
|
+
: "Closed";
|
|
285
|
+
// Cap approaching
|
|
286
|
+
if (globalBudget.cap > 0n) {
|
|
287
|
+
const util = Number((globalBudget.spent24h * 100n) / globalBudget.cap);
|
|
288
|
+
if (util >= 95) {
|
|
289
|
+
alerts.push({
|
|
290
|
+
id: `cap-critical-${vaultAddress}`,
|
|
291
|
+
severity: "critical",
|
|
292
|
+
title: "Daily budget nearly exhausted",
|
|
293
|
+
description: `${util}% of daily budget used — ${formatUsd(globalBudget.remaining, 2)} remaining.`,
|
|
294
|
+
vaultAddress,
|
|
295
|
+
agentAddress: null,
|
|
296
|
+
actionHref: `/dashboard/vault/${vaultAddress}?tab=policy`,
|
|
297
|
+
actionLabel: "Adjust budget",
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
else if (util >= 80) {
|
|
301
|
+
alerts.push({
|
|
302
|
+
id: `cap-warning-${vaultAddress}`,
|
|
303
|
+
severity: "warning",
|
|
304
|
+
title: `Daily budget ${util}% used`,
|
|
305
|
+
description: `${formatUsd(globalBudget.remaining, 2)} remaining of ${formatUsd(globalBudget.cap, 2)} daily budget.`,
|
|
306
|
+
vaultAddress,
|
|
307
|
+
agentAddress: null,
|
|
308
|
+
actionHref: `/dashboard/vault/${vaultAddress}?tab=spending`,
|
|
309
|
+
actionLabel: "Review spending",
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
// Vault frozen
|
|
314
|
+
if (status === "Frozen") {
|
|
315
|
+
alerts.push({
|
|
316
|
+
id: `frozen-${vaultAddress}`,
|
|
317
|
+
severity: "critical",
|
|
318
|
+
title: "Vault is paused",
|
|
319
|
+
description: "All agent activity is stopped. Reactivate when ready.",
|
|
320
|
+
vaultAddress,
|
|
321
|
+
agentAddress: null,
|
|
322
|
+
actionHref: `/dashboard/vault/${vaultAddress}?tab=security`,
|
|
323
|
+
actionLabel: "Review security",
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
// Agent paused
|
|
327
|
+
for (const agent of vault.agents) {
|
|
328
|
+
if (agent.paused) {
|
|
329
|
+
alerts.push({
|
|
330
|
+
id: `agent-paused-${agent.pubkey}`,
|
|
331
|
+
severity: "info",
|
|
332
|
+
title: `Agent ${formatAddress(agent.pubkey)} is paused`,
|
|
333
|
+
description: "This agent cannot execute any actions until resumed.",
|
|
334
|
+
vaultAddress,
|
|
335
|
+
agentAddress: agent.pubkey,
|
|
336
|
+
actionHref: `/dashboard/vault/${vaultAddress}?tab=agents`,
|
|
337
|
+
actionLabel: "Manage agents",
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
// Per-agent cap approaching
|
|
342
|
+
for (const [agentAddr, budget] of state.allAgentBudgets) {
|
|
343
|
+
if (budget.cap > 0n) {
|
|
344
|
+
const util = Number((budget.spent24h * 100n) / budget.cap);
|
|
345
|
+
if (util >= 80) {
|
|
346
|
+
alerts.push({
|
|
347
|
+
id: `agent-cap-${agentAddr}`,
|
|
348
|
+
severity: util >= 95 ? "critical" : "warning",
|
|
349
|
+
title: `Agent ${formatAddress(agentAddr)} at ${util}% of spending limit`,
|
|
350
|
+
description: `${formatUsd(budget.remaining, 2)} remaining of ${formatUsd(budget.cap, 2)} daily limit.`,
|
|
351
|
+
vaultAddress,
|
|
352
|
+
agentAddress: agentAddr,
|
|
353
|
+
actionHref: `/dashboard/vault/${vaultAddress}/agent/${agentAddr}`,
|
|
354
|
+
actionLabel: "View agent",
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
// No agents
|
|
360
|
+
if (vault.agents.length === 0 && status === "Active") {
|
|
361
|
+
alerts.push({
|
|
362
|
+
id: `no-agents-${vaultAddress}`,
|
|
363
|
+
severity: "warning",
|
|
364
|
+
title: "No agents registered",
|
|
365
|
+
description: "This vault has no agents and cannot execute any DeFi operations.",
|
|
366
|
+
vaultAddress,
|
|
367
|
+
agentAddress: null,
|
|
368
|
+
actionHref: `/dashboard/vault/${vaultAddress}?tab=agents`,
|
|
369
|
+
actionLabel: "Register agent",
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
// All agents paused
|
|
373
|
+
if (vault.agents.length > 0 && vault.agents.every((a) => a.paused)) {
|
|
374
|
+
alerts.push({
|
|
375
|
+
id: `all-paused-${vaultAddress}`,
|
|
376
|
+
severity: "warning",
|
|
377
|
+
title: "All agents are paused",
|
|
378
|
+
description: "No agent can execute actions. Unpause at least one to resume operations.",
|
|
379
|
+
vaultAddress,
|
|
380
|
+
agentAddress: null,
|
|
381
|
+
actionHref: `/dashboard/vault/${vaultAddress}?tab=agents`,
|
|
382
|
+
actionLabel: "Manage agents",
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
// High velocity + drain detection — delegate to spending-analytics for rate math
|
|
386
|
+
if (state.tracker && globalBudget.cap > 0n) {
|
|
387
|
+
const velocity = getSpendingVelocity(state.tracker, state.resolvedAtTimestamp, globalBudget);
|
|
388
|
+
// High velocity alert: current rate > 2x average (stricter than spending-analytics 1.5x)
|
|
389
|
+
if (velocity.averageRate > 0n && velocity.currentRate > velocity.averageRate * 2n) {
|
|
390
|
+
const multiplier = Number(velocity.currentRate / velocity.averageRate);
|
|
391
|
+
alerts.push({
|
|
392
|
+
id: `high-velocity-${vaultAddress}`,
|
|
393
|
+
severity: "warning",
|
|
394
|
+
title: "Unusual spending velocity detected",
|
|
395
|
+
description: `Current spend rate is ${multiplier}x the 24h average.`,
|
|
396
|
+
vaultAddress,
|
|
397
|
+
agentAddress: null,
|
|
398
|
+
actionHref: `/dashboard/vault/${vaultAddress}?tab=spending`,
|
|
399
|
+
actionLabel: "Review spending",
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
// Drain detection: current hourly rate > 50% of daily cap
|
|
403
|
+
if (velocity.currentRate > 0n && velocity.currentRate > globalBudget.cap / 2n) {
|
|
404
|
+
alerts.push({
|
|
405
|
+
id: `drain-detected-${vaultAddress}`,
|
|
406
|
+
severity: "critical",
|
|
407
|
+
title: "Potential drain detected",
|
|
408
|
+
description: "Spending rate would consume over 50% of daily budget in one hour. Consider freezing the vault.",
|
|
409
|
+
vaultAddress,
|
|
410
|
+
agentAddress: null,
|
|
411
|
+
actionHref: `/dashboard/vault/${vaultAddress}?tab=security`,
|
|
412
|
+
actionLabel: "Freeze vault",
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
// Sort: critical first
|
|
417
|
+
const severityOrder = { critical: 0, warning: 1, info: 2 };
|
|
418
|
+
alerts.sort((a, b) => severityOrder[a.severity] - severityOrder[b.severity]);
|
|
419
|
+
return alerts;
|
|
420
|
+
}
|
|
421
|
+
// ─── getAuditTrail ───────────────────────────────────────────────────────────
|
|
422
|
+
const AUDIT_EVENTS = {
|
|
423
|
+
PolicyUpdated: "policy_change",
|
|
424
|
+
PolicyChangeQueued: "policy_change",
|
|
425
|
+
PolicyChangeApplied: "policy_change",
|
|
426
|
+
PolicyChangeCancelled: "policy_change",
|
|
427
|
+
AgentRegistered: "agent_change",
|
|
428
|
+
AgentRevoked: "agent_change",
|
|
429
|
+
AgentPermissionsUpdated: "agent_change",
|
|
430
|
+
AgentPausedEvent: "emergency",
|
|
431
|
+
AgentUnpausedEvent: "agent_change",
|
|
432
|
+
VaultFrozen: "emergency",
|
|
433
|
+
VaultReactivated: "emergency",
|
|
434
|
+
VaultClosed: "emergency",
|
|
435
|
+
VaultCreated: "emergency",
|
|
436
|
+
EscrowCreated: "escrow",
|
|
437
|
+
EscrowSettled: "escrow",
|
|
438
|
+
EscrowRefunded: "escrow",
|
|
439
|
+
InstructionConstraintsCreated: "constraint_change",
|
|
440
|
+
InstructionConstraintsUpdated: "constraint_change",
|
|
441
|
+
InstructionConstraintsClosed: "constraint_change",
|
|
442
|
+
ConstraintsChangeQueued: "constraint_change",
|
|
443
|
+
ConstraintsChangeApplied: "constraint_change",
|
|
444
|
+
ConstraintsChangeCancelled: "constraint_change",
|
|
445
|
+
};
|
|
446
|
+
/**
|
|
447
|
+
* Filter decoded events into a compliance-focused audit trail.
|
|
448
|
+
* Shows only security-relevant events (policy, agent, emergency, escrow, constraints).
|
|
449
|
+
*
|
|
450
|
+
* Supports optional filtering by category, timestamp, and actor.
|
|
451
|
+
*
|
|
452
|
+
* Note on event field availability (verified against events.rs):
|
|
453
|
+
* - 10 of 22 events have no `timestamp` field — fallback through `executes_at`, `applied_at`, then 0.
|
|
454
|
+
* - 7+ events have neither `owner` nor `agent` — fallback through `settled_by`, `refunded_by`, `vault`.
|
|
455
|
+
* - `txSignature` requires enrichment from transaction envelope (DecodedSigilEvent has no such field).
|
|
456
|
+
*/
|
|
457
|
+
export function getAuditTrail(events, options) {
|
|
458
|
+
const trail = [];
|
|
459
|
+
for (const e of events) {
|
|
460
|
+
const category = AUDIT_EVENTS[e.name];
|
|
461
|
+
if (!category)
|
|
462
|
+
continue;
|
|
463
|
+
if (options?.categories && !options.categories.includes(category))
|
|
464
|
+
continue;
|
|
465
|
+
const f = e.fields ?? {};
|
|
466
|
+
// Timestamp fallback: timestamp → executes_at → applied_at → 0
|
|
467
|
+
const timestamp = Number(f.timestamp ?? f.executes_at ?? f.applied_at ?? 0n);
|
|
468
|
+
if (options?.since && timestamp > 0 && timestamp < options.since)
|
|
469
|
+
continue;
|
|
470
|
+
// Actor fallback: owner → agent → settled_by → refunded_by → vault → "unknown"
|
|
471
|
+
const actor = (f.owner ?? f.agent ?? f.settled_by ?? f.refunded_by ?? f.vault ?? "unknown");
|
|
472
|
+
if (options?.actor && actor !== options.actor)
|
|
473
|
+
continue;
|
|
474
|
+
trail.push({
|
|
475
|
+
timestamp,
|
|
476
|
+
txSignature: e.txSignature ?? "",
|
|
477
|
+
category,
|
|
478
|
+
action: e.name,
|
|
479
|
+
actor,
|
|
480
|
+
details: f,
|
|
481
|
+
description: describeEvent(e),
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
return trail;
|
|
485
|
+
}
|
|
486
|
+
/** Summarize an audit trail into per-category counts. */
|
|
487
|
+
export function getAuditTrailSummary(trail) {
|
|
488
|
+
const byCategory = {
|
|
489
|
+
policy_change: 0,
|
|
490
|
+
agent_change: 0,
|
|
491
|
+
emergency: 0,
|
|
492
|
+
escrow: 0,
|
|
493
|
+
constraint_change: 0,
|
|
494
|
+
};
|
|
495
|
+
const actors = new Set();
|
|
496
|
+
let latest = 0;
|
|
497
|
+
for (const entry of trail) {
|
|
498
|
+
byCategory[entry.category]++;
|
|
499
|
+
actors.add(entry.actor);
|
|
500
|
+
if (entry.timestamp > latest)
|
|
501
|
+
latest = entry.timestamp;
|
|
502
|
+
}
|
|
503
|
+
return {
|
|
504
|
+
totalEntries: trail.length,
|
|
505
|
+
byCategory: byCategory,
|
|
506
|
+
latestTimestamp: latest,
|
|
507
|
+
uniqueActors: Array.from(actors),
|
|
508
|
+
};
|
|
509
|
+
}
|
|
510
|
+
//# sourceMappingURL=security-analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-analytics.js","sourceRoot":"","sources":["../src/security-analytics.ts"],"names":[],"mappings":"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"}
|