@instadapp/avocado-base 0.0.0-dev.e90081b → 0.0.0-dev.eda2183

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 (54) hide show
  1. package/assets/images/icons/arrow-left.svg +5 -0
  2. package/assets/images/icons/arrow-right.svg +5 -0
  3. package/assets/images/icons/avocado.svg +4 -0
  4. package/assets/images/icons/bridge-2.svg +3 -0
  5. package/assets/images/icons/bridge.svg +7 -0
  6. package/assets/images/icons/calendar.svg +8 -0
  7. package/assets/images/icons/check-circle.svg +4 -0
  8. package/assets/images/icons/chevron-down.svg +4 -0
  9. package/assets/images/icons/clipboard.svg +7 -0
  10. package/assets/images/icons/clock-circle.svg +5 -0
  11. package/assets/images/icons/copy.svg +5 -0
  12. package/assets/images/icons/error-circle.svg +6 -0
  13. package/assets/images/icons/exclamation-circle.svg +13 -0
  14. package/assets/images/icons/exclamation-octagon.svg +13 -0
  15. package/assets/images/icons/exclamation-triangle.svg +5 -0
  16. package/assets/images/icons/external-link.svg +6 -0
  17. package/assets/images/icons/eye.svg +4 -0
  18. package/assets/images/icons/flowers.svg +8 -0
  19. package/assets/images/icons/gas-emoji.svg +193 -0
  20. package/assets/images/icons/gas.svg +7 -0
  21. package/assets/images/icons/gift.svg +153 -0
  22. package/assets/images/icons/globe.svg +110 -0
  23. package/assets/images/icons/hamburger.svg +6 -0
  24. package/assets/images/icons/logout.svg +3 -0
  25. package/assets/images/icons/moon.svg +3 -0
  26. package/assets/images/icons/network.svg +13 -0
  27. package/assets/images/icons/options.svg +5 -0
  28. package/assets/images/icons/plus.svg +5 -0
  29. package/assets/images/icons/power-off-bg.svg +24 -0
  30. package/assets/images/icons/power-off.svg +19 -0
  31. package/assets/images/icons/power-on.svg +19 -0
  32. package/assets/images/icons/qr.svg +20 -0
  33. package/assets/images/icons/question-circle.svg +14 -0
  34. package/assets/images/icons/refresh.svg +6 -0
  35. package/assets/images/icons/search.svg +12 -0
  36. package/assets/images/icons/sun.svg +3 -0
  37. package/assets/images/icons/wave.svg +214 -0
  38. package/assets/images/icons/x.svg +5 -0
  39. package/components/ActionMetadata.vue +50 -0
  40. package/components/ChainLogo.vue +1 -1
  41. package/components/metadata/Bridge.vue +37 -0
  42. package/components/metadata/CrossTransfer.vue +65 -0
  43. package/components/metadata/GasTopup.vue +31 -0
  44. package/components/metadata/Permit2.vue +37 -0
  45. package/components/metadata/Swap.vue +66 -0
  46. package/components/metadata/Transfer.vue +43 -0
  47. package/components.d.ts +13 -0
  48. package/nuxt.config.ts +17 -1
  49. package/package.json +6 -3
  50. package/utils/avocado.ts +2 -0
  51. package/utils/bignumber.ts +20 -0
  52. package/utils/metadata.ts +206 -175
  53. package/utils/services.ts +14 -0
  54. package/utils/utils.d.ts +12 -0
package/utils/metadata.ts CHANGED
@@ -242,186 +242,217 @@ export const encodeMultipleActions = (...actionData: string[]) => {
242
242
  return ethers.utils.defaultAbiCoder.encode(multiMetadataTypes, [actionData]);
243
243
  };
244
244
 
245
- export const decodeMetadata = (data: string) => {
245
+ export const decodeData = (data: string) => {
246
246
  try {
247
- const iface = Forwarder__factory.createInterface();
248
- let metadata = "0x";
249
- let payload = {};
250
-
251
- if (!data) return payload;
252
-
253
- if (data.startsWith("0x18e7f485")) {
254
- const executeData = iface.decodeFunctionData("execute", data);
255
- if (executeData.metadata_ === "0x" || !executeData.metadata_) {
256
- return null;
257
- } else {
258
- metadata = executeData.metadata_;
259
- }
260
- } else if (data.startsWith("0x14f80a8d")) {
261
- const executeDataV2 = iface.decodeFunctionData("executeV2", data);
262
- if (
263
- executeDataV2.params_.metadata === "0x" ||
264
- !executeDataV2.params_.metadata
265
- ) {
266
- return null;
267
- } else {
268
- metadata = executeDataV2.params_.metadata;
269
- }
270
- } else if (data.startsWith("0x85114d53")) {
271
- const executeDataV3 = iface.decodeFunctionData("executeV3", data);
272
- if (
273
- executeDataV3.params_.metadata === "0x" ||
274
- !executeDataV3.params_.metadata
275
- ) {
276
- return null;
277
- } else {
278
- metadata = executeDataV3.params_.metadata;
279
- }
247
+ const metadata = getMetadataFromData(data) || "0x";
248
+
249
+ return parseMetadata(metadata);
250
+ } catch (e) {
251
+ // console.log(e);
252
+ return null;
253
+ }
254
+ };
255
+
256
+ export const decodeMetadata = (metadata: string) => {
257
+ try {
258
+ return parseMetadata(metadata);
259
+ } catch (e) {
260
+ return null;
261
+ }
262
+ };
263
+
264
+ const getMetadataFromData = (data: string) => {
265
+ const iface = Forwarder__factory.createInterface();
266
+ let metadata = "0x";
267
+
268
+ if (data.startsWith("0x18e7f485")) {
269
+ const executeData = iface.decodeFunctionData("execute", data);
270
+ if (executeData.metadata_ === "0x" || !executeData.metadata_) {
271
+ return null;
280
272
  } else {
281
- const executeDataMultisigV3 = iface.decodeFunctionData("executeMultisigV3", data);
282
- if (
283
- executeDataMultisigV3.params_.metadata === "0x" ||
284
- !executeDataMultisigV3.params_.metadata
285
- ) {
286
- return null;
287
- } else {
288
- metadata = executeDataMultisigV3.params_.metadata;
289
- }
273
+ metadata = executeData.metadata_;
290
274
  }
275
+ } else if (data.startsWith("0x14f80a8d")) {
276
+ const executeDataV2 = iface.decodeFunctionData("executeV2", data);
277
+ if (
278
+ executeDataV2.params_.metadata === "0x" ||
279
+ !executeDataV2.params_.metadata
280
+ ) {
281
+ return null;
282
+ } else {
283
+ metadata = executeDataV2.params_.metadata;
284
+ }
285
+ } else if (data.startsWith("0x85114d53")) {
286
+ const executeDataV3 = iface.decodeFunctionData("executeV3", data);
287
+ if (
288
+ executeDataV3.params_.metadata === "0x" ||
289
+ !executeDataV3.params_.metadata
290
+ ) {
291
+ return null;
292
+ } else {
293
+ metadata = executeDataV3.params_.metadata;
294
+ }
295
+ } else {
296
+ const executeDataMultisigV3 = iface.decodeFunctionData(
297
+ "executeMultisigV3",
298
+ data
299
+ );
300
+ if (
301
+ executeDataMultisigV3.params_.metadata === "0x" ||
302
+ !executeDataMultisigV3.params_.metadata
303
+ ) {
304
+ return null;
305
+ } else {
306
+ metadata = executeDataMultisigV3.params_.metadata;
307
+ }
308
+ }
291
309
 
292
- const metadataArr = [];
293
-
294
- const [decodedMultiMetadata = []] =
295
- (ethers.utils.defaultAbiCoder.decode(
296
- multiMetadataTypes,
297
- metadata
298
- ) as string[]) || [];
299
-
300
- for (let metadata of decodedMultiMetadata) {
301
- const decodedMetadata = ethers.utils.defaultAbiCoder.decode(
302
- metadataTypes,
303
- metadata
304
- );
305
-
306
- const type = ethers.utils.parseBytes32String(
307
- decodedMetadata.type
308
- ) as keyof typeof actionMetadataTypes;
309
-
310
- const decodedData = ethers.utils.defaultAbiCoder.decode(
311
- actionMetadataTypes[type],
312
- decodedMetadata.data
313
- );
314
-
315
- switch (type) {
316
- case "transfer":
317
- payload = {
318
- type,
319
- token: decodedData.token,
320
- amount: toBN(decodedData.amount).toFixed(),
321
- receiver: decodedData.receiver,
322
- };
323
- break;
324
- case "bridge":
325
- payload = {
326
- type,
327
- amount: toBN(decodedData.amount).toFixed(),
328
- receiver: decodedData.receiver,
329
- toToken: decodedData.toToken,
330
- fromToken: decodedData.fromToken,
331
- toChainId: decodedData.toChainId
332
- ? decodedData.toChainId.toString()
333
- : null,
334
- bridgeFee: toBN(decodedData.bridgeFee).toFixed(),
335
- };
336
- break;
337
- case "swap":
338
- payload = {
339
- type,
340
- buyAmount: toBN(decodedData.buyAmount).toFixed(),
341
- sellAmount: toBN(decodedData.sellAmount).toFixed(),
342
- buyToken: decodedData.buyToken,
343
- sellToken: decodedData.sellToken,
344
- receiver: decodedData.receiver,
345
- protocol: utils.parseBytes32String(decodedData?.protocol || ""),
346
- };
347
- break;
348
- case "upgrade":
349
- payload = {
350
- type,
351
- version: utils.parseBytes32String(decodedData?.version || ""),
352
- walletImpl: decodedData?.walletImpl,
353
- };
354
- break;
355
- case "gas-topup":
356
- payload = {
357
- type,
358
- amount: toBN(decodedData.amount).toFixed(),
359
- token: decodedData.token,
360
- onBehalf: decodedData.onBehalf,
361
- };
362
- break;
363
- case "dapp":
364
- payload = {
365
- type,
366
- name: decodedData?.name,
367
- url: decodedData?.url,
368
- };
369
- break;
370
- case "deploy":
371
- payload = {
372
- type,
373
- };
374
- break;
375
-
376
- case "permit2":
377
- payload = {
378
- type,
379
- token: decodedData.token,
380
- spender: decodedData.spender,
381
- amount: toBN(decodedData.amount).toFixed(),
382
- expiration: decodedData.expiration,
383
- };
384
- break;
385
-
386
- case "cross-transfer":
387
- payload = {
388
- type,
389
- fromToken: decodedData.fromToken,
390
- toToken: decodedData.toToken,
391
- toChainId: decodedData.toChainId
392
- ? decodedData.toChainId.toString()
393
- : null,
394
- amount: toBN(decodedData.amount).toFixed(),
395
- receiver: decodedData.receiver,
396
- };
397
-
398
- break;
399
- case "auth":
400
- payload = {
401
- type: decodedData.remove ? "remove-authority" : "add-authority",
402
- address: decodedData.address,
403
- chainId: decodedData.chainId
404
- ? decodedData.chainId.toString()
405
- : null,
406
- remove: decodedData.remove,
407
- };
408
-
409
- break;
410
- case "instadapp-pro":
411
- payload = {
412
- type,
413
- castDetails: decodedData.castDetails,
414
- };
415
-
416
- break;
417
- }
418
-
419
- metadataArr.push(payload);
310
+ return metadata;
311
+ };
312
+
313
+ const parseMetadata = (metadata: string) => {
314
+ const metadataArr = [];
315
+ let payload = {};
316
+
317
+ const [decodedMultiMetadata = []] =
318
+ (ethers.utils.defaultAbiCoder.decode(
319
+ multiMetadataTypes,
320
+ metadata
321
+ ) as string[]) || [];
322
+
323
+ for (let metadata of decodedMultiMetadata) {
324
+ const decodedMetadata = ethers.utils.defaultAbiCoder.decode(
325
+ metadataTypes,
326
+ metadata
327
+ );
328
+
329
+ const type = ethers.utils.parseBytes32String(
330
+ decodedMetadata.type
331
+ ) as keyof typeof actionMetadataTypes;
332
+
333
+ const decodedData = ethers.utils.defaultAbiCoder.decode(
334
+ actionMetadataTypes[type],
335
+ decodedMetadata.data
336
+ );
337
+
338
+ switch (type) {
339
+ case "transfer":
340
+ payload = {
341
+ type,
342
+ token: decodedData.token,
343
+ amount: toBN(decodedData.amount).toFixed(),
344
+ receiver: decodedData.receiver,
345
+ };
346
+ break;
347
+ case "bridge":
348
+ payload = {
349
+ type,
350
+ amount: toBN(decodedData.amount).toFixed(),
351
+ receiver: decodedData.receiver,
352
+ toToken: decodedData.toToken,
353
+ fromToken: decodedData.fromToken,
354
+ toChainId: decodedData.toChainId
355
+ ? decodedData.toChainId.toString()
356
+ : null,
357
+ bridgeFee: toBN(decodedData.bridgeFee).toFixed(),
358
+ };
359
+ break;
360
+ case "swap":
361
+ payload = {
362
+ type,
363
+ buyAmount: toBN(decodedData.buyAmount).toFixed(),
364
+ sellAmount: toBN(decodedData.sellAmount).toFixed(),
365
+ buyToken: decodedData.buyToken,
366
+ sellToken: decodedData.sellToken,
367
+ receiver: decodedData.receiver,
368
+ protocol: utils.parseBytes32String(decodedData?.protocol || ""),
369
+ };
370
+ break;
371
+ case "upgrade":
372
+ payload = {
373
+ type,
374
+ version: utils.parseBytes32String(decodedData?.version || ""),
375
+ walletImpl: decodedData?.walletImpl,
376
+ };
377
+ break;
378
+ case "gas-topup":
379
+ payload = {
380
+ type,
381
+ amount: toBN(decodedData.amount).toFixed(),
382
+ token: decodedData.token,
383
+ onBehalf: decodedData.onBehalf,
384
+ };
385
+ break;
386
+ case "dapp":
387
+ payload = {
388
+ type,
389
+ name: decodedData?.name,
390
+ url: decodedData?.url,
391
+ };
392
+ break;
393
+ case "deploy":
394
+ payload = {
395
+ type,
396
+ };
397
+ break;
398
+
399
+ case "permit2":
400
+ payload = {
401
+ type,
402
+ token: decodedData.token,
403
+ spender: decodedData.spender,
404
+ amount: toBN(decodedData.amount).toFixed(),
405
+ expiration: decodedData.expiration,
406
+ };
407
+ break;
408
+
409
+ case "cross-transfer":
410
+ payload = {
411
+ type,
412
+ fromToken: decodedData.fromToken,
413
+ toToken: decodedData.toToken,
414
+ toChainId: decodedData.toChainId
415
+ ? decodedData.toChainId.toString()
416
+ : null,
417
+ amount: toBN(decodedData.amount).toFixed(),
418
+ receiver: decodedData.receiver,
419
+ };
420
+
421
+ break;
422
+ case "auth":
423
+ payload = {
424
+ type: decodedData.remove ? "remove-authority" : "add-authority",
425
+ address: decodedData.address,
426
+ chainId: decodedData.chainId ? decodedData.chainId.toString() : null,
427
+ remove: decodedData.remove,
428
+ };
429
+
430
+ break;
431
+ case "instadapp-pro":
432
+ payload = {
433
+ type,
434
+ castDetails: decodedData.castDetails,
435
+ };
436
+
437
+ break;
420
438
  }
421
439
 
422
- return metadataArr;
423
- } catch (e) {
424
- console.log(e);
425
- return null;
440
+ metadataArr.push(payload);
426
441
  }
442
+
443
+ return metadataArr;
444
+ };
445
+
446
+ /**
447
+ * Replaces hyphens with spaces and capitalizes the first letter of each word in a sentence.
448
+ * @param {string} txType - The input sentence to modify
449
+ *
450
+ * @returns {string} - The modified sentence with hyphens replaced with spaces and the first letter of each word capitalized.
451
+ */
452
+ export const formatTxType = (txType: string) => {
453
+ const finalSentence = txType
454
+ .replace("-", " ")
455
+ .replace(/(^\w{1})|(\s+\w{1})/g, (letter) => letter.toUpperCase());
456
+
457
+ return finalSentence;
427
458
  };
@@ -0,0 +1,14 @@
1
+ export const fetchTokenByAddress = async (
2
+ address: string,
3
+ chainId: string | number
4
+ ) => {
5
+ if (!address || !chainId) return null;
6
+ const [token] = (await $fetch(`${blockQueryURL}/${chainId}/tokens`, {
7
+ params: {
8
+ sparkline: false,
9
+ "addresses[]": [address],
10
+ },
11
+ })) as ITokenPrice[];
12
+
13
+ return token;
14
+ };
package/utils/utils.d.ts CHANGED
@@ -116,3 +116,15 @@ type MetadataProps = {
116
116
  encodedData: string;
117
117
  version?: string;
118
118
  };
119
+
120
+ interface ITokenPrice {
121
+ address: string;
122
+ chain_id: string;
123
+ name: string;
124
+ symbol: string;
125
+ decimals: number;
126
+ logo_url: string;
127
+ price: string;
128
+ coingecko_id: string;
129
+ sparkline_price_7d: number[];
130
+ }