@effectstream/frontend-sdk 0.100.17 → 0.100.19

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 (3) hide show
  1. package/build.ts +4 -0
  2. package/dist/mod.js +632 -57
  3. package/package.json +2 -2
package/build.ts CHANGED
@@ -22,6 +22,10 @@ function collectExternals(pkgPath: string) {
22
22
  }
23
23
  }
24
24
  }
25
+ // Peer deps are never bundled — treat all of them as external.
26
+ for (const name of Object.keys(pkg.peerDependencies ?? {})) {
27
+ externalDeps.add(name);
28
+ }
25
29
  }
26
30
 
27
31
  collectExternals(resolve(import.meta.dir, "package.json"));
package/dist/mod.js CHANGED
@@ -18943,14 +18943,41 @@ class MidnightCrypto {
18943
18943
  verifyAddress = (address) => {
18944
18944
  return Value7.Check(TypeboxHelpers.Midnight.Address, address);
18945
18945
  };
18946
- verifySignature = async (signerAddress, message, signature) => {
18946
+ verifySignature = async (signerAddress, message, sigStruct) => {
18947
18947
  try {
18948
- if (this.verifyAddress(signerAddress) && this.isMidnightSignature(signature)) {
18949
- console.log("TODO: MIDNIGHT SIGNATURE NYI:", { signerAddress, message, signature });
18948
+ if (!this.verifyAddress(signerAddress))
18949
+ return false;
18950
+ if (typeof sigStruct !== "string")
18951
+ return false;
18952
+ if (!this.isMidnightSignature(sigStruct))
18953
+ return false;
18954
+ const parts = sigStruct.split("|");
18955
+ if (parts.length !== 2)
18956
+ return false;
18957
+ const [signature, verifyingKey] = parts;
18958
+ if (!signature || !verifyingKey)
18959
+ return false;
18960
+ const [ledgerMod, addrMod] = await Promise.all([
18961
+ import("@midnight-ntwrk/ledger-v8"),
18962
+ import("@midnight-ntwrk/wallet-sdk-address-format")
18963
+ ]);
18964
+ const expectedHexAddress = ledgerMod.addressFromKey(verifyingKey).toLowerCase();
18965
+ let decodedHex;
18966
+ try {
18967
+ const bech323 = addrMod.MidnightBech32m.parse(signerAddress);
18968
+ const decoded = addrMod.UnshieldedAddress.codec.decode(bech323.network, bech323);
18969
+ decodedHex = decoded.hexString.toLowerCase();
18970
+ } catch {
18950
18971
  return false;
18951
18972
  }
18952
- } catch {}
18953
- return false;
18973
+ if (decodedHex !== expectedHexAddress)
18974
+ return false;
18975
+ const messageBytes = new TextEncoder().encode(message);
18976
+ return ledgerMod.verifySignature(verifyingKey, messageBytes, signature);
18977
+ } catch (err) {
18978
+ console.error("[MidnightCrypto] error verifying signature:", err);
18979
+ return false;
18980
+ }
18954
18981
  };
18955
18982
  decodeAddress(address) {
18956
18983
  return Value7.Decode(TypeboxHelpers.Midnight.Address, address);
@@ -19399,6 +19426,125 @@ class EthersEvmProvider {
19399
19426
  };
19400
19427
  }
19401
19428
 
19429
+ // ../effectstream-sdk/wallets/src/evm/viem.ts
19430
+ import {
19431
+ createPublicClient as createPublicClient2,
19432
+ createWalletClient as createWalletClient2,
19433
+ http as http3
19434
+ } from "viem";
19435
+ import { privateKeyToAccount as privateKeyToAccount2 } from "viem/accounts";
19436
+ class ViemConnector {
19437
+ provider;
19438
+ static INSTANCE = undefined;
19439
+ static instance() {
19440
+ if (ViemConnector.INSTANCE == null) {
19441
+ ViemConnector.INSTANCE = new ViemConnector;
19442
+ }
19443
+ return ViemConnector.INSTANCE;
19444
+ }
19445
+ connectFromPrivateKey = async (args) => {
19446
+ const account = privateKeyToAccount2(args.privateKey);
19447
+ const client = createWalletClient2({
19448
+ account,
19449
+ chain: args.chain,
19450
+ transport: http3(args.rpcUrl)
19451
+ });
19452
+ this.provider = await ViemEvmProvider.init(client, account);
19453
+ return this.provider;
19454
+ };
19455
+ connectExternal = async (conn) => {
19456
+ const account = conn.api.account;
19457
+ if (account == null) {
19458
+ throw new Error("ViemConnector.connectExternal: WalletClient.account is null. Build the client with createWalletClient({ account, ... }).");
19459
+ }
19460
+ this.provider = await ViemEvmProvider.init(conn.api, account, conn.metadata);
19461
+ return this.provider;
19462
+ };
19463
+ getProvider = () => {
19464
+ return this.provider;
19465
+ };
19466
+ getOrThrowProvider = () => {
19467
+ if (this.provider == null) {
19468
+ throw new Error("ViemConnector not initialized yet");
19469
+ }
19470
+ return this.provider;
19471
+ };
19472
+ isConnected = () => {
19473
+ return this.provider != null;
19474
+ };
19475
+ }
19476
+
19477
+ class ViemEvmProvider {
19478
+ conn;
19479
+ account;
19480
+ address;
19481
+ constructor(conn, account, address) {
19482
+ this.conn = conn;
19483
+ this.account = account;
19484
+ this.address = address;
19485
+ }
19486
+ static init = async (client, account, metadata) => {
19487
+ const conn = {
19488
+ api: client,
19489
+ metadata: metadata ?? {
19490
+ name: "viem-local",
19491
+ displayName: "Viem (local)"
19492
+ }
19493
+ };
19494
+ return new ViemEvmProvider(conn, account, account.address);
19495
+ };
19496
+ getConnection = () => {
19497
+ return this.conn;
19498
+ };
19499
+ getAddress = () => {
19500
+ return {
19501
+ type: 0 /* EVM */,
19502
+ address: this.address.toLowerCase()
19503
+ };
19504
+ };
19505
+ signMessage = async (message) => {
19506
+ if (this.account == null) {
19507
+ throw new Error("ViemEvmProvider.signMessage: account is missing");
19508
+ }
19509
+ return await this.conn.api.signMessage({
19510
+ account: this.account,
19511
+ message
19512
+ });
19513
+ };
19514
+ sendTransaction = async (tx) => {
19515
+ if (this.account == null) {
19516
+ throw new Error("ViemEvmProvider.sendTransaction: account is missing");
19517
+ }
19518
+ const toBigInt = (h) => h == null ? undefined : BigInt(h);
19519
+ const hash = await this.conn.api.sendTransaction({
19520
+ account: this.account,
19521
+ to: tx.to,
19522
+ data: tx.data,
19523
+ value: toBigInt(tx.value),
19524
+ gas: toBigInt(tx.gas),
19525
+ gasPrice: toBigInt(tx.gasPrice),
19526
+ maxFeePerGas: toBigInt(tx.maxFeePerGas),
19527
+ maxPriorityFeePerGas: toBigInt(tx.maxPriorityFeePerGas)
19528
+ });
19529
+ if (typeof hash !== "string") {
19530
+ throw new Error(`[ViemEvmProvider.sendTransaction] expected string tx hash, got ${typeof hash}`);
19531
+ }
19532
+ const chain = this.conn.api.chain;
19533
+ const transport = this.conn.api.transport;
19534
+ const publicClient = createPublicClient2({
19535
+ chain: chain ?? undefined,
19536
+ transport: http3(transport?.url)
19537
+ });
19538
+ const receipt = await publicClient.waitForTransactionReceipt({
19539
+ hash
19540
+ });
19541
+ if (receipt.status !== "success") {
19542
+ throw new Error(`[ViemEvmProvider.sendTransaction] tx ${hash} reverted on chain (status=${receipt.status})`);
19543
+ }
19544
+ return { txHash: hash };
19545
+ };
19546
+ }
19547
+
19402
19548
  // ../effectstream-sdk/wallets/src/evm/injected.ts
19403
19549
  import { utf8ToHex as utf8ToHex3 } from "web3-utils";
19404
19550
  import * as CHAINS from "viem/chains";
@@ -19824,8 +19970,102 @@ class CardanoProvider {
19824
19970
  };
19825
19971
  }
19826
19972
 
19827
- // ../effectstream-sdk/wallets/src/polkadot/polkadot.ts
19973
+ // ../effectstream-sdk/wallets/src/cardano/local.ts
19828
19974
  import { utf8ToHex as utf8ToHex5 } from "web3-utils";
19975
+
19976
+ class CardanoLocalConnector {
19977
+ provider;
19978
+ static INSTANCE = undefined;
19979
+ static instance() {
19980
+ if (CardanoLocalConnector.INSTANCE == null) {
19981
+ CardanoLocalConnector.INSTANCE = new CardanoLocalConnector;
19982
+ }
19983
+ return CardanoLocalConnector.INSTANCE;
19984
+ }
19985
+ connectFromSeed = async (args) => {
19986
+ const lucidMod = await import("@lucid-evolution/lucid").catch(() => {
19987
+ throw new Error("@lucid-evolution/lucid is required for WalletMode.CardanoLocal. Install it as a peer dependency.");
19988
+ });
19989
+ const utilsMod = await import("@lucid-evolution/utils").catch(() => {
19990
+ throw new Error("@lucid-evolution/utils is required for WalletMode.CardanoLocal. Install it as a peer dependency.");
19991
+ });
19992
+ const seedPhrase = args.seedPhrase ?? utilsMod.generateSeedPhrase();
19993
+ let provider = args.provider;
19994
+ if (provider == null) {
19995
+ const providerMod = await import("@lucid-evolution/provider").catch(() => {
19996
+ throw new Error("@lucid-evolution/provider is required when no provider is supplied to CardanoLocal.");
19997
+ });
19998
+ provider = new providerMod.Emulator([]);
19999
+ }
20000
+ const lucid = await lucidMod.Lucid(provider, args.network);
20001
+ lucid.selectWallet.fromSeed(seedPhrase);
20002
+ const bech32Address = await lucid.wallet().address();
20003
+ const hexAddress = await addressToHex(lucid, bech32Address);
20004
+ const api = {
20005
+ signData: async (address, payloadHex) => {
20006
+ return await lucid.wallet().signMessage(address, payloadHex);
20007
+ },
20008
+ getUsedAddresses: async () => [hexAddress],
20009
+ lucid,
20010
+ seedPhrase
20011
+ };
20012
+ const conn = {
20013
+ api,
20014
+ metadata: {
20015
+ name: "cardano-local",
20016
+ displayName: "Cardano (local seed)"
20017
+ }
20018
+ };
20019
+ this.provider = new CardanoLocalProvider(conn, {
20020
+ bech32: bech32Address,
20021
+ hex: hexAddress
20022
+ });
20023
+ return this.provider;
20024
+ };
20025
+ getProvider = () => {
20026
+ return this.provider;
20027
+ };
20028
+ getOrThrowProvider = () => {
20029
+ if (this.provider == null) {
20030
+ throw new Error("CardanoLocalConnector not initialized yet");
20031
+ }
20032
+ return this.provider;
20033
+ };
20034
+ isConnected = () => {
20035
+ return this.provider != null;
20036
+ };
20037
+ }
20038
+
20039
+ class CardanoLocalProvider {
20040
+ conn;
20041
+ address;
20042
+ constructor(conn, address) {
20043
+ this.conn = conn;
20044
+ this.address = address;
20045
+ }
20046
+ getConnection = () => {
20047
+ return this.conn;
20048
+ };
20049
+ getAddress = () => {
20050
+ return {
20051
+ type: 1 /* CARDANO */,
20052
+ address: this.address.bech32
20053
+ };
20054
+ };
20055
+ signMessage = async (message) => {
20056
+ const hexMessage = utf8ToHex5(message).slice(2);
20057
+ const { signature, key } = await this.conn.api.signData(this.address.bech32, hexMessage);
20058
+ return `${signature}+${key}`;
20059
+ };
20060
+ }
20061
+ async function addressToHex(lucid, bech32Address) {
20062
+ const utilsMod = await import("@lucid-evolution/utils");
20063
+ const details = utilsMod.getAddressDetails(bech32Address);
20064
+ return details.address.hex;
20065
+ }
20066
+
20067
+ // ../effectstream-sdk/wallets/src/polkadot/polkadot.ts
20068
+ import { utf8ToHex as utf8ToHex6 } from "web3-utils";
19829
20069
  class PolkadotConnector {
19830
20070
  provider;
19831
20071
  static INSTANCE = undefined;
@@ -19936,7 +20176,7 @@ class PolkadotProvider {
19936
20176
  if (this.conn.api.signer.signRaw == null) {
19937
20177
  throw new Error(`[polkadot] extension ${this.conn.metadata.name} does not support signRaw`);
19938
20178
  }
19939
- const hexMessage = utf8ToHex5(message);
20179
+ const hexMessage = utf8ToHex6(message);
19940
20180
  const { signature } = await this.conn.api.signer.signRaw({
19941
20181
  address: this.getAddress().address,
19942
20182
  data: hexMessage,
@@ -20067,7 +20307,7 @@ class MinaProvider {
20067
20307
 
20068
20308
  // ../effectstream-sdk/wallets/src/avail/avail.ts
20069
20309
  init_buffer();
20070
- import { utf8ToHex as utf8ToHex6 } from "web3-utils";
20310
+ import { utf8ToHex as utf8ToHex7 } from "web3-utils";
20071
20311
  import { u8aToHex as u8aToHex2 } from "@polkadot/util";
20072
20312
 
20073
20313
  class AvailConnector {
@@ -20126,7 +20366,7 @@ class AvailJsProvider {
20126
20366
  };
20127
20367
  };
20128
20368
  signMessage = async (message) => {
20129
- const hexMessage = utf8ToHex6(message);
20369
+ const hexMessage = utf8ToHex7(message);
20130
20370
  const buffer = Buffer2.from(hexMessage.slice(2), "hex");
20131
20371
  const signature = this.conn.api.keyring.getPairs()[0].sign(buffer);
20132
20372
  return u8aToHex2(signature);
@@ -20230,7 +20470,7 @@ class MidnightProvider {
20230
20470
  this.address = address;
20231
20471
  }
20232
20472
  static init = async (conn) => {
20233
- const hexAddress = await MidnightProvider.fetchAddress(conn);
20473
+ const hexAddress = await MidnightProvider.fetchAddress(conn, { type: "unshielded" });
20234
20474
  return new MidnightProvider(conn, hexAddress);
20235
20475
  };
20236
20476
  getConnection() {
@@ -20241,7 +20481,7 @@ class MidnightProvider {
20241
20481
  encoding: "text",
20242
20482
  keyType
20243
20483
  });
20244
- return signature.signature;
20484
+ return `${signature.signature}|${signature.verifyingKey}`;
20245
20485
  };
20246
20486
  getAddress() {
20247
20487
  return {
@@ -20249,12 +20489,31 @@ class MidnightProvider {
20249
20489
  address: this.address
20250
20490
  };
20251
20491
  }
20252
- static fetchAddress = async (conn) => {
20253
- const addresses = await conn.api.getShieldedAddresses();
20254
- if (!addresses?.shieldedAddress) {
20255
- throw new Error("Midnight wallet did not return a shielded address");
20492
+ static fetchAddress = async (conn, options = {}) => {
20493
+ const type = options.type ?? "shielded";
20494
+ switch (type) {
20495
+ case "shielded": {
20496
+ const res = await conn.api.getShieldedAddresses();
20497
+ if (!res?.shieldedAddress) {
20498
+ throw new Error("Midnight wallet did not return a shielded address");
20499
+ }
20500
+ return res.shieldedAddress;
20501
+ }
20502
+ case "unshielded": {
20503
+ const res = await conn.api.getUnshieldedAddress();
20504
+ if (!res?.unshieldedAddress) {
20505
+ throw new Error("Midnight wallet did not return an unshielded address");
20506
+ }
20507
+ return res.unshieldedAddress;
20508
+ }
20509
+ case "dust": {
20510
+ const res = await conn.api.getDustAddress();
20511
+ if (!res?.dustAddress) {
20512
+ throw new Error("Midnight wallet did not return a dust address");
20513
+ }
20514
+ return res.dustAddress;
20515
+ }
20256
20516
  }
20257
- return addresses.shieldedAddress;
20258
20517
  };
20259
20518
  }
20260
20519
  var isInitialApi = (api) => {
@@ -20268,37 +20527,210 @@ var connectWithNetwork = async (api, networkId) => {
20268
20527
  return await connect(networkId);
20269
20528
  };
20270
20529
 
20530
+ // ../effectstream-sdk/wallets/src/midnight/local.ts
20531
+ init_buffer();
20532
+ class MidnightLocalConnector {
20533
+ provider;
20534
+ static INSTANCE = undefined;
20535
+ static instance() {
20536
+ if (MidnightLocalConnector.INSTANCE == null) {
20537
+ MidnightLocalConnector.INSTANCE = new MidnightLocalConnector;
20538
+ }
20539
+ return MidnightLocalConnector.INSTANCE;
20540
+ }
20541
+ connectFromSeed = async (args) => {
20542
+ if (args.networkUrls != null) {
20543
+ return await this.connectWithFacade(args, args.networkUrls);
20544
+ }
20545
+ return await this.connectSigningOnly(args);
20546
+ };
20547
+ connectSigningOnly = async (args) => {
20548
+ const { hdMod, keystoreMod } = await loadKeystoreDeps();
20549
+ const seed = args.seed ?? generateRandomHexSeed(32);
20550
+ const unshieldedSeed = deriveUnshieldedSeed(hdMod, seed, hdMod.Roles.NightExternal);
20551
+ const unshieldedKeystore = keystoreMod.createKeystore(unshieldedSeed, args.networkId);
20552
+ const unshieldedAddress = unshieldedKeystore.getBech32Address().asString();
20553
+ const verifyingKey = String(unshieldedKeystore.getPublicKey());
20554
+ const api = {
20555
+ signData: async (data, options) => {
20556
+ const bytes = options.encoding === "hex" ? Buffer2.from(data, "hex") : Buffer2.from(data, "utf-8");
20557
+ const signature = unshieldedKeystore.signData(bytes);
20558
+ return {
20559
+ data,
20560
+ signature: String(signature),
20561
+ verifyingKey
20562
+ };
20563
+ },
20564
+ getShieldedAddresses: async () => {
20565
+ throw new Error("MidnightLocal signing-only mode does not expose a shielded address. Pass `networkUrls` to connectFromSeed to build the full WalletFacade.");
20566
+ },
20567
+ seed,
20568
+ verifyingKey,
20569
+ unshieldedAddress
20570
+ };
20571
+ const conn = {
20572
+ api,
20573
+ metadata: {
20574
+ name: "midnight-local",
20575
+ displayName: "Midnight (local seed)"
20576
+ }
20577
+ };
20578
+ this.provider = new MidnightLocalProvider(conn, unshieldedAddress, unshieldedKeystore);
20579
+ return this.provider;
20580
+ };
20581
+ connectWithFacade = async (args, networkUrls) => {
20582
+ const contractsMod = await import("@effectstream/midnight-contracts/wallet-info").catch(() => {
20583
+ throw new Error("@effectstream/midnight-contracts is required when `networkUrls` is passed to MidnightLocal.connectFromSeed. Install it as a peer dependency.");
20584
+ });
20585
+ const { hdMod, keystoreMod } = await loadKeystoreDeps();
20586
+ const seed = args.seed ?? generateRandomHexSeed(32);
20587
+ const unshieldedSeed = deriveUnshieldedSeed(hdMod, seed, hdMod.Roles.NightExternal);
20588
+ const unshieldedKeystore = keystoreMod.createKeystore(unshieldedSeed, args.networkId);
20589
+ const verifyingKey = String(unshieldedKeystore.getPublicKey());
20590
+ const fullNetworkUrls = {
20591
+ indexer: networkUrls.indexer,
20592
+ indexerWS: networkUrls.indexerWS,
20593
+ node: networkUrls.node,
20594
+ proofServer: networkUrls.proofServer,
20595
+ id: networkUrls.id ?? args.networkId
20596
+ };
20597
+ const walletResult = await contractsMod.buildWalletFacade(fullNetworkUrls, seed, args.networkId, args.syncMode ?? "all");
20598
+ const initialShielded = await contractsMod.getInitialShieldedState(walletResult.wallet.shielded);
20599
+ const shieldedAddress = initialShielded.address.coinPublicKeyString();
20600
+ const api = {
20601
+ signData: async (data, options) => {
20602
+ const bytes = options.encoding === "hex" ? Buffer2.from(data, "hex") : Buffer2.from(data, "utf-8");
20603
+ const signature = unshieldedKeystore.signData(bytes);
20604
+ return {
20605
+ data,
20606
+ signature: String(signature),
20607
+ verifyingKey
20608
+ };
20609
+ },
20610
+ getShieldedAddresses: async () => ({ shieldedAddress }),
20611
+ seed,
20612
+ verifyingKey,
20613
+ unshieldedAddress: walletResult.unshieldedAddress,
20614
+ walletFacade: walletResult.wallet,
20615
+ dustAddress: walletResult.dustAddress,
20616
+ shieldedAddress,
20617
+ walletResult
20618
+ };
20619
+ const conn = {
20620
+ api,
20621
+ metadata: {
20622
+ name: "midnight-local",
20623
+ displayName: "Midnight (local seed, facade)"
20624
+ }
20625
+ };
20626
+ this.provider = new MidnightLocalProvider(conn, walletResult.unshieldedAddress, unshieldedKeystore);
20627
+ return this.provider;
20628
+ };
20629
+ getProvider = () => {
20630
+ return this.provider;
20631
+ };
20632
+ getOrThrowProvider = () => {
20633
+ if (this.provider == null) {
20634
+ throw new Error("MidnightLocalConnector not initialized yet");
20635
+ }
20636
+ return this.provider;
20637
+ };
20638
+ isConnected = () => {
20639
+ return this.provider != null;
20640
+ };
20641
+ }
20642
+
20643
+ class MidnightLocalProvider {
20644
+ conn;
20645
+ address;
20646
+ unshieldedKeystore;
20647
+ constructor(conn, address, unshieldedKeystore) {
20648
+ this.conn = conn;
20649
+ this.address = address;
20650
+ this.unshieldedKeystore = unshieldedKeystore;
20651
+ }
20652
+ getConnection = () => {
20653
+ return this.conn;
20654
+ };
20655
+ getAddress = () => {
20656
+ return {
20657
+ type: 5 /* MIDNIGHT */,
20658
+ address: this.address
20659
+ };
20660
+ };
20661
+ signMessage = async (message) => {
20662
+ const signed = await this.conn.api.signData(message, { encoding: "text", keyType: "unshielded" });
20663
+ return `${signed.signature}|${signed.verifyingKey}`;
20664
+ };
20665
+ getUnshieldedKeystore = () => this.unshieldedKeystore;
20666
+ }
20667
+ async function loadKeystoreDeps() {
20668
+ const hdMod = await import("@midnight-ntwrk/wallet-sdk-hd").catch(() => {
20669
+ throw new Error("@midnight-ntwrk/wallet-sdk-hd is required for WalletMode.MidnightLocal.");
20670
+ });
20671
+ const keystoreMod = await import("@midnight-ntwrk/wallet-sdk-unshielded-wallet").catch(() => {
20672
+ throw new Error("@midnight-ntwrk/wallet-sdk-unshielded-wallet is required for WalletMode.MidnightLocal.");
20673
+ });
20674
+ return { hdMod, keystoreMod };
20675
+ }
20676
+ function deriveUnshieldedSeed(hdMod, seedHex, role) {
20677
+ const seedBuffer = Buffer2.from(seedHex, "hex");
20678
+ const hdResult = hdMod.HDWallet.fromSeed(seedBuffer);
20679
+ if (hdResult.type !== "seedOk") {
20680
+ throw new Error(`HDWallet.fromSeed failed: ${hdResult.type}`);
20681
+ }
20682
+ const derivation = hdResult.hdWallet.selectAccount(0).selectRole(role).deriveKeyAt(0);
20683
+ if (derivation.type !== "keyDerived") {
20684
+ throw new Error(`HDWallet.deriveKeyAt failed: ${derivation.type}`);
20685
+ }
20686
+ return Buffer2.from(derivation.key);
20687
+ }
20688
+ function generateRandomHexSeed(byteLength2) {
20689
+ const bytes = new Uint8Array(byteLength2);
20690
+ crypto.getRandomValues(bytes);
20691
+ return Array.from(bytes).map((b) => b.toString(16).padStart(2, "0")).join("");
20692
+ }
20693
+
20271
20694
  // ../effectstream-sdk/wallets/src/utils.ts
20272
20695
  var WalletMode;
20273
20696
  ((WalletMode2) => {
20274
20697
  WalletMode2[WalletMode2["EvmInjected"] = 0] = "EvmInjected";
20275
20698
  WalletMode2[WalletMode2["EvmEthers"] = 1] = "EvmEthers";
20276
- WalletMode2[WalletMode2["Midnight"] = 2] = "Midnight";
20277
- WalletMode2[WalletMode2["Cardano"] = 3] = "Cardano";
20278
- WalletMode2[WalletMode2["Polkadot"] = 4] = "Polkadot";
20279
- WalletMode2[WalletMode2["Algorand"] = 5] = "Algorand";
20280
- WalletMode2[WalletMode2["Mina"] = 6] = "Mina";
20281
- WalletMode2[WalletMode2["AvailJs"] = 7] = "AvailJs";
20699
+ WalletMode2[WalletMode2["EvmViem"] = 2] = "EvmViem";
20700
+ WalletMode2[WalletMode2["Midnight"] = 3] = "Midnight";
20701
+ WalletMode2[WalletMode2["MidnightLocal"] = 4] = "MidnightLocal";
20702
+ WalletMode2[WalletMode2["Cardano"] = 5] = "Cardano";
20703
+ WalletMode2[WalletMode2["CardanoLocal"] = 6] = "CardanoLocal";
20704
+ WalletMode2[WalletMode2["Polkadot"] = 7] = "Polkadot";
20705
+ WalletMode2[WalletMode2["Algorand"] = 8] = "Algorand";
20706
+ WalletMode2[WalletMode2["Mina"] = 9] = "Mina";
20707
+ WalletMode2[WalletMode2["AvailJs"] = 10] = "AvailJs";
20282
20708
  })(WalletMode ||= {});
20283
20709
  var WalletNameMap = {
20284
20710
  [0 /* EvmInjected */]: "EVM",
20285
20711
  [1 /* EvmEthers */]: "EVM",
20286
- [2 /* Midnight */]: "Midnight",
20287
- [3 /* Cardano */]: "Cardano",
20288
- [4 /* Polkadot */]: "Polkadot",
20289
- [5 /* Algorand */]: "Algorand",
20290
- [6 /* Mina */]: "Mina",
20291
- [7 /* AvailJs */]: "Avail"
20712
+ [2 /* EvmViem */]: "EVM",
20713
+ [3 /* Midnight */]: "Midnight",
20714
+ [4 /* MidnightLocal */]: "Midnight",
20715
+ [5 /* Cardano */]: "Cardano",
20716
+ [6 /* CardanoLocal */]: "Cardano",
20717
+ [7 /* Polkadot */]: "Polkadot",
20718
+ [8 /* Algorand */]: "Algorand",
20719
+ [9 /* Mina */]: "Mina",
20720
+ [10 /* AvailJs */]: "Avail"
20292
20721
  };
20293
20722
  var WalletModeMap = {
20294
20723
  [0 /* EvmInjected */]: EvmInjectedConnector.instance(),
20295
20724
  [1 /* EvmEthers */]: EthersConnector.instance(),
20296
- [2 /* Midnight */]: MidnightConnector.instance(),
20297
- [3 /* Cardano */]: CardanoConnector.instance(),
20298
- [4 /* Polkadot */]: PolkadotConnector.instance(),
20299
- [5 /* Algorand */]: AlgorandConnector.instance(),
20300
- [6 /* Mina */]: MinaConnector.instance(),
20301
- [7 /* AvailJs */]: AvailConnector.instance()
20725
+ [2 /* EvmViem */]: ViemConnector.instance(),
20726
+ [3 /* Midnight */]: MidnightConnector.instance(),
20727
+ [4 /* MidnightLocal */]: MidnightLocalConnector.instance(),
20728
+ [5 /* Cardano */]: CardanoConnector.instance(),
20729
+ [6 /* CardanoLocal */]: CardanoLocalConnector.instance(),
20730
+ [7 /* Polkadot */]: PolkadotConnector.instance(),
20731
+ [8 /* Algorand */]: AlgorandConnector.instance(),
20732
+ [9 /* Mina */]: MinaConnector.instance(),
20733
+ [10 /* AvailJs */]: AvailConnector.instance()
20302
20734
  };
20303
20735
  async function allInjectedWallets(config = {
20304
20736
  signatureSupport: true,
@@ -20308,11 +20740,11 @@ async function allInjectedWallets(config = {
20308
20740
  const transactionSupport = config.transactionSupport;
20309
20741
  const wallets = {
20310
20742
  [0 /* EvmInjected */]: EvmInjectedConnector.getWalletOptions(),
20311
- [3 /* Cardano */]: CardanoConnector.getWalletOptions(),
20312
- [4 /* Polkadot */]: await PolkadotConnector.getWalletOptions(),
20313
- [6 /* Mina */]: MinaConnector.getWalletOptions(),
20314
- [5 /* Algorand */]: signatureSupport ? [] : AlgorandConnector.getWalletOptions(),
20315
- [2 /* Midnight */]: signatureSupport ? [] : MidnightConnector.getWalletOptions()
20743
+ [5 /* Cardano */]: CardanoConnector.getWalletOptions(),
20744
+ [7 /* Polkadot */]: await PolkadotConnector.getWalletOptions(),
20745
+ [9 /* Mina */]: MinaConnector.getWalletOptions(),
20746
+ [8 /* Algorand */]: signatureSupport ? [] : AlgorandConnector.getWalletOptions(),
20747
+ [3 /* Midnight */]: MidnightConnector.getWalletOptions()
20316
20748
  };
20317
20749
  return wallets;
20318
20750
  }
@@ -20334,6 +20766,28 @@ async function connectInjectedWallet(typeName, preference, connector) {
20334
20766
  }
20335
20767
  throw new Error("Invalid preference");
20336
20768
  }
20769
+ // ../effectstream-sdk/wallets/src/helpers/format-error.ts
20770
+ function formatError2(err) {
20771
+ if (err == null)
20772
+ return "";
20773
+ if (err instanceof Error)
20774
+ return err.message;
20775
+ if (typeof err === "string")
20776
+ return err;
20777
+ if (typeof err === "object") {
20778
+ const o = err;
20779
+ if (typeof o.info === "string") {
20780
+ return o.code != null ? `${o.info} (code ${o.code})` : o.info;
20781
+ }
20782
+ if (typeof o.message === "string")
20783
+ return o.message;
20784
+ try {
20785
+ return JSON.stringify(err);
20786
+ } catch {}
20787
+ }
20788
+ return String(err);
20789
+ }
20790
+
20337
20791
  // ../effectstream-sdk/wallets/src/wallet-modes.ts
20338
20792
  function getWalletName(info) {
20339
20793
  if (info.preference == null)
@@ -20354,7 +20808,7 @@ async function connectInjected(typeName, loginInfo, connector) {
20354
20808
  console.log(`${typeName} Error while logging into wallet ${getWalletName(loginInfo) ?? "simple"}`);
20355
20809
  return {
20356
20810
  success: false,
20357
- errorMessage: err instanceof Error ? err.message : String(err)
20811
+ errorMessage: formatError2(err)
20358
20812
  };
20359
20813
  }
20360
20814
  }
@@ -20362,20 +20816,23 @@ function getAddressType(mode) {
20362
20816
  switch (mode) {
20363
20817
  case 0 /* EvmInjected */:
20364
20818
  case 1 /* EvmEthers */:
20819
+ case 2 /* EvmViem */:
20365
20820
  return 0 /* EVM */;
20366
- case 3 /* Cardano */:
20821
+ case 5 /* Cardano */:
20822
+ case 6 /* CardanoLocal */:
20367
20823
  return 1 /* CARDANO */;
20368
- case 4 /* Polkadot */:
20824
+ case 7 /* Polkadot */:
20369
20825
  return 7 /* POLKADOT */;
20370
- case 5 /* Algorand */:
20826
+ case 8 /* Algorand */:
20371
20827
  return 3 /* ALGORAND */;
20372
- case 6 /* Mina */:
20828
+ case 9 /* Mina */:
20373
20829
  return 4 /* MINA */;
20374
- case 2 /* Midnight */:
20830
+ case 3 /* Midnight */:
20831
+ case 4 /* MidnightLocal */:
20375
20832
  return 5 /* MIDNIGHT */;
20376
- case 7 /* AvailJs */:
20833
+ case 10 /* AvailJs */:
20377
20834
  return 6 /* AVAIL */;
20378
- case 4 /* Polkadot */:
20835
+ case 7 /* Polkadot */:
20379
20836
  return 7 /* POLKADOT */;
20380
20837
  default:
20381
20838
  throw new Error(`Unsupported wallet mode: ${mode}`);
@@ -20406,6 +20863,28 @@ async function cardanoLoginWrapper(loginInfo) {
20406
20863
  };
20407
20864
  }
20408
20865
 
20866
+ // ../effectstream-sdk/wallets/src/cardano/wrapper-local.ts
20867
+ async function cardanoLocalLoginWrapper(loginInfo) {
20868
+ try {
20869
+ console.log("cardanoLocalLoginWrapper: building Lucid wallet from seed");
20870
+ const provider = await CardanoLocalConnector.instance().connectFromSeed({
20871
+ seedPhrase: loginInfo.seedPhrase,
20872
+ network: loginInfo.network,
20873
+ provider: loginInfo.provider
20874
+ });
20875
+ return {
20876
+ success: true,
20877
+ result: provider
20878
+ };
20879
+ } catch (err) {
20880
+ console.log("cardanoLocalLoginWrapper: error while building local Cardano wallet");
20881
+ return {
20882
+ success: false,
20883
+ errorMessage: formatError2(err)
20884
+ };
20885
+ }
20886
+ }
20887
+
20409
20888
  // ../effectstream-sdk/wallets/src/evm/wrapper-injected.ts
20410
20889
  async function switchChain(chain) {
20411
20890
  if (!chain) {
@@ -20471,7 +20950,7 @@ async function connectWallet(loginInfo) {
20471
20950
  console.log(`ethersLoginWrapper: Error while logging into wallet name}`);
20472
20951
  return {
20473
20952
  success: false,
20474
- errorMessage: err instanceof Error ? err.message : String(err)
20953
+ errorMessage: formatError2(err)
20475
20954
  };
20476
20955
  }
20477
20956
  }
@@ -20487,6 +20966,28 @@ async function ethersLoginWrapper(loginInfo) {
20487
20966
  };
20488
20967
  }
20489
20968
 
20969
+ // ../effectstream-sdk/wallets/src/evm/wrapper-viem.ts
20970
+ async function viemLoginWrapper(loginInfo) {
20971
+ try {
20972
+ console.log("viemLoginWrapper: building viem WalletClient from private key");
20973
+ const provider = await ViemConnector.instance().connectFromPrivateKey({
20974
+ privateKey: loginInfo.privateKey,
20975
+ rpcUrl: loginInfo.rpcUrl,
20976
+ chain: loginInfo.chain
20977
+ });
20978
+ return {
20979
+ success: true,
20980
+ result: provider
20981
+ };
20982
+ } catch (err) {
20983
+ console.log("viemLoginWrapper: error while building local viem wallet");
20984
+ return {
20985
+ success: false,
20986
+ errorMessage: formatError2(err)
20987
+ };
20988
+ }
20989
+ }
20990
+
20490
20991
  // ../effectstream-sdk/wallets/src/mina/wrapper.ts
20491
20992
  async function minaLoginWrapper(loginInfo) {
20492
20993
  const loginResult = await connectInjected("minaLoginWrapper", loginInfo, MinaConnector.instance());
@@ -20518,7 +21019,7 @@ async function connectWallet2(loginInfo) {
20518
21019
  console.log(`availJsLoginWrapper: Error while logging into wallet name}`);
20519
21020
  return {
20520
21021
  success: false,
20521
- errorMessage: err.message ?? String(err)
21022
+ errorMessage: formatError2(err)
20522
21023
  };
20523
21024
  }
20524
21025
  }
@@ -20541,6 +21042,27 @@ async function midnightLoginWrapper(loginInfo) {
20541
21042
  };
20542
21043
  }
20543
21044
 
21045
+ // ../effectstream-sdk/wallets/src/midnight/wrapper-local.ts
21046
+ async function midnightLocalLoginWrapper(loginInfo) {
21047
+ try {
21048
+ console.log("midnightLocalLoginWrapper: deriving unshielded keystore from seed");
21049
+ const provider = await MidnightLocalConnector.instance().connectFromSeed({
21050
+ seed: loginInfo.seed,
21051
+ networkId: loginInfo.networkId
21052
+ });
21053
+ return {
21054
+ success: true,
21055
+ result: provider
21056
+ };
21057
+ } catch (err) {
21058
+ console.log("midnightLocalLoginWrapper: error building local Midnight wallet");
21059
+ return {
21060
+ success: false,
21061
+ errorMessage: formatError2(err)
21062
+ };
21063
+ }
21064
+ }
21065
+
20544
21066
  // ../effectstream-sdk/wallets/src/wallets.ts
20545
21067
  async function walletLogin(loginInfo) {
20546
21068
  const provider = await login(loginInfo);
@@ -20563,31 +21085,79 @@ async function login(loginInfo) {
20563
21085
  case 1 /* EvmEthers */: {
20564
21086
  return await ethersLoginWrapper(loginInfo);
20565
21087
  }
20566
- case 3 /* Cardano */: {
21088
+ case 2 /* EvmViem */: {
21089
+ return await viemLoginWrapper(loginInfo);
21090
+ }
21091
+ case 5 /* Cardano */: {
20567
21092
  return await cardanoLoginWrapper(loginInfo);
20568
21093
  }
20569
- case 4 /* Polkadot */: {
21094
+ case 6 /* CardanoLocal */: {
21095
+ return await cardanoLocalLoginWrapper(loginInfo);
21096
+ }
21097
+ case 7 /* Polkadot */: {
20570
21098
  return await polkadotLoginWrapper(loginInfo);
20571
21099
  }
20572
- case 5 /* Algorand */: {
21100
+ case 8 /* Algorand */: {
20573
21101
  return await algorandLoginWrapper(loginInfo);
20574
21102
  }
20575
- case 6 /* Mina */: {
21103
+ case 9 /* Mina */: {
20576
21104
  return await minaLoginWrapper(loginInfo);
20577
21105
  }
20578
- case 7 /* AvailJs */: {
21106
+ case 10 /* AvailJs */: {
20579
21107
  return await availJsLoginWrapper(loginInfo);
20580
21108
  }
20581
- case 2 /* Midnight */: {
21109
+ case 3 /* Midnight */: {
20582
21110
  return await midnightLoginWrapper(loginInfo);
20583
21111
  }
21112
+ case 4 /* MidnightLocal */: {
21113
+ return await midnightLocalLoginWrapper(loginInfo);
21114
+ }
20584
21115
  default:
20585
21116
  throw new Error(`Unsupported wallet mode: ${loginInfo.mode}`);
20586
21117
  }
20587
21118
  }
21119
+ // ../effectstream-sdk/wallets/src/helpers/pick-mode.ts
21120
+ function pickWalletMode(args) {
21121
+ if (args.preferLocal) {
21122
+ const mode2 = localModeFor(args.chain);
21123
+ return { mode: mode2, ...args.localOptions };
21124
+ }
21125
+ const mode = injectedModeFor(args.chain);
21126
+ return { mode, ...args.injectedOptions };
21127
+ }
21128
+ function localModeFor(chain) {
21129
+ switch (chain) {
21130
+ case "evm":
21131
+ return 2 /* EvmViem */;
21132
+ case "cardano":
21133
+ return 6 /* CardanoLocal */;
21134
+ case "midnight":
21135
+ return 4 /* MidnightLocal */;
21136
+ }
21137
+ }
21138
+ function injectedModeFor(chain) {
21139
+ switch (chain) {
21140
+ case "evm":
21141
+ return 0 /* EvmInjected */;
21142
+ case "cardano":
21143
+ return 5 /* Cardano */;
21144
+ case "midnight":
21145
+ return 3 /* Midnight */;
21146
+ }
21147
+ }
21148
+ // ../effectstream-sdk/wallets/src/helpers/local-icons.ts
21149
+ function encodeSvg(svg) {
21150
+ return `data:image/svg+xml;utf8,${encodeURIComponent(svg)}`;
21151
+ }
21152
+ function jsCircle(fill, textFill = "#ffffff") {
21153
+ return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">` + `<circle cx="16" cy="16" r="16" fill="${fill}"/>` + `<text x="16" y="21" text-anchor="middle" ` + `font-family="Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" ` + `font-weight="700" font-size="13" fill="${textFill}">JS</text>` + `</svg>`;
21154
+ }
21155
+ var evmViemIcon = encodeSvg(jsCircle("#F97316"));
21156
+ var cardanoLocalIcon = encodeSvg(jsCircle("#0033AD"));
21157
+ var midnightLocalIcon = encodeSvg(jsCircle("#0A0A0A"));
20588
21158
  // ../effectstream-sdk/wallets/src/effectstream.ts
20589
21159
  import { numberToHex } from "viem";
20590
- import { utf8ToHex as utf8ToHex7 } from "web3-utils";
21160
+ import { utf8ToHex as utf8ToHex8 } from "web3-utils";
20591
21161
  import { Web3 } from "web3";
20592
21162
 
20593
21163
  // ../effectstream-sdk/events/src/types.ts
@@ -21076,7 +21646,7 @@ async function sendSelfSequencedTransaction(wallet, conciseData, effectstreamCon
21076
21646
  throw new Error("Effectstream L2 is EVM contract.");
21077
21647
  }
21078
21648
  const evmProvider = wallet.provider;
21079
- const hexData = utf8ToHex7(JSON.stringify(conciseData));
21649
+ const hexData = utf8ToHex8(JSON.stringify(conciseData));
21080
21650
  const effectstreamL2Contract = await effectstreamConfig.getEffectstreamL2Contract();
21081
21651
  const txData = effectstreamL2Contract.methods["effectstreamSubmitGameInput"](hexData).encodeABI();
21082
21652
  const tx = {
@@ -21186,7 +21756,12 @@ export {
21186
21756
  sendTransaction,
21187
21757
  sendSelfSequencedTransaction,
21188
21758
  sendBatcherTransaction,
21759
+ pickWalletMode,
21760
+ midnightLocalIcon,
21189
21761
  getAddressType,
21762
+ formatError2 as formatError,
21763
+ evmViemIcon,
21764
+ cardanoLocalIcon,
21190
21765
  allInjectedWallets,
21191
21766
  accountPayload_,
21192
21767
  accountMessages,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effectstream/frontend-sdk",
3
- "version": "0.100.17",
3
+ "version": "0.100.19",
4
4
  "license": "MIT",
5
5
  "homepage": "https://effectstream.github.io/docs/",
6
6
  "repository": {
@@ -27,7 +27,7 @@
27
27
  "build": "bun run build.ts"
28
28
  },
29
29
  "dependencies": {
30
- "@effectstream/wallets": "0.100.17"
30
+ "@effectstream/wallets": "0.100.19"
31
31
  },
32
32
  "description": "React frontend SDK for EffectStream"
33
33
  }