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,212 @@
|
|
|
1
|
+
import { isAccount, isAmount, isHex, isIssuedCurrencyAmount, isMPTAmount, isNumber, isRecord, isString, } from '../../validation/helpers.js';
|
|
2
|
+
import { ValidationError } from '../../errors.js';
|
|
3
|
+
import { buildFrozenTx, mergeForWith, require } from '../shape.js';
|
|
4
|
+
// ─── Spec constants ──────────────────────────────────────────────────
|
|
5
|
+
// XLS-20 / xrpl.org: Expiration is UInt32.
|
|
6
|
+
const UINT32_MIN = 0;
|
|
7
|
+
const UINT32_MAX = 0xffffffff;
|
|
8
|
+
// xrpl.org `nftokencreateoffer.md` line 39 / XLS-20 §1.5.4 line 682:
|
|
9
|
+
// NFTokenID is Hash256 / UInt256 — a 64-character hex string.
|
|
10
|
+
const NFTOKEN_ID_LENGTH = 64;
|
|
11
|
+
// IOU currency shape (3 ASCII or 40 hex chars).
|
|
12
|
+
const CURRENCY_ASCII_LENGTH = 3;
|
|
13
|
+
const CURRENCY_HEX_LENGTH = 40;
|
|
14
|
+
// MPT issuance ID window (matches OfferCreate / AmmCreate policy).
|
|
15
|
+
const MPT_ISSUANCE_ID_MIN = 24;
|
|
16
|
+
const MPT_ISSUANCE_ID_MAX = 48;
|
|
17
|
+
// ─── Helpers ─────────────────────────────────────────────────────────
|
|
18
|
+
/** Non-negative base-10 integer string (XRPLNumber). */
|
|
19
|
+
function isXrplNumber(value) {
|
|
20
|
+
return isString(value) && /^[0-9]+$/u.test(value);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Validate the deep shape of an Amount (XRP string / IOU / MPT). The
|
|
24
|
+
* class delegates to `isAmount`, which only checks key presence. This
|
|
25
|
+
* helper enforces the deeper invariants that rippled actually checks
|
|
26
|
+
* (`temBAD_AMOUNT`, currency length, valid issuer, etc.).
|
|
27
|
+
*
|
|
28
|
+
* `path` is just for error messages ("Amount", "Amount" — single field
|
|
29
|
+
* here, but kept parametric so future factories can reuse).
|
|
30
|
+
*/
|
|
31
|
+
function validateAmount(amount, path) {
|
|
32
|
+
if (!isAmount(amount)) {
|
|
33
|
+
throw new ValidationError(`NFTokenCreateOffer: ${path} must be a valid Amount (XRP string, IOU, or MPT form)`);
|
|
34
|
+
}
|
|
35
|
+
// XRP path: non-negative base-10 integer string.
|
|
36
|
+
if (isString(amount)) {
|
|
37
|
+
if (!isXrplNumber(amount)) {
|
|
38
|
+
throw new ValidationError(`NFTokenCreateOffer: ${path} (XRP) must be a non-negative base-10 integer string`);
|
|
39
|
+
}
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
// IOU path.
|
|
43
|
+
if (isIssuedCurrencyAmount(amount)) {
|
|
44
|
+
const ccy = amount.currency;
|
|
45
|
+
if (ccy.length !== CURRENCY_ASCII_LENGTH &&
|
|
46
|
+
ccy.length !== CURRENCY_HEX_LENGTH) {
|
|
47
|
+
throw new ValidationError(`NFTokenCreateOffer: ${path}.currency must be ${CURRENCY_ASCII_LENGTH} ASCII or ${CURRENCY_HEX_LENGTH} hex chars (actual: ${ccy.length})`);
|
|
48
|
+
}
|
|
49
|
+
if (ccy.length === CURRENCY_HEX_LENGTH && !isHex(ccy)) {
|
|
50
|
+
throw new ValidationError(`NFTokenCreateOffer: ${path}.currency (40-char form) must be hex`);
|
|
51
|
+
}
|
|
52
|
+
if (!isAccount(amount.issuer)) {
|
|
53
|
+
throw new ValidationError(`NFTokenCreateOffer: ${path}.issuer must be a valid XRPL account address`);
|
|
54
|
+
}
|
|
55
|
+
if (!isXrplNumber(amount.value)) {
|
|
56
|
+
throw new ValidationError(`NFTokenCreateOffer: ${path}.value must be a non-negative base-10 integer string`);
|
|
57
|
+
}
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
// MPT path.
|
|
61
|
+
if (isMPTAmount(amount)) {
|
|
62
|
+
const mptid = amount.mpt_issuance_id;
|
|
63
|
+
if (mptid.length < MPT_ISSUANCE_ID_MIN ||
|
|
64
|
+
mptid.length > MPT_ISSUANCE_ID_MAX ||
|
|
65
|
+
!isHex(mptid)) {
|
|
66
|
+
throw new ValidationError(`NFTokenCreateOffer: ${path}.mpt_issuance_id must be a ${MPT_ISSUANCE_ID_MIN}-${MPT_ISSUANCE_ID_MAX} character hex string`);
|
|
67
|
+
}
|
|
68
|
+
if (!isXrplNumber(amount.value)) {
|
|
69
|
+
throw new ValidationError(`NFTokenCreateOffer: ${path}.value must be a non-negative base-10 integer string`);
|
|
70
|
+
}
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
// Unreachable — defensive.
|
|
74
|
+
throw new ValidationError(`NFTokenCreateOffer: ${path} must be a valid Amount (XRP string, IOU, or MPT form)`);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Returns the parsed numeric value of an Amount, matching the
|
|
78
|
+
* `parseAmountValue` semantics from xrpl.js (treats string forms as
|
|
79
|
+
* base-10 integers). Returns NaN if unparseable.
|
|
80
|
+
*
|
|
81
|
+
* For IOU/MPT we only need to check `value === '0'`; for XRP the same.
|
|
82
|
+
* Used to enforce "Amount > 0 for buy offers".
|
|
83
|
+
*/
|
|
84
|
+
function amountToNumber(amount) {
|
|
85
|
+
if (isString(amount)) {
|
|
86
|
+
if (!isXrplNumber(amount))
|
|
87
|
+
return Number.NaN;
|
|
88
|
+
return Number(amount);
|
|
89
|
+
}
|
|
90
|
+
if (isIssuedCurrencyAmount(amount) || isMPTAmount(amount)) {
|
|
91
|
+
if (!isXrplNumber(amount.value))
|
|
92
|
+
return Number.NaN;
|
|
93
|
+
return Number(amount.value);
|
|
94
|
+
}
|
|
95
|
+
return Number.NaN;
|
|
96
|
+
}
|
|
97
|
+
/** Decode the boolean-map Flags form to a numeric bitmask. */
|
|
98
|
+
function flagsToNumber(flags) {
|
|
99
|
+
if (flags === undefined)
|
|
100
|
+
return 0;
|
|
101
|
+
if (typeof flags === 'number')
|
|
102
|
+
return flags;
|
|
103
|
+
let n = 0;
|
|
104
|
+
if (flags.tfSellNFToken)
|
|
105
|
+
n |= 0x00000001;
|
|
106
|
+
return n;
|
|
107
|
+
}
|
|
108
|
+
// ─── Factory ─────────────────────────────────────────────────────────
|
|
109
|
+
export function nftokenCreateOffer(props) {
|
|
110
|
+
// ── Account ── required, must be a valid XRPL classic / X-address.
|
|
111
|
+
require(props.Account, 'NFTokenCreateOffer: Account is required', isAccount);
|
|
112
|
+
// ── NFTokenID ── required, 64-char hex.
|
|
113
|
+
if (!isString(props.NFTokenID)) {
|
|
114
|
+
throw new ValidationError('NFTokenCreateOffer: NFTokenID is required and must be a string');
|
|
115
|
+
}
|
|
116
|
+
if (props.NFTokenID.length !== NFTOKEN_ID_LENGTH || !isHex(props.NFTokenID)) {
|
|
117
|
+
throw new ValidationError(`NFTokenCreateOffer: NFTokenID must be a ${NFTOKEN_ID_LENGTH}-character hex string (Hash256)`);
|
|
118
|
+
}
|
|
119
|
+
// ── Amount ── required, deep shape check, then direction-aware
|
|
120
|
+
// positivity (buy ⇒ >0; sell ⇒ ≥0 with zero only for XRP).
|
|
121
|
+
validateAmount(props.Amount, 'Amount');
|
|
122
|
+
// ── Flags ── numeric / boolean-map type check (must run BEFORE the
|
|
123
|
+
// sell-vs-buy direction logic so callers passing bad
|
|
124
|
+
// numeric values see a clear "Flags must be a
|
|
125
|
+
// non-negative integer" error rather than a downstream
|
|
126
|
+
// Owner/Amount mismatch).
|
|
127
|
+
if (props.Flags !== undefined) {
|
|
128
|
+
if (typeof props.Flags !== 'number' &&
|
|
129
|
+
!isRecord(props.Flags)) {
|
|
130
|
+
throw new ValidationError('NFTokenCreateOffer: Flags must be a non-negative integer or NFTokenCreateOfferFlagsInterface object');
|
|
131
|
+
}
|
|
132
|
+
if (typeof props.Flags === 'number') {
|
|
133
|
+
if (!Number.isInteger(props.Flags) || props.Flags < 0) {
|
|
134
|
+
throw new ValidationError('NFTokenCreateOffer: Flags must be a non-negative integer');
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Decode the Flags bit early so direction-specific guards can read it.
|
|
139
|
+
const numericFlags = flagsToNumber(props.Flags);
|
|
140
|
+
const TF_SELL_NFTOKEN = 0x00000001;
|
|
141
|
+
const isSell = (numericFlags & TF_SELL_NFTOKEN) === TF_SELL_NFTOKEN;
|
|
142
|
+
if (isSell) {
|
|
143
|
+
// Sell offer: Amount=0 is only legal for XRP (XLS-20 §1.5.4 line 694).
|
|
144
|
+
const amtNum = amountToNumber(props.Amount);
|
|
145
|
+
if (amtNum === 0 && !isString(props.Amount)) {
|
|
146
|
+
throw new ValidationError('NFTokenCreateOffer: sell offer with Amount=0 is only valid for XRP (gratis giveaway); IOU/MPT Amount must be positive');
|
|
147
|
+
}
|
|
148
|
+
// Sell offer: Owner must not be present (xrpl.js validateNFTokenSellOfferCases).
|
|
149
|
+
if (props.Owner !== undefined) {
|
|
150
|
+
throw new ValidationError('NFTokenCreateOffer: Owner must not be present for sell offers (tfSellNFToken)');
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
// Buy offer: Owner required and Amount must be strictly > 0.
|
|
155
|
+
if (props.Owner === undefined) {
|
|
156
|
+
throw new ValidationError('NFTokenCreateOffer: Owner is required for buy offers (no tfSellNFToken flag)');
|
|
157
|
+
}
|
|
158
|
+
if (!isAccount(props.Owner)) {
|
|
159
|
+
throw new ValidationError('NFTokenCreateOffer: Owner must be a valid XRPL account address');
|
|
160
|
+
}
|
|
161
|
+
const amtNum = amountToNumber(props.Amount);
|
|
162
|
+
if (!(amtNum > 0)) {
|
|
163
|
+
throw new ValidationError('NFTokenCreateOffer: Amount must be greater than 0 for buy offers (temBAD_AMOUNT)');
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// ── Destination ── optional, must be a valid account and != Account.
|
|
167
|
+
if (props.Destination !== undefined) {
|
|
168
|
+
if (!isAccount(props.Destination)) {
|
|
169
|
+
throw new ValidationError('NFTokenCreateOffer: Destination must be a valid XRPL account address');
|
|
170
|
+
}
|
|
171
|
+
if (props.Destination === props.Account) {
|
|
172
|
+
throw new ValidationError('NFTokenCreateOffer: Destination and Account must not be equal');
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// ── Owner ≠ Account (when Owner present, i.e. buy offers) ──
|
|
176
|
+
if (props.Owner !== undefined && props.Owner === props.Account) {
|
|
177
|
+
throw new ValidationError('NFTokenCreateOffer: Owner and Account must not be equal');
|
|
178
|
+
}
|
|
179
|
+
// ── Expiration ── optional, UInt32.
|
|
180
|
+
if (props.Expiration !== undefined) {
|
|
181
|
+
if (!isNumber(props.Expiration) ||
|
|
182
|
+
!Number.isInteger(props.Expiration) ||
|
|
183
|
+
props.Expiration < UINT32_MIN ||
|
|
184
|
+
props.Expiration > UINT32_MAX) {
|
|
185
|
+
throw new ValidationError(`NFTokenCreateOffer: Expiration must be a UInt32 in [${UINT32_MIN}, ${UINT32_MAX}]`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// ── Flags ── numeric / boolean-map type check is run above (before
|
|
189
|
+
// direction logic). The validation in this block ensures
|
|
190
|
+
// callers get a clear shape error before any cross-field
|
|
191
|
+
// rules fire.
|
|
192
|
+
return buildFrozenTx('NFTokenCreateOffer', props, {
|
|
193
|
+
validate() {
|
|
194
|
+
// Validated at construction.
|
|
195
|
+
},
|
|
196
|
+
toJSON() {
|
|
197
|
+
const json = {};
|
|
198
|
+
for (const k of Object.keys(this)) {
|
|
199
|
+
if (k === 'validate' || k === 'toJSON' || k === 'with')
|
|
200
|
+
continue;
|
|
201
|
+
const v = this[k];
|
|
202
|
+
if (v !== undefined)
|
|
203
|
+
json[k] = v;
|
|
204
|
+
}
|
|
205
|
+
return json;
|
|
206
|
+
},
|
|
207
|
+
with(overrides) {
|
|
208
|
+
return nftokenCreateOffer(mergeForWith(this, overrides));
|
|
209
|
+
},
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=nftoken-create-offer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nftoken-create-offer.js","sourceRoot":"","sources":["../../../src/fp/factories/nftoken-create-offer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Functional NFTokenMint factory — frozen-object style.
|
|
3
|
+
*
|
|
4
|
+
* Creates a new NFToken (NFT) on the ledger. Validation happens at
|
|
5
|
+
* construction; there is no way to construct an invalid tx.
|
|
6
|
+
*
|
|
7
|
+
* import { nftokenMint } from 'xrplt/fp';
|
|
8
|
+
* const tx = nftokenMint({ Account, NFTokenTaxon: 0 });
|
|
9
|
+
* const j = tx.toJSON();
|
|
10
|
+
* const tx2 = tx.with({ TransferFee: 314, Flags: { tfTransferable: true } });
|
|
11
|
+
*
|
|
12
|
+
* @see https://xrpl.org/docs/references/protocol/transactions/types/nftokenmint
|
|
13
|
+
* @see https://github.com/XRPLF/xrpl.js/blob/main/packages/xrpl/src/models/transactions/NFTokenMint.ts
|
|
14
|
+
* @see XLS-0020 (Non-Fungible Tokens)
|
|
15
|
+
* @see XLS-0046 (Dynamic Non-Fungible Tokens — tfMutable)
|
|
16
|
+
*
|
|
17
|
+
* ## Divergences
|
|
18
|
+
*
|
|
19
|
+
* Compared with `src/transactions/nftoken-mint.ts`, this factory adds
|
|
20
|
+
* guards the class skips (or that xrpl.js / xrpl.org / XLS-20 / XLS-46
|
|
21
|
+
* mandate but the class omits):
|
|
22
|
+
*
|
|
23
|
+
* - **`Issuer` must not equal `Account`** — when both are present and
|
|
24
|
+
* identical, the transaction cannot be authorized to mint on its own
|
|
25
|
+
* behalf. xrpl.js's `validateNFTokenMint` enforces this explicitly
|
|
26
|
+
* (lines 149–153), but our class source does not.
|
|
27
|
+
* - Source: xrpl.js
|
|
28
|
+
* `~/.mavis/docs.local/xrpl.js/repo/packages/xrpl/src/models/transactions/NFTokenMint.ts`
|
|
29
|
+
* lines 149–153.
|
|
30
|
+
*
|
|
31
|
+
* - **`URI` must be hex-encoded** — XLS-20 §1.3.3 and xrpl.org both state
|
|
32
|
+
* the URI is a BLOB and must be hex-encoded in JSON. Our class accepts
|
|
33
|
+
* any string.
|
|
34
|
+
* - Source: XLS-20 §1.3.3
|
|
35
|
+
* (`~/.mavis/docs.local/xrpl-standards/repo/XLS-0020-non-fungible-tokens/README.md`
|
|
36
|
+
* line 134).
|
|
37
|
+
* - Source: xrpl.org `nftokenmint.md` ("This field must be hex-encoded")
|
|
38
|
+
* (`~/.mavis/docs.local/xrpl-dev-portal/repo/docs/references/protocol/transactions/types/nftokenmint.md`
|
|
39
|
+
* line 53).
|
|
40
|
+
*
|
|
41
|
+
* - **`URI` must not be an empty string** — xrpl.js's `validateNFTokenMint`
|
|
42
|
+
* rejects `''` (line 157–159); the class accepts it. XLS-20 §1.3.3 says
|
|
43
|
+
* the field is limited to 256 bytes but does not speak to empty; we
|
|
44
|
+
* follow xrpl.js here to mirror the on-ledger behavior.
|
|
45
|
+
* - Source: xrpl.js `NFTokenMint.ts` lines 157–159.
|
|
46
|
+
*
|
|
47
|
+
* - **`URI` length capped at 256 bytes (512 hex chars)** — XLS-20 §1.3.3
|
|
48
|
+
* states the BLOB is limited to 256 bytes. The class does not enforce
|
|
49
|
+
* this; the factory does. We also reject odd-length hex.
|
|
50
|
+
* - Source: XLS-20 §1.3.3 line 134.
|
|
51
|
+
* - Source: xrpl.org `nftokenmint.md` line 53 ("limited to a maximum
|
|
52
|
+
* length of 256 bytes").
|
|
53
|
+
*
|
|
54
|
+
* - **`NFTokenTaxon` is a UInt32 (0 ≤ taxon ≤ 2^32-1)** — the ledger type
|
|
55
|
+
* is `UInt32`. The class only checks `isNumber`, allowing negatives
|
|
56
|
+
* and non-integers.
|
|
57
|
+
* - Source: xrpl.org `nftokenmint.md` line 50 ("UInt32").
|
|
58
|
+
* - Source: XLS-20 §1.5.1
|
|
59
|
+
* (`~/.mavis/docs.local/xrpl-standards/repo/XLS-0020-non-fungible-tokens/README.md`
|
|
60
|
+
* line 344: "Taxons have a valid range from 0x0 to 0xFFFFFFFF").
|
|
61
|
+
*
|
|
62
|
+
* - **`TransferFee` requires `tfTransferable`** — XLS-20 §1.5.1 (line 367)
|
|
63
|
+
* and xrpl.org `nftokenmint.md` (line 52) both state: "If this field
|
|
64
|
+
* is provided, the transaction MUST have the `tfTransferable` flag
|
|
65
|
+
* enabled." The class does not check this coupling.
|
|
66
|
+
* - Source: XLS-20 §1.5.1 line 367: "The field MUST NOT be present if
|
|
67
|
+
* the `tfTransferable` flag is not set. If it is, the transaction
|
|
68
|
+
* should fail and a fee should be claimed."
|
|
69
|
+
* - Source: xrpl.org `nftokenmint.md` line 52.
|
|
70
|
+
*
|
|
71
|
+
* - **`TransferFee` must be an integer** — the class only checks range.
|
|
72
|
+
* The ledger type is `UInt16`, so fractional values must be rejected.
|
|
73
|
+
* - Source: XLS-20 §1.5.1 line 363 ("UINT16").
|
|
74
|
+
* - Source: xrpl.org `nftokenmint.md` line 52 ("UInt16").
|
|
75
|
+
*
|
|
76
|
+
* - **`Expiration` must be a UInt32** — the class allows any number.
|
|
77
|
+
* The ledger type is `UInt32`; we reject negatives, fractions, and
|
|
78
|
+
* values > 4294967295.
|
|
79
|
+
* - Source: xrpl.org `nftokenmint.md` line 55 ("UInt32").
|
|
80
|
+
*
|
|
81
|
+
* - **`tfTrustLine` flag (0x00000004) is rejected** — the
|
|
82
|
+
* `fixRemoveNFTokenAutoTrustLine` amendment makes `tfTrustLine` invalid.
|
|
83
|
+
* xrpl.org's Error Cases table flags this explicitly: "If the
|
|
84
|
+
* fixRemoveNFTokenAutoTrustLine amendment is enabled, the tfTrustLine
|
|
85
|
+
* flag causes this error (`temINVALID_FLAG`)." The class does not
|
|
86
|
+
* guard against it.
|
|
87
|
+
* - Source: xrpl.org `nftokenmint.md` line 117.
|
|
88
|
+
*
|
|
89
|
+
* - **Cross-field: `Expiration` AND `Destination` together require
|
|
90
|
+
* `Amount`** — xrpl.js's `validateNFTokenMint` (lines 169–175) treats
|
|
91
|
+
* `Expiration`/`Destination` as requiring `Amount` together, but the
|
|
92
|
+
* error wording is the single-message form. We enforce the same
|
|
93
|
+
* single-check rule (Presence of either ⇒ `Amount` required). The
|
|
94
|
+
* class enforces this per-field.
|
|
95
|
+
* - Source: xrpl.js `NFTokenMint.ts` lines 169–175.
|
|
96
|
+
*
|
|
97
|
+
* - **`Amount` for XRP allows `"0"` (gratis giveaway)** — XLS-20 §1.5.1
|
|
98
|
+
* (line 694) and xrpl.org `nftokenmint.md` (line 54) both explicitly
|
|
99
|
+
* permit zero-amount XRP NFTokenMint offers (giving the token away
|
|
100
|
+
* gratis). For IOU/MPT, the amount must be non-zero. We do not reject
|
|
101
|
+
* Amount here — the `isAmount` helper accepts the shape, and we leave
|
|
102
|
+
* the zero-vs-nonzero distinction to the ledger. (Divergence is
|
|
103
|
+
* documented for awareness; this guard is intentionally permissive so
|
|
104
|
+
* the factory works for both gratis and priced mint offers.)
|
|
105
|
+
* - Source: XLS-20 §1.5.1 line 694.
|
|
106
|
+
* - Source: xrpl.org `nftokenmint.md` line 54.
|
|
107
|
+
*
|
|
108
|
+
* - **`tfMutable` flag (0x00000010) accepted (XLS-46 dNFT)** — the
|
|
109
|
+
* Dynamic NFT amendment introduces this flag. The class types it but
|
|
110
|
+
* does not document it; we expose and validate it the same way as
|
|
111
|
+
* the other flags. (No extra validation is required — tfMutable is a
|
|
112
|
+
* simple boolean toggle that affects future NFTokenModify calls.)
|
|
113
|
+
* - Source: XLS-0046 §3.1
|
|
114
|
+
* (`~/.mavis/docs.local/xrpl-standards/repo/XLS-0046-dynamic-non-fungible-tokens/README.md`
|
|
115
|
+
* line 47).
|
|
116
|
+
* - Source: xrpl.org `dynamic-nfts.md`
|
|
117
|
+
* (`~/.mavis/docs.local/xrpl-dev-portal/repo/docs/concepts/tokens/nfts/dynamic-nfts.md`
|
|
118
|
+
* line 13: "enable the `tfMutable` flag (`0x00000010`) to make the NFT
|
|
119
|
+
* mutable.").
|
|
120
|
+
*/
|
|
121
|
+
import type { Amount } from '../../types/amounts.js';
|
|
122
|
+
import type { NFTokenMintFlagsInterface } from '../../types/flags.js';
|
|
123
|
+
export interface NftokenMintProps {
|
|
124
|
+
Account: string;
|
|
125
|
+
/** Taxon for the NFToken series. UInt32 (0..2^32-1). */
|
|
126
|
+
NFTokenTaxon: number;
|
|
127
|
+
/** Issuer (when minting on behalf of another authorized account). */
|
|
128
|
+
Issuer?: string | undefined;
|
|
129
|
+
/** Secondary-sale transfer fee in 1/10 bps (0–50000). Requires tfTransferable. */
|
|
130
|
+
TransferFee?: number | undefined;
|
|
131
|
+
/** Arbitrary data URI, hex-encoded, ≤ 256 bytes. */
|
|
132
|
+
URI?: string | undefined;
|
|
133
|
+
/** Amount for an attached sell offer. Zero is permitted for XRP. */
|
|
134
|
+
Amount?: Amount | undefined;
|
|
135
|
+
/** Offer expiration in seconds since Ripple Epoch (UInt32). Requires Amount. */
|
|
136
|
+
Expiration?: number | undefined;
|
|
137
|
+
/** Restricts offer acceptance to one account. Requires Amount. */
|
|
138
|
+
Destination?: string | undefined;
|
|
139
|
+
/**
|
|
140
|
+
* Bit-flags. Either a numeric bitmask (see `NFTokenMintFlags`) or the
|
|
141
|
+
* boolean-map `NFTokenMintFlagsInterface` form (tfBurnable,
|
|
142
|
+
* tfOnlyXRP, tfTransferable, tfMutable).
|
|
143
|
+
*/
|
|
144
|
+
Flags?: number | NFTokenMintFlagsInterface | undefined;
|
|
145
|
+
Fee?: string | undefined;
|
|
146
|
+
Sequence?: number | undefined;
|
|
147
|
+
}
|
|
148
|
+
export interface NftokenMint extends Readonly<NftokenMintProps> {
|
|
149
|
+
readonly TransactionType: 'NFTokenMint';
|
|
150
|
+
validate(): void;
|
|
151
|
+
toJSON(): Record<string, unknown>;
|
|
152
|
+
with(overrides: Partial<NftokenMintProps>): NftokenMint;
|
|
153
|
+
}
|
|
154
|
+
export declare function nftokenMint(props: NftokenMintProps): NftokenMint;
|
|
155
|
+
//# sourceMappingURL=nftoken-mint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nftoken-mint.d.ts","sourceRoot":"","sources":["../../../src/fp/factories/nftoken-mint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuHG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AA2BtE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,oDAAoD;IACpD,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,yBAAyB,GAAG,SAAS,CAAC;IACvD,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,WAAY,SAAQ,QAAQ,CAAC,gBAAgB,CAAC;IAC7D,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC;IACxC,QAAQ,IAAI,IAAI,CAAC;IACjB,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,WAAW,CAAC;CACzD;AA6BD,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,WAAW,CAyKhE"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { isAccount, isAmount, 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
|
+
// XLS-20 / xrpl.org: TransferFee is UInt16, max 50000 (50.000%).
|
|
6
|
+
const MAX_TRANSFER_FEE = 50_000;
|
|
7
|
+
// XLS-20 / xrpl.org: NFTokenTaxon is UInt32.
|
|
8
|
+
const MAX_NFTOKEN_TAXON = 0xffffffff;
|
|
9
|
+
// XLS-20 / xrpl.org: Expiration is UInt32.
|
|
10
|
+
const MAX_EXPIRATION = 0xffffffff;
|
|
11
|
+
// XLS-20 / xrpl.org: URI is a BLOB with max 256 bytes.
|
|
12
|
+
const MAX_URI_BYTES = 256;
|
|
13
|
+
const MAX_URI_HEX_CHARS = MAX_URI_BYTES * 2;
|
|
14
|
+
// ─── Helpers ─────────────────────────────────────────────────────────
|
|
15
|
+
/**
|
|
16
|
+
* Translate the boolean-map `NFTokenMintFlagsInterface` into a numeric
|
|
17
|
+
* bitmask. Numeric `Flags` pass through unchanged.
|
|
18
|
+
*
|
|
19
|
+
* tfTrustLine is intentionally NOT translated — it is deprecated by the
|
|
20
|
+
* `fixRemoveNFTokenAutoTrustLine` amendment. Callers passing
|
|
21
|
+
* `{ tfTrustLine: true }` get the bit set anyway, and the post-translation
|
|
22
|
+
* rejection guard catches it.
|
|
23
|
+
*/
|
|
24
|
+
function flagsToNumber(flags) {
|
|
25
|
+
if (flags === undefined)
|
|
26
|
+
return 0;
|
|
27
|
+
if (typeof flags === 'number')
|
|
28
|
+
return flags;
|
|
29
|
+
let n = 0;
|
|
30
|
+
if (flags.tfBurnable)
|
|
31
|
+
n |= 0x00000001;
|
|
32
|
+
if (flags.tfOnlyXRP)
|
|
33
|
+
n |= 0x00000002;
|
|
34
|
+
if (flags.tfTrustLine)
|
|
35
|
+
n |= 0x00000004;
|
|
36
|
+
if (flags.tfTransferable)
|
|
37
|
+
n |= 0x00000008;
|
|
38
|
+
if (flags.tfMutable)
|
|
39
|
+
n |= 0x00000010;
|
|
40
|
+
return n;
|
|
41
|
+
}
|
|
42
|
+
// ─── Factory ─────────────────────────────────────────────────────────
|
|
43
|
+
export function nftokenMint(props) {
|
|
44
|
+
// ── Account ── required, must be a valid XRPL classic address.
|
|
45
|
+
require(props.Account, 'NFTokenMint: Account is required', isAccount);
|
|
46
|
+
// ── NFTokenTaxon ── required, integer in [0, 2^32-1].
|
|
47
|
+
if (!isNumber(props.NFTokenTaxon) ||
|
|
48
|
+
!Number.isInteger(props.NFTokenTaxon) ||
|
|
49
|
+
props.NFTokenTaxon < 0 ||
|
|
50
|
+
props.NFTokenTaxon > MAX_NFTOKEN_TAXON) {
|
|
51
|
+
throw new ValidationError(`NFTokenMint: NFTokenTaxon must be an integer in [0, ${MAX_NFTOKEN_TAXON}] (UInt32)`);
|
|
52
|
+
}
|
|
53
|
+
// ── Issuer ── optional, must be a valid XRPL account, and must NOT
|
|
54
|
+
// equal Account (xrpl.js validateNFTokenMint lines 149-153).
|
|
55
|
+
if (props.Issuer !== undefined) {
|
|
56
|
+
if (!isAccount(props.Issuer)) {
|
|
57
|
+
throw new ValidationError('NFTokenMint: Issuer must be a valid XRPL account address');
|
|
58
|
+
}
|
|
59
|
+
if (props.Issuer === props.Account) {
|
|
60
|
+
throw new ValidationError('NFTokenMint: Issuer must not be equal to Account');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// ── TransferFee ── optional, integer in [0, 50000], requires
|
|
64
|
+
// tfTransferable flag (XLS-20 §1.5.1 line 367).
|
|
65
|
+
if (props.TransferFee !== undefined) {
|
|
66
|
+
if (!isNumber(props.TransferFee) ||
|
|
67
|
+
!Number.isInteger(props.TransferFee) ||
|
|
68
|
+
props.TransferFee < 0 ||
|
|
69
|
+
props.TransferFee > MAX_TRANSFER_FEE) {
|
|
70
|
+
throw new ValidationError(`NFTokenMint: TransferFee must be an integer in [0, ${MAX_TRANSFER_FEE}]`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// ── URI ── optional, non-empty hex, even length, ≤ 256 bytes
|
|
74
|
+
// (512 hex chars). Odd-length hex is invalid by the BLOB spec.
|
|
75
|
+
if (props.URI !== undefined) {
|
|
76
|
+
if (!isString(props.URI) || !isHex(props.URI)) {
|
|
77
|
+
throw new ValidationError('NFTokenMint: URI must be a hex-encoded string');
|
|
78
|
+
}
|
|
79
|
+
if (props.URI.length === 0) {
|
|
80
|
+
throw new ValidationError('NFTokenMint: URI must not be an empty string');
|
|
81
|
+
}
|
|
82
|
+
if (props.URI.length % 2 !== 0) {
|
|
83
|
+
throw new ValidationError('NFTokenMint: URI must have an even number of hex characters (BLOB is byte-aligned)');
|
|
84
|
+
}
|
|
85
|
+
if (props.URI.length > MAX_URI_HEX_CHARS) {
|
|
86
|
+
throw new ValidationError(`NFTokenMint: URI exceeds ${MAX_URI_BYTES} bytes (${MAX_URI_HEX_CHARS} hex chars); actual: ${props.URI.length}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// ── Amount ── optional, must be a valid Amount (XRP string / IOU / MPT).
|
|
90
|
+
if (props.Amount !== undefined && !isAmount(props.Amount)) {
|
|
91
|
+
throw new ValidationError('NFTokenMint: Amount must be a valid Amount (XRP drops string, IOU object, or MPT object)');
|
|
92
|
+
}
|
|
93
|
+
// ── Expiration ── optional, requires Amount, UInt32 in [0, 2^32-1].
|
|
94
|
+
if (props.Expiration !== undefined) {
|
|
95
|
+
if (props.Amount === undefined) {
|
|
96
|
+
throw new ValidationError('NFTokenMint: Expiration requires Amount');
|
|
97
|
+
}
|
|
98
|
+
if (!isNumber(props.Expiration) ||
|
|
99
|
+
!Number.isInteger(props.Expiration) ||
|
|
100
|
+
props.Expiration < 0 ||
|
|
101
|
+
props.Expiration > MAX_EXPIRATION) {
|
|
102
|
+
throw new ValidationError(`NFTokenMint: Expiration must be a UInt32 integer in [0, ${MAX_EXPIRATION}]`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// ── Destination ── optional, requires Amount, must be valid XRPL account.
|
|
106
|
+
if (props.Destination !== undefined) {
|
|
107
|
+
if (props.Amount === undefined) {
|
|
108
|
+
throw new ValidationError('NFTokenMint: Destination requires Amount');
|
|
109
|
+
}
|
|
110
|
+
if (!isAccount(props.Destination)) {
|
|
111
|
+
throw new ValidationError('NFTokenMint: Destination must be a valid XRPL account address');
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// ── Flags ── translate + reject deprecated tfTrustLine.
|
|
115
|
+
const numericFlags = flagsToNumber(props.Flags);
|
|
116
|
+
const TF_TRUST_LINE = 0x00000004;
|
|
117
|
+
if ((numericFlags & TF_TRUST_LINE) === TF_TRUST_LINE) {
|
|
118
|
+
throw new ValidationError('NFTokenMint: tfTrustLine (0x4) is deprecated by the fixRemoveNFTokenAutoTrustLine amendment and cannot be set');
|
|
119
|
+
}
|
|
120
|
+
// ── TransferFee ↔ tfTransferable coupling ── XLS-20 §1.5.1 line 367.
|
|
121
|
+
const TF_TRANSFERABLE = 0x00000008;
|
|
122
|
+
if (props.TransferFee !== undefined &&
|
|
123
|
+
(numericFlags & TF_TRANSFERABLE) !== TF_TRANSFERABLE) {
|
|
124
|
+
throw new ValidationError('NFTokenMint: TransferFee requires the tfTransferable flag (0x8) to be set');
|
|
125
|
+
}
|
|
126
|
+
// ── Amount shape sub-checks (when IOU/MPT, value must be a non-negative
|
|
127
|
+
// base-10 integer string; issuer must be a valid account for IOU).
|
|
128
|
+
if (props.Amount !== undefined) {
|
|
129
|
+
if (isIssuedCurrencyAmount(props.Amount)) {
|
|
130
|
+
if (!isAccount(props.Amount.issuer)) {
|
|
131
|
+
throw new ValidationError('NFTokenMint: Amount.issuer must be a valid XRPL account address');
|
|
132
|
+
}
|
|
133
|
+
if (!isString(props.Amount.value) ||
|
|
134
|
+
!/^[0-9]+$/u.test(props.Amount.value)) {
|
|
135
|
+
throw new ValidationError('NFTokenMint: Amount.value must be a non-negative base-10 integer string');
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else if (isMPTAmount(props.Amount)) {
|
|
139
|
+
if (!isString(props.Amount.value) ||
|
|
140
|
+
!/^[0-9]+$/u.test(props.Amount.value)) {
|
|
141
|
+
throw new ValidationError('NFTokenMint: Amount.value must be a non-negative base-10 integer string');
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return buildFrozenTx('NFTokenMint', props, {
|
|
146
|
+
validate() {
|
|
147
|
+
// Validated at construction.
|
|
148
|
+
},
|
|
149
|
+
toJSON() {
|
|
150
|
+
const json = {};
|
|
151
|
+
for (const k of Object.keys(this)) {
|
|
152
|
+
if (k === 'validate' || k === 'toJSON' || k === 'with')
|
|
153
|
+
continue;
|
|
154
|
+
const v = this[k];
|
|
155
|
+
if (v !== undefined)
|
|
156
|
+
json[k] = v;
|
|
157
|
+
}
|
|
158
|
+
return json;
|
|
159
|
+
},
|
|
160
|
+
with(overrides) {
|
|
161
|
+
return nftokenMint(mergeForWith(this, overrides));
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=nftoken-mint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nftoken-mint.js","sourceRoot":"","sources":["../../../src/fp/factories/nftoken-mint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface NftokenModifyProps {
|
|
2
|
+
Account: string;
|
|
3
|
+
/** The 64-char hex (UInt256) identifier of the dynamic NFToken to
|
|
4
|
+
* modify. */
|
|
5
|
+
NFTokenID: string;
|
|
6
|
+
/** New URI (hex-encoded, ≤ 256 bytes). Omit to delete the existing
|
|
7
|
+
* URI on the token. */
|
|
8
|
+
URI?: string | undefined;
|
|
9
|
+
/** Current owner of the NFToken, if different from Account. Used by
|
|
10
|
+
* the issuer / authorized minter to modify a token held by another
|
|
11
|
+
* account. */
|
|
12
|
+
Owner?: string | undefined;
|
|
13
|
+
Fee?: string | undefined;
|
|
14
|
+
Sequence?: number | undefined;
|
|
15
|
+
/** Bit-flags (numeric bitmask). NFTokenModify itself defines no
|
|
16
|
+
* transaction-specific flags; only `tfFullyCanonicalSig` (global)
|
|
17
|
+
* is normally meaningful. Accepted for parity with the base
|
|
18
|
+
* transaction shape. */
|
|
19
|
+
Flags?: number | undefined;
|
|
20
|
+
}
|
|
21
|
+
export interface NftokenModify extends Readonly<NftokenModifyProps> {
|
|
22
|
+
readonly TransactionType: 'NFTokenModify';
|
|
23
|
+
validate(): void;
|
|
24
|
+
toJSON(): Record<string, unknown>;
|
|
25
|
+
with(overrides: Partial<NftokenModifyProps>): NftokenModify;
|
|
26
|
+
}
|
|
27
|
+
export declare function nftokenModify(props: NftokenModifyProps): NftokenModify;
|
|
28
|
+
//# sourceMappingURL=nftoken-modify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nftoken-modify.d.ts","sourceRoot":"","sources":["../../../src/fp/factories/nftoken-modify.ts"],"names":[],"mappings":"AA8IA,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB;kBACc;IACd,SAAS,EAAE,MAAM,CAAC;IAClB;4BACwB;IACxB,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB;;mBAEe;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B;;;6BAGyB;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED,MAAM,WAAW,aACf,SAAQ,QAAQ,CAAC,kBAAkB,CAAC;IACpC,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;AAID,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,CAiGtE"}
|