From 47ed191109b5d62cbc34422a0b41d485a2d26745 Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 19 Mar 2024 13:13:38 -0300 Subject: [PATCH 01/85] fix --- packages/bako-safe/package.json | 29 ++ packages/bako-safe/src/BakoSafeConnector.tsx | 230 +++++++++++ packages/bako-safe/src/DAPPWindow.ts | 33 ++ packages/bako-safe/src/index.ts | 2 + packages/bako-safe/src/types.ts | 24 ++ packages/bako-safe/tsconfig.json | 9 + packages/bako-safe/tsup.config.js | 9 + packages/connectors/src/defaultConnectors.ts | 7 +- pnpm-lock.yaml | 394 ++++++++++++++++++- 9 files changed, 727 insertions(+), 10 deletions(-) create mode 100644 packages/bako-safe/package.json create mode 100644 packages/bako-safe/src/BakoSafeConnector.tsx create mode 100644 packages/bako-safe/src/DAPPWindow.ts create mode 100644 packages/bako-safe/src/index.ts create mode 100644 packages/bako-safe/src/types.ts create mode 100644 packages/bako-safe/tsconfig.json create mode 100644 packages/bako-safe/tsup.config.js diff --git a/packages/bako-safe/package.json b/packages/bako-safe/package.json new file mode 100644 index 00000000..b7b98b53 --- /dev/null +++ b/packages/bako-safe/package.json @@ -0,0 +1,29 @@ +{ + "name": "@fuel-connectors/bako-safe", + "version": "0.0.1", + "private": true, + "types": "./dist/index.d.ts", + "exports": { + ".": "./src/index.ts" + }, + "scripts": { + "build": "tsup ./src/BakoSafeConnector.tsx --dts-only", + "build:watch": "tsup --watch --dts-only", + "ts:check": "tsc --noEmit", + "test": "vitest" + }, + "peerDependencies": { + "fuels": ">=0.77.0", + "socket.io-client": "^4.7.2", + "axios": "^1.5.1", + "uuid": "^9.0.1" + }, + "devDependencies": { + "events": "3.3.0", + "fuels": "0.77.0", + "tsup": "8.0.2", + "typescript": "5.4.2", + "undici": "6.9.0", + "web-streams-polyfill": "4.0.0" + } +} diff --git a/packages/bako-safe/src/BakoSafeConnector.tsx b/packages/bako-safe/src/BakoSafeConnector.tsx new file mode 100644 index 00000000..049472b5 --- /dev/null +++ b/packages/bako-safe/src/BakoSafeConnector.tsx @@ -0,0 +1,230 @@ +import axios, { type AxiosInstance } from 'axios'; +import { + type Asset, + FuelConnector, + FuelConnectorEventTypes, + type JsonAbi, + type TransactionRequestLike, +} from 'fuels'; +import { type Socket, io } from 'socket.io-client'; + +import { DAppWindow } from './DAPPWindow'; +import { BAKOSAFEConnectorEvents } from './types'; + +const APP_NAME = 'Bsafe'; +const APP_DESCRIPTION = + 'BSafe is a connector to app.bsafe.pro, a non-custodial vault for your crypto assets.'; +const APP_IMAGE_DARK = 'https://app.bsafe.pro/assets/logo-294a5e40.svg'; +const APP_IMAGE_LIGHT = 'https://app.bsafe.pro/assets/logoDark-97c52b43.svg'; + +const APP_BSAFE_URL = 'https://app.bsafe.pro/'; +const API_URL = 'https://api-multsig.infinitybase.com'; + +type FuelABI = JsonAbi; +type Network = { + url: string; + chainId: number; +}; + +export class BakoSafeConnector extends FuelConnector { + name = APP_NAME; + metadata = { + image: { + light: APP_IMAGE_LIGHT, + dark: APP_IMAGE_DARK, + }, + install: { + action: APP_BSAFE_URL, + link: APP_BSAFE_URL, + description: APP_DESCRIPTION, + }, + }; + installed = true; + connected = false; + + events = { + ...FuelConnectorEventTypes, + ...BAKOSAFEConnectorEvents, + }; + + private readonly socket: Socket; + private readonly sessionId: string; + private readonly api: AxiosInstance = axios.create({ + baseURL: API_URL, + }); + private dAppWindow: DAppWindow; + + constructor() { + super(); + let sessionId: string = localStorage.getItem('sessionId') || ''; + if (!sessionId) { + sessionId = crypto.randomUUID(); + localStorage.setItem('sessionId', sessionId); + } + + this.sessionId = sessionId; + + this.socket = io(API_URL, { + auth: { + username: `${'[WALLET]'}`, + data: new Date(), + sessionId: this.sessionId, + origin: window.origin, + }, + }); + + this.dAppWindow = new DAppWindow({ + sessionId, + name: document.title, + origin: window.origin, + popup: { + top: 0, + left: 2560, + width: 450, + height: 1280, + }, + }); + + this.socket.on(BAKOSAFEConnectorEvents.DEFAULT, (message) => { + this.emit(message.type, ...message.data); + }); + } + + async connect() { + return new Promise((resolve) => { + const dappWindow = this.dAppWindow.open('/'); + dappWindow?.addEventListener('close', () => { + resolve(false); + }); + + // @ts-ignore + this.on(BSAFEConnectorEvents.CONNECTION, (connection: boolean) => { + this.connected = connection; + resolve(connection); + }); + }); + } + + /* + * @param {string} address - The address to sign the transaction + * @param {Transaction} transaction - The transaction to send + * + * @returns {string} - The transaction id + */ + async sendTransaction( + _address: string, + _transaction: TransactionRequestLike, + ) { + return new Promise((resolve, reject) => { + const dappWindow = this.dAppWindow.open('/dapp/transaction'); + dappWindow?.addEventListener('close', () => { + reject('closed'); + }); + // @ts-ignore + this.on(BSAFEConnectorEvents.POPUP_TRANSFER, () => { + this.socket.emit(BAKOSAFEConnectorEvents.TRANSACTION_SEND, { + to: `${this.sessionId}:${window.origin}`, + content: { + address: _address, + transaction: _transaction, + }, + }); + }); + // @ts-ignore + this.on(BSAFEConnectorEvents.TRANSACTION_CREATED, (content) => { + resolve(`0x${content}`); + }); + }); + } + + async ping() { + return true; + } + + //todo: make a file on sdk, to return this object + async version() { + return { + app: '0.0.1', + network: '>=0.12.4', + }; + } + + async isConnected() { + const { data } = await this.api.get(`/connections/${this.sessionId}/state`); + + return data; + } + + async accounts() { + const { data } = await this.api.get( + `/connections/${this.sessionId}/accounts`, + ); + return data; + } + + async currentAccount() { + const { data } = await this.api.get( + `/connections/${this.sessionId}/currentAccount`, + ); + return data; + } + + async disconnect() { + this.socket.emit(BAKOSAFEConnectorEvents.AUTH_DISCONECT_DAPP, { + to: `${this.sessionId}:${window.origin}`, + content: { + sessionId: this.sessionId, + }, + }); + this.emit(BAKOSAFEConnectorEvents.CONNECTION, false); + this.emit(BAKOSAFEConnectorEvents.ACCOUNTS, []); + this.emit(BAKOSAFEConnectorEvents.CURRENT_ACCOUNT, null); + return false; + } + + async currentNetwork() { + const { data } = await this.api.get( + `/connections/${this.sessionId}/currentNetwork`, + ); + return data; + } + + async assets(): Promise { + return []; + } + + async signMessage(_address: string, _message: string): Promise { + throw new Error('Method not implemented.'); + } + + async addAssets(_assets: Asset[]): Promise { + throw new Error('Method not implemented.'); + } + + async addAsset(_assets: Asset): Promise { + throw new Error('Method not implemented.'); + } + + async addNetwork(_networkUrl: string): Promise { + throw new Error('Method not implemented.'); + } + + async selectNetwork(_network: Network): Promise { + throw new Error('Method not implemented.'); + } + async networks(): Promise> { + throw new Error('Method not implemented.'); + } + + async addABI(_contractId: string, _abi: FuelABI): Promise { + throw new Error('Method not implemented.'); + } + + async getABI(_id: string): Promise { + throw new Error('Method not implemented.'); + } + + async hasABI(_id: string): Promise { + throw new Error('Method not implemented.'); + } +} diff --git a/packages/bako-safe/src/DAPPWindow.ts b/packages/bako-safe/src/DAPPWindow.ts new file mode 100644 index 00000000..e9273d78 --- /dev/null +++ b/packages/bako-safe/src/DAPPWindow.ts @@ -0,0 +1,33 @@ +const APP_BSAFE_URL = 'https://app.bsafe.pro/'; + +export class DAppWindow { + BSAFEAPP = APP_BSAFE_URL; + constructor( + private config: { + popup: { + top: number; + left: number; + width: number; + height: number; + }; + sessionId: string; + name: string; + origin: string; + }, + ) {} + + open(method: string) { + const { popup } = this.config; + + return window.open( + `${this.BSAFEAPP}${method}${this.queryString}`, + 'popup', + `left=${popup.left},top=${popup.top},width=${popup.width},height=${popup.height}`, + ); + } + + private get queryString() { + const { origin, name, sessionId } = this.config; + return `?sessionId=${sessionId}&name=${name}&origin=${origin}`; + } +} diff --git a/packages/bako-safe/src/index.ts b/packages/bako-safe/src/index.ts new file mode 100644 index 00000000..dbeaf0d7 --- /dev/null +++ b/packages/bako-safe/src/index.ts @@ -0,0 +1,2 @@ +export * from './types'; +export * from './BakoSafeConnector'; diff --git a/packages/bako-safe/src/types.ts b/packages/bako-safe/src/types.ts new file mode 100644 index 00000000..f382ff7a --- /dev/null +++ b/packages/bako-safe/src/types.ts @@ -0,0 +1,24 @@ +enum BAKOSAFEConnectorEvents { + //accounts + ACCOUNTS = 'accounts', + CURRENT_ACCOUNT = 'currentAccount', + + // transfer + TRANSACTION_CREATED = '[TRANSACTION_CREATED]', + TRANSACTION_SEND = '[TRANSACTION_SEND]', + + //popup auth + AUTH_CONFIRMED = '[AUTH_CONFIRMED]', + AUTH_REJECTED = '[AUTH_REJECTED]', + AUTH_DISCONECT_DAPP = '[AUTH_DISCONECT_DAPP]', + AUTH_DISCONECT_CONFIRM = '[AUTH_DISCONECT_CONFIRM]', + + //connections + CONNECTION = 'connection', + POPUP_TRANSFER = '[POPUP_TRANSFER]_connected', + CONNECTED_NETWORK = '[CONNECTED_NETWORK]', + + //default + DEFAULT = 'message', +} +export { BAKOSAFEConnectorEvents }; diff --git a/packages/bako-safe/tsconfig.json b/packages/bako-safe/tsconfig.json new file mode 100644 index 00000000..85ef6b99 --- /dev/null +++ b/packages/bako-safe/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist", + "baseUrl": ".", + "rootDir": "." + }, + "exclude": ["dist"] +} diff --git a/packages/bako-safe/tsup.config.js b/packages/bako-safe/tsup.config.js new file mode 100644 index 00000000..8e0c2622 --- /dev/null +++ b/packages/bako-safe/tsup.config.js @@ -0,0 +1,9 @@ +import baseConfig from '@fuels/tsup-config'; +import { defineConfig } from 'tsup'; + +export default defineConfig((options) => ({ + ...baseConfig(options, { withReact: false }), + format: ['cjs'], + external: ['fuels'], + entry: ['src/index.ts'], +})); diff --git a/packages/connectors/src/defaultConnectors.ts b/packages/connectors/src/defaultConnectors.ts index 38581b4f..586d207e 100644 --- a/packages/connectors/src/defaultConnectors.ts +++ b/packages/connectors/src/defaultConnectors.ts @@ -1,3 +1,4 @@ +import { BakoSafeConnector } from '@fuel-connectors/bako-safe'; import { FuelWalletDevelopmentConnector } from '@fuel-connectors/fuel-development-wallet'; import { FuelWalletConnector } from '@fuel-connectors/fuel-wallet'; import { FueletWalletConnector } from '@fuel-connectors/fuelet-wallet'; @@ -10,7 +11,11 @@ type DefaultConnectors = { export function defaultConnectors({ devMode, }: DefaultConnectors = {}): Array { - const connectors = [new FuelWalletConnector(), new FueletWalletConnector()]; + const connectors = [ + new FuelWalletConnector(), + new FueletWalletConnector(), + new BakoSafeConnector(), + ]; if (devMode) { connectors.push(new FuelWalletDevelopmentConnector()); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4aff2359..51db439c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,10 +19,10 @@ importers: version: 2.27.1 '@fuels/ts-config': specifier: 0.17.0 - version: 0.17.0(typescript@5.4.2) + version: 0.17.0(typescript@5.2.2) '@fuels/tsup-config': specifier: 0.17.0 - version: 0.17.0(tsup@8.0.2) + version: 0.17.0(tsup@7.2.0) '@vitest/coverage-v8': specifier: 1.4.0 version: 1.4.0(vitest@1.4.0) @@ -79,6 +79,40 @@ importers: specifier: 5.1.6 version: 5.1.6 + packages/bako-safe: + dependencies: + axios: + specifier: ^1.5.1 + version: 1.6.8 + json-rpc-2.0: + specifier: 1.7.0 + version: 1.7.0 + socket.io-client: + specifier: ^4.7.2 + version: 4.7.5 + uuid: + specifier: ^9.0.1 + version: 9.0.1 + devDependencies: + events: + specifier: 3.3.0 + version: 3.3.0 + fuels: + specifier: 0.77.0 + version: 0.77.0(dexie@3.2.6) + tsup: + specifier: 8.0.2 + version: 8.0.2(typescript@5.4.2) + typescript: + specifier: 5.4.2 + version: 5.4.2 + undici: + specifier: 6.9.0 + version: 6.9.0 + web-streams-polyfill: + specifier: 4.0.0 + version: 4.0.0 + packages/connectors: dependencies: json-rpc-2.0: @@ -715,6 +749,15 @@ packages: requiresBuild: true optional: true + /@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm64@0.19.12: resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} engines: {node: '>=12'} @@ -723,6 +766,15 @@ packages: requiresBuild: true optional: true + /@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm@0.19.12: resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} engines: {node: '>=12'} @@ -731,6 +783,15 @@ packages: requiresBuild: true optional: true + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-x64@0.19.12: resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} engines: {node: '>=12'} @@ -739,6 +800,15 @@ packages: requiresBuild: true optional: true + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-arm64@0.19.12: resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} engines: {node: '>=12'} @@ -747,6 +817,15 @@ packages: requiresBuild: true optional: true + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-x64@0.19.12: resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} engines: {node: '>=12'} @@ -755,6 +834,15 @@ packages: requiresBuild: true optional: true + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-arm64@0.19.12: resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} engines: {node: '>=12'} @@ -763,6 +851,15 @@ packages: requiresBuild: true optional: true + /@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-x64@0.19.12: resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} engines: {node: '>=12'} @@ -771,6 +868,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm64@0.19.12: resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} engines: {node: '>=12'} @@ -779,6 +885,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm@0.19.12: resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} engines: {node: '>=12'} @@ -787,6 +902,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ia32@0.19.12: resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} engines: {node: '>=12'} @@ -795,6 +919,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-loong64@0.19.12: resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} engines: {node: '>=12'} @@ -803,6 +936,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-mips64el@0.19.12: resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} engines: {node: '>=12'} @@ -811,6 +953,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ppc64@0.19.12: resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} engines: {node: '>=12'} @@ -819,6 +970,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-riscv64@0.19.12: resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} engines: {node: '>=12'} @@ -827,6 +987,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-s390x@0.19.12: resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} engines: {node: '>=12'} @@ -835,6 +1004,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-x64@0.19.12: resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} engines: {node: '>=12'} @@ -843,6 +1021,15 @@ packages: requiresBuild: true optional: true + /@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/netbsd-x64@0.19.12: resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} engines: {node: '>=12'} @@ -851,6 +1038,15 @@ packages: requiresBuild: true optional: true + /@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/openbsd-x64@0.19.12: resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} engines: {node: '>=12'} @@ -859,6 +1055,15 @@ packages: requiresBuild: true optional: true + /@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + /@esbuild/sunos-x64@0.19.12: resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} engines: {node: '>=12'} @@ -867,6 +1072,15 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-arm64@0.19.12: resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} engines: {node: '>=12'} @@ -875,6 +1089,15 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-ia32@0.19.12: resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} engines: {node: '>=12'} @@ -883,6 +1106,15 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-x64@0.19.12: resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} engines: {node: '>=12'} @@ -1170,15 +1402,15 @@ packages: - react-dom dev: false - /@fuels/ts-config@0.17.0(typescript@5.4.2): + /@fuels/ts-config@0.17.0(typescript@5.2.2): resolution: {integrity: sha512-OoEM1JHFCzWlOjsy/KG0T2RsQ8Z2uQVN8Y6qlszvZO0WzbLa8mJf1gFDayx0K0sv6SyABF0c17anNgsYf7ZM8Q==} peerDependencies: typescript: 5.2.2 dependencies: - typescript: 5.4.2 + typescript: 5.2.2 dev: true - /@fuels/tsup-config@0.17.0(tsup@8.0.2): + /@fuels/tsup-config@0.17.0(tsup@7.2.0): resolution: {integrity: sha512-+ArWpkcWz9FLFCLgsHoV2qeAqpML5mnfkhM1rAqEJd12jfo7n/BUHTGMylt6a0mUdstfyFblbI3VUBQy7bgMmg==} peerDependencies: tsup: ^7.2.0 @@ -1186,7 +1418,7 @@ packages: dotenv: 16.4.5 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - tsup: 8.0.2(typescript@5.4.2) + tsup: 7.2.0(typescript@5.2.2) dev: true /@fuels/vm-asm@0.42.1: @@ -1537,12 +1769,10 @@ packages: resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: '@types/react': '*' - react: '*' + react: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': optional: true - react: - optional: true dependencies: '@babel/runtime': 7.24.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.67)(react@18.2.0) @@ -2073,6 +2303,16 @@ packages: possible-typed-array-names: 1.0.0 dev: true + /axios@1.6.8: + resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} + dependencies: + follow-redirects: 1.15.6 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: false + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -2154,6 +2394,16 @@ packages: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true + /bundle-require@4.0.2(esbuild@0.18.20): + resolution: {integrity: sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.17' + dependencies: + esbuild: 0.18.20 + load-tsconfig: 0.2.5 + dev: true + /bundle-require@4.0.2(esbuild@0.19.12): resolution: {integrity: sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2650,6 +2900,20 @@ packages: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} + /engine.io-client@6.5.3: + resolution: {integrity: sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==} + dependencies: + '@socket.io/component-emitter': 3.1.0 + debug: 4.3.4 + engine.io-parser: 5.2.2 + ws: 8.11.0 + xmlhttprequest-ssl: 2.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + /engine.io-parser@5.2.2: resolution: {integrity: sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==} engines: {node: '>=10.0.0'} @@ -2830,6 +3094,36 @@ packages: is-symbol: 1.0.4 dev: true + /esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + dev: true + /esbuild@0.19.12: resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} engines: {node: '>=12'} @@ -3053,6 +3347,15 @@ packages: combined-stream: 1.0.8 mime-types: 2.1.35 + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + /fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} @@ -4409,6 +4712,10 @@ packages: /property-expr@2.0.6: resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==} + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: false + /pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} dev: true @@ -4632,6 +4939,14 @@ packages: dependencies: glob: 7.2.3 + /rollup@3.29.4: + resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.3 + dev: true + /rollup@4.13.0: resolution: {integrity: sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -4821,6 +5136,20 @@ packages: - supports-color - utf-8-validate + /socket.io-client@4.7.5: + resolution: {integrity: sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==} + engines: {node: '>=10.0.0'} + dependencies: + '@socket.io/component-emitter': 3.1.0 + debug: 4.3.4 + engine.io-client: 6.5.3 + socket.io-parser: 4.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + /socket.io-parser@4.2.4: resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} engines: {node: '>=10.0.0'} @@ -5181,6 +5510,42 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + /tsup@7.2.0(typescript@5.2.2): + resolution: {integrity: sha512-vDHlczXbgUvY3rWvqFEbSqmC1L7woozbzngMqTtL2PGBODTtWlRwGDDawhvWzr5c1QjKe4OAKqJGfE1xeXUvtQ==} + engines: {node: '>=16.14'} + hasBin: true + peerDependencies: + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.1.0' + peerDependenciesMeta: + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + dependencies: + bundle-require: 4.0.2(esbuild@0.18.20) + cac: 6.7.14 + chokidar: 3.6.0 + debug: 4.3.4 + esbuild: 0.18.20 + execa: 5.1.1 + globby: 11.1.0 + joycon: 3.1.1 + postcss-load-config: 4.0.2 + resolve-from: 5.0.0 + rollup: 3.29.4 + source-map: 0.8.0-beta.0 + sucrase: 3.35.0 + tree-kill: 1.2.2 + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + - ts-node + dev: true + /tsup@8.0.2(typescript@5.4.2): resolution: {integrity: sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ==} engines: {node: '>=18'} @@ -5369,6 +5734,12 @@ packages: possible-typed-array-names: 1.0.0 dev: true + /typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + /typescript@5.4.2: resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} engines: {node: '>=14.17'} @@ -5751,6 +6122,11 @@ packages: utf-8-validate: optional: true + /xmlhttprequest-ssl@2.0.0: + resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==} + engines: {node: '>=0.4.0'} + dev: false + /y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} dev: true From 39f632412d741e2b7b872193cd420f65b45f01e7 Mon Sep 17 00:00:00 2001 From: guimroque Date: Wed, 20 Mar 2024 14:01:33 -0300 Subject: [PATCH 02/85] feat(connector): bako safe --- package.json | 5 ++ packages/bako-safe/package.json | 5 +- packages/bako-safe/src/BakoSafeConnector.tsx | 70 +++++++++++--------- packages/bako-safe/src/DAPPWindow.ts | 2 +- packages/bako-safe/src/constants.ts | 10 +++ packages/bako-safe/tsup.config.js | 2 - packages/connectors/package.json | 5 +- packages/connectors/src/index.ts | 1 + packages/connectors/tsup.config.js | 4 +- pnpm-lock.yaml | 49 ++++++++++++-- 10 files changed, 109 insertions(+), 44 deletions(-) create mode 100644 packages/bako-safe/src/constants.ts diff --git a/package.json b/package.json index edf0b1aa..05afc3ee 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,11 @@ "turbo": "1.12.5", "vitest": "1.4.0" }, + "peerDependencies": { + "fuels": ">=0.77.0", + "socket.io-client": "4.7.2", + "axios": "1.5.1" + }, "packageManager": "pnpm@8.9.0", "engines": { "node": ">=18", diff --git a/packages/bako-safe/package.json b/packages/bako-safe/package.json index b7b98b53..b2721985 100644 --- a/packages/bako-safe/package.json +++ b/packages/bako-safe/package.json @@ -7,7 +7,7 @@ ".": "./src/index.ts" }, "scripts": { - "build": "tsup ./src/BakoSafeConnector.tsx --dts-only", + "build": "tsup --dts-only", "build:watch": "tsup --watch --dts-only", "ts:check": "tsc --noEmit", "test": "vitest" @@ -15,8 +15,7 @@ "peerDependencies": { "fuels": ">=0.77.0", "socket.io-client": "^4.7.2", - "axios": "^1.5.1", - "uuid": "^9.0.1" + "axios": "^1.5.1" }, "devDependencies": { "events": "3.3.0", diff --git a/packages/bako-safe/src/BakoSafeConnector.tsx b/packages/bako-safe/src/BakoSafeConnector.tsx index 049472b5..112a8bff 100644 --- a/packages/bako-safe/src/BakoSafeConnector.tsx +++ b/packages/bako-safe/src/BakoSafeConnector.tsx @@ -4,22 +4,22 @@ import { FuelConnector, FuelConnectorEventTypes, type JsonAbi, + Provider, type TransactionRequestLike, } from 'fuels'; import { type Socket, io } from 'socket.io-client'; import { DAppWindow } from './DAPPWindow'; +import { + API_URL, + APP_BSAFE_URL, + APP_DESCRIPTION, + APP_IMAGE_DARK, + APP_IMAGE_LIGHT, + APP_NAME, +} from './constants'; import { BAKOSAFEConnectorEvents } from './types'; -const APP_NAME = 'Bsafe'; -const APP_DESCRIPTION = - 'BSafe is a connector to app.bsafe.pro, a non-custodial vault for your crypto assets.'; -const APP_IMAGE_DARK = 'https://app.bsafe.pro/assets/logo-294a5e40.svg'; -const APP_IMAGE_LIGHT = 'https://app.bsafe.pro/assets/logoDark-97c52b43.svg'; - -const APP_BSAFE_URL = 'https://app.bsafe.pro/'; -const API_URL = 'https://api-multsig.infinitybase.com'; - type FuelABI = JsonAbi; type Network = { url: string; @@ -47,7 +47,7 @@ export class BakoSafeConnector extends FuelConnector { ...BAKOSAFEConnectorEvents, }; - private readonly socket: Socket; + private socket!: Socket; private readonly sessionId: string; private readonly api: AxiosInstance = axios.create({ baseURL: API_URL, @@ -64,15 +64,6 @@ export class BakoSafeConnector extends FuelConnector { this.sessionId = sessionId; - this.socket = io(API_URL, { - auth: { - username: `${'[WALLET]'}`, - data: new Date(), - sessionId: this.sessionId, - origin: window.origin, - }, - }); - this.dAppWindow = new DAppWindow({ sessionId, name: document.title, @@ -84,21 +75,33 @@ export class BakoSafeConnector extends FuelConnector { height: 1280, }, }); - - this.socket.on(BAKOSAFEConnectorEvents.DEFAULT, (message) => { - this.emit(message.type, ...message.data); - }); } async connect() { + if (this.connected) { + return true; + } return new Promise((resolve) => { + this.socket = io(API_URL, { + auth: { + username: `[WALLET]${this.sessionId}`, + data: new Date(), + sessionId: this.sessionId, + origin: window.origin, + }, + }); + + this.socket.on(BAKOSAFEConnectorEvents.DEFAULT, (message) => { + this.emit(message.type, ...message.data); + }); + const dappWindow = this.dAppWindow.open('/'); dappWindow?.addEventListener('close', () => { resolve(false); }); // @ts-ignore - this.on(BSAFEConnectorEvents.CONNECTION, (connection: boolean) => { + this.on(BAKOSAFEConnectorEvents.CONNECTION, (connection: boolean) => { this.connected = connection; resolve(connection); }); @@ -121,7 +124,7 @@ export class BakoSafeConnector extends FuelConnector { reject('closed'); }); // @ts-ignore - this.on(BSAFEConnectorEvents.POPUP_TRANSFER, () => { + this.on(BAKOSAFEConnectorEvents.POPUP_TRANSFER, () => { this.socket.emit(BAKOSAFEConnectorEvents.TRANSACTION_SEND, { to: `${this.sessionId}:${window.origin}`, content: { @@ -131,7 +134,7 @@ export class BakoSafeConnector extends FuelConnector { }); }); // @ts-ignore - this.on(BSAFEConnectorEvents.TRANSACTION_CREATED, (content) => { + this.on(BAKOSAFEConnectorEvents.TRANSACTION_CREATED, (content) => { resolve(`0x${content}`); }); }); @@ -141,16 +144,16 @@ export class BakoSafeConnector extends FuelConnector { return true; } - //todo: make a file on sdk, to return this object async version() { return { app: '0.0.1', - network: '>=0.12.4', + network: '>=0.0.0', }; } async isConnected() { const { data } = await this.api.get(`/connections/${this.sessionId}/state`); + this.connected = data; return data; } @@ -159,7 +162,8 @@ export class BakoSafeConnector extends FuelConnector { const { data } = await this.api.get( `/connections/${this.sessionId}/accounts`, ); - return data; + const acc = Array.isArray(data) ? data : []; + return acc; } async currentAccount() { @@ -186,7 +190,13 @@ export class BakoSafeConnector extends FuelConnector { const { data } = await this.api.get( `/connections/${this.sessionId}/currentNetwork`, ); - return data; + + const provider = await Provider.create(data); + + return { + url: provider.url, + chainId: provider.getChainId(), + }; } async assets(): Promise { diff --git a/packages/bako-safe/src/DAPPWindow.ts b/packages/bako-safe/src/DAPPWindow.ts index e9273d78..d4451c35 100644 --- a/packages/bako-safe/src/DAPPWindow.ts +++ b/packages/bako-safe/src/DAPPWindow.ts @@ -1,4 +1,4 @@ -const APP_BSAFE_URL = 'https://app.bsafe.pro/'; +import { APP_BSAFE_URL } from './constants'; export class DAppWindow { BSAFEAPP = APP_BSAFE_URL; diff --git a/packages/bako-safe/src/constants.ts b/packages/bako-safe/src/constants.ts new file mode 100644 index 00000000..ef204ed2 --- /dev/null +++ b/packages/bako-safe/src/constants.ts @@ -0,0 +1,10 @@ +export const APP_NAME = 'Bako Safe'; +export const APP_DESCRIPTION = + 'Bako Safe is a connector to safe.bako.global, a non-custodial vault for your crypto assets.'; + +export const APP_IMAGE_DARK = + 'https://besafe-asset.s3.amazonaws.com/BAKO_CONNECTOR_ICON.svg'; +export const APP_IMAGE_LIGHT = + 'https://besafe-asset.s3.amazonaws.com/BAKO_CONNECTOR_ICON.svg'; +export const APP_BSAFE_URL = 'https://safe.bako.global'; +export const API_URL = 'https://api-multsig.infinitybase.com'; diff --git a/packages/bako-safe/tsup.config.js b/packages/bako-safe/tsup.config.js index 8e0c2622..a13c6cde 100644 --- a/packages/bako-safe/tsup.config.js +++ b/packages/bako-safe/tsup.config.js @@ -3,7 +3,5 @@ import { defineConfig } from 'tsup'; export default defineConfig((options) => ({ ...baseConfig(options, { withReact: false }), - format: ['cjs'], - external: ['fuels'], entry: ['src/index.ts'], })); diff --git a/packages/connectors/package.json b/packages/connectors/package.json index 6cb00246..bc3eaaa9 100644 --- a/packages/connectors/package.json +++ b/packages/connectors/package.json @@ -17,7 +17,9 @@ "ts:check": "tsc --noEmit" }, "peerDependencies": { - "fuels": ">=0.77.0" + "fuels": ">=0.77.0", + "socket.io-client": "4.7.2", + "axios": "1.5.1" }, "dependencies": { "json-rpc-2.0": "1.7.0" @@ -26,6 +28,7 @@ "@fuel-connectors/fuel-development-wallet": "workspace:*", "@fuel-connectors/fuel-wallet": "workspace:*", "@fuel-connectors/fuelet-wallet": "workspace:*", + "@fuel-connectors/bako-safe": "workspace:*", "fuels": "0.77.0", "terser": "5.29.2", "tsup": "8.0.2", diff --git a/packages/connectors/src/index.ts b/packages/connectors/src/index.ts index 235cb638..fdbdac8b 100644 --- a/packages/connectors/src/index.ts +++ b/packages/connectors/src/index.ts @@ -2,3 +2,4 @@ export * from './defaultConnectors'; export * from '@fuel-connectors/fuel-development-wallet'; export * from '@fuel-connectors/fuel-wallet'; export * from '@fuel-connectors/fuelet-wallet'; +export * from '@fuel-connectors/bako-safe'; diff --git a/packages/connectors/tsup.config.js b/packages/connectors/tsup.config.js index f6fc7328..f16c7ddd 100644 --- a/packages/connectors/tsup.config.js +++ b/packages/connectors/tsup.config.js @@ -4,11 +4,12 @@ import { defineConfig } from 'tsup'; export default defineConfig((options) => ({ ...baseConfig(options, { withReact: false }), entry: ['src/index.ts'], - external: ['fuels', 'json-rpc-2.0'], + external: ['fuels', 'json-rpc-2.0', 'socket.io-client', 'axios'], noExternal: [ '@fuel-connectors/fuel-development-wallet', '@fuel-connectors/fuel-wallet', '@fuel-connectors/fuelet-wallet', + '@fuel-connectors/bako-safe', ], minify: 'terser', dts: { @@ -16,6 +17,7 @@ export default defineConfig((options) => ({ '@fuel-connectors/fuel-development-wallet', '@fuel-connectors/fuel-wallet', '@fuel-connectors/fuelet-wallet', + '@fuel-connectors/bako-safe', ], }, splitting: true, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 51db439c..ff0b6ee8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,6 +7,16 @@ settings: importers: .: + dependencies: + axios: + specifier: 1.5.1 + version: 1.5.1 + fuels: + specifier: '>=0.77.0' + version: 0.77.0(dexie@3.2.6) + socket.io-client: + specifier: 4.7.2 + version: 4.7.2 devDependencies: '@biomejs/biome': specifier: 1.6.1 @@ -84,15 +94,9 @@ importers: axios: specifier: ^1.5.1 version: 1.6.8 - json-rpc-2.0: - specifier: 1.7.0 - version: 1.7.0 socket.io-client: specifier: ^4.7.2 version: 4.7.5 - uuid: - specifier: ^9.0.1 - version: 9.0.1 devDependencies: events: specifier: 3.3.0 @@ -115,10 +119,19 @@ importers: packages/connectors: dependencies: + axios: + specifier: 1.5.1 + version: 1.5.1 json-rpc-2.0: specifier: 1.7.0 version: 1.7.0 + socket.io-client: + specifier: 4.7.2 + version: 4.7.2 devDependencies: + '@fuel-connectors/bako-safe': + specifier: workspace:* + version: link:../bako-safe '@fuel-connectors/fuel-development-wallet': specifier: workspace:* version: link:../fuel-development-wallet @@ -2303,6 +2316,16 @@ packages: possible-typed-array-names: 1.0.0 dev: true + /axios@1.5.1: + resolution: {integrity: sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==} + dependencies: + follow-redirects: 1.15.6 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: false + /axios@1.6.8: resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} dependencies: @@ -5136,6 +5159,20 @@ packages: - supports-color - utf-8-validate + /socket.io-client@4.7.2: + resolution: {integrity: sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==} + engines: {node: '>=10.0.0'} + dependencies: + '@socket.io/component-emitter': 3.1.0 + debug: 4.3.4 + engine.io-client: 6.5.3 + socket.io-parser: 4.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + /socket.io-client@4.7.5: resolution: {integrity: sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==} engines: {node: '>=10.0.0'} From 3e336668c41d18889d65023ba7a9a421a9d4217e Mon Sep 17 00:00:00 2001 From: guimroque Date: Fri, 22 Mar 2024 16:20:07 -0300 Subject: [PATCH 03/85] fix(packages): remove not used packages and remove peerDependencies --- packages/bako-safe/package.json | 11 +++++------ packages/connectors/tsup.config.js | 2 +- pnpm-lock.yaml | 12 +++--------- 3 files changed, 9 insertions(+), 16 deletions(-) diff --git a/packages/bako-safe/package.json b/packages/bako-safe/package.json index b2721985..c6df26d0 100644 --- a/packages/bako-safe/package.json +++ b/packages/bako-safe/package.json @@ -12,17 +12,16 @@ "ts:check": "tsc --noEmit", "test": "vitest" }, - "peerDependencies": { - "fuels": ">=0.77.0", + "dependencies": { "socket.io-client": "^4.7.2", "axios": "^1.5.1" }, + "peerDependencies": { + "fuels": ">=0.77.0" + }, "devDependencies": { - "events": "3.3.0", - "fuels": "0.77.0", "tsup": "8.0.2", "typescript": "5.4.2", - "undici": "6.9.0", - "web-streams-polyfill": "4.0.0" + "undici": "6.9.0" } } diff --git a/packages/connectors/tsup.config.js b/packages/connectors/tsup.config.js index f16c7ddd..a5dc58b5 100644 --- a/packages/connectors/tsup.config.js +++ b/packages/connectors/tsup.config.js @@ -4,7 +4,7 @@ import { defineConfig } from 'tsup'; export default defineConfig((options) => ({ ...baseConfig(options, { withReact: false }), entry: ['src/index.ts'], - external: ['fuels', 'json-rpc-2.0', 'socket.io-client', 'axios'], + external: ['fuels', 'json-rpc-2.0'], noExternal: [ '@fuel-connectors/fuel-development-wallet', '@fuel-connectors/fuel-wallet', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ff0b6ee8..b0dc7566 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -94,16 +94,13 @@ importers: axios: specifier: ^1.5.1 version: 1.6.8 + fuels: + specifier: '>=0.77.0' + version: 0.77.0(dexie@3.2.6) socket.io-client: specifier: ^4.7.2 version: 4.7.5 devDependencies: - events: - specifier: 3.3.0 - version: 3.3.0 - fuels: - specifier: 0.77.0 - version: 0.77.0(dexie@3.2.6) tsup: specifier: 8.0.2 version: 8.0.2(typescript@5.4.2) @@ -113,9 +110,6 @@ importers: undici: specifier: 6.9.0 version: 6.9.0 - web-streams-polyfill: - specifier: 4.0.0 - version: 4.0.0 packages/connectors: dependencies: From ac600d3e75bbcf72beabda16daadbe66ad4055b1 Mon Sep 17 00:00:00 2001 From: guimroque Date: Fri, 22 Mar 2024 16:21:08 -0300 Subject: [PATCH 04/85] fix(consts): add url to bako safe api using domain .bako.global --- packages/bako-safe/src/constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bako-safe/src/constants.ts b/packages/bako-safe/src/constants.ts index ef204ed2..ee8bfed9 100644 --- a/packages/bako-safe/src/constants.ts +++ b/packages/bako-safe/src/constants.ts @@ -7,4 +7,4 @@ export const APP_IMAGE_DARK = export const APP_IMAGE_LIGHT = 'https://besafe-asset.s3.amazonaws.com/BAKO_CONNECTOR_ICON.svg'; export const APP_BSAFE_URL = 'https://safe.bako.global'; -export const API_URL = 'https://api-multsig.infinitybase.com'; +export const API_URL = 'https://api-safe.bako.global'; From 42771b887aaa34d5b8247348f2d6f2a6dd81c638 Mon Sep 17 00:00:00 2001 From: guimroque Date: Fri, 22 Mar 2024 16:22:24 -0300 Subject: [PATCH 05/85] fix(types): use typer imported of fuel --- packages/bako-safe/src/BakoSafeConnector.tsx | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.tsx b/packages/bako-safe/src/BakoSafeConnector.tsx index 112a8bff..70130f28 100644 --- a/packages/bako-safe/src/BakoSafeConnector.tsx +++ b/packages/bako-safe/src/BakoSafeConnector.tsx @@ -1,9 +1,10 @@ import axios, { type AxiosInstance } from 'axios'; import { type Asset, + type FuelABI, FuelConnector, FuelConnectorEventTypes, - type JsonAbi, + type Network, Provider, type TransactionRequestLike, } from 'fuels'; @@ -20,12 +21,6 @@ import { } from './constants'; import { BAKOSAFEConnectorEvents } from './types'; -type FuelABI = JsonAbi; -type Network = { - url: string; - chainId: number; -}; - export class BakoSafeConnector extends FuelConnector { name = APP_NAME; metadata = { From 352647c60ed9b41dfaf0e4d0bb9887add5e570ec Mon Sep 17 00:00:00 2001 From: guimroque Date: Fri, 22 Mar 2024 16:23:16 -0300 Subject: [PATCH 06/85] feat(networks): implement method --- packages/bako-safe/src/BakoSafeConnector.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.tsx b/packages/bako-safe/src/BakoSafeConnector.tsx index 70130f28..f40898dc 100644 --- a/packages/bako-safe/src/BakoSafeConnector.tsx +++ b/packages/bako-safe/src/BakoSafeConnector.tsx @@ -194,6 +194,10 @@ export class BakoSafeConnector extends FuelConnector { }; } + async networks(): Promise> { + return [await this.currentNetwork()]; + } + async assets(): Promise { return []; } @@ -217,9 +221,6 @@ export class BakoSafeConnector extends FuelConnector { async selectNetwork(_network: Network): Promise { throw new Error('Method not implemented.'); } - async networks(): Promise> { - throw new Error('Method not implemented.'); - } async addABI(_contractId: string, _abi: FuelABI): Promise { throw new Error('Method not implemented.'); From c60292808569c81c878fdf26b3a2423d679e0609 Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 26 Mar 2024 14:34:45 -0300 Subject: [PATCH 07/85] fix(logo): use logo by bako.global domain --- packages/bako-safe/src/constants.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/bako-safe/src/constants.ts b/packages/bako-safe/src/constants.ts index ee8bfed9..4e200ec4 100644 --- a/packages/bako-safe/src/constants.ts +++ b/packages/bako-safe/src/constants.ts @@ -3,8 +3,9 @@ export const APP_DESCRIPTION = 'Bako Safe is a connector to safe.bako.global, a non-custodial vault for your crypto assets.'; export const APP_IMAGE_DARK = - 'https://besafe-asset.s3.amazonaws.com/BAKO_CONNECTOR_ICON.svg'; + 'https://safe.bako.global/BAKO_CONNECTOR_ICON.svg'; export const APP_IMAGE_LIGHT = - 'https://besafe-asset.s3.amazonaws.com/BAKO_CONNECTOR_ICON.svg'; + 'https://safe.bako.global/BAKO_CONNECTOR_ICON.svg'; + export const APP_BSAFE_URL = 'https://safe.bako.global'; export const API_URL = 'https://api-safe.bako.global'; From 86e143fe03e0750fd78bcb9bd885e01bb23bca5f Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 26 Mar 2024 14:35:42 -0300 Subject: [PATCH 08/85] fix(disconnect): validate valid connection by verification on socket started and api request --- packages/bako-safe/src/BakoSafeConnector.tsx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.tsx b/packages/bako-safe/src/BakoSafeConnector.tsx index f40898dc..4224273f 100644 --- a/packages/bako-safe/src/BakoSafeConnector.tsx +++ b/packages/bako-safe/src/BakoSafeConnector.tsx @@ -73,9 +73,6 @@ export class BakoSafeConnector extends FuelConnector { } async connect() { - if (this.connected) { - return true; - } return new Promise((resolve) => { this.socket = io(API_URL, { auth: { @@ -150,7 +147,7 @@ export class BakoSafeConnector extends FuelConnector { const { data } = await this.api.get(`/connections/${this.sessionId}/state`); this.connected = data; - return data; + return data && !!this.socket; } async accounts() { From 0e16be5a7cc9b28fba6e8368cda37cd1049c2922 Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 26 Mar 2024 18:31:28 -0300 Subject: [PATCH 09/85] fix(packages): fixed version --- package.json | 4 +--- packages/bako-safe/package.json | 4 ++-- pnpm-lock.yaml | 38 ++++----------------------------- 3 files changed, 7 insertions(+), 39 deletions(-) diff --git a/package.json b/package.json index 05afc3ee..5d65cb15 100644 --- a/package.json +++ b/package.json @@ -31,9 +31,7 @@ "vitest": "1.4.0" }, "peerDependencies": { - "fuels": ">=0.77.0", - "socket.io-client": "4.7.2", - "axios": "1.5.1" + "fuels": ">=0.77.0" }, "packageManager": "pnpm@8.9.0", "engines": { diff --git a/packages/bako-safe/package.json b/packages/bako-safe/package.json index c6df26d0..74726aa5 100644 --- a/packages/bako-safe/package.json +++ b/packages/bako-safe/package.json @@ -13,8 +13,8 @@ "test": "vitest" }, "dependencies": { - "socket.io-client": "^4.7.2", - "axios": "^1.5.1" + "socket.io-client": "4.7.2", + "axios": "1.5.1" }, "peerDependencies": { "fuels": ">=0.77.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b0dc7566..f9ccd1c0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,15 +8,9 @@ importers: .: dependencies: - axios: - specifier: 1.5.1 - version: 1.5.1 fuels: specifier: '>=0.77.0' version: 0.77.0(dexie@3.2.6) - socket.io-client: - specifier: 4.7.2 - version: 4.7.2 devDependencies: '@biomejs/biome': specifier: 1.6.1 @@ -92,14 +86,14 @@ importers: packages/bako-safe: dependencies: axios: - specifier: ^1.5.1 - version: 1.6.8 + specifier: 1.5.1 + version: 1.5.1 fuels: specifier: '>=0.77.0' version: 0.77.0(dexie@3.2.6) socket.io-client: - specifier: ^4.7.2 - version: 4.7.5 + specifier: 4.7.2 + version: 4.7.2 devDependencies: tsup: specifier: 8.0.2 @@ -2320,16 +2314,6 @@ packages: - debug dev: false - /axios@1.6.8: - resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} - dependencies: - follow-redirects: 1.15.6 - form-data: 4.0.0 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - dev: false - /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -5167,20 +5151,6 @@ packages: - utf-8-validate dev: false - /socket.io-client@4.7.5: - resolution: {integrity: sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==} - engines: {node: '>=10.0.0'} - dependencies: - '@socket.io/component-emitter': 3.1.0 - debug: 4.3.4 - engine.io-client: 6.5.3 - socket.io-parser: 4.2.4 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: false - /socket.io-parser@4.2.4: resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} engines: {node: '>=10.0.0'} From 4d2d123d86ffb5fb479941b433ba554843d6b921 Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 26 Mar 2024 18:45:48 -0300 Subject: [PATCH 10/85] fix(packages): fixed version --- packages/connectors/package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/connectors/package.json b/packages/connectors/package.json index bc3eaaa9..955794b7 100644 --- a/packages/connectors/package.json +++ b/packages/connectors/package.json @@ -17,12 +17,12 @@ "ts:check": "tsc --noEmit" }, "peerDependencies": { - "fuels": ">=0.77.0", - "socket.io-client": "4.7.2", - "axios": "1.5.1" + "fuels": ">=0.77.0" }, "dependencies": { - "json-rpc-2.0": "1.7.0" + "json-rpc-2.0": "1.7.0", + "socket.io-client": "4.7.2", + "axios": "1.5.1" }, "devDependencies": { "@fuel-connectors/fuel-development-wallet": "workspace:*", From e4500b1f5bf1d9cc2ab76bebab4c65948e891a02 Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 26 Mar 2024 19:45:07 -0300 Subject: [PATCH 11/85] chore(): get infra updated changes --- packages/connectors/package.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/packages/connectors/package.json b/packages/connectors/package.json index 955794b7..a25e8545 100644 --- a/packages/connectors/package.json +++ b/packages/connectors/package.json @@ -19,11 +19,6 @@ "peerDependencies": { "fuels": ">=0.77.0" }, - "dependencies": { - "json-rpc-2.0": "1.7.0", - "socket.io-client": "4.7.2", - "axios": "1.5.1" - }, "devDependencies": { "@fuel-connectors/fuel-development-wallet": "workspace:*", "@fuel-connectors/fuel-wallet": "workspace:*", From 38132f458a578c84f35999e29c637fb76be420bd Mon Sep 17 00:00:00 2001 From: guimroque Date: Wed, 27 Mar 2024 18:56:27 -0300 Subject: [PATCH 12/85] fix: packages --- package.json | 3 - packages/bako-safe/package.json | 3 +- packages/bako-safe/tsup.config.js | 1 + pnpm-lock.yaml | 331 +----------------------------- 4 files changed, 6 insertions(+), 332 deletions(-) diff --git a/package.json b/package.json index bde2a210..ba4233f0 100644 --- a/package.json +++ b/package.json @@ -31,9 +31,6 @@ "turbo": "1.13.0", "vitest": "1.4.0" }, - "peerDependencies": { - "fuels": ">=0.77.0" - }, "packageManager": "pnpm@8.9.0", "engines": { "node": ">=18", diff --git a/packages/bako-safe/package.json b/packages/bako-safe/package.json index 74726aa5..728a0d03 100644 --- a/packages/bako-safe/package.json +++ b/packages/bako-safe/package.json @@ -17,10 +17,11 @@ "axios": "1.5.1" }, "peerDependencies": { - "fuels": ">=0.77.0" + "fuels": ">=0.78.0" }, "devDependencies": { "tsup": "8.0.2", + "fuels": "0.78.0", "typescript": "5.4.2", "undici": "6.9.0" } diff --git a/packages/bako-safe/tsup.config.js b/packages/bako-safe/tsup.config.js index a13c6cde..d9952c37 100644 --- a/packages/bako-safe/tsup.config.js +++ b/packages/bako-safe/tsup.config.js @@ -3,5 +3,6 @@ import { defineConfig } from 'tsup'; export default defineConfig((options) => ({ ...baseConfig(options, { withReact: false }), + format: ['cjs'], entry: ['src/index.ts'], })); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1fd99196..9783b997 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,10 +7,6 @@ settings: importers: .: - dependencies: - fuels: - specifier: '>=0.77.0' - version: 0.77.0(dexie@3.2.6) devDependencies: '@biomejs/biome': specifier: 1.6.3 @@ -110,13 +106,13 @@ importers: axios: specifier: 1.5.1 version: 1.5.1 - fuels: - specifier: '>=0.77.0' - version: 0.77.0(dexie@3.2.6) socket.io-client: specifier: 4.7.2 version: 4.7.2 devDependencies: + fuels: + specifier: 0.78.0 + version: 0.78.0(dexie@3.2.6) tsup: specifier: 8.0.2 version: 8.0.2(typescript@5.4.2) @@ -1343,24 +1339,6 @@ packages: dev: true optional: true - /@fuel-ts/abi-coder@0.77.0: - resolution: {integrity: sha512-5v/9spJG7Gh/kEqu0ixEkc8ZaXVyeC9gPBXgFdqYSFw6WiIclG2XLDu3SYcFccL1ByMzWTSsbmRK4e7jyHJxHQ==} - engines: {node: ^18.18.2 || ^20.0.0} - dependencies: - '@fuel-ts/crypto': 0.77.0 - '@fuel-ts/errors': 0.77.0 - '@fuel-ts/hasher': 0.77.0 - '@fuel-ts/interfaces': 0.77.0 - '@fuel-ts/math': 0.77.0 - '@fuel-ts/utils': 0.77.0 - '@fuel-ts/versions': 0.77.0 - ethers: 6.11.1 - type-fest: 3.13.1 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /@fuel-ts/abi-coder@0.78.0: resolution: {integrity: sha512-66HGsaJUL3P9Qg3jwa8dGadTMZSnsHZj3FLOsL+IaQiaU0pwVzmYdhLjm/GfhmKatWIvwgHiKqVu9Vv/7A0ZQQ==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1378,23 +1356,6 @@ packages: - bufferutil - utf-8-validate - /@fuel-ts/abi-typegen@0.77.0: - resolution: {integrity: sha512-SQWEXEiB0+lxD/yFc/PjWmpT6ghZEMNkSZ/yJEwaskBvfW7MszyBX1jIqtipTHNbs9nbNXoPeFoKafgqxjALKA==} - engines: {node: ^18.18.2 || ^20.0.0} - hasBin: true - dependencies: - '@fuel-ts/errors': 0.77.0 - '@fuel-ts/interfaces': 0.77.0 - '@fuel-ts/utils': 0.77.0 - '@fuel-ts/versions': 0.77.0 - commander: 9.5.0 - glob: 10.3.10 - handlebars: 4.7.8 - mkdirp: 1.0.4 - ramda: 0.29.1 - rimraf: 3.0.2 - dev: false - /@fuel-ts/abi-typegen@0.78.0: resolution: {integrity: sha512-YLdh6cAXXsQei4DQlNg5LB/lULVvLBXfwP203VGZ9BGkRnzm3LBHKh/G3d1/L1nBuB/JiBw5iJvR3AosZ18l8g==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1411,45 +1372,6 @@ packages: ramda: 0.29.1 rimraf: 3.0.2 - /@fuel-ts/account@0.77.0(dexie@3.2.6): - resolution: {integrity: sha512-P5YhoBL9QEmYSBYVGKrhN8ZMoliA2PDLfjrhtFtbS/ZCblin/W9UOTZ3vtaj2YAQCS7HzTZAxZyYgblzxob2BQ==} - engines: {node: ^18.18.2 || ^20.0.0} - dependencies: - '@fuel-ts/abi-coder': 0.77.0 - '@fuel-ts/address': 0.77.0 - '@fuel-ts/crypto': 0.77.0 - '@fuel-ts/errors': 0.77.0 - '@fuel-ts/fuel-core': 0.77.0 - '@fuel-ts/hasher': 0.77.0 - '@fuel-ts/interfaces': 0.77.0 - '@fuel-ts/math': 0.77.0 - '@fuel-ts/merkle': 0.77.0 - '@fuel-ts/transactions': 0.77.0 - '@fuel-ts/utils': 0.77.0 - '@fuel-ts/versions': 0.77.0 - '@fuels/assets': 0.1.5 - '@fuels/vm-asm': 0.42.1 - '@noble/curves': 1.4.0 - dexie-observable: 4.0.1-beta.13(dexie@3.2.6) - ethers: 6.11.1 - events: 3.3.0 - graphql: 16.8.1 - graphql-request: 5.0.0(graphql@16.8.1) - graphql-tag: 2.12.6(graphql@16.8.1) - json-rpc-2.0: 1.7.0 - portfinder: 1.0.32 - ramda: 0.29.1 - tai64: 1.0.0 - tree-kill: 1.2.2 - uuid: 9.0.1 - transitivePeerDependencies: - - bufferutil - - dexie - - encoding - - supports-color - - utf-8-validate - dev: false - /@fuel-ts/account@0.78.0(dexie@3.2.6): resolution: {integrity: sha512-dJOiwtVLBaiBafaIxpfb17+F3T+d+4yR/exIHYlQ/+uLOvXDFdxLfy/cz7uYMc94tvye9UPblUTgNpc2fPEnSA==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1488,22 +1410,6 @@ packages: - supports-color - utf-8-validate - /@fuel-ts/address@0.77.0: - resolution: {integrity: sha512-EhLDtH5ZWHRJaVO1yN36GdU9GarY2ldOTRCWUPZTWxka7vUaxdEx/2QzrlJm59isiT1lJLTmi1VWP9WxJ++1JA==} - engines: {node: ^18.18.2 || ^20.0.0} - dependencies: - '@fuel-ts/crypto': 0.77.0 - '@fuel-ts/errors': 0.77.0 - '@fuel-ts/interfaces': 0.77.0 - '@fuel-ts/utils': 0.77.0 - '@fuel-ts/versions': 0.77.0 - '@noble/hashes': 1.4.0 - bech32: 2.0.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /@fuel-ts/address@0.78.0: resolution: {integrity: sha512-1qT4jgMej8cqUFS40gQ53RTHYnYtgilKnY7GF7GFJdxFpBNIWQWNRbzYZM0NV/MYfLDRHEXCv0Ec0ditPVtXbw==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1519,30 +1425,6 @@ packages: - bufferutil - utf-8-validate - /@fuel-ts/contract@0.77.0(dexie@3.2.6): - resolution: {integrity: sha512-CsYB8kuBvVRGfQf3YNwRSai/asLdgD91G68JVH3YCTA79k6jkmRM47hkY6N5qigHABxwQu4pOVhWO0k0LVzslQ==} - engines: {node: ^18.18.2 || ^20.0.0} - dependencies: - '@fuel-ts/abi-coder': 0.77.0 - '@fuel-ts/account': 0.77.0(dexie@3.2.6) - '@fuel-ts/address': 0.77.0 - '@fuel-ts/crypto': 0.77.0 - '@fuel-ts/errors': 0.77.0 - '@fuel-ts/hasher': 0.77.0 - '@fuel-ts/interfaces': 0.77.0 - '@fuel-ts/merkle': 0.77.0 - '@fuel-ts/program': 0.77.0(dexie@3.2.6) - '@fuel-ts/transactions': 0.77.0 - '@fuel-ts/utils': 0.77.0 - '@fuel-ts/versions': 0.77.0 - transitivePeerDependencies: - - bufferutil - - dexie - - encoding - - supports-color - - utf-8-validate - dev: false - /@fuel-ts/contract@0.78.0(dexie@3.2.6): resolution: {integrity: sha512-v2oZ8XIE35rZo4rk3ILsrLyV084qe07JtYTs8JwdpCpdk5FKfoCevzh7U9PKjtz+VabUSBFFLXzMY41knbfRpg==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1566,19 +1448,6 @@ packages: - supports-color - utf-8-validate - /@fuel-ts/crypto@0.77.0: - resolution: {integrity: sha512-G9aqVt7Dq4A+2YZChNlO5yAqtWkACNvM0K0pO7niSNCmYci2RytDNH6h/e11uOI8CfjCEL3Ez+2cYDCasyOxvQ==} - engines: {node: ^18.18.2 || ^20.0.0} - dependencies: - '@fuel-ts/errors': 0.77.0 - '@fuel-ts/utils': 0.77.0 - '@noble/hashes': 1.4.0 - ethers: 6.11.1 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /@fuel-ts/crypto@0.78.0: resolution: {integrity: sha512-3SV7lFjK9EvEwgE5v+2R5PeTTZdr/27LaD4FvZ+O2qby0YV503jmDvy4AlZ0Ps3q9dQl5AmpIUkFpoWhVUJMWA==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1591,29 +1460,12 @@ packages: - bufferutil - utf-8-validate - /@fuel-ts/errors@0.77.0: - resolution: {integrity: sha512-OUkTY2Eo0OaITLFpKmDX9LtGGrGCKKAf677W0JmDEz3cV2HW/Xyo/RgxRsz4e2hdhzEA4yXDYAc8/0j+iBH/xA==} - engines: {node: ^18.18.2 || ^20.0.0} - dependencies: - '@fuel-ts/versions': 0.77.0 - dev: false - /@fuel-ts/errors@0.78.0: resolution: {integrity: sha512-54hclzlXn847pOLz59GitIQ3jQFPwjuZFVUolgmESQ6d3udfG6loCups1GbPPnSBJADyDtnn6q+k49g/lO+e6Q==} engines: {node: ^18.18.2 || ^20.0.0} dependencies: '@fuel-ts/versions': 0.78.0 - /@fuel-ts/forc@0.77.0: - resolution: {integrity: sha512-ZSmW/FlPGEbF05na/4RQU942RmdJUGSE2fV75lN4kln7dZoDCkX0QBEbg9QeBfd2pZB4UUG9Rp7kwOqU7eOuJQ==} - hasBin: true - requiresBuild: true - dependencies: - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - dev: false - /@fuel-ts/forc@0.78.0: resolution: {integrity: sha512-pzxaKvBx1cRlq9pfdma+86vWQc8HyjWQd5kh1DqEKYbje8Li2HfMZvLDGVpSB+/D2vimnIOOCWOS7NO4j1xrQQ==} hasBin: true @@ -1623,16 +1475,6 @@ packages: transitivePeerDependencies: - encoding - /@fuel-ts/fuel-core@0.77.0: - resolution: {integrity: sha512-Godl3sV+YhbL7lctrmfe7gx+Wcr615q++orW1PrH0vcD6lJVkLjcCLXbfOl0c94jny/irVWla9J/t+4dcnyJbA==} - hasBin: true - requiresBuild: true - dependencies: - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - dev: false - /@fuel-ts/fuel-core@0.78.0: resolution: {integrity: sha512-2ktK9mFSJBJrvXFuUU2meQjkv8XXNBE3++rwx51Z3vbV+0nb8+omgSzgRYPIdszHltPT12LUf8hyhdqOU4PtkA==} hasBin: true @@ -1642,22 +1484,6 @@ packages: transitivePeerDependencies: - encoding - /@fuel-ts/hasher@0.77.0: - resolution: {integrity: sha512-mdgvDIAvkokHL4EgoEJHG9v6IDg7HQlQinSt7liWAurikpcKR1bGcJjojAEQkdGvgx/nV3nGawibz/Huyk3CJA==} - engines: {node: ^18.18.2 || ^20.0.0} - dependencies: - '@fuel-ts/address': 0.77.0 - '@fuel-ts/crypto': 0.77.0 - '@fuel-ts/interfaces': 0.77.0 - '@fuel-ts/math': 0.77.0 - '@fuel-ts/utils': 0.77.0 - '@noble/hashes': 1.4.0 - ramda: 0.29.1 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /@fuel-ts/hasher@0.78.0: resolution: {integrity: sha512-nw6jAYF4m9kydxvt2iPHsxbpti+N2HbDRnXz7nPuVBCYFDxoql5HzmMdK4DhaqgzLCGomkFZH2O1wJ/nLlPSOQ==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1673,24 +1499,10 @@ packages: - bufferutil - utf-8-validate - /@fuel-ts/interfaces@0.77.0: - resolution: {integrity: sha512-okq3YXq9qItl7qCf+CTc0PsiUmLxQasS9myNg4qyIk2ae9+it9s0L2kspDlRGw3iJ4PPdxsfvoQ2YUy8k1dWIA==} - engines: {node: ^18.18.2 || ^20.0.0} - dev: false - /@fuel-ts/interfaces@0.78.0: resolution: {integrity: sha512-VRj1V8bmJ0l6hiRXw5sNk1KcHEtu8AYy4U4WqAeTUpQwJBMKDQN89QtJPqoZMHh1/j9wOcJbfnnRyskpKRkgJg==} engines: {node: ^18.18.2 || ^20.0.0} - /@fuel-ts/math@0.77.0: - resolution: {integrity: sha512-ehv4JtO2DV2P+jkfOHKgA8ZI2YmF5rsNiAfl85iPyONYKeUBaM3ZokOupjcO494i1hZmHRJfsdA5y3ii5ruNkA==} - engines: {node: ^18.18.2 || ^20.0.0} - dependencies: - '@fuel-ts/errors': 0.77.0 - '@types/bn.js': 5.1.5 - bn.js: 5.2.1 - dev: false - /@fuel-ts/math@0.78.0: resolution: {integrity: sha512-JeDz/7GQJrIhm0EM3jim1qOCNw3/FoG0M3hN2TSzItN5tiaupwjMXb5CgQS5k+WwmXWKQikWJwQBz5dLdbB3qA==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1699,18 +1511,6 @@ packages: '@types/bn.js': 5.1.5 bn.js: 5.2.1 - /@fuel-ts/merkle@0.77.0: - resolution: {integrity: sha512-FlbIY8/Ze7jkQdKOUv6I0LlSjySay7UtAskHtmxafzeh4Tsh8mCtCYpkDjG0iSQUhg5s5M7Yj/wKLiNqZ435bQ==} - engines: {node: ^18.18.2 || ^20.0.0} - dependencies: - '@fuel-ts/hasher': 0.77.0 - '@fuel-ts/interfaces': 0.77.0 - '@fuel-ts/math': 0.77.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /@fuel-ts/merkle@0.78.0: resolution: {integrity: sha512-Aw+TNQJv/nOPMkq9YoSMBOePn1/ZWblJbs1lGQ1F4HK4Dv0ghPeJPJgMoY8E7CAQKD2iajX8QqdSUUBwHpnfjQ==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1722,29 +1522,6 @@ packages: - bufferutil - utf-8-validate - /@fuel-ts/program@0.77.0(dexie@3.2.6): - resolution: {integrity: sha512-fWB+1+QlGNLyMfrEIH0bTzxjrntfjrNowuOgIGW7Ecotec0KELJUHbxXpJatr7cvZOy6sWSs3qnWlN9O0On2sA==} - engines: {node: ^18.18.2 || ^20.0.0} - dependencies: - '@fuel-ts/abi-coder': 0.77.0 - '@fuel-ts/account': 0.77.0(dexie@3.2.6) - '@fuel-ts/address': 0.77.0 - '@fuel-ts/errors': 0.77.0 - '@fuel-ts/hasher': 0.77.0 - '@fuel-ts/interfaces': 0.77.0 - '@fuel-ts/math': 0.77.0 - '@fuel-ts/transactions': 0.77.0 - '@fuel-ts/utils': 0.77.0 - '@fuel-ts/versions': 0.77.0 - '@fuels/vm-asm': 0.42.1 - transitivePeerDependencies: - - bufferutil - - dexie - - encoding - - supports-color - - utf-8-validate - dev: false - /@fuel-ts/program@0.78.0(dexie@3.2.6): resolution: {integrity: sha512-NOWoP5uZZAIBAp0/vy/zWRnTYwhft4DGE45y1G2wDh+A2AmUdvts3w4IwhEQIYy+RcssAzW9+UMyYWKNA1DNdg==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1767,28 +1544,6 @@ packages: - supports-color - utf-8-validate - /@fuel-ts/script@0.77.0(dexie@3.2.6): - resolution: {integrity: sha512-gVyF2Cr6AJ/8D2ganDxOJBBJzZWG56xk+5/nn5da3sdCKwTtMoCzt1tD0aRbQ+6GQdAzQlM1yjQT+u+SKLWMbQ==} - engines: {node: ^18.18.2 || ^20.0.0} - dependencies: - '@fuel-ts/abi-coder': 0.77.0 - '@fuel-ts/abi-typegen': 0.77.0 - '@fuel-ts/account': 0.77.0(dexie@3.2.6) - '@fuel-ts/address': 0.77.0 - '@fuel-ts/errors': 0.77.0 - '@fuel-ts/interfaces': 0.77.0 - '@fuel-ts/math': 0.77.0 - '@fuel-ts/program': 0.77.0(dexie@3.2.6) - '@fuel-ts/transactions': 0.77.0 - '@fuel-ts/utils': 0.77.0 - transitivePeerDependencies: - - bufferutil - - dexie - - encoding - - supports-color - - utf-8-validate - dev: false - /@fuel-ts/script@0.78.0(dexie@3.2.6): resolution: {integrity: sha512-by4f627nhl6dxhA6dctbA7t14ZOO/pz1tRK+2hpE8fsOCiWMiunrSkAoAMKPrjJaarDPlK1waFgDIqa2/Lfzdg==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1810,22 +1565,6 @@ packages: - supports-color - utf-8-validate - /@fuel-ts/transactions@0.77.0: - resolution: {integrity: sha512-TDCuEnyhCBKl35ud5z9DM8X+n7hD5ndj94o2XpTxCcXAnQdqHzX9kfJXUVd8C7MYyGn1HL0YWsZ1V1tDEgm9VQ==} - engines: {node: ^18.18.2 || ^20.0.0} - dependencies: - '@fuel-ts/abi-coder': 0.77.0 - '@fuel-ts/address': 0.77.0 - '@fuel-ts/errors': 0.77.0 - '@fuel-ts/hasher': 0.77.0 - '@fuel-ts/interfaces': 0.77.0 - '@fuel-ts/math': 0.77.0 - '@fuel-ts/utils': 0.77.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /@fuel-ts/transactions@0.78.0: resolution: {integrity: sha512-NcnZd6Yh8dY9h8F0m5jEjLf5+aVBG1g82yjYJPsZsNuQ8CFMKzJJwvyEV3aKXOayG/kBRK4r3oBGbX6dIr7imA==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1841,16 +1580,6 @@ packages: - bufferutil - utf-8-validate - /@fuel-ts/utils@0.77.0: - resolution: {integrity: sha512-6MsGdg4A5GmMOf/j2MRW8XahyTwpjMAYSSPcVAp8DV/h7+nC23ClvDUQBChucOilw8WBjPsfsFefK+NV7rz5KQ==} - engines: {node: ^18.18.2 || ^20.0.0} - dependencies: - '@fuel-ts/errors': 0.77.0 - '@fuel-ts/interfaces': 0.77.0 - ramda: 0.29.1 - rimraf: 3.0.2 - dev: false - /@fuel-ts/utils@0.78.0: resolution: {integrity: sha512-PnWRSbMyEQDjXJxbESoOsec6FEdyvxr34A72eEtsqypJ5vM4RQsQ8/DHMGiI6gDAWkLZhZWcNGNuzqpHcvl5xA==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1860,15 +1589,6 @@ packages: ramda: 0.29.1 rimraf: 3.0.2 - /@fuel-ts/versions@0.77.0: - resolution: {integrity: sha512-fyVzYP5T/mAV6mIYJCYH3K6XyBiZsaGOFNJU1I0t4IVE1iruKnyBVieqBhkzLMXSYM0+nEMIGaVg++7PBjRBtg==} - engines: {node: ^18.18.2 || ^20.0.0} - hasBin: true - dependencies: - chalk: 4.1.2 - cli-table: 0.3.11 - dev: false - /@fuel-ts/versions@0.78.0: resolution: {integrity: sha512-w0cXfNcOcpqC2gJoKx+so8by6QMEs0pqlSWThhBoarkvy33DdMk682kiO0QfF47d7IlqLvDPiJhRTGQYo24IFA==} engines: {node: ^18.18.2 || ^20.0.0} @@ -3914,51 +3634,6 @@ packages: requiresBuild: true optional: true - /fuels@0.77.0(dexie@3.2.6): - resolution: {integrity: sha512-jIdR1jEPYw9I87xogcLyQpSLqwUGV4NVl10UldCP6Xc6dTjCvR2Fy4TvCZF1tlRyeyPp4vII+SgWaXRk5Dcwyw==} - engines: {node: ^18.18.2 || ^20.0.0} - hasBin: true - dependencies: - '@fuel-ts/abi-coder': 0.77.0 - '@fuel-ts/abi-typegen': 0.77.0 - '@fuel-ts/account': 0.77.0(dexie@3.2.6) - '@fuel-ts/address': 0.77.0 - '@fuel-ts/contract': 0.77.0(dexie@3.2.6) - '@fuel-ts/crypto': 0.77.0 - '@fuel-ts/errors': 0.77.0 - '@fuel-ts/forc': 0.77.0 - '@fuel-ts/fuel-core': 0.77.0 - '@fuel-ts/hasher': 0.77.0 - '@fuel-ts/interfaces': 0.77.0 - '@fuel-ts/math': 0.77.0 - '@fuel-ts/merkle': 0.77.0 - '@fuel-ts/program': 0.77.0(dexie@3.2.6) - '@fuel-ts/script': 0.77.0(dexie@3.2.6) - '@fuel-ts/transactions': 0.77.0 - '@fuel-ts/utils': 0.77.0 - '@fuel-ts/versions': 0.77.0 - bundle-require: 4.0.2(esbuild@0.19.12) - chalk: 4.1.2 - chokidar: 3.6.0 - commander: 9.5.0 - esbuild: 0.19.12 - glob: 10.3.10 - handlebars: 4.7.8 - joycon: 3.1.1 - lodash.camelcase: 4.3.0 - portfinder: 1.0.32 - rimraf: 3.0.2 - toml: 3.0.0 - tree-kill: 1.2.2 - yup: 0.32.11 - transitivePeerDependencies: - - bufferutil - - dexie - - encoding - - supports-color - - utf-8-validate - dev: false - /fuels@0.78.0(dexie@3.2.6): resolution: {integrity: sha512-v4uXn6M5nDDsmbFvePotEAWSVlKIgfu2rqvcnQ9uObhgy5slpw+9yDNp8Ds2Z10wyC0bCJZZZslQhQiK/oltiQ==} engines: {node: ^18.18.2 || ^20.0.0} From 70351cb886fb1149e6ecfff3aad66fd97a85de01 Mon Sep 17 00:00:00 2001 From: guimroque Date: Wed, 27 Mar 2024 19:26:49 -0300 Subject: [PATCH 13/85] fix: remove axios and use fetch --- packages/bako-safe/src/BakoSafeConnector.tsx | 49 ++++++++++++-------- packages/bako-safe/src/constants.ts | 2 +- packages/bako-safe/src/request.ts | 16 +++++++ packages/bako-safe/src/types.ts | 7 ++- 4 files changed, 51 insertions(+), 23 deletions(-) create mode 100644 packages/bako-safe/src/request.ts diff --git a/packages/bako-safe/src/BakoSafeConnector.tsx b/packages/bako-safe/src/BakoSafeConnector.tsx index 4224273f..ede7a217 100644 --- a/packages/bako-safe/src/BakoSafeConnector.tsx +++ b/packages/bako-safe/src/BakoSafeConnector.tsx @@ -1,4 +1,3 @@ -import axios, { type AxiosInstance } from 'axios'; import { type Asset, type FuelABI, @@ -12,14 +11,15 @@ import { type Socket, io } from 'socket.io-client'; import { DAppWindow } from './DAPPWindow'; import { - API_URL, APP_BSAFE_URL, APP_DESCRIPTION, APP_IMAGE_DARK, APP_IMAGE_LIGHT, APP_NAME, + HOST_URL, } from './constants'; -import { BAKOSAFEConnectorEvents } from './types'; +import { RequestAPI } from './request'; +import { BAKOSAFEConnectorEvents, type BakoSafeConnectorConfig } from './types'; export class BakoSafeConnector extends FuelConnector { name = APP_NAME; @@ -42,21 +42,31 @@ export class BakoSafeConnector extends FuelConnector { ...BAKOSAFEConnectorEvents, }; - private socket!: Socket; + private socket: Socket; private readonly sessionId: string; - private readonly api: AxiosInstance = axios.create({ - baseURL: API_URL, - }); + private readonly host: string; + private readonly api: RequestAPI; + private connnected = false; private dAppWindow: DAppWindow; - constructor() { + constructor(config?: BakoSafeConnectorConfig) { super(); + this.host = config?.host ?? HOST_URL; + this.api = new RequestAPI(this.host); let sessionId: string = localStorage.getItem('sessionId') || ''; if (!sessionId) { sessionId = crypto.randomUUID(); localStorage.setItem('sessionId', sessionId); } - + this.socket = io(this.host, { + auth: { + username: `[WALLET]${sessionId}`, + data: new Date(), + sessionId: sessionId, + origin: window.origin, + }, + autoConnect: false, + }); this.sessionId = sessionId; this.dAppWindow = new DAppWindow({ @@ -72,17 +82,15 @@ export class BakoSafeConnector extends FuelConnector { }); } + async setup() { + if (!this.connnected) { + this.connnected = true; + await this.socket.connect(); + } + } + async connect() { return new Promise((resolve) => { - this.socket = io(API_URL, { - auth: { - username: `[WALLET]${this.sessionId}`, - data: new Date(), - sessionId: this.sessionId, - origin: window.origin, - }, - }); - this.socket.on(BAKOSAFEConnectorEvents.DEFAULT, (message) => { this.emit(message.type, ...message.data); }); @@ -133,13 +141,14 @@ export class BakoSafeConnector extends FuelConnector { } async ping() { + await this.setup(); return true; } async version() { return { - app: '0.0.1', - network: '>=0.0.0', + app: '0.0.0', + network: '0.0.0', }; } diff --git a/packages/bako-safe/src/constants.ts b/packages/bako-safe/src/constants.ts index 4e200ec4..24ff3e40 100644 --- a/packages/bako-safe/src/constants.ts +++ b/packages/bako-safe/src/constants.ts @@ -8,4 +8,4 @@ export const APP_IMAGE_LIGHT = 'https://safe.bako.global/BAKO_CONNECTOR_ICON.svg'; export const APP_BSAFE_URL = 'https://safe.bako.global'; -export const API_URL = 'https://api-safe.bako.global'; +export const HOST_URL = 'https://api-safe.bako.global'; diff --git a/packages/bako-safe/src/request.ts b/packages/bako-safe/src/request.ts new file mode 100644 index 00000000..0d6aedbe --- /dev/null +++ b/packages/bako-safe/src/request.ts @@ -0,0 +1,16 @@ +import { urlJoin } from 'fuels'; + +export class RequestAPI { + baseUrl: string; + + constructor(baseUrl: string) { + this.baseUrl = baseUrl; + } + + async get(pathname: string) { + const data = await fetch(urlJoin(this.baseUrl, pathname)).then((res) => + res.json(), + ); + return data; + } +} diff --git a/packages/bako-safe/src/types.ts b/packages/bako-safe/src/types.ts index f382ff7a..4cd83967 100644 --- a/packages/bako-safe/src/types.ts +++ b/packages/bako-safe/src/types.ts @@ -1,4 +1,4 @@ -enum BAKOSAFEConnectorEvents { +export enum BAKOSAFEConnectorEvents { //accounts ACCOUNTS = 'accounts', CURRENT_ACCOUNT = 'currentAccount', @@ -21,4 +21,7 @@ enum BAKOSAFEConnectorEvents { //default DEFAULT = 'message', } -export { BAKOSAFEConnectorEvents }; + +export type BakoSafeConnectorConfig = { + host?: string; +}; From fed88a60a9822b75b9138bb7c6d272a3631df912 Mon Sep 17 00:00:00 2001 From: guimroque Date: Thu, 28 Mar 2024 10:32:52 -0300 Subject: [PATCH 14/85] fix: remove axios to use fetch and use fuel storageAbstract --- packages/bako-safe/src/BakoSafeConnector.tsx | 97 ++++++++++++-------- packages/bako-safe/src/DAPPWindow.ts | 43 ++++----- packages/bako-safe/src/constants.ts | 8 +- packages/bako-safe/src/types.ts | 4 + packages/connectors/tsup.config.js | 1 + 5 files changed, 92 insertions(+), 61 deletions(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.tsx b/packages/bako-safe/src/BakoSafeConnector.tsx index ede7a217..c291a5d2 100644 --- a/packages/bako-safe/src/BakoSafeConnector.tsx +++ b/packages/bako-safe/src/BakoSafeConnector.tsx @@ -5,18 +5,21 @@ import { FuelConnectorEventTypes, type Network, Provider, + type StorageAbstract, type TransactionRequestLike, } from 'fuels'; import { type Socket, io } from 'socket.io-client'; import { DAppWindow } from './DAPPWindow'; import { - APP_BSAFE_URL, APP_DESCRIPTION, APP_IMAGE_DARK, APP_IMAGE_LIGHT, APP_NAME, + APP_URL, + HAS_WINDOW, HOST_URL, + WINDOW, } from './constants'; import { RequestAPI } from './request'; import { BAKOSAFEConnectorEvents, type BakoSafeConnectorConfig } from './types'; @@ -29,8 +32,8 @@ export class BakoSafeConnector extends FuelConnector { dark: APP_IMAGE_DARK, }, install: { - action: APP_BSAFE_URL, - link: APP_BSAFE_URL, + action: APP_URL, + link: APP_URL, description: APP_DESCRIPTION, }, }; @@ -42,22 +45,50 @@ export class BakoSafeConnector extends FuelConnector { ...BAKOSAFEConnectorEvents, }; - private socket: Socket; - private readonly sessionId: string; + private readonly appUrl: string; private readonly host: string; private readonly api: RequestAPI; - private connnected = false; - private dAppWindow: DAppWindow; + private setupReady?: boolean; + private socket?: Socket; + private sessionId?: string; + private dAppWindow?: DAppWindow; + private storage?: StorageAbstract; constructor(config?: BakoSafeConnectorConfig) { super(); this.host = config?.host ?? HOST_URL; + this.appUrl = config?.appUrl ?? APP_URL; this.api = new RequestAPI(this.host); - let sessionId: string = localStorage.getItem('sessionId') || ''; + this.storage = this.getStorage(config?.stroage); + } + + // ============================================================ + // Bako Safe application specific methods + // ============================================================ + private getStorage(storage?: StorageAbstract) { + const _storage = + storage ?? (WINDOW.localStorage as unknown as StorageAbstract); + if (!_storage) { + throw new Error('No storage provided'); + } + + return _storage; + } + + private async getSessionId() { + let sessionId: string = (await this.storage?.getItem('sessionId')) || ''; if (!sessionId) { sessionId = crypto.randomUUID(); - localStorage.setItem('sessionId', sessionId); + await this.storage?.setItem('sessionId', sessionId); } + return sessionId; + } + + private async setup() { + if (!HAS_WINDOW) return; + if (this.setupReady) return; + this.setupReady = true; + const sessionId = await this.getSessionId(); this.socket = io(this.host, { auth: { username: `[WALLET]${sessionId}`, @@ -67,35 +98,26 @@ export class BakoSafeConnector extends FuelConnector { }, autoConnect: false, }); - this.sessionId = sessionId; - this.dAppWindow = new DAppWindow({ sessionId, - name: document.title, - origin: window.origin, - popup: { - top: 0, - left: 2560, - width: 450, - height: 1280, - }, + height: 800, + width: 450, + appUrl: this.appUrl, }); + this.socket.connect(); + this.sessionId = sessionId; } - async setup() { - if (!this.connnected) { - this.connnected = true; - await this.socket.connect(); - } - } - + // ============================================================ + // Connector methods + // ============================================================ async connect() { return new Promise((resolve) => { - this.socket.on(BAKOSAFEConnectorEvents.DEFAULT, (message) => { + this.socket?.on(BAKOSAFEConnectorEvents.DEFAULT, (message) => { this.emit(message.type, ...message.data); }); - const dappWindow = this.dAppWindow.open('/'); + const dappWindow = this.dAppWindow?.open('/'); dappWindow?.addEventListener('close', () => { resolve(false); }); @@ -119,13 +141,13 @@ export class BakoSafeConnector extends FuelConnector { _transaction: TransactionRequestLike, ) { return new Promise((resolve, reject) => { - const dappWindow = this.dAppWindow.open('/dapp/transaction'); + const dappWindow = this.dAppWindow?.open('/dapp/transaction'); dappWindow?.addEventListener('close', () => { reject('closed'); }); // @ts-ignore this.on(BAKOSAFEConnectorEvents.POPUP_TRANSFER, () => { - this.socket.emit(BAKOSAFEConnectorEvents.TRANSACTION_SEND, { + this.socket?.emit(BAKOSAFEConnectorEvents.TRANSACTION_SEND, { to: `${this.sessionId}:${window.origin}`, content: { address: _address, @@ -142,7 +164,7 @@ export class BakoSafeConnector extends FuelConnector { async ping() { await this.setup(); - return true; + return !!this.socket; } async version() { @@ -153,29 +175,28 @@ export class BakoSafeConnector extends FuelConnector { } async isConnected() { - const { data } = await this.api.get(`/connections/${this.sessionId}/state`); + const data = await this.api.get(`/connections/${this.sessionId}/state`); this.connected = data; return data && !!this.socket; } async accounts() { - const { data } = await this.api.get( - `/connections/${this.sessionId}/accounts`, - ); + const data = await this.api.get(`/connections/${this.sessionId}/accounts`); + const acc = Array.isArray(data) ? data : []; return acc; } async currentAccount() { - const { data } = await this.api.get( + const data = await this.api.get( `/connections/${this.sessionId}/currentAccount`, ); return data; } async disconnect() { - this.socket.emit(BAKOSAFEConnectorEvents.AUTH_DISCONECT_DAPP, { + this.socket?.emit(BAKOSAFEConnectorEvents.AUTH_DISCONECT_DAPP, { to: `${this.sessionId}:${window.origin}`, content: { sessionId: this.sessionId, @@ -188,7 +209,7 @@ export class BakoSafeConnector extends FuelConnector { } async currentNetwork() { - const { data } = await this.api.get( + const data = await this.api.get( `/connections/${this.sessionId}/currentNetwork`, ); diff --git a/packages/bako-safe/src/DAPPWindow.ts b/packages/bako-safe/src/DAPPWindow.ts index d4451c35..01aa2c0b 100644 --- a/packages/bako-safe/src/DAPPWindow.ts +++ b/packages/bako-safe/src/DAPPWindow.ts @@ -1,33 +1,34 @@ -import { APP_BSAFE_URL } from './constants'; +type PopupConfig = { + appUrl: string; + height: number; + width: number; + sessionId: string; +}; export class DAppWindow { - BSAFEAPP = APP_BSAFE_URL; - constructor( - private config: { - popup: { - top: number; - left: number; - width: number; - height: number; - }; - sessionId: string; - name: string; - origin: string; - }, - ) {} + constructor(private config: PopupConfig) {} - open(method: string) { - const { popup } = this.config; + private get popupConfig() { + const { height, width } = this.config; + return { + top: window.innerHeight / 2 - height / 2, + left: window.innerWidth / 2 - width / 2, + width, + height, + }; + } + open(method: string) { + const { left, top, width, height } = this.popupConfig; return window.open( - `${this.BSAFEAPP}${method}${this.queryString}`, + `${this.config.appUrl}${method}${this.queryString}`, 'popup', - `left=${popup.left},top=${popup.top},width=${popup.width},height=${popup.height}`, + `left=${left},top=${top},width=${width},height=${height}`, ); } private get queryString() { - const { origin, name, sessionId } = this.config; - return `?sessionId=${sessionId}&name=${name}&origin=${origin}`; + const { sessionId } = this.config; + return `?sessionId=${sessionId}&name=${document.title}&origin=${window.origin}`; } } diff --git a/packages/bako-safe/src/constants.ts b/packages/bako-safe/src/constants.ts index 24ff3e40..f03f5046 100644 --- a/packages/bako-safe/src/constants.ts +++ b/packages/bako-safe/src/constants.ts @@ -1,11 +1,15 @@ export const APP_NAME = 'Bako Safe'; export const APP_DESCRIPTION = 'Bako Safe is a connector to safe.bako.global, a non-custodial vault for your crypto assets.'; - export const APP_IMAGE_DARK = 'https://safe.bako.global/BAKO_CONNECTOR_ICON.svg'; export const APP_IMAGE_LIGHT = 'https://safe.bako.global/BAKO_CONNECTOR_ICON.svg'; -export const APP_BSAFE_URL = 'https://safe.bako.global'; +export const APP_URL = 'https://safe.bako.global'; export const HOST_URL = 'https://api-safe.bako.global'; + +// Window object +export const HAS_WINDOW = typeof window !== 'undefined'; +// biome-ignore lint/suspicious/noExplicitAny: +export const WINDOW: any = HAS_WINDOW ? window : {}; diff --git a/packages/bako-safe/src/types.ts b/packages/bako-safe/src/types.ts index 4cd83967..aee95a45 100644 --- a/packages/bako-safe/src/types.ts +++ b/packages/bako-safe/src/types.ts @@ -1,3 +1,5 @@ +import type { StorageAbstract } from 'fuels'; + export enum BAKOSAFEConnectorEvents { //accounts ACCOUNTS = 'accounts', @@ -24,4 +26,6 @@ export enum BAKOSAFEConnectorEvents { export type BakoSafeConnectorConfig = { host?: string; + appUrl?: string; + stroage?: StorageAbstract; }; diff --git a/packages/connectors/tsup.config.js b/packages/connectors/tsup.config.js index b7fe2bc5..60c47f53 100644 --- a/packages/connectors/tsup.config.js +++ b/packages/connectors/tsup.config.js @@ -3,6 +3,7 @@ import { defineConfig } from 'tsup'; export default defineConfig((options) => ({ ...baseConfig(options, { withReact: false }), + platform: 'browser', entry: ['src/index.ts'], external: ['fuels'], noExternal: [ From 3230f5edbedd6d281ccc3a53fc66195f4ac3c931 Mon Sep 17 00:00:00 2001 From: guimroque Date: Thu, 28 Mar 2024 10:43:19 -0300 Subject: [PATCH 15/85] chore: changeset --- .changeset/forty-timers-heal.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/forty-timers-heal.md diff --git a/.changeset/forty-timers-heal.md b/.changeset/forty-timers-heal.md new file mode 100644 index 00000000..22a716aa --- /dev/null +++ b/.changeset/forty-timers-heal.md @@ -0,0 +1,5 @@ +--- +"@fuel-connectors/bako-safe": major +--- + +Add bako-safe connector \ No newline at end of file From fe25745b4e70dd125498c519eb2a0569b0def1b5 Mon Sep 17 00:00:00 2001 From: guimroque Date: Fri, 29 Mar 2024 12:29:18 -0300 Subject: [PATCH 16/85] fix: connection popup closing --- packages/bako-safe/src/BakoSafeConnector.tsx | 39 +++++++++++++++----- packages/bako-safe/src/types.ts | 1 + 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.tsx b/packages/bako-safe/src/BakoSafeConnector.tsx index c291a5d2..bfd1a3a8 100644 --- a/packages/bako-safe/src/BakoSafeConnector.tsx +++ b/packages/bako-safe/src/BakoSafeConnector.tsx @@ -108,22 +108,41 @@ export class BakoSafeConnector extends FuelConnector { this.sessionId = sessionId; } + private async checkWindow(window: Window) { + const checkOpened = () => { + if (window?.closed) { + this.emit(this.events.POPUP_CLOSED); + clearInterval(timer); + } + }; + const timer = setInterval(checkOpened, 500); + } + // ============================================================ // Connector methods // ============================================================ async connect() { return new Promise((resolve) => { - this.socket?.on(BAKOSAFEConnectorEvents.DEFAULT, (message) => { + this.socket?.on(this.events.DEFAULT, (message) => { this.emit(message.type, ...message.data); }); const dappWindow = this.dAppWindow?.open('/'); - dappWindow?.addEventListener('close', () => { + + if (!dappWindow) { + resolve(false); + return; + } + + this.checkWindow(dappWindow); + + // @ts-ignore + this.on(this.events.POPUP_CLOSED, () => { resolve(false); }); // @ts-ignore - this.on(BAKOSAFEConnectorEvents.CONNECTION, (connection: boolean) => { + this.on(this.events.CONNECTION, (connection: boolean) => { this.connected = connection; resolve(connection); }); @@ -146,8 +165,8 @@ export class BakoSafeConnector extends FuelConnector { reject('closed'); }); // @ts-ignore - this.on(BAKOSAFEConnectorEvents.POPUP_TRANSFER, () => { - this.socket?.emit(BAKOSAFEConnectorEvents.TRANSACTION_SEND, { + this.on(this.events.POPUP_TRANSFER, () => { + this.socket?.emit(this.events.TRANSACTION_SEND, { to: `${this.sessionId}:${window.origin}`, content: { address: _address, @@ -156,7 +175,7 @@ export class BakoSafeConnector extends FuelConnector { }); }); // @ts-ignore - this.on(BAKOSAFEConnectorEvents.TRANSACTION_CREATED, (content) => { + this.on(this.events.TRANSACTION_CREATED, (content) => { resolve(`0x${content}`); }); }); @@ -196,15 +215,15 @@ export class BakoSafeConnector extends FuelConnector { } async disconnect() { - this.socket?.emit(BAKOSAFEConnectorEvents.AUTH_DISCONECT_DAPP, { + this.socket?.emit(this.events.AUTH_DISCONECT_DAPP, { to: `${this.sessionId}:${window.origin}`, content: { sessionId: this.sessionId, }, }); - this.emit(BAKOSAFEConnectorEvents.CONNECTION, false); - this.emit(BAKOSAFEConnectorEvents.ACCOUNTS, []); - this.emit(BAKOSAFEConnectorEvents.CURRENT_ACCOUNT, null); + this.emit(this.events.CONNECTION, false); + this.emit(this.events.ACCOUNTS, []); + this.emit(this.events.CURRENT_ACCOUNT, null); return false; } diff --git a/packages/bako-safe/src/types.ts b/packages/bako-safe/src/types.ts index aee95a45..e715188d 100644 --- a/packages/bako-safe/src/types.ts +++ b/packages/bako-safe/src/types.ts @@ -19,6 +19,7 @@ export enum BAKOSAFEConnectorEvents { CONNECTION = 'connection', POPUP_TRANSFER = '[POPUP_TRANSFER]_connected', CONNECTED_NETWORK = '[CONNECTED_NETWORK]', + POPUP_CLOSED = '[POPUP_CLOSED]', //default DEFAULT = 'message', From 9d830e804d7c8b7af9ce94d82317a6f8c5c991e8 Mon Sep 17 00:00:00 2001 From: guimroque Date: Wed, 3 Apr 2024 21:24:46 -0300 Subject: [PATCH 17/85] fix: return an error with window of transaction has closed --- packages/bako-safe/src/BakoSafeConnector.tsx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.tsx b/packages/bako-safe/src/BakoSafeConnector.tsx index bfd1a3a8..d4bd7f1a 100644 --- a/packages/bako-safe/src/BakoSafeConnector.tsx +++ b/packages/bako-safe/src/BakoSafeConnector.tsx @@ -161,9 +161,18 @@ export class BakoSafeConnector extends FuelConnector { ) { return new Promise((resolve, reject) => { const dappWindow = this.dAppWindow?.open('/dapp/transaction'); - dappWindow?.addEventListener('close', () => { - reject('closed'); + + if (!dappWindow) { + reject(new Error('Window not opened')); + return; + } + + this.checkWindow(dappWindow); + // @ts-ignore + this.on(this.events.POPUP_CLOSED, () => { + reject(new Error('Window closed')); }); + // @ts-ignore this.on(this.events.POPUP_TRANSFER, () => { this.socket?.emit(this.events.TRANSACTION_SEND, { From 3470c03f8332e3254fe347dc9fec6a25a7e64a8e Mon Sep 17 00:00:00 2001 From: guimroque Date: Wed, 3 Apr 2024 21:45:53 -0300 Subject: [PATCH 18/85] fix: move local events emit set to setup --- packages/bako-safe/src/BakoSafeConnector.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.tsx b/packages/bako-safe/src/BakoSafeConnector.tsx index d4bd7f1a..d9578436 100644 --- a/packages/bako-safe/src/BakoSafeConnector.tsx +++ b/packages/bako-safe/src/BakoSafeConnector.tsx @@ -105,6 +105,10 @@ export class BakoSafeConnector extends FuelConnector { appUrl: this.appUrl, }); this.socket.connect(); + + this.socket?.on(this.events.DEFAULT, (message) => { + this.emit(message.type, ...message.data); + }); this.sessionId = sessionId; } @@ -123,10 +127,6 @@ export class BakoSafeConnector extends FuelConnector { // ============================================================ async connect() { return new Promise((resolve) => { - this.socket?.on(this.events.DEFAULT, (message) => { - this.emit(message.type, ...message.data); - }); - const dappWindow = this.dAppWindow?.open('/'); if (!dappWindow) { From 6170de59f517602951bc811b1937cbc64e80a416 Mon Sep 17 00:00:00 2001 From: guimroque Date: Wed, 3 Apr 2024 22:00:52 -0300 Subject: [PATCH 19/85] fix: verify if event has origin on bako server --- packages/bako-safe/src/BakoSafeConnector.tsx | 44 ++++++++++++++------ 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.tsx b/packages/bako-safe/src/BakoSafeConnector.tsx index d9578436..d912c3d0 100644 --- a/packages/bako-safe/src/BakoSafeConnector.tsx +++ b/packages/bako-safe/src/BakoSafeConnector.tsx @@ -53,6 +53,7 @@ export class BakoSafeConnector extends FuelConnector { private sessionId?: string; private dAppWindow?: DAppWindow; private storage?: StorageAbstract; + private username?: string; constructor(config?: BakoSafeConnectorConfig) { super(); @@ -84,6 +85,12 @@ export class BakoSafeConnector extends FuelConnector { return sessionId; } + /** + * [important] + * this.socket.emit -> emit message to the server + * this.emit -> emit message to the dApp client + */ + private async setup() { if (!HAS_WINDOW) return; if (this.setupReady) return; @@ -106,29 +113,37 @@ export class BakoSafeConnector extends FuelConnector { }); this.socket.connect(); + this.sessionId = sessionId; + this.username = `[WALLET]${sessionId}`; + this.socket?.on(this.events.DEFAULT, (message) => { - this.emit(message.type, ...message.data); + this.emit(message.type, { + data: message, + from: this.username, + }); }); - this.sessionId = sessionId; } private async checkWindow(window: Window) { const checkOpened = () => { if (window?.closed) { - this.emit(this.events.POPUP_CLOSED); + this.emit(this.events.POPUP_CLOSED, { from: this.username }); clearInterval(timer); } }; const timer = setInterval(checkOpened, 500); } + private verifyMessageOrigin(message: string) { + return !(message === this.username); + } + // ============================================================ // Connector methods // ============================================================ async connect() { return new Promise((resolve) => { const dappWindow = this.dAppWindow?.open('/'); - if (!dappWindow) { resolve(false); return; @@ -137,14 +152,16 @@ export class BakoSafeConnector extends FuelConnector { this.checkWindow(dappWindow); // @ts-ignore - this.on(this.events.POPUP_CLOSED, () => { + this.on(this.events.POPUP_CLOSED, ({ from }) => { + if (this.verifyMessageOrigin(from)) return; resolve(false); }); // @ts-ignore - this.on(this.events.CONNECTION, (connection: boolean) => { - this.connected = connection; - resolve(connection); + this.on(this.events.CONNECTION, ({ data, from }) => { + if (this.verifyMessageOrigin(from)) return; + this.connected = data; + resolve(data); }); }); } @@ -169,12 +186,14 @@ export class BakoSafeConnector extends FuelConnector { this.checkWindow(dappWindow); // @ts-ignore - this.on(this.events.POPUP_CLOSED, () => { + this.on(this.events.POPUP_CLOSED, ({ from }) => { + if (this.verifyMessageOrigin(from)) return; reject(new Error('Window closed')); }); // @ts-ignore - this.on(this.events.POPUP_TRANSFER, () => { + this.on(this.events.POPUP_TRANSFER, ({ from }) => { + if (this.verifyMessageOrigin(from)) return; this.socket?.emit(this.events.TRANSACTION_SEND, { to: `${this.sessionId}:${window.origin}`, content: { @@ -184,8 +203,9 @@ export class BakoSafeConnector extends FuelConnector { }); }); // @ts-ignore - this.on(this.events.TRANSACTION_CREATED, (content) => { - resolve(`0x${content}`); + this.on(this.events.TRANSACTION_CREATED, ({ data, from }) => { + if (this.verifyMessageOrigin(from)) return; + resolve(`0x${data}`); }); }); } From 37ea5afbeaeb0be28d76f9b5b1c5a197459d4601 Mon Sep 17 00:00:00 2001 From: guimroque Date: Wed, 10 Apr 2024 08:39:49 -0300 Subject: [PATCH 20/85] fix: transaction and call contract request --- packages/bako-safe/src/BakoSafeConnector.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.tsx b/packages/bako-safe/src/BakoSafeConnector.tsx index d912c3d0..3820d9be 100644 --- a/packages/bako-safe/src/BakoSafeConnector.tsx +++ b/packages/bako-safe/src/BakoSafeConnector.tsx @@ -204,8 +204,10 @@ export class BakoSafeConnector extends FuelConnector { }); // @ts-ignore this.on(this.events.TRANSACTION_CREATED, ({ data, from }) => { + //@ts-ignore + const txId = `0x${data.data[0]}`; if (this.verifyMessageOrigin(from)) return; - resolve(`0x${data}`); + resolve(txId); }); }); } From e3554dc8cc51260cdfd3dcd25e2cdd245f9d8419 Mon Sep 17 00:00:00 2001 From: guimroque Date: Wed, 17 Apr 2024 19:24:59 -0300 Subject: [PATCH 21/85] wip: socket --- packages/bako-safe/src/BakoSafeConnector.tsx | 142 +++++++++++++------ packages/bako-safe/src/DAPPWindow.ts | 58 +++++++- packages/bako-safe/src/constants.ts | 8 +- packages/bako-safe/src/request.ts | 19 +++ 4 files changed, 176 insertions(+), 51 deletions(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.tsx b/packages/bako-safe/src/BakoSafeConnector.tsx index 3820d9be..73c8c81c 100644 --- a/packages/bako-safe/src/BakoSafeConnector.tsx +++ b/packages/bako-safe/src/BakoSafeConnector.tsx @@ -6,6 +6,7 @@ import { type Network, Provider, type StorageAbstract, + transactionRequestify, type TransactionRequestLike, } from 'fuels'; import { type Socket, io } from 'socket.io-client'; @@ -20,6 +21,7 @@ import { HAS_WINDOW, HOST_URL, WINDOW, + SOCKET_URL } from './constants'; import { RequestAPI } from './request'; import { BAKOSAFEConnectorEvents, type BakoSafeConnectorConfig } from './types'; @@ -96,9 +98,9 @@ export class BakoSafeConnector extends FuelConnector { if (this.setupReady) return; this.setupReady = true; const sessionId = await this.getSessionId(); - this.socket = io(this.host, { + this.socket = io(SOCKET_URL, { auth: { - username: `[WALLET]${sessionId}`, + username: '[CONNECTOR]', data: new Date(), sessionId: sessionId, origin: window.origin, @@ -114,13 +116,25 @@ export class BakoSafeConnector extends FuelConnector { this.socket.connect(); this.sessionId = sessionId; - this.username = `[WALLET]${sessionId}`; - - this.socket?.on(this.events.DEFAULT, (message) => { - this.emit(message.type, { - data: message, - from: this.username, - }); + this.username = `[CONNECTOR]`; + + this.socket?.on(this.events.DEFAULT, ({data}) => { + console.log('[CONNECTOR]: RECEBIDO', data) + // const { type, to, ...rest } = data; + // console.log(data, type, to, ...rest) + if(data.to === this.username){ + console.log('[IF_MIDDLEWARE]', { + evento: data.type, + data: { + ...data.data, + from: data.to, + }, + }) + this.emit(data.type, { + from: data.to, + data: data.data, + }); + } }); } @@ -135,6 +149,8 @@ export class BakoSafeConnector extends FuelConnector { } private verifyMessageOrigin(message: string) { + console.log() + console.log('[MESSAGE_ORIGIN]', !(message === this.username)) return !(message === this.username); } @@ -143,26 +159,20 @@ export class BakoSafeConnector extends FuelConnector { // ============================================================ async connect() { return new Promise((resolve) => { - const dappWindow = this.dAppWindow?.open('/'); - if (!dappWindow) { - resolve(false); - return; - } - - this.checkWindow(dappWindow); + const cred = crypto.randomUUID() + this.dAppWindow?.open('/'); // @ts-ignore - this.on(this.events.POPUP_CLOSED, ({ from }) => { - if (this.verifyMessageOrigin(from)) return; - resolve(false); + this.on('[AUTH_CONFIRMED]', (data) => { + console.log('[AUTH_CONFIRMED]', data) + if(data.id === cred){ + } + const { connected } = data; + this.connected = connected; + resolve(connected); }); - // @ts-ignore - this.on(this.events.CONNECTION, ({ data, from }) => { - if (this.verifyMessageOrigin(from)) return; - this.connected = data; - resolve(data); - }); + }); } @@ -176,23 +186,73 @@ export class BakoSafeConnector extends FuelConnector { _address: string, _transaction: TransactionRequestLike, ) { - return new Promise((resolve, reject) => { - const dappWindow = this.dAppWindow?.open('/dapp/transaction'); + console.log('[SEND_TX_CALLED]') + return new Promise(async (resolve, reject) => { - if (!dappWindow) { - reject(new Error('Window not opened')); - return; - } - this.checkWindow(dappWindow); + + + const tx = transactionRequestify(_transaction); + const network = await this.currentNetwork(); + const tx_id = tx.getTransactionId(network.chainId); + const vault = _address + const {code, validAt, tx_blocked, metadata, user_address} = await this.api.get(`/connections/${this.sessionId}/transaction/${vault}/${tx_id}`); + + console.log('[AGURDANDO EVENTO]') + //aguarda confirmacao de abertura da popup, para enviar as infos da tx + this.dAppWindow?.open('/dapp/transaction') + // envia uma request pra api, cadastranco um recover code, e todos os dados necessários para a // @ts-ignore - this.on(this.events.POPUP_CLOSED, ({ from }) => { - if (this.verifyMessageOrigin(from)) return; - reject(new Error('Window closed')); - }); + this.on('[CONNECTED_RESOURCE]', (data) => { + console.log('[CONNECTED_RESOURCE]', data) + this.socket?.emit('message', { + room: this.sessionId, + to: '[UI]', + type: '[TX_PENDING]', + content: { + ...metadata, + code, + validAt, + tx_blocked, + transaction: _transaction, + provider: network.url, + user_address, + }, + }) + }) + + + + + // //envia o código para a popup + // setTimeout(async () => { + + + // console.log('[RETURNED_CODE]', code) + // }, 3000) + + //envia pela popup, as infos para a tx + // - popup com timer + // - txPayload + // - tx disponíveis + // - code + + // aguarda api confirmar que popup publicou a tx + // - api confirma que tx foi publicada + // - api retorna txId + + //resolver a promise com o txId + + + // // @ts-ignore + // this.on(this.events.POPUP_CLOSED, ({ from }) => { + // if (this.verifyMessageOrigin(from)) return; + // reject(new Error('Window closed')); + // }); // @ts-ignore this.on(this.events.POPUP_TRANSFER, ({ from }) => { + console.log('[SOLICITADO PARA ENVIAR TRANSACAO]', from); if (this.verifyMessageOrigin(from)) return; this.socket?.emit(this.events.TRANSACTION_SEND, { to: `${this.sessionId}:${window.origin}`, @@ -204,6 +264,7 @@ export class BakoSafeConnector extends FuelConnector { }); // @ts-ignore this.on(this.events.TRANSACTION_CREATED, ({ data, from }) => { + console.log('[TRANSACTION RECEBIDA DE VOLTA PELO DAPP]', data, from); //@ts-ignore const txId = `0x${data.data[0]}`; if (this.verifyMessageOrigin(from)) return; @@ -225,6 +286,7 @@ export class BakoSafeConnector extends FuelConnector { } async isConnected() { + //this request goes to the api without sessionId const data = await this.api.get(`/connections/${this.sessionId}/state`); this.connected = data; @@ -246,12 +308,8 @@ export class BakoSafeConnector extends FuelConnector { } async disconnect() { - this.socket?.emit(this.events.AUTH_DISCONECT_DAPP, { - to: `${this.sessionId}:${window.origin}`, - content: { - sessionId: this.sessionId, - }, - }); + //nao necessário esperar mensagens + await this.api.delete(`/connections/${this.sessionId}`); this.emit(this.events.CONNECTION, false); this.emit(this.events.ACCOUNTS, []); this.emit(this.events.CURRENT_ACCOUNT, null); diff --git a/packages/bako-safe/src/DAPPWindow.ts b/packages/bako-safe/src/DAPPWindow.ts index 01aa2c0b..97801e1c 100644 --- a/packages/bako-safe/src/DAPPWindow.ts +++ b/packages/bako-safe/src/DAPPWindow.ts @@ -1,3 +1,5 @@ +import { APP_NAME } from "./constants"; + type PopupConfig = { appUrl: string; height: number; @@ -19,16 +21,58 @@ export class DAppWindow { } open(method: string) { - const { left, top, width, height } = this.popupConfig; - return window.open( - `${this.config.appUrl}${method}${this.queryString}`, - 'popup', - `left=${left},top=${top},width=${width},height=${height}`, - ); + try{ + console.log('[opning]: ', `${this.config.appUrl}${method}${this.queryString}`) + const { left, top, width, height } = this.popupConfig; + const is = method.includes('/dapp/') + + if(is){ + return this.makeFrame(method) + } + + // //return this.makeFrame(method); + + // this.makeLink(method) + // return window.open() + + return this.makeLink(method) + }catch(e){ + console.error('[ERROR]', e) + } + } + + + makeFrame(method: string){ + console.log('[MAKE_FRAME]: ', method) + const frame = document.createElement('iframe'); + frame.src = `${this.config.appUrl}${method}${this.queryString}`; + // frame.src = 'https://google.com'//`${this.config.appUrl}${method}${this.queryString}`; + console.log('[frame.src]: ', frame.src) + //const $app = document.createElement('iframe'); + //console.log('[frame.src]: ', $app) + frame.style.position = 'absolute'; + frame.style.zIndex = '99999999'; + frame.style.top = '15%'; + frame.style.left = '25%'; + frame.style.width = '50%'; + frame.style.height = '70%'; + frame.style.border = 'none'; + + document.body.appendChild(frame); + } + + + makeLink(method: string){ + const link = `${this.config.appUrl}${method}${this.queryString}`; + + const a = document.createElement("a"); + a.setAttribute('href', link); + a.setAttribute('target', '_blank'); + a.click(); } private get queryString() { const { sessionId } = this.config; - return `?sessionId=${sessionId}&name=${document.title}&origin=${window.origin}`; + return `?sessionId=${sessionId}&origin=${window.location.origin}&name=${APP_NAME}`; } } diff --git a/packages/bako-safe/src/constants.ts b/packages/bako-safe/src/constants.ts index f03f5046..23747807 100644 --- a/packages/bako-safe/src/constants.ts +++ b/packages/bako-safe/src/constants.ts @@ -6,8 +6,12 @@ export const APP_IMAGE_DARK = export const APP_IMAGE_LIGHT = 'https://safe.bako.global/BAKO_CONNECTOR_ICON.svg'; -export const APP_URL = 'https://safe.bako.global'; -export const HOST_URL = 'https://api-safe.bako.global'; +// export const APP_URL = 'https://safe.bako.global'; +// export const HOST_URL = 'https://api-safe.bako.global'; + +export const APP_URL = 'http://localhost:5174'; +export const HOST_URL = 'http://localhost:3333'; +export const SOCKET_URL = 'http://localhost:3000'; // Window object export const HAS_WINDOW = typeof window !== 'undefined'; diff --git a/packages/bako-safe/src/request.ts b/packages/bako-safe/src/request.ts index 0d6aedbe..c0307ba6 100644 --- a/packages/bako-safe/src/request.ts +++ b/packages/bako-safe/src/request.ts @@ -13,4 +13,23 @@ export class RequestAPI { ); return data; } + + async post(pathname: string, body: any) { + const data = await fetch(urlJoin(this.baseUrl, pathname), { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body, + }).then((res) => res.json()); + return data; + } + + + async delete(pathname: string) { + await fetch(urlJoin(this.baseUrl, pathname), { + method: 'DELETE', + }); + } } + From 4b1750034a314fb04bb491cc5f6799f34c9878b9 Mon Sep 17 00:00:00 2001 From: guimroque Date: Thu, 18 Apr 2024 22:09:26 -0300 Subject: [PATCH 22/85] wip: safari --- packages/bako-safe/src/BakoSafeConnector.tsx | 107 +++---------------- packages/bako-safe/src/DAPPWindow.ts | 11 +- 2 files changed, 24 insertions(+), 94 deletions(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.tsx b/packages/bako-safe/src/BakoSafeConnector.tsx index 73c8c81c..cde65657 100644 --- a/packages/bako-safe/src/BakoSafeConnector.tsx +++ b/packages/bako-safe/src/BakoSafeConnector.tsx @@ -138,22 +138,6 @@ export class BakoSafeConnector extends FuelConnector { }); } - private async checkWindow(window: Window) { - const checkOpened = () => { - if (window?.closed) { - this.emit(this.events.POPUP_CLOSED, { from: this.username }); - clearInterval(timer); - } - }; - const timer = setInterval(checkOpened, 500); - } - - private verifyMessageOrigin(message: string) { - console.log() - console.log('[MESSAGE_ORIGIN]', !(message === this.username)) - return !(message === this.username); - } - // ============================================================ // Connector methods // ============================================================ @@ -165,8 +149,8 @@ export class BakoSafeConnector extends FuelConnector { // @ts-ignore this.on('[AUTH_CONFIRMED]', (data) => { console.log('[AUTH_CONFIRMED]', data) - if(data.id === cred){ - } + // if(data.id === cred){ + // } const { connected } = data; this.connected = connected; resolve(connected); @@ -188,88 +172,27 @@ export class BakoSafeConnector extends FuelConnector { ) { console.log('[SEND_TX_CALLED]') return new Promise(async (resolve, reject) => { - - - - - const tx = transactionRequestify(_transaction); - const network = await this.currentNetwork(); - const tx_id = tx.getTransactionId(network.chainId); - const vault = _address - const {code, validAt, tx_blocked, metadata, user_address} = await this.api.get(`/connections/${this.sessionId}/transaction/${vault}/${tx_id}`); - - console.log('[AGURDANDO EVENTO]') - //aguarda confirmacao de abertura da popup, para enviar as infos da tx this.dAppWindow?.open('/dapp/transaction') - // envia uma request pra api, cadastranco um recover code, e todos os dados necessários para a // @ts-ignore this.on('[CONNECTED_RESOURCE]', (data) => { console.log('[CONNECTED_RESOURCE]', data) - this.socket?.emit('message', { - room: this.sessionId, - to: '[UI]', - type: '[TX_PENDING]', - content: { - ...metadata, - code, - validAt, - tx_blocked, - transaction: _transaction, - provider: network.url, - user_address, - }, + this.off('[TX_EVENT_REQUEST]', () => {}) + this.socket?.emit('[TX_EVENT_REQUEST]', { + _transaction, + _address, }) }) - - - - // //envia o código para a popup - // setTimeout(async () => { - - - // console.log('[RETURNED_CODE]', code) - // }, 3000) - - //envia pela popup, as infos para a tx - // - popup com timer - // - txPayload - // - tx disponíveis - // - code - - // aguarda api confirmar que popup publicou a tx - // - api confirma que tx foi publicada - // - api retorna txId - - //resolver a promise com o txId - - - // // @ts-ignore - // this.on(this.events.POPUP_CLOSED, ({ from }) => { - // if (this.verifyMessageOrigin(from)) return; - // reject(new Error('Window closed')); - // }); - // @ts-ignore - this.on(this.events.POPUP_TRANSFER, ({ from }) => { - console.log('[SOLICITADO PARA ENVIAR TRANSACAO]', from); - if (this.verifyMessageOrigin(from)) return; - this.socket?.emit(this.events.TRANSACTION_SEND, { - to: `${this.sessionId}:${window.origin}`, - content: { - address: _address, - transaction: _transaction, - }, - }); - }); - // @ts-ignore - this.on(this.events.TRANSACTION_CREATED, ({ data, from }) => { - console.log('[TRANSACTION RECEBIDA DE VOLTA PELO DAPP]', data, from); - //@ts-ignore - const txId = `0x${data.data[0]}`; - if (this.verifyMessageOrigin(from)) return; - resolve(txId); - }); + this.on('[TX_EVENT_CONFIRMED]', ({data}) => { + this.off('[TX_EVENT_REQUEST]', () => {}) + console.log('[RESULTADO_TX]', data) + // @ts-ignore + console.log('[RESPOSTA]: ', `0x${data.id}`) + this.dAppWindow?.close(); + // @ts-ignore + resolve(`0x${data.id}`) + }) }); } diff --git a/packages/bako-safe/src/DAPPWindow.ts b/packages/bako-safe/src/DAPPWindow.ts index 97801e1c..77188287 100644 --- a/packages/bako-safe/src/DAPPWindow.ts +++ b/packages/bako-safe/src/DAPPWindow.ts @@ -8,10 +8,11 @@ type PopupConfig = { }; export class DAppWindow { - constructor(private config: PopupConfig) {} + constructor(private config: PopupConfig) { + } private get popupConfig() { - const { height, width } = this.config; + const { height, width} = this.config; return { top: window.innerHeight / 2 - height / 2, left: window.innerWidth / 2 - width / 2, @@ -45,6 +46,7 @@ export class DAppWindow { makeFrame(method: string){ console.log('[MAKE_FRAME]: ', method) const frame = document.createElement('iframe'); + frame.id = `${this.config.sessionId}-iframe`; frame.src = `${this.config.appUrl}${method}${this.queryString}`; // frame.src = 'https://google.com'//`${this.config.appUrl}${method}${this.queryString}`; console.log('[frame.src]: ', frame.src) @@ -61,6 +63,11 @@ export class DAppWindow { document.body.appendChild(frame); } + close(){ + const frame = document.getElementById(`${this.config.sessionId}-iframe`); + if(frame) document.body.removeChild(frame) + } + makeLink(method: string){ const link = `${this.config.appUrl}${method}${this.queryString}`; From 86d20503c4efcba8bcc9de3f4ab2f4dc227afa06 Mon Sep 17 00:00:00 2001 From: guimroque Date: Wed, 24 Apr 2024 09:33:00 -0300 Subject: [PATCH 23/85] wip: ping method and message control by id --- packages/bako-safe/src/BakoSafeConnector.tsx | 186 +++++++++++-------- packages/bako-safe/src/DAPPWindow.ts | 122 ++++++++---- packages/bako-safe/src/SocketClient.ts | 79 ++++++++ 3 files changed, 269 insertions(+), 118 deletions(-) create mode 100644 packages/bako-safe/src/SocketClient.ts diff --git a/packages/bako-safe/src/BakoSafeConnector.tsx b/packages/bako-safe/src/BakoSafeConnector.tsx index cde65657..339c1e15 100644 --- a/packages/bako-safe/src/BakoSafeConnector.tsx +++ b/packages/bako-safe/src/BakoSafeConnector.tsx @@ -6,10 +6,8 @@ import { type Network, Provider, type StorageAbstract, - transactionRequestify, type TransactionRequestLike, } from 'fuels'; -import { type Socket, io } from 'socket.io-client'; import { DAppWindow } from './DAPPWindow'; import { @@ -21,10 +19,10 @@ import { HAS_WINDOW, HOST_URL, WINDOW, - SOCKET_URL } from './constants'; import { RequestAPI } from './request'; import { BAKOSAFEConnectorEvents, type BakoSafeConnectorConfig } from './types'; +import { SocketClient } from './SocketClient'; export class BakoSafeConnector extends FuelConnector { name = APP_NAME; @@ -51,11 +49,10 @@ export class BakoSafeConnector extends FuelConnector { private readonly host: string; private readonly api: RequestAPI; private setupReady?: boolean; - private socket?: Socket; + private socket?: SocketClient; private sessionId?: string; private dAppWindow?: DAppWindow; private storage?: StorageAbstract; - private username?: string; constructor(config?: BakoSafeConnectorConfig) { super(); @@ -63,6 +60,7 @@ export class BakoSafeConnector extends FuelConnector { this.appUrl = config?.appUrl ?? APP_URL; this.api = new RequestAPI(this.host); this.storage = this.getStorage(config?.stroage); + this.setupReady = false; } // ============================================================ @@ -87,6 +85,30 @@ export class BakoSafeConnector extends FuelConnector { return sessionId; } + private checkWindow() { + // timeout to open + const open_interval = setInterval(() => { + const isOpen = this.dAppWindow?.isOpen; + if(!isOpen) { + this.emit('[CLIENT_DISCONNECTED]', {}); + clearInterval(open_interval); + } + }, 2000); + // safari browser does not support window.opener + if(this.dAppWindow?.isSafariBrowser) return; + + // timeout to close + const interval = setInterval(() => { + const isOpen = this.dAppWindow?.opned && this.dAppWindow?.opned.closed; + if(isOpen) { + this.emit('[CLIENT_DISCONNECTED]', {}); + clearInterval(interval); + } + }, 300); + } + + + /** * [important] * this.socket.emit -> emit message to the server @@ -94,69 +116,65 @@ export class BakoSafeConnector extends FuelConnector { */ private async setup() { - if (!HAS_WINDOW) return; - if (this.setupReady) return; - this.setupReady = true; - const sessionId = await this.getSessionId(); - this.socket = io(SOCKET_URL, { - auth: { - username: '[CONNECTOR]', - data: new Date(), - sessionId: sessionId, - origin: window.origin, - }, - autoConnect: false, - }); - this.dAppWindow = new DAppWindow({ - sessionId, - height: 800, - width: 450, - appUrl: this.appUrl, - }); - this.socket.connect(); - - this.sessionId = sessionId; - this.username = `[CONNECTOR]`; - - this.socket?.on(this.events.DEFAULT, ({data}) => { - console.log('[CONNECTOR]: RECEBIDO', data) - // const { type, to, ...rest } = data; - // console.log(data, type, to, ...rest) - if(data.to === this.username){ - console.log('[IF_MIDDLEWARE]', { - evento: data.type, - data: { - ...data.data, - from: data.to, - }, - }) - this.emit(data.type, { - from: data.to, - data: data.data, - }); - } - }); + if (!HAS_WINDOW) return; + if (this.setupReady) return; + const sessionId = await this.getSessionId(); + + this.sessionId = sessionId; + + this.socket = new SocketClient({ + sessionId, + events: this, + }); + + this.dAppWindow = new DAppWindow({ + sessionId, + height: 800, + width: 450, + appUrl: this.appUrl, + request_id: this.socket.request_id, + }); + + this.setupReady = true; } // ============================================================ // Connector methods // ============================================================ async connect() { - return new Promise((resolve) => { - const cred = crypto.randomUUID() - this.dAppWindow?.open('/'); + return new Promise(async (resolve, reject) => { + // some browsers don't find the connection via ping, in others it doesn't work so well + const is_connected = await this.isConnected(); + if(is_connected){ + resolve(true) + return; + } - // @ts-ignore - this.on('[AUTH_CONFIRMED]', (data) => { - console.log('[AUTH_CONFIRMED]', data) - // if(data.id === cred){ - // } - const { connected } = data; - this.connected = connected; - resolve(connected); - }); + const request = '[AUTH_CONFIRMED]' + const connect_cancel = '[CLIENT_DISCONNECTED]' + // window controll + this.dAppWindow?.open('/', reject) + this.checkWindow() + + //events controll + // @ts-ignore + this.socket?.events.on(connect_cancel, () => { // cancel the transaction + this.dAppWindow?.close() + this.off(connect_cancel, () => {}) + reject + }) + // @ts-ignore + this.socket?.events.on(request, async (data) => { + this.socket?.events.off(request, () => {}) + this.dAppWindow?.close() + this.emit(this.events.CONNECTION, data) + this.emit(this.events.ACCOUNTS, await this.accounts()) + this.emit(this.events.CURRENT_ACCOUNT, await this.currentAccount()) + + resolve(true) + }) }); } @@ -170,35 +188,47 @@ export class BakoSafeConnector extends FuelConnector { _address: string, _transaction: TransactionRequestLike, ) { - console.log('[SEND_TX_CALLED]') return new Promise(async (resolve, reject) => { - this.dAppWindow?.open('/dapp/transaction') + const connect_confirm = '[CONNECTED]' + const connect_cancel = '[CLIENT_DISCONNECTED]' + const request_tx_pending = '[TX_EVENT_REQUEST]' + const request_tx_confirm = '[TX_EVENT_CONFIRMED]' + + // window controll + this.dAppWindow?.open('/dapp/transaction', reject) + this.checkWindow() + + //events controll + // @ts-ignore + this.socket?.events.on(connect_cancel, () => { // cancel the transaction + this.dAppWindow?.close() + this.off(connect_cancel, () => {}) + reject() + }) + // @ts-ignore - this.on('[CONNECTED_RESOURCE]', (data) => { - console.log('[CONNECTED_RESOURCE]', data) - this.off('[TX_EVENT_REQUEST]', () => {}) - this.socket?.emit('[TX_EVENT_REQUEST]', { + this.socket?.events.on(connect_confirm, () => { // confirm bako ui connection + this.off(connect_confirm, () => {}) + this.socket?.server.emit(request_tx_pending, { _transaction, _address, }) - }) - // @ts-ignore - this.on('[TX_EVENT_CONFIRMED]', ({data}) => { - this.off('[TX_EVENT_REQUEST]', () => {}) - console.log('[RESULTADO_TX]', data) - // @ts-ignore - console.log('[RESPOSTA]: ', `0x${data.id}`) - this.dAppWindow?.close(); // @ts-ignore - resolve(`0x${data.id}`) + this.socket?.events.on(request_tx_confirm, ({data}) => { // confirm the transaction + this.off(request_tx_pending, () => {}) + this.dAppWindow?.close(); + // @ts-ignore + resolve(`0x${data.id}`) + }) + }) }); } async ping() { await this.setup(); - return !!this.socket; + return this.setupReady ?? false; } async version() { @@ -210,10 +240,12 @@ export class BakoSafeConnector extends FuelConnector { async isConnected() { //this request goes to the api without sessionId - const data = await this.api.get(`/connections/${this.sessionId}/state`); + const sessionId = this.sessionId ?? (await this.getSessionId()); + const data = await this.api.get(`/connections/${sessionId}/state`); + this.connected = data; - return data && !!this.socket; + return data; } async accounts() { diff --git a/packages/bako-safe/src/DAPPWindow.ts b/packages/bako-safe/src/DAPPWindow.ts index 77188287..15990ba8 100644 --- a/packages/bako-safe/src/DAPPWindow.ts +++ b/packages/bako-safe/src/DAPPWindow.ts @@ -5,10 +5,18 @@ type PopupConfig = { height: number; width: number; sessionId: string; + request_id: string; }; export class DAppWindow { + isMobile: boolean = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent); + isSafariBrowser: boolean = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); + request_id: string; + isOpen: boolean = false; + opned: Window | null = null; + constructor(private config: PopupConfig) { + this.request_id = config.request_id; } private get popupConfig() { @@ -21,65 +29,97 @@ export class DAppWindow { }; } - open(method: string) { - try{ - console.log('[opning]: ', `${this.config.appUrl}${method}${this.queryString}`) - const { left, top, width, height } = this.popupConfig; - const is = method.includes('/dapp/') - - if(is){ - return this.makeFrame(method) - } - - // //return this.makeFrame(method); - - // this.makeLink(method) - // return window.open() - - return this.makeLink(method) - }catch(e){ - console.error('[ERROR]', e) - } - } + open(method: string, reject: (e:Error) => void){ + if(this.isOpen) reject(new Error('Window is already open')); + const isConnection = !method.includes('/dapp/') - makeFrame(method: string){ - console.log('[MAKE_FRAME]: ', method) - const frame = document.createElement('iframe'); - frame.id = `${this.config.sessionId}-iframe`; - frame.src = `${this.config.appUrl}${method}${this.queryString}`; - // frame.src = 'https://google.com'//`${this.config.appUrl}${method}${this.queryString}`; - console.log('[frame.src]: ', frame.src) - //const $app = document.createElement('iframe'); - //console.log('[frame.src]: ', $app) - frame.style.position = 'absolute'; - frame.style.zIndex = '99999999'; - frame.style.top = '15%'; - frame.style.left = '25%'; - frame.style.width = '50%'; - frame.style.height = '70%'; - frame.style.border = 'none'; - - document.body.appendChild(frame); + if(!this.isSafariBrowser) {// if is not safari, we can use popup for both cases + this.makePopup(method); + } + if(this.isSafariBrowser && isConnection){// to use webauthn, we need a new window + this.makeLink(method); + } + if(this.isSafariBrowser && !isConnection){// to confirm tx, we need a new popup + this.makeFrame(method); + } + + return; } + close(){ const frame = document.getElementById(`${this.config.sessionId}-iframe`); if(frame) document.body.removeChild(frame) + if(this.opned) this.opned.close(); + this.isOpen = false; } makeLink(method: string){ const link = `${this.config.appUrl}${method}${this.queryString}`; - const a = document.createElement("a"); a.setAttribute('href', link); a.setAttribute('target', '_blank'); a.click(); + this.isOpen = true; + } + + makeFrame(method: string){ + const w = this.small; + const frame = document.createElement('iframe'); + frame.id = `${this.config.sessionId}-iframe`; + frame.src = `${this.config.appUrl}${method}${this.queryString}`; + frame.style.position = 'absolute'; + frame.style.zIndex = '99999999'; + frame.style.top = `${w.top}`; + frame.style.left = `${w.left}`; + frame.style.width = w.width; + frame.style.height = w.height; + frame.style.border = 'none'; + + document.body.appendChild(frame); + this.isOpen = true; + } + + makePopup(method: string){ + const link = `${this.config.appUrl}${method}${this.queryString}`; + const popup = window.open(link, 'popup', `width=${this.popupConfig.width}, height=${this.popupConfig.height}, top=${this.popupConfig.top}, left=${this.popupConfig.left}`) + if(popup) this.opned = popup; + this.isOpen = true; + return popup; } private get queryString() { const { sessionId } = this.config; - return `?sessionId=${sessionId}&origin=${window.location.origin}&name=${APP_NAME}`; + return `?sessionId=${sessionId}&origin=${window.location.origin}&name=${APP_NAME}&request_id=${this.request_id}`; } -} + + private get small() { // todo: update this to calculate by screen size changes + const breakponint = { + 'md': { + top: 0, + left: 0, + limit: 650, + width: '100%', + height: '100%', + }, // 100% + 'lg': { + top: `${(window.innerHeight - (window.innerHeight*0.7))/2}px`, + left: `${(window.innerWidth - (window.innerWidth*0.5))/2}px`, + limit: 1024, + width: '50%', + height: '70%', + }, // 75% + 'xl': { + top: `${(window.innerHeight - 650)/2}px`, + left: `${(window.innerWidth - 500)/2}px`, + limit: 1440, + height: '650px', + width: '500px', + } // 400px + } + return window.innerWidth < breakponint.md.limit ? breakponint.md : window.innerWidth < breakponint.lg.limit ? breakponint.lg : breakponint.xl; + } + +} \ No newline at end of file diff --git a/packages/bako-safe/src/SocketClient.ts b/packages/bako-safe/src/SocketClient.ts new file mode 100644 index 00000000..d60d0eeb --- /dev/null +++ b/packages/bako-safe/src/SocketClient.ts @@ -0,0 +1,79 @@ +import { io, Socket } from "socket.io-client"; +import { SOCKET_URL } from "./constants"; +import { BakoSafeConnector } from "./BakoSafeConnector"; +import { request } from 'http'; + +export interface ISocketAuth { + username: string; + data: Date; + origin: string; + sessionId: string; +} + +export interface ICreateClientSocket { + sessionId: string; + events: BakoSafeConnector +} + +const default_socket_auth: Omit = { + username: '[CONNECTOR]', + data: new Date(), + origin: window.origin, +} + + +export class SocketClient { + server: Socket; + events: BakoSafeConnector; + request_id: string; + + constructor({sessionId, events}: ICreateClientSocket) { + this.request_id = crypto.randomUUID() + + this.server = io(SOCKET_URL, { + auth: { + ...default_socket_auth, + sessionId, + request_id: this.request_id + }, + autoConnect: false, + reconnection: false, + }); + this.events = events; + this.server?.on('message', (data) => { + console.log('[MESSAGE]: ', { + valid: data.to == default_socket_auth.username, + auth: default_socket_auth.username, + data + }) + if(!data.request_id || data.request_id != this.request_id) return; + //const { data: content, to, request_id } = data; + + if(data.to == default_socket_auth.username){ + this.events.emit(data.type, { + from: data.username, + data: data.data, + }); + } + }); + + this.server.connect(); + } + + //emite an request to servidor + request( + to: string, + type: string, + data: {[key: string]: any} = {}) + { + this.server.emit('message', { + to, + type, + data + }); + } + + get isConnected() { + return this.server.connected; + } +} \ No newline at end of file From 002d12c1b31970959645942e3984be50a6ebdff7 Mon Sep 17 00:00:00 2001 From: guimroque Date: Thu, 25 Apr 2024 15:22:40 -0300 Subject: [PATCH 24/85] feat: reject connect by closed window --- packages/bako-safe/src/BakoSafeConnector.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.tsx b/packages/bako-safe/src/BakoSafeConnector.tsx index 339c1e15..9bec6293 100644 --- a/packages/bako-safe/src/BakoSafeConnector.tsx +++ b/packages/bako-safe/src/BakoSafeConnector.tsx @@ -163,7 +163,7 @@ export class BakoSafeConnector extends FuelConnector { this.socket?.events.on(connect_cancel, () => { // cancel the transaction this.dAppWindow?.close() this.off(connect_cancel, () => {}) - reject + reject(false) }) // @ts-ignore this.socket?.events.on(request, async (data) => { From bbadddc2a4e97450cb80c607f59013c62190b3e9 Mon Sep 17 00:00:00 2001 From: guimroque Date: Thu, 25 Apr 2024 18:45:23 -0300 Subject: [PATCH 25/85] chore: background with modal on safari --- packages/bako-safe/src/BakoSafeConnector.tsx | 8 ++++++++ packages/bako-safe/src/DAPPWindow.ts | 19 +++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.tsx b/packages/bako-safe/src/BakoSafeConnector.tsx index 9bec6293..557595e5 100644 --- a/packages/bako-safe/src/BakoSafeConnector.tsx +++ b/packages/bako-safe/src/BakoSafeConnector.tsx @@ -193,6 +193,7 @@ export class BakoSafeConnector extends FuelConnector { const connect_cancel = '[CLIENT_DISCONNECTED]' const request_tx_pending = '[TX_EVENT_REQUEST]' const request_tx_confirm = '[TX_EVENT_CONFIRMED]' + const request_tx_timeout = '[TX_EVENT_TIMEOUT]' // window controll this.dAppWindow?.open('/dapp/transaction', reject) @@ -205,6 +206,13 @@ export class BakoSafeConnector extends FuelConnector { this.off(connect_cancel, () => {}) reject() }) + + // @ts-ignore + this.socket?.events.on(request_tx_timeout, () => { + this.dAppWindow?.close() + this.off(request_tx_timeout, () => {}) + reject(new Error('Transaction timeout')) + }) // @ts-ignore this.socket?.events.on(connect_confirm, () => { // confirm bako ui connection diff --git a/packages/bako-safe/src/DAPPWindow.ts b/packages/bako-safe/src/DAPPWindow.ts index 15990ba8..55f4dc49 100644 --- a/packages/bako-safe/src/DAPPWindow.ts +++ b/packages/bako-safe/src/DAPPWindow.ts @@ -50,7 +50,9 @@ export class DAppWindow { close(){ const frame = document.getElementById(`${this.config.sessionId}-iframe`); + const backdrop = document.getElementById(`${this.config.sessionId}-backdrop`); if(frame) document.body.removeChild(frame) + if(backdrop) document.body.removeChild(backdrop) if(this.opned) this.opned.close(); this.isOpen = false; } @@ -67,6 +69,7 @@ export class DAppWindow { makeFrame(method: string){ const w = this.small; + //bako frame const frame = document.createElement('iframe'); frame.id = `${this.config.sessionId}-iframe`; frame.src = `${this.config.appUrl}${method}${this.queryString}`; @@ -76,8 +79,20 @@ export class DAppWindow { frame.style.left = `${w.left}`; frame.style.width = w.width; frame.style.height = w.height; - frame.style.border = 'none'; - + frame.style.borderRadius = '16px'; + + //backdrop + const backdrop = document.createElement('div'); + backdrop.id = `${this.config.sessionId}-backdrop`; + backdrop.style.position = 'fixed'; + backdrop.style.top = '0'; + backdrop.style.left = '0'; + backdrop.style.width = '100%'; + backdrop.style.height = '100%'; + backdrop.style.backgroundColor = 'rgba(0,0,0,0.5)'; + backdrop.style.zIndex = '99999998'; + + document.body.appendChild(backdrop); document.body.appendChild(frame); this.isOpen = true; } From acb8933b49a89e20d5f8743d913a33ab25c2edf5 Mon Sep 17 00:00:00 2001 From: guimroque Date: Thu, 25 Apr 2024 18:50:43 -0300 Subject: [PATCH 26/85] wip: change async function to promise --- packages/bako-safe/src/BakoSafeConnector.tsx | 178 ++++++++++--------- 1 file changed, 90 insertions(+), 88 deletions(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.tsx b/packages/bako-safe/src/BakoSafeConnector.tsx index 557595e5..ce9a0aaf 100644 --- a/packages/bako-safe/src/BakoSafeConnector.tsx +++ b/packages/bako-safe/src/BakoSafeConnector.tsx @@ -10,6 +10,7 @@ import { } from 'fuels'; import { DAppWindow } from './DAPPWindow'; +import { SocketClient } from './SocketClient'; import { APP_DESCRIPTION, APP_IMAGE_DARK, @@ -22,7 +23,6 @@ import { } from './constants'; import { RequestAPI } from './request'; import { BAKOSAFEConnectorEvents, type BakoSafeConnectorConfig } from './types'; -import { SocketClient } from './SocketClient'; export class BakoSafeConnector extends FuelConnector { name = APP_NAME; @@ -89,26 +89,25 @@ export class BakoSafeConnector extends FuelConnector { // timeout to open const open_interval = setInterval(() => { const isOpen = this.dAppWindow?.isOpen; - if(!isOpen) { + if (!isOpen) { this.emit('[CLIENT_DISCONNECTED]', {}); clearInterval(open_interval); } }, 2000); + //todo: check connection on safari // safari browser does not support window.opener - if(this.dAppWindow?.isSafariBrowser) return; - + //if(this.dAppWindow?.isSafariBrowser) return; + // timeout to close const interval = setInterval(() => { - const isOpen = this.dAppWindow?.opned && this.dAppWindow?.opned.closed; - if(isOpen) { + const isOpen = this.dAppWindow?.opned?.closed; + if (isOpen) { this.emit('[CLIENT_DISCONNECTED]', {}); clearInterval(interval); } }, 300); } - - /** * [important] * this.socket.emit -> emit message to the server @@ -116,65 +115,66 @@ export class BakoSafeConnector extends FuelConnector { */ private async setup() { - if (!HAS_WINDOW) return; - if (this.setupReady) return; - const sessionId = await this.getSessionId(); - - this.sessionId = sessionId; - - this.socket = new SocketClient({ - sessionId, - events: this, - }); - - this.dAppWindow = new DAppWindow({ - sessionId, - height: 800, - width: 450, - appUrl: this.appUrl, - request_id: this.socket.request_id, - }); - - this.setupReady = true; + if (!HAS_WINDOW) return; + if (this.setupReady) return; + const sessionId = await this.getSessionId(); + + this.sessionId = sessionId; + + this.socket = new SocketClient({ + sessionId, + events: this, + }); + + this.dAppWindow = new DAppWindow({ + sessionId, + height: 800, + width: 450, + appUrl: this.appUrl, + request_id: this.socket.request_id, + }); + + this.setupReady = true; } // ============================================================ // Connector methods // ============================================================ async connect() { - return new Promise(async (resolve, reject) => { - // some browsers don't find the connection via ping, in others it doesn't work so well - const is_connected = await this.isConnected(); - if(is_connected){ - resolve(true) - return; - } - - const request = '[AUTH_CONFIRMED]' - const connect_cancel = '[CLIENT_DISCONNECTED]' - - // window controll - this.dAppWindow?.open('/', reject) - this.checkWindow() + return new Promise((resolve, reject) => { + const request = '[AUTH_CONFIRMED]'; + const connect_cancel = '[CLIENT_DISCONNECTED]'; + + return this.isConnected().then((is_connected) => { + // some browsers don't find the connection via ping, in others it doesn't work so well + if (is_connected) { + resolve(true); + return; + } + + // window controll + this.dAppWindow?.open('/', reject); + this.checkWindow(); + + //events controll + // @ts-ignore + this.socket?.events.on(connect_cancel, () => { + // cancel the transaction + this.dAppWindow?.close(); + this.off(connect_cancel, () => {}); + reject(false); + }); + // @ts-ignore + this.socket?.events.on(request, async (data) => { + this.socket?.events.off(request, () => {}); + this.dAppWindow?.close(); + this.emit(this.events.CONNECTION, data); + this.emit(this.events.ACCOUNTS, await this.accounts()); + this.emit(this.events.CURRENT_ACCOUNT, await this.currentAccount()); - - //events controll - // @ts-ignore - this.socket?.events.on(connect_cancel, () => { // cancel the transaction - this.dAppWindow?.close() - this.off(connect_cancel, () => {}) - reject(false) - }) - // @ts-ignore - this.socket?.events.on(request, async (data) => { - this.socket?.events.off(request, () => {}) - this.dAppWindow?.close() - this.emit(this.events.CONNECTION, data) - this.emit(this.events.ACCOUNTS, await this.accounts()) - this.emit(this.events.CURRENT_ACCOUNT, await this.currentAccount()) - - resolve(true) - }) + resolve(true); + }); + }); }); } @@ -188,49 +188,51 @@ export class BakoSafeConnector extends FuelConnector { _address: string, _transaction: TransactionRequestLike, ) { - return new Promise(async (resolve, reject) => { - const connect_confirm = '[CONNECTED]' - const connect_cancel = '[CLIENT_DISCONNECTED]' - const request_tx_pending = '[TX_EVENT_REQUEST]' - const request_tx_confirm = '[TX_EVENT_CONFIRMED]' - const request_tx_timeout = '[TX_EVENT_TIMEOUT]' + return new Promise((resolve, reject) => { + const connect_confirm = '[CONNECTED]'; + const connect_cancel = '[CLIENT_DISCONNECTED]'; + const request_tx_pending = '[TX_EVENT_REQUEST]'; + const request_tx_confirm = '[TX_EVENT_CONFIRMED]'; + const request_tx_timeout = '[TX_EVENT_TIMEOUT]'; // window controll - this.dAppWindow?.open('/dapp/transaction', reject) - this.checkWindow() + this.dAppWindow?.open('/dapp/transaction', reject); + this.checkWindow(); //events controll // @ts-ignore - this.socket?.events.on(connect_cancel, () => { // cancel the transaction - this.dAppWindow?.close() - this.off(connect_cancel, () => {}) - reject() - }) + this.socket?.events.on(connect_cancel, () => { + // cancel the transaction + this.dAppWindow?.close(); + this.off(connect_cancel, () => {}); + reject(); + }); // @ts-ignore this.socket?.events.on(request_tx_timeout, () => { - this.dAppWindow?.close() - this.off(request_tx_timeout, () => {}) - reject(new Error('Transaction timeout')) - }) - + this.dAppWindow?.close(); + this.off(request_tx_timeout, () => {}); + reject(new Error('Transaction timeout')); + }); + // @ts-ignore - this.socket?.events.on(connect_confirm, () => { // confirm bako ui connection - this.off(connect_confirm, () => {}) + this.socket?.events.on(connect_confirm, () => { + // confirm bako ui connection + this.off(connect_confirm, () => {}); this.socket?.server.emit(request_tx_pending, { _transaction, _address, - }) + }); // @ts-ignore - this.socket?.events.on(request_tx_confirm, ({data}) => { // confirm the transaction - this.off(request_tx_pending, () => {}) + this.socket?.events.on(request_tx_confirm, ({ data }) => { + // confirm the transaction + this.off(request_tx_pending, () => {}); this.dAppWindow?.close(); - // @ts-ignore - resolve(`0x${data.id}`) - }) - - }) + // @ts-ignore + resolve(`0x${data.id}`); + }); + }); }); } From 8800598b8fdadfcae9260471e8ee05a6882e1b0f Mon Sep 17 00:00:00 2001 From: guimroque Date: Sun, 28 Apr 2024 15:26:59 -0300 Subject: [PATCH 27/85] wip: socket --- packages/bako-safe/src/BakoSafeConnector.tsx | 4 ++-- packages/bako-safe/src/SocketClient.ts | 4 ++-- packages/bako-safe/src/constants.ts | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.tsx b/packages/bako-safe/src/BakoSafeConnector.tsx index ce9a0aaf..af5729db 100644 --- a/packages/bako-safe/src/BakoSafeConnector.tsx +++ b/packages/bako-safe/src/BakoSafeConnector.tsx @@ -191,7 +191,7 @@ export class BakoSafeConnector extends FuelConnector { return new Promise((resolve, reject) => { const connect_confirm = '[CONNECTED]'; const connect_cancel = '[CLIENT_DISCONNECTED]'; - const request_tx_pending = '[TX_EVENT_REQUEST]'; + const request_tx_pending = '[TX_EVENT_REQUESTED]'; const request_tx_confirm = '[TX_EVENT_CONFIRMED]'; const request_tx_timeout = '[TX_EVENT_TIMEOUT]'; @@ -227,7 +227,7 @@ export class BakoSafeConnector extends FuelConnector { // @ts-ignore this.socket?.events.on(request_tx_confirm, ({ data }) => { // confirm the transaction - this.off(request_tx_pending, () => {}); + this.off(request_tx_confirm, () => {}); this.dAppWindow?.close(); // @ts-ignore resolve(`0x${data.id}`); diff --git a/packages/bako-safe/src/SocketClient.ts b/packages/bako-safe/src/SocketClient.ts index d60d0eeb..b1ae228a 100644 --- a/packages/bako-safe/src/SocketClient.ts +++ b/packages/bako-safe/src/SocketClient.ts @@ -47,8 +47,8 @@ export class SocketClient { data }) if(!data.request_id || data.request_id != this.request_id) return; - //const { data: content, to, request_id } = data; - + //todo: emmit reject event + if(data.to == default_socket_auth.username){ this.events.emit(data.type, { from: data.username, diff --git a/packages/bako-safe/src/constants.ts b/packages/bako-safe/src/constants.ts index 23747807..99d3ac1a 100644 --- a/packages/bako-safe/src/constants.ts +++ b/packages/bako-safe/src/constants.ts @@ -11,7 +11,7 @@ export const APP_IMAGE_LIGHT = export const APP_URL = 'http://localhost:5174'; export const HOST_URL = 'http://localhost:3333'; -export const SOCKET_URL = 'http://localhost:3000'; +export const SOCKET_URL = 'http://localhost:3001'; // Window object export const HAS_WINDOW = typeof window !== 'undefined'; From db12191b6ec08e8fb2b9e6c8207e708f83e5536e Mon Sep 17 00:00:00 2001 From: guimroque Date: Mon, 29 Apr 2024 14:30:52 -0300 Subject: [PATCH 28/85] wip: validations --- packages/bako-safe/src/BakoSafeConnector.tsx | 14 +++++++------- packages/bako-safe/src/constants.ts | 10 +++++++--- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.tsx b/packages/bako-safe/src/BakoSafeConnector.tsx index af5729db..4a4ee8b9 100644 --- a/packages/bako-safe/src/BakoSafeConnector.tsx +++ b/packages/bako-safe/src/BakoSafeConnector.tsx @@ -223,15 +223,15 @@ export class BakoSafeConnector extends FuelConnector { _transaction, _address, }); + }); + // @ts-ignore + this.socket?.events.on(request_tx_confirm, ({ data }) => { + // confirm the transaction + this.off(request_tx_confirm, () => {}); + this.dAppWindow?.close(); // @ts-ignore - this.socket?.events.on(request_tx_confirm, ({ data }) => { - // confirm the transaction - this.off(request_tx_confirm, () => {}); - this.dAppWindow?.close(); - // @ts-ignore - resolve(`0x${data.id}`); - }); + resolve(`0x${data.id}`); }); }); } diff --git a/packages/bako-safe/src/constants.ts b/packages/bako-safe/src/constants.ts index 99d3ac1a..5cea6cc1 100644 --- a/packages/bako-safe/src/constants.ts +++ b/packages/bako-safe/src/constants.ts @@ -9,9 +9,13 @@ export const APP_IMAGE_LIGHT = // export const APP_URL = 'https://safe.bako.global'; // export const HOST_URL = 'https://api-safe.bako.global'; -export const APP_URL = 'http://localhost:5174'; -export const HOST_URL = 'http://localhost:3333'; -export const SOCKET_URL = 'http://localhost:3001'; +//export const SOCKET_URL = 'http://localhost:3001'; + +export const APP_URL = 'https://bsafe-ui-git-staging-infinity-base.vercel.app/'; +export const HOST_URL = 'https://stg-api.bsafe.pro'; +// export const HOST_URL = 'http://localhost:3333'; +export const SOCKET_URL = 'https://stg-api.bsafe.pro'; +//export const APP_URL = 'http://localhost:5174'; // Window object export const HAS_WINDOW = typeof window !== 'undefined'; From 15e70f3c977eb6afc2c5ffee6170b2bea49a24af Mon Sep 17 00:00:00 2001 From: guimroque Date: Mon, 29 Apr 2024 14:49:43 -0300 Subject: [PATCH 29/85] chore: window naem --- packages/bako-safe/src/BakoSafeConnector.tsx | 3 +- packages/bako-safe/src/DAPPWindow.ts | 96 +++++++++++--------- 2 files changed, 55 insertions(+), 44 deletions(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.tsx b/packages/bako-safe/src/BakoSafeConnector.tsx index 4a4ee8b9..9e1544e1 100644 --- a/packages/bako-safe/src/BakoSafeConnector.tsx +++ b/packages/bako-safe/src/BakoSafeConnector.tsx @@ -15,7 +15,6 @@ import { APP_DESCRIPTION, APP_IMAGE_DARK, APP_IMAGE_LIGHT, - APP_NAME, APP_URL, HAS_WINDOW, HOST_URL, @@ -25,7 +24,7 @@ import { RequestAPI } from './request'; import { BAKOSAFEConnectorEvents, type BakoSafeConnectorConfig } from './types'; export class BakoSafeConnector extends FuelConnector { - name = APP_NAME; + name = window.document.title; metadata = { image: { light: APP_IMAGE_LIGHT, diff --git a/packages/bako-safe/src/DAPPWindow.ts b/packages/bako-safe/src/DAPPWindow.ts index 55f4dc49..350369e6 100644 --- a/packages/bako-safe/src/DAPPWindow.ts +++ b/packages/bako-safe/src/DAPPWindow.ts @@ -1,4 +1,4 @@ -import { APP_NAME } from "./constants"; +import { APP_NAME } from './constants'; type PopupConfig = { appUrl: string; @@ -10,9 +10,11 @@ type PopupConfig = { export class DAppWindow { isMobile: boolean = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent); - isSafariBrowser: boolean = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); + isSafariBrowser: boolean = /^((?!chrome|android).)*safari/i.test( + navigator.userAgent, + ); request_id: string; - isOpen: boolean = false; + isOpen = false; opned: Window | null = null; constructor(private config: PopupConfig) { @@ -20,7 +22,7 @@ export class DAppWindow { } private get popupConfig() { - const { height, width} = this.config; + const { height, width } = this.config; return { top: window.innerHeight / 2 - height / 2, left: window.innerWidth / 2 - width / 2, @@ -29,45 +31,47 @@ export class DAppWindow { }; } + open(method: string, reject: (e: Error) => void) { + if (this.isOpen) reject(new Error('Window is already open')); + const isConnection = !method.includes('/dapp/'); - open(method: string, reject: (e:Error) => void){ - if(this.isOpen) reject(new Error('Window is already open')); - const isConnection = !method.includes('/dapp/') - - if(!this.isSafariBrowser) {// if is not safari, we can use popup for both cases + if (!this.isSafariBrowser) { + // if is not safari, we can use popup for both cases this.makePopup(method); } - if(this.isSafariBrowser && isConnection){// to use webauthn, we need a new window + if (this.isSafariBrowser && isConnection) { + // to use webauthn, we need a new window this.makeLink(method); } - if(this.isSafariBrowser && !isConnection){// to confirm tx, we need a new popup + if (this.isSafariBrowser && !isConnection) { + // to confirm tx, we need a new popup this.makeFrame(method); } return; } - - close(){ + close() { const frame = document.getElementById(`${this.config.sessionId}-iframe`); - const backdrop = document.getElementById(`${this.config.sessionId}-backdrop`); - if(frame) document.body.removeChild(frame) - if(backdrop) document.body.removeChild(backdrop) - if(this.opned) this.opned.close(); + const backdrop = document.getElementById( + `${this.config.sessionId}-backdrop`, + ); + if (frame) document.body.removeChild(frame); + if (backdrop) document.body.removeChild(backdrop); + if (this.opned) this.opned.close(); this.isOpen = false; } - - makeLink(method: string){ + makeLink(method: string) { const link = `${this.config.appUrl}${method}${this.queryString}`; - const a = document.createElement("a"); + const a = document.createElement('a'); a.setAttribute('href', link); a.setAttribute('target', '_blank'); a.click(); this.isOpen = true; } - makeFrame(method: string){ + makeFrame(method: string) { const w = this.small; //bako frame const frame = document.createElement('iframe'); @@ -77,8 +81,8 @@ export class DAppWindow { frame.style.zIndex = '99999999'; frame.style.top = `${w.top}`; frame.style.left = `${w.left}`; - frame.style.width = w.width; - frame.style.height = w.height; + frame.style.width = w.width; + frame.style.height = w.height; frame.style.borderRadius = '16px'; //backdrop @@ -89,52 +93,60 @@ export class DAppWindow { backdrop.style.left = '0'; backdrop.style.width = '100%'; backdrop.style.height = '100%'; - backdrop.style.backgroundColor = 'rgba(0,0,0,0.5)'; - backdrop.style.zIndex = '99999998'; + backdrop.style.backgroundColor = 'rgba(0,0,0,0.5)'; + backdrop.style.zIndex = '99999998'; document.body.appendChild(backdrop); document.body.appendChild(frame); this.isOpen = true; } - makePopup(method: string){ + makePopup(method: string) { const link = `${this.config.appUrl}${method}${this.queryString}`; - const popup = window.open(link, 'popup', `width=${this.popupConfig.width}, height=${this.popupConfig.height}, top=${this.popupConfig.top}, left=${this.popupConfig.left}`) - if(popup) this.opned = popup; + const popup = window.open( + link, + 'popup', + `width=${this.popupConfig.width}, height=${this.popupConfig.height}, top=${this.popupConfig.top}, left=${this.popupConfig.left}`, + ); + if (popup) this.opned = popup; this.isOpen = true; return popup; } private get queryString() { const { sessionId } = this.config; - return `?sessionId=${sessionId}&origin=${window.location.origin}&name=${APP_NAME}&request_id=${this.request_id}`; + return `?sessionId=${sessionId}&origin=${window.location.origin}&name=${window.document.title}&request_id=${this.request_id}`; } - private get small() { // todo: update this to calculate by screen size changes + private get small() { + // todo: update this to calculate by screen size changes const breakponint = { - 'md': { + md: { top: 0, left: 0, limit: 650, width: '100%', height: '100%', }, // 100% - 'lg': { - top: `${(window.innerHeight - (window.innerHeight*0.7))/2}px`, - left: `${(window.innerWidth - (window.innerWidth*0.5))/2}px`, + lg: { + top: `${(window.innerHeight - window.innerHeight * 0.7) / 2}px`, + left: `${(window.innerWidth - window.innerWidth * 0.5) / 2}px`, limit: 1024, width: '50%', height: '70%', }, // 75% - 'xl': { - top: `${(window.innerHeight - 650)/2}px`, - left: `${(window.innerWidth - 500)/2}px`, + xl: { + top: `${(window.innerHeight - 650) / 2}px`, + left: `${(window.innerWidth - 500) / 2}px`, limit: 1440, height: '650px', width: '500px', - } // 400px - } - return window.innerWidth < breakponint.md.limit ? breakponint.md : window.innerWidth < breakponint.lg.limit ? breakponint.lg : breakponint.xl; + }, // 400px + }; + return window.innerWidth < breakponint.md.limit + ? breakponint.md + : window.innerWidth < breakponint.lg.limit + ? breakponint.lg + : breakponint.xl; } - -} \ No newline at end of file +} From 9693d2e7e59f3ae38767db734654193a3e51276b Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 30 Apr 2024 13:07:00 -0300 Subject: [PATCH 30/85] fix: bako connector name --- packages/bako-safe/src/BakoSafeConnector.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.tsx b/packages/bako-safe/src/BakoSafeConnector.tsx index 9e1544e1..4a4ee8b9 100644 --- a/packages/bako-safe/src/BakoSafeConnector.tsx +++ b/packages/bako-safe/src/BakoSafeConnector.tsx @@ -15,6 +15,7 @@ import { APP_DESCRIPTION, APP_IMAGE_DARK, APP_IMAGE_LIGHT, + APP_NAME, APP_URL, HAS_WINDOW, HOST_URL, @@ -24,7 +25,7 @@ import { RequestAPI } from './request'; import { BAKOSAFEConnectorEvents, type BakoSafeConnectorConfig } from './types'; export class BakoSafeConnector extends FuelConnector { - name = window.document.title; + name = APP_NAME; metadata = { image: { light: APP_IMAGE_LIGHT, From 24b2bdcebb99002c37f8f8b7bdcf371dc77e62be Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 30 Apr 2024 14:36:08 -0300 Subject: [PATCH 31/85] wip: login with safari --- packages/bako-safe/src/BakoSafeConnector.tsx | 55 +++++++++----------- packages/bako-safe/src/DAPPWindow.ts | 21 ++++---- packages/bako-safe/src/constants.ts | 12 ++--- 3 files changed, 44 insertions(+), 44 deletions(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.tsx b/packages/bako-safe/src/BakoSafeConnector.tsx index 4a4ee8b9..2b7ac6ac 100644 --- a/packages/bako-safe/src/BakoSafeConnector.tsx +++ b/packages/bako-safe/src/BakoSafeConnector.tsx @@ -145,35 +145,32 @@ export class BakoSafeConnector extends FuelConnector { const request = '[AUTH_CONFIRMED]'; const connect_cancel = '[CLIENT_DISCONNECTED]'; - return this.isConnected().then((is_connected) => { - // some browsers don't find the connection via ping, in others it doesn't work so well - if (is_connected) { - resolve(true); - return; - } - - // window controll - this.dAppWindow?.open('/', reject); - this.checkWindow(); - - //events controll - // @ts-ignore - this.socket?.events.on(connect_cancel, () => { - // cancel the transaction - this.dAppWindow?.close(); - this.off(connect_cancel, () => {}); - reject(false); - }); - // @ts-ignore - this.socket?.events.on(request, async (data) => { - this.socket?.events.off(request, () => {}); - this.dAppWindow?.close(); - this.emit(this.events.CONNECTION, data); - this.emit(this.events.ACCOUNTS, await this.accounts()); - this.emit(this.events.CURRENT_ACCOUNT, await this.currentAccount()); - - resolve(true); - }); + if (this.connected) { + resolve(true); + return; + } + + // window controll + this.dAppWindow?.open('/', reject); + this.checkWindow(); + + //events controll + // @ts-ignore + this.socket?.events.on(connect_cancel, () => { + // cancel the transaction + this.dAppWindow?.close(); + this.off(connect_cancel, () => {}); + reject(false); + }); + // @ts-ignore + this.socket?.events.on(request, async (data) => { + console.log('request', data); + this.socket?.events.off(request, () => {}); + this.emit(this.events.CONNECTION, data); + this.emit(this.events.ACCOUNTS, await this.accounts()); + this.emit(this.events.CURRENT_ACCOUNT, await this.currentAccount()); + resolve(true); + this.dAppWindow?.close(); }); }); } diff --git a/packages/bako-safe/src/DAPPWindow.ts b/packages/bako-safe/src/DAPPWindow.ts index 350369e6..7b68702f 100644 --- a/packages/bako-safe/src/DAPPWindow.ts +++ b/packages/bako-safe/src/DAPPWindow.ts @@ -33,19 +33,20 @@ export class DAppWindow { open(method: string, reject: (e: Error) => void) { if (this.isOpen) reject(new Error('Window is already open')); - const isConnection = !method.includes('/dapp/'); + const _isConnection = !method.includes('/dapp/'); if (!this.isSafariBrowser) { // if is not safari, we can use popup for both cases this.makePopup(method); } - if (this.isSafariBrowser && isConnection) { - // to use webauthn, we need a new window - this.makeLink(method); - } - if (this.isSafariBrowser && !isConnection) { + // if (this.isSafariBrowser && isConnection) { + // // to use webauthn, we need a new window + // this.makeLink(method); + // } + if (this.isSafariBrowser) { + // && !isConnection) { // to confirm tx, we need a new popup - this.makeFrame(method); + this.makeFrame(method, true); } return; @@ -71,12 +72,14 @@ export class DAppWindow { this.isOpen = true; } - makeFrame(method: string) { + makeFrame(method: string, isSafari = false) { const w = this.small; //bako frame const frame = document.createElement('iframe'); frame.id = `${this.config.sessionId}-iframe`; - frame.src = `${this.config.appUrl}${method}${this.queryString}`; + frame.src = `${this.config.appUrl}${method}${this.queryString}${ + isSafari ? '&byConnector=true' : '' + }`; frame.style.position = 'absolute'; frame.style.zIndex = '99999999'; frame.style.top = `${w.top}`; diff --git a/packages/bako-safe/src/constants.ts b/packages/bako-safe/src/constants.ts index 5cea6cc1..7e4e6808 100644 --- a/packages/bako-safe/src/constants.ts +++ b/packages/bako-safe/src/constants.ts @@ -9,13 +9,13 @@ export const APP_IMAGE_LIGHT = // export const APP_URL = 'https://safe.bako.global'; // export const HOST_URL = 'https://api-safe.bako.global'; -//export const SOCKET_URL = 'http://localhost:3001'; +// export const APP_URL = 'https://bsafe-ui-git-staging-infinity-base.vercel.app/'; +// export const HOST_URL = 'https://stg-api.bsafe.pro'; +// export const SOCKET_URL = 'https://stg-api.bsafe.pro'; -export const APP_URL = 'https://bsafe-ui-git-staging-infinity-base.vercel.app/'; -export const HOST_URL = 'https://stg-api.bsafe.pro'; -// export const HOST_URL = 'http://localhost:3333'; -export const SOCKET_URL = 'https://stg-api.bsafe.pro'; -//export const APP_URL = 'http://localhost:5174'; +export const APP_URL = 'http://localhost:5174'; +export const HOST_URL = 'http://localhost:3333'; +export const SOCKET_URL = 'http://localhost:3001'; // Window object export const HAS_WINDOW = typeof window !== 'undefined'; From 4a7f707dee6106b66fc426fa7fc0f7c7ffbf504e Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 30 Apr 2024 14:38:42 -0300 Subject: [PATCH 32/85] wip: login with safari --- packages/bako-safe/src/constants.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/bako-safe/src/constants.ts b/packages/bako-safe/src/constants.ts index 7e4e6808..4079c18a 100644 --- a/packages/bako-safe/src/constants.ts +++ b/packages/bako-safe/src/constants.ts @@ -9,13 +9,13 @@ export const APP_IMAGE_LIGHT = // export const APP_URL = 'https://safe.bako.global'; // export const HOST_URL = 'https://api-safe.bako.global'; -// export const APP_URL = 'https://bsafe-ui-git-staging-infinity-base.vercel.app/'; -// export const HOST_URL = 'https://stg-api.bsafe.pro'; -// export const SOCKET_URL = 'https://stg-api.bsafe.pro'; +export const APP_URL = 'https://bsafe-ui-git-staging-infinity-base.vercel.app/'; +export const HOST_URL = 'https://stg-api.bsafe.pro'; +export const SOCKET_URL = 'https://stg-api.bsafe.pro'; -export const APP_URL = 'http://localhost:5174'; -export const HOST_URL = 'http://localhost:3333'; -export const SOCKET_URL = 'http://localhost:3001'; +// export const APP_URL = 'http://localhost:5174'; +// export const HOST_URL = 'http://localhost:3333'; +// export const SOCKET_URL = 'http://localhost:3001'; // Window object export const HAS_WINDOW = typeof window !== 'undefined'; From e28edf6ea1c633ea58786cb42104dc2f387cde46 Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 4 Jun 2024 11:10:28 -0300 Subject: [PATCH 33/85] fix: build --- packages/bako-safe/src/DAPPWindow.ts | 25 +++++++++++++------------ packages/bako-safe/src/SocketClient.ts | 4 ++-- packages/bako-safe/src/constants.ts | 12 ++++++------ packages/connectors/package.json | 6 +++--- 4 files changed, 24 insertions(+), 23 deletions(-) diff --git a/packages/bako-safe/src/DAPPWindow.ts b/packages/bako-safe/src/DAPPWindow.ts index 7b68702f..63727037 100644 --- a/packages/bako-safe/src/DAPPWindow.ts +++ b/packages/bako-safe/src/DAPPWindow.ts @@ -1,4 +1,5 @@ -import { APP_NAME } from './constants'; +import { APP_NAME, WINDOW } from './constants'; + type PopupConfig = { appUrl: string; @@ -24,8 +25,8 @@ export class DAppWindow { private get popupConfig() { const { height, width } = this.config; return { - top: window.innerHeight / 2 - height / 2, - left: window.innerWidth / 2 - width / 2, + top: WINDOW.innerHeight / 2 - height / 2, + left: WINDOW.innerWidth / 2 - width / 2, width, height, }; @@ -40,7 +41,7 @@ export class DAppWindow { this.makePopup(method); } // if (this.isSafariBrowser && isConnection) { - // // to use webauthn, we need a new window + // // to use webauthn, we need a new WINDOW // this.makeLink(method); // } if (this.isSafariBrowser) { @@ -106,7 +107,7 @@ export class DAppWindow { makePopup(method: string) { const link = `${this.config.appUrl}${method}${this.queryString}`; - const popup = window.open( + const popup = WINDOW.open( link, 'popup', `width=${this.popupConfig.width}, height=${this.popupConfig.height}, top=${this.popupConfig.top}, left=${this.popupConfig.left}`, @@ -118,7 +119,7 @@ export class DAppWindow { private get queryString() { const { sessionId } = this.config; - return `?sessionId=${sessionId}&origin=${window.location.origin}&name=${window.document.title}&request_id=${this.request_id}`; + return `?sessionId=${sessionId}&origin=${WINDOW.location.origin}&name=${WINDOW.document.title}&request_id=${this.request_id}`; } private get small() { @@ -132,23 +133,23 @@ export class DAppWindow { height: '100%', }, // 100% lg: { - top: `${(window.innerHeight - window.innerHeight * 0.7) / 2}px`, - left: `${(window.innerWidth - window.innerWidth * 0.5) / 2}px`, + top: `${(WINDOW.innerHeight - WINDOW.innerHeight * 0.7) / 2}px`, + left: `${(WINDOW.innerWidth - WINDOW.innerWidth * 0.5) / 2}px`, limit: 1024, width: '50%', height: '70%', }, // 75% xl: { - top: `${(window.innerHeight - 650) / 2}px`, - left: `${(window.innerWidth - 500) / 2}px`, + top: `${(WINDOW.innerHeight - 650) / 2}px`, + left: `${(WINDOW.innerWidth - 500) / 2}px`, limit: 1440, height: '650px', width: '500px', }, // 400px }; - return window.innerWidth < breakponint.md.limit + return WINDOW.innerWidth < breakponint.md.limit ? breakponint.md - : window.innerWidth < breakponint.lg.limit + : WINDOW.innerWidth < breakponint.lg.limit ? breakponint.lg : breakponint.xl; } diff --git a/packages/bako-safe/src/SocketClient.ts b/packages/bako-safe/src/SocketClient.ts index 77a426d3..bba734af 100644 --- a/packages/bako-safe/src/SocketClient.ts +++ b/packages/bako-safe/src/SocketClient.ts @@ -1,7 +1,7 @@ import { io, Socket } from "socket.io-client"; import { SOCKET_URL } from "./constants"; import {BakoSafeConnector} from "./BakoSafeConnector"; - +import { WINDOW } from './constants' export interface ISocketAuth { username: string; @@ -18,7 +18,7 @@ export interface ICreateClientSocket { const default_socket_auth: Omit = { username: '[CONNECTOR]', data: new Date(), - origin: window.origin ?? 'https://safe.bako.global', + origin: WINDOW.origin ?? 'https://safe.bako.global', } diff --git a/packages/bako-safe/src/constants.ts b/packages/bako-safe/src/constants.ts index 7e4e6808..4079c18a 100644 --- a/packages/bako-safe/src/constants.ts +++ b/packages/bako-safe/src/constants.ts @@ -9,13 +9,13 @@ export const APP_IMAGE_LIGHT = // export const APP_URL = 'https://safe.bako.global'; // export const HOST_URL = 'https://api-safe.bako.global'; -// export const APP_URL = 'https://bsafe-ui-git-staging-infinity-base.vercel.app/'; -// export const HOST_URL = 'https://stg-api.bsafe.pro'; -// export const SOCKET_URL = 'https://stg-api.bsafe.pro'; +export const APP_URL = 'https://bsafe-ui-git-staging-infinity-base.vercel.app/'; +export const HOST_URL = 'https://stg-api.bsafe.pro'; +export const SOCKET_URL = 'https://stg-api.bsafe.pro'; -export const APP_URL = 'http://localhost:5174'; -export const HOST_URL = 'http://localhost:3333'; -export const SOCKET_URL = 'http://localhost:3001'; +// export const APP_URL = 'http://localhost:5174'; +// export const HOST_URL = 'http://localhost:3333'; +// export const SOCKET_URL = 'http://localhost:3001'; // Window object export const HAS_WINDOW = typeof window !== 'undefined'; diff --git a/packages/connectors/package.json b/packages/connectors/package.json index 435b7d68..1d014815 100644 --- a/packages/connectors/package.json +++ b/packages/connectors/package.json @@ -28,15 +28,15 @@ "ts:check": "tsc --noEmit" }, "peerDependencies": { - "fuels": ">=0.88.1", - "socket.io-client": "4.7.2" + "fuels": ">=0.88.1" }, "dependencies": { "@ethereumjs/util": "9.0.3", "@ethersproject/bytes": "5.7.0", "@wagmi/core": "2.9.1", "@web3modal/wagmi": "4.1.11", - "viem": "2.10.2" + "viem": "2.10.2", + "socket.io-client": "4.7.2" }, "devDependencies": { "@fuel-connectors/burner-wallet-connector": "workspace:*", From 7bfc23d3c8231ce7dca18ee58ebd4219347dcba0 Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 4 Jun 2024 17:35:50 -0300 Subject: [PATCH 34/85] chore: name --- .changeset/forty-timers-heal.md | 2 +- packages/connectors/src/defaultConnectors.ts | 4 ++-- packages/connectors/src/index.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.changeset/forty-timers-heal.md b/.changeset/forty-timers-heal.md index 22a716aa..05859ef6 100644 --- a/.changeset/forty-timers-heal.md +++ b/.changeset/forty-timers-heal.md @@ -1,5 +1,5 @@ --- -"@fuel-connectors/bako-safe": major +"@fuel-connectors/bakosafe-connector": major --- Add bako-safe connector \ No newline at end of file diff --git a/packages/connectors/src/defaultConnectors.ts b/packages/connectors/src/defaultConnectors.ts index 0d647986..361fc9cd 100644 --- a/packages/connectors/src/defaultConnectors.ts +++ b/packages/connectors/src/defaultConnectors.ts @@ -1,6 +1,6 @@ -import { BakoSafeConnector } from '@fuel-connectors/bako-safe'; -import { EVMWalletConnector } from '@fuel-connectors/evm-connector'; +import { BakoSafeConnector } from '@fuel-connectors/bakosafe-connector'; import { BurnerWalletConnector } from '@fuel-connectors/burner-wallet-connector'; +import { EVMWalletConnector } from '@fuel-connectors/evm-connector'; import { FuelWalletDevelopmentConnector } from '@fuel-connectors/fuel-development-wallet'; import { FuelWalletConnector } from '@fuel-connectors/fuel-wallet'; import { FueletWalletConnector } from '@fuel-connectors/fuelet-wallet'; diff --git a/packages/connectors/src/index.ts b/packages/connectors/src/index.ts index 68953145..817c48c1 100644 --- a/packages/connectors/src/index.ts +++ b/packages/connectors/src/index.ts @@ -2,6 +2,6 @@ export * from './defaultConnectors'; export * from '@fuel-connectors/fuel-development-wallet'; export * from '@fuel-connectors/fuel-wallet'; export * from '@fuel-connectors/fuelet-wallet'; -export * from '@fuel-connectors/bako-safe'; +export * from '@fuel-connectors/bakosafe-connector'; export * from '@fuel-connectors/evm-connector'; export * from '@fuel-connectors/burner-wallet-connector'; From 34e78a4f218c2be2edb6cfaa00692622d4f745d9 Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 4 Jun 2024 17:49:27 -0300 Subject: [PATCH 35/85] fix: ts config --- packages/bako-safe/tsconfig.json | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/bako-safe/tsconfig.json b/packages/bako-safe/tsconfig.json index 85ef6b99..61062220 100644 --- a/packages/bako-safe/tsconfig.json +++ b/packages/bako-safe/tsconfig.json @@ -1,9 +1,16 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist", - "baseUrl": ".", - "rootDir": "." + "target": "ES2022", + "lib": ["DOM", "ES2022"], + "module": "es2022", + "moduleResolution": "Node", + "strict": true, + "noUncheckedIndexedAccess": true, + "declaration": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "outDir": "./dist" }, - "exclude": ["dist"] + "exclude": ["./dist/**/*"] } From a9c91005f697ceac6fa6f02db9e5d37a23cbc4ee Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 4 Jun 2024 17:58:03 -0300 Subject: [PATCH 36/85] fix: ts config --- packages/connectors/tsup.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/connectors/tsup.config.js b/packages/connectors/tsup.config.js index 08c27271..03e77065 100644 --- a/packages/connectors/tsup.config.js +++ b/packages/connectors/tsup.config.js @@ -7,6 +7,7 @@ export default defineConfig((options) => ({ 'src/index.ts', 'src/walletconnect-connector/index.ts', 'src/evm-connector/index.ts', + 'src/bako-safe/index.ts', ], external: ['fuels'], noExternal: [ From 70c601442c8eea4ca959d89dad5e83cb73cb4816 Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 4 Jun 2024 18:07:36 -0300 Subject: [PATCH 37/85] fix: ts config --- .changeset/forty-timers-heal.md | 2 +- packages/bako-safe/package.json | 2 +- packages/connectors/package.json | 2 +- packages/connectors/src/bakosafe-connector/index.ts | 2 +- packages/connectors/src/defaultConnectors.ts | 2 +- packages/connectors/src/index.ts | 2 +- packages/connectors/tsup.config.js | 4 ++-- pnpm-lock.yaml | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.changeset/forty-timers-heal.md b/.changeset/forty-timers-heal.md index 05859ef6..22a716aa 100644 --- a/.changeset/forty-timers-heal.md +++ b/.changeset/forty-timers-heal.md @@ -1,5 +1,5 @@ --- -"@fuel-connectors/bakosafe-connector": major +"@fuel-connectors/bako-safe": major --- Add bako-safe connector \ No newline at end of file diff --git a/packages/bako-safe/package.json b/packages/bako-safe/package.json index 4cfb9f30..98071c2d 100644 --- a/packages/bako-safe/package.json +++ b/packages/bako-safe/package.json @@ -1,5 +1,5 @@ { - "name": "@fuel-connectors/bakosafe-connector", + "name": "@fuel-connectors/bako-safe", "version": "0.0.1", "private": true, "types": "./dist/index.d.ts", diff --git a/packages/connectors/package.json b/packages/connectors/package.json index 1d014815..ee0ef096 100644 --- a/packages/connectors/package.json +++ b/packages/connectors/package.json @@ -45,7 +45,7 @@ "@fuel-connectors/fuel-wallet": "workspace:*", "@fuel-connectors/fuelet-wallet": "workspace:*", "@fuel-connectors/walletconnect-connector": "workspace:*", - "@fuel-connectors/bakosafe-connector": "workspace:*", + "@fuel-connectors/bako-safe": "workspace:*", "fuels": "0.88.1", "terser": "5.31.0", "tsup": "8.0.2", diff --git a/packages/connectors/src/bakosafe-connector/index.ts b/packages/connectors/src/bakosafe-connector/index.ts index 4dd2ac84..547336ff 100644 --- a/packages/connectors/src/bakosafe-connector/index.ts +++ b/packages/connectors/src/bakosafe-connector/index.ts @@ -1 +1 @@ -export * from '@fuel-connectors/bakosafe-connector'; \ No newline at end of file +export * from '@fuel-connectors/bako-safe'; diff --git a/packages/connectors/src/defaultConnectors.ts b/packages/connectors/src/defaultConnectors.ts index 361fc9cd..8a69df9b 100644 --- a/packages/connectors/src/defaultConnectors.ts +++ b/packages/connectors/src/defaultConnectors.ts @@ -1,4 +1,4 @@ -import { BakoSafeConnector } from '@fuel-connectors/bakosafe-connector'; +import { BakoSafeConnector } from '@fuel-connectors/bako-safe'; import { BurnerWalletConnector } from '@fuel-connectors/burner-wallet-connector'; import { EVMWalletConnector } from '@fuel-connectors/evm-connector'; import { FuelWalletDevelopmentConnector } from '@fuel-connectors/fuel-development-wallet'; diff --git a/packages/connectors/src/index.ts b/packages/connectors/src/index.ts index 817c48c1..68953145 100644 --- a/packages/connectors/src/index.ts +++ b/packages/connectors/src/index.ts @@ -2,6 +2,6 @@ export * from './defaultConnectors'; export * from '@fuel-connectors/fuel-development-wallet'; export * from '@fuel-connectors/fuel-wallet'; export * from '@fuel-connectors/fuelet-wallet'; -export * from '@fuel-connectors/bakosafe-connector'; +export * from '@fuel-connectors/bako-safe'; export * from '@fuel-connectors/evm-connector'; export * from '@fuel-connectors/burner-wallet-connector'; diff --git a/packages/connectors/tsup.config.js b/packages/connectors/tsup.config.js index 03e77065..2b5d7a3b 100644 --- a/packages/connectors/tsup.config.js +++ b/packages/connectors/tsup.config.js @@ -17,7 +17,7 @@ export default defineConfig((options) => ({ '@fuel-connectors/burner-wallet-connector', '@fuel-connectors/evm-connector', '@fuel-connectors/walletconnect-connector', - '@fuel-connectors/bakosafe-connector', + '@fuel-connectors/bako-safe', ], minify: 'terser', dts: { @@ -28,7 +28,7 @@ export default defineConfig((options) => ({ '@fuel-connectors/burner-wallet-connector', '@fuel-connectors/evm-connector', '@fuel-connectors/walletconnect-connector', - '@fuel-connectors/bakosafe-connector', + '@fuel-connectors/bako-safe', ], }, splitting: true, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bf685988..0c535809 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -219,7 +219,7 @@ importers: specifier: 2.10.2 version: 2.10.2(typescript@5.4.5) devDependencies: - '@fuel-connectors/bakosafe-connector': + '@fuel-connectors/bako-safe': specifier: workspace:* version: link:../bako-safe '@fuel-connectors/burner-wallet-connector': From 3bd609dd9cba8aa55487feba04d3295284560585 Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 4 Jun 2024 18:11:27 -0300 Subject: [PATCH 38/85] fix: add bako-connector to ui --- examples/react-app/src/main.tsx | 2 ++ examples/react-next/src/components/Providers.tsx | 2 ++ 2 files changed, 4 insertions(+) diff --git a/examples/react-app/src/main.tsx b/examples/react-app/src/main.tsx index b35e1292..9019a1f7 100644 --- a/examples/react-app/src/main.tsx +++ b/examples/react-app/src/main.tsx @@ -9,6 +9,7 @@ import { http, createConfig, injected } from '@wagmi/core'; import { mainnet, sepolia } from '@wagmi/core/chains'; import { + BakoSafeConnector, BurnerWalletConnector, FuelWalletConnector, FuelWalletDevelopmentConnector, @@ -73,6 +74,7 @@ ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( }), new FuelWalletDevelopmentConnector(), new BurnerWalletConnector(), + new BakoSafeConnector(), ], }} > diff --git a/examples/react-next/src/components/Providers.tsx b/examples/react-next/src/components/Providers.tsx index 57c12075..9b5185b3 100644 --- a/examples/react-next/src/components/Providers.tsx +++ b/examples/react-next/src/components/Providers.tsx @@ -4,6 +4,7 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import { + BakoSafeConnector, FuelWalletConnector, FuelWalletDevelopmentConnector, FueletWalletConnector, @@ -24,6 +25,7 @@ export const Providers = ({ children }: { children: React.ReactNode }) => { new FuelWalletDevelopmentConnector(), new FueletWalletConnector(), new WalletConnectConnector(), + new BakoSafeConnector(), ], }} > From 3d12207cdadaf940b2233569c17a3c543369fdb3 Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 4 Jun 2024 18:13:20 -0300 Subject: [PATCH 39/85] fix: add bako-connector to ui --- examples/react-app/src/main.tsx | 2 +- examples/react-next/src/components/Providers.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/react-app/src/main.tsx b/examples/react-app/src/main.tsx index 9019a1f7..99e63808 100644 --- a/examples/react-app/src/main.tsx +++ b/examples/react-app/src/main.tsx @@ -67,6 +67,7 @@ ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( fuelConfig={{ connectors: [ new FuelWalletConnector(), + new BakoSafeConnector(), new FueletWalletConnector(), new WalletConnectConnector({ wagmiConfig, @@ -74,7 +75,6 @@ ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( }), new FuelWalletDevelopmentConnector(), new BurnerWalletConnector(), - new BakoSafeConnector(), ], }} > diff --git a/examples/react-next/src/components/Providers.tsx b/examples/react-next/src/components/Providers.tsx index 9b5185b3..3053e3ad 100644 --- a/examples/react-next/src/components/Providers.tsx +++ b/examples/react-next/src/components/Providers.tsx @@ -23,9 +23,9 @@ export const Providers = ({ children }: { children: React.ReactNode }) => { connectors: [ new FuelWalletConnector(), new FuelWalletDevelopmentConnector(), + new BakoSafeConnector(), new FueletWalletConnector(), new WalletConnectConnector(), - new BakoSafeConnector(), ], }} > From ca1ceff778f5c39714de010cd53b137d60d917c2 Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 4 Jun 2024 20:24:02 -0300 Subject: [PATCH 40/85] refactor: types --- packages/bako-safe/src/BakoSafeConnector.ts | 108 ++++++++-------- packages/bako-safe/src/SocketClient.ts | 129 ++++++++------------ packages/bako-safe/src/constants.ts | 12 +- packages/bako-safe/src/types.ts | 72 ++++++++--- 4 files changed, 170 insertions(+), 151 deletions(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.ts b/packages/bako-safe/src/BakoSafeConnector.ts index 2b7ac6ac..e633b47e 100644 --- a/packages/bako-safe/src/BakoSafeConnector.ts +++ b/packages/bako-safe/src/BakoSafeConnector.ts @@ -22,7 +22,12 @@ import { WINDOW, } from './constants'; import { RequestAPI } from './request'; -import { BAKOSAFEConnectorEvents, type BakoSafeConnectorConfig } from './types'; +import { + type BakoSafeConnectorConfig, + BakoSafeConnectorEvents, + type IResponseAuthConfirmed, + type IResponseTxCofirmed, +} from './types'; export class BakoSafeConnector extends FuelConnector { name = APP_NAME; @@ -41,8 +46,8 @@ export class BakoSafeConnector extends FuelConnector { connected = false; events = { + ...BakoSafeConnectorEvents, ...FuelConnectorEventTypes, - ...BAKOSAFEConnectorEvents, }; private readonly appUrl: string; @@ -90,7 +95,7 @@ export class BakoSafeConnector extends FuelConnector { const open_interval = setInterval(() => { const isOpen = this.dAppWindow?.isOpen; if (!isOpen) { - this.emit('[CLIENT_DISCONNECTED]', {}); + this.emit(BakoSafeConnectorEvents.CLIENT_DISCONNECTED, {}); clearInterval(open_interval); } }, 2000); @@ -102,7 +107,7 @@ export class BakoSafeConnector extends FuelConnector { const interval = setInterval(() => { const isOpen = this.dAppWindow?.opned?.closed; if (isOpen) { - this.emit('[CLIENT_DISCONNECTED]', {}); + this.emit(BakoSafeConnectorEvents.CLIENT_DISCONNECTED, {}); clearInterval(interval); } }, 300); @@ -142,9 +147,6 @@ export class BakoSafeConnector extends FuelConnector { // ============================================================ async connect() { return new Promise((resolve, reject) => { - const request = '[AUTH_CONFIRMED]'; - const connect_cancel = '[CLIENT_DISCONNECTED]'; - if (this.connected) { resolve(true); return; @@ -156,22 +158,33 @@ export class BakoSafeConnector extends FuelConnector { //events controll // @ts-ignore - this.socket?.events.on(connect_cancel, () => { - // cancel the transaction + this.on(BakoSafeConnectorEvents.CLIENT_DISCONNECTED, () => { this.dAppWindow?.close(); - this.off(connect_cancel, () => {}); reject(false); }); - // @ts-ignore - this.socket?.events.on(request, async (data) => { - console.log('request', data); - this.socket?.events.off(request, () => {}); - this.emit(this.events.CONNECTION, data); - this.emit(this.events.ACCOUNTS, await this.accounts()); - this.emit(this.events.CURRENT_ACCOUNT, await this.currentAccount()); - resolve(true); - this.dAppWindow?.close(); - }); + + //@ts-ignore + this.on( + BakoSafeConnectorEvents.AUTH_CONFIRMED, + async ({ data }: IResponseAuthConfirmed) => { + const connected = data.connected; + const accounts = await this.accounts(); + const currentAccount = await this.currentAccount(); + + console.log({ + connected, + accounts, + currentAccount, + }); + + this.emit(this.events.connection, connected); + this.emit(this.events.accounts, accounts); + this.emit(this.events.currentAccount, currentAccount); + + this.dAppWindow?.close(); + resolve(connected); + }, + ); }); } @@ -186,50 +199,42 @@ export class BakoSafeConnector extends FuelConnector { _transaction: TransactionRequestLike, ) { return new Promise((resolve, reject) => { - const connect_confirm = '[CONNECTED]'; - const connect_cancel = '[CLIENT_DISCONNECTED]'; - const request_tx_pending = '[TX_EVENT_REQUESTED]'; - const request_tx_confirm = '[TX_EVENT_CONFIRMED]'; - const request_tx_timeout = '[TX_EVENT_TIMEOUT]'; - // window controll this.dAppWindow?.open('/dapp/transaction', reject); this.checkWindow(); //events controll - // @ts-ignore - this.socket?.events.on(connect_cancel, () => { - // cancel the transaction - this.dAppWindow?.close(); - this.off(connect_cancel, () => {}); - reject(); - }); + //@ts-ignore + this.socket?.events.on( + BakoSafeConnectorEvents.CLIENT_DISCONNECTED, + () => { + this.dAppWindow?.close(); + reject(); + }, + ); // @ts-ignore - this.socket?.events.on(request_tx_timeout, () => { + this.socket?.events.on(BakoSafeConnectorEvents.TX_TIMEOUT, () => { this.dAppWindow?.close(); - this.off(request_tx_timeout, () => {}); reject(new Error('Transaction timeout')); }); // @ts-ignore - this.socket?.events.on(connect_confirm, () => { - // confirm bako ui connection - this.off(connect_confirm, () => {}); - this.socket?.server.emit(request_tx_pending, { + this.socket?.events.on(BakoSafeConnectorEvents.CLIENT_CONNECTED, () => { + this.socket?.server.emit(BakoSafeConnectorEvents.TX_PENDING, { _transaction, _address, }); }); // @ts-ignore - this.socket?.events.on(request_tx_confirm, ({ data }) => { - // confirm the transaction - this.off(request_tx_confirm, () => {}); - this.dAppWindow?.close(); - // @ts-ignore - resolve(`0x${data.id}`); - }); + this.socket?.events.on( + BakoSafeConnectorEvents.TX_CONFIRMED, + ({ data }: IResponseTxCofirmed) => { + this.dAppWindow?.close(); + resolve(`0x${data.id}`); + }, + ); }); } @@ -266,15 +271,18 @@ export class BakoSafeConnector extends FuelConnector { const data = await this.api.get( `/connections/${this.sessionId}/currentAccount`, ); - return data; + + const isInvalid = data && JSON.stringify(data) === JSON.stringify({}); + + return isInvalid ? null : data; } async disconnect() { //nao necessário esperar mensagens await this.api.delete(`/connections/${this.sessionId}`); - this.emit(this.events.CONNECTION, false); - this.emit(this.events.ACCOUNTS, []); - this.emit(this.events.CURRENT_ACCOUNT, null); + this.emit(this.events.connection, false); + this.emit(this.events.accounts, []); + this.emit(this.events.currentAccount, null); return false; } diff --git a/packages/bako-safe/src/SocketClient.ts b/packages/bako-safe/src/SocketClient.ts index bba734af..6cd252bb 100644 --- a/packages/bako-safe/src/SocketClient.ts +++ b/packages/bako-safe/src/SocketClient.ts @@ -1,79 +1,58 @@ -import { io, Socket } from "socket.io-client"; -import { SOCKET_URL } from "./constants"; -import {BakoSafeConnector} from "./BakoSafeConnector"; -import { WINDOW } from './constants' - -export interface ISocketAuth { - username: string; - data: Date; - origin: string; - sessionId: string; -} - -export interface ICreateClientSocket { - sessionId: string; - events: BakoSafeConnector -} +import { type Socket, io } from 'socket.io-client'; +import type { BakoSafeConnector } from './BakoSafeConnector'; +import { SOCKET_URL } from './constants'; +import { WINDOW } from './constants'; +import { + BakoSafeConnectorEvents, + BakoSafeUsernames, + type ICreateClientSocket, + type IResponseAuthConfirmed, + type IResponseTxCofirmed, + type ISocketAuth, + type ISocketMessage, +} from './types'; const default_socket_auth: Omit = { - username: '[CONNECTOR]', - data: new Date(), - origin: WINDOW.origin ?? 'https://safe.bako.global', -} - + username: BakoSafeUsernames.CONNECTOR, + data: new Date(), + origin: WINDOW.origin ?? 'https://safe.bako.global', +}; export class SocketClient { - server: Socket; - events: BakoSafeConnector; - request_id: string; - - constructor({sessionId, events}: ICreateClientSocket) { - this.request_id = crypto.randomUUID() - - this.server = io(SOCKET_URL, { - auth: { - ...default_socket_auth, - sessionId, - request_id: this.request_id - }, - autoConnect: false, - reconnection: false, - }); - this.events = events; - this.server?.on('message', (data) => { - console.log('[MESSAGE]: ', { - valid: data.to == default_socket_auth.username, - auth: default_socket_auth.username, - data - }) - if(!data.request_id || data.request_id != this.request_id) return; - //todo: emmit reject event - - if(data.to == default_socket_auth.username){ - this.events.emit(data.type, { - from: data.username, - data: data.data, - }); - } - }); - - this.server.connect(); - } - - //emite an request to servidor - request( - to: string, - type: string, - data: {[key: string]: any} = {}) - { - this.server.emit('message', { - to, - type, - data - }); - } - - get isConnected() { - return this.server.connected; - } -} \ No newline at end of file + server: Socket; + events: BakoSafeConnector; + request_id: string; + + constructor({ sessionId, events }: ICreateClientSocket) { + this.request_id = crypto.randomUUID(); + + this.server = io(SOCKET_URL, { + auth: { + ...default_socket_auth, + sessionId, + request_id: this.request_id, + }, + autoConnect: false, + reconnection: false, + }); + + this.events = events; + this.server?.on( + BakoSafeConnectorEvents.DEFAULT, + (data: ISocketMessage) => { + if (data.to === default_socket_auth.username) { + this.events.emit(data.type, { + from: data.username, + data: data.data, + }); + } + }, + ); + + this.server.connect(); + } + + get isConnected() { + return this.server.connected; + } +} diff --git a/packages/bako-safe/src/constants.ts b/packages/bako-safe/src/constants.ts index 4079c18a..7e4e6808 100644 --- a/packages/bako-safe/src/constants.ts +++ b/packages/bako-safe/src/constants.ts @@ -9,13 +9,13 @@ export const APP_IMAGE_LIGHT = // export const APP_URL = 'https://safe.bako.global'; // export const HOST_URL = 'https://api-safe.bako.global'; -export const APP_URL = 'https://bsafe-ui-git-staging-infinity-base.vercel.app/'; -export const HOST_URL = 'https://stg-api.bsafe.pro'; -export const SOCKET_URL = 'https://stg-api.bsafe.pro'; +// export const APP_URL = 'https://bsafe-ui-git-staging-infinity-base.vercel.app/'; +// export const HOST_URL = 'https://stg-api.bsafe.pro'; +// export const SOCKET_URL = 'https://stg-api.bsafe.pro'; -// export const APP_URL = 'http://localhost:5174'; -// export const HOST_URL = 'http://localhost:3333'; -// export const SOCKET_URL = 'http://localhost:3001'; +export const APP_URL = 'http://localhost:5174'; +export const HOST_URL = 'http://localhost:3333'; +export const SOCKET_URL = 'http://localhost:3001'; // Window object export const HAS_WINDOW = typeof window !== 'undefined'; diff --git a/packages/bako-safe/src/types.ts b/packages/bako-safe/src/types.ts index e715188d..260c6cb7 100644 --- a/packages/bako-safe/src/types.ts +++ b/packages/bako-safe/src/types.ts @@ -1,28 +1,27 @@ -import type { StorageAbstract } from 'fuels'; +import type { StorageAbstract, TransactionRequestLike } from 'fuels'; +import type { BakoSafeConnector } from './BakoSafeConnector'; -export enum BAKOSAFEConnectorEvents { - //accounts - ACCOUNTS = 'accounts', - CURRENT_ACCOUNT = 'currentAccount', +export enum BakoSafeConnectorEvents { + //default + DEFAULT = 'message', - // transfer - TRANSACTION_CREATED = '[TRANSACTION_CREATED]', - TRANSACTION_SEND = '[TRANSACTION_SEND]', + //client + CLIENT_DISCONNECTED = '[CLIENT_DISCONNECTED]', + CLIENT_CONNECTED = '[CONNECTED]', - //popup auth - AUTH_CONFIRMED = '[AUTH_CONFIRMED]', - AUTH_REJECTED = '[AUTH_REJECTED]', - AUTH_DISCONECT_DAPP = '[AUTH_DISCONECT_DAPP]', - AUTH_DISCONECT_CONFIRM = '[AUTH_DISCONECT_CONFIRM]', + //transactions + TX_PENDING = '[TX_EVENT_REQUESTED]', + TX_CONFIRMED = '[TX_EVENT_CONFIRMED]', + TX_TIMEOUT = '[TX_EVENT_TIMEOUT]', - //connections - CONNECTION = 'connection', - POPUP_TRANSFER = '[POPUP_TRANSFER]_connected', - CONNECTED_NETWORK = '[CONNECTED_NETWORK]', - POPUP_CLOSED = '[POPUP_CLOSED]', + //auth + AUTH_CONFIRMED = '[AUTH_CONFIRMED]', +} - //default - DEFAULT = 'message', +export enum BakoSafeUsernames { + CONNECTOR = '[CONNECTOR]', + CLIENT = '[UI]', + SERVER = '[API]', } export type BakoSafeConnectorConfig = { @@ -30,3 +29,36 @@ export type BakoSafeConnectorConfig = { appUrl?: string; stroage?: StorageAbstract; }; + +export interface ISocketAuth { + username: string; + data: Date; + origin: string; + sessionId: string; +} + +export interface ISocketMessage { + username: BakoSafeUsernames; + room: string; + to: BakoSafeUsernames; + type: BakoSafeConnectorEvents; + data: T; +} + +export interface ICreateClientSocket { + sessionId: string; + events: BakoSafeConnector; +} + +export interface IRequestTxPending { + _transaction: TransactionRequestLike; + _address: string; +} + +export interface IResponseTxCofirmed { + id: string; +} + +export interface IResponseAuthConfirmed { + connected: boolean; +} From e9ff1ec205cceba72d3ad77d98896e59015d514a Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 4 Jun 2024 20:32:16 -0300 Subject: [PATCH 41/85] refactor: types --- packages/bako-safe/src/BakoSafeConnector.ts | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.ts b/packages/bako-safe/src/BakoSafeConnector.ts index e633b47e..fd1ce1cf 100644 --- a/packages/bako-safe/src/BakoSafeConnector.ts +++ b/packages/bako-safe/src/BakoSafeConnector.ts @@ -163,10 +163,10 @@ export class BakoSafeConnector extends FuelConnector { reject(false); }); - //@ts-ignore this.on( + //@ts-ignore BakoSafeConnectorEvents.AUTH_CONFIRMED, - async ({ data }: IResponseAuthConfirmed) => { + async ({ data }: { data: IResponseAuthConfirmed }) => { const connected = data.connected; const accounts = await this.accounts(); const currentAccount = await this.currentAccount(); @@ -204,8 +204,9 @@ export class BakoSafeConnector extends FuelConnector { this.checkWindow(); //events controll - //@ts-ignore - this.socket?.events.on( + + this.on( + //@ts-ignore BakoSafeConnectorEvents.CLIENT_DISCONNECTED, () => { this.dAppWindow?.close(); @@ -214,23 +215,23 @@ export class BakoSafeConnector extends FuelConnector { ); // @ts-ignore - this.socket?.events.on(BakoSafeConnectorEvents.TX_TIMEOUT, () => { + this.on(BakoSafeConnectorEvents.TX_TIMEOUT, () => { this.dAppWindow?.close(); reject(new Error('Transaction timeout')); }); // @ts-ignore - this.socket?.events.on(BakoSafeConnectorEvents.CLIENT_CONNECTED, () => { + this.on(BakoSafeConnectorEvents.CLIENT_CONNECTED, () => { this.socket?.server.emit(BakoSafeConnectorEvents.TX_PENDING, { _transaction, _address, }); }); - // @ts-ignore - this.socket?.events.on( + this.on( + // @ts-ignore BakoSafeConnectorEvents.TX_CONFIRMED, - ({ data }: IResponseTxCofirmed) => { + ({ data }: { data: IResponseTxCofirmed }) => { this.dAppWindow?.close(); resolve(`0x${data.id}`); }, From 0fced56ef2b67db47c1d9c8e9df73fabcae49abf Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 4 Jun 2024 20:38:18 -0300 Subject: [PATCH 42/85] feat: close frame with backdrop click --- packages/bako-safe/src/DAPPWindow.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bako-safe/src/DAPPWindow.ts b/packages/bako-safe/src/DAPPWindow.ts index 63727037..698e14a3 100644 --- a/packages/bako-safe/src/DAPPWindow.ts +++ b/packages/bako-safe/src/DAPPWindow.ts @@ -1,6 +1,5 @@ import { APP_NAME, WINDOW } from './constants'; - type PopupConfig = { appUrl: string; height: number; @@ -99,6 +98,7 @@ export class DAppWindow { backdrop.style.height = '100%'; backdrop.style.backgroundColor = 'rgba(0,0,0,0.5)'; backdrop.style.zIndex = '99999998'; + backdrop.addEventListener('click', () => this.close()); // if user click on backdrop, close the frame document.body.appendChild(backdrop); document.body.appendChild(frame); From 6395451a8e57b24894455a3a249416c6fa5fc744 Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 4 Jun 2024 20:56:06 -0300 Subject: [PATCH 43/85] chore: staging urls --- packages/bako-safe/src/constants.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/bako-safe/src/constants.ts b/packages/bako-safe/src/constants.ts index 7e4e6808..4079c18a 100644 --- a/packages/bako-safe/src/constants.ts +++ b/packages/bako-safe/src/constants.ts @@ -9,13 +9,13 @@ export const APP_IMAGE_LIGHT = // export const APP_URL = 'https://safe.bako.global'; // export const HOST_URL = 'https://api-safe.bako.global'; -// export const APP_URL = 'https://bsafe-ui-git-staging-infinity-base.vercel.app/'; -// export const HOST_URL = 'https://stg-api.bsafe.pro'; -// export const SOCKET_URL = 'https://stg-api.bsafe.pro'; +export const APP_URL = 'https://bsafe-ui-git-staging-infinity-base.vercel.app/'; +export const HOST_URL = 'https://stg-api.bsafe.pro'; +export const SOCKET_URL = 'https://stg-api.bsafe.pro'; -export const APP_URL = 'http://localhost:5174'; -export const HOST_URL = 'http://localhost:3333'; -export const SOCKET_URL = 'http://localhost:3001'; +// export const APP_URL = 'http://localhost:5174'; +// export const HOST_URL = 'http://localhost:3333'; +// export const SOCKET_URL = 'http://localhost:3001'; // Window object export const HAS_WINDOW = typeof window !== 'undefined'; From 0a6f5fa8f05ea0d99c4689b8bbf4c96fdd239e2b Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 4 Jun 2024 21:07:24 -0300 Subject: [PATCH 44/85] fix: lint --- examples/react-app/src/components/counter.tsx | 5 +---- packages/bako-safe/src/request.ts | 4 +--- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/examples/react-app/src/components/counter.tsx b/examples/react-app/src/components/counter.tsx index 908596bd..0ee8b468 100644 --- a/examples/react-app/src/components/counter.tsx +++ b/examples/react-app/src/components/counter.tsx @@ -65,10 +65,7 @@ export default function ContractCounter({ isSigning, setIsSigning }: Props) { if (wallet) { setLoading(true); setIsSigning(true); - const contract = CounterAbi__factory.connect( - COUNTER_CONTRACT_ID, - wallet, - ); + const contract = CounterAbi__factory.connect(COUNTER_CONTRACT_ID, wallet); try { await contract.functions .increment_counter(1) diff --git a/packages/bako-safe/src/request.ts b/packages/bako-safe/src/request.ts index c0307ba6..c654be17 100644 --- a/packages/bako-safe/src/request.ts +++ b/packages/bako-safe/src/request.ts @@ -14,7 +14,7 @@ export class RequestAPI { return data; } - async post(pathname: string, body: any) { + async post(pathname: string, body: BodyInit) { const data = await fetch(urlJoin(this.baseUrl, pathname), { method: 'POST', headers: { @@ -25,11 +25,9 @@ export class RequestAPI { return data; } - async delete(pathname: string) { await fetch(urlJoin(this.baseUrl, pathname), { method: 'DELETE', }); } } - From 2f3a8ed03e4f7f15b94b891d4cae3b9dfbc04a7c Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 4 Jun 2024 21:25:24 -0300 Subject: [PATCH 45/85] tests: add tests to validate instance bakosafe class --- packages/bako-safe/src/BakoSafeConnector.ts | 2 +- packages/bako-safe/src/types.ts | 2 +- .../bako-safe/tests/BakoSafeConnector.test.ts | 47 +++++++++++++++++++ packages/bako-safe/tests/index.test.ts | 9 ++++ 4 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 packages/bako-safe/tests/BakoSafeConnector.test.ts create mode 100644 packages/bako-safe/tests/index.test.ts diff --git a/packages/bako-safe/src/BakoSafeConnector.ts b/packages/bako-safe/src/BakoSafeConnector.ts index fd1ce1cf..799f3262 100644 --- a/packages/bako-safe/src/BakoSafeConnector.ts +++ b/packages/bako-safe/src/BakoSafeConnector.ts @@ -64,7 +64,7 @@ export class BakoSafeConnector extends FuelConnector { this.host = config?.host ?? HOST_URL; this.appUrl = config?.appUrl ?? APP_URL; this.api = new RequestAPI(this.host); - this.storage = this.getStorage(config?.stroage); + this.storage = this.getStorage(config?.storage); this.setupReady = false; } diff --git a/packages/bako-safe/src/types.ts b/packages/bako-safe/src/types.ts index 260c6cb7..946a89ba 100644 --- a/packages/bako-safe/src/types.ts +++ b/packages/bako-safe/src/types.ts @@ -27,7 +27,7 @@ export enum BakoSafeUsernames { export type BakoSafeConnectorConfig = { host?: string; appUrl?: string; - stroage?: StorageAbstract; + storage?: StorageAbstract; }; export interface ISocketAuth { diff --git a/packages/bako-safe/tests/BakoSafeConnector.test.ts b/packages/bako-safe/tests/BakoSafeConnector.test.ts new file mode 100644 index 00000000..9d70c2fd --- /dev/null +++ b/packages/bako-safe/tests/BakoSafeConnector.test.ts @@ -0,0 +1,47 @@ +import { beforeAll, describe, expect, test, vi } from 'vitest'; + +import { StorageAbstract } from 'fuels'; +import { BakoSafeConnector } from '../src/BakoSafeConnector'; +import { APP_NAME } from '../src/constants'; + +describe('BakoSafeConnector', () => { + let storage: StorageAbstract; + beforeAll(() => { + class Storage extends StorageAbstract { + data: { [key: string]: string } = {}; + + async getItem(key: string): Promise { + return this.data[key]; + } + + async setItem(key: string, value: string): Promise { + this.data[key] = value; + } + + async removeItem(key: string): Promise { + delete this.data[key]; + } + + async clear(): Promise { + this.data = {}; + } + } + + storage = new Storage(); + }); + + test('constructor initializes properties correctly', async () => { + const connector = new BakoSafeConnector({ + storage: storage, + }); + expect(connector.name).toBe(APP_NAME); + expect(connector.connected).toBe(false); + expect(connector.installed).toBe(true); + }); + + test('should throw error if no storage provided', async () => { + expect(() => { + new BakoSafeConnector(); + }).toThrowError('No storage provided'); + }); +}); diff --git a/packages/bako-safe/tests/index.test.ts b/packages/bako-safe/tests/index.test.ts new file mode 100644 index 00000000..1e4fe69e --- /dev/null +++ b/packages/bako-safe/tests/index.test.ts @@ -0,0 +1,9 @@ +import { describe, expect, test } from 'vitest'; + +import { BakoSafeConnector } from '../src/index'; + +describe('index', () => { + test('should export BakoSafeConnector', () => { + expect(BakoSafeConnector).toBeDefined(); + }); +}); From af12fa7aaa815b4396a5205ffd9d2c287273a66e Mon Sep 17 00:00:00 2001 From: guimroque Date: Thu, 6 Jun 2024 10:51:53 -0300 Subject: [PATCH 46/85] fix: popup heigth --- packages/bako-safe/src/DAPPWindow.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bako-safe/src/DAPPWindow.ts b/packages/bako-safe/src/DAPPWindow.ts index 698e14a3..1eff2725 100644 --- a/packages/bako-safe/src/DAPPWindow.ts +++ b/packages/bako-safe/src/DAPPWindow.ts @@ -27,7 +27,7 @@ export class DAppWindow { top: WINDOW.innerHeight / 2 - height / 2, left: WINDOW.innerWidth / 2 - width / 2, width, - height, + height: WINDOW.innerHeight >= height ? height : WINDOW.innerHeight, }; } From f085959ab05d593619a112e2a1275a903e72d372 Mon Sep 17 00:00:00 2001 From: guimroque Date: Thu, 6 Jun 2024 15:53:37 -0300 Subject: [PATCH 47/85] fix: move urls to prod --- packages/bako-safe/src/constants.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/bako-safe/src/constants.ts b/packages/bako-safe/src/constants.ts index 4079c18a..ec926c83 100644 --- a/packages/bako-safe/src/constants.ts +++ b/packages/bako-safe/src/constants.ts @@ -6,12 +6,13 @@ export const APP_IMAGE_DARK = export const APP_IMAGE_LIGHT = 'https://safe.bako.global/BAKO_CONNECTOR_ICON.svg'; -// export const APP_URL = 'https://safe.bako.global'; -// export const HOST_URL = 'https://api-safe.bako.global'; +export const APP_URL = 'https://safe.bako.global'; +export const HOST_URL = 'https://api-safe.bako.global'; +export const SOCKET_URL = 'https://api-safe.bako.global'; -export const APP_URL = 'https://bsafe-ui-git-staging-infinity-base.vercel.app/'; -export const HOST_URL = 'https://stg-api.bsafe.pro'; -export const SOCKET_URL = 'https://stg-api.bsafe.pro'; +// export const APP_URL = 'https://bsafe-ui-git-staging-infinity-base.vercel.app/'; +// export const HOST_URL = 'https://stg-api.bsafe.pro'; +// export const SOCKET_URL = 'https://stg-api.bsafe.pro'; // export const APP_URL = 'http://localhost:5174'; // export const HOST_URL = 'http://localhost:3333'; From cc4a1dded74db7340ad01ab183815be06239ba9a Mon Sep 17 00:00:00 2001 From: guimroque Date: Thu, 6 Jun 2024 18:17:48 -0300 Subject: [PATCH 48/85] fix: bakostorage --- packages/bako-safe/src/BakoSafeConnector.ts | 4 +-- packages/bako-safe/src/BakoStorage.ts | 23 +++++++++++++++ .../bako-safe/tests/BakoSafeConnector.test.ts | 28 ++----------------- 3 files changed, 28 insertions(+), 27 deletions(-) create mode 100644 packages/bako-safe/src/BakoStorage.ts diff --git a/packages/bako-safe/src/BakoSafeConnector.ts b/packages/bako-safe/src/BakoSafeConnector.ts index 799f3262..67f97848 100644 --- a/packages/bako-safe/src/BakoSafeConnector.ts +++ b/packages/bako-safe/src/BakoSafeConnector.ts @@ -9,6 +9,7 @@ import { type TransactionRequestLike, } from 'fuels'; +import { BakoStorage } from './BakoStorage'; import { DAppWindow } from './DAPPWindow'; import { SocketClient } from './SocketClient'; import { @@ -72,8 +73,7 @@ export class BakoSafeConnector extends FuelConnector { // Bako Safe application specific methods // ============================================================ private getStorage(storage?: StorageAbstract) { - const _storage = - storage ?? (WINDOW.localStorage as unknown as StorageAbstract); + const _storage = storage ?? WINDOW.localStorage ?? new BakoStorage(); if (!_storage) { throw new Error('No storage provided'); } diff --git a/packages/bako-safe/src/BakoStorage.ts b/packages/bako-safe/src/BakoStorage.ts new file mode 100644 index 00000000..88c78cf3 --- /dev/null +++ b/packages/bako-safe/src/BakoStorage.ts @@ -0,0 +1,23 @@ +import { StorageAbstract } from 'fuels'; + +export class BakoStorage extends StorageAbstract { + data: { [key: string]: string } = {}; + + async getItem(key: string): Promise { + return this.data[key]; + } + + async setItem(key: string, value: string): Promise { + this.data[key] = value; + + return; + } + + async removeItem(key: string): Promise { + delete this.data[key]; + } + + async clear(): Promise { + this.data = {}; + } +} diff --git a/packages/bako-safe/tests/BakoSafeConnector.test.ts b/packages/bako-safe/tests/BakoSafeConnector.test.ts index 9d70c2fd..e321d66b 100644 --- a/packages/bako-safe/tests/BakoSafeConnector.test.ts +++ b/packages/bako-safe/tests/BakoSafeConnector.test.ts @@ -1,34 +1,12 @@ import { beforeAll, describe, expect, test, vi } from 'vitest'; -import { StorageAbstract } from 'fuels'; +import type { StorageAbstract } from 'fuels'; import { BakoSafeConnector } from '../src/BakoSafeConnector'; +import { BakoStorage } from '../src/BakoStorage'; import { APP_NAME } from '../src/constants'; describe('BakoSafeConnector', () => { - let storage: StorageAbstract; - beforeAll(() => { - class Storage extends StorageAbstract { - data: { [key: string]: string } = {}; - - async getItem(key: string): Promise { - return this.data[key]; - } - - async setItem(key: string, value: string): Promise { - this.data[key] = value; - } - - async removeItem(key: string): Promise { - delete this.data[key]; - } - - async clear(): Promise { - this.data = {}; - } - } - - storage = new Storage(); - }); + const storage: StorageAbstract = new BakoStorage(); test('constructor initializes properties correctly', async () => { const connector = new BakoSafeConnector({ From 37ceef597eba306d843e22a40340c2ed60521561 Mon Sep 17 00:00:00 2001 From: guimroque Date: Thu, 6 Jun 2024 18:29:45 -0300 Subject: [PATCH 49/85] tests: complement --- packages/bako-safe/src/BakoSafeConnector.ts | 6 ++- packages/bako-safe/src/constants.ts | 2 + .../bako-safe/tests/BakoSafeConnector.test.ts | 43 ++++++++++++++++--- 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.ts b/packages/bako-safe/src/BakoSafeConnector.ts index 67f97848..4cd78c58 100644 --- a/packages/bako-safe/src/BakoSafeConnector.ts +++ b/packages/bako-safe/src/BakoSafeConnector.ts @@ -17,7 +17,9 @@ import { APP_IMAGE_DARK, APP_IMAGE_LIGHT, APP_NAME, + APP_NETWORK, APP_URL, + APP_VERSION, HAS_WINDOW, HOST_URL, WINDOW, @@ -246,8 +248,8 @@ export class BakoSafeConnector extends FuelConnector { async version() { return { - app: '0.0.0', - network: '0.0.0', + app: APP_VERSION, + network: APP_NETWORK, }; } diff --git a/packages/bako-safe/src/constants.ts b/packages/bako-safe/src/constants.ts index ec926c83..a1534eb7 100644 --- a/packages/bako-safe/src/constants.ts +++ b/packages/bako-safe/src/constants.ts @@ -1,3 +1,5 @@ +export const APP_VERSION = '0.0.0'; +export const APP_NETWORK = '0.0.0'; export const APP_NAME = 'Bako Safe'; export const APP_DESCRIPTION = 'Bako Safe is a connector to safe.bako.global, a non-custodial vault for your crypto assets.'; diff --git a/packages/bako-safe/tests/BakoSafeConnector.test.ts b/packages/bako-safe/tests/BakoSafeConnector.test.ts index e321d66b..a02d174b 100644 --- a/packages/bako-safe/tests/BakoSafeConnector.test.ts +++ b/packages/bako-safe/tests/BakoSafeConnector.test.ts @@ -1,9 +1,9 @@ import { beforeAll, describe, expect, test, vi } from 'vitest'; -import type { StorageAbstract } from 'fuels'; +import { Address, type StorageAbstract } from 'fuels'; import { BakoSafeConnector } from '../src/BakoSafeConnector'; import { BakoStorage } from '../src/BakoStorage'; -import { APP_NAME } from '../src/constants'; +import { APP_NAME, APP_NETWORK, APP_VERSION } from '../src/constants'; describe('BakoSafeConnector', () => { const storage: StorageAbstract = new BakoStorage(); @@ -17,9 +17,40 @@ describe('BakoSafeConnector', () => { expect(connector.installed).toBe(true); }); - test('should throw error if no storage provided', async () => { - expect(() => { - new BakoSafeConnector(); - }).toThrowError('No storage provided'); + test('ping', async () => { + const connector = new BakoSafeConnector(); + const ping = await connector.ping(); + + expect(ping).toEqual(false); + }); + + test('version', async () => { + const connector = new BakoSafeConnector(); + const { app, network } = await connector.version(); + + expect(app).toEqual(APP_VERSION); + expect(network).toEqual(APP_NETWORK); + }); + + test('assets', async () => { + const connector = new BakoSafeConnector(); + const assets = await connector.assets(); + + expect(assets).toEqual([]); + }); + + test('signMessage', async () => { + const connector = new BakoSafeConnector(); + + expect( + connector.signMessage(Address.fromRandom().toAddress(), 'message'), + ).rejects.toThrowError('Method not implemented.'); + }); + + test('disconnect', async () => { + const connector = new BakoSafeConnector(); + const disconnect = await connector.disconnect(); + + expect(disconnect).toEqual(false); }); }); From 520bf6d3eb7d08d94a9997704b2850702b610174 Mon Sep 17 00:00:00 2001 From: guimroque Date: Thu, 6 Jun 2024 19:20:38 -0300 Subject: [PATCH 50/85] tests: add more tests --- packages/bako-safe/src/BakoSafeConnector.ts | 2 +- packages/bako-safe/src/types.ts | 2 + .../bako-safe/tests/BakoSafeConnector.test.ts | 149 ++++++++++++++++-- packages/bako-safe/tests/mocks/api.ts | 38 +++++ packages/bako-safe/tests/mocks/constantes.ts | 5 + 5 files changed, 185 insertions(+), 11 deletions(-) create mode 100644 packages/bako-safe/tests/mocks/api.ts create mode 100644 packages/bako-safe/tests/mocks/constantes.ts diff --git a/packages/bako-safe/src/BakoSafeConnector.ts b/packages/bako-safe/src/BakoSafeConnector.ts index 4cd78c58..c0d11490 100644 --- a/packages/bako-safe/src/BakoSafeConnector.ts +++ b/packages/bako-safe/src/BakoSafeConnector.ts @@ -66,7 +66,7 @@ export class BakoSafeConnector extends FuelConnector { super(); this.host = config?.host ?? HOST_URL; this.appUrl = config?.appUrl ?? APP_URL; - this.api = new RequestAPI(this.host); + this.api = config?.api ?? new RequestAPI(this.host); this.storage = this.getStorage(config?.storage); this.setupReady = false; } diff --git a/packages/bako-safe/src/types.ts b/packages/bako-safe/src/types.ts index 946a89ba..25c2a05e 100644 --- a/packages/bako-safe/src/types.ts +++ b/packages/bako-safe/src/types.ts @@ -1,5 +1,6 @@ import type { StorageAbstract, TransactionRequestLike } from 'fuels'; import type { BakoSafeConnector } from './BakoSafeConnector'; +import type { RequestAPI } from './request'; export enum BakoSafeConnectorEvents { //default @@ -28,6 +29,7 @@ export type BakoSafeConnectorConfig = { host?: string; appUrl?: string; storage?: StorageAbstract; + api?: RequestAPI; }; export interface ISocketAuth { diff --git a/packages/bako-safe/tests/BakoSafeConnector.test.ts b/packages/bako-safe/tests/BakoSafeConnector.test.ts index a02d174b..2b48faa4 100644 --- a/packages/bako-safe/tests/BakoSafeConnector.test.ts +++ b/packages/bako-safe/tests/BakoSafeConnector.test.ts @@ -1,9 +1,17 @@ import { beforeAll, describe, expect, test, vi } from 'vitest'; -import { Address, type StorageAbstract } from 'fuels'; +import { + Address, + type Asset, + type JsonAbi, + type Network, + type StorageAbstract, +} from 'fuels'; import { BakoSafeConnector } from '../src/BakoSafeConnector'; import { BakoStorage } from '../src/BakoStorage'; import { APP_NAME, APP_NETWORK, APP_VERSION } from '../src/constants'; +import { MockedRequestAPI } from './mocks/api'; +import { CURRENT_NETWORK, NETWORKS, STATE } from './mocks/constantes'; describe('BakoSafeConnector', () => { const storage: StorageAbstract = new BakoStorage(); @@ -16,41 +24,162 @@ describe('BakoSafeConnector', () => { expect(connector.connected).toBe(false); expect(connector.installed).toBe(true); }); +}); +describe('ping()', () => { test('ping', async () => { const connector = new BakoSafeConnector(); const ping = await connector.ping(); expect(ping).toEqual(false); }); +}); - test('version', async () => { +describe('version()', () => { + test('app_version', async () => { const connector = new BakoSafeConnector(); - const { app, network } = await connector.version(); + const { app } = await connector.version(); expect(app).toEqual(APP_VERSION); + }); + + test('app_network', async () => { + const connector = new BakoSafeConnector(); + const { network } = await connector.version(); + expect(network).toEqual(APP_NETWORK); }); +}); + +describe('networks()', () => { + test('return networks list', async () => { + const connector = new BakoSafeConnector({ + api: new MockedRequestAPI(), + }); + + const networks = await connector.networks(); + expect(networks).toEqual([ + { + chainId: 0, + url: CURRENT_NETWORK, + }, + ]); + }); +}); + +describe('currentNetwork()', () => { + test('return current network', async () => { + const connector = new BakoSafeConnector({ + api: new MockedRequestAPI(), + }); + + const current_network = await connector.currentNetwork(); + console.log('[test]: ', current_network); + expect(current_network).toEqual({ + chainId: 0, + url: CURRENT_NETWORK, + }); + }); +}); - test('assets', async () => { +describe('disconnect()', () => { + test('returns a false', async () => { const connector = new BakoSafeConnector(); - const assets = await connector.assets(); + const disconnect = await connector.disconnect(); - expect(assets).toEqual([]); + expect(disconnect).toEqual(false); }); +}); - test('signMessage', async () => { +describe('signMessage()', () => { + test('throws error', async () => { const connector = new BakoSafeConnector(); expect( connector.signMessage(Address.fromRandom().toAddress(), 'message'), ).rejects.toThrowError('Method not implemented.'); }); +}); - test('disconnect', async () => { +describe('assets()', () => { + test('returns a empty array', async () => { const connector = new BakoSafeConnector(); - const disconnect = await connector.disconnect(); + const assets = await connector.assets(); - expect(disconnect).toEqual(false); + expect(assets).toEqual([]); + }); +}); + +describe('addAsset()', () => { + test('throws error', async () => { + const connector = new BakoSafeConnector(); + const asset: Asset = { + name: '', + symbol: '', + icon: '', + networks: [], + }; + await expect(() => connector.addAsset(asset)).rejects.toThrowError( + 'Method not implemented.', + ); + }); +}); + +describe('addAssets()', () => { + test('throws error', async () => { + const connector = new BakoSafeConnector(); + await expect(() => connector.addAssets([])).rejects.toThrowError( + 'Method not implemented.', + ); + }); +}); + +describe('addAbi()', () => { + test('throws error', async () => { + const connector = new BakoSafeConnector(); + await expect(() => + connector.addABI('contractId', {} as unknown as JsonAbi), + ).rejects.toThrowError('Method not implemented.'); + }); +}); + +describe('getAbi()', () => { + test('throws error', async () => { + const connector = new BakoSafeConnector(); + await expect(() => connector.getABI('contractId')).rejects.toThrowError( + 'Method not implemented.', + ); + }); +}); + +describe('hasAbi()', () => { + test('throws error', async () => { + const connector = new BakoSafeConnector(); + + await expect( + async () => await connector.hasABI('contractId'), + ).rejects.toThrow('Method not implemented.'); + }); +}); + +describe('addNetwork()', () => { + test('throws error', async () => { + const connector = new BakoSafeConnector(); + await expect(() => connector.addNetwork('')).rejects.toThrowError( + 'Method not implemented.', + ); + }); +}); + +describe('selectNetwork()', () => { + const network: Network = { + chainId: 1, + url: '', + }; + test('throws error', async () => { + const connector = new BakoSafeConnector(); + await expect(() => connector.selectNetwork(network)).rejects.toThrowError( + 'Method not implemented.', + ); }); }); diff --git a/packages/bako-safe/tests/mocks/api.ts b/packages/bako-safe/tests/mocks/api.ts new file mode 100644 index 00000000..de1399e8 --- /dev/null +++ b/packages/bako-safe/tests/mocks/api.ts @@ -0,0 +1,38 @@ +import { + ACCOUNTS, + CURRENT_ACCOUNT, + CURRENT_NETWORK, + STATE, +} from './constantes'; + +export class MockedRequestAPI { + baseUrl: string; + + constructor(baseUrl = 'http://fakeurl') { + this.baseUrl = baseUrl; + } + + async get(pathname: string) { + const last = pathname.lastIndexOf('/'); + const _pathname = pathname.substring(last + 1, pathname.length); + + switch (_pathname) { + case 'currentNetwork': + return CURRENT_NETWORK; + case 'state': + return STATE; + case 'currentAccount': + return CURRENT_ACCOUNT; + case 'accounts': + return ACCOUNTS; + } + } + + async post(_pathname: string, _body: BodyInit) { + return {}; + } + + async delete(_pathname: string) { + return; + } +} diff --git a/packages/bako-safe/tests/mocks/constantes.ts b/packages/bako-safe/tests/mocks/constantes.ts new file mode 100644 index 00000000..39c6fb34 --- /dev/null +++ b/packages/bako-safe/tests/mocks/constantes.ts @@ -0,0 +1,5 @@ +export const CURRENT_NETWORK = 'https://testnet.fuel.network/v1/graphql'; +export const NETWORKS = [CURRENT_NETWORK]; +export const STATE = false; +export const CURRENT_ACCOUNT = '0xfakeaccount'; +export const ACCOUNTS: string[] = [CURRENT_ACCOUNT]; From 4c49700261246afdf4c3a63c47ea15d334a2d53d Mon Sep 17 00:00:00 2001 From: guimroque Date: Fri, 7 Jun 2024 17:03:50 -0300 Subject: [PATCH 51/85] tests: add more --- packages/bako-safe/src/BakoSafeConnector.ts | 13 ++---- .../{BakoStorage.ts => BakoSafeStorage.ts} | 0 packages/bako-safe/src/SocketClient.ts | 4 +- packages/bako-safe/src/constants.ts | 3 ++ packages/bako-safe/src/request.ts | 11 ----- .../bako-safe/tests/BakoSafeConnector.test.ts | 21 ++++++++-- packages/bako-safe/tests/BakoStorage.test.ts | 41 +++++++++++++++++++ packages/bako-safe/tests/mocks/api.ts | 4 -- 8 files changed, 68 insertions(+), 29 deletions(-) rename packages/bako-safe/src/{BakoStorage.ts => BakoSafeStorage.ts} (100%) create mode 100644 packages/bako-safe/tests/BakoStorage.test.ts diff --git a/packages/bako-safe/src/BakoSafeConnector.ts b/packages/bako-safe/src/BakoSafeConnector.ts index c0d11490..fe3b5453 100644 --- a/packages/bako-safe/src/BakoSafeConnector.ts +++ b/packages/bako-safe/src/BakoSafeConnector.ts @@ -9,7 +9,7 @@ import { type TransactionRequestLike, } from 'fuels'; -import { BakoStorage } from './BakoStorage'; +import { BakoStorage } from './BakoSafeStorage'; import { DAppWindow } from './DAPPWindow'; import { SocketClient } from './SocketClient'; import { @@ -22,6 +22,7 @@ import { APP_VERSION, HAS_WINDOW, HOST_URL, + SESSION_ID, WINDOW, } from './constants'; import { RequestAPI } from './request'; @@ -84,10 +85,10 @@ export class BakoSafeConnector extends FuelConnector { } private async getSessionId() { - let sessionId: string = (await this.storage?.getItem('sessionId')) || ''; + let sessionId: string = (await this.storage?.getItem(SESSION_ID)) || ''; if (!sessionId) { sessionId = crypto.randomUUID(); - await this.storage?.setItem('sessionId', sessionId); + await this.storage?.setItem(SESSION_ID, sessionId); } return sessionId; } @@ -173,12 +174,6 @@ export class BakoSafeConnector extends FuelConnector { const accounts = await this.accounts(); const currentAccount = await this.currentAccount(); - console.log({ - connected, - accounts, - currentAccount, - }); - this.emit(this.events.connection, connected); this.emit(this.events.accounts, accounts); this.emit(this.events.currentAccount, currentAccount); diff --git a/packages/bako-safe/src/BakoStorage.ts b/packages/bako-safe/src/BakoSafeStorage.ts similarity index 100% rename from packages/bako-safe/src/BakoStorage.ts rename to packages/bako-safe/src/BakoSafeStorage.ts diff --git a/packages/bako-safe/src/SocketClient.ts b/packages/bako-safe/src/SocketClient.ts index 6cd252bb..794170e5 100644 --- a/packages/bako-safe/src/SocketClient.ts +++ b/packages/bako-safe/src/SocketClient.ts @@ -1,6 +1,6 @@ import { type Socket, io } from 'socket.io-client'; import type { BakoSafeConnector } from './BakoSafeConnector'; -import { SOCKET_URL } from './constants'; +import { APP_URL, SOCKET_URL } from './constants'; import { WINDOW } from './constants'; import { BakoSafeConnectorEvents, @@ -15,7 +15,7 @@ import { const default_socket_auth: Omit = { username: BakoSafeUsernames.CONNECTOR, data: new Date(), - origin: WINDOW.origin ?? 'https://safe.bako.global', + origin: WINDOW.origin ?? APP_URL, }; export class SocketClient { diff --git a/packages/bako-safe/src/constants.ts b/packages/bako-safe/src/constants.ts index a1534eb7..76b3e35f 100644 --- a/packages/bako-safe/src/constants.ts +++ b/packages/bako-safe/src/constants.ts @@ -24,3 +24,6 @@ export const SOCKET_URL = 'https://api-safe.bako.global'; export const HAS_WINDOW = typeof window !== 'undefined'; // biome-ignore lint/suspicious/noExplicitAny: export const WINDOW: any = HAS_WINDOW ? window : {}; + +//storage +export const SESSION_ID = 'sessionId'; diff --git a/packages/bako-safe/src/request.ts b/packages/bako-safe/src/request.ts index c654be17..a8f5ca0a 100644 --- a/packages/bako-safe/src/request.ts +++ b/packages/bako-safe/src/request.ts @@ -14,17 +14,6 @@ export class RequestAPI { return data; } - async post(pathname: string, body: BodyInit) { - const data = await fetch(urlJoin(this.baseUrl, pathname), { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body, - }).then((res) => res.json()); - return data; - } - async delete(pathname: string) { await fetch(urlJoin(this.baseUrl, pathname), { method: 'DELETE', diff --git a/packages/bako-safe/tests/BakoSafeConnector.test.ts b/packages/bako-safe/tests/BakoSafeConnector.test.ts index 2b48faa4..2841c5ed 100644 --- a/packages/bako-safe/tests/BakoSafeConnector.test.ts +++ b/packages/bako-safe/tests/BakoSafeConnector.test.ts @@ -8,10 +8,10 @@ import { type StorageAbstract, } from 'fuels'; import { BakoSafeConnector } from '../src/BakoSafeConnector'; -import { BakoStorage } from '../src/BakoStorage'; +import { BakoStorage } from '../src/BakoSafeStorage'; import { APP_NAME, APP_NETWORK, APP_VERSION } from '../src/constants'; import { MockedRequestAPI } from './mocks/api'; -import { CURRENT_NETWORK, NETWORKS, STATE } from './mocks/constantes'; +import { CURRENT_NETWORK, STATE } from './mocks/constantes'; describe('BakoSafeConnector', () => { const storage: StorageAbstract = new BakoStorage(); @@ -74,7 +74,6 @@ describe('currentNetwork()', () => { }); const current_network = await connector.currentNetwork(); - console.log('[test]: ', current_network); expect(current_network).toEqual({ chainId: 0, url: CURRENT_NETWORK, @@ -82,6 +81,22 @@ describe('currentNetwork()', () => { }); }); +describe('isConnected()', () => { + test('return connection state', async () => { + const storage: StorageAbstract = new BakoStorage(); + await storage.setItem('sessionId', 'fake_session_id'); + + const connector = new BakoSafeConnector({ + api: new MockedRequestAPI(), + storage, + }); + + const state = await connector.isConnected(); + + expect(state).toEqual(STATE); + }); +}); + describe('disconnect()', () => { test('returns a false', async () => { const connector = new BakoSafeConnector(); diff --git a/packages/bako-safe/tests/BakoStorage.test.ts b/packages/bako-safe/tests/BakoStorage.test.ts new file mode 100644 index 00000000..3a3db308 --- /dev/null +++ b/packages/bako-safe/tests/BakoStorage.test.ts @@ -0,0 +1,41 @@ +import type { StorageAbstract } from 'fuels'; +import { beforeAll, describe, expect, test } from 'vitest'; +import { BakoStorage } from '../src/BakoSafeStorage'; + +describe('BakoStorage', () => { + let storage: StorageAbstract; + const value = 'FAKE_VALUE'; + const invalid_value = undefined; + const key = 'KEY'; + const invalid_key = 'INVALID_KEY'; + + beforeAll(() => { + storage = new BakoStorage(); + }); + + test('setItem()', async () => { + await storage.setItem(key, value); + + expect(await storage.getItem(key)).toEqual(value); + }); + + test('getItem()', async () => { + expect(await storage.getItem(key)).toEqual(value); + expect(await storage.getItem(invalid_key)).toEqual(invalid_value); + }); + + test('removeItem()', async () => { + await storage.removeItem(key); + + expect(await storage.getItem(key)).toEqual(invalid_value); + }); + + test('clear()', async () => { + await storage.setItem(key, value); + await storage.setItem(invalid_key, value); + await storage.clear(); + + expect(await storage.getItem(key)).toEqual(invalid_value); + expect(await storage.getItem(invalid_key)).toEqual(invalid_value); + }); +}); diff --git a/packages/bako-safe/tests/mocks/api.ts b/packages/bako-safe/tests/mocks/api.ts index de1399e8..f9c9d19d 100644 --- a/packages/bako-safe/tests/mocks/api.ts +++ b/packages/bako-safe/tests/mocks/api.ts @@ -28,10 +28,6 @@ export class MockedRequestAPI { } } - async post(_pathname: string, _body: BodyInit) { - return {}; - } - async delete(_pathname: string) { return; } From bf1e388b6393c8d0474c98af07620162193f64dc Mon Sep 17 00:00:00 2001 From: guimroque Date: Fri, 7 Jun 2024 17:11:49 -0300 Subject: [PATCH 52/85] chore: remove unused imports --- packages/bako-safe/src/DAPPWindow.ts | 2 +- packages/bako-safe/tests/BakoSafeConnector.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/bako-safe/src/DAPPWindow.ts b/packages/bako-safe/src/DAPPWindow.ts index 1eff2725..191fad6d 100644 --- a/packages/bako-safe/src/DAPPWindow.ts +++ b/packages/bako-safe/src/DAPPWindow.ts @@ -1,4 +1,4 @@ -import { APP_NAME, WINDOW } from './constants'; +import { WINDOW } from './constants'; type PopupConfig = { appUrl: string; diff --git a/packages/bako-safe/tests/BakoSafeConnector.test.ts b/packages/bako-safe/tests/BakoSafeConnector.test.ts index 2841c5ed..acbd2fc1 100644 --- a/packages/bako-safe/tests/BakoSafeConnector.test.ts +++ b/packages/bako-safe/tests/BakoSafeConnector.test.ts @@ -1,4 +1,4 @@ -import { beforeAll, describe, expect, test, vi } from 'vitest'; +import { describe, expect, test } from 'vitest'; import { Address, From 238798cc65929f6127633518a00a66ecb30d9f91 Mon Sep 17 00:00:00 2001 From: guimroque Date: Mon, 10 Jun 2024 20:15:52 -0300 Subject: [PATCH 53/85] fix: remove evm of default connectors --- packages/connectors/src/defaultConnectors.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/connectors/src/defaultConnectors.ts b/packages/connectors/src/defaultConnectors.ts index 8a69df9b..bb49e5c3 100644 --- a/packages/connectors/src/defaultConnectors.ts +++ b/packages/connectors/src/defaultConnectors.ts @@ -17,7 +17,6 @@ export function defaultConnectors({ new FuelWalletConnector(), new FueletWalletConnector(), new BakoSafeConnector(), - new EVMWalletConnector(), new BurnerWalletConnector(), ]; From e764a5c9617f35808c86888b9ddfa27dbd2c547f Mon Sep 17 00:00:00 2001 From: guimroque Date: Mon, 10 Jun 2024 20:16:47 -0300 Subject: [PATCH 54/85] fix: remove evm export --- packages/connectors/src/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/connectors/src/index.ts b/packages/connectors/src/index.ts index 68953145..a3e722b1 100644 --- a/packages/connectors/src/index.ts +++ b/packages/connectors/src/index.ts @@ -3,5 +3,4 @@ export * from '@fuel-connectors/fuel-development-wallet'; export * from '@fuel-connectors/fuel-wallet'; export * from '@fuel-connectors/fuelet-wallet'; export * from '@fuel-connectors/bako-safe'; -export * from '@fuel-connectors/evm-connector'; export * from '@fuel-connectors/burner-wallet-connector'; From 229f5802c77296e59de6d91d697b05a94e9f324b Mon Sep 17 00:00:00 2001 From: Guilherme Roque <62621598+guimroque@users.noreply.github.com> Date: Mon, 10 Jun 2024 20:20:14 -0300 Subject: [PATCH 55/85] chore: revert identation change --- examples/react-app/src/components/counter.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/examples/react-app/src/components/counter.tsx b/examples/react-app/src/components/counter.tsx index 0ee8b468..de36ba90 100644 --- a/examples/react-app/src/components/counter.tsx +++ b/examples/react-app/src/components/counter.tsx @@ -65,7 +65,10 @@ export default function ContractCounter({ isSigning, setIsSigning }: Props) { if (wallet) { setLoading(true); setIsSigning(true); - const contract = CounterAbi__factory.connect(COUNTER_CONTRACT_ID, wallet); + const contract = CounterAbi__factory.connect( + COUNTER_CONTRACT_ID, + wallet + ); try { await contract.functions .increment_counter(1) From b4b31a36db845af4e5e56bd2f0ce8c498adedf9b Mon Sep 17 00:00:00 2001 From: Guilherme Roque <62621598+guimroque@users.noreply.github.com> Date: Mon, 10 Jun 2024 20:20:47 -0300 Subject: [PATCH 56/85] chore: revert identation change --- examples/react-app/src/components/counter.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/react-app/src/components/counter.tsx b/examples/react-app/src/components/counter.tsx index de36ba90..0dcbdfa3 100644 --- a/examples/react-app/src/components/counter.tsx +++ b/examples/react-app/src/components/counter.tsx @@ -66,8 +66,8 @@ export default function ContractCounter({ isSigning, setIsSigning }: Props) { setLoading(true); setIsSigning(true); const contract = CounterAbi__factory.connect( - COUNTER_CONTRACT_ID, - wallet + COUNTER_CONTRACT_ID, + wallet ); try { await contract.functions From db397a090e562b8a7d6dc6efeed7d3225f359e75 Mon Sep 17 00:00:00 2001 From: Guilherme Roque <62621598+guimroque@users.noreply.github.com> Date: Mon, 10 Jun 2024 20:21:15 -0300 Subject: [PATCH 57/85] chore: revert identation change --- examples/react-app/src/components/counter.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/react-app/src/components/counter.tsx b/examples/react-app/src/components/counter.tsx index 0dcbdfa3..908596bd 100644 --- a/examples/react-app/src/components/counter.tsx +++ b/examples/react-app/src/components/counter.tsx @@ -67,7 +67,7 @@ export default function ContractCounter({ isSigning, setIsSigning }: Props) { setIsSigning(true); const contract = CounterAbi__factory.connect( COUNTER_CONTRACT_ID, - wallet + wallet, ); try { await contract.functions From 5f837eef25a09e10877e849dfa502b848693c31b Mon Sep 17 00:00:00 2001 From: guimroque Date: Mon, 10 Jun 2024 20:22:36 -0300 Subject: [PATCH 58/85] chore: remove unused import --- packages/connectors/src/defaultConnectors.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/connectors/src/defaultConnectors.ts b/packages/connectors/src/defaultConnectors.ts index bb49e5c3..03b699c2 100644 --- a/packages/connectors/src/defaultConnectors.ts +++ b/packages/connectors/src/defaultConnectors.ts @@ -1,6 +1,5 @@ import { BakoSafeConnector } from '@fuel-connectors/bako-safe'; import { BurnerWalletConnector } from '@fuel-connectors/burner-wallet-connector'; -import { EVMWalletConnector } from '@fuel-connectors/evm-connector'; import { FuelWalletDevelopmentConnector } from '@fuel-connectors/fuel-development-wallet'; import { FuelWalletConnector } from '@fuel-connectors/fuel-wallet'; import { FueletWalletConnector } from '@fuel-connectors/fuelet-wallet'; From 2b193a96b6987e641686a17ef6490c8fd7411df2 Mon Sep 17 00:00:00 2001 From: guimroque Date: Mon, 10 Jun 2024 20:23:04 -0300 Subject: [PATCH 59/85] chore: remove comments --- packages/bako-safe/src/constants.ts | 8 -------- 1 file changed, 8 deletions(-) diff --git a/packages/bako-safe/src/constants.ts b/packages/bako-safe/src/constants.ts index 76b3e35f..e6230bff 100644 --- a/packages/bako-safe/src/constants.ts +++ b/packages/bako-safe/src/constants.ts @@ -12,14 +12,6 @@ export const APP_URL = 'https://safe.bako.global'; export const HOST_URL = 'https://api-safe.bako.global'; export const SOCKET_URL = 'https://api-safe.bako.global'; -// export const APP_URL = 'https://bsafe-ui-git-staging-infinity-base.vercel.app/'; -// export const HOST_URL = 'https://stg-api.bsafe.pro'; -// export const SOCKET_URL = 'https://stg-api.bsafe.pro'; - -// export const APP_URL = 'http://localhost:5174'; -// export const HOST_URL = 'http://localhost:3333'; -// export const SOCKET_URL = 'http://localhost:3001'; - // Window object export const HAS_WINDOW = typeof window !== 'undefined'; // biome-ignore lint/suspicious/noExplicitAny: From d36578c8cf28660e967060b753713a3aeab216f7 Mon Sep 17 00:00:00 2001 From: guimroque Date: Mon, 10 Jun 2024 20:25:04 -0300 Subject: [PATCH 60/85] chore: remove redundant config --- packages/connectors/tsup.config.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/connectors/tsup.config.js b/packages/connectors/tsup.config.js index 2b5d7a3b..2a1dd424 100644 --- a/packages/connectors/tsup.config.js +++ b/packages/connectors/tsup.config.js @@ -7,7 +7,6 @@ export default defineConfig((options) => ({ 'src/index.ts', 'src/walletconnect-connector/index.ts', 'src/evm-connector/index.ts', - 'src/bako-safe/index.ts', ], external: ['fuels'], noExternal: [ From 054d7fcef8b1a244558176e1d2a49409c7056801 Mon Sep 17 00:00:00 2001 From: guimroque Date: Mon, 10 Jun 2024 21:23:20 -0300 Subject: [PATCH 61/85] chore: pnpm lock --- pnpm-lock.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0c535809..b8fed3f5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6724,11 +6724,11 @@ packages: dependencies: balanced-match: 1.0.2 - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} dependencies: - fill-range: 7.0.1 + fill-range: 7.1.1 /breakword@1.0.6: resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} @@ -6920,7 +6920,7 @@ packages: engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 - braces: 3.0.2 + braces: 3.0.3 glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.3 @@ -8166,8 +8166,8 @@ packages: bser: 2.1.1 dev: false - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 @@ -10033,7 +10033,7 @@ packages: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} dependencies: - braces: 3.0.2 + braces: 3.0.3 picomatch: 2.3.1 /mime-db@1.52.0: From d69e4d984a575c19243c48414e20c0e3f67cf07b Mon Sep 17 00:00:00 2001 From: guimroque Date: Mon, 17 Jun 2024 09:14:12 -0300 Subject: [PATCH 62/85] fix: mobile popup open --- packages/bako-safe/src/DAPPWindow.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/bako-safe/src/DAPPWindow.ts b/packages/bako-safe/src/DAPPWindow.ts index 191fad6d..328a09a8 100644 --- a/packages/bako-safe/src/DAPPWindow.ts +++ b/packages/bako-safe/src/DAPPWindow.ts @@ -27,7 +27,10 @@ export class DAppWindow { top: WINDOW.innerHeight / 2 - height / 2, left: WINDOW.innerWidth / 2 - width / 2, width, - height: WINDOW.innerHeight >= height ? height : WINDOW.innerHeight, + height: + !this.isMobile && WINDOW.innerHeight >= height + ? height + : WINDOW.innerHeight, }; } From 7995de89133564406c34f361d4ec1620e735254b Mon Sep 17 00:00:00 2001 From: guimroque Date: Thu, 20 Jun 2024 19:52:09 -0300 Subject: [PATCH 63/85] chore: add bakosafe to default connectors --- packages/connectors/src/defaultConnectors.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/connectors/src/defaultConnectors.ts b/packages/connectors/src/defaultConnectors.ts index a6222df0..8d7e1d15 100644 --- a/packages/connectors/src/defaultConnectors.ts +++ b/packages/connectors/src/defaultConnectors.ts @@ -15,6 +15,7 @@ export function defaultConnectors({ }: DefaultConnectors = {}): Array { const connectors = [ new FuelWalletConnector(), + new BakoSafeConnector(), new FueletWalletConnector(), new BakoSafeConnector(), new WalletConnectConnector(), From 6d66ae85ceb28d24a0b136f2dff80ef338397fd7 Mon Sep 17 00:00:00 2001 From: guimroque Date: Thu, 20 Jun 2024 20:00:42 -0300 Subject: [PATCH 64/85] fix: scroll on open frame in mobile --- packages/bako-safe/src/DAPPWindow.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/bako-safe/src/DAPPWindow.ts b/packages/bako-safe/src/DAPPWindow.ts index 328a09a8..c95a8fc6 100644 --- a/packages/bako-safe/src/DAPPWindow.ts +++ b/packages/bako-safe/src/DAPPWindow.ts @@ -36,7 +36,6 @@ export class DAppWindow { open(method: string, reject: (e: Error) => void) { if (this.isOpen) reject(new Error('Window is already open')); - const _isConnection = !method.includes('/dapp/'); if (!this.isSafariBrowser) { // if is not safari, we can use popup for both cases @@ -76,6 +75,9 @@ export class DAppWindow { } makeFrame(method: string, isSafari = false) { + //go to top + document.scrollingElement?.scrollTo(0, 0); + const w = this.small; //bako frame const frame = document.createElement('iframe'); From 7a317c952c90934efb2ffb8a8db5a6070145411b Mon Sep 17 00:00:00 2001 From: guimroque Date: Thu, 20 Jun 2024 20:01:50 -0300 Subject: [PATCH 65/85] fix: remove duplicated bakosafe --- packages/connectors/src/defaultConnectors.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/connectors/src/defaultConnectors.ts b/packages/connectors/src/defaultConnectors.ts index 8d7e1d15..7a8aad0b 100644 --- a/packages/connectors/src/defaultConnectors.ts +++ b/packages/connectors/src/defaultConnectors.ts @@ -17,7 +17,6 @@ export function defaultConnectors({ new FuelWalletConnector(), new BakoSafeConnector(), new FueletWalletConnector(), - new BakoSafeConnector(), new WalletConnectConnector(), new BurnerWalletConnector(), ]; From 26778ccb3a844d81a2200e9feb19192aab031a5b Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 25 Jun 2024 18:12:57 -0300 Subject: [PATCH 66/85] chore: new api url --- packages/bako-safe/src/DAPPWindow.ts | 5 +---- packages/bako-safe/src/constants.ts | 4 ++-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/bako-safe/src/DAPPWindow.ts b/packages/bako-safe/src/DAPPWindow.ts index c95a8fc6..e32504bf 100644 --- a/packages/bako-safe/src/DAPPWindow.ts +++ b/packages/bako-safe/src/DAPPWindow.ts @@ -75,9 +75,6 @@ export class DAppWindow { } makeFrame(method: string, isSafari = false) { - //go to top - document.scrollingElement?.scrollTo(0, 0); - const w = this.small; //bako frame const frame = document.createElement('iframe'); @@ -85,7 +82,7 @@ export class DAppWindow { frame.src = `${this.config.appUrl}${method}${this.queryString}${ isSafari ? '&byConnector=true' : '' }`; - frame.style.position = 'absolute'; + frame.style.position = 'fixed'; frame.style.zIndex = '99999999'; frame.style.top = `${w.top}`; frame.style.left = `${w.left}`; diff --git a/packages/bako-safe/src/constants.ts b/packages/bako-safe/src/constants.ts index e6230bff..191fcddf 100644 --- a/packages/bako-safe/src/constants.ts +++ b/packages/bako-safe/src/constants.ts @@ -9,8 +9,8 @@ export const APP_IMAGE_LIGHT = 'https://safe.bako.global/BAKO_CONNECTOR_ICON.svg'; export const APP_URL = 'https://safe.bako.global'; -export const HOST_URL = 'https://api-safe.bako.global'; -export const SOCKET_URL = 'https://api-safe.bako.global'; +export const HOST_URL = 'https://api.bako.global'; +export const SOCKET_URL = 'https://api.bako.global'; // Window object export const HAS_WINDOW = typeof window !== 'undefined'; From 147443e1d1f7a1d4538cb7ec4566bbc771cb62c1 Mon Sep 17 00:00:00 2001 From: guimroque Date: Fri, 28 Jun 2024 17:42:36 -0300 Subject: [PATCH 67/85] chore: changeset --- .changeset/olive-islands-cough.md | 5 +++++ .changeset/soft-poets-invent.md | 5 +++++ 2 files changed, 10 insertions(+) create mode 100644 .changeset/olive-islands-cough.md create mode 100644 .changeset/soft-poets-invent.md diff --git a/.changeset/olive-islands-cough.md b/.changeset/olive-islands-cough.md new file mode 100644 index 00000000..a5926e19 --- /dev/null +++ b/.changeset/olive-islands-cough.md @@ -0,0 +1,5 @@ +--- +"@fuel-connectors/bako-safe": minor +--- + +fix positioning/size of bako popup diff --git a/.changeset/soft-poets-invent.md b/.changeset/soft-poets-invent.md new file mode 100644 index 00000000..3dbd9244 --- /dev/null +++ b/.changeset/soft-poets-invent.md @@ -0,0 +1,5 @@ +--- +"@fuel-connectors/bako-safe": minor +--- + +add bako safe connector to the default connectors From 6b508c0390efaa2da5c20704e02f0af5b34d8c73 Mon Sep 17 00:00:00 2001 From: guimroque Date: Fri, 28 Jun 2024 17:48:09 -0300 Subject: [PATCH 68/85] chore: changeset --- .changeset/forty-timers-heal.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .changeset/forty-timers-heal.md diff --git a/.changeset/forty-timers-heal.md b/.changeset/forty-timers-heal.md deleted file mode 100644 index 22a716aa..00000000 --- a/.changeset/forty-timers-heal.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@fuel-connectors/bako-safe": major ---- - -Add bako-safe connector \ No newline at end of file From e99352080e0a1d725721765a14d79c8dd878fea6 Mon Sep 17 00:00:00 2001 From: guimroque Date: Fri, 28 Jun 2024 17:50:08 -0300 Subject: [PATCH 69/85] chore: changeset --- .changeset/{soft-poets-invent.md => blue-phones-obey.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename .changeset/{soft-poets-invent.md => blue-phones-obey.md} (62%) diff --git a/.changeset/soft-poets-invent.md b/.changeset/blue-phones-obey.md similarity index 62% rename from .changeset/soft-poets-invent.md rename to .changeset/blue-phones-obey.md index 3dbd9244..e6da818b 100644 --- a/.changeset/soft-poets-invent.md +++ b/.changeset/blue-phones-obey.md @@ -1,5 +1,5 @@ --- -"@fuel-connectors/bako-safe": minor +"@fuels/connectors": minor --- add bako safe connector to the default connectors From a06a85347465d6f1730110871c7d1fbda298179f Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 9 Jul 2024 16:20:00 -0300 Subject: [PATCH 70/85] chore: bakosafe icon --- .changeset/itchy-news-serve.md | 5 +++++ packages/bako-safe/src/constants.ts | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 .changeset/itchy-news-serve.md diff --git a/.changeset/itchy-news-serve.md b/.changeset/itchy-news-serve.md new file mode 100644 index 00000000..f3ea12b0 --- /dev/null +++ b/.changeset/itchy-news-serve.md @@ -0,0 +1,5 @@ +--- +"@fuel-connectors/bako-safe": minor +--- + +use base64 url to icon diff --git a/packages/bako-safe/src/constants.ts b/packages/bako-safe/src/constants.ts index 191fcddf..4f0348ab 100644 --- a/packages/bako-safe/src/constants.ts +++ b/packages/bako-safe/src/constants.ts @@ -4,9 +4,9 @@ export const APP_NAME = 'Bako Safe'; export const APP_DESCRIPTION = 'Bako Safe is a connector to safe.bako.global, a non-custodial vault for your crypto assets.'; export const APP_IMAGE_DARK = - 'https://safe.bako.global/BAKO_CONNECTOR_ICON.svg'; + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCA1MCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIiByeD0iOCIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzEzMjQ5XzE2MjI4MCkiLz4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEzMjQ5XzE2MjI4MCkiPgo8cGF0aCBkPSJNMTMgMjUuOTE2N0wzNyAzNy44NjcxTDI1LjAwMjQgMTguOTg5M0wxMyAyNS45MTY3WiIgZmlsbD0iI0Y1RjVGNSIvPgo8cGF0aCBkPSJNMzMuODg2NCAyMi4yMTgyTDI0Ljk5NzYgMTcuMDg2NVY1LjEzNTc0TDEzIDEyLjA2MjhWMjUuOTE2TDI0Ljk5NzYgMTguOTg4OVYzMC45Mzk2TDEzIDM3Ljg2NjhMMjQuOTk3NiA0NC43OTM4TDM2Ljk5NTIgMzcuODY2OFYyNy42MDMzQzM2Ljk5NTIgMjUuMzgxNiAzNS44MDk4IDIzLjMyOTEgMzMuODg2NCAyMi4yMTgyWiIgZmlsbD0iIzFFMUYyMiIvPgo8L2c+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMTMyNDlfMTYyMjgwIiB4MT0iMCIgeTE9IjAiIHgyPSI1Mi4zMjg1IiB5Mj0iNDcuNDMxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiNGRkMwMTAiLz4KPHN0b3Agb2Zmc2V0PSIwLjQ4IiBzdG9wLWNvbG9yPSIjRUJBMzEyIi8+CjxzdG9wIG9mZnNldD0iMC43MSIgc3RvcC1jb2xvcj0iI0QzODAxNSIvPgo8c3RvcCBvZmZzZXQ9IjAuOTkiIHN0b3AtY29sb3I9IiNCMjRGMTgiLz4KPC9saW5lYXJHcmFkaWVudD4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMzI0OV8xNjIyODAiPgo8cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iNDAiIGZpbGw9IndoaXRlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMyA1KSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo='; export const APP_IMAGE_LIGHT = - 'https://safe.bako.global/BAKO_CONNECTOR_ICON.svg'; + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCA1MCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIiByeD0iOCIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzEzMjQ5XzE2MjI4MCkiLz4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEzMjQ5XzE2MjI4MCkiPgo8cGF0aCBkPSJNMTMgMjUuOTE2N0wzNyAzNy44NjcxTDI1LjAwMjQgMTguOTg5M0wxMyAyNS45MTY3WiIgZmlsbD0iI0Y1RjVGNSIvPgo8cGF0aCBkPSJNMzMuODg2NCAyMi4yMTgyTDI0Ljk5NzYgMTcuMDg2NVY1LjEzNTc0TDEzIDEyLjA2MjhWMjUuOTE2TDI0Ljk5NzYgMTguOTg4OVYzMC45Mzk2TDEzIDM3Ljg2NjhMMjQuOTk3NiA0NC43OTM4TDM2Ljk5NTIgMzcuODY2OFYyNy42MDMzQzM2Ljk5NTIgMjUuMzgxNiAzNS44MDk4IDIzLjMyOTEgMzMuODg2NCAyMi4yMTgyWiIgZmlsbD0iIzFFMUYyMiIvPgo8L2c+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMTMyNDlfMTYyMjgwIiB4MT0iMCIgeTE9IjAiIHgyPSI1Mi4zMjg1IiB5Mj0iNDcuNDMxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiNGRkMwMTAiLz4KPHN0b3Agb2Zmc2V0PSIwLjQ4IiBzdG9wLWNvbG9yPSIjRUJBMzEyIi8+CjxzdG9wIG9mZnNldD0iMC43MSIgc3RvcC1jb2xvcj0iI0QzODAxNSIvPgo8c3RvcCBvZmZzZXQ9IjAuOTkiIHN0b3AtY29sb3I9IiNCMjRGMTgiLz4KPC9saW5lYXJHcmFkaWVudD4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMzI0OV8xNjIyODAiPgo8cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iNDAiIGZpbGw9IndoaXRlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMyA1KSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo='; export const APP_URL = 'https://safe.bako.global'; export const HOST_URL = 'https://api.bako.global'; From 1fc4d14befa963355ab68f14e628070ae71f55d0 Mon Sep 17 00:00:00 2001 From: guimroque Date: Tue, 9 Jul 2024 16:38:29 -0300 Subject: [PATCH 71/85] fix: reset changetset --- .changeset/blue-phones-obey.md | 5 ----- .changeset/olive-islands-cough.md | 5 ----- 2 files changed, 10 deletions(-) delete mode 100644 .changeset/blue-phones-obey.md delete mode 100644 .changeset/olive-islands-cough.md diff --git a/.changeset/blue-phones-obey.md b/.changeset/blue-phones-obey.md deleted file mode 100644 index e6da818b..00000000 --- a/.changeset/blue-phones-obey.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@fuels/connectors": minor ---- - -add bako safe connector to the default connectors diff --git a/.changeset/olive-islands-cough.md b/.changeset/olive-islands-cough.md deleted file mode 100644 index a5926e19..00000000 --- a/.changeset/olive-islands-cough.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@fuel-connectors/bako-safe": minor ---- - -fix positioning/size of bako popup From d21bc3dbdf222a85f9e7cd39470b2fe6de82d1ae Mon Sep 17 00:00:00 2001 From: guimroque Date: Sun, 13 Oct 2024 22:02:02 -0300 Subject: [PATCH 72/85] feat: sign message --- .changeset/khaki-crabs-hear.md | 5 +++ packages/bako-safe/src/BakoSafeConnector.ts | 35 +++++++++++++++++++-- packages/bako-safe/src/constants.ts | 3 ++ packages/bako-safe/src/types.ts | 3 ++ 4 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 .changeset/khaki-crabs-hear.md diff --git a/.changeset/khaki-crabs-hear.md b/.changeset/khaki-crabs-hear.md new file mode 100644 index 00000000..f043328c --- /dev/null +++ b/.changeset/khaki-crabs-hear.md @@ -0,0 +1,5 @@ +--- +"@fuel-connectors/bako-safe": major +--- + +feat: bako sign message diff --git a/packages/bako-safe/src/BakoSafeConnector.ts b/packages/bako-safe/src/BakoSafeConnector.ts index 28a189e0..95c5eed9 100644 --- a/packages/bako-safe/src/BakoSafeConnector.ts +++ b/packages/bako-safe/src/BakoSafeConnector.ts @@ -23,6 +23,7 @@ import { APP_VERSION, HAS_WINDOW, HOST_URL, + IS_SAFARI, SESSION_ID, WINDOW, } from './constants'; @@ -47,7 +48,7 @@ export class BakoSafeConnector extends FuelConnector { description: APP_DESCRIPTION, }, }; - installed = true; + installed = !IS_SAFARI; connected = false; external = false; @@ -231,7 +232,7 @@ export class BakoSafeConnector extends FuelConnector { // @ts-ignore BakoSafeConnectorEvents.TX_CONFIRMED, ({ data }: { data: IResponseTxCofirmed }) => { - this.dAppWindow?.close(); + // this.dAppWindow?.close(); -> will closed on bako ui, after tx redirect resolve(`0x${data.id}`); }, ); @@ -239,6 +240,9 @@ export class BakoSafeConnector extends FuelConnector { } async ping() { + if (IS_SAFARI) { + return false; + } await this.setup(); return this.setupReady ?? false; } @@ -307,7 +311,32 @@ export class BakoSafeConnector extends FuelConnector { } async signMessage(_address: string, _message: string): Promise { - throw new Error('Method not implemented.'); + return new Promise((resolve, reject) => { + // window controll + this.dAppWindow?.open(`dapp/sign/${_message}`, reject); + this.checkWindow(); + + //events controll + this.on( + //@ts-ignore + BakoSafeConnectorEvents.CLIENT_DISCONNECTED, + () => { + this.dAppWindow?.close(); + reject(); + }, + ); + + this.on( + //@ts-ignore + BakoSafeConnectorEvents.SIGN_CONFIRMED, + (data: { data: { signedMessage: string }; from: string }) => { + const signedMessage = data.data.signedMessage; + + this.dAppWindow?.close(); + resolve(signedMessage); + }, + ); + }); } async addAssets(_assets: Asset[]): Promise { diff --git a/packages/bako-safe/src/constants.ts b/packages/bako-safe/src/constants.ts index 4f0348ab..de18da30 100644 --- a/packages/bako-safe/src/constants.ts +++ b/packages/bako-safe/src/constants.ts @@ -19,3 +19,6 @@ export const WINDOW: any = HAS_WINDOW ? window : {}; //storage export const SESSION_ID = 'sessionId'; +export const IS_SAFARI = /^((?!chrome|android).)*safari/i.test( + WINDOW.navigator?.userAgent, +); diff --git a/packages/bako-safe/src/types.ts b/packages/bako-safe/src/types.ts index 25c2a05e..b8232628 100644 --- a/packages/bako-safe/src/types.ts +++ b/packages/bako-safe/src/types.ts @@ -17,6 +17,9 @@ export enum BakoSafeConnectorEvents { //auth AUTH_CONFIRMED = '[AUTH_CONFIRMED]', + + //sign + SIGN_CONFIRMED = '[SIGN_CONFIRMED]', } export enum BakoSafeUsernames { From b43d17ec09c0f1a10e3ddc1e15825690c4599dd5 Mon Sep 17 00:00:00 2001 From: guimroque Date: Sun, 13 Oct 2024 22:16:26 -0300 Subject: [PATCH 73/85] fix: validation --- .github/workflows/pr-release.yaml | 5 +++++ packages/bako-safe/src/BakoSafeConnector.ts | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr-release.yaml b/.github/workflows/pr-release.yaml index f0fd52fc..c7252bf7 100644 --- a/.github/workflows/pr-release.yaml +++ b/.github/workflows/pr-release.yaml @@ -7,8 +7,13 @@ jobs: release-pr: name: 'Release PR to npm' runs-on: buildjet-4vcpu-ubuntu-2204 +<<<<<<< HEAD # Comment if:false to enable release PR to npm # if: false +======= + # comment out if:false to enable release PR to npm + if: false +>>>>>>> 12cefa6 (chore: add rodrigobranas to codeowners (#151)) permissions: write-all steps: - uses: actions/checkout@v3 diff --git a/packages/bako-safe/src/BakoSafeConnector.ts b/packages/bako-safe/src/BakoSafeConnector.ts index 95c5eed9..db900a6a 100644 --- a/packages/bako-safe/src/BakoSafeConnector.ts +++ b/packages/bako-safe/src/BakoSafeConnector.ts @@ -330,7 +330,7 @@ export class BakoSafeConnector extends FuelConnector { //@ts-ignore BakoSafeConnectorEvents.SIGN_CONFIRMED, (data: { data: { signedMessage: string }; from: string }) => { - const signedMessage = data.data.signedMessage; + const signedMessage = data?.data?.signedMessage || ''; this.dAppWindow?.close(); resolve(signedMessage); From d148acac40530a8cdd73df25d116e6882883216f Mon Sep 17 00:00:00 2001 From: guimroque Date: Sun, 13 Oct 2024 22:17:36 -0300 Subject: [PATCH 74/85] chore: fix conflict --- .github/workflows/pr-release.yaml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/pr-release.yaml b/.github/workflows/pr-release.yaml index c7252bf7..60a1a77f 100644 --- a/.github/workflows/pr-release.yaml +++ b/.github/workflows/pr-release.yaml @@ -7,13 +7,8 @@ jobs: release-pr: name: 'Release PR to npm' runs-on: buildjet-4vcpu-ubuntu-2204 -<<<<<<< HEAD - # Comment if:false to enable release PR to npm - # if: false -======= # comment out if:false to enable release PR to npm if: false ->>>>>>> 12cefa6 (chore: add rodrigobranas to codeowners (#151)) permissions: write-all steps: - uses: actions/checkout@v3 From 60f9517be305dfae84afb2564e836aac57c2f5ef Mon Sep 17 00:00:00 2001 From: Guilherme Roque <62621598+guimroque@users.noreply.github.com> Date: Sun, 13 Oct 2024 22:19:39 -0300 Subject: [PATCH 75/85] Update packages/bako-safe/src/BakoSafeConnector.ts Co-authored-by: Brandon Kite --- packages/bako-safe/src/BakoSafeConnector.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.ts b/packages/bako-safe/src/BakoSafeConnector.ts index db900a6a..e2cb0dc5 100644 --- a/packages/bako-safe/src/BakoSafeConnector.ts +++ b/packages/bako-safe/src/BakoSafeConnector.ts @@ -312,7 +312,7 @@ export class BakoSafeConnector extends FuelConnector { async signMessage(_address: string, _message: string): Promise { return new Promise((resolve, reject) => { - // window controll + // window control this.dAppWindow?.open(`dapp/sign/${_message}`, reject); this.checkWindow(); From 59aace87f2a3814c84fb57a6d4ac2b7cd11e965c Mon Sep 17 00:00:00 2001 From: Guilherme Roque <62621598+guimroque@users.noreply.github.com> Date: Sun, 13 Oct 2024 22:19:53 -0300 Subject: [PATCH 76/85] Update packages/bako-safe/src/BakoSafeConnector.ts Co-authored-by: Brandon Kite --- packages/bako-safe/src/BakoSafeConnector.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.ts b/packages/bako-safe/src/BakoSafeConnector.ts index e2cb0dc5..1efcbadd 100644 --- a/packages/bako-safe/src/BakoSafeConnector.ts +++ b/packages/bako-safe/src/BakoSafeConnector.ts @@ -316,7 +316,7 @@ export class BakoSafeConnector extends FuelConnector { this.dAppWindow?.open(`dapp/sign/${_message}`, reject); this.checkWindow(); - //events controll + // events control this.on( //@ts-ignore BakoSafeConnectorEvents.CLIENT_DISCONNECTED, From aec1e23acbeb9af812a475e5d4e04b427a01be72 Mon Sep 17 00:00:00 2001 From: guimroque Date: Sun, 13 Oct 2024 22:21:17 -0300 Subject: [PATCH 77/85] chore: remove unnecessary comment --- packages/bako-safe/src/BakoSafeConnector.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.ts b/packages/bako-safe/src/BakoSafeConnector.ts index db900a6a..e92f2c7e 100644 --- a/packages/bako-safe/src/BakoSafeConnector.ts +++ b/packages/bako-safe/src/BakoSafeConnector.ts @@ -232,7 +232,6 @@ export class BakoSafeConnector extends FuelConnector { // @ts-ignore BakoSafeConnectorEvents.TX_CONFIRMED, ({ data }: { data: IResponseTxCofirmed }) => { - // this.dAppWindow?.close(); -> will closed on bako ui, after tx redirect resolve(`0x${data.id}`); }, ); From aa6e0062f31398dc6c3a49d5d7c10c7f4a13b0c1 Mon Sep 17 00:00:00 2001 From: Luiz Gomes <8636507+LuizAsFight@users.noreply.github.com> Date: Mon, 14 Oct 2024 00:47:15 -0300 Subject: [PATCH 78/85] Update itchy-news-serve.md --- .changeset/itchy-news-serve.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/itchy-news-serve.md b/.changeset/itchy-news-serve.md index f3ea12b0..85152a4d 100644 --- a/.changeset/itchy-news-serve.md +++ b/.changeset/itchy-news-serve.md @@ -1,5 +1,5 @@ --- -"@fuel-connectors/bako-safe": minor +"@fuel-connectors/bako-safe": patch --- use base64 url to icon From 7a014cc533686e097016cb385454d21d6b328cfe Mon Sep 17 00:00:00 2001 From: Luiz Gomes <8636507+LuizAsFight@users.noreply.github.com> Date: Mon, 14 Oct 2024 00:47:28 -0300 Subject: [PATCH 79/85] Delete .changeset/khaki-crabs-hear.md --- .changeset/khaki-crabs-hear.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .changeset/khaki-crabs-hear.md diff --git a/.changeset/khaki-crabs-hear.md b/.changeset/khaki-crabs-hear.md deleted file mode 100644 index f043328c..00000000 --- a/.changeset/khaki-crabs-hear.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@fuel-connectors/bako-safe": major ---- - -feat: bako sign message From 10f57eccfbd21378dd2893ff2f81aecc990f6abb Mon Sep 17 00:00:00 2001 From: Luiz Gomes <8636507+LuizAsFight@users.noreply.github.com> Date: Mon, 14 Oct 2024 00:48:26 -0300 Subject: [PATCH 80/85] Update pr-release.yaml --- .github/workflows/pr-release.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-release.yaml b/.github/workflows/pr-release.yaml index 60a1a77f..e317d42f 100644 --- a/.github/workflows/pr-release.yaml +++ b/.github/workflows/pr-release.yaml @@ -8,7 +8,7 @@ jobs: name: 'Release PR to npm' runs-on: buildjet-4vcpu-ubuntu-2204 # comment out if:false to enable release PR to npm - if: false + # if: false permissions: write-all steps: - uses: actions/checkout@v3 @@ -47,4 +47,4 @@ jobs: message: | This PR is published in NPM with version **${{ steps.release.outputs.published_version }}** env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 321ab5da8a4428b4ba251d11432446245ef65cf7 Mon Sep 17 00:00:00 2001 From: guimroque Date: Mon, 14 Oct 2024 06:08:43 -0300 Subject: [PATCH 81/85] chore: sign page url --- packages/bako-safe/src/BakoSafeConnector.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.ts b/packages/bako-safe/src/BakoSafeConnector.ts index 9a0ad79b..0b63223d 100644 --- a/packages/bako-safe/src/BakoSafeConnector.ts +++ b/packages/bako-safe/src/BakoSafeConnector.ts @@ -312,7 +312,7 @@ export class BakoSafeConnector extends FuelConnector { async signMessage(_address: string, _message: string): Promise { return new Promise((resolve, reject) => { // window control - this.dAppWindow?.open(`dapp/sign/${_message}`, reject); + this.dAppWindow?.open(`/dapp/sign/${_message}`, reject); this.checkWindow(); // events control From 74312c8eee87652b06d1fc3e5aa13260e2e10c2b Mon Sep 17 00:00:00 2001 From: guimroque Date: Mon, 14 Oct 2024 06:14:34 -0300 Subject: [PATCH 82/85] chore: add message to reject sign --- packages/bako-safe/src/BakoSafeConnector.ts | 2 +- packages/docs/src/guide/react-hooks/useIsSupportedNetwork.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.ts b/packages/bako-safe/src/BakoSafeConnector.ts index 0b63223d..d8900325 100644 --- a/packages/bako-safe/src/BakoSafeConnector.ts +++ b/packages/bako-safe/src/BakoSafeConnector.ts @@ -321,7 +321,7 @@ export class BakoSafeConnector extends FuelConnector { BakoSafeConnectorEvents.CLIENT_DISCONNECTED, () => { this.dAppWindow?.close(); - reject(); + reject('User rejected the request'); }, ); diff --git a/packages/docs/src/guide/react-hooks/useIsSupportedNetwork.md b/packages/docs/src/guide/react-hooks/useIsSupportedNetwork.md index 82e2b17b..85c9312d 100644 --- a/packages/docs/src/guide/react-hooks/useIsSupportedNetwork.md +++ b/packages/docs/src/guide/react-hooks/useIsSupportedNetwork.md @@ -17,6 +17,6 @@ console.log(isSupportedNetwork); ``` #### Defined in -[packages/react/src/hooks/useIsSupportedNetwork.tsx:29](https://github.com/fuellabs/fuel-connectors/blob/main/packages/react/src/hooks/useIsSupportedNetwork.tsx#L29) +[packages/react/src/hooks/useIsSupportedNetwork.tsx:30](https://github.com/fuellabs/fuel-connectors/blob/main/packages/react/src/hooks/useIsSupportedNetwork.tsx#L30) ___ From 6303d7260a75ded8324ec222e6f7f95e251bb235 Mon Sep 17 00:00:00 2001 From: guimroque Date: Mon, 14 Oct 2024 17:56:18 -0300 Subject: [PATCH 83/85] chore: reject with error --- packages/bako-safe/src/BakoSafeConnector.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/bako-safe/src/BakoSafeConnector.ts b/packages/bako-safe/src/BakoSafeConnector.ts index d8900325..fb633fde 100644 --- a/packages/bako-safe/src/BakoSafeConnector.ts +++ b/packages/bako-safe/src/BakoSafeConnector.ts @@ -166,7 +166,7 @@ export class BakoSafeConnector extends FuelConnector { // @ts-ignore this.on(BakoSafeConnectorEvents.CLIENT_DISCONNECTED, () => { this.dAppWindow?.close(); - reject(false); + reject(new Error('User rejected the request')); }); this.on( @@ -210,7 +210,7 @@ export class BakoSafeConnector extends FuelConnector { BakoSafeConnectorEvents.CLIENT_DISCONNECTED, () => { this.dAppWindow?.close(); - reject(); + reject(new Error('User rejected the request')); }, ); @@ -321,7 +321,7 @@ export class BakoSafeConnector extends FuelConnector { BakoSafeConnectorEvents.CLIENT_DISCONNECTED, () => { this.dAppWindow?.close(); - reject('User rejected the request'); + reject(new Error('User rejected the request')); }, ); From 2838b118a56fe6eaf21e22eccf8cbef2a168139a Mon Sep 17 00:00:00 2001 From: Guilherme Roque <62621598+guimroque@users.noreply.github.com> Date: Mon, 14 Oct 2024 18:20:43 -0300 Subject: [PATCH 84/85] Update .changeset/itchy-news-serve.md Co-authored-by: Chad Nehemiah --- .changeset/itchy-news-serve.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/itchy-news-serve.md b/.changeset/itchy-news-serve.md index 85152a4d..5efff39f 100644 --- a/.changeset/itchy-news-serve.md +++ b/.changeset/itchy-news-serve.md @@ -2,4 +2,4 @@ "@fuel-connectors/bako-safe": patch --- -use base64 url to icon +feat: bako sign message From 48d29e22a9915c6ea505ebc7c40c86c8bfdd519b Mon Sep 17 00:00:00 2001 From: guimroque Date: Mon, 14 Oct 2024 18:26:05 -0300 Subject: [PATCH 85/85] fix: sign message test --- packages/bako-safe/tests/BakoSafeConnector.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bako-safe/tests/BakoSafeConnector.test.ts b/packages/bako-safe/tests/BakoSafeConnector.test.ts index 03ac0078..14da36b1 100644 --- a/packages/bako-safe/tests/BakoSafeConnector.test.ts +++ b/packages/bako-safe/tests/BakoSafeConnector.test.ts @@ -118,7 +118,7 @@ describe('signMessage()', () => { expect( connector.signMessage(Address.fromRandom().toString(), 'message'), - ).rejects.toThrowError('Method not implemented.'); + ).rejects.toThrowError('User rejected the request'); }); });