@push.rocks/containerarchive 0.0.2

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,8 @@
1
+ /**
2
+ * autocreated commitinfo by @push.rocks/commitinfo
3
+ */
4
+ export declare const commitinfo: {
5
+ name: string;
6
+ version: string;
7
+ description: string;
8
+ };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * autocreated commitinfo by @push.rocks/commitinfo
3
+ */
4
+ export const commitinfo = {
5
+ name: '@push.rocks/containerarchive',
6
+ version: '0.0.2',
7
+ description: 'content-addressed incremental backup engine with deduplication, encryption, and error correction'
8
+ };
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSw4QkFBOEI7SUFDcEMsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLGtHQUFrRztDQUNoSCxDQUFBIn0=
@@ -0,0 +1,87 @@
1
+ import * as plugins from './plugins.js';
2
+ import type { IInitOptions, IOpenOptions, IIngestOptions, IIngestItem, IRestoreOptions, ISnapshot, ISnapshotFilter, IVerifyOptions, IVerifyResult, IRetentionPolicy, IPruneResult, IRepairResult, IUnlockOptions, IIngestProgress, IIngestComplete, IVerifyError } from './interfaces.js';
3
+ /**
4
+ * Content-addressed incremental backup engine.
5
+ *
6
+ * Provides deduplicated, optionally encrypted, gzip-compressed storage
7
+ * for arbitrary data streams with full snapshot history.
8
+ */
9
+ export declare class ContainerArchive {
10
+ private bridge;
11
+ private repoPath;
12
+ private spawned;
13
+ ingestProgress: plugins.smartrx.rxjs.Subject<IIngestProgress>;
14
+ ingestComplete: plugins.smartrx.rxjs.Subject<IIngestComplete>;
15
+ verifyError: plugins.smartrx.rxjs.Subject<IVerifyError>;
16
+ private constructor();
17
+ private ensureSpawned;
18
+ /**
19
+ * Initialize a new repository at the given path.
20
+ */
21
+ static init(repoPath: string, options?: IInitOptions): Promise<ContainerArchive>;
22
+ /**
23
+ * Open an existing repository at the given path.
24
+ */
25
+ static open(repoPath: string, options?: IOpenOptions): Promise<ContainerArchive>;
26
+ /**
27
+ * Ingest a single data stream into the repository.
28
+ */
29
+ ingest(inputStream: NodeJS.ReadableStream, options?: IIngestOptions): Promise<ISnapshot>;
30
+ /**
31
+ * Ingest multiple data streams as a single multi-item snapshot.
32
+ * Each item gets its own Unix socket for parallel data transfer.
33
+ */
34
+ ingestMulti(items: IIngestItem[], options?: IIngestOptions): Promise<ISnapshot>;
35
+ /**
36
+ * List snapshots with optional filtering.
37
+ */
38
+ listSnapshots(filter?: ISnapshotFilter): Promise<ISnapshot[]>;
39
+ /**
40
+ * Get details of a specific snapshot.
41
+ */
42
+ getSnapshot(snapshotId: string): Promise<ISnapshot>;
43
+ /**
44
+ * Restore a snapshot to a ReadableStream.
45
+ */
46
+ restore(snapshotId: string, options?: IRestoreOptions): Promise<NodeJS.ReadableStream>;
47
+ /**
48
+ * Verify repository integrity.
49
+ */
50
+ verify(options?: IVerifyOptions): Promise<IVerifyResult>;
51
+ /**
52
+ * Repair repository (rebuild index, remove stale locks).
53
+ */
54
+ repair(): Promise<IRepairResult>;
55
+ /**
56
+ * Prune old snapshots and garbage-collect unreferenced packs.
57
+ */
58
+ prune(retention: IRetentionPolicy, dryRun?: boolean): Promise<IPruneResult>;
59
+ /**
60
+ * Rebuild the global index from pack .idx files.
61
+ */
62
+ reindex(): Promise<void>;
63
+ /**
64
+ * Remove locks from the repository.
65
+ */
66
+ unlock(options?: IUnlockOptions): Promise<void>;
67
+ /**
68
+ * Subscribe to events.
69
+ */
70
+ on(event: 'ingest:progress', handler: (data: IIngestProgress) => void): plugins.smartrx.rxjs.Subscription;
71
+ on(event: 'ingest:complete', handler: (data: IIngestComplete) => void): plugins.smartrx.rxjs.Subscription;
72
+ on(event: 'verify:error', handler: (data: IVerifyError) => void): plugins.smartrx.rxjs.Subscription;
73
+ /**
74
+ * Close the repository and terminate the Rust process.
75
+ */
76
+ close(): Promise<void>;
77
+ /**
78
+ * Create a Unix socket server that accepts a connection from Rust
79
+ * and pipes the inputStream to it (for ingest).
80
+ */
81
+ private createSocketServer;
82
+ /**
83
+ * Create a Unix socket server that accepts a connection from Rust
84
+ * and provides a ReadableStream of the received data (for restore).
85
+ */
86
+ private createRestoreSocketServer;
87
+ }
@@ -0,0 +1,305 @@
1
+ import * as plugins from './plugins.js';
2
+ import { commitinfo } from './00_commitinfo_data.js';
3
+ /**
4
+ * Content-addressed incremental backup engine.
5
+ *
6
+ * Provides deduplicated, optionally encrypted, gzip-compressed storage
7
+ * for arbitrary data streams with full snapshot history.
8
+ */
9
+ export class ContainerArchive {
10
+ constructor(repoPath) {
11
+ this.spawned = false;
12
+ // Event subjects
13
+ this.ingestProgress = new plugins.smartrx.rxjs.Subject();
14
+ this.ingestComplete = new plugins.smartrx.rxjs.Subject();
15
+ this.verifyError = new plugins.smartrx.rxjs.Subject();
16
+ this.repoPath = plugins.path.resolve(repoPath);
17
+ const packageDir = plugins.path.resolve(plugins.path.dirname(new URL(import.meta.url).pathname), '..');
18
+ this.bridge = new plugins.smartrust.RustBridge({
19
+ binaryName: 'containerarchive',
20
+ localPaths: [
21
+ plugins.path.join(packageDir, 'dist_rust', 'containerarchive'),
22
+ ],
23
+ readyTimeoutMs: 30000,
24
+ requestTimeoutMs: 300000,
25
+ });
26
+ // Listen for events from the Rust binary
27
+ this.bridge.on('event', (event) => {
28
+ if (event.event === 'progress') {
29
+ this.ingestProgress.next(event.data);
30
+ }
31
+ });
32
+ }
33
+ async ensureSpawned() {
34
+ if (!this.spawned) {
35
+ await this.bridge.spawn();
36
+ this.spawned = true;
37
+ }
38
+ }
39
+ /**
40
+ * Initialize a new repository at the given path.
41
+ */
42
+ static async init(repoPath, options) {
43
+ const instance = new ContainerArchive(repoPath);
44
+ await instance.ensureSpawned();
45
+ await instance.bridge.sendCommand('init', {
46
+ path: instance.repoPath,
47
+ passphrase: options?.passphrase,
48
+ });
49
+ return instance;
50
+ }
51
+ /**
52
+ * Open an existing repository at the given path.
53
+ */
54
+ static async open(repoPath, options) {
55
+ const instance = new ContainerArchive(repoPath);
56
+ await instance.ensureSpawned();
57
+ await instance.bridge.sendCommand('open', {
58
+ path: instance.repoPath,
59
+ passphrase: options?.passphrase,
60
+ });
61
+ return instance;
62
+ }
63
+ /**
64
+ * Ingest a single data stream into the repository.
65
+ */
66
+ async ingest(inputStream, options) {
67
+ const socketPath = plugins.path.join(plugins.os.tmpdir(), `containerarchive-ingest-${Date.now()}-${Math.random().toString(36).slice(2)}.sock`);
68
+ // Create Unix socket server that Rust will connect to
69
+ const { promise: dataTransferred, server } = await this.createSocketServer(socketPath, inputStream);
70
+ try {
71
+ // Send ingest command to Rust (Rust connects to our socket)
72
+ const result = await this.bridge.sendCommand('ingest', {
73
+ socketPath,
74
+ tags: options?.tags,
75
+ items: options?.items || [{ name: 'data', type: 'data' }],
76
+ });
77
+ // Wait for data transfer to complete
78
+ await dataTransferred;
79
+ const snapshot = result.snapshot;
80
+ this.ingestComplete.next({
81
+ snapshotId: snapshot.id,
82
+ originalSize: snapshot.originalSize,
83
+ storedSize: snapshot.storedSize,
84
+ newChunks: snapshot.newChunks,
85
+ reusedChunks: snapshot.reusedChunks,
86
+ });
87
+ return snapshot;
88
+ }
89
+ finally {
90
+ server.close();
91
+ // Clean up socket file
92
+ try {
93
+ plugins.fs.unlinkSync(socketPath);
94
+ }
95
+ catch { }
96
+ }
97
+ }
98
+ /**
99
+ * Ingest multiple data streams as a single multi-item snapshot.
100
+ * Each item gets its own Unix socket for parallel data transfer.
101
+ */
102
+ async ingestMulti(items, options) {
103
+ if (items.length === 0) {
104
+ throw new Error('At least one item is required');
105
+ }
106
+ // Create one socket per item
107
+ const sockets = [];
108
+ const itemOptions = [];
109
+ try {
110
+ for (const item of items) {
111
+ const socketPath = plugins.path.join(plugins.os.tmpdir(), `containerarchive-ingest-${Date.now()}-${Math.random().toString(36).slice(2)}.sock`);
112
+ const { promise, server } = await this.createSocketServer(socketPath, item.stream);
113
+ sockets.push({ socketPath, promise, server });
114
+ itemOptions.push({
115
+ name: item.name,
116
+ type: item.type || 'data',
117
+ socketPath,
118
+ });
119
+ }
120
+ // Send ingestMulti command to Rust with per-item socket paths
121
+ const result = await this.bridge.sendCommand('ingestMulti', {
122
+ tags: options?.tags,
123
+ items: itemOptions,
124
+ });
125
+ // Wait for all data transfers
126
+ await Promise.all(sockets.map((s) => s.promise));
127
+ const snapshot = result.snapshot;
128
+ this.ingestComplete.next({
129
+ snapshotId: snapshot.id,
130
+ originalSize: snapshot.originalSize,
131
+ storedSize: snapshot.storedSize,
132
+ newChunks: snapshot.newChunks,
133
+ reusedChunks: snapshot.reusedChunks,
134
+ });
135
+ return snapshot;
136
+ }
137
+ finally {
138
+ for (const s of sockets) {
139
+ s.server.close();
140
+ try {
141
+ plugins.fs.unlinkSync(s.socketPath);
142
+ }
143
+ catch { }
144
+ }
145
+ }
146
+ }
147
+ /**
148
+ * List snapshots with optional filtering.
149
+ */
150
+ async listSnapshots(filter) {
151
+ const result = await this.bridge.sendCommand('listSnapshots', {
152
+ filter,
153
+ });
154
+ return result.snapshots;
155
+ }
156
+ /**
157
+ * Get details of a specific snapshot.
158
+ */
159
+ async getSnapshot(snapshotId) {
160
+ const result = await this.bridge.sendCommand('getSnapshot', {
161
+ snapshotId,
162
+ });
163
+ return result.snapshot;
164
+ }
165
+ /**
166
+ * Restore a snapshot to a ReadableStream.
167
+ */
168
+ async restore(snapshotId, options) {
169
+ const socketPath = plugins.path.join(plugins.os.tmpdir(), `containerarchive-restore-${Date.now()}-${Math.random().toString(36).slice(2)}.sock`);
170
+ // Create Unix socket server that Rust will connect to and write data
171
+ const { readable, server } = await this.createRestoreSocketServer(socketPath);
172
+ // Send restore command to Rust (Rust connects and writes data)
173
+ // Don't await — let it run in parallel with reading
174
+ this.bridge.sendCommand('restore', {
175
+ snapshotId,
176
+ socketPath,
177
+ item: options?.item,
178
+ }).catch((err) => {
179
+ readable.destroy(err);
180
+ }).finally(() => {
181
+ server.close();
182
+ try {
183
+ plugins.fs.unlinkSync(socketPath);
184
+ }
185
+ catch { }
186
+ });
187
+ return readable;
188
+ }
189
+ /**
190
+ * Verify repository integrity.
191
+ */
192
+ async verify(options) {
193
+ const result = await this.bridge.sendCommand('verify', {
194
+ level: options?.level || 'standard',
195
+ });
196
+ for (const error of result.errors) {
197
+ this.verifyError.next(error);
198
+ }
199
+ return result;
200
+ }
201
+ /**
202
+ * Repair repository (rebuild index, remove stale locks).
203
+ */
204
+ async repair() {
205
+ return this.bridge.sendCommand('repair', {});
206
+ }
207
+ /**
208
+ * Prune old snapshots and garbage-collect unreferenced packs.
209
+ */
210
+ async prune(retention, dryRun = false) {
211
+ return this.bridge.sendCommand('prune', {
212
+ retention,
213
+ dryRun,
214
+ });
215
+ }
216
+ /**
217
+ * Rebuild the global index from pack .idx files.
218
+ */
219
+ async reindex() {
220
+ await this.bridge.sendCommand('reindex', {});
221
+ }
222
+ /**
223
+ * Remove locks from the repository.
224
+ */
225
+ async unlock(options) {
226
+ await this.bridge.sendCommand('unlock', {
227
+ force: options?.force,
228
+ });
229
+ }
230
+ on(event, handler) {
231
+ switch (event) {
232
+ case 'ingest:progress':
233
+ return this.ingestProgress.subscribe(handler);
234
+ case 'ingest:complete':
235
+ return this.ingestComplete.subscribe(handler);
236
+ case 'verify:error':
237
+ return this.verifyError.subscribe(handler);
238
+ default:
239
+ throw new Error(`Unknown event: ${event}`);
240
+ }
241
+ }
242
+ /**
243
+ * Close the repository and terminate the Rust process.
244
+ */
245
+ async close() {
246
+ try {
247
+ await this.bridge.sendCommand('close', {});
248
+ }
249
+ catch {
250
+ // Ignore errors during close
251
+ }
252
+ this.bridge.kill();
253
+ this.spawned = false;
254
+ this.ingestProgress.complete();
255
+ this.ingestComplete.complete();
256
+ this.verifyError.complete();
257
+ }
258
+ // ==================== Private Helpers ====================
259
+ /**
260
+ * Create a Unix socket server that accepts a connection from Rust
261
+ * and pipes the inputStream to it (for ingest).
262
+ */
263
+ createSocketServer(socketPath, inputStream) {
264
+ return new Promise((resolve, reject) => {
265
+ const server = plugins.net.createServer((socket) => {
266
+ // Pipe input data to the Rust process via socket
267
+ const readableStream = inputStream;
268
+ readableStream.pipe(socket);
269
+ });
270
+ server.on('error', reject);
271
+ server.listen(socketPath, () => {
272
+ const promise = new Promise((res) => {
273
+ server.on('close', () => res());
274
+ // Also resolve after a connection is handled
275
+ server.once('connection', (socket) => {
276
+ socket.on('end', () => {
277
+ res();
278
+ });
279
+ socket.on('error', () => {
280
+ res();
281
+ });
282
+ });
283
+ });
284
+ resolve({ promise, server });
285
+ });
286
+ });
287
+ }
288
+ /**
289
+ * Create a Unix socket server that accepts a connection from Rust
290
+ * and provides a ReadableStream of the received data (for restore).
291
+ */
292
+ createRestoreSocketServer(socketPath) {
293
+ return new Promise((resolve, reject) => {
294
+ const passthrough = new plugins.stream.PassThrough();
295
+ const server = plugins.net.createServer((socket) => {
296
+ socket.pipe(passthrough);
297
+ });
298
+ server.on('error', reject);
299
+ server.listen(socketPath, () => {
300
+ resolve({ readable: passthrough, server });
301
+ });
302
+ });
303
+ }
304
+ }
305
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jb250YWluZXJhcmNoaXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5jb250YWluZXJhcmNoaXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQXVCckQ7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBVTNCLFlBQW9CLFFBQWdCO1FBUDVCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFeEIsaUJBQWlCO1FBQ1YsbUJBQWMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBbUIsQ0FBQztRQUNyRSxtQkFBYyxHQUFHLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFtQixDQUFDO1FBQ3JFLGdCQUFXLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQWdCLENBQUM7UUFHcEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUvQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FDckMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFDdkQsSUFBSSxDQUNMLENBQUM7UUFFRixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQTRCO1lBQ3hFLFVBQVUsRUFBRSxrQkFBa0I7WUFDOUIsVUFBVSxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVB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
@@ -0,0 +1,2 @@
1
+ export * from './classes.containerarchive.js';
2
+ export * from './interfaces.js';
@@ -0,0 +1,3 @@
1
+ export * from './classes.containerarchive.js';
2
+ export * from './interfaces.js';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsaUJBQWlCLENBQUMifQ==
@@ -0,0 +1,184 @@
1
+ import type { ICommandDefinition } from '@push.rocks/smartrust';
2
+ export interface IRepositoryConfig {
3
+ version: number;
4
+ id: string;
5
+ createdAt: string;
6
+ chunking: IChunkingConfig;
7
+ compression: string;
8
+ encryption?: IEncryptionConfig;
9
+ packTargetSize: number;
10
+ }
11
+ export interface IChunkingConfig {
12
+ algorithm: string;
13
+ minSize: number;
14
+ avgSize: number;
15
+ maxSize: number;
16
+ }
17
+ export interface IEncryptionConfig {
18
+ algorithm: string;
19
+ kdf: string;
20
+ kdfParams: IKdfParams;
21
+ }
22
+ export interface IKdfParams {
23
+ memory: number;
24
+ iterations: number;
25
+ parallelism: number;
26
+ }
27
+ export interface ISnapshot {
28
+ id: string;
29
+ version: number;
30
+ createdAt: string;
31
+ tags: Record<string, string>;
32
+ originalSize: number;
33
+ storedSize: number;
34
+ chunkCount: number;
35
+ newChunks: number;
36
+ reusedChunks: number;
37
+ items: ISnapshotItem[];
38
+ }
39
+ export interface ISnapshotItem {
40
+ name: string;
41
+ type: string;
42
+ size: number;
43
+ chunks: string[];
44
+ }
45
+ export interface ISnapshotFilter {
46
+ tags?: Record<string, string>;
47
+ after?: string;
48
+ before?: string;
49
+ }
50
+ export interface IInitOptions {
51
+ passphrase?: string;
52
+ chunking?: Partial<IChunkingConfig>;
53
+ packTargetSize?: number;
54
+ }
55
+ export interface IOpenOptions {
56
+ passphrase?: string;
57
+ }
58
+ export interface IIngestOptions {
59
+ tags?: Record<string, string>;
60
+ items?: IIngestItemOptions[];
61
+ }
62
+ export interface IIngestItemOptions {
63
+ name: string;
64
+ type?: string;
65
+ }
66
+ export interface IIngestItem {
67
+ stream: NodeJS.ReadableStream;
68
+ name: string;
69
+ type?: string;
70
+ }
71
+ export interface IRestoreOptions {
72
+ item?: string;
73
+ }
74
+ export interface IVerifyOptions {
75
+ level?: 'quick' | 'standard' | 'full';
76
+ }
77
+ export interface IVerifyResult {
78
+ ok: boolean;
79
+ errors: IVerifyError[];
80
+ stats: {
81
+ packsChecked: number;
82
+ chunksChecked: number;
83
+ snapshotsChecked: number;
84
+ };
85
+ }
86
+ export interface IVerifyError {
87
+ pack?: string;
88
+ chunk?: string;
89
+ snapshot?: string;
90
+ error: string;
91
+ }
92
+ export interface IRetentionPolicy {
93
+ keepLast?: number;
94
+ keepDays?: number;
95
+ keepWeeks?: number;
96
+ keepMonths?: number;
97
+ }
98
+ export interface IPruneResult {
99
+ removedSnapshots: number;
100
+ removedPacks: number;
101
+ freedBytes: number;
102
+ dryRun: boolean;
103
+ }
104
+ export interface IRepairResult {
105
+ indexRebuilt: boolean;
106
+ indexedChunks: number;
107
+ staleLocksRemoved: number;
108
+ packsRepaired: number;
109
+ errors: string[];
110
+ }
111
+ export interface IUnlockOptions {
112
+ force?: boolean;
113
+ }
114
+ export interface IIngestProgress {
115
+ operation: string;
116
+ percentage: number;
117
+ message: string;
118
+ }
119
+ export interface IIngestComplete {
120
+ snapshotId: string;
121
+ originalSize: number;
122
+ storedSize: number;
123
+ newChunks: number;
124
+ reusedChunks: number;
125
+ }
126
+ export type TContainerArchiveCommands = {
127
+ init: ICommandDefinition<{
128
+ path: string;
129
+ passphrase?: string;
130
+ }, IRepositoryConfig>;
131
+ open: ICommandDefinition<{
132
+ path: string;
133
+ passphrase?: string;
134
+ }, IRepositoryConfig>;
135
+ close: ICommandDefinition<Record<string, never>, Record<string, never>>;
136
+ ingest: ICommandDefinition<{
137
+ socketPath: string;
138
+ tags?: Record<string, string>;
139
+ items?: IIngestItemOptions[];
140
+ }, {
141
+ snapshot: ISnapshot;
142
+ }>;
143
+ ingestMulti: ICommandDefinition<{
144
+ tags?: Record<string, string>;
145
+ items: Array<{
146
+ name: string;
147
+ type: string;
148
+ socketPath: string;
149
+ }>;
150
+ }, {
151
+ snapshot: ISnapshot;
152
+ }>;
153
+ restore: ICommandDefinition<{
154
+ snapshotId: string;
155
+ socketPath: string;
156
+ item?: string;
157
+ }, Record<string, never>>;
158
+ listSnapshots: ICommandDefinition<{
159
+ filter?: ISnapshotFilter;
160
+ }, {
161
+ snapshots: ISnapshot[];
162
+ }>;
163
+ getSnapshot: ICommandDefinition<{
164
+ snapshotId: string;
165
+ }, {
166
+ snapshot: ISnapshot;
167
+ }>;
168
+ verify: ICommandDefinition<{
169
+ level: string;
170
+ }, IVerifyResult>;
171
+ repair: ICommandDefinition<Record<string, never>, IRepairResult>;
172
+ prune: ICommandDefinition<{
173
+ retention: IRetentionPolicy;
174
+ dryRun?: boolean;
175
+ }, IPruneResult>;
176
+ reindex: ICommandDefinition<Record<string, never>, {
177
+ indexedChunks: number;
178
+ }>;
179
+ unlock: ICommandDefinition<{
180
+ force?: boolean;
181
+ }, {
182
+ removedLocks: number;
183
+ }>;
184
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -0,0 +1,12 @@
1
+ import * as path from 'node:path';
2
+ import * as fs from 'node:fs';
3
+ import * as net from 'node:net';
4
+ import * as os from 'node:os';
5
+ import * as stream from 'node:stream';
6
+ import * as crypto from 'node:crypto';
7
+ export { path, fs, net, os, stream, crypto };
8
+ import * as smartrust from '@push.rocks/smartrust';
9
+ import * as smartrx from '@push.rocks/smartrx';
10
+ import * as smartpromise from '@push.rocks/smartpromise';
11
+ import * as lik from '@push.rocks/lik';
12
+ export { smartrust, smartrx, smartpromise, lik };
@@ -0,0 +1,15 @@
1
+ // node native scope
2
+ import * as path from 'node:path';
3
+ import * as fs from 'node:fs';
4
+ import * as net from 'node:net';
5
+ import * as os from 'node:os';
6
+ import * as stream from 'node:stream';
7
+ import * as crypto from 'node:crypto';
8
+ export { path, fs, net, os, stream, crypto };
9
+ // @push.rocks scope
10
+ import * as smartrust from '@push.rocks/smartrust';
11
+ import * as smartrx from '@push.rocks/smartrx';
12
+ import * as smartpromise from '@push.rocks/smartpromise';
13
+ import * as lik from '@push.rocks/lik';
14
+ export { smartrust, smartrx, smartpromise, lik };
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sS0FBSyxHQUFHLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBRXRDLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBRTdDLG9CQUFvQjtBQUNwQixPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxLQUFLLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEtBQUssR0FBRyxNQUFNLGlCQUFpQixDQUFDO0FBRXZDLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyJ9