@solana/connector 0.2.1 → 0.2.3

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 (79) hide show
  1. package/README.md +17 -0
  2. package/dist/{chunk-UCISIAOG.mjs → chunk-A7WQ3K75.mjs} +3 -3
  3. package/dist/{chunk-UCISIAOG.mjs.map → chunk-A7WQ3K75.mjs.map} +1 -1
  4. package/dist/{chunk-4Z2F6ERB.js → chunk-B6YBZB6H.js} +49 -48
  5. package/dist/chunk-B6YBZB6H.js.map +1 -0
  6. package/dist/{chunk-SITQ4JWM.js → chunk-BF67LVVM.js} +17 -21
  7. package/dist/chunk-BF67LVVM.js.map +1 -0
  8. package/dist/{chunk-IDTUFDNB.mjs → chunk-DFKGCW7K.mjs} +98 -12
  9. package/dist/chunk-DFKGCW7K.mjs.map +1 -0
  10. package/dist/chunk-E3DAIOYS.mjs +22 -0
  11. package/dist/chunk-E3DAIOYS.mjs.map +1 -0
  12. package/dist/chunk-FG7HTQTV.mjs +7 -0
  13. package/dist/chunk-FG7HTQTV.mjs.map +1 -0
  14. package/dist/chunk-L5FWMNWO.js +9 -0
  15. package/dist/chunk-L5FWMNWO.js.map +1 -0
  16. package/dist/{chunk-HN5AJF7F.js → chunk-NLPEO5GT.js} +5 -5
  17. package/dist/{chunk-HN5AJF7F.js.map → chunk-NLPEO5GT.js.map} +1 -1
  18. package/dist/chunk-QST7XLMB.js +26 -0
  19. package/dist/chunk-QST7XLMB.js.map +1 -0
  20. package/dist/{chunk-ZZTY3O4N.mjs → chunk-SJCQ3KZE.mjs} +4 -7
  21. package/dist/chunk-SJCQ3KZE.mjs.map +1 -0
  22. package/dist/{chunk-BZ2VBJCZ.js → chunk-ULEPN4NL.js} +181 -95
  23. package/dist/chunk-ULEPN4NL.js.map +1 -0
  24. package/dist/{chunk-HPQ5T32K.mjs → chunk-UOML5ULB.mjs} +4 -4
  25. package/dist/{chunk-HPQ5T32K.mjs.map → chunk-UOML5ULB.mjs.map} +1 -1
  26. package/dist/{chunk-MDR4Y37Z.mjs → chunk-WPDCSFX2.mjs} +5 -4
  27. package/dist/chunk-WPDCSFX2.mjs.map +1 -0
  28. package/dist/{chunk-BJAVJQLK.js → chunk-X2X5TFXS.js} +6 -6
  29. package/dist/{chunk-BJAVJQLK.js.map → chunk-X2X5TFXS.js.map} +1 -1
  30. package/dist/compat.js +2 -2
  31. package/dist/compat.mjs +1 -1
  32. package/dist/fireblocks-FLKRTJU3.js +67 -0
  33. package/dist/fireblocks-FLKRTJU3.js.map +1 -0
  34. package/dist/fireblocks-KCJV3GEK.mjs +65 -0
  35. package/dist/fireblocks-KCJV3GEK.mjs.map +1 -0
  36. package/dist/headless.d.mts +11 -11
  37. package/dist/headless.d.ts +11 -11
  38. package/dist/headless.js +147 -147
  39. package/dist/headless.mjs +4 -4
  40. package/dist/index.d.mts +1 -1
  41. package/dist/index.d.ts +1 -1
  42. package/dist/index.js +188 -188
  43. package/dist/index.mjs +5 -5
  44. package/dist/privy-6LYDE24Z.mjs +64 -0
  45. package/dist/privy-6LYDE24Z.mjs.map +1 -0
  46. package/dist/privy-ID4YFTKR.js +66 -0
  47. package/dist/privy-ID4YFTKR.js.map +1 -0
  48. package/dist/protocol-G-z1lRqo.d.mts +166 -0
  49. package/dist/protocol-G-z1lRqo.d.ts +166 -0
  50. package/dist/react.d.mts +3 -3
  51. package/dist/react.d.ts +3 -3
  52. package/dist/react.js +49 -49
  53. package/dist/react.mjs +2 -2
  54. package/dist/remote.d.mts +46 -0
  55. package/dist/remote.d.ts +46 -0
  56. package/dist/remote.js +212 -0
  57. package/dist/remote.js.map +1 -0
  58. package/dist/remote.mjs +198 -0
  59. package/dist/remote.mjs.map +1 -0
  60. package/dist/server.d.mts +141 -0
  61. package/dist/server.d.ts +141 -0
  62. package/dist/server.js +189 -0
  63. package/dist/server.js.map +1 -0
  64. package/dist/server.mjs +187 -0
  65. package/dist/server.mjs.map +1 -0
  66. package/dist/{standard-shim-tmnQelaJ.d.ts → standard-shim-BB0Lkg_C.d.ts} +44 -1
  67. package/dist/{standard-shim-CGB88PPO.d.mts → standard-shim-n5phZB1d.d.mts} +44 -1
  68. package/dist/{walletconnect-447EY3OJ.js → walletconnect-F2M3PAAN.js} +8 -8
  69. package/dist/{walletconnect-447EY3OJ.js.map → walletconnect-F2M3PAAN.js.map} +1 -1
  70. package/dist/walletconnect-Z6LPGALR.mjs +3 -0
  71. package/dist/{walletconnect-U455PO4I.mjs.map → walletconnect-Z6LPGALR.mjs.map} +1 -1
  72. package/package.json +27 -2
  73. package/dist/chunk-4Z2F6ERB.js.map +0 -1
  74. package/dist/chunk-BZ2VBJCZ.js.map +0 -1
  75. package/dist/chunk-IDTUFDNB.mjs.map +0 -1
  76. package/dist/chunk-MDR4Y37Z.mjs.map +0 -1
  77. package/dist/chunk-SITQ4JWM.js.map +0 -1
  78. package/dist/chunk-ZZTY3O4N.mjs.map +0 -1
  79. package/dist/walletconnect-U455PO4I.mjs +0 -3
package/dist/react.js CHANGED
@@ -1,197 +1,197 @@
1
1
  'use strict';
2
2
 
3
- var chunk4Z2F6ERB_js = require('./chunk-4Z2F6ERB.js');
4
- var chunkBZ2VBJCZ_js = require('./chunk-BZ2VBJCZ.js');
3
+ var chunkB6YBZB6H_js = require('./chunk-B6YBZB6H.js');
4
+ var chunkULEPN4NL_js = require('./chunk-ULEPN4NL.js');
5
5
 
6
6
 
7
7
 
8
8
  Object.defineProperty(exports, "AccountElement", {
9
9
  enumerable: true,
10
- get: function () { return chunk4Z2F6ERB_js.AccountElement; }
10
+ get: function () { return chunkB6YBZB6H_js.AccountElement; }
11
11
  });
12
12
  Object.defineProperty(exports, "AppProvider", {
13
13
  enumerable: true,
14
- get: function () { return chunk4Z2F6ERB_js.AppProvider; }
14
+ get: function () { return chunkB6YBZB6H_js.AppProvider; }
15
15
  });
16
16
  Object.defineProperty(exports, "BalanceElement", {
17
17
  enumerable: true,
18
- get: function () { return chunk4Z2F6ERB_js.BalanceElement; }
18
+ get: function () { return chunkB6YBZB6H_js.BalanceElement; }
19
19
  });
20
20
  Object.defineProperty(exports, "ClusterElement", {
21
21
  enumerable: true,
22
- get: function () { return chunk4Z2F6ERB_js.ClusterElement; }
22
+ get: function () { return chunkB6YBZB6H_js.ClusterElement; }
23
23
  });
24
24
  Object.defineProperty(exports, "ConnectorErrorBoundary", {
25
25
  enumerable: true,
26
- get: function () { return chunk4Z2F6ERB_js.ConnectorErrorBoundary; }
26
+ get: function () { return chunkB6YBZB6H_js.ConnectorErrorBoundary; }
27
27
  });
28
28
  Object.defineProperty(exports, "ConnectorProvider", {
29
29
  enumerable: true,
30
- get: function () { return chunk4Z2F6ERB_js.ConnectorProvider; }
30
+ get: function () { return chunkB6YBZB6H_js.ConnectorProvider; }
31
31
  });
32
32
  Object.defineProperty(exports, "DisconnectElement", {
33
33
  enumerable: true,
34
- get: function () { return chunk4Z2F6ERB_js.DisconnectElement; }
34
+ get: function () { return chunkB6YBZB6H_js.DisconnectElement; }
35
35
  });
36
36
  Object.defineProperty(exports, "SkeletonShine", {
37
37
  enumerable: true,
38
- get: function () { return chunk4Z2F6ERB_js.SkeletonShine; }
38
+ get: function () { return chunkB6YBZB6H_js.SkeletonShine; }
39
39
  });
40
40
  Object.defineProperty(exports, "TokenListElement", {
41
41
  enumerable: true,
42
- get: function () { return chunk4Z2F6ERB_js.TokenListElement; }
42
+ get: function () { return chunkB6YBZB6H_js.TokenListElement; }
43
43
  });
44
44
  Object.defineProperty(exports, "TransactionHistoryElement", {
45
45
  enumerable: true,
46
- get: function () { return chunk4Z2F6ERB_js.TransactionHistoryElement; }
46
+ get: function () { return chunkB6YBZB6H_js.TransactionHistoryElement; }
47
47
  });
48
48
  Object.defineProperty(exports, "UnifiedProvider", {
49
49
  enumerable: true,
50
- get: function () { return chunk4Z2F6ERB_js.UnifiedProvider; }
50
+ get: function () { return chunkB6YBZB6H_js.UnifiedProvider; }
51
51
  });
52
52
  Object.defineProperty(exports, "WalletConnectProvider", {
53
53
  enumerable: true,
54
- get: function () { return chunk4Z2F6ERB_js.WalletConnectProvider; }
54
+ get: function () { return chunkB6YBZB6H_js.WalletConnectProvider; }
55
55
  });
56
56
  Object.defineProperty(exports, "WalletListElement", {
57
57
  enumerable: true,
58
- get: function () { return chunk4Z2F6ERB_js.WalletListElement; }
58
+ get: function () { return chunkB6YBZB6H_js.WalletListElement; }
59
59
  });
60
60
  Object.defineProperty(exports, "clearSharedQueryCache", {
61
61
  enumerable: true,
62
- get: function () { return chunk4Z2F6ERB_js.clearSharedQueryCache; }
62
+ get: function () { return chunkB6YBZB6H_js.clearSharedQueryCache; }
63
63
  });
64
64
  Object.defineProperty(exports, "clearTokenCaches", {
65
65
  enumerable: true,
66
- get: function () { return chunk4Z2F6ERB_js.clearTokenCaches; }
66
+ get: function () { return chunkB6YBZB6H_js.clearTokenCaches; }
67
67
  });
68
68
  Object.defineProperty(exports, "getBalanceQueryKey", {
69
69
  enumerable: true,
70
- get: function () { return chunk4Z2F6ERB_js.getBalanceQueryKey; }
70
+ get: function () { return chunkB6YBZB6H_js.getBalanceQueryKey; }
71
71
  });
72
72
  Object.defineProperty(exports, "getTokensQueryKey", {
73
73
  enumerable: true,
74
- get: function () { return chunk4Z2F6ERB_js.getTokensQueryKey; }
74
+ get: function () { return chunkB6YBZB6H_js.getTokensQueryKey; }
75
75
  });
76
76
  Object.defineProperty(exports, "getTransactionsQueryKey", {
77
77
  enumerable: true,
78
- get: function () { return chunk4Z2F6ERB_js.getTransactionsQueryKey; }
78
+ get: function () { return chunkB6YBZB6H_js.getTransactionsQueryKey; }
79
79
  });
80
80
  Object.defineProperty(exports, "getWalletAssetsQueryKey", {
81
81
  enumerable: true,
82
- get: function () { return chunk4Z2F6ERB_js.getWalletAssetsQueryKey; }
82
+ get: function () { return chunkB6YBZB6H_js.getWalletAssetsQueryKey; }
83
83
  });
84
84
  Object.defineProperty(exports, "invalidateSharedQuery", {
85
85
  enumerable: true,
86
- get: function () { return chunk4Z2F6ERB_js.invalidateSharedQuery; }
86
+ get: function () { return chunkB6YBZB6H_js.invalidateSharedQuery; }
87
87
  });
88
88
  Object.defineProperty(exports, "useAccount", {
89
89
  enumerable: true,
90
- get: function () { return chunk4Z2F6ERB_js.useAccount; }
90
+ get: function () { return chunkB6YBZB6H_js.useAccount; }
91
91
  });
92
92
  Object.defineProperty(exports, "useBalance", {
93
93
  enumerable: true,
94
- get: function () { return chunk4Z2F6ERB_js.useBalance; }
94
+ get: function () { return chunkB6YBZB6H_js.useBalance; }
95
95
  });
96
96
  Object.defineProperty(exports, "useCluster", {
97
97
  enumerable: true,
98
- get: function () { return chunk4Z2F6ERB_js.useCluster; }
98
+ get: function () { return chunkB6YBZB6H_js.useCluster; }
99
99
  });
100
100
  Object.defineProperty(exports, "useConnectWallet", {
101
101
  enumerable: true,
102
- get: function () { return chunk4Z2F6ERB_js.useConnectWallet; }
102
+ get: function () { return chunkB6YBZB6H_js.useConnectWallet; }
103
103
  });
104
104
  Object.defineProperty(exports, "useConnector", {
105
105
  enumerable: true,
106
- get: function () { return chunk4Z2F6ERB_js.useConnector; }
106
+ get: function () { return chunkB6YBZB6H_js.useConnector; }
107
107
  });
108
108
  Object.defineProperty(exports, "useConnectorClient", {
109
109
  enumerable: true,
110
- get: function () { return chunk4Z2F6ERB_js.useConnectorClient; }
110
+ get: function () { return chunkB6YBZB6H_js.useConnectorClient; }
111
111
  });
112
112
  Object.defineProperty(exports, "useDisconnectWallet", {
113
113
  enumerable: true,
114
- get: function () { return chunk4Z2F6ERB_js.useDisconnectWallet; }
114
+ get: function () { return chunkB6YBZB6H_js.useDisconnectWallet; }
115
115
  });
116
116
  Object.defineProperty(exports, "useGillSolanaClient", {
117
117
  enumerable: true,
118
- get: function () { return chunk4Z2F6ERB_js.useGillSolanaClient; }
118
+ get: function () { return chunkB6YBZB6H_js.useGillSolanaClient; }
119
119
  });
120
120
  Object.defineProperty(exports, "useGillTransactionSigner", {
121
121
  enumerable: true,
122
- get: function () { return chunk4Z2F6ERB_js.useGillTransactionSigner; }
122
+ get: function () { return chunkB6YBZB6H_js.useGillTransactionSigner; }
123
123
  });
124
124
  Object.defineProperty(exports, "useKitTransactionSigner", {
125
125
  enumerable: true,
126
- get: function () { return chunk4Z2F6ERB_js.useKitTransactionSigner; }
126
+ get: function () { return chunkB6YBZB6H_js.useKitTransactionSigner; }
127
127
  });
128
128
  Object.defineProperty(exports, "useSolanaClient", {
129
129
  enumerable: true,
130
- get: function () { return chunk4Z2F6ERB_js.useSolanaClient; }
130
+ get: function () { return chunkB6YBZB6H_js.useSolanaClient; }
131
131
  });
132
132
  Object.defineProperty(exports, "useTokens", {
133
133
  enumerable: true,
134
- get: function () { return chunk4Z2F6ERB_js.useTokens; }
134
+ get: function () { return chunkB6YBZB6H_js.useTokens; }
135
135
  });
136
136
  Object.defineProperty(exports, "useTransactionPreparer", {
137
137
  enumerable: true,
138
- get: function () { return chunk4Z2F6ERB_js.useTransactionPreparer; }
138
+ get: function () { return chunkB6YBZB6H_js.useTransactionPreparer; }
139
139
  });
140
140
  Object.defineProperty(exports, "useTransactionSigner", {
141
141
  enumerable: true,
142
- get: function () { return chunk4Z2F6ERB_js.useTransactionSigner; }
142
+ get: function () { return chunkB6YBZB6H_js.useTransactionSigner; }
143
143
  });
144
144
  Object.defineProperty(exports, "useTransactions", {
145
145
  enumerable: true,
146
- get: function () { return chunk4Z2F6ERB_js.useTransactions; }
146
+ get: function () { return chunkB6YBZB6H_js.useTransactions; }
147
147
  });
148
148
  Object.defineProperty(exports, "useWallet", {
149
149
  enumerable: true,
150
- get: function () { return chunk4Z2F6ERB_js.useWallet; }
150
+ get: function () { return chunkB6YBZB6H_js.useWallet; }
151
151
  });
152
152
  Object.defineProperty(exports, "useWalletConnectUri", {
153
153
  enumerable: true,
154
- get: function () { return chunk4Z2F6ERB_js.useWalletConnectUri; }
154
+ get: function () { return chunkB6YBZB6H_js.useWalletConnectUri; }
155
155
  });
156
156
  Object.defineProperty(exports, "useWalletConnectors", {
157
157
  enumerable: true,
158
- get: function () { return chunk4Z2F6ERB_js.useWalletConnectors; }
158
+ get: function () { return chunkB6YBZB6H_js.useWalletConnectors; }
159
159
  });
160
160
  Object.defineProperty(exports, "useWalletInfo", {
161
161
  enumerable: true,
162
- get: function () { return chunk4Z2F6ERB_js.useWalletInfo; }
162
+ get: function () { return chunkB6YBZB6H_js.useWalletInfo; }
163
163
  });
164
164
  Object.defineProperty(exports, "withErrorBoundary", {
165
165
  enumerable: true,
166
- get: function () { return chunk4Z2F6ERB_js.withErrorBoundary; }
166
+ get: function () { return chunkB6YBZB6H_js.withErrorBoundary; }
167
167
  });
168
168
  Object.defineProperty(exports, "createConnectorId", {
169
169
  enumerable: true,
170
- get: function () { return chunkBZ2VBJCZ_js.createConnectorId; }
170
+ get: function () { return chunkULEPN4NL_js.createConnectorId; }
171
171
  });
172
172
  Object.defineProperty(exports, "getDefaultConfig", {
173
173
  enumerable: true,
174
- get: function () { return chunkBZ2VBJCZ_js.getDefaultConfig; }
174
+ get: function () { return chunkULEPN4NL_js.getDefaultConfig; }
175
175
  });
176
176
  Object.defineProperty(exports, "getDefaultMobileConfig", {
177
177
  enumerable: true,
178
- get: function () { return chunkBZ2VBJCZ_js.getDefaultMobileConfig; }
178
+ get: function () { return chunkULEPN4NL_js.getDefaultMobileConfig; }
179
179
  });
180
180
  Object.defineProperty(exports, "isConnected", {
181
181
  enumerable: true,
182
- get: function () { return chunkBZ2VBJCZ_js.isConnected; }
182
+ get: function () { return chunkULEPN4NL_js.isConnected; }
183
183
  });
184
184
  Object.defineProperty(exports, "isConnecting", {
185
185
  enumerable: true,
186
- get: function () { return chunkBZ2VBJCZ_js.isConnecting; }
186
+ get: function () { return chunkULEPN4NL_js.isConnecting; }
187
187
  });
188
188
  Object.defineProperty(exports, "isDisconnected", {
189
189
  enumerable: true,
190
- get: function () { return chunkBZ2VBJCZ_js.isDisconnected; }
190
+ get: function () { return chunkULEPN4NL_js.isDisconnected; }
191
191
  });
192
192
  Object.defineProperty(exports, "isWalletConnectorId", {
193
193
  enumerable: true,
194
- get: function () { return chunkBZ2VBJCZ_js.isWalletConnectorId; }
194
+ get: function () { return chunkULEPN4NL_js.isWalletConnectorId; }
195
195
  });
196
196
  //# sourceMappingURL=react.js.map
197
197
  //# sourceMappingURL=react.js.map
package/dist/react.mjs CHANGED
@@ -1,4 +1,4 @@
1
- export { AccountElement, AppProvider, BalanceElement, ClusterElement, ConnectorErrorBoundary, ConnectorProvider, DisconnectElement, SkeletonShine, TokenListElement, TransactionHistoryElement, UnifiedProvider, WalletConnectProvider, WalletListElement, clearSharedQueryCache, clearTokenCaches, getBalanceQueryKey, getTokensQueryKey, getTransactionsQueryKey, getWalletAssetsQueryKey, invalidateSharedQuery, useAccount, useBalance, useCluster, useConnectWallet, useConnector, useConnectorClient, useDisconnectWallet, useGillSolanaClient, useGillTransactionSigner, useKitTransactionSigner, useSolanaClient, useTokens, useTransactionPreparer, useTransactionSigner, useTransactions, useWallet, useWalletConnectUri, useWalletConnectors, useWalletInfo, withErrorBoundary } from './chunk-MDR4Y37Z.mjs';
2
- export { createConnectorId, getDefaultConfig, getDefaultMobileConfig, isConnected, isConnecting, isDisconnected, isWalletConnectorId } from './chunk-IDTUFDNB.mjs';
1
+ export { AccountElement, AppProvider, BalanceElement, ClusterElement, ConnectorErrorBoundary, ConnectorProvider, DisconnectElement, SkeletonShine, TokenListElement, TransactionHistoryElement, UnifiedProvider, WalletConnectProvider, WalletListElement, clearSharedQueryCache, clearTokenCaches, getBalanceQueryKey, getTokensQueryKey, getTransactionsQueryKey, getWalletAssetsQueryKey, invalidateSharedQuery, useAccount, useBalance, useCluster, useConnectWallet, useConnector, useConnectorClient, useDisconnectWallet, useGillSolanaClient, useGillTransactionSigner, useKitTransactionSigner, useSolanaClient, useTokens, useTransactionPreparer, useTransactionSigner, useTransactions, useWallet, useWalletConnectUri, useWalletConnectors, useWalletInfo, withErrorBoundary } from './chunk-WPDCSFX2.mjs';
2
+ export { createConnectorId, getDefaultConfig, getDefaultMobileConfig, isConnected, isConnecting, isDisconnected, isWalletConnectorId } from './chunk-DFKGCW7K.mjs';
3
3
  //# sourceMappingURL=react.mjs.map
4
4
  //# sourceMappingURL=react.mjs.map
@@ -0,0 +1,46 @@
1
+ import { Wallet } from '@wallet-standard/base';
2
+ import { R as RemoteWalletConfig } from './protocol-G-z1lRqo.mjs';
3
+ export { b as RemoteSignerCapabilities, l as RemoteSignerErrorCode, k as RemoteSignerErrorResponse, a as RemoteSignerMetadata, c as RemoteSignerRequest, d as SignAllTransactionsRequest, h as SignAllTransactionsResponse, f as SignAndSendTransactionRequest, j as SignAndSendTransactionResponse, e as SignMessageRequest, i as SignMessageResponse, S as SignTransactionRequest, g as SignTransactionResponse, n as decodeBase64, m as encodeBase64, o as isErrorResponse } from './protocol-G-z1lRqo.mjs';
4
+
5
+ /**
6
+ * @solana/connector/remote - Remote Wallet Standard Adapter
7
+ *
8
+ * Creates a Wallet Standard compatible wallet that delegates signing
9
+ * operations to a remote signer API endpoint.
10
+ *
11
+ * This keeps the browser bundle lean - no signing SDKs needed client-side.
12
+ */
13
+
14
+ /**
15
+ * Error thrown by remote wallet operations
16
+ */
17
+ declare class RemoteWalletError extends Error {
18
+ code: string;
19
+ details?: unknown | undefined;
20
+ constructor(message: string, code: string, details?: unknown | undefined);
21
+ }
22
+ /**
23
+ * Create a Wallet Standard compatible wallet that delegates to a remote signer API
24
+ *
25
+ * @param config - Configuration for the remote wallet
26
+ * @returns A Wallet Standard wallet object
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * import { createRemoteSignerWallet } from '@solana/connector/remote';
31
+ *
32
+ * const remoteWallet = createRemoteSignerWallet({
33
+ * endpoint: '/api/connector-signer',
34
+ * name: 'Treasury Signer',
35
+ * getAuthHeaders: () => ({
36
+ * 'Authorization': `Bearer ${getSessionToken()}`
37
+ * })
38
+ * });
39
+ *
40
+ * // Pass to Connector
41
+ * <ConnectorProvider config={{ additionalWallets: [remoteWallet] }}>
42
+ * ```
43
+ */
44
+ declare function createRemoteSignerWallet(config: RemoteWalletConfig): Wallet;
45
+
46
+ export { RemoteWalletConfig, RemoteWalletError, createRemoteSignerWallet };
@@ -0,0 +1,46 @@
1
+ import { Wallet } from '@wallet-standard/base';
2
+ import { R as RemoteWalletConfig } from './protocol-G-z1lRqo.js';
3
+ export { b as RemoteSignerCapabilities, l as RemoteSignerErrorCode, k as RemoteSignerErrorResponse, a as RemoteSignerMetadata, c as RemoteSignerRequest, d as SignAllTransactionsRequest, h as SignAllTransactionsResponse, f as SignAndSendTransactionRequest, j as SignAndSendTransactionResponse, e as SignMessageRequest, i as SignMessageResponse, S as SignTransactionRequest, g as SignTransactionResponse, n as decodeBase64, m as encodeBase64, o as isErrorResponse } from './protocol-G-z1lRqo.js';
4
+
5
+ /**
6
+ * @solana/connector/remote - Remote Wallet Standard Adapter
7
+ *
8
+ * Creates a Wallet Standard compatible wallet that delegates signing
9
+ * operations to a remote signer API endpoint.
10
+ *
11
+ * This keeps the browser bundle lean - no signing SDKs needed client-side.
12
+ */
13
+
14
+ /**
15
+ * Error thrown by remote wallet operations
16
+ */
17
+ declare class RemoteWalletError extends Error {
18
+ code: string;
19
+ details?: unknown | undefined;
20
+ constructor(message: string, code: string, details?: unknown | undefined);
21
+ }
22
+ /**
23
+ * Create a Wallet Standard compatible wallet that delegates to a remote signer API
24
+ *
25
+ * @param config - Configuration for the remote wallet
26
+ * @returns A Wallet Standard wallet object
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * import { createRemoteSignerWallet } from '@solana/connector/remote';
31
+ *
32
+ * const remoteWallet = createRemoteSignerWallet({
33
+ * endpoint: '/api/connector-signer',
34
+ * name: 'Treasury Signer',
35
+ * getAuthHeaders: () => ({
36
+ * 'Authorization': `Bearer ${getSessionToken()}`
37
+ * })
38
+ * });
39
+ *
40
+ * // Pass to Connector
41
+ * <ConnectorProvider config={{ additionalWallets: [remoteWallet] }}>
42
+ * ```
43
+ */
44
+ declare function createRemoteSignerWallet(config: RemoteWalletConfig): Wallet;
45
+
46
+ export { RemoteWalletConfig, RemoteWalletError, createRemoteSignerWallet };
package/dist/remote.js ADDED
@@ -0,0 +1,212 @@
1
+ 'use strict';
2
+
3
+ var chunkQST7XLMB_js = require('./chunk-QST7XLMB.js');
4
+
5
+ // src/remote/remote-wallet.ts
6
+ var DEFAULT_ICON = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAzMCAyOC4zMzE5IiBmaWxsPSJjdXJyZW50Q29sb3IiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGc+PHJlY3QgaGVpZ2h0PSIyNS4wODU1IiBvcGFjaXR5PSIwIiB3aWR0aD0iMjYuNTYyNSIgeD0iMCIgeT0iMCIvPjxwYXRoIGQ9Ik0xNy42NzgzIDE1LjEyNzdDMTcuNzc2MSAxNi41MzcgMTguNTE0NyAxNy43NzA5IDE5LjY1ODIgMTguNTI0MkwxOS42NTgyIDIxLjMxNjlDMTkuNjU1MSAyMS4zMTcxIDE5LjY1MTggMjEuMzE3MSAxOS42NDg0IDIxLjMxNzFMNi41NTI3MyAyMS4zMTcxQzUuNTA3ODEgMjEuMzE3MSA0Ljg4MjgxIDIwLjgyODkgNC44ODI4MSAyMC4wMTgzQzQuODgyODEgMTcuNDk4OCA4LjAzNzExIDE0LjAyMjIgMTMuMDk1NyAxNC4wMjIyQzE0Ljg4MDkgMTQuMDIyMiAxNi40Mjg2IDE0LjQ1MzUgMTcuNjc4MyAxNS4xMjc3Wk0xNy4wMTE3IDcuOTU3NzdDMTcuMDExNyAxMC4zOTkyIDE1LjE5NTMgMTIuMjc0MiAxMy4xMDU1IDEyLjI3NDJDMTEuMDA1OSAxMi4yNzQyIDkuMTk5MjIgMTAuMzk5MiA5LjE5OTIyIDcuOTc3M0M5LjE5OTIyIDUuNTg0NzIgMTEuMDE1NiAzLjc1ODU1IDEzLjEwNTUgMy43NTg1NUMxNS4xOTUzIDMuNzU4NTUgMTcuMDExNyA1LjU0NTY2IDE3LjAxMTcgNy45NTc3N1oiIGZpbGwtb3BhY2l0eT0iMC44NSIvPjxwYXRoIGQ9Ik0yMi4xMTkxIDExLjY5OEMyMC4zODA5IDExLjY5OCAxOS4wMDM5IDEzLjA5NDUgMTkuMDAzOSAxNC44MDM1QzE5LjAwMzkgMTYuMTMxNiAxOS43ODUyIDE3LjI1NDYgMjAuOTg2MyAxNy43MjM0TDIwLjk4NjMgMjIuNTU3NEMyMC45ODYzIDIyLjY3NDYgMjEuMDQ0OSAyMi43NjI1IDIxLjEyMyAyMi44NjAxTDIxLjk0MzQgMjMuNjgwNEMyMi4wNDEgMjMuNzc4MSAyMi4xNzc3IDIzLjc4NzggMjIuMjg1MiAyMy42ODA0TDIzLjgzNzkgMjIuMTM3NUMyMy45MzU1IDIyLjAzIDIzLjkzNTUgMjEuODkzMyAyMy44Mzc5IDIxLjc5NTdMMjIuODcxMSAyMC44Mjg5TDI0LjIwOSAxOS41MjAzQzI0LjMwNjYgMTkuNDMyNCAyNC4zMDY2IDE5LjI4NTkgMjQuMTg5NSAxOS4xNjg3TDIyLjg4MDkgMTcuODY5OUMyNC4zODQ4IDE3LjI1NDYgMjUuMjI0NiAxNi4xNjA5IDI1LjIyNDYgMTQuODAzNUMyNS4yMjQ2IDEzLjA5NDUgMjMuODM3OSAxMS42OTggMjIuMTE5MSAxMS42OThaTTIyLjEwOTQgMTMuMTUzMUMyMi42MzY3IDEzLjE1MzEgMjMuMDY2NCAxMy41ODI4IDIzLjA2NjQgMTQuMTEwMUMyMy4wNjY0IDE0LjY1NyAyMi42MzY3IDE1LjA4NjcgMjIuMTA5NCAxNS4wODY3QzIxLjU4MiAxNS4wODY3IDIxLjE0MjYgMTQuNjU3IDIxLjE0MjYgMTQuMTEwMUMyMS4xNDI2IDEzLjU4MjggMjEuNTcyMyAxMy4xNTMxIDIyLjEwOTQgMTMuMTUzMVoiIGZpbGwtb3BhY2l0eT0iMC44NSIvPjwvZz48L3N2Zz4=", DEFAULT_CHAINS = ["solana:mainnet", "solana:devnet"], RemoteWalletError = class extends Error {
7
+ constructor(message, code, details) {
8
+ super(message);
9
+ this.code = code;
10
+ this.details = details;
11
+ this.name = "RemoteWalletError";
12
+ }
13
+ };
14
+ function createRemoteSignerWallet(config) {
15
+ let { endpoint, name, icon = DEFAULT_ICON, chains = DEFAULT_CHAINS, getAuthHeaders } = config, connected = false, metadata = null, accounts = [], eventListeners = /* @__PURE__ */ new Map();
16
+ async function request(method, body) {
17
+ let headers = {
18
+ "Content-Type": "application/json"
19
+ };
20
+ if (getAuthHeaders) {
21
+ let authHeaders = await getAuthHeaders();
22
+ Object.assign(headers, authHeaders);
23
+ }
24
+ let response = await fetch(endpoint, {
25
+ method,
26
+ headers,
27
+ body: body ? JSON.stringify(body) : void 0
28
+ }), data = await response.json();
29
+ if (!response.ok || chunkQST7XLMB_js.isErrorResponse(data)) {
30
+ let errorData = chunkQST7XLMB_js.isErrorResponse(data) ? data.error : { code: "UNKNOWN", message: "Request failed", details: void 0 };
31
+ throw new RemoteWalletError(errorData.message, errorData.code, errorData.details);
32
+ }
33
+ return data;
34
+ }
35
+ function emit(event, ...args) {
36
+ let listeners = eventListeners.get(event);
37
+ if (listeners)
38
+ for (let listener of listeners)
39
+ try {
40
+ listener(...args);
41
+ } catch {
42
+ }
43
+ }
44
+ let wallet = {
45
+ version: "1.0.0",
46
+ name,
47
+ icon,
48
+ chains,
49
+ features: {
50
+ // Standard connect
51
+ "standard:connect": {
52
+ version: "1.0.0",
53
+ connect: async () => connected && accounts.length > 0 ? { accounts } : (metadata = await request("GET"), accounts = [{
54
+ address: metadata.address,
55
+ publicKey: new Uint8Array(32),
56
+ // Placeholder - not needed for signing
57
+ chains: metadata.chains || chains,
58
+ features: [
59
+ "solana:signTransaction",
60
+ ...metadata.capabilities.signAllTransactions ? ["solana:signAllTransactions"] : [],
61
+ ...metadata.capabilities.signMessage ? ["solana:signMessage"] : [],
62
+ ...metadata.capabilities.signAndSendTransaction ? ["solana:signAndSendTransaction"] : []
63
+ ]
64
+ }], connected = true, emit("change", { accounts }), { accounts })
65
+ },
66
+ // Standard disconnect
67
+ "standard:disconnect": {
68
+ version: "1.0.0",
69
+ disconnect: async () => {
70
+ connected = false, accounts = [], metadata = null, emit("change", { accounts: [] });
71
+ }
72
+ },
73
+ // Standard events
74
+ "standard:events": {
75
+ version: "1.0.0",
76
+ on: (event, listener) => {
77
+ let listeners = eventListeners.get(event);
78
+ return listeners || (listeners = /* @__PURE__ */ new Set(), eventListeners.set(event, listeners)), listeners.add(listener), () => {
79
+ listeners?.delete(listener), listeners?.size === 0 && eventListeners.delete(event);
80
+ };
81
+ }
82
+ },
83
+ // Solana sign transaction
84
+ "solana:signTransaction": {
85
+ version: "1.0.0",
86
+ supportedTransactionVersions: ["legacy", 0],
87
+ signTransaction: async (...inputs) => {
88
+ if (!connected)
89
+ throw new RemoteWalletError("Wallet not connected", "NOT_CONNECTED");
90
+ let results = [];
91
+ for (let input of inputs) {
92
+ let txBytes = input.transaction, req = {
93
+ operation: "signTransaction",
94
+ transaction: chunkQST7XLMB_js.encodeBase64(txBytes)
95
+ }, response = await request("POST", req);
96
+ results.push({
97
+ signedTransaction: chunkQST7XLMB_js.decodeBase64(response.signedTransaction)
98
+ });
99
+ }
100
+ return results;
101
+ }
102
+ },
103
+ // Solana sign all transactions (batch)
104
+ "solana:signAllTransactions": {
105
+ version: "1.0.0",
106
+ supportedTransactionVersions: ["legacy", 0],
107
+ signAllTransactions: async (...inputs) => {
108
+ if (!connected)
109
+ throw new RemoteWalletError("Wallet not connected", "NOT_CONNECTED");
110
+ let allTxBytes = [];
111
+ for (let input of inputs)
112
+ allTxBytes.push(input.transaction);
113
+ let req = {
114
+ operation: "signAllTransactions",
115
+ transactions: allTxBytes.map((tx) => chunkQST7XLMB_js.encodeBase64(tx))
116
+ };
117
+ return (await request("POST", req)).signedTransactions.map((signedTx) => ({
118
+ signedTransaction: chunkQST7XLMB_js.decodeBase64(signedTx)
119
+ }));
120
+ }
121
+ },
122
+ // Solana sign message
123
+ "solana:signMessage": {
124
+ version: "1.0.0",
125
+ signMessage: async (...inputs) => {
126
+ if (!connected)
127
+ throw new RemoteWalletError("Wallet not connected", "NOT_CONNECTED");
128
+ let results = [];
129
+ for (let input of inputs) {
130
+ let req = {
131
+ operation: "signMessage",
132
+ message: chunkQST7XLMB_js.encodeBase64(input.message)
133
+ }, response = await request("POST", req);
134
+ results.push({
135
+ signedMessage: input.message,
136
+ signature: chunkQST7XLMB_js.decodeBase64(response.signature)
137
+ });
138
+ }
139
+ return results;
140
+ }
141
+ },
142
+ // Solana sign and send transaction (optional)
143
+ "solana:signAndSendTransaction": {
144
+ version: "1.0.0",
145
+ supportedTransactionVersions: ["legacy", 0],
146
+ signAndSendTransaction: async (...inputs) => {
147
+ if (!connected)
148
+ throw new RemoteWalletError("Wallet not connected", "NOT_CONNECTED");
149
+ if (metadata && !metadata.capabilities.signAndSendTransaction)
150
+ throw new RemoteWalletError(
151
+ "Server does not support signAndSendTransaction",
152
+ "UNSUPPORTED_OPERATION"
153
+ );
154
+ let results = [];
155
+ for (let input of inputs) {
156
+ let req = {
157
+ operation: "signAndSendTransaction",
158
+ transaction: chunkQST7XLMB_js.encodeBase64(input.transaction),
159
+ options: input.options
160
+ }, response = await request("POST", req), sigBytes = base58ToBytes(response.signature);
161
+ results.push({ signature: sigBytes });
162
+ }
163
+ return results;
164
+ }
165
+ }
166
+ },
167
+ accounts: []
168
+ };
169
+ return Object.defineProperty(wallet, "accounts", {
170
+ get: () => accounts,
171
+ enumerable: true
172
+ }), wallet;
173
+ }
174
+ function base58ToBytes(base58) {
175
+ let ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz", ALPHABET_MAP = /* @__PURE__ */ new Map();
176
+ for (let i = 0; i < ALPHABET.length; i++)
177
+ ALPHABET_MAP.set(ALPHABET[i], i);
178
+ let bytes = [0];
179
+ for (let char of base58) {
180
+ let value = ALPHABET_MAP.get(char);
181
+ if (value === void 0)
182
+ throw new Error(`Invalid base58 character: ${char}`);
183
+ let carry = value;
184
+ for (let i = 0; i < bytes.length; i++)
185
+ carry += bytes[i] * 58, bytes[i] = carry & 255, carry >>= 8;
186
+ for (; carry > 0; )
187
+ bytes.push(carry & 255), carry >>= 8;
188
+ }
189
+ for (let char of base58)
190
+ if (char === "1")
191
+ bytes.push(0);
192
+ else
193
+ break;
194
+ return new Uint8Array(bytes.reverse());
195
+ }
196
+
197
+ Object.defineProperty(exports, "decodeBase64", {
198
+ enumerable: true,
199
+ get: function () { return chunkQST7XLMB_js.decodeBase64; }
200
+ });
201
+ Object.defineProperty(exports, "encodeBase64", {
202
+ enumerable: true,
203
+ get: function () { return chunkQST7XLMB_js.encodeBase64; }
204
+ });
205
+ Object.defineProperty(exports, "isErrorResponse", {
206
+ enumerable: true,
207
+ get: function () { return chunkQST7XLMB_js.isErrorResponse; }
208
+ });
209
+ exports.RemoteWalletError = RemoteWalletError;
210
+ exports.createRemoteSignerWallet = createRemoteSignerWallet;
211
+ //# sourceMappingURL=remote.js.map
212
+ //# sourceMappingURL=remote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/remote/remote-wallet.ts"],"names":["isErrorResponse","encodeBase64","decodeBase64"],"mappings":"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","file":"remote.js","sourcesContent":["/**\n * @solana/connector/remote - Remote Wallet Standard Adapter\n *\n * Creates a Wallet Standard compatible wallet that delegates signing\n * operations to a remote signer API endpoint.\n *\n * This keeps the browser bundle lean - no signing SDKs needed client-side.\n */\n\nimport type { Wallet, WalletAccount } from '@wallet-standard/base';\nimport type {\n StandardConnectFeature,\n StandardDisconnectFeature,\n StandardEventsFeature,\n StandardEventsListeners,\n StandardEventsNames,\n} from '@wallet-standard/features';\nimport type {\n RemoteWalletConfig,\n RemoteSignerMetadata,\n SignTransactionRequest,\n SignAllTransactionsRequest,\n SignMessageRequest,\n SignAndSendTransactionRequest,\n SignTransactionResponse,\n SignAllTransactionsResponse,\n SignMessageResponse,\n SignAndSendTransactionResponse,\n} from './protocol';\nimport { encodeBase64, decodeBase64, isErrorResponse } from './protocol';\n\n// Default icon for remote wallets (data URI)\nconst DEFAULT_ICON =\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAzMCAyOC4zMzE5IiBmaWxsPSJjdXJyZW50Q29sb3IiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGc+PHJlY3QgaGVpZ2h0PSIyNS4wODU1IiBvcGFjaXR5PSIwIiB3aWR0aD0iMjYuNTYyNSIgeD0iMCIgeT0iMCIvPjxwYXRoIGQ9Ik0xNy42NzgzIDE1LjEyNzdDMTcuNzc2MSAxNi41MzcgMTguNTE0NyAxNy43NzA5IDE5LjY1ODIgMTguNTI0MkwxOS42NTgyIDIxLjMxNjlDMTkuNjU1MSAyMS4zMTcxIDE5LjY1MTggMjEuMzE3MSAxOS42NDg0IDIxLjMxNzFMNi41NTI3MyAyMS4zMTcxQzUuNTA3ODEgMjEuMzE3MSA0Ljg4MjgxIDIwLjgyODkgNC44ODI4MSAyMC4wMTgzQzQuODgyODEgMTcuNDk4OCA4LjAzNzExIDE0LjAyMjIgMTMuMDk1NyAxNC4wMjIyQzE0Ljg4MDkgMTQuMDIyMiAxNi40Mjg2IDE0LjQ1MzUgMTcuNjc4MyAxNS4xMjc3Wk0xNy4wMTE3IDcuOTU3NzdDMTcuMDExNyAxMC4zOTkyIDE1LjE5NTMgMTIuMjc0MiAxMy4xMDU1IDEyLjI3NDJDMTEuMDA1OSAxMi4yNzQyIDkuMTk5MjIgMTAuMzk5MiA5LjE5OTIyIDcuOTc3M0M5LjE5OTIyIDUuNTg0NzIgMTEuMDE1NiAzLjc1ODU1IDEzLjEwNTUgMy43NTg1NUMxNS4xOTUzIDMuNzU4NTUgMTcuMDExNyA1LjU0NTY2IDE3LjAxMTcgNy45NTc3N1oiIGZpbGwtb3BhY2l0eT0iMC44NSIvPjxwYXRoIGQ9Ik0yMi4xMTkxIDExLjY5OEMyMC4zODA5IDExLjY5OCAxOS4wMDM5IDEzLjA5NDUgMTkuMDAzOSAxNC44MDM1QzE5LjAwMzkgMTYuMTMxNiAxOS43ODUyIDE3LjI1NDYgMjAuOTg2MyAxNy43MjM0TDIwLjk4NjMgMjIuNTU3NEMyMC45ODYzIDIyLjY3NDYgMjEuMDQ0OSAyMi43NjI1IDIxLjEyMyAyMi44NjAxTDIxLjk0MzQgMjMuNjgwNEMyMi4wNDEgMjMuNzc4MSAyMi4xNzc3IDIzLjc4NzggMjIuMjg1MiAyMy42ODA0TDIzLjgzNzkgMjIuMTM3NUMyMy45MzU1IDIyLjAzIDIzLjkzNTUgMjEuODkzMyAyMy44Mzc5IDIxLjc5NTdMMjIuODcxMSAyMC44Mjg5TDI0LjIwOSAxOS41MjAzQzI0LjMwNjYgMTkuNDMyNCAyNC4zMDY2IDE5LjI4NTkgMjQuMTg5NSAxOS4xNjg3TDIyLjg4MDkgMTcuODY5OUMyNC4zODQ4IDE3LjI1NDYgMjUuMjI0NiAxNi4xNjA5IDI1LjIyNDYgMTQuODAzNUMyNS4yMjQ2IDEzLjA5NDUgMjMuODM3OSAxMS42OTggMjIuMTE5MSAxMS42OThaTTIyLjEwOTQgMTMuMTUzMUMyMi42MzY3IDEzLjE1MzEgMjMuMDY2NCAxMy41ODI4IDIzLjA2NjQgMTQuMTEwMUMyMy4wNjY0IDE0LjY1NyAyMi42MzY3IDE1LjA4NjcgMjIuMTA5NCAxNS4wODY3QzIxLjU4MiAxNS4wODY3IDIxLjE0MjYgMTQuNjU3IDIxLjE0MjYgMTQuMTEwMUMyMS4xNDI2IDEzLjU4MjggMjEuNTcyMyAxMy4xNTMxIDIyLjEwOTQgMTMuMTUzMVoiIGZpbGwtb3BhY2l0eT0iMC44NSIvPjwvZz48L3N2Zz4=' as const;\n\n// Default chains if none specified\nconst DEFAULT_CHAINS: `solana:${string}`[] = ['solana:mainnet', 'solana:devnet'];\n\n// Types for Solana wallet standard features (inline to avoid dependency)\ninterface SignTransactionInput {\n transaction: Uint8Array;\n account?: WalletAccount;\n chain?: string;\n}\n\ninterface SignMessageInput {\n message: Uint8Array;\n account?: WalletAccount;\n}\n\ninterface SignAndSendTransactionInput {\n transaction: Uint8Array;\n account?: WalletAccount;\n chain?: string;\n options?: {\n skipPreflight?: boolean;\n maxRetries?: number;\n preflightCommitment?: 'processed' | 'confirmed' | 'finalized';\n };\n}\n\n/**\n * Error thrown by remote wallet operations\n */\nexport class RemoteWalletError extends Error {\n constructor(\n message: string,\n public code: string,\n public details?: unknown,\n ) {\n super(message);\n this.name = 'RemoteWalletError';\n }\n}\n\n/**\n * Create a Wallet Standard compatible wallet that delegates to a remote signer API\n *\n * @param config - Configuration for the remote wallet\n * @returns A Wallet Standard wallet object\n *\n * @example\n * ```typescript\n * import { createRemoteSignerWallet } from '@solana/connector/remote';\n *\n * const remoteWallet = createRemoteSignerWallet({\n * endpoint: '/api/connector-signer',\n * name: 'Treasury Signer',\n * getAuthHeaders: () => ({\n * 'Authorization': `Bearer ${getSessionToken()}`\n * })\n * });\n *\n * // Pass to Connector\n * <ConnectorProvider config={{ additionalWallets: [remoteWallet] }}>\n * ```\n */\nexport function createRemoteSignerWallet(config: RemoteWalletConfig): Wallet {\n const { endpoint, name, icon = DEFAULT_ICON, chains = DEFAULT_CHAINS, getAuthHeaders } = config;\n\n // Internal state\n let connected = false;\n let metadata: RemoteSignerMetadata | null = null;\n let accounts: WalletAccount[] = [];\n const eventListeners: Map<StandardEventsNames, Set<StandardEventsListeners[StandardEventsNames]>> = new Map();\n\n // Helper: make authenticated request\n async function request<T>(method: 'GET' | 'POST', body?: unknown): Promise<T> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n if (getAuthHeaders) {\n const authHeaders = await getAuthHeaders();\n Object.assign(headers, authHeaders);\n }\n\n const response = await fetch(endpoint, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n const data = await response.json();\n\n if (!response.ok || isErrorResponse(data)) {\n const errorData = isErrorResponse(data)\n ? data.error\n : { code: 'UNKNOWN', message: 'Request failed', details: undefined };\n throw new RemoteWalletError(errorData.message, errorData.code, errorData.details);\n }\n\n return data as T;\n }\n\n // Helper: emit event to listeners\n function emit<E extends StandardEventsNames>(event: E, ...args: Parameters<StandardEventsListeners[E]>) {\n const listeners = eventListeners.get(event);\n if (listeners) {\n for (const listener of listeners) {\n try {\n (listener as (...args: unknown[]) => void)(...args);\n } catch {\n // Ignore listener errors\n }\n }\n }\n }\n\n // Build features object\n const features: Wallet['features'] = {\n // Standard connect\n 'standard:connect': {\n version: '1.0.0',\n connect: async () => {\n if (connected && accounts.length > 0) {\n return { accounts };\n }\n\n // Fetch metadata from server\n metadata = await request<RemoteSignerMetadata>('GET');\n\n // Create account from metadata\n const account: WalletAccount = {\n address: metadata.address,\n publicKey: new Uint8Array(32), // Placeholder - not needed for signing\n chains: (metadata.chains || chains) as `${string}:${string}`[],\n features: [\n 'solana:signTransaction',\n ...(metadata.capabilities.signAllTransactions ? ['solana:signAllTransactions'] : []),\n ...(metadata.capabilities.signMessage ? ['solana:signMessage'] : []),\n ...(metadata.capabilities.signAndSendTransaction ? ['solana:signAndSendTransaction'] : []),\n ] as `${string}:${string}`[],\n };\n\n accounts = [account];\n connected = true;\n\n emit('change', { accounts });\n\n return { accounts };\n },\n } satisfies StandardConnectFeature['standard:connect'],\n\n // Standard disconnect\n 'standard:disconnect': {\n version: '1.0.0',\n disconnect: async () => {\n connected = false;\n accounts = [];\n metadata = null;\n emit('change', { accounts: [] });\n },\n } satisfies StandardDisconnectFeature['standard:disconnect'],\n\n // Standard events\n 'standard:events': {\n version: '1.0.0',\n on: <E extends StandardEventsNames>(event: E, listener: StandardEventsListeners[E]) => {\n let listeners = eventListeners.get(event);\n if (!listeners) {\n listeners = new Set();\n eventListeners.set(event, listeners);\n }\n listeners.add(listener);\n\n return () => {\n listeners?.delete(listener);\n if (listeners?.size === 0) {\n eventListeners.delete(event);\n }\n };\n },\n } satisfies StandardEventsFeature['standard:events'],\n\n // Solana sign transaction\n 'solana:signTransaction': {\n version: '1.0.0',\n supportedTransactionVersions: ['legacy', 0],\n signTransaction: async (...inputs: SignTransactionInput[]) => {\n if (!connected) {\n throw new RemoteWalletError('Wallet not connected', 'NOT_CONNECTED');\n }\n\n const results: { signedTransaction: Uint8Array }[] = [];\n\n for (const input of inputs) {\n const txBytes = input.transaction;\n const req: SignTransactionRequest = {\n operation: 'signTransaction',\n transaction: encodeBase64(txBytes),\n };\n\n const response = await request<SignTransactionResponse>('POST', req);\n results.push({\n signedTransaction: decodeBase64(response.signedTransaction),\n });\n }\n\n return results;\n },\n },\n\n // Solana sign all transactions (batch)\n 'solana:signAllTransactions': {\n version: '1.0.0',\n supportedTransactionVersions: ['legacy', 0],\n signAllTransactions: async (...inputs: SignTransactionInput[]) => {\n if (!connected) {\n throw new RemoteWalletError('Wallet not connected', 'NOT_CONNECTED');\n }\n\n // Collect all transactions from all inputs\n const allTxBytes: Uint8Array[] = [];\n for (const input of inputs) {\n allTxBytes.push(input.transaction);\n }\n\n const req: SignAllTransactionsRequest = {\n operation: 'signAllTransactions',\n transactions: allTxBytes.map(tx => encodeBase64(tx)),\n };\n\n const response = await request<SignAllTransactionsResponse>('POST', req);\n\n return response.signedTransactions.map(signedTx => ({\n signedTransaction: decodeBase64(signedTx),\n }));\n },\n },\n\n // Solana sign message\n 'solana:signMessage': {\n version: '1.0.0',\n signMessage: async (...inputs: SignMessageInput[]) => {\n if (!connected) {\n throw new RemoteWalletError('Wallet not connected', 'NOT_CONNECTED');\n }\n\n const results: { signedMessage: Uint8Array; signature: Uint8Array }[] = [];\n\n for (const input of inputs) {\n const req: SignMessageRequest = {\n operation: 'signMessage',\n message: encodeBase64(input.message),\n };\n\n const response = await request<SignMessageResponse>('POST', req);\n results.push({\n signedMessage: input.message,\n signature: decodeBase64(response.signature),\n });\n }\n\n return results;\n },\n },\n\n // Solana sign and send transaction (optional)\n 'solana:signAndSendTransaction': {\n version: '1.0.0',\n supportedTransactionVersions: ['legacy', 0],\n signAndSendTransaction: async (...inputs: SignAndSendTransactionInput[]) => {\n if (!connected) {\n throw new RemoteWalletError('Wallet not connected', 'NOT_CONNECTED');\n }\n\n // Check if server supports this operation\n if (metadata && !metadata.capabilities.signAndSendTransaction) {\n throw new RemoteWalletError(\n 'Server does not support signAndSendTransaction',\n 'UNSUPPORTED_OPERATION',\n );\n }\n\n const results: { signature: Uint8Array }[] = [];\n\n for (const input of inputs) {\n const req: SignAndSendTransactionRequest = {\n operation: 'signAndSendTransaction',\n transaction: encodeBase64(input.transaction),\n options: input.options,\n };\n\n const response = await request<SignAndSendTransactionResponse>('POST', req);\n\n // Convert base58 signature to bytes\n // Signature is 64 bytes, base58 encoded\n const sigBytes = base58ToBytes(response.signature);\n results.push({ signature: sigBytes });\n }\n\n return results;\n },\n },\n };\n\n // Build the wallet object\n const wallet: Wallet = {\n version: '1.0.0',\n name,\n icon: icon as `data:image/${'svg+xml' | 'webp' | 'png' | 'gif'};base64,${string}`,\n chains,\n features,\n accounts: [],\n };\n\n // Make accounts reactive via getter\n Object.defineProperty(wallet, 'accounts', {\n get: () => accounts,\n enumerable: true,\n });\n\n return wallet;\n}\n\n/**\n * Convert base58 string to bytes\n * Simple implementation for signature conversion\n */\nfunction base58ToBytes(base58: string): Uint8Array {\n const ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\n const ALPHABET_MAP = new Map<string, number>();\n for (let i = 0; i < ALPHABET.length; i++) {\n ALPHABET_MAP.set(ALPHABET[i], i);\n }\n\n const bytes: number[] = [0];\n for (const char of base58) {\n const value = ALPHABET_MAP.get(char);\n if (value === undefined) {\n throw new Error(`Invalid base58 character: ${char}`);\n }\n\n let carry = value;\n for (let i = 0; i < bytes.length; i++) {\n carry += bytes[i] * 58;\n bytes[i] = carry & 0xff;\n carry >>= 8;\n }\n while (carry > 0) {\n bytes.push(carry & 0xff);\n carry >>= 8;\n }\n }\n\n // Handle leading zeros\n for (const char of base58) {\n if (char === '1') {\n bytes.push(0);\n } else {\n break;\n }\n }\n\n return new Uint8Array(bytes.reverse());\n}\n"]}