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.
Files changed (367) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +183 -0
  3. package/dist/errors.d.ts +20 -0
  4. package/dist/errors.d.ts.map +1 -0
  5. package/dist/errors.js +27 -0
  6. package/dist/errors.js.map +1 -0
  7. package/dist/fp/factories/account-delete.d.ts +33 -0
  8. package/dist/fp/factories/account-delete.d.ts.map +1 -0
  9. package/dist/fp/factories/account-delete.js +138 -0
  10. package/dist/fp/factories/account-delete.js.map +1 -0
  11. package/dist/fp/factories/account-set.d.ts +31 -0
  12. package/dist/fp/factories/account-set.d.ts.map +1 -0
  13. package/dist/fp/factories/account-set.js +44 -0
  14. package/dist/fp/factories/account-set.js.map +1 -0
  15. package/dist/fp/factories/amm-bid.d.ts +134 -0
  16. package/dist/fp/factories/amm-bid.d.ts.map +1 -0
  17. package/dist/fp/factories/amm-bid.js +82 -0
  18. package/dist/fp/factories/amm-bid.js.map +1 -0
  19. package/dist/fp/factories/amm-clawback.d.ts +166 -0
  20. package/dist/fp/factories/amm-clawback.d.ts.map +1 -0
  21. package/dist/fp/factories/amm-clawback.js +143 -0
  22. package/dist/fp/factories/amm-clawback.js.map +1 -0
  23. package/dist/fp/factories/amm-create.d.ts +91 -0
  24. package/dist/fp/factories/amm-create.d.ts.map +1 -0
  25. package/dist/fp/factories/amm-create.js +140 -0
  26. package/dist/fp/factories/amm-create.js.map +1 -0
  27. package/dist/fp/factories/amm-delete.d.ts +84 -0
  28. package/dist/fp/factories/amm-delete.d.ts.map +1 -0
  29. package/dist/fp/factories/amm-delete.js +36 -0
  30. package/dist/fp/factories/amm-delete.js.map +1 -0
  31. package/dist/fp/factories/amm-deposit.d.ts +109 -0
  32. package/dist/fp/factories/amm-deposit.d.ts.map +1 -0
  33. package/dist/fp/factories/amm-deposit.js +68 -0
  34. package/dist/fp/factories/amm-deposit.js.map +1 -0
  35. package/dist/fp/factories/amm-vote.d.ts +87 -0
  36. package/dist/fp/factories/amm-vote.d.ts.map +1 -0
  37. package/dist/fp/factories/amm-vote.js +53 -0
  38. package/dist/fp/factories/amm-vote.js.map +1 -0
  39. package/dist/fp/factories/amm-withdraw.d.ts +131 -0
  40. package/dist/fp/factories/amm-withdraw.d.ts.map +1 -0
  41. package/dist/fp/factories/amm-withdraw.js +147 -0
  42. package/dist/fp/factories/amm-withdraw.js.map +1 -0
  43. package/dist/fp/factories/batch.d.ts +133 -0
  44. package/dist/fp/factories/batch.d.ts.map +1 -0
  45. package/dist/fp/factories/batch.js +264 -0
  46. package/dist/fp/factories/batch.js.map +1 -0
  47. package/dist/fp/factories/check-cancel.d.ts +22 -0
  48. package/dist/fp/factories/check-cancel.d.ts.map +1 -0
  49. package/dist/fp/factories/check-cancel.js +119 -0
  50. package/dist/fp/factories/check-cancel.js.map +1 -0
  51. package/dist/fp/factories/check-cash.d.ts +84 -0
  52. package/dist/fp/factories/check-cash.d.ts.map +1 -0
  53. package/dist/fp/factories/check-cash.js +95 -0
  54. package/dist/fp/factories/check-cash.js.map +1 -0
  55. package/dist/fp/factories/check-create.d.ts +82 -0
  56. package/dist/fp/factories/check-create.d.ts.map +1 -0
  57. package/dist/fp/factories/check-create.js +101 -0
  58. package/dist/fp/factories/check-create.js.map +1 -0
  59. package/dist/fp/factories/clawback.d.ts +160 -0
  60. package/dist/fp/factories/clawback.d.ts.map +1 -0
  61. package/dist/fp/factories/clawback.js +111 -0
  62. package/dist/fp/factories/clawback.js.map +1 -0
  63. package/dist/fp/factories/confidential-mpt-clawback.d.ts +24 -0
  64. package/dist/fp/factories/confidential-mpt-clawback.d.ts.map +1 -0
  65. package/dist/fp/factories/confidential-mpt-clawback.js +200 -0
  66. package/dist/fp/factories/confidential-mpt-clawback.js.map +1 -0
  67. package/dist/fp/factories/confidential-mpt-convert-back.d.ts +32 -0
  68. package/dist/fp/factories/confidential-mpt-convert-back.d.ts.map +1 -0
  69. package/dist/fp/factories/confidential-mpt-convert-back.js +203 -0
  70. package/dist/fp/factories/confidential-mpt-convert-back.js.map +1 -0
  71. package/dist/fp/factories/confidential-mpt-convert.d.ts +32 -0
  72. package/dist/fp/factories/confidential-mpt-convert.d.ts.map +1 -0
  73. package/dist/fp/factories/confidential-mpt-convert.js +209 -0
  74. package/dist/fp/factories/confidential-mpt-convert.js.map +1 -0
  75. package/dist/fp/factories/confidential-mpt-merge-inbox.d.ts +18 -0
  76. package/dist/fp/factories/confidential-mpt-merge-inbox.d.ts.map +1 -0
  77. package/dist/fp/factories/confidential-mpt-merge-inbox.js +130 -0
  78. package/dist/fp/factories/confidential-mpt-merge-inbox.js.map +1 -0
  79. package/dist/fp/factories/confidential-mpt-send.d.ts +38 -0
  80. package/dist/fp/factories/confidential-mpt-send.d.ts.map +1 -0
  81. package/dist/fp/factories/confidential-mpt-send.js +254 -0
  82. package/dist/fp/factories/confidential-mpt-send.js.map +1 -0
  83. package/dist/fp/factories/credential-accept.d.ts +23 -0
  84. package/dist/fp/factories/credential-accept.d.ts.map +1 -0
  85. package/dist/fp/factories/credential-accept.js +135 -0
  86. package/dist/fp/factories/credential-accept.js.map +1 -0
  87. package/dist/fp/factories/credential-create.d.ts +24 -0
  88. package/dist/fp/factories/credential-create.d.ts.map +1 -0
  89. package/dist/fp/factories/credential-create.js +204 -0
  90. package/dist/fp/factories/credential-create.js.map +1 -0
  91. package/dist/fp/factories/credential-delete.d.ts +33 -0
  92. package/dist/fp/factories/credential-delete.d.ts.map +1 -0
  93. package/dist/fp/factories/credential-delete.js +167 -0
  94. package/dist/fp/factories/credential-delete.js.map +1 -0
  95. package/dist/fp/factories/delegate-set.d.ts +52 -0
  96. package/dist/fp/factories/delegate-set.d.ts.map +1 -0
  97. package/dist/fp/factories/delegate-set.js +190 -0
  98. package/dist/fp/factories/delegate-set.js.map +1 -0
  99. package/dist/fp/factories/deposit-preauth.d.ts +183 -0
  100. package/dist/fp/factories/deposit-preauth.d.ts.map +1 -0
  101. package/dist/fp/factories/deposit-preauth.js +159 -0
  102. package/dist/fp/factories/deposit-preauth.js.map +1 -0
  103. package/dist/fp/factories/did-delete.d.ts +22 -0
  104. package/dist/fp/factories/did-delete.d.ts.map +1 -0
  105. package/dist/fp/factories/did-delete.js +126 -0
  106. package/dist/fp/factories/did-delete.js.map +1 -0
  107. package/dist/fp/factories/did-set.d.ts +68 -0
  108. package/dist/fp/factories/did-set.d.ts.map +1 -0
  109. package/dist/fp/factories/did-set.js +178 -0
  110. package/dist/fp/factories/did-set.js.map +1 -0
  111. package/dist/fp/factories/escrow-cancel.d.ts +28 -0
  112. package/dist/fp/factories/escrow-cancel.d.ts.map +1 -0
  113. package/dist/fp/factories/escrow-cancel.js +127 -0
  114. package/dist/fp/factories/escrow-cancel.js.map +1 -0
  115. package/dist/fp/factories/escrow-create.d.ts +103 -0
  116. package/dist/fp/factories/escrow-create.d.ts.map +1 -0
  117. package/dist/fp/factories/escrow-create.js +133 -0
  118. package/dist/fp/factories/escrow-create.js.map +1 -0
  119. package/dist/fp/factories/escrow-finish.d.ts +39 -0
  120. package/dist/fp/factories/escrow-finish.d.ts.map +1 -0
  121. package/dist/fp/factories/escrow-finish.js +173 -0
  122. package/dist/fp/factories/escrow-finish.js.map +1 -0
  123. package/dist/fp/factories/ledger-state-fix.d.ts +31 -0
  124. package/dist/fp/factories/ledger-state-fix.d.ts.map +1 -0
  125. package/dist/fp/factories/ledger-state-fix.js +163 -0
  126. package/dist/fp/factories/ledger-state-fix.js.map +1 -0
  127. package/dist/fp/factories/loan-broker-cover-clawback.d.ts +106 -0
  128. package/dist/fp/factories/loan-broker-cover-clawback.d.ts.map +1 -0
  129. package/dist/fp/factories/loan-broker-cover-clawback.js +122 -0
  130. package/dist/fp/factories/loan-broker-cover-clawback.js.map +1 -0
  131. package/dist/fp/factories/loan-broker-cover-deposit.d.ts +65 -0
  132. package/dist/fp/factories/loan-broker-cover-deposit.d.ts.map +1 -0
  133. package/dist/fp/factories/loan-broker-cover-deposit.js +81 -0
  134. package/dist/fp/factories/loan-broker-cover-deposit.js.map +1 -0
  135. package/dist/fp/factories/loan-broker-cover-withdraw.d.ts +96 -0
  136. package/dist/fp/factories/loan-broker-cover-withdraw.d.ts.map +1 -0
  137. package/dist/fp/factories/loan-broker-cover-withdraw.js +116 -0
  138. package/dist/fp/factories/loan-broker-cover-withdraw.js.map +1 -0
  139. package/dist/fp/factories/loan-broker-delete.d.ts +20 -0
  140. package/dist/fp/factories/loan-broker-delete.d.ts.map +1 -0
  141. package/dist/fp/factories/loan-broker-delete.js +94 -0
  142. package/dist/fp/factories/loan-broker-delete.js.map +1 -0
  143. package/dist/fp/factories/loan-broker-set.d.ts +108 -0
  144. package/dist/fp/factories/loan-broker-set.d.ts.map +1 -0
  145. package/dist/fp/factories/loan-broker-set.js +133 -0
  146. package/dist/fp/factories/loan-broker-set.js.map +1 -0
  147. package/dist/fp/factories/loan-delete.d.ts +18 -0
  148. package/dist/fp/factories/loan-delete.d.ts.map +1 -0
  149. package/dist/fp/factories/loan-delete.js +95 -0
  150. package/dist/fp/factories/loan-delete.js.map +1 -0
  151. package/dist/fp/factories/loan-manage.d.ts +72 -0
  152. package/dist/fp/factories/loan-manage.d.ts.map +1 -0
  153. package/dist/fp/factories/loan-manage.js +79 -0
  154. package/dist/fp/factories/loan-manage.js.map +1 -0
  155. package/dist/fp/factories/loan-pay.d.ts +70 -0
  156. package/dist/fp/factories/loan-pay.d.ts.map +1 -0
  157. package/dist/fp/factories/loan-pay.js +115 -0
  158. package/dist/fp/factories/loan-pay.js.map +1 -0
  159. package/dist/fp/factories/loan-set.d.ts +67 -0
  160. package/dist/fp/factories/loan-set.d.ts.map +1 -0
  161. package/dist/fp/factories/loan-set.js +102 -0
  162. package/dist/fp/factories/loan-set.js.map +1 -0
  163. package/dist/fp/factories/mptoken-authorize.d.ts +83 -0
  164. package/dist/fp/factories/mptoken-authorize.d.ts.map +1 -0
  165. package/dist/fp/factories/mptoken-authorize.js +63 -0
  166. package/dist/fp/factories/mptoken-authorize.js.map +1 -0
  167. package/dist/fp/factories/mptoken-issuance-create.d.ts +71 -0
  168. package/dist/fp/factories/mptoken-issuance-create.d.ts.map +1 -0
  169. package/dist/fp/factories/mptoken-issuance-create.js +135 -0
  170. package/dist/fp/factories/mptoken-issuance-create.js.map +1 -0
  171. package/dist/fp/factories/mptoken-issuance-destroy.d.ts +32 -0
  172. package/dist/fp/factories/mptoken-issuance-destroy.d.ts.map +1 -0
  173. package/dist/fp/factories/mptoken-issuance-destroy.js +105 -0
  174. package/dist/fp/factories/mptoken-issuance-destroy.js.map +1 -0
  175. package/dist/fp/factories/mptoken-issuance-set.d.ts +196 -0
  176. package/dist/fp/factories/mptoken-issuance-set.d.ts.map +1 -0
  177. package/dist/fp/factories/mptoken-issuance-set.js +333 -0
  178. package/dist/fp/factories/mptoken-issuance-set.js.map +1 -0
  179. package/dist/fp/factories/nftoken-accept-offer.d.ts +108 -0
  180. package/dist/fp/factories/nftoken-accept-offer.d.ts.map +1 -0
  181. package/dist/fp/factories/nftoken-accept-offer.js +105 -0
  182. package/dist/fp/factories/nftoken-accept-offer.js.map +1 -0
  183. package/dist/fp/factories/nftoken-burn.d.ts +27 -0
  184. package/dist/fp/factories/nftoken-burn.d.ts.map +1 -0
  185. package/dist/fp/factories/nftoken-burn.js +125 -0
  186. package/dist/fp/factories/nftoken-burn.js.map +1 -0
  187. package/dist/fp/factories/nftoken-cancel-offer.d.ts +19 -0
  188. package/dist/fp/factories/nftoken-cancel-offer.d.ts.map +1 -0
  189. package/dist/fp/factories/nftoken-cancel-offer.js +143 -0
  190. package/dist/fp/factories/nftoken-cancel-offer.js.map +1 -0
  191. package/dist/fp/factories/nftoken-create-offer.d.ts +159 -0
  192. package/dist/fp/factories/nftoken-create-offer.d.ts.map +1 -0
  193. package/dist/fp/factories/nftoken-create-offer.js +212 -0
  194. package/dist/fp/factories/nftoken-create-offer.js.map +1 -0
  195. package/dist/fp/factories/nftoken-mint.d.ts +155 -0
  196. package/dist/fp/factories/nftoken-mint.d.ts.map +1 -0
  197. package/dist/fp/factories/nftoken-mint.js +165 -0
  198. package/dist/fp/factories/nftoken-mint.js.map +1 -0
  199. package/dist/fp/factories/nftoken-modify.d.ts +28 -0
  200. package/dist/fp/factories/nftoken-modify.d.ts.map +1 -0
  201. package/dist/fp/factories/nftoken-modify.js +209 -0
  202. package/dist/fp/factories/nftoken-modify.js.map +1 -0
  203. package/dist/fp/factories/offer-cancel.d.ts +21 -0
  204. package/dist/fp/factories/offer-cancel.d.ts.map +1 -0
  205. package/dist/fp/factories/offer-cancel.js +99 -0
  206. package/dist/fp/factories/offer-cancel.js.map +1 -0
  207. package/dist/fp/factories/offer-create.d.ts +125 -0
  208. package/dist/fp/factories/offer-create.d.ts.map +1 -0
  209. package/dist/fp/factories/offer-create.js +230 -0
  210. package/dist/fp/factories/offer-create.js.map +1 -0
  211. package/dist/fp/factories/oracle-delete.d.ts +21 -0
  212. package/dist/fp/factories/oracle-delete.d.ts.map +1 -0
  213. package/dist/fp/factories/oracle-delete.js +101 -0
  214. package/dist/fp/factories/oracle-delete.js.map +1 -0
  215. package/dist/fp/factories/oracle-set.d.ts +40 -0
  216. package/dist/fp/factories/oracle-set.d.ts.map +1 -0
  217. package/dist/fp/factories/oracle-set.js +257 -0
  218. package/dist/fp/factories/oracle-set.js.map +1 -0
  219. package/dist/fp/factories/payment-channel-claim.d.ts +153 -0
  220. package/dist/fp/factories/payment-channel-claim.d.ts.map +1 -0
  221. package/dist/fp/factories/payment-channel-claim.js +118 -0
  222. package/dist/fp/factories/payment-channel-claim.js.map +1 -0
  223. package/dist/fp/factories/payment-channel-create.d.ts +30 -0
  224. package/dist/fp/factories/payment-channel-create.d.ts.map +1 -0
  225. package/dist/fp/factories/payment-channel-create.js +172 -0
  226. package/dist/fp/factories/payment-channel-create.js.map +1 -0
  227. package/dist/fp/factories/payment-channel-fund.d.ts +25 -0
  228. package/dist/fp/factories/payment-channel-fund.d.ts.map +1 -0
  229. package/dist/fp/factories/payment-channel-fund.js +142 -0
  230. package/dist/fp/factories/payment-channel-fund.js.map +1 -0
  231. package/dist/fp/factories/payment.d.ts +65 -0
  232. package/dist/fp/factories/payment.d.ts.map +1 -0
  233. package/dist/fp/factories/payment.js +48 -0
  234. package/dist/fp/factories/payment.js.map +1 -0
  235. package/dist/fp/factories/permissioned-domain-delete.d.ts +18 -0
  236. package/dist/fp/factories/permissioned-domain-delete.d.ts.map +1 -0
  237. package/dist/fp/factories/permissioned-domain-delete.js +88 -0
  238. package/dist/fp/factories/permissioned-domain-delete.js.map +1 -0
  239. package/dist/fp/factories/permissioned-domain-set.d.ts +118 -0
  240. package/dist/fp/factories/permissioned-domain-set.d.ts.map +1 -0
  241. package/dist/fp/factories/permissioned-domain-set.js +100 -0
  242. package/dist/fp/factories/permissioned-domain-set.js.map +1 -0
  243. package/dist/fp/factories/set-regular-key.d.ts +30 -0
  244. package/dist/fp/factories/set-regular-key.d.ts.map +1 -0
  245. package/dist/fp/factories/set-regular-key.js +81 -0
  246. package/dist/fp/factories/set-regular-key.js.map +1 -0
  247. package/dist/fp/factories/signer-list-set.d.ts +61 -0
  248. package/dist/fp/factories/signer-list-set.d.ts.map +1 -0
  249. package/dist/fp/factories/signer-list-set.js +250 -0
  250. package/dist/fp/factories/signer-list-set.js.map +1 -0
  251. package/dist/fp/factories/sponsorship-set.d.ts +148 -0
  252. package/dist/fp/factories/sponsorship-set.d.ts.map +1 -0
  253. package/dist/fp/factories/sponsorship-set.js +201 -0
  254. package/dist/fp/factories/sponsorship-set.js.map +1 -0
  255. package/dist/fp/factories/sponsorship-transfer.d.ts +173 -0
  256. package/dist/fp/factories/sponsorship-transfer.d.ts.map +1 -0
  257. package/dist/fp/factories/sponsorship-transfer.js +195 -0
  258. package/dist/fp/factories/sponsorship-transfer.js.map +1 -0
  259. package/dist/fp/factories/ticket-create.d.ts +20 -0
  260. package/dist/fp/factories/ticket-create.d.ts.map +1 -0
  261. package/dist/fp/factories/ticket-create.js +120 -0
  262. package/dist/fp/factories/ticket-create.js.map +1 -0
  263. package/dist/fp/factories/trust-set.d.ts +100 -0
  264. package/dist/fp/factories/trust-set.d.ts.map +1 -0
  265. package/dist/fp/factories/trust-set.js +111 -0
  266. package/dist/fp/factories/trust-set.js.map +1 -0
  267. package/dist/fp/factories/vault-clawback.d.ts +83 -0
  268. package/dist/fp/factories/vault-clawback.d.ts.map +1 -0
  269. package/dist/fp/factories/vault-clawback.js +91 -0
  270. package/dist/fp/factories/vault-clawback.js.map +1 -0
  271. package/dist/fp/factories/vault-create.d.ts +51 -0
  272. package/dist/fp/factories/vault-create.d.ts.map +1 -0
  273. package/dist/fp/factories/vault-create.js +141 -0
  274. package/dist/fp/factories/vault-create.js.map +1 -0
  275. package/dist/fp/factories/vault-delete.d.ts +20 -0
  276. package/dist/fp/factories/vault-delete.d.ts.map +1 -0
  277. package/dist/fp/factories/vault-delete.js +103 -0
  278. package/dist/fp/factories/vault-delete.js.map +1 -0
  279. package/dist/fp/factories/vault-deposit.d.ts +56 -0
  280. package/dist/fp/factories/vault-deposit.d.ts.map +1 -0
  281. package/dist/fp/factories/vault-deposit.js +85 -0
  282. package/dist/fp/factories/vault-deposit.js.map +1 -0
  283. package/dist/fp/factories/vault-set.d.ts +32 -0
  284. package/dist/fp/factories/vault-set.d.ts.map +1 -0
  285. package/dist/fp/factories/vault-set.js +135 -0
  286. package/dist/fp/factories/vault-set.js.map +1 -0
  287. package/dist/fp/factories/vault-withdraw.d.ts +82 -0
  288. package/dist/fp/factories/vault-withdraw.d.ts.map +1 -0
  289. package/dist/fp/factories/vault-withdraw.js +122 -0
  290. package/dist/fp/factories/vault-withdraw.js.map +1 -0
  291. package/dist/fp/factories/xchain-account-create-commit.d.ts +180 -0
  292. package/dist/fp/factories/xchain-account-create-commit.d.ts.map +1 -0
  293. package/dist/fp/factories/xchain-account-create-commit.js +99 -0
  294. package/dist/fp/factories/xchain-account-create-commit.js.map +1 -0
  295. package/dist/fp/factories/xchain-add-account-create-attestation.d.ts +213 -0
  296. package/dist/fp/factories/xchain-add-account-create-attestation.d.ts.map +1 -0
  297. package/dist/fp/factories/xchain-add-account-create-attestation.js +95 -0
  298. package/dist/fp/factories/xchain-add-account-create-attestation.js.map +1 -0
  299. package/dist/fp/factories/xchain-add-claim-attestation.d.ts +206 -0
  300. package/dist/fp/factories/xchain-add-claim-attestation.d.ts.map +1 -0
  301. package/dist/fp/factories/xchain-add-claim-attestation.js +97 -0
  302. package/dist/fp/factories/xchain-add-claim-attestation.js.map +1 -0
  303. package/dist/fp/factories/xchain-claim.d.ts +187 -0
  304. package/dist/fp/factories/xchain-claim.d.ts.map +1 -0
  305. package/dist/fp/factories/xchain-claim.js +140 -0
  306. package/dist/fp/factories/xchain-claim.js.map +1 -0
  307. package/dist/fp/factories/xchain-commit.d.ts +168 -0
  308. package/dist/fp/factories/xchain-commit.d.ts.map +1 -0
  309. package/dist/fp/factories/xchain-commit.js +137 -0
  310. package/dist/fp/factories/xchain-commit.js.map +1 -0
  311. package/dist/fp/factories/xchain-create-bridge.d.ts +206 -0
  312. package/dist/fp/factories/xchain-create-bridge.d.ts.map +1 -0
  313. package/dist/fp/factories/xchain-create-bridge.js +100 -0
  314. package/dist/fp/factories/xchain-create-bridge.js.map +1 -0
  315. package/dist/fp/factories/xchain-create-claim-id.d.ts +199 -0
  316. package/dist/fp/factories/xchain-create-claim-id.d.ts.map +1 -0
  317. package/dist/fp/factories/xchain-create-claim-id.js +78 -0
  318. package/dist/fp/factories/xchain-create-claim-id.js.map +1 -0
  319. package/dist/fp/factories/xchain-modify-bridge.d.ts +198 -0
  320. package/dist/fp/factories/xchain-modify-bridge.d.ts.map +1 -0
  321. package/dist/fp/factories/xchain-modify-bridge.js +102 -0
  322. package/dist/fp/factories/xchain-modify-bridge.js.map +1 -0
  323. package/dist/fp/index.d.ts +124 -0
  324. package/dist/fp/index.d.ts.map +1 -0
  325. package/dist/fp/index.js +152 -0
  326. package/dist/fp/index.js.map +1 -0
  327. package/dist/fp/shape.d.ts +34 -0
  328. package/dist/fp/shape.d.ts.map +1 -0
  329. package/dist/fp/shape.js +80 -0
  330. package/dist/fp/shape.js.map +1 -0
  331. package/dist/types/amounts.d.ts +49 -0
  332. package/dist/types/amounts.d.ts.map +1 -0
  333. package/dist/types/amounts.js +8 -0
  334. package/dist/types/amounts.js.map +1 -0
  335. package/dist/types/base.d.ts +103 -0
  336. package/dist/types/base.d.ts.map +1 -0
  337. package/dist/types/base.js +2 -0
  338. package/dist/types/base.js.map +1 -0
  339. package/dist/types/common.d.ts +163 -0
  340. package/dist/types/common.d.ts.map +1 -0
  341. package/dist/types/common.js +5 -0
  342. package/dist/types/common.js.map +1 -0
  343. package/dist/types/flags.d.ts +317 -0
  344. package/dist/types/flags.d.ts.map +1 -0
  345. package/dist/types/flags.js +253 -0
  346. package/dist/types/flags.js.map +1 -0
  347. package/dist/types/index.d.ts +10 -0
  348. package/dist/types/index.d.ts.map +1 -0
  349. package/dist/types/index.js +2 -0
  350. package/dist/types/index.js.map +1 -0
  351. package/dist/types/transaction-types.d.ts +7 -0
  352. package/dist/types/transaction-types.d.ts.map +1 -0
  353. package/dist/types/transaction-types.js +2 -0
  354. package/dist/types/transaction-types.js.map +1 -0
  355. package/dist/validation/base.d.ts +8 -0
  356. package/dist/validation/base.d.ts.map +1 -0
  357. package/dist/validation/base.js +79 -0
  358. package/dist/validation/base.js.map +1 -0
  359. package/dist/validation/helpers.d.ts +42 -0
  360. package/dist/validation/helpers.d.ts.map +1 -0
  361. package/dist/validation/helpers.js +154 -0
  362. package/dist/validation/helpers.js.map +1 -0
  363. package/dist/validation/index.d.ts +3 -0
  364. package/dist/validation/index.d.ts.map +1 -0
  365. package/dist/validation/index.js +3 -0
  366. package/dist/validation/index.js.map +1 -0
  367. package/package.json +67 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loan-broker-delete.d.ts","sourceRoot":"","sources":["../../../src/fp/factories/loan-broker-delete.ts"],"names":[],"mappings":"AA6DA,MAAM,WAAW,qBAAqB;IACpC,iFAAiF;IACjF,OAAO,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,YAAY,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,kDAAkD;IAClD,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAiB,SAAQ,QAAQ,CAAC,qBAAqB,CAAC;IACvE,QAAQ,CAAC,eAAe,EAAE,kBAAkB,CAAC;IAC7C,QAAQ,IAAI,IAAI,CAAC;IACjB,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,gBAAgB,CAAC;CACnE;AAID,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,gBAAgB,CAqD/E"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Functional LoanBrokerDelete factory — frozen-object style.
3
+ *
4
+ * Deletes an existing `LoanBroker` ledger entry. Only the owner of the
5
+ * `LoanBroker` can delete it. Validation happens at construction; there
6
+ * is no way to construct an invalid tx.
7
+ *
8
+ * import { loanBrokerDelete } from 'xrplt/fp';
9
+ * const tx = loanBrokerDelete({ Account, LoanBrokerID });
10
+ * const j = tx.toJSON();
11
+ * const tx2 = tx.with({ Fee: '15' });
12
+ *
13
+ * Affected amendments:
14
+ * - `LendingProtocol` (base LoanBrokerDelete)
15
+ *
16
+ * @see https://xrpl.org/docs/references/protocol/transactions/types/loanbrokerdelete
17
+ * @see XLS-66 §3.4 (Transaction: `LoanBrokerDelete`)
18
+ * in `~/.mavis/docs.local/xrpl-standards/repo/XLS-0066-lending-protocol/README.md`
19
+ *
20
+ * ## Divergences
21
+ *
22
+ * The factory enforces one preclaim check that the class API
23
+ * (`src/transactions/loan-broker-delete.ts`) and xrpl.js both skip:
24
+ *
25
+ * What: `LoanBrokerID` must NOT be the all-zeros HASH256 value.
26
+ *
27
+ * Why: XLS-66 §3.4.3.1 (Data Verification) check 1:
28
+ * "`LoanBrokerID` is zero. (`temINVALID`)"
29
+ *
30
+ * The class API and xrpl.js's `validateLoanBrokerDelete` only call
31
+ * `isLedgerEntryId(tx.LoanBrokerID)`, which is satisfied by the
32
+ * all-zeros string (64 hex chars). The factory rejects it explicitly
33
+ * so an obviously bad input fails locally before submission.
34
+ *
35
+ * Source citation:
36
+ * - XLS-66 §3.4.3.1 in
37
+ * `~/.mavis/docs.local/xrpl-standards/repo/XLS-0066-lending-protocol/README.md`
38
+ * (line 688)
39
+ * - xrpl.js `validateLoanBrokerDelete` in
40
+ * `~/.mavis/docs.local/xrpl.js/repo/packages/xrpl/src/models/transactions/loanBrokerDelete.ts`
41
+ * (lines 31–41) — only `isLedgerEntryId`, no zero check.
42
+ *
43
+ * Note: The factory also validates `Account` as a classic/X-address
44
+ * (consistent with other fp factories). The class API does not check
45
+ * `Account` here, only `LoanBrokerID` — this divergence is identical
46
+ * across all four loan factories and is documented per-factory.
47
+ */
48
+ import { isAccount, isHex, isString } from '../../validation/helpers.js';
49
+ import { ValidationError } from '../../errors.js';
50
+ import { buildFrozenTx, mergeForWith, require } from '../shape.js';
51
+ // ─── Spec constants ──────────────────────────────────────────────────
52
+ // LoanBrokerID is a HASH256 = 32 bytes = 64 hex chars.
53
+ const LOAN_BROKER_ID_LENGTH = 64;
54
+ // All-zeros HASH256 is reserved / malformed per XLS-66 §3.4.3.1.
55
+ const LOAN_BROKER_ID_ZERO = '0000000000000000000000000000000000000000000000000000000000000000';
56
+ // ─── Factory ─────────────────────────────────────────────────────────
57
+ export function loanBrokerDelete(props) {
58
+ // ── Account ── required, must be a valid XRPL classic or X-address.
59
+ require(props.Account, 'LoanBrokerDelete: Account is required', isAccount);
60
+ // ── LoanBrokerID ── required, 64-char hex AND non-zero.
61
+ if (!isString(props.LoanBrokerID) ||
62
+ !isHex(props.LoanBrokerID) ||
63
+ props.LoanBrokerID.length !== LOAN_BROKER_ID_LENGTH) {
64
+ throw new ValidationError('LoanBrokerDelete: LoanBrokerID must be a 64-character hex string');
65
+ }
66
+ if (props.LoanBrokerID === LOAN_BROKER_ID_ZERO) {
67
+ throw new ValidationError('LoanBrokerDelete: LoanBrokerID must not be the all-zeros HASH256 value');
68
+ }
69
+ // ── Flags ── spec defines no flags for LoanBrokerDelete. The example
70
+ // JSON sets 0, and rippled has no tfLoanBrokerDelete* bitmask. Pass-
71
+ // through only; we don't reject non-zero because the spec leaves the
72
+ // field open-ended and callers may pass bit-flags reserved for future
73
+ // amendments.
74
+ return buildFrozenTx('LoanBrokerDelete', props, {
75
+ validate() {
76
+ // Validated at construction.
77
+ },
78
+ toJSON() {
79
+ const json = {};
80
+ for (const k of Object.keys(this)) {
81
+ if (k === 'validate' || k === 'toJSON' || k === 'with')
82
+ continue;
83
+ const v = this[k];
84
+ if (v !== undefined)
85
+ json[k] = v;
86
+ }
87
+ return json;
88
+ },
89
+ with(overrides) {
90
+ return loanBrokerDelete(mergeForWith(this, overrides));
91
+ },
92
+ });
93
+ }
94
+ //# sourceMappingURL=loan-broker-delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loan-broker-delete.js","sourceRoot":"","sources":["../../../src/fp/factories/loan-broker-delete.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEnE,wEAAwE;AAExE,uDAAuD;AACvD,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACjC,iEAAiE;AACjE,MAAM,mBAAmB,GACvB,kEAAkE,CAAC;AAwBrE,wEAAwE;AAExE,MAAM,UAAU,gBAAgB,CAAC,KAA4B;IAC3D,qEAAqE;IACrE,OAAO,CACL,KAAK,CAAC,OAAO,EACb,uCAAuC,EACvC,SAAS,CACV,CAAC;IAEF,yDAAyD;IACzD,IACE,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC;QAC7B,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC;QAC1B,KAAK,CAAC,YAAY,CAAC,MAAM,KAAK,qBAAqB,EACnD,CAAC;QACD,MAAM,IAAI,eAAe,CACvB,kEAAkE,CACnE,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,YAAY,KAAK,mBAAmB,EAAE,CAAC;QAC/C,MAAM,IAAI,eAAe,CACvB,wEAAwE,CACzE,CAAC;IACJ,CAAC;IAED,sEAAsE;IACtE,qEAAqE;IACrE,qEAAqE;IACrE,sEAAsE;IACtE,cAAc;IACd,OAAO,aAAa,CAClB,kBAAkB,EAClB,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,CAEF,SAAyC;YAEzC,OAAO,gBAAgB,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;QACzD,CAAC;KACF,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Functional LoanBrokerSet factory — frozen-object style.
3
+ *
4
+ * Creates or updates a `LoanBroker` ledger entry. A `LoanBroker` owns a
5
+ * `Vault` and configures the protocol settings (management fee rate, debt
6
+ * maximum, cover rates). Creation and modification share one transaction
7
+ * type; the presence of `LoanBrokerID` distinguishes them ("update" vs
8
+ * "create"). Validation happens at construction; there is no way to
9
+ * construct an invalid tx.
10
+ *
11
+ * import { loanBrokerSet } from 'xrplt/fp';
12
+ * // Create
13
+ * const tx = loanBrokerSet({ Account, VaultID });
14
+ * // Update (must not change fixed fields)
15
+ * const tx2 = loanBrokerSet({
16
+ * Account, VaultID, LoanBrokerID, Data: '7B...',
17
+ * });
18
+ * const j = tx.toJSON();
19
+ * const tx3 = tx.with({ ManagementFeeRate: 100 });
20
+ *
21
+ * Affected amendments:
22
+ * - `LendingProtocol` (base LoanBrokerSet)
23
+ * - `LendingProtocolV1_1` (closed-ended vault constraints; locally
24
+ * uncheckable — that constraint compares against on-ledger state.)
25
+ *
26
+ * @see https://xrpl.org/docs/references/protocol/transactions/types/loanbrokerset
27
+ * @see XLS-66 §3.3 (Transaction: `LoanBrokerSet`)
28
+ * in `~/.mavis/docs.local/xrpl-standards/repo/XLS-0066-lending-protocol/README.md`
29
+ * (line 563)
30
+ *
31
+ * ## Divergences
32
+ *
33
+ * The factory enforces four preclaim checks that the class API
34
+ * (`src/transactions/loan-broker-set.ts`) and xrpl.js's
35
+ * `validateLoanBrokerSet` both skip. Each one comes from a named check in
36
+ * XLS-66 §3.3.3.1.
37
+ *
38
+ * 1. `VaultID` must not be the all-zeros HASH256 value.
39
+ * Source: XLS-66 §3.3.3.1 check 1 — "`VaultID` is zero. (`temINVALID`)"
40
+ * (`~/.mavis/docs.local/xrpl-standards/repo/XLS-0066-lending-protocol/README.md`
41
+ * line 589).
42
+ * The class and `validateLoanBrokerSet` only call
43
+ * `isLedgerEntryId(tx.VaultID)`, which the all-zeros string
44
+ * satisfies (`~/.mavis/docs/xrpl.js/.../loanBrokerSet.ts` lines 87–91).
45
+ *
46
+ * 2. `LoanBrokerID` must not be the all-zeros HASH256 value when present.
47
+ * Source: XLS-66 §3.3.3.1 check 8 — "`LoanBrokerID` is specified
48
+ * and is zero. (`temINVALID`)" (line 596).
49
+ * Same `isLedgerEntryId`-only gap as `LoanBrokerDelete`.
50
+ *
51
+ * 3. When `LoanBrokerID` is present (modification path), none of the
52
+ * fixed fields (`ManagementFeeRate`, `CoverRateMinimum`,
53
+ * `CoverRateLiquidation`) may be supplied.
54
+ * Source: XLS-66 §3.3.3.1 check 9 — "`LoanBrokerID` is specified
55
+ * and the submitter is attempting to modify fixed fields
56
+ * (`ManagementFeeRate`, `CoverRateMinimum`, `CoverRateLiquidation`).
57
+ * (`temINVALID`)" (line 597).
58
+ * The class does not implement it; neither does `validateLoanBrokerSet`.
59
+ * Only `Data` and `DebtMaximum` are mutable on existing entries
60
+ * (XLS-66 §3.3.4 lines 646–647).
61
+ *
62
+ * 4. `ManagementFeeRate`, `CoverRateMinimum`, `CoverRateLiquidation`
63
+ * must be integers (not fractional).
64
+ * Source: XLS-66 §3.3.1 — internal types `UINT16` and `UINT32`
65
+ * respectively (lines 576, 578, 579).
66
+ * The class does check `Number.isInteger` via its `rateInRange`
67
+ * helper. `validateLoanBrokerSet` accepts any number including
68
+ * `1.5`, since the check is `< 0` and `> max` only
69
+ * (`loanBrokerSet.ts` lines 105–137).
70
+ *
71
+ * Note: `Account` is also validated as a classic/X-address here. The class
72
+ * delegates Account validation to its `LoanTransaction` base class; we
73
+ * re-implement it explicitly so a malformed Account fails at construction
74
+ * time, identically to the other loan fp factories.
75
+ */
76
+ import type { GlobalFlagsInterface } from '../../types/flags.js';
77
+ export interface LoanBrokerSetProps {
78
+ /** The unique address of the transaction sender (must be `Vault.Owner`). */
79
+ Account: string;
80
+ /** The Vault ID that the Lending Protocol will use to access liquidity. 64-char hex, non-zero. */
81
+ VaultID: string;
82
+ /** LoanBrokerID when updating an existing entry (64-char hex, non-zero). */
83
+ LoanBrokerID?: string | undefined;
84
+ /** Bit-flags for this transaction. The spec defines none — pass-through only. */
85
+ Flags?: number | GlobalFlagsInterface | undefined;
86
+ /** Arbitrary metadata in hex format, 1–512 hex chars (≤ 256 bytes). */
87
+ Data?: string | undefined;
88
+ /** Management fee rate in 1/10 bp; integer 0–10000 (0%–10%). */
89
+ ManagementFeeRate?: number | undefined;
90
+ /** Max protocol debt owed to the Vault; 0 = unlimited. Non-negative base-10 integer string. */
91
+ DebtMaximum?: string | undefined;
92
+ /** Min cover rate for first-loss capital; integer 0–100000 (1/10 bp). */
93
+ CoverRateMinimum?: number | undefined;
94
+ /** Cover-rate liquidation cap; integer 0–100000 (1/10 bp). */
95
+ CoverRateLiquidation?: number | undefined;
96
+ /** Fee in XRP (drops), base-10 integer string. */
97
+ Fee?: string | undefined;
98
+ /** Account sequence number. */
99
+ Sequence?: number | undefined;
100
+ }
101
+ export interface LoanBrokerSet extends Readonly<LoanBrokerSetProps> {
102
+ readonly TransactionType: 'LoanBrokerSet';
103
+ validate(): void;
104
+ toJSON(): Record<string, unknown>;
105
+ with(overrides: Partial<LoanBrokerSetProps>): LoanBrokerSet;
106
+ }
107
+ export declare function loanBrokerSet(props: LoanBrokerSetProps): LoanBrokerSet;
108
+ //# sourceMappingURL=loan-broker-set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loan-broker-set.d.ts","sourceRoot":"","sources":["../../../src/fp/factories/loan-broker-set.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0EG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAoBjE,MAAM,WAAW,kBAAkB;IACjC,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB,kGAAkG;IAClG,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAAC;IAClD,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,+FAA+F;IAC/F,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,8DAA8D;IAC9D,oBAAoB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,kDAAkD;IAClD,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,+BAA+B;IAC/B,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;AAqBD,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,CAoJtE"}
@@ -0,0 +1,133 @@
1
+ import { isAccount, isHex, isNumber, isString } from '../../validation/helpers.js';
2
+ import { ValidationError } from '../../errors.js';
3
+ import { buildFrozenTx, mergeForWith, require } from '../shape.js';
4
+ // ─── Spec constants ──────────────────────────────────────────────────
5
+ // VaultID / LoanBrokerID are HASH256 = 32 bytes = 64 hex chars.
6
+ const HASH256_LENGTH = 64;
7
+ // All-zeros HASH256 is reserved / malformed per XLS-66 §3.3.3.1 checks 1 & 8.
8
+ const HASH256_ZERO = '0000000000000000000000000000000000000000000000000000000000000000';
9
+ // Spec caps (XLS-66 §3.3.1).
10
+ const MAX_DATA_LENGTH_CHARS = 512; // 256 bytes = 512 hex chars.
11
+ const MAX_MANAGEMENT_FEE_RATE = 10_000; // 1/10 bp; 0%–10% (UINT16).
12
+ const MAX_COVER_RATE = 100_000; // 1/10 bp; 0%–100% (UINT32).
13
+ // ─── Helpers ─────────────────────────────────────────────────────────
14
+ /**
15
+ * True when `value` is an integer in `[min, max]` inclusive. Mirrors
16
+ * the class's private `rateInRange` helper but lives at module scope
17
+ * so it can be reused by both ManagementFeeRate and the cover-rate
18
+ * range checks.
19
+ */
20
+ function rateInRange(value, min, max) {
21
+ return (isNumber(value) &&
22
+ Number.isInteger(value) &&
23
+ value >= min &&
24
+ value <= max);
25
+ }
26
+ // ─── Factory ─────────────────────────────────────────────────────────
27
+ export function loanBrokerSet(props) {
28
+ // ── Account ── required, must be a valid XRPL classic/X-address.
29
+ require(props.Account, 'LoanBrokerSet: Account is required', isAccount);
30
+ // ── VaultID ── required, 64-char hex AND non-zero.
31
+ // XLS-66 §3.3.3.1 check 1: "`VaultID` is zero. (`temINVALID`)".
32
+ if (!isString(props.VaultID) ||
33
+ !isHex(props.VaultID) ||
34
+ props.VaultID.length !== HASH256_LENGTH) {
35
+ throw new ValidationError('LoanBrokerSet: VaultID must be a 64-character hex string');
36
+ }
37
+ if (props.VaultID === HASH256_ZERO) {
38
+ throw new ValidationError('LoanBrokerSet: VaultID must not be the all-zeros HASH256 value');
39
+ }
40
+ // ── LoanBrokerID ── optional, 64-char hex AND non-zero.
41
+ // XLS-66 §3.3.3.1 check 8: "`LoanBrokerID` is specified and is zero".
42
+ if (props.LoanBrokerID !== undefined) {
43
+ if (!isString(props.LoanBrokerID) ||
44
+ !isHex(props.LoanBrokerID) ||
45
+ props.LoanBrokerID.length !== HASH256_LENGTH) {
46
+ throw new ValidationError('LoanBrokerSet: LoanBrokerID must be a 64-character hex string');
47
+ }
48
+ if (props.LoanBrokerID === HASH256_ZERO) {
49
+ throw new ValidationError('LoanBrokerSet: LoanBrokerID must not be the all-zeros HASH256 value');
50
+ }
51
+ }
52
+ // ── Fixed-field guard for the modification path ──
53
+ // XLS-66 §3.3.3.1 check 9: when LoanBrokerID is specified (modifying an
54
+ // existing entry), ManagementFeeRate / CoverRateMinimum /
55
+ // CoverRateLiquidation are fixed and cannot be re-supplied. Only
56
+ // `Data` and `DebtMaximum` are mutable (XLS-66 §3.3.4 lines 646–647).
57
+ if (props.LoanBrokerID !== undefined) {
58
+ const attempted = [];
59
+ if (props.ManagementFeeRate !== undefined)
60
+ attempted.push('ManagementFeeRate');
61
+ if (props.CoverRateMinimum !== undefined)
62
+ attempted.push('CoverRateMinimum');
63
+ if (props.CoverRateLiquidation !== undefined)
64
+ attempted.push('CoverRateLiquidation');
65
+ if (attempted.length > 0) {
66
+ throw new ValidationError(`LoanBrokerSet: cannot modify fixed field(s) when LoanBrokerID is specified: ${attempted.join(', ')}`);
67
+ }
68
+ }
69
+ // ── Data ── hex, 1–512 chars (≤ 256 bytes).
70
+ if (props.Data !== undefined) {
71
+ if (!isString(props.Data) || !isHex(props.Data)) {
72
+ throw new ValidationError('LoanBrokerSet: Data must be a valid non-empty hex string');
73
+ }
74
+ if (props.Data.length === 0 || props.Data.length > MAX_DATA_LENGTH_CHARS) {
75
+ throw new ValidationError(`LoanBrokerSet: Data must be 1 to ${MAX_DATA_LENGTH_CHARS} hex characters (actual: ${props.Data.length})`);
76
+ }
77
+ }
78
+ // ── ManagementFeeRate ── integer in [0, 10000] (1/10 bp; 0%–10%).
79
+ if (props.ManagementFeeRate !== undefined) {
80
+ if (!rateInRange(props.ManagementFeeRate, 0, MAX_MANAGEMENT_FEE_RATE)) {
81
+ throw new ValidationError(`LoanBrokerSet: ManagementFeeRate must be an integer between 0 and ${MAX_MANAGEMENT_FEE_RATE} inclusive`);
82
+ }
83
+ }
84
+ // ── DebtMaximum ── non-negative base-10 integer string.
85
+ if (props.DebtMaximum !== undefined) {
86
+ if (!isString(props.DebtMaximum) ||
87
+ !/^[0-9]+$/u.test(props.DebtMaximum)) {
88
+ throw new ValidationError('LoanBrokerSet: DebtMaximum must be a non-negative base-10 integer string');
89
+ }
90
+ }
91
+ // ── CoverRateMinimum / CoverRateLiquidation ranges.
92
+ if (props.CoverRateMinimum !== undefined &&
93
+ !rateInRange(props.CoverRateMinimum, 0, MAX_COVER_RATE)) {
94
+ throw new ValidationError(`LoanBrokerSet: CoverRateMinimum must be an integer between 0 and ${MAX_COVER_RATE} inclusive`);
95
+ }
96
+ if (props.CoverRateLiquidation !== undefined &&
97
+ !rateInRange(props.CoverRateLiquidation, 0, MAX_COVER_RATE)) {
98
+ throw new ValidationError(`LoanBrokerSet: CoverRateLiquidation must be an integer between 0 and ${MAX_COVER_RATE} inclusive`);
99
+ }
100
+ // ── Cover-rate coupling rule ──
101
+ // XLS-66 §3.3.3.1 check 7: "One of `CoverRateMinimum` and
102
+ // `CoverRateLiquidation` is zero, and the other one is not. (Either
103
+ // both are zero, or both are non-zero) (`temINVALID`)".
104
+ const coverMin = props.CoverRateMinimum ?? 0;
105
+ const coverLiq = props.CoverRateLiquidation ?? 0;
106
+ if ((coverMin === 0) !== (coverLiq === 0)) {
107
+ throw new ValidationError('LoanBrokerSet: CoverRateMinimum and CoverRateLiquidation must both be zero or both be non-zero');
108
+ }
109
+ // ── Flags ── spec defines no per-tx flags; pass-through only. We do
110
+ // not reject non-zero numeric Flags because the field is reserved for
111
+ // future amendments. Object-form Flags are also pass-through (the spec
112
+ // doesn't define a `LoanBrokerSetFlagsInterface`).
113
+ return buildFrozenTx('LoanBrokerSet', props, {
114
+ validate() {
115
+ // Validated at construction.
116
+ },
117
+ toJSON() {
118
+ const json = {};
119
+ for (const k of Object.keys(this)) {
120
+ if (k === 'validate' || k === 'toJSON' || k === 'with')
121
+ continue;
122
+ const v = this[k];
123
+ if (v !== undefined)
124
+ json[k] = v;
125
+ }
126
+ return json;
127
+ },
128
+ with(overrides) {
129
+ return loanBrokerSet(mergeForWith(this, overrides));
130
+ },
131
+ });
132
+ }
133
+ //# sourceMappingURL=loan-broker-set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loan-broker-set.js","sourceRoot":"","sources":["../../../src/fp/factories/loan-broker-set.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface LoanDeleteProps {
2
+ /** The unique address of the transaction sender. */
3
+ Account: string;
4
+ /** The ID of the `Loan` ledger entry to delete. 64-char hex. */
5
+ LoanID: string;
6
+ /** Fee in XRP (drops), base-10 integer string. */
7
+ Fee?: string | undefined;
8
+ /** Account sequence number. */
9
+ Sequence?: number | undefined;
10
+ }
11
+ export interface LoanDelete extends Readonly<LoanDeleteProps> {
12
+ readonly TransactionType: 'LoanDelete';
13
+ validate(): void;
14
+ toJSON(): Record<string, unknown>;
15
+ with(overrides: Partial<LoanDeleteProps>): LoanDelete;
16
+ }
17
+ export declare function loanDelete(props: LoanDeleteProps): LoanDelete;
18
+ //# sourceMappingURL=loan-delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loan-delete.d.ts","sourceRoot":"","sources":["../../../src/fp/factories/loan-delete.ts"],"names":[],"mappings":"AAqEA,MAAM,WAAW,eAAe;IAC9B,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,UAAW,SAAQ,QAAQ,CAAC,eAAe,CAAC;IAC3D,QAAQ,CAAC,eAAe,EAAE,YAAY,CAAC;IACvC,QAAQ,IAAI,IAAI,CAAC;IACjB,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,CAAC;CACvD;AAID,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CAqC7D"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Functional LoanDelete factory — frozen-object style.
3
+ *
4
+ * Deletes an existing `Loan` ledger entry. Only the LoanBroker owner or
5
+ * the Borrower can submit a LoanDelete (the ledger enforces this; not
6
+ * locally checkable here). Validation happens at construction; there is
7
+ * no way to construct an invalid tx.
8
+ *
9
+ * import { loanDelete } from 'xrplt/fp';
10
+ * const tx = loanDelete({ Account, LoanID });
11
+ * const j = tx.toJSON();
12
+ *
13
+ * LoanDelete defines NO per-transaction Flags per XLS-66 §3.9; this
14
+ * factory therefore omits a `Flags` field entirely.
15
+ *
16
+ * Affected amendments:
17
+ * - `LendingProtocol` (base LoanDelete)
18
+ *
19
+ * @see https://xrpl.org/docs/references/protocol/transactions/types/loandelete
20
+ * @see XLS-66 §3.9 (Transaction: `LoanDelete`)
21
+ *
22
+ * ## Divergences
23
+ *
24
+ * What: `LoanID` is rejected when it is the all-zeros HASH256 value.
25
+ *
26
+ * Why: XLS-66 §3.9.3.1 check 1: "`LoanID` is zero. (`temINVALID`)".
27
+ * xrpl-dev-portal `loandelete.md` error table: "`temINVALID` — The
28
+ * `LoanID` is missing or set to zero."
29
+ *
30
+ * The class API (`src/transactions/loan-delete.ts`) only checks
31
+ * `isHex` + 64-char length, which the all-zeros string satisfies.
32
+ * xrpl.js's `validateLoanDelete` (in `packages/xrpl/src/models/
33
+ * transactions/loanDelete.ts`) likewise only calls `isLedgerEntryId`,
34
+ * which also accepts the all-zeros string.
35
+ *
36
+ * Source citation:
37
+ * - XLS-66 §3.9.3.1 in
38
+ * `~/.mavis/docs.local/xrpl-standards/repo/XLS-0066-lending-protocol/README.md`
39
+ * (line 1203)
40
+ * - xrpl-dev-portal: `~/.mavis/docs.local/xrpl-dev-portal/repo/docs/
41
+ * references/protocol/transactions/types/loandelete.md` (line 48)
42
+ * - xrpl.js: `~/.mavis/docs.local/xrpl.js/repo/packages/xrpl/src/
43
+ * models/transactions/loanDelete.ts` (lines 36–40 — only checks
44
+ * `isLedgerEntryId`, no zero guard)
45
+ *
46
+ * What: `Account` is validated as a well-formed XRPL classic/X-address.
47
+ *
48
+ * Why: The class API delegates Account validation to its `LoanTransaction`
49
+ * base class. We re-implement it explicitly here so the factory is
50
+ * self-contained and a malformed Account is caught at construction time
51
+ * rather than during a separate `.validate()` step.
52
+ *
53
+ * Source citation:
54
+ * - xrpl.js `validateBaseTransaction` (called transitively by
55
+ * `validateLoanDelete`) — checks Account via `isAccount`.
56
+ * - Local helper `isAccount` at `src/validation/helpers.ts` lines 55–60.
57
+ */
58
+ import { isAccount, isLedgerEntryId } from '../../validation/helpers.js';
59
+ import { ValidationError } from '../../errors.js';
60
+ import { buildFrozenTx, mergeForWith, require } from '../shape.js';
61
+ // ─── Spec constants ──────────────────────────────────────────────────
62
+ // All-zeros HASH256 is reserved / malformed per spec.
63
+ const LOAN_ID_ZERO = '0000000000000000000000000000000000000000000000000000000000000000';
64
+ // ─── Factory ─────────────────────────────────────────────────────────
65
+ export function loanDelete(props) {
66
+ // ── Account ── required, must be a valid XRPL classic/X-address.
67
+ require(props.Account, 'LoanDelete: Account is required', isAccount);
68
+ // ── LoanID ── required, 64-char hex AND non-zero.
69
+ if (!isLedgerEntryId(props.LoanID)) {
70
+ throw new ValidationError('LoanDelete: LoanID must be a 64-character hex string');
71
+ }
72
+ if (props.LoanID === LOAN_ID_ZERO) {
73
+ throw new ValidationError('LoanDelete: LoanID must not be the all-zeros HASH256 value');
74
+ }
75
+ return buildFrozenTx('LoanDelete', props, {
76
+ validate() {
77
+ // Validated at construction.
78
+ },
79
+ toJSON() {
80
+ const json = {};
81
+ for (const k of Object.keys(this)) {
82
+ if (k === 'validate' || k === 'toJSON' || k === 'with')
83
+ continue;
84
+ const v = this[k];
85
+ if (v !== undefined)
86
+ json[k] = v;
87
+ }
88
+ return json;
89
+ },
90
+ with(overrides) {
91
+ return loanDelete(mergeForWith(this, overrides));
92
+ },
93
+ });
94
+ }
95
+ //# sourceMappingURL=loan-delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loan-delete.js","sourceRoot":"","sources":["../../../src/fp/factories/loan-delete.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEnE,wEAAwE;AAExE,sDAAsD;AACtD,MAAM,YAAY,GAChB,kEAAkE,CAAC;AAsBrE,wEAAwE;AAExE,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,kEAAkE;IAClE,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,iCAAiC,EAAE,SAAS,CAAC,CAAC;IAErE,mDAAmD;IACnD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,eAAe,CACvB,sDAAsD,CACvD,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QAClC,MAAM,IAAI,eAAe,CACvB,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IAED,OAAO,aAAa,CAClB,YAAY,EACZ,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,CAAmB,SAAmC;YACxD,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;QACnD,CAAC;KACF,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Functional LoanManage factory — frozen-object style.
3
+ *
4
+ * Modifies an existing `Loan` ledger entry (default, impairment, or
5
+ * unimpairment). Validation happens at construction; there is no way to
6
+ * construct an invalid tx.
7
+ *
8
+ * import { loanManage } from 'xrplt/fp';
9
+ * const tx = loanManage({ Account, LoanID });
10
+ * const j = tx.toJSON();
11
+ * const tx2 = tx.with({ Flags: 0x00020000 }); // tfLoanImpair
12
+ *
13
+ * @see https://xrpl.org/docs/references/protocol/transactions/types/loanmanage
14
+ * @see XLS-66 §3.10 (Transaction: `LoanManage`)
15
+ *
16
+ * ## Divergences
17
+ *
18
+ * What: All three `LoanManage` action flags (`tfLoanDefault`,
19
+ * `tfLoanImpair`, `tfLoanUnimpair`) are enforced as mutually exclusive —
20
+ * any pair raises a `ValidationError`.
21
+ *
22
+ * Why: XLS-66 §3.10.4.1 Data Verification states:
23
+ * "More than one of `tfLoanDefault`, `tfLoanImpair`, or `tfLoanUnimpair`
24
+ * flags are set (flags are mutually exclusive). (`temINVALID_FLAG`)"
25
+ *
26
+ * The class source (`src/transactions/loan-manage.ts`) and xrpl.js's
27
+ * `validateLoanManage` both only check the `tfLoanImpair` + `tfLoanUnimpair`
28
+ * pair, missing the `tfLoanDefault` combinations.
29
+ *
30
+ * Source citation:
31
+ * - XLS-66 §3.10.2 + §3.10.4.1 in
32
+ * `~/.mavis/docs.local/xrpl-standards/repo/XLS-0066-lending-protocol/README.md`
33
+ * (lines 1249, 1266)
34
+ * - xrpl.js: `~/.mavis/docs.local/xrpl.js/repo/packages/xrpl/src/models/transactions/loanManage.ts`
35
+ * (lines 98-105) — only Impair+Unimpair
36
+ *
37
+ * What: When `Flags` is provided as the `LoanManageFlagsInterface` (object
38
+ * form with boolean fields), the factory translates it into a numeric
39
+ * flag bitmask before applying mutual-exclusivity checks.
40
+ *
41
+ * Why: xrpl.js does this translation inline (see `validateLoanManage`),
42
+ * then enforces the same bitmask rules. We mirror that behavior so users
43
+ * can pass either numeric or object-form flags uniformly.
44
+ *
45
+ * Source citation:
46
+ * - xrpl.js `validateLoanManage` lines 86-96.
47
+ */
48
+ import type { LoanManageFlagsInterface } from '../../types/flags.js';
49
+ export interface LoanManageProps {
50
+ /** The unique address of the transaction sender (must be `LoanBroker.Owner`). */
51
+ Account: string;
52
+ /** The ID of the `Loan` ledger entry to manage. 64-char hex. */
53
+ LoanID: string;
54
+ /**
55
+ * Bit-flags for this transaction. Numeric form (any of
56
+ * `tfLoanDefault` | `tfLoanImpair` | `tfLoanUnimpair`) or the
57
+ * boolean-map `LoanManageFlagsInterface`.
58
+ */
59
+ Flags?: number | LoanManageFlagsInterface | undefined;
60
+ /** Fee in XRP (drops), base-10 integer string. */
61
+ Fee?: string | undefined;
62
+ /** Account sequence number. */
63
+ Sequence?: number | undefined;
64
+ }
65
+ export interface LoanManage extends Readonly<LoanManageProps> {
66
+ readonly TransactionType: 'LoanManage';
67
+ validate(): void;
68
+ toJSON(): Record<string, unknown>;
69
+ with(overrides: Partial<LoanManageProps>): LoanManage;
70
+ }
71
+ export declare function loanManage(props: LoanManageProps): LoanManage;
72
+ //# sourceMappingURL=loan-manage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loan-manage.d.ts","sourceRoot":"","sources":["../../../src/fp/factories/loan-manage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAarE,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,wBAAwB,GAAG,SAAS,CAAC;IACtD,kDAAkD;IAClD,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,UAAW,SAAQ,QAAQ,CAAC,eAAe,CAAC;IAC3D,QAAQ,CAAC,eAAe,EAAE,YAAY,CAAC;IACvC,QAAQ,IAAI,IAAI,CAAC;IACjB,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,CAAC;CACvD;AAkCD,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CA6C7D"}
@@ -0,0 +1,79 @@
1
+ import { isAccount, isLedgerEntryId } from '../../validation/helpers.js';
2
+ import { ValidationError } from '../../errors.js';
3
+ import { buildFrozenTx, mergeForWith, require } from '../shape.js';
4
+ // ─── Spec constants ──────────────────────────────────────────────────
5
+ const TF_LOAN_DEFAULT = 0x00010000;
6
+ const TF_LOAN_IMPAIR = 0x00020000;
7
+ const TF_LOAN_UNIMPAIR = 0x00040000;
8
+ // ─── Helpers ─────────────────────────────────────────────────────────
9
+ /**
10
+ * Translate the boolean-map `LoanManageFlagsInterface` into the numeric
11
+ * bitmask form. Numeric `Flags` pass through unchanged.
12
+ */
13
+ function flagsToNumber(flags) {
14
+ if (flags === undefined)
15
+ return 0;
16
+ if (typeof flags === 'number')
17
+ return flags;
18
+ let n = 0;
19
+ if (flags.tfLoanDefault)
20
+ n |= TF_LOAN_DEFAULT;
21
+ if (flags.tfLoanImpair)
22
+ n |= TF_LOAN_IMPAIR;
23
+ if (flags.tfLoanUnimpair)
24
+ n |= TF_LOAN_UNIMPAIR;
25
+ return n;
26
+ }
27
+ /**
28
+ * Count how many of the three action flags are present.
29
+ * `0` = no action (valid), `1` = single action (valid), `>1` = invalid.
30
+ */
31
+ function countActionFlags(numericFlags) {
32
+ let n = 0;
33
+ if ((numericFlags & TF_LOAN_DEFAULT) === TF_LOAN_DEFAULT)
34
+ n++;
35
+ if ((numericFlags & TF_LOAN_IMPAIR) === TF_LOAN_IMPAIR)
36
+ n++;
37
+ if ((numericFlags & TF_LOAN_UNIMPAIR) === TF_LOAN_UNIMPAIR)
38
+ n++;
39
+ return n;
40
+ }
41
+ // ─── Factory ─────────────────────────────────────────────────────────
42
+ export function loanManage(props) {
43
+ // ── Account ── required, must be a valid XRPL classic address.
44
+ require(props.Account, 'LoanManage: Account is required', isAccount);
45
+ // ── LoanID ── required, 64-char hex (Hash256 ledger entry ID).
46
+ if (!isLedgerEntryId(props.LoanID)) {
47
+ throw new ValidationError('LoanManage: LoanID must be a 64-character hex string');
48
+ }
49
+ // ── Flags ── translate + enforce 3-way mutual exclusivity.
50
+ // XLS-66 §3.10.4.1: at most one of tfLoanDefault / tfLoanImpair /
51
+ // tfLoanUnimpair may be set. Unknown keys in object-form Flags are
52
+ // silently ignored by `flagsToNumber`; we do not error on them so
53
+ // future global flags remain forward-compatible.
54
+ const numericFlags = flagsToNumber(props.Flags);
55
+ const actionCount = countActionFlags(numericFlags);
56
+ if (actionCount > 1) {
57
+ throw new ValidationError('LoanManage: tfLoanDefault, tfLoanImpair, and tfLoanUnimpair are mutually exclusive; only one may be set');
58
+ }
59
+ return buildFrozenTx('LoanManage', props, {
60
+ validate() {
61
+ // Validated at construction.
62
+ },
63
+ toJSON() {
64
+ const json = {};
65
+ for (const k of Object.keys(this)) {
66
+ if (k === 'validate' || k === 'toJSON' || k === 'with')
67
+ continue;
68
+ const v = this[k];
69
+ if (v !== undefined)
70
+ json[k] = v;
71
+ }
72
+ return json;
73
+ },
74
+ with(overrides) {
75
+ return loanManage(mergeForWith(this, overrides));
76
+ },
77
+ });
78
+ }
79
+ //# sourceMappingURL=loan-manage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loan-manage.js","sourceRoot":"","sources":["../../../src/fp/factories/loan-manage.ts"],"names":[],"mappings":"AAgDA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEnE,wEAAwE;AAExE,MAAM,eAAe,GAAG,UAAU,CAAC;AACnC,MAAM,cAAc,GAAG,UAAU,CAAC;AAClC,MAAM,gBAAgB,GAAG,UAAU,CAAC;AA4BpC,wEAAwE;AAExE;;;GAGG;AACH,SAAS,aAAa,CACpB,KAAoD;IAEpD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,KAAK,CAAC,aAAa;QAAE,CAAC,IAAI,eAAe,CAAC;IAC9C,IAAI,KAAK,CAAC,YAAY;QAAE,CAAC,IAAI,cAAc,CAAC;IAC5C,IAAI,KAAK,CAAC,cAAc;QAAE,CAAC,IAAI,gBAAgB,CAAC;IAChD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,YAAoB;IAC5C,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC,KAAK,eAAe;QAAE,CAAC,EAAE,CAAC;IAC9D,IAAI,CAAC,YAAY,GAAG,cAAc,CAAC,KAAK,cAAc;QAAE,CAAC,EAAE,CAAC;IAC5D,IAAI,CAAC,YAAY,GAAG,gBAAgB,CAAC,KAAK,gBAAgB;QAAE,CAAC,EAAE,CAAC;IAChE,OAAO,CAAC,CAAC;AACX,CAAC;AAED,wEAAwE;AAExE,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,gEAAgE;IAChE,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,iCAAiC,EAAE,SAAS,CAAC,CAAC;IAErE,gEAAgE;IAChE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,eAAe,CACvB,sDAAsD,CACvD,CAAC;IACJ,CAAC;IAED,4DAA4D;IAC5D,kEAAkE;IAClE,mEAAmE;IACnE,kEAAkE;IAClE,iDAAiD;IACjD,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;IACnD,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,eAAe,CACvB,yGAAyG,CAC1G,CAAC;IACJ,CAAC;IAED,OAAO,aAAa,CAClB,YAAY,EACZ,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,CAAmB,SAAmC;YACxD,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;QACnD,CAAC;KACF,CACF,CAAC;AACJ,CAAC"}