diff --git a/README.md b/README.md index f68949d..fa3741e 100644 --- a/README.md +++ b/README.md @@ -236,17 +236,7 @@ pnpm i --global parcel ``` ```bash -# Using ethers.js -parcel tests/testEthersJs.html - -# Using window.ethereum -parcel tests/testWindowEthereum.html -``` - -Then open a server, for example with [`serve`](https://github.com/vercel/serve) - -```bash -serve dist/ -p 5555 +parcel tests/browser/index.html ``` ## License diff --git a/package.json b/package.json index 053f6b0..24c28e2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nemeos-sdk", - "version": "0.1.3", + "version": "0.1.4", "type": "module", "description": "Nemeos SDK to facilitate integration with the Nemeos platform", "license": "MIT", @@ -40,6 +40,6 @@ "ofetch": "^1.3.4" }, "devDependencies": { - "typescript": "^5.5.3" + "typescript": "^5.5.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 92cbbd3..b049898 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,8 +16,8 @@ importers: version: 1.3.4 devDependencies: typescript: - specifier: ^5.5.3 - version: 5.5.3 + specifier: ^5.5.4 + version: 5.5.4 packages: @@ -53,13 +53,13 @@ packages: tslib@2.4.0: resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} - typescript@5.5.3: - resolution: {integrity: sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==} + typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true - ufo@1.5.3: - resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} + ufo@1.5.4: + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} ws@8.17.1: resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} @@ -108,12 +108,12 @@ snapshots: dependencies: destr: 2.0.3 node-fetch-native: 1.6.4 - ufo: 1.5.3 + ufo: 1.5.4 tslib@2.4.0: {} - typescript@5.5.3: {} + typescript@5.5.4: {} - ufo@1.5.3: {} + ufo@1.5.4: {} ws@8.17.1: {} diff --git a/tests/browser/index.html b/tests/browser/index.html new file mode 100644 index 0000000..97092c7 --- /dev/null +++ b/tests/browser/index.html @@ -0,0 +1,31 @@ + + + + + + Document + + +

Nemeos SDK Test

+ +
+ Is wallet connected? + --- +
+ +
+ +
+
+ +
+
+ +
+
+ +
+ + + + diff --git a/tests/browser/script.ts b/tests/browser/script.ts new file mode 100644 index 0000000..ec46932 --- /dev/null +++ b/tests/browser/script.ts @@ -0,0 +1,90 @@ +import * as ethers from 'ethers' +import { getBrowserProvider, NemeosSDK } from '../../src/index.js' + +declare global { + interface Window { + ethereum: any + } +} + +let signer: ethers.Signer +let nemeosSdk: NemeosSDK +let nemeosPoolBuyOpenSeaClient: ReturnType + +const nemeosPoolAddress = '0x812db15b8Bb43dBA89042eA8b919740C23aD48a3' +const cyberKongzAddress = '0x15cd1cfCd48C06cfC44D433D66C7a9fE06b2C2c3' + +export async function isMetamaskConnected() { + if (!window.ethereum) return false + + try { + const _provider = new ethers.BrowserProvider(window.ethereum) + const accounts = await _provider.send('eth_accounts', []) + const accounts2 = await window.ethereum.request({ method: 'eth_accounts' }) + + if (accounts.length !== accounts2.length || accounts[0] !== accounts2[0]) { + throw new Error('Metamask accounts are not the same when using ethers.js and window.ethereum.request') + } + + console.log('[isMetamaskConnected] Metamask is connected', { accounts }) + return accounts && accounts.length > 0 + } catch (error) { + console.error('[isMetamaskConnected] There was an error while trying to connect to Metamask isMetamaskConnected()', { error }) + return false + } +} + +function setWalletConnected(bool: boolean) { + document.getElementById('isConnected')!.innerText = `${bool}` +} + +async function connectWallet() { + const provider1 = new ethers.BrowserProvider(window.ethereum) + const signer1 = await provider1.getSigner() + const address1 = await signer1.getAddress() + + const provider2 = getBrowserProvider(window.ethereum) + const signer2 = await provider2.getSigner() + const address2 = await signer2.getAddress() + + if (address1 !== address2) { + throw new Error('Addresses are not the same when using ethers.js and window.ethereum.request') + } + + signer = signer1 + nemeosSdk = new NemeosSDK(signer) + nemeosPoolBuyOpenSeaClient = nemeosSdk.getNemeosPoolClient({ + nemeosPoolAddress, + nftCollectionAddress: cyberKongzAddress, + nemeosPoolMode: NemeosSDK.NemeosPoolMode.BuyOpenSea, + }) + + setWalletConnected(true) +} + +async function startLoan() { + await nemeosPoolBuyOpenSeaClient.startLoan(224, 90) +} +async function retrieveLoan() { + await nemeosPoolBuyOpenSeaClient.retrieveLoan(224) +} +async function payNextLoanStep() { + await nemeosPoolBuyOpenSeaClient.payNextLoanStep(224) +} + +function addEventListeners() { + document.getElementById('connectWallet')!.addEventListener('click', connectWallet) + document.getElementById('startLoan')!.addEventListener('click', startLoan) + document.getElementById('retrieveLoan')!.addEventListener('click', retrieveLoan) + document.getElementById('payNextLoanStep')!.addEventListener('click', payNextLoanStep) +} + +document.addEventListener('DOMContentLoaded', async () => { + addEventListeners() + if (await isMetamaskConnected()) { + setWalletConnected(true) + connectWallet() + } else { + setWalletConnected(false) + } +}) diff --git a/tests/testEthersJs.html b/tests/testEthersJs.html deleted file mode 100644 index 35a9313..0000000 --- a/tests/testEthersJs.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - Document - - -

Nemeos SDK Test

- -
- Is wallet connected? - --- -
- -
- -
-
- -
-
- -
-
- -
- - - - diff --git a/tests/testWindowEthereum.html b/tests/testWindowEthereum.html deleted file mode 100644 index 18df7c1..0000000 --- a/tests/testWindowEthereum.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - Document - - -

Nemeos SDK Test

- -
- Is wallet connected? - --- -
- -
- -
-
- -
-
- -
-
- -
- - - -