@indigoai-us/hq-cloud 6.18.45 → 6.18.46-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/tombstones.d.ts
CHANGED
|
@@ -28,6 +28,8 @@ export declare const FETCH_TOMBSTONES_RETRY_DELAYS_MS: readonly [250, 750];
|
|
|
28
28
|
* `FETCH_TOMBSTONES_MAX_ATTEMPTS`.
|
|
29
29
|
*/
|
|
30
30
|
export declare const FETCH_TOMBSTONES_TRANSIENT_MAX_ATTEMPTS = 5;
|
|
31
|
+
/** Protects a sync from a broken cursor that never reaches the final page. */
|
|
32
|
+
export declare const FETCH_TOMBSTONES_MAX_PAGES = 1000;
|
|
31
33
|
/**
|
|
32
34
|
* The planners must not continue without a deletion-authority snapshot. This
|
|
33
35
|
* error deliberately retains the last transport/status cause so the runner can
|
|
@@ -37,6 +39,10 @@ export declare class TombstoneFetchError extends Error {
|
|
|
37
39
|
readonly attempts: number;
|
|
38
40
|
constructor(message: string, attempts: number, cause?: unknown);
|
|
39
41
|
}
|
|
42
|
+
/** The server rejected a cursor even after the client restarted from page one. */
|
|
43
|
+
export declare class TombstoneFullReconcileRequiredError extends TombstoneFetchError {
|
|
44
|
+
constructor(cause?: unknown);
|
|
45
|
+
}
|
|
40
46
|
/**
|
|
41
47
|
* A FILE_TOMBSTONE as the planners need it: the deleted key + when it was
|
|
42
48
|
* deleted. The `deletedAt` timestamp is the decisive precedence signal on the
|
|
@@ -52,10 +58,12 @@ export interface CompanyTombstone {
|
|
|
52
58
|
* server-resolved ownership selector: the client must never pass a `prs_*` UID
|
|
53
59
|
* through the company selector because that route requires company membership.
|
|
54
60
|
*/
|
|
55
|
-
export type TombstoneScope = {
|
|
61
|
+
export type TombstoneScope = ({
|
|
56
62
|
companyUid: string;
|
|
57
63
|
} | {
|
|
58
64
|
personal: true;
|
|
65
|
+
}) & {
|
|
66
|
+
prefix?: string;
|
|
59
67
|
};
|
|
60
68
|
/**
|
|
61
69
|
* Fetch one vault's FILE_TOMBSTONE rows from hq-pro
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tombstones.d.ts","sourceRoot":"","sources":["../../src/cli/tombstones.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"tombstones.d.ts","sourceRoot":"","sources":["../../src/cli/tombstones.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAetD;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAClD,wFAAwF;AACxF,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,eAAO,MAAM,gCAAgC,qBAAsB,CAAC;AACpE;;;;GAIG;AACH,eAAO,MAAM,uCAAuC,IAAI,CAAC;AACzD,8EAA8E;AAC9E,eAAO,MAAM,0BAA0B,OAAQ,CAAC;AAkChD;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAM/D;AAED,kFAAkF;AAClF,qBAAa,mCAAoC,SAAQ,mBAAmB;gBAC9D,KAAK,CAAC,EAAE,OAAO;CAQ5B;AA4JD;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjG;;;;;;;;;;;;;GAaG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,kBAAkB,EAC/B,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CA+GxC"}
|
package/dist/cli/tombstones.js
CHANGED
|
@@ -12,10 +12,16 @@
|
|
|
12
12
|
* (`isEphemeralPath`, `isMalformedVaultKey`), so the reverse value-import would
|
|
13
13
|
* create a runtime ESM cycle.
|
|
14
14
|
*/
|
|
15
|
+
import * as crypto from "node:crypto";
|
|
16
|
+
import * as fs from "node:fs";
|
|
17
|
+
import * as os from "node:os";
|
|
18
|
+
import * as path from "node:path";
|
|
15
19
|
import { toPosixKey } from "../s3.js";
|
|
16
20
|
import { accessTokenFingerprint } from "../cognito-auth.js";
|
|
21
|
+
import { withOperationLock } from "../operation-lock.js";
|
|
17
22
|
import { isTransientEntityHttpStatus, parseRetryAfterMs, } from "../context.js";
|
|
18
23
|
import { VaultAuthError } from "../vault-client.js";
|
|
24
|
+
import { fsyncWithCompatibility } from "../sync/fsync-compat.js";
|
|
19
25
|
/**
|
|
20
26
|
* Per-attempt deadline for FILE_TOMBSTONE reads. A vault can contain hundreds
|
|
21
27
|
* of thousands of tracked objects, so the old five-second whole request budget
|
|
@@ -31,6 +37,8 @@ export const FETCH_TOMBSTONES_RETRY_DELAYS_MS = [250, 750];
|
|
|
31
37
|
* `FETCH_TOMBSTONES_MAX_ATTEMPTS`.
|
|
32
38
|
*/
|
|
33
39
|
export const FETCH_TOMBSTONES_TRANSIENT_MAX_ATTEMPTS = 5;
|
|
40
|
+
/** Protects a sync from a broken cursor that never reaches the final page. */
|
|
41
|
+
export const FETCH_TOMBSTONES_MAX_PAGES = 1_000;
|
|
34
42
|
const FETCH_TOMBSTONES_TRANSIENT_BASE_DELAY_MS = 1_000;
|
|
35
43
|
const FETCH_TOMBSTONES_RETRY_AFTER_CAP_MS = 20_000;
|
|
36
44
|
const FETCH_TOMBSTONES_MAX_TOTAL_WAIT_MS = 30_000;
|
|
@@ -69,6 +77,147 @@ export class TombstoneFetchError extends Error {
|
|
|
69
77
|
this.cause = cause;
|
|
70
78
|
}
|
|
71
79
|
}
|
|
80
|
+
/** The server rejected a cursor even after the client restarted from page one. */
|
|
81
|
+
export class TombstoneFullReconcileRequiredError extends TombstoneFetchError {
|
|
82
|
+
constructor(cause) {
|
|
83
|
+
super("FILE_TOMBSTONE endpoint requires a full reconcile; refusing to sync without delete suppression", 1, cause);
|
|
84
|
+
this.name = "TombstoneFullReconcileRequiredError";
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const TOMBSTONE_CHECKPOINT_PREFIX = "tombstone-checkpoint.";
|
|
88
|
+
const TOMBSTONE_CHECKPOINT_SCHEMA_VERSION = 1;
|
|
89
|
+
function tombstoneScopeKey(base, scope, token) {
|
|
90
|
+
const selector = "personal" in scope ? "personal" : `company:${scope.companyUid}`;
|
|
91
|
+
const prefix = scope.prefix ?? "";
|
|
92
|
+
// The endpoint ACL-filters rows for the caller, so two members in one
|
|
93
|
+
// company must never resume each other's partially accumulated page set.
|
|
94
|
+
return `${base}\u0000${selector}\u0000${prefix}\u0000${accessTokenFingerprint(token)}`;
|
|
95
|
+
}
|
|
96
|
+
function tombstoneCheckpointPath(scopeKey) {
|
|
97
|
+
const digest = crypto.createHash("sha256").update(scopeKey).digest("hex").slice(0, 24);
|
|
98
|
+
const stateDir = process.env.HQ_STATE_DIR || path.join(os.homedir(), ".hq");
|
|
99
|
+
return path.join(stateDir, `${TOMBSTONE_CHECKPOINT_PREFIX}${digest}.json`);
|
|
100
|
+
}
|
|
101
|
+
function isCheckpoint(value) {
|
|
102
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
103
|
+
return false;
|
|
104
|
+
const candidate = value;
|
|
105
|
+
return candidate.schemaVersion === TOMBSTONE_CHECKPOINT_SCHEMA_VERSION &&
|
|
106
|
+
typeof candidate.cursor === "string" && candidate.cursor.length > 0 &&
|
|
107
|
+
Array.isArray(candidate.tombstones) && candidate.tombstones.every((entry) => Array.isArray(entry) && entry.length === 2 && typeof entry[0] === "string" &&
|
|
108
|
+
typeof entry[1] === "object" && entry[1] !== null &&
|
|
109
|
+
typeof entry[1].deletedAt === "string");
|
|
110
|
+
}
|
|
111
|
+
function clearTombstoneCheckpoint(checkpointPath) {
|
|
112
|
+
let removed = false;
|
|
113
|
+
try {
|
|
114
|
+
fs.unlinkSync(checkpointPath);
|
|
115
|
+
removed = true;
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
if (error.code !== "ENOENT")
|
|
119
|
+
throw error;
|
|
120
|
+
}
|
|
121
|
+
if (removed)
|
|
122
|
+
fsyncCheckpointDirectory(path.dirname(checkpointPath));
|
|
123
|
+
}
|
|
124
|
+
const WINDOWS_UNSUPPORTED_DIRECTORY_OPEN_CODES = new Set(["EPERM", "EISDIR", "EINVAL"]);
|
|
125
|
+
const loggedCheckpointDirectoryOpenSkips = new Set();
|
|
126
|
+
/**
|
|
127
|
+
* Persists the checkpoint rename/unlink by syncing its directory. Windows cannot
|
|
128
|
+
* open or fsync a directory handle the way POSIX can (EPERM), so on win32 only
|
|
129
|
+
* the unsupported directory codes are skipped with a logged warning. Every other
|
|
130
|
+
* platform and code still throws, as before.
|
|
131
|
+
*/
|
|
132
|
+
function fsyncCheckpointDirectory(dir) {
|
|
133
|
+
const platform = process.platform;
|
|
134
|
+
if (platform !== "win32") {
|
|
135
|
+
const dirFd = fs.openSync(dir, "r");
|
|
136
|
+
try {
|
|
137
|
+
fs.fsyncSync(dirFd);
|
|
138
|
+
}
|
|
139
|
+
finally {
|
|
140
|
+
fs.closeSync(dirFd);
|
|
141
|
+
}
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
let dirFd;
|
|
145
|
+
try {
|
|
146
|
+
dirFd = fs.openSync(dir, "r");
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
const code = error.code;
|
|
150
|
+
if (code === undefined || !WINDOWS_UNSUPPORTED_DIRECTORY_OPEN_CODES.has(code))
|
|
151
|
+
throw error;
|
|
152
|
+
if (!loggedCheckpointDirectoryOpenSkips.has(code)) {
|
|
153
|
+
loggedCheckpointDirectoryOpenSkips.add(code);
|
|
154
|
+
console.warn(`[hq-sync] fsync skipped at tombstone checkpoint directory on Windows: ${code} opening directory`);
|
|
155
|
+
}
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
try {
|
|
159
|
+
fsyncWithCompatibility(dirFd, { site: "tombstone checkpoint directory", handleKind: "directory", platform });
|
|
160
|
+
}
|
|
161
|
+
finally {
|
|
162
|
+
fs.closeSync(dirFd);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function loadTombstoneCheckpoint(checkpointPath) {
|
|
166
|
+
let contents;
|
|
167
|
+
try {
|
|
168
|
+
contents = fs.readFileSync(checkpointPath, "utf8");
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
if (error.code === "ENOENT")
|
|
172
|
+
return undefined;
|
|
173
|
+
throw error;
|
|
174
|
+
}
|
|
175
|
+
try {
|
|
176
|
+
const parsed = JSON.parse(contents);
|
|
177
|
+
if (isCheckpoint(parsed))
|
|
178
|
+
return parsed;
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
// Corrupt local progress is not deletion authority. Remove it and restart
|
|
182
|
+
// at page one so no partial map can be mistaken for a complete snapshot.
|
|
183
|
+
}
|
|
184
|
+
clearTombstoneCheckpoint(checkpointPath);
|
|
185
|
+
return undefined;
|
|
186
|
+
}
|
|
187
|
+
function saveTombstoneCheckpoint(checkpointPath, checkpoint) {
|
|
188
|
+
const dir = path.dirname(checkpointPath);
|
|
189
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
190
|
+
const temporaryPath = `${checkpointPath}.${process.pid}.${crypto.randomUUID()}.tmp`;
|
|
191
|
+
try {
|
|
192
|
+
const fd = fs.openSync(temporaryPath, "wx", 0o600);
|
|
193
|
+
try {
|
|
194
|
+
fs.writeFileSync(fd, `${JSON.stringify(checkpoint)}\n`, "utf8");
|
|
195
|
+
fs.fsyncSync(fd);
|
|
196
|
+
}
|
|
197
|
+
finally {
|
|
198
|
+
fs.closeSync(fd);
|
|
199
|
+
}
|
|
200
|
+
fs.renameSync(temporaryPath, checkpointPath);
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
// The rename did not happen, so the temporary file may still exist.
|
|
204
|
+
// Remove it, then surface the original write failure.
|
|
205
|
+
try {
|
|
206
|
+
fs.unlinkSync(temporaryPath);
|
|
207
|
+
}
|
|
208
|
+
catch (cleanupError) {
|
|
209
|
+
if (cleanupError.code !== "ENOENT") {
|
|
210
|
+
console.error(`[hq-sync] WARN could not remove temporary tombstone checkpoint ${temporaryPath}: ${String(cleanupError)}`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
throw error;
|
|
214
|
+
}
|
|
215
|
+
fsyncCheckpointDirectory(dir);
|
|
216
|
+
}
|
|
217
|
+
function isFullReconcileRequiredBody(body) {
|
|
218
|
+
return typeof body === "object" && body !== null &&
|
|
219
|
+
body.code === "FULL_RECONCILE_REQUIRED";
|
|
220
|
+
}
|
|
72
221
|
/**
|
|
73
222
|
* Fetch one vault's FILE_TOMBSTONE rows from hq-pro
|
|
74
223
|
* (GET /v1/files/tombstones) and return them as a POSIX-keyed map the planners
|
|
@@ -88,10 +237,94 @@ export async function fetchFileTombstones(vaultConfig, scope) {
|
|
|
88
237
|
? await vaultConfig.authToken()
|
|
89
238
|
: vaultConfig.authToken;
|
|
90
239
|
const base = vaultConfig.apiUrl.replace(/\/+$/, "");
|
|
91
|
-
const selector =
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
240
|
+
const selector = new URLSearchParams();
|
|
241
|
+
if ("personal" in scope)
|
|
242
|
+
selector.set("personal", "1");
|
|
243
|
+
else
|
|
244
|
+
selector.set("company", scope.companyUid);
|
|
245
|
+
if (scope.prefix)
|
|
246
|
+
selector.set("prefix", scope.prefix);
|
|
247
|
+
const scopeKey = tombstoneScopeKey(base, scope, token);
|
|
248
|
+
const checkpointPath = tombstoneCheckpointPath(scopeKey);
|
|
249
|
+
const stateDir = path.dirname(checkpointPath);
|
|
250
|
+
const scopeDigest = crypto.createHash("sha256").update(scopeKey).digest("hex").slice(0, 24);
|
|
251
|
+
return withOperationLock(stateDir, `tombstone-pagination:${scopeDigest}`, async () => {
|
|
252
|
+
let checkpoint = loadTombstoneCheckpoint(checkpointPath);
|
|
253
|
+
let fullRestartUsed = false;
|
|
254
|
+
let pagesAcrossRestarts = 0;
|
|
255
|
+
for (;;) {
|
|
256
|
+
const out = new Map(checkpoint?.tombstones ?? []);
|
|
257
|
+
let cursor = checkpoint?.cursor;
|
|
258
|
+
const seenCursors = new Set(cursor ? [cursor] : []);
|
|
259
|
+
let pagesFetched = 0;
|
|
260
|
+
try {
|
|
261
|
+
while (pagesFetched < FETCH_TOMBSTONES_MAX_PAGES) {
|
|
262
|
+
const params = new URLSearchParams(selector);
|
|
263
|
+
if (cursor)
|
|
264
|
+
params.set("cursor", cursor);
|
|
265
|
+
const url = `${base}/v1/files/tombstones?${params.toString()}`;
|
|
266
|
+
const body = await fetchTombstonePage(url, token);
|
|
267
|
+
pagesFetched += 1;
|
|
268
|
+
pagesAcrossRestarts += 1;
|
|
269
|
+
for (const tombstone of body.tombstones ?? []) {
|
|
270
|
+
if (typeof tombstone.key === "string" && typeof tombstone.deletedAt === "string") {
|
|
271
|
+
out.set(toPosixKey(tombstone.key), { deletedAt: tombstone.deletedAt });
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
const nextCursor = typeof body.cursor === "string" && body.cursor.length > 0
|
|
275
|
+
? body.cursor
|
|
276
|
+
: undefined;
|
|
277
|
+
const hasNextPage = body.truncated === true ||
|
|
278
|
+
(body.truncated === undefined && nextCursor !== undefined);
|
|
279
|
+
if (!hasNextPage) {
|
|
280
|
+
clearTombstoneCheckpoint(checkpointPath);
|
|
281
|
+
if (fullRestartUsed) {
|
|
282
|
+
console.error(`[hq-sync] INFO tombstone full reconcile complete; pages=${pagesAcrossRestarts} tombstones=${out.size}`);
|
|
283
|
+
}
|
|
284
|
+
return out;
|
|
285
|
+
}
|
|
286
|
+
if (!nextCursor) {
|
|
287
|
+
clearTombstoneCheckpoint(checkpointPath);
|
|
288
|
+
throw new TombstoneFetchError("FILE_TOMBSTONE response marked truncated without a cursor; refusing to sync without delete suppression", pagesFetched);
|
|
289
|
+
}
|
|
290
|
+
if (seenCursors.has(nextCursor)) {
|
|
291
|
+
clearTombstoneCheckpoint(checkpointPath);
|
|
292
|
+
throw new TombstoneFetchError("FILE_TOMBSTONE response repeated cursor; refusing to sync without delete suppression", pagesFetched);
|
|
293
|
+
}
|
|
294
|
+
seenCursors.add(nextCursor);
|
|
295
|
+
cursor = nextCursor;
|
|
296
|
+
checkpoint = {
|
|
297
|
+
schemaVersion: TOMBSTONE_CHECKPOINT_SCHEMA_VERSION,
|
|
298
|
+
cursor,
|
|
299
|
+
tombstones: Array.from(out.entries()),
|
|
300
|
+
};
|
|
301
|
+
saveTombstoneCheckpoint(checkpointPath, checkpoint);
|
|
302
|
+
}
|
|
303
|
+
throw new TombstoneFetchError(`FILE_TOMBSTONE pagination exceeded ${FETCH_TOMBSTONES_MAX_PAGES} pages; refusing to sync without delete suppression`, pagesFetched);
|
|
304
|
+
}
|
|
305
|
+
catch (error) {
|
|
306
|
+
if (!(error instanceof TombstoneFullReconcileRequiredError))
|
|
307
|
+
throw error;
|
|
308
|
+
clearTombstoneCheckpoint(checkpointPath);
|
|
309
|
+
if (!cursor || fullRestartUsed) {
|
|
310
|
+
console.error("[hq-sync] ERROR tombstone full reconcile could not obtain an authoritative snapshot; sync remains blocked");
|
|
311
|
+
throw error;
|
|
312
|
+
}
|
|
313
|
+
// A stale page cursor is not a complete deletion snapshot. Restart
|
|
314
|
+
// from page one, discard all rows accumulated under that cursor, and
|
|
315
|
+
// return only after the entire authoritative tombstone listing ends.
|
|
316
|
+
console.error("[hq-sync] WARN tombstone cursor was retired; starting a full tombstone reconcile before sync continues");
|
|
317
|
+
fullRestartUsed = true;
|
|
318
|
+
checkpoint = undefined;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}, {
|
|
322
|
+
scope: `tombstone-pagination-${scopeDigest}`,
|
|
323
|
+
onWaitStart: () => { },
|
|
324
|
+
required: true,
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
async function fetchTombstonePage(url, token) {
|
|
95
328
|
let lastError;
|
|
96
329
|
let lastStatus;
|
|
97
330
|
let waitedMs = 0;
|
|
@@ -108,30 +341,28 @@ export async function fetchFileTombstones(vaultConfig, scope) {
|
|
|
108
341
|
headers: { Authorization: `Bearer ${token}` },
|
|
109
342
|
signal: controller.signal,
|
|
110
343
|
});
|
|
111
|
-
// Keep this in the runner's typed auth boundary. Retrying a 401 with the
|
|
112
|
-
// same cached token cannot succeed, and wrapping it would prevent the
|
|
113
|
-
// runner from invalidating that token and prompting reauthentication.
|
|
114
344
|
if (res.status === 401) {
|
|
115
345
|
throw new VaultAuthError("tombstone fetch unauthorized", accessTokenFingerprint(token));
|
|
116
346
|
}
|
|
347
|
+
const responseBody = await res.json();
|
|
117
348
|
if (!res.ok) {
|
|
349
|
+
if (isFullReconcileRequiredBody(responseBody)) {
|
|
350
|
+
throw new TombstoneFullReconcileRequiredError(responseBody);
|
|
351
|
+
}
|
|
118
352
|
throw new Error(`tombstone endpoint returned HTTP ${res.status}`);
|
|
119
353
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
for (const t of body.tombstones ?? []) {
|
|
123
|
-
if (typeof t.key === "string" && typeof t.deletedAt === "string") {
|
|
124
|
-
out.set(toPosixKey(t.key), { deletedAt: t.deletedAt });
|
|
125
|
-
}
|
|
354
|
+
if (typeof responseBody !== "object" || responseBody === null || Array.isArray(responseBody)) {
|
|
355
|
+
throw new Error("tombstone endpoint returned an invalid response body");
|
|
126
356
|
}
|
|
127
|
-
return
|
|
357
|
+
return responseBody;
|
|
128
358
|
}
|
|
129
|
-
catch (
|
|
130
|
-
if (
|
|
131
|
-
throw
|
|
132
|
-
|
|
359
|
+
catch (error) {
|
|
360
|
+
if (error instanceof VaultAuthError || error instanceof TombstoneFullReconcileRequiredError) {
|
|
361
|
+
throw error;
|
|
362
|
+
}
|
|
363
|
+
lastError = error;
|
|
133
364
|
lastStatus = res && !res.ok ? res.status : undefined;
|
|
134
|
-
const message =
|
|
365
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
135
366
|
const transient = lastStatus !== undefined && isTransientEntityHttpStatus(lastStatus);
|
|
136
367
|
const maxAttempts = transient
|
|
137
368
|
? FETCH_TOMBSTONES_TRANSIENT_MAX_ATTEMPTS
|
|
@@ -143,28 +374,23 @@ export async function fetchFileTombstones(vaultConfig, scope) {
|
|
|
143
374
|
: (FETCH_TOMBSTONES_RETRY_DELAYS_MS[attempt - 1] ?? 0);
|
|
144
375
|
}
|
|
145
376
|
const detail = lastStatus !== undefined
|
|
146
|
-
? willRetry
|
|
147
|
-
|
|
148
|
-
: ` (${lastStatus})`
|
|
149
|
-
: willRetry
|
|
150
|
-
? ` (waiting ${waitMs}ms)`
|
|
151
|
-
: "";
|
|
377
|
+
? willRetry ? ` (${lastStatus}, waiting ${waitMs}ms)` : ` (${lastStatus})`
|
|
378
|
+
: willRetry ? ` (waiting ${waitMs}ms)` : "";
|
|
152
379
|
console.error(`[hq-sync] WARN tombstone fetch attempt ${attempt}/${maxAttempts} failed${detail}; ` +
|
|
153
380
|
`delete suppression remains blocked: ${message}`);
|
|
154
|
-
if (!willRetry)
|
|
155
|
-
|
|
381
|
+
if (!willRetry) {
|
|
382
|
+
const suffix = lastStatus !== undefined ? ` (last HTTP ${lastStatus})` : "";
|
|
383
|
+
throw new TombstoneFetchError(`FILE_TOMBSTONE fetch failed after ${attemptsMade} attempts; refusing to sync without delete suppression${suffix}`, attemptsMade, lastError);
|
|
384
|
+
}
|
|
156
385
|
}
|
|
157
386
|
finally {
|
|
158
387
|
clearTimeout(timer);
|
|
159
388
|
}
|
|
160
389
|
if (waitMs > 0) {
|
|
161
|
-
await new Promise((resolve) =>
|
|
162
|
-
setTimeout(resolve, waitMs);
|
|
163
|
-
});
|
|
390
|
+
await new Promise((resolve) => setTimeout(resolve, waitMs));
|
|
164
391
|
waitedMs += waitMs;
|
|
165
392
|
}
|
|
166
393
|
}
|
|
167
|
-
|
|
168
|
-
throw new TombstoneFetchError(`FILE_TOMBSTONE fetch failed after ${attemptsMade} attempts; refusing to sync without delete suppression${suffix}`, attemptsMade, lastError);
|
|
394
|
+
throw new TombstoneFetchError(`FILE_TOMBSTONE fetch failed after ${attemptsMade} attempts; refusing to sync without delete suppression`, attemptsMade, lastError);
|
|
169
395
|
}
|
|
170
396
|
//# sourceMappingURL=tombstones.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tombstones.js","sourceRoot":"","sources":["../../src/cli/tombstones.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tombstones.js","sourceRoot":"","sources":["../../src/cli/tombstones.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED