@instadapp/avocado-base 0.0.34 → 0.0.36

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.
@@ -1,10 +1,13 @@
1
1
  <script lang="ts" setup>
2
2
 
3
- defineProps<{
3
+ const props = defineProps<{
4
4
  metadata: any;
5
5
  chain_id: number | string;
6
+ compact?: boolean;
6
7
  }>();
7
8
 
9
+ provide('compact', props.compact);
10
+
8
11
  </script>
9
12
 
10
13
  <template>
@@ -5,6 +5,8 @@ const props = defineProps<{
5
5
  chain_id: number | string
6
6
  }>();
7
7
 
8
+ const compact = inject('compact');
9
+
8
10
  const toToken = asyncComputed(() =>
9
11
  fetchTokenByAddress(props.metadata?.toToken, props.metadata?.toChainId)
10
12
  );
@@ -22,12 +24,12 @@ const bridgeAmountFormatted = computed(() =>
22
24
  class="flex gap-5 items-center"
23
25
  v-if="metadata.type === 'bridge' && toToken"
24
26
  >
25
- <span class="capitalize text-xs sm:text-sm">{{ metadata.type }}</span>
27
+ <span v-if="!compact" class="capitalize text-xs sm:text-sm">{{ metadata.type }}</span>
26
28
  <span class="inline-flex gap-2.5 items-center">
27
29
  <img width="20" height="20" class="w-5 h-5" :src="toToken.logo_url" />
28
30
  {{ bridgeAmountFormatted }}
29
31
  <span class="uppercase">{{ toToken?.symbol }}</span>
30
- <SvgoBridge class="text-slate-400 w-5 h-5" />
32
+ <SvgoBridge class="text-slate-400 w-4 h-4" />
31
33
  <span class="flex items-center gap-2.5">
32
34
  <ChainLogo class="w-5" :chain="metadata.toChainId" />
33
35
  <span>{{ chainIdToName(metadata.toChainId) }}</span>
@@ -5,6 +5,8 @@ const props = defineProps<{
5
5
  chain_id: number | string
6
6
  }>();
7
7
 
8
+ const compact = inject('compact');
9
+
8
10
  const fromToken = asyncComputed(() => {
9
11
  if (!props?.chain_id) return null;
10
12
 
@@ -27,7 +29,7 @@ const formattedFromAmount = computed(() =>
27
29
  </div>
28
30
  <div class="flex gap-5 flex-col" v-else>
29
31
  <div class="flex items-center gap-5">
30
- <span class="capitalize text-xs sm:text-sm">Cross-chain send</span>
32
+ <span v-if="!compact" class="capitalize text-xs sm:text-sm">Cross-chain send</span>
31
33
  <span class="inline-flex gap-2.5 items-center">
32
34
  <img width="20" height="20" class="w-5 h-5" :src="fromToken?.logo_url" />
33
35
  {{ formattedFromAmount }}
@@ -9,6 +9,8 @@ const token = asyncComputed(() =>
9
9
  fetchTokenByAddress(props.metadata?.token, props?.chain_id)
10
10
  );
11
11
 
12
+ const compact = inject('compact');
13
+
12
14
  const formattedAmount = computed(() =>
13
15
  formatDecimal(
14
16
  fromWei(props.metadata?.amount, token?.value?.decimals).toFixed()
@@ -19,7 +21,7 @@ const formattedAmount = computed(() =>
19
21
  <template>
20
22
  <div v-if="!token" class="rounded-5 w-24 h-4 loading-box" />
21
23
  <div class="flex items-center gap-5" v-else>
22
- <span class="capitalize text-xs sm:text-sm">{{ metadata.type }}</span>
24
+ <span v-if="!compact" class="capitalize text-xs sm:text-sm">{{ metadata.type }}</span>
23
25
  <span class="inline-flex gap-2.5 items-center">
24
26
  <img width="20" height="20" class="w-5 h-5" :src="token?.logo_url" />
25
27
  {{ formattedAmount }}
@@ -5,6 +5,7 @@ const props = defineProps<{
5
5
  chain_id: number | string
6
6
  }>();
7
7
 
8
+ const compact = inject('compact');
8
9
 
9
10
  const buyToken = asyncComputed(() =>
10
11
  fetchTokenByAddress(props.metadata?.buyToken, props?.chain_id)
@@ -45,7 +46,7 @@ const formatProtocol = (protocol: string) => {
45
46
  class="flex items-center gap-5"
46
47
  v-else
47
48
  >
48
- <span class="capitalize text-xs sm:text-sm">{{ metadata.type }}</span>
49
+ <span v-if="!compact" class="capitalize text-xs sm:text-sm">{{ metadata.type }}</span>
49
50
  <span class="inline-flex gap-2.5 items-center">
50
51
  <img width="20" height="20" class="w-5 h-5" :src="sellToken?.logo_url" />
51
52
  {{ sellAmountFormatted }}
@@ -56,7 +57,7 @@ const formatProtocol = (protocol: string) => {
56
57
  <span class="uppercase">{{ buyToken?.symbol }}</span>
57
58
  <span
58
59
  class="capitalize hidden sm:flex items-center gap-2.5"
59
- v-if="metadata.protocol"
60
+ v-if="metadata.protocol && !compact"
60
61
  >
61
62
  On <ProtocolLogo class="w-5 h-5" :name="metadata.protocol" />
62
63
  {{ formatProtocol(metadata.protocol) }}
@@ -5,6 +5,7 @@ const props = defineProps<{
5
5
  chain_id: number | string
6
6
  }>();
7
7
 
8
+ const compact = inject('compact');
8
9
 
9
10
  const token = asyncComputed(() => {
10
11
  if (!props?.chain_id) return null;
@@ -25,19 +26,21 @@ const formattedAmount = computed(() =>
25
26
  <template>
26
27
  <div v-if="!token" class="rounded-5 w-24 h-4 loading-box" />
27
28
  <div class="flex items-center gap-5" v-else>
28
- <span class="capitalize text-xs sm:text-sm">{{ metadata.type }}</span>
29
+ <span v-if="!compact" class="capitalize text-xs sm:text-sm">{{ metadata.type }}</span>
29
30
  <span class="inline-flex gap-2.5 items-center">
30
31
  <img width="20" height="20" class="w-5 h-5" :src="token?.logo_url" />
31
32
  {{ formattedAmount }}
32
33
  <span class="uppercase">{{ token?.symbol }}</span>
33
34
  <SvgoArrowRight class="w-4 h-4 text-slate-400 mx-2" />
34
- <a
35
+ <NuxtLink
35
36
  class="text-primary"
36
- :href="
37
+ target="_blank"
38
+ external
39
+ :to="
37
40
  getExplorerUrl(chain_id, `/address/${metadata.receiver}`)
38
41
  "
39
- >{{ shortenHash(metadata.receiver) }}</a
40
- >
42
+ >{{ shortenHash(metadata.receiver) }}
43
+ </NuxtLink>
41
44
  </span>
42
45
  </div>
43
46
  </template>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@instadapp/avocado-base",
3
- "version": "0.0.34",
3
+ "version": "0.0.36",
4
4
  "type": "module",
5
5
  "main": "./nuxt.config.ts",
6
6
  "types": "global.d.ts",
package/utils/metadata.ts CHANGED
@@ -242,191 +242,205 @@ 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(
282
- "executeMultisigV3",
283
- data
284
- );
285
- if (
286
- executeDataMultisigV3.params_.metadata === "0x" ||
287
- !executeDataMultisigV3.params_.metadata
288
- ) {
289
- return null;
290
- } else {
291
- metadata = executeDataMultisigV3.params_.metadata;
292
- }
273
+ metadata = executeData.metadata_;
293
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
+ }
294
309
 
295
- const metadataArr = [];
296
-
297
- const [decodedMultiMetadata = []] =
298
- (ethers.utils.defaultAbiCoder.decode(
299
- multiMetadataTypes,
300
- metadata
301
- ) as string[]) || [];
302
-
303
- for (let metadata of decodedMultiMetadata) {
304
- const decodedMetadata = ethers.utils.defaultAbiCoder.decode(
305
- metadataTypes,
306
- metadata
307
- );
308
-
309
- const type = ethers.utils.parseBytes32String(
310
- decodedMetadata.type
311
- ) as keyof typeof actionMetadataTypes;
312
-
313
- const decodedData = ethers.utils.defaultAbiCoder.decode(
314
- actionMetadataTypes[type],
315
- decodedMetadata.data
316
- );
317
-
318
- switch (type) {
319
- case "transfer":
320
- payload = {
321
- type,
322
- token: decodedData.token,
323
- amount: toBN(decodedData.amount).toFixed(),
324
- receiver: decodedData.receiver,
325
- };
326
- break;
327
- case "bridge":
328
- payload = {
329
- type,
330
- amount: toBN(decodedData.amount).toFixed(),
331
- receiver: decodedData.receiver,
332
- toToken: decodedData.toToken,
333
- fromToken: decodedData.fromToken,
334
- toChainId: decodedData.toChainId
335
- ? decodedData.toChainId.toString()
336
- : null,
337
- bridgeFee: toBN(decodedData.bridgeFee).toFixed(),
338
- };
339
- break;
340
- case "swap":
341
- payload = {
342
- type,
343
- buyAmount: toBN(decodedData.buyAmount).toFixed(),
344
- sellAmount: toBN(decodedData.sellAmount).toFixed(),
345
- buyToken: decodedData.buyToken,
346
- sellToken: decodedData.sellToken,
347
- receiver: decodedData.receiver,
348
- protocol: utils.parseBytes32String(decodedData?.protocol || ""),
349
- };
350
- break;
351
- case "upgrade":
352
- payload = {
353
- type,
354
- version: utils.parseBytes32String(decodedData?.version || ""),
355
- walletImpl: decodedData?.walletImpl,
356
- };
357
- break;
358
- case "gas-topup":
359
- payload = {
360
- type,
361
- amount: toBN(decodedData.amount).toFixed(),
362
- token: decodedData.token,
363
- onBehalf: decodedData.onBehalf,
364
- };
365
- break;
366
- case "dapp":
367
- payload = {
368
- type,
369
- name: decodedData?.name,
370
- url: decodedData?.url,
371
- };
372
- break;
373
- case "deploy":
374
- payload = {
375
- type,
376
- };
377
- break;
378
-
379
- case "permit2":
380
- payload = {
381
- type,
382
- token: decodedData.token,
383
- spender: decodedData.spender,
384
- amount: toBN(decodedData.amount).toFixed(),
385
- expiration: decodedData.expiration,
386
- };
387
- break;
388
-
389
- case "cross-transfer":
390
- payload = {
391
- type,
392
- fromToken: decodedData.fromToken,
393
- toToken: decodedData.toToken,
394
- toChainId: decodedData.toChainId
395
- ? decodedData.toChainId.toString()
396
- : null,
397
- amount: toBN(decodedData.amount).toFixed(),
398
- receiver: decodedData.receiver,
399
- };
400
-
401
- break;
402
- case "auth":
403
- payload = {
404
- type: decodedData.remove ? "remove-authority" : "add-authority",
405
- address: decodedData.address,
406
- chainId: decodedData.chainId
407
- ? decodedData.chainId.toString()
408
- : null,
409
- remove: decodedData.remove,
410
- };
411
-
412
- break;
413
- case "instadapp-pro":
414
- payload = {
415
- type,
416
- castDetails: decodedData.castDetails,
417
- };
418
-
419
- break;
420
- }
421
-
422
- 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;
423
438
  }
424
439
 
425
- return metadataArr;
426
- } catch (e) {
427
- // console.log(e);
428
- return null;
440
+ metadataArr.push(payload);
429
441
  }
442
+
443
+ return metadataArr;
430
444
  };
431
445
 
432
446
  /**