@lidofinance/wallets-testing-wallets 1.0.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.
Files changed (103) hide show
  1. package/LICENSE.txt +21 -0
  2. package/README.md +25 -0
  3. package/dist/src/coin98/coin98.constants.d.ts +3 -0
  4. package/dist/src/coin98/coin98.constants.d.ts.map +1 -0
  5. package/dist/src/coin98/coin98.constants.js +8 -0
  6. package/dist/src/coin98/coin98.page.d.ts +20 -0
  7. package/dist/src/coin98/coin98.page.d.ts.map +1 -0
  8. package/dist/src/coin98/coin98.page.js +76 -0
  9. package/dist/src/coin98/index.d.ts +3 -0
  10. package/dist/src/coin98/index.d.ts.map +1 -0
  11. package/dist/src/coin98/index.js +2 -0
  12. package/dist/src/coinbase/coinbase.constants.d.ts +3 -0
  13. package/dist/src/coinbase/coinbase.constants.d.ts.map +1 -0
  14. package/dist/src/coinbase/coinbase.constants.js +8 -0
  15. package/dist/src/coinbase/coinbase.page.d.ts +22 -0
  16. package/dist/src/coinbase/coinbase.page.d.ts.map +1 -0
  17. package/dist/src/coinbase/coinbase.page.js +106 -0
  18. package/dist/src/coinbase/index.d.ts +3 -0
  19. package/dist/src/coinbase/index.d.ts.map +1 -0
  20. package/dist/src/coinbase/index.js +2 -0
  21. package/dist/src/exodus/exodus.constants.d.ts +3 -0
  22. package/dist/src/exodus/exodus.constants.d.ts.map +1 -0
  23. package/dist/src/exodus/exodus.constants.js +8 -0
  24. package/dist/src/exodus/exodus.page.d.ts +24 -0
  25. package/dist/src/exodus/exodus.page.d.ts.map +1 -0
  26. package/dist/src/exodus/exodus.page.js +75 -0
  27. package/dist/src/exodus/index.d.ts +3 -0
  28. package/dist/src/exodus/index.d.ts.map +1 -0
  29. package/dist/src/exodus/index.js +2 -0
  30. package/dist/src/gamestop/gamestop.constants.d.ts +3 -0
  31. package/dist/src/gamestop/gamestop.constants.d.ts.map +1 -0
  32. package/dist/src/gamestop/gamestop.constants.js +8 -0
  33. package/dist/src/gamestop/gamestop.page.d.ts +21 -0
  34. package/dist/src/gamestop/gamestop.page.d.ts.map +1 -0
  35. package/dist/src/gamestop/gamestop.page.js +84 -0
  36. package/dist/src/gamestop/index.d.ts +3 -0
  37. package/dist/src/gamestop/index.d.ts.map +1 -0
  38. package/dist/src/gamestop/index.js +2 -0
  39. package/dist/src/index.d.ts +13 -0
  40. package/dist/src/index.d.ts.map +1 -0
  41. package/dist/src/index.js +12 -0
  42. package/dist/src/mathwallet/index.d.ts +3 -0
  43. package/dist/src/mathwallet/index.d.ts.map +1 -0
  44. package/dist/src/mathwallet/index.js +2 -0
  45. package/dist/src/mathwallet/mathwallet.constants.d.ts +3 -0
  46. package/dist/src/mathwallet/mathwallet.constants.d.ts.map +1 -0
  47. package/dist/src/mathwallet/mathwallet.constants.js +8 -0
  48. package/dist/src/mathwallet/mathwallet.page.d.ts +20 -0
  49. package/dist/src/mathwallet/mathwallet.page.d.ts.map +1 -0
  50. package/dist/src/mathwallet/mathwallet.page.js +70 -0
  51. package/dist/src/metamask/index.d.ts +3 -0
  52. package/dist/src/metamask/index.d.ts.map +1 -0
  53. package/dist/src/metamask/index.js +2 -0
  54. package/dist/src/metamask/metamask.constants.d.ts +3 -0
  55. package/dist/src/metamask/metamask.constants.d.ts.map +1 -0
  56. package/dist/src/metamask/metamask.constants.js +8 -0
  57. package/dist/src/metamask/metamask.page.d.ts +25 -0
  58. package/dist/src/metamask/metamask.page.d.ts.map +1 -0
  59. package/dist/src/metamask/metamask.page.js +154 -0
  60. package/dist/src/phantom/index.d.ts +3 -0
  61. package/dist/src/phantom/index.d.ts.map +1 -0
  62. package/dist/src/phantom/index.js +2 -0
  63. package/dist/src/phantom/phantom.constants.d.ts +3 -0
  64. package/dist/src/phantom/phantom.constants.d.ts.map +1 -0
  65. package/dist/src/phantom/phantom.constants.js +8 -0
  66. package/dist/src/phantom/phantom.page.d.ts +21 -0
  67. package/dist/src/phantom/phantom.page.d.ts.map +1 -0
  68. package/dist/src/phantom/phantom.page.js +96 -0
  69. package/dist/src/taho/index.d.ts +3 -0
  70. package/dist/src/taho/index.d.ts.map +1 -0
  71. package/dist/src/taho/index.js +2 -0
  72. package/dist/src/taho/taho.constants.d.ts +3 -0
  73. package/dist/src/taho/taho.constants.d.ts.map +1 -0
  74. package/dist/src/taho/taho.constants.js +8 -0
  75. package/dist/src/taho/taho.page.d.ts +20 -0
  76. package/dist/src/taho/taho.page.d.ts.map +1 -0
  77. package/dist/src/taho/taho.page.js +76 -0
  78. package/dist/src/trustwallet/index.d.ts +3 -0
  79. package/dist/src/trustwallet/index.d.ts.map +1 -0
  80. package/dist/src/trustwallet/index.js +2 -0
  81. package/dist/src/trustwallet/trustWalletPage.d.ts +22 -0
  82. package/dist/src/trustwallet/trustWalletPage.d.ts.map +1 -0
  83. package/dist/src/trustwallet/trustWalletPage.js +106 -0
  84. package/dist/src/trustwallet/trustwallet.constants.d.ts +3 -0
  85. package/dist/src/trustwallet/trustwallet.constants.d.ts.map +1 -0
  86. package/dist/src/trustwallet/trustwallet.constants.js +8 -0
  87. package/dist/src/wallet.page.d.ts +15 -0
  88. package/dist/src/wallet.page.d.ts.map +1 -0
  89. package/dist/src/wallet.page.js +1 -0
  90. package/dist/src/wallets.constants.d.ts +15 -0
  91. package/dist/src/wallets.constants.d.ts.map +1 -0
  92. package/dist/src/wallets.constants.js +1 -0
  93. package/dist/src/xdefi/index.d.ts +3 -0
  94. package/dist/src/xdefi/index.d.ts.map +1 -0
  95. package/dist/src/xdefi/index.js +2 -0
  96. package/dist/src/xdefi/xdefi.constants.d.ts +3 -0
  97. package/dist/src/xdefi/xdefi.constants.d.ts.map +1 -0
  98. package/dist/src/xdefi/xdefi.constants.js +8 -0
  99. package/dist/src/xdefi/xdefi.page.d.ts +21 -0
  100. package/dist/src/xdefi/xdefi.page.d.ts.map +1 -0
  101. package/dist/src/xdefi/xdefi.page.js +98 -0
  102. package/dist/tsconfig.tsbuildinfo +1 -0
  103. package/package.json +38 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC"}
@@ -0,0 +1,12 @@
1
+ export * from './wallet.page';
2
+ export * from './wallets.constants';
3
+ export * from './coin98';
4
+ export * from './mathwallet';
5
+ export * from './metamask';
6
+ export * from './trustwallet';
7
+ export * from './phantom';
8
+ export * from './coinbase';
9
+ export * from './taho';
10
+ export * from './exodus';
11
+ export * from './gamestop';
12
+ export * from './xdefi';
@@ -0,0 +1,3 @@
1
+ export * from './mathwallet.constants';
2
+ export * from './mathwallet.page';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mathwallet/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './mathwallet.constants';
2
+ export * from './mathwallet.page';
@@ -0,0 +1,3 @@
1
+ import { CommonWalletConfig } from '../wallets.constants';
2
+ export declare const MATHWALLET_COMMON_CONFIG: CommonWalletConfig;
3
+ //# sourceMappingURL=mathwallet.constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mathwallet.constants.d.ts","sourceRoot":"","sources":["../../../src/mathwallet/mathwallet.constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,eAAO,MAAM,wBAAwB,EAAE,kBAOtC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export const MATHWALLET_COMMON_CONFIG = {
2
+ WALLET_NAME: 'mathwallet',
3
+ RPC_URL_PATTERN: 'https://jsonrpc.maiziqianbao.net/**',
4
+ STORE_EXTENSION_ID: 'afbcbjpbpfadlkmhmclhkeeodmamcflc',
5
+ CONNECT_BUTTON_NAME: 'MathWallet',
6
+ SIMPLE_CONNECT: true,
7
+ EXTENSION_START_PATH: '/popup/popup.html',
8
+ };
@@ -0,0 +1,20 @@
1
+ import { WalletConfig } from '../wallets.constants';
2
+ import { WalletPage } from '../wallet.page';
3
+ import { BrowserContext, Page } from '@playwright/test';
4
+ export declare class MathWalletPage implements WalletPage {
5
+ private browserContext;
6
+ private extensionUrl;
7
+ config: WalletConfig;
8
+ page: Page | undefined;
9
+ constructor(browserContext: BrowserContext, extensionUrl: string, config: WalletConfig);
10
+ navigate(): Promise<void>;
11
+ setup(): Promise<void>;
12
+ firstTimeSetup(): Promise<void>;
13
+ importKey(key: string): Promise<void>;
14
+ connectWallet(page: Page): Promise<void>;
15
+ assertTxAmount(page: Page, expectedAmount: string): Promise<void>;
16
+ confirmTx(page: Page): Promise<void>;
17
+ assertReceiptAddress(page: Page, expectedAmount: string): Promise<void>;
18
+ addNetwork(networkName: string, networkUrl: string, chainId: number, tokenSymbol: string): Promise<void>;
19
+ }
20
+ //# sourceMappingURL=mathwallet.page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mathwallet.page.d.ts","sourceRoot":"","sources":["../../../src/mathwallet/mathwallet.page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAQ,cAAc,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE9D,qBAAa,cAAe,YAAW,UAAU;IAI7C,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,YAAY;IACb,MAAM,EAAE,YAAY;IAL7B,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;gBAGb,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,MAAM,EACrB,MAAM,EAAE,YAAY;IAGvB,QAAQ;IAWR,KAAK;IASL,cAAc;IAoBd,SAAS,CAAC,GAAG,EAAE,MAAM;IAerB,aAAa,CAAC,IAAI,EAAE,IAAI;IAGxB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM;IAGjD,SAAS,CAAC,IAAI,EAAE,IAAI;IAGpB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM;IAGvD,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAC/F"}
@@ -0,0 +1,70 @@
1
+ import { test } from '@playwright/test';
2
+ export class MathWalletPage {
3
+ constructor(browserContext, extensionUrl, config) {
4
+ this.browserContext = browserContext;
5
+ this.extensionUrl = extensionUrl;
6
+ this.config = config;
7
+ }
8
+ async navigate() {
9
+ await test.step('Navigate to MathWallet', async () => {
10
+ this.page = await this.browserContext.newPage();
11
+ await this.page.goto(this.extensionUrl + this.config.COMMON.EXTENSION_START_PATH);
12
+ await this.page.reload();
13
+ await this.page.waitForTimeout(1000);
14
+ });
15
+ }
16
+ async setup() {
17
+ await test.step('Setup', async () => {
18
+ await this.navigate();
19
+ if (!this.page)
20
+ throw "Page isn't ready";
21
+ const firstTime = (await this.page.locator('text=Create').count()) > 0;
22
+ if (firstTime)
23
+ await this.firstTimeSetup();
24
+ });
25
+ }
26
+ async firstTimeSetup() {
27
+ await test.step('First time setup', async () => {
28
+ if (!this.page)
29
+ throw "Page isn't ready";
30
+ const inputs = this.page.locator('input[type=password]');
31
+ await inputs.nth(0).fill(this.config.PASSWORD);
32
+ await inputs.nth(1).fill(this.config.PASSWORD);
33
+ await this.page.click('.create');
34
+ await this.page.click('.select-net');
35
+ await this.page.click('text=Ethereum');
36
+ await this.page.click('.back');
37
+ await this.page.click('.network-add');
38
+ await this.page.click('text="Import Wallet"');
39
+ await this.page.click('text="Import by mnemonic"');
40
+ await this.page.fill('textarea', this.config.SECRET_PHRASE);
41
+ await this.page.click('text="Next"');
42
+ await this.page.fill('[placeholder="Wallet Name"]', 'test');
43
+ await this.page.click('text="Confirm"');
44
+ });
45
+ }
46
+ async importKey(key) {
47
+ await test.step('Import key', async () => {
48
+ await this.navigate();
49
+ if (!this.page)
50
+ throw "Page isn't ready";
51
+ await this.page.click('.network-add');
52
+ await this.page.click('text="Import Wallet"');
53
+ await this.page.click('text="Import by private key"');
54
+ await this.page.fill('textarea', key);
55
+ await this.page.click('text="Next"');
56
+ await this.page.fill('[placeholder="Wallet Name"]', 'test1');
57
+ await this.page.click('text="Confirm"');
58
+ });
59
+ }
60
+ // eslint-disable-next-line
61
+ async connectWallet(page) { }
62
+ // eslint-disable-next-line
63
+ async assertTxAmount(page, expectedAmount) { }
64
+ // eslint-disable-next-line
65
+ async confirmTx(page) { }
66
+ // eslint-disable-next-line
67
+ async assertReceiptAddress(page, expectedAmount) { }
68
+ // eslint-disable-next-line
69
+ async addNetwork(networkName, networkUrl, chainId, tokenSymbol) { }
70
+ }
@@ -0,0 +1,3 @@
1
+ export * from './metamask.constants';
2
+ export * from './metamask.page';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/metamask/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './metamask.constants';
2
+ export * from './metamask.page';
@@ -0,0 +1,3 @@
1
+ import { CommonWalletConfig } from '../wallets.constants';
2
+ export declare const METAMASK_COMMON_CONFIG: CommonWalletConfig;
3
+ //# sourceMappingURL=metamask.constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metamask.constants.d.ts","sourceRoot":"","sources":["../../../src/metamask/metamask.constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,eAAO,MAAM,sBAAsB,EAAE,kBAOpC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export const METAMASK_COMMON_CONFIG = {
2
+ WALLET_NAME: 'metamask',
3
+ RPC_URL_PATTERN: 'https://mainnet.infura.io/v3/**',
4
+ STORE_EXTENSION_ID: 'nkbihfbeogaeaoehlefnkodbefgpgknn',
5
+ CONNECT_BUTTON_NAME: 'Metamask',
6
+ SIMPLE_CONNECT: false,
7
+ EXTENSION_START_PATH: '/home.html',
8
+ };
@@ -0,0 +1,25 @@
1
+ import { WalletConfig } from '../wallets.constants';
2
+ import { WalletPage } from '../wallet.page';
3
+ import { BrowserContext, Page } from '@playwright/test';
4
+ export declare class MetamaskPage implements WalletPage {
5
+ private browserContext;
6
+ private extensionUrl;
7
+ config: WalletConfig;
8
+ page: Page | undefined;
9
+ constructor(browserContext: BrowserContext, extensionUrl: string, config: WalletConfig);
10
+ navigate(): Promise<void>;
11
+ setup(): Promise<void>;
12
+ unlock(): Promise<void>;
13
+ importTokens(token: string): Promise<void>;
14
+ closePopover(): Promise<void>;
15
+ firstTimeSetup(): Promise<void>;
16
+ addNetwork(networkName: string, networkUrl: string, chainId: number, tokenSymbol: string): Promise<void>;
17
+ importKey(key: string): Promise<void>;
18
+ connectWallet(page: Page): Promise<void>;
19
+ assertTxAmount(page: Page, expectedAmount: string): Promise<void>;
20
+ confirmTx(page: Page): Promise<void>;
21
+ approveTokenTx(page: Page): Promise<void>;
22
+ useDefaultToApprove(page: Page): Promise<void>;
23
+ assertReceiptAddress(page: Page, expectedAddress: string): Promise<void>;
24
+ }
25
+ //# sourceMappingURL=metamask.page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metamask.page.d.ts","sourceRoot":"","sources":["../../../src/metamask/metamask.page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAQ,cAAc,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE9D,qBAAa,YAAa,YAAW,UAAU;IAI3C,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,YAAY;IACb,MAAM,EAAE,YAAY;IAL7B,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;gBAGb,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,MAAM,EACrB,MAAM,EAAE,YAAY;IAGvB,QAAQ;IAaR,KAAK;IAUL,MAAM;IAUN,YAAY,CAAC,KAAK,EAAE,MAAM;IAU1B,YAAY;IASZ,cAAc;IA+Bd,UAAU,CACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM;IA+Bf,SAAS,CAAC,GAAG,EAAE,MAAM;IAWrB,aAAa,CAAC,IAAI,EAAE,IAAI;IAQxB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM;IAQjD,SAAS,CAAC,IAAI,EAAE,IAAI;IAMpB,cAAc,CAAC,IAAI,EAAE,IAAI;IASzB,mBAAmB,CAAC,IAAI,EAAE,IAAI;IAS9B,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM;CAU/D"}
@@ -0,0 +1,154 @@
1
+ import expect from 'expect';
2
+ import { test } from '@playwright/test';
3
+ export class MetamaskPage {
4
+ constructor(browserContext, extensionUrl, config) {
5
+ this.browserContext = browserContext;
6
+ this.extensionUrl = extensionUrl;
7
+ this.config = config;
8
+ }
9
+ async navigate() {
10
+ await test.step('Navigate to metamask', async () => {
11
+ this.page = await this.browserContext.newPage();
12
+ await this.page.goto(this.extensionUrl + this.config.COMMON.EXTENSION_START_PATH);
13
+ await this.page.reload();
14
+ await this.page.waitForTimeout(1000);
15
+ await this.closePopover();
16
+ await this.unlock();
17
+ });
18
+ }
19
+ async setup() {
20
+ await test.step('Setup', async () => {
21
+ await this.navigate();
22
+ if (!this.page)
23
+ throw "Page isn't ready";
24
+ const firstTime = (await this.page.locator('data-testid=onboarding-welcome').count()) > 0;
25
+ if (firstTime)
26
+ await this.firstTimeSetup();
27
+ });
28
+ }
29
+ async unlock() {
30
+ await test.step('Unlock', async () => {
31
+ if (!this.page)
32
+ throw "Page isn't ready";
33
+ if ((await this.page.locator('id=password').count()) > 0) {
34
+ await this.page.fill('id=password', this.config.PASSWORD);
35
+ await this.page.click('text=Unlock');
36
+ }
37
+ });
38
+ }
39
+ async importTokens(token) {
40
+ await test.step('Import token', async () => {
41
+ await this.navigate();
42
+ if (!this.page)
43
+ throw "Page isn't ready";
44
+ await this.page.click("text='import tokens'");
45
+ await this.page.click('text=Custom token');
46
+ await this.page.type('id=custom-address', token);
47
+ });
48
+ }
49
+ async closePopover() {
50
+ await test.step('Close popover if exists', async () => {
51
+ if (!this.page)
52
+ throw "Page isn't ready";
53
+ const popover = (await this.page.getByTestId('popover-close').count()) > 0;
54
+ if (popover)
55
+ await this.page.click('data-testid=popover-close');
56
+ });
57
+ }
58
+ async firstTimeSetup() {
59
+ await test.step('First time setup', async () => {
60
+ if (!this.page)
61
+ throw "Page isn't ready";
62
+ await this.page.click('data-testid=onboarding-terms-checkbox');
63
+ await this.page.click('data-testid=onboarding-import-wallet');
64
+ await this.page.click('data-testid=metametrics-i-agree');
65
+ const inputs = this.page.locator('.import-srp__srp-word >> input[type=password]');
66
+ const seedWords = this.config.SECRET_PHRASE.split(' ');
67
+ for (let i = 0; i < seedWords.length; i++) {
68
+ await inputs.nth(i).fill(seedWords[i]);
69
+ }
70
+ await this.page.click('data-testid=import-srp-confirm');
71
+ await this.page.fill('data-testid=create-password-new', this.config.PASSWORD);
72
+ await this.page.fill('data-testid=create-password-confirm', this.config.PASSWORD);
73
+ await this.page.click('data-testid=create-password-terms');
74
+ await this.page.click('data-testid=create-password-import');
75
+ await this.page.click('data-testid=onboarding-complete-done');
76
+ await this.page.click('data-testid=pin-extension-next');
77
+ await this.page.click('data-testid=pin-extension-done');
78
+ await this.closePopover();
79
+ });
80
+ }
81
+ async addNetwork(networkName, networkUrl, chainId, tokenSymbol) {
82
+ await test.step('Add network', async () => {
83
+ if (!this.page)
84
+ throw "Page isn't ready";
85
+ await this.navigate();
86
+ await this.page.click('data-testid=account-options-menu-button');
87
+ await this.page.click('text=Settings');
88
+ await this.page.click("text='Networks'");
89
+ await this.page.click('text=Add a network');
90
+ await this.page.click("a :has-text('Add a network manually')");
91
+ await this.page.fill(".form-field :has-text('Network Name') >> input", networkName);
92
+ await this.page.fill(".form-field :has-text('New RPC URL') >> input", networkUrl);
93
+ await this.page.fill(".form-field :has-text('Chain ID') >> input", String(chainId));
94
+ await this.page.fill(".form-field :has-text('Currency symbol') >> input", tokenSymbol);
95
+ await this.page.click('text=Save');
96
+ await this.navigate();
97
+ });
98
+ }
99
+ async importKey(key) {
100
+ await test.step('Import key', async () => {
101
+ if (!this.page)
102
+ throw "Page isn't ready";
103
+ await this.navigate();
104
+ await this.page.click('data-testid=account-menu-icon');
105
+ await this.page.click('text=Import account');
106
+ await this.page.fill('id=private-key-box', key);
107
+ await this.page.click("text='Import'");
108
+ });
109
+ }
110
+ async connectWallet(page) {
111
+ await test.step('Connect wallet', async () => {
112
+ await page.click('text=Next');
113
+ await page.click('data-testid=page-container-footer-next');
114
+ await page.close();
115
+ });
116
+ }
117
+ async assertTxAmount(page, expectedAmount) {
118
+ await test.step('Assert TX Amount', async () => {
119
+ expect(await page.textContent('.currency-display-component__text')).toBe(expectedAmount);
120
+ });
121
+ }
122
+ async confirmTx(page) {
123
+ await test.step('Confirm TX', async () => {
124
+ await page.click('text=Confirm');
125
+ });
126
+ }
127
+ async approveTokenTx(page) {
128
+ await test.step('Approve token tx', async () => {
129
+ await this.useDefaultToApprove(page);
130
+ await page.click('text=Next');
131
+ await page.waitForTimeout(2000);
132
+ await page.click('text=Approve');
133
+ });
134
+ }
135
+ async useDefaultToApprove(page) {
136
+ await test.step('Click "Use default" button in case if it exist', async () => {
137
+ if (!page)
138
+ throw "Page isn't ready";
139
+ const useDefaultButton = (await page.locator('text=Use default').count()) > 0;
140
+ if (useDefaultButton)
141
+ await page.click('text=Use default');
142
+ });
143
+ }
144
+ async assertReceiptAddress(page, expectedAddress) {
145
+ await test.step('Assert receiptAddress/Contract', async () => {
146
+ await page.click('text=Liquid staked Ether 2.0');
147
+ const receiptAddress = await page
148
+ .locator(`text=${expectedAddress}`)
149
+ .innerText();
150
+ await page.click('button[data-testid=popover-close]');
151
+ expect(receiptAddress).toBe(expectedAddress);
152
+ });
153
+ }
154
+ }
@@ -0,0 +1,3 @@
1
+ export * from './phantom.constants';
2
+ export * from './phantom.page';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/phantom/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './phantom.constants';
2
+ export * from './phantom.page';
@@ -0,0 +1,3 @@
1
+ import { CommonWalletConfig } from '../wallets.constants';
2
+ export declare const PHANTOM_COMMON_CONFIG: CommonWalletConfig;
3
+ //# sourceMappingURL=phantom.constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phantom.constants.d.ts","sourceRoot":"","sources":["../../../src/phantom/phantom.constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,eAAO,MAAM,qBAAqB,EAAE,kBAOnC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export const PHANTOM_COMMON_CONFIG = {
2
+ WALLET_NAME: 'phantom',
3
+ RPC_URL_PATTERN: '',
4
+ STORE_EXTENSION_ID: 'bfnaelmomeimhlpmgjnjophhpkkoljpa',
5
+ CONNECT_BUTTON_NAME: 'Phantom',
6
+ SIMPLE_CONNECT: false,
7
+ EXTENSION_START_PATH: '/onboarding.html',
8
+ };
@@ -0,0 +1,21 @@
1
+ import { WalletConfig } from '../wallets.constants';
2
+ import { WalletPage } from '../wallet.page';
3
+ import { BrowserContext, Page } from '@playwright/test';
4
+ export declare class PhantomPage implements WalletPage {
5
+ private browserContext;
6
+ private extensionUrl;
7
+ config: WalletConfig;
8
+ page: Page | undefined;
9
+ constructor(browserContext: BrowserContext, extensionUrl: string, config: WalletConfig);
10
+ navigate(): Promise<void>;
11
+ setup(): Promise<void>;
12
+ unlock(): Promise<void>;
13
+ firstTimeSetup(): Promise<void>;
14
+ importKey(key: string): Promise<void>;
15
+ connectWallet(page: Page): Promise<void>;
16
+ assertTxAmount(page: Page, expectedAmount: string): Promise<void>;
17
+ confirmTx(page: Page): Promise<void>;
18
+ assertReceiptAddress(page: Page, expectedAddress: string): Promise<void>;
19
+ addNetwork(networkName: string, networkUrl: string, chainId: number, tokenSymbol: string): Promise<void>;
20
+ }
21
+ //# sourceMappingURL=phantom.page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phantom.page.d.ts","sourceRoot":"","sources":["../../../src/phantom/phantom.page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAQ,cAAc,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE9D,qBAAa,WAAY,YAAW,UAAU;IAI1C,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,YAAY;IACb,MAAM,EAAE,YAAY;IAL7B,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;gBAGb,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,MAAM,EACrB,MAAM,EAAE,YAAY;IAGvB,QAAQ;IAUR,KAAK;IAiBL,MAAM;IAUN,cAAc;IAwBd,SAAS,CAAC,GAAG,EAAE,MAAM;IAerB,aAAa,CAAC,IAAI,EAAE,IAAI;IAMxB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM;IAQjD,SAAS,CAAC,IAAI,EAAE,IAAI;IAOpB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM;IAIxD,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAC/F"}
@@ -0,0 +1,96 @@
1
+ import expect from 'expect';
2
+ import { test } from '@playwright/test';
3
+ export class PhantomPage {
4
+ constructor(browserContext, extensionUrl, config) {
5
+ this.browserContext = browserContext;
6
+ this.extensionUrl = extensionUrl;
7
+ this.config = config;
8
+ }
9
+ async navigate() {
10
+ await test.step('Navigate to phantom', async () => {
11
+ this.page = await this.browserContext.newPage();
12
+ await this.page.goto(this.extensionUrl + '/popup.html');
13
+ await this.page.reload();
14
+ await this.page.waitForTimeout(1000);
15
+ await this.unlock();
16
+ });
17
+ }
18
+ async setup() {
19
+ await test.step('Setup', async () => {
20
+ // added explicit route to /onboarding due to unexpected first time route from /popup.html to /onboarding - page is close
21
+ this.page = await this.browserContext.newPage();
22
+ await this.page.goto(this.extensionUrl + '/onboarding.html');
23
+ if (!this.page)
24
+ throw "Page isn't ready";
25
+ await this.page.waitForSelector('button:has-text("I already have a wallet")');
26
+ const firstTime = (await this.page
27
+ .locator('button:has-text("I already have a wallet")')
28
+ .count()) > 0;
29
+ if (firstTime)
30
+ await this.firstTimeSetup();
31
+ });
32
+ }
33
+ async unlock() {
34
+ await test.step('Unlock', async () => {
35
+ if (!this.page)
36
+ throw "Page isn't ready";
37
+ if ((await this.page.locator('id=password').count()) > 0) {
38
+ await this.page.fill('input[name=password]', this.config.PASSWORD);
39
+ await this.page.click('text=Unlock');
40
+ }
41
+ });
42
+ }
43
+ async firstTimeSetup() {
44
+ await test.step('First time setup', async () => {
45
+ if (!this.page)
46
+ throw "Page isn't ready";
47
+ await this.page.click('button:has-text("I already have a wallet")');
48
+ const inputs = this.page.locator('input[data-testid]');
49
+ const seedWords = this.config.SECRET_PHRASE.split(' ');
50
+ for (let i = 0; i < seedWords.length; i++) {
51
+ await inputs.nth(i).fill(seedWords[i]);
52
+ }
53
+ await this.page.click('button[type=submit]');
54
+ await this.page.waitForSelector("button[data-testid='onboarding-form-submit-button']");
55
+ await this.page.click("button[data-testid='onboarding-form-submit-button']");
56
+ await this.page.fill('input[name=password]', this.config.PASSWORD);
57
+ await this.page.fill('input[name=confirmPassword]', this.config.PASSWORD);
58
+ await this.page.click('input[type=checkbox]');
59
+ await this.page.click('button:has-text("Continue")');
60
+ await this.page.click('button:has-text("Continue")');
61
+ });
62
+ }
63
+ async importKey(key) {
64
+ await test.step('Import key', async () => {
65
+ if (!this.page)
66
+ throw "Page isn't ready";
67
+ await this.navigate();
68
+ await this.page.click('text=W1');
69
+ await this.page.click('div:has-text("Wallet 1")');
70
+ await this.page.click('button:has-text("Add / Connect Wallet")');
71
+ await this.page.click('div[data-testid="add-account-create-new-wallet-button"]');
72
+ await this.page.fill('textarea', key);
73
+ await this.page.click('button:has-text("Import")');
74
+ });
75
+ }
76
+ async connectWallet(page) {
77
+ await test.step('Connect wallet', async () => {
78
+ await page.click('button:has-text("Connect")');
79
+ });
80
+ }
81
+ async assertTxAmount(page, expectedAmount) {
82
+ await test.step('Assert TX Amount', async () => {
83
+ expect(await page.locator(`text=Send ${expectedAmount} SOL`).count()).toBe(1);
84
+ });
85
+ }
86
+ async confirmTx(page) {
87
+ await test.step('Confirm TX', async () => {
88
+ await page.click('text=Approve');
89
+ });
90
+ }
91
+ // eslint-disable-next-line
92
+ async assertReceiptAddress(page, expectedAddress) {
93
+ }
94
+ // eslint-disable-next-line
95
+ async addNetwork(networkName, networkUrl, chainId, tokenSymbol) { }
96
+ }
@@ -0,0 +1,3 @@
1
+ export * from './taho.constants';
2
+ export * from './taho.page';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/taho/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './taho.constants';
2
+ export * from './taho.page';
@@ -0,0 +1,3 @@
1
+ import { CommonWalletConfig } from '../wallets.constants';
2
+ export declare const TAHO_COMMON_CONFIG: CommonWalletConfig;
3
+ //# sourceMappingURL=taho.constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taho.constants.d.ts","sourceRoot":"","sources":["../../../src/taho/taho.constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,eAAO,MAAM,kBAAkB,EAAE,kBAOhC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export const TAHO_COMMON_CONFIG = {
2
+ WALLET_NAME: 'taho',
3
+ RPC_URL_PATTERN: 'https://mainnet.infura.io/v3/**',
4
+ STORE_EXTENSION_ID: 'eajafomhmkipbjmfmhebemolkcicgfmd',
5
+ CONNECT_BUTTON_NAME: 'Taho',
6
+ SIMPLE_CONNECT: false,
7
+ EXTENSION_START_PATH: '/popup.html',
8
+ };
@@ -0,0 +1,20 @@
1
+ import { WalletConfig } from '../wallets.constants';
2
+ import { WalletPage } from '../wallet.page';
3
+ import { BrowserContext, Page } from '@playwright/test';
4
+ export declare class TahoPage implements WalletPage {
5
+ private browserContext;
6
+ private extensionUrl;
7
+ config: WalletConfig;
8
+ page: Page | undefined;
9
+ constructor(browserContext: BrowserContext, extensionUrl: string, config: WalletConfig);
10
+ navigate(): Promise<void>;
11
+ setup(): Promise<void>;
12
+ firstTimeSetup(): Promise<void>;
13
+ importKey(key: string): Promise<void>;
14
+ connectWallet(page: Page): Promise<void>;
15
+ assertTxAmount(page: Page, expectedAmount: string): Promise<void>;
16
+ confirmTx(page: Page): Promise<void>;
17
+ assertReceiptAddress(page: Page, expectedAddress: string): Promise<void>;
18
+ addNetwork(networkName: string, networkUrl: string, chainId: number, tokenSymbol: string): Promise<void>;
19
+ }
20
+ //# sourceMappingURL=taho.page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taho.page.d.ts","sourceRoot":"","sources":["../../../src/taho/taho.page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAQ,cAAc,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE9D,qBAAa,QAAS,YAAW,UAAU;IAIvC,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,YAAY;IACb,MAAM,EAAE,YAAY;IAL7B,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;gBAGb,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,MAAM,EACrB,MAAM,EAAE,YAAY;IAGvB,QAAQ;IAWR,KAAK;IAYL,cAAc;IAmBd,SAAS,CAAC,GAAG,EAAE,MAAM;IAYrB,aAAa,CAAC,IAAI,EAAE,IAAI;IASxB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM;IAQjD,SAAS,CAAC,IAAI,EAAE,IAAI;IAOpB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM;IAGxD,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAC/F"}