diff --git a/package.json b/package.json index 1ff708107..db74933ec 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ "lint": "nx workspace-lint && nx run-many --target=lint --all --parallel", "lint:fix": "nx run-many --target=lint --all --fix", "serve:react": "nx serve react --host=0.0.0.0", + "build:react": "nx build react --host=0.0.0.0", "serve:angular": "nx serve angular", "prepack": "yarn build:core && yarn build:all", "test": "nx run-many --target=test --all", @@ -92,6 +93,7 @@ "@meteorwallet/sdk": "^1.0.9", "@mintbase-js/wallet": "0.6.0-beta.3", "@near-snap/sdk": "^0.6.0", + "@near-wallet-selector/modal-ui": "^8.9.8", "@peersyst/near-mobile-signer": "^1.0.10", "@ramper/near": "^0.0.30", "@walletconnect/modal": "^2.6.2", diff --git a/packages/coin98-wallet/src/lib/coin98-wallet.spec.ts b/packages/coin98-wallet/src/lib/coin98-wallet.spec.ts index c60fcf635..90507b0c3 100644 --- a/packages/coin98-wallet/src/lib/coin98-wallet.spec.ts +++ b/packages/coin98-wallet/src/lib/coin98-wallet.spec.ts @@ -33,6 +33,16 @@ const mockCoin98WalletOnWindow = () => { return ""; }), disconnect: jest.fn(), + signMessage: jest.fn().mockReturnValue({ + signature: Buffer.from([ + 86, 38, 222, 143, 115, 251, 107, 14, 115, 59, 92, 98, 66, 174, 173, + 124, 209, 189, 191, 180, 89, 25, 125, 254, 97, 240, 178, 98, 65, 70, + 238, 108, 105, 122, 165, 249, 193, 70, 118, 194, 126, 218, 117, 100, + 250, 124, 202, 161, 173, 12, 232, 146, 105, 194, 138, 35, 207, 53, + 84, 218, 45, 220, 10, 4, + ]), + publicKey, + }), }, }; diff --git a/packages/coin98-wallet/src/lib/coin98-wallet.ts b/packages/coin98-wallet/src/lib/coin98-wallet.ts index 5ce20c3a5..a2479d230 100644 --- a/packages/coin98-wallet/src/lib/coin98-wallet.ts +++ b/packages/coin98-wallet/src/lib/coin98-wallet.ts @@ -6,6 +6,8 @@ import type { Account, Optional, Transaction, + SignMessageParams, + SignedMessage, } from "@near-wallet-selector/core"; import { getActiveAccount } from "@near-wallet-selector/core"; import type { InjectedCoin98 } from "./injected-coin98-wallet"; @@ -105,6 +107,33 @@ const Coin98Wallet: WalletBehaviourFactory = async ({ return getAccounts(); }, + async signMessage({ + message, + nonce, + recipient, + state + }: SignMessageParams): Promise{ + if (!_state.wallet) { + throw new Error("Wallet is not installed"); + } + + logger.log("Coin98:signMessage", { + message, + nonce, + recipient, + state, + }); + + const signature = await _state.wallet.near.signMessage({ + message, + nonce, + recipient, + state, + }); + + return signature; + }, + async signOut() { // Ignore if unsuccessful (returns false). await _state.wallet.near.disconnect(); diff --git a/packages/coin98-wallet/src/lib/injected-coin98-wallet.ts b/packages/coin98-wallet/src/lib/injected-coin98-wallet.ts index 72eff4f2e..c500ba26a 100644 --- a/packages/coin98-wallet/src/lib/injected-coin98-wallet.ts +++ b/packages/coin98-wallet/src/lib/injected-coin98-wallet.ts @@ -1,3 +1,4 @@ +import type { SignedMessage, SignMessageParams } from "@near-wallet-selector/core"; import type { Signer } from "near-api-js/lib/signer"; interface IConnectParams { @@ -10,6 +11,7 @@ interface ICoin98Near { signer: Signer; connect: (params: IConnectParams) => Promise; disconnect: () => Promise; + signMessage: (params: SignMessageParams) => Promise; } export interface InjectedCoin98 {