@sphereon/ssi-sdk-web3.headless-provider 0.33.1-next.2 → 0.33.1-next.68

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.
Files changed (41) hide show
  1. package/dist/index.cjs +652 -0
  2. package/dist/index.cjs.map +1 -0
  3. package/dist/index.d.cts +220 -0
  4. package/dist/index.d.ts +218 -9
  5. package/dist/index.js +619 -25
  6. package/dist/index.js.map +1 -1
  7. package/package.json +26 -16
  8. package/src/ethers-kms-signer.ts +4 -3
  9. package/dist/errors.d.ts +0 -11
  10. package/dist/errors.d.ts.map +0 -1
  11. package/dist/errors.js +0 -24
  12. package/dist/errors.js.map +0 -1
  13. package/dist/ethers-headless-provider.d.ts +0 -73
  14. package/dist/ethers-headless-provider.d.ts.map +0 -1
  15. package/dist/ethers-headless-provider.js +0 -276
  16. package/dist/ethers-headless-provider.js.map +0 -1
  17. package/dist/ethers-kms-signer.d.ts +0 -37
  18. package/dist/ethers-kms-signer.d.ts.map +0 -1
  19. package/dist/ethers-kms-signer.js +0 -183
  20. package/dist/ethers-kms-signer.js.map +0 -1
  21. package/dist/event-emitter.d.ts +0 -8
  22. package/dist/event-emitter.d.ts.map +0 -1
  23. package/dist/event-emitter.js +0 -44
  24. package/dist/event-emitter.js.map +0 -1
  25. package/dist/factory.d.ts +0 -6
  26. package/dist/factory.d.ts.map +0 -1
  27. package/dist/factory.js +0 -30
  28. package/dist/factory.js.map +0 -1
  29. package/dist/functions.d.ts +0 -5
  30. package/dist/functions.d.ts.map +0 -1
  31. package/dist/functions.js +0 -33
  32. package/dist/functions.js.map +0 -1
  33. package/dist/index.d.ts.map +0 -1
  34. package/dist/rpc-server.d.ts +0 -8
  35. package/dist/rpc-server.d.ts.map +0 -1
  36. package/dist/rpc-server.js +0 -99
  37. package/dist/rpc-server.js.map +0 -1
  38. package/dist/types.d.ts +0 -90
  39. package/dist/types.d.ts.map +0 -1
  40. package/dist/types.js +0 -25
  41. package/dist/types.js.map +0 -1
package/dist/index.cjs ADDED
@@ -0,0 +1,652 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from2, except, desc) => {
14
+ if (from2 && typeof from2 === "object" || typeof from2 === "function") {
15
+ for (let key of __getOwnPropNames(from2))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from2[key], enumerable: !(desc = __getOwnPropDesc(from2, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+
31
+ // src/index.ts
32
+ var index_exports = {};
33
+ __export(index_exports, {
34
+ EthersHeadlessProvider: () => EthersHeadlessProvider,
35
+ EthersKMSSigner: () => EthersKMSSigner,
36
+ EthersKMSSignerBuilder: () => EthersKMSSignerBuilder,
37
+ EventEmitter: () => EventEmitter,
38
+ Web3Method: () => Web3Method,
39
+ createRpcServer: () => createRpcServer,
40
+ createService: () => createService,
41
+ createServiceMethod: () => createServiceMethod,
42
+ createWeb3Provider: () => createWeb3Provider,
43
+ getAddressFromAgent: () => getAddressFromAgent,
44
+ getKey: () => getKey,
45
+ without: () => without
46
+ });
47
+ module.exports = __toCommonJS(index_exports);
48
+
49
+ // src/types.ts
50
+ var Web3Method = /* @__PURE__ */ function(Web3Method2) {
51
+ Web3Method2["RequestAccounts"] = "eth_requestAccounts";
52
+ Web3Method2["Accounts"] = "eth_accounts";
53
+ Web3Method2["SendTransaction"] = "eth_sendTransaction";
54
+ Web3Method2["SwitchEthereumChain"] = "wallet_switchEthereumChain";
55
+ Web3Method2["AddEthereumChain"] = "wallet_addEthereumChain";
56
+ Web3Method2["SignMessage"] = "personal_sign";
57
+ Web3Method2["SignTypedData"] = "eth_signTypedData";
58
+ Web3Method2["SignTypedDataV1"] = "eth_signTypedData_v1";
59
+ Web3Method2["SignTypedDataV3"] = "eth_signTypedData_v3";
60
+ Web3Method2["SignTypedDataV4"] = "eth_signTypedData_v4";
61
+ return Web3Method2;
62
+ }({});
63
+ function without(list, item) {
64
+ const idx = list.indexOf(item);
65
+ if (idx >= 0) {
66
+ return list.slice(0, idx).concat(list.slice(idx + 1));
67
+ }
68
+ return list;
69
+ }
70
+ __name(without, "without");
71
+
72
+ // src/ethers-headless-provider.ts
73
+ var import_strings = require("@ethersproject/strings");
74
+ var import_eth_sig_util = require("@metamask/eth-sig-util");
75
+ var import_strict = __toESM(require("assert/strict"), 1);
76
+ var import_ethers = require("ethers");
77
+ var import_rxjs = require("rxjs");
78
+
79
+ // src/errors.ts
80
+ var ErrorWithCode = class extends Error {
81
+ static {
82
+ __name(this, "ErrorWithCode");
83
+ }
84
+ code;
85
+ constructor(message, code) {
86
+ super(message), this.code = code;
87
+ return this;
88
+ }
89
+ };
90
+ var Deny = /* @__PURE__ */ __name(() => new ErrorWithCode("The user rejected the request.", 4001), "Deny");
91
+ var Unauthorized = /* @__PURE__ */ __name(() => new ErrorWithCode("The requested method and/or account has not been authorized by the user.", 4100), "Unauthorized");
92
+ var Disconnected = /* @__PURE__ */ __name(() => new ErrorWithCode("The Provider is disconnected from all chains.", 4900), "Disconnected");
93
+ var UnrecognizedChainID = /* @__PURE__ */ __name(() => new ErrorWithCode("Unrecognized chain ID. Try adding the chain using `wallet_addEthereumChain` first.", 4902), "UnrecognizedChainID");
94
+
95
+ // src/event-emitter.ts
96
+ var EventEmitter = class {
97
+ static {
98
+ __name(this, "EventEmitter");
99
+ }
100
+ listeners = /* @__PURE__ */ Object.create(null);
101
+ emit(eventName, ...args) {
102
+ this.listeners[eventName]?.forEach((listener) => {
103
+ listener(...args);
104
+ });
105
+ return true;
106
+ }
107
+ on(eventName, listener) {
108
+ this.listeners[eventName] ??= [];
109
+ this.listeners[eventName]?.push(listener);
110
+ return this;
111
+ }
112
+ off(eventName, listener) {
113
+ const listeners = this.listeners[eventName] ?? [];
114
+ for (const [i, listener_] of listeners.entries()) {
115
+ if (listener === listener_) {
116
+ listeners.splice(i, 1);
117
+ break;
118
+ }
119
+ }
120
+ return this;
121
+ }
122
+ once(eventName, listener) {
123
+ const cb = /* @__PURE__ */ __name((...args) => {
124
+ this.off(eventName, cb);
125
+ listener(...args);
126
+ }, "cb");
127
+ return this.on(eventName, cb);
128
+ }
129
+ };
130
+
131
+ // src/ethers-headless-provider.ts
132
+ var EthersHeadlessProvider = class extends EventEmitter {
133
+ static {
134
+ __name(this, "EthersHeadlessProvider");
135
+ }
136
+ chains;
137
+ _pendingRequests;
138
+ _signers;
139
+ _activeChainId;
140
+ _rpc;
141
+ _config;
142
+ _authorizedRequests;
143
+ constructor(signers, chains, config = {}) {
144
+ super(), this.chains = chains, this._pendingRequests = new import_rxjs.BehaviorSubject([]), this._signers = [], this._rpc = {}, this._authorizedRequests = {};
145
+ this._signers = signers;
146
+ this._activeChainId = chains[0].chainId;
147
+ this._config = Object.assign({
148
+ debug: true,
149
+ logger: console.log
150
+ }, config);
151
+ }
152
+ async request({ method, params }) {
153
+ if (this._config.debug) {
154
+ this._config.logger(JSON.stringify({
155
+ method,
156
+ params
157
+ }));
158
+ }
159
+ switch (method) {
160
+ case "eth_call":
161
+ case "eth_getBalance":
162
+ case "eth_estimateGas":
163
+ case "eth_blockNumber":
164
+ case "eth_getBlockByNumber":
165
+ case "eth_getTransactionByHash":
166
+ case "eth_getTransactionReceipt":
167
+ case "eth_feeHistory":
168
+ return this.getRpc().send(method, params);
169
+ case "eth_requestAccounts":
170
+ case "eth_accounts":
171
+ return this.waitAuthorization({
172
+ method,
173
+ params
174
+ }, async () => {
175
+ const { chainId } = this.getCurrentChain();
176
+ this.emit("connect", {
177
+ chainId
178
+ });
179
+ return Promise.all(this._signers.map((wallet) => wallet.getAddress()));
180
+ }, true, "eth_requestAccounts");
181
+ case "eth_chainId": {
182
+ const { chainId } = this.getCurrentChain();
183
+ return "0x" + chainId.toString(16);
184
+ }
185
+ case "net_version": {
186
+ const { chainId } = this.getCurrentChain();
187
+ return "" + chainId;
188
+ }
189
+ case "eth_sendTransaction": {
190
+ return this.waitAuthorization({
191
+ method,
192
+ params
193
+ }, async () => {
194
+ const wallet = this.getCurrentWallet();
195
+ const rpc = this.getRpc();
196
+ const { gas, from: from2, ...txRequest } = params[0];
197
+ const tx = await wallet.connect(rpc).sendTransaction(txRequest);
198
+ return tx.hash;
199
+ });
200
+ }
201
+ case "eth_sign": {
202
+ return this.waitAuthorization({
203
+ method,
204
+ params
205
+ }, async () => {
206
+ const wallet = this.getCurrentWallet();
207
+ const rpc = this.getRpc();
208
+ const message = params[1];
209
+ return await wallet.connect(rpc).signMessage(message);
210
+ });
211
+ }
212
+ case "wallet_addEthereumChain": {
213
+ return this.waitAuthorization({
214
+ method,
215
+ params
216
+ }, async () => {
217
+ const chainId = Number(params[0].chainId);
218
+ const { rpcUrl } = params[0];
219
+ this.addNetwork(chainId, rpcUrl);
220
+ return null;
221
+ });
222
+ }
223
+ case "wallet_switchEthereumChain": {
224
+ if (this._activeChainId === Number(params[0].chainId)) {
225
+ return null;
226
+ }
227
+ return this.waitAuthorization({
228
+ method,
229
+ params
230
+ }, async () => {
231
+ const chainId = Number(params[0].chainId);
232
+ this.switchNetwork(chainId);
233
+ return null;
234
+ });
235
+ }
236
+ case "personal_sign": {
237
+ return this.waitAuthorization({
238
+ method,
239
+ params
240
+ }, async () => {
241
+ const wallet = this.getCurrentWallet();
242
+ const address = await wallet.getAddress();
243
+ import_strict.default.equal(address, import_ethers.ethers.utils.getAddress(params[1]));
244
+ const message = (0, import_strings.toUtf8String)(params[0]);
245
+ const signature = await wallet.signMessage(message);
246
+ if (this._config.debug) {
247
+ this._config.logger("personal_sign", {
248
+ message,
249
+ signature
250
+ });
251
+ }
252
+ return signature;
253
+ });
254
+ }
255
+ case "eth_signTypedData":
256
+ case "eth_signTypedData_v1": {
257
+ return this.waitAuthorization({
258
+ method,
259
+ params
260
+ }, async () => {
261
+ const wallet = this.getCurrentWallet();
262
+ const address = await wallet.getAddress();
263
+ import_strict.default.equal(address, import_ethers.ethers.utils.getAddress(params[1]));
264
+ const msgParams = params[0];
265
+ return (0, import_eth_sig_util.signTypedData)({
266
+ privateKey: Buffer.from(wallet.privateKey.slice(2), "hex"),
267
+ data: msgParams,
268
+ version: import_eth_sig_util.SignTypedDataVersion.V1
269
+ });
270
+ });
271
+ }
272
+ case "eth_signTypedData_v3":
273
+ case "eth_signTypedData_v4": {
274
+ return this.waitAuthorization({
275
+ method,
276
+ params
277
+ }, async () => {
278
+ const wallet = this.getCurrentWallet();
279
+ const address = await wallet.getAddress();
280
+ import_strict.default.equal(address, import_ethers.ethers.utils.getAddress(params[0]));
281
+ const msgParams = JSON.parse(params[1]);
282
+ return (0, import_eth_sig_util.signTypedData)({
283
+ privateKey: Buffer.from(wallet.privateKey.slice(2), "hex"),
284
+ data: msgParams,
285
+ version: method === "eth_signTypedData_v4" ? import_eth_sig_util.SignTypedDataVersion.V4 : import_eth_sig_util.SignTypedDataVersion.V3
286
+ });
287
+ });
288
+ }
289
+ default:
290
+ return this.getRpc().send(method, params);
291
+ }
292
+ }
293
+ getCurrentWallet() {
294
+ const wallet = this._signers[0];
295
+ if (!wallet) {
296
+ throw Unauthorized();
297
+ }
298
+ return wallet;
299
+ }
300
+ waitAuthorization(requestInfo, task, permanentPermission = false, methodOverride) {
301
+ const method = methodOverride ?? requestInfo.method;
302
+ if (this._authorizedRequests[method]) {
303
+ return task();
304
+ }
305
+ return new Promise((resolve, reject) => {
306
+ const pendingRequest = {
307
+ requestInfo,
308
+ authorize: /* @__PURE__ */ __name(async () => {
309
+ if (permanentPermission) {
310
+ this._authorizedRequests[method] = true;
311
+ }
312
+ resolve(await task());
313
+ }, "authorize"),
314
+ reject(err) {
315
+ reject(err);
316
+ }
317
+ };
318
+ this._pendingRequests.next(this._pendingRequests.getValue().concat(pendingRequest));
319
+ });
320
+ }
321
+ consumeRequest(requestKind) {
322
+ return (0, import_rxjs.firstValueFrom)(this._pendingRequests.pipe((0, import_rxjs.switchMap)((a) => (0, import_rxjs.from)(a)), (0, import_rxjs.filter)((request) => {
323
+ return request.requestInfo.method === requestKind;
324
+ }), (0, import_rxjs.first)(), (0, import_rxjs.tap)((item) => {
325
+ this._pendingRequests.next(without(this._pendingRequests.getValue(), item));
326
+ })));
327
+ }
328
+ consumeAllRequests() {
329
+ const pendingRequests = this._pendingRequests.getValue();
330
+ this._pendingRequests.next([]);
331
+ return pendingRequests;
332
+ }
333
+ getPendingRequests() {
334
+ return this._pendingRequests.getValue().map((pendingRequest) => pendingRequest.requestInfo);
335
+ }
336
+ getPendingRequestCount(requestKind) {
337
+ const pendingRequests = this._pendingRequests.getValue();
338
+ if (!requestKind) {
339
+ return pendingRequests.length;
340
+ }
341
+ return pendingRequests.filter((pendingRequest) => pendingRequest.requestInfo.method === requestKind).length;
342
+ }
343
+ async authorize(requestKind) {
344
+ const pendingRequest = await this.consumeRequest(requestKind);
345
+ return pendingRequest.authorize();
346
+ }
347
+ async reject(requestKind, reason = Deny()) {
348
+ const pendingRequest = await this.consumeRequest(requestKind);
349
+ return pendingRequest.reject(reason);
350
+ }
351
+ authorizeAll() {
352
+ this.consumeAllRequests().forEach((request) => request.authorize());
353
+ }
354
+ rejectAll(reason = Deny()) {
355
+ this.consumeAllRequests().forEach((request) => request.reject(reason));
356
+ }
357
+ async changeAccounts(signers) {
358
+ this._signers = signers;
359
+ this.emit("accountsChanged", await Promise.all(this._signers.map((signer) => signer.getAddress())));
360
+ }
361
+ getCurrentChain() {
362
+ const chainConn = this.chains.find((chainConn2) => chainConn2.chainId === this._activeChainId);
363
+ if (!chainConn) {
364
+ throw Disconnected();
365
+ }
366
+ return chainConn;
367
+ }
368
+ getRpc() {
369
+ const chainConn = this.getCurrentChain();
370
+ let rpc = this._rpc[chainConn.chainId];
371
+ if (!rpc) {
372
+ rpc = new import_ethers.ethers.providers.JsonRpcProvider(chainConn.rpcUrl, chainConn.chainId);
373
+ this._rpc[chainConn.chainId] = rpc;
374
+ }
375
+ return rpc;
376
+ }
377
+ getNetwork() {
378
+ return this.getCurrentChain();
379
+ }
380
+ getNetworks() {
381
+ return this.chains;
382
+ }
383
+ addNetwork(chainId, rpcUrl) {
384
+ this.chains.push({
385
+ chainId,
386
+ rpcUrl
387
+ });
388
+ }
389
+ switchNetwork(chainId) {
390
+ const idx = this.chains.findIndex((connection) => connection.chainId === chainId);
391
+ if (idx < 0) {
392
+ throw UnrecognizedChainID();
393
+ }
394
+ if (chainId !== this._activeChainId) {
395
+ this._activeChainId = chainId;
396
+ this.emit("chainChanged", chainId);
397
+ }
398
+ }
399
+ };
400
+
401
+ // src/ethers-kms-signer.ts
402
+ var import_transactions = require("@ethersproject/transactions");
403
+ var import_ethers3 = require("ethers");
404
+ var import_utils = require("ethers/lib/utils");
405
+ var import_from_string = require("uint8arrays/from-string");
406
+
407
+ // src/functions.ts
408
+ var import_ethers2 = require("ethers");
409
+ async function getAddressFromAgent(context, keyRef) {
410
+ const publicKeyHex = await getKey(context, keyRef).then((key) => key?.publicKeyHex);
411
+ if (!publicKeyHex) {
412
+ throw Error(`Could not retrieve public hex key for ${keyRef}`);
413
+ }
414
+ const address = import_ethers2.ethers.utils.computeAddress(`${publicKeyHex.startsWith("0x") ? "" : "0x"}${publicKeyHex}`);
415
+ if (!address || !address.startsWith("0x")) {
416
+ throw Error(`Invalid address ${address} public key for key ${publicKeyHex}`);
417
+ }
418
+ return address;
419
+ }
420
+ __name(getAddressFromAgent, "getAddressFromAgent");
421
+ async function getKey(context, keyRef) {
422
+ return await context.agent.keyManagerGet({
423
+ kid: keyRef.kid
424
+ });
425
+ }
426
+ __name(getKey, "getKey");
427
+
428
+ // src/ethers-kms-signer.ts
429
+ var EthersKMSSignerBuilder = class {
430
+ static {
431
+ __name(this, "EthersKMSSignerBuilder");
432
+ }
433
+ context;
434
+ keyRef;
435
+ provider;
436
+ withContext(context) {
437
+ this.context = context;
438
+ return this;
439
+ }
440
+ withKid(kid) {
441
+ this.keyRef = {
442
+ kid
443
+ };
444
+ return this;
445
+ }
446
+ withKeyRef(keyRef) {
447
+ if (typeof keyRef === "string") {
448
+ return this.withKid(keyRef);
449
+ }
450
+ this.keyRef = keyRef;
451
+ return this;
452
+ }
453
+ withProvider(provider) {
454
+ this.provider = provider;
455
+ return this;
456
+ }
457
+ build() {
458
+ if (!this.context) {
459
+ throw Error("Agent context needs to be provided");
460
+ }
461
+ if (!this.keyRef) {
462
+ throw Error("Keyref needs to be provided");
463
+ }
464
+ return new EthersKMSSigner({
465
+ context: this.context,
466
+ keyRef: this.keyRef,
467
+ provider: this.provider
468
+ });
469
+ }
470
+ };
471
+ var EthersKMSSigner = class _EthersKMSSigner extends import_ethers3.Signer {
472
+ static {
473
+ __name(this, "EthersKMSSigner");
474
+ }
475
+ context;
476
+ keyRef;
477
+ constructor({ provider, context, keyRef }) {
478
+ super();
479
+ (0, import_utils.defineReadOnly)(this, "provider", provider || void 0);
480
+ this.context = context;
481
+ this.keyRef = keyRef;
482
+ }
483
+ async getAddress() {
484
+ return await getAddressFromAgent(this.context, this.keyRef);
485
+ }
486
+ async signTransaction(transaction) {
487
+ const { from: from2, ...tx } = await transaction;
488
+ return this.context.agent.keyManagerSign({
489
+ algorithm: "eth_signTransaction",
490
+ keyRef: this.keyRef.kid,
491
+ // keyRef: this.keyRef,
492
+ // @ts-ignore
493
+ data: (0, import_utils.arrayify)((0, import_transactions.serialize)(tx))
494
+ });
495
+ }
496
+ async signRaw(message) {
497
+ return await this.context.agent.keyManagerSign({
498
+ algorithm: "eth_rawSign",
499
+ keyRef: this.keyRef.kid,
500
+ encoding: "base16",
501
+ // @ts-ignore // KMS accepts uint8arrays but interface does not expose it
502
+ data: message
503
+ });
504
+ }
505
+ async signMessage(message) {
506
+ return await this.context.agent.keyManagerSign({
507
+ algorithm: "eth_signMessage",
508
+ keyRef: this.keyRef.kid,
509
+ encoding: "base16",
510
+ // @ts-ignore // KMS accepts uint8arrays but interface does not expose it
511
+ data: message
512
+ });
513
+ }
514
+ async _signTypedData(domain, types, value) {
515
+ const jsonData = {
516
+ domain,
517
+ types,
518
+ message: value
519
+ };
520
+ return this.context.agent.keyManagerSign({
521
+ algorithm: "eth_signTypedData",
522
+ keyRef: this.keyRef.kid,
523
+ // @ts-ignore // KMS accepts uint8arrays but interface does not expose it
524
+ data: (0, import_from_string.fromString)(JSON.stringify(jsonData))
525
+ });
526
+ }
527
+ connect(provider) {
528
+ return new _EthersKMSSigner({
529
+ provider,
530
+ context: this.context,
531
+ keyRef: this.keyRef
532
+ });
533
+ }
534
+ };
535
+
536
+ // src/factory.ts
537
+ function relayEvents(eventEmitter, execute) {
538
+ const emit_ = eventEmitter.emit;
539
+ eventEmitter.emit = (eventName, ...args) => {
540
+ void execute("emit", eventName, ...args);
541
+ return emit_.apply(eventEmitter, [
542
+ eventName,
543
+ ...args
544
+ ]);
545
+ };
546
+ }
547
+ __name(relayEvents, "relayEvents");
548
+ function createWeb3Provider(signers, chainId, rpcUrl, evaluate = async () => {
549
+ }, config) {
550
+ const chainIds = Array.isArray(chainId) ? chainId : [
551
+ chainId
552
+ ];
553
+ const chains = chainIds.map((chainId2) => {
554
+ return {
555
+ chainId: chainId2,
556
+ rpcUrl
557
+ };
558
+ });
559
+ const web3Provider = new EthersHeadlessProvider(signers, chains, config);
560
+ relayEvents(web3Provider, evaluate);
561
+ return web3Provider;
562
+ }
563
+ __name(createWeb3Provider, "createWeb3Provider");
564
+
565
+ // src/rpc-server.ts
566
+ var import_ssi_express_support = require("@sphereon/ssi-express-support");
567
+ var import_express = require("express");
568
+ function createRpcServer(provider, expressSupport, opts) {
569
+ const express = expressSupport.express;
570
+ const router = (0, import_express.Router)();
571
+ const path = opts?.path ?? "/web3/rpc";
572
+ console.log(`RPC server will use basePath ${opts?.basePath ?? "/"} and path ${path}`);
573
+ router.post(path, (req, res, next) => {
574
+ console.log(`REQ ${req.body?.method}:\r
575
+ ${JSON.stringify(req.body, null, 2)}\r
576
+ ===`);
577
+ next();
578
+ }, async (req, res, next) => {
579
+ try {
580
+ const method = req.body.method;
581
+ const params = req.body.params;
582
+ const id = req.body.id;
583
+ if (req.body.jsonrpc !== "2.0") {
584
+ console.log("No valid JSON RPC call received", JSON.stringify(req.body));
585
+ return (0, import_ssi_express_support.sendErrorResponse)(res, 200, {
586
+ id: req.body.id,
587
+ jsonrpc: "2.0",
588
+ error: "No valid JSON RPC call received. No jsonrp version supplied",
589
+ code: -32600
590
+ });
591
+ } else if (!id || !method) {
592
+ console.log("No valid JSON RPC call received", JSON.stringify(req.body));
593
+ return (0, import_ssi_express_support.sendErrorResponse)(res, 200, {
594
+ id: req.body.id,
595
+ jsonrpc: "2.0",
596
+ error: "No valid JSON RPC call received",
597
+ code: -32600
598
+ });
599
+ }
600
+ const result = provider.request({
601
+ method,
602
+ params
603
+ });
604
+ provider.authorizeAll();
605
+ const respBody = {
606
+ id,
607
+ jsonrpc: "2.0",
608
+ result: await result
609
+ };
610
+ res.json(respBody);
611
+ console.log(`RESPONSE for ${method}:\r
612
+ ${JSON.stringify(respBody, null, 2)}`);
613
+ } catch (error) {
614
+ console.log(error.message);
615
+ let msg = error.message;
616
+ if (`body` in error) {
617
+ msg = error.body;
618
+ return (0, import_ssi_express_support.sendErrorResponse)(res, 200, msg);
619
+ } else {
620
+ return (0, import_ssi_express_support.sendErrorResponse)(res, 200, {
621
+ id: req.body.id,
622
+ jsonrpc: "2.0",
623
+ error: msg,
624
+ code: error.code ?? -32e3
625
+ });
626
+ }
627
+ }
628
+ return next();
629
+ });
630
+ express.use(opts?.basePath ?? "", router);
631
+ }
632
+ __name(createRpcServer, "createRpcServer");
633
+ function createServiceMethod(method, service, provider) {
634
+ service[method] = async (params) => {
635
+ const result = provider.request({
636
+ method,
637
+ params
638
+ });
639
+ provider.authorizeAll();
640
+ return await result;
641
+ };
642
+ }
643
+ __name(createServiceMethod, "createServiceMethod");
644
+ function createService(provider) {
645
+ const service = {};
646
+ for (const method of Object.values(Web3Method)) {
647
+ createServiceMethod(method, service, provider);
648
+ }
649
+ return service;
650
+ }
651
+ __name(createService, "createService");
652
+ //# sourceMappingURL=index.cjs.map