@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,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* x402 Payment Option Selector — Kit-native
|
|
3
|
+
*
|
|
4
|
+
* Selects a Solana-compatible payment option from the accepts array.
|
|
5
|
+
* Includes SECURITY-CRITICAL payTo destination allowlisting.
|
|
6
|
+
*/
|
|
7
|
+
import { X402UnsupportedError, X402DestinationBlockedError } from "./errors.js";
|
|
8
|
+
/**
|
|
9
|
+
* Select a Solana-compatible payment option from the accepts array.
|
|
10
|
+
*
|
|
11
|
+
* Filtering order:
|
|
12
|
+
* 1. Network: must start with "solana:" (CAIP-2 format)
|
|
13
|
+
* 2. Token allowlist: asset must be in config.allowedTokens (if set)
|
|
14
|
+
* 3. payTo allowlist: destination must be in config.allowedDestinations (if set) — SECURITY-CRITICAL
|
|
15
|
+
*
|
|
16
|
+
* @throws X402DestinationBlockedError if Solana options exist but all destinations are blocked
|
|
17
|
+
* @throws X402UnsupportedError if no compatible Solana option found
|
|
18
|
+
*/
|
|
19
|
+
export function selectPaymentOption(paymentRequired, config) {
|
|
20
|
+
const solanaOptions = [];
|
|
21
|
+
let hasBlockedDestination = false;
|
|
22
|
+
for (const option of paymentRequired.accepts) {
|
|
23
|
+
// 1. Network filter: must be Solana
|
|
24
|
+
if (!option.network.startsWith("solana:")) {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
// 2. Token allowlist filter
|
|
28
|
+
if (config?.allowedTokens &&
|
|
29
|
+
!config.allowedTokens.has(option.asset)) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
solanaOptions.push(option);
|
|
33
|
+
// 3. payTo destination allowlist — SECURITY-CRITICAL
|
|
34
|
+
// Defense against prompt injection: malicious API returns attacker's payTo
|
|
35
|
+
if (config?.allowedDestinations &&
|
|
36
|
+
!config.allowedDestinations.has(option.payTo)) {
|
|
37
|
+
hasBlockedDestination = true;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
return option;
|
|
41
|
+
}
|
|
42
|
+
// Specific error when Solana options exist but all destinations are blocked
|
|
43
|
+
if (solanaOptions.length > 0 && hasBlockedDestination) {
|
|
44
|
+
throw new X402DestinationBlockedError(solanaOptions[0].payTo, `All ${solanaOptions.length} Solana payment option(s) have blocked payTo destinations. ` +
|
|
45
|
+
"Add trusted destinations to X402Config.allowedDestinations.");
|
|
46
|
+
}
|
|
47
|
+
throw new X402UnsupportedError("No compatible Solana payment option found in accepts array");
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=payment-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment-selector.js","sourceRoot":"","sources":["../../src/x402/payment-selector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAEhF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CACjC,eAAgC,EAChC,MAAmB;IAEnB,MAAM,aAAa,GAA0B,EAAE,CAAC;IAChD,IAAI,qBAAqB,GAAG,KAAK,CAAC;IAElC,KAAK,MAAM,MAAM,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;QAC7C,oCAAoC;QACpC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1C,SAAS;QACX,CAAC;QAED,4BAA4B;QAC5B,IACE,MAAM,EAAE,aAAa;YACrB,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,KAAgB,CAAC,EAClD,CAAC;YACD,SAAS;QACX,CAAC;QAED,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE3B,qDAAqD;QACrD,2EAA2E;QAC3E,IACE,MAAM,EAAE,mBAAmB;YAC3B,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAgB,CAAC,EACxD,CAAC;YACD,qBAAqB,GAAG,IAAI,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,4EAA4E;IAC5E,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,qBAAqB,EAAE,CAAC;QACtD,MAAM,IAAI,2BAA2B,CACnC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,EACtB,OAAO,aAAa,CAAC,MAAM,6DAA6D;YACtF,6DAA6D,CAChE,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,oBAAoB,CAC5B,4DAA4D,CAC7D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* x402 Policy Bridge — Kit-native
|
|
3
|
+
*
|
|
4
|
+
* Bridges x402 payments to Kit ShieldState for spending integration.
|
|
5
|
+
* x402 payments share the SAME spending state as DeFi operations.
|
|
6
|
+
*/
|
|
7
|
+
import type { Address } from "@solana/kit";
|
|
8
|
+
import type { ShieldedContext } from "../shield.js";
|
|
9
|
+
import type { PaymentRequirements, X402Config } from "./types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Evaluate an x402 payment against Kit Shield policies.
|
|
12
|
+
* Pre-check only — does NOT record spend.
|
|
13
|
+
*
|
|
14
|
+
* @throws X402PaymentError if shield is paused
|
|
15
|
+
* @returns violations array (empty = approved)
|
|
16
|
+
*/
|
|
17
|
+
export declare function evaluateX402Payment(selected: PaymentRequirements, shieldCtx: ShieldedContext, config?: X402Config, signerAddress?: Address): string[];
|
|
18
|
+
/**
|
|
19
|
+
* Record an x402 payment in ShieldState after successful payment.
|
|
20
|
+
* x402 payments share the SAME spending state as DeFi operations.
|
|
21
|
+
*/
|
|
22
|
+
export declare function recordX402Spend(shieldCtx: ShieldedContext, asset: string, amount: bigint): void;
|
|
23
|
+
//# sourceMappingURL=policy-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-bridge.d.ts","sourceRoot":"","sources":["../../src/x402/policy-bridge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAIlE;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,mBAAmB,EAC7B,SAAS,EAAE,eAAe,EAC1B,MAAM,CAAC,EAAE,UAAU,EACnB,aAAa,CAAC,EAAE,OAAO,GACtB,MAAM,EAAE,CAuDV;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,eAAe,EAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CAGN"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* x402 Policy Bridge — Kit-native
|
|
3
|
+
*
|
|
4
|
+
* Bridges x402 payments to Kit ShieldState for spending integration.
|
|
5
|
+
* x402 payments share the SAME spending state as DeFi operations.
|
|
6
|
+
*/
|
|
7
|
+
import { X402PaymentError } from "./errors.js";
|
|
8
|
+
import { TOKEN_PROGRAM_ID } from "./transfer-builder.js";
|
|
9
|
+
/**
|
|
10
|
+
* Evaluate an x402 payment against Kit Shield policies.
|
|
11
|
+
* Pre-check only — does NOT record spend.
|
|
12
|
+
*
|
|
13
|
+
* @throws X402PaymentError if shield is paused
|
|
14
|
+
* @returns violations array (empty = approved)
|
|
15
|
+
*/
|
|
16
|
+
export function evaluateX402Payment(selected, shieldCtx, config, signerAddress) {
|
|
17
|
+
const violations = [];
|
|
18
|
+
// 1. Shield paused = block all x402 payments
|
|
19
|
+
if (shieldCtx.isPaused) {
|
|
20
|
+
throw new X402PaymentError("Shield is paused — all x402 payments are blocked until resume()");
|
|
21
|
+
}
|
|
22
|
+
// 2. Cumulative spend check via ShieldState
|
|
23
|
+
if (config?.maxCumulativeSpend !== undefined) {
|
|
24
|
+
const windowMs = config.cumulativeWindowMs ?? 86_400_000;
|
|
25
|
+
const currentSpend = shieldCtx.state.getTotalSpendInWindow(windowMs);
|
|
26
|
+
const paymentAmount = BigInt(selected.amount);
|
|
27
|
+
if (currentSpend + paymentAmount > config.maxCumulativeSpend) {
|
|
28
|
+
violations.push(`Cumulative x402 spend ${currentSpend + paymentAmount} exceeds limit ${config.maxCumulativeSpend} ` +
|
|
29
|
+
`in ${windowMs}ms window`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// 3. Per-request ceiling
|
|
33
|
+
if (config?.maxPaymentPerRequest !== undefined) {
|
|
34
|
+
const paymentAmount = BigInt(selected.amount);
|
|
35
|
+
if (paymentAmount > config.maxPaymentPerRequest) {
|
|
36
|
+
violations.push(`Payment ${selected.amount} exceeds per-request ceiling ${config.maxPaymentPerRequest}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// 4. Delegate to Shield's instruction check with synthetic transfer instruction
|
|
40
|
+
if (signerAddress) {
|
|
41
|
+
const syntheticIx = {
|
|
42
|
+
programAddress: TOKEN_PROGRAM_ID,
|
|
43
|
+
accounts: [
|
|
44
|
+
{ address: signerAddress },
|
|
45
|
+
{ address: selected.asset },
|
|
46
|
+
{ address: selected.payTo },
|
|
47
|
+
{ address: signerAddress },
|
|
48
|
+
],
|
|
49
|
+
};
|
|
50
|
+
const checkResult = shieldCtx.check([syntheticIx], signerAddress);
|
|
51
|
+
if (!checkResult.allowed) {
|
|
52
|
+
for (const v of checkResult.violations) {
|
|
53
|
+
violations.push(v.message);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return violations;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Record an x402 payment in ShieldState after successful payment.
|
|
61
|
+
* x402 payments share the SAME spending state as DeFi operations.
|
|
62
|
+
*/
|
|
63
|
+
export function recordX402Spend(shieldCtx, asset, amount) {
|
|
64
|
+
shieldCtx.state.recordSpend(asset, amount);
|
|
65
|
+
shieldCtx.state.recordTransaction();
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=policy-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-bridge.js","sourceRoot":"","sources":["../../src/x402/policy-bridge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAA6B,EAC7B,SAA0B,EAC1B,MAAmB,EACnB,aAAuB;IAEvB,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,6CAA6C;IAC7C,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;QACvB,MAAM,IAAI,gBAAgB,CACxB,iEAAiE,CAClE,CAAC;IACJ,CAAC;IAED,4CAA4C;IAC5C,IAAI,MAAM,EAAE,kBAAkB,KAAK,SAAS,EAAE,CAAC;QAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,kBAAkB,IAAI,UAAU,CAAC;QACzD,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACrE,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE9C,IAAI,YAAY,GAAG,aAAa,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAC7D,UAAU,CAAC,IAAI,CACb,yBAAyB,YAAY,GAAG,aAAa,kBAAkB,MAAM,CAAC,kBAAkB,GAAG;gBACjG,MAAM,QAAQ,WAAW,CAC5B,CAAC;QACJ,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,IAAI,MAAM,EAAE,oBAAoB,KAAK,SAAS,EAAE,CAAC;QAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,aAAa,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAChD,UAAU,CAAC,IAAI,CACb,WAAW,QAAQ,CAAC,MAAM,gCAAgC,MAAM,CAAC,oBAAoB,EAAE,CACxF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,gFAAgF;IAChF,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,WAAW,GAA2B;YAC1C,cAAc,EAAE,gBAAgB;YAChC,QAAQ,EAAE;gBACR,EAAE,OAAO,EAAE,aAAa,EAAE;gBAC1B,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAgB,EAAE;gBACtC,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAgB,EAAE;gBACtC,EAAE,OAAO,EAAE,aAAa,EAAE;aAC3B;SACF,CAAC;QAEF,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC,CAAC;QAClE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;gBACvC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,SAA0B,EAC1B,KAAa,EACb,MAAc;IAEd,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC3C,SAAS,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* x402 shieldedFetch — Kit-native
|
|
3
|
+
*
|
|
4
|
+
* Core 17-step flow for HTTP 402 Payment Required support.
|
|
5
|
+
* Uses Kit TransactionSigner, zero web3.js dependency.
|
|
6
|
+
*
|
|
7
|
+
* x402 payments are simple SPL transfers — NOT Sigil-composed transactions.
|
|
8
|
+
* Shield enforcement happens at the policy-bridge level, not the signer level.
|
|
9
|
+
*/
|
|
10
|
+
import type { Rpc, SolanaRpcApi, TransactionSigner } from "@solana/kit";
|
|
11
|
+
import type { ShieldedContext } from "../shield.js";
|
|
12
|
+
import type { X402Config, ShieldedFetchOptions, ShieldedFetchResponse } from "./types.js";
|
|
13
|
+
/**
|
|
14
|
+
* Fetch a URL with automatic x402 payment support — Kit-native.
|
|
15
|
+
*
|
|
16
|
+
* 17-step flow:
|
|
17
|
+
* 1. URL protocol validation
|
|
18
|
+
* 2. Initial fetch
|
|
19
|
+
* 3. Non-402 passthrough
|
|
20
|
+
* 4. Extract PAYMENT-REQUIRED header
|
|
21
|
+
* 5. Non-x402 402 passthrough
|
|
22
|
+
* 6. Infinite loop guard
|
|
23
|
+
* 7. Decode + validate header
|
|
24
|
+
* 8. Select payment option with payTo allowlisting
|
|
25
|
+
* 9. Replay check
|
|
26
|
+
* 10. Amount sanity
|
|
27
|
+
* 11. Policy pre-check (does NOT record spend)
|
|
28
|
+
* 12. Dry-run exit point
|
|
29
|
+
* 13. Build TransferChecked instruction
|
|
30
|
+
* 14. Compose + sign transaction
|
|
31
|
+
* 15. Retry with PAYMENT-SIGNATURE header
|
|
32
|
+
* 16. Validate settlement response
|
|
33
|
+
* 17. Record spend, emit audit event, return response
|
|
34
|
+
*/
|
|
35
|
+
export declare function shieldedFetch(signer: TransactionSigner, url: string | URL, config?: X402Config, shieldCtx?: ShieldedContext, rpc?: Rpc<SolanaRpcApi>, fetchOptions?: ShieldedFetchOptions): Promise<ShieldedFetchResponse>;
|
|
36
|
+
/**
|
|
37
|
+
* Create a wallet-bound fetch function with automatic x402 payment support.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* const fetch402 = createShieldedFetch(signer, config, shieldCtx, rpc);
|
|
42
|
+
* const res = await fetch402('https://api.example.com/paid-endpoint');
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function createShieldedFetch(signer: TransactionSigner, config?: X402Config, shieldCtx?: ShieldedContext, rpc?: Rpc<SolanaRpcApi>): (url: string | URL, init?: ShieldedFetchOptions) => Promise<ShieldedFetchResponse>;
|
|
46
|
+
//# sourceMappingURL=shielded-fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shielded-fetch.d.ts","sourceRoot":"","sources":["../../src/x402/shielded-fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAEV,GAAG,EACH,YAAY,EACZ,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAUrB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EACV,UAAU,EACV,oBAAoB,EACpB,qBAAqB,EAEtB,MAAM,YAAY,CAAC;AAmDpB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,iBAAiB,EACzB,GAAG,EAAE,MAAM,GAAG,GAAG,EACjB,MAAM,CAAC,EAAE,UAAU,EACnB,SAAS,CAAC,EAAE,eAAe,EAC3B,GAAG,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,EACvB,YAAY,CAAC,EAAE,oBAAoB,GAClC,OAAO,CAAC,qBAAqB,CAAC,CAwUhC;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,iBAAiB,EACzB,MAAM,CAAC,EAAE,UAAU,EACnB,SAAS,CAAC,EAAE,eAAe,EAC3B,GAAG,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,GACtB,CACD,GAAG,EAAE,MAAM,GAAG,GAAG,EACjB,IAAI,CAAC,EAAE,oBAAoB,KACxB,OAAO,CAAC,qBAAqB,CAAC,CAGlC"}
|
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* x402 shieldedFetch — Kit-native
|
|
3
|
+
*
|
|
4
|
+
* Core 17-step flow for HTTP 402 Payment Required support.
|
|
5
|
+
* Uses Kit TransactionSigner, zero web3.js dependency.
|
|
6
|
+
*
|
|
7
|
+
* x402 payments are simple SPL transfers — NOT Sigil-composed transactions.
|
|
8
|
+
* Shield enforcement happens at the policy-bridge level, not the signer level.
|
|
9
|
+
*/
|
|
10
|
+
import { pipe, createTransactionMessage, setTransactionMessageFeePayer, setTransactionMessageLifetimeUsingBlockhash, appendTransactionMessageInstruction, compileTransaction, getBase58Decoder, } from "@solana/kit";
|
|
11
|
+
import { X402PaymentError } from "./errors.js";
|
|
12
|
+
import { signAndEncode } from "../rpc-helpers.js";
|
|
13
|
+
import { decodePaymentRequiredHeader, encodePaymentSignatureHeader, decodePaymentResponseHeader, } from "./codec.js";
|
|
14
|
+
import { selectPaymentOption } from "./payment-selector.js";
|
|
15
|
+
import { NonceTracker } from "./nonce-tracker.js";
|
|
16
|
+
import { validatePaymentAmount, recordPaymentAmount } from "./amount-guard.js";
|
|
17
|
+
import { evaluateX402Payment, recordX402Spend } from "./policy-bridge.js";
|
|
18
|
+
import { validateSettlement } from "./facilitator-verify.js";
|
|
19
|
+
import { emitPaymentEvent, createPaymentEvent } from "./audit-trail.js";
|
|
20
|
+
import { buildX402TransferInstruction } from "./transfer-builder.js";
|
|
21
|
+
import { resolveToken } from "../tokens.js";
|
|
22
|
+
// Global nonce tracker instance
|
|
23
|
+
const globalNonceTracker = new NonceTracker();
|
|
24
|
+
/**
|
|
25
|
+
* Poll getSignatureStatuses() to confirm a payment TX landed on-chain.
|
|
26
|
+
* Returns 3-state result:
|
|
27
|
+
* 'confirmed' — TX confirmed/finalized on-chain
|
|
28
|
+
* 'failed' — TX explicitly errored on-chain (definitive failure)
|
|
29
|
+
* 'timeout' — No definitive answer within timeout
|
|
30
|
+
* Pattern reused from rpc-helpers.ts sendAndConfirmTransaction polling.
|
|
31
|
+
*/
|
|
32
|
+
async function confirmSettlementOnChain(rpc, txSignature, timeoutMs) {
|
|
33
|
+
const deadline = Date.now() + timeoutMs;
|
|
34
|
+
let delay = 500;
|
|
35
|
+
while (Date.now() < deadline) {
|
|
36
|
+
const result = await rpc.getSignatureStatuses([txSignature]).send();
|
|
37
|
+
const statuses = result.value;
|
|
38
|
+
if (statuses?.[0]) {
|
|
39
|
+
const status = statuses[0];
|
|
40
|
+
if (status.err)
|
|
41
|
+
return "failed";
|
|
42
|
+
if (status.confirmationStatus === "confirmed" || status.confirmationStatus === "finalized") {
|
|
43
|
+
return "confirmed";
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
await new Promise(r => setTimeout(r, delay));
|
|
47
|
+
delay = Math.min(delay * 1.5, 3000);
|
|
48
|
+
}
|
|
49
|
+
return "timeout";
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Fetch a URL with automatic x402 payment support — Kit-native.
|
|
53
|
+
*
|
|
54
|
+
* 17-step flow:
|
|
55
|
+
* 1. URL protocol validation
|
|
56
|
+
* 2. Initial fetch
|
|
57
|
+
* 3. Non-402 passthrough
|
|
58
|
+
* 4. Extract PAYMENT-REQUIRED header
|
|
59
|
+
* 5. Non-x402 402 passthrough
|
|
60
|
+
* 6. Infinite loop guard
|
|
61
|
+
* 7. Decode + validate header
|
|
62
|
+
* 8. Select payment option with payTo allowlisting
|
|
63
|
+
* 9. Replay check
|
|
64
|
+
* 10. Amount sanity
|
|
65
|
+
* 11. Policy pre-check (does NOT record spend)
|
|
66
|
+
* 12. Dry-run exit point
|
|
67
|
+
* 13. Build TransferChecked instruction
|
|
68
|
+
* 14. Compose + sign transaction
|
|
69
|
+
* 15. Retry with PAYMENT-SIGNATURE header
|
|
70
|
+
* 16. Validate settlement response
|
|
71
|
+
* 17. Record spend, emit audit event, return response
|
|
72
|
+
*/
|
|
73
|
+
export async function shieldedFetch(signer, url, config, shieldCtx, rpc, fetchOptions) {
|
|
74
|
+
const startTime = Date.now();
|
|
75
|
+
const urlStr = url.toString();
|
|
76
|
+
const maxRetries = Math.min(Math.max(config?.maxRetries ?? 1, 1), 3);
|
|
77
|
+
const effectiveRpc = fetchOptions?.rpc ?? rpc;
|
|
78
|
+
// Step 0: Config warnings
|
|
79
|
+
if (!config?.allowedDestinations || config.allowedDestinations.size === 0) {
|
|
80
|
+
console.warn("[x402] No allowedDestinations configured — accepting all payTo destinations. " +
|
|
81
|
+
"Set X402Config.allowedDestinations for production use.");
|
|
82
|
+
}
|
|
83
|
+
// Step 1: URL protocol validation (HTTPS only unless test override)
|
|
84
|
+
if (!config?.allowInsecureUrls) {
|
|
85
|
+
if (!urlStr.startsWith("https://")) {
|
|
86
|
+
throw new X402PaymentError("Only HTTPS URLs are supported for x402 payments. " +
|
|
87
|
+
"Set allowInsecureUrls in X402Config for testing only.");
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
if (!urlStr.startsWith("https://") && !urlStr.startsWith("http://")) {
|
|
92
|
+
throw new X402PaymentError("Only HTTP/HTTPS URLs are supported for x402 payments");
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Build fetch init, stripping custom options
|
|
96
|
+
const init = { ...fetchOptions };
|
|
97
|
+
delete init.rpc;
|
|
98
|
+
delete init.dryRun;
|
|
99
|
+
delete init.maxPayment;
|
|
100
|
+
// Step 2: Initial fetch
|
|
101
|
+
const response = await globalThis.fetch(urlStr, init);
|
|
102
|
+
// Step 3: Non-402 passthrough
|
|
103
|
+
if (response.status !== 402) {
|
|
104
|
+
return response;
|
|
105
|
+
}
|
|
106
|
+
// Step 4: Extract PAYMENT-REQUIRED header (case-insensitive)
|
|
107
|
+
const paymentRequiredHeader = response.headers.get("payment-required") ??
|
|
108
|
+
response.headers.get("PAYMENT-REQUIRED");
|
|
109
|
+
// Step 5: Non-x402 402 passthrough
|
|
110
|
+
if (!paymentRequiredHeader) {
|
|
111
|
+
return response;
|
|
112
|
+
}
|
|
113
|
+
// Step 6: Infinite loop guard — reject if PAYMENT-SIGNATURE already sent
|
|
114
|
+
if (hasPaymentSignatureHeader(init.headers)) {
|
|
115
|
+
throw new X402PaymentError("Payment already attempted — refusing to retry to prevent infinite loops");
|
|
116
|
+
}
|
|
117
|
+
// Step 7: Decode + validate header
|
|
118
|
+
const paymentRequired = decodePaymentRequiredHeader(paymentRequiredHeader);
|
|
119
|
+
// Step 8: Select payment option with payTo allowlisting
|
|
120
|
+
const selected = selectPaymentOption(paymentRequired, config);
|
|
121
|
+
// Step 9: Replay check
|
|
122
|
+
if (config?.enableReplayProtection !== false) {
|
|
123
|
+
await globalNonceTracker.checkOrThrow(urlStr, selected.payTo, selected.amount);
|
|
124
|
+
}
|
|
125
|
+
// Step 10: Amount sanity
|
|
126
|
+
const parsedAmount = validatePaymentAmount(selected.amount, config);
|
|
127
|
+
// Override maxPayment from fetch options
|
|
128
|
+
if (fetchOptions?.maxPayment !== undefined &&
|
|
129
|
+
parsedAmount > fetchOptions.maxPayment) {
|
|
130
|
+
throw new X402PaymentError(`Server requires ${selected.amount} but maxPayment is ${fetchOptions.maxPayment}`);
|
|
131
|
+
}
|
|
132
|
+
// Step 11: Policy pre-check (does NOT record spend)
|
|
133
|
+
if (shieldCtx) {
|
|
134
|
+
const violations = evaluateX402Payment(selected, shieldCtx, config, signer.address);
|
|
135
|
+
if (violations.length > 0) {
|
|
136
|
+
const event = createPaymentEvent({
|
|
137
|
+
url: urlStr,
|
|
138
|
+
payTo: selected.payTo,
|
|
139
|
+
asset: selected.asset,
|
|
140
|
+
amount: selected.amount,
|
|
141
|
+
paid: false,
|
|
142
|
+
deniedReason: violations.join("; "),
|
|
143
|
+
startTime,
|
|
144
|
+
});
|
|
145
|
+
emitPaymentEvent(config, event);
|
|
146
|
+
throw new X402PaymentError(`x402 payment denied by policy: ${violations.join("; ")}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Step 12: Dry-run exit point
|
|
150
|
+
if (fetchOptions?.dryRun) {
|
|
151
|
+
const dryResponse = new Response(null, {
|
|
152
|
+
status: 402,
|
|
153
|
+
});
|
|
154
|
+
dryResponse.x402 = {
|
|
155
|
+
paid: false,
|
|
156
|
+
amountPaid: selected.amount,
|
|
157
|
+
asset: selected.asset,
|
|
158
|
+
payTo: selected.payTo,
|
|
159
|
+
};
|
|
160
|
+
return dryResponse;
|
|
161
|
+
}
|
|
162
|
+
// Step 13: Build TransferChecked instruction
|
|
163
|
+
if (!effectiveRpc) {
|
|
164
|
+
throw new X402PaymentError("RPC connection required for x402 payments. Pass rpc in options.");
|
|
165
|
+
}
|
|
166
|
+
const tokenInfo = resolveToken(selected.asset, "mainnet-beta");
|
|
167
|
+
const decimals = tokenInfo?.decimals ?? 6;
|
|
168
|
+
const transferIx = await buildX402TransferInstruction({
|
|
169
|
+
from: signer.address,
|
|
170
|
+
payTo: selected.payTo,
|
|
171
|
+
asset: selected.asset,
|
|
172
|
+
amount: parsedAmount,
|
|
173
|
+
decimals,
|
|
174
|
+
});
|
|
175
|
+
// Step 14: Compose + sign transaction using Kit pipe()
|
|
176
|
+
const { value: blockhashInfo } = await effectiveRpc
|
|
177
|
+
.getLatestBlockhash()
|
|
178
|
+
.send();
|
|
179
|
+
const txMessage = pipe(createTransactionMessage({ version: 0 }), (tx) => setTransactionMessageFeePayer(signer.address, tx), (tx) => setTransactionMessageLifetimeUsingBlockhash(blockhashInfo, tx), (tx) => appendTransactionMessageInstruction(transferIx, tx));
|
|
180
|
+
const compiledTx = compileTransaction(txMessage);
|
|
181
|
+
// Sign + encode using shared utility
|
|
182
|
+
const wireBase64 = await signAndEncode(signer, compiledTx);
|
|
183
|
+
// Extract client's expected TX signature from wire format
|
|
184
|
+
// Wire format: 1 byte (compact-u16 sig count) + 64 bytes (first signature)
|
|
185
|
+
let expectedTxSig;
|
|
186
|
+
try {
|
|
187
|
+
const wireBinary = atob(wireBase64);
|
|
188
|
+
if (wireBinary.length > 64) {
|
|
189
|
+
const sigBytes = new Uint8Array(64);
|
|
190
|
+
for (let i = 0; i < 64; i++)
|
|
191
|
+
sigBytes[i] = wireBinary.charCodeAt(i + 1);
|
|
192
|
+
expectedTxSig = getBase58Decoder().decode(sigBytes);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
// Non-fatal — sig extraction is for audit, not blocking
|
|
197
|
+
}
|
|
198
|
+
// Encode x402 payload
|
|
199
|
+
const encodedPayload = encodePaymentSignatureHeader({
|
|
200
|
+
x402Version: 2,
|
|
201
|
+
resource: paymentRequired.resource,
|
|
202
|
+
accepted: selected,
|
|
203
|
+
payload: { transaction: wireBase64 },
|
|
204
|
+
});
|
|
205
|
+
// Step 15: Retry with PAYMENT-SIGNATURE header
|
|
206
|
+
const retryHeaders = new Headers(init.headers);
|
|
207
|
+
retryHeaders.set("PAYMENT-SIGNATURE", encodedPayload);
|
|
208
|
+
let retryResponse = (await globalThis.fetch(urlStr, {
|
|
209
|
+
...init,
|
|
210
|
+
headers: retryHeaders,
|
|
211
|
+
}));
|
|
212
|
+
for (let attempt = 1; attempt < maxRetries &&
|
|
213
|
+
!(retryResponse.status >= 200 && retryResponse.status < 300); attempt++) {
|
|
214
|
+
retryResponse = (await globalThis.fetch(urlStr, {
|
|
215
|
+
...init,
|
|
216
|
+
headers: retryHeaders,
|
|
217
|
+
}));
|
|
218
|
+
}
|
|
219
|
+
// Step 16: Validate settlement response
|
|
220
|
+
const paymentResponseHeader = retryResponse.headers.get("payment-response") ??
|
|
221
|
+
retryResponse.headers.get("PAYMENT-RESPONSE");
|
|
222
|
+
let settlement;
|
|
223
|
+
if (paymentResponseHeader) {
|
|
224
|
+
try {
|
|
225
|
+
settlement = decodePaymentResponseHeader(paymentResponseHeader);
|
|
226
|
+
const verification = await validateSettlement(settlement);
|
|
227
|
+
if (verification.warnings.length > 0) {
|
|
228
|
+
console.warn("[x402] Settlement warnings:", verification.warnings);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
catch {
|
|
232
|
+
// Non-fatal — settlement data is optional
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// Settlement signature verification (D1: signature comparison)
|
|
236
|
+
if (expectedTxSig &&
|
|
237
|
+
settlement?.transaction &&
|
|
238
|
+
settlement.transaction !== expectedTxSig) {
|
|
239
|
+
emitPaymentEvent(config, createPaymentEvent({
|
|
240
|
+
url: urlStr,
|
|
241
|
+
payTo: selected.payTo,
|
|
242
|
+
asset: selected.asset,
|
|
243
|
+
amount: selected.amount,
|
|
244
|
+
paid: true,
|
|
245
|
+
deniedReason: `Settlement signature mismatch: expected ${expectedTxSig}, got ${settlement.transaction}`,
|
|
246
|
+
startTime,
|
|
247
|
+
}));
|
|
248
|
+
}
|
|
249
|
+
// Step 17: Record spend after on-chain confirmation (2.9.2 fix)
|
|
250
|
+
if (retryResponse.ok) {
|
|
251
|
+
if (config?.enableReplayProtection !== false) {
|
|
252
|
+
await globalNonceTracker.record(urlStr, selected.payTo, selected.amount);
|
|
253
|
+
}
|
|
254
|
+
recordPaymentAmount(parsedAmount);
|
|
255
|
+
// On-chain confirmation gate (2.9.2):
|
|
256
|
+
// confirmed → record spend
|
|
257
|
+
// failed → DON'T record (TX errored on-chain)
|
|
258
|
+
// timeout → record spend (defense-in-depth, can't confirm either way)
|
|
259
|
+
// disabled → record spend (confirmPayment: false)
|
|
260
|
+
let shouldRecordSpend = true;
|
|
261
|
+
if (config?.confirmPayment !== false &&
|
|
262
|
+
settlement?.transaction &&
|
|
263
|
+
effectiveRpc) {
|
|
264
|
+
const timeout = config?.confirmPaymentTimeoutMs ?? 10_000;
|
|
265
|
+
const status = await confirmSettlementOnChain(effectiveRpc, settlement.transaction, timeout);
|
|
266
|
+
if (status === "failed") {
|
|
267
|
+
shouldRecordSpend = false;
|
|
268
|
+
console.warn(`[x402] Payment TX ${settlement.transaction} failed on-chain — spend NOT recorded`);
|
|
269
|
+
}
|
|
270
|
+
else if (status === "timeout") {
|
|
271
|
+
console.warn(`[x402] Payment TX ${settlement.transaction} not confirmed within ${timeout}ms — recording spend (defense-in-depth)`);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
if (shieldCtx && shouldRecordSpend) {
|
|
275
|
+
recordX402Spend(shieldCtx, selected.asset, parsedAmount);
|
|
276
|
+
}
|
|
277
|
+
const event = createPaymentEvent({
|
|
278
|
+
url: urlStr,
|
|
279
|
+
payTo: selected.payTo,
|
|
280
|
+
asset: selected.asset,
|
|
281
|
+
amount: selected.amount,
|
|
282
|
+
paid: true,
|
|
283
|
+
settlement,
|
|
284
|
+
startTime,
|
|
285
|
+
nonce: NonceTracker.buildKey(urlStr, selected.payTo, selected.amount),
|
|
286
|
+
});
|
|
287
|
+
emitPaymentEvent(config, event);
|
|
288
|
+
retryResponse.x402 = {
|
|
289
|
+
paid: true,
|
|
290
|
+
amountPaid: selected.amount,
|
|
291
|
+
asset: selected.asset,
|
|
292
|
+
payTo: selected.payTo,
|
|
293
|
+
settlement,
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
const failEvent = createPaymentEvent({
|
|
298
|
+
url: urlStr,
|
|
299
|
+
payTo: selected.payTo,
|
|
300
|
+
asset: selected.asset,
|
|
301
|
+
amount: selected.amount,
|
|
302
|
+
paid: false,
|
|
303
|
+
deniedReason: `Server returned ${retryResponse.status} after payment attempt`,
|
|
304
|
+
startTime,
|
|
305
|
+
});
|
|
306
|
+
emitPaymentEvent(config, failEvent);
|
|
307
|
+
retryResponse.x402 = {
|
|
308
|
+
paid: false,
|
|
309
|
+
amountPaid: selected.amount,
|
|
310
|
+
asset: selected.asset,
|
|
311
|
+
payTo: selected.payTo,
|
|
312
|
+
settlement,
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
return retryResponse;
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Create a wallet-bound fetch function with automatic x402 payment support.
|
|
319
|
+
*
|
|
320
|
+
* @example
|
|
321
|
+
* ```typescript
|
|
322
|
+
* const fetch402 = createShieldedFetch(signer, config, shieldCtx, rpc);
|
|
323
|
+
* const res = await fetch402('https://api.example.com/paid-endpoint');
|
|
324
|
+
* ```
|
|
325
|
+
*/
|
|
326
|
+
export function createShieldedFetch(signer, config, shieldCtx, rpc) {
|
|
327
|
+
return (url, init) => shieldedFetch(signer, url, config, shieldCtx, rpc, init);
|
|
328
|
+
}
|
|
329
|
+
// ─── Internal Helpers ───────────────────────────────────────────────────────
|
|
330
|
+
function hasPaymentSignatureHeader(headers) {
|
|
331
|
+
if (!headers)
|
|
332
|
+
return false;
|
|
333
|
+
if (headers instanceof Headers) {
|
|
334
|
+
return headers.has("PAYMENT-SIGNATURE") || headers.has("payment-signature");
|
|
335
|
+
}
|
|
336
|
+
if (Array.isArray(headers)) {
|
|
337
|
+
return headers.some(([k]) => k.toLowerCase() === "payment-signature");
|
|
338
|
+
}
|
|
339
|
+
const rec = headers;
|
|
340
|
+
return Object.keys(rec).some((k) => k.toLowerCase() === "payment-signature");
|
|
341
|
+
}
|
|
342
|
+
//# sourceMappingURL=shielded-fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shielded-fetch.js","sourceRoot":"","sources":["../../src/x402/shielded-fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* x402 Transfer Builder — Kit-native
|
|
3
|
+
*
|
|
4
|
+
* Builds SPL TransferChecked instructions from raw bytes.
|
|
5
|
+
* Zero dependency on @solana-program/token — the instruction is 10 bytes
|
|
6
|
+
* of data + 4 accounts, trivial to encode directly.
|
|
7
|
+
*/
|
|
8
|
+
import type { Address, Instruction } from "@solana/kit";
|
|
9
|
+
import type { InspectableInstruction } from "../inspector.js";
|
|
10
|
+
export declare const TOKEN_PROGRAM_ID: Address;
|
|
11
|
+
export declare const ATA_PROGRAM_ID: Address;
|
|
12
|
+
/**
|
|
13
|
+
* Derive an Associated Token Account address.
|
|
14
|
+
* Seeds: [owner, TOKEN_PROGRAM_ID, mint]
|
|
15
|
+
*/
|
|
16
|
+
export declare function deriveAta(owner: Address, mint: Address): Promise<Address>;
|
|
17
|
+
/**
|
|
18
|
+
* Build an SPL TransferChecked instruction for an x402 payment.
|
|
19
|
+
*
|
|
20
|
+
* Instruction data layout:
|
|
21
|
+
* [0]: 12 (TransferChecked discriminator)
|
|
22
|
+
* [1-8]: amount as u64 LE
|
|
23
|
+
* [9]: decimals
|
|
24
|
+
*
|
|
25
|
+
* Accounts:
|
|
26
|
+
* 0: source ATA (writable)
|
|
27
|
+
* 1: mint (readonly)
|
|
28
|
+
* 2: destination ATA (writable)
|
|
29
|
+
* 3: authority/owner (signer)
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildX402TransferInstruction(params: {
|
|
32
|
+
from: Address;
|
|
33
|
+
payTo: Address;
|
|
34
|
+
asset: Address;
|
|
35
|
+
amount: bigint;
|
|
36
|
+
decimals: number;
|
|
37
|
+
}): Promise<Instruction>;
|
|
38
|
+
/**
|
|
39
|
+
* Convert a built transfer instruction to an InspectableInstruction
|
|
40
|
+
* for Shield policy evaluation.
|
|
41
|
+
*/
|
|
42
|
+
export declare function transferToInspectable(ix: Instruction): InspectableInstruction;
|
|
43
|
+
//# sourceMappingURL=transfer-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer-builder.d.ts","sourceRoot":"","sources":["../../src/x402/transfer-builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAI9D,eAAO,MAAM,gBAAgB,EACsB,OAAO,CAAC;AAC3D,eAAO,MAAM,cAAc,EACyB,OAAO,CAAC;AAO5D;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,OAAO,CAAC,CAalB;AAkBD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,4BAA4B,CAAC,MAAM,EAAE;IACzD,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,WAAW,CAAC,CA0BvB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,WAAW,GAAG,sBAAsB,CAM7E"}
|