@dynamic-labs/starknet 4.0.0-alpha.3 → 4.0.0-alpha.31

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 (65) hide show
  1. package/CHANGELOG.md +261 -0
  2. package/package.cjs +8 -0
  3. package/package.js +4 -0
  4. package/package.json +14 -19
  5. package/src/StarknetWalletConnector.cjs +232 -0
  6. package/src/StarknetWalletConnector.d.ts +58 -0
  7. package/src/StarknetWalletConnector.js +228 -0
  8. package/src/index.cjs +14 -13
  9. package/src/index.d.ts +15 -7
  10. package/src/index.js +13 -13
  11. package/src/types.d.ts +26 -11
  12. package/src/utils/convertors.cjs +1 -1
  13. package/src/utils/convertors.d.ts +1 -1
  14. package/src/utils/convertors.js +1 -1
  15. package/src/utils/starknetSnap.d.ts +2 -2
  16. package/src/wallet/StarknetWallet.cjs +0 -3
  17. package/src/wallet/StarknetWallet.d.ts +4 -4
  18. package/src/wallet/StarknetWallet.js +0 -3
  19. package/src/wallets/argent/argentMobile/argentMobile.cjs +73 -0
  20. package/src/wallets/argent/argentMobile/argentMobile.d.ts +16 -0
  21. package/src/wallets/argent/argentMobile/argentMobile.js +69 -0
  22. package/src/wallets/argent/base.cjs +50 -0
  23. package/src/wallets/argent/base.d.ts +5 -0
  24. package/src/wallets/argent/base.js +46 -0
  25. package/src/wallets/argent/injected/argentx.cjs +33 -0
  26. package/src/wallets/argent/injected/argentx.d.ts +8 -0
  27. package/src/wallets/argent/injected/argentx.js +29 -0
  28. package/src/wallets/argent/webwallet/webwallet.cjs +37 -0
  29. package/src/wallets/argent/webwallet/webwallet.d.ts +10 -0
  30. package/src/wallets/argent/webwallet/webwallet.js +33 -0
  31. package/src/wallets/injected/fetchStarknetInjectedWalletConnectors.cjs +34 -0
  32. package/src/wallets/injected/fetchStarknetInjectedWalletConnectors.d.ts +5 -0
  33. package/src/wallets/injected/fetchStarknetInjectedWalletConnectors.js +30 -0
  34. package/src/wallets/injected/injected.cjs +141 -0
  35. package/src/wallets/injected/injected.d.ts +10 -0
  36. package/src/wallets/injected/injected.js +137 -0
  37. package/src/wallets/{metamask.d.ts → injected/metamask.d.ts} +2 -4
  38. package/src/starknetWalletConnector.cjs +0 -320
  39. package/src/starknetWalletConnector.d.ts +0 -127
  40. package/src/starknetWalletConnector.js +0 -314
  41. package/src/utils/starknetSnap.cjs +0 -92
  42. package/src/utils/starknetSnap.js +0 -88
  43. package/src/wallets/argentx.cjs +0 -24
  44. package/src/wallets/argentx.d.ts +0 -8
  45. package/src/wallets/argentx.js +0 -20
  46. package/src/wallets/argentxBase.cjs +0 -50
  47. package/src/wallets/argentxBase.d.ts +0 -16
  48. package/src/wallets/argentxBase.js +0 -48
  49. package/src/wallets/argentxMobile.cjs +0 -100
  50. package/src/wallets/argentxMobile.d.ts +0 -13
  51. package/src/wallets/argentxMobile.js +0 -96
  52. package/src/wallets/argentxWeb.cjs +0 -57
  53. package/src/wallets/argentxWeb.d.ts +0 -8
  54. package/src/wallets/argentxWeb.js +0 -53
  55. package/src/wallets/bitget.cjs +0 -22
  56. package/src/wallets/bitget.d.ts +0 -7
  57. package/src/wallets/bitget.js +0 -18
  58. package/src/wallets/braavos.cjs +0 -37
  59. package/src/wallets/braavos.d.ts +0 -8
  60. package/src/wallets/braavos.js +0 -33
  61. package/src/wallets/metamask.cjs +0 -121
  62. package/src/wallets/metamask.js +0 -117
  63. package/src/wallets/okx.cjs +0 -15
  64. package/src/wallets/okx.d.ts +0 -6
  65. package/src/wallets/okx.js +0 -11
@@ -0,0 +1,5 @@
1
+ import { StarknetWalletConnector } from '../../StarknetWalletConnector';
2
+ export declare abstract class ArgentBase extends StarknetWalletConnector {
3
+ getConnectedAccounts(): Promise<string[]>;
4
+ endSession(): Promise<void>;
5
+ }
@@ -0,0 +1,46 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../_virtual/_tslib.js';
3
+ import { disconnect } from 'starknetkit';
4
+ import { StarknetWalletConnector } from '../../StarknetWalletConnector.js';
5
+
6
+ class ArgentBase extends StarknetWalletConnector {
7
+ getConnectedAccounts() {
8
+ return __awaiter(this, void 0, void 0, function* () {
9
+ var _a;
10
+ if ((_a = this.walletData) === null || _a === void 0 ? void 0 : _a.account) {
11
+ return [this.walletData.account];
12
+ }
13
+ let data;
14
+ let wallet;
15
+ this.logger.debug('[getConnectedAccounts] No existing account, attempting to silently connect');
16
+ try {
17
+ ({ data, wallet } = yield this.prompt({
18
+ silently: true,
19
+ }));
20
+ }
21
+ catch (error) {
22
+ this.logger.debug(`[getConnectedAccounts] Silent connect errored out: ${error}`);
23
+ return [];
24
+ }
25
+ this.logger.debug(`[getConnectedAccounts] Connect returned account: ${data === null || data === void 0 ? void 0 : data.account}`);
26
+ if (!(data === null || data === void 0 ? void 0 : data.account) || !wallet) {
27
+ return [];
28
+ }
29
+ this.walletData = data;
30
+ this.wallet = wallet;
31
+ this.setupEventListeners();
32
+ return [data.account];
33
+ });
34
+ }
35
+ endSession() {
36
+ const _super = Object.create(null, {
37
+ endSession: { get: () => super.endSession }
38
+ });
39
+ return __awaiter(this, void 0, void 0, function* () {
40
+ yield _super.endSession.call(this);
41
+ yield disconnect();
42
+ });
43
+ }
44
+ }
45
+
46
+ export { ArgentBase };
@@ -0,0 +1,33 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var _tslib = require('../../../../_virtual/_tslib.cjs');
7
+ var starknetkit = require('starknetkit');
8
+ var injected = require('starknetkit/injected');
9
+ var base = require('../base.cjs');
10
+
11
+ class ArgentX extends base.ArgentBase {
12
+ constructor(opts) {
13
+ super('Argent X', 'argentX', opts);
14
+ this.overrideKey = 'argentx';
15
+ }
16
+ prompt() {
17
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
18
+ const { connectorData, wallet } = yield starknetkit.connect({
19
+ connectors: [new injected.InjectedConnector({ options: { id: this.id } })],
20
+ modalMode: 'canAsk',
21
+ });
22
+ return {
23
+ data: {
24
+ account: connectorData === null || connectorData === void 0 ? void 0 : connectorData.account,
25
+ chainId: connectorData === null || connectorData === void 0 ? void 0 : connectorData.chainId,
26
+ },
27
+ wallet: wallet !== null && wallet !== void 0 ? wallet : undefined,
28
+ };
29
+ });
30
+ }
31
+ }
32
+
33
+ exports.ArgentX = ArgentX;
@@ -0,0 +1,8 @@
1
+ import { PromptResult } from '../../../types';
2
+ import { ArgentBase } from '../base';
3
+ export declare class ArgentX extends ArgentBase {
4
+ overrideKey: string;
5
+ constructor(opts: any);
6
+ prompt(): Promise<PromptResult>;
7
+ }
8
+ export type ArgentXWalletConnectorType = ArgentX;
@@ -0,0 +1,29 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../../_virtual/_tslib.js';
3
+ import { connect } from 'starknetkit';
4
+ import { InjectedConnector } from 'starknetkit/injected';
5
+ import { ArgentBase } from '../base.js';
6
+
7
+ class ArgentX extends ArgentBase {
8
+ constructor(opts) {
9
+ super('Argent X', 'argentX', opts);
10
+ this.overrideKey = 'argentx';
11
+ }
12
+ prompt() {
13
+ return __awaiter(this, void 0, void 0, function* () {
14
+ const { connectorData, wallet } = yield connect({
15
+ connectors: [new InjectedConnector({ options: { id: this.id } })],
16
+ modalMode: 'canAsk',
17
+ });
18
+ return {
19
+ data: {
20
+ account: connectorData === null || connectorData === void 0 ? void 0 : connectorData.account,
21
+ chainId: connectorData === null || connectorData === void 0 ? void 0 : connectorData.chainId,
22
+ },
23
+ wallet: wallet !== null && wallet !== void 0 ? wallet : undefined,
24
+ };
25
+ });
26
+ }
27
+ }
28
+
29
+ export { ArgentX };
@@ -0,0 +1,37 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var _tslib = require('../../../../_virtual/_tslib.cjs');
7
+ var starknetkit = require('starknetkit');
8
+ var webwallet = require('starknetkit/webwallet');
9
+ var base = require('../base.cjs');
10
+
11
+ class WebWallet extends base.ArgentBase {
12
+ constructor(opts) {
13
+ super('Argent X - Web', 'argentWebWallet', opts);
14
+ this.overrideKey = 'argentxweb';
15
+ this.canConnectViaCustodialService = true;
16
+ }
17
+ isInstalledOnBrowser() {
18
+ return false;
19
+ }
20
+ prompt(options) {
21
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
22
+ const { connectorData, wallet } = yield starknetkit.connect({
23
+ connectors: [new webwallet.WebWalletConnector({ url: 'https://web.argent.xyz' })],
24
+ modalMode: options.silently ? 'neverAsk' : 'canAsk',
25
+ });
26
+ return {
27
+ data: {
28
+ account: connectorData === null || connectorData === void 0 ? void 0 : connectorData.account,
29
+ chainId: connectorData === null || connectorData === void 0 ? void 0 : connectorData.chainId,
30
+ },
31
+ wallet: wallet !== null && wallet !== void 0 ? wallet : undefined,
32
+ };
33
+ });
34
+ }
35
+ }
36
+
37
+ exports.WebWallet = WebWallet;
@@ -0,0 +1,10 @@
1
+ import { PromptOptions, PromptResult } from '../../../types';
2
+ import { ArgentBase } from '../base';
3
+ export declare class WebWallet extends ArgentBase {
4
+ overrideKey: string;
5
+ canConnectViaCustodialService: boolean;
6
+ constructor(opts: any);
7
+ isInstalledOnBrowser(): boolean;
8
+ prompt(options: PromptOptions): Promise<PromptResult>;
9
+ }
10
+ export type WebWalletConnectorType = WebWallet;
@@ -0,0 +1,33 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../../_virtual/_tslib.js';
3
+ import { connect } from 'starknetkit';
4
+ import { WebWalletConnector } from 'starknetkit/webwallet';
5
+ import { ArgentBase } from '../base.js';
6
+
7
+ class WebWallet extends ArgentBase {
8
+ constructor(opts) {
9
+ super('Argent X - Web', 'argentWebWallet', opts);
10
+ this.overrideKey = 'argentxweb';
11
+ this.canConnectViaCustodialService = true;
12
+ }
13
+ isInstalledOnBrowser() {
14
+ return false;
15
+ }
16
+ prompt(options) {
17
+ return __awaiter(this, void 0, void 0, function* () {
18
+ const { connectorData, wallet } = yield connect({
19
+ connectors: [new WebWalletConnector({ url: 'https://web.argent.xyz' })],
20
+ modalMode: options.silently ? 'neverAsk' : 'canAsk',
21
+ });
22
+ return {
23
+ data: {
24
+ account: connectorData === null || connectorData === void 0 ? void 0 : connectorData.account,
25
+ chainId: connectorData === null || connectorData === void 0 ? void 0 : connectorData.chainId,
26
+ },
27
+ wallet: wallet !== null && wallet !== void 0 ? wallet : undefined,
28
+ };
29
+ });
30
+ }
31
+ }
32
+
33
+ export { WebWallet };
@@ -0,0 +1,34 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var injected = require('./injected.cjs');
7
+
8
+ const filteredStarknetWalletKeysOverrides = [
9
+ // TODO(starknet-v6): Remove once these wallets support v6
10
+ 'okxstarknet',
11
+ 'bitgetstarknet',
12
+ ];
13
+ const fetchStarknetInjectedWalletConnectors = ({ walletBook, }) => {
14
+ var _a;
15
+ return Object.entries((_a = walletBook === null || walletBook === void 0 ? void 0 : walletBook.wallets) !== null && _a !== void 0 ? _a : {})
16
+ .filter(([key, wallet]) => {
17
+ var _a;
18
+ return ((_a = wallet.injectedConfig) === null || _a === void 0 ? void 0 : _a.find((config) => config.chain === 'starknet')) &&
19
+ !filteredStarknetWalletKeysOverrides.includes(key);
20
+ })
21
+ .map(([key, wallet]) => {
22
+ var _a, _b, _c;
23
+ const name = wallet.shortName || wallet.name;
24
+ const walletConnectorFallback = Boolean(wallet.walletConnect);
25
+ const id = (_c = (_b = (_a = wallet.injectedConfig) === null || _a === void 0 ? void 0 : _a[0].windowLocations) === null || _b === void 0 ? void 0 : _b[0]) !== null && _c !== void 0 ? _c : key;
26
+ return class extends injected.Injected {
27
+ constructor(props) {
28
+ super(name, id, Object.assign({ name, overrideKey: key, walletBookWallet: wallet, walletConnectorFallback }, props));
29
+ }
30
+ };
31
+ });
32
+ };
33
+
34
+ exports.fetchStarknetInjectedWalletConnectors = fetchStarknetInjectedWalletConnectors;
@@ -0,0 +1,5 @@
1
+ import { WalletConnectorConstructor } from '@dynamic-labs/wallet-connector-core';
2
+ import { WalletBookSchema } from '@dynamic-labs/wallet-book';
3
+ export declare const fetchStarknetInjectedWalletConnectors: ({ walletBook, }: {
4
+ walletBook: WalletBookSchema;
5
+ }) => WalletConnectorConstructor[];
@@ -0,0 +1,30 @@
1
+ 'use client'
2
+ import { Injected } from './injected.js';
3
+
4
+ const filteredStarknetWalletKeysOverrides = [
5
+ // TODO(starknet-v6): Remove once these wallets support v6
6
+ 'okxstarknet',
7
+ 'bitgetstarknet',
8
+ ];
9
+ const fetchStarknetInjectedWalletConnectors = ({ walletBook, }) => {
10
+ var _a;
11
+ return Object.entries((_a = walletBook === null || walletBook === void 0 ? void 0 : walletBook.wallets) !== null && _a !== void 0 ? _a : {})
12
+ .filter(([key, wallet]) => {
13
+ var _a;
14
+ return ((_a = wallet.injectedConfig) === null || _a === void 0 ? void 0 : _a.find((config) => config.chain === 'starknet')) &&
15
+ !filteredStarknetWalletKeysOverrides.includes(key);
16
+ })
17
+ .map(([key, wallet]) => {
18
+ var _a, _b, _c;
19
+ const name = wallet.shortName || wallet.name;
20
+ const walletConnectorFallback = Boolean(wallet.walletConnect);
21
+ const id = (_c = (_b = (_a = wallet.injectedConfig) === null || _a === void 0 ? void 0 : _a[0].windowLocations) === null || _b === void 0 ? void 0 : _b[0]) !== null && _c !== void 0 ? _c : key;
22
+ return class extends Injected {
23
+ constructor(props) {
24
+ super(name, id, Object.assign({ name, overrideKey: key, walletBookWallet: wallet, walletConnectorFallback }, props));
25
+ }
26
+ };
27
+ });
28
+ };
29
+
30
+ export { fetchStarknetInjectedWalletConnectors };
@@ -0,0 +1,141 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var _tslib = require('../../../_virtual/_tslib.cjs');
7
+ var typesJs = require('@starknet-io/types-js');
8
+ var utils = require('@dynamic-labs/utils');
9
+ var StarknetWalletConnector = require('../../StarknetWalletConnector.cjs');
10
+
11
+ class Injected extends StarknetWalletConnector.StarknetWalletConnector {
12
+ constructor(name, id, props) {
13
+ super(name, id, props);
14
+ this.overrideKey = props.overrideKey;
15
+ }
16
+ prompt(options) {
17
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
18
+ const wallet = this.getWindowWallet();
19
+ if (!wallet) {
20
+ throw new utils.DynamicError('No wallet available to send RPC requests to');
21
+ }
22
+ this.logger.debug('[prompt] Sending wallet_requestAccounts with silent_mode:', options.silently);
23
+ const accounts = yield wallet.request({
24
+ params: {
25
+ silent_mode: options.silently,
26
+ },
27
+ type: 'wallet_requestAccounts',
28
+ });
29
+ this.logger.debug('[prompt] Received from wallet_requestAccounts:', accounts);
30
+ if (accounts.length === 0) {
31
+ return {
32
+ data: {
33
+ account: undefined,
34
+ chainId: undefined,
35
+ },
36
+ wallet,
37
+ };
38
+ }
39
+ const [account] = accounts;
40
+ this.logger.debug('[prompt] Sending wallet_requestChaindId');
41
+ const chainId = yield wallet.request({
42
+ type: 'wallet_requestChainId',
43
+ });
44
+ this.logger.debug('[prompt] Received from wallet_requestChainId:', chainId);
45
+ return {
46
+ data: {
47
+ account,
48
+ chainId: BigInt(chainId),
49
+ },
50
+ wallet,
51
+ };
52
+ });
53
+ }
54
+ getAddress() {
55
+ const _super = Object.create(null, {
56
+ getAddress: { get: () => super.getAddress }
57
+ });
58
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
59
+ var _a;
60
+ if (this.isInstalledOnBrowser()) {
61
+ return _super.getAddress.call(this);
62
+ }
63
+ const inAppBrowserBase = (_a = this.walletBookWallet.mobile) === null || _a === void 0 ? void 0 : _a.inAppBrowser;
64
+ if (!inAppBrowserBase || !utils.isMobile()) {
65
+ return undefined;
66
+ }
67
+ const inAppBrowserTemplate = utils.template(inAppBrowserBase);
68
+ const deepLink = inAppBrowserTemplate({
69
+ encodedDappURI: window.location.toString().replace(/http(s)?:\/\//, ''),
70
+ });
71
+ window.location.href = deepLink;
72
+ return undefined;
73
+ });
74
+ }
75
+ getConnectedAccounts() {
76
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
77
+ var _a;
78
+ if ((_a = this.walletData) === null || _a === void 0 ? void 0 : _a.account) {
79
+ this.logger.debug('[getConnectedAccounts] Found existing account:', this.walletData.account);
80
+ return [this.walletData.account];
81
+ }
82
+ const wallet = this.getWindowWallet();
83
+ if (!wallet) {
84
+ return [];
85
+ }
86
+ const silently = yield this.shouldPromptSilently(wallet);
87
+ let data;
88
+ this.logger.debug('[getConnectedAccounts] No existing account, attempting to connect with silent mode:', silently);
89
+ try {
90
+ ({ data } = yield this.prompt({
91
+ silently,
92
+ }));
93
+ }
94
+ catch (error) {
95
+ this.logger.debug(`[getConnectedAccounts] Silent connect errored out: ${error}`);
96
+ return [];
97
+ }
98
+ this.logger.debug(`[getConnectedAccounts] Connect returned account: ${data === null || data === void 0 ? void 0 : data.account}`);
99
+ if (!(data === null || data === void 0 ? void 0 : data.account)) {
100
+ return [];
101
+ }
102
+ this.walletData = data;
103
+ this.wallet = wallet;
104
+ this.setupEventListeners();
105
+ return [data.account];
106
+ });
107
+ }
108
+ shouldPromptSilently(wallet) {
109
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
110
+ /**
111
+ * In general, getConnectedAccounts should send a "silent" request to the wallet, meaning
112
+ * no popup will be displayed to the user. However, in the case that the user comes back
113
+ * to the dapp with a locked wallet, we do want to trigger a popup for the user to unlock
114
+ * their wallet, but only if their wallet has still granted permission to the dapp to access
115
+ * its data. That's what the following `wallet_getPermissions` RPC request does.
116
+ */
117
+ let silently = true;
118
+ try {
119
+ const permissions = yield wallet.request({
120
+ type: 'wallet_getPermissions',
121
+ });
122
+ if (permissions.includes(typesJs.WALLET_API.Permission.ACCOUNTS)) {
123
+ this.logger.debug('[getConnectedAccounts] Received `accounts` permission from wallet_getPermissions');
124
+ silently = false;
125
+ }
126
+ }
127
+ catch (error) {
128
+ this.logger.debug('[getConnectedAccounts] `wallet_getPermissions` threw error:', error);
129
+ }
130
+ return silently;
131
+ });
132
+ }
133
+ getWindowWallet() {
134
+ this.logger.debug('[getWindowWallet] Looking for wallet from window:', this.id);
135
+ const wallet = window[`starknet_${this.id}`];
136
+ this.logger.debug('[getWindowWallet] Lookup result:', wallet);
137
+ return wallet;
138
+ }
139
+ }
140
+
141
+ exports.Injected = Injected;
@@ -0,0 +1,10 @@
1
+ import { StarknetWalletConnector } from '../../StarknetWalletConnector';
2
+ import { PromptOptions, PromptResult } from '../../types';
3
+ export declare class Injected extends StarknetWalletConnector {
4
+ constructor(name: string, id: string, props: any);
5
+ prompt(options: PromptOptions): Promise<PromptResult>;
6
+ getAddress(): Promise<string | undefined>;
7
+ getConnectedAccounts(): Promise<string[]>;
8
+ private shouldPromptSilently;
9
+ private getWindowWallet;
10
+ }
@@ -0,0 +1,137 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../_virtual/_tslib.js';
3
+ import { WALLET_API } from '@starknet-io/types-js';
4
+ import { DynamicError, isMobile, template } from '@dynamic-labs/utils';
5
+ import { StarknetWalletConnector } from '../../StarknetWalletConnector.js';
6
+
7
+ class Injected extends StarknetWalletConnector {
8
+ constructor(name, id, props) {
9
+ super(name, id, props);
10
+ this.overrideKey = props.overrideKey;
11
+ }
12
+ prompt(options) {
13
+ return __awaiter(this, void 0, void 0, function* () {
14
+ const wallet = this.getWindowWallet();
15
+ if (!wallet) {
16
+ throw new DynamicError('No wallet available to send RPC requests to');
17
+ }
18
+ this.logger.debug('[prompt] Sending wallet_requestAccounts with silent_mode:', options.silently);
19
+ const accounts = yield wallet.request({
20
+ params: {
21
+ silent_mode: options.silently,
22
+ },
23
+ type: 'wallet_requestAccounts',
24
+ });
25
+ this.logger.debug('[prompt] Received from wallet_requestAccounts:', accounts);
26
+ if (accounts.length === 0) {
27
+ return {
28
+ data: {
29
+ account: undefined,
30
+ chainId: undefined,
31
+ },
32
+ wallet,
33
+ };
34
+ }
35
+ const [account] = accounts;
36
+ this.logger.debug('[prompt] Sending wallet_requestChaindId');
37
+ const chainId = yield wallet.request({
38
+ type: 'wallet_requestChainId',
39
+ });
40
+ this.logger.debug('[prompt] Received from wallet_requestChainId:', chainId);
41
+ return {
42
+ data: {
43
+ account,
44
+ chainId: BigInt(chainId),
45
+ },
46
+ wallet,
47
+ };
48
+ });
49
+ }
50
+ getAddress() {
51
+ const _super = Object.create(null, {
52
+ getAddress: { get: () => super.getAddress }
53
+ });
54
+ return __awaiter(this, void 0, void 0, function* () {
55
+ var _a;
56
+ if (this.isInstalledOnBrowser()) {
57
+ return _super.getAddress.call(this);
58
+ }
59
+ const inAppBrowserBase = (_a = this.walletBookWallet.mobile) === null || _a === void 0 ? void 0 : _a.inAppBrowser;
60
+ if (!inAppBrowserBase || !isMobile()) {
61
+ return undefined;
62
+ }
63
+ const inAppBrowserTemplate = template(inAppBrowserBase);
64
+ const deepLink = inAppBrowserTemplate({
65
+ encodedDappURI: window.location.toString().replace(/http(s)?:\/\//, ''),
66
+ });
67
+ window.location.href = deepLink;
68
+ return undefined;
69
+ });
70
+ }
71
+ getConnectedAccounts() {
72
+ return __awaiter(this, void 0, void 0, function* () {
73
+ var _a;
74
+ if ((_a = this.walletData) === null || _a === void 0 ? void 0 : _a.account) {
75
+ this.logger.debug('[getConnectedAccounts] Found existing account:', this.walletData.account);
76
+ return [this.walletData.account];
77
+ }
78
+ const wallet = this.getWindowWallet();
79
+ if (!wallet) {
80
+ return [];
81
+ }
82
+ const silently = yield this.shouldPromptSilently(wallet);
83
+ let data;
84
+ this.logger.debug('[getConnectedAccounts] No existing account, attempting to connect with silent mode:', silently);
85
+ try {
86
+ ({ data } = yield this.prompt({
87
+ silently,
88
+ }));
89
+ }
90
+ catch (error) {
91
+ this.logger.debug(`[getConnectedAccounts] Silent connect errored out: ${error}`);
92
+ return [];
93
+ }
94
+ this.logger.debug(`[getConnectedAccounts] Connect returned account: ${data === null || data === void 0 ? void 0 : data.account}`);
95
+ if (!(data === null || data === void 0 ? void 0 : data.account)) {
96
+ return [];
97
+ }
98
+ this.walletData = data;
99
+ this.wallet = wallet;
100
+ this.setupEventListeners();
101
+ return [data.account];
102
+ });
103
+ }
104
+ shouldPromptSilently(wallet) {
105
+ return __awaiter(this, void 0, void 0, function* () {
106
+ /**
107
+ * In general, getConnectedAccounts should send a "silent" request to the wallet, meaning
108
+ * no popup will be displayed to the user. However, in the case that the user comes back
109
+ * to the dapp with a locked wallet, we do want to trigger a popup for the user to unlock
110
+ * their wallet, but only if their wallet has still granted permission to the dapp to access
111
+ * its data. That's what the following `wallet_getPermissions` RPC request does.
112
+ */
113
+ let silently = true;
114
+ try {
115
+ const permissions = yield wallet.request({
116
+ type: 'wallet_getPermissions',
117
+ });
118
+ if (permissions.includes(WALLET_API.Permission.ACCOUNTS)) {
119
+ this.logger.debug('[getConnectedAccounts] Received `accounts` permission from wallet_getPermissions');
120
+ silently = false;
121
+ }
122
+ }
123
+ catch (error) {
124
+ this.logger.debug('[getConnectedAccounts] `wallet_getPermissions` threw error:', error);
125
+ }
126
+ return silently;
127
+ });
128
+ }
129
+ getWindowWallet() {
130
+ this.logger.debug('[getWindowWallet] Looking for wallet from window:', this.id);
131
+ const wallet = window[`starknet_${this.id}`];
132
+ this.logger.debug('[getWindowWallet] Lookup result:', wallet);
133
+ return wallet;
134
+ }
135
+ }
136
+
137
+ export { Injected };
@@ -1,6 +1,5 @@
1
- import { WalletConnectorBase } from '@dynamic-labs/wallet-connector-core';
2
- import StarknetProvider from '../starknetWalletConnector';
3
- export declare class MetaMask extends StarknetProvider implements WalletConnectorBase {
1
+ import { Injected } from './injected';
2
+ export declare class MetaMask extends Injected {
4
3
  overrideKey: string;
5
4
  private currentChainId;
6
5
  private intervalId;
@@ -10,5 +9,4 @@ export declare class MetaMask extends StarknetProvider implements WalletConnecto
10
9
  setupEventListeners(): void;
11
10
  teardownEventListeners(): Promise<void>;
12
11
  endSession(): Promise<void>;
13
- getConnectedAccounts(): Promise<string[]>;
14
12
  }