xrpl 4.4.0-smartescrow.0 → 4.5.0-smartescrow.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.
Files changed (171) hide show
  1. package/build/xrpl-latest-min.js +1 -1
  2. package/build/xrpl-latest-min.js.map +1 -1
  3. package/build/xrpl-latest.js +191 -26
  4. package/build/xrpl-latest.js.map +1 -1
  5. package/dist/npm/models/common/index.d.ts +16 -0
  6. package/dist/npm/models/common/index.d.ts.map +1 -1
  7. package/dist/npm/models/ledger/AccountRoot.d.ts +3 -1
  8. package/dist/npm/models/ledger/AccountRoot.d.ts.map +1 -1
  9. package/dist/npm/models/ledger/AccountRoot.js +1 -0
  10. package/dist/npm/models/ledger/AccountRoot.js.map +1 -1
  11. package/dist/npm/models/ledger/DirectoryNode.d.ts +1 -0
  12. package/dist/npm/models/ledger/DirectoryNode.d.ts.map +1 -1
  13. package/dist/npm/models/ledger/Escrow.d.ts +2 -0
  14. package/dist/npm/models/ledger/Escrow.d.ts.map +1 -1
  15. package/dist/npm/models/ledger/MPToken.d.ts +1 -0
  16. package/dist/npm/models/ledger/MPToken.d.ts.map +1 -1
  17. package/dist/npm/models/ledger/MPTokenIssuance.d.ts +1 -0
  18. package/dist/npm/models/ledger/MPTokenIssuance.d.ts.map +1 -1
  19. package/dist/npm/models/ledger/Offer.d.ts +10 -1
  20. package/dist/npm/models/ledger/Offer.d.ts.map +1 -1
  21. package/dist/npm/models/ledger/Offer.js +1 -0
  22. package/dist/npm/models/ledger/Offer.js.map +1 -1
  23. package/dist/npm/models/methods/bookOffers.d.ts +1 -0
  24. package/dist/npm/models/methods/bookOffers.d.ts.map +1 -1
  25. package/dist/npm/models/methods/pathFind.d.ts +2 -0
  26. package/dist/npm/models/methods/pathFind.d.ts.map +1 -1
  27. package/dist/npm/models/methods/ripplePathFind.d.ts +1 -0
  28. package/dist/npm/models/methods/ripplePathFind.d.ts.map +1 -1
  29. package/dist/npm/models/methods/subscribe.d.ts +4 -0
  30. package/dist/npm/models/methods/subscribe.d.ts.map +1 -1
  31. package/dist/npm/models/transactions/MPTokenIssuanceCreate.d.ts +1 -1
  32. package/dist/npm/models/transactions/MPTokenIssuanceCreate.d.ts.map +1 -1
  33. package/dist/npm/models/transactions/MPTokenIssuanceCreate.js +14 -5
  34. package/dist/npm/models/transactions/MPTokenIssuanceCreate.js.map +1 -1
  35. package/dist/npm/models/transactions/accountSet.d.ts +2 -1
  36. package/dist/npm/models/transactions/accountSet.d.ts.map +1 -1
  37. package/dist/npm/models/transactions/accountSet.js +1 -0
  38. package/dist/npm/models/transactions/accountSet.js.map +1 -1
  39. package/dist/npm/models/transactions/common.d.ts +4 -0
  40. package/dist/npm/models/transactions/common.d.ts.map +1 -1
  41. package/dist/npm/models/transactions/common.js +134 -1
  42. package/dist/npm/models/transactions/common.js.map +1 -1
  43. package/dist/npm/models/transactions/escrowCreate.d.ts +2 -1
  44. package/dist/npm/models/transactions/escrowCreate.d.ts.map +1 -1
  45. package/dist/npm/models/transactions/escrowCreate.js +1 -6
  46. package/dist/npm/models/transactions/escrowCreate.js.map +1 -1
  47. package/dist/npm/models/transactions/escrowFinish.d.ts +5 -0
  48. package/dist/npm/models/transactions/escrowFinish.d.ts.map +1 -1
  49. package/dist/npm/models/transactions/escrowFinish.js.map +1 -1
  50. package/dist/npm/models/transactions/index.d.ts +1 -1
  51. package/dist/npm/models/transactions/index.d.ts.map +1 -1
  52. package/dist/npm/models/transactions/index.js +2 -1
  53. package/dist/npm/models/transactions/index.js.map +1 -1
  54. package/dist/npm/models/transactions/metadata.d.ts +2 -1
  55. package/dist/npm/models/transactions/metadata.d.ts.map +1 -1
  56. package/dist/npm/models/transactions/metadata.js.map +1 -1
  57. package/dist/npm/models/transactions/offerCreate.d.ts +4 -1
  58. package/dist/npm/models/transactions/offerCreate.d.ts.map +1 -1
  59. package/dist/npm/models/transactions/offerCreate.js +10 -0
  60. package/dist/npm/models/transactions/offerCreate.js.map +1 -1
  61. package/dist/npm/models/transactions/payment.d.ts +1 -0
  62. package/dist/npm/models/transactions/payment.d.ts.map +1 -1
  63. package/dist/npm/models/transactions/payment.js +4 -3
  64. package/dist/npm/models/transactions/payment.js.map +1 -1
  65. package/dist/npm/models/transactions/vaultCreate.d.ts.map +1 -1
  66. package/dist/npm/models/transactions/vaultCreate.js +13 -4
  67. package/dist/npm/models/transactions/vaultCreate.js.map +1 -1
  68. package/dist/npm/models/transactions/vaultDeposit.d.ts +2 -2
  69. package/dist/npm/models/transactions/vaultDeposit.d.ts.map +1 -1
  70. package/dist/npm/models/transactions/vaultDeposit.js.map +1 -1
  71. package/dist/npm/models/transactions/vaultWithdraw.d.ts +2 -2
  72. package/dist/npm/models/transactions/vaultWithdraw.d.ts.map +1 -1
  73. package/dist/npm/models/transactions/vaultWithdraw.js.map +1 -1
  74. package/dist/npm/snippets/src/permissionedDEX.d.ts +2 -0
  75. package/dist/npm/snippets/src/permissionedDEX.d.ts.map +1 -0
  76. package/dist/npm/snippets/src/permissionedDEX.js +173 -0
  77. package/dist/npm/snippets/src/permissionedDEX.js.map +1 -0
  78. package/dist/npm/snippets/tsconfig.tsbuildinfo +1 -1
  79. package/dist/npm/src/models/common/index.d.ts +16 -0
  80. package/dist/npm/src/models/common/index.d.ts.map +1 -1
  81. package/dist/npm/src/models/ledger/AccountRoot.d.ts +3 -1
  82. package/dist/npm/src/models/ledger/AccountRoot.d.ts.map +1 -1
  83. package/dist/npm/src/models/ledger/AccountRoot.js +1 -0
  84. package/dist/npm/src/models/ledger/AccountRoot.js.map +1 -1
  85. package/dist/npm/src/models/ledger/DirectoryNode.d.ts +1 -0
  86. package/dist/npm/src/models/ledger/DirectoryNode.d.ts.map +1 -1
  87. package/dist/npm/src/models/ledger/Escrow.d.ts +2 -0
  88. package/dist/npm/src/models/ledger/Escrow.d.ts.map +1 -1
  89. package/dist/npm/src/models/ledger/MPToken.d.ts +1 -0
  90. package/dist/npm/src/models/ledger/MPToken.d.ts.map +1 -1
  91. package/dist/npm/src/models/ledger/MPTokenIssuance.d.ts +1 -0
  92. package/dist/npm/src/models/ledger/MPTokenIssuance.d.ts.map +1 -1
  93. package/dist/npm/src/models/ledger/Offer.d.ts +10 -1
  94. package/dist/npm/src/models/ledger/Offer.d.ts.map +1 -1
  95. package/dist/npm/src/models/ledger/Offer.js +1 -0
  96. package/dist/npm/src/models/ledger/Offer.js.map +1 -1
  97. package/dist/npm/src/models/methods/bookOffers.d.ts +1 -0
  98. package/dist/npm/src/models/methods/bookOffers.d.ts.map +1 -1
  99. package/dist/npm/src/models/methods/pathFind.d.ts +2 -0
  100. package/dist/npm/src/models/methods/pathFind.d.ts.map +1 -1
  101. package/dist/npm/src/models/methods/ripplePathFind.d.ts +1 -0
  102. package/dist/npm/src/models/methods/ripplePathFind.d.ts.map +1 -1
  103. package/dist/npm/src/models/methods/subscribe.d.ts +4 -0
  104. package/dist/npm/src/models/methods/subscribe.d.ts.map +1 -1
  105. package/dist/npm/src/models/transactions/MPTokenIssuanceCreate.d.ts +1 -1
  106. package/dist/npm/src/models/transactions/MPTokenIssuanceCreate.d.ts.map +1 -1
  107. package/dist/npm/src/models/transactions/MPTokenIssuanceCreate.js +14 -5
  108. package/dist/npm/src/models/transactions/MPTokenIssuanceCreate.js.map +1 -1
  109. package/dist/npm/src/models/transactions/accountSet.d.ts +2 -1
  110. package/dist/npm/src/models/transactions/accountSet.d.ts.map +1 -1
  111. package/dist/npm/src/models/transactions/accountSet.js +1 -0
  112. package/dist/npm/src/models/transactions/accountSet.js.map +1 -1
  113. package/dist/npm/src/models/transactions/common.d.ts +4 -0
  114. package/dist/npm/src/models/transactions/common.d.ts.map +1 -1
  115. package/dist/npm/src/models/transactions/common.js +134 -1
  116. package/dist/npm/src/models/transactions/common.js.map +1 -1
  117. package/dist/npm/src/models/transactions/escrowCreate.d.ts +2 -1
  118. package/dist/npm/src/models/transactions/escrowCreate.d.ts.map +1 -1
  119. package/dist/npm/src/models/transactions/escrowCreate.js +1 -6
  120. package/dist/npm/src/models/transactions/escrowCreate.js.map +1 -1
  121. package/dist/npm/src/models/transactions/escrowFinish.d.ts +5 -0
  122. package/dist/npm/src/models/transactions/escrowFinish.d.ts.map +1 -1
  123. package/dist/npm/src/models/transactions/escrowFinish.js.map +1 -1
  124. package/dist/npm/src/models/transactions/index.d.ts +1 -1
  125. package/dist/npm/src/models/transactions/index.d.ts.map +1 -1
  126. package/dist/npm/src/models/transactions/index.js +2 -1
  127. package/dist/npm/src/models/transactions/index.js.map +1 -1
  128. package/dist/npm/src/models/transactions/metadata.d.ts +2 -1
  129. package/dist/npm/src/models/transactions/metadata.d.ts.map +1 -1
  130. package/dist/npm/src/models/transactions/metadata.js.map +1 -1
  131. package/dist/npm/src/models/transactions/offerCreate.d.ts +4 -1
  132. package/dist/npm/src/models/transactions/offerCreate.d.ts.map +1 -1
  133. package/dist/npm/src/models/transactions/offerCreate.js +10 -0
  134. package/dist/npm/src/models/transactions/offerCreate.js.map +1 -1
  135. package/dist/npm/src/models/transactions/payment.d.ts +1 -0
  136. package/dist/npm/src/models/transactions/payment.d.ts.map +1 -1
  137. package/dist/npm/src/models/transactions/payment.js +4 -3
  138. package/dist/npm/src/models/transactions/payment.js.map +1 -1
  139. package/dist/npm/src/models/transactions/vaultCreate.d.ts.map +1 -1
  140. package/dist/npm/src/models/transactions/vaultCreate.js +13 -4
  141. package/dist/npm/src/models/transactions/vaultCreate.js.map +1 -1
  142. package/dist/npm/src/models/transactions/vaultDeposit.d.ts +2 -2
  143. package/dist/npm/src/models/transactions/vaultDeposit.d.ts.map +1 -1
  144. package/dist/npm/src/models/transactions/vaultDeposit.js.map +1 -1
  145. package/dist/npm/src/models/transactions/vaultWithdraw.d.ts +2 -2
  146. package/dist/npm/src/models/transactions/vaultWithdraw.d.ts.map +1 -1
  147. package/dist/npm/src/models/transactions/vaultWithdraw.js.map +1 -1
  148. package/package.json +4 -4
  149. package/src/models/common/index.ts +25 -0
  150. package/src/models/ledger/AccountRoot.ts +10 -0
  151. package/src/models/ledger/DirectoryNode.ts +3 -0
  152. package/src/models/ledger/Escrow.ts +13 -1
  153. package/src/models/ledger/MPToken.ts +1 -0
  154. package/src/models/ledger/MPTokenIssuance.ts +1 -0
  155. package/src/models/ledger/Offer.ts +21 -0
  156. package/src/models/methods/bookOffers.ts +7 -0
  157. package/src/models/methods/pathFind.ts +10 -0
  158. package/src/models/methods/ripplePathFind.ts +5 -0
  159. package/src/models/methods/subscribe.ts +21 -0
  160. package/src/models/transactions/MPTokenIssuanceCreate.ts +33 -10
  161. package/src/models/transactions/accountSet.ts +2 -0
  162. package/src/models/transactions/common.ts +236 -1
  163. package/src/models/transactions/escrowCreate.ts +8 -12
  164. package/src/models/transactions/escrowFinish.ts +7 -0
  165. package/src/models/transactions/index.ts +1 -1
  166. package/src/models/transactions/metadata.ts +3 -0
  167. package/src/models/transactions/offerCreate.ts +25 -0
  168. package/src/models/transactions/payment.ts +18 -6
  169. package/src/models/transactions/vaultCreate.ts +30 -6
  170. package/src/models/transactions/vaultDeposit.ts +3 -2
  171. package/src/models/transactions/vaultWithdraw.ts +3 -2
@@ -18983,10 +18983,14 @@ const enums_1 = __webpack_require__(/*! ../enums */ "../../node_modules/ripple-b
18983
18983
  const HEX_REGEX = /^[a-fA-F0-9]{1,16}$/;
18984
18984
  const BASE10_REGEX = /^[0-9]{1,20}$/;
18985
18985
  const mask = BigInt(0x00000000ffffffff);
18986
- function useBase10(fieldName) {
18987
- return (fieldName === 'MaximumAmount' ||
18988
- fieldName === 'OutstandingAmount' ||
18989
- fieldName === 'MPTAmount');
18986
+ const BASE10_AMOUNT_FIELDS = new Set([
18987
+ 'MaximumAmount',
18988
+ 'OutstandingAmount',
18989
+ 'MPTAmount',
18990
+ 'LockedAmount',
18991
+ ]);
18992
+ function isBase10(fieldName) {
18993
+ return BASE10_AMOUNT_FIELDS.has(fieldName);
18990
18994
  }
18991
18995
  /**
18992
18996
  * Derived UInt class for serializing/deserializing 64 bit UInt
@@ -19020,7 +19024,7 @@ class UInt64 extends uint_1.UInt {
19020
19024
  return new UInt64((0, utils_1.concat)(intBuf));
19021
19025
  }
19022
19026
  if (typeof val === 'string') {
19023
- if (useBase10(fieldName)) {
19027
+ if (isBase10(fieldName)) {
19024
19028
  if (!BASE10_REGEX.test(val)) {
19025
19029
  throw new Error(`${fieldName} ${val} is not a valid base 10 string`);
19026
19030
  }
@@ -19048,7 +19052,7 @@ class UInt64 extends uint_1.UInt {
19048
19052
  */
19049
19053
  toJSON(_definitions = enums_1.DEFAULT_DEFINITIONS, fieldName = '') {
19050
19054
  const hexString = (0, utils_1.bytesToHex)(this.bytes);
19051
- if (useBase10(fieldName)) {
19055
+ if (isBase10(fieldName)) {
19052
19056
  return BigInt('0x' + hexString).toString(10);
19053
19057
  }
19054
19058
  return hexString;
@@ -21924,6 +21928,7 @@ var AccountRootFlags;
21924
21928
  AccountRootFlags[AccountRootFlags["lsfDisallowIncomingPayChan"] = 268435456] = "lsfDisallowIncomingPayChan";
21925
21929
  AccountRootFlags[AccountRootFlags["lsfDisallowIncomingTrustline"] = 536870912] = "lsfDisallowIncomingTrustline";
21926
21930
  AccountRootFlags[AccountRootFlags["lsfAllowTrustLineClawback"] = 2147483648] = "lsfAllowTrustLineClawback";
21931
+ AccountRootFlags[AccountRootFlags["lsfAllowTrustLineLocking"] = 1073741824] = "lsfAllowTrustLineLocking";
21927
21932
  })(AccountRootFlags || (exports.AccountRootFlags = AccountRootFlags = {}));
21928
21933
 
21929
21934
 
@@ -21988,6 +21993,7 @@ var OfferFlags;
21988
21993
  (function (OfferFlags) {
21989
21994
  OfferFlags[OfferFlags["lsfPassive"] = 65536] = "lsfPassive";
21990
21995
  OfferFlags[OfferFlags["lsfSell"] = 131072] = "lsfSell";
21996
+ OfferFlags[OfferFlags["lsfHybrid"] = 262144] = "lsfHybrid";
21991
21997
  })(OfferFlags || (exports.OfferFlags = OfferFlags = {}));
21992
21998
 
21993
21999
 
@@ -22625,11 +22631,10 @@ function validateMPTokenIssuanceCreate(tx) {
22625
22631
  (0, common_1.validateOptionalField)(tx, 'MPTokenMetadata', common_1.isString);
22626
22632
  (0, common_1.validateOptionalField)(tx, 'TransferFee', common_1.isNumber);
22627
22633
  (0, common_1.validateOptionalField)(tx, 'AssetScale', common_1.isNumber);
22628
- if (typeof tx.MPTokenMetadata === 'string' && tx.MPTokenMetadata === '') {
22629
- throw new errors_1.ValidationError('MPTokenIssuanceCreate: MPTokenMetadata must not be empty string');
22630
- }
22631
- if (typeof tx.MPTokenMetadata === 'string' && !(0, utils_1.isHex)(tx.MPTokenMetadata)) {
22632
- throw new errors_1.ValidationError('MPTokenIssuanceCreate: MPTokenMetadata must be in hex format');
22634
+ if (typeof tx.MPTokenMetadata === 'string' &&
22635
+ (!(0, utils_1.isHex)(tx.MPTokenMetadata) ||
22636
+ tx.MPTokenMetadata.length / 2 > common_1.MAX_MPT_META_BYTE_LENGTH)) {
22637
+ throw new errors_1.ValidationError(`MPTokenIssuanceCreate: MPTokenMetadata (hex format) must be non-empty and no more than ${common_1.MAX_MPT_META_BYTE_LENGTH} bytes.`);
22633
22638
  }
22634
22639
  if (typeof tx.MaximumAmount === 'string') {
22635
22640
  if (!utils_1.INTEGER_SANITY_CHECK.exec(tx.MaximumAmount)) {
@@ -22652,6 +22657,16 @@ function validateMPTokenIssuanceCreate(tx) {
22652
22657
  throw new errors_1.ValidationError('MPTokenIssuanceCreate: TransferFee cannot be provided without enabling tfMPTCanTransfer flag');
22653
22658
  }
22654
22659
  }
22660
+ if (tx.MPTokenMetadata != null) {
22661
+ const validationMessages = (0, common_1.validateMPTokenMetadata)(tx.MPTokenMetadata);
22662
+ if (validationMessages.length > 0) {
22663
+ const message = [
22664
+ common_1.MPT_META_WARNING_HEADER,
22665
+ ...validationMessages.map((msg) => `- ${msg}`),
22666
+ ].join('\n');
22667
+ console.warn(message);
22668
+ }
22669
+ }
22655
22670
  }
22656
22671
  exports.validateMPTokenIssuanceCreate = validateMPTokenIssuanceCreate;
22657
22672
 
@@ -23197,6 +23212,7 @@ var AccountSetAsfFlags;
23197
23212
  AccountSetAsfFlags[AccountSetAsfFlags["asfDisallowIncomingPayChan"] = 14] = "asfDisallowIncomingPayChan";
23198
23213
  AccountSetAsfFlags[AccountSetAsfFlags["asfDisallowIncomingTrustline"] = 15] = "asfDisallowIncomingTrustline";
23199
23214
  AccountSetAsfFlags[AccountSetAsfFlags["asfAllowTrustLineClawback"] = 16] = "asfAllowTrustLineClawback";
23215
+ AccountSetAsfFlags[AccountSetAsfFlags["asfAllowTrustLineLocking"] = 17] = "asfAllowTrustLineLocking";
23200
23216
  })(AccountSetAsfFlags || (exports.AccountSetAsfFlags = AccountSetAsfFlags = {}));
23201
23217
  var AccountSetTfFlags;
23202
23218
  (function (AccountSetTfFlags) {
@@ -23469,7 +23485,7 @@ exports.validateClawback = validateClawback;
23469
23485
  "use strict";
23470
23486
 
23471
23487
  Object.defineProperty(exports, "__esModule", ({ value: true }));
23472
- exports.containsDuplicates = exports.validateCredentialsList = exports.validateCredentialType = exports.parseAmountValue = exports.validateBaseTransaction = exports.GlobalFlags = exports.validateOptionalField = exports.validateRequiredField = exports.isArray = exports.isXChainBridge = exports.isAmount = exports.isAccount = exports.isClawbackAmount = exports.isMPTAmount = exports.isAuthorizeCredential = exports.isIssuedCurrencyAmount = exports.isIssuedCurrency = exports.isCurrency = exports.isXRPLNumber = exports.isNumber = exports.isString = exports.isRecord = exports.VAULT_DATA_MAX_BYTE_LENGTH = exports.MAX_AUTHORIZED_CREDENTIALS = void 0;
23488
+ exports.validateMPTokenMetadata = exports.isDomainID = exports.containsDuplicates = exports.validateCredentialsList = exports.validateCredentialType = exports.parseAmountValue = exports.validateBaseTransaction = exports.GlobalFlags = exports.validateOptionalField = exports.validateRequiredField = exports.isArray = exports.isXChainBridge = exports.isAmount = exports.isAccount = exports.isClawbackAmount = exports.isMPTAmount = exports.isAuthorizeCredential = exports.isIssuedCurrencyAmount = exports.isIssuedCurrency = exports.isCurrency = exports.isXRPLNumber = exports.isNumber = exports.isString = exports.isRecord = exports.MPT_META_WARNING_HEADER = exports.VAULT_DATA_MAX_BYTE_LENGTH = exports.MAX_MPT_META_BYTE_LENGTH = exports.MAX_AUTHORIZED_CREDENTIALS = void 0;
23473
23489
  const utils_1 = __webpack_require__(/*! @xrplf/isomorphic/utils */ "../../node_modules/@xrplf/isomorphic/dist/utils/browser.js");
23474
23490
  const ripple_address_codec_1 = __webpack_require__(/*! ripple-address-codec */ "../../node_modules/ripple-address-codec/dist/index.js");
23475
23491
  const ripple_binary_codec_1 = __webpack_require__(/*! ripple-binary-codec */ "../../node_modules/ripple-binary-codec/dist/index.js");
@@ -23479,7 +23495,38 @@ const MEMO_SIZE = 3;
23479
23495
  exports.MAX_AUTHORIZED_CREDENTIALS = 8;
23480
23496
  const MAX_CREDENTIAL_BYTE_LENGTH = 64;
23481
23497
  const MAX_CREDENTIAL_TYPE_LENGTH = MAX_CREDENTIAL_BYTE_LENGTH * 2;
23498
+ exports.MAX_MPT_META_BYTE_LENGTH = 1024;
23482
23499
  exports.VAULT_DATA_MAX_BYTE_LENGTH = 256;
23500
+ const TICKER_REGEX = /^[A-Z0-9]{1,6}$/u;
23501
+ const MAX_MPT_META_TOP_LEVEL_FIELD_COUNT = 9;
23502
+ const MPT_META_URL_FIELD_COUNT = 3;
23503
+ const MPT_META_REQUIRED_FIELDS = [
23504
+ 'ticker',
23505
+ 'name',
23506
+ 'icon',
23507
+ 'asset_class',
23508
+ 'issuer_name',
23509
+ ];
23510
+ const MPT_META_ASSET_CLASSES = [
23511
+ 'rwa',
23512
+ 'memes',
23513
+ 'wrapped',
23514
+ 'gaming',
23515
+ 'defi',
23516
+ 'other',
23517
+ ];
23518
+ const MPT_META_ASSET_SUB_CLASSES = [
23519
+ 'stablecoin',
23520
+ 'commodity',
23521
+ 'real_estate',
23522
+ 'private_credit',
23523
+ 'equity',
23524
+ 'treasury',
23525
+ 'other',
23526
+ ];
23527
+ exports.MPT_META_WARNING_HEADER = 'MPTokenMetadata is not properly formatted as JSON as per the XLS-89d standard. ' +
23528
+ "While adherence to this standard is not mandatory, such non-compliant MPToken's might not be discoverable " +
23529
+ 'by Explorers and Indexers in the XRPL ecosystem.';
23483
23530
  function isMemo(obj) {
23484
23531
  if (!isRecord(obj)) {
23485
23532
  return false;
@@ -23745,6 +23792,108 @@ function containsDuplicates(objectList) {
23745
23792
  return false;
23746
23793
  }
23747
23794
  exports.containsDuplicates = containsDuplicates;
23795
+ const _DOMAIN_ID_LENGTH = 64;
23796
+ function isDomainID(domainID) {
23797
+ return (isString(domainID) &&
23798
+ domainID.length === _DOMAIN_ID_LENGTH &&
23799
+ (0, utils_2.isHex)(domainID));
23800
+ }
23801
+ exports.isDomainID = isDomainID;
23802
+ function validateMPTokenMetadata(input) {
23803
+ const validationMessages = [];
23804
+ if (!(0, utils_2.isHex)(input)) {
23805
+ validationMessages.push(`MPTokenMetadata must be in hex format.`);
23806
+ return validationMessages;
23807
+ }
23808
+ if (input.length / 2 > exports.MAX_MPT_META_BYTE_LENGTH) {
23809
+ validationMessages.push(`MPTokenMetadata must be max ${exports.MAX_MPT_META_BYTE_LENGTH} bytes.`);
23810
+ return validationMessages;
23811
+ }
23812
+ let jsonMetaData;
23813
+ try {
23814
+ jsonMetaData = JSON.parse((0, utils_1.hexToString)(input));
23815
+ }
23816
+ catch (err) {
23817
+ validationMessages.push(`MPTokenMetadata is not properly formatted as JSON - ${String(err)}`);
23818
+ return validationMessages;
23819
+ }
23820
+ if (jsonMetaData == null ||
23821
+ typeof jsonMetaData !== 'object' ||
23822
+ Array.isArray(jsonMetaData)) {
23823
+ validationMessages.push('MPTokenMetadata is not properly formatted as per XLS-89d.');
23824
+ return validationMessages;
23825
+ }
23826
+ const obj = jsonMetaData;
23827
+ const fieldCount = Object.keys(obj).length;
23828
+ if (fieldCount > MAX_MPT_META_TOP_LEVEL_FIELD_COUNT) {
23829
+ validationMessages.push(`MPTokenMetadata must not contain more than ${MAX_MPT_META_TOP_LEVEL_FIELD_COUNT} top-level fields (found ${fieldCount}).`);
23830
+ return validationMessages;
23831
+ }
23832
+ const incorrectRequiredFields = MPT_META_REQUIRED_FIELDS.filter((field) => !isString(obj[field]));
23833
+ if (incorrectRequiredFields.length > 0) {
23834
+ incorrectRequiredFields.forEach((field) => validationMessages.push(`${field} is required and must be string.`));
23835
+ return validationMessages;
23836
+ }
23837
+ if (obj.desc != null && !isString(obj.desc)) {
23838
+ validationMessages.push(`desc must be a string.`);
23839
+ return validationMessages;
23840
+ }
23841
+ if (obj.asset_subclass != null && !isString(obj.asset_subclass)) {
23842
+ validationMessages.push(`asset_subclass must be a string.`);
23843
+ return validationMessages;
23844
+ }
23845
+ if (obj.additional_info != null &&
23846
+ !isString(obj.additional_info) &&
23847
+ !isRecord(obj.additional_info)) {
23848
+ validationMessages.push(`additional_info must be a string or JSON object.`);
23849
+ return validationMessages;
23850
+ }
23851
+ if (obj.urls != null) {
23852
+ if (!Array.isArray(obj.urls)) {
23853
+ validationMessages.push('urls must be an array as per XLS-89d.');
23854
+ return validationMessages;
23855
+ }
23856
+ if (!obj.urls.every(isValidMPTokenMetadataUrlStructure)) {
23857
+ validationMessages.push('One or more urls are not structured per XLS-89d.');
23858
+ return validationMessages;
23859
+ }
23860
+ }
23861
+ const mptMPTokenMetadata = obj;
23862
+ if (!TICKER_REGEX.test(mptMPTokenMetadata.ticker)) {
23863
+ validationMessages.push(`ticker should have uppercase letters (A-Z) and digits (0-9) only. Max 6 characters recommended.`);
23864
+ }
23865
+ if (!mptMPTokenMetadata.icon.startsWith('https://')) {
23866
+ validationMessages.push(`icon should be a valid https url.`);
23867
+ }
23868
+ if (!MPT_META_ASSET_CLASSES.includes(mptMPTokenMetadata.asset_class.toLowerCase())) {
23869
+ validationMessages.push(`asset_class should be one of ${MPT_META_ASSET_CLASSES.join(', ')}.`);
23870
+ }
23871
+ if (mptMPTokenMetadata.asset_subclass != null &&
23872
+ !MPT_META_ASSET_SUB_CLASSES.includes(mptMPTokenMetadata.asset_subclass.toLowerCase())) {
23873
+ validationMessages.push(`asset_subclass should be one of ${MPT_META_ASSET_SUB_CLASSES.join(', ')}.`);
23874
+ }
23875
+ if (mptMPTokenMetadata.asset_class.toLowerCase() === 'rwa' &&
23876
+ mptMPTokenMetadata.asset_subclass == null) {
23877
+ validationMessages.push(`asset_subclass is required when asset_class is rwa.`);
23878
+ }
23879
+ if (mptMPTokenMetadata.urls != null &&
23880
+ !mptMPTokenMetadata.urls.every((ele) => ele.url.startsWith('https://'))) {
23881
+ validationMessages.push(`url should be a valid https url.`);
23882
+ }
23883
+ return validationMessages;
23884
+ }
23885
+ exports.validateMPTokenMetadata = validateMPTokenMetadata;
23886
+ function isValidMPTokenMetadataUrlStructure(input) {
23887
+ if (input == null) {
23888
+ return false;
23889
+ }
23890
+ const obj = input;
23891
+ return (typeof obj === 'object' &&
23892
+ isString(obj.url) &&
23893
+ isString(obj.type) &&
23894
+ isString(obj.title) &&
23895
+ Object.keys(obj).length === MPT_META_URL_FIELD_COUNT);
23896
+ }
23748
23897
 
23749
23898
 
23750
23899
  /***/ }),
@@ -23930,12 +24079,7 @@ const errors_1 = __webpack_require__(/*! ../../errors */ "./dist/npm/errors.js")
23930
24079
  const common_1 = __webpack_require__(/*! ./common */ "./dist/npm/models/transactions/common.js");
23931
24080
  function validateEscrowCreate(tx) {
23932
24081
  (0, common_1.validateBaseTransaction)(tx);
23933
- if (tx.Amount === undefined) {
23934
- throw new errors_1.ValidationError('EscrowCreate: missing field Amount');
23935
- }
23936
- if (typeof tx.Amount !== 'string') {
23937
- throw new errors_1.ValidationError('EscrowCreate: Amount must be a string');
23938
- }
24082
+ (0, common_1.validateRequiredField)(tx, 'Amount', common_1.isAmount);
23939
24083
  (0, common_1.validateRequiredField)(tx, 'Destination', common_1.isAccount);
23940
24084
  (0, common_1.validateOptionalField)(tx, 'DestinationTag', common_1.isNumber);
23941
24085
  if (tx.CancelAfter === undefined && tx.FinishAfter === undefined) {
@@ -24020,9 +24164,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
24020
24164
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
24021
24165
  };
24022
24166
  Object.defineProperty(exports, "__esModule", ({ value: true }));
24023
- exports.XChainModifyBridgeFlags = exports.VaultWithdrawalPolicy = exports.VaultCreateFlags = exports.TrustSetFlags = exports.PaymentChannelClaimFlags = exports.PaymentFlags = exports.OfferCreateFlags = exports.validateNFTokenModify = exports.NFTokenMintFlags = exports.NFTokenCreateOfferFlags = exports.MPTokenIssuanceSetFlags = exports.MPTokenIssuanceCreateFlags = exports.MPTokenAuthorizeFlags = exports.EnableAmendmentFlags = exports.AMMWithdrawFlags = exports.AMMDepositFlags = exports.AMMClawbackFlags = exports.AccountSetTfFlags = exports.AccountSetAsfFlags = exports.validate = exports.isMPTAmount = void 0;
24167
+ exports.XChainModifyBridgeFlags = exports.VaultWithdrawalPolicy = exports.VaultCreateFlags = exports.TrustSetFlags = exports.PaymentChannelClaimFlags = exports.PaymentFlags = exports.OfferCreateFlags = exports.validateNFTokenModify = exports.NFTokenMintFlags = exports.NFTokenCreateOfferFlags = exports.MPTokenIssuanceSetFlags = exports.MPTokenIssuanceCreateFlags = exports.MPTokenAuthorizeFlags = exports.EnableAmendmentFlags = exports.AMMWithdrawFlags = exports.AMMDepositFlags = exports.AMMClawbackFlags = exports.AccountSetTfFlags = exports.AccountSetAsfFlags = exports.validate = exports.validateMPTokenMetadata = exports.isMPTAmount = void 0;
24024
24168
  var common_1 = __webpack_require__(/*! ./common */ "./dist/npm/models/transactions/common.js");
24025
24169
  Object.defineProperty(exports, "isMPTAmount", ({ enumerable: true, get: function () { return common_1.isMPTAmount; } }));
24170
+ Object.defineProperty(exports, "validateMPTokenMetadata", ({ enumerable: true, get: function () { return common_1.validateMPTokenMetadata; } }));
24026
24171
  var transaction_1 = __webpack_require__(/*! ./transaction */ "./dist/npm/models/transactions/transaction.js");
24027
24172
  Object.defineProperty(exports, "validate", ({ enumerable: true, get: function () { return transaction_1.validate; } }));
24028
24173
  __exportStar(__webpack_require__(/*! ./metadata */ "./dist/npm/models/transactions/metadata.js"), exports);
@@ -24129,6 +24274,7 @@ exports.validateOfferCancel = validateOfferCancel;
24129
24274
  Object.defineProperty(exports, "__esModule", ({ value: true }));
24130
24275
  exports.validateOfferCreate = exports.OfferCreateFlags = void 0;
24131
24276
  const errors_1 = __webpack_require__(/*! ../../errors */ "./dist/npm/errors.js");
24277
+ const utils_1 = __webpack_require__(/*! ../utils */ "./dist/npm/models/utils/index.js");
24132
24278
  const common_1 = __webpack_require__(/*! ./common */ "./dist/npm/models/transactions/common.js");
24133
24279
  var OfferCreateFlags;
24134
24280
  (function (OfferCreateFlags) {
@@ -24136,6 +24282,7 @@ var OfferCreateFlags;
24136
24282
  OfferCreateFlags[OfferCreateFlags["tfImmediateOrCancel"] = 131072] = "tfImmediateOrCancel";
24137
24283
  OfferCreateFlags[OfferCreateFlags["tfFillOrKill"] = 262144] = "tfFillOrKill";
24138
24284
  OfferCreateFlags[OfferCreateFlags["tfSell"] = 524288] = "tfSell";
24285
+ OfferCreateFlags[OfferCreateFlags["tfHybrid"] = 1048576] = "tfHybrid";
24139
24286
  })(OfferCreateFlags || (exports.OfferCreateFlags = OfferCreateFlags = {}));
24140
24287
  function validateOfferCreate(tx) {
24141
24288
  (0, common_1.validateBaseTransaction)(tx);
@@ -24157,6 +24304,14 @@ function validateOfferCreate(tx) {
24157
24304
  if (tx.OfferSequence !== undefined && typeof tx.OfferSequence !== 'number') {
24158
24305
  throw new errors_1.ValidationError('OfferCreate: invalid OfferSequence');
24159
24306
  }
24307
+ (0, common_1.validateOptionalField)(tx, 'DomainID', common_1.isDomainID, {
24308
+ txType: 'OfferCreate',
24309
+ paramName: 'DomainID',
24310
+ });
24311
+ if (tx.DomainID == null &&
24312
+ (0, utils_1.hasFlag)(tx, OfferCreateFlags.tfHybrid, 'tfHybrid')) {
24313
+ throw new errors_1.ValidationError('OfferCreate: tfHybrid flag cannot be set if DomainID is not present');
24314
+ }
24160
24315
  }
24161
24316
  exports.validateOfferCreate = validateOfferCreate;
24162
24317
 
@@ -24300,6 +24455,10 @@ function validatePayment(tx) {
24300
24455
  if (tx.InvoiceID !== undefined && typeof tx.InvoiceID !== 'string') {
24301
24456
  throw new errors_1.ValidationError('PaymentTransaction: InvoiceID must be a string');
24302
24457
  }
24458
+ (0, common_1.validateOptionalField)(tx, 'DomainID', common_1.isDomainID, {
24459
+ txType: 'PaymentTransaction',
24460
+ paramName: 'DomainID',
24461
+ });
24303
24462
  if (tx.Paths !== undefined && !isPaths(tx.Paths)) {
24304
24463
  throw new errors_1.ValidationError('PaymentTransaction: invalid Paths');
24305
24464
  }
@@ -24307,9 +24466,6 @@ function validatePayment(tx) {
24307
24466
  throw new errors_1.ValidationError('PaymentTransaction: invalid SendMax');
24308
24467
  }
24309
24468
  checkPartialPayment(tx);
24310
- if (tx.DeliverMax != null) {
24311
- throw new errors_1.ValidationError('PaymentTransaction: Cannot have DeliverMax in a submitted transaction');
24312
- }
24313
24469
  }
24314
24470
  exports.validatePayment = validatePayment;
24315
24471
  function checkPartialPayment(tx) {
@@ -25013,7 +25169,6 @@ exports.validateVaultCreate = exports.VaultCreateFlags = exports.VaultWithdrawal
25013
25169
  const errors_1 = __webpack_require__(/*! ../../errors */ "./dist/npm/errors.js");
25014
25170
  const utils_1 = __webpack_require__(/*! ../utils */ "./dist/npm/models/utils/index.js");
25015
25171
  const common_1 = __webpack_require__(/*! ./common */ "./dist/npm/models/transactions/common.js");
25016
- const META_MAX_BYTE_LENGTH = 1024;
25017
25172
  var VaultWithdrawalPolicy;
25018
25173
  (function (VaultWithdrawalPolicy) {
25019
25174
  VaultWithdrawalPolicy[VaultWithdrawalPolicy["vaultStrategyFirstComeFirstServe"] = 1] = "vaultStrategyFirstComeFirstServe";
@@ -25044,17 +25199,27 @@ function validateVaultCreate(tx) {
25044
25199
  if (tx.MPTokenMetadata !== undefined) {
25045
25200
  const metaHex = tx.MPTokenMetadata;
25046
25201
  if (!(0, utils_1.isHex)(metaHex)) {
25047
- throw new errors_1.ValidationError('VaultCreate: MPTokenMetadata must be a valid hex string');
25202
+ throw new errors_1.ValidationError('VaultCreate: MPTokenMetadata must be a valid non-empty hex string');
25048
25203
  }
25049
25204
  const metaByteLength = metaHex.length / 2;
25050
- if (metaByteLength > META_MAX_BYTE_LENGTH) {
25051
- throw new errors_1.ValidationError(`VaultCreate: MPTokenMetadata exceeds ${META_MAX_BYTE_LENGTH} bytes (actual: ${metaByteLength})`);
25205
+ if (metaByteLength > common_1.MAX_MPT_META_BYTE_LENGTH) {
25206
+ throw new errors_1.ValidationError(`VaultCreate: MPTokenMetadata exceeds ${common_1.MAX_MPT_META_BYTE_LENGTH} bytes (actual: ${metaByteLength})`);
25052
25207
  }
25053
25208
  }
25054
25209
  if (tx.DomainID !== undefined &&
25055
25210
  !(0, utils_1.hasFlag)(tx, VaultCreateFlags.tfVaultPrivate, 'tfVaultPrivate')) {
25056
25211
  throw new errors_1.ValidationError('VaultCreate: Cannot set DomainID unless tfVaultPrivate flag is set.');
25057
25212
  }
25213
+ if (tx.MPTokenMetadata != null) {
25214
+ const validationMessages = (0, common_1.validateMPTokenMetadata)(tx.MPTokenMetadata);
25215
+ if (validationMessages.length > 0) {
25216
+ const message = [
25217
+ common_1.MPT_META_WARNING_HEADER,
25218
+ ...validationMessages.map((msg) => `- ${msg}`),
25219
+ ].join('\n');
25220
+ console.warn(message);
25221
+ }
25222
+ }
25058
25223
  }
25059
25224
  exports.validateVaultCreate = validateVaultCreate;
25060
25225