@aptos-labs/wallet-adapter-core 3.9.0 → 3.11.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @aptos-labs/wallet-adapter-core
2
2
 
3
+ ## 3.11.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 245ce8d: Support a custom network defined in a Wallet
8
+
9
+ ## 3.10.0
10
+
11
+ ### Minor Changes
12
+
13
+ - 41f9485: Implement GA4
14
+
3
15
  ## 3.9.0
4
16
 
5
17
  ### Minor Changes
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Types } from 'aptos';
2
2
  export { TxnBuilderTypes, Types } from 'aptos';
3
- import { Network, Signature, AnyRawTransaction, InputGenerateTransactionOptions, PendingTransactionResponse, InputSubmitTransactionData, AccountAddressInput, InputGenerateTransactionPayloadData, Aptos, AccountAuthenticator, EntryFunctionArgumentTypes, SimpleEntryFunctionArgumentTypes } from '@aptos-labs/ts-sdk';
3
+ import { Network, Signature, AnyRawTransaction, InputGenerateTransactionOptions, PendingTransactionResponse, InputSubmitTransactionData, AccountAddressInput, InputGenerateTransactionPayloadData, Aptos, AccountAuthenticator, EntryFunctionArgumentTypes, SimpleEntryFunctionArgumentTypes, AptosConfig } from '@aptos-labs/ts-sdk';
4
4
  export { AccountAuthenticator, AnyRawTransaction, InputGenerateTransactionData, InputGenerateTransactionOptions, InputSubmitTransactionData, PendingTransactionResponse } from '@aptos-labs/ts-sdk';
5
5
  import EventEmitter from 'eventemitter3';
6
6
  import { NetworkInfo as NetworkInfo$1, AccountInfo as AccountInfo$1, UserResponse, AptosSignAndSubmitTransactionOutput, AptosSignMessageOutput, AptosWallet, AptosSignTransactionOutput, AptosSignMessageInput } from '@aptos-labs/wallet-standard';
@@ -187,6 +187,7 @@ declare class WalletCore extends EventEmitter<WalletCoreEvents> {
187
187
  private readonly walletStandardCore;
188
188
  private _connecting;
189
189
  private _connected;
190
+ private readonly ga4;
190
191
  /**
191
192
  * Core functionality constructor.
192
193
  * For legacy wallet adapter v1 support we expect the dapp to pass in wallet plugins,
@@ -206,6 +207,7 @@ declare class WalletCore extends EventEmitter<WalletCoreEvents> {
206
207
  * @param standardWallet An AIP-62 standard compatible wallet
207
208
  */
208
209
  private standardizeStandardWalletToPluginWalletType;
210
+ private recordEvent;
209
211
  /**
210
212
  * Helper function to ensure wallet exists
211
213
  *
@@ -391,5 +393,19 @@ declare function isInAppBrowser(): boolean;
391
393
  declare function isRedirectable(): boolean;
392
394
  declare function generalizedErrorMessage(error: any): string;
393
395
  declare const areBCSArguments: (args: Array<EntryFunctionArgumentTypes | SimpleEntryFunctionArgumentTypes>) => boolean;
396
+ /**
397
+ * Helper function to get AptosConfig that supports Aptos and Custom networks
398
+ *
399
+ * @param networkInfo
400
+ * @returns AptosConfig
401
+ */
402
+ declare const getAptosConfig: (networkInfo: NetworkInfo | NetworkInfo$1 | null) => AptosConfig;
403
+ /**
404
+ * Helper function to resolve if the current connected network is an Aptos network
405
+ *
406
+ * @param networkInfo
407
+ * @returns boolean
408
+ */
409
+ declare const isAptosNetwork: (networkInfo: NetworkInfo | NetworkInfo$1 | null) => boolean;
394
410
 
395
- export { AccountInfo, AdapterPlugin, AdapterPluginEvents, AdapterPluginProps, AptosStandardWallet, AptosWalletErrorResult, ChainIdToAnsSupportedNetworkMap, InputTransactionData, NetworkInfo, NetworkName, OnAccountChange, OnNetworkChange, PluginProvider, SignMessagePayload, SignMessageResponse, TransactionOptions, Wallet, WalletCore, WalletCoreEvents, WalletInfo, WalletName, WalletReadyState, WalletStandardCore, areBCSArguments, generalizedErrorMessage, getLocalStorage, isInAppBrowser, isMobile, isRedirectable, removeLocalStorage, scopePollingDetectionStrategy, setLocalStorage };
411
+ export { AccountInfo, AdapterPlugin, AdapterPluginEvents, AdapterPluginProps, AptosStandardWallet, AptosWalletErrorResult, ChainIdToAnsSupportedNetworkMap, InputTransactionData, NetworkInfo, NetworkName, OnAccountChange, OnNetworkChange, PluginProvider, SignMessagePayload, SignMessageResponse, TransactionOptions, Wallet, WalletCore, WalletCoreEvents, WalletInfo, WalletName, WalletReadyState, WalletStandardCore, areBCSArguments, generalizedErrorMessage, getAptosConfig, getLocalStorage, isAptosNetwork, isInAppBrowser, isMobile, isRedirectable, removeLocalStorage, scopePollingDetectionStrategy, setLocalStorage };
package/dist/index.js CHANGED
@@ -35,7 +35,9 @@ __export(src_exports, {
35
35
  WalletStandardCore: () => WalletStandardCore,
36
36
  areBCSArguments: () => areBCSArguments,
37
37
  generalizedErrorMessage: () => generalizedErrorMessage,
38
+ getAptosConfig: () => getAptosConfig,
38
39
  getLocalStorage: () => getLocalStorage,
40
+ isAptosNetwork: () => isAptosNetwork,
39
41
  isInAppBrowser: () => isInAppBrowser,
40
42
  isMobile: () => isMobile,
41
43
  isRedirectable: () => isRedirectable,
@@ -204,50 +206,21 @@ function getLocalStorage() {
204
206
  }
205
207
 
206
208
  // src/utils/helpers.ts
207
- var import_ts_sdk = require("@aptos-labs/ts-sdk");
208
- function isMobile() {
209
- return /Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/i.test(
210
- navigator.userAgent
211
- );
212
- }
213
- function isInAppBrowser() {
214
- const isIphone = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(
215
- navigator.userAgent
216
- );
217
- const isAndroid = /(Android).*Version\/[\d.]+.*Chrome\/[^\s]+ Mobile/i.test(
218
- navigator.userAgent
219
- );
220
- return isIphone || isAndroid;
221
- }
222
- function isRedirectable() {
223
- if (typeof navigator === "undefined" || !navigator)
224
- return false;
225
- return isMobile() && !isInAppBrowser();
226
- }
227
- function generalizedErrorMessage(error) {
228
- return typeof error === "object" && "message" in error ? error.message : error;
229
- }
230
- var areBCSArguments = (args) => {
231
- if (args.length === 0)
232
- return false;
233
- return args.every(
234
- (arg) => arg instanceof import_ts_sdk.Serializable
235
- );
236
- };
209
+ var import_ts_sdk2 = require("@aptos-labs/ts-sdk");
237
210
 
238
211
  // src/LegacyWalletPlugins/conversion.ts
239
- var import_ts_sdk2 = require("@aptos-labs/ts-sdk");
212
+ var import_ts_sdk = require("@aptos-labs/ts-sdk");
240
213
  var import_aptos = require("aptos");
241
214
  function convertNetwork(networkInfo) {
242
- switch (networkInfo == null ? void 0 : networkInfo.name.toLowerCase()) {
215
+ switch (networkInfo == null ? void 0 : networkInfo.name) {
243
216
  case "mainnet":
244
- return import_ts_sdk2.Network.MAINNET;
217
+ return import_ts_sdk.Network.MAINNET;
245
218
  case "testnet":
246
- return import_ts_sdk2.Network.TESTNET;
219
+ return import_ts_sdk.Network.TESTNET;
247
220
  case "devnet":
248
- return import_ts_sdk2.Network.DEVNET;
221
+ return import_ts_sdk.Network.DEVNET;
249
222
  default:
250
- throw new Error("Invalid network name");
223
+ throw new Error("Invalid Aptos network name");
251
224
  }
252
225
  }
253
226
  function convertV2TransactionPayloadToV1BCSPayload(payload) {
@@ -261,7 +234,7 @@ function convertV2PayloadToV1JSONPayload(payload) {
261
234
  } else {
262
235
  const stringTypeTags = (_a = payload.typeArguments) == null ? void 0 : _a.map(
263
236
  (typeTag) => {
264
- if (typeTag instanceof import_ts_sdk2.TypeTag) {
237
+ if (typeTag instanceof import_ts_sdk.TypeTag) {
265
238
  return typeTag.toString();
266
239
  }
267
240
  return typeTag;
@@ -277,6 +250,57 @@ function convertV2PayloadToV1JSONPayload(payload) {
277
250
  }
278
251
  }
279
252
 
253
+ // src/utils/helpers.ts
254
+ function isMobile() {
255
+ return /Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/i.test(
256
+ navigator.userAgent
257
+ );
258
+ }
259
+ function isInAppBrowser() {
260
+ const isIphone = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(
261
+ navigator.userAgent
262
+ );
263
+ const isAndroid = /(Android).*Version\/[\d.]+.*Chrome\/[^\s]+ Mobile/i.test(
264
+ navigator.userAgent
265
+ );
266
+ return isIphone || isAndroid;
267
+ }
268
+ function isRedirectable() {
269
+ if (typeof navigator === "undefined" || !navigator)
270
+ return false;
271
+ return isMobile() && !isInAppBrowser();
272
+ }
273
+ function generalizedErrorMessage(error) {
274
+ return typeof error === "object" && "message" in error ? error.message : error;
275
+ }
276
+ var areBCSArguments = (args) => {
277
+ if (args.length === 0)
278
+ return false;
279
+ return args.every(
280
+ (arg) => arg instanceof import_ts_sdk2.Serializable
281
+ );
282
+ };
283
+ var getAptosConfig = (networkInfo) => {
284
+ if (!networkInfo) {
285
+ throw new Error("Undefined network");
286
+ }
287
+ if (isAptosNetwork(networkInfo)) {
288
+ return new import_ts_sdk2.AptosConfig({
289
+ network: convertNetwork(networkInfo)
290
+ });
291
+ }
292
+ return new import_ts_sdk2.AptosConfig({
293
+ network: import_ts_sdk2.Network.CUSTOM,
294
+ fullnode: networkInfo.url
295
+ });
296
+ };
297
+ var isAptosNetwork = (networkInfo) => {
298
+ if (!networkInfo) {
299
+ throw new Error("Undefined network");
300
+ }
301
+ return import_ts_sdk2.NetworkToNodeAPI[networkInfo.name] !== void 0;
302
+ };
303
+
280
304
  // src/LegacyWalletPlugins/WalletCoreV1.ts
281
305
  var import_aptos2 = require("aptos");
282
306
  var import_eventemitter3 = __toESM(require("eventemitter3"));
@@ -291,9 +315,7 @@ var WalletCoreV1 = class extends import_eventemitter3.default {
291
315
  async resolveSignAndSubmitTransaction(payloadData, network, wallet, transactionInput) {
292
316
  var _a, _b, _c, _d, _e, _f, _g, _h;
293
317
  if (areBCSArguments(payloadData.functionArguments)) {
294
- const aptosConfig = new import_ts_sdk3.AptosConfig({
295
- network: convertNetwork(network)
296
- });
318
+ const aptosConfig = getAptosConfig(network);
297
319
  const newPayload = await (0, import_ts_sdk3.generateTransactionPayload)({
298
320
  ...payloadData,
299
321
  aptosConfig
@@ -514,6 +536,41 @@ var WalletStandardCore = class {
514
536
  }
515
537
  };
516
538
 
539
+ // src/ga/index.ts
540
+ var GA4 = class {
541
+ constructor() {
542
+ this.aptosGAID = "G-GNVVWBL3J9";
543
+ this.injectGA(this.aptosGAID);
544
+ }
545
+ gtag(a, b, c) {
546
+ let dataLayer = window.dataLayer || [];
547
+ dataLayer.push(arguments);
548
+ }
549
+ injectGA(gaID) {
550
+ if (typeof window === "undefined")
551
+ return;
552
+ if (!gaID)
553
+ return;
554
+ const head = document.getElementsByTagName("head")[0];
555
+ var myScript = document.createElement("script");
556
+ myScript.setAttribute(
557
+ "src",
558
+ `https://www.googletagmanager.com/gtag/js?id=${gaID}`
559
+ );
560
+ const that = this;
561
+ myScript.onload = function() {
562
+ that.gtag("js", new Date());
563
+ that.gtag("config", `${gaID}`, {
564
+ send_page_view: false
565
+ });
566
+ };
567
+ head.insertBefore(myScript, head.children[1]);
568
+ }
569
+ };
570
+
571
+ // src/version.ts
572
+ var WALLET_ADAPTER_CORE_VERSION = "3.11.0";
573
+
517
574
  // src/WalletCore.ts
518
575
  var WalletCore = class extends import_eventemitter32.default {
519
576
  constructor(plugins) {
@@ -528,6 +585,7 @@ var WalletCore = class extends import_eventemitter32.default {
528
585
  this.walletStandardCore = new WalletStandardCore();
529
586
  this._connecting = false;
530
587
  this._connected = false;
588
+ this.ga4 = new GA4();
531
589
  this.standardizeStandardWalletToPluginWalletType = (standardWallet) => {
532
590
  var _a, _b;
533
591
  let standardWalletConvertedToWallet = {
@@ -604,6 +662,17 @@ var WalletCore = class extends import_eventemitter32.default {
604
662
  });
605
663
  this._standard_wallets = aptosStandardWallets;
606
664
  }
665
+ recordEvent(eventName, additionalInfo) {
666
+ var _a, _b, _c;
667
+ this.ga4.gtag("event", `wallet_adapter_${eventName}`, {
668
+ wallet: (_a = this._wallet) == null ? void 0 : _a.name,
669
+ network: (_b = this._network) == null ? void 0 : _b.name,
670
+ network_url: (_c = this._network) == null ? void 0 : _c.url,
671
+ adapter_core_version: WALLET_ADAPTER_CORE_VERSION,
672
+ send_to: "G-GNVVWBL3J9",
673
+ ...additionalInfo
674
+ });
675
+ }
607
676
  ensureWalletExists(wallet) {
608
677
  if (!wallet) {
609
678
  throw new WalletNotConnectedError().name;
@@ -633,7 +702,7 @@ var WalletCore = class extends import_eventemitter32.default {
633
702
  async setAnsName() {
634
703
  var _a;
635
704
  if (((_a = this._network) == null ? void 0 : _a.chainId) && this._account) {
636
- if (!ChainIdToAnsSupportedNetworkMap[this._network.chainId]) {
705
+ if (!ChainIdToAnsSupportedNetworkMap[this._network.chainId] || !isAptosNetwork(this._network)) {
637
706
  this._account.ansName = void 0;
638
707
  return;
639
708
  }
@@ -683,13 +752,17 @@ var WalletCore = class extends import_eventemitter32.default {
683
752
  return;
684
753
  }
685
754
  setNetwork(network) {
686
- var _a;
755
+ var _a, _b, _c;
687
756
  if (network === null) {
688
757
  this._network = null;
689
758
  return;
690
759
  }
691
760
  if ((_a = this._wallet) == null ? void 0 : _a.isAIP62Standard) {
692
761
  const standardizeNetwork = network;
762
+ this.recordEvent("network_change", {
763
+ from: (_b = this._network) == null ? void 0 : _b.name,
764
+ to: standardizeNetwork.name
765
+ });
693
766
  this._network = {
694
767
  name: standardizeNetwork.name.toLowerCase(),
695
768
  chainId: standardizeNetwork.chainId.toString(),
@@ -697,7 +770,14 @@ var WalletCore = class extends import_eventemitter32.default {
697
770
  };
698
771
  return;
699
772
  }
700
- this._network = { ...network, name: network.name.toLowerCase() };
773
+ this.recordEvent("network_change", {
774
+ from: (_c = this._network) == null ? void 0 : _c.name,
775
+ to: network.name
776
+ });
777
+ this._network = {
778
+ ...network,
779
+ name: network.name.toLowerCase()
780
+ };
701
781
  }
702
782
  isConnected() {
703
783
  return this._connected;
@@ -784,6 +864,7 @@ var WalletCore = class extends import_eventemitter32.default {
784
864
  await this.setAnsName();
785
865
  setLocalStorage(selectedWallet.name);
786
866
  this._connected = true;
867
+ this.recordEvent("wallet_connect");
787
868
  this.emit("connect", account);
788
869
  } catch (error) {
789
870
  this.clearData();
@@ -798,6 +879,7 @@ var WalletCore = class extends import_eventemitter32.default {
798
879
  this.ensureWalletExists(this._wallet);
799
880
  await this._wallet.disconnect();
800
881
  this.clearData();
882
+ this.recordEvent("wallet_disconnect");
801
883
  this.emit("disconnect");
802
884
  } catch (error) {
803
885
  const errMsg = generalizedErrorMessage(error);
@@ -808,10 +890,9 @@ var WalletCore = class extends import_eventemitter32.default {
808
890
  try {
809
891
  this.ensureWalletExists(this._wallet);
810
892
  this.ensureAccountExists(this._account);
893
+ this.recordEvent("sign_and_submit_transaction");
811
894
  const payloadData = transactionInput.data;
812
- const aptosConfig = new import_ts_sdk5.AptosConfig({
813
- network: convertNetwork(this._network)
814
- });
895
+ const aptosConfig = getAptosConfig(this._network);
815
896
  const aptos = new import_ts_sdk5.Aptos(aptosConfig);
816
897
  if (this._wallet.signAndSubmitTransaction) {
817
898
  if (this._wallet.isAIP62Standard) {
@@ -852,7 +933,7 @@ var WalletCore = class extends import_eventemitter32.default {
852
933
  var _a, _b;
853
934
  try {
854
935
  this.ensureWalletExists(this._wallet);
855
- console.log("this._account", this._account);
936
+ this.recordEvent("sign_transaction");
856
937
  if (this._wallet.signTransaction) {
857
938
  if (this._wallet.isAIP62Standard) {
858
939
  if ("rawTransaction" in transactionOrPayload) {
@@ -909,6 +990,7 @@ var WalletCore = class extends import_eventemitter32.default {
909
990
  async signMessage(message) {
910
991
  try {
911
992
  this.ensureWalletExists(this._wallet);
993
+ this.recordEvent("sign_message");
912
994
  if (this._wallet.isAIP62Standard) {
913
995
  return await this.walletStandardCore.signMessage(message, this._wallet);
914
996
  }
@@ -923,11 +1005,15 @@ var WalletCore = class extends import_eventemitter32.default {
923
1005
  async submitTransaction(transaction) {
924
1006
  try {
925
1007
  this.ensureWalletExists(this._wallet);
1008
+ const { additionalSignersAuthenticators } = transaction;
1009
+ const transactionType = additionalSignersAuthenticators !== void 0 ? "multi-agent" : "simple";
1010
+ this.recordEvent("submit_transaction", {
1011
+ transaction_type: transactionType
1012
+ });
926
1013
  if (this._wallet.submitTransaction) {
927
1014
  const pendingTransaction = await this._wallet.submitTransaction(transaction);
928
1015
  return pendingTransaction;
929
1016
  }
930
- const { additionalSignersAuthenticators } = transaction;
931
1017
  const aptosConfig = new import_ts_sdk5.AptosConfig({
932
1018
  network: convertNetwork(this.network)
933
1019
  });
@@ -953,6 +1039,7 @@ var WalletCore = class extends import_eventemitter32.default {
953
1039
  async (data) => {
954
1040
  this.setAccount(data);
955
1041
  await this.setAnsName();
1042
+ this.recordEvent("account_change");
956
1043
  this.emit("accountChange", this._account);
957
1044
  }
958
1045
  );
@@ -980,6 +1067,7 @@ var WalletCore = class extends import_eventemitter32.default {
980
1067
  try {
981
1068
  this.ensureWalletExists(this._wallet);
982
1069
  this.ensureAccountExists(this._account);
1070
+ this.recordEvent("sign_message_and_verify");
983
1071
  if (this._wallet.isAIP62Standard) {
984
1072
  return this.walletStandardCore.signMessageAndVerify(
985
1073
  message,
@@ -1011,7 +1099,9 @@ var import_aptos4 = require("aptos");
1011
1099
  WalletStandardCore,
1012
1100
  areBCSArguments,
1013
1101
  generalizedErrorMessage,
1102
+ getAptosConfig,
1014
1103
  getLocalStorage,
1104
+ isAptosNetwork,
1015
1105
  isInAppBrowser,
1016
1106
  isMobile,
1017
1107
  isRedirectable,
package/dist/index.mjs CHANGED
@@ -164,37 +164,11 @@ function getLocalStorage() {
164
164
 
165
165
  // src/utils/helpers.ts
166
166
  import {
167
+ AptosConfig,
168
+ Network as Network2,
169
+ NetworkToNodeAPI,
167
170
  Serializable
168
171
  } from "@aptos-labs/ts-sdk";
169
- function isMobile() {
170
- return /Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/i.test(
171
- navigator.userAgent
172
- );
173
- }
174
- function isInAppBrowser() {
175
- const isIphone = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(
176
- navigator.userAgent
177
- );
178
- const isAndroid = /(Android).*Version\/[\d.]+.*Chrome\/[^\s]+ Mobile/i.test(
179
- navigator.userAgent
180
- );
181
- return isIphone || isAndroid;
182
- }
183
- function isRedirectable() {
184
- if (typeof navigator === "undefined" || !navigator)
185
- return false;
186
- return isMobile() && !isInAppBrowser();
187
- }
188
- function generalizedErrorMessage(error) {
189
- return typeof error === "object" && "message" in error ? error.message : error;
190
- }
191
- var areBCSArguments = (args) => {
192
- if (args.length === 0)
193
- return false;
194
- return args.every(
195
- (arg) => arg instanceof Serializable
196
- );
197
- };
198
172
 
199
173
  // src/LegacyWalletPlugins/conversion.ts
200
174
  import {
@@ -203,7 +177,7 @@ import {
203
177
  } from "@aptos-labs/ts-sdk";
204
178
  import { BCS, TxnBuilderTypes } from "aptos";
205
179
  function convertNetwork(networkInfo) {
206
- switch (networkInfo == null ? void 0 : networkInfo.name.toLowerCase()) {
180
+ switch (networkInfo == null ? void 0 : networkInfo.name) {
207
181
  case "mainnet":
208
182
  return Network.MAINNET;
209
183
  case "testnet":
@@ -211,7 +185,7 @@ function convertNetwork(networkInfo) {
211
185
  case "devnet":
212
186
  return Network.DEVNET;
213
187
  default:
214
- throw new Error("Invalid network name");
188
+ throw new Error("Invalid Aptos network name");
215
189
  }
216
190
  }
217
191
  function convertV2TransactionPayloadToV1BCSPayload(payload) {
@@ -241,12 +215,62 @@ function convertV2PayloadToV1JSONPayload(payload) {
241
215
  }
242
216
  }
243
217
 
218
+ // src/utils/helpers.ts
219
+ function isMobile() {
220
+ return /Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/i.test(
221
+ navigator.userAgent
222
+ );
223
+ }
224
+ function isInAppBrowser() {
225
+ const isIphone = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(
226
+ navigator.userAgent
227
+ );
228
+ const isAndroid = /(Android).*Version\/[\d.]+.*Chrome\/[^\s]+ Mobile/i.test(
229
+ navigator.userAgent
230
+ );
231
+ return isIphone || isAndroid;
232
+ }
233
+ function isRedirectable() {
234
+ if (typeof navigator === "undefined" || !navigator)
235
+ return false;
236
+ return isMobile() && !isInAppBrowser();
237
+ }
238
+ function generalizedErrorMessage(error) {
239
+ return typeof error === "object" && "message" in error ? error.message : error;
240
+ }
241
+ var areBCSArguments = (args) => {
242
+ if (args.length === 0)
243
+ return false;
244
+ return args.every(
245
+ (arg) => arg instanceof Serializable
246
+ );
247
+ };
248
+ var getAptosConfig = (networkInfo) => {
249
+ if (!networkInfo) {
250
+ throw new Error("Undefined network");
251
+ }
252
+ if (isAptosNetwork(networkInfo)) {
253
+ return new AptosConfig({
254
+ network: convertNetwork(networkInfo)
255
+ });
256
+ }
257
+ return new AptosConfig({
258
+ network: Network2.CUSTOM,
259
+ fullnode: networkInfo.url
260
+ });
261
+ };
262
+ var isAptosNetwork = (networkInfo) => {
263
+ if (!networkInfo) {
264
+ throw new Error("Undefined network");
265
+ }
266
+ return NetworkToNodeAPI[networkInfo.name] !== void 0;
267
+ };
268
+
244
269
  // src/LegacyWalletPlugins/WalletCoreV1.ts
245
270
  import { HexString } from "aptos";
246
271
  import EventEmitter from "eventemitter3";
247
272
  import { Buffer } from "buffer";
248
273
  import {
249
- AptosConfig,
250
274
  generateTransactionPayload
251
275
  } from "@aptos-labs/ts-sdk";
252
276
  import nacl from "tweetnacl";
@@ -258,9 +282,7 @@ var WalletCoreV1 = class extends EventEmitter {
258
282
  async resolveSignAndSubmitTransaction(payloadData, network, wallet, transactionInput) {
259
283
  var _a, _b, _c, _d, _e, _f, _g, _h;
260
284
  if (areBCSArguments(payloadData.functionArguments)) {
261
- const aptosConfig = new AptosConfig({
262
- network: convertNetwork(network)
263
- });
285
+ const aptosConfig = getAptosConfig(network);
264
286
  const newPayload = await generateTransactionPayload({
265
287
  ...payloadData,
266
288
  aptosConfig
@@ -489,6 +511,41 @@ var WalletStandardCore = class {
489
511
  }
490
512
  };
491
513
 
514
+ // src/ga/index.ts
515
+ var GA4 = class {
516
+ constructor() {
517
+ this.aptosGAID = "G-GNVVWBL3J9";
518
+ this.injectGA(this.aptosGAID);
519
+ }
520
+ gtag(a, b, c) {
521
+ let dataLayer = window.dataLayer || [];
522
+ dataLayer.push(arguments);
523
+ }
524
+ injectGA(gaID) {
525
+ if (typeof window === "undefined")
526
+ return;
527
+ if (!gaID)
528
+ return;
529
+ const head = document.getElementsByTagName("head")[0];
530
+ var myScript = document.createElement("script");
531
+ myScript.setAttribute(
532
+ "src",
533
+ `https://www.googletagmanager.com/gtag/js?id=${gaID}`
534
+ );
535
+ const that = this;
536
+ myScript.onload = function() {
537
+ that.gtag("js", new Date());
538
+ that.gtag("config", `${gaID}`, {
539
+ send_page_view: false
540
+ });
541
+ };
542
+ head.insertBefore(myScript, head.children[1]);
543
+ }
544
+ };
545
+
546
+ // src/version.ts
547
+ var WALLET_ADAPTER_CORE_VERSION = "3.11.0";
548
+
492
549
  // src/WalletCore.ts
493
550
  var WalletCore = class extends EventEmitter2 {
494
551
  constructor(plugins) {
@@ -503,6 +560,7 @@ var WalletCore = class extends EventEmitter2 {
503
560
  this.walletStandardCore = new WalletStandardCore();
504
561
  this._connecting = false;
505
562
  this._connected = false;
563
+ this.ga4 = new GA4();
506
564
  this.standardizeStandardWalletToPluginWalletType = (standardWallet) => {
507
565
  var _a, _b;
508
566
  let standardWalletConvertedToWallet = {
@@ -579,6 +637,17 @@ var WalletCore = class extends EventEmitter2 {
579
637
  });
580
638
  this._standard_wallets = aptosStandardWallets;
581
639
  }
640
+ recordEvent(eventName, additionalInfo) {
641
+ var _a, _b, _c;
642
+ this.ga4.gtag("event", `wallet_adapter_${eventName}`, {
643
+ wallet: (_a = this._wallet) == null ? void 0 : _a.name,
644
+ network: (_b = this._network) == null ? void 0 : _b.name,
645
+ network_url: (_c = this._network) == null ? void 0 : _c.url,
646
+ adapter_core_version: WALLET_ADAPTER_CORE_VERSION,
647
+ send_to: "G-GNVVWBL3J9",
648
+ ...additionalInfo
649
+ });
650
+ }
582
651
  ensureWalletExists(wallet) {
583
652
  if (!wallet) {
584
653
  throw new WalletNotConnectedError().name;
@@ -608,7 +677,7 @@ var WalletCore = class extends EventEmitter2 {
608
677
  async setAnsName() {
609
678
  var _a;
610
679
  if (((_a = this._network) == null ? void 0 : _a.chainId) && this._account) {
611
- if (!ChainIdToAnsSupportedNetworkMap[this._network.chainId]) {
680
+ if (!ChainIdToAnsSupportedNetworkMap[this._network.chainId] || !isAptosNetwork(this._network)) {
612
681
  this._account.ansName = void 0;
613
682
  return;
614
683
  }
@@ -658,13 +727,17 @@ var WalletCore = class extends EventEmitter2 {
658
727
  return;
659
728
  }
660
729
  setNetwork(network) {
661
- var _a;
730
+ var _a, _b, _c;
662
731
  if (network === null) {
663
732
  this._network = null;
664
733
  return;
665
734
  }
666
735
  if ((_a = this._wallet) == null ? void 0 : _a.isAIP62Standard) {
667
736
  const standardizeNetwork = network;
737
+ this.recordEvent("network_change", {
738
+ from: (_b = this._network) == null ? void 0 : _b.name,
739
+ to: standardizeNetwork.name
740
+ });
668
741
  this._network = {
669
742
  name: standardizeNetwork.name.toLowerCase(),
670
743
  chainId: standardizeNetwork.chainId.toString(),
@@ -672,7 +745,14 @@ var WalletCore = class extends EventEmitter2 {
672
745
  };
673
746
  return;
674
747
  }
675
- this._network = { ...network, name: network.name.toLowerCase() };
748
+ this.recordEvent("network_change", {
749
+ from: (_c = this._network) == null ? void 0 : _c.name,
750
+ to: network.name
751
+ });
752
+ this._network = {
753
+ ...network,
754
+ name: network.name.toLowerCase()
755
+ };
676
756
  }
677
757
  isConnected() {
678
758
  return this._connected;
@@ -759,6 +839,7 @@ var WalletCore = class extends EventEmitter2 {
759
839
  await this.setAnsName();
760
840
  setLocalStorage(selectedWallet.name);
761
841
  this._connected = true;
842
+ this.recordEvent("wallet_connect");
762
843
  this.emit("connect", account);
763
844
  } catch (error) {
764
845
  this.clearData();
@@ -773,6 +854,7 @@ var WalletCore = class extends EventEmitter2 {
773
854
  this.ensureWalletExists(this._wallet);
774
855
  await this._wallet.disconnect();
775
856
  this.clearData();
857
+ this.recordEvent("wallet_disconnect");
776
858
  this.emit("disconnect");
777
859
  } catch (error) {
778
860
  const errMsg = generalizedErrorMessage(error);
@@ -783,10 +865,9 @@ var WalletCore = class extends EventEmitter2 {
783
865
  try {
784
866
  this.ensureWalletExists(this._wallet);
785
867
  this.ensureAccountExists(this._account);
868
+ this.recordEvent("sign_and_submit_transaction");
786
869
  const payloadData = transactionInput.data;
787
- const aptosConfig = new AptosConfig2({
788
- network: convertNetwork(this._network)
789
- });
870
+ const aptosConfig = getAptosConfig(this._network);
790
871
  const aptos = new Aptos2(aptosConfig);
791
872
  if (this._wallet.signAndSubmitTransaction) {
792
873
  if (this._wallet.isAIP62Standard) {
@@ -827,7 +908,7 @@ var WalletCore = class extends EventEmitter2 {
827
908
  var _a, _b;
828
909
  try {
829
910
  this.ensureWalletExists(this._wallet);
830
- console.log("this._account", this._account);
911
+ this.recordEvent("sign_transaction");
831
912
  if (this._wallet.signTransaction) {
832
913
  if (this._wallet.isAIP62Standard) {
833
914
  if ("rawTransaction" in transactionOrPayload) {
@@ -884,6 +965,7 @@ var WalletCore = class extends EventEmitter2 {
884
965
  async signMessage(message) {
885
966
  try {
886
967
  this.ensureWalletExists(this._wallet);
968
+ this.recordEvent("sign_message");
887
969
  if (this._wallet.isAIP62Standard) {
888
970
  return await this.walletStandardCore.signMessage(message, this._wallet);
889
971
  }
@@ -898,11 +980,15 @@ var WalletCore = class extends EventEmitter2 {
898
980
  async submitTransaction(transaction) {
899
981
  try {
900
982
  this.ensureWalletExists(this._wallet);
983
+ const { additionalSignersAuthenticators } = transaction;
984
+ const transactionType = additionalSignersAuthenticators !== void 0 ? "multi-agent" : "simple";
985
+ this.recordEvent("submit_transaction", {
986
+ transaction_type: transactionType
987
+ });
901
988
  if (this._wallet.submitTransaction) {
902
989
  const pendingTransaction = await this._wallet.submitTransaction(transaction);
903
990
  return pendingTransaction;
904
991
  }
905
- const { additionalSignersAuthenticators } = transaction;
906
992
  const aptosConfig = new AptosConfig2({
907
993
  network: convertNetwork(this.network)
908
994
  });
@@ -928,6 +1014,7 @@ var WalletCore = class extends EventEmitter2 {
928
1014
  async (data) => {
929
1015
  this.setAccount(data);
930
1016
  await this.setAnsName();
1017
+ this.recordEvent("account_change");
931
1018
  this.emit("accountChange", this._account);
932
1019
  }
933
1020
  );
@@ -955,6 +1042,7 @@ var WalletCore = class extends EventEmitter2 {
955
1042
  try {
956
1043
  this.ensureWalletExists(this._wallet);
957
1044
  this.ensureAccountExists(this._account);
1045
+ this.recordEvent("sign_message_and_verify");
958
1046
  if (this._wallet.isAIP62Standard) {
959
1047
  return this.walletStandardCore.signMessageAndVerify(
960
1048
  message,
@@ -985,7 +1073,9 @@ export {
985
1073
  WalletStandardCore,
986
1074
  areBCSArguments,
987
1075
  generalizedErrorMessage,
1076
+ getAptosConfig,
988
1077
  getLocalStorage,
1078
+ isAptosNetwork,
989
1079
  isInAppBrowser,
990
1080
  isMobile,
991
1081
  isRedirectable,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aptos-labs/wallet-adapter-core",
3
- "version": "3.9.0",
3
+ "version": "3.11.0",
4
4
  "description": "Aptos Wallet Adapter Core",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -29,6 +29,7 @@
29
29
  ],
30
30
  "devDependencies": {
31
31
  "@types/jest": "^29.2.4",
32
+ "@types/node": "^20.10.4",
32
33
  "eslint": "^8.15.0",
33
34
  "jest": "^29.3.1",
34
35
  "ts-jest": "^29.0.3",
@@ -48,8 +49,10 @@
48
49
  "aptos": "^1.21.0"
49
50
  },
50
51
  "scripts": {
51
- "build": "tsup src/index.ts --format esm,cjs --dts",
52
- "dev": "tsup src/index.ts --format esm,cjs --watch --dts",
52
+ "update-version": "node -p \"'export const WALLET_ADAPTER_CORE_VERSION = ' + JSON.stringify(require('./package.json').version) + ';'\" > src/version.ts",
53
+ "build-package": "export $(cat .env | xargs) && tsup src/index.ts --format esm,cjs --dts --env.GAID $GAID",
54
+ "build": "pnpm run update-version && pnpm run build-package",
55
+ "dev": "export $(cat .env | xargs) && tsup src/index.ts --format esm,cjs --watch --dts --env.GAID $GAID",
53
56
  "test": "jest",
54
57
  "lint": "TIMING=1 eslint \"src/**/*.ts*\"",
55
58
  "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist"
@@ -2,7 +2,6 @@ import { HexString, TxnBuilderTypes, Types } from "aptos";
2
2
  import EventEmitter from "eventemitter3";
3
3
  import { Buffer } from "buffer";
4
4
  import {
5
- AptosConfig,
6
5
  InputEntryFunctionDataWithRemoteABI,
7
6
  InputGenerateTransactionPayloadData,
8
7
  generateTransactionPayload,
@@ -26,11 +25,14 @@ import {
26
25
  } from "./types";
27
26
 
28
27
  import {
29
- convertNetwork,
30
28
  convertV2PayloadToV1JSONPayload,
31
29
  convertV2TransactionPayloadToV1BCSPayload,
32
30
  } from "./conversion";
33
- import { areBCSArguments, generalizedErrorMessage } from "../utils";
31
+ import {
32
+ areBCSArguments,
33
+ generalizedErrorMessage,
34
+ getAptosConfig,
35
+ } from "../utils";
34
36
 
35
37
  export class WalletCoreV1 extends EventEmitter<WalletCoreEvents> {
36
38
  async connect(wallet: Wallet) {
@@ -56,9 +58,7 @@ export class WalletCoreV1 extends EventEmitter<WalletCoreEvents> {
56
58
  ) {
57
59
  // first check if each argument is a BCS serialized argument
58
60
  if (areBCSArguments(payloadData.functionArguments)) {
59
- const aptosConfig = new AptosConfig({
60
- network: convertNetwork(network),
61
- });
61
+ const aptosConfig = getAptosConfig(network);
62
62
  const newPayload = await generateTransactionPayload({
63
63
  ...(payloadData as InputEntryFunctionDataWithRemoteABI),
64
64
  aptosConfig: aptosConfig,
@@ -12,7 +12,7 @@ import { NetworkInfo } from "./types";
12
12
  export function convertNetwork(
13
13
  networkInfo: NetworkInfo | StandardNetworkInfo | null
14
14
  ): Network {
15
- switch (networkInfo?.name.toLowerCase()) {
15
+ switch (networkInfo?.name) {
16
16
  case "mainnet" as Network:
17
17
  return Network.MAINNET;
18
18
  case "testnet" as Network:
@@ -20,7 +20,7 @@ export function convertNetwork(
20
20
  case "devnet" as Network:
21
21
  return Network.DEVNET;
22
22
  default:
23
- throw new Error("Invalid network name");
23
+ throw new Error("Invalid Aptos network name");
24
24
  }
25
25
  }
26
26
 
package/src/WalletCore.ts CHANGED
@@ -33,28 +33,30 @@ import {
33
33
  } from "./error";
34
34
  import {
35
35
  AccountInfo,
36
+ InputTransactionData,
36
37
  NetworkInfo,
37
38
  SignMessagePayload,
39
+ SignMessageResponse,
38
40
  Wallet,
39
- WalletInfo,
40
41
  WalletCoreEvents,
41
- SignMessageResponse,
42
- InputTransactionData,
42
+ WalletInfo,
43
43
  WalletName,
44
44
  } from "./LegacyWalletPlugins/types";
45
45
  import {
46
+ generalizedErrorMessage,
47
+ getAptosConfig,
48
+ isAptosNetwork,
49
+ isRedirectable,
46
50
  removeLocalStorage,
47
- setLocalStorage,
48
51
  scopePollingDetectionStrategy,
49
- isRedirectable,
50
- generalizedErrorMessage,
52
+ setLocalStorage,
51
53
  } from "./utils";
52
54
  import { convertNetwork } from "./LegacyWalletPlugins/conversion";
53
55
  import { WalletCoreV1 } from "./LegacyWalletPlugins/WalletCoreV1";
54
56
  import {
57
+ AccountInfo as StandardAccountInfo,
55
58
  AptosWallet,
56
59
  getAptosWallets,
57
- AccountInfo as StandardAccountInfo,
58
60
  NetworkInfo as StandardNetworkInfo,
59
61
  UserResponse,
60
62
  UserResponseStatus,
@@ -63,6 +65,8 @@ import {
63
65
  AptosStandardWallet,
64
66
  WalletStandardCore,
65
67
  } from "./AIP62StandardWallets/WalletStandard";
68
+ import { GA4 } from "./ga";
69
+ import { WALLET_ADAPTER_CORE_VERSION } from "./version";
66
70
 
67
71
  export type IAptosWallet = AptosStandardWallet & Wallet;
68
72
 
@@ -99,6 +103,9 @@ export class WalletCore extends EventEmitter<WalletCoreEvents> {
99
103
  // Indicates whether the dapp is connected with a wallet
100
104
  private _connected: boolean = false;
101
105
 
106
+ // Google Analytics 4 module
107
+ private readonly ga4: GA4 = new GA4();
108
+
102
109
  /**
103
110
  * Core functionality constructor.
104
111
  * For legacy wallet adapter v1 support we expect the dapp to pass in wallet plugins,
@@ -216,6 +223,17 @@ export class WalletCore extends EventEmitter<WalletCoreEvents> {
216
223
  this.emit("standardWalletsAdded", standardWalletConvertedToWallet);
217
224
  };
218
225
 
226
+ private recordEvent(eventName: string, additionalInfo?: object) {
227
+ this.ga4.gtag("event", `wallet_adapter_${eventName}`, {
228
+ wallet: this._wallet?.name,
229
+ network: this._network?.name,
230
+ network_url: this._network?.url,
231
+ adapter_core_version: WALLET_ADAPTER_CORE_VERSION,
232
+ send_to: process.env.GAID,
233
+ ...additionalInfo,
234
+ });
235
+ }
236
+
219
237
  /**
220
238
  * Helper function to ensure wallet exists
221
239
  *
@@ -285,7 +303,10 @@ export class WalletCore extends EventEmitter<WalletCoreEvents> {
285
303
  private async setAnsName(): Promise<void> {
286
304
  if (this._network?.chainId && this._account) {
287
305
  // ANS supports only MAINNET or TESTNET
288
- if (!ChainIdToAnsSupportedNetworkMap[this._network.chainId]) {
306
+ if (
307
+ !ChainIdToAnsSupportedNetworkMap[this._network.chainId] ||
308
+ !isAptosNetwork(this._network)
309
+ ) {
289
310
  this._account.ansName = undefined;
290
311
  return;
291
312
  }
@@ -383,14 +404,27 @@ export class WalletCore extends EventEmitter<WalletCoreEvents> {
383
404
  }
384
405
  if (this._wallet?.isAIP62Standard) {
385
406
  const standardizeNetwork = network as StandardNetworkInfo;
407
+ this.recordEvent("network_change", {
408
+ from: this._network?.name,
409
+ to: standardizeNetwork.name,
410
+ });
386
411
  this._network = {
387
412
  name: standardizeNetwork.name.toLowerCase() as Network,
388
413
  chainId: standardizeNetwork.chainId.toString(),
389
414
  url: standardizeNetwork.url,
390
415
  };
416
+
391
417
  return;
392
418
  }
393
- this._network = { ...(network as NetworkInfo), name: network.name.toLowerCase() as Network };
419
+
420
+ this.recordEvent("network_change", {
421
+ from: this._network?.name,
422
+ to: network.name,
423
+ });
424
+ this._network = {
425
+ ...(network as NetworkInfo),
426
+ name: network.name.toLowerCase() as Network,
427
+ };
394
428
  }
395
429
 
396
430
  /**
@@ -543,6 +577,7 @@ export class WalletCore extends EventEmitter<WalletCoreEvents> {
543
577
  await this.setAnsName();
544
578
  setLocalStorage(selectedWallet.name);
545
579
  this._connected = true;
580
+ this.recordEvent("wallet_connect");
546
581
  this.emit("connect", account);
547
582
  } catch (error: any) {
548
583
  this.clearData();
@@ -565,6 +600,7 @@ export class WalletCore extends EventEmitter<WalletCoreEvents> {
565
600
  this.ensureWalletExists(this._wallet);
566
601
  await this._wallet.disconnect();
567
602
  this.clearData();
603
+ this.recordEvent("wallet_disconnect");
568
604
  this.emit("disconnect");
569
605
  } catch (error: any) {
570
606
  const errMsg = generalizedErrorMessage(error);
@@ -587,12 +623,10 @@ export class WalletCore extends EventEmitter<WalletCoreEvents> {
587
623
  try {
588
624
  this.ensureWalletExists(this._wallet);
589
625
  this.ensureAccountExists(this._account);
590
-
626
+ this.recordEvent("sign_and_submit_transaction");
591
627
  // get the payload piece from the input
592
628
  const payloadData = transactionInput.data;
593
- const aptosConfig = new AptosConfig({
594
- network: convertNetwork(this._network),
595
- });
629
+ const aptosConfig = getAptosConfig(this._network);
596
630
 
597
631
  const aptos = new Aptos(aptosConfig);
598
632
 
@@ -659,7 +693,7 @@ export class WalletCore extends EventEmitter<WalletCoreEvents> {
659
693
  ): Promise<AccountAuthenticator> {
660
694
  try {
661
695
  this.ensureWalletExists(this._wallet);
662
- console.log("this._account", this._account);
696
+ this.recordEvent("sign_transaction");
663
697
  // Make sure wallet supports signTransaction
664
698
  if (this._wallet.signTransaction) {
665
699
  // If current connected wallet is AIP-62 standard compatible
@@ -750,7 +784,7 @@ export class WalletCore extends EventEmitter<WalletCoreEvents> {
750
784
  async signMessage(message: SignMessagePayload): Promise<SignMessageResponse> {
751
785
  try {
752
786
  this.ensureWalletExists(this._wallet);
753
-
787
+ this.recordEvent("sign_message");
754
788
  if (this._wallet.isAIP62Standard) {
755
789
  return await this.walletStandardCore.signMessage(message, this._wallet);
756
790
  }
@@ -775,6 +809,14 @@ export class WalletCore extends EventEmitter<WalletCoreEvents> {
775
809
  try {
776
810
  this.ensureWalletExists(this._wallet);
777
811
 
812
+ const { additionalSignersAuthenticators } = transaction;
813
+ const transactionType =
814
+ additionalSignersAuthenticators !== undefined
815
+ ? "multi-agent"
816
+ : "simple";
817
+ this.recordEvent("submit_transaction", {
818
+ transaction_type: transactionType,
819
+ });
778
820
  // If wallet supports submitTransaction transaction function
779
821
  if (this._wallet.submitTransaction) {
780
822
  const pendingTransaction =
@@ -783,7 +825,7 @@ export class WalletCore extends EventEmitter<WalletCoreEvents> {
783
825
  }
784
826
 
785
827
  // Else have the adpater submits the transaction
786
- const { additionalSignersAuthenticators } = transaction;
828
+
787
829
  const aptosConfig = new AptosConfig({
788
830
  network: convertNetwork(this.network),
789
831
  });
@@ -815,6 +857,7 @@ export class WalletCore extends EventEmitter<WalletCoreEvents> {
815
857
  async (data: AccountInfo | StandardAccountInfo) => {
816
858
  this.setAccount(data);
817
859
  await this.setAnsName();
860
+ this.recordEvent("account_change");
818
861
  this.emit("accountChange", this._account);
819
862
  }
820
863
  );
@@ -854,7 +897,7 @@ export class WalletCore extends EventEmitter<WalletCoreEvents> {
854
897
  try {
855
898
  this.ensureWalletExists(this._wallet);
856
899
  this.ensureAccountExists(this._account);
857
-
900
+ this.recordEvent("sign_message_and_verify");
858
901
  // If current connected wallet is AIP-62 standard compatible
859
902
  if (this._wallet.isAIP62Standard) {
860
903
  return this.walletStandardCore.signMessageAndVerify(
@@ -0,0 +1,37 @@
1
+ export class GA4 {
2
+ readonly aptosGAID: string | undefined = process.env.GAID;
3
+
4
+ constructor() {
5
+ // Inject Aptos Google Analytics 4 script
6
+ this.injectGA(this.aptosGAID);
7
+ }
8
+
9
+ gtag(a: string, b: string | object, c?: object) {
10
+ let dataLayer = (window as any).dataLayer || [];
11
+ dataLayer.push(arguments);
12
+ }
13
+
14
+ private injectGA(gaID?: string) {
15
+ if (typeof window === "undefined") return;
16
+ if (!gaID) return;
17
+
18
+ const head = document.getElementsByTagName("head")[0];
19
+
20
+ var myScript = document.createElement("script");
21
+
22
+ myScript.setAttribute(
23
+ "src",
24
+ `https://www.googletagmanager.com/gtag/js?id=${gaID}`
25
+ );
26
+
27
+ const that = this;
28
+ myScript.onload = function () {
29
+ that.gtag("js", new Date());
30
+ that.gtag("config", `${gaID}`, {
31
+ send_page_view: false,
32
+ });
33
+ };
34
+
35
+ head.insertBefore(myScript, head.children[1]);
36
+ }
37
+ }
@@ -1,8 +1,14 @@
1
1
  import {
2
+ AptosConfig,
2
3
  EntryFunctionArgumentTypes,
4
+ Network,
5
+ NetworkToNodeAPI,
3
6
  Serializable,
4
7
  SimpleEntryFunctionArgumentTypes,
5
8
  } from "@aptos-labs/ts-sdk";
9
+ import { NetworkInfo as StandardNetworkInfo } from "@aptos-labs/wallet-standard";
10
+ import { NetworkInfo } from "../LegacyWalletPlugins/types";
11
+ import { convertNetwork } from "../LegacyWalletPlugins/conversion";
6
12
 
7
13
  export function isMobile(): boolean {
8
14
  return /Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/i.test(
@@ -52,3 +58,41 @@ export const areBCSArguments = (
52
58
  arg instanceof Serializable
53
59
  );
54
60
  };
61
+
62
+ /**
63
+ * Helper function to get AptosConfig that supports Aptos and Custom networks
64
+ *
65
+ * @param networkInfo
66
+ * @returns AptosConfig
67
+ */
68
+ export const getAptosConfig = (
69
+ networkInfo: NetworkInfo | StandardNetworkInfo | null
70
+ ): AptosConfig => {
71
+ if (!networkInfo) {
72
+ throw new Error("Undefined network");
73
+ }
74
+ if (isAptosNetwork(networkInfo)) {
75
+ return new AptosConfig({
76
+ network: convertNetwork(networkInfo),
77
+ });
78
+ }
79
+ return new AptosConfig({
80
+ network: Network.CUSTOM,
81
+ fullnode: networkInfo.url,
82
+ });
83
+ };
84
+
85
+ /**
86
+ * Helper function to resolve if the current connected network is an Aptos network
87
+ *
88
+ * @param networkInfo
89
+ * @returns boolean
90
+ */
91
+ export const isAptosNetwork = (
92
+ networkInfo: NetworkInfo | StandardNetworkInfo | null
93
+ ): boolean => {
94
+ if (!networkInfo) {
95
+ throw new Error("Undefined network");
96
+ }
97
+ return NetworkToNodeAPI[networkInfo.name] !== undefined;
98
+ };
package/src/version.ts ADDED
@@ -0,0 +1 @@
1
+ export const WALLET_ADAPTER_CORE_VERSION = "3.11.0";