@sign-global/tokentable-wallets 1.3.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @sign-global/tokentable-wallets
2
2
 
3
+ ## 1.5.0
4
+
5
+ ### Minor Changes
6
+
7
+ - feat: add Sui wallet support
8
+
9
+ ## 1.4.0
10
+
11
+ ### Minor Changes
12
+
13
+ - feat: add Cosmos wallet support
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies
18
+ - @sign-global/tokentable-core@1.6.0
19
+
3
20
  ## 1.3.0
4
21
 
5
22
  ### Minor Changes
package/dist/index.d.mts CHANGED
@@ -7,6 +7,8 @@ import { useWalletModal } from '@solana/wallet-adapter-react-ui';
7
7
  import { useWallet } from '@solana/wallet-adapter-react';
8
8
  import { Adapter } from '@solana/wallet-adapter-base';
9
9
  import { Cluster } from '@solana/web3.js';
10
+ import { useChain } from '@cosmos-kit/react';
11
+ import { useCurrentAccount, useCurrentWallet } from '@mysten/dapp-kit';
10
12
  import { ChainType } from '@sign-global/tokentable-core';
11
13
 
12
14
  type ISignResult = {
@@ -114,9 +116,48 @@ declare const SolanaProvider: ({ children, cluster, wallets }: {
114
116
  wallets?: Adapter[];
115
117
  }) => react_jsx_runtime.JSX.Element;
116
118
 
119
+ interface CosmosStoreType {
120
+ chainContext: ReturnType<typeof useChain> | null;
121
+ counter: number;
122
+ }
123
+ declare class CosmosWallet extends WalletBase<CosmosStoreType> {
124
+ getStore(): CosmosStoreType;
125
+ get isConnected(): boolean;
126
+ connect(): void;
127
+ disconnect(): void;
128
+ sign(message: string): Promise<ISignResult>;
129
+ signin(statement: string, prepare?: boolean): Promise<ISignResult>;
130
+ }
131
+ declare const CosmosProvider: ({ children, chainName }: {
132
+ children: ReactNode;
133
+ chainName?: string;
134
+ }) => react_jsx_runtime.JSX.Element;
135
+
136
+ interface SuiStoreType {
137
+ connectModal: {
138
+ open: boolean;
139
+ setOpen: (open: boolean) => void;
140
+ } | null;
141
+ account: ReturnType<typeof useCurrentAccount> | null;
142
+ wallet: ReturnType<typeof useCurrentWallet> | null;
143
+ counter: number;
144
+ }
145
+ declare class SuiWallet extends WalletBase<SuiStoreType> {
146
+ getStore(): SuiStoreType;
147
+ get isConnected(): boolean;
148
+ connect(): void;
149
+ disconnect(): void;
150
+ sign(message: string): Promise<ISignResult>;
151
+ signin(statement: string, prepare?: boolean): Promise<ISignResult>;
152
+ }
153
+ declare const SuiProvider: ({ children, network }: {
154
+ children: ReactNode;
155
+ network: "testnet" | "mainnet";
156
+ }) => react_jsx_runtime.JSX.Element;
157
+
117
158
  declare abstract class WalletFactory {
118
159
  private static instances;
119
- static getWallet(type: ChainType, userAddress?: string): EvmWallet | TonWallet | SolWallet;
160
+ static getWallet(type: ChainType, userAddress?: string): EvmWallet | TonWallet | SolWallet | CosmosWallet | SuiWallet;
120
161
  }
121
162
 
122
- export { EvmProvider, EvmWallet, SolWallet, SolanaProvider, TonProvider, TonWallet, WalletFactory };
163
+ export { CosmosProvider, CosmosWallet, EvmProvider, EvmWallet, SolWallet, SolanaProvider, SuiProvider, SuiWallet, TonProvider, TonWallet, WalletFactory };
package/dist/index.d.ts CHANGED
@@ -7,6 +7,8 @@ import { useWalletModal } from '@solana/wallet-adapter-react-ui';
7
7
  import { useWallet } from '@solana/wallet-adapter-react';
8
8
  import { Adapter } from '@solana/wallet-adapter-base';
9
9
  import { Cluster } from '@solana/web3.js';
10
+ import { useChain } from '@cosmos-kit/react';
11
+ import { useCurrentAccount, useCurrentWallet } from '@mysten/dapp-kit';
10
12
  import { ChainType } from '@sign-global/tokentable-core';
11
13
 
12
14
  type ISignResult = {
@@ -114,9 +116,48 @@ declare const SolanaProvider: ({ children, cluster, wallets }: {
114
116
  wallets?: Adapter[];
115
117
  }) => react_jsx_runtime.JSX.Element;
116
118
 
119
+ interface CosmosStoreType {
120
+ chainContext: ReturnType<typeof useChain> | null;
121
+ counter: number;
122
+ }
123
+ declare class CosmosWallet extends WalletBase<CosmosStoreType> {
124
+ getStore(): CosmosStoreType;
125
+ get isConnected(): boolean;
126
+ connect(): void;
127
+ disconnect(): void;
128
+ sign(message: string): Promise<ISignResult>;
129
+ signin(statement: string, prepare?: boolean): Promise<ISignResult>;
130
+ }
131
+ declare const CosmosProvider: ({ children, chainName }: {
132
+ children: ReactNode;
133
+ chainName?: string;
134
+ }) => react_jsx_runtime.JSX.Element;
135
+
136
+ interface SuiStoreType {
137
+ connectModal: {
138
+ open: boolean;
139
+ setOpen: (open: boolean) => void;
140
+ } | null;
141
+ account: ReturnType<typeof useCurrentAccount> | null;
142
+ wallet: ReturnType<typeof useCurrentWallet> | null;
143
+ counter: number;
144
+ }
145
+ declare class SuiWallet extends WalletBase<SuiStoreType> {
146
+ getStore(): SuiStoreType;
147
+ get isConnected(): boolean;
148
+ connect(): void;
149
+ disconnect(): void;
150
+ sign(message: string): Promise<ISignResult>;
151
+ signin(statement: string, prepare?: boolean): Promise<ISignResult>;
152
+ }
153
+ declare const SuiProvider: ({ children, network }: {
154
+ children: ReactNode;
155
+ network: "testnet" | "mainnet";
156
+ }) => react_jsx_runtime.JSX.Element;
157
+
117
158
  declare abstract class WalletFactory {
118
159
  private static instances;
119
- static getWallet(type: ChainType, userAddress?: string): EvmWallet | TonWallet | SolWallet;
160
+ static getWallet(type: ChainType, userAddress?: string): EvmWallet | TonWallet | SolWallet | CosmosWallet | SuiWallet;
120
161
  }
121
162
 
122
- export { EvmProvider, EvmWallet, SolWallet, SolanaProvider, TonProvider, TonWallet, WalletFactory };
163
+ export { CosmosProvider, CosmosWallet, EvmProvider, EvmWallet, SolWallet, SolanaProvider, SuiProvider, SuiWallet, TonProvider, TonWallet, WalletFactory };
package/dist/index.js CHANGED
@@ -30,10 +30,14 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  // src/index.ts
31
31
  var index_exports = {};
32
32
  __export(index_exports, {
33
+ CosmosProvider: () => CosmosProvider,
34
+ CosmosWallet: () => CosmosWallet,
33
35
  EvmProvider: () => EvmProvider,
34
36
  EvmWallet: () => EvmWallet,
35
37
  SolWallet: () => SolWallet,
36
38
  SolanaProvider: () => SolanaProvider,
39
+ SuiProvider: () => SuiProvider,
40
+ SuiWallet: () => SuiWallet,
37
41
  TonProvider: () => TonProvider,
38
42
  TonWallet: () => TonWallet,
39
43
  WalletFactory: () => WalletFactory
@@ -314,8 +318,8 @@ var TonWallet = class extends WalletBase {
314
318
  }
315
319
  tonStore.counter++;
316
320
  if (authType) {
317
- const wallets = await tonConnectUI.getWallets();
318
- const currentWallet = wallets.find(
321
+ const wallets2 = await tonConnectUI.getWallets();
322
+ const currentWallet = wallets2.find(
319
323
  (wallet) => [wallet.name, wallet.appName].includes(authType)
320
324
  );
321
325
  const link = tonConnectUI.connector.connect(
@@ -852,7 +856,7 @@ var SolConnector = () => {
852
856
  var SolanaProvider = ({
853
857
  children,
854
858
  cluster,
855
- wallets
859
+ wallets: wallets2
856
860
  }) => {
857
861
  const endpoint = (0, import_tokentable_core3.clusterApiUrl)(cluster ? cluster : "mainnet-beta");
858
862
  const defaultWallets = (0, import_react3.useMemo)(
@@ -868,12 +872,231 @@ var SolanaProvider = ({
868
872
  const onError = (0, import_react3.useCallback)((error) => {
869
873
  console.error(error);
870
874
  }, []);
871
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_wallet_adapter_react.ConnectionProvider, { endpoint, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_wallet_adapter_react.WalletProvider, { wallets: wallets ? wallets : defaultWallets, onError, autoConnect: true, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_wallet_adapter_react_ui.WalletModalProvider, { children: [
875
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_wallet_adapter_react.ConnectionProvider, { endpoint, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_wallet_adapter_react.WalletProvider, { wallets: wallets2 ? wallets2 : defaultWallets, onError, autoConnect: true, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_wallet_adapter_react_ui.WalletModalProvider, { children: [
872
876
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(SolConnector, {}),
873
877
  children
874
878
  ] }) }) });
875
879
  };
876
880
 
881
+ // src/providers/cosmos/index.tsx
882
+ var import_react4 = require("react");
883
+ var import_react5 = require("@cosmos-kit/react");
884
+ var import_chain_registry = require("chain-registry");
885
+ var import_keplr = require("@cosmos-kit/keplr");
886
+ var import_okxwallet_extension = require("@cosmos-kit/okxwallet-extension");
887
+ var import_compass_extension = require("@cosmos-kit/compass-extension");
888
+ var import_styles3 = require("@interchain-ui/react/styles");
889
+ var import_events4 = __toESM(require("events"));
890
+ var import_jsx_runtime4 = require("react/jsx-runtime");
891
+ var cosmosStore = {
892
+ chainContext: null,
893
+ counter: 0
894
+ };
895
+ var eventBus4 = new import_events4.default();
896
+ var COSMOS_EVENT_KEY = "cosmos_signin";
897
+ var getEventKey4 = () => {
898
+ return `${COSMOS_EVENT_KEY}_${cosmosStore.counter}`;
899
+ };
900
+ var CosmosWallet = class extends WalletBase {
901
+ getStore() {
902
+ return cosmosStore;
903
+ }
904
+ get isConnected() {
905
+ return !!cosmosStore.chainContext?.isWalletConnected;
906
+ }
907
+ connect() {
908
+ cosmosStore.chainContext?.connect();
909
+ }
910
+ disconnect() {
911
+ cosmosStore.chainContext?.disconnect();
912
+ }
913
+ async sign(message) {
914
+ try {
915
+ const provider = cosmosStore.chainContext;
916
+ if (!provider.address) {
917
+ throw new Error("Cosmos wallet not connected");
918
+ }
919
+ const result = await provider.signArbitrary?.(provider.address, message);
920
+ this.publicKey = result?.pub_key?.value;
921
+ return {
922
+ message,
923
+ signature: result?.signature
924
+ };
925
+ } catch (error) {
926
+ console.error(error);
927
+ throw error;
928
+ }
929
+ }
930
+ signin(statement, prepare = true) {
931
+ return new Promise((resolve, reject) => {
932
+ try {
933
+ const signCallback = async (data) => {
934
+ try {
935
+ this.address = data.address;
936
+ this.chainId = 1;
937
+ let fullMessage = statement;
938
+ if (prepare) {
939
+ const msg = prepareSignMessage({ statement, chainId: data.chain.chain_id, address: this.address });
940
+ fullMessage = get4361Message(msg);
941
+ }
942
+ const res = await this.sign(fullMessage);
943
+ resolve(res);
944
+ } catch (error) {
945
+ console.error("Error in signCallback:", error);
946
+ reject(error);
947
+ }
948
+ };
949
+ if (this.isConnected) {
950
+ signCallback(cosmosStore.chainContext);
951
+ return;
952
+ }
953
+ cosmosStore.counter++;
954
+ this.connect();
955
+ const eventKey = getEventKey4();
956
+ eventBus4.once(eventKey, (data) => {
957
+ console.log("listen event key success, event key = %s, data = %j", eventKey, data);
958
+ signCallback(data);
959
+ });
960
+ } catch (error) {
961
+ console.error("Error in signin:", error);
962
+ reject(error);
963
+ }
964
+ });
965
+ }
966
+ };
967
+ var CosmosConnector = ({ chainName = "cosmoshub" }) => {
968
+ const chainContext = (0, import_react5.useChain)(chainName);
969
+ (0, import_react4.useEffect)(() => {
970
+ if (chainContext.address) {
971
+ if (chainContext.isWalletConnected) {
972
+ const eventKey = getEventKey4();
973
+ eventBus4.emit(eventKey, chainContext);
974
+ }
975
+ }
976
+ }, [chainContext]);
977
+ cosmosStore.chainContext = chainContext;
978
+ return null;
979
+ };
980
+ var CosmosProvider = ({ children, chainName = "cosmoshub" }) => {
981
+ const assetList = import_chain_registry.assets.find(({ chain_name }) => chain_name === chainName);
982
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
983
+ import_react5.ChainProvider,
984
+ {
985
+ chains: import_chain_registry.chains,
986
+ assetLists: assetList ? [assetList] : void 0,
987
+ wallets: [...import_keplr.wallets, ...import_compass_extension.wallets, ...import_okxwallet_extension.wallets],
988
+ signerOptions: {},
989
+ endpointOptions: { endpoints: {} },
990
+ throwErrors: true,
991
+ children: [
992
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CosmosConnector, { chainName }),
993
+ children
994
+ ]
995
+ }
996
+ );
997
+ };
998
+
999
+ // src/providers/sui/index.tsx
1000
+ var import_dist = require("@mysten/dapp-kit/dist/index.css");
1001
+ var import_events5 = __toESM(require("events"));
1002
+ var import_react6 = require("react");
1003
+ var import_dapp_kit = require("@mysten/dapp-kit");
1004
+ var import_client = require("@mysten/sui/client");
1005
+ var import_jsx_runtime5 = require("react/jsx-runtime");
1006
+ var suiStore = {
1007
+ connectModal: null,
1008
+ account: null,
1009
+ wallet: null,
1010
+ counter: 0
1011
+ };
1012
+ var eventBus5 = new import_events5.default();
1013
+ var Sui_EVENT_KEY = "sui_signin";
1014
+ var getEventKey5 = () => {
1015
+ return `${Sui_EVENT_KEY}_${suiStore.counter}`;
1016
+ };
1017
+ var SuiWallet = class extends WalletBase {
1018
+ getStore() {
1019
+ return suiStore;
1020
+ }
1021
+ get isConnected() {
1022
+ return !!this.getStore().wallet?.isConnected;
1023
+ }
1024
+ connect() {
1025
+ suiStore.connectModal?.setOpen(true);
1026
+ }
1027
+ disconnect() {
1028
+ suiStore.wallet?.currentWallet?.features["standard:disconnect"]?.disconnect();
1029
+ }
1030
+ async sign(message) {
1031
+ const signPersonalFeature = suiStore.wallet?.currentWallet?.features["sui:signPersonalMessage"];
1032
+ const res = await signPersonalFeature?.signPersonalMessage({
1033
+ message: new Uint8Array(Buffer.from(message)),
1034
+ account: suiStore.account
1035
+ });
1036
+ return {
1037
+ message,
1038
+ signature: res.signature
1039
+ };
1040
+ }
1041
+ signin(statement, prepare = true) {
1042
+ return new Promise((resolve) => {
1043
+ const signCallback = (data) => {
1044
+ this.publicKey = Buffer.from(data.publicKey).toString("hex");
1045
+ this.address = data?.address;
1046
+ this.chainId = 1;
1047
+ let fullMessage = statement;
1048
+ if (prepare) {
1049
+ const msg = prepareSignMessage({ statement, chainId: this.chainId, address: this.address });
1050
+ fullMessage = get4361Message(msg);
1051
+ }
1052
+ const res = this.sign(JSON.stringify(fullMessage, null, " "));
1053
+ resolve(res);
1054
+ };
1055
+ if (this.isConnected && suiStore.account) {
1056
+ signCallback(suiStore.account);
1057
+ return;
1058
+ }
1059
+ suiStore.counter++;
1060
+ this.connect();
1061
+ const eventKey = getEventKey5();
1062
+ eventBus5.once(eventKey, (data) => {
1063
+ console.log("listen event key success, event key = %s, data = %j", eventKey, data);
1064
+ signCallback(data);
1065
+ });
1066
+ });
1067
+ }
1068
+ };
1069
+ var SuiConnector = () => {
1070
+ const [showModal, setShowModal] = (0, import_react6.useState)(false);
1071
+ const account = (0, import_dapp_kit.useCurrentAccount)();
1072
+ const wallet = (0, import_dapp_kit.useCurrentWallet)();
1073
+ (0, import_react6.useEffect)(() => {
1074
+ if (wallet) {
1075
+ if (wallet.isConnected && account) {
1076
+ const eventKey = getEventKey5();
1077
+ eventBus5.emit(eventKey, account);
1078
+ }
1079
+ }
1080
+ }, [wallet, account]);
1081
+ suiStore.connectModal = {
1082
+ open: showModal,
1083
+ setOpen: setShowModal
1084
+ };
1085
+ suiStore.account = account;
1086
+ suiStore.wallet = wallet;
1087
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_dapp_kit.ConnectModal, { open: showModal, onOpenChange: (open) => setShowModal(open), trigger: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", {}) });
1088
+ };
1089
+ var SuiProvider = ({ children, network }) => {
1090
+ const { networkConfig } = (0, import_dapp_kit.createNetworkConfig)({
1091
+ testnet: { url: (0, import_client.getFullnodeUrl)("testnet") },
1092
+ mainnet: { url: (0, import_client.getFullnodeUrl)("mainnet") }
1093
+ });
1094
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_dapp_kit.SuiClientProvider, { networks: networkConfig, network, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_dapp_kit.WalletProvider, { autoConnect: true, children: [
1095
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SuiConnector, {}),
1096
+ children
1097
+ ] }) });
1098
+ };
1099
+
877
1100
  // src/WalletFactory.tsx
878
1101
  var import_tokentable_core4 = require("@sign-global/tokentable-core");
879
1102
  var WalletFactory = class {
@@ -888,12 +1111,18 @@ var WalletFactory = class {
888
1111
  case import_tokentable_core4.ChainType.Ton:
889
1112
  WalletClass = TonWallet;
890
1113
  break;
1114
+ case import_tokentable_core4.ChainType.Sui:
1115
+ WalletClass = SuiWallet;
1116
+ break;
891
1117
  // case ChainType.Starknet:
892
1118
  // WalletClass = StarknetWallet;
893
1119
  // break;
894
1120
  case import_tokentable_core4.ChainType.Solana:
895
1121
  WalletClass = SolWallet;
896
1122
  break;
1123
+ case import_tokentable_core4.ChainType.Cosmos:
1124
+ WalletClass = CosmosWallet;
1125
+ break;
897
1126
  default:
898
1127
  throw new Error("Unsupported wallet type");
899
1128
  }
@@ -907,10 +1136,14 @@ var WalletFactory = class {
907
1136
  };
908
1137
  // Annotate the CommonJS export names for ESM import in node:
909
1138
  0 && (module.exports = {
1139
+ CosmosProvider,
1140
+ CosmosWallet,
910
1141
  EvmProvider,
911
1142
  EvmWallet,
912
1143
  SolWallet,
913
1144
  SolanaProvider,
1145
+ SuiProvider,
1146
+ SuiWallet,
914
1147
  TonProvider,
915
1148
  TonWallet,
916
1149
  WalletFactory