@karn_lat/protocol-sdk 0.1.0-alpha.1

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 (157) hide show
  1. package/README.md +68 -0
  2. package/dist/__tests__/setup.d.ts +14 -0
  3. package/dist/__tests__/setup.d.ts.map +1 -0
  4. package/dist/__tests__/setup.js +44 -0
  5. package/dist/__tests__/setup.js.map +1 -0
  6. package/dist/clients/GovernorClient.d.ts +9 -0
  7. package/dist/clients/GovernorClient.d.ts.map +1 -0
  8. package/dist/clients/GovernorClient.js +18 -0
  9. package/dist/clients/GovernorClient.js.map +1 -0
  10. package/dist/clients/TreasuryClient.d.ts +9 -0
  11. package/dist/clients/TreasuryClient.d.ts.map +1 -0
  12. package/dist/clients/TreasuryClient.js +18 -0
  13. package/dist/clients/TreasuryClient.js.map +1 -0
  14. package/dist/clients/ValocracyClient.d.ts +13 -0
  15. package/dist/clients/ValocracyClient.d.ts.map +1 -0
  16. package/dist/clients/ValocracyClient.js +32 -0
  17. package/dist/clients/ValocracyClient.js.map +1 -0
  18. package/dist/clients/index.d.ts +4 -0
  19. package/dist/clients/index.d.ts.map +1 -0
  20. package/dist/clients/index.js +4 -0
  21. package/dist/clients/index.js.map +1 -0
  22. package/dist/generated/governor/src/index.d.ts +400 -0
  23. package/dist/generated/governor/src/index.d.ts.map +1 -0
  24. package/dist/generated/governor/src/index.js +63 -0
  25. package/dist/generated/governor/src/index.js.map +1 -0
  26. package/dist/generated/treasury/src/index.d.ts +474 -0
  27. package/dist/generated/treasury/src/index.d.ts.map +1 -0
  28. package/dist/generated/treasury/src/index.js +54 -0
  29. package/dist/generated/treasury/src/index.js.map +1 -0
  30. package/dist/generated/valocracy/src/index.d.ts +807 -0
  31. package/dist/generated/valocracy/src/index.d.ts.map +1 -0
  32. package/dist/generated/valocracy/src/index.js +114 -0
  33. package/dist/generated/valocracy/src/index.js.map +1 -0
  34. package/dist/index.d.ts +5 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +5 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/react/hooks/useGovernor.d.ts +24 -0
  39. package/dist/react/hooks/useGovernor.d.ts.map +1 -0
  40. package/dist/react/hooks/useGovernor.js +45 -0
  41. package/dist/react/hooks/useGovernor.js.map +1 -0
  42. package/dist/react/hooks/useMultiWallet.d.ts +35 -0
  43. package/dist/react/hooks/useMultiWallet.d.ts.map +1 -0
  44. package/dist/react/hooks/useMultiWallet.js +87 -0
  45. package/dist/react/hooks/useMultiWallet.js.map +1 -0
  46. package/dist/react/hooks/useTreasury.d.ts +14 -0
  47. package/dist/react/hooks/useTreasury.d.ts.map +1 -0
  48. package/dist/react/hooks/useTreasury.js +45 -0
  49. package/dist/react/hooks/useTreasury.js.map +1 -0
  50. package/dist/react/hooks/useValocracy.d.ts +16 -0
  51. package/dist/react/hooks/useValocracy.d.ts.map +1 -0
  52. package/dist/react/hooks/useValocracy.js +54 -0
  53. package/dist/react/hooks/useValocracy.js.map +1 -0
  54. package/dist/react/hooks/useWallet.d.ts +13 -0
  55. package/dist/react/hooks/useWallet.d.ts.map +1 -0
  56. package/dist/react/hooks/useWallet.js +51 -0
  57. package/dist/react/hooks/useWallet.js.map +1 -0
  58. package/dist/react/index.d.ts +7 -0
  59. package/dist/react/index.d.ts.map +1 -0
  60. package/dist/react/index.js +7 -0
  61. package/dist/react/index.js.map +1 -0
  62. package/dist/react/providers/KarnProvider.d.ts +25 -0
  63. package/dist/react/providers/KarnProvider.d.ts.map +1 -0
  64. package/dist/react/providers/KarnProvider.js +25 -0
  65. package/dist/react/providers/KarnProvider.js.map +1 -0
  66. package/dist/utils/decay.d.ts +19 -0
  67. package/dist/utils/decay.d.ts.map +1 -0
  68. package/dist/utils/decay.js +33 -0
  69. package/dist/utils/decay.js.map +1 -0
  70. package/dist/utils/index.d.ts +4 -0
  71. package/dist/utils/index.d.ts.map +1 -0
  72. package/dist/utils/index.js +4 -0
  73. package/dist/utils/index.js.map +1 -0
  74. package/dist/utils/polling.d.ts +75 -0
  75. package/dist/utils/polling.d.ts.map +1 -0
  76. package/dist/utils/polling.js +104 -0
  77. package/dist/utils/polling.js.map +1 -0
  78. package/dist/utils/simulation.d.ts +67 -0
  79. package/dist/utils/simulation.d.ts.map +1 -0
  80. package/dist/utils/simulation.js +88 -0
  81. package/dist/utils/simulation.js.map +1 -0
  82. package/dist/wallet/WalletManager.d.ts +77 -0
  83. package/dist/wallet/WalletManager.d.ts.map +1 -0
  84. package/dist/wallet/WalletManager.js +268 -0
  85. package/dist/wallet/WalletManager.js.map +1 -0
  86. package/dist/wallet/adapters/AlbedoAdapter.d.ts +47 -0
  87. package/dist/wallet/adapters/AlbedoAdapter.d.ts.map +1 -0
  88. package/dist/wallet/adapters/AlbedoAdapter.js +84 -0
  89. package/dist/wallet/adapters/AlbedoAdapter.js.map +1 -0
  90. package/dist/wallet/adapters/FreighterAdapter.d.ts +42 -0
  91. package/dist/wallet/adapters/FreighterAdapter.d.ts.map +1 -0
  92. package/dist/wallet/adapters/FreighterAdapter.js +107 -0
  93. package/dist/wallet/adapters/FreighterAdapter.js.map +1 -0
  94. package/dist/wallet/adapters/LobstrAdapter.d.ts +34 -0
  95. package/dist/wallet/adapters/LobstrAdapter.d.ts.map +1 -0
  96. package/dist/wallet/adapters/LobstrAdapter.js +89 -0
  97. package/dist/wallet/adapters/LobstrAdapter.js.map +1 -0
  98. package/dist/wallet/adapters/RabetAdapter.d.ts +39 -0
  99. package/dist/wallet/adapters/RabetAdapter.d.ts.map +1 -0
  100. package/dist/wallet/adapters/RabetAdapter.js +104 -0
  101. package/dist/wallet/adapters/RabetAdapter.js.map +1 -0
  102. package/dist/wallet/adapters/xBullAdapter.d.ts +41 -0
  103. package/dist/wallet/adapters/xBullAdapter.d.ts.map +1 -0
  104. package/dist/wallet/adapters/xBullAdapter.js +72 -0
  105. package/dist/wallet/adapters/xBullAdapter.js.map +1 -0
  106. package/dist/wallet/index.d.ts +20 -0
  107. package/dist/wallet/index.d.ts.map +1 -0
  108. package/dist/wallet/index.js +23 -0
  109. package/dist/wallet/index.js.map +1 -0
  110. package/dist/wallet/types.d.ts +165 -0
  111. package/dist/wallet/types.d.ts.map +1 -0
  112. package/dist/wallet/types.js +50 -0
  113. package/dist/wallet/types.js.map +1 -0
  114. package/examples/basic-usage.ts +28 -0
  115. package/jest.config.js +37 -0
  116. package/package.json +58 -0
  117. package/src/__tests__/README.md +364 -0
  118. package/src/__tests__/setup.ts +57 -0
  119. package/src/__tests__/utils/decay.test.ts +331 -0
  120. package/src/__tests__/wallet/WalletManager.test.ts +410 -0
  121. package/src/clients/GovernorClient.ts +23 -0
  122. package/src/clients/TreasuryClient.ts +23 -0
  123. package/src/clients/ValocracyClient.ts +48 -0
  124. package/src/clients/index.ts +3 -0
  125. package/src/generated/governor/README.md +54 -0
  126. package/src/generated/governor/package.json +17 -0
  127. package/src/generated/governor/src/index.ts +428 -0
  128. package/src/generated/governor/tsconfig.json +98 -0
  129. package/src/generated/treasury/README.md +54 -0
  130. package/src/generated/treasury/package.json +17 -0
  131. package/src/generated/treasury/src/index.ts +495 -0
  132. package/src/generated/treasury/tsconfig.json +98 -0
  133. package/src/generated/valocracy/README.md +54 -0
  134. package/src/generated/valocracy/package.json +17 -0
  135. package/src/generated/valocracy/src/index.ts +831 -0
  136. package/src/generated/valocracy/tsconfig.json +98 -0
  137. package/src/index.ts +4 -0
  138. package/src/react/hooks/useGovernor.ts +69 -0
  139. package/src/react/hooks/useMultiWallet.ts +169 -0
  140. package/src/react/hooks/useTreasury.ts +57 -0
  141. package/src/react/hooks/useValocracy.ts +66 -0
  142. package/src/react/hooks/useWallet.ts +60 -0
  143. package/src/react/index.ts +6 -0
  144. package/src/react/providers/KarnProvider.tsx +63 -0
  145. package/src/utils/decay.ts +44 -0
  146. package/src/utils/index.ts +3 -0
  147. package/src/utils/polling.ts +193 -0
  148. package/src/utils/simulation.ts +136 -0
  149. package/src/wallet/WalletManager.ts +360 -0
  150. package/src/wallet/adapters/AlbedoAdapter.ts +140 -0
  151. package/src/wallet/adapters/FreighterAdapter.ts +179 -0
  152. package/src/wallet/adapters/LobstrAdapter.ts +142 -0
  153. package/src/wallet/adapters/RabetAdapter.ts +162 -0
  154. package/src/wallet/adapters/xBullAdapter.ts +123 -0
  155. package/src/wallet/index.ts +37 -0
  156. package/src/wallet/types.ts +204 -0
  157. package/tsconfig.json +40 -0
@@ -0,0 +1,268 @@
1
+ /**
2
+ * Manages wallet selection, connection state, and provides unified API
3
+ * for interacting with any supported Stellar wallet.
4
+ */
5
+ import { WalletType, WalletEvent, WalletError, WalletErrorCode, } from './types.js';
6
+ import { FreighterAdapter } from './adapters/FreighterAdapter.js';
7
+ import { AlbedoAdapter } from './adapters/AlbedoAdapter.js';
8
+ import { LobstrAdapter } from './adapters/LobstrAdapter.js';
9
+ import { XBullAdapter } from './adapters/xBullAdapter.js';
10
+ import { RabetAdapter } from './adapters/RabetAdapter.js';
11
+ export class WalletManager {
12
+ constructor() {
13
+ this.currentAdapter = null;
14
+ // Initialize all wallet adapters
15
+ this.adapters = new Map([
16
+ [WalletType.FREIGHTER, new FreighterAdapter()],
17
+ [WalletType.ALBEDO, new AlbedoAdapter()],
18
+ [WalletType.LOBSTR, new LobstrAdapter()],
19
+ [WalletType.XBULL, new XBullAdapter()],
20
+ [WalletType.RABET, new RabetAdapter()],
21
+ ]);
22
+ // Initialize state
23
+ this.state = {
24
+ isConnected: false,
25
+ address: null,
26
+ walletType: null,
27
+ isConnecting: false,
28
+ error: null,
29
+ walletName: null,
30
+ };
31
+ // Initialize event listeners
32
+ this.eventListeners = new Map([
33
+ [WalletEvent.CONNECT, new Set()],
34
+ [WalletEvent.DISCONNECT, new Set()],
35
+ [WalletEvent.ACCOUNT_CHANGED, new Set()],
36
+ [WalletEvent.NETWORK_CHANGED, new Set()],
37
+ ]);
38
+ // Try to restore previous connection from localStorage
39
+ this.restoreConnection();
40
+ }
41
+ /**
42
+ * Get all available (installed) wallets
43
+ */
44
+ async getAvailableWallets() {
45
+ const available = [];
46
+ for (const adapter of this.adapters.values()) {
47
+ if (await adapter.isAvailable()) {
48
+ available.push(adapter.metadata);
49
+ }
50
+ }
51
+ return available;
52
+ }
53
+ /**
54
+ * Get all wallet metadata (including unavailable wallets)
55
+ */
56
+ getAllWallets() {
57
+ return Array.from(this.adapters.values()).map((adapter) => adapter.metadata);
58
+ }
59
+ /**
60
+ * Get current wallet state
61
+ */
62
+ getState() {
63
+ return { ...this.state };
64
+ }
65
+ /**
66
+ * Connect to a specific wallet
67
+ */
68
+ async connect(walletType) {
69
+ const adapter = this.adapters.get(walletType);
70
+ if (!adapter) {
71
+ throw new WalletError(`Wallet type ${walletType} is not supported`, WalletErrorCode.UNSUPPORTED_METHOD);
72
+ }
73
+ // Check if wallet is available
74
+ const isAvailable = await adapter.isAvailable();
75
+ if (!isAvailable) {
76
+ throw new WalletError(`${adapter.metadata.name} is not installed`, WalletErrorCode.NOT_INSTALLED, walletType);
77
+ }
78
+ // Disconnect any existing connection
79
+ if (this.currentAdapter) {
80
+ await this.disconnect();
81
+ }
82
+ // Update state
83
+ this.state.isConnecting = true;
84
+ this.state.error = null;
85
+ try {
86
+ // Connect to wallet
87
+ const address = await adapter.connect();
88
+ // Update state
89
+ this.currentAdapter = adapter;
90
+ this.state.isConnected = true;
91
+ this.state.address = address;
92
+ this.state.walletType = walletType;
93
+ this.state.walletName = adapter.metadata.name;
94
+ this.state.isConnecting = false;
95
+ // Save to localStorage for auto-reconnect
96
+ this.saveConnection(walletType, address);
97
+ // Emit connect event
98
+ this.emitEvent(WalletEvent.CONNECT, { walletType, address });
99
+ return {
100
+ walletType,
101
+ address,
102
+ adapter,
103
+ };
104
+ }
105
+ catch (error) {
106
+ this.state.isConnecting = false;
107
+ this.state.error = error.message;
108
+ if (error instanceof WalletError) {
109
+ throw error;
110
+ }
111
+ throw new WalletError(`Failed to connect to ${adapter.metadata.name}: ${error.message}`, WalletErrorCode.UNKNOWN_ERROR, walletType);
112
+ }
113
+ }
114
+ /**
115
+ * Disconnect from current wallet
116
+ */
117
+ async disconnect() {
118
+ if (!this.currentAdapter) {
119
+ return;
120
+ }
121
+ const walletType = this.state.walletType;
122
+ try {
123
+ await this.currentAdapter.disconnect();
124
+ }
125
+ catch (error) {
126
+ // Ignore disconnect errors
127
+ console.warn('Error during disconnect:', error);
128
+ }
129
+ // Clear state
130
+ this.currentAdapter = null;
131
+ this.state.isConnected = false;
132
+ this.state.address = null;
133
+ this.state.walletType = null;
134
+ this.state.walletName = null;
135
+ this.state.error = null;
136
+ // Clear localStorage
137
+ this.clearConnection();
138
+ // Emit disconnect event
139
+ if (walletType) {
140
+ this.emitEvent(WalletEvent.DISCONNECT, { walletType });
141
+ }
142
+ }
143
+ /**
144
+ * Get current connected address
145
+ */
146
+ async getAddress() {
147
+ if (!this.currentAdapter) {
148
+ return null;
149
+ }
150
+ return await this.currentAdapter.getAddress();
151
+ }
152
+ /**
153
+ * Check if wallet is connected
154
+ */
155
+ async isConnected() {
156
+ if (!this.currentAdapter) {
157
+ return false;
158
+ }
159
+ return await this.currentAdapter.isConnected();
160
+ }
161
+ /**
162
+ * Sign a transaction with current wallet
163
+ */
164
+ async signTransaction(xdr, options) {
165
+ if (!this.currentAdapter) {
166
+ throw new WalletError('No wallet connected', WalletErrorCode.NOT_CONNECTED);
167
+ }
168
+ return await this.currentAdapter.signTransaction(xdr, options);
169
+ }
170
+ /**
171
+ * Sign a message (if supported by wallet)
172
+ */
173
+ async signMessage(message) {
174
+ if (!this.currentAdapter) {
175
+ throw new WalletError('No wallet connected', WalletErrorCode.NOT_CONNECTED);
176
+ }
177
+ if (!this.currentAdapter.signMessage) {
178
+ throw new WalletError(`${this.state.walletName} does not support message signing`, WalletErrorCode.UNSUPPORTED_METHOD, this.state.walletType || undefined);
179
+ }
180
+ return await this.currentAdapter.signMessage(message);
181
+ }
182
+ /**
183
+ * Get current network (if supported by wallet)
184
+ */
185
+ async getNetwork() {
186
+ if (!this.currentAdapter) {
187
+ throw new WalletError('No wallet connected', WalletErrorCode.NOT_CONNECTED);
188
+ }
189
+ if (!this.currentAdapter.getNetwork) {
190
+ throw new WalletError(`${this.state.walletName} does not support network detection`, WalletErrorCode.UNSUPPORTED_METHOD, this.state.walletType || undefined);
191
+ }
192
+ return await this.currentAdapter.getNetwork();
193
+ }
194
+ /**
195
+ * Add event listener
196
+ */
197
+ on(event, listener) {
198
+ const listeners = this.eventListeners.get(event);
199
+ if (listeners) {
200
+ listeners.add(listener);
201
+ }
202
+ }
203
+ /**
204
+ * Remove event listener
205
+ */
206
+ off(event, listener) {
207
+ const listeners = this.eventListeners.get(event);
208
+ if (listeners) {
209
+ listeners.delete(listener);
210
+ }
211
+ }
212
+ /**
213
+ * Emit event to all listeners
214
+ */
215
+ emitEvent(event, payload) {
216
+ const listeners = this.eventListeners.get(event);
217
+ if (listeners) {
218
+ listeners.forEach((listener) => listener(payload));
219
+ }
220
+ }
221
+ /**
222
+ * Save connection to localStorage for auto-reconnect
223
+ */
224
+ saveConnection(walletType, address) {
225
+ if (typeof window === 'undefined')
226
+ return;
227
+ try {
228
+ localStorage.setItem('karn_wallet_connection', JSON.stringify({ walletType, address }));
229
+ }
230
+ catch (error) {
231
+ console.warn('Failed to save wallet connection:', error);
232
+ }
233
+ }
234
+ /**
235
+ * Clear connection from localStorage
236
+ */
237
+ clearConnection() {
238
+ if (typeof window === 'undefined')
239
+ return;
240
+ try {
241
+ localStorage.removeItem('karn_wallet_connection');
242
+ }
243
+ catch (error) {
244
+ console.warn('Failed to clear wallet connection:', error);
245
+ }
246
+ }
247
+ /**
248
+ * Restore previous connection from localStorage
249
+ */
250
+ async restoreConnection() {
251
+ if (typeof window === 'undefined')
252
+ return;
253
+ try {
254
+ const saved = localStorage.getItem('karn_wallet_connection');
255
+ if (!saved)
256
+ return;
257
+ const { walletType } = JSON.parse(saved);
258
+ // Try to reconnect silently
259
+ await this.connect(walletType);
260
+ }
261
+ catch (error) {
262
+ // Silent fail - user can manually reconnect
263
+ console.debug('Failed to restore wallet connection:', error);
264
+ this.clearConnection();
265
+ }
266
+ }
267
+ }
268
+ //# sourceMappingURL=WalletManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WalletManager.js","sourceRoot":"","sources":["../../src/wallet/WalletManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Albedo Wallet Adapter
3
+ *
4
+ * Web-based Stellar wallet (no extension required)
5
+ * https://albedo.link
6
+ */
7
+ import { WalletAdapter, WalletType, WalletMetadata, SignTransactionOptions } from '../types.js';
8
+ interface AlbedoAPI {
9
+ publicKey(options?: {
10
+ require_existing?: boolean;
11
+ }): Promise<{
12
+ pubkey: string;
13
+ }>;
14
+ tx(options: {
15
+ xdr: string;
16
+ network?: string;
17
+ pubkey?: string;
18
+ submit?: boolean;
19
+ }): Promise<{
20
+ signed_envelope_xdr: string;
21
+ tx_hash?: string;
22
+ network?: string;
23
+ }>;
24
+ trust(options: {
25
+ asset_code: string;
26
+ asset_issuer: string;
27
+ }): Promise<any>;
28
+ }
29
+ declare global {
30
+ interface Window {
31
+ albedo?: AlbedoAPI;
32
+ }
33
+ }
34
+ export declare class AlbedoAdapter implements WalletAdapter {
35
+ type: WalletType;
36
+ metadata: WalletMetadata;
37
+ private currentAddress;
38
+ isAvailable(): Promise<boolean>;
39
+ private loadAlbedoScript;
40
+ connect(): Promise<string>;
41
+ disconnect(): Promise<void>;
42
+ getAddress(): Promise<string | null>;
43
+ isConnected(): Promise<boolean>;
44
+ signTransaction(xdr: string, options?: SignTransactionOptions): Promise<string>;
45
+ }
46
+ export {};
47
+ //# sourceMappingURL=AlbedoAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlbedoAdapter.d.ts","sourceRoot":"","sources":["../../../src/wallet/adapters/AlbedoAdapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,aAAa,EACb,UAAU,EACV,cAAc,EACd,sBAAsB,EAGvB,MAAM,aAAa,CAAC;AAGrB,UAAU,SAAS;IACjB,SAAS,CAAC,OAAO,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjF,EAAE,CAAC,OAAO,EAAE;QACV,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,GAAG,OAAO,CAAC;QAAE,mBAAmB,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjF,KAAK,CAAC,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CAC5E;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,MAAM,CAAC,EAAE,SAAS,CAAC;KACpB;CACF;AAED,qBAAa,aAAc,YAAW,aAAa;IACjD,IAAI,aAAqB;IAEzB,QAAQ,EAAE,cAAc,CAMtB;IAEF,OAAO,CAAC,cAAc,CAAuB;IAEvC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;YASvB,gBAAgB;IAgBxB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAwB1B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIpC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,eAAe,CACnB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,MAAM,CAAC;CA4BnB"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Albedo Wallet Adapter
3
+ *
4
+ * Web-based Stellar wallet (no extension required)
5
+ * https://albedo.link
6
+ */
7
+ import { WalletType, WalletError, WalletErrorCode, } from '../types.js';
8
+ export class AlbedoAdapter {
9
+ constructor() {
10
+ this.type = WalletType.ALBEDO;
11
+ this.metadata = {
12
+ type: WalletType.ALBEDO,
13
+ name: 'Albedo',
14
+ url: 'https://albedo.link',
15
+ description: 'Web-based Stellar wallet with seamless browser integration',
16
+ isAvailable: true, // Albedo is always available (web-based)
17
+ };
18
+ this.currentAddress = null;
19
+ }
20
+ async isAvailable() {
21
+ // Albedo is web-based, always available
22
+ // Load script if not present
23
+ if (typeof window !== 'undefined' && !window.albedo) {
24
+ await this.loadAlbedoScript();
25
+ }
26
+ return true;
27
+ }
28
+ async loadAlbedoScript() {
29
+ return new Promise((resolve, reject) => {
30
+ if (window.albedo) {
31
+ resolve();
32
+ return;
33
+ }
34
+ const script = document.createElement('script');
35
+ script.src = 'https://cdn.jsdelivr.net/npm/@albedo-link/intent@latest/lib/albedo.intent.js';
36
+ script.async = true;
37
+ script.onload = () => resolve();
38
+ script.onerror = () => reject(new Error('Failed to load Albedo'));
39
+ document.head.appendChild(script);
40
+ });
41
+ }
42
+ async connect() {
43
+ await this.isAvailable();
44
+ if (!window.albedo) {
45
+ throw new WalletError('Albedo failed to load', WalletErrorCode.NOT_INSTALLED, WalletType.ALBEDO);
46
+ }
47
+ try {
48
+ const result = await window.albedo.publicKey({ require_existing: false });
49
+ this.currentAddress = result.pubkey;
50
+ return result.pubkey;
51
+ }
52
+ catch (error) {
53
+ throw new WalletError(`Failed to connect to Albedo: ${error.message}`, WalletErrorCode.USER_REJECTED, WalletType.ALBEDO);
54
+ }
55
+ }
56
+ async disconnect() {
57
+ this.currentAddress = null;
58
+ }
59
+ async getAddress() {
60
+ return this.currentAddress;
61
+ }
62
+ async isConnected() {
63
+ return this.currentAddress !== null;
64
+ }
65
+ async signTransaction(xdr, options) {
66
+ await this.isAvailable();
67
+ if (!window.albedo) {
68
+ throw new WalletError('Albedo is not available', WalletErrorCode.NOT_CONNECTED, WalletType.ALBEDO);
69
+ }
70
+ try {
71
+ const result = await window.albedo.tx({
72
+ xdr,
73
+ network: options?.networkPassphrase || 'testnet',
74
+ pubkey: this.currentAddress || undefined,
75
+ submit: false, // Don't auto-submit
76
+ });
77
+ return result.signed_envelope_xdr;
78
+ }
79
+ catch (error) {
80
+ throw new WalletError(`Failed to sign transaction: ${error.message}`, WalletErrorCode.SIGNING_FAILED, WalletType.ALBEDO);
81
+ }
82
+ }
83
+ }
84
+ //# sourceMappingURL=AlbedoAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlbedoAdapter.js","sourceRoot":"","sources":["../../../src/wallet/adapters/AlbedoAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Freighter Wallet Adapter
3
+ *
4
+ * Official Stellar wallet extension
5
+ * https://freighter.app
6
+ */
7
+ import { WalletAdapter, WalletType, WalletMetadata, SignTransactionOptions } from '../types.js';
8
+ interface FreighterAPI {
9
+ isConnected(): Promise<boolean>;
10
+ getPublicKey(): Promise<string>;
11
+ signTransaction(xdr: string, opts?: {
12
+ network?: string;
13
+ networkPassphrase?: string;
14
+ accountToSign?: string;
15
+ }): Promise<string>;
16
+ getNetwork(): Promise<string>;
17
+ getNetworkDetails(): Promise<{
18
+ network: string;
19
+ networkPassphrase: string;
20
+ }>;
21
+ }
22
+ declare global {
23
+ interface Window {
24
+ freighter?: FreighterAPI;
25
+ }
26
+ }
27
+ export declare class FreighterAdapter implements WalletAdapter {
28
+ type: WalletType;
29
+ metadata: WalletMetadata;
30
+ private api;
31
+ constructor();
32
+ private init;
33
+ isAvailable(): Promise<boolean>;
34
+ connect(): Promise<string>;
35
+ disconnect(): Promise<void>;
36
+ getAddress(): Promise<string | null>;
37
+ isConnected(): Promise<boolean>;
38
+ signTransaction(xdr: string, options?: SignTransactionOptions): Promise<string>;
39
+ getNetwork(): Promise<string>;
40
+ }
41
+ export {};
42
+ //# sourceMappingURL=FreighterAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FreighterAdapter.d.ts","sourceRoot":"","sources":["../../../src/wallet/adapters/FreighterAdapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,aAAa,EACb,UAAU,EACV,cAAc,EACd,sBAAsB,EAGvB,MAAM,aAAa,CAAC;AAGrB,UAAU,YAAY;IACpB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,eAAe,CACb,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9E,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,iBAAiB,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9E;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,SAAS,CAAC,EAAE,YAAY,CAAC;KAC1B;CACF;AAED,qBAAa,gBAAiB,YAAW,aAAa;IACpD,IAAI,aAAwB;IAE5B,QAAQ,EAAE,cAAc,CAQtB;IAEF,OAAO,CAAC,GAAG,CAA6B;;IAMxC,OAAO,CAAC,IAAI;IAON,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IA8B1B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAapC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAU/B,eAAe,CACnB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,MAAM,CAAC;IAiCZ,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;CAmBpC"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Freighter Wallet Adapter
3
+ *
4
+ * Official Stellar wallet extension
5
+ * https://freighter.app
6
+ */
7
+ import { WalletType, WalletError, WalletErrorCode, } from '../types.js';
8
+ export class FreighterAdapter {
9
+ constructor() {
10
+ this.type = WalletType.FREIGHTER;
11
+ this.metadata = {
12
+ type: WalletType.FREIGHTER,
13
+ name: 'Freighter',
14
+ url: 'https://freighter.app',
15
+ chromeUrl: 'https://chrome.google.com/webstore/detail/freighter/bcacfldlkkdogcmkkibnjlakofdplcbk',
16
+ firefoxUrl: 'https://addons.mozilla.org/en-US/firefox/addon/freighter/',
17
+ description: 'Official Stellar wallet extension with Soroban support',
18
+ isAvailable: false,
19
+ };
20
+ this.api = null;
21
+ this.init();
22
+ }
23
+ init() {
24
+ if (typeof window !== 'undefined' && window.freighter) {
25
+ this.api = window.freighter;
26
+ this.metadata.isAvailable = true;
27
+ }
28
+ }
29
+ async isAvailable() {
30
+ return this.metadata.isAvailable;
31
+ }
32
+ async connect() {
33
+ if (!this.api) {
34
+ throw new WalletError('Freighter is not installed. Please install from https://freighter.app', WalletErrorCode.NOT_INSTALLED, WalletType.FREIGHTER);
35
+ }
36
+ try {
37
+ const publicKey = await this.api.getPublicKey();
38
+ if (!publicKey) {
39
+ throw new WalletError('User rejected connection request', WalletErrorCode.USER_REJECTED, WalletType.FREIGHTER);
40
+ }
41
+ return publicKey;
42
+ }
43
+ catch (error) {
44
+ if (error instanceof WalletError)
45
+ throw error;
46
+ throw new WalletError(`Failed to connect to Freighter: ${error.message}`, WalletErrorCode.UNKNOWN_ERROR, WalletType.FREIGHTER);
47
+ }
48
+ }
49
+ async disconnect() {
50
+ // Freighter doesn't have explicit disconnect
51
+ // Connection state is managed by extension
52
+ this.api = null;
53
+ }
54
+ async getAddress() {
55
+ if (!this.api)
56
+ return null;
57
+ try {
58
+ const connected = await this.api.isConnected();
59
+ if (!connected)
60
+ return null;
61
+ return await this.api.getPublicKey();
62
+ }
63
+ catch {
64
+ return null;
65
+ }
66
+ }
67
+ async isConnected() {
68
+ if (!this.api)
69
+ return false;
70
+ try {
71
+ return await this.api.isConnected();
72
+ }
73
+ catch {
74
+ return false;
75
+ }
76
+ }
77
+ async signTransaction(xdr, options) {
78
+ if (!this.api) {
79
+ throw new WalletError('Freighter is not connected', WalletErrorCode.NOT_CONNECTED, WalletType.FREIGHTER);
80
+ }
81
+ try {
82
+ const signedXdr = await this.api.signTransaction(xdr, {
83
+ networkPassphrase: options?.networkPassphrase,
84
+ accountToSign: options?.accountToSign,
85
+ });
86
+ return signedXdr;
87
+ }
88
+ catch (error) {
89
+ if (error.message?.includes('User declined')) {
90
+ throw new WalletError('User rejected signature request', WalletErrorCode.USER_REJECTED, WalletType.FREIGHTER);
91
+ }
92
+ throw new WalletError(`Failed to sign transaction: ${error.message}`, WalletErrorCode.SIGNING_FAILED, WalletType.FREIGHTER);
93
+ }
94
+ }
95
+ async getNetwork() {
96
+ if (!this.api) {
97
+ throw new WalletError('Freighter is not connected', WalletErrorCode.NOT_CONNECTED, WalletType.FREIGHTER);
98
+ }
99
+ try {
100
+ return await this.api.getNetwork();
101
+ }
102
+ catch (error) {
103
+ throw new WalletError(`Failed to get network: ${error.message}`, WalletErrorCode.NETWORK_ERROR, WalletType.FREIGHTER);
104
+ }
105
+ }
106
+ }
107
+ //# sourceMappingURL=FreighterAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FreighterAdapter.js","sourceRoot":"","sources":["../../../src/wallet/adapters/FreighterAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Lobstr Wallet Adapter
3
+ *
4
+ * Popular Stellar mobile wallet with extension support
5
+ * https://lobstr.co
6
+ */
7
+ import { WalletAdapter, WalletType, WalletMetadata, SignTransactionOptions } from '../types.js';
8
+ interface LobstrAPI {
9
+ isConnected(): Promise<boolean>;
10
+ getPublicKey(): Promise<string>;
11
+ signTransaction(xdr: string, opts?: {
12
+ network?: string;
13
+ }): Promise<string>;
14
+ }
15
+ declare global {
16
+ interface Window {
17
+ lobstrExtension?: LobstrAPI;
18
+ }
19
+ }
20
+ export declare class LobstrAdapter implements WalletAdapter {
21
+ type: WalletType;
22
+ metadata: WalletMetadata;
23
+ private api;
24
+ constructor();
25
+ private init;
26
+ isAvailable(): Promise<boolean>;
27
+ connect(): Promise<string>;
28
+ disconnect(): Promise<void>;
29
+ getAddress(): Promise<string | null>;
30
+ isConnected(): Promise<boolean>;
31
+ signTransaction(xdr: string, options?: SignTransactionOptions): Promise<string>;
32
+ }
33
+ export {};
34
+ //# sourceMappingURL=LobstrAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LobstrAdapter.d.ts","sourceRoot":"","sources":["../../../src/wallet/adapters/LobstrAdapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,aAAa,EACb,UAAU,EACV,cAAc,EACd,sBAAsB,EAGvB,MAAM,aAAa,CAAC;AAGrB,UAAU,SAAS;IACjB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5E;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,eAAe,CAAC,EAAE,SAAS,CAAC;KAC7B;CACF;AAED,qBAAa,aAAc,YAAW,aAAa;IACjD,IAAI,aAAqB;IAEzB,QAAQ,EAAE,cAAc,CAOtB;IAEF,OAAO,CAAC,GAAG,CAA0B;;IAMrC,OAAO,CAAC,IAAI;IAON,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IA8B1B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAapC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAU/B,eAAe,CACnB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,MAAM,CAAC;CAuBnB"}