@no-witness-labs/midday-sdk 0.1.1 → 0.2.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Config.js","sourceRoot":"","sources":["../../src/devnet/Config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAyB;IACvD,KAAK,EAAE,oCAAoC;IAC3C,IAAI,EAAE,IAAI;IACV,SAAS,EAAE,KAAK;CACR,CAAC;AAEX;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAA4B;IAC7D,KAAK,EAAE,iDAAiD;IACxD,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,MAAM;CACR,CAAC;AAEX;;;;;GAKG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAgC;IACtE,KAAK,EAAE,wCAAwC;IAC/C,IAAI,EAAE,IAAI;IACV,YAAY,EAAE,EAAE;CACR,CAAC;AAEX;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA2B;IAC3D,WAAW,EAAE,eAAe;IAC5B,IAAI,EAAE,mBAAmB;IACzB,OAAO,EAAE,sBAAsB;IAC/B,WAAW,EAAE,2BAA2B;CAChC,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAC7B,oEAAoE,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,KAI/B;IACC,OAAO;QACL,SAAS,EAAE,YAAY;QACvB,OAAO,EAAE,oBAAoB,KAAK,CAAC,OAAO,iBAAiB;QAC3D,SAAS,EAAE,kBAAkB,KAAK,CAAC,OAAO,oBAAoB;QAC9D,IAAI,EAAE,kBAAkB,KAAK,CAAC,IAAI,EAAE;QACpC,WAAW,EAAE,oBAAoB,KAAK,CAAC,WAAW,EAAE;KACrD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,180 @@
1
+ /**
2
+ * Docker container management for DevNet.
3
+ *
4
+ * ## API Design
5
+ *
6
+ * This module uses a **module-function pattern**:
7
+ *
8
+ * - **Stateless**: Functions operate on Container data
9
+ * - **Module functions**: `Container.start(container)`, `Container.stop(container)`
10
+ * - **Data-oriented**: Container is plain data, not an instance with methods
11
+ *
12
+ * This is appropriate because:
13
+ * - Container operations are stateless transformations
14
+ * - No need to encapsulate state in the Container itself
15
+ * - Simpler API for lower-level operations
16
+ *
17
+ * ### Usage Patterns
18
+ *
19
+ * ```typescript
20
+ * // Promise user
21
+ * await Container.start(container);
22
+ * await Container.stop(container);
23
+ *
24
+ * // Effect user
25
+ * yield* Container.effect.start(container);
26
+ * ```
27
+ *
28
+ * @since 0.2.0
29
+ * @module
30
+ */
31
+ import Docker from 'dockerode';
32
+ import { Context, Effect, Layer } from 'effect';
33
+ import type { ResolvedDevNetConfig } from './Config.js';
34
+ import { ContainerError } from './errors.js';
35
+ /**
36
+ * Represents a Docker container.
37
+ *
38
+ * @since 0.2.0
39
+ * @category model
40
+ */
41
+ export interface Container {
42
+ readonly id: string;
43
+ readonly name: string;
44
+ }
45
+ /**
46
+ * Service interface for Container operations.
47
+ *
48
+ * Use with Effect's dependency injection system.
49
+ *
50
+ * @since 0.2.0
51
+ * @category service
52
+ */
53
+ export interface ContainerServiceImpl {
54
+ readonly start: (container: Container) => Effect.Effect<void, ContainerError>;
55
+ readonly stop: (container: Container) => Effect.Effect<void, ContainerError>;
56
+ readonly remove: (container: Container) => Effect.Effect<void, ContainerError>;
57
+ readonly getStatus: (container: Container) => Effect.Effect<Docker.ContainerInspectInfo | undefined, ContainerError>;
58
+ readonly isRunning: (container: Container) => Effect.Effect<boolean, never>;
59
+ }
60
+ declare const ContainerService_base: Context.TagClass<ContainerService, "ContainerService", ContainerServiceImpl>;
61
+ /**
62
+ * Context.Tag for ContainerService dependency injection.
63
+ *
64
+ * @since 0.2.0
65
+ * @category service
66
+ */
67
+ export declare class ContainerService extends ContainerService_base {
68
+ }
69
+ declare function startEffect(container: Container): Effect.Effect<void, ContainerError>;
70
+ /**
71
+ * Start a container.
72
+ *
73
+ * @since 0.2.0
74
+ * @category lifecycle
75
+ */
76
+ export declare function start(container: Container): Promise<void>;
77
+ declare function stopEffect(container: Container): Effect.Effect<void, ContainerError>;
78
+ /**
79
+ * Stop a container.
80
+ *
81
+ * @since 0.2.0
82
+ * @category lifecycle
83
+ */
84
+ export declare function stop(container: Container): Promise<void>;
85
+ declare function removeEffect(container: Container): Effect.Effect<void, ContainerError>;
86
+ /**
87
+ * Remove a container (stops it first if running).
88
+ *
89
+ * @since 0.2.0
90
+ * @category lifecycle
91
+ */
92
+ export declare function remove(container: Container): Promise<void>;
93
+ declare function getStatusEffect(container: Container): Effect.Effect<Docker.ContainerInspectInfo | undefined, ContainerError>;
94
+ /**
95
+ * Get container status information.
96
+ *
97
+ * @since 0.2.0
98
+ * @category inspection
99
+ */
100
+ export declare function getStatus(container: Container): Promise<Docker.ContainerInspectInfo | undefined>;
101
+ /**
102
+ * Check if a container is running.
103
+ *
104
+ * @since 0.2.0
105
+ * @category inspection
106
+ */
107
+ export declare function isRunning(container: Container): Promise<boolean>;
108
+ declare function findByNameEffect(containerName: string): Effect.Effect<Docker.Container | undefined, ContainerError>;
109
+ /**
110
+ * Find a container by name.
111
+ *
112
+ * @since 0.2.0
113
+ * @category utilities
114
+ * @internal
115
+ */
116
+ export declare function findByName(containerName: string): Promise<Docker.Container | undefined>;
117
+ declare function removeByNameEffect(containerName: string): Effect.Effect<void, ContainerError>;
118
+ /**
119
+ * Remove a container by name if it exists.
120
+ *
121
+ * @since 0.2.0
122
+ * @category utilities
123
+ * @internal
124
+ */
125
+ export declare function removeByName(containerName: string): Promise<void>;
126
+ declare function createNodeEffect(config: ResolvedDevNetConfig): Effect.Effect<Docker.Container, ContainerError>;
127
+ /**
128
+ * Create a Midnight node container.
129
+ *
130
+ * @since 0.2.0
131
+ * @category constructors
132
+ * @internal
133
+ */
134
+ export declare function createNode(config: ResolvedDevNetConfig): Promise<Docker.Container>;
135
+ declare function createIndexerEffect(config: ResolvedDevNetConfig): Effect.Effect<Docker.Container, ContainerError>;
136
+ /**
137
+ * Create an indexer container.
138
+ *
139
+ * @since 0.2.0
140
+ * @category constructors
141
+ * @internal
142
+ */
143
+ export declare function createIndexer(config: ResolvedDevNetConfig): Promise<Docker.Container>;
144
+ declare function createProofServerEffect(config: ResolvedDevNetConfig): Effect.Effect<Docker.Container, ContainerError>;
145
+ /**
146
+ * Create a proof server container.
147
+ *
148
+ * @since 0.2.0
149
+ * @category constructors
150
+ * @internal
151
+ */
152
+ export declare function createProofServer(config: ResolvedDevNetConfig): Promise<Docker.Container>;
153
+ /**
154
+ * Raw Effect APIs for advanced users.
155
+ *
156
+ * @since 0.2.0
157
+ * @category effect
158
+ */
159
+ export declare const effect: {
160
+ start: typeof startEffect;
161
+ stop: typeof stopEffect;
162
+ remove: typeof removeEffect;
163
+ getStatus: typeof getStatusEffect;
164
+ findByName: typeof findByNameEffect;
165
+ removeByName: typeof removeByNameEffect;
166
+ createNode: typeof createNodeEffect;
167
+ createIndexer: typeof createIndexerEffect;
168
+ createProofServer: typeof createProofServerEffect;
169
+ };
170
+ /**
171
+ * Live Layer for ContainerService.
172
+ *
173
+ * Provides the default implementation of ContainerService for Effect DI.
174
+ *
175
+ * @since 0.2.0
176
+ * @category layer
177
+ */
178
+ export declare const Live: Layer.Layer<ContainerService>;
179
+ export {};
180
+ //# sourceMappingURL=Container.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../src/devnet/Container.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,390 @@
1
+ /**
2
+ * Docker container management for DevNet.
3
+ *
4
+ * ## API Design
5
+ *
6
+ * This module uses a **module-function pattern**:
7
+ *
8
+ * - **Stateless**: Functions operate on Container data
9
+ * - **Module functions**: `Container.start(container)`, `Container.stop(container)`
10
+ * - **Data-oriented**: Container is plain data, not an instance with methods
11
+ *
12
+ * This is appropriate because:
13
+ * - Container operations are stateless transformations
14
+ * - No need to encapsulate state in the Container itself
15
+ * - Simpler API for lower-level operations
16
+ *
17
+ * ### Usage Patterns
18
+ *
19
+ * ```typescript
20
+ * // Promise user
21
+ * await Container.start(container);
22
+ * await Container.stop(container);
23
+ *
24
+ * // Effect user
25
+ * yield* Container.effect.start(container);
26
+ * ```
27
+ *
28
+ * @since 0.2.0
29
+ * @module
30
+ */
31
+ import Docker from 'dockerode';
32
+ import { Context, Effect, Layer } from 'effect';
33
+ import * as Config from './Config.js';
34
+ import * as Images from './Images.js';
35
+ import { ContainerError } from './errors.js';
36
+ /**
37
+ * Context.Tag for ContainerService dependency injection.
38
+ *
39
+ * @since 0.2.0
40
+ * @category service
41
+ */
42
+ export class ContainerService extends Context.Tag('ContainerService')() {
43
+ }
44
+ // Internal Effect implementation
45
+ function startEffect(container) {
46
+ return Effect.gen(function* () {
47
+ yield* Effect.tryPromise({
48
+ try: async () => {
49
+ const docker = new Docker();
50
+ await docker.getContainer(container.id).start();
51
+ },
52
+ catch: (cause) => new ContainerError({
53
+ operation: 'start',
54
+ container: container.name,
55
+ cause,
56
+ }),
57
+ });
58
+ });
59
+ }
60
+ /**
61
+ * Start a container.
62
+ *
63
+ * @since 0.2.0
64
+ * @category lifecycle
65
+ */
66
+ export async function start(container) {
67
+ return Effect.runPromise(startEffect(container));
68
+ }
69
+ // Internal Effect implementation
70
+ function stopEffect(container) {
71
+ return Effect.gen(function* () {
72
+ yield* Effect.tryPromise({
73
+ try: async () => {
74
+ const docker = new Docker();
75
+ const dockerContainer = docker.getContainer(container.id);
76
+ const info = await dockerContainer.inspect();
77
+ if (info.State.Running) {
78
+ await dockerContainer.stop();
79
+ }
80
+ },
81
+ catch: (cause) => new ContainerError({
82
+ operation: 'stop',
83
+ container: container.name,
84
+ cause,
85
+ }),
86
+ });
87
+ });
88
+ }
89
+ /**
90
+ * Stop a container.
91
+ *
92
+ * @since 0.2.0
93
+ * @category lifecycle
94
+ */
95
+ export async function stop(container) {
96
+ return Effect.runPromise(stopEffect(container));
97
+ }
98
+ // Internal Effect implementation
99
+ function removeEffect(container) {
100
+ return Effect.gen(function* () {
101
+ yield* stopEffect(container);
102
+ yield* Effect.tryPromise({
103
+ try: async () => {
104
+ const docker = new Docker();
105
+ await docker.getContainer(container.id).remove();
106
+ },
107
+ catch: (cause) => new ContainerError({
108
+ operation: 'remove',
109
+ container: container.name,
110
+ cause,
111
+ }),
112
+ });
113
+ });
114
+ }
115
+ /**
116
+ * Remove a container (stops it first if running).
117
+ *
118
+ * @since 0.2.0
119
+ * @category lifecycle
120
+ */
121
+ export async function remove(container) {
122
+ return Effect.runPromise(removeEffect(container));
123
+ }
124
+ // Internal Effect implementation
125
+ function getStatusEffect(container) {
126
+ return Effect.gen(function* () {
127
+ return yield* Effect.tryPromise({
128
+ try: async () => {
129
+ const docker = new Docker();
130
+ return await docker.getContainer(container.id).inspect();
131
+ },
132
+ catch: (cause) => new ContainerError({
133
+ operation: 'inspect',
134
+ container: container.name,
135
+ cause,
136
+ }),
137
+ });
138
+ });
139
+ }
140
+ /**
141
+ * Get container status information.
142
+ *
143
+ * @since 0.2.0
144
+ * @category inspection
145
+ */
146
+ export async function getStatus(container) {
147
+ return Effect.runPromise(getStatusEffect(container));
148
+ }
149
+ /**
150
+ * Check if a container is running.
151
+ *
152
+ * @since 0.2.0
153
+ * @category inspection
154
+ */
155
+ export async function isRunning(container) {
156
+ try {
157
+ const status = await getStatus(container);
158
+ return status?.State.Running ?? false;
159
+ }
160
+ catch {
161
+ return false;
162
+ }
163
+ }
164
+ // Internal Effect implementation
165
+ function findByNameEffect(containerName) {
166
+ return Effect.gen(function* () {
167
+ return yield* Effect.tryPromise({
168
+ try: async () => {
169
+ const docker = new Docker();
170
+ const containers = await docker.listContainers({ all: true });
171
+ const found = containers.find((c) => c.Names.includes(`/${containerName}`));
172
+ return found ? docker.getContainer(found.Id) : undefined;
173
+ },
174
+ catch: (cause) => new ContainerError({
175
+ operation: 'lookup',
176
+ container: containerName,
177
+ cause,
178
+ }),
179
+ });
180
+ });
181
+ }
182
+ /**
183
+ * Find a container by name.
184
+ *
185
+ * @since 0.2.0
186
+ * @category utilities
187
+ * @internal
188
+ */
189
+ export async function findByName(containerName) {
190
+ return Effect.runPromise(findByNameEffect(containerName));
191
+ }
192
+ // Internal Effect implementation
193
+ function removeByNameEffect(containerName) {
194
+ return Effect.gen(function* () {
195
+ const existing = yield* findByNameEffect(containerName);
196
+ if (existing) {
197
+ yield* Effect.tryPromise({
198
+ try: async () => {
199
+ const info = await existing.inspect();
200
+ if (info.State.Running) {
201
+ await existing.stop();
202
+ }
203
+ await existing.remove();
204
+ },
205
+ catch: (cause) => new ContainerError({
206
+ operation: 'remove',
207
+ container: containerName,
208
+ cause,
209
+ }),
210
+ });
211
+ }
212
+ });
213
+ }
214
+ /**
215
+ * Remove a container by name if it exists.
216
+ *
217
+ * @since 0.2.0
218
+ * @category utilities
219
+ * @internal
220
+ */
221
+ export async function removeByName(containerName) {
222
+ return Effect.runPromise(removeByNameEffect(containerName));
223
+ }
224
+ // Internal Effect implementation
225
+ function createNodeEffect(config) {
226
+ return Effect.gen(function* () {
227
+ return yield* Effect.tryPromise({
228
+ try: async () => {
229
+ const docker = new Docker();
230
+ const containerName = `${config.clusterName}-node`;
231
+ await Images.ensureAvailable(config.node.image);
232
+ return docker.createContainer({
233
+ Image: config.node.image,
234
+ name: containerName,
235
+ ExposedPorts: {
236
+ [`${config.node.port}/tcp`]: {},
237
+ },
238
+ HostConfig: {
239
+ PortBindings: {
240
+ // Node exposes 9944 internally, we map to configured port
241
+ ['9944/tcp']: [{ HostPort: String(config.node.port) }],
242
+ },
243
+ },
244
+ Env: [`CFG_PRESET=${config.node.cfgPreset}`],
245
+ });
246
+ },
247
+ catch: (cause) => new ContainerError({
248
+ operation: 'create',
249
+ container: `${config.clusterName}-node`,
250
+ cause,
251
+ }),
252
+ });
253
+ });
254
+ }
255
+ /**
256
+ * Create a Midnight node container.
257
+ *
258
+ * @since 0.2.0
259
+ * @category constructors
260
+ * @internal
261
+ */
262
+ export async function createNode(config) {
263
+ return Effect.runPromise(createNodeEffect(config));
264
+ }
265
+ // Internal Effect implementation
266
+ function createIndexerEffect(config) {
267
+ return Effect.gen(function* () {
268
+ return yield* Effect.tryPromise({
269
+ try: async () => {
270
+ const docker = new Docker();
271
+ const containerName = `${config.clusterName}-indexer`;
272
+ const nodeUrl = `ws://${config.clusterName}-node:9944`;
273
+ await Images.ensureAvailable(config.indexer.image);
274
+ return docker.createContainer({
275
+ Image: config.indexer.image,
276
+ name: containerName,
277
+ ExposedPorts: {
278
+ [`${config.indexer.port}/tcp`]: {},
279
+ },
280
+ HostConfig: {
281
+ PortBindings: {
282
+ // Indexer exposes 8088 internally
283
+ ['8088/tcp']: [{ HostPort: String(config.indexer.port) }],
284
+ },
285
+ Links: [`${config.clusterName}-node:${config.clusterName}-node`],
286
+ },
287
+ Env: [
288
+ `RUST_LOG=indexer=${config.indexer.logLevel},chain_indexer=${config.indexer.logLevel},indexer_api=${config.indexer.logLevel},wallet_indexer=${config.indexer.logLevel},indexer_common=${config.indexer.logLevel},fastrace_opentelemetry=${config.indexer.logLevel},${config.indexer.logLevel}`,
289
+ `APP__INFRA__SECRET=${Config.DEV_INDEXER_SECRET}`,
290
+ `APP__INFRA__NODE__URL=${nodeUrl}`,
291
+ ],
292
+ });
293
+ },
294
+ catch: (cause) => new ContainerError({
295
+ operation: 'create',
296
+ container: `${config.clusterName}-indexer`,
297
+ cause,
298
+ }),
299
+ });
300
+ });
301
+ }
302
+ /**
303
+ * Create an indexer container.
304
+ *
305
+ * @since 0.2.0
306
+ * @category constructors
307
+ * @internal
308
+ */
309
+ export async function createIndexer(config) {
310
+ return Effect.runPromise(createIndexerEffect(config));
311
+ }
312
+ // Internal Effect implementation
313
+ function createProofServerEffect(config) {
314
+ return Effect.gen(function* () {
315
+ return yield* Effect.tryPromise({
316
+ try: async () => {
317
+ const docker = new Docker();
318
+ const containerName = `${config.clusterName}-proof-server`;
319
+ await Images.ensureAvailable(config.proofServer.image);
320
+ const binds = [];
321
+ if (config.proofServer.zkParamsPath) {
322
+ binds.push(`${config.proofServer.zkParamsPath}:/root/.cache/midnight/zk-params`);
323
+ }
324
+ return docker.createContainer({
325
+ Image: config.proofServer.image,
326
+ name: containerName,
327
+ ExposedPorts: {
328
+ [`${config.proofServer.port}/tcp`]: {},
329
+ },
330
+ HostConfig: {
331
+ PortBindings: {
332
+ // Proof server exposes 6300 internally
333
+ ['6300/tcp']: [{ HostPort: String(config.proofServer.port) }],
334
+ },
335
+ Binds: binds.length > 0 ? binds : undefined,
336
+ },
337
+ Env: ['HOME=/root'],
338
+ });
339
+ },
340
+ catch: (cause) => new ContainerError({
341
+ operation: 'create',
342
+ container: `${config.clusterName}-proof-server`,
343
+ cause,
344
+ }),
345
+ });
346
+ });
347
+ }
348
+ /**
349
+ * Create a proof server container.
350
+ *
351
+ * @since 0.2.0
352
+ * @category constructors
353
+ * @internal
354
+ */
355
+ export async function createProofServer(config) {
356
+ return Effect.runPromise(createProofServerEffect(config));
357
+ }
358
+ /**
359
+ * Raw Effect APIs for advanced users.
360
+ *
361
+ * @since 0.2.0
362
+ * @category effect
363
+ */
364
+ export const effect = {
365
+ start: startEffect,
366
+ stop: stopEffect,
367
+ remove: removeEffect,
368
+ getStatus: getStatusEffect,
369
+ findByName: findByNameEffect,
370
+ removeByName: removeByNameEffect,
371
+ createNode: createNodeEffect,
372
+ createIndexer: createIndexerEffect,
373
+ createProofServer: createProofServerEffect,
374
+ };
375
+ /**
376
+ * Live Layer for ContainerService.
377
+ *
378
+ * Provides the default implementation of ContainerService for Effect DI.
379
+ *
380
+ * @since 0.2.0
381
+ * @category layer
382
+ */
383
+ export const Live = Layer.succeed(ContainerService, {
384
+ start: startEffect,
385
+ stop: stopEffect,
386
+ remove: removeEffect,
387
+ getStatus: getStatusEffect,
388
+ isRunning: (container) => getStatusEffect(container).pipe(Effect.map((status) => status?.State.Running ?? false), Effect.catchAll(() => Effect.succeed(false))),
389
+ });
390
+ //# sourceMappingURL=Container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Container.js","sourceRoot":"","sources":["../../src/devnet/Container.ts"],"names":[],"mappings":"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"}