@hashgraph/hedera-wallet-connect 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,241 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { AccountId, LedgerId, Transaction, TransactionId, TransactionResponse } from "@hashgraph/sdk";
8
+ import { Buffer } from "buffer";
9
+ import { convertToSignerSignature, getChainByLedgerId, isEncodable, isTransaction, METHODS } from "./Utils.js";
10
+ import { CatchAll, HWCError } from "./ErrorHelper.js";
11
+ import { DAppConnector } from "./DAppConnector.js";
12
+ import { catchError, defer, delay, filter, from, lastValueFrom, takeUntil, throwIfEmpty, timeout } from "rxjs";
13
+ const handleSignerError = async (error, signer) => {
14
+ try {
15
+ const existingSession = await DAppConnector.instance.checkPersistedState();
16
+ if (existingSession) {
17
+ await DAppConnector.instance.onSessionConnected(existingSession);
18
+ }
19
+ else {
20
+ const pairing = signer.client.pairing.getAll({ active: true }).pop();
21
+ await DAppConnector.instance.connect(signer.getLedgerId(), pairing?.topic);
22
+ }
23
+ }
24
+ catch (e) {
25
+ try {
26
+ await DAppConnector.instance.disconnect();
27
+ }
28
+ finally {
29
+ await DAppConnector.instance.connect(signer.getLedgerId());
30
+ }
31
+ }
32
+ return true;
33
+ };
34
+ /**
35
+ * Implements Hedera Signer interface.
36
+ * https://hips.hedera.com/hip/hip-338
37
+ */
38
+ let WCSigner = class WCSigner {
39
+ accountId;
40
+ client;
41
+ topic;
42
+ ledgerId;
43
+ extensionMethods;
44
+ constructor(accountId, client, topic, ledgerId = LedgerId.MAINNET, extensionMethods = []) {
45
+ this.accountId = accountId;
46
+ this.client = client;
47
+ this.topic = topic;
48
+ this.ledgerId = ledgerId;
49
+ this.extensionMethods = extensionMethods;
50
+ this.extensionMethods
51
+ .filter(method => !Object.values(METHODS).includes(method))
52
+ .forEach(method => {
53
+ this[method] = (...args) => this.extensionMethodCall(method, args);
54
+ });
55
+ }
56
+ wrappedRequest(params) {
57
+ const cancelWithPing$ = defer(() => this.client.ping({ topic: this.topic }))
58
+ .pipe(delay(5000), timeout(10000), catchError(async () => true), filter(error => !!error));
59
+ return lastValueFrom(from(this.client.request(params))
60
+ .pipe(takeUntil(cancelWithPing$), throwIfEmpty(() => new HWCError(403, "Wallet is closed or locked", {}))));
61
+ }
62
+ getAccountId() {
63
+ return this.accountId;
64
+ }
65
+ async getAccountKey() {
66
+ return this.wrappedRequest({
67
+ topic: this.topic,
68
+ request: {
69
+ method: "getAccountKey",
70
+ params: {
71
+ accountId: this.accountId.toString()
72
+ }
73
+ },
74
+ chainId: getChainByLedgerId(this.ledgerId)
75
+ });
76
+ }
77
+ getLedgerId() {
78
+ return this.ledgerId;
79
+ }
80
+ async getNetwork() {
81
+ return this.wrappedRequest({
82
+ topic: this.topic,
83
+ request: {
84
+ method: "getNetwork",
85
+ params: {
86
+ accountId: this.accountId.toString()
87
+ }
88
+ },
89
+ chainId: getChainByLedgerId(this.ledgerId)
90
+ });
91
+ }
92
+ async getMirrorNetwork() {
93
+ return this.wrappedRequest({
94
+ topic: this.topic,
95
+ request: {
96
+ method: "getMirrorNetwork",
97
+ params: {
98
+ accountId: this.accountId.toString()
99
+ }
100
+ },
101
+ chainId: getChainByLedgerId(this.ledgerId)
102
+ });
103
+ }
104
+ async sign(messages, signOptions) {
105
+ const result = await this.wrappedRequest({
106
+ topic: this.topic,
107
+ request: {
108
+ method: "sign",
109
+ params: {
110
+ accountId: this.accountId.toString(),
111
+ messages: messages.map(message => Buffer.from(message).toString("base64")),
112
+ signOptions
113
+ }
114
+ },
115
+ chainId: getChainByLedgerId(this.ledgerId)
116
+ });
117
+ return Promise.resolve(result.map(r => convertToSignerSignature(r)));
118
+ }
119
+ async extensionMethodCall(name, args) {
120
+ const result = await this.wrappedRequest({
121
+ topic: this.topic,
122
+ request: {
123
+ method: name,
124
+ params: {
125
+ args,
126
+ accountId: this.accountId.toString()
127
+ }
128
+ },
129
+ chainId: getChainByLedgerId(this.ledgerId)
130
+ });
131
+ return Promise.resolve(result);
132
+ }
133
+ getAccountBalance() {
134
+ return this.wrappedRequest({
135
+ topic: this.topic,
136
+ request: {
137
+ method: "getAccountBalance",
138
+ params: {
139
+ accountId: this.accountId.toString()
140
+ }
141
+ },
142
+ chainId: getChainByLedgerId(this.ledgerId)
143
+ });
144
+ }
145
+ getAccountInfo() {
146
+ return this.wrappedRequest({
147
+ topic: this.topic,
148
+ request: {
149
+ method: "getAccountInfo",
150
+ params: {
151
+ accountId: this.accountId.toString()
152
+ }
153
+ },
154
+ chainId: getChainByLedgerId(this.ledgerId)
155
+ });
156
+ }
157
+ getAccountRecords() {
158
+ return this.wrappedRequest({
159
+ topic: this.topic,
160
+ request: {
161
+ method: "getAccountRecords",
162
+ params: {
163
+ accountId: this.accountId.toString()
164
+ }
165
+ },
166
+ chainId: getChainByLedgerId(this.ledgerId)
167
+ });
168
+ }
169
+ async signTransaction(transaction) {
170
+ const encodedTransaction = await this.wrappedRequest({
171
+ topic: this.topic,
172
+ request: {
173
+ method: "signTransaction",
174
+ params: {
175
+ accountId: this.accountId.toString(),
176
+ executable: Buffer.from(transaction.toBytes()).toString("base64")
177
+ }
178
+ },
179
+ chainId: getChainByLedgerId(this.ledgerId)
180
+ });
181
+ return Transaction.fromBytes(Buffer.from(encodedTransaction, "base64"));
182
+ }
183
+ async checkTransaction(transaction) {
184
+ const transactionId = transaction.transactionId;
185
+ if (transactionId != null &&
186
+ transactionId.accountId != null &&
187
+ transactionId.accountId.compare(this.accountId) !== 0) {
188
+ throw new Error("transaction's ID constructed with a different account ID");
189
+ }
190
+ const nodeAccountIds = (transaction.nodeAccountIds != null ? transaction.nodeAccountIds : []).map((nodeAccountId) => nodeAccountId.toString());
191
+ const network = Object.values(await this.getNetwork()).map((nodeAccountId) => nodeAccountId.toString());
192
+ if (!nodeAccountIds.reduce((previous, current) => previous && network.includes(current), true)) {
193
+ throw new Error("Transaction already set node account IDs to values not within the current network");
194
+ }
195
+ return Promise.resolve(transaction);
196
+ }
197
+ async populateTransaction(transaction) {
198
+ transaction.setTransactionId(TransactionId.generate(this.accountId));
199
+ const network = Object.values(await this.getNetwork()).map((nodeAccountId) => typeof nodeAccountId === "string"
200
+ ? AccountId.fromString(nodeAccountId)
201
+ : new AccountId(nodeAccountId));
202
+ transaction.setNodeAccountIds(network);
203
+ return Promise.resolve(transaction);
204
+ }
205
+ async call(request) {
206
+ if (!isEncodable(request)) {
207
+ throw new Error("Argument is not executable");
208
+ }
209
+ const isTransactionType = isTransaction(request);
210
+ const result = await this.wrappedRequest({
211
+ topic: this.topic,
212
+ request: {
213
+ method: "call",
214
+ params: {
215
+ accountId: this.accountId.toString(),
216
+ executable: Buffer.from(request.toBytes()).toString("base64"),
217
+ isTransaction: isTransactionType
218
+ }
219
+ },
220
+ chainId: getChainByLedgerId(this.ledgerId)
221
+ });
222
+ if (result.error) {
223
+ throw new Error(result.error);
224
+ }
225
+ if (!isTransactionType) {
226
+ // @ts-ignore
227
+ const responseTypeName = request.constructor.name.replace(/Query$/, "");
228
+ const output = await import("@hashgraph/sdk").then((module) => module[responseTypeName]);
229
+ const bytes = Buffer.from(result, "base64");
230
+ return output.fromBytes(bytes);
231
+ }
232
+ else {
233
+ return TransactionResponse.fromJSON(result);
234
+ }
235
+ }
236
+ };
237
+ WCSigner = __decorate([
238
+ CatchAll(handleSignerError, { retry: true, retryDelay: 1000 })
239
+ ], WCSigner);
240
+ export { WCSigner };
241
+ //# sourceMappingURL=WCSigner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WCSigner.js","sourceRoot":"","sources":["../../src/WCSigner.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Signer} from '@hashgraph/sdk';\nimport {\n AccountBalance,\n AccountId,\n AccountInfo,\n Executable,\n Key,\n LedgerId,\n SignerSignature,\n Transaction,\n TransactionId,\n TransactionRecord, TransactionResponse\n} from \"@hashgraph/sdk\";\nimport {ISignClient} from \"@walletconnect/types\";\nimport {Buffer} from \"buffer\";\nimport {\n convertToSignerSignature,\n getChainByLedgerId,\n isEncodable,\n isTransaction,\n METHODS\n} from \"./Utils.js\";\nimport { CatchAll, HWCError } from \"./ErrorHelper.js\";\nimport {DAppConnector} from \"./DAppConnector.js\";\nimport {\n catchError,\n defer,\n delay, filter,\n from,\n lastValueFrom,\n takeUntil, throwIfEmpty,\n timeout\n} from \"rxjs\";\n\nconst handleSignerError = async (error: any, signer: Signer) => {\n try {\n const existingSession = await DAppConnector.instance.checkPersistedState();\n if (existingSession) {\n await DAppConnector.instance.onSessionConnected(existingSession);\n } else {\n const pairing = signer.client.pairing.getAll({active: true}).pop();\n await DAppConnector.instance.connect(signer.getLedgerId(), pairing?.topic);\n }\n } catch (e) {\n try {\n await DAppConnector.instance.disconnect();\n } finally {\n await DAppConnector.instance.connect(signer.getLedgerId())\n }\n }\n\n return true;\n};\n\n/**\n * Implements Hedera Signer interface.\n * https://hips.hedera.com/hip/hip-338\n */\n@CatchAll(handleSignerError, {retry: true, retryDelay: 1000})\nexport class WCSigner implements Signer {\n constructor(\n private readonly accountId: AccountId,\n private readonly client: ISignClient,\n private readonly topic: string,\n private readonly ledgerId: LedgerId = LedgerId.MAINNET,\n private extensionMethods: string[] = []\n ) {\n this.extensionMethods\n .filter(method => !Object.values(METHODS).includes(method as any))\n .forEach(method => {\n this[method] = (...args: any[]) => this.extensionMethodCall(method, args);\n });\n }\n\n private wrappedRequest<T>(params): Promise<T> {\n const cancelWithPing$ = defer(() => this.client!.ping({topic: this.topic}))\n .pipe(\n delay(5000),\n timeout(10000),\n catchError(async () => true),\n filter(error => !!error)\n );\n return lastValueFrom<T>(\n from(this.client.request<T>(params))\n .pipe(\n takeUntil(cancelWithPing$),\n throwIfEmpty(() => new HWCError(403,\"Wallet is closed or locked\", {}))\n )\n );\n }\n\n getAccountId(): AccountId {\n return this.accountId;\n }\n\n async getAccountKey(): Promise<Key> {\n return this.wrappedRequest<Key>({\n topic: this.topic,\n request: {\n method: \"getAccountKey\",\n params: {\n accountId: this.accountId.toString()\n }\n },\n chainId: getChainByLedgerId(this.ledgerId)\n });\n }\n\n getLedgerId(): LedgerId {\n return this.ledgerId;\n }\n\n async getNetwork(): Promise<{[key: string]: (string | AccountId)}> {\n return this.wrappedRequest<{[key: string]: (string | AccountId)}>({\n topic: this.topic,\n request: {\n method: \"getNetwork\",\n params: {\n accountId: this.accountId.toString()\n }\n },\n chainId: getChainByLedgerId(this.ledgerId)\n });\n }\n\n async getMirrorNetwork(): Promise<string[]> {\n return this.wrappedRequest<string[]>({\n topic: this.topic,\n request: {\n method: \"getMirrorNetwork\",\n params: {\n accountId: this.accountId.toString()\n }\n },\n chainId: getChainByLedgerId(this.ledgerId)\n });\n }\n\n async sign(messages: Uint8Array[], signOptions?: Record<string, any>): Promise<SignerSignature[]> {\n const result = await this.wrappedRequest<SignerSignature[]>({\n topic: this.topic,\n request: {\n method: \"sign\",\n params: {\n accountId: this.accountId.toString(),\n messages: messages.map(message => Buffer.from(message).toString(\"base64\")),\n signOptions\n }\n },\n chainId: getChainByLedgerId(this.ledgerId)\n });\n\n return Promise.resolve(result.map(r => convertToSignerSignature(r)));\n }\n\n private async extensionMethodCall<T>(name, args: Record<any, any>): Promise<T> {\n const result = await this.wrappedRequest<T>({\n topic: this.topic,\n request: {\n method: name,\n params: {\n args,\n accountId: this.accountId.toString()\n }\n },\n chainId: getChainByLedgerId(this.ledgerId)\n })\n return Promise.resolve(result);\n }\n\n getAccountBalance(): Promise<AccountBalance> {\n return this.wrappedRequest<AccountBalance>({\n topic: this.topic,\n request: {\n method: \"getAccountBalance\",\n params: {\n accountId: this.accountId.toString()\n }\n },\n chainId: getChainByLedgerId(this.ledgerId)\n });\n }\n\n getAccountInfo(): Promise<AccountInfo> {\n return this.wrappedRequest<AccountInfo>({\n topic: this.topic,\n request: {\n method: \"getAccountInfo\",\n params: {\n accountId: this.accountId.toString()\n }\n },\n chainId: getChainByLedgerId(this.ledgerId)\n });\n }\n\n getAccountRecords(): Promise<TransactionRecord[]> {\n return this.wrappedRequest<TransactionRecord[]>({\n topic: this.topic,\n request: {\n method: \"getAccountRecords\",\n params: {\n accountId: this.accountId.toString()\n }\n },\n chainId: getChainByLedgerId(this.ledgerId)\n });\n }\n\n async signTransaction<T extends Transaction>(transaction: T): Promise<T> {\n const encodedTransaction = await this.wrappedRequest<string>({\n topic: this.topic,\n request: {\n method: \"signTransaction\",\n params: {\n accountId: this.accountId.toString(),\n executable: Buffer.from(transaction.toBytes()).toString(\"base64\")\n }\n },\n chainId: getChainByLedgerId(this.ledgerId)\n });\n\n return Transaction.fromBytes(Buffer.from(encodedTransaction, \"base64\")) as T;\n }\n\n async checkTransaction<T extends Transaction>(transaction: T): Promise<T> {\n const transactionId = transaction.transactionId;\n if (\n transactionId != null &&\n transactionId.accountId != null &&\n transactionId.accountId.compare(this.accountId) !== 0\n ) {\n throw new Error(\n \"transaction's ID constructed with a different account ID\"\n );\n }\n\n const nodeAccountIds = (\n transaction.nodeAccountIds != null ? transaction.nodeAccountIds : []\n ).map((nodeAccountId) => nodeAccountId.toString());\n const network = Object.values(await this.getNetwork()).map(\n (nodeAccountId) => nodeAccountId.toString()\n );\n\n if (\n !nodeAccountIds.reduce(\n (previous, current) => previous && network.includes(current),\n true\n )\n ) {\n throw new Error(\n \"Transaction already set node account IDs to values not within the current network\"\n );\n }\n\n return Promise.resolve(transaction);\n }\n\n async populateTransaction<T extends Transaction>(transaction: T): Promise<T> {\n transaction.setTransactionId(TransactionId.generate(this.accountId));\n const network = Object.values(await this.getNetwork()).map(\n (nodeAccountId) =>\n typeof nodeAccountId === \"string\"\n ? AccountId.fromString(nodeAccountId)\n : new AccountId(nodeAccountId)\n );\n transaction.setNodeAccountIds(network);\n return Promise.resolve(transaction);\n }\n\n async call<RequestT, ResponseT, OutputT>(request: Executable<RequestT, ResponseT, OutputT>): Promise<OutputT> {\n if (!isEncodable(request)) {\n throw new Error(\"Argument is not executable\");\n }\n const isTransactionType = isTransaction(request);\n const result = await this.wrappedRequest<any>({\n topic: this.topic,\n request: {\n method: \"call\",\n params: {\n accountId: this.accountId.toString(),\n executable: Buffer.from(request.toBytes()).toString(\"base64\"),\n isTransaction: isTransactionType\n }\n },\n chainId: getChainByLedgerId(this.ledgerId)\n })\n\n if (result.error) {\n throw new Error(result.error);\n }\n\n if (!isTransactionType) {\n // @ts-ignore\n const responseTypeName = request.constructor.name.replace(/Query$/, \"\");\n const output = await import(\"@hashgraph/sdk\").then((module: any) => module[responseTypeName]);\n const bytes = Buffer.from(result, \"base64\");\n return output.fromBytes(bytes);\n } else {\n return TransactionResponse.fromJSON(result) as unknown as OutputT;\n }\n }\n}\n"]}
@@ -0,0 +1,203 @@
1
+ import { Query, Transaction } from "@hashgraph/sdk";
2
+ import { formatJsonRpcError, formatJsonRpcResult } from "@json-rpc-tools/utils";
3
+ import { SignClient } from "@walletconnect/sign-client";
4
+ import { getSdkError } from "@walletconnect/utils";
5
+ import { Connector } from "./Connector.js";
6
+ import { getExtensionMethodsFromSession } from "./Utils.js";
7
+ export class WalletConnector extends Connector {
8
+ onProposalReceive;
9
+ constructor(metadata) {
10
+ super(metadata);
11
+ }
12
+ async init(onProposalReceive) {
13
+ this.onProposalReceive = onProposalReceive;
14
+ try {
15
+ this.isInitializing = true;
16
+ this.client = await SignClient.init({
17
+ relayUrl: "wss://relay.walletconnect.com",
18
+ projectId: "ce06497abf4102004138a10edd29c921",
19
+ metadata: this.dAppMetadata
20
+ });
21
+ this.subscribeToEvents();
22
+ await this.checkPersistedState();
23
+ }
24
+ finally {
25
+ this.isInitializing = false;
26
+ }
27
+ }
28
+ async pair(uri) {
29
+ if (!this.initialized) {
30
+ throw new Error("WC not initialized");
31
+ }
32
+ return await this.client.pair({ uri });
33
+ }
34
+ subscribeToEvents() {
35
+ if (!this.client) {
36
+ throw new Error("WC is not initialized");
37
+ }
38
+ this.client.on("session_proposal", this.onSessionProposal.bind(this));
39
+ this.client.on("session_request", this.onSessionRequest.bind(this));
40
+ this.client.on("session_delete", this.destroySession.bind(this));
41
+ this.client.on("session_expire", this.destroySession.bind(this));
42
+ }
43
+ async destroySession(event) {
44
+ this.session = null;
45
+ }
46
+ async onSessionRequest(requestEvent) {
47
+ const { id, topic, params } = requestEvent;
48
+ const { request, chainId } = params;
49
+ const accountId = request.params.accountId;
50
+ const signer = this.signers.find(s => s.getAccountId().toString() === accountId);
51
+ if (!signer) {
52
+ const formattedResult = formatJsonRpcError(id, "Signer is not available anymore");
53
+ await this.client.respond({
54
+ topic,
55
+ response: formattedResult
56
+ });
57
+ return;
58
+ }
59
+ try {
60
+ let formattedResult;
61
+ switch (request.method) {
62
+ case "getLedgerId": {
63
+ const result = await signer.getLedgerId();
64
+ formattedResult = formatJsonRpcResult(id, result);
65
+ break;
66
+ }
67
+ case "getAccountId": {
68
+ const result = await signer.getAccountId();
69
+ formattedResult = formatJsonRpcResult(id, result);
70
+ break;
71
+ }
72
+ case "getAccountKey": {
73
+ const result = await signer.getAccountKey();
74
+ formattedResult = formatJsonRpcResult(id, result);
75
+ break;
76
+ }
77
+ case "getNetwork": {
78
+ const result = await signer.getNetwork();
79
+ formattedResult = formatJsonRpcResult(id, result);
80
+ break;
81
+ }
82
+ case "getMirrorNetwork": {
83
+ const result = await signer.getMirrorNetwork();
84
+ formattedResult = formatJsonRpcResult(id, result);
85
+ break;
86
+ }
87
+ case "sign": {
88
+ const signatures = await signer.sign(request.params.messages, request.params.signOptions);
89
+ formattedResult = formatJsonRpcResult(id, signatures);
90
+ break;
91
+ }
92
+ case "getAccountBalance": {
93
+ const result = await signer.getAccountBalance();
94
+ formattedResult = formatJsonRpcResult(id, result);
95
+ break;
96
+ }
97
+ case "getAccountInfo": {
98
+ const result = await signer.getAccountInfo();
99
+ formattedResult = formatJsonRpcResult(id, result);
100
+ break;
101
+ }
102
+ case "getAccountRecords": {
103
+ const result = await signer.getAccountRecords();
104
+ formattedResult = formatJsonRpcResult(id, result);
105
+ break;
106
+ }
107
+ case "signTransaction": {
108
+ const transaction = await Transaction.fromBytes(Buffer.from(request.params.executable, "base64"));
109
+ const signedTransaction = await signer.signTransaction(transaction);
110
+ const encodedTransaction = Buffer.from(signedTransaction.toBytes()).toString("base64");
111
+ formattedResult = formatJsonRpcResult(id, encodedTransaction);
112
+ break;
113
+ }
114
+ case "checkTransaction": {
115
+ const transaction = await Transaction.fromBytes(Buffer.from(request.params.executable, "base64"));
116
+ const checkedTransaction = await signer.checkTransaction(transaction);
117
+ const encodedTransaction = Buffer.from(checkedTransaction.toBytes()).toString("base64");
118
+ formattedResult = formatJsonRpcResult(id, encodedTransaction);
119
+ break;
120
+ }
121
+ case "populateTransaction": {
122
+ const transaction = await Transaction.fromBytes(Buffer.from(request.params.executable, "base64"));
123
+ const populatedTransaction = await signer.populateTransaction(transaction);
124
+ const encodedTransaction = Buffer.from(populatedTransaction.toBytes()).toString("base64");
125
+ formattedResult = formatJsonRpcResult(id, encodedTransaction);
126
+ break;
127
+ }
128
+ case "call": {
129
+ const encodedExecutable = request.params.executable;
130
+ const isTransaction = request.params.isTransaction;
131
+ const bytes = Buffer.from(encodedExecutable, "base64");
132
+ let result;
133
+ if (isTransaction) {
134
+ const transaction = Transaction.fromBytes(bytes);
135
+ result = (await signer.call(transaction)).toJSON();
136
+ }
137
+ else {
138
+ const query = Query.fromBytes(bytes);
139
+ const queryResult = await signer.call(query);
140
+ result = Buffer.from(queryResult.toBytes()).toString("base64");
141
+ }
142
+ formattedResult = formatJsonRpcResult(id, result);
143
+ break;
144
+ }
145
+ default: {
146
+ const extensionMethods = getExtensionMethodsFromSession(this.session);
147
+ if (extensionMethods.includes(request.method)) {
148
+ const result = await signer[request.method](...request.params.args);
149
+ formattedResult = formatJsonRpcResult(id, result);
150
+ }
151
+ else {
152
+ throw new Error(getSdkError("INVALID_METHOD").message);
153
+ }
154
+ }
155
+ }
156
+ await this.client.respond({
157
+ topic,
158
+ response: formattedResult
159
+ });
160
+ }
161
+ catch (e) {
162
+ const formattedResult = formatJsonRpcError(id, e);
163
+ await this.client.respond({
164
+ topic,
165
+ response: formattedResult
166
+ });
167
+ }
168
+ }
169
+ async onSessionProposal(proposal) {
170
+ await this.onProposalReceive(proposal);
171
+ }
172
+ async approveSessionProposal(data, signers) {
173
+ const accountConfigs = Object.values(data.namespaces).flatMap(ns => ns.accounts.map(acc => {
174
+ const [network, chainId, accountId] = acc.split(":");
175
+ return { network, chainId, accountId };
176
+ }));
177
+ const signerAccounts = signers.map(signer => signer.getAccountId().toString());
178
+ const hasValidSigners = accountConfigs.every(config => signerAccounts.includes(config.accountId));
179
+ if (!hasValidSigners) {
180
+ throw new Error("Required signers are missing");
181
+ }
182
+ this.signers = signers;
183
+ const { acknowledged } = await this.client.approve(data);
184
+ this.session = await acknowledged();
185
+ return this.session;
186
+ }
187
+ async rejectSessionProposal(data) {
188
+ return this.client.reject(data);
189
+ }
190
+ async sendEvent(name, data) {
191
+ if (!this.session) {
192
+ throw new Error("No connection session exist!");
193
+ }
194
+ const chainId = Object.values(this.session.namespaces)
195
+ .flatMap(ns => ns.accounts.map(acc => acc.split(":").slice(0, 2).join(":")))[0];
196
+ const allowedEvents = Object.values(this.session.namespaces)
197
+ .flatMap(ns => ns.events);
198
+ if (allowedEvents.includes(name)) {
199
+ await this.client.emit({ topic: this.session.topic, chainId, event: { name, data } });
200
+ }
201
+ }
202
+ }
203
+ //# sourceMappingURL=WalletConnector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WalletConnector.js","sourceRoot":"","sources":["../../src/WalletConnector.ts"],"names":[],"mappings":"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","sourcesContent":["import {Query, Signer, SignerSignature, Transaction} from \"@hashgraph/sdk\";\nimport {formatJsonRpcError, formatJsonRpcResult} from \"@json-rpc-tools/utils\";\nimport {SignClient} from \"@walletconnect/sign-client\";\nimport {EngineTypes, PairingTypes, SessionTypes, SignClientTypes} from \"@walletconnect/types\";\nimport {getSdkError} from \"@walletconnect/utils\";\nimport {Connector} from \"./Connector.js\";\nimport ApproveParams = EngineTypes.ApproveParams;\nimport RejectParams = EngineTypes.RejectParams;\nimport { getExtensionMethodsFromSession } from \"./Utils.js\";\n\ntype ProposalCallback = (proposal: SignClientTypes.EventArguments[\"session_proposal\"]) => Promise<void>;\n\nexport class WalletConnector extends Connector {\n public onProposalReceive: ProposalCallback;\n\n constructor(metadata?: SignClientTypes.Metadata) {\n super(metadata);\n }\n\n public async init(onProposalReceive: ProposalCallback) {\n this.onProposalReceive = onProposalReceive;\n try {\n this.isInitializing = true;\n this.client = await SignClient.init({\n relayUrl: \"wss://relay.walletconnect.com\",\n projectId: \"ce06497abf4102004138a10edd29c921\",\n metadata: this.dAppMetadata\n });\n this.subscribeToEvents();\n await this.checkPersistedState();\n } finally {\n this.isInitializing = false;\n }\n }\n\n public async pair(uri: string): Promise<PairingTypes.Struct> {\n if (!this.initialized) {\n throw new Error(\"WC not initialized\");\n }\n\n return await this.client.pair({uri});\n }\n\n private subscribeToEvents() {\n if (!this.client) {\n throw new Error(\"WC is not initialized\");\n }\n this.client.on(\"session_proposal\", this.onSessionProposal.bind(this));\n this.client.on(\"session_request\", this.onSessionRequest.bind(this));\n this.client.on(\"session_delete\", this.destroySession.bind(this));\n this.client.on(\"session_expire\", this.destroySession.bind(this));\n }\n\n private async destroySession(event: SignClientTypes.EventArguments[\"session_expire\"] | SignClientTypes.EventArguments[\"session_delete\"]) {\n this.session = null;\n }\n\n private async onSessionRequest(requestEvent: SignClientTypes.EventArguments[\"session_request\"]) {\n const {id, topic, params} = requestEvent;\n const {request, chainId} = params;\n const accountId = request.params.accountId;\n const signer = this.signers.find(s => s.getAccountId().toString() === accountId);\n\n if (!signer) {\n const formattedResult = formatJsonRpcError(id, \"Signer is not available anymore\");\n await this.client.respond({\n topic,\n response: formattedResult\n });\n return;\n }\n\n try {\n let formattedResult;\n switch (request.method) {\n case \"getLedgerId\": {\n const result = await signer.getLedgerId();\n formattedResult = formatJsonRpcResult(id, result);\n break;\n }\n case \"getAccountId\": {\n const result = await signer.getAccountId();\n formattedResult = formatJsonRpcResult(id, result);\n break;\n }\n case \"getAccountKey\": {\n const result = await signer.getAccountKey();\n formattedResult = formatJsonRpcResult(id, result);\n break;\n }\n case \"getNetwork\": {\n const result = await signer.getNetwork();\n formattedResult = formatJsonRpcResult(id, result);\n break;\n }\n case \"getMirrorNetwork\": {\n const result = await signer.getMirrorNetwork();\n formattedResult = formatJsonRpcResult(id, result);\n break;\n }\n case \"sign\": {\n const signatures: SignerSignature[] = await signer.sign(request.params.messages, request.params.signOptions)\n formattedResult = formatJsonRpcResult(id, signatures);\n break;\n }\n case \"getAccountBalance\": {\n const result = await signer.getAccountBalance();\n formattedResult = formatJsonRpcResult(id, result);\n break;\n }\n case \"getAccountInfo\": {\n const result = await signer.getAccountInfo();\n formattedResult = formatJsonRpcResult(id, result);\n break;\n }\n case \"getAccountRecords\": {\n const result = await signer.getAccountRecords();\n formattedResult = formatJsonRpcResult(id, result);\n break;\n }\n case \"signTransaction\": {\n const transaction = await Transaction.fromBytes(Buffer.from(request.params.executable, \"base64\"))\n const signedTransaction = await signer.signTransaction(transaction);\n const encodedTransaction = Buffer.from(signedTransaction.toBytes()).toString(\"base64\");\n formattedResult = formatJsonRpcResult(id, encodedTransaction);\n break;\n }\n case \"checkTransaction\": {\n const transaction = await Transaction.fromBytes(Buffer.from(request.params.executable, \"base64\"))\n const checkedTransaction = await signer.checkTransaction(transaction);\n const encodedTransaction = Buffer.from(checkedTransaction.toBytes()).toString(\"base64\");\n formattedResult = formatJsonRpcResult(id, encodedTransaction);\n break;\n }\n case \"populateTransaction\": {\n const transaction = await Transaction.fromBytes(Buffer.from(request.params.executable, \"base64\"))\n const populatedTransaction = await signer.populateTransaction(transaction);\n const encodedTransaction = Buffer.from(populatedTransaction.toBytes()).toString(\"base64\");\n formattedResult = formatJsonRpcResult(id, encodedTransaction);\n break;\n }\n case \"call\": {\n const encodedExecutable = request.params.executable;\n const isTransaction = request.params.isTransaction;\n const bytes = Buffer.from(encodedExecutable, \"base64\");\n let result;\n if (isTransaction) {\n const transaction = Transaction.fromBytes(bytes);\n result = (await signer.call(transaction)).toJSON();\n } else {\n const query = Query.fromBytes(bytes);\n const queryResult: any = await signer.call(query);\n result = Buffer.from(queryResult.toBytes()).toString(\"base64\");\n }\n formattedResult = formatJsonRpcResult(id, result);\n break;\n }\n default: {\n const extensionMethods = getExtensionMethodsFromSession(this.session);\n if (extensionMethods.includes(request.method)) {\n const result = await signer[request.method](...request.params.args)\n formattedResult = formatJsonRpcResult(id, result);\n } else {\n throw new Error(getSdkError(\"INVALID_METHOD\").message);\n }\n }\n }\n await this.client.respond({\n topic,\n response: formattedResult\n });\n } catch (e: any) {\n const formattedResult = formatJsonRpcError(id, e);\n await this.client.respond({\n topic,\n response: formattedResult\n });\n }\n }\n\n private async onSessionProposal(proposal: SignClientTypes.EventArguments[\"session_proposal\"]): Promise<void> {\n await this.onProposalReceive(proposal)\n }\n\n public async approveSessionProposal<T extends Signer>(data: ApproveParams, signers: T[]): Promise<SessionTypes.Struct> {\n const accountConfigs = Object.values(data.namespaces).flatMap(ns => ns.accounts.map(acc => {\n const [network, chainId, accountId] = acc.split(\":\");\n return {network, chainId, accountId};\n }));\n const signerAccounts = signers.map(signer => signer.getAccountId().toString());\n const hasValidSigners = accountConfigs.every(config => signerAccounts.includes(config.accountId));\n\n if (!hasValidSigners) {\n throw new Error(\"Required signers are missing\");\n }\n\n this.signers = signers;\n const {acknowledged} = await this.client.approve(data);\n this.session = await acknowledged();\n return this.session;\n }\n\n public async rejectSessionProposal(data: RejectParams): Promise<void> {\n return this.client.reject(data);\n }\n\n public async sendEvent(name: string, data: any): Promise<void> {\n if (!this.session) {\n throw new Error(\"No connection session exist!\");\n }\n\n const chainId = Object.values(this.session.namespaces)\n .flatMap(ns => ns.accounts.map(acc => acc.split(\":\").slice(0,2).join(\":\")))[0];\n const allowedEvents = Object.values(this.session.namespaces)\n .flatMap(ns => ns.events);\n if (allowedEvents.includes(name)) {\n await this.client.emit({topic: this.session.topic, chainId, event: {name, data}});\n }\n }\n}\n"]}
@@ -0,0 +1,4 @@
1
+ export * from "./DAppConnector.js";
2
+ export * from "./WalletConnector.js";
3
+ export * from "./Utils.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAA","sourcesContent":["export * from \"./DAppConnector.js\";\nexport * from \"./WalletConnector.js\";\nexport * from \"./Utils.js\"\n"]}
@@ -0,0 +1,18 @@
1
+ import SignClient from "@walletconnect/sign-client";
2
+ import { Signer } from "@hashgraph/sdk";
3
+ import { SessionTypes, SignClientTypes } from "@walletconnect/types";
4
+ declare type Client = SignClient.default;
5
+ export declare class Connector {
6
+ protected readonly dAppMetadata: SignClientTypes.Metadata;
7
+ protected isInitializing: boolean;
8
+ protected client: Client | null;
9
+ protected session: SessionTypes.Struct | null;
10
+ protected signers: Signer[];
11
+ protected constructor(metadata?: SignClientTypes.Metadata);
12
+ checkPersistedState(): Promise<SessionTypes.Struct>;
13
+ disconnect(): Promise<void>;
14
+ private reset;
15
+ get initialized(): boolean;
16
+ }
17
+ export {};
18
+ //# sourceMappingURL=Connector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Connector.d.ts","sourceRoot":"","sources":["../../../src/Connector.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,4BAA4B,CAAC;AAEpD,OAAO,EAAC,MAAM,EAAC,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAC,YAAY,EAAE,eAAe,EAAC,MAAM,sBAAsB,CAAC;AAGnE,OAAO,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;AAEzC,qBAAa,SAAS;IACpB,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC,QAAQ,CAAC;IAC1D,SAAS,CAAC,cAAc,EAAE,OAAO,CAAS;IAC1C,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAQ;IACvC,SAAS,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,GAAG,IAAI,CAAQ;IACrD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAM;IAEjC,SAAS,aAAa,QAAQ,CAAC,EAAE,eAAe,CAAC,QAAQ;IAInD,mBAAmB;IAqDnB,UAAU;IAgBhB,OAAO,CAAC,KAAK;IAKb,IAAI,WAAW,IAAI,OAAO,CAEzB;CACF"}
@@ -0,0 +1,27 @@
1
+ import { LedgerId } from "@hashgraph/sdk";
2
+ import { SessionTypes, SignClientTypes } from "@walletconnect/types";
3
+ import { Subject } from "rxjs";
4
+ import { Connector } from "./Connector.js";
5
+ type WalletEvent = {
6
+ name: string;
7
+ data: any;
8
+ };
9
+ export type DAppMetadata = SignClientTypes.Metadata;
10
+ export declare class DAppConnector extends Connector {
11
+ private allowedEvents;
12
+ private extensionMethods;
13
+ static instance: DAppConnector;
14
+ $events: Subject<WalletEvent>;
15
+ constructor(metadata?: DAppMetadata);
16
+ init(events?: string[], methods?: string[]): Promise<void>;
17
+ private subscribeToEvents;
18
+ connect(ledgerId?: LedgerId, activeTopic?: string): Promise<void>;
19
+ prepareConnectURI(ledgerId?: LedgerId, activeTopic?: string): Promise<{
20
+ uri?: string;
21
+ approval: () => Promise<SessionTypes.Struct>;
22
+ }>;
23
+ onSessionConnected(session: SessionTypes.Struct): Promise<void>;
24
+ getSigners(): Signer[];
25
+ }
26
+ export {};
27
+ //# sourceMappingURL=DAppConnector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DAppConnector.d.ts","sourceRoot":"","sources":["../../../src/DAppConnector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EAAC,YAAY,EAAE,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAC,OAAO,EAAC,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AASzC,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,GAAG,CAAA;CACV,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,eAAe,CAAC,QAAQ,CAAC;AAEpD,qBAAa,aAAc,SAAQ,SAAS;IAC1C,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,gBAAgB,CAAgB;IACxC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAA8B;gBAEtD,QAAQ,CAAC,EAAE,YAAY;IAK7B,IAAI,CAAC,MAAM,GAAE,MAAM,EAAO,EAAE,OAAO,GAAE,MAAM,EAAO;IAoBxD,OAAO,CAAC,iBAAiB;IAkBnB,OAAO,CAAC,QAAQ,GAAE,QAA2B,EAAE,WAAW,CAAC,EAAE,MAAM;IAwCnE,iBAAiB,CAAC,QAAQ,GAAE,QAA2B,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAC5F,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;KAC9C,CAAC;IAqBI,kBAAkB,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM;IAYrD,UAAU;CAGX"}
@@ -0,0 +1,15 @@
1
+ type HandlerFunction = (error: Error, ctx: any) => Promise<boolean> | boolean;
2
+ type CatchOptions = {
3
+ retry?: boolean;
4
+ retryDelay?: number;
5
+ };
6
+ export declare class HWCError extends Error {
7
+ readonly code: number;
8
+ readonly description: string;
9
+ readonly error: Error | {};
10
+ constructor(code: number, description: string, error: Error | {});
11
+ }
12
+ export declare const Catch: (errorType: any, handler: HandlerFunction, options?: CatchOptions) => any;
13
+ export declare const CatchAll: (handler: HandlerFunction, options?: CatchOptions) => any;
14
+ export {};
15
+ //# sourceMappingURL=ErrorHelper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorHelper.d.ts","sourceRoot":"","sources":["../../../src/ErrorHelper.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AAC9E,KAAK,YAAY,GAAG;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,qBAAa,QAAS,SAAQ,KAAK;aAEf,IAAI,EAAE,MAAM;aACZ,WAAW,EAAE,MAAM;aACnB,KAAK,EAAE,KAAK,GAAG,EAAE;gBAFjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,KAAK,GAAG,EAAE;CAIpC;AAMD,eAAO,MAAM,KAAK,cAAe,GAAG,WAAW,eAAe,YAAY,YAAY,KAAG,GA0FxF,CAAC;AAEF,eAAO,MAAM,QAAQ,YAAa,eAAe,YAAY,YAAY,KAAG,GAAqC,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { LedgerId, PublicKey } from "@hashgraph/sdk";
2
+ import { ProposalTypes, SessionTypes } from "@walletconnect/types";
3
+ export declare enum METHODS {
4
+ SIGN_TRANSACTION = "signTransaction",
5
+ CALL = "call",
6
+ GET_ACCOUNT_BALANCE = "getAccountBalance",
7
+ GET_ACCOUNT_INFO = "getAccountInfo",
8
+ GET_LEDGER_ID = "getLedgerId",
9
+ GET_ACCOUNT_ID = "getAccountId",
10
+ GET_ACCOUNT_KEY = "getAccountKey",
11
+ GET_NETWORK = "getNetwork",
12
+ GET_MIRROR_NETWORK = "getMirrorNetwork",
13
+ SIGN = "sign",
14
+ GET_ACCOUNT_RECORDS = "getAccountRecords",
15
+ CHECK_TRANSACTION = "checkTransaction",
16
+ POPULATE_TRANSACTION = "populateTransaction"
17
+ }
18
+ export declare enum EVENTS {
19
+ ACCOUNTS_CHANGED = "accountsChanged"
20
+ }
21
+ export declare const getChainByLedgerId: (ledgerId: LedgerId) => string;
22
+ export declare const getLedgerIdByChainId: (chainId: string) => string;
23
+ export declare const getRequiredNamespaces: (ledgerId: LedgerId) => ProposalTypes.RequiredNamespaces;
24
+ export declare const getLedgerIDsFromSession: (session: SessionTypes.Struct) => LedgerId[];
25
+ export declare const getAccountLedgerPairsFromSession: (session: SessionTypes.Struct) => {
26
+ network: LedgerId;
27
+ account: string;
28
+ }[];
29
+ export declare const getExtensionMethodsFromSession: (session: SessionTypes.Struct) => string[];
30
+ type Encodable = {
31
+ toBytes(): Uint8Array;
32
+ };
33
+ export declare const isEncodable: (obj: any) => obj is Encodable;
34
+ export declare const isTransaction: (obj: any) => obj is Transaction;
35
+ export declare const evmAddressFromObject: (data: any) => string | null;
36
+ export declare const publicKeyFromObject: (data: any) => PublicKey | null;
37
+ export declare const convertToSignerSignature: (data: any) => SignerSignature;
38
+ export {};
39
+ //# sourceMappingURL=Utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Utils.d.ts","sourceRoot":"","sources":["../../../src/Utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,QAAQ,EAAE,SAAS,EAA+B,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EAAC,aAAa,EAAE,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAQjE,oBAAY,OAAO;IACjB,gBAAgB,oBAAoB;IACpC,IAAI,SAAS;IACb,mBAAmB,sBAAsB;IACzC,gBAAgB,mBAAmB;IACnC,aAAa,gBAAgB;IAC7B,cAAc,iBAAiB;IAC/B,eAAe,kBAAkB;IACjC,WAAW,eAAe;IAC1B,kBAAkB,qBAAqB;IACvC,IAAI,SAAS;IACb,mBAAmB,sBAAsB;IACzC,iBAAiB,qBAAqB;IACtC,oBAAoB,wBAAwB;CAC7C;AAED,oBAAY,MAAM;IAChB,gBAAgB,oBAAoB;CACrC;AAED,eAAO,MAAM,kBAAkB,0BAAyB,MAEvD,CAAA;AAED,eAAO,MAAM,oBAAoB,YAAa,MAAM,KAAG,MAGtD,CAAC;AAEF,eAAO,MAAM,qBAAqB,0BAAyB,cAAc,kBAQxE,CAAC;AAEF,eAAO,MAAM,uBAAuB,YAAa,aAAa,MAAM,KAAG,QAAQ,EAM9E,CAAC;AACF,eAAO,MAAM,gCAAgC,YAAa,aAAa,MAAM,KAAG;IAAC,OAAO,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,EAMnH,CAAC;AAEF,eAAO,MAAM,8BAA8B,YAAa,aAAa,MAAM,KAAG,MAAM,EAInF,CAAA;AAED,KAAK,SAAS,GAAG;IACf,OAAO,IAAI,UAAU,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,WAAW,QAAS,GAAG,qBAGnC,CAAC;AAEF,eAAO,MAAM,aAAa,QAAS,GAAG,uBAOrC,CAAC;AAEF,eAAO,MAAM,oBAAoB,iBAAW,MAAM,GAAG,IAMpD,CAAA;AAED,eAAO,MAAM,mBAAmB,iBAAW,SAAS,GAAG,IAMtD,CAAA;AAED,eAAO,MAAM,wBAAwB,gCAOpC,CAAA"}