swarm-deploy 0.0.0 → 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.
Files changed (148) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/LICENSE.md +201 -0
  3. package/NOTICE.md +13 -0
  4. package/README.md +1283 -0
  5. package/RELEASING.md +71 -0
  6. package/SECURITY.md +40 -0
  7. package/dist/abort.d.ts +16 -0
  8. package/dist/abort.js +52 -0
  9. package/dist/abort.js.map +1 -0
  10. package/dist/allowlist.d.ts +2 -0
  11. package/dist/allowlist.js +21 -0
  12. package/dist/allowlist.js.map +1 -0
  13. package/dist/bin/swarm-deploy.d.ts +2 -0
  14. package/dist/bin/swarm-deploy.js +41 -0
  15. package/dist/bin/swarm-deploy.js.map +1 -0
  16. package/dist/cli.d.ts +27 -0
  17. package/dist/cli.js +751 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/client.d.ts +111 -0
  20. package/dist/client.js +276 -0
  21. package/dist/client.js.map +1 -0
  22. package/dist/direct-dht.d.ts +81 -0
  23. package/dist/direct-dht.js +254 -0
  24. package/dist/direct-dht.js.map +1 -0
  25. package/dist/error-code.d.ts +15 -0
  26. package/dist/error-code.js +30 -0
  27. package/dist/error-code.js.map +1 -0
  28. package/dist/errors.d.ts +31 -0
  29. package/dist/errors.js +37 -0
  30. package/dist/errors.js.map +1 -0
  31. package/dist/events-node.d.ts +2 -0
  32. package/dist/events-node.js +7 -0
  33. package/dist/events-node.js.map +1 -0
  34. package/dist/files.d.ts +32 -0
  35. package/dist/files.js +85 -0
  36. package/dist/files.js.map +1 -0
  37. package/dist/fs-node.d.ts +2 -0
  38. package/dist/fs-node.js +7 -0
  39. package/dist/fs-node.js.map +1 -0
  40. package/dist/hooks-module.d.ts +9 -0
  41. package/dist/hooks-module.js +118 -0
  42. package/dist/hooks-module.js.map +1 -0
  43. package/dist/hooks.d.ts +69 -0
  44. package/dist/hooks.js +88 -0
  45. package/dist/hooks.js.map +1 -0
  46. package/dist/identity.d.ts +7 -0
  47. package/dist/identity.js +50 -0
  48. package/dist/identity.js.map +1 -0
  49. package/dist/index.d.ts +12 -0
  50. package/dist/index.js +21 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/os-node.d.ts +2 -0
  53. package/dist/os-node.js +7 -0
  54. package/dist/os-node.js.map +1 -0
  55. package/dist/path-node.d.ts +2 -0
  56. package/dist/path-node.js +7 -0
  57. package/dist/path-node.js.map +1 -0
  58. package/dist/process-node.d.ts +2 -0
  59. package/dist/process-node.js +7 -0
  60. package/dist/process-node.js.map +1 -0
  61. package/dist/release.d.ts +26 -0
  62. package/dist/release.js +419 -0
  63. package/dist/release.js.map +1 -0
  64. package/dist/server.d.ts +239 -0
  65. package/dist/server.js +928 -0
  66. package/dist/server.js.map +1 -0
  67. package/dist/storage/atomic-file.d.ts +15 -0
  68. package/dist/storage/atomic-file.js +172 -0
  69. package/dist/storage/atomic-file.js.map +1 -0
  70. package/dist/storage/commit-journal.d.ts +120 -0
  71. package/dist/storage/commit-journal.js +417 -0
  72. package/dist/storage/commit-journal.js.map +1 -0
  73. package/dist/storage/commit-store.d.ts +307 -0
  74. package/dist/storage/commit-store.js +1691 -0
  75. package/dist/storage/commit-store.js.map +1 -0
  76. package/dist/storage/layout.d.ts +16 -0
  77. package/dist/storage/layout.js +409 -0
  78. package/dist/storage/layout.js.map +1 -0
  79. package/dist/storage/link-store.d.ts +70 -0
  80. package/dist/storage/link-store.js +363 -0
  81. package/dist/storage/link-store.js.map +1 -0
  82. package/dist/storage/recovery.d.ts +100 -0
  83. package/dist/storage/recovery.js +260 -0
  84. package/dist/storage/recovery.js.map +1 -0
  85. package/dist/storage/retention.d.ts +183 -0
  86. package/dist/storage/retention.js +619 -0
  87. package/dist/storage/retention.js.map +1 -0
  88. package/dist/storage/root-coordinator.d.ts +7 -0
  89. package/dist/storage/root-coordinator.js +27 -0
  90. package/dist/storage/root-coordinator.js.map +1 -0
  91. package/dist/storage/session-store.d.ts +2 -0
  92. package/dist/storage/session-store.js +7 -0
  93. package/dist/storage/session-store.js.map +1 -0
  94. package/dist/storage/tar-session-store.d.ts +147 -0
  95. package/dist/storage/tar-session-store.js +1044 -0
  96. package/dist/storage/tar-session-store.js.map +1 -0
  97. package/dist/storage/tree-fs.d.ts +44 -0
  98. package/dist/storage/tree-fs.js +580 -0
  99. package/dist/storage/tree-fs.js.map +1 -0
  100. package/dist/storage/tree-staging.d.ts +9 -0
  101. package/dist/storage/tree-staging.js +64 -0
  102. package/dist/storage/tree-staging.js.map +1 -0
  103. package/dist/storage/types.d.ts +77 -0
  104. package/dist/storage/types.js +3 -0
  105. package/dist/storage/types.js.map +1 -0
  106. package/dist/symlinks.d.ts +36 -0
  107. package/dist/symlinks.js +128 -0
  108. package/dist/symlinks.js.map +1 -0
  109. package/dist/tar-protocol/controls.d.ts +73 -0
  110. package/dist/tar-protocol/controls.js +291 -0
  111. package/dist/tar-protocol/controls.js.map +1 -0
  112. package/dist/tar-protocol/direct-wire.d.ts +43 -0
  113. package/dist/tar-protocol/direct-wire.js +194 -0
  114. package/dist/tar-protocol/direct-wire.js.map +1 -0
  115. package/dist/tar-protocol/extract.d.ts +18 -0
  116. package/dist/tar-protocol/extract.js +124 -0
  117. package/dist/tar-protocol/extract.js.map +1 -0
  118. package/dist/tar-protocol/hash.d.ts +10 -0
  119. package/dist/tar-protocol/hash.js +44 -0
  120. package/dist/tar-protocol/hash.js.map +1 -0
  121. package/dist/tar-protocol/lifecycle.d.ts +13 -0
  122. package/dist/tar-protocol/lifecycle.js +90 -0
  123. package/dist/tar-protocol/lifecycle.js.map +1 -0
  124. package/dist/tar-protocol/manifest.d.ts +58 -0
  125. package/dist/tar-protocol/manifest.js +312 -0
  126. package/dist/tar-protocol/manifest.js.map +1 -0
  127. package/dist/tar-protocol/tree-extract.d.ts +37 -0
  128. package/dist/tar-protocol/tree-extract.js +240 -0
  129. package/dist/tar-protocol/tree-extract.js.map +1 -0
  130. package/dist/tar-protocol/tree-manifest.d.ts +45 -0
  131. package/dist/tar-protocol/tree-manifest.js +277 -0
  132. package/dist/tar-protocol/tree-manifest.js.map +1 -0
  133. package/dist/tar-protocol/tree-path.d.ts +15 -0
  134. package/dist/tar-protocol/tree-path.js +68 -0
  135. package/dist/tar-protocol/tree-path.js.map +1 -0
  136. package/dist/tar-protocol/tree.d.ts +68 -0
  137. package/dist/tar-protocol/tree.js +269 -0
  138. package/dist/tar-protocol/tree.js.map +1 -0
  139. package/dist/tar-protocol/ustar.d.ts +36 -0
  140. package/dist/tar-protocol/ustar.js +167 -0
  141. package/dist/tar-protocol/ustar.js.map +1 -0
  142. package/dist/types.d.ts +61 -0
  143. package/dist/types.js +3 -0
  144. package/dist/types.js.map +1 -0
  145. package/dist/validation.d.ts +4 -0
  146. package/dist/validation.js +26 -0
  147. package/dist/validation.js.map +1 -0
  148. package/package.json +103 -1
@@ -0,0 +1,417 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MAX_COMMIT_METADATA_BYTES = exports.DIRECTORY_JOURNAL_VERSION = exports.REPLACEMENT_JOURNAL_VERSION = exports.JOURNAL_VERSION = exports.DIRECTORY_COMMIT_VERSION = exports.REPLACEMENT_COMMIT_VERSION = exports.COMMIT_VERSION = exports.DIRECTORY_PHASES = exports.CorruptJournalError = exports.REPLACEMENT_PHASES = void 0;
7
+ exports.isHex = isHex;
8
+ exports.fileIdentity = fileIdentity;
9
+ exports.identitiesEqual = identitiesEqual;
10
+ exports.compareCommitOrder = compareCommitOrder;
11
+ exports.commitRecordKind = commitRecordKind;
12
+ exports.assertCommitRelease = assertCommitRelease;
13
+ exports.assertCommitRecord = assertCommitRecord;
14
+ exports.isDirectoryJournal = isDirectoryJournal;
15
+ exports.isReplacementJournal = isReplacementJournal;
16
+ exports.serializeJournal = serializeJournal;
17
+ exports.readCommitJournal = readCommitJournal;
18
+ const b4a_1 = __importDefault(require("b4a"));
19
+ const error_code_js_1 = require("../error-code.js");
20
+ const _path_1 = __importDefault(require("#path"));
21
+ const semver_1 = require("semver");
22
+ const sodium_native_1 = __importDefault(require("sodium-native"));
23
+ const errors_js_1 = require("../errors.js");
24
+ const files_js_1 = require("../files.js");
25
+ const validation_js_1 = require("../validation.js");
26
+ const tree_js_1 = require("../tar-protocol/tree.js");
27
+ const atomic_file_js_1 = require("./atomic-file.js");
28
+ const layout_js_1 = require("./layout.js");
29
+ const COMMIT_VERSION = 1;
30
+ exports.COMMIT_VERSION = COMMIT_VERSION;
31
+ const REPLACEMENT_COMMIT_VERSION = 2;
32
+ exports.REPLACEMENT_COMMIT_VERSION = REPLACEMENT_COMMIT_VERSION;
33
+ const DIRECTORY_COMMIT_VERSION = 3;
34
+ exports.DIRECTORY_COMMIT_VERSION = DIRECTORY_COMMIT_VERSION;
35
+ const JOURNAL_VERSION = 1;
36
+ exports.JOURNAL_VERSION = JOURNAL_VERSION;
37
+ const REPLACEMENT_JOURNAL_VERSION = 2;
38
+ exports.REPLACEMENT_JOURNAL_VERSION = REPLACEMENT_JOURNAL_VERSION;
39
+ const DIRECTORY_JOURNAL_VERSION = 3;
40
+ exports.DIRECTORY_JOURNAL_VERSION = DIRECTORY_JOURNAL_VERSION;
41
+ const MAX_COMMIT_METADATA_BYTES = 16 * 1024;
42
+ exports.MAX_COMMIT_METADATA_BYTES = MAX_COMMIT_METADATA_BYTES;
43
+ function sameTransferId(left, right) {
44
+ return (isHex(left) &&
45
+ isHex(right) &&
46
+ sodium_native_1.default.sodium_memcmp(b4a_1.default.from(left, 'hex'), b4a_1.default.from(right, 'hex')));
47
+ }
48
+ /** Ordered v2 transaction boundaries; each one is durable before the next. */
49
+ exports.REPLACEMENT_PHASES = [
50
+ 'journaled',
51
+ 'deduped',
52
+ 'history-linked',
53
+ 'publication-linked',
54
+ 'final-renamed',
55
+ 'current-sidecar',
56
+ 'history-sidecar',
57
+ 'cleanup'
58
+ ];
59
+ function isReplacementPhase(value) {
60
+ return typeof value === 'string' && exports.REPLACEMENT_PHASES.includes(value);
61
+ }
62
+ class CorruptJournalError extends Error {
63
+ cause;
64
+ constructor(message, cause = null) {
65
+ super(message);
66
+ this.name = 'CorruptJournalError';
67
+ this.cause = cause;
68
+ }
69
+ }
70
+ exports.CorruptJournalError = CorruptJournalError;
71
+ function storageError(message, cause = null) {
72
+ return new errors_js_1.SwarmDeployError(errors_js_1.ERRORS.PROTOCOL_INVALID, message, cause);
73
+ }
74
+ function isHex(value) {
75
+ return typeof value === 'string' && /^[0-9a-f]{64}$/.test(value);
76
+ }
77
+ function identityValue(value) {
78
+ if ((typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0) &&
79
+ (typeof value !== 'bigint' || value < 0n)) {
80
+ throw storageError('Storage file identity is unavailable');
81
+ }
82
+ return String(value);
83
+ }
84
+ function fileIdentity(stat) {
85
+ return { dev: identityValue(stat.dev), ino: identityValue(stat.ino) };
86
+ }
87
+ function identitiesEqual(left, right) {
88
+ return left.dev === right.dev && left.ino === right.ino;
89
+ }
90
+ /** Newest first: descending commit time, then transfer ID and name for determinism. */
91
+ function compareCommitOrder(left, right) {
92
+ if (left.committedAt !== right.committedAt)
93
+ return right.committedAt - left.committedAt;
94
+ if (left.transferId !== right.transferId)
95
+ return left.transferId < right.transferId ? -1 : 1;
96
+ return left.name < right.name ? -1 : left.name > right.name ? 1 : 0;
97
+ }
98
+ function commitRecordKind(record) {
99
+ return record.kind === 'directory' ? 'directory' : 'file';
100
+ }
101
+ function isRecordLike(value) {
102
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
103
+ }
104
+ function assertReplacement(value) {
105
+ if (!isRecordLike(value))
106
+ throw storageError('Invalid commit replacement metadata');
107
+ if (typeof value.name !== 'string' || (0, files_js_1.isReservedHistoryName)(value.name)) {
108
+ throw storageError('Invalid replaced name');
109
+ }
110
+ (0, files_js_1.validateBasename)(value.name);
111
+ if (!isHex(value.transferId))
112
+ throw storageError('Invalid replaced transfer ID');
113
+ if (value.historyName !== (0, files_js_1.historyName)(value.transferId)) {
114
+ throw storageError('Invalid replacement history name');
115
+ }
116
+ }
117
+ function assertCommitRelease(value) {
118
+ if (!isRecordLike(value))
119
+ throw storageError('Invalid commit release metadata');
120
+ const keys = Object.keys(value);
121
+ if (keys.some((key) => key !== 'series' && key !== 'version') || !keys.includes('series')) {
122
+ throw storageError('Invalid commit release metadata');
123
+ }
124
+ try {
125
+ (0, files_js_1.validateBasename)(typeof value.series === 'string' ? value.series : '');
126
+ }
127
+ catch (error) {
128
+ throw storageError('Invalid commit release series', error);
129
+ }
130
+ if (value.version === undefined)
131
+ return;
132
+ if (typeof value.version !== 'string' ||
133
+ b4a_1.default.from(value.version).byteLength > 100 ||
134
+ value.version.trim() !== value.version ||
135
+ /^[vV]/.test(value.version) ||
136
+ /[/\\]/.test(value.version)) {
137
+ throw storageError('Invalid commit release version');
138
+ }
139
+ try {
140
+ const parsed = new semver_1.SemVer(value.version, { loose: false });
141
+ if (parsed.version !== value.version)
142
+ throw storageError('Invalid commit release version');
143
+ }
144
+ catch (error) {
145
+ if (error instanceof errors_js_1.SwarmDeployError)
146
+ throw error;
147
+ throw storageError('Invalid commit release version', error);
148
+ }
149
+ }
150
+ function assertCommitRecordShape(record) {
151
+ if (!isRecordLike(record))
152
+ throw storageError('Invalid commit record');
153
+ const candidate = record;
154
+ if (candidate.version !== COMMIT_VERSION &&
155
+ candidate.version !== REPLACEMENT_COMMIT_VERSION &&
156
+ candidate.version !== DIRECTORY_COMMIT_VERSION) {
157
+ throw storageError('Invalid commit record version');
158
+ }
159
+ (0, files_js_1.validateBasename)(typeof candidate.name === 'string' ? candidate.name : '');
160
+ (0, validation_js_1.assertSafeUint)(candidate.size, 'commit size');
161
+ if (!isHex(candidate.sha256))
162
+ throw storageError('Invalid commit digest');
163
+ (0, validation_js_1.assertSafeUint)(candidate.committedAt, 'commit timestamp');
164
+ if (!isHex(candidate.uploaderFingerprint))
165
+ throw storageError('Invalid uploader fingerprint');
166
+ if (!isHex(candidate.transferId))
167
+ throw storageError('Invalid commit transfer ID');
168
+ if (candidate.release !== undefined)
169
+ assertCommitRelease(candidate.release);
170
+ if (candidate.version === DIRECTORY_COMMIT_VERSION) {
171
+ if (candidate.kind !== 'directory')
172
+ throw storageError('Invalid commit artifact kind');
173
+ (0, validation_js_1.assertSafeUint)(candidate.entryCount, 'commit entry count');
174
+ if (candidate.entryCount > tree_js_1.MAX_TREE_ENTRIES) {
175
+ throw storageError('Invalid commit entry count');
176
+ }
177
+ if ((0, files_js_1.isReservedHistoryName)(candidate.name))
178
+ throw storageError('Reserved directory name');
179
+ if (candidate.replaces !== undefined) {
180
+ throw storageError('Unexpected commit replacement metadata');
181
+ }
182
+ return;
183
+ }
184
+ if (candidate.kind !== undefined)
185
+ throw storageError('Unexpected commit artifact kind');
186
+ if (candidate.entryCount !== undefined)
187
+ throw storageError('Unexpected commit entry count');
188
+ if (candidate.version === REPLACEMENT_COMMIT_VERSION) {
189
+ assertReplacement(candidate.replaces);
190
+ }
191
+ else if (candidate.replaces !== undefined) {
192
+ throw storageError('Unexpected commit replacement metadata');
193
+ }
194
+ }
195
+ /** Validates in place so unknown persisted fields survive a read/write round-trip. */
196
+ function assertCommitRecord(record) {
197
+ assertCommitRecordShape(record);
198
+ return record;
199
+ }
200
+ exports.DIRECTORY_PHASES = ['journaled', 'renamed', 'sidecar', 'cleanup'];
201
+ function isDirectoryJournal(journal) {
202
+ return journal !== null && journal.version === DIRECTORY_JOURNAL_VERSION;
203
+ }
204
+ function isReplacementJournal(journal) {
205
+ return journal !== null && journal.version === REPLACEMENT_JOURNAL_VERSION;
206
+ }
207
+ function parseIdentity(value) {
208
+ if (!isRecordLike(value))
209
+ throw new CorruptJournalError('Invalid commit journal');
210
+ const { dev, ino } = value;
211
+ if (typeof dev !== 'string' ||
212
+ typeof ino !== 'string' ||
213
+ !/^(0|[1-9][0-9]*)$/.test(dev) ||
214
+ !/^(0|[1-9][0-9]*)$/.test(ino)) {
215
+ throw new CorruptJournalError('Invalid commit journal');
216
+ }
217
+ return { dev, ino };
218
+ }
219
+ function parseRecord(value) {
220
+ try {
221
+ return assertCommitRecord(value);
222
+ }
223
+ catch (error) {
224
+ throw new CorruptJournalError('Invalid commit journal record', error);
225
+ }
226
+ }
227
+ function parseReplacementJournal(id, journal) {
228
+ if (journal.intent !== 'replace' ||
229
+ (journal.state !== 'committing' && journal.state !== 'aborting') ||
230
+ !isReplacementPhase(journal.phase) ||
231
+ !sameTransferId(journal.transferId, id) ||
232
+ !isHex(journal.attemptId) ||
233
+ typeof journal.name !== 'string' ||
234
+ journal.publicationName !== `${journal.attemptId}.part`) {
235
+ throw new CorruptJournalError('Invalid replacement journal');
236
+ }
237
+ let name;
238
+ try {
239
+ name = (0, files_js_1.validateBasename)(journal.name);
240
+ if ((0, files_js_1.isReservedHistoryName)(name))
241
+ throw storageError('Reserved replacement name');
242
+ }
243
+ catch (error) {
244
+ throw new CorruptJournalError('Invalid replacement journal name', error);
245
+ }
246
+ const record = parseRecord(journal.record);
247
+ const oldRecord = parseRecord(journal.oldRecord);
248
+ if (!sameTransferId(record.transferId, id)) {
249
+ throw new CorruptJournalError('Commit journal ID mismatch');
250
+ }
251
+ if (record.name !== name)
252
+ throw new CorruptJournalError('Replacement journal name mismatch');
253
+ if (journal.historyName !== (0, files_js_1.historyName)(oldRecord.transferId)) {
254
+ throw new CorruptJournalError('Invalid replacement history name');
255
+ }
256
+ if (sameTransferId(oldRecord.transferId, record.transferId)) {
257
+ throw new CorruptJournalError('Replacement journal replaces its own transfer');
258
+ }
259
+ if (journal.dedupHistoryName !== null &&
260
+ journal.dedupHistoryName !== (0, files_js_1.historyName)(record.transferId)) {
261
+ throw new CorruptJournalError('Invalid replacement dedup name');
262
+ }
263
+ return {
264
+ version: REPLACEMENT_JOURNAL_VERSION,
265
+ intent: 'replace',
266
+ state: journal.state,
267
+ phase: journal.phase,
268
+ transferId: id,
269
+ attemptId: journal.attemptId,
270
+ name,
271
+ historyName: journal.historyName,
272
+ publicationName: journal.publicationName,
273
+ sourceStagingIdentity: parseIdentity(journal.sourceStagingIdentity),
274
+ finalIdentity: parseIdentity(journal.finalIdentity),
275
+ historyIdentity: parseIdentity(journal.historyIdentity),
276
+ publicationIdentity: parseIdentity(journal.publicationIdentity),
277
+ dedupHistoryName: journal.dedupHistoryName,
278
+ oldRecord,
279
+ record
280
+ };
281
+ }
282
+ function isDirectoryPhase(value) {
283
+ return typeof value === 'string' && exports.DIRECTORY_PHASES.includes(value);
284
+ }
285
+ function parseDirectoryJournal(id, journal) {
286
+ if (journal.intent !== 'create-directory' ||
287
+ (journal.state !== 'committing' && journal.state !== 'aborting') ||
288
+ !isDirectoryPhase(journal.phase) ||
289
+ !sameTransferId(journal.transferId, id) ||
290
+ !isHex(journal.attemptId) ||
291
+ typeof journal.name !== 'string' ||
292
+ journal.stagingTreeName !== `${id}.tree`) {
293
+ throw new CorruptJournalError('Invalid directory journal');
294
+ }
295
+ let name;
296
+ try {
297
+ name = (0, files_js_1.validateBasename)(journal.name);
298
+ if ((0, files_js_1.isReservedHistoryName)(name))
299
+ throw storageError('Reserved directory name');
300
+ }
301
+ catch (error) {
302
+ throw new CorruptJournalError('Invalid directory journal name', error);
303
+ }
304
+ const record = parseRecord(journal.record);
305
+ if (!sameTransferId(record.transferId, id)) {
306
+ throw new CorruptJournalError('Commit journal ID mismatch');
307
+ }
308
+ if (record.version !== DIRECTORY_COMMIT_VERSION || record.name !== name) {
309
+ throw new CorruptJournalError('Directory journal record mismatch');
310
+ }
311
+ return {
312
+ version: DIRECTORY_JOURNAL_VERSION,
313
+ intent: 'create-directory',
314
+ state: journal.state,
315
+ phase: journal.phase,
316
+ transferId: id,
317
+ attemptId: journal.attemptId,
318
+ name,
319
+ stagingTreeName: journal.stagingTreeName,
320
+ stagingTreeIdentity: parseIdentity(journal.stagingTreeIdentity),
321
+ record
322
+ };
323
+ }
324
+ /** The exact durable shape of a journal, for creation and phase transitions. */
325
+ function serializeJournal(journal) {
326
+ if (journal.version === DIRECTORY_JOURNAL_VERSION) {
327
+ return {
328
+ version: DIRECTORY_JOURNAL_VERSION,
329
+ intent: journal.intent,
330
+ state: journal.state,
331
+ phase: journal.phase,
332
+ transferId: journal.transferId,
333
+ attemptId: journal.attemptId,
334
+ name: journal.name,
335
+ stagingTreeName: journal.stagingTreeName,
336
+ stagingTreeIdentity: journal.stagingTreeIdentity,
337
+ record: journal.record
338
+ };
339
+ }
340
+ if (journal.version === REPLACEMENT_JOURNAL_VERSION) {
341
+ return {
342
+ version: REPLACEMENT_JOURNAL_VERSION,
343
+ intent: journal.intent,
344
+ state: journal.state,
345
+ phase: journal.phase,
346
+ transferId: journal.transferId,
347
+ attemptId: journal.attemptId,
348
+ name: journal.name,
349
+ historyName: journal.historyName,
350
+ publicationName: journal.publicationName,
351
+ sourceStagingIdentity: journal.sourceStagingIdentity,
352
+ finalIdentity: journal.finalIdentity,
353
+ historyIdentity: journal.historyIdentity,
354
+ publicationIdentity: journal.publicationIdentity,
355
+ dedupHistoryName: journal.dedupHistoryName,
356
+ oldRecord: journal.oldRecord,
357
+ record: journal.record
358
+ };
359
+ }
360
+ return {
361
+ version: JOURNAL_VERSION,
362
+ state: journal.state,
363
+ transferId: journal.record.transferId,
364
+ attemptId: journal.attemptId,
365
+ sourceStagingIdentity: journal.sourceStagingIdentity,
366
+ record: journal.record
367
+ };
368
+ }
369
+ async function readCommitJournal(id, layout, storage) {
370
+ if (!isHex(id))
371
+ throw storageError('Invalid journal ID');
372
+ const journalPath = _path_1.default.join(layout.journals, `${id}.json`);
373
+ let journal;
374
+ try {
375
+ try {
376
+ await (0, layout_js_1.assertSafeFile)(journalPath, storage);
377
+ }
378
+ catch (err) {
379
+ if ((0, error_code_js_1.isMissing)(err))
380
+ return null;
381
+ throw err;
382
+ }
383
+ journal = await (0, atomic_file_js_1.readJson)(journalPath, storage, MAX_COMMIT_METADATA_BYTES);
384
+ if (journal.version === DIRECTORY_JOURNAL_VERSION)
385
+ return parseDirectoryJournal(id, journal);
386
+ if (journal.version === REPLACEMENT_JOURNAL_VERSION) {
387
+ return parseReplacementJournal(id, journal);
388
+ }
389
+ if (journal.version !== JOURNAL_VERSION ||
390
+ (journal.state !== 'committing' && journal.state !== 'aborting') ||
391
+ !sameTransferId(journal.transferId, id) ||
392
+ !isHex(journal.attemptId)) {
393
+ throw new CorruptJournalError('Invalid commit journal');
394
+ }
395
+ const sourceStagingIdentity = parseIdentity(journal.sourceStagingIdentity);
396
+ const record = parseRecord(journal.record);
397
+ if (!sameTransferId(record.transferId, id)) {
398
+ throw new CorruptJournalError('Commit journal ID mismatch');
399
+ }
400
+ return {
401
+ version: JOURNAL_VERSION,
402
+ record,
403
+ attemptId: journal.attemptId,
404
+ sourceStagingIdentity,
405
+ state: journal.state
406
+ };
407
+ }
408
+ catch (error) {
409
+ if (error instanceof CorruptJournalError)
410
+ throw error;
411
+ if (error instanceof atomic_file_js_1.MetadataFormatError) {
412
+ throw new CorruptJournalError('Malformed commit journal', error);
413
+ }
414
+ throw error;
415
+ }
416
+ }
417
+ //# sourceMappingURL=commit-journal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commit-journal.js","sourceRoot":"","sources":["../../src/storage/commit-journal.ts"],"names":[],"mappings":"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"}