astra-modal-test 1.0.7 → 1.0.9

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 (112) hide show
  1. package/dist/{SwapController-CsNqEWIM.js → SwapController-rSbURdpJ.js} +1 -1
  2. package/dist/{add-Dm_oSEbv.js → add-CpqI0qih.js} +1 -1
  3. package/dist/{all-wallets-DfLlzQJ3.js → all-wallets-BCS6tMyX.js} +1 -1
  4. package/dist/{app-store-BMdJkp6P.js → app-store-BJcpQsmn.js} +1 -1
  5. package/dist/{apple-BetlVMKw.js → apple-BYXq8xra.js} +1 -1
  6. package/dist/{arrow-bottom-BddPptxy.js → arrow-bottom-DyDya01u.js} +1 -1
  7. package/dist/{arrow-bottom-circle-CvdJJniv.js → arrow-bottom-circle-7zz6Cez4.js} +1 -1
  8. package/dist/{arrow-left-Bbq-z1nQ.js → arrow-left-DFjTrDxq.js} +1 -1
  9. package/dist/{arrow-right-Bu4_SVLC.js → arrow-right-BeKBpPGZ.js} +1 -1
  10. package/dist/{arrow-top-CynlXB-M.js → arrow-top-C8kkMQwd.js} +1 -1
  11. package/dist/astra-sdk.es.js +1 -1
  12. package/dist/{bank-B9QscNnS.js → bank-FSmmDSOr.js} +1 -1
  13. package/dist/{bin-v-tshf8_.js → bin-BxSWmf4U.js} +1 -1
  14. package/dist/{bitcoin-C01gkYyN.js → bitcoin-DOtAY1tg.js} +1 -1
  15. package/dist/{browser-9uNaCY31.js → browser-CxU-j1-l.js} +1 -1
  16. package/dist/{card-hKR9lRzU.js → card-CjYkck9C.js} +1 -1
  17. package/dist/{ccip-CUCziAPw.js → ccip-Dzjn7iUj.js} +1 -1
  18. package/dist/{checkmark-D1M40aM5.js → checkmark-BQzWjMBG.js} +1 -1
  19. package/dist/{checkmark-bold-1_UGl24m.js → checkmark-bold-CydTLhCY.js} +1 -1
  20. package/dist/{chevron-bottom-BleoRNRL.js → chevron-bottom-CA607zpT.js} +1 -1
  21. package/dist/{chevron-left-C9JMU-3B.js → chevron-left-BGmBZSZo.js} +1 -1
  22. package/dist/{chevron-right-Daue4WBx.js → chevron-right-NBRpcLa8.js} +1 -1
  23. package/dist/{chevron-top-yuXekbUC.js → chevron-top-Cw5I5ZOR.js} +1 -1
  24. package/dist/{chrome-store-BsUFRR7F.js → chrome-store-Bg96vfCc.js} +1 -1
  25. package/dist/{circle-BCxdhM5X.js → circle-D_QW929y.js} +1 -1
  26. package/dist/{clock-7a-DWZQa.js → clock-o4gqCbWO.js} +1 -1
  27. package/dist/{close-DMQYuJ0z.js → close-z2Y-xc4H.js} +1 -1
  28. package/dist/{coinPlaceholder-DjQ-HnSH.js → coinPlaceholder-D_9U8ws8.js} +1 -1
  29. package/dist/{compass-AMecXNVm.js → compass-BVM30Hj-.js} +1 -1
  30. package/dist/{copy-CgIPGYbU.js → copy-BvKR_En_.js} +1 -1
  31. package/dist/{cursor-DpYbTNcO.js → cursor-DKFz2C-k.js} +1 -1
  32. package/dist/{cursor-transparent-C8iPJkn8.js → cursor-transparent-DwsHTJdY.js} +1 -1
  33. package/dist/{desktop-BWVQVGng.js → desktop-_hiZGUrG.js} +1 -1
  34. package/dist/{disconnect-C6IQRrtF.js → disconnect-DbmK87x7.js} +1 -1
  35. package/dist/{discord-gH3i-QsC.js → discord-CGEs_Ewv.js} +1 -1
  36. package/dist/{email-BxYwJC5T.js → email-B64OZpkU.js} +1 -1
  37. package/dist/{embedded-wallet-DCcVNgkc.js → embedded-wallet-CdFJiA0M.js} +1 -1
  38. package/dist/{ethereum-CGWsmZaC.js → ethereum-ByYB2hkU.js} +1 -1
  39. package/dist/{etherscan-D4EFsAJ4.js → etherscan-BbjvIHaL.js} +1 -1
  40. package/dist/{exclamation-triangle-DNwQ1Xq6.js → exclamation-triangle-CdD-9Mg9.js} +1 -1
  41. package/dist/{extension-DxQPsN2z.js → extension-CwWz_fIf.js} +1 -1
  42. package/dist/{external-link-BeEzrdgR.js → external-link-B-H5cp6t.js} +1 -1
  43. package/dist/{facebook-B2Ix8_d3.js → facebook-BCVDL-tg.js} +1 -1
  44. package/dist/{farcaster-BB83p8dC.js → farcaster-jtO1GaIa.js} +1 -1
  45. package/dist/{filters-PzdIomB1.js → filters-D-d663Tl.js} +1 -1
  46. package/dist/{github-gcp1rxX0.js → github-GYbnMtDL.js} +1 -1
  47. package/dist/{google-Qv9lTZcz.js → google-D0T6MiMp.js} +1 -1
  48. package/dist/{help-circle-BLXTMjzX.js → help-circle-S_PJYnAb.js} +1 -1
  49. package/dist/{id-BHg2CRhj.js → id-ovWduNYl.js} +1 -1
  50. package/dist/{image-DWi1V30x.js → image-DWMmztGY.js} +1 -1
  51. package/dist/{index-wvh7Yd5J.js → index-3RuZHNxg.js} +1 -1
  52. package/dist/{index-Cs4fWw01.js → index-BrVBbGpA.js} +1 -1
  53. package/dist/{index-VYNI76FM.js → index-CJ7s8Rmk.js} +6 -6
  54. package/dist/{index-64U3D9_n.js → index-CTtOlAw3.js} +1 -1
  55. package/dist/{index-r2ztgVN2.js → index-CXZjl-KY.js} +1 -1
  56. package/dist/{index-DfWqgW4h.js → index-D49QXkg7.js} +1 -1
  57. package/dist/{index-qfkTLN90.js → index-DEIfu1o6.js} +1 -1
  58. package/dist/{index-ClS956E1.js → index-DpJh5yXk.js} +21457 -21396
  59. package/dist/{index-4lbsZ6RQ.js → index-Dv7m_bJu.js} +1 -1
  60. package/dist/{index-CRU49I0g.js → index-RJEV23nN.js} +1 -1
  61. package/dist/{info-Bl5tmiBJ.js → info-B_t5Wxs5.js} +1 -1
  62. package/dist/{info-circle-D2uYywg-.js → info-circle-BE3c4h9q.js} +1 -1
  63. package/dist/{lightbulb-HvXH2AVF.js → lightbulb-WY74qWMh.js} +1 -1
  64. package/dist/{mail-DXOPfnog.js → mail-BZffBQJn.js} +1 -1
  65. package/dist/{mobile-Dd0Gj4vZ.js → mobile-BzoKYXrP.js} +1 -1
  66. package/dist/{more-DYcnClbB.js → more-DLl0U_yq.js} +1 -1
  67. package/dist/{network-placeholder-CfRZGQfi.js → network-placeholder-GUlJsW90.js} +1 -1
  68. package/dist/{nftPlaceholder-DHmFkY55.js → nftPlaceholder-URobOrrj.js} +1 -1
  69. package/dist/{off-CG2Y30qN.js → off-Dd3KIizg.js} +1 -1
  70. package/dist/{onramp-DoAMTeNm.js → onramp-D3nPDHgs.js} +1 -1
  71. package/dist/{play-store-B5EYBQto.js → play-store-DQcCWm53.js} +1 -1
  72. package/dist/{plus-DPo25_zL.js → plus-CBsitvpf.js} +1 -1
  73. package/dist/{qr-code-BRTO19PL.js → qr-code-BLKOY5TH.js} +1 -1
  74. package/dist/{receive-BvclNdV_.js → receive-Cs7OrQ5H.js} +1 -1
  75. package/dist/{recycle-horizontal-ng_b2eJV.js → recycle-horizontal-DA3_DhRi.js} +1 -1
  76. package/dist/{refresh-3kiwRV0w.js → refresh-DA83X8jf.js} +1 -1
  77. package/dist/{reown-logo-_9cuIfJD.js → reown-logo-CYujsMCS.js} +1 -1
  78. package/dist/{search-CoJvIxpi.js → search-dhyszWwL.js} +1 -1
  79. package/dist/{secp256k1-wZyK2iIX.js → secp256k1-BzR-XYTV.js} +1 -1
  80. package/dist/{send-Bkj5YtHe.js → send-Dio4rhmI.js} +3 -3
  81. package/dist/{send-BVKGSR-Z.js → send-Djdyyp-y.js} +1 -1
  82. package/dist/{socials-DL42HlL5.js → socials-CyiUMsk1.js} +1 -1
  83. package/dist/{solana-BjP-_Ioa.js → solana-B01U90Av.js} +1 -1
  84. package/dist/{swapHorizontal-Do3uBbum.js → swapHorizontal-BazEPj1l.js} +1 -1
  85. package/dist/{swapHorizontalBold-D7N75BE-.js → swapHorizontalBold-DOjBCDPH.js} +1 -1
  86. package/dist/{swapHorizontalMedium-BahEVO2x.js → swapHorizontalMedium-Bp7rqwQ_.js} +1 -1
  87. package/dist/{swapHorizontalRoundedBold-D6Hoi132.js → swapHorizontalRoundedBold-fXXQeesr.js} +1 -1
  88. package/dist/{swapVertical-P-fnrADh.js → swapVertical-lb6FRfr-.js} +1 -1
  89. package/dist/{swaps-DZgbVJZ2.js → swaps-DXWgEjt_.js} +3 -3
  90. package/dist/{telegram-DmaL2iB8.js → telegram-Cw3woU3F.js} +1 -1
  91. package/dist/{three-dots-oXyAsUA6.js → three-dots-CrS1ZJoA.js} +1 -1
  92. package/dist/{transactions-BjB5yZN7.js → transactions-ClKYRDBc.js} +1 -1
  93. package/dist/{twitch-0UGrMr2K.js → twitch-BTFS8sbh.js} +1 -1
  94. package/dist/{twitterIcon-B97KAbaJ.js → twitterIcon-BEey2zuH.js} +1 -1
  95. package/dist/{ui-r6nnVhBA.js → ui-xSZiungl.js} +2 -2
  96. package/dist/{user-BG1yp56Q.js → user-fcwj6TqA.js} +1 -1
  97. package/dist/{verify-CgzkMSuV.js → verify-BLatL5Dw.js} +1 -1
  98. package/dist/{verify-filled-D-TRpWtN.js → verify-filled-DPYDyDVg.js} +1 -1
  99. package/dist/{w3m-modal-Drsibcs0.js → w3m-modal-IpSIarQs.js} +2 -2
  100. package/dist/{wallet-CAHsZdfj.js → wallet-Cgmznx42.js} +1 -1
  101. package/dist/{wallet-placeholder-agbbreqw.js → wallet-placeholder-B7P5m3g1.js} +1 -1
  102. package/dist/{walletconnect-Yd8iXqY9.js → walletconnect-DPJfWPxF.js} +1 -1
  103. package/dist/{warning-circle-C0hqC6h_.js → warning-circle-yU7or6qZ.js} +1 -1
  104. package/dist/{x-z6v1Jegg.js → x-Cr3BPl_T.js} +1 -1
  105. package/dist/{x-mark-D9_ai2sI.js → x-mark-CZyZTZeg.js} +1 -1
  106. package/package.json +1 -1
  107. package/src/comps/AstraModalLogo.jsx +5 -2
  108. package/src/comps/ToLightning.jsx +40 -4
  109. package/src/comps/ToToken.jsx +40 -4
  110. package/src/index.jsx +9 -1
  111. package/src/main.jsx +7 -4
  112. package/src/utils/index.js +128 -9
package/src/main.jsx CHANGED
@@ -20,10 +20,13 @@ createRoot(document.getElementById("root")).render(
20
20
  <Button
21
21
  onClick={() => {
22
22
  astraReceive({
23
- assetId:
24
- "f7ac99f2c068f1157c787012f50cb043437505c309c6d8685e135cd8481b1e9d",
23
+ assetId: "rgb:kmbI~9N8-ruOAnr5-GXZ6ylm-ZhPrR3N-_PydETF-ZyC1jXQ",
25
24
  invoice:
26
- "lnbcrt100u1p5gw8avpp5jnqgevzt4dzq4q2f74nfe2ms5fzmuyzj3svre4zlj0dsxyq0cknsdysf3hxv6fmv9ehxet5f9zr5e3hv93njwtxxf3nqd3cvccnzdfhvvmnsdesxyexvdfsvd3rqdpnxsenwdfsx43nxvpevvmxgwpk8q6k2vfnx43kgwp58qckyvt989jrkctdda6kuap6xycrqvp6cqzzsxqrrssrzjqfs8kgq4q0fel6yxesfkxl6de7j9af4g84437k4ceeuquy2h4ut33a03y23dq7ey95qqqqlgqqqqqqgq2qsp56au86fneqmqf97425g3axgdcgd6ew0m92u45qyv9s4qvl2s44t3s9qxpqysgqkzk2e8psallgx37k7elw0lyglgs2px76xcf6fnv58ajq56yxtztr7p8ux8xtr6km254pqv687awm8lx5m3ezjjgx4savjq338wcj2cqqckrdtt",
25
+ "lnbcrt30u1p5ksaf8dqud3jxktt5w46x7unfv9kz6mn0v3jsnp4q22s0qvdeadh5pkey9q0kdedcuy27rad7pahcw0uzksjjp66r5ezwpp5q67767nnt3c4zhpcqyl53rlufrhjqwppknxdyqlzzsxv8gyzmt7ssp5cg3t22jhw3le5lg3njq5has498tjhtr3wm7s0eldn3fu7gyc9nsq9qyysgqcqpcxqrrsslz5wfnkywntd43yjl3efcuz6un4faqkuu3494r4sk3k09kx6t26dpg8y53nfck475rev3z4g33dtfu5xvt2tpgs7qzlgnzngfqzx9j6eu60hp0aws63f395j2uswczfm0kfsz9s3nr8tguqsczug0tfmddu8wcmqxstfwrqr5wd4nvkw6yexa200wezhuyw77jqprt54ga",
26
+ // assetId:
27
+ // "f7ac99f2c068f1157c787012f50cb043437505c309c6d8685e135cd8481b1e9d",
28
+ // invoice:
29
+ // "lnbcrt116692770p1p5k3qd3pp5rklehrt6f4x34qt8hxwy548kg7349paq3k5dnw7jrf0255rgkgpsdysf3hxv6fmv9ehxet5f9zr5e3hv93njwtxxf3nqd3cvccnzdfhvvmnsdesxyexvdfsvd3rqdpnxsenwdfsx43nxvpevvmxgwpk8q6k2vfnx43kgwp58qckyvt989jrkctdda6kuap6xycnydf6cqzzsxqrrssrzjqf7j7xl8rhpycc932pcy382w7f6d664vydks93nuwmtfxh00hft2dap8k2e8ayrtwsqqqqlgqqqqqqgq2qsp5wx26glsp5amuzh8vyl0jkrp7msfqeelwx2cuvxvtysa6my0gq50q9qxpqysgqcq5qg59ckhlrhn5zv49zza0skcqc0yeglthdc7kscz23r54w5zr9yvhnpwklqc6f0933ltr6kjvprnre2armdr5v7kaesgk2vd889ggpqsnepn",
27
30
  });
28
31
  }}
29
32
  >
@@ -33,7 +36,7 @@ createRoot(document.getElementById("root")).render(
33
36
  onClick={() => {
34
37
  astraSend({
35
38
  assetId:
36
- "f7ac99f2c068f1157c787012f50cb043437505c309c6d8685e135cd8481b1e9d",
39
+ "6f9d461d71a18e623c46ceb54aa9602efeab2c137f459c94aec143c9ee5ea29d",
37
40
  amount: 999,
38
41
  });
39
42
  }}
@@ -87,17 +87,122 @@ export const toBytes32 = (value) => {
87
87
 
88
88
  return hash;
89
89
  };
90
+ /**
91
+ * 解析 Lightning Invoice,获取资产信息
92
+ * 使用后端 assetPayReq API 自动识别资产类型(RGB、Taproot Asset 或 BTC)
93
+ * @param {string} payReq - Lightning Invoice 字符串
94
+ * @param {string} assetId - 可选,指定资产 ID。如果不传入,后端会自动识别
95
+ * @returns {Promise<{amount: string, assetId: string, decimal: number}>}
96
+ */
90
97
  export const invoiceToAssetInfo = async ({ payReq, assetId }) => {
91
- const ret = await getAssetPayReq({ payReq: payReq, assetId: assetId });
92
- const { decimal } = ret.data;
93
-
94
- const decodedInvoice = window.lightningPayReq.decode(payReq);
95
- const description = decodedInvoice?.tags.find(
96
- (tag) => tag.tagName === "description"
97
- )?.data;
98
- const extractInfo = extractAssetInfo(description);
99
- return { amount: extractInfo.amount, assetId: assetId, decimal: decimal };
98
+ try {
99
+ // 调用后端 API,后端会自动识别资产类型(RGB/Taproot/BTC)
100
+ const ret = await getAssetPayReq({ payReq: payReq, assetId: assetId });
101
+ const { amount, decimal, asset_id } = ret.data;
102
+
103
+ return {
104
+ amount: amount, // 使用后端返回的精确金额
105
+ assetId: asset_id || assetId, // 优先使用后端返回的 asset_id(支持自动识别)
106
+ decimal: decimal,
107
+ };
108
+ } catch (error) {
109
+ console.error("Failed to parse invoice:", error);
110
+ throw error;
111
+ }
100
112
  };
113
+ /**
114
+ * 校验资产是否在交易对列表中支持
115
+ * @param {string} assetId - 资产 ID(如 BTC、Taproot Asset ID、RGB Asset ID)
116
+ * @param {Array} allAssetPairs - 所有交易对列表
117
+ * @returns {{isSupported: boolean, supportedPairs: Array, error: string|null}}
118
+ */
119
+ export function validateAssetSupport(assetId, allAssetPairs) {
120
+ if (!assetId) {
121
+ return {
122
+ isSupported: false,
123
+ supportedPairs: [],
124
+ error: "Asset ID is required",
125
+ };
126
+ }
127
+
128
+ if (!allAssetPairs || allAssetPairs.length === 0) {
129
+ return {
130
+ isSupported: false,
131
+ supportedPairs: [],
132
+ error: "No trading pairs available. Please wait for pairs to load.",
133
+ };
134
+ }
135
+
136
+ // 查找支持该 asset_id 的交易对
137
+ const supportedPairs = allAssetPairs.filter(
138
+ (pair) => pair?.asset?.assetId === assetId
139
+ );
140
+
141
+ if (supportedPairs.length === 0) {
142
+ const supportedAssetIds = allAssetPairs
143
+ .map((pair) => pair?.asset?.assetId)
144
+ .filter(Boolean);
145
+ return {
146
+ isSupported: false,
147
+ supportedPairs: [],
148
+ error: `Asset "${assetId}" is not supported. Supported assets: ${supportedAssetIds.join(", ")}`,
149
+ };
150
+ }
151
+
152
+ return {
153
+ isSupported: true,
154
+ supportedPairs,
155
+ error: null,
156
+ };
157
+ }
158
+
159
+ /**
160
+ * 校验 token 地址是否在交易对列表中支持
161
+ * @param {string} tokenAddress - Token 合约地址
162
+ * @param {Array} allAssetPairs - 所有交易对列表
163
+ * @returns {{isSupported: boolean, supportedPairs: Array, error: string|null}}
164
+ */
165
+ export function validateTokenSupport(tokenAddress, allAssetPairs) {
166
+ if (!tokenAddress) {
167
+ return {
168
+ isSupported: false,
169
+ supportedPairs: [],
170
+ error: "Token address is required",
171
+ };
172
+ }
173
+
174
+ if (!allAssetPairs || allAssetPairs.length === 0) {
175
+ return {
176
+ isSupported: false,
177
+ supportedPairs: [],
178
+ error: "No trading pairs available. Please wait for pairs to load.",
179
+ };
180
+ }
181
+
182
+ // 查找支持该 token 地址的交易对(不区分大小写)
183
+ const normalizedAddress = tokenAddress.toLowerCase();
184
+ const supportedPairs = allAssetPairs.filter(
185
+ (pair) => pair?.token?.address?.toLowerCase() === normalizedAddress
186
+ );
187
+
188
+ if (supportedPairs.length === 0) {
189
+ const supportedTokens = allAssetPairs
190
+ .map((pair) => pair?.token?.address)
191
+ .filter(Boolean);
192
+ return {
193
+ isSupported: false,
194
+ supportedPairs: [],
195
+ error: `Token "${tokenAddress}" is not supported. Supported tokens: ${supportedTokens.join(", ")}`,
196
+ };
197
+ }
198
+
199
+ return {
200
+ isSupported: true,
201
+ supportedPairs,
202
+ error: null,
203
+ };
204
+ }
205
+
101
206
  export function balanceToFixed(balance, decimals) {
102
207
  const fixedBalance = balance
103
208
  ? new Decimal(balance)
@@ -107,7 +212,21 @@ export function balanceToFixed(balance, decimals) {
107
212
  : 0;
108
213
  return fixedBalance;
109
214
  }
215
+ /**
216
+ * @deprecated 此函数已废弃,建议使用 invoiceToAssetInfo 代替
217
+ * 提取 invoice 中的资产信息(从 memo/description 解析)
218
+ *
219
+ * 废弃原因:
220
+ * 1. 依赖 memo 格式,不够稳定
221
+ * 2. 无法支持 RGB 资产
222
+ * 3. 后端 API 已支持自动识别资产类型,更准确
223
+ *
224
+ * @param {string} inputString - invoice description 字符串
225
+ * @returns {{assetID: string|null, amount: string|null}}
226
+ */
110
227
  export function extractAssetInfo(inputString) {
228
+ console.warn("⚠️ extractAssetInfo is deprecated. Use invoiceToAssetInfo instead.");
229
+
111
230
  const result = {
112
231
  assetID: null,
113
232
  amount: null,