@no-witness-labs/midday-sdk 0.1.2 → 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.
- package/README.md +145 -78
- package/dist/Client.d.ts +464 -72
- package/dist/Client.d.ts.map +1 -1
- package/dist/Client.js +526 -143
- package/dist/Client.js.map +1 -1
- package/dist/Config.d.ts +83 -1
- package/dist/Config.d.ts.map +1 -1
- package/dist/Config.js +72 -15
- package/dist/Config.js.map +1 -1
- package/dist/Providers.d.ts +99 -9
- package/dist/Providers.d.ts.map +1 -1
- package/dist/Providers.js +142 -39
- package/dist/Providers.js.map +1 -1
- package/dist/Wallet.d.ts +88 -1
- package/dist/Wallet.d.ts.map +1 -1
- package/dist/Wallet.js +162 -51
- package/dist/Wallet.js.map +1 -1
- package/dist/devnet/Cluster.d.ts +282 -0
- package/dist/devnet/Cluster.d.ts.map +1 -0
- package/dist/devnet/Cluster.js +487 -0
- package/dist/devnet/Cluster.js.map +1 -0
- package/dist/devnet/Config.d.ts +119 -0
- package/dist/devnet/Config.d.ts.map +1 -0
- package/dist/devnet/Config.js +75 -0
- package/dist/devnet/Config.js.map +1 -0
- package/dist/devnet/Container.d.ts +180 -0
- package/dist/devnet/Container.d.ts.map +1 -0
- package/dist/devnet/Container.js +390 -0
- package/dist/devnet/Container.js.map +1 -0
- package/dist/devnet/Health.d.ts +129 -0
- package/dist/devnet/Health.d.ts.map +1 -0
- package/dist/devnet/Health.js +304 -0
- package/dist/devnet/Health.js.map +1 -0
- package/dist/devnet/Images.d.ts +43 -0
- package/dist/devnet/Images.d.ts.map +1 -0
- package/dist/devnet/Images.js +96 -0
- package/dist/devnet/Images.js.map +1 -0
- package/dist/devnet/errors.d.ts +65 -0
- package/dist/devnet/errors.d.ts.map +1 -0
- package/dist/devnet/errors.js +40 -0
- package/dist/devnet/errors.js.map +1 -0
- package/dist/devnet/index.d.ts +72 -0
- package/dist/devnet/index.d.ts.map +1 -0
- package/dist/devnet/index.js +73 -0
- package/dist/devnet/index.js.map +1 -0
- package/dist/index.d.ts +63 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +68 -4
- package/dist/index.js.map +1 -1
- package/dist/providers/HttpZkConfigProvider.d.ts +229 -0
- package/dist/providers/HttpZkConfigProvider.d.ts.map +1 -0
- package/dist/providers/HttpZkConfigProvider.js +275 -0
- package/dist/providers/HttpZkConfigProvider.js.map +1 -0
- package/dist/providers/IndexedDBPrivateStateProvider.d.ts +270 -0
- package/dist/providers/IndexedDBPrivateStateProvider.d.ts.map +1 -0
- package/dist/providers/IndexedDBPrivateStateProvider.js +513 -0
- package/dist/providers/IndexedDBPrivateStateProvider.js.map +1 -0
- package/dist/providers/errors.d.ts +50 -0
- package/dist/providers/errors.d.ts.map +1 -0
- package/dist/providers/errors.js +32 -0
- package/dist/providers/errors.js.map +1 -0
- package/dist/sdk/Type.d.ts +91 -0
- package/dist/sdk/Type.d.ts.map +1 -0
- package/dist/sdk/Type.js +8 -0
- package/dist/sdk/Type.js.map +1 -0
- package/dist/utils/address.d.ts +56 -0
- package/dist/utils/address.d.ts.map +1 -0
- package/dist/utils/address.js +135 -0
- package/dist/utils/address.js.map +1 -0
- package/dist/utils/coin.d.ts +55 -0
- package/dist/utils/coin.d.ts.map +1 -0
- package/dist/utils/coin.js +84 -0
- package/dist/utils/coin.js.map +1 -0
- package/dist/utils/effect-runtime.d.ts +66 -0
- package/dist/utils/effect-runtime.d.ts.map +1 -0
- package/dist/utils/effect-runtime.js +147 -0
- package/dist/utils/effect-runtime.js.map +1 -0
- package/dist/utils/hex.d.ts +62 -0
- package/dist/utils/hex.d.ts.map +1 -0
- package/dist/utils/hex.js +93 -0
- package/dist/utils/hex.js.map +1 -0
- package/dist/wallet/connector.d.ts +191 -0
- package/dist/wallet/connector.d.ts.map +1 -0
- package/dist/wallet/connector.js +183 -0
- package/dist/wallet/connector.js.map +1 -0
- package/dist/wallet/errors.d.ts +22 -0
- package/dist/wallet/errors.d.ts.map +1 -0
- package/dist/wallet/errors.js +16 -0
- package/dist/wallet/errors.js.map +1 -0
- package/dist/wallet/provider.d.ts +102 -0
- package/dist/wallet/provider.d.ts.map +1 -0
- package/dist/wallet/provider.js +139 -0
- package/dist/wallet/provider.js.map +1 -0
- package/package.json +23 -8
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
|
-
*
|
|
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
|
package/dist/Wallet.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Wallet.d.ts","sourceRoot":"","sources":["../src/Wallet.ts"],"names":[],"mappings":"AAAA
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
132
|
+
return runEffectPromise(waitForSyncEffect(walletContext));
|
|
57
133
|
}
|
|
58
134
|
/**
|
|
59
135
|
* Derive wallet address from seed without starting wallet connection.
|
|
60
|
-
*
|
|
136
|
+
*
|
|
137
|
+
* @since 0.2.0
|
|
138
|
+
* @category utilities
|
|
61
139
|
*/
|
|
62
140
|
export function deriveAddress(seed, networkId) {
|
|
63
|
-
|
|
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
|
package/dist/Wallet.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Wallet.js","sourceRoot":"","sources":["../src/Wallet.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"Wallet.js","sourceRoot":"","sources":["../src/Wallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DevNet cluster orchestration.
|
|
3
|
+
*
|
|
4
|
+
* Manages the lifecycle of a complete Midnight development environment
|
|
5
|
+
* consisting of a node, indexer, and proof server.
|
|
6
|
+
*
|
|
7
|
+
* ## API Design
|
|
8
|
+
*
|
|
9
|
+
* This module uses an **instance-based pattern**:
|
|
10
|
+
*
|
|
11
|
+
* - **Stateful**: A Cluster holds references to Docker containers
|
|
12
|
+
* - **Instance methods**: `cluster.start()`, `cluster.stop()`, etc.
|
|
13
|
+
* - **Effect-first**: Internal implementation uses Effect
|
|
14
|
+
* - **Promise wrapper**: `.effect` namespace exposes raw Effects
|
|
15
|
+
*
|
|
16
|
+
* ### Usage Patterns
|
|
17
|
+
*
|
|
18
|
+
* ```typescript
|
|
19
|
+
* // Promise user (majority)
|
|
20
|
+
* const cluster = await Cluster.make();
|
|
21
|
+
* await cluster.start(); // instance method
|
|
22
|
+
* const config = cluster.networkConfig; // accessor
|
|
23
|
+
* await cluster.stop();
|
|
24
|
+
*
|
|
25
|
+
* // Effect user (composable)
|
|
26
|
+
* const cluster = yield* Cluster.effect.make();
|
|
27
|
+
* yield* cluster.effect.start(); // raw Effect access
|
|
28
|
+
*
|
|
29
|
+
* // Effect DI user (dependency injection)
|
|
30
|
+
* const cluster = yield* ClusterService;
|
|
31
|
+
* yield* cluster.effect.start();
|
|
32
|
+
* // provide with: Effect.provide(Cluster.Live) or Cluster.layer({ ... })
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @since 0.2.0
|
|
36
|
+
* @module
|
|
37
|
+
*/
|
|
38
|
+
import { Context, Effect, Layer } from 'effect';
|
|
39
|
+
import type { NetworkConfig } from '../Config.js';
|
|
40
|
+
import type { DevNetConfig, ResolvedDevNetConfig } from './Config.js';
|
|
41
|
+
import * as Container from './Container.js';
|
|
42
|
+
import { ClusterError } from './errors.js';
|
|
43
|
+
/**
|
|
44
|
+
* Raw cluster data (containers and config).
|
|
45
|
+
*
|
|
46
|
+
* @since 0.2.0
|
|
47
|
+
* @category model
|
|
48
|
+
*/
|
|
49
|
+
export interface ClusterData {
|
|
50
|
+
/** The Midnight node container */
|
|
51
|
+
readonly node: Container.Container;
|
|
52
|
+
/** The indexer container */
|
|
53
|
+
readonly indexer: Container.Container;
|
|
54
|
+
/** The proof server container */
|
|
55
|
+
readonly proofServer: Container.Container;
|
|
56
|
+
/** The resolved configuration */
|
|
57
|
+
readonly config: ResolvedDevNetConfig;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* A DevNet cluster instance with lifecycle methods.
|
|
61
|
+
*
|
|
62
|
+
* @since 0.2.0
|
|
63
|
+
* @category model
|
|
64
|
+
*/
|
|
65
|
+
export interface Cluster {
|
|
66
|
+
/** The Midnight node container */
|
|
67
|
+
readonly node: Container.Container;
|
|
68
|
+
/** The indexer container */
|
|
69
|
+
readonly indexer: Container.Container;
|
|
70
|
+
/** The proof server container */
|
|
71
|
+
readonly proofServer: Container.Container;
|
|
72
|
+
/** The resolved configuration */
|
|
73
|
+
readonly config: ResolvedDevNetConfig;
|
|
74
|
+
/** Network configuration for use with midday-sdk client */
|
|
75
|
+
readonly networkConfig: NetworkConfig;
|
|
76
|
+
/** Start the cluster */
|
|
77
|
+
readonly start: () => Promise<void>;
|
|
78
|
+
/** Stop the cluster */
|
|
79
|
+
readonly stop: () => Promise<void>;
|
|
80
|
+
/** Remove the cluster */
|
|
81
|
+
readonly remove: () => Promise<void>;
|
|
82
|
+
/** Check if the cluster is running */
|
|
83
|
+
readonly isRunning: () => Promise<boolean>;
|
|
84
|
+
readonly effect: {
|
|
85
|
+
/** Start the cluster (raw Effect) */
|
|
86
|
+
readonly start: () => Effect.Effect<void, ClusterError>;
|
|
87
|
+
/** Stop the cluster (raw Effect) */
|
|
88
|
+
readonly stop: () => Effect.Effect<void, ClusterError>;
|
|
89
|
+
/** Remove the cluster (raw Effect) */
|
|
90
|
+
readonly remove: () => Effect.Effect<void, ClusterError>;
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
declare const ClusterService_base: Context.TagClass<ClusterService, "ClusterService", Cluster>;
|
|
94
|
+
/**
|
|
95
|
+
* Context.Tag for ClusterService dependency injection.
|
|
96
|
+
*
|
|
97
|
+
* Yields a Cluster instance directly. Use `Cluster.layer()` to provide
|
|
98
|
+
* with custom configuration.
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```typescript
|
|
102
|
+
* import { Effect } from 'effect';
|
|
103
|
+
* import { Cluster, ClusterService } from '@no-witness-labs/midday-sdk/devnet';
|
|
104
|
+
*
|
|
105
|
+
* const program = Effect.gen(function* () {
|
|
106
|
+
* const cluster = yield* ClusterService;
|
|
107
|
+
* yield* cluster.effect.start();
|
|
108
|
+
* return cluster.networkConfig;
|
|
109
|
+
* });
|
|
110
|
+
*
|
|
111
|
+
* // With default config
|
|
112
|
+
* await Effect.runPromise(program.pipe(Effect.provide(Cluster.Live)));
|
|
113
|
+
*
|
|
114
|
+
* // With custom config
|
|
115
|
+
* await Effect.runPromise(program.pipe(
|
|
116
|
+
* Effect.provide(Cluster.layer({ clusterName: 'my-devnet' }))
|
|
117
|
+
* ));
|
|
118
|
+
* ```
|
|
119
|
+
*
|
|
120
|
+
* @since 0.2.0
|
|
121
|
+
* @category service
|
|
122
|
+
*/
|
|
123
|
+
export declare class ClusterService extends ClusterService_base {
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Create a new DevNet cluster instance.
|
|
127
|
+
*
|
|
128
|
+
* Returns a cluster with bound lifecycle methods.
|
|
129
|
+
* This creates the containers but does not start them.
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* ```typescript
|
|
133
|
+
* import { Cluster } from '@no-witness-labs/midday-sdk/devnet';
|
|
134
|
+
*
|
|
135
|
+
* const cluster = await Cluster.make();
|
|
136
|
+
* await cluster.start();
|
|
137
|
+
*
|
|
138
|
+
* // Access network config directly
|
|
139
|
+
* const client = await Midday.Client.create({
|
|
140
|
+
* networkConfig: cluster.networkConfig,
|
|
141
|
+
* seed: 'your-wallet-seed',
|
|
142
|
+
* });
|
|
143
|
+
*
|
|
144
|
+
* // ... run tests ...
|
|
145
|
+
*
|
|
146
|
+
* await cluster.remove();
|
|
147
|
+
* ```
|
|
148
|
+
*
|
|
149
|
+
* @since 0.2.0
|
|
150
|
+
* @category constructors
|
|
151
|
+
*/
|
|
152
|
+
export declare const make: (config?: DevNetConfig) => Promise<Cluster>;
|
|
153
|
+
/**
|
|
154
|
+
* Get the network configuration for use with midday-sdk client.
|
|
155
|
+
*
|
|
156
|
+
* @deprecated Prefer using `cluster.networkConfig` property instead.
|
|
157
|
+
*
|
|
158
|
+
* @since 0.2.0
|
|
159
|
+
* @category utilities
|
|
160
|
+
*/
|
|
161
|
+
export declare const toNetworkConfig: (cluster: Cluster | ClusterData) => NetworkConfig;
|
|
162
|
+
/**
|
|
163
|
+
* Helper function to run code with an automatically managed cluster.
|
|
164
|
+
* The cluster is created, started, and cleaned up automatically.
|
|
165
|
+
*
|
|
166
|
+
* @example
|
|
167
|
+
* ```typescript
|
|
168
|
+
* import { Cluster } from '@no-witness-labs/midday-sdk/devnet';
|
|
169
|
+
*
|
|
170
|
+
* await Cluster.withCluster(async (cluster) => {
|
|
171
|
+
* // Use cluster.networkConfig directly
|
|
172
|
+
* const config = cluster.networkConfig;
|
|
173
|
+
* // Your code here - cluster will be cleaned up automatically
|
|
174
|
+
* return config;
|
|
175
|
+
* });
|
|
176
|
+
* ```
|
|
177
|
+
*
|
|
178
|
+
* @since 0.2.0
|
|
179
|
+
* @category utilities
|
|
180
|
+
*/
|
|
181
|
+
export declare const withCluster: <T>(fn: (cluster: Cluster) => Promise<T>, config?: DevNetConfig) => Promise<T>;
|
|
182
|
+
/**
|
|
183
|
+
* Effect API for advanced users who want full composability,
|
|
184
|
+
* type-safe errors, retries, and other Effect benefits.
|
|
185
|
+
*
|
|
186
|
+
* @example
|
|
187
|
+
* ```typescript
|
|
188
|
+
* import { Effect } from 'effect';
|
|
189
|
+
* import { Cluster } from '@no-witness-labs/midday-sdk/devnet';
|
|
190
|
+
*
|
|
191
|
+
* const program = Effect.gen(function* () {
|
|
192
|
+
* const cluster = yield* Cluster.effect.make();
|
|
193
|
+
* yield* cluster.effect.start(); // Use instance method
|
|
194
|
+
* return cluster;
|
|
195
|
+
* }).pipe(
|
|
196
|
+
* Effect.retry({ times: 3 }),
|
|
197
|
+
* Effect.timeout('5 minutes')
|
|
198
|
+
* );
|
|
199
|
+
*
|
|
200
|
+
* await Effect.runPromise(program);
|
|
201
|
+
* ```
|
|
202
|
+
*
|
|
203
|
+
* @since 0.2.0
|
|
204
|
+
* @category effect
|
|
205
|
+
*/
|
|
206
|
+
export declare const effect: {
|
|
207
|
+
/**
|
|
208
|
+
* Create a cluster instance (returns raw Effect).
|
|
209
|
+
*
|
|
210
|
+
* The returned cluster has an `.effect` namespace for lifecycle methods.
|
|
211
|
+
*
|
|
212
|
+
* @since 0.2.0
|
|
213
|
+
*/
|
|
214
|
+
readonly make: (config?: DevNetConfig) => Effect.Effect<Cluster, ClusterError, never>;
|
|
215
|
+
/**
|
|
216
|
+
* Run code with an automatically managed cluster (returns raw Effect).
|
|
217
|
+
*
|
|
218
|
+
* @example
|
|
219
|
+
* ```typescript
|
|
220
|
+
* import { Effect } from 'effect';
|
|
221
|
+
* import { Cluster } from '@no-witness-labs/midday-sdk/devnet';
|
|
222
|
+
*
|
|
223
|
+
* const program = Cluster.effect.withCluster((cluster) =>
|
|
224
|
+
* Effect.gen(function* () {
|
|
225
|
+
* const config = cluster.networkConfig;
|
|
226
|
+
* return config;
|
|
227
|
+
* })
|
|
228
|
+
* );
|
|
229
|
+
*
|
|
230
|
+
* await Effect.runPromise(program);
|
|
231
|
+
* ```
|
|
232
|
+
*
|
|
233
|
+
* @since 0.2.0
|
|
234
|
+
*/
|
|
235
|
+
readonly withCluster: <A, E, R>(fn: (cluster: Cluster) => Effect.Effect<A, E, R>, config?: DevNetConfig) => Effect.Effect<A, E | ClusterError, R>;
|
|
236
|
+
};
|
|
237
|
+
/**
|
|
238
|
+
* Create a Layer that provides ClusterService with custom configuration.
|
|
239
|
+
*
|
|
240
|
+
* @example
|
|
241
|
+
* ```typescript
|
|
242
|
+
* import { Effect } from 'effect';
|
|
243
|
+
* import { Cluster, ClusterService } from '@no-witness-labs/midday-sdk/devnet';
|
|
244
|
+
*
|
|
245
|
+
* const program = Effect.gen(function* () {
|
|
246
|
+
* const cluster = yield* ClusterService;
|
|
247
|
+
* yield* cluster.effect.start();
|
|
248
|
+
* return cluster;
|
|
249
|
+
* });
|
|
250
|
+
*
|
|
251
|
+
* await Effect.runPromise(program.pipe(
|
|
252
|
+
* Effect.provide(Cluster.layer({ clusterName: 'my-devnet' }))
|
|
253
|
+
* ));
|
|
254
|
+
* ```
|
|
255
|
+
*
|
|
256
|
+
* @since 0.2.0
|
|
257
|
+
* @category layer
|
|
258
|
+
*/
|
|
259
|
+
export declare const layer: (config?: DevNetConfig) => Layer.Layer<ClusterService, ClusterError>;
|
|
260
|
+
/**
|
|
261
|
+
* Live Layer for ClusterService with default configuration.
|
|
262
|
+
*
|
|
263
|
+
* @example
|
|
264
|
+
* ```typescript
|
|
265
|
+
* import { Effect } from 'effect';
|
|
266
|
+
* import { Cluster, ClusterService } from '@no-witness-labs/midday-sdk/devnet';
|
|
267
|
+
*
|
|
268
|
+
* const program = Effect.gen(function* () {
|
|
269
|
+
* const cluster = yield* ClusterService;
|
|
270
|
+
* yield* cluster.effect.start();
|
|
271
|
+
* return cluster;
|
|
272
|
+
* });
|
|
273
|
+
*
|
|
274
|
+
* await Effect.runPromise(program.pipe(Effect.provide(Cluster.Live)));
|
|
275
|
+
* ```
|
|
276
|
+
*
|
|
277
|
+
* @since 0.2.0
|
|
278
|
+
* @category layer
|
|
279
|
+
*/
|
|
280
|
+
export declare const Live: Layer.Layer<ClusterService, ClusterError>;
|
|
281
|
+
export {};
|
|
282
|
+
//# sourceMappingURL=Cluster.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cluster.d.ts","sourceRoot":"","sources":["../../src/devnet/Cluster.ts"],"names":[],"mappings":"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"}
|