@karn_lat/protocol-sdk 0.1.0-alpha.3 → 0.1.0-alpha.5

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.
package/PUBLISH.md CHANGED
@@ -31,7 +31,11 @@ console.log('✓ Root import works!');
31
31
  const client = new ValocracyClient(
32
32
  'Test SDF Network ; September 2015',
33
33
  'https://soroban-testnet.stellar.org',
34
- 'CCSUA4DTG44VVEEMC2POYD7XKD7PFZFBWIMBO5Q47GYEOL2SSXDPONXX'
34
+ <<<<<<< HEAD
35
+ 'REDACTED_CONTRACT_ID_VALOCRACY'
36
+ =======
37
+ 'CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"'
38
+ >>>>>>> 257583c5837a1af14efbaa2ea574613bd78df4b0
35
39
  );
36
40
 
37
41
  console.log('✓ Client instantiated successfully!');
package/README.md CHANGED
@@ -5,56 +5,84 @@
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
6
  [![Stellar: Soroban](https://img.shields.io/badge/Stellar-Soroban-blue.svg)](https://soroban.stellar.org)
7
7
 
8
- > **The official TypeScript SDK for Karn Protocol**
9
- >
10
- > Contribution-driven governance on Stellar/Soroban - where power = contribution, not capital
8
+ TypeScript SDK for integrating **Karn Protocol** contracts (Valocracy, Governor, Treasury) into web apps.
9
+
10
+ Includes:
11
+ - Typed contract clients (thin wrappers over Soroban-generated bindings)
12
+ - React provider + hooks for Next.js/React apps
13
+ - Multi-wallet connection manager (Freighter, Lobstr, xBull, Rabet, Albedo)
14
+ - Utilities (mana decay, polling helpers, simulations)
11
15
 
12
16
  ## Installation
13
17
 
14
18
  ```bash
15
- npm install @karn_lat/protocol-sdk @stellar/stellar-sdk
19
+ npm install @karn_lat/protocol-sdk
16
20
  ```
17
21
 
22
+ ## Requirements
23
+
24
+ - ESM package (`"type": "module"`)
25
+ - Node.js 18+ recommended
26
+ - React 18+ only if you use `@karn_lat/protocol-sdk/react` exports
27
+
18
28
  ## Import Patterns
19
29
 
20
- The SDK supports both root and subpath imports for tree-shaking:
30
+ The SDK supports root and subpath imports (recommended for tree-shaking):
21
31
 
22
32
  ```typescript
23
- // Root import (all modules)
33
+ // Root import
24
34
  import { ValocracyClient, GovernorClient, TreasuryClient } from '@karn_lat/protocol-sdk';
25
35
 
26
- // Subpath imports (tree-shakeable)
36
+ // Subpath imports
27
37
  import { ValocracyClient } from '@karn_lat/protocol-sdk/clients';
28
38
  import { useKarn, KarnProvider } from '@karn_lat/protocol-sdk/react';
29
39
  import { WalletManager } from '@karn_lat/protocol-sdk/wallet';
30
- import { calculateMana } from '@karn_lat/protocol-sdk/utils';
40
+ import { calculateManaAtTimestamp } from '@karn_lat/protocol-sdk/utils';
31
41
  ```
32
42
 
33
- ## Quick Start
43
+ ## Network Constants
44
+
45
+ Common network passphrases:
46
+
47
+ ```ts
48
+ export const STELLAR = {
49
+ TESTNET_PASSPHRASE: 'Test SDF Network ; September 2015',
50
+ PUBLIC_PASSPHRASE: 'Public Global Stellar Network ; September 2015',
51
+ };
52
+ ```
53
+
54
+ Use an RPC URL appropriate for your environment (public testnet RPC, self-hosted RPC, etc.).
55
+
56
+ ## Quick Start (Clients)
34
57
 
35
58
  ```typescript
36
- import {
37
- ValocracyClient,
38
- GovernorClient,
39
- TreasuryClient,
40
- rpc
41
- } from '@karn_lat/protocol-sdk';
59
+ import { ValocracyClient, GovernorClient, TreasuryClient } from '@karn_lat/protocol-sdk';
42
60
 
43
61
  // Configuration
44
- const NETWORK_PASSPHRASE = "Test SDF Network ; September 2015";
45
- const RPC_URL = "https://soroban-testnet.stellar.org";
46
- const CONTRACT_ID = "C...";
62
+ const NETWORK_PASSPHRASE = 'Test SDF Network ; September 2015';
63
+ const RPC_URL = 'https://soroban-testnet.stellar.org';
64
+
65
+ const CONTRACTS = {
66
+ valocracy: 'C...',
67
+ governor: 'C...',
68
+ treasury: 'C...',
69
+ };
47
70
 
48
71
  async function main() {
49
- const valocracy = new ValocracyClient(NETWORK_PASSPHRASE, RPC_URL, CONTRACT_ID);
72
+ const valocracy = new ValocracyClient(NETWORK_PASSPHRASE, RPC_URL, CONTRACTS.valocracy);
73
+ const governor = new GovernorClient(NETWORK_PASSPHRASE, RPC_URL, CONTRACTS.governor);
74
+ const treasury = new TreasuryClient(NETWORK_PASSPHRASE, RPC_URL, CONTRACTS.treasury);
50
75
 
51
76
  // Read data
52
- const level = await valocracy.getLevel("G...");
53
- console.log("User Level:", level);
77
+ const level = await valocracy.getLevel('G...');
78
+ const mana = await valocracy.getMana('G...');
79
+ const claimable = await treasury.getClaimableBalance('G...');
80
+
81
+ console.log({ level, mana, claimable });
54
82
 
55
- // Calculate Mana (client-side)
56
- const mana = await valocracy.getMana("G...");
57
- console.log("Voting Power:", mana);
83
+ // Governance read
84
+ const proposal = await governor.getProposal(1n);
85
+ console.log({ proposal });
58
86
  }
59
87
 
60
88
  main();
@@ -62,22 +90,22 @@ main();
62
90
 
63
91
  ## Features
64
92
 
65
- - **Typed Clients**: Wrappers for Valocracy, Governor, and Treasury contracts.
66
- - **Mana Decay**: Client-side utility to calculate real-time voting power.
67
- - **React Hooks**: Ready-to-use hooks for React applications (`useValocracy`, `useWallet`).
68
- - **Multi-Wallet**: Helper for wallet connection (Freighter).
93
+ - **Typed clients**: `ValocracyClient`, `GovernorClient`, `TreasuryClient`
94
+ - **React**: `KarnProvider`, `useKarn`, `useValocracy`, `useGovernor`, `useTreasury`, `useWallet`, `useMultiWallet`
95
+ - **Multi-wallet**: `WalletManager` + adapters
96
+ - **Utilities**: mana decay helpers + polling/simulation helpers
69
97
 
70
98
  ## React Usage
71
99
 
72
- Wrap your app in `KarnProvider`:
100
+ Wrap your app in `KarnProvider` (React/Next.js):
73
101
 
74
102
  ```tsx
75
- import { KarnProvider } from '@karn_lat/protocol-sdk';
103
+ import { KarnProvider } from '@karn_lat/protocol-sdk/react';
76
104
 
77
105
  const config = {
78
- networkPassphrase: "...",
79
- rpcUrl: "...",
80
- contracts: { valocracy: "...", governor: "...", treasury: "..." }
106
+ networkPassphrase: 'Test SDF Network ; September 2015',
107
+ rpcUrl: 'https://soroban-testnet.stellar.org',
108
+ contracts: { valocracy: 'C...', governor: 'C...', treasury: 'C...' },
81
109
  };
82
110
 
83
111
  function App() {
@@ -88,3 +116,56 @@ function App() {
88
116
  );
89
117
  }
90
118
  ```
119
+
120
+ Then, in a component:
121
+
122
+ ```tsx
123
+ import { useValocracy, useTreasury } from '@karn_lat/protocol-sdk/react';
124
+
125
+ export function MyComponent({ address }: { address: string }) {
126
+ const { getLevel, getMana } = useValocracy();
127
+ const { getClaimableBalance } = useTreasury();
128
+
129
+ // Call these from effects/actions; they are async.
130
+ // Example omitted for brevity.
131
+ return null;
132
+ }
133
+ ```
134
+
135
+ ## Wallet Support
136
+
137
+ The wallet module is intended for browser usage. In Next.js, use it in client components only.
138
+
139
+ ```ts
140
+ import { WalletManager, WalletType } from '@karn_lat/protocol-sdk/wallet';
141
+
142
+ const wallets = new WalletManager();
143
+ const available = await wallets.getAvailableWallets();
144
+
145
+ await wallets.connect(WalletType.FREIGHTER);
146
+ const address = await wallets.getAddress();
147
+ ```
148
+
149
+ Notes:
150
+ - **Freighter/Lobstr/xBull/Rabet** availability is detected from injected `window.*` APIs.
151
+ - **Albedo** is web-based; this SDK does not inject external scripts. Provide `window.albedo` yourself if you want to use Albedo.
152
+
153
+ ## Utilities
154
+
155
+ ```ts
156
+ import { calculateManaAtTimestamp } from '@karn_lat/protocol-sdk/utils';
157
+
158
+ // Example: project voting power at a given timestamp (use values from on-chain stats/events).
159
+ const mana = calculateManaAtTimestamp({
160
+ level: 100,
161
+ expiry: 1_800_000_000,
162
+ now: 1_700_000_000,
163
+ });
164
+ ```
165
+
166
+ ## API Surface
167
+
168
+ - Clients: `@karn_lat/protocol-sdk/clients`
169
+ - React: `@karn_lat/protocol-sdk/react`
170
+ - Wallet: `@karn_lat/protocol-sdk/wallet`
171
+ - Utils: `@karn_lat/protocol-sdk/utils`
@@ -1 +1 @@
1
- {"version":3,"file":"WalletManager.d.ts","sourceRoot":"","sources":["../../src/wallet/WalletManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,UAAU,EACV,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,WAAW,EAEX,mBAAmB,EACnB,sBAAsB,EAGvB,MAAM,YAAY,CAAC;AAQpB,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,cAAc,CAA6C;;IAkCnE;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAYtD;;OAEG;IACH,aAAa,IAAI,cAAc,EAAE;IAIjC;;OAEG;IACH,QAAQ,IAAI,WAAW;IAIvB;;OAEG;IACG,OAAO,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAoEhE;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA+BjC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAQ1C;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAQrC;;OAEG;IACG,eAAe,CACnB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,MAAM,CAAC;IAWlB;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBnD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAmBnC;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAO3D;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAO5D;;OAEG;IACH,OAAO,CAAC,SAAS;IAOjB;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;YACW,iBAAiB;CAiBhC"}
1
+ {"version":3,"file":"WalletManager.d.ts","sourceRoot":"","sources":["../../src/wallet/WalletManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,UAAU,EACV,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,WAAW,EAEX,mBAAmB,EACnB,sBAAsB,EAGvB,MAAM,YAAY,CAAC;AAQpB,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,cAAc,CAA6C;;IAkCnE;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAYtD;;OAEG;IACH,aAAa,IAAI,cAAc,EAAE;IAIjC;;OAEG;IACH,QAAQ,IAAI,WAAW;IAIvB;;OAEG;IACG,OAAO,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAoEhE;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA+BjC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAQ1C;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAQrC;;OAEG;IACG,eAAe,CACnB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,MAAM,CAAC;IAWlB;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBnD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAmBnC;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAO3D;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAO5D;;OAEG;IACH,OAAO,CAAC,SAAS;IAOjB;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAavB;;OAEG;YACW,iBAAiB;CAoBhC"}
@@ -225,7 +225,10 @@ export class WalletManager {
225
225
  if (typeof window === 'undefined')
226
226
  return;
227
227
  try {
228
- localStorage.setItem('karn_wallet_connection', JSON.stringify({ walletType, address }));
228
+ const storage = window.localStorage;
229
+ if (!storage)
230
+ return;
231
+ storage.setItem('karn_wallet_connection', JSON.stringify({ walletType, address }));
229
232
  }
230
233
  catch (error) {
231
234
  console.warn('Failed to save wallet connection:', error);
@@ -238,7 +241,10 @@ export class WalletManager {
238
241
  if (typeof window === 'undefined')
239
242
  return;
240
243
  try {
241
- localStorage.removeItem('karn_wallet_connection');
244
+ const storage = window.localStorage;
245
+ if (!storage)
246
+ return;
247
+ storage.removeItem('karn_wallet_connection');
242
248
  }
243
249
  catch (error) {
244
250
  console.warn('Failed to clear wallet connection:', error);
@@ -251,7 +257,10 @@ export class WalletManager {
251
257
  if (typeof window === 'undefined')
252
258
  return;
253
259
  try {
254
- const saved = localStorage.getItem('karn_wallet_connection');
260
+ const storage = window.localStorage;
261
+ if (!storage)
262
+ return;
263
+ const saved = storage.getItem('karn_wallet_connection');
255
264
  if (!saved)
256
265
  return;
257
266
  const { walletType } = JSON.parse(saved);
@@ -1 +1 @@
1
- {"version":3,"file":"WalletManager.js","sourceRoot":"","sources":["../../src/wallet/WalletManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WalletManager.js","sourceRoot":"","sources":["../../src/wallet/WalletManager.ts"],"names":[],"mappings":"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"}
@@ -36,7 +36,6 @@ export declare class AlbedoAdapter implements WalletAdapter {
36
36
  metadata: WalletMetadata;
37
37
  private currentAddress;
38
38
  isAvailable(): Promise<boolean>;
39
- private loadAlbedoScript;
40
39
  connect(): Promise<string>;
41
40
  disconnect(): Promise<void>;
42
41
  getAddress(): Promise<string | null>;
@@ -1 +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"}
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,CAQtB;IAEF,OAAO,CAAC,cAAc,CAAuB;IAEvC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAK/B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAsB1B,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"}
@@ -13,36 +13,20 @@ export class AlbedoAdapter {
13
13
  name: 'Albedo',
14
14
  url: 'https://albedo.link',
15
15
  description: 'Web-based Stellar wallet with seamless browser integration',
16
- isAvailable: true, // Albedo is always available (web-based)
16
+ // Albedo is web-based, but availability is environment-dependent.
17
+ // We treat it as "available" only when the runtime can actually invoke it.
18
+ isAvailable: false,
17
19
  };
18
20
  this.currentAddress = null;
19
21
  }
20
22
  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
- });
23
+ if (typeof window === 'undefined')
24
+ return false;
25
+ return !!window.albedo;
41
26
  }
42
27
  async connect() {
43
- await this.isAvailable();
44
- if (!window.albedo) {
45
- throw new WalletError('Albedo failed to load', WalletErrorCode.NOT_INSTALLED, WalletType.ALBEDO);
28
+ if (!(await this.isAvailable()) || !window.albedo) {
29
+ throw new WalletError('Albedo is not available in this environment', WalletErrorCode.NOT_INSTALLED, WalletType.ALBEDO);
46
30
  }
47
31
  try {
48
32
  const result = await window.albedo.publicKey({ require_existing: false });
@@ -1 +1 @@
1
- {"version":3,"file":"AlbedoAdapter.js","sourceRoot":"","sources":["../../../src/wallet/adapters/AlbedoAdapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEL,UAAU,EAGV,WAAW,EACX,eAAe,GAChB,MAAM,aAAa,CAAC;AAoBrB,MAAM,OAAO,aAAa;IAA1B;QACE,SAAI,GAAG,UAAU,CAAC,MAAM,CAAC;QAEzB,aAAQ,GAAmB;YACzB,IAAI,EAAE,UAAU,CAAC,MAAM;YACvB,IAAI,EAAE,QAAQ;YACd,GAAG,EAAE,qBAAqB;YAC1B,WAAW,EAAE,4DAA4D;YACzE,WAAW,EAAE,IAAI,EAAE,yCAAyC;SAC7D,CAAC;QAEM,mBAAc,GAAkB,IAAI,CAAC;IA8F/C,CAAC;IA5FC,KAAK,CAAC,WAAW;QACf,wCAAwC;QACxC,6BAA6B;QAC7B,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACpD,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAChC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,CAAC,GAAG,GAAG,8EAA8E,CAAC;YAC5F,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;YACpB,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;YAClE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,WAAW,CACnB,uBAAuB,EACvB,eAAe,CAAC,aAAa,EAC7B,UAAU,CAAC,MAAM,CAClB,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1E,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;YACpC,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,WAAW,CACnB,gCAAgC,KAAK,CAAC,OAAO,EAAE,EAC/C,eAAe,CAAC,aAAa,EAC7B,UAAU,CAAC,MAAM,CAClB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,GAAW,EACX,OAAgC;QAEhC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,WAAW,CACnB,yBAAyB,EACzB,eAAe,CAAC,aAAa,EAC7B,UAAU,CAAC,MAAM,CAClB,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpC,GAAG;gBACH,OAAO,EAAE,OAAO,EAAE,iBAAiB,IAAI,SAAS;gBAChD,MAAM,EAAE,IAAI,CAAC,cAAc,IAAI,SAAS;gBACxC,MAAM,EAAE,KAAK,EAAE,oBAAoB;aACpC,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC,mBAAmB,CAAC;QACpC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,WAAW,CACnB,+BAA+B,KAAK,CAAC,OAAO,EAAE,EAC9C,eAAe,CAAC,cAAc,EAC9B,UAAU,CAAC,MAAM,CAClB,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"AlbedoAdapter.js","sourceRoot":"","sources":["../../../src/wallet/adapters/AlbedoAdapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEL,UAAU,EAGV,WAAW,EACX,eAAe,GAChB,MAAM,aAAa,CAAC;AAoBrB,MAAM,OAAO,aAAa;IAA1B;QACE,SAAI,GAAG,UAAU,CAAC,MAAM,CAAC;QAEzB,aAAQ,GAAmB;YACzB,IAAI,EAAE,UAAU,CAAC,MAAM;YACvB,IAAI,EAAE,QAAQ;YACd,GAAG,EAAE,qBAAqB;YAC1B,WAAW,EAAE,4DAA4D;YACzE,kEAAkE;YAClE,2EAA2E;YAC3E,WAAW,EAAE,KAAK;SACnB,CAAC;QAEM,mBAAc,GAAkB,IAAI,CAAC;IAwE/C,CAAC;IAtEC,KAAK,CAAC,WAAW;QACf,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO,KAAK,CAAC;QAChD,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAClD,MAAM,IAAI,WAAW,CACnB,6CAA6C,EAC7C,eAAe,CAAC,aAAa,EAC7B,UAAU,CAAC,MAAM,CAClB,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1E,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;YACpC,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,WAAW,CACnB,gCAAgC,KAAK,CAAC,OAAO,EAAE,EAC/C,eAAe,CAAC,aAAa,EAC7B,UAAU,CAAC,MAAM,CAClB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,GAAW,EACX,OAAgC;QAEhC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,WAAW,CACnB,yBAAyB,EACzB,eAAe,CAAC,aAAa,EAC7B,UAAU,CAAC,MAAM,CAClB,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpC,GAAG;gBACH,OAAO,EAAE,OAAO,EAAE,iBAAiB,IAAI,SAAS;gBAChD,MAAM,EAAE,IAAI,CAAC,cAAc,IAAI,SAAS;gBACxC,MAAM,EAAE,KAAK,EAAE,oBAAoB;aACpC,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC,mBAAmB,CAAC;QACpC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,WAAW,CACnB,+BAA+B,KAAK,CAAC,OAAO,EAAE,EAC9C,eAAe,CAAC,cAAc,EAC9B,UAAU,CAAC,MAAM,CAClB,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -5,31 +5,12 @@
5
5
  * https://freighter.app
6
6
  */
7
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
8
  export declare class FreighterAdapter implements WalletAdapter {
28
9
  type: WalletType;
29
10
  metadata: WalletMetadata;
30
- private api;
31
- constructor();
32
- private init;
11
+ private freighter;
12
+ private canUseBrowserFreighterApi;
13
+ private loadFreighter;
33
14
  isAvailable(): Promise<boolean>;
34
15
  connect(): Promise<string>;
35
16
  disconnect(): Promise<void>;
@@ -38,5 +19,4 @@ export declare class FreighterAdapter implements WalletAdapter {
38
19
  signTransaction(xdr: string, options?: SignTransactionOptions): Promise<string>;
39
20
  getNetwork(): Promise<string>;
40
21
  }
41
- export {};
42
22
  //# sourceMappingURL=FreighterAdapter.d.ts.map
@@ -1 +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"}
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;AAarB,qBAAa,gBAAiB,YAAW,aAAa;IACpD,IAAI,aAAwB;IAE5B,QAAQ,EAAE,cAAc,CAQtB;IAEF,OAAO,CAAC,SAAS,CAAgC;IAEjD,OAAO,CAAC,yBAAyB;YAUnB,aAAa;IA0BrB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAa/B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IA2B1B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAcpC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAU/B,eAAe,CACnB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,MAAM,CAAC;IA8BZ,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;CAgBpC"}
@@ -17,24 +17,60 @@ export class FreighterAdapter {
17
17
  description: 'Official Stellar wallet extension with Soroban support',
18
18
  isAvailable: false,
19
19
  };
20
- this.api = null;
21
- this.init();
20
+ this.freighter = null;
22
21
  }
23
- init() {
24
- if (typeof window !== 'undefined' && window.freighter) {
25
- this.api = window.freighter;
26
- this.metadata.isAvailable = true;
22
+ canUseBrowserFreighterApi() {
23
+ // In Node/Jest we may have `global.window` mocked but without real browser globals.
24
+ // `@stellar/freighter-api` touches `window.location.origin` at import time.
25
+ return (typeof window !== 'undefined' &&
26
+ typeof window.location?.origin === 'string' &&
27
+ typeof document !== 'undefined');
28
+ }
29
+ async loadFreighter() {
30
+ if (this.freighter)
31
+ return this.freighter;
32
+ // 1) Prefer legacy window injection if present (also used by our Jest tests).
33
+ if (typeof window !== 'undefined') {
34
+ const injected = window.freighter;
35
+ if (injected) {
36
+ this.freighter = injected;
37
+ return injected;
38
+ }
39
+ }
40
+ // 2) In real browsers, use the official module API.
41
+ if (!this.canUseBrowserFreighterApi()) {
42
+ throw new WalletError('Freighter is not installed', WalletErrorCode.NOT_INSTALLED, WalletType.FREIGHTER);
43
+ }
44
+ try {
45
+ const mod = (await import('@stellar/freighter-api'));
46
+ this.freighter = mod;
47
+ return mod;
48
+ }
49
+ catch {
50
+ throw new WalletError('Freighter is not installed', WalletErrorCode.NOT_INSTALLED, WalletType.FREIGHTER);
27
51
  }
28
52
  }
29
53
  async isAvailable() {
30
- return this.metadata.isAvailable;
54
+ try {
55
+ const freighter = await this.loadFreighter();
56
+ if (typeof freighter.isConnected !== 'function')
57
+ return false;
58
+ await freighter.isConnected();
59
+ this.metadata.isAvailable = true;
60
+ return true;
61
+ }
62
+ catch {
63
+ this.metadata.isAvailable = false;
64
+ return false;
65
+ }
31
66
  }
32
67
  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);
68
+ const freighter = await this.loadFreighter();
69
+ if (typeof freighter.getPublicKey !== 'function') {
70
+ throw new WalletError('Freighter API is unavailable', WalletErrorCode.NOT_INSTALLED, WalletType.FREIGHTER);
35
71
  }
36
72
  try {
37
- const publicKey = await this.api.getPublicKey();
73
+ const publicKey = await freighter.getPublicKey();
38
74
  if (!publicKey) {
39
75
  throw new WalletError('User rejected connection request', WalletErrorCode.USER_REJECTED, WalletType.FREIGHTER);
40
76
  }
@@ -49,37 +85,41 @@ export class FreighterAdapter {
49
85
  async disconnect() {
50
86
  // Freighter doesn't have explicit disconnect
51
87
  // Connection state is managed by extension
52
- this.api = null;
88
+ // Keep module cached, just mark unavailable until next check.
89
+ this.metadata.isAvailable = false;
53
90
  }
54
91
  async getAddress() {
55
- if (!this.api)
56
- return null;
57
92
  try {
58
- const connected = await this.api.isConnected();
93
+ const freighter = await this.loadFreighter();
94
+ if (typeof freighter.isConnected !== 'function' || typeof freighter.getPublicKey !== 'function')
95
+ return null;
96
+ const connected = await freighter.isConnected();
59
97
  if (!connected)
60
98
  return null;
61
- return await this.api.getPublicKey();
99
+ return await freighter.getPublicKey();
62
100
  }
63
101
  catch {
64
102
  return null;
65
103
  }
66
104
  }
67
105
  async isConnected() {
68
- if (!this.api)
69
- return false;
70
106
  try {
71
- return await this.api.isConnected();
107
+ const freighter = await this.loadFreighter();
108
+ if (typeof freighter.isConnected !== 'function')
109
+ return false;
110
+ return await freighter.isConnected();
72
111
  }
73
112
  catch {
74
113
  return false;
75
114
  }
76
115
  }
77
116
  async signTransaction(xdr, options) {
78
- if (!this.api) {
117
+ const freighter = await this.loadFreighter();
118
+ if (typeof freighter.signTransaction !== 'function') {
79
119
  throw new WalletError('Freighter is not connected', WalletErrorCode.NOT_CONNECTED, WalletType.FREIGHTER);
80
120
  }
81
121
  try {
82
- const signedXdr = await this.api.signTransaction(xdr, {
122
+ const signedXdr = await freighter.signTransaction(xdr, {
83
123
  networkPassphrase: options?.networkPassphrase,
84
124
  accountToSign: options?.accountToSign,
85
125
  });
@@ -93,11 +133,12 @@ export class FreighterAdapter {
93
133
  }
94
134
  }
95
135
  async getNetwork() {
96
- if (!this.api) {
136
+ const freighter = await this.loadFreighter();
137
+ if (typeof freighter.getNetwork !== 'function') {
97
138
  throw new WalletError('Freighter is not connected', WalletErrorCode.NOT_CONNECTED, WalletType.FREIGHTER);
98
139
  }
99
140
  try {
100
- return await this.api.getNetwork();
141
+ return await freighter.getNetwork();
101
142
  }
102
143
  catch (error) {
103
144
  throw new WalletError(`Failed to get network: ${error.message}`, WalletErrorCode.NETWORK_ERROR, WalletType.FREIGHTER);
@@ -1 +1 @@
1
- {"version":3,"file":"FreighterAdapter.js","sourceRoot":"","sources":["../../../src/wallet/adapters/FreighterAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FreighterAdapter.js","sourceRoot":"","sources":["../../../src/wallet/adapters/FreighterAdapter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@karn_lat/protocol-sdk",
3
- "version": "0.1.0-alpha.3",
3
+ "version": "0.1.0-alpha.5",
4
4
  "description": "Official TypeScript SDK for Karn Protocol - Contribution-driven governance on Stellar",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -71,5 +71,5 @@
71
71
  "bugs": {
72
72
  "url": "https://github.com/ThaisFReis/karn-protocol/issues"
73
73
  },
74
- "homepage": "https://github.com/ThaisFReis/karn-protocol#readme"
74
+ "homepage": "https://karn-protocol.vercel.app/"
75
75
  }
@@ -185,7 +185,7 @@ describe('WalletManager', () => {
185
185
 
186
186
  expect(setItem).toHaveBeenCalledWith(
187
187
  'karn_wallet_connection',
188
- expect.stringContaining('FREIGHTER')
188
+ expect.stringContaining('freighter')
189
189
  );
190
190
  });
191
191
 
@@ -315,7 +315,10 @@ export class WalletManager {
315
315
  if (typeof window === 'undefined') return;
316
316
 
317
317
  try {
318
- localStorage.setItem(
318
+ const storage = (window as any).localStorage;
319
+ if (!storage) return;
320
+
321
+ storage.setItem(
319
322
  'karn_wallet_connection',
320
323
  JSON.stringify({ walletType, address })
321
324
  );
@@ -331,7 +334,10 @@ export class WalletManager {
331
334
  if (typeof window === 'undefined') return;
332
335
 
333
336
  try {
334
- localStorage.removeItem('karn_wallet_connection');
337
+ const storage = (window as any).localStorage;
338
+ if (!storage) return;
339
+
340
+ storage.removeItem('karn_wallet_connection');
335
341
  } catch (error) {
336
342
  console.warn('Failed to clear wallet connection:', error);
337
343
  }
@@ -344,7 +350,10 @@ export class WalletManager {
344
350
  if (typeof window === 'undefined') return;
345
351
 
346
352
  try {
347
- const saved = localStorage.getItem('karn_wallet_connection');
353
+ const storage = (window as any).localStorage;
354
+ if (!storage) return;
355
+
356
+ const saved = storage.getItem('karn_wallet_connection');
348
357
  if (!saved) return;
349
358
 
350
359
  const { walletType } = JSON.parse(saved);
@@ -40,42 +40,22 @@ export class AlbedoAdapter implements WalletAdapter {
40
40
  name: 'Albedo',
41
41
  url: 'https://albedo.link',
42
42
  description: 'Web-based Stellar wallet with seamless browser integration',
43
- isAvailable: true, // Albedo is always available (web-based)
43
+ // Albedo is web-based, but availability is environment-dependent.
44
+ // We treat it as "available" only when the runtime can actually invoke it.
45
+ isAvailable: false,
44
46
  };
45
47
 
46
48
  private currentAddress: string | null = null;
47
49
 
48
50
  async isAvailable(): Promise<boolean> {
49
- // Albedo is web-based, always available
50
- // Load script if not present
51
- if (typeof window !== 'undefined' && !window.albedo) {
52
- await this.loadAlbedoScript();
53
- }
54
- return true;
55
- }
56
-
57
- private async loadAlbedoScript(): Promise<void> {
58
- return new Promise((resolve, reject) => {
59
- if (window.albedo) {
60
- resolve();
61
- return;
62
- }
63
-
64
- const script = document.createElement('script');
65
- script.src = 'https://cdn.jsdelivr.net/npm/@albedo-link/intent@latest/lib/albedo.intent.js';
66
- script.async = true;
67
- script.onload = () => resolve();
68
- script.onerror = () => reject(new Error('Failed to load Albedo'));
69
- document.head.appendChild(script);
70
- });
51
+ if (typeof window === 'undefined') return false;
52
+ return !!window.albedo;
71
53
  }
72
54
 
73
55
  async connect(): Promise<string> {
74
- await this.isAvailable();
75
-
76
- if (!window.albedo) {
56
+ if (!(await this.isAvailable()) || !window.albedo) {
77
57
  throw new WalletError(
78
- 'Albedo failed to load',
58
+ 'Albedo is not available in this environment',
79
59
  WalletErrorCode.NOT_INSTALLED,
80
60
  WalletType.ALBEDO
81
61
  );
@@ -14,23 +14,16 @@ import {
14
14
  WalletErrorCode,
15
15
  } from '../types.js';
16
16
 
17
- // Freighter API types (from @stellar/freighter-api)
18
- interface FreighterAPI {
19
- isConnected(): Promise<boolean>;
20
- getPublicKey(): Promise<string>;
21
- signTransaction(
17
+ type FreighterModule = {
18
+ isConnected?: () => Promise<boolean>;
19
+ getPublicKey?: () => Promise<string>;
20
+ signTransaction?: (
22
21
  xdr: string,
23
22
  opts?: { network?: string; networkPassphrase?: string; accountToSign?: string }
24
- ): Promise<string>;
25
- getNetwork(): Promise<string>;
26
- getNetworkDetails(): Promise<{ network: string; networkPassphrase: string }>;
27
- }
28
-
29
- declare global {
30
- interface Window {
31
- freighter?: FreighterAPI;
32
- }
33
- }
23
+ ) => Promise<string>;
24
+ getNetwork?: () => Promise<string>;
25
+ getNetworkDetails?: () => Promise<{ network: string; networkPassphrase: string }>;
26
+ };
34
27
 
35
28
  export class FreighterAdapter implements WalletAdapter {
36
29
  type = WalletType.FREIGHTER;
@@ -45,34 +38,65 @@ export class FreighterAdapter implements WalletAdapter {
45
38
  isAvailable: false,
46
39
  };
47
40
 
48
- private api: FreighterAPI | null = null;
41
+ private freighter: FreighterModule | null = null;
49
42
 
50
- constructor() {
51
- this.init();
43
+ private canUseBrowserFreighterApi(): boolean {
44
+ // In Node/Jest we may have `global.window` mocked but without real browser globals.
45
+ // `@stellar/freighter-api` touches `window.location.origin` at import time.
46
+ return (
47
+ typeof window !== 'undefined' &&
48
+ typeof (window as any).location?.origin === 'string' &&
49
+ typeof document !== 'undefined'
50
+ );
52
51
  }
53
52
 
54
- private init() {
55
- if (typeof window !== 'undefined' && window.freighter) {
56
- this.api = window.freighter;
57
- this.metadata.isAvailable = true;
53
+ private async loadFreighter(): Promise<FreighterModule> {
54
+ if (this.freighter) return this.freighter;
55
+
56
+ // 1) Prefer legacy window injection if present (also used by our Jest tests).
57
+ if (typeof window !== 'undefined') {
58
+ const injected = (window as any).freighter as FreighterModule | undefined;
59
+ if (injected) {
60
+ this.freighter = injected;
61
+ return injected;
62
+ }
63
+ }
64
+
65
+ // 2) In real browsers, use the official module API.
66
+ if (!this.canUseBrowserFreighterApi()) {
67
+ throw new WalletError('Freighter is not installed', WalletErrorCode.NOT_INSTALLED, WalletType.FREIGHTER);
68
+ }
69
+
70
+ try {
71
+ const mod = (await import('@stellar/freighter-api')) as unknown as FreighterModule;
72
+ this.freighter = mod;
73
+ return mod;
74
+ } catch {
75
+ throw new WalletError('Freighter is not installed', WalletErrorCode.NOT_INSTALLED, WalletType.FREIGHTER);
58
76
  }
59
77
  }
60
78
 
61
79
  async isAvailable(): Promise<boolean> {
62
- return this.metadata.isAvailable;
80
+ try {
81
+ const freighter = await this.loadFreighter();
82
+ if (typeof freighter.isConnected !== 'function') return false;
83
+ await freighter.isConnected();
84
+ this.metadata.isAvailable = true;
85
+ return true;
86
+ } catch {
87
+ this.metadata.isAvailable = false;
88
+ return false;
89
+ }
63
90
  }
64
91
 
65
92
  async connect(): Promise<string> {
66
- if (!this.api) {
67
- throw new WalletError(
68
- 'Freighter is not installed. Please install from https://freighter.app',
69
- WalletErrorCode.NOT_INSTALLED,
70
- WalletType.FREIGHTER
71
- );
93
+ const freighter = await this.loadFreighter();
94
+ if (typeof freighter.getPublicKey !== 'function') {
95
+ throw new WalletError('Freighter API is unavailable', WalletErrorCode.NOT_INSTALLED, WalletType.FREIGHTER);
72
96
  }
73
97
 
74
98
  try {
75
- const publicKey = await this.api.getPublicKey();
99
+ const publicKey = await freighter.getPublicKey();
76
100
  if (!publicKey) {
77
101
  throw new WalletError(
78
102
  'User rejected connection request',
@@ -95,27 +119,29 @@ export class FreighterAdapter implements WalletAdapter {
95
119
  async disconnect(): Promise<void> {
96
120
  // Freighter doesn't have explicit disconnect
97
121
  // Connection state is managed by extension
98
- this.api = null;
122
+ // Keep module cached, just mark unavailable until next check.
123
+ this.metadata.isAvailable = false;
99
124
  }
100
125
 
101
126
  async getAddress(): Promise<string | null> {
102
- if (!this.api) return null;
103
-
104
127
  try {
105
- const connected = await this.api.isConnected();
128
+ const freighter = await this.loadFreighter();
129
+ if (typeof freighter.isConnected !== 'function' || typeof freighter.getPublicKey !== 'function') return null;
130
+
131
+ const connected = await freighter.isConnected();
106
132
  if (!connected) return null;
107
133
 
108
- return await this.api.getPublicKey();
134
+ return await freighter.getPublicKey();
109
135
  } catch {
110
136
  return null;
111
137
  }
112
138
  }
113
139
 
114
140
  async isConnected(): Promise<boolean> {
115
- if (!this.api) return false;
116
-
117
141
  try {
118
- return await this.api.isConnected();
142
+ const freighter = await this.loadFreighter();
143
+ if (typeof freighter.isConnected !== 'function') return false;
144
+ return await freighter.isConnected();
119
145
  } catch {
120
146
  return false;
121
147
  }
@@ -125,16 +151,13 @@ export class FreighterAdapter implements WalletAdapter {
125
151
  xdr: string,
126
152
  options?: SignTransactionOptions
127
153
  ): Promise<string> {
128
- if (!this.api) {
129
- throw new WalletError(
130
- 'Freighter is not connected',
131
- WalletErrorCode.NOT_CONNECTED,
132
- WalletType.FREIGHTER
133
- );
154
+ const freighter = await this.loadFreighter();
155
+ if (typeof freighter.signTransaction !== 'function') {
156
+ throw new WalletError('Freighter is not connected', WalletErrorCode.NOT_CONNECTED, WalletType.FREIGHTER);
134
157
  }
135
158
 
136
159
  try {
137
- const signedXdr = await this.api.signTransaction(xdr, {
160
+ const signedXdr = await freighter.signTransaction(xdr, {
138
161
  networkPassphrase: options?.networkPassphrase,
139
162
  accountToSign: options?.accountToSign,
140
163
  });
@@ -158,16 +181,13 @@ export class FreighterAdapter implements WalletAdapter {
158
181
  }
159
182
 
160
183
  async getNetwork(): Promise<string> {
161
- if (!this.api) {
162
- throw new WalletError(
163
- 'Freighter is not connected',
164
- WalletErrorCode.NOT_CONNECTED,
165
- WalletType.FREIGHTER
166
- );
184
+ const freighter = await this.loadFreighter();
185
+ if (typeof freighter.getNetwork !== 'function') {
186
+ throw new WalletError('Freighter is not connected', WalletErrorCode.NOT_CONNECTED, WalletType.FREIGHTER);
167
187
  }
168
188
 
169
189
  try {
170
- return await this.api.getNetwork();
190
+ return await freighter.getNetwork();
171
191
  } catch (error: any) {
172
192
  throw new WalletError(
173
193
  `Failed to get network: ${error.message}`,
package/test-fixes.js CHANGED
@@ -18,7 +18,11 @@ try {
18
18
  const valocracy = new ValocracyClient(
19
19
  'Test SDF Network ; September 2015',
20
20
  'https://soroban-testnet.stellar.org',
21
- 'CCSUA4DTG44VVEEMC2POYD7XKD7PFZFBWIMBO5Q47GYEOL2SSXDPONXX'
21
+ <<<<<<< HEAD
22
+ 'REDACTED_CONTRACT_ID_VALOCRACY'
23
+ =======
24
+ 'CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"'
25
+ >>>>>>> 257583c5837a1af14efbaa2ea574613bd78df4b0
22
26
  );
23
27
 
24
28
  console.log(' ✓ Import from ./dist/clients/index.js works\n');
@@ -36,7 +40,11 @@ try {
36
40
  const governor = new GovernorClient(
37
41
  'Test SDF Network ; September 2015',
38
42
  'https://soroban-testnet.stellar.org',
39
- 'CAZ7ZXVJN2JPR3FK22XFQZY3DLET3QOWBUR2THHK7HB7CHMGFRI7PZZX'
43
+ <<<<<<< HEAD
44
+ 'REDACTED_CONTRACT_ID_GOVERNOR'
45
+ =======
46
+ 'CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"'
47
+ >>>>>>> 257583c5837a1af14efbaa2ea574613bd78df4b0
40
48
  );
41
49
 
42
50
  console.log(' ✓ Import from ./dist/index.js works');