@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,123 @@
1
+ /**
2
+ * xBull Wallet Adapter
3
+ *
4
+ * Modern Stellar wallet extension
5
+ * https://xbull.app
6
+ */
7
+
8
+ import {
9
+ WalletAdapter,
10
+ WalletType,
11
+ WalletMetadata,
12
+ SignTransactionOptions,
13
+ WalletError,
14
+ WalletErrorCode,
15
+ } from '../types.js';
16
+
17
+ // xBull SDK types
18
+ interface XBullAPI {
19
+ connect(): Promise<{ publicKey: string }>;
20
+ sign(params: { xdr: string; publicKey?: string; network?: string }): Promise<{ signedXDR: string }>;
21
+ isAvailable(): boolean;
22
+ }
23
+
24
+ declare global {
25
+ interface Window {
26
+ xBullSDK?: XBullAPI;
27
+ }
28
+ }
29
+
30
+ export class XBullAdapter implements WalletAdapter {
31
+ type = WalletType.XBULL;
32
+
33
+ metadata: WalletMetadata = {
34
+ type: WalletType.XBULL,
35
+ name: 'xBull',
36
+ url: 'https://xbull.app',
37
+ chromeUrl: 'https://chrome.google.com/webstore/detail/xbull-wallet/omajpeaffjgmlpmfejkepdlekgkglhhk',
38
+ description: 'Modern Stellar wallet with advanced features',
39
+ isAvailable: false,
40
+ };
41
+
42
+ private api: XBullAPI | null = null;
43
+ private currentAddress: string | null = null;
44
+
45
+ constructor() {
46
+ this.init();
47
+ }
48
+
49
+ private init() {
50
+ if (typeof window !== 'undefined' && window.xBullSDK) {
51
+ this.api = window.xBullSDK;
52
+ this.metadata.isAvailable = this.api.isAvailable();
53
+ }
54
+ }
55
+
56
+ async isAvailable(): Promise<boolean> {
57
+ return this.metadata.isAvailable;
58
+ }
59
+
60
+ async connect(): Promise<string> {
61
+ if (!this.api) {
62
+ throw new WalletError(
63
+ 'xBull is not installed',
64
+ WalletErrorCode.NOT_INSTALLED,
65
+ WalletType.XBULL
66
+ );
67
+ }
68
+
69
+ try {
70
+ const result = await this.api.connect();
71
+ this.currentAddress = result.publicKey;
72
+ return result.publicKey;
73
+ } catch (error: any) {
74
+ throw new WalletError(
75
+ `Failed to connect to xBull: ${error.message}`,
76
+ WalletErrorCode.USER_REJECTED,
77
+ WalletType.XBULL
78
+ );
79
+ }
80
+ }
81
+
82
+ async disconnect(): Promise<void> {
83
+ this.currentAddress = null;
84
+ this.api = null;
85
+ }
86
+
87
+ async getAddress(): Promise<string | null> {
88
+ return this.currentAddress;
89
+ }
90
+
91
+ async isConnected(): Promise<boolean> {
92
+ return this.currentAddress !== null;
93
+ }
94
+
95
+ async signTransaction(
96
+ xdr: string,
97
+ options?: SignTransactionOptions
98
+ ): Promise<string> {
99
+ if (!this.api) {
100
+ throw new WalletError(
101
+ 'xBull is not connected',
102
+ WalletErrorCode.NOT_CONNECTED,
103
+ WalletType.XBULL
104
+ );
105
+ }
106
+
107
+ try {
108
+ const result = await this.api.sign({
109
+ xdr,
110
+ publicKey: this.currentAddress || undefined,
111
+ network: options?.networkPassphrase,
112
+ });
113
+
114
+ return result.signedXDR;
115
+ } catch (error: any) {
116
+ throw new WalletError(
117
+ `Failed to sign transaction: ${error.message}`,
118
+ WalletErrorCode.SIGNING_FAILED,
119
+ WalletType.XBULL
120
+ );
121
+ }
122
+ }
123
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Karn Protocol Multi-Wallet Support
3
+ *
4
+ * Provides unified interface for connecting to multiple Stellar wallets:
5
+ * - Freighter (official Stellar extension)
6
+ * - Albedo (web-based, no extension required)
7
+ * - Lobstr (popular mobile + extension)
8
+ * - xBull (modern wallet with advanced features)
9
+ * - Rabet (DeFi-focused wallet with built-in swap)
10
+ *
11
+ * - Rabet (DeFi-focused wallet with built-in swap)
12
+ */
13
+
14
+ // Core wallet manager
15
+ export { WalletManager } from './WalletManager.js';
16
+
17
+ // Type definitions
18
+ export {
19
+ WalletType,
20
+ WalletState,
21
+ WalletMetadata,
22
+ WalletAdapter,
23
+ WalletConnection,
24
+ WalletEvent,
25
+ WalletEventPayload,
26
+ WalletEventListener,
27
+ SignTransactionOptions,
28
+ WalletError,
29
+ WalletErrorCode,
30
+ } from './types.js';
31
+
32
+ // Individual wallet adapters (for advanced usage)
33
+ export { FreighterAdapter } from './adapters/FreighterAdapter.js';
34
+ export { AlbedoAdapter } from './adapters/AlbedoAdapter.js';
35
+ export { LobstrAdapter } from './adapters/LobstrAdapter.js';
36
+ export { XBullAdapter } from './adapters/xBullAdapter.js';
37
+ export { RabetAdapter } from './adapters/RabetAdapter.js';
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Multi-wallet support types for Karn Protocol SDK
3
+ *
4
+ * Supports: Freighter, Albedo, Lobstr, xBull, Rabet
5
+ */
6
+
7
+ /**
8
+ * Supported wallet types
9
+ */
10
+ export enum WalletType {
11
+ FREIGHTER = 'freighter',
12
+ ALBEDO = 'albedo',
13
+ LOBSTR = 'lobstr',
14
+ XBULL = 'xbull',
15
+ RABET = 'rabet',
16
+ }
17
+
18
+ /**
19
+ * Wallet connection state
20
+ */
21
+ export interface WalletState {
22
+ /** Whether wallet is connected */
23
+ isConnected: boolean;
24
+
25
+ /** Connected wallet address (Stellar public key) */
26
+ address: string | null;
27
+
28
+ /** Currently active wallet type */
29
+ walletType: WalletType | null;
30
+
31
+ /** Connection in progress */
32
+ isConnecting: boolean;
33
+
34
+ /** Error message if any */
35
+ error: string | null;
36
+
37
+ /** Wallet display name */
38
+ walletName: string | null;
39
+ }
40
+
41
+ /**
42
+ * Wallet metadata for UI display
43
+ */
44
+ export interface WalletMetadata {
45
+ /** Wallet type identifier */
46
+ type: WalletType;
47
+
48
+ /** Display name */
49
+ name: string;
50
+
51
+ /** Icon URL or data URI */
52
+ icon?: string;
53
+
54
+ /** Homepage URL */
55
+ url: string;
56
+
57
+ /** Chrome extension URL */
58
+ chromeUrl?: string;
59
+
60
+ /** Firefox addon URL */
61
+ firefoxUrl?: string;
62
+
63
+ /** Description */
64
+ description: string;
65
+
66
+ /** Is installed/available */
67
+ isAvailable: boolean;
68
+ }
69
+
70
+ /**
71
+ * Transaction signing options
72
+ */
73
+ export interface SignTransactionOptions {
74
+ /** Network passphrase (default: Testnet) */
75
+ networkPassphrase?: string;
76
+
77
+ /** Optional account sequence */
78
+ accountToSign?: string;
79
+ }
80
+
81
+ /**
82
+ * Wallet adapter interface
83
+ *
84
+ * Each wallet provider implements this interface
85
+ */
86
+ export interface WalletAdapter {
87
+ /** Wallet type */
88
+ type: WalletType;
89
+
90
+ /** Wallet metadata */
91
+ metadata: WalletMetadata;
92
+
93
+ /**
94
+ * Check if wallet is installed/available
95
+ */
96
+ isAvailable(): Promise<boolean>;
97
+
98
+ /**
99
+ * Connect to wallet and request access
100
+ * @returns Public key (Stellar address)
101
+ */
102
+ connect(): Promise<string>;
103
+
104
+ /**
105
+ * Disconnect from wallet
106
+ */
107
+ disconnect(): Promise<void>;
108
+
109
+ /**
110
+ * Get current connected address
111
+ * @returns Public key or null if not connected
112
+ */
113
+ getAddress(): Promise<string | null>;
114
+
115
+ /**
116
+ * Check if wallet is currently connected
117
+ */
118
+ isConnected(): Promise<boolean>;
119
+
120
+ /**
121
+ * Sign a transaction
122
+ * @param xdr Transaction XDR string
123
+ * @param options Signing options
124
+ * @returns Signed transaction XDR
125
+ */
126
+ signTransaction(xdr: string, options?: SignTransactionOptions): Promise<string>;
127
+
128
+ /**
129
+ * Sign arbitrary message (if supported)
130
+ * @param message Message to sign
131
+ * @returns Signature
132
+ */
133
+ signMessage?(message: string): Promise<string>;
134
+
135
+ /**
136
+ * Get network (if supported)
137
+ * @returns Network name (e.g., 'TESTNET', 'PUBLIC')
138
+ */
139
+ getNetwork?(): Promise<string>;
140
+ }
141
+
142
+ /**
143
+ * Wallet connection result
144
+ */
145
+ export interface WalletConnection {
146
+ /** Wallet type */
147
+ walletType: WalletType;
148
+
149
+ /** Connected address */
150
+ address: string;
151
+
152
+ /** Wallet adapter instance */
153
+ adapter: WalletAdapter;
154
+ }
155
+
156
+ /**
157
+ * Wallet event types
158
+ */
159
+ export enum WalletEvent {
160
+ CONNECT = 'connect',
161
+ DISCONNECT = 'disconnect',
162
+ ACCOUNT_CHANGED = 'accountChanged',
163
+ NETWORK_CHANGED = 'networkChanged',
164
+ }
165
+
166
+ /**
167
+ * Wallet event payload
168
+ */
169
+ export interface WalletEventPayload {
170
+ walletType: WalletType;
171
+ address?: string;
172
+ network?: string;
173
+ }
174
+
175
+ /**
176
+ * Wallet event listener
177
+ */
178
+ export type WalletEventListener = (payload: WalletEventPayload) => void;
179
+
180
+ /**
181
+ * Wallet error types
182
+ */
183
+ export class WalletError extends Error {
184
+ constructor(
185
+ message: string,
186
+ public code: WalletErrorCode,
187
+ public walletType?: WalletType
188
+ ) {
189
+ super(message);
190
+ this.name = 'WalletError';
191
+ }
192
+ }
193
+
194
+ export enum WalletErrorCode {
195
+ NOT_INSTALLED = 'NOT_INSTALLED',
196
+ USER_REJECTED = 'USER_REJECTED',
197
+ UNAUTHORIZED = 'UNAUTHORIZED',
198
+ NETWORK_ERROR = 'NETWORK_ERROR',
199
+ SIGNING_FAILED = 'SIGNING_FAILED',
200
+ NOT_CONNECTED = 'NOT_CONNECTED',
201
+ ALREADY_CONNECTED = 'ALREADY_CONNECTED',
202
+ UNSUPPORTED_METHOD = 'UNSUPPORTED_METHOD',
203
+ UNKNOWN_ERROR = 'UNKNOWN_ERROR',
204
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "es2020",
4
+ "lib": [
5
+ "dom",
6
+ "es2020"
7
+ ],
8
+ "declaration": true,
9
+ "declarationMap": true,
10
+ "sourceMap": true,
11
+ "outDir": "./dist",
12
+ "rootDir": "./src",
13
+ "strict": true,
14
+ "noImplicitAny": true,
15
+ "esModuleInterop": true,
16
+ "skipLibCheck": true,
17
+ "forceConsistentCasingInFileNames": true,
18
+ "module": "ES2020",
19
+ "moduleResolution": "node",
20
+ "allowSyntheticDefaultImports": true,
21
+ "jsx": "react",
22
+ "baseUrl": ".",
23
+ "paths": {
24
+ "@stellar/stellar-sdk/contract": [
25
+ "./node_modules/@stellar/stellar-sdk/lib/contract/index.d.ts"
26
+ ],
27
+ "@stellar/stellar-sdk/rpc": [
28
+ "./node_modules/@stellar/stellar-sdk/lib/rpc/index.d.ts"
29
+ ]
30
+ }
31
+ },
32
+ "include": [
33
+ "src/**/*"
34
+ ],
35
+ "exclude": [
36
+ "node_modules",
37
+ "dist",
38
+ "**/*.test.ts"
39
+ ]
40
+ }