@no-witness-labs/midday-sdk 0.2.0 → 0.2.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 (66) hide show
  1. package/README.md +145 -78
  2. package/dist/Client.d.ts +464 -72
  3. package/dist/Client.d.ts.map +1 -1
  4. package/dist/Client.js +526 -143
  5. package/dist/Client.js.map +1 -1
  6. package/dist/Config.d.ts +83 -1
  7. package/dist/Config.d.ts.map +1 -1
  8. package/dist/Config.js +72 -15
  9. package/dist/Config.js.map +1 -1
  10. package/dist/Providers.d.ts +99 -9
  11. package/dist/Providers.d.ts.map +1 -1
  12. package/dist/Providers.js +142 -39
  13. package/dist/Providers.js.map +1 -1
  14. package/dist/Wallet.d.ts +88 -1
  15. package/dist/Wallet.d.ts.map +1 -1
  16. package/dist/Wallet.js +162 -51
  17. package/dist/Wallet.js.map +1 -1
  18. package/dist/index.d.ts +63 -7
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +68 -4
  21. package/dist/index.js.map +1 -1
  22. package/dist/providers/HttpZkConfigProvider.d.ts +229 -0
  23. package/dist/providers/HttpZkConfigProvider.d.ts.map +1 -0
  24. package/dist/providers/HttpZkConfigProvider.js +275 -0
  25. package/dist/providers/HttpZkConfigProvider.js.map +1 -0
  26. package/dist/providers/IndexedDBPrivateStateProvider.d.ts +270 -0
  27. package/dist/providers/IndexedDBPrivateStateProvider.d.ts.map +1 -0
  28. package/dist/providers/IndexedDBPrivateStateProvider.js +513 -0
  29. package/dist/providers/IndexedDBPrivateStateProvider.js.map +1 -0
  30. package/dist/providers/errors.d.ts +50 -0
  31. package/dist/providers/errors.d.ts.map +1 -0
  32. package/dist/providers/errors.js +32 -0
  33. package/dist/providers/errors.js.map +1 -0
  34. package/dist/sdk/Type.d.ts +91 -0
  35. package/dist/sdk/Type.d.ts.map +1 -0
  36. package/dist/sdk/Type.js +8 -0
  37. package/dist/sdk/Type.js.map +1 -0
  38. package/dist/utils/address.d.ts +56 -0
  39. package/dist/utils/address.d.ts.map +1 -0
  40. package/dist/utils/address.js +135 -0
  41. package/dist/utils/address.js.map +1 -0
  42. package/dist/utils/coin.d.ts +55 -0
  43. package/dist/utils/coin.d.ts.map +1 -0
  44. package/dist/utils/coin.js +84 -0
  45. package/dist/utils/coin.js.map +1 -0
  46. package/dist/utils/effect-runtime.d.ts +66 -0
  47. package/dist/utils/effect-runtime.d.ts.map +1 -0
  48. package/dist/utils/effect-runtime.js +147 -0
  49. package/dist/utils/effect-runtime.js.map +1 -0
  50. package/dist/utils/hex.d.ts +62 -0
  51. package/dist/utils/hex.d.ts.map +1 -0
  52. package/dist/utils/hex.js +93 -0
  53. package/dist/utils/hex.js.map +1 -0
  54. package/dist/wallet/connector.d.ts +191 -0
  55. package/dist/wallet/connector.d.ts.map +1 -0
  56. package/dist/wallet/connector.js +183 -0
  57. package/dist/wallet/connector.js.map +1 -0
  58. package/dist/wallet/errors.d.ts +22 -0
  59. package/dist/wallet/errors.d.ts.map +1 -0
  60. package/dist/wallet/errors.js +16 -0
  61. package/dist/wallet/errors.js.map +1 -0
  62. package/dist/wallet/provider.d.ts +102 -0
  63. package/dist/wallet/provider.d.ts.map +1 -0
  64. package/dist/wallet/provider.js +139 -0
  65. package/dist/wallet/provider.js.map +1 -0
  66. package/package.json +10 -5
package/dist/Wallet.d.ts CHANGED
@@ -3,24 +3,111 @@
3
3
  *
4
4
  * Handles the three-layer wallet system: shielded, dust, and unshielded wallets.
5
5
  *
6
+ * ## API Design
7
+ *
8
+ * - **Promise API**: `await Wallet.init(seed, config)`
9
+ * - **Effect API**: `yield* Wallet.effect.init(seed, config)`
10
+ * - **Effect DI**: `yield* WalletService` with `WalletLive` layer
11
+ *
6
12
  * @since 0.1.0
7
13
  * @module
8
14
  */
15
+ import { Context, Effect, Layer } from 'effect';
9
16
  import * as ledger from '@midnight-ntwrk/ledger-v6';
10
17
  import { WalletFacade } from '@midnight-ntwrk/wallet-sdk-facade';
11
18
  import { createKeystore } from '@midnight-ntwrk/wallet-sdk-unshielded-wallet';
12
19
  import type { NetworkConfig } from './Config.js';
20
+ import { WalletError } from './wallet/errors.js';
21
+ /**
22
+ * Wallet context containing all wallet components.
23
+ *
24
+ * @since 0.2.0
25
+ * @category model
26
+ */
13
27
  export interface WalletContext {
14
28
  wallet: WalletFacade;
15
29
  shieldedSecretKeys: ledger.ZswapSecretKeys;
16
30
  dustSecretKey: ledger.DustSecretKey;
17
31
  unshieldedKeystore: ReturnType<typeof createKeystore>;
18
32
  }
33
+ declare function initEffect(seed: string, networkConfig: NetworkConfig): Effect.Effect<WalletContext, WalletError>;
34
+ declare function waitForSyncEffect(walletContext: WalletContext): Effect.Effect<void, WalletError>;
35
+ declare function deriveAddressEffect(seed: string, networkId: string): Effect.Effect<string, WalletError>;
36
+ /**
37
+ * Initialize wallet from seed.
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * const walletContext = await Wallet.init(seed, networkConfig);
42
+ * ```
43
+ *
44
+ * @since 0.2.0
45
+ * @category constructors
46
+ */
19
47
  export declare function init(seed: string, networkConfig: NetworkConfig): Promise<WalletContext>;
48
+ /**
49
+ * Wait for wallet to sync with the network.
50
+ *
51
+ * @since 0.2.0
52
+ * @category operations
53
+ */
20
54
  export declare function waitForSync(walletContext: WalletContext): Promise<void>;
21
55
  /**
22
56
  * Derive wallet address from seed without starting wallet connection.
23
- * Useful for displaying addresses or checking balances via indexer.
57
+ *
58
+ * @since 0.2.0
59
+ * @category utilities
24
60
  */
25
61
  export declare function deriveAddress(seed: string, networkId: string): string;
62
+ /**
63
+ * Raw Effect APIs for advanced users.
64
+ *
65
+ * @since 0.2.0
66
+ * @category effect
67
+ */
68
+ export declare const effect: {
69
+ init: typeof initEffect;
70
+ waitForSync: typeof waitForSyncEffect;
71
+ deriveAddress: typeof deriveAddressEffect;
72
+ };
73
+ /**
74
+ * Service interface for Wallet operations.
75
+ *
76
+ * @since 0.2.0
77
+ * @category service
78
+ */
79
+ export interface WalletServiceImpl {
80
+ readonly init: (seed: string, networkConfig: NetworkConfig) => Effect.Effect<WalletContext, WalletError>;
81
+ readonly waitForSync: (walletContext: WalletContext) => Effect.Effect<void, WalletError>;
82
+ readonly deriveAddress: (seed: string, networkId: string) => Effect.Effect<string, WalletError>;
83
+ }
84
+ declare const WalletService_base: Context.TagClass<WalletService, "WalletService", WalletServiceImpl>;
85
+ /**
86
+ * Context.Tag for WalletService dependency injection.
87
+ *
88
+ * @example
89
+ * ```typescript
90
+ * const program = Effect.gen(function* () {
91
+ * const walletService = yield* WalletService;
92
+ * const wallet = yield* walletService.init(seed, config);
93
+ * yield* walletService.waitForSync(wallet);
94
+ * return wallet;
95
+ * });
96
+ *
97
+ * Effect.runPromise(program.pipe(Effect.provide(WalletLive)));
98
+ * ```
99
+ *
100
+ * @since 0.2.0
101
+ * @category service
102
+ */
103
+ export declare class WalletService extends WalletService_base {
104
+ }
105
+ /**
106
+ * Live Layer for WalletService.
107
+ *
108
+ * @since 0.2.0
109
+ * @category layer
110
+ */
111
+ export declare const WalletLive: Layer.Layer<WalletService>;
112
+ export {};
26
113
  //# sourceMappingURL=Wallet.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Wallet.d.ts","sourceRoot":"","sources":["../src/Wallet.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,MAAM,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAIjE,OAAO,EACL,cAAc,EAIf,MAAM,8CAA8C,CAAC;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC,eAAe,CAAC;IAC3C,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC;IACpC,kBAAkB,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;CACvD;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CA+C7F;AAED,wBAAsB,WAAW,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAgBrE"}
1
+ {"version":3,"file":"Wallet.d.ts","sourceRoot":"","sources":["../src/Wallet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEhD,OAAO,KAAK,MAAM,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAIjE,OAAO,EACL,cAAc,EAIf,MAAM,8CAA8C,CAAC;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAQjD;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC,eAAe,CAAC;IAC3C,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC;IACpC,kBAAkB,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;CACvD;AAMD,iBAAS,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,CAwDzG;AAED,iBAAS,iBAAiB,CAAC,aAAa,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CASzF;AAED,iBAAS,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAyBhG;AAMD;;;;;;;;;;GAUG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAE7F;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7E;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;;;;GAKG;AACH,eAAO,MAAM,MAAM;;;;CAIlB,CAAC;AAMF;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IACzG,QAAQ,CAAC,WAAW,EAAE,CAAC,aAAa,EAAE,aAAa,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACzF,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACjG;;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,aAAc,SAAQ,kBAAgE;CAAG;AAMtG;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,aAAa,CAIhD,CAAC"}
package/dist/Wallet.js CHANGED
@@ -3,9 +3,16 @@
3
3
  *
4
4
  * Handles the three-layer wallet system: shielded, dust, and unshielded wallets.
5
5
  *
6
+ * ## API Design
7
+ *
8
+ * - **Promise API**: `await Wallet.init(seed, config)`
9
+ * - **Effect API**: `yield* Wallet.effect.init(seed, config)`
10
+ * - **Effect DI**: `yield* WalletService` with `WalletLive` layer
11
+ *
6
12
  * @since 0.1.0
7
13
  * @module
8
14
  */
15
+ import { Context, Effect, Layer } from 'effect';
9
16
  import * as Rx from 'rxjs';
10
17
  import * as ledger from '@midnight-ntwrk/ledger-v6';
11
18
  import { WalletFacade } from '@midnight-ntwrk/wallet-sdk-facade';
@@ -13,65 +20,169 @@ import { HDWallet, Roles } from '@midnight-ntwrk/wallet-sdk-hd';
13
20
  import { ShieldedWallet } from '@midnight-ntwrk/wallet-sdk-shielded';
14
21
  import { DustWallet } from '@midnight-ntwrk/wallet-sdk-dust-wallet';
15
22
  import { createKeystore, PublicKey as UnshieldedPublicKey, UnshieldedWallet, InMemoryTransactionHistoryStorage, } from '@midnight-ntwrk/wallet-sdk-unshielded-wallet';
16
- export async function init(seed, networkConfig) {
17
- const seedBuffer = Buffer.from(seed, 'hex');
18
- const configuration = {
19
- networkId: networkConfig.networkId,
20
- costParameters: {
21
- additionalFeeOverhead: 300000000000000000n,
22
- feeBlocksMargin: 5,
23
+ import { WalletError } from './wallet/errors.js';
24
+ import { hexToBytes } from './utils/hex.js';
25
+ import { runEffect, runEffectPromise } from './utils/effect-runtime.js';
26
+ // =============================================================================
27
+ // Internal Effect Implementations
28
+ // =============================================================================
29
+ function initEffect(seed, networkConfig) {
30
+ return Effect.tryPromise({
31
+ try: async () => {
32
+ const seedBytes = hexToBytes(seed);
33
+ const configuration = {
34
+ networkId: networkConfig.networkId,
35
+ costParameters: {
36
+ additionalFeeOverhead: 300000000000000000n,
37
+ feeBlocksMargin: 5,
38
+ },
39
+ relayURL: new URL(networkConfig.node),
40
+ provingServerUrl: new URL(networkConfig.proofServer),
41
+ indexerClientConnection: {
42
+ indexerHttpUrl: networkConfig.indexer,
43
+ indexerWsUrl: networkConfig.indexerWS,
44
+ },
45
+ indexerUrl: networkConfig.indexerWS,
46
+ };
47
+ const hdWallet = HDWallet.fromSeed(seedBytes);
48
+ if (hdWallet.type !== 'seedOk')
49
+ throw new Error('Failed to initialize HDWallet');
50
+ const derivationResult = hdWallet.hdWallet
51
+ .selectAccount(0)
52
+ .selectRoles([Roles.Zswap, Roles.NightExternal, Roles.Dust])
53
+ .deriveKeysAt(0);
54
+ if (derivationResult.type !== 'keysDerived')
55
+ throw new Error('Failed to derive keys');
56
+ hdWallet.hdWallet.clear();
57
+ const shieldedSecretKeys = ledger.ZswapSecretKeys.fromSeed(derivationResult.keys[Roles.Zswap]);
58
+ const dustSecretKey = ledger.DustSecretKey.fromSeed(derivationResult.keys[Roles.Dust]);
59
+ const unshieldedKeystore = createKeystore(derivationResult.keys[Roles.NightExternal], configuration.networkId);
60
+ const shieldedWallet = ShieldedWallet(configuration).startWithSecretKeys(shieldedSecretKeys);
61
+ const dustWallet = DustWallet(configuration).startWithSecretKey(dustSecretKey, ledger.LedgerParameters.initialParameters().dust);
62
+ const unshieldedWallet = UnshieldedWallet({
63
+ ...configuration,
64
+ txHistoryStorage: new InMemoryTransactionHistoryStorage(),
65
+ }).startWithPublicKey(UnshieldedPublicKey.fromKeyStore(unshieldedKeystore));
66
+ const wallet = new WalletFacade(shieldedWallet, unshieldedWallet, dustWallet);
67
+ await wallet.start(shieldedSecretKeys, dustSecretKey);
68
+ return { wallet, shieldedSecretKeys, dustSecretKey, unshieldedKeystore };
23
69
  },
24
- relayURL: new URL(networkConfig.node),
25
- provingServerUrl: new URL(networkConfig.proofServer),
26
- indexerClientConnection: {
27
- indexerHttpUrl: networkConfig.indexer,
28
- indexerWsUrl: networkConfig.indexerWS,
70
+ catch: (cause) => new WalletError({
71
+ cause,
72
+ message: `Failed to initialize wallet: ${cause instanceof Error ? cause.message : String(cause)}`,
73
+ }),
74
+ });
75
+ }
76
+ function waitForSyncEffect(walletContext) {
77
+ return Effect.tryPromise({
78
+ try: () => Rx.firstValueFrom(walletContext.wallet.state().pipe(Rx.filter((s) => s.isSynced))),
79
+ catch: (cause) => new WalletError({
80
+ cause,
81
+ message: `Failed to sync wallet: ${cause instanceof Error ? cause.message : String(cause)}`,
82
+ }),
83
+ }).pipe(Effect.asVoid);
84
+ }
85
+ function deriveAddressEffect(seed, networkId) {
86
+ return Effect.try({
87
+ try: () => {
88
+ const seedBytes = hexToBytes(seed);
89
+ const hdWallet = HDWallet.fromSeed(seedBytes);
90
+ if (hdWallet.type !== 'seedOk')
91
+ throw new Error('Failed to initialize HDWallet');
92
+ const derivationResult = hdWallet.hdWallet
93
+ .selectAccount(0)
94
+ .selectRoles([Roles.NightExternal])
95
+ .deriveKeysAt(0);
96
+ if (derivationResult.type !== 'keysDerived')
97
+ throw new Error('Failed to derive keys');
98
+ hdWallet.hdWallet.clear();
99
+ const unshieldedKeystore = createKeystore(derivationResult.keys[Roles.NightExternal], networkId);
100
+ return unshieldedKeystore.getBech32Address().asString();
29
101
  },
30
- indexerUrl: networkConfig.indexerWS,
31
- };
32
- const hdWallet = HDWallet.fromSeed(Uint8Array.from(seedBuffer));
33
- if (hdWallet.type !== 'seedOk')
34
- throw new Error('Failed to initialize HDWallet');
35
- const derivationResult = hdWallet.hdWallet
36
- .selectAccount(0)
37
- .selectRoles([Roles.Zswap, Roles.NightExternal, Roles.Dust])
38
- .deriveKeysAt(0);
39
- if (derivationResult.type !== 'keysDerived')
40
- throw new Error('Failed to derive keys');
41
- hdWallet.hdWallet.clear();
42
- const shieldedSecretKeys = ledger.ZswapSecretKeys.fromSeed(derivationResult.keys[Roles.Zswap]);
43
- const dustSecretKey = ledger.DustSecretKey.fromSeed(derivationResult.keys[Roles.Dust]);
44
- const unshieldedKeystore = createKeystore(derivationResult.keys[Roles.NightExternal], configuration.networkId);
45
- const shieldedWallet = ShieldedWallet(configuration).startWithSecretKeys(shieldedSecretKeys);
46
- const dustWallet = DustWallet(configuration).startWithSecretKey(dustSecretKey, ledger.LedgerParameters.initialParameters().dust);
47
- const unshieldedWallet = UnshieldedWallet({
48
- ...configuration,
49
- txHistoryStorage: new InMemoryTransactionHistoryStorage(),
50
- }).startWithPublicKey(UnshieldedPublicKey.fromKeyStore(unshieldedKeystore));
51
- const wallet = new WalletFacade(shieldedWallet, unshieldedWallet, dustWallet);
52
- await wallet.start(shieldedSecretKeys, dustSecretKey);
53
- return { wallet, shieldedSecretKeys, dustSecretKey, unshieldedKeystore };
102
+ catch: (cause) => new WalletError({
103
+ cause,
104
+ message: `Failed to derive address: ${cause instanceof Error ? cause.message : String(cause)}`,
105
+ }),
106
+ });
107
+ }
108
+ // =============================================================================
109
+ // Promise API
110
+ // =============================================================================
111
+ /**
112
+ * Initialize wallet from seed.
113
+ *
114
+ * @example
115
+ * ```typescript
116
+ * const walletContext = await Wallet.init(seed, networkConfig);
117
+ * ```
118
+ *
119
+ * @since 0.2.0
120
+ * @category constructors
121
+ */
122
+ export async function init(seed, networkConfig) {
123
+ return runEffectPromise(initEffect(seed, networkConfig));
54
124
  }
125
+ /**
126
+ * Wait for wallet to sync with the network.
127
+ *
128
+ * @since 0.2.0
129
+ * @category operations
130
+ */
55
131
  export async function waitForSync(walletContext) {
56
- await Rx.firstValueFrom(walletContext.wallet.state().pipe(Rx.filter((s) => s.isSynced)));
132
+ return runEffectPromise(waitForSyncEffect(walletContext));
57
133
  }
58
134
  /**
59
135
  * Derive wallet address from seed without starting wallet connection.
60
- * Useful for displaying addresses or checking balances via indexer.
136
+ *
137
+ * @since 0.2.0
138
+ * @category utilities
61
139
  */
62
140
  export function deriveAddress(seed, networkId) {
63
- const seedBuffer = Buffer.from(seed, 'hex');
64
- const hdWallet = HDWallet.fromSeed(Uint8Array.from(seedBuffer));
65
- if (hdWallet.type !== 'seedOk')
66
- throw new Error('Failed to initialize HDWallet');
67
- const derivationResult = hdWallet.hdWallet
68
- .selectAccount(0)
69
- .selectRoles([Roles.NightExternal])
70
- .deriveKeysAt(0);
71
- if (derivationResult.type !== 'keysDerived')
72
- throw new Error('Failed to derive keys');
73
- hdWallet.hdWallet.clear();
74
- const unshieldedKeystore = createKeystore(derivationResult.keys[Roles.NightExternal], networkId);
75
- return unshieldedKeystore.getBech32Address().asString();
141
+ return runEffect(deriveAddressEffect(seed, networkId));
76
142
  }
143
+ /**
144
+ * Raw Effect APIs for advanced users.
145
+ *
146
+ * @since 0.2.0
147
+ * @category effect
148
+ */
149
+ export const effect = {
150
+ init: initEffect,
151
+ waitForSync: waitForSyncEffect,
152
+ deriveAddress: deriveAddressEffect,
153
+ };
154
+ /**
155
+ * Context.Tag for WalletService dependency injection.
156
+ *
157
+ * @example
158
+ * ```typescript
159
+ * const program = Effect.gen(function* () {
160
+ * const walletService = yield* WalletService;
161
+ * const wallet = yield* walletService.init(seed, config);
162
+ * yield* walletService.waitForSync(wallet);
163
+ * return wallet;
164
+ * });
165
+ *
166
+ * Effect.runPromise(program.pipe(Effect.provide(WalletLive)));
167
+ * ```
168
+ *
169
+ * @since 0.2.0
170
+ * @category service
171
+ */
172
+ export class WalletService extends Context.Tag('WalletService')() {
173
+ }
174
+ // =============================================================================
175
+ // Effect DI - Live Layer
176
+ // =============================================================================
177
+ /**
178
+ * Live Layer for WalletService.
179
+ *
180
+ * @since 0.2.0
181
+ * @category layer
182
+ */
183
+ export const WalletLive = Layer.succeed(WalletService, {
184
+ init: initEffect,
185
+ waitForSync: waitForSyncEffect,
186
+ deriveAddress: deriveAddressEffect,
187
+ });
77
188
  //# sourceMappingURL=Wallet.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Wallet.js","sourceRoot":"","sources":["../src/Wallet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Wallet.js","sourceRoot":"","sources":["../src/Wallet.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,26 +1,82 @@
1
1
  /**
2
2
  * Midday SDK - Developer-friendly SDK for building dapps on Midnight Network.
3
3
  *
4
+ * Provides dual API: Effect-based and Promise-based for flexibility.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * // Browser with Lace wallet (Promise-based)
9
+ * import * as Midday from '@no-witness-labs/midday-sdk';
10
+ *
11
+ * const connection = await Midday.connectWallet('testnet');
12
+ * const client = await Midday.Client.fromWallet(connection, {
13
+ * zkConfigProvider: new Midday.HttpZkConfigProvider('https://cdn.example.com/zk'),
14
+ * privateStateProvider: Midday.indexedDBPrivateStateProvider({ privateStateStoreName: 'my-app' }),
15
+ * });
16
+ *
17
+ * const builder = await Midday.Client.contractFrom(client, {
18
+ * module: await import('./contracts/counter/index.js'),
19
+ * });
20
+ * const contract = await Midday.ContractBuilder.deploy(builder);
21
+ * await Midday.Contract.call(contract, 'increment');
22
+ * ```
23
+ *
4
24
  * @example
5
25
  * ```typescript
26
+ * // Effect-based usage
6
27
  * import * as Midday from '@no-witness-labs/midday-sdk';
28
+ * import { Effect } from 'effect';
29
+ *
30
+ * const program = Effect.gen(function* () {
31
+ * const client = yield* Midday.Client.effect.create({
32
+ * seed: 'your-64-char-hex-seed',
33
+ * networkConfig: Midday.Config.NETWORKS.local,
34
+ * zkConfigProvider: new Midday.HttpZkConfigProvider('http://localhost:3000/zk'),
35
+ * privateStateProvider: Midday.inMemoryPrivateStateProvider(),
36
+ * });
37
+ *
38
+ * const builder = yield* Midday.Client.effect.contractFrom(client, {
39
+ * module: await import('./contracts/counter/index.js'),
40
+ * });
41
+ *
42
+ * const contract = yield* Midday.ContractBuilder.effect.deploy(builder);
43
+ * const result = yield* Midday.Contract.effect.call(contract, 'increment');
44
+ *
45
+ * return result;
46
+ * });
7
47
  *
8
- * const client = await Midday.Client.create();
9
- * const contract = await (await client.contractFrom('build/my-contract')).deploy();
10
- * await contract.call('myAction', arg1, arg2);
11
- * const state = await contract.ledgerState();
48
+ * const result = await Midday.runEffectPromise(program);
12
49
  * ```
13
50
  *
14
51
  * @since 0.1.0
15
52
  * @module
16
53
  */
54
+ export { Effect, pipe, Context, Layer } from 'effect';
55
+ export { LoggerService, NetworkConfigService, SdkConfigService, makeSdkLayer, type SdkConfig, } from './Config.js';
17
56
  export * as Client from './Client.js';
57
+ export { Contract, ContractBuilder } from './Client.js';
18
58
  export * as Config from './Config.js';
19
59
  export * as Wallet from './Wallet.js';
20
60
  export * as Providers from './Providers.js';
61
+ export { runEffect, runEffectPromise } from './utils/effect-runtime.js';
62
+ export { ClientError, ContractError } from './Client.js';
63
+ export { WalletError } from './wallet/errors.js';
64
+ export { ProviderError, ZkConfigError, PrivateStateError } from './providers/errors.js';
65
+ export type { EffectToPromise, EffectToPromiseAPI, SelectivePromiseAPI, SelectiveSyncAPI, } from './sdk/Type.js';
66
+ export { hexToBytes, bytesToHex, base64ToBytes, bytesToBase64 } from './utils/hex.js';
67
+ export { parseShieldedAddress, hexToPublicKey, type ParsedAddress } from './utils/address.js';
68
+ export { createCoin, createCustomCoin, getNativeTokenColor, type CoinInfo } from './utils/coin.js';
69
+ export { connectWallet, disconnectWallet, isWalletAvailable, getWalletProvingProvider, effect as WalletConnectorEffect, WalletConnectorService, WalletConnectorLive, type WalletConnection, type ShieldedAddresses, type InitialAPI, type ConnectedAPI, type Configuration, type ProvingProvider, type KeyMaterialProvider, type WalletConnectorServiceImpl, } from './wallet/connector.js';
70
+ export { createWalletProviders, effect as WalletProviderEffect, WalletProviderService, WalletProviderLive, type WalletKeys, type WalletProviders, type WalletProviderServiceImpl, } from './wallet/provider.js';
71
+ export { HttpZkConfigProvider, make as makeHttpZkConfigProvider, getZKIR, getProverKey, getVerifierKey, clearCache as clearZkConfigCache, effect as HttpZkConfigProviderEffect, ZkConfigService, ZkConfigLive, ZkConfigProviderService, type ZkConfig, type HttpZkConfigProviderData, type ZkConfigServiceImpl, } from './providers/HttpZkConfigProvider.js';
72
+ export { FetchZkConfigProvider } from '@midnight-ntwrk/midnight-js-fetch-zk-config-provider';
73
+ export { indexedDBPrivateStateProvider, inMemoryPrivateStateProvider, makeIndexedDB as makeIndexedDBPrivateState, makeInMemory as makeInMemoryPrivateState, get as getPrivateState, set as setPrivateState, remove as removePrivateState, clear as clearPrivateState, effect as PrivateStateEffect, PrivateStateService, PrivateStateLive, PrivateStateProviderService, type IndexedDBPrivateStateConfig, type PrivateStateProviderData, type PrivateStateServiceImpl, } from './providers/IndexedDBPrivateStateProvider.js';
21
74
  export { nativeToken } from '@midnight-ntwrk/ledger-v6';
22
- export type { ClientConfig, MidnightClient, ContractBuilder, ConnectedContract, CallResult, FinalizedTxData } from './Client.js';
75
+ export type { ClientConfig, MidnightClient, CallResult, FinalizedTxData, ContractModule, ContractFromOptions, Logger, DeployOptions, JoinOptions, LoadedContractModule, ClientServiceImpl, ContractBuilderServiceImpl, ContractServiceImpl, } from './Client.js';
76
+ export { ClientService, ClientLive, ContractBuilderService, ContractBuilderLive, ContractService, ContractLive, } from './Client.js';
23
77
  export type { NetworkConfig } from './Config.js';
24
- export type { WalletContext } from './Wallet.js';
25
- export type { ContractProviders, StorageConfig } from './Providers.js';
78
+ export type { WalletContext, WalletServiceImpl } from './Wallet.js';
79
+ export { WalletService, WalletLive } from './Wallet.js';
80
+ export type { ContractProviders, StorageConfig, CreateProvidersOptions, ContractProvidersEffect, ProvidersServiceImpl, } from './Providers.js';
81
+ export { ProvidersService, ProvidersLive } from './Providers.js';
26
82
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAG5C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACjI,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,23 +1,87 @@
1
1
  /**
2
2
  * Midday SDK - Developer-friendly SDK for building dapps on Midnight Network.
3
3
  *
4
+ * Provides dual API: Effect-based and Promise-based for flexibility.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * // Browser with Lace wallet (Promise-based)
9
+ * import * as Midday from '@no-witness-labs/midday-sdk';
10
+ *
11
+ * const connection = await Midday.connectWallet('testnet');
12
+ * const client = await Midday.Client.fromWallet(connection, {
13
+ * zkConfigProvider: new Midday.HttpZkConfigProvider('https://cdn.example.com/zk'),
14
+ * privateStateProvider: Midday.indexedDBPrivateStateProvider({ privateStateStoreName: 'my-app' }),
15
+ * });
16
+ *
17
+ * const builder = await Midday.Client.contractFrom(client, {
18
+ * module: await import('./contracts/counter/index.js'),
19
+ * });
20
+ * const contract = await Midday.ContractBuilder.deploy(builder);
21
+ * await Midday.Contract.call(contract, 'increment');
22
+ * ```
23
+ *
4
24
  * @example
5
25
  * ```typescript
26
+ * // Effect-based usage
6
27
  * import * as Midday from '@no-witness-labs/midday-sdk';
28
+ * import { Effect } from 'effect';
29
+ *
30
+ * const program = Effect.gen(function* () {
31
+ * const client = yield* Midday.Client.effect.create({
32
+ * seed: 'your-64-char-hex-seed',
33
+ * networkConfig: Midday.Config.NETWORKS.local,
34
+ * zkConfigProvider: new Midday.HttpZkConfigProvider('http://localhost:3000/zk'),
35
+ * privateStateProvider: Midday.inMemoryPrivateStateProvider(),
36
+ * });
37
+ *
38
+ * const builder = yield* Midday.Client.effect.contractFrom(client, {
39
+ * module: await import('./contracts/counter/index.js'),
40
+ * });
41
+ *
42
+ * const contract = yield* Midday.ContractBuilder.effect.deploy(builder);
43
+ * const result = yield* Midday.Contract.effect.call(contract, 'increment');
44
+ *
45
+ * return result;
46
+ * });
7
47
  *
8
- * const client = await Midday.Client.create();
9
- * const contract = await (await client.contractFrom('build/my-contract')).deploy();
10
- * await contract.call('myAction', arg1, arg2);
11
- * const state = await contract.ledgerState();
48
+ * const result = await Midday.runEffectPromise(program);
12
49
  * ```
13
50
  *
14
51
  * @since 0.1.0
15
52
  * @module
16
53
  */
54
+ // Re-export Effect for consumer convenience
55
+ export { Effect, pipe, Context, Layer } from 'effect';
56
+ // Services for dependency injection (from Config module)
57
+ export { LoggerService, NetworkConfigService, SdkConfigService, makeSdkLayer, } from './Config.js';
58
+ // Core modules
17
59
  export * as Client from './Client.js';
60
+ export { Contract, ContractBuilder } from './Client.js';
18
61
  export * as Config from './Config.js';
19
62
  export * as Wallet from './Wallet.js';
20
63
  export * as Providers from './Providers.js';
64
+ // Effect utilities
65
+ export { runEffect, runEffectPromise } from './utils/effect-runtime.js';
66
+ // Error types (colocated with their modules)
67
+ export { ClientError, ContractError } from './Client.js';
68
+ export { WalletError } from './wallet/errors.js';
69
+ export { ProviderError, ZkConfigError, PrivateStateError } from './providers/errors.js';
70
+ // Utilities
71
+ export { hexToBytes, bytesToHex, base64ToBytes, bytesToBase64 } from './utils/hex.js';
72
+ export { parseShieldedAddress, hexToPublicKey } from './utils/address.js';
73
+ export { createCoin, createCustomCoin, getNativeTokenColor } from './utils/coin.js';
74
+ // Wallet connector (browser)
75
+ export { connectWallet, disconnectWallet, isWalletAvailable, getWalletProvingProvider, effect as WalletConnectorEffect, WalletConnectorService, WalletConnectorLive, } from './wallet/connector.js';
76
+ export { createWalletProviders, effect as WalletProviderEffect, WalletProviderService, WalletProviderLive, } from './wallet/provider.js';
77
+ // Providers
78
+ export { HttpZkConfigProvider, make as makeHttpZkConfigProvider, getZKIR, getProverKey, getVerifierKey, clearCache as clearZkConfigCache, effect as HttpZkConfigProviderEffect, ZkConfigService, ZkConfigLive, ZkConfigProviderService, } from './providers/HttpZkConfigProvider.js';
79
+ // Re-export FetchZkConfigProvider for browser use
80
+ export { FetchZkConfigProvider } from '@midnight-ntwrk/midnight-js-fetch-zk-config-provider';
81
+ export { indexedDBPrivateStateProvider, inMemoryPrivateStateProvider, makeIndexedDB as makeIndexedDBPrivateState, makeInMemory as makeInMemoryPrivateState, get as getPrivateState, set as setPrivateState, remove as removePrivateState, clear as clearPrivateState, effect as PrivateStateEffect, PrivateStateService, PrivateStateLive, PrivateStateProviderService, } from './providers/IndexedDBPrivateStateProvider.js';
21
82
  // Re-export ledger utilities for balance checking
22
83
  export { nativeToken } from '@midnight-ntwrk/ledger-v6';
84
+ export { ClientService, ClientLive, ContractBuilderService, ContractBuilderLive, ContractService, ContractLive, } from './Client.js';
85
+ export { WalletService, WalletLive } from './Wallet.js';
86
+ export { ProvidersService, ProvidersLive } from './Providers.js';
23
87
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAE5C,kDAAkD;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,4CAA4C;AAC5C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEtD,yDAAyD;AACzD,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,GAEb,MAAM,aAAa,CAAC;AAErB,eAAe;AACf,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAE5C,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAExE,6CAA6C;AAC7C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAUxF,YAAY;AACZ,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAsB,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,mBAAmB,EAAiB,MAAM,iBAAiB,CAAC;AAEnG,6BAA6B;AAC7B,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACxB,MAAM,IAAI,qBAAqB,EAC/B,sBAAsB,EACtB,mBAAmB,GASpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,qBAAqB,EACrB,MAAM,IAAI,oBAAoB,EAC9B,qBAAqB,EACrB,kBAAkB,GAInB,MAAM,sBAAsB,CAAC;AAE9B,YAAY;AACZ,OAAO,EACL,oBAAoB,EACpB,IAAI,IAAI,wBAAwB,EAChC,OAAO,EACP,YAAY,EACZ,cAAc,EACd,UAAU,IAAI,kBAAkB,EAChC,MAAM,IAAI,0BAA0B,EACpC,eAAe,EACf,YAAY,EACZ,uBAAuB,GAIxB,MAAM,qCAAqC,CAAC;AAE7C,kDAAkD;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sDAAsD,CAAC;AAC7F,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC5B,aAAa,IAAI,yBAAyB,EAC1C,YAAY,IAAI,wBAAwB,EACxC,GAAG,IAAI,eAAe,EACtB,GAAG,IAAI,eAAe,EACtB,MAAM,IAAI,kBAAkB,EAC5B,KAAK,IAAI,iBAAiB,EAC1B,MAAM,IAAI,kBAAkB,EAC5B,mBAAmB,EACnB,gBAAgB,EAChB,2BAA2B,GAI5B,MAAM,8CAA8C,CAAC;AAEtD,kDAAkD;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAkBxD,OAAO,EACL,aAAa,EACb,UAAU,EACV,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EACf,YAAY,GACb,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAQxD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}