@arkade-os/sdk 0.3.0-alpha.7 → 0.3.0-alpha.8

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 (35) hide show
  1. package/README.md +51 -0
  2. package/dist/cjs/adapters/expo.js +8 -0
  3. package/dist/cjs/index.js +2 -1
  4. package/dist/cjs/providers/expoArk.js +237 -0
  5. package/dist/cjs/providers/expoIndexer.js +194 -0
  6. package/dist/cjs/providers/indexer.js +3 -1
  7. package/dist/cjs/utils/arkTransaction.js +13 -0
  8. package/dist/cjs/wallet/index.js +1 -1
  9. package/dist/cjs/wallet/serviceWorker/utils.js +0 -9
  10. package/dist/cjs/wallet/serviceWorker/worker.js +14 -17
  11. package/dist/cjs/wallet/utils.js +11 -0
  12. package/dist/cjs/wallet/wallet.js +69 -51
  13. package/dist/esm/adapters/expo.js +3 -0
  14. package/dist/esm/index.js +2 -2
  15. package/dist/esm/providers/expoArk.js +200 -0
  16. package/dist/esm/providers/expoIndexer.js +157 -0
  17. package/dist/esm/providers/indexer.js +3 -1
  18. package/dist/esm/utils/arkTransaction.js +13 -1
  19. package/dist/esm/wallet/index.js +1 -1
  20. package/dist/esm/wallet/serviceWorker/utils.js +0 -8
  21. package/dist/esm/wallet/serviceWorker/worker.js +15 -18
  22. package/dist/esm/wallet/utils.js +8 -0
  23. package/dist/esm/wallet/wallet.js +70 -52
  24. package/dist/types/adapters/expo.d.ts +4 -0
  25. package/dist/types/index.d.ts +5 -5
  26. package/dist/types/providers/ark.d.ts +136 -2
  27. package/dist/types/providers/expoArk.d.ts +22 -0
  28. package/dist/types/providers/expoIndexer.d.ts +26 -0
  29. package/dist/types/providers/indexer.d.ts +8 -0
  30. package/dist/types/utils/arkTransaction.d.ts +3 -1
  31. package/dist/types/wallet/index.d.ts +44 -6
  32. package/dist/types/wallet/serviceWorker/utils.d.ts +0 -2
  33. package/dist/types/wallet/utils.d.ts +2 -0
  34. package/dist/types/wallet/wallet.d.ts +9 -1
  35. package/package.json +11 -2
@@ -1,4 +1,6 @@
1
- import { Output, SettlementEvent } from "../providers/ark";
1
+ import { Output, SettlementEvent, ArkProvider } from "../providers/ark";
2
+ import { IndexerProvider } from "../providers/indexer";
3
+ import { OnchainProvider } from "../providers/onchain";
2
4
  import { Identity } from "../identity";
3
5
  import { RelativeTimelock } from "../script/tapscript";
4
6
  import { EncodedVtxoScript, TapLeafScript } from "../script/base";
@@ -7,19 +9,54 @@ import { StorageAdapter } from "../storage";
7
9
  /**
8
10
  * Configuration options for wallet initialization.
9
11
  *
10
- * Defines the parameters required to create and configure a wallet instance,
11
- * including identity, server URLs, and optional timelock settings.
12
- * If optional parameters are not provided, the wallet will fetch them from the
13
- * Ark server.
12
+ * Supports two configuration modes:
13
+ * 1. URL-based: Provide arkServerUrl, indexerUrl (optional), and esploraUrl
14
+ * 2. Provider-based: Provide arkProvider, indexerProvider, and onchainProvider instances
15
+ *
16
+ * At least one of the following must be provided:
17
+ * - arkServerUrl OR arkProvider
18
+ *
19
+ * The wallet will use provided URLs to create default providers if custom provider
20
+ * instances are not supplied. If optional parameters are not provided, the wallet
21
+ * will fetch configuration from the Ark server.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * // URL-based configuration
26
+ * const wallet = await Wallet.create({
27
+ * identity: SingleKey.fromHex('...'),
28
+ * arkServerUrl: 'https://ark.example.com',
29
+ * esploraUrl: 'https://mempool.space/api'
30
+ * });
31
+ *
32
+ * // Provider-based configuration (e.g., for Expo/React Native)
33
+ * const wallet = await Wallet.create({
34
+ * identity: SingleKey.fromHex('...'),
35
+ * arkProvider: new ExpoArkProvider('https://ark.example.com'),
36
+ * indexerProvider: new ExpoIndexerProvider('https://ark.example.com'),
37
+ * onchainProvider: new EsploraProvider('https://mempool.space/api')
38
+ * });
39
+ * ```
14
40
  */
15
41
  export interface WalletConfig {
16
42
  identity: Identity;
17
- arkServerUrl: string;
43
+ arkServerUrl?: string;
44
+ indexerUrl?: string;
18
45
  esploraUrl?: string;
19
46
  arkServerPublicKey?: string;
20
47
  boardingTimelock?: RelativeTimelock;
21
48
  exitTimelock?: RelativeTimelock;
22
49
  storage?: StorageAdapter;
50
+ arkProvider?: ArkProvider;
51
+ indexerProvider?: IndexerProvider;
52
+ onchainProvider?: OnchainProvider;
53
+ }
54
+ /**
55
+ * Provider class constructor interface for dependency injection.
56
+ * Ensures provider classes follow the consistent constructor pattern.
57
+ */
58
+ export interface ProviderClass<T> {
59
+ new (serverUrl: string): T;
23
60
  }
24
61
  export interface WalletBalance {
25
62
  boarding: {
@@ -73,6 +110,7 @@ export interface VirtualCoin extends Coin {
73
110
  arkTxId?: string;
74
111
  createdAt: Date;
75
112
  isUnrolled: boolean;
113
+ isSpent?: boolean;
76
114
  }
77
115
  export declare enum TxType {
78
116
  TxSent = "SENT",
@@ -1,4 +1,3 @@
1
- import { ExtendedVirtualCoin, VirtualCoin, Wallet } from "../..";
2
1
  /**
3
2
  * setupServiceWorker sets up the service worker.
4
3
  * @param path - the path to the service worker script
@@ -8,4 +7,3 @@ import { ExtendedVirtualCoin, VirtualCoin, Wallet } from "../..";
8
7
  * ```
9
8
  */
10
9
  export declare function setupServiceWorker(path: string): Promise<ServiceWorker>;
11
- export declare function extendVirtualCoin(wallet: Wallet, vtxo: VirtualCoin): ExtendedVirtualCoin;
@@ -0,0 +1,2 @@
1
+ import type { ExtendedVirtualCoin, VirtualCoin, Wallet } from "..";
2
+ export declare function extendVirtualCoin(wallet: Wallet, vtxo: VirtualCoin): ExtendedVirtualCoin;
@@ -25,13 +25,21 @@ export type IncomingFunds = {
25
25
  *
26
26
  * @example
27
27
  * ```typescript
28
- * // Create a wallet
28
+ * // Create a wallet with URL configuration
29
29
  * const wallet = await Wallet.create({
30
30
  * identity: SingleKey.fromHex('your_private_key'),
31
31
  * arkServerUrl: 'https://ark.example.com',
32
32
  * esploraUrl: 'https://mempool.space/api'
33
33
  * });
34
34
  *
35
+ * // Or with custom provider instances (e.g., for Expo/React Native)
36
+ * const wallet = await Wallet.create({
37
+ * identity: SingleKey.fromHex('your_private_key'),
38
+ * arkProvider: new ExpoArkProvider('https://ark.example.com'),
39
+ * indexerProvider: new ExpoIndexerProvider('https://ark.example.com'),
40
+ * esploraUrl: 'https://mempool.space/api'
41
+ * });
42
+ *
35
43
  * // Get addresses
36
44
  * const arkAddress = await wallet.getAddress();
37
45
  * const boardingAddress = await wallet.getBoardingAddress();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arkade-os/sdk",
3
- "version": "0.3.0-alpha.7",
3
+ "version": "0.3.0-alpha.8",
4
4
  "description": "Bitcoin wallet SDK with Taproot and Ark integration",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.js",
@@ -14,6 +14,12 @@
14
14
  "require": "./dist/cjs/index.js",
15
15
  "default": "./dist/esm/index.js"
16
16
  },
17
+ "./adapters/expo": {
18
+ "types": "./dist/types/adapters/expo.d.ts",
19
+ "import": "./dist/esm/adapters/expo.js",
20
+ "require": "./dist/cjs/adapters/expo.js",
21
+ "default": "./dist/esm/adapters/expo.js"
22
+ },
17
23
  "./adapters/localStorage": {
18
24
  "types": "./dist/types/adapters/localStorage.d.ts",
19
25
  "import": "./dist/esm/adapters/localStorage.js",
@@ -58,6 +64,7 @@
58
64
  "@types/node": "24.3.1",
59
65
  "@vitest/coverage-v8": "3.2.4",
60
66
  "esbuild": "^0.25.9",
67
+ "expo": "~52.0.47",
61
68
  "eventsource": "4.0.0",
62
69
  "glob": "11.0.3",
63
70
  "husky": "9.1.7",
@@ -78,7 +85,7 @@
78
85
  "author": "Ark Labs",
79
86
  "license": "MIT",
80
87
  "engines": {
81
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
88
+ "node": ">=20.0.0"
82
89
  },
83
90
  "scripts": {
84
91
  "build": "rimraf dist && pnpm run build:esm && node scripts/add-extensions.js && pnpm run build:cjs && pnpm run build:types && node scripts/generate-package-files.js",
@@ -101,6 +108,8 @@
101
108
  "test:watch": "vitest",
102
109
  "test:coverage": "vitest run --coverage",
103
110
  "test:sw": "pnpm run build:browser && node test/serviceWorker/serve.js",
111
+ "expo:web:install": "cd examples/expo-demo && pnpm install",
112
+ "expo:web": "cd examples/expo-demo && pnpm start",
104
113
  "format": "prettier --write src test examples",
105
114
  "lint": "prettier --check src test examples",
106
115
  "audit": "pnpm audit",