@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,660 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StateResolver — L0 foundation for resolving vault state with pre-computed budgets.
|
|
3
|
+
*
|
|
4
|
+
* One batched RPC call resolves all vault accounts (AgentVault, PolicyConfig,
|
|
5
|
+
* SpendTracker, AgentSpendOverlay, InstructionConstraints) and computes
|
|
6
|
+
* boundary-corrected rolling 24h budgets that exactly mirror the on-chain math.
|
|
7
|
+
*
|
|
8
|
+
* Pure functions (getRolling24hUsd, getAgentRolling24hUsd, getProtocolSpend)
|
|
9
|
+
* are exported independently for unit testing and reuse.
|
|
10
|
+
*/
|
|
11
|
+
import { fetchEncodedAccounts, getAddressDecoder, getAddressEncoder, getU64Decoder, } from "@solana/kit";
|
|
12
|
+
import { decodeAgentSpendOverlay, } from "./generated/accounts/agentSpendOverlay.js";
|
|
13
|
+
import { decodeAgentVault, } from "./generated/accounts/agentVault.js";
|
|
14
|
+
import { decodeInstructionConstraints, } from "./generated/accounts/instructionConstraints.js";
|
|
15
|
+
import { decodePolicyConfig, } from "./generated/accounts/policyConfig.js";
|
|
16
|
+
import { decodeSpendTracker, } from "./generated/accounts/spendTracker.js";
|
|
17
|
+
import { getEscrowDepositDecoder, } from "./generated/accounts/escrowDeposit.js";
|
|
18
|
+
import { getSessionAuthorityDecoder, } from "./generated/accounts/sessionAuthority.js";
|
|
19
|
+
import { fetchMaybePendingPolicyUpdate, } from "./generated/accounts/pendingPolicyUpdate.js";
|
|
20
|
+
import { fetchMaybePendingConstraintsUpdate, } from "./generated/accounts/pendingConstraintsUpdate.js";
|
|
21
|
+
import { getVaultPDA, getPolicyPDA, getTrackerPDA, getAgentOverlayPDA, getConstraintsPDA, getPendingPolicyPDA, getPendingConstraintsPDA, } from "./resolve-accounts.js";
|
|
22
|
+
import { EPOCH_DURATION, NUM_EPOCHS, OVERLAY_EPOCH_DURATION, OVERLAY_NUM_EPOCHS, SIGIL_PROGRAM_ADDRESS, ROLLING_WINDOW_SECONDS, U64_MAX, USDC_MINT_DEVNET, USDC_MINT_MAINNET, USDT_MINT_DEVNET, USDT_MINT_MAINNET, } from "./types.js";
|
|
23
|
+
import { deriveAta } from "./x402/transfer-builder.js";
|
|
24
|
+
import { formatUsd } from "./formatting.js";
|
|
25
|
+
// ─── Internal Helpers ────────────────────────────────────────────────────────
|
|
26
|
+
const addressEncoder = getAddressEncoder();
|
|
27
|
+
const addressDecoder = getAddressDecoder();
|
|
28
|
+
function bytesMatchAddress(bytes, addr) {
|
|
29
|
+
const encoded = addressEncoder.encode(addr);
|
|
30
|
+
if (bytes.length !== encoded.length)
|
|
31
|
+
return false;
|
|
32
|
+
for (let i = 0; i < 32; i++) {
|
|
33
|
+
if (bytes[i] !== encoded[i])
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
// ─── Pure Functions ──────────────────────────────────────────────────────────
|
|
39
|
+
/**
|
|
40
|
+
* Convert a 32-byte ReadonlyUint8Array to a Kit Address.
|
|
41
|
+
* Uses the same Codama address codec as resolve-accounts.ts.
|
|
42
|
+
*/
|
|
43
|
+
export function bytesToAddress(bytes) {
|
|
44
|
+
return addressDecoder.decode(bytes);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Mirror of SpendTracker::get_rolling_24h_usd() from tracker.rs:103-151.
|
|
48
|
+
*
|
|
49
|
+
* Iterates all 144 buckets, summing those within the 24h window.
|
|
50
|
+
* Boundary bucket is proportionally scaled. BigInt division truncates
|
|
51
|
+
* like Rust integer division.
|
|
52
|
+
*/
|
|
53
|
+
export function getRolling24hUsd(tracker, nowUnix) {
|
|
54
|
+
if (nowUnix <= 0n)
|
|
55
|
+
return 0n;
|
|
56
|
+
const epochDuration = BigInt(EPOCH_DURATION);
|
|
57
|
+
const numEpochs = BigInt(NUM_EPOCHS);
|
|
58
|
+
const currentEpoch = nowUnix / epochDuration;
|
|
59
|
+
// Early exit: if no writes in 144+ epochs, all data is expired
|
|
60
|
+
if (currentEpoch - tracker.lastWriteEpoch > numEpochs)
|
|
61
|
+
return 0n;
|
|
62
|
+
// G-2: Saturating subtraction — avoid negative windowStart when nowUnix < 86400
|
|
63
|
+
const windowStart = nowUnix > BigInt(ROLLING_WINDOW_SECONDS)
|
|
64
|
+
? nowUnix - BigInt(ROLLING_WINDOW_SECONDS)
|
|
65
|
+
: 0n;
|
|
66
|
+
let total = 0n;
|
|
67
|
+
for (const bucket of tracker.buckets) {
|
|
68
|
+
if (bucket.usdAmount === 0n)
|
|
69
|
+
continue;
|
|
70
|
+
const bucketStart = bucket.epochId * epochDuration;
|
|
71
|
+
const bucketEnd = bucketStart + epochDuration;
|
|
72
|
+
// Skip if entirely outside window
|
|
73
|
+
if (bucketEnd <= windowStart || bucket.epochId > currentEpoch)
|
|
74
|
+
continue;
|
|
75
|
+
if (bucketStart >= windowStart) {
|
|
76
|
+
// Fully inside window
|
|
77
|
+
total += bucket.usdAmount;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
// Boundary bucket — proportional scaling
|
|
81
|
+
const overlap = bucketEnd - windowStart;
|
|
82
|
+
total += (bucket.usdAmount * overlap) / epochDuration;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// G-1: Clamp to u64::MAX to match on-chain Rust math
|
|
86
|
+
return total > U64_MAX ? U64_MAX : total;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Mirror of AgentSpendOverlay::get_agent_rolling_24h_usd() from
|
|
90
|
+
* agent_spend_overlay.rs:136-199.
|
|
91
|
+
*
|
|
92
|
+
* Iterates backward from lastWriteEpoch, summing contributions within
|
|
93
|
+
* the 24h window. Uses proportional scaling for boundary buckets.
|
|
94
|
+
*/
|
|
95
|
+
export function getAgentRolling24hUsd(entry, nowUnix) {
|
|
96
|
+
if (nowUnix <= 0n)
|
|
97
|
+
return 0n;
|
|
98
|
+
const epochDuration = BigInt(OVERLAY_EPOCH_DURATION);
|
|
99
|
+
const numEpochs = BigInt(OVERLAY_NUM_EPOCHS);
|
|
100
|
+
const currentEpoch = nowUnix / epochDuration;
|
|
101
|
+
// Early exit: if last write was more than 24 epochs ago, all expired
|
|
102
|
+
if (currentEpoch - entry.lastWriteEpoch > numEpochs)
|
|
103
|
+
return 0n;
|
|
104
|
+
// G-2: Saturating subtraction — avoid negative windowStart when nowUnix < 86400
|
|
105
|
+
const windowStart = nowUnix > BigInt(ROLLING_WINDOW_SECONDS)
|
|
106
|
+
? nowUnix - BigInt(ROLLING_WINDOW_SECONDS)
|
|
107
|
+
: 0n;
|
|
108
|
+
let total = 0n;
|
|
109
|
+
// Iterate backward from lastWriteEpoch (most recent data)
|
|
110
|
+
for (let k = 0; k < OVERLAY_NUM_EPOCHS; k++) {
|
|
111
|
+
const epochForK = entry.lastWriteEpoch - BigInt(k);
|
|
112
|
+
if (epochForK < 0n)
|
|
113
|
+
break;
|
|
114
|
+
const bucketStart = epochForK * epochDuration;
|
|
115
|
+
const bucketEnd = bucketStart + epochDuration;
|
|
116
|
+
// If this bucket ends before the window start, we're done (going backward)
|
|
117
|
+
if (bucketEnd <= windowStart)
|
|
118
|
+
break;
|
|
119
|
+
// If this bucket is in the future, skip it
|
|
120
|
+
if (epochForK > currentEpoch)
|
|
121
|
+
continue;
|
|
122
|
+
const bucketIdx = Number(epochForK % numEpochs);
|
|
123
|
+
const contribution = entry.contributions[bucketIdx];
|
|
124
|
+
if (contribution === 0n)
|
|
125
|
+
continue;
|
|
126
|
+
if (bucketStart >= windowStart) {
|
|
127
|
+
// Fully within window
|
|
128
|
+
total += contribution;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
// Boundary bucket — proportional scaling
|
|
132
|
+
const overlap = bucketEnd - windowStart;
|
|
133
|
+
total += (contribution * overlap) / epochDuration;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// G-1: Clamp to u64::MAX to match on-chain Rust math
|
|
137
|
+
return total > U64_MAX ? U64_MAX : total;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Mirror of SpendTracker::get_protocol_spend() from tracker.rs:155-172.
|
|
141
|
+
*
|
|
142
|
+
* Simple 24h window check (NOT rolling boundary-corrected).
|
|
143
|
+
* Returns the windowSpend if the counter exists and hasn't expired.
|
|
144
|
+
*/
|
|
145
|
+
export function getProtocolSpend(tracker, protocolAddress, nowUnix) {
|
|
146
|
+
if (nowUnix <= 0n)
|
|
147
|
+
return 0n;
|
|
148
|
+
const epochDuration = BigInt(EPOCH_DURATION);
|
|
149
|
+
const numEpochs = BigInt(NUM_EPOCHS);
|
|
150
|
+
const currentEpoch = nowUnix / epochDuration;
|
|
151
|
+
for (const counter of tracker.protocolCounters) {
|
|
152
|
+
if (bytesMatchAddress(counter.protocol, protocolAddress)) {
|
|
153
|
+
// Check if window is still valid (< 144 epochs = 24h)
|
|
154
|
+
if (currentEpoch - counter.windowStart < numEpochs) {
|
|
155
|
+
return counter.windowSpend;
|
|
156
|
+
}
|
|
157
|
+
return 0n; // Window expired
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return 0n; // No counter found
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Convert SpendTracker epoch buckets into a chronologically sorted time-series
|
|
164
|
+
* for dashboard charts (Recharts area charts, tooltips).
|
|
165
|
+
*
|
|
166
|
+
* Mirrors getRolling24hUsd() iteration but outputs individual data points
|
|
167
|
+
* instead of a sum. Zero-amount epochs are skipped (sparse-friendly).
|
|
168
|
+
* No proportional boundary scaling — raw epoch amounts for chart display.
|
|
169
|
+
*
|
|
170
|
+
* @param tracker - SpendTracker account data (null for vaults with no tracker PDA)
|
|
171
|
+
* @param nowUnix - Current unix timestamp in seconds
|
|
172
|
+
* @returns Chronologically sorted SpendingEpoch[] (ascending by timestamp)
|
|
173
|
+
*/
|
|
174
|
+
export function getSpendingHistory(tracker, nowUnix) {
|
|
175
|
+
if (!tracker || nowUnix <= 0n)
|
|
176
|
+
return [];
|
|
177
|
+
const epochDuration = BigInt(EPOCH_DURATION);
|
|
178
|
+
const numEpochs = BigInt(NUM_EPOCHS);
|
|
179
|
+
const currentEpoch = nowUnix / epochDuration;
|
|
180
|
+
// Early exit: if no writes in 144+ epochs, all data is expired
|
|
181
|
+
if (currentEpoch - tracker.lastWriteEpoch > numEpochs)
|
|
182
|
+
return [];
|
|
183
|
+
const windowStartEpoch = currentEpoch - numEpochs;
|
|
184
|
+
const result = [];
|
|
185
|
+
for (const bucket of tracker.buckets) {
|
|
186
|
+
if (bucket.usdAmount === 0n)
|
|
187
|
+
continue;
|
|
188
|
+
if (bucket.epochId < windowStartEpoch)
|
|
189
|
+
continue;
|
|
190
|
+
if (bucket.epochId > currentEpoch)
|
|
191
|
+
continue;
|
|
192
|
+
result.push({
|
|
193
|
+
epochId: Number(bucket.epochId),
|
|
194
|
+
timestamp: Number(bucket.epochId * epochDuration),
|
|
195
|
+
usdAmount: bucket.usdAmount,
|
|
196
|
+
usdAmountFormatted: formatUsd(bucket.usdAmount),
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
// Sort chronologically (circular buffer order ≠ time order)
|
|
200
|
+
result.sort((a, b) => a.timestamp - b.timestamp);
|
|
201
|
+
return result;
|
|
202
|
+
}
|
|
203
|
+
// ─── resolveVaultState ───────────────────────────────────────────────────────
|
|
204
|
+
/**
|
|
205
|
+
* Resolve complete vault state from a single batched RPC call.
|
|
206
|
+
*
|
|
207
|
+
* Derives 4 PDAs + 2 stablecoin ATAs, fetches all 7 accounts in one
|
|
208
|
+
* getMultipleAccounts, decodes, and pre-computes global/agent/protocol
|
|
209
|
+
* budgets with boundary-corrected rolling 24h math.
|
|
210
|
+
*
|
|
211
|
+
* @param network - Optional network for stablecoin mint resolution (defaults to "mainnet-beta")
|
|
212
|
+
*/
|
|
213
|
+
export async function resolveVaultState(rpc, vault, agent, nowUnix, network) {
|
|
214
|
+
const net = network ?? "mainnet-beta";
|
|
215
|
+
const usdcMint = net === "devnet" ? USDC_MINT_DEVNET : USDC_MINT_MAINNET;
|
|
216
|
+
const usdtMint = net === "devnet" ? USDT_MINT_DEVNET : USDT_MINT_MAINNET;
|
|
217
|
+
// 1. Derive PDAs + stablecoin ATAs in parallel
|
|
218
|
+
const [[policyPda], [trackerPda], [overlayPda], [constraintsPda], vaultUsdcAta, vaultUsdtAta,] = await Promise.all([
|
|
219
|
+
getPolicyPDA(vault),
|
|
220
|
+
getTrackerPDA(vault),
|
|
221
|
+
getAgentOverlayPDA(vault, 0),
|
|
222
|
+
getConstraintsPDA(vault),
|
|
223
|
+
deriveAta(vault, usdcMint),
|
|
224
|
+
deriveAta(vault, usdtMint),
|
|
225
|
+
]);
|
|
226
|
+
// 2. Single batch fetch (one RPC round-trip — 7 accounts)
|
|
227
|
+
const encoded = await fetchEncodedAccounts(rpc, [
|
|
228
|
+
vault,
|
|
229
|
+
policyPda,
|
|
230
|
+
trackerPda,
|
|
231
|
+
overlayPda,
|
|
232
|
+
constraintsPda,
|
|
233
|
+
vaultUsdcAta,
|
|
234
|
+
vaultUsdtAta,
|
|
235
|
+
]);
|
|
236
|
+
// 3. Decode — vault and policy are required, others are optional
|
|
237
|
+
const decodedVault = decodeAgentVault(encoded[0]);
|
|
238
|
+
if (!decodedVault.exists) {
|
|
239
|
+
throw new Error(`Vault account ${vault} does not exist`);
|
|
240
|
+
}
|
|
241
|
+
const decodedPolicy = decodePolicyConfig(encoded[1]);
|
|
242
|
+
if (!decodedPolicy.exists) {
|
|
243
|
+
throw new Error(`PolicyConfig for vault ${vault} does not exist`);
|
|
244
|
+
}
|
|
245
|
+
const decodedTracker = decodeSpendTracker(encoded[2]);
|
|
246
|
+
const tracker = decodedTracker.exists
|
|
247
|
+
? decodedTracker.data
|
|
248
|
+
: null;
|
|
249
|
+
const decodedOverlay = decodeAgentSpendOverlay(encoded[3]);
|
|
250
|
+
const overlay = decodedOverlay.exists
|
|
251
|
+
? decodedOverlay.data
|
|
252
|
+
: null;
|
|
253
|
+
const decodedConstraints = decodeInstructionConstraints(encoded[4]);
|
|
254
|
+
const constraints = decodedConstraints.exists
|
|
255
|
+
? decodedConstraints.data
|
|
256
|
+
: null;
|
|
257
|
+
// 4. Timestamp
|
|
258
|
+
const timestamp = nowUnix ?? BigInt(Math.floor(Date.now() / 1000));
|
|
259
|
+
// 5. Global budget
|
|
260
|
+
const globalSpent = tracker ? getRolling24hUsd(tracker, timestamp) : 0n;
|
|
261
|
+
const globalCap = decodedPolicy.data.dailySpendingCapUsd;
|
|
262
|
+
const globalRemaining = globalCap > globalSpent ? globalCap - globalSpent : 0n;
|
|
263
|
+
const globalBudget = {
|
|
264
|
+
spent24h: globalSpent,
|
|
265
|
+
cap: globalCap,
|
|
266
|
+
remaining: globalRemaining,
|
|
267
|
+
};
|
|
268
|
+
// 6. Agent budgets — single pass builds both agentBudget and allAgentBudgets
|
|
269
|
+
let agentBudget = null;
|
|
270
|
+
const allAgentBudgets = new Map();
|
|
271
|
+
for (const entry of decodedVault.data.agents) {
|
|
272
|
+
if (entry.spendingLimitUsd <= 0n)
|
|
273
|
+
continue;
|
|
274
|
+
const entryAddr = entry.pubkey;
|
|
275
|
+
const cap = entry.spendingLimitUsd;
|
|
276
|
+
let budget;
|
|
277
|
+
if (overlay) {
|
|
278
|
+
const overlayEntry = overlay.entries.find((e) => bytesMatchAddress(e.agent, entryAddr));
|
|
279
|
+
if (overlayEntry) {
|
|
280
|
+
const spent = getAgentRolling24hUsd(overlayEntry, timestamp);
|
|
281
|
+
budget = { spent24h: spent, cap, remaining: cap > spent ? cap - spent : 0n };
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
budget = { spent24h: 0n, cap, remaining: cap };
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
budget = { spent24h: 0n, cap, remaining: cap };
|
|
289
|
+
}
|
|
290
|
+
allAgentBudgets.set(entryAddr, budget);
|
|
291
|
+
// Kit Address is a branded string — === is correct (always normalized base58)
|
|
292
|
+
if (entryAddr === agent) {
|
|
293
|
+
agentBudget = budget;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
// 7. Protocol budgets
|
|
297
|
+
const protocolBudgets = [];
|
|
298
|
+
if (decodedPolicy.data.hasProtocolCaps && tracker) {
|
|
299
|
+
const protocols = decodedPolicy.data.protocols;
|
|
300
|
+
const caps = decodedPolicy.data.protocolCaps;
|
|
301
|
+
for (let i = 0; i < protocols.length; i++) {
|
|
302
|
+
const protocolCap = caps[i];
|
|
303
|
+
if (protocolCap === undefined || protocolCap === 0n)
|
|
304
|
+
continue;
|
|
305
|
+
const protocol = protocols[i];
|
|
306
|
+
const spent = getProtocolSpend(tracker, protocol, timestamp);
|
|
307
|
+
protocolBudgets.push({
|
|
308
|
+
protocol,
|
|
309
|
+
spent24h: spent,
|
|
310
|
+
cap: protocolCap,
|
|
311
|
+
remaining: protocolCap > spent ? protocolCap - spent : 0n,
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
// 8. Parse stablecoin ATA balances (fail-open: 0n if ATA doesn't exist)
|
|
316
|
+
let usdcBalance = 0n;
|
|
317
|
+
let usdtBalance = 0n;
|
|
318
|
+
try {
|
|
319
|
+
const usdcEncoded = encoded[5];
|
|
320
|
+
if (usdcEncoded.exists) {
|
|
321
|
+
const usdcData = usdcEncoded.data;
|
|
322
|
+
if (usdcData && usdcData.length >= 72) {
|
|
323
|
+
// SPL Token amount at offset 64 (u64 LE)
|
|
324
|
+
for (let i = 0; i < 8; i++) {
|
|
325
|
+
usdcBalance |= BigInt(usdcData[64 + i]) << BigInt(i * 8);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
catch {
|
|
331
|
+
// Fail-open: ATA may not exist
|
|
332
|
+
}
|
|
333
|
+
try {
|
|
334
|
+
const usdtEncoded = encoded[6];
|
|
335
|
+
if (usdtEncoded.exists) {
|
|
336
|
+
const usdtData = usdtEncoded.data;
|
|
337
|
+
if (usdtData && usdtData.length >= 72) {
|
|
338
|
+
for (let i = 0; i < 8; i++) {
|
|
339
|
+
usdtBalance |= BigInt(usdtData[64 + i]) << BigInt(i * 8);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
catch {
|
|
345
|
+
// Fail-open: ATA may not exist
|
|
346
|
+
}
|
|
347
|
+
return {
|
|
348
|
+
vault: decodedVault.data,
|
|
349
|
+
policy: decodedPolicy.data,
|
|
350
|
+
tracker,
|
|
351
|
+
overlay,
|
|
352
|
+
constraints,
|
|
353
|
+
globalBudget,
|
|
354
|
+
agentBudget,
|
|
355
|
+
allAgentBudgets,
|
|
356
|
+
protocolBudgets,
|
|
357
|
+
maxTransactionUsd: decodedPolicy.data.maxTransactionSizeUsd,
|
|
358
|
+
stablecoinBalances: { usdc: usdcBalance, usdt: usdtBalance },
|
|
359
|
+
resolvedAtTimestamp: timestamp,
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Resolve complete vault state for an owner — returns all agents' budgets
|
|
364
|
+
* without requiring a specific agent address.
|
|
365
|
+
*
|
|
366
|
+
* Delegates to resolveVaultState internally. Agents with spendingLimitUsd = 0
|
|
367
|
+
* are excluded from allAgentBudgets (matching on-chain behavior where
|
|
368
|
+
* zero-limit agents have no budget to track).
|
|
369
|
+
*
|
|
370
|
+
* @param rpc - Kit RPC client
|
|
371
|
+
* @param vault - Vault PDA address
|
|
372
|
+
* @param nowUnix - Optional timestamp override (defaults to Date.now())
|
|
373
|
+
* @param network - Optional network for stablecoin mint resolution
|
|
374
|
+
*/
|
|
375
|
+
export async function resolveVaultStateForOwner(rpc, vault, nowUnix, network) {
|
|
376
|
+
// System program address — guaranteed not a vault agent (can't sign),
|
|
377
|
+
// so agentBudget is always null in the delegated result.
|
|
378
|
+
const state = await resolveVaultState(rpc, vault, "11111111111111111111111111111111", nowUnix, network);
|
|
379
|
+
const { agentBudget: _, ...rest } = state;
|
|
380
|
+
return rest;
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Resolve only global + agent budgets with minimal RPC overhead.
|
|
384
|
+
*
|
|
385
|
+
* Fetches 4 accounts (vault, policy, tracker, overlay) instead of 7,
|
|
386
|
+
* skipping constraints and 2 stablecoin ATAs. Skips protocol budget
|
|
387
|
+
* computation and constraints decoding (8.3KB zero-copy).
|
|
388
|
+
* ~40% cheaper than resolveVaultState() for budget-only queries.
|
|
389
|
+
*/
|
|
390
|
+
export async function resolveVaultBudget(rpc, vault, agent, nowUnix) {
|
|
391
|
+
const [[policyPda], [trackerPda], [overlayPda],] = await Promise.all([
|
|
392
|
+
getPolicyPDA(vault),
|
|
393
|
+
getTrackerPDA(vault),
|
|
394
|
+
getAgentOverlayPDA(vault, 0),
|
|
395
|
+
]);
|
|
396
|
+
const encoded = await fetchEncodedAccounts(rpc, [
|
|
397
|
+
vault,
|
|
398
|
+
policyPda,
|
|
399
|
+
trackerPda,
|
|
400
|
+
overlayPda,
|
|
401
|
+
]);
|
|
402
|
+
const decodedVault = decodeAgentVault(encoded[0]);
|
|
403
|
+
if (!decodedVault.exists) {
|
|
404
|
+
throw new Error(`Vault account ${vault} does not exist`);
|
|
405
|
+
}
|
|
406
|
+
const decodedPolicy = decodePolicyConfig(encoded[1]);
|
|
407
|
+
if (!decodedPolicy.exists) {
|
|
408
|
+
throw new Error(`PolicyConfig for vault ${vault} does not exist`);
|
|
409
|
+
}
|
|
410
|
+
const decodedTracker = decodeSpendTracker(encoded[2]);
|
|
411
|
+
const tracker = decodedTracker.exists
|
|
412
|
+
? decodedTracker.data
|
|
413
|
+
: null;
|
|
414
|
+
const decodedOverlay = decodeAgentSpendOverlay(encoded[3]);
|
|
415
|
+
const overlay = decodedOverlay.exists
|
|
416
|
+
? decodedOverlay.data
|
|
417
|
+
: null;
|
|
418
|
+
const timestamp = nowUnix ?? BigInt(Math.floor(Date.now() / 1000));
|
|
419
|
+
// Global budget
|
|
420
|
+
const globalSpent = tracker ? getRolling24hUsd(tracker, timestamp) : 0n;
|
|
421
|
+
const globalCap = decodedPolicy.data.dailySpendingCapUsd;
|
|
422
|
+
const globalRemaining = globalCap > globalSpent ? globalCap - globalSpent : 0n;
|
|
423
|
+
const globalBudget = {
|
|
424
|
+
spent24h: globalSpent,
|
|
425
|
+
cap: globalCap,
|
|
426
|
+
remaining: globalRemaining,
|
|
427
|
+
};
|
|
428
|
+
// Agent budget
|
|
429
|
+
let agentBudget = null;
|
|
430
|
+
const agentEntry = decodedVault.data.agents.find((a) => a.pubkey === agent);
|
|
431
|
+
if (agentEntry && agentEntry.spendingLimitUsd > 0n) {
|
|
432
|
+
const cap = agentEntry.spendingLimitUsd;
|
|
433
|
+
if (overlay) {
|
|
434
|
+
const overlayEntry = overlay.entries.find((e) => bytesMatchAddress(e.agent, agent));
|
|
435
|
+
if (overlayEntry) {
|
|
436
|
+
const spent = getAgentRolling24hUsd(overlayEntry, timestamp);
|
|
437
|
+
agentBudget = { spent24h: spent, cap, remaining: cap > spent ? cap - spent : 0n };
|
|
438
|
+
}
|
|
439
|
+
else {
|
|
440
|
+
agentBudget = { spent24h: 0n, cap, remaining: cap };
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
else {
|
|
444
|
+
agentBudget = { spent24h: 0n, cap, remaining: cap };
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
return { globalBudget, agentBudget };
|
|
448
|
+
}
|
|
449
|
+
/** AgentVault account size (bytes) — used for dataSize filter. */
|
|
450
|
+
const AGENT_VAULT_SIZE = 634;
|
|
451
|
+
/** Byte offset of the `vault_id` field in AgentVault (after 8 disc + 32 owner). */
|
|
452
|
+
const VAULT_ID_OFFSET = 40;
|
|
453
|
+
const u64Decoder = getU64Decoder();
|
|
454
|
+
/**
|
|
455
|
+
* Find all vaults owned by a wallet address.
|
|
456
|
+
*
|
|
457
|
+
* Strategy A: getProgramAccounts with memcmp filter (fast, requires RPC support).
|
|
458
|
+
* Strategy B: Sequential PDA probing fallback (works everywhere, slower).
|
|
459
|
+
*
|
|
460
|
+
* @param rpc - Kit RPC client
|
|
461
|
+
* @param owner - Owner wallet address
|
|
462
|
+
* @param maxProbe - Maximum vault IDs to probe in fallback (default: 20)
|
|
463
|
+
* @returns Array of discovered vaults
|
|
464
|
+
*/
|
|
465
|
+
/**
|
|
466
|
+
* Errors that indicate the RPC doesn't support getProgramAccounts (fall back to probing).
|
|
467
|
+
*
|
|
468
|
+
* JSON-RPC error codes (per Solana spec + major RPC providers):
|
|
469
|
+
* - -32601: Method not found (standard JSON-RPC)
|
|
470
|
+
* - -32010: Program excluded from account secondary indexes (Solana-specific)
|
|
471
|
+
* - HTTP 410: Method disabled at proxy level (public RPCs)
|
|
472
|
+
*
|
|
473
|
+
* Rate limits (-32005, HTTP 429) and network errors are NOT matched —
|
|
474
|
+
* they should propagate so callers can retry or surface the issue.
|
|
475
|
+
*/
|
|
476
|
+
function isGpaUnsupportedError(err) {
|
|
477
|
+
if (!(err instanceof Error))
|
|
478
|
+
return false;
|
|
479
|
+
// Check for JSON-RPC error codes (SolanaJSONRPCError or similar)
|
|
480
|
+
const code = err.code;
|
|
481
|
+
if (code === -32601 || code === -32010)
|
|
482
|
+
return true;
|
|
483
|
+
// Fallback: message-based matching for RPCs that don't set error codes
|
|
484
|
+
const msg = err.message.toLowerCase();
|
|
485
|
+
return (msg.includes("method not found") ||
|
|
486
|
+
msg.includes("not available") ||
|
|
487
|
+
msg.includes("not supported") ||
|
|
488
|
+
msg.includes("disabled") ||
|
|
489
|
+
msg.includes("410"));
|
|
490
|
+
}
|
|
491
|
+
/** Platform-agnostic base64 encode for Uint8Array (no Buffer dependency). */
|
|
492
|
+
function uint8ToBase64(bytes) {
|
|
493
|
+
let binary = "";
|
|
494
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
495
|
+
binary += String.fromCharCode(bytes[i]);
|
|
496
|
+
}
|
|
497
|
+
return btoa(binary);
|
|
498
|
+
}
|
|
499
|
+
/** Platform-agnostic base64 decode to Uint8Array (no Buffer dependency). */
|
|
500
|
+
function base64ToUint8(base64) {
|
|
501
|
+
const binary = atob(base64);
|
|
502
|
+
const bytes = new Uint8Array(binary.length);
|
|
503
|
+
for (let i = 0; i < binary.length; i++) {
|
|
504
|
+
bytes[i] = binary.charCodeAt(i);
|
|
505
|
+
}
|
|
506
|
+
return bytes;
|
|
507
|
+
}
|
|
508
|
+
export async function findVaultsByOwner(rpc, owner, maxProbe = 20) {
|
|
509
|
+
// Cap maxProbe to prevent excessive PDA derivation (V-3: DoS mitigation)
|
|
510
|
+
const cappedProbe = Math.min(Math.max(0, maxProbe), 100);
|
|
511
|
+
const ownerBase64 = uint8ToBase64(addressEncoder.encode(owner));
|
|
512
|
+
// Strategy A: getProgramAccounts with memcmp filter
|
|
513
|
+
try {
|
|
514
|
+
const accounts = await rpc
|
|
515
|
+
.getProgramAccounts(SIGIL_PROGRAM_ADDRESS, {
|
|
516
|
+
dataSlice: { offset: VAULT_ID_OFFSET, length: 8 },
|
|
517
|
+
filters: [
|
|
518
|
+
{ dataSize: BigInt(AGENT_VAULT_SIZE) },
|
|
519
|
+
{ memcmp: { offset: BigInt(8), bytes: ownerBase64, encoding: "base64" } },
|
|
520
|
+
],
|
|
521
|
+
encoding: "base64",
|
|
522
|
+
})
|
|
523
|
+
.send();
|
|
524
|
+
const parsed = accounts.map((entry) => {
|
|
525
|
+
const raw = base64ToUint8(entry.account.data[0]);
|
|
526
|
+
const vaultId = u64Decoder.decode(raw);
|
|
527
|
+
return { vaultAddress: entry.pubkey, vaultId };
|
|
528
|
+
});
|
|
529
|
+
// V-1 fix: Re-derive PDAs to verify RPC-returned pubkeys are legitimate vault addresses.
|
|
530
|
+
// A malicious RPC could return fabricated pubkeys that don't correspond to real vault PDAs.
|
|
531
|
+
const verified = [];
|
|
532
|
+
for (const entry of parsed) {
|
|
533
|
+
const [expectedPda] = await getVaultPDA(owner, entry.vaultId);
|
|
534
|
+
if (expectedPda === entry.vaultAddress) {
|
|
535
|
+
verified.push(entry);
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
// Sort by vaultId for consistent ordering regardless of RPC response order
|
|
539
|
+
return verified.sort((a, b) => (a.vaultId < b.vaultId ? -1 : a.vaultId > b.vaultId ? 1 : 0));
|
|
540
|
+
}
|
|
541
|
+
catch (err) {
|
|
542
|
+
// Rate limits must propagate — never fall back to slow probing under rate limit
|
|
543
|
+
const code = err.code;
|
|
544
|
+
if (code === -32005 || (err instanceof Error && err.message.includes("429"))) {
|
|
545
|
+
throw err;
|
|
546
|
+
}
|
|
547
|
+
// Only fall back to probing if the RPC doesn't support getProgramAccounts.
|
|
548
|
+
// Network errors, auth errors should propagate.
|
|
549
|
+
if (!isGpaUnsupportedError(err)) {
|
|
550
|
+
throw err;
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
// Strategy B: PDA probing fallback — derive all candidate PDAs in parallel
|
|
554
|
+
const pdas = await Promise.all(Array.from({ length: cappedProbe }, async (_, i) => {
|
|
555
|
+
const [pda] = await getVaultPDA(owner, BigInt(i));
|
|
556
|
+
return { address: pda, vaultId: BigInt(i) };
|
|
557
|
+
}));
|
|
558
|
+
// Batch fetch via getMultipleAccounts (maxProbe <= 20, well under 100-account limit)
|
|
559
|
+
const addresses = pdas.map((p) => p.address);
|
|
560
|
+
const result = await rpc
|
|
561
|
+
.getMultipleAccounts(addresses, { encoding: "base64" })
|
|
562
|
+
.send();
|
|
563
|
+
const discovered = [];
|
|
564
|
+
for (let i = 0; i < result.value.length; i++) {
|
|
565
|
+
if (result.value[i] !== null) {
|
|
566
|
+
discovered.push({
|
|
567
|
+
vaultAddress: pdas[i].address,
|
|
568
|
+
vaultId: pdas[i].vaultId,
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
// Already sorted by vaultId (probed sequentially 0..maxProbe)
|
|
573
|
+
return discovered;
|
|
574
|
+
}
|
|
575
|
+
// ─── Escrow Discovery ──────────────────────────────────────────────────────
|
|
576
|
+
/** Escrow account size (bytes) — used for dataSize filter. */
|
|
577
|
+
const ESCROW_DEPOSIT_SIZE = 170;
|
|
578
|
+
/**
|
|
579
|
+
* Find all escrow deposits where this vault is the source.
|
|
580
|
+
* Uses getProgramAccounts with memcmp on source_vault field (offset 8).
|
|
581
|
+
*/
|
|
582
|
+
export async function findEscrowsByVault(rpc, sourceVault) {
|
|
583
|
+
const vaultBase64 = uint8ToBase64(addressEncoder.encode(sourceVault));
|
|
584
|
+
try {
|
|
585
|
+
const accounts = await rpc
|
|
586
|
+
.getProgramAccounts(SIGIL_PROGRAM_ADDRESS, {
|
|
587
|
+
filters: [
|
|
588
|
+
{ dataSize: BigInt(ESCROW_DEPOSIT_SIZE) },
|
|
589
|
+
{ memcmp: { offset: BigInt(8), bytes: vaultBase64, encoding: "base64" } },
|
|
590
|
+
],
|
|
591
|
+
encoding: "base64",
|
|
592
|
+
})
|
|
593
|
+
.send();
|
|
594
|
+
// Decode directly from GPA response (avoids double RPC)
|
|
595
|
+
const decoder = getEscrowDepositDecoder();
|
|
596
|
+
return accounts.map((entry) => {
|
|
597
|
+
const raw = base64ToUint8(entry.account.data[0]);
|
|
598
|
+
const data = decoder.decode(raw);
|
|
599
|
+
return { ...data, address: entry.pubkey };
|
|
600
|
+
});
|
|
601
|
+
}
|
|
602
|
+
catch (err) {
|
|
603
|
+
if (!isGpaUnsupportedError(err))
|
|
604
|
+
throw err;
|
|
605
|
+
return []; // GPA not supported — return empty
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
// ─── Session Discovery ─────────────────────────────────────────────────────
|
|
609
|
+
/** SessionAuthority account size (bytes). */
|
|
610
|
+
const SESSION_AUTHORITY_SIZE = 244;
|
|
611
|
+
/**
|
|
612
|
+
* Find all active sessions for a vault.
|
|
613
|
+
* Uses getProgramAccounts with memcmp on vault field (offset 8).
|
|
614
|
+
*/
|
|
615
|
+
export async function findSessionsByVault(rpc, vault) {
|
|
616
|
+
const vaultBase64 = uint8ToBase64(addressEncoder.encode(vault));
|
|
617
|
+
try {
|
|
618
|
+
const accounts = await rpc
|
|
619
|
+
.getProgramAccounts(SIGIL_PROGRAM_ADDRESS, {
|
|
620
|
+
filters: [
|
|
621
|
+
{ dataSize: BigInt(SESSION_AUTHORITY_SIZE) },
|
|
622
|
+
{ memcmp: { offset: BigInt(8), bytes: vaultBase64, encoding: "base64" } },
|
|
623
|
+
],
|
|
624
|
+
encoding: "base64",
|
|
625
|
+
})
|
|
626
|
+
.send();
|
|
627
|
+
// Decode directly from GPA response (avoids double RPC)
|
|
628
|
+
const decoder = getSessionAuthorityDecoder();
|
|
629
|
+
return accounts.map((entry) => {
|
|
630
|
+
const raw = base64ToUint8(entry.account.data[0]);
|
|
631
|
+
const data = decoder.decode(raw);
|
|
632
|
+
return { ...data, address: entry.pubkey };
|
|
633
|
+
});
|
|
634
|
+
}
|
|
635
|
+
catch (err) {
|
|
636
|
+
if (!isGpaUnsupportedError(err))
|
|
637
|
+
throw err;
|
|
638
|
+
return []; // GPA not supported — return empty
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
// ─── Pending Update Convenience Wrappers ───────────────────────────────────
|
|
642
|
+
/**
|
|
643
|
+
* Fetch the pending policy update for a vault, if any.
|
|
644
|
+
* Returns null if no pending update exists.
|
|
645
|
+
*/
|
|
646
|
+
export async function getPendingPolicyForVault(rpc, vault) {
|
|
647
|
+
const [pda] = await getPendingPolicyPDA(vault);
|
|
648
|
+
const result = await fetchMaybePendingPolicyUpdate(rpc, pda);
|
|
649
|
+
return result.exists ? result.data : null;
|
|
650
|
+
}
|
|
651
|
+
/**
|
|
652
|
+
* Fetch the pending constraints update for a vault, if any.
|
|
653
|
+
* Returns null if no pending update exists.
|
|
654
|
+
*/
|
|
655
|
+
export async function getPendingConstraintsForVault(rpc, vault) {
|
|
656
|
+
const [pda] = await getPendingConstraintsPDA(vault);
|
|
657
|
+
const result = await fetchMaybePendingConstraintsUpdate(rpc, pda);
|
|
658
|
+
return result.exists ? result.data : null;
|
|
659
|
+
}
|
|
660
|
+
//# sourceMappingURL=state-resolver.js.map
|