xrpjson 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 +21 -0
- package/README.md +183 -0
- package/dist/errors.d.ts +20 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +27 -0
- package/dist/errors.js.map +1 -0
- package/dist/fp/factories/account-delete.d.ts +33 -0
- package/dist/fp/factories/account-delete.d.ts.map +1 -0
- package/dist/fp/factories/account-delete.js +138 -0
- package/dist/fp/factories/account-delete.js.map +1 -0
- package/dist/fp/factories/account-set.d.ts +31 -0
- package/dist/fp/factories/account-set.d.ts.map +1 -0
- package/dist/fp/factories/account-set.js +44 -0
- package/dist/fp/factories/account-set.js.map +1 -0
- package/dist/fp/factories/amm-bid.d.ts +134 -0
- package/dist/fp/factories/amm-bid.d.ts.map +1 -0
- package/dist/fp/factories/amm-bid.js +82 -0
- package/dist/fp/factories/amm-bid.js.map +1 -0
- package/dist/fp/factories/amm-clawback.d.ts +166 -0
- package/dist/fp/factories/amm-clawback.d.ts.map +1 -0
- package/dist/fp/factories/amm-clawback.js +143 -0
- package/dist/fp/factories/amm-clawback.js.map +1 -0
- package/dist/fp/factories/amm-create.d.ts +91 -0
- package/dist/fp/factories/amm-create.d.ts.map +1 -0
- package/dist/fp/factories/amm-create.js +140 -0
- package/dist/fp/factories/amm-create.js.map +1 -0
- package/dist/fp/factories/amm-delete.d.ts +84 -0
- package/dist/fp/factories/amm-delete.d.ts.map +1 -0
- package/dist/fp/factories/amm-delete.js +36 -0
- package/dist/fp/factories/amm-delete.js.map +1 -0
- package/dist/fp/factories/amm-deposit.d.ts +109 -0
- package/dist/fp/factories/amm-deposit.d.ts.map +1 -0
- package/dist/fp/factories/amm-deposit.js +68 -0
- package/dist/fp/factories/amm-deposit.js.map +1 -0
- package/dist/fp/factories/amm-vote.d.ts +87 -0
- package/dist/fp/factories/amm-vote.d.ts.map +1 -0
- package/dist/fp/factories/amm-vote.js +53 -0
- package/dist/fp/factories/amm-vote.js.map +1 -0
- package/dist/fp/factories/amm-withdraw.d.ts +131 -0
- package/dist/fp/factories/amm-withdraw.d.ts.map +1 -0
- package/dist/fp/factories/amm-withdraw.js +147 -0
- package/dist/fp/factories/amm-withdraw.js.map +1 -0
- package/dist/fp/factories/batch.d.ts +133 -0
- package/dist/fp/factories/batch.d.ts.map +1 -0
- package/dist/fp/factories/batch.js +264 -0
- package/dist/fp/factories/batch.js.map +1 -0
- package/dist/fp/factories/check-cancel.d.ts +22 -0
- package/dist/fp/factories/check-cancel.d.ts.map +1 -0
- package/dist/fp/factories/check-cancel.js +119 -0
- package/dist/fp/factories/check-cancel.js.map +1 -0
- package/dist/fp/factories/check-cash.d.ts +84 -0
- package/dist/fp/factories/check-cash.d.ts.map +1 -0
- package/dist/fp/factories/check-cash.js +95 -0
- package/dist/fp/factories/check-cash.js.map +1 -0
- package/dist/fp/factories/check-create.d.ts +82 -0
- package/dist/fp/factories/check-create.d.ts.map +1 -0
- package/dist/fp/factories/check-create.js +101 -0
- package/dist/fp/factories/check-create.js.map +1 -0
- package/dist/fp/factories/clawback.d.ts +160 -0
- package/dist/fp/factories/clawback.d.ts.map +1 -0
- package/dist/fp/factories/clawback.js +111 -0
- package/dist/fp/factories/clawback.js.map +1 -0
- package/dist/fp/factories/confidential-mpt-clawback.d.ts +24 -0
- package/dist/fp/factories/confidential-mpt-clawback.d.ts.map +1 -0
- package/dist/fp/factories/confidential-mpt-clawback.js +200 -0
- package/dist/fp/factories/confidential-mpt-clawback.js.map +1 -0
- package/dist/fp/factories/confidential-mpt-convert-back.d.ts +32 -0
- package/dist/fp/factories/confidential-mpt-convert-back.d.ts.map +1 -0
- package/dist/fp/factories/confidential-mpt-convert-back.js +203 -0
- package/dist/fp/factories/confidential-mpt-convert-back.js.map +1 -0
- package/dist/fp/factories/confidential-mpt-convert.d.ts +32 -0
- package/dist/fp/factories/confidential-mpt-convert.d.ts.map +1 -0
- package/dist/fp/factories/confidential-mpt-convert.js +209 -0
- package/dist/fp/factories/confidential-mpt-convert.js.map +1 -0
- package/dist/fp/factories/confidential-mpt-merge-inbox.d.ts +18 -0
- package/dist/fp/factories/confidential-mpt-merge-inbox.d.ts.map +1 -0
- package/dist/fp/factories/confidential-mpt-merge-inbox.js +130 -0
- package/dist/fp/factories/confidential-mpt-merge-inbox.js.map +1 -0
- package/dist/fp/factories/confidential-mpt-send.d.ts +38 -0
- package/dist/fp/factories/confidential-mpt-send.d.ts.map +1 -0
- package/dist/fp/factories/confidential-mpt-send.js +254 -0
- package/dist/fp/factories/confidential-mpt-send.js.map +1 -0
- package/dist/fp/factories/credential-accept.d.ts +23 -0
- package/dist/fp/factories/credential-accept.d.ts.map +1 -0
- package/dist/fp/factories/credential-accept.js +135 -0
- package/dist/fp/factories/credential-accept.js.map +1 -0
- package/dist/fp/factories/credential-create.d.ts +24 -0
- package/dist/fp/factories/credential-create.d.ts.map +1 -0
- package/dist/fp/factories/credential-create.js +204 -0
- package/dist/fp/factories/credential-create.js.map +1 -0
- package/dist/fp/factories/credential-delete.d.ts +33 -0
- package/dist/fp/factories/credential-delete.d.ts.map +1 -0
- package/dist/fp/factories/credential-delete.js +167 -0
- package/dist/fp/factories/credential-delete.js.map +1 -0
- package/dist/fp/factories/delegate-set.d.ts +52 -0
- package/dist/fp/factories/delegate-set.d.ts.map +1 -0
- package/dist/fp/factories/delegate-set.js +190 -0
- package/dist/fp/factories/delegate-set.js.map +1 -0
- package/dist/fp/factories/deposit-preauth.d.ts +183 -0
- package/dist/fp/factories/deposit-preauth.d.ts.map +1 -0
- package/dist/fp/factories/deposit-preauth.js +159 -0
- package/dist/fp/factories/deposit-preauth.js.map +1 -0
- package/dist/fp/factories/did-delete.d.ts +22 -0
- package/dist/fp/factories/did-delete.d.ts.map +1 -0
- package/dist/fp/factories/did-delete.js +126 -0
- package/dist/fp/factories/did-delete.js.map +1 -0
- package/dist/fp/factories/did-set.d.ts +68 -0
- package/dist/fp/factories/did-set.d.ts.map +1 -0
- package/dist/fp/factories/did-set.js +178 -0
- package/dist/fp/factories/did-set.js.map +1 -0
- package/dist/fp/factories/escrow-cancel.d.ts +28 -0
- package/dist/fp/factories/escrow-cancel.d.ts.map +1 -0
- package/dist/fp/factories/escrow-cancel.js +127 -0
- package/dist/fp/factories/escrow-cancel.js.map +1 -0
- package/dist/fp/factories/escrow-create.d.ts +103 -0
- package/dist/fp/factories/escrow-create.d.ts.map +1 -0
- package/dist/fp/factories/escrow-create.js +133 -0
- package/dist/fp/factories/escrow-create.js.map +1 -0
- package/dist/fp/factories/escrow-finish.d.ts +39 -0
- package/dist/fp/factories/escrow-finish.d.ts.map +1 -0
- package/dist/fp/factories/escrow-finish.js +173 -0
- package/dist/fp/factories/escrow-finish.js.map +1 -0
- package/dist/fp/factories/ledger-state-fix.d.ts +31 -0
- package/dist/fp/factories/ledger-state-fix.d.ts.map +1 -0
- package/dist/fp/factories/ledger-state-fix.js +163 -0
- package/dist/fp/factories/ledger-state-fix.js.map +1 -0
- package/dist/fp/factories/loan-broker-cover-clawback.d.ts +106 -0
- package/dist/fp/factories/loan-broker-cover-clawback.d.ts.map +1 -0
- package/dist/fp/factories/loan-broker-cover-clawback.js +122 -0
- package/dist/fp/factories/loan-broker-cover-clawback.js.map +1 -0
- package/dist/fp/factories/loan-broker-cover-deposit.d.ts +65 -0
- package/dist/fp/factories/loan-broker-cover-deposit.d.ts.map +1 -0
- package/dist/fp/factories/loan-broker-cover-deposit.js +81 -0
- package/dist/fp/factories/loan-broker-cover-deposit.js.map +1 -0
- package/dist/fp/factories/loan-broker-cover-withdraw.d.ts +96 -0
- package/dist/fp/factories/loan-broker-cover-withdraw.d.ts.map +1 -0
- package/dist/fp/factories/loan-broker-cover-withdraw.js +116 -0
- package/dist/fp/factories/loan-broker-cover-withdraw.js.map +1 -0
- package/dist/fp/factories/loan-broker-delete.d.ts +20 -0
- package/dist/fp/factories/loan-broker-delete.d.ts.map +1 -0
- package/dist/fp/factories/loan-broker-delete.js +94 -0
- package/dist/fp/factories/loan-broker-delete.js.map +1 -0
- package/dist/fp/factories/loan-broker-set.d.ts +108 -0
- package/dist/fp/factories/loan-broker-set.d.ts.map +1 -0
- package/dist/fp/factories/loan-broker-set.js +133 -0
- package/dist/fp/factories/loan-broker-set.js.map +1 -0
- package/dist/fp/factories/loan-delete.d.ts +18 -0
- package/dist/fp/factories/loan-delete.d.ts.map +1 -0
- package/dist/fp/factories/loan-delete.js +95 -0
- package/dist/fp/factories/loan-delete.js.map +1 -0
- package/dist/fp/factories/loan-manage.d.ts +72 -0
- package/dist/fp/factories/loan-manage.d.ts.map +1 -0
- package/dist/fp/factories/loan-manage.js +79 -0
- package/dist/fp/factories/loan-manage.js.map +1 -0
- package/dist/fp/factories/loan-pay.d.ts +70 -0
- package/dist/fp/factories/loan-pay.d.ts.map +1 -0
- package/dist/fp/factories/loan-pay.js +115 -0
- package/dist/fp/factories/loan-pay.js.map +1 -0
- package/dist/fp/factories/loan-set.d.ts +67 -0
- package/dist/fp/factories/loan-set.d.ts.map +1 -0
- package/dist/fp/factories/loan-set.js +102 -0
- package/dist/fp/factories/loan-set.js.map +1 -0
- package/dist/fp/factories/mptoken-authorize.d.ts +83 -0
- package/dist/fp/factories/mptoken-authorize.d.ts.map +1 -0
- package/dist/fp/factories/mptoken-authorize.js +63 -0
- package/dist/fp/factories/mptoken-authorize.js.map +1 -0
- package/dist/fp/factories/mptoken-issuance-create.d.ts +71 -0
- package/dist/fp/factories/mptoken-issuance-create.d.ts.map +1 -0
- package/dist/fp/factories/mptoken-issuance-create.js +135 -0
- package/dist/fp/factories/mptoken-issuance-create.js.map +1 -0
- package/dist/fp/factories/mptoken-issuance-destroy.d.ts +32 -0
- package/dist/fp/factories/mptoken-issuance-destroy.d.ts.map +1 -0
- package/dist/fp/factories/mptoken-issuance-destroy.js +105 -0
- package/dist/fp/factories/mptoken-issuance-destroy.js.map +1 -0
- package/dist/fp/factories/mptoken-issuance-set.d.ts +196 -0
- package/dist/fp/factories/mptoken-issuance-set.d.ts.map +1 -0
- package/dist/fp/factories/mptoken-issuance-set.js +333 -0
- package/dist/fp/factories/mptoken-issuance-set.js.map +1 -0
- package/dist/fp/factories/nftoken-accept-offer.d.ts +108 -0
- package/dist/fp/factories/nftoken-accept-offer.d.ts.map +1 -0
- package/dist/fp/factories/nftoken-accept-offer.js +105 -0
- package/dist/fp/factories/nftoken-accept-offer.js.map +1 -0
- package/dist/fp/factories/nftoken-burn.d.ts +27 -0
- package/dist/fp/factories/nftoken-burn.d.ts.map +1 -0
- package/dist/fp/factories/nftoken-burn.js +125 -0
- package/dist/fp/factories/nftoken-burn.js.map +1 -0
- package/dist/fp/factories/nftoken-cancel-offer.d.ts +19 -0
- package/dist/fp/factories/nftoken-cancel-offer.d.ts.map +1 -0
- package/dist/fp/factories/nftoken-cancel-offer.js +143 -0
- package/dist/fp/factories/nftoken-cancel-offer.js.map +1 -0
- package/dist/fp/factories/nftoken-create-offer.d.ts +159 -0
- package/dist/fp/factories/nftoken-create-offer.d.ts.map +1 -0
- package/dist/fp/factories/nftoken-create-offer.js +212 -0
- package/dist/fp/factories/nftoken-create-offer.js.map +1 -0
- package/dist/fp/factories/nftoken-mint.d.ts +155 -0
- package/dist/fp/factories/nftoken-mint.d.ts.map +1 -0
- package/dist/fp/factories/nftoken-mint.js +165 -0
- package/dist/fp/factories/nftoken-mint.js.map +1 -0
- package/dist/fp/factories/nftoken-modify.d.ts +28 -0
- package/dist/fp/factories/nftoken-modify.d.ts.map +1 -0
- package/dist/fp/factories/nftoken-modify.js +209 -0
- package/dist/fp/factories/nftoken-modify.js.map +1 -0
- package/dist/fp/factories/offer-cancel.d.ts +21 -0
- package/dist/fp/factories/offer-cancel.d.ts.map +1 -0
- package/dist/fp/factories/offer-cancel.js +99 -0
- package/dist/fp/factories/offer-cancel.js.map +1 -0
- package/dist/fp/factories/offer-create.d.ts +125 -0
- package/dist/fp/factories/offer-create.d.ts.map +1 -0
- package/dist/fp/factories/offer-create.js +230 -0
- package/dist/fp/factories/offer-create.js.map +1 -0
- package/dist/fp/factories/oracle-delete.d.ts +21 -0
- package/dist/fp/factories/oracle-delete.d.ts.map +1 -0
- package/dist/fp/factories/oracle-delete.js +101 -0
- package/dist/fp/factories/oracle-delete.js.map +1 -0
- package/dist/fp/factories/oracle-set.d.ts +40 -0
- package/dist/fp/factories/oracle-set.d.ts.map +1 -0
- package/dist/fp/factories/oracle-set.js +257 -0
- package/dist/fp/factories/oracle-set.js.map +1 -0
- package/dist/fp/factories/payment-channel-claim.d.ts +153 -0
- package/dist/fp/factories/payment-channel-claim.d.ts.map +1 -0
- package/dist/fp/factories/payment-channel-claim.js +118 -0
- package/dist/fp/factories/payment-channel-claim.js.map +1 -0
- package/dist/fp/factories/payment-channel-create.d.ts +30 -0
- package/dist/fp/factories/payment-channel-create.d.ts.map +1 -0
- package/dist/fp/factories/payment-channel-create.js +172 -0
- package/dist/fp/factories/payment-channel-create.js.map +1 -0
- package/dist/fp/factories/payment-channel-fund.d.ts +25 -0
- package/dist/fp/factories/payment-channel-fund.d.ts.map +1 -0
- package/dist/fp/factories/payment-channel-fund.js +142 -0
- package/dist/fp/factories/payment-channel-fund.js.map +1 -0
- package/dist/fp/factories/payment.d.ts +65 -0
- package/dist/fp/factories/payment.d.ts.map +1 -0
- package/dist/fp/factories/payment.js +48 -0
- package/dist/fp/factories/payment.js.map +1 -0
- package/dist/fp/factories/permissioned-domain-delete.d.ts +18 -0
- package/dist/fp/factories/permissioned-domain-delete.d.ts.map +1 -0
- package/dist/fp/factories/permissioned-domain-delete.js +88 -0
- package/dist/fp/factories/permissioned-domain-delete.js.map +1 -0
- package/dist/fp/factories/permissioned-domain-set.d.ts +118 -0
- package/dist/fp/factories/permissioned-domain-set.d.ts.map +1 -0
- package/dist/fp/factories/permissioned-domain-set.js +100 -0
- package/dist/fp/factories/permissioned-domain-set.js.map +1 -0
- package/dist/fp/factories/set-regular-key.d.ts +30 -0
- package/dist/fp/factories/set-regular-key.d.ts.map +1 -0
- package/dist/fp/factories/set-regular-key.js +81 -0
- package/dist/fp/factories/set-regular-key.js.map +1 -0
- package/dist/fp/factories/signer-list-set.d.ts +61 -0
- package/dist/fp/factories/signer-list-set.d.ts.map +1 -0
- package/dist/fp/factories/signer-list-set.js +250 -0
- package/dist/fp/factories/signer-list-set.js.map +1 -0
- package/dist/fp/factories/sponsorship-set.d.ts +148 -0
- package/dist/fp/factories/sponsorship-set.d.ts.map +1 -0
- package/dist/fp/factories/sponsorship-set.js +201 -0
- package/dist/fp/factories/sponsorship-set.js.map +1 -0
- package/dist/fp/factories/sponsorship-transfer.d.ts +173 -0
- package/dist/fp/factories/sponsorship-transfer.d.ts.map +1 -0
- package/dist/fp/factories/sponsorship-transfer.js +195 -0
- package/dist/fp/factories/sponsorship-transfer.js.map +1 -0
- package/dist/fp/factories/ticket-create.d.ts +20 -0
- package/dist/fp/factories/ticket-create.d.ts.map +1 -0
- package/dist/fp/factories/ticket-create.js +120 -0
- package/dist/fp/factories/ticket-create.js.map +1 -0
- package/dist/fp/factories/trust-set.d.ts +100 -0
- package/dist/fp/factories/trust-set.d.ts.map +1 -0
- package/dist/fp/factories/trust-set.js +111 -0
- package/dist/fp/factories/trust-set.js.map +1 -0
- package/dist/fp/factories/vault-clawback.d.ts +83 -0
- package/dist/fp/factories/vault-clawback.d.ts.map +1 -0
- package/dist/fp/factories/vault-clawback.js +91 -0
- package/dist/fp/factories/vault-clawback.js.map +1 -0
- package/dist/fp/factories/vault-create.d.ts +51 -0
- package/dist/fp/factories/vault-create.d.ts.map +1 -0
- package/dist/fp/factories/vault-create.js +141 -0
- package/dist/fp/factories/vault-create.js.map +1 -0
- package/dist/fp/factories/vault-delete.d.ts +20 -0
- package/dist/fp/factories/vault-delete.d.ts.map +1 -0
- package/dist/fp/factories/vault-delete.js +103 -0
- package/dist/fp/factories/vault-delete.js.map +1 -0
- package/dist/fp/factories/vault-deposit.d.ts +56 -0
- package/dist/fp/factories/vault-deposit.d.ts.map +1 -0
- package/dist/fp/factories/vault-deposit.js +85 -0
- package/dist/fp/factories/vault-deposit.js.map +1 -0
- package/dist/fp/factories/vault-set.d.ts +32 -0
- package/dist/fp/factories/vault-set.d.ts.map +1 -0
- package/dist/fp/factories/vault-set.js +135 -0
- package/dist/fp/factories/vault-set.js.map +1 -0
- package/dist/fp/factories/vault-withdraw.d.ts +82 -0
- package/dist/fp/factories/vault-withdraw.d.ts.map +1 -0
- package/dist/fp/factories/vault-withdraw.js +122 -0
- package/dist/fp/factories/vault-withdraw.js.map +1 -0
- package/dist/fp/factories/xchain-account-create-commit.d.ts +180 -0
- package/dist/fp/factories/xchain-account-create-commit.d.ts.map +1 -0
- package/dist/fp/factories/xchain-account-create-commit.js +99 -0
- package/dist/fp/factories/xchain-account-create-commit.js.map +1 -0
- package/dist/fp/factories/xchain-add-account-create-attestation.d.ts +213 -0
- package/dist/fp/factories/xchain-add-account-create-attestation.d.ts.map +1 -0
- package/dist/fp/factories/xchain-add-account-create-attestation.js +95 -0
- package/dist/fp/factories/xchain-add-account-create-attestation.js.map +1 -0
- package/dist/fp/factories/xchain-add-claim-attestation.d.ts +206 -0
- package/dist/fp/factories/xchain-add-claim-attestation.d.ts.map +1 -0
- package/dist/fp/factories/xchain-add-claim-attestation.js +97 -0
- package/dist/fp/factories/xchain-add-claim-attestation.js.map +1 -0
- package/dist/fp/factories/xchain-claim.d.ts +187 -0
- package/dist/fp/factories/xchain-claim.d.ts.map +1 -0
- package/dist/fp/factories/xchain-claim.js +140 -0
- package/dist/fp/factories/xchain-claim.js.map +1 -0
- package/dist/fp/factories/xchain-commit.d.ts +168 -0
- package/dist/fp/factories/xchain-commit.d.ts.map +1 -0
- package/dist/fp/factories/xchain-commit.js +137 -0
- package/dist/fp/factories/xchain-commit.js.map +1 -0
- package/dist/fp/factories/xchain-create-bridge.d.ts +206 -0
- package/dist/fp/factories/xchain-create-bridge.d.ts.map +1 -0
- package/dist/fp/factories/xchain-create-bridge.js +100 -0
- package/dist/fp/factories/xchain-create-bridge.js.map +1 -0
- package/dist/fp/factories/xchain-create-claim-id.d.ts +199 -0
- package/dist/fp/factories/xchain-create-claim-id.d.ts.map +1 -0
- package/dist/fp/factories/xchain-create-claim-id.js +78 -0
- package/dist/fp/factories/xchain-create-claim-id.js.map +1 -0
- package/dist/fp/factories/xchain-modify-bridge.d.ts +198 -0
- package/dist/fp/factories/xchain-modify-bridge.d.ts.map +1 -0
- package/dist/fp/factories/xchain-modify-bridge.js +102 -0
- package/dist/fp/factories/xchain-modify-bridge.js.map +1 -0
- package/dist/fp/index.d.ts +124 -0
- package/dist/fp/index.d.ts.map +1 -0
- package/dist/fp/index.js +152 -0
- package/dist/fp/index.js.map +1 -0
- package/dist/fp/shape.d.ts +34 -0
- package/dist/fp/shape.d.ts.map +1 -0
- package/dist/fp/shape.js +80 -0
- package/dist/fp/shape.js.map +1 -0
- package/dist/types/amounts.d.ts +49 -0
- package/dist/types/amounts.d.ts.map +1 -0
- package/dist/types/amounts.js +8 -0
- package/dist/types/amounts.js.map +1 -0
- package/dist/types/base.d.ts +103 -0
- package/dist/types/base.d.ts.map +1 -0
- package/dist/types/base.js +2 -0
- package/dist/types/base.js.map +1 -0
- package/dist/types/common.d.ts +163 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +5 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/flags.d.ts +317 -0
- package/dist/types/flags.d.ts.map +1 -0
- package/dist/types/flags.js +253 -0
- package/dist/types/flags.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/transaction-types.d.ts +7 -0
- package/dist/types/transaction-types.d.ts.map +1 -0
- package/dist/types/transaction-types.js +2 -0
- package/dist/types/transaction-types.js.map +1 -0
- package/dist/validation/base.d.ts +8 -0
- package/dist/validation/base.d.ts.map +1 -0
- package/dist/validation/base.js +79 -0
- package/dist/validation/base.js.map +1 -0
- package/dist/validation/helpers.d.ts +42 -0
- package/dist/validation/helpers.d.ts.map +1 -0
- package/dist/validation/helpers.js +154 -0
- package/dist/validation/helpers.js.map +1 -0
- package/dist/validation/index.d.ts +3 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +3 -0
- package/dist/validation/index.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-delete.js","sourceRoot":"","sources":["../../../src/fp/factories/vault-delete.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Functional VaultDeposit factory — frozen-object style.
|
|
3
|
+
*
|
|
4
|
+
* Deposits assets into a vault in exchange for vault shares. Validation
|
|
5
|
+
* happens at construction; there is no way to construct an invalid tx.
|
|
6
|
+
*
|
|
7
|
+
* import { vaultDeposit } from 'xrplt/fp';
|
|
8
|
+
* const tx = vaultDeposit({ Account, VaultID, Amount });
|
|
9
|
+
* const j = tx.toJSON();
|
|
10
|
+
* const tx2 = tx.with({ Amount: '5000000' });
|
|
11
|
+
*
|
|
12
|
+
* Affected amendments:
|
|
13
|
+
* - `SingleAssetVault` (base VaultDeposit)
|
|
14
|
+
* - `LendingProtocolV1_1` (deposit phase gating on closed-ended vaults;
|
|
15
|
+
* see XLS-65 §3.5.2.2 check 15 — runtime phase is not locally checkable)
|
|
16
|
+
*
|
|
17
|
+
* @see https://xrpl.org/docs/references/protocol/transactions/types/vaultdeposit
|
|
18
|
+
* @see https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0065-single-asset-vault
|
|
19
|
+
*
|
|
20
|
+
* ## Divergences
|
|
21
|
+
* The factory enforces two preclaim checks that the class API
|
|
22
|
+
* (`src/transactions/vault-deposit.ts`) skips:
|
|
23
|
+
*
|
|
24
|
+
* 1. `VaultID` must not be the all-zeros HASH256 value.
|
|
25
|
+
* Source: XLS-65 §3.5.2.1 check 1 — "The `VaultID` field is zero
|
|
26
|
+
* (`temMALFORMED`)". xrpl.js only requires it to be a string.
|
|
27
|
+
*
|
|
28
|
+
* 2. `Amount` must be strictly positive (non-zero, non-negative) in
|
|
29
|
+
* all three forms (XRP drops string, `IssuedCurrencyAmount.value`,
|
|
30
|
+
* `MPTAmount.value`).
|
|
31
|
+
* Source: XLS-65 §3.5.2.1 check 2 — "The `Amount` field is zero or
|
|
32
|
+
* negative (`temBAD_AMOUNT`)". xrpl.js `isAmount` accepts any
|
|
33
|
+
* numeric string and does not check the sign of the `value`
|
|
34
|
+
* sub-field of object amounts.
|
|
35
|
+
*/
|
|
36
|
+
import type { Amount, MPTAmount } from '../../types/amounts.js';
|
|
37
|
+
export interface VaultDepositProps {
|
|
38
|
+
/** The unique address of the transaction sender. */
|
|
39
|
+
Account: string;
|
|
40
|
+
/** The ID of the vault to deposit into. 64-char hex. */
|
|
41
|
+
VaultID: string;
|
|
42
|
+
/** Asset amount to deposit (XRP / trust line / MPT form). */
|
|
43
|
+
Amount: Amount | MPTAmount;
|
|
44
|
+
/** Bit-flags for this transaction. VaultDeposit has no defined flags. */
|
|
45
|
+
Flags?: number | undefined;
|
|
46
|
+
Fee?: string | undefined;
|
|
47
|
+
Sequence?: number | undefined;
|
|
48
|
+
}
|
|
49
|
+
export interface VaultDeposit extends Readonly<VaultDepositProps> {
|
|
50
|
+
readonly TransactionType: 'VaultDeposit';
|
|
51
|
+
validate(): void;
|
|
52
|
+
toJSON(): Record<string, unknown>;
|
|
53
|
+
with(overrides: Partial<VaultDepositProps>): VaultDeposit;
|
|
54
|
+
}
|
|
55
|
+
export declare function vaultDeposit(props: VaultDepositProps): VaultDeposit;
|
|
56
|
+
//# sourceMappingURL=vault-deposit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-deposit.d.ts","sourceRoot":"","sources":["../../../src/fp/factories/vault-deposit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAehE,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,YAAa,SAAQ,QAAQ,CAAC,iBAAiB,CAAC;IAC/D,QAAQ,CAAC,eAAe,EAAE,cAAc,CAAC;IACzC,QAAQ,IAAI,IAAI,CAAC;IACjB,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,YAAY,CAAC;CAC3D;AAsCD,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAuDnE"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { isAmount, isHex, isString } from '../../validation/helpers.js';
|
|
2
|
+
import { ValidationError } from '../../errors.js';
|
|
3
|
+
import { buildFrozenTx, mergeForWith } from '../shape.js';
|
|
4
|
+
// ─── Spec constants ──────────────────────────────────────────────────
|
|
5
|
+
// A HASH256 is 32 bytes = 64 hex chars.
|
|
6
|
+
const VAULT_ID_LENGTH = 64;
|
|
7
|
+
// All-zeros HASH256 is reserved / malformed per spec.
|
|
8
|
+
const VAULT_ID_ZERO = '0000000000000000000000000000000000000000000000000000000000000000';
|
|
9
|
+
// ─── Helpers ─────────────────────────────────────────────────────────
|
|
10
|
+
/**
|
|
11
|
+
* Per XLS-65 §3.5.2.1 check 2: "The `Amount` field is zero or negative
|
|
12
|
+
* (`temBAD_AMOUNT`)." Validates the sign of an Amount in all three
|
|
13
|
+
* accepted forms.
|
|
14
|
+
*
|
|
15
|
+
* - XRP form: a decimal-string of drops (e.g. "1000000").
|
|
16
|
+
* - IssuedCurrency form: object with a `value` sub-string.
|
|
17
|
+
* - MPT form: object with a `value` sub-string.
|
|
18
|
+
*
|
|
19
|
+
* We accept the canonical scientific mantissa form (`1.5e3`) so this
|
|
20
|
+
* stays compatible with the XRPL serialization layer, which uses the
|
|
21
|
+
* same mantissa as `rippled` for `STAmount`. Negative or zero mantissas
|
|
22
|
+
* are rejected.
|
|
23
|
+
*/
|
|
24
|
+
function isPositiveAmount(amount) {
|
|
25
|
+
// XRP drops — a decimal or scientific-mantissa string.
|
|
26
|
+
if (typeof amount === 'string') {
|
|
27
|
+
if (!/^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$/u.test(amount)) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
return parseFloat(amount) > 0;
|
|
31
|
+
}
|
|
32
|
+
// Object form (IssuedCurrency or MPT).
|
|
33
|
+
if (typeof amount !== 'object' || amount === null)
|
|
34
|
+
return false;
|
|
35
|
+
const value = amount.value;
|
|
36
|
+
if (typeof value !== 'string')
|
|
37
|
+
return false;
|
|
38
|
+
if (!/^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$/u.test(value)) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
return parseFloat(value) > 0;
|
|
42
|
+
}
|
|
43
|
+
// ─── Factory ─────────────────────────────────────────────────────────
|
|
44
|
+
export function vaultDeposit(props) {
|
|
45
|
+
// ── Account ── required, must be a non-empty string (class parity).
|
|
46
|
+
if (!isString(props.Account) || props.Account.length === 0) {
|
|
47
|
+
throw new ValidationError('VaultDeposit: Account is required');
|
|
48
|
+
}
|
|
49
|
+
// ── VaultID ── required, 64-char hex AND non-zero.
|
|
50
|
+
if (!isString(props.VaultID) ||
|
|
51
|
+
!isHex(props.VaultID) ||
|
|
52
|
+
props.VaultID.length !== VAULT_ID_LENGTH) {
|
|
53
|
+
throw new ValidationError('VaultDeposit: VaultID must be a 64-character hex string');
|
|
54
|
+
}
|
|
55
|
+
if (props.VaultID === VAULT_ID_ZERO) {
|
|
56
|
+
throw new ValidationError('VaultDeposit: VaultID must not be the all-zeros HASH256 value');
|
|
57
|
+
}
|
|
58
|
+
// ── Amount ── required, must be a valid Amount AND strictly positive.
|
|
59
|
+
if (!isAmount(props.Amount)) {
|
|
60
|
+
throw new ValidationError('VaultDeposit: Amount must be a valid Amount (XRP / trust line / MPT form)');
|
|
61
|
+
}
|
|
62
|
+
if (!isPositiveAmount(props.Amount)) {
|
|
63
|
+
throw new ValidationError('VaultDeposit: Amount must be strictly positive (non-zero, non-negative)');
|
|
64
|
+
}
|
|
65
|
+
return buildFrozenTx('VaultDeposit', props, {
|
|
66
|
+
validate() {
|
|
67
|
+
// Validated at construction.
|
|
68
|
+
},
|
|
69
|
+
toJSON() {
|
|
70
|
+
const json = {};
|
|
71
|
+
for (const k of Object.keys(this)) {
|
|
72
|
+
if (k === 'validate' || k === 'toJSON' || k === 'with')
|
|
73
|
+
continue;
|
|
74
|
+
const v = this[k];
|
|
75
|
+
if (v !== undefined)
|
|
76
|
+
json[k] = v;
|
|
77
|
+
}
|
|
78
|
+
return json;
|
|
79
|
+
},
|
|
80
|
+
with(overrides) {
|
|
81
|
+
return vaultDeposit(mergeForWith(this, overrides));
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=vault-deposit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-deposit.js","sourceRoot":"","sources":["../../../src/fp/factories/vault-deposit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export interface VaultSetProps {
|
|
2
|
+
/** The unique address of the transaction sender (the Vault owner). */
|
|
3
|
+
Account: string;
|
|
4
|
+
/** The ID of the vault to modify. 64-char hex. */
|
|
5
|
+
VaultID: string;
|
|
6
|
+
/** Arbitrary vault metadata, hex-encoded, 1–256 bytes (non-empty). */
|
|
7
|
+
Data?: string | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* The maximum asset amount the vault can hold. Cannot be lowered below
|
|
10
|
+
* the current `AssetsTotal` (unless 0); that rule is ledger-enforced
|
|
11
|
+
* (`tecLIMIT_EXCEEDED`).
|
|
12
|
+
*/
|
|
13
|
+
AssetsMaximum?: string | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* The PermissionedDomain object ID associated with the vault's shares.
|
|
16
|
+
* 64-char hex. The all-zeros value is valid and means "remove any
|
|
17
|
+
* existing DomainID from the share MPTokenIssuance" (XLS-65 §3.3.3).
|
|
18
|
+
*/
|
|
19
|
+
DomainID?: string | undefined;
|
|
20
|
+
/** Bit-flags for this transaction. VaultSet has no defined flags. */
|
|
21
|
+
Flags?: number | undefined;
|
|
22
|
+
Fee?: string | undefined;
|
|
23
|
+
Sequence?: number | undefined;
|
|
24
|
+
}
|
|
25
|
+
export interface VaultSet extends Readonly<VaultSetProps> {
|
|
26
|
+
readonly TransactionType: 'VaultSet';
|
|
27
|
+
validate(): void;
|
|
28
|
+
toJSON(): Record<string, unknown>;
|
|
29
|
+
with(overrides: Partial<VaultSetProps>): VaultSet;
|
|
30
|
+
}
|
|
31
|
+
export declare function vaultSet(props: VaultSetProps): VaultSet;
|
|
32
|
+
//# sourceMappingURL=vault-set.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-set.d.ts","sourceRoot":"","sources":["../../../src/fp/factories/vault-set.ts"],"names":[],"mappings":"AA+DA,MAAM,WAAW,aAAa;IAC5B,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,QAAS,SAAQ,QAAQ,CAAC,aAAa,CAAC;IACvD,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAC;IACrC,QAAQ,IAAI,IAAI,CAAC;IACjB,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAC;CACnD;AAID,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,QAAQ,CAyGvD"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Functional VaultSet factory — frozen-object style.
|
|
3
|
+
*
|
|
4
|
+
* Updates `Data`, `AssetsMaximum`, and/or `DomainID` on a vault identified
|
|
5
|
+
* by `VaultID`. Validation happens at construction; there is no way to
|
|
6
|
+
* construct an invalid tx.
|
|
7
|
+
*
|
|
8
|
+
* import { vaultSet } from 'xrplt/fp';
|
|
9
|
+
* const tx = vaultSet({ Account, VaultID, Data: '5661756C74' });
|
|
10
|
+
* const j = tx.toJSON();
|
|
11
|
+
* const tx2 = tx.with({ AssetsMaximum: '1000000' });
|
|
12
|
+
*
|
|
13
|
+
* Affected amendments:
|
|
14
|
+
* - `SingleAssetVault` (base VaultSet)
|
|
15
|
+
* - `PermissionedDomains` (DomainID field)
|
|
16
|
+
*
|
|
17
|
+
* @see https://xrpl.org/docs/references/protocol/transactions/types/vaultset
|
|
18
|
+
* @see https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0065-single-asset-vault
|
|
19
|
+
*
|
|
20
|
+
* ## Divergences
|
|
21
|
+
* The factory enforces two preclaim checks that the class API
|
|
22
|
+
* (`src/transactions/vault-set.ts`) skips:
|
|
23
|
+
*
|
|
24
|
+
* 1. `VaultID` must not be the all-zeros HASH256 value.
|
|
25
|
+
* Source: XLS-65 §3.3.2.1 check 1 — "The `VaultID` field is zero
|
|
26
|
+
* (`temMALFORMED`)". The class only requires it to be a 64-char
|
|
27
|
+
* hex string and accepts the all-zeros value.
|
|
28
|
+
*
|
|
29
|
+
* 2. At least one of `Data`, `AssetsMaximum`, `DomainID` must be supplied.
|
|
30
|
+
* Source: XLS-65 §3.3.2.1 check 4 — "None of `Data`, `AssetsMaximum`,
|
|
31
|
+
* or `DomainID` are provided (nothing to update) (`temMALFORMED`).
|
|
32
|
+
* The class does not check this; passing an empty set of mutable
|
|
33
|
+
* fields would be accepted locally but rejected by the ledger.
|
|
34
|
+
*
|
|
35
|
+
* 3. `DomainID` is accepted in the all-zeros HASH256 form to represent
|
|
36
|
+
* "remove the current DomainID from the share MPTokenIssuance".
|
|
37
|
+
* Source: XLS-65 §3.3.3 state changes 2 and 3 — "If `DomainID` is
|
|
38
|
+
* provided and non-zero: set `MPTokenIssuance(Vault.ShareMPTID).DomainID
|
|
39
|
+
* = DomainID`" / "If `DomainID` is provided and is zero: remove
|
|
40
|
+
* `DomainID` from `MPTokenIssuance(Vault.ShareMPTID)`". The class
|
|
41
|
+
* rejects the all-zeros form via `isDomainID` (which requires 64-char
|
|
42
|
+
* hex — already satisfied by zero, but the helper is not invoked
|
|
43
|
+
* for the all-zeros value because `isDomainID` is a length+hex
|
|
44
|
+
* format check that passes zero too; the class simply forbids any
|
|
45
|
+
* update if zero via `isDomainID`'s regex). The factory accepts zero
|
|
46
|
+
* to support the documented removal semantic.
|
|
47
|
+
*/
|
|
48
|
+
import { isDomainID, isHex, isString } from '../../validation/helpers.js';
|
|
49
|
+
import { ValidationError } from '../../errors.js';
|
|
50
|
+
import { buildFrozenTx, mergeForWith, require } from '../shape.js';
|
|
51
|
+
// ─── Spec constants ──────────────────────────────────────────────────
|
|
52
|
+
// Maximum encoded Data length in bytes (hex is 2 chars per byte).
|
|
53
|
+
const MAX_DATA_BYTES = 256;
|
|
54
|
+
// HASH256 is 32 bytes = 64 hex chars.
|
|
55
|
+
const HASH256_LENGTH = 64;
|
|
56
|
+
// All-zeros HASH256 is reserved / malformed per spec.
|
|
57
|
+
const HASH256_ZERO = '0000000000000000000000000000000000000000000000000000000000000000';
|
|
58
|
+
// ─── Factory ─────────────────────────────────────────────────────────
|
|
59
|
+
export function vaultSet(props) {
|
|
60
|
+
// ── Account ── required, must be a non-empty string.
|
|
61
|
+
require(props.Account, 'VaultSet: Account is required', isString);
|
|
62
|
+
if (props.Account.length === 0) {
|
|
63
|
+
throw new ValidationError('VaultSet: Account is required');
|
|
64
|
+
}
|
|
65
|
+
// ── VaultID ── required, 64-char hex AND non-zero.
|
|
66
|
+
if (!isString(props.VaultID) ||
|
|
67
|
+
!isHex(props.VaultID) ||
|
|
68
|
+
props.VaultID.length !== HASH256_LENGTH) {
|
|
69
|
+
throw new ValidationError('VaultSet: VaultID must be a 64-character hex string');
|
|
70
|
+
}
|
|
71
|
+
if (props.VaultID === HASH256_ZERO) {
|
|
72
|
+
throw new ValidationError('VaultSet: VaultID must not be the all-zeros HASH256 value');
|
|
73
|
+
}
|
|
74
|
+
// ── At least one mutable field must be supplied ──
|
|
75
|
+
// XLS-65 §3.3.2.1 check 4.
|
|
76
|
+
if (props.Data === undefined &&
|
|
77
|
+
props.AssetsMaximum === undefined &&
|
|
78
|
+
props.DomainID === undefined) {
|
|
79
|
+
throw new ValidationError('VaultSet: at least one of Data, AssetsMaximum, or DomainID must be provided');
|
|
80
|
+
}
|
|
81
|
+
// ── Data ── hex, even-length, 1–256 bytes.
|
|
82
|
+
if (props.Data !== undefined) {
|
|
83
|
+
if (!isString(props.Data) || !isHex(props.Data)) {
|
|
84
|
+
throw new ValidationError('VaultSet: Data must be a hex string');
|
|
85
|
+
}
|
|
86
|
+
if (props.Data.length === 0) {
|
|
87
|
+
throw new ValidationError('VaultSet: Data must not be empty');
|
|
88
|
+
}
|
|
89
|
+
if (props.Data.length % 2 !== 0) {
|
|
90
|
+
throw new ValidationError('VaultSet: Data must be a hex string with an even number of characters');
|
|
91
|
+
}
|
|
92
|
+
const bytes = props.Data.length / 2;
|
|
93
|
+
if (bytes > MAX_DATA_BYTES) {
|
|
94
|
+
throw new ValidationError(`VaultSet: Data exceeds ${MAX_DATA_BYTES} bytes (actual: ${bytes})`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// ── AssetsMaximum ── non-negative base-10 integer string.
|
|
98
|
+
if (props.AssetsMaximum !== undefined) {
|
|
99
|
+
if (!isString(props.AssetsMaximum) ||
|
|
100
|
+
!/^[0-9]+$/u.test(props.AssetsMaximum)) {
|
|
101
|
+
throw new ValidationError('VaultSet: AssetsMaximum must be a non-negative base-10 integer string');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// ── DomainID ── 64-char hex. The all-zeros value is accepted to
|
|
105
|
+
// represent "remove DomainID from share MPTokenIssuance"
|
|
106
|
+
// (XLS-65 §3.3.3 state change 3).
|
|
107
|
+
if (props.DomainID !== undefined) {
|
|
108
|
+
if (!isString(props.DomainID)) {
|
|
109
|
+
throw new ValidationError('VaultSet: DomainID must be a 64-character hex string');
|
|
110
|
+
}
|
|
111
|
+
if (props.DomainID !== HASH256_ZERO && !isDomainID(props.DomainID)) {
|
|
112
|
+
throw new ValidationError('VaultSet: DomainID must be a 64-character hex string');
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return buildFrozenTx('VaultSet', props, {
|
|
116
|
+
validate() {
|
|
117
|
+
// Validated at construction.
|
|
118
|
+
},
|
|
119
|
+
toJSON() {
|
|
120
|
+
const json = {};
|
|
121
|
+
for (const k of Object.keys(this)) {
|
|
122
|
+
if (k === 'validate' || k === 'toJSON' || k === 'with')
|
|
123
|
+
continue;
|
|
124
|
+
const v = this[k];
|
|
125
|
+
if (v !== undefined)
|
|
126
|
+
json[k] = v;
|
|
127
|
+
}
|
|
128
|
+
return json;
|
|
129
|
+
},
|
|
130
|
+
with(overrides) {
|
|
131
|
+
return vaultSet(mergeForWith(this, overrides));
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=vault-set.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-set.js","sourceRoot":"","sources":["../../../src/fp/factories/vault-set.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEnE,wEAAwE;AAExE,kEAAkE;AAClE,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,sCAAsC;AACtC,MAAM,cAAc,GAAG,EAAE,CAAC;AAC1B,sDAAsD;AACtD,MAAM,YAAY,GAChB,kEAAkE,CAAC;AAoCrE,wEAAwE;AAExE,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,sDAAsD;IACtD,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,+BAA+B,EAAE,QAAQ,CAAC,CAAC;IAClE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,eAAe,CAAC,+BAA+B,CAAC,CAAC;IAC7D,CAAC;IAED,oDAAoD;IACpD,IACE,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;QACxB,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;QACrB,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,cAAc,EACvC,CAAC;QACD,MAAM,IAAI,eAAe,CACvB,qDAAqD,CACtD,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;QACnC,MAAM,IAAI,eAAe,CACvB,2DAA2D,CAC5D,CAAC;IACJ,CAAC;IAED,oDAAoD;IACpD,2BAA2B;IAC3B,IACE,KAAK,CAAC,IAAI,KAAK,SAAS;QACxB,KAAK,CAAC,aAAa,KAAK,SAAS;QACjC,KAAK,CAAC,QAAQ,KAAK,SAAS,EAC5B,CAAC;QACD,MAAM,IAAI,eAAe,CACvB,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IAED,4CAA4C;IAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,eAAe,CAAC,qCAAqC,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,eAAe,CAAC,kCAAkC,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,eAAe,CACvB,uEAAuE,CACxE,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACpC,IAAI,KAAK,GAAG,cAAc,EAAE,CAAC;YAC3B,MAAM,IAAI,eAAe,CACvB,0BAA0B,cAAc,mBAAmB,KAAK,GAAG,CACpE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,2DAA2D;IAC3D,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACtC,IACE,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC;YAC9B,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EACtC,CAAC;YACD,MAAM,IAAI,eAAe,CACvB,uEAAuE,CACxE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,4DAA4D;IAC5D,qCAAqC;IACrC,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,eAAe,CACvB,sDAAsD,CACvD,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,KAAK,YAAY,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,eAAe,CACvB,sDAAsD,CACvD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,aAAa,CAClB,UAAU,EACV,KAAK,EACL;QACE,QAAQ;YACN,6BAA6B;QAC/B,CAAC;QACD,MAAM;YACJ,MAAM,IAAI,GAA4B,EAAE,CAAC;YACzC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,MAAM;oBAAE,SAAS;gBACjE,MAAM,CAAC,GAAI,IAA2C,CAAC,CAAC,CAAC,CAAC;gBAC1D,IAAI,CAAC,KAAK,SAAS;oBAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAiB,SAAiC;YACpD,OAAO,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;QACjD,CAAC;KACF,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Functional VaultWithdraw factory — frozen-object style.
|
|
3
|
+
*
|
|
4
|
+
* Withdraws assets from a vault in exchange for shares. The `Amount` field
|
|
5
|
+
* can specify either an asset amount (vault burns the necessary shares) or
|
|
6
|
+
* a share amount (vault pays out the corresponding assets). Validation
|
|
7
|
+
* happens at construction; there is no way to construct an invalid tx.
|
|
8
|
+
*
|
|
9
|
+
* import { vaultWithdraw } from 'xrplt/fp';
|
|
10
|
+
* const tx = vaultWithdraw({ Account, VaultID, Amount });
|
|
11
|
+
* const j = tx.toJSON();
|
|
12
|
+
* const tx2 = tx.with({ Destination: 'r…' });
|
|
13
|
+
*
|
|
14
|
+
* Affected amendments:
|
|
15
|
+
* - `SingleAssetVault` (base VaultWithdraw)
|
|
16
|
+
* - `LendingProtocolV1_1` (Investment-phase gating on closed-ended vaults;
|
|
17
|
+
* not locally checkable, runtime phase only)
|
|
18
|
+
* - `Credentials` (CredentialIDs field for permissioned-domain authorization)
|
|
19
|
+
* - `fixCleanup3_4_0` (withdrawal rules — no local preclaim change)
|
|
20
|
+
*
|
|
21
|
+
* @see https://xrpl.org/docs/references/protocol/transactions/types/vaultwithdraw
|
|
22
|
+
* @see https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0065-single-asset-vault
|
|
23
|
+
*
|
|
24
|
+
* ## Divergences
|
|
25
|
+
*
|
|
26
|
+
* Compared with `src/transactions/vault-withdraw.ts`, this factory adds
|
|
27
|
+
* preclaim guards the class API skips:
|
|
28
|
+
*
|
|
29
|
+
* 1. **`VaultID` must not be the all-zeros HASH256.**
|
|
30
|
+
* Source: XLS-0065 §3.6.2.1 check 1 — "The `VaultID` field is zero
|
|
31
|
+
* (`temMALFORMED`)." The class only checks `isString(VaultID)`.
|
|
32
|
+
* xrpl.js `validateVaultWithdraw` only requires it to be a string.
|
|
33
|
+
*
|
|
34
|
+
* 2. **`Amount` must be strictly positive (non-zero, non-negative).**
|
|
35
|
+
* Source: XLS-0065 §3.6.2.1 check 2 — "The `Amount` field is zero or
|
|
36
|
+
* negative (`temBAD_AMOUNT`)." xrpl.org `vaultwithdraw.md` Error Cases
|
|
37
|
+
* table — "`temBAD_AMOUNT` The `Amount` field of the transaction is
|
|
38
|
+
* invalid. For example, the provided amount is set to 0." The class
|
|
39
|
+
* only delegates to `isAmount`, which accepts any numeric string
|
|
40
|
+
* (including `0` and `-1`).
|
|
41
|
+
*
|
|
42
|
+
* 3. **`CredentialIDs` must have length in [1, MAX_AUTHORIZED_CREDENTIALS].**
|
|
43
|
+
* Source: xrpl.js `MAX_AUTHORIZED_CREDENTIALS = 8` for non-DomainSet
|
|
44
|
+
* transactions (`packages/xrpl/src/models/transactions/common.ts:28`),
|
|
45
|
+
* and `validateCredentialsList` rejects both empty arrays and arrays
|
|
46
|
+
* that exceed `maxCredentials`. xrpl.org `vaultwithdraw.md` Fields
|
|
47
|
+
* table — "An array of credential identifiers … if credential-based
|
|
48
|
+
* deposit authorization is required." The class only validates the
|
|
49
|
+
* shape of each entry, not the array length bounds.
|
|
50
|
+
*/
|
|
51
|
+
import type { Amount, MPTAmount } from '../../types/amounts.js';
|
|
52
|
+
export interface VaultWithdrawProps {
|
|
53
|
+
Account: string;
|
|
54
|
+
/** The ID of the vault to withdraw from. 64-char hex (HASH256). */
|
|
55
|
+
VaultID: string;
|
|
56
|
+
/**
|
|
57
|
+
* Asset amount to withdraw, or share amount to redeem. XRP drops string,
|
|
58
|
+
* trust-line object, or MPT object.
|
|
59
|
+
*/
|
|
60
|
+
Amount: Amount | MPTAmount;
|
|
61
|
+
/** Optional destination account. Must be able to receive the asset. */
|
|
62
|
+
Destination?: string | undefined;
|
|
63
|
+
/** Optional destination tag identifying the reason for the withdrawal. */
|
|
64
|
+
DestinationTag?: number | undefined;
|
|
65
|
+
/**
|
|
66
|
+
* Optional array of credential IDs authorizing the withdrawal when the
|
|
67
|
+
* vault is gated by a permissioned domain (Credentials amendment).
|
|
68
|
+
*/
|
|
69
|
+
CredentialIDs?: string[] | undefined;
|
|
70
|
+
/** VaultWithdraw has no defined flags; permitted for base-tx parity. */
|
|
71
|
+
Flags?: number | undefined;
|
|
72
|
+
Fee?: string | undefined;
|
|
73
|
+
Sequence?: number | undefined;
|
|
74
|
+
}
|
|
75
|
+
export interface VaultWithdraw extends Readonly<VaultWithdrawProps> {
|
|
76
|
+
readonly TransactionType: 'VaultWithdraw';
|
|
77
|
+
validate(): void;
|
|
78
|
+
toJSON(): Record<string, unknown>;
|
|
79
|
+
with(overrides: Partial<VaultWithdrawProps>): VaultWithdraw;
|
|
80
|
+
}
|
|
81
|
+
export declare function vaultWithdraw(props: VaultWithdrawProps): VaultWithdraw;
|
|
82
|
+
//# sourceMappingURL=vault-withdraw.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-withdraw.d.ts","sourceRoot":"","sources":["../../../src/fp/factories/vault-withdraw.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAgChE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,0EAA0E;IAC1E,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACrC,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,aAAc,SAAQ,QAAQ,CAAC,kBAAkB,CAAC;IACjE,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,IAAI,IAAI,CAAC;IACjB,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,aAAa,CAAC;CAC7D;AAoCD,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,CAyGtE"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { isAccount, isAmount, isArray, isHex, isIssuedCurrencyAmount, isMPTAmount, isNumber, isString, } from '../../validation/helpers.js';
|
|
2
|
+
import { ValidationError } from '../../errors.js';
|
|
3
|
+
import { buildFrozenTx, mergeForWith, require } from '../shape.js';
|
|
4
|
+
// ─── Spec constants ──────────────────────────────────────────────────
|
|
5
|
+
// HASH256 in hex is 64 characters. (XLS-0065 §3.6.1: VaultID is HASH256.)
|
|
6
|
+
const HASH256_HEX_LENGTH = 64;
|
|
7
|
+
// All-zeros HASH256 is reserved / malformed per spec.
|
|
8
|
+
const VAULT_ID_ZERO = '0000000000000000000000000000000000000000000000000000000000000000';
|
|
9
|
+
// Credential IDs are 64-char hex (same as ledger entry IDs / HASH256).
|
|
10
|
+
const CREDENTIAL_ID_LENGTH = 64;
|
|
11
|
+
// xrpl.js caps non-DomainSet credential arrays at 8 entries.
|
|
12
|
+
// (packages/xrpl/src/models/transactions/common.ts: MAX_AUTHORIZED_CREDENTIALS = 8)
|
|
13
|
+
const MAX_CREDENTIAL_IDS = 8;
|
|
14
|
+
// ─── Helpers ─────────────────────────────────────────────────────────
|
|
15
|
+
/**
|
|
16
|
+
* Per XLS-0065 §3.6.2.1 check 2: "The `Amount` field is zero or negative
|
|
17
|
+
* (`temBAD_AMOUNT`)." Validates the sign of an Amount in all three
|
|
18
|
+
* accepted forms.
|
|
19
|
+
*
|
|
20
|
+
* - XRP form: a decimal-string of drops (e.g. "1000000").
|
|
21
|
+
* - IssuedCurrency form: object with a `value` sub-string.
|
|
22
|
+
* - MPT form: object with a `value` sub-string.
|
|
23
|
+
*
|
|
24
|
+
* We accept the canonical scientific mantissa form (`1.5e3`) so this
|
|
25
|
+
* stays compatible with the XRPL serialization layer, which uses the
|
|
26
|
+
* same mantissa as `rippled` for `STAmount`. Negative or zero mantissas
|
|
27
|
+
* are rejected.
|
|
28
|
+
*/
|
|
29
|
+
function isPositiveAmount(amount) {
|
|
30
|
+
if (typeof amount === 'string') {
|
|
31
|
+
if (!/^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$/u.test(amount)) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
return parseFloat(amount) > 0;
|
|
35
|
+
}
|
|
36
|
+
if (typeof amount !== 'object' || amount === null)
|
|
37
|
+
return false;
|
|
38
|
+
const value = amount.value;
|
|
39
|
+
if (typeof value !== 'string')
|
|
40
|
+
return false;
|
|
41
|
+
if (!/^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$/u.test(value)) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
return parseFloat(value) > 0;
|
|
45
|
+
}
|
|
46
|
+
// ─── Factory ─────────────────────────────────────────────────────────
|
|
47
|
+
export function vaultWithdraw(props) {
|
|
48
|
+
// ── Account ── required, must be a valid XRPL classic address.
|
|
49
|
+
require(props.Account, 'VaultWithdraw: Account is required', isAccount);
|
|
50
|
+
// ── VaultID ── required, 64-char hex (HASH256) AND non-zero.
|
|
51
|
+
if (!isString(props.VaultID) ||
|
|
52
|
+
!isHex(props.VaultID) ||
|
|
53
|
+
props.VaultID.length !== HASH256_HEX_LENGTH) {
|
|
54
|
+
throw new ValidationError('VaultWithdraw: VaultID must be a 64-character hex string (HASH256)');
|
|
55
|
+
}
|
|
56
|
+
if (props.VaultID === VAULT_ID_ZERO) {
|
|
57
|
+
throw new ValidationError('VaultWithdraw: VaultID must not be the all-zeros HASH256 value');
|
|
58
|
+
}
|
|
59
|
+
// ── Amount ── required, must be a valid Amount AND strictly positive.
|
|
60
|
+
if (!isAmount(props.Amount)) {
|
|
61
|
+
throw new ValidationError('VaultWithdraw: Amount must be a valid Amount (XRP / trust line / MPT form)');
|
|
62
|
+
}
|
|
63
|
+
if (!isPositiveAmount(props.Amount)) {
|
|
64
|
+
throw new ValidationError('VaultWithdraw: Amount must be strictly positive (non-zero, non-negative)');
|
|
65
|
+
}
|
|
66
|
+
// ── Destination ── optional, but if provided must be a valid XRPL
|
|
67
|
+
// account. (The XLS-65 §3.6.2.1 check 3 "Destination is zero" case
|
|
68
|
+
// is covered implicitly: the all-zeros 40-char hex string fails
|
|
69
|
+
// `isAccount`, which requires a classic `r…` or X-address prefix.)
|
|
70
|
+
if (props.Destination !== undefined && !isAccount(props.Destination)) {
|
|
71
|
+
throw new ValidationError('VaultWithdraw: Destination must be a valid XRPL account address');
|
|
72
|
+
}
|
|
73
|
+
// ── DestinationTag ── optional, must be a number if present.
|
|
74
|
+
if (props.DestinationTag !== undefined && !isNumber(props.DestinationTag)) {
|
|
75
|
+
throw new ValidationError('VaultWithdraw: DestinationTag must be a number');
|
|
76
|
+
}
|
|
77
|
+
// ── CredentialIDs ── optional array, but bounds + entry-shape enforced
|
|
78
|
+
// when present. Per xrpl.js: length in [1, MAX_AUTHORIZED_CREDENTIALS];
|
|
79
|
+
// each entry is a 64-char hex string.
|
|
80
|
+
if (props.CredentialIDs !== undefined) {
|
|
81
|
+
if (!isArray(props.CredentialIDs)) {
|
|
82
|
+
throw new ValidationError('VaultWithdraw: CredentialIDs must be an array of credential ID strings');
|
|
83
|
+
}
|
|
84
|
+
if (props.CredentialIDs.length === 0) {
|
|
85
|
+
throw new ValidationError('VaultWithdraw: CredentialIDs must not be an empty array');
|
|
86
|
+
}
|
|
87
|
+
if (props.CredentialIDs.length > MAX_CREDENTIAL_IDS) {
|
|
88
|
+
throw new ValidationError(`VaultWithdraw: CredentialIDs length cannot exceed ${MAX_CREDENTIAL_IDS} elements (actual: ${props.CredentialIDs.length})`);
|
|
89
|
+
}
|
|
90
|
+
for (let i = 0; i < props.CredentialIDs.length; i++) {
|
|
91
|
+
const cid = props.CredentialIDs[i];
|
|
92
|
+
if (!isString(cid) || !isHex(cid) || cid.length !== CREDENTIAL_ID_LENGTH) {
|
|
93
|
+
throw new ValidationError(`VaultWithdraw: CredentialIDs[${i}] must be a ${CREDENTIAL_ID_LENGTH}-character hex string`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Touch the optional Amount-shape branches so the imports aren't flagged
|
|
98
|
+
// as unused under strict lint; the helpers are used by helpers exported
|
|
99
|
+
// elsewhere and may be reused for downstream sub-field checks.
|
|
100
|
+
void isIssuedCurrencyAmount;
|
|
101
|
+
void isMPTAmount;
|
|
102
|
+
return buildFrozenTx('VaultWithdraw', props, {
|
|
103
|
+
validate() {
|
|
104
|
+
// Validated at construction.
|
|
105
|
+
},
|
|
106
|
+
toJSON() {
|
|
107
|
+
const json = {};
|
|
108
|
+
for (const k of Object.keys(this)) {
|
|
109
|
+
if (k === 'validate' || k === 'toJSON' || k === 'with')
|
|
110
|
+
continue;
|
|
111
|
+
const v = this[k];
|
|
112
|
+
if (v !== undefined)
|
|
113
|
+
json[k] = v;
|
|
114
|
+
}
|
|
115
|
+
return json;
|
|
116
|
+
},
|
|
117
|
+
with(overrides) {
|
|
118
|
+
return vaultWithdraw(mergeForWith(this, overrides));
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=vault-withdraw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-withdraw.js","sourceRoot":"","sources":["../../../src/fp/factories/vault-withdraw.ts"],"names":[],"mappings":"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"}
|