emblem-vault-sdk 2.3.6 → 3.0.0-experimental

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 (147) hide show
  1. package/.traces/blockchain-provider-abstraction-plan.md +302 -0
  2. package/.traces/notes.md +43 -0
  3. package/.traces/readme-verification-trace.md +988 -0
  4. package/.traces/test-migration-status.md +227 -0
  5. package/.traces/tests-consolidated-trace.md +667 -0
  6. package/dist/abi/abi.json +53 -0
  7. package/dist/bundle.js +21602 -17419
  8. package/dist/clients/emblemVaultSolanaWalletClient.d.ts +74 -0
  9. package/dist/clients/emblemVaultSolanaWalletClient.js +149 -0
  10. package/dist/clients/emblemVaultSolanaWalletClient.js.map +1 -0
  11. package/dist/clients/emblemVaultWalletClient.d.ts +52 -0
  12. package/dist/clients/emblemVaultWalletClient.js +110 -0
  13. package/dist/clients/emblemVaultWalletClient.js.map +1 -0
  14. package/dist/derive.js +7 -0
  15. package/dist/derive.js.map +1 -0
  16. package/dist/index.js +319 -114
  17. package/dist/index.js.map +1 -0
  18. package/dist/providers/ProviderManager.d.ts +57 -0
  19. package/dist/providers/ProviderManager.js +283 -0
  20. package/dist/providers/ProviderManager.js.map +1 -0
  21. package/dist/providers.d.ts +101 -0
  22. package/dist/providers.js +96 -0
  23. package/dist/providers.js.map +1 -0
  24. package/dist/types.js +1 -0
  25. package/dist/types.js.map +1 -0
  26. package/dist/utils.js +61 -58
  27. package/dist/utils.js.map +1 -0
  28. package/docs/bundle.js +21602 -17419
  29. package/docs/index.html +150 -13
  30. package/docs/local.html +385 -0
  31. package/docs/steps.html +420 -53
  32. package/package.json +22 -13
  33. package/readme.md +795 -21
  34. package/src/abi/abi.json +54 -1
  35. package/src/clients/emblemVaultSolanaWalletClient.ts +257 -0
  36. package/src/clients/emblemVaultWalletClient.ts +159 -0
  37. package/src/derive.ts +5 -5
  38. package/src/index.ts +320 -102
  39. package/src/providers/ProviderManager.ts +254 -0
  40. package/src/providers.ts +163 -0
  41. package/src/types.ts +50 -0
  42. package/src/utils.ts +63 -62
  43. package/test/.mocharc.js +8 -0
  44. package/test/README.md +212 -0
  45. package/test/fixtures/ethscriptions/balance-with-native-first.json +24 -0
  46. package/test/fixtures/ethscriptions/balance-with-native.json +23 -0
  47. package/test/fixtures/ethscriptions/balance.json +18 -0
  48. package/test/helpers/sdkLoader.js +88 -0
  49. package/test/helpers/setup.js +55 -0
  50. package/test/integration/ApiOperations.spec.js +102 -0
  51. package/test/integration/VaultAI.spec.js +57 -0
  52. package/test/integration/VaultCreation.spec.js +95 -0
  53. package/test/mocks.js +127 -0
  54. package/test/tsconfig.json +25 -0
  55. package/test/unit/AllowedBells.spec.js +53 -0
  56. package/test/unit/AllowedBitcoinDeGods.spec.js +53 -0
  57. package/test/unit/AllowedBitcoinOrdinals.spec.js +46 -0
  58. package/test/unit/AllowedCounterparty.spec.js +66 -0
  59. package/test/unit/AllowedCursedOrdinals.spec.js +68 -0
  60. package/test/unit/AllowedEmbells.spec.js +11 -0
  61. package/test/unit/AllowedEmbels.spec.js +11 -0
  62. package/test/unit/AllowedEmblemOpen.spec.js +20 -0
  63. package/test/unit/AllowedEthscriptions.spec.js +53 -0
  64. package/test/unit/AllowedHardcodedNfts.spec.js +77 -0
  65. package/test/unit/AllowedNamecoin.spec.js +33 -0
  66. package/test/unit/AllowedOrdi.spec.js +46 -0
  67. package/test/unit/AllowedOxbt.spec.js +46 -0
  68. package/test/unit/AllowedProjectCollection.spec.js +51 -0
  69. package/test/unit/AllowedProtocolCollection.spec.js +44 -0
  70. package/test/unit/AllowedStamps.spec.js +78 -0
  71. package/test/unit/DarkfarmsMetadata.spec.js +10 -0
  72. package/test/unit/EmblemVaultSdk.spec.js +188 -0
  73. package/test/unit/Providers.spec.js +290 -0
  74. package/test/unit/ResourceMonitor.spec.js +111 -0
  75. package/test/unit/SDKMemoryLeaks.spec.js +176 -0
  76. package/test/unit/Signing.spec.js +321 -0
  77. package/test/unit/VaultAI.spec.js +140 -0
  78. package/test/unit/clients/EmblemVaultSolanaWalletClient.spec.js +296 -0
  79. package/test/unit/clients/EmblemVaultWalletClient.spec.js +246 -0
  80. package/test/utils/ResourceMonitor.js +169 -0
  81. package/test/windsurf-rules.md +68 -0
  82. package/tsconfig.json +7 -3
  83. package/types/derive.d.ts +0 -5
  84. package/types/index.d.ts +152 -32
  85. package/types/types.d.ts +43 -0
  86. package/types/utils.d.ts +7 -1
  87. package/dist/abi/quote.js +0 -29
  88. package/dist/abi/quote.json +0 -26
  89. package/jest.config.js +0 -6
  90. package/tests/AllowedBells.test.ts +0 -53
  91. package/tests/AllowedBitcoinDeGods.test.ts +0 -53
  92. package/tests/AllowedBitcoinOrdinals.test.ts +0 -46
  93. package/tests/AllowedCounterparty.test.ts +0 -45
  94. package/tests/AllowedCursedOrdinals.test.ts +0 -68
  95. package/tests/AllowedEmbells.test.ts +0 -12
  96. package/tests/AllowedEmbels.test.ts +0 -16
  97. package/tests/AllowedEmblemOpen.test.ts +0 -20
  98. package/tests/AllowedEthscriptions.test.ts +0 -39
  99. package/tests/AllowedHardcodedNfts.test.ts +0 -78
  100. package/tests/AllowedNamecoin.test.ts +0 -33
  101. package/tests/AllowedOrdi.test.ts +0 -47
  102. package/tests/AllowedOxbt.test.ts +0 -47
  103. package/tests/AllowedProjectlCollection.test.ts +0 -51
  104. package/tests/AllowedProtocolCollection.test.ts +0 -44
  105. package/tests/AllowedStamps.test.ts +0 -73
  106. package/tests/DarkfarmsMetadata.test.ts +0 -10
  107. package/tests/EmblemVaultSdk.test.ts +0 -124
  108. package/tests/fixtures/embels/balance.json +0 -10
  109. package/tests/fixtures/ethscriptions/balance-with-native-first.json +0 -69
  110. package/tests/fixtures/ethscriptions/balance-with-native.json +0 -37
  111. package/tests/fixtures/ethscriptions/balance.json +0 -64
  112. /package/{tests → test}/fixtures/bells/balance-with-non-bell-first.json +0 -0
  113. /package/{tests → test}/fixtures/bells/balance-with-non-bell.json +0 -0
  114. /package/{tests → test}/fixtures/bells/balance.json +0 -0
  115. /package/{tests → test}/fixtures/bitcoin-degods/balance-with-non-degods-first.json +0 -0
  116. /package/{tests → test}/fixtures/bitcoin-degods/balance-with-non-degods.json +0 -0
  117. /package/{tests → test}/fixtures/bitcoin-degods/balance.json +0 -0
  118. /package/{tests → test}/fixtures/bitcoin-ordinals/balance-with-native-first.json +0 -0
  119. /package/{tests → test}/fixtures/bitcoin-ordinals/balance-with-only-native.json +0 -0
  120. /package/{tests → test}/fixtures/bitcoin-ordinals/balance.json +0 -0
  121. /package/{tests → test}/fixtures/counterparty/balance-with-multiple.json +0 -0
  122. /package/{tests → test}/fixtures/counterparty/balance.json +0 -0
  123. /package/{tests → test}/fixtures/cursed-ordinals/balance-with-native-first.json +0 -0
  124. /package/{tests → test}/fixtures/cursed-ordinals/balance-with-native.json +0 -0
  125. /package/{tests → test}/fixtures/cursed-ordinals/balance.json +0 -0
  126. /package/{tests → test}/fixtures/dogeparty/balance-with-non-dogeparty-first.json +0 -0
  127. /package/{tests → test}/fixtures/dogeparty/balance-with-non-dogeparty.json +0 -0
  128. /package/{tests → test}/fixtures/dogeparty/balance.json +0 -0
  129. /package/{tests → test}/fixtures/emblem-open/balance.json +0 -0
  130. /package/{tests → test}/fixtures/hardcoded-nfts/balance-witn-non-hardcoded-first.json +0 -0
  131. /package/{tests → test}/fixtures/hardcoded-nfts/balance-witn-non-hardcoded.json +0 -0
  132. /package/{tests → test}/fixtures/hardcoded-nfts/balance.json +0 -0
  133. /package/{tests → test}/fixtures/megapunks/balance-with-non-megapunk-first.json +0 -0
  134. /package/{tests → test}/fixtures/megapunks/balance-with-non-megapunk.json +0 -0
  135. /package/{tests → test}/fixtures/megapunks/balance.json +0 -0
  136. /package/{tests → test}/fixtures/namecoin/balance-with-native-first.json +0 -0
  137. /package/{tests → test}/fixtures/namecoin/balance-with-native.json +0 -0
  138. /package/{tests → test}/fixtures/namecoin/balance.json +0 -0
  139. /package/{tests → test}/fixtures/ordi/balance-with-native-first.json +0 -0
  140. /package/{tests → test}/fixtures/ordi/balance-with-native.json +0 -0
  141. /package/{tests → test}/fixtures/ordi/balance.json +0 -0
  142. /package/{tests → test}/fixtures/oxbt/balance-with-native-first.json +0 -0
  143. /package/{tests → test}/fixtures/oxbt/balance-with-native.json +0 -0
  144. /package/{tests → test}/fixtures/oxbt/balance.json +0 -0
  145. /package/{tests → test}/fixtures/stamps/balance-with-non-stamps-first.json +0 -0
  146. /package/{tests → test}/fixtures/stamps/balance-with-non-stamps.json +0 -0
  147. /package/{tests → test}/fixtures/stamps/balance.json +0 -0
@@ -0,0 +1,74 @@
1
+ import { EmblemVaultSDK } from '../';
2
+ import { Transaction, VersionedTransaction, PublicKey, SendOptions, Connection } from '@solana/web3.js';
3
+ /**
4
+ * Configuration options for the Emblem Vault Solana Wallet Client
5
+ */
6
+ export interface EmblemVaultSolanaWalletClientConfig {
7
+ /** The Emblem Vault SDK instance */
8
+ sdk: EmblemVaultSDK;
9
+ /** The Emblem Vault ID to use for signing */
10
+ walletId: string;
11
+ /** Optional Solana connection to use for transaction sending */
12
+ connection?: Connection;
13
+ /** Optional public key to use (if already known) */
14
+ publicKey?: PublicKey;
15
+ }
16
+ /**
17
+ * Emblem Vault Solana Wallet Client
18
+ * Provides Solana wallet functionality using Emblem Vault's TEE signer
19
+ */
20
+ export interface EmblemVaultSolanaWalletClient {
21
+ /** The type of wallet client */
22
+ type: 'emblemVaultSolanaWalletClient';
23
+ /** The Emblem Vault SDK instance */
24
+ sdk: EmblemVaultSDK;
25
+ /** The Emblem Vault ID used for signing */
26
+ walletId: string;
27
+ /** The Solana connection (if provided) */
28
+ connection?: Connection;
29
+ /** The wallet's public key (if known or retrieved) */
30
+ publicKey?: PublicKey;
31
+ /**
32
+ * Get the public key for this wallet
33
+ * @returns The wallet's public key
34
+ */
35
+ getPublicKey(): Promise<PublicKey>;
36
+ /**
37
+ * Sign a message using the TEE signer
38
+ * @param message - The message to sign as a Uint8Array or string
39
+ * @returns The signature as a base64 string
40
+ */
41
+ signMessage(message: Uint8Array | string): Promise<string>;
42
+ /**
43
+ * Sign a transaction using the TEE signer
44
+ * @param transaction - The transaction to sign
45
+ * @returns The signed transaction
46
+ */
47
+ signTransaction(transaction: Transaction): Promise<Transaction>;
48
+ /**
49
+ * Sign a versioned transaction using the TEE signer
50
+ * @param transaction - The versioned transaction to sign
51
+ * @returns The signed versioned transaction
52
+ */
53
+ signVersionedTransaction(transaction: VersionedTransaction): Promise<VersionedTransaction>;
54
+ /**
55
+ * Sign and send a transaction
56
+ * @param transaction - The transaction to sign and send
57
+ * @param options - Options for sending the transaction
58
+ * @returns The transaction signature
59
+ */
60
+ sendTransaction(transaction: Transaction, options?: SendOptions): Promise<string>;
61
+ /**
62
+ * Sign and send a versioned transaction
63
+ * @param transaction - The versioned transaction to sign and send
64
+ * @param options - Options for sending the transaction
65
+ * @returns The transaction signature
66
+ */
67
+ sendVersionedTransaction(transaction: VersionedTransaction, options?: SendOptions): Promise<string>;
68
+ }
69
+ /**
70
+ * Creates an Emblem Vault Solana Wallet Client
71
+ * @param config - Configuration for the wallet client
72
+ * @returns An Emblem Vault Solana Wallet Client instance
73
+ */
74
+ export declare function createEmblemVaultSolanaWalletClient(config: EmblemVaultSolanaWalletClientConfig): EmblemVaultSolanaWalletClient;
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ // Implementation of Solana Wallet Client for Emblem Vault TEE Signer
3
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5
+ return new (P || (P = Promise))(function (resolve, reject) {
6
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
7
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
8
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
9
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
10
+ });
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.createEmblemVaultSolanaWalletClient = createEmblemVaultSolanaWalletClient;
14
+ const web3_js_1 = require("@solana/web3.js");
15
+ /**
16
+ * Creates an Emblem Vault Solana Wallet Client
17
+ * @param config - Configuration for the wallet client
18
+ * @returns An Emblem Vault Solana Wallet Client instance
19
+ */
20
+ function createEmblemVaultSolanaWalletClient(config) {
21
+ const { sdk, walletId, connection, publicKey: initialPublicKey } = config;
22
+ // Internal state
23
+ let cachedPublicKey = initialPublicKey;
24
+ // Client implementation
25
+ const client = {
26
+ type: 'emblemVaultSolanaWalletClient',
27
+ sdk,
28
+ walletId,
29
+ connection,
30
+ publicKey: cachedPublicKey,
31
+ // --- Mocked Actions ---
32
+ getPublicKey() {
33
+ return __awaiter(this, void 0, void 0, function* () {
34
+ // If we already have the public key, return it
35
+ if (cachedPublicKey) {
36
+ return cachedPublicKey;
37
+ }
38
+ // TODO: Replace with actual API call to get public key from TEE wallet
39
+ // For now, generate a deterministic mock key based on walletId
40
+ const mockSeed = new TextEncoder().encode(`mock_seed_for_${walletId}`);
41
+ const mockKeypair = web3_js_1.Keypair.fromSeed(mockSeed.slice(0, 32));
42
+ cachedPublicKey = mockKeypair.publicKey;
43
+ client.publicKey = cachedPublicKey;
44
+ return cachedPublicKey;
45
+ });
46
+ },
47
+ signMessage(message) {
48
+ return __awaiter(this, void 0, void 0, function* () {
49
+ // Convert string message to Uint8Array if needed
50
+ const messageBytes = typeof message === 'string'
51
+ ? new TextEncoder().encode(message)
52
+ : message;
53
+ // TODO: Replace with actual API call to TEE signer
54
+ // For now, create a mock signature
55
+ const mockSignature = Buffer.from(`mock_signature_for_${walletId}_${Buffer.from(messageBytes).toString('hex')}`);
56
+ // Return base64 encoded signature
57
+ return mockSignature.toString('base64');
58
+ });
59
+ },
60
+ signTransaction(transaction) {
61
+ return __awaiter(this, void 0, void 0, function* () {
62
+ // Ensure we have a public key
63
+ if (!cachedPublicKey) {
64
+ yield this.getPublicKey();
65
+ }
66
+ // Instead of actually signing the transaction (which requires valid blockhash),
67
+ // we'll just create a mock signed transaction for testing purposes
68
+ // Create a copy of the transaction to avoid modifying the original
69
+ const signedTx = new web3_js_1.Transaction();
70
+ // Copy over the instructions
71
+ if (transaction.instructions) {
72
+ transaction.instructions.forEach((instruction) => {
73
+ signedTx.add(instruction);
74
+ });
75
+ }
76
+ // Set a valid blockhash format for testing
77
+ signedTx.recentBlockhash = 'EETubP5AKHgjPAhzPAFcb8BAY1hMH639CWCFTqi3hq1k';
78
+ // Set the fee payer if provided
79
+ if (transaction.feePayer) {
80
+ signedTx.feePayer = transaction.feePayer;
81
+ }
82
+ else if (cachedPublicKey) {
83
+ signedTx.feePayer = cachedPublicKey;
84
+ }
85
+ // Add a mock signature
86
+ const mockSignature = Buffer.from(`mock_signature_for_${walletId}_${Date.now()}`);
87
+ signedTx.signatures.push({
88
+ publicKey: cachedPublicKey, // Use non-null assertion as we've already checked above
89
+ signature: mockSignature
90
+ });
91
+ return signedTx;
92
+ });
93
+ },
94
+ signVersionedTransaction(transaction) {
95
+ return __awaiter(this, void 0, void 0, function* () {
96
+ // Ensure we have a public key
97
+ if (!cachedPublicKey) {
98
+ yield this.getPublicKey();
99
+ }
100
+ // TODO: Replace with actual API call to TEE signer
101
+ // For now, create a mock signature for the versioned transaction
102
+ // Create a deterministic keypair for mock signing
103
+ const mockSeed = new TextEncoder().encode(`mock_seed_for_${walletId}`);
104
+ const mockKeypair = web3_js_1.Keypair.fromSeed(mockSeed.slice(0, 32));
105
+ // For mocking purposes, we'll need to recreate the transaction with signatures
106
+ // This is a simplified approach - in production, you'd send the transaction to the TEE for signing
107
+ const messageBytes = transaction.message.serialize();
108
+ const signature = mockKeypair.secretKey.slice(0, 64); // Use first 64 bytes as mock signature
109
+ // In a real implementation, you would:
110
+ // 1. Serialize the transaction message
111
+ // 2. Send it to the TEE for signing
112
+ // 3. Add the signature to the transaction
113
+ // For now, we're just returning the original transaction
114
+ // In a real implementation, you would create a new VersionedTransaction with the signature
115
+ return transaction;
116
+ });
117
+ },
118
+ sendTransaction(transaction, options) {
119
+ return __awaiter(this, void 0, void 0, function* () {
120
+ // Ensure we have a connection
121
+ if (!this.connection) {
122
+ throw new Error("Connection is required to send transactions");
123
+ }
124
+ // TODO: Replace with actual API call to send the transaction
125
+ // For now, create a mock transaction signature
126
+ const mockTxSignature = `mock_tx_signature_${walletId}_${Date.now()}`;
127
+ return mockTxSignature;
128
+ });
129
+ },
130
+ sendVersionedTransaction(transaction, options) {
131
+ return __awaiter(this, void 0, void 0, function* () {
132
+ // Ensure we have a connection
133
+ if (!this.connection) {
134
+ throw new Error("Connection is required to send transactions");
135
+ }
136
+ // Sign the transaction
137
+ const signedTx = yield this.signVersionedTransaction(transaction);
138
+ // TODO: Replace with actual API call to send the transaction
139
+ // For now, create a mock transaction signature
140
+ const mockTxSignature = `mock_tx_signature_${walletId}_${Date.now()}`;
141
+ return mockTxSignature;
142
+ });
143
+ }
144
+ };
145
+ // Explicitly set the type property for provider detection
146
+ client.type = 'emblemVaultSolanaWalletClient';
147
+ return client;
148
+ }
149
+ //# sourceMappingURL=emblemVaultSolanaWalletClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emblemVaultSolanaWalletClient.js","sourceRoot":"","sources":["../../src/clients/emblemVaultSolanaWalletClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { EmblemVaultSDK } from '../';
2
+ import type { Account, Address, Chain, Transport, WalletActions } from 'viem';
3
+ /**
4
+ * Configuration for creating an EmblemVaultWalletClient.
5
+ */
6
+ export interface EmblemVaultWalletClientConfig {
7
+ /** The initialized EmblemVaultSDK instance */
8
+ sdk: EmblemVaultSDK;
9
+ /** Identifier for the specific remote TEE wallet to use (e.g., a wallet ID or label) */
10
+ walletId: string;
11
+ /** Optional viem Chain object if needed for compatibility */
12
+ chain?: Chain;
13
+ /** Optional viem Account object if address is known upfront */
14
+ account?: Account | Address;
15
+ /** Optional Transport (likely unused as we use API, but here for viem compatibility) */
16
+ transport?: Transport;
17
+ /** Optional Key for the client */
18
+ key?: string;
19
+ /** Optional Name for the client */
20
+ name?: string;
21
+ }
22
+ export type EmblemVaultWalletActions = Pick<WalletActions, 'getAddresses' | 'sendTransaction' | 'signMessage' | 'signTypedData'>;
23
+ /**
24
+ * Represents a Wallet Client powered by Emblem Vault's TEE remote signer API.
25
+ * Mimics the viem WalletClient interface for compatibility.
26
+ */
27
+ export type EmblemVaultWalletClient = EmblemVaultWalletActions & {
28
+ /** The type of the client */
29
+ type: 'emblemVaultWalletClient';
30
+ /** The configured wallet identifier */
31
+ walletId: string;
32
+ /** The configured viem Chain object, if provided */
33
+ chain?: Chain;
34
+ /** The configured viem Account object, if provided */
35
+ account?: Account | Address;
36
+ /** The underlying Emblem Vault SDK instance */
37
+ sdk: EmblemVaultSDK;
38
+ /** Client Key */
39
+ key: string;
40
+ /** Client Name */
41
+ name: string;
42
+ /** Client UID */
43
+ uid: string;
44
+ };
45
+ /**
46
+ * Creates a Wallet Client that interacts with Emblem Vault's TEE remote signer.
47
+ *
48
+ * @param config - Configuration for the Wallet Client.
49
+ * @returns A Wallet Client instance.
50
+ */
51
+ export declare function createEmblemVaultWalletClient(config: EmblemVaultWalletClientConfig): EmblemVaultWalletClient;
52
+ export {};
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ // Placeholder for Emblem Vault Wallet Client implementation
3
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5
+ return new (P || (P = Promise))(function (resolve, reject) {
6
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
7
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
8
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
9
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
10
+ });
11
+ };
12
+ var __rest = (this && this.__rest) || function (s, e) {
13
+ var t = {};
14
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
15
+ t[p] = s[p];
16
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
17
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
18
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
19
+ t[p[i]] = s[p[i]];
20
+ }
21
+ return t;
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.createEmblemVaultWalletClient = createEmblemVaultWalletClient;
25
+ // --- Mock Implementation ---
26
+ // Counter for UID generation
27
+ let uid = 0;
28
+ /**
29
+ * Creates a Wallet Client that interacts with Emblem Vault's TEE remote signer.
30
+ *
31
+ * @param config - Configuration for the Wallet Client.
32
+ * @returns A Wallet Client instance.
33
+ */
34
+ function createEmblemVaultWalletClient(config) {
35
+ const { sdk, walletId, chain, account, key = 'emblemVault', name = 'Emblem Vault Wallet Client', } = config;
36
+ if (!sdk)
37
+ throw new Error('EmblemVaultSDK instance is required in config.');
38
+ if (!walletId)
39
+ throw new Error('walletId is required in config.');
40
+ const client = {
41
+ type: 'emblemVaultWalletClient',
42
+ key,
43
+ name,
44
+ uid: `emblemVaultWalletClient-${uid++}`,
45
+ sdk,
46
+ walletId,
47
+ chain,
48
+ account, // Store the initially provided account
49
+ // --- Mocked Actions ---
50
+ getAddresses() {
51
+ return __awaiter(this, void 0, void 0, function* () {
52
+ // console.log(`[${name}] MOCK getAddresses for wallet: ${walletId}`);
53
+ // TODO: Replace with actual API call to get addresses associated with the TEE wallet
54
+ // For now, if an account address was provided in config, return that.
55
+ if (account) {
56
+ const address = typeof account === 'string' ? account : account.address;
57
+ return [address];
58
+ }
59
+ // Otherwise, return a mock address based on walletId
60
+ return [`0xMockAddressFor${walletId}`];
61
+ });
62
+ },
63
+ signMessage(_a) {
64
+ return __awaiter(this, arguments, void 0, function* ({ message, account: messageAccount }) {
65
+ const effectiveAccount = messageAccount !== null && messageAccount !== void 0 ? messageAccount : account; // Use account from params or config
66
+ const address = effectiveAccount ? (typeof effectiveAccount === 'string' ? effectiveAccount : effectiveAccount.address) : 'UNKNOWN_ACCOUNT';
67
+ // console.log(`[${name}] MOCK signMessage for wallet: ${walletId}, Account: ${address}`);
68
+ // console.log(`[${name}] Message:`, message);
69
+ // TODO: Replace with actual API call to TEE signer
70
+ const mockSignature = `0x${Buffer.from(`mock_signature_for_${walletId}_${message}`).toString('hex')}`;
71
+ return mockSignature;
72
+ });
73
+ },
74
+ signTypedData(args) {
75
+ return __awaiter(this, void 0, void 0, function* () {
76
+ // Destructure from args according to viem's SignTypedDataParameters
77
+ const { account: messageAccount, domain, message, primaryType, types } = args;
78
+ const effectiveAccount = messageAccount !== null && messageAccount !== void 0 ? messageAccount : account; // Use account from params or config
79
+ const address = effectiveAccount ? (typeof effectiveAccount === 'string' ? effectiveAccount : effectiveAccount.address) : 'UNKNOWN_ACCOUNT';
80
+ // console.log(`[${name}] MOCK signTypedData for wallet: ${walletId}, Account: ${address}`);
81
+ // console.log(`[${name}] Primary Type: ${primaryType}`);
82
+ // Use 'message' which contains the typed data payload, and 'domain' / 'types' if needed for logging/API call
83
+ // console.log(`[${name}] Domain:`, JSON.stringify(domain));
84
+ // console.log(`[${name}] Message Payload:`, JSON.stringify(message));
85
+ // console.log(`[${name}] Types:`, JSON.stringify(types));
86
+ // TODO: Replace with actual API call to TEE signer
87
+ const mockSignature = `0x${Buffer.from(`mock_signature_for_${walletId}_typed_${primaryType}`).toString('hex')}`;
88
+ return mockSignature;
89
+ });
90
+ },
91
+ sendTransaction(args) {
92
+ return __awaiter(this, void 0, void 0, function* () {
93
+ // Destructure from args
94
+ const { account: txAccount } = args, txParams = __rest(args, ["account"]);
95
+ const effectiveAccount = txAccount !== null && txAccount !== void 0 ? txAccount : account; // Use account from params or config
96
+ if (!effectiveAccount)
97
+ throw new Error("Cannot send transaction without an account specified.");
98
+ const address = typeof effectiveAccount === 'string' ? effectiveAccount : effectiveAccount.address;
99
+ // console.log(`[${name}] MOCK sendTransaction for wallet: ${walletId}, From Account: ${address}`);
100
+ // console.log(`[${name}] Transaction Params:`, txParams);
101
+ // TODO: Replace with actual API call to TEE signer to sign AND submit the transaction
102
+ // The TEE API might handle submission, or we might need a separate step.
103
+ const mockTxHash = `0x${Buffer.from(`mock_tx_hash_for_${walletId}_${Date.now()}`).toString('hex').slice(0, 64)}`;
104
+ return mockTxHash;
105
+ });
106
+ }
107
+ };
108
+ return client;
109
+ }
110
+ //# sourceMappingURL=emblemVaultWalletClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emblemVaultWalletClient.js","sourceRoot":"","sources":["../../src/clients/emblemVaultWalletClient.ts"],"names":[],"mappings":"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"}
package/dist/derive.js CHANGED
@@ -38,6 +38,12 @@ const bip39 = __importStar(require("bip39"));
38
38
  // import bitcoin from "bitcoinjs-lib";
39
39
  const ecc = __importStar(require("@bitcoin-js/tiny-secp256k1-asmjs"));
40
40
  const bip32 = (0, bip32_1.BIP32Factory)(ecc);
41
+ // let mainnet: any = {"messagePrefix":"\u0018Bitcoin Signed Message:\n","bech32":"bc","bip32":{"public":76067358,"private":76066276},"pubKeyHash":0,"scriptHash":5,"wif":128}
42
+ // declare global {
43
+ // interface Window {
44
+ // bitcoin: any;
45
+ // }
46
+ // }
41
47
  const generateTaprootAddressFromMnemonic = (phrase) => __awaiter(void 0, void 0, void 0, function* () {
42
48
  let bitcoin = window.bitcoin;
43
49
  let mainnet = bitcoin.networks.mainnet;
@@ -121,3 +127,4 @@ const getPsbtTxnSize = (phrase, psbtBase64) => {
121
127
  return psbt.extractTransaction().virtualSize();
122
128
  };
123
129
  exports.getPsbtTxnSize = getPsbtTxnSize;
130
+ //# sourceMappingURL=derive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive.js","sourceRoot":"","sources":["../src/derive.ts"],"names":[],"mappings":"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"}