swarm-deploy 0.1.0 → 0.3.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.
Files changed (87) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/README.md +780 -50
  3. package/RELEASING.md +2 -2
  4. package/SECURITY.md +2 -3
  5. package/dist/cli.d.ts +2 -0
  6. package/dist/cli.js +182 -25
  7. package/dist/cli.js.map +1 -1
  8. package/dist/client.d.ts +32 -27
  9. package/dist/client.js +103 -54
  10. package/dist/client.js.map +1 -1
  11. package/dist/errors.d.ts +6 -0
  12. package/dist/errors.js +6 -0
  13. package/dist/errors.js.map +1 -1
  14. package/dist/files.d.ts +13 -28
  15. package/dist/files.js +13 -78
  16. package/dist/files.js.map +1 -1
  17. package/dist/hooks-module.d.ts +9 -0
  18. package/dist/hooks-module.js +118 -0
  19. package/dist/hooks-module.js.map +1 -0
  20. package/dist/hooks.d.ts +69 -0
  21. package/dist/hooks.js +88 -0
  22. package/dist/hooks.js.map +1 -0
  23. package/dist/index.d.ts +8 -4
  24. package/dist/index.js +3 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/release.d.ts +26 -0
  27. package/dist/release.js +419 -0
  28. package/dist/release.js.map +1 -0
  29. package/dist/server.d.ts +97 -0
  30. package/dist/server.js +527 -53
  31. package/dist/server.js.map +1 -1
  32. package/dist/storage/commit-journal.d.ts +39 -2
  33. package/dist/storage/commit-journal.js +140 -2
  34. package/dist/storage/commit-journal.js.map +1 -1
  35. package/dist/storage/commit-store.d.ts +69 -8
  36. package/dist/storage/commit-store.js +374 -22
  37. package/dist/storage/commit-store.js.map +1 -1
  38. package/dist/storage/layout.js +7 -1
  39. package/dist/storage/layout.js.map +1 -1
  40. package/dist/storage/link-store.d.ts +88 -0
  41. package/dist/storage/link-store.js +448 -0
  42. package/dist/storage/link-store.js.map +1 -0
  43. package/dist/storage/recovery.d.ts +2 -1
  44. package/dist/storage/recovery.js +8 -1
  45. package/dist/storage/recovery.js.map +1 -1
  46. package/dist/storage/retention.d.ts +41 -21
  47. package/dist/storage/retention.js +162 -8
  48. package/dist/storage/retention.js.map +1 -1
  49. package/dist/storage/tar-session-store.d.ts +36 -5
  50. package/dist/storage/tar-session-store.js +283 -55
  51. package/dist/storage/tar-session-store.js.map +1 -1
  52. package/dist/storage/tree-fs.d.ts +44 -0
  53. package/dist/storage/tree-fs.js +580 -0
  54. package/dist/storage/tree-fs.js.map +1 -0
  55. package/dist/storage/tree-staging.d.ts +9 -0
  56. package/dist/storage/tree-staging.js +64 -0
  57. package/dist/storage/tree-staging.js.map +1 -0
  58. package/dist/storage/types.d.ts +15 -0
  59. package/dist/symlinks.d.ts +44 -0
  60. package/dist/symlinks.js +153 -0
  61. package/dist/symlinks.js.map +1 -0
  62. package/dist/tar-protocol/controls.d.ts +52 -0
  63. package/dist/tar-protocol/controls.js +160 -2
  64. package/dist/tar-protocol/controls.js.map +1 -1
  65. package/dist/tar-protocol/direct-wire.d.ts +8 -3
  66. package/dist/tar-protocol/direct-wire.js +14 -3
  67. package/dist/tar-protocol/direct-wire.js.map +1 -1
  68. package/dist/tar-protocol/manifest.d.ts +13 -1
  69. package/dist/tar-protocol/manifest.js +26 -1
  70. package/dist/tar-protocol/manifest.js.map +1 -1
  71. package/dist/tar-protocol/tree-extract.d.ts +37 -0
  72. package/dist/tar-protocol/tree-extract.js +240 -0
  73. package/dist/tar-protocol/tree-extract.js.map +1 -0
  74. package/dist/tar-protocol/tree-manifest.d.ts +45 -0
  75. package/dist/tar-protocol/tree-manifest.js +277 -0
  76. package/dist/tar-protocol/tree-manifest.js.map +1 -0
  77. package/dist/tar-protocol/tree-path.d.ts +15 -0
  78. package/dist/tar-protocol/tree-path.js +68 -0
  79. package/dist/tar-protocol/tree-path.js.map +1 -0
  80. package/dist/tar-protocol/tree.d.ts +68 -0
  81. package/dist/tar-protocol/tree.js +269 -0
  82. package/dist/tar-protocol/tree.js.map +1 -0
  83. package/dist/tar-protocol/ustar.d.ts +14 -0
  84. package/dist/tar-protocol/ustar.js +81 -1
  85. package/dist/tar-protocol/ustar.js.map +1 -1
  86. package/dist/types.d.ts +3 -0
  87. package/package.json +3 -1
@@ -1,4 +1,5 @@
1
- import type { CommitRecord } from './commit-journal.js';
1
+ import { type VersionGranularity } from '../release.js';
2
+ import { type CommitRecord } from './commit-journal.js';
2
3
  import type { StorageAdapter, StorageLayout } from './types.js';
3
4
  declare const DEFAULT_RESUME_TTL: number;
4
5
  declare const DEFAULT_CLEANUP_INTERVAL: number;
@@ -44,6 +45,8 @@ type RetentionEvent = {
44
45
  expiredSessions: number;
45
46
  scrubbed: number;
46
47
  ageDeleted: number;
48
+ countDeleted: number;
49
+ versionDeleted: number;
47
50
  storageDeleted: number;
48
51
  } | {
49
52
  type: 'retention';
@@ -62,6 +65,8 @@ type RetentionEventPayload = {
62
65
  expiredSessions: number;
63
66
  scrubbed: number;
64
67
  ageDeleted: number;
68
+ countDeleted: number;
69
+ versionDeleted: number;
65
70
  storageDeleted: number;
66
71
  } | {
67
72
  trigger: string;
@@ -81,6 +86,9 @@ interface RetentionManagerOptions {
81
86
  sessionStore: SessionStore;
82
87
  commitStore: CommitStore;
83
88
  maxAge?: number;
89
+ maxCount?: number;
90
+ maxVersions?: number;
91
+ versionGranularity?: VersionGranularity;
84
92
  maxStorageBytes?: number;
85
93
  resumeTtl?: number;
86
94
  cleanupInterval?: number;
@@ -89,15 +97,39 @@ interface RetentionManagerOptions {
89
97
  isSessionActive: (session: Session) => boolean;
90
98
  hasActiveUploads?: () => boolean;
91
99
  isPinned?: (record: CommitRecord) => boolean;
100
+ /**
101
+ * Reconciles managed symlinks and returns the transfer IDs pinned by a rule.
102
+ * Called once per pass with the scrubbed record set, with the root lease
103
+ * already held; it must not acquire the root lease itself.
104
+ */
105
+ reconcileLinks?: (records: CommitRecord[]) => Promise<ReadonlySet<string>>;
106
+ /**
107
+ * When link reconciliation fails, returns transfer IDs that must stay pinned
108
+ * from desired links and durable ownership records.
109
+ */
110
+ linkPinsFallback?: (records: CommitRecord[]) => Promise<ReadonlySet<string>>;
111
+ /** Names in the storage root that are server-managed symlinks, not artifacts. */
112
+ managedLinkNames?: () => ReadonlySet<string>;
92
113
  logger?: Logger | null;
93
114
  scheduler?: Scheduler;
94
115
  onEvent?: ((event: RetentionEvent) => void) | null;
95
116
  }
117
+ interface RetentionResult {
118
+ expiredSessions: number;
119
+ scrubbed: number;
120
+ ageDeleted: number;
121
+ countDeleted: number;
122
+ versionDeleted: number;
123
+ storageDeleted: number;
124
+ }
96
125
  declare class RetentionManager {
97
126
  layout: StorageLayout;
98
127
  sessionStore: SessionStore;
99
128
  commitStore: CommitStore;
100
129
  maxAge: number | undefined;
130
+ maxCount: number | undefined;
131
+ maxVersions: number | undefined;
132
+ versionGranularity: VersionGranularity | undefined;
101
133
  maxStorageBytes: number | undefined;
102
134
  resumeTtl: number;
103
135
  cleanupInterval: number;
@@ -106,6 +138,9 @@ declare class RetentionManager {
106
138
  isSessionActive: (session: Session) => boolean;
107
139
  hasActiveUploads: () => boolean;
108
140
  isPinned: (record: CommitRecord) => boolean;
141
+ reconcileLinks: ((records: CommitRecord[]) => Promise<ReadonlySet<string>>) | undefined;
142
+ linkPinsFallback: ((records: CommitRecord[]) => Promise<ReadonlySet<string>>) | undefined;
143
+ managedLinkNames: (() => ReadonlySet<string>) | undefined;
109
144
  logger: Logger | null;
110
145
  timer: unknown | null;
111
146
  cleanupFailure: unknown | null;
@@ -115,7 +150,7 @@ declare class RetentionManager {
115
150
  tickPromise: Promise<void> | null;
116
151
  tickQueued: boolean;
117
152
  lifecycle: number;
118
- constructor({ layout, sessionStore, commitStore, maxAge, maxStorageBytes, resumeTtl, cleanupInterval, clock, storage, isSessionActive, hasActiveUploads, isPinned, logger, scheduler, onEvent }: RetentionManagerOptions);
153
+ constructor({ layout, sessionStore, commitStore, maxAge, maxCount, maxVersions, versionGranularity, maxStorageBytes, resumeTtl, cleanupInterval, clock, storage, isSessionActive, hasActiveUploads, isPinned, reconcileLinks, linkPinsFallback, managedLinkNames, logger, scheduler, onEvent }: RetentionManagerOptions);
119
154
  _emit(payload: RetentionEventPayload): void;
120
155
  _hasActiveReceivingUpload(): boolean;
121
156
  expireSessions(): Promise<number>;
@@ -126,7 +161,7 @@ declare class RetentionManager {
126
161
  deleted: number;
127
162
  unknown: string[];
128
163
  }>;
129
- _deleteRecord(record: CommitRecord, reason: 'MAX_AGE' | 'MAX_STORAGE'): Promise<void>;
164
+ _deleteRecord(record: CommitRecord, reason: 'MAX_AGE' | 'MAX_COUNT' | 'MAX_VERSIONS' | 'MAX_STORAGE'): Promise<void>;
130
165
  /**
131
166
  * Configured mutable current records survive age and quota eviction. Their
132
167
  * size still counts toward the logical total so a replacement that cannot be
@@ -134,24 +169,9 @@ declare class RetentionManager {
134
169
  */
135
170
  _isPinned(record: CommitRecord): boolean;
136
171
  _totalSize(records: CommitRecord[]): number;
137
- run(options?: RetentionRunOptions): Promise<{
138
- expiredSessions: number;
139
- scrubbed: number;
140
- ageDeleted: number;
141
- storageDeleted: number;
142
- }>;
143
- _runUnlocked(options?: RetentionRunOptions): Promise<{
144
- expiredSessions: number;
145
- scrubbed: number;
146
- ageDeleted: number;
147
- storageDeleted: number;
148
- }>;
149
- _run({ incomingBytes }?: RetentionRunOptions): Promise<{
150
- expiredSessions: number;
151
- scrubbed: number;
152
- ageDeleted: number;
153
- storageDeleted: number;
154
- }>;
172
+ run(options?: RetentionRunOptions): Promise<RetentionResult>;
173
+ _runUnlocked(options?: RetentionRunOptions): Promise<RetentionResult>;
174
+ _run({ incomingBytes, trigger }?: RetentionRunOptions): Promise<RetentionResult>;
155
175
  afterCommit(): Promise<boolean>;
156
176
  _afterCommitUnlocked(): Promise<boolean>;
157
177
  start(): Promise<void>;
@@ -13,6 +13,9 @@ const layout_js_1 = require("./layout.js");
13
13
  const hash_js_1 = require("../tar-protocol/hash.js");
14
14
  const validation_js_1 = require("../validation.js");
15
15
  const root_coordinator_js_1 = require("./root-coordinator.js");
16
+ const release_js_1 = require("../release.js");
17
+ const commit_journal_js_1 = require("./commit-journal.js");
18
+ const tree_fs_js_1 = require("./tree-fs.js");
16
19
  const DEFAULT_RESUME_TTL = 7 * 24 * 60 * 60 * 1000;
17
20
  exports.DEFAULT_RESUME_TTL = DEFAULT_RESUME_TTL;
18
21
  const DEFAULT_CLEANUP_INTERVAL = 15 * 60 * 1000;
@@ -52,6 +55,49 @@ function compareRecords(left, right) {
52
55
  return left.committedAt - right.committedAt;
53
56
  return left.name < right.name ? -1 : left.name > right.name ? 1 : 0;
54
57
  }
58
+ function bySeries(records) {
59
+ const groups = new Map();
60
+ for (const record of records) {
61
+ if (!record.release)
62
+ continue;
63
+ const group = groups.get(record.release.series);
64
+ if (group)
65
+ group.push(record);
66
+ else
67
+ groups.set(record.release.series, [record]);
68
+ }
69
+ return groups;
70
+ }
71
+ /** Transfer IDs of the newest `maxCount` released records in every series. */
72
+ function countKeepSet(records, maxCount) {
73
+ const keep = new Set();
74
+ for (const group of bySeries(records).values()) {
75
+ for (const record of group.sort(commit_journal_js_1.compareCommitOrder).slice(0, maxCount)) {
76
+ keep.add(record.transferId);
77
+ }
78
+ }
79
+ return keep;
80
+ }
81
+ /** Transfer IDs of every versioned record in each series' newest `maxVersions` groups. */
82
+ function versionKeepSet(records, maxVersions, granularity) {
83
+ const keep = new Set();
84
+ for (const group of bySeries(records).values()) {
85
+ const versioned = group.filter((record) => record.release?.version !== undefined);
86
+ versioned.sort((left, right) => {
87
+ const order = (0, release_js_1.compareReleaseVersions)(right.release.version, left.release.version);
88
+ return order !== 0 ? order : (0, commit_journal_js_1.compareCommitOrder)(left, right);
89
+ });
90
+ const groups = new Set();
91
+ for (const record of versioned) {
92
+ const key = (0, release_js_1.releaseVersionGroup)(record.release.version, granularity);
93
+ if (!groups.has(key) && groups.size >= maxVersions)
94
+ continue;
95
+ groups.add(key);
96
+ keep.add(record.transferId);
97
+ }
98
+ }
99
+ return keep;
100
+ }
55
101
  function identityMatches(left, right) {
56
102
  return left.dev === right.dev && left.ino === right.ino;
57
103
  }
@@ -80,6 +126,25 @@ function inspectManagedFinal(record, { layout, storage, hash }) {
80
126
  }
81
127
  if (initial.isSymbolicLink())
82
128
  return 'SYMLINK';
129
+ if ((0, commit_journal_js_1.commitRecordKind)(record) === 'directory') {
130
+ if (initial.isSymbolicLink() || !initial.isDirectory())
131
+ return 'NON_REGULAR';
132
+ if (!hash)
133
+ return 'VALID';
134
+ let digested;
135
+ try {
136
+ digested = await (0, tree_fs_js_1.digestTree)(finalPath, storage);
137
+ }
138
+ catch {
139
+ return 'DIGEST_INVALID';
140
+ }
141
+ if (digested.entryCount !== record.entryCount || digested.payloadBytes !== record.size) {
142
+ return 'WRONG_SIZE';
143
+ }
144
+ return (0, hash_js_1.digestMatches)(digested.treeSha256, b4a_1.default.from(record.sha256, 'hex'))
145
+ ? 'VALID'
146
+ : 'DIGEST_INVALID';
147
+ }
83
148
  if (!initial.isFile())
84
149
  return 'NON_REGULAR';
85
150
  if (initial.size !== record.size)
@@ -133,6 +198,9 @@ class RetentionManager {
133
198
  sessionStore;
134
199
  commitStore;
135
200
  maxAge;
201
+ maxCount;
202
+ maxVersions;
203
+ versionGranularity;
136
204
  maxStorageBytes;
137
205
  resumeTtl;
138
206
  cleanupInterval;
@@ -141,6 +209,9 @@ class RetentionManager {
141
209
  isSessionActive;
142
210
  hasActiveUploads;
143
211
  isPinned;
212
+ reconcileLinks;
213
+ linkPinsFallback;
214
+ managedLinkNames;
144
215
  logger;
145
216
  timer;
146
217
  cleanupFailure;
@@ -150,7 +221,7 @@ class RetentionManager {
150
221
  tickPromise;
151
222
  tickQueued;
152
223
  lifecycle;
153
- constructor({ layout, sessionStore, commitStore, maxAge, maxStorageBytes, resumeTtl = DEFAULT_RESUME_TTL, cleanupInterval = DEFAULT_CLEANUP_INTERVAL, clock = Date, storage = commitStore?.storage || _fs_1.default.promises, isSessionActive, hasActiveUploads = () => false, isPinned = () => false, logger = null, scheduler = { setInterval, clearInterval }, onEvent = null }) {
224
+ constructor({ layout, sessionStore, commitStore, maxAge, maxCount, maxVersions, versionGranularity, maxStorageBytes, resumeTtl = DEFAULT_RESUME_TTL, cleanupInterval = DEFAULT_CLEANUP_INTERVAL, clock = Date, storage = commitStore?.storage || _fs_1.default.promises, isSessionActive, hasActiveUploads = () => false, isPinned = () => false, reconcileLinks, linkPinsFallback, managedLinkNames, logger = null, scheduler = { setInterval, clearInterval }, onEvent = null }) {
154
225
  if (!layout || typeof layout !== 'object')
155
226
  throw storageError('Invalid storage layout');
156
227
  if (!sessionStore || typeof sessionStore.expire !== 'function') {
@@ -180,6 +251,15 @@ class RetentionManager {
180
251
  }
181
252
  if (typeof isPinned !== 'function')
182
253
  throw storageError('Invalid retention pin predicate');
254
+ if (reconcileLinks !== undefined && typeof reconcileLinks !== 'function') {
255
+ throw storageError('Invalid link reconciliation callback');
256
+ }
257
+ if (linkPinsFallback !== undefined && typeof linkPinsFallback !== 'function') {
258
+ throw storageError('Invalid link pin fallback callback');
259
+ }
260
+ if (managedLinkNames !== undefined && typeof managedLinkNames !== 'function') {
261
+ throw storageError('Invalid managed link name callback');
262
+ }
183
263
  if (onEvent !== null && typeof onEvent !== 'function') {
184
264
  throw storageError('Invalid retention event callback');
185
265
  }
@@ -187,6 +267,17 @@ class RetentionManager {
187
267
  (0, validation_js_1.assertSafeUint)(maxAge, 'maxAge');
188
268
  if (maxStorageBytes !== undefined)
189
269
  (0, validation_js_1.assertSafeUint)(maxStorageBytes, 'maxStorageBytes');
270
+ if (maxCount !== undefined)
271
+ assertPositiveSafeUint(maxCount, 'maxCount');
272
+ if (maxVersions !== undefined)
273
+ assertPositiveSafeUint(maxVersions, 'maxVersions');
274
+ if (maxVersions === undefined) {
275
+ if (versionGranularity !== undefined)
276
+ throw storageError('Invalid versionGranularity');
277
+ }
278
+ else if (versionGranularity !== 'major' && versionGranularity !== 'minor') {
279
+ throw storageError('Invalid versionGranularity');
280
+ }
190
281
  assertPositiveSafeUint(resumeTtl, 'resumeTtl');
191
282
  assertPositiveSafeUint(cleanupInterval, 'cleanupInterval');
192
283
  if (cleanupInterval > MAX_CLEANUP_INTERVAL)
@@ -195,6 +286,9 @@ class RetentionManager {
195
286
  this.sessionStore = sessionStore;
196
287
  this.commitStore = commitStore;
197
288
  this.maxAge = maxAge;
289
+ this.maxCount = maxCount;
290
+ this.maxVersions = maxVersions;
291
+ this.versionGranularity = versionGranularity;
198
292
  this.maxStorageBytes = maxStorageBytes;
199
293
  this.resumeTtl = resumeTtl;
200
294
  this.cleanupInterval = cleanupInterval;
@@ -203,6 +297,9 @@ class RetentionManager {
203
297
  this.isSessionActive = isSessionActive;
204
298
  this.hasActiveUploads = hasActiveUploads;
205
299
  this.isPinned = isPinned;
300
+ this.reconcileLinks = reconcileLinks;
301
+ this.linkPinsFallback = linkPinsFallback;
302
+ this.managedLinkNames = managedLinkNames;
206
303
  this.logger = logger;
207
304
  this.timer = null;
208
305
  this.cleanupFailure = null;
@@ -251,8 +348,9 @@ class RetentionManager {
251
348
  const records = scanned.records;
252
349
  const knownNames = new Set(records.map((record) => record.name));
253
350
  const rootNames = await (0, layout_js_1.withSafeDirectoryIdentity)(this.layout.root, this.storage, () => this.storage.readdir(this.layout.root));
351
+ const linkNames = this.managedLinkNames ? this.managedLinkNames() : new Set();
254
352
  const unknown = rootNames
255
- .filter((name) => name !== '.swarm-deploy' && !knownNames.has(name))
353
+ .filter((name) => name !== '.swarm-deploy' && !knownNames.has(name) && !linkNames.has(name))
256
354
  .sort();
257
355
  for (const name of unknown) {
258
356
  report(this.logger, 'warn', 'Ignoring unknown committed path', { name });
@@ -271,7 +369,9 @@ class RetentionManager {
271
369
  }
272
370
  let purged;
273
371
  try {
274
- purged = await this.commitStore.purge(record, { preservePath: status === 'CHANGED' });
372
+ purged = await this.commitStore.purge(record, {
373
+ preservePath: status === 'CHANGED' || (0, commit_journal_js_1.commitRecordKind)(record) === 'directory'
374
+ });
275
375
  if (!purged) {
276
376
  throw storageError('Managed commit record disappeared during scrub');
277
377
  }
@@ -329,7 +429,8 @@ class RetentionManager {
329
429
  const trigger = options.trigger || 'manual';
330
430
  try {
331
431
  const result = await this._run(options);
332
- this.cleanupFailure = null;
432
+ if (!this.cleanupFailure)
433
+ this.cleanupFailure = null;
333
434
  this._emit({ trigger, status: 'completed', ...result });
334
435
  return result;
335
436
  }
@@ -339,7 +440,7 @@ class RetentionManager {
339
440
  throw err;
340
441
  }
341
442
  }
342
- async _run({ incomingBytes = 0 } = {}) {
443
+ async _run({ incomingBytes = 0, trigger = 'manual' } = {}) {
343
444
  (0, validation_js_1.assertSafeUint)(incomingBytes, 'incomingBytes');
344
445
  if (this.maxStorageBytes !== undefined && incomingBytes > this.maxStorageBytes) {
345
446
  throw new errors_js_1.SwarmDeployError(errors_js_1.ERRORS.FILE_TOO_LARGE, 'Incoming artifact exceeds committed storage limit');
@@ -347,12 +448,29 @@ class RetentionManager {
347
448
  const expiredSessions = await this.expireSessions();
348
449
  const scrub = await this.scrubCommitted({ hash: false });
349
450
  const current = scrub.records.slice();
451
+ let linkPinned = new Set();
452
+ let linkReconcileError = null;
453
+ if (this.reconcileLinks) {
454
+ try {
455
+ linkPinned = new Set(await this.reconcileLinks(current.slice()));
456
+ }
457
+ catch (err) {
458
+ linkReconcileError = err;
459
+ if (this.linkPinsFallback) {
460
+ linkPinned = new Set(await this.linkPinsFallback(current.slice()));
461
+ }
462
+ report(this.logger, 'warn', 'Managed link reconciliation failed during retention', {
463
+ reason: errorMessage(err)
464
+ });
465
+ }
466
+ }
467
+ const pinned = (record) => this._isPinned(record) || linkPinned.has(record.transferId);
350
468
  let ageDeleted = 0;
351
469
  if (this.maxAge !== undefined) {
352
470
  const now = this.clock.now();
353
471
  (0, validation_js_1.assertSafeUint)(now, 'current timestamp');
354
472
  for (const record of current.slice().sort(compareRecords)) {
355
- if (this._isPinned(record))
473
+ if (pinned(record))
356
474
  continue;
357
475
  if (now < record.committedAt || now - record.committedAt < this.maxAge)
358
476
  continue;
@@ -361,6 +479,30 @@ class RetentionManager {
361
479
  ageDeleted++;
362
480
  }
363
481
  }
482
+ let countDeleted = 0;
483
+ if (this.maxCount !== undefined) {
484
+ const keep = countKeepSet(current, this.maxCount);
485
+ for (const record of current.slice().sort(compareRecords)) {
486
+ if (!record.release || keep.has(record.transferId) || pinned(record))
487
+ continue;
488
+ await this._deleteRecord(record, 'MAX_COUNT');
489
+ current.splice(current.indexOf(record), 1);
490
+ countDeleted++;
491
+ }
492
+ }
493
+ let versionDeleted = 0;
494
+ if (this.maxVersions !== undefined && this.versionGranularity !== undefined) {
495
+ const keep = versionKeepSet(current, this.maxVersions, this.versionGranularity);
496
+ for (const record of current.slice().sort(compareRecords)) {
497
+ if (record.release?.version === undefined)
498
+ continue;
499
+ if (keep.has(record.transferId) || pinned(record))
500
+ continue;
501
+ await this._deleteRecord(record, 'MAX_VERSIONS');
502
+ current.splice(current.indexOf(record), 1);
503
+ versionDeleted++;
504
+ }
505
+ }
364
506
  let storageDeleted = 0;
365
507
  if (this.maxStorageBytes !== undefined) {
366
508
  const permitted = this.maxStorageBytes - incomingBytes;
@@ -368,7 +510,7 @@ class RetentionManager {
368
510
  for (const record of current.slice().sort(compareRecords)) {
369
511
  if (total <= permitted)
370
512
  break;
371
- if (this._isPinned(record))
513
+ if (pinned(record))
372
514
  continue;
373
515
  await this._deleteRecord(record, 'MAX_STORAGE');
374
516
  total -= record.size;
@@ -377,7 +519,19 @@ class RetentionManager {
377
519
  if (total > permitted)
378
520
  throw storageError('Unable to reserve committed storage capacity');
379
521
  }
380
- return { expiredSessions, scrubbed: scrub.deleted, ageDeleted, storageDeleted };
522
+ if (linkReconcileError) {
523
+ this.cleanupFailure = linkReconcileError;
524
+ if (trigger !== 'commit')
525
+ throw linkReconcileError;
526
+ }
527
+ return {
528
+ expiredSessions,
529
+ scrubbed: scrub.deleted,
530
+ ageDeleted,
531
+ countDeleted,
532
+ versionDeleted,
533
+ storageDeleted
534
+ };
381
535
  }
382
536
  afterCommit() {
383
537
  return (0, root_coordinator_js_1.withRootLease)(this.layout.root, () => this._afterCommitUnlocked());
@@ -1 +1 @@
1
- {"version":3,"file":"retention.js","sourceRoot":"","sources":["../../src/storage/retention.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retention.js","sourceRoot":"","sources":["../../src/storage/retention.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
- import { type MetadataRecord } from '../tar-protocol/controls.js';
1
+ import { type AnyMetadataRecord } from '../tar-protocol/controls.js';
2
2
  import type { StorageAdapter, StorageLayout } from './types.js';
3
- import type { Clock } from '../types.js';
3
+ import type { ArtifactKind, Clock } from '../types.js';
4
+ /** Directory sessions are persisted at a version no file-only server understands. */
5
+ export declare const TREE_SESSION_VERSION = 4;
4
6
  declare const RECEIVING = "receiving";
5
7
  declare const VERIFIED = "verified";
6
8
  declare const DELETING = "deleting";
@@ -9,12 +11,20 @@ export interface TarSession {
9
11
  id: string;
10
12
  transferId: Buffer;
11
13
  ownerKey: Buffer;
14
+ kind: ArtifactKind;
12
15
  name: string;
16
+ sourceParent?: string;
17
+ /** Payload bytes: the file size, or the aggregate tree payload size. */
13
18
  size: number;
19
+ /** The file digest, or the canonical tree digest. */
14
20
  digest: Buffer;
21
+ /** Present only for a directory session. */
22
+ entryCount?: number;
15
23
  tarSize: number;
16
24
  tarDigest: Buffer;
17
25
  tarPath: string;
26
+ /** Present only for a directory session. */
27
+ treePath?: string;
18
28
  state: State;
19
29
  createdAt: number;
20
30
  updatedAt: number;
@@ -65,14 +75,29 @@ export declare class TarSessionStore {
65
75
  private sessionPath;
66
76
  private tarPath;
67
77
  private filePath;
78
+ private treeStagingPath;
79
+ /** Removes a staged tree through the contained primitives; never `storage.rm`. */
80
+ private removeStagedTree;
68
81
  private journalPath;
69
82
  private reserve;
70
83
  private assertReady;
71
84
  private metadata;
85
+ private fileMetadata;
86
+ private treeFromDisk;
72
87
  private fromDisk;
88
+ /**
89
+ * Version 3 only adds `sourceParent`, so a session without one is written as
90
+ * version 2. An older server can then still read, and resume, every session
91
+ * whose record it fully understands; only parent-bearing ones are lost to a
92
+ * downgrade.
93
+ */
73
94
  private serialize;
74
95
  private writeSession;
75
96
  private remove;
97
+ /** A verified directory session must still own its staging tree. */
98
+ private assertStagedTree;
99
+ /** Verified directory sessions mid-commit may only have a durable journal tree. */
100
+ private assertVerifiedDirectorySession;
76
101
  private purgeCorruptSession;
77
102
  /** Removes only a regular crash residue and syncs its parent before reporting it purged. */
78
103
  private purgeSafeResidue;
@@ -80,13 +105,19 @@ export declare class TarSessionStore {
80
105
  private ensureTarLength;
81
106
  private diskReserve;
82
107
  init(): Promise<void>;
83
- admit(ownerKey: Uint8Array, input: MetadataRecord): Promise<TarAdmission>;
84
- append(ownerKey: Uint8Array, input: MetadataRecord, offset: number, data: Uint8Array): Promise<number>;
108
+ admit(ownerKey: Uint8Array, input: AnyMetadataRecord): Promise<TarAdmission>;
109
+ append(ownerKey: Uint8Array, input: AnyMetadataRecord, offset: number, data: Uint8Array): Promise<number>;
85
110
  private rollbackTar;
86
111
  private rollbackOrQuarantine;
87
112
  private resetUnlocked;
88
113
  private quarantineVerificationFailure;
89
- verify(ownerKey: Uint8Array, input: MetadataRecord): Promise<TarSession>;
114
+ verify(ownerKey: Uint8Array, input: AnyMetadataRecord): Promise<TarSession>;
115
+ /**
116
+ * Extracts the complete directory archive into its staging tree, then proves
117
+ * the tree from the bytes on disk alone: the recomputed canonical digest,
118
+ * entry count, and payload size must equal the offered values.
119
+ */
120
+ private extractTree;
90
121
  private readTar;
91
122
  readVerified(transferId: Uint8Array): Promise<TarSession>;
92
123
  /**