@indigoai-us/hq-cloud 6.15.0 → 6.15.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.
- package/dist/bin/sync-mutation.d.ts +16 -0
- package/dist/bin/sync-mutation.d.ts.map +1 -0
- package/dist/bin/sync-mutation.js +60 -0
- package/dist/bin/sync-mutation.js.map +1 -0
- package/dist/bin/sync-mutation.test.d.ts +2 -0
- package/dist/bin/sync-mutation.test.d.ts.map +1 -0
- package/dist/bin/sync-mutation.test.js +165 -0
- package/dist/bin/sync-mutation.test.js.map +1 -0
- package/dist/bin/sync-runner-company.d.ts +8 -0
- package/dist/bin/sync-runner-company.d.ts.map +1 -1
- package/dist/bin/sync-runner-company.js +16 -0
- package/dist/bin/sync-runner-company.js.map +1 -1
- package/dist/bin/sync-runner-company.test.d.ts +2 -0
- package/dist/bin/sync-runner-company.test.d.ts.map +1 -0
- package/dist/bin/sync-runner-company.test.js +36 -0
- package/dist/bin/sync-runner-company.test.js.map +1 -0
- package/dist/bin/sync-runner-watch-loop.d.ts.map +1 -1
- package/dist/bin/sync-runner-watch-loop.js +98 -8
- package/dist/bin/sync-runner-watch-loop.js.map +1 -1
- package/dist/bin/sync-runner.d.ts +17 -0
- package/dist/bin/sync-runner.d.ts.map +1 -1
- package/dist/bin/sync-runner.js.map +1 -1
- package/dist/bin/sync-runner.test.js +109 -0
- package/dist/bin/sync-runner.test.js.map +1 -1
- package/dist/cli/conflict-recovery.test.d.ts +2 -0
- package/dist/cli/conflict-recovery.test.d.ts.map +1 -0
- package/dist/cli/conflict-recovery.test.js +201 -0
- package/dist/cli/conflict-recovery.test.js.map +1 -0
- package/dist/cli/conflict.d.ts +60 -0
- package/dist/cli/conflict.d.ts.map +1 -1
- package/dist/cli/conflict.js +333 -0
- package/dist/cli/conflict.js.map +1 -1
- package/dist/cli/sync.d.ts +35 -0
- package/dist/cli/sync.d.ts.map +1 -1
- package/dist/cli/sync.js +100 -0
- package/dist/cli/sync.js.map +1 -1
- package/dist/cli/sync.test.js +85 -1
- package/dist/cli/sync.test.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/skill-telemetry.d.ts +6 -0
- package/dist/skill-telemetry.d.ts.map +1 -1
- package/dist/skill-telemetry.js +14 -2
- package/dist/skill-telemetry.js.map +1 -1
- package/dist/skill-telemetry.test.js +79 -0
- package/dist/skill-telemetry.test.js.map +1 -1
- package/dist/sync/candidate-uploader.d.ts +88 -0
- package/dist/sync/candidate-uploader.d.ts.map +1 -0
- package/dist/sync/candidate-uploader.js +212 -0
- package/dist/sync/candidate-uploader.js.map +1 -0
- package/dist/sync/candidate-uploader.test.d.ts +2 -0
- package/dist/sync/candidate-uploader.test.d.ts.map +1 -0
- package/dist/sync/candidate-uploader.test.js +132 -0
- package/dist/sync/candidate-uploader.test.js.map +1 -0
- package/dist/sync/delta-client.d.ts +73 -0
- package/dist/sync/delta-client.d.ts.map +1 -0
- package/dist/sync/delta-client.js +201 -0
- package/dist/sync/delta-client.js.map +1 -0
- package/dist/sync/delta-client.test.d.ts +2 -0
- package/dist/sync/delta-client.test.d.ts.map +1 -0
- package/dist/sync/delta-client.test.js +97 -0
- package/dist/sync/delta-client.test.js.map +1 -0
- package/dist/sync/durable-apply.d.ts +76 -0
- package/dist/sync/durable-apply.d.ts.map +1 -0
- package/dist/sync/durable-apply.js +530 -0
- package/dist/sync/durable-apply.js.map +1 -0
- package/dist/sync/durable-apply.test.d.ts +2 -0
- package/dist/sync/durable-apply.test.d.ts.map +1 -0
- package/dist/sync/durable-apply.test.js +180 -0
- package/dist/sync/durable-apply.test.js.map +1 -0
- package/dist/sync/event-sync.d.ts +33 -1
- package/dist/sync/event-sync.d.ts.map +1 -1
- package/dist/sync/event-sync.js +149 -1
- package/dist/sync/event-sync.js.map +1 -1
- package/dist/sync/event-sync.test.js +142 -1
- package/dist/sync/event-sync.test.js.map +1 -1
- package/dist/sync/index.d.ts +2 -0
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +1 -0
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/multipart-uploader.d.ts +99 -0
- package/dist/sync/multipart-uploader.d.ts.map +1 -0
- package/dist/sync/multipart-uploader.js +447 -0
- package/dist/sync/multipart-uploader.js.map +1 -0
- package/dist/sync/multipart-uploader.test.d.ts +2 -0
- package/dist/sync/multipart-uploader.test.d.ts.map +1 -0
- package/dist/sync/multipart-uploader.test.js +119 -0
- package/dist/sync/multipart-uploader.test.js.map +1 -0
- package/dist/sync/mutation-client.d.ts +85 -0
- package/dist/sync/mutation-client.d.ts.map +1 -0
- package/dist/sync/mutation-client.js +245 -0
- package/dist/sync/mutation-client.js.map +1 -0
- package/dist/sync/mutation-client.test.d.ts +2 -0
- package/dist/sync/mutation-client.test.d.ts.map +1 -0
- package/dist/sync/mutation-client.test.js +51 -0
- package/dist/sync/mutation-client.test.js.map +1 -0
- package/dist/sync/push-receiver.d.ts +45 -0
- package/dist/sync/push-receiver.d.ts.map +1 -1
- package/dist/sync/push-receiver.js +101 -0
- package/dist/sync/push-receiver.js.map +1 -1
- package/dist/sync/push-receiver.test.js +54 -2
- package/dist/sync/push-receiver.test.js.map +1 -1
- package/dist/sync/scope-inventory-client.d.ts +69 -0
- package/dist/sync/scope-inventory-client.d.ts.map +1 -0
- package/dist/sync/scope-inventory-client.js +210 -0
- package/dist/sync/scope-inventory-client.js.map +1 -0
- package/dist/sync/scope-inventory-client.test.d.ts +2 -0
- package/dist/sync/scope-inventory-client.test.d.ts.map +1 -0
- package/dist/sync/scope-inventory-client.test.js +94 -0
- package/dist/sync/scope-inventory-client.test.js.map +1 -0
- package/dist/sync/snapshot-client.d.ts +98 -0
- package/dist/sync/snapshot-client.d.ts.map +1 -0
- package/dist/sync/snapshot-client.js +402 -0
- package/dist/sync/snapshot-client.js.map +1 -0
- package/dist/sync/snapshot-client.test.d.ts +2 -0
- package/dist/sync/snapshot-client.test.d.ts.map +1 -0
- package/dist/sync/snapshot-client.test.js +169 -0
- package/dist/sync/snapshot-client.test.js.map +1 -0
- package/dist/sync/uploader-finalization.d.ts +97 -0
- package/dist/sync/uploader-finalization.d.ts.map +1 -0
- package/dist/sync/uploader-finalization.js +273 -0
- package/dist/sync/uploader-finalization.js.map +1 -0
- package/dist/sync/uploader-finalization.test.d.ts +2 -0
- package/dist/sync/uploader-finalization.test.d.ts.map +1 -0
- package/dist/sync/uploader-finalization.test.js +92 -0
- package/dist/sync/uploader-finalization.test.js.map +1 -0
- package/dist/telemetry.d.ts +11 -1
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +21 -2
- package/dist/telemetry.js.map +1 -1
- package/dist/telemetry.test.js +80 -0
- package/dist/telemetry.test.js.map +1 -1
- package/package.json +6 -1
- package/.claude/policies/hq-cloud-esm-cannot-spy-fs-builtins.md +0 -30
- package/.claude/policies/hq-cloud-strip-types-no-parameter-properties.md +0 -22
- package/.github/workflows/ci.yml +0 -84
- package/.github/workflows/publish.yml +0 -56
- package/.github/workflows/unreleased-commits-nag.yml +0 -256
- package/eslint.config.js +0 -67
- package/pnpm-workspace.yaml +0 -2
- package/scripts/presign-transport-e2e.mjs +0 -250
- package/scripts/vault-rebaseline.sh +0 -323
- package/scripts/vault-rescue.sh +0 -332
- package/src/active-company.test.ts +0 -188
- package/src/active-company.ts +0 -168
- package/src/agent-codex-instructions.test.ts +0 -332
- package/src/agent-codex-instructions.ts +0 -309
- package/src/auth.ts +0 -146
- package/src/backup-prune.test.ts +0 -98
- package/src/backup-prune.ts +0 -182
- package/src/bin/backup-prune-runner.ts +0 -33
- package/src/bin/rescue-runner.ts +0 -25
- package/src/bin/sync-runner-company.ts +0 -695
- package/src/bin/sync-runner-events.test.ts +0 -143
- package/src/bin/sync-runner-events.ts +0 -55
- package/src/bin/sync-runner-planning.test.ts +0 -311
- package/src/bin/sync-runner-planning.ts +0 -258
- package/src/bin/sync-runner-rollup.test.ts +0 -37
- package/src/bin/sync-runner-rollup.ts +0 -97
- package/src/bin/sync-runner-telemetry.ts +0 -15
- package/src/bin/sync-runner-watch-loop.ts +0 -1235
- package/src/bin/sync-runner-watch-routes.test.ts +0 -71
- package/src/bin/sync-runner-watch-routes.ts +0 -184
- package/src/bin/sync-runner.test.ts +0 -8767
- package/src/bin/sync-runner.ts +0 -2190
- package/src/cli/accept.ts +0 -124
- package/src/cli/conflict.ts +0 -119
- package/src/cli/doctor.test.ts +0 -581
- package/src/cli/doctor.ts +0 -642
- package/src/cli/index.ts +0 -49
- package/src/cli/invite.test.ts +0 -250
- package/src/cli/invite.ts +0 -214
- package/src/cli/promote.ts +0 -157
- package/src/cli/reindex-knowledge.test.ts +0 -307
- package/src/cli/reindex-knowledge.ts +0 -450
- package/src/cli/reindex.test.ts +0 -957
- package/src/cli/reindex.ts +0 -979
- package/src/cli/rescue-classify-ordering.test.ts +0 -548
- package/src/cli/rescue-clone-diagnostics.test.ts +0 -120
- package/src/cli/rescue-core.ts +0 -3011
- package/src/cli/rescue-drift-reconcile.test.ts +0 -179
- package/src/cli/rescue-drop-dir-symlink.test.ts +0 -224
- package/src/cli/rescue-exec-bit-preserve.test.ts +0 -187
- package/src/cli/rescue-hq-root-guard.test.ts +0 -232
- package/src/cli/rescue-journal-reconcile.test.ts +0 -215
- package/src/cli/rescue-mtime-preserve.test.ts +0 -203
- package/src/cli/rescue-settings-reconcile.test.ts +0 -637
- package/src/cli/rescue-snapshot.test.ts +0 -57
- package/src/cli/rescue-snapshot.ts +0 -51
- package/src/cli/rescue.reindex.test.ts +0 -63
- package/src/cli/rescue.test.ts +0 -131
- package/src/cli/rescue.ts +0 -182
- package/src/cli/share.test.ts +0 -7843
- package/src/cli/share.ts +0 -3663
- package/src/cli/sync-scope.test.ts +0 -652
- package/src/cli/sync.test.ts +0 -5207
- package/src/cli/sync.ts +0 -3470
- package/src/cli/tombstones.ts +0 -106
- package/src/cli/watch-event-push-conflict.test.ts +0 -234
- package/src/client-info.test.ts +0 -214
- package/src/client-info.ts +0 -121
- package/src/cognito-auth.test.ts +0 -712
- package/src/cognito-auth.ts +0 -1422
- package/src/company-resolver.test.ts +0 -618
- package/src/company-resolver.ts +0 -521
- package/src/context.test.ts +0 -583
- package/src/context.ts +0 -378
- package/src/daemon-worker.ts +0 -26
- package/src/daemon.ts +0 -99
- package/src/entity-resolver.test.ts +0 -315
- package/src/entity-resolver.ts +0 -180
- package/src/ignore.test.ts +0 -466
- package/src/ignore.ts +0 -469
- package/src/index.ts +0 -439
- package/src/journal.test.ts +0 -968
- package/src/journal.ts +0 -765
- package/src/lib/cloud-authoritative.test.ts +0 -45
- package/src/lib/cloud-authoritative.ts +0 -59
- package/src/lib/conflict-file.ts +0 -86
- package/src/lib/conflict-index.ts +0 -289
- package/src/lib/conflict.test.ts +0 -348
- package/src/lib/describe-error.test.ts +0 -100
- package/src/lib/describe-error.ts +0 -58
- package/src/lib/exit-codes.ts +0 -24
- package/src/lib/machine-id.test.ts +0 -231
- package/src/lib/machine-id.ts +0 -175
- package/src/lib/net-errors.test.ts +0 -65
- package/src/lib/net-errors.ts +0 -86
- package/src/lib/readlink-safe.test.ts +0 -43
- package/src/lib/readlink-safe.ts +0 -29
- package/src/local-path-codec.test.ts +0 -138
- package/src/local-path-codec.ts +0 -161
- package/src/machine-auth.test.ts +0 -1323
- package/src/manifest-reconcile.test.ts +0 -1123
- package/src/manifest-reconcile.ts +0 -518
- package/src/object-io.test.ts +0 -1221
- package/src/object-io.ts +0 -1306
- package/src/operation-lock.test.ts +0 -484
- package/src/operation-lock.ts +0 -680
- package/src/outcome-telemetry.test.ts +0 -498
- package/src/outcome-telemetry.ts +0 -639
- package/src/personal-vault-exclusions.test.ts +0 -308
- package/src/personal-vault-exclusions.ts +0 -354
- package/src/personal-vault.test.ts +0 -756
- package/src/personal-vault.ts +0 -496
- package/src/prefix-coalesce.test.ts +0 -240
- package/src/prefix-coalesce.ts +0 -273
- package/src/public-surface.test.ts +0 -117
- package/src/qmd-reindex.test.ts +0 -877
- package/src/qmd-reindex.ts +0 -842
- package/src/read-only-state-dir.test.ts +0 -188
- package/src/remote-pull.test.ts +0 -1130
- package/src/remote-pull.ts +0 -618
- package/src/s3.symlink-materialize.test.ts +0 -492
- package/src/s3.test.ts +0 -1789
- package/src/s3.ts +0 -1532
- package/src/schemas/signal-types.test.ts +0 -82
- package/src/schemas/signal-types.ts +0 -38
- package/src/schemas/source-channels.test.ts +0 -82
- package/src/schemas/source-channels.ts +0 -53
- package/src/scope-shrink.test.ts +0 -633
- package/src/scope-shrink.ts +0 -481
- package/src/signals/get.test.ts +0 -310
- package/src/signals/get.ts +0 -75
- package/src/signals/internals.ts +0 -195
- package/src/signals/list.test.ts +0 -420
- package/src/signals/list.ts +0 -79
- package/src/signals/parse.ts +0 -8
- package/src/signals/types.ts +0 -91
- package/src/skill-telemetry.test.ts +0 -1825
- package/src/skill-telemetry.ts +0 -1439
- package/src/sources/get.test.ts +0 -293
- package/src/sources/get.ts +0 -66
- package/src/sources/internals.ts +0 -198
- package/src/sources/list.test.ts +0 -402
- package/src/sources/list.ts +0 -84
- package/src/sources/parse.ts +0 -43
- package/src/sources/types.ts +0 -84
- package/src/sync/event-sync.test.ts +0 -594
- package/src/sync/event-sync.ts +0 -545
- package/src/sync/feature-flags.test.ts +0 -378
- package/src/sync/feature-flags.ts +0 -62
- package/src/sync/index.ts +0 -76
- package/src/sync/lease-client.test.ts +0 -128
- package/src/sync/lease-client.ts +0 -207
- package/src/sync/logger.test.ts +0 -242
- package/src/sync/logger.ts +0 -79
- package/src/sync/metrics.test.ts +0 -462
- package/src/sync/metrics.ts +0 -213
- package/src/sync/pull-scope.ts +0 -265
- package/src/sync/push-event.test.ts +0 -266
- package/src/sync/push-event.ts +0 -224
- package/src/sync/push-receiver.test.ts +0 -566
- package/src/sync/push-receiver.ts +0 -1048
- package/src/sync/push-transport.ts +0 -231
- package/src/sync/realtime-rollout.test.ts +0 -86
- package/src/sync/realtime-rollout.ts +0 -262
- package/src/sync/state-store.test.ts +0 -194
- package/src/sync/state-store.ts +0 -727
- package/src/sync-core.ts +0 -58
- package/src/sync-progress.test.ts +0 -94
- package/src/sync-progress.ts +0 -140
- package/src/telemetry-events.test.ts +0 -88
- package/src/telemetry-events.ts +0 -205
- package/src/telemetry.test.ts +0 -1280
- package/src/telemetry.ts +0 -1109
- package/src/types.ts +0 -314
- package/src/vault-client.test.ts +0 -1380
- package/src/vault-client.ts +0 -1694
- package/src/version.ts +0 -24
- package/src/watch-roots.test.ts +0 -278
- package/src/watch-roots.ts +0 -162
- package/src/watcher-event-gate.test.ts +0 -212
- package/src/watcher.test.ts +0 -1079
- package/src/watcher.ts +0 -1741
- package/test/e2e/sync/cross-tenant-isolation.test.ts +0 -630
- package/test/e2e/sync/skill-telemetry-oversized-transcript.test.ts +0 -124
- package/test/e2e/sync/transient-company-leg.test.ts +0 -384
- package/test/e2e/sync/windows-unreadable-link-leg.test.ts +0 -191
- package/test/e2e/watcher-real-chokidar.test.ts +0 -165
- package/test/e2e/watcher-recursive-backend.test.ts +0 -181
- package/test/e2e/watcher-scoped-coverage.test.ts +0 -381
- package/test/invite-flow.integration.test.ts +0 -244
- package/test/joiner-manifest-reconcile.integration.test.ts +0 -322
- package/test/share-sync.integration.test.ts +0 -213
- package/tsconfig.json +0 -19
- package/vitest.config.ts +0 -22
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multipart-uploader.test.js","sourceRoot":"","sources":["../../src/sync/multipart-uploader.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { CandidateUploader, type CandidateFetch, type CandidateTransportAuthorization } from "./candidate-uploader.js";
|
|
2
|
+
import { DurableAttemptSpool, MultipartUploader } from "./multipart-uploader.js";
|
|
3
|
+
export type MutationOperation = "upsert" | "delete";
|
|
4
|
+
export type MutationStatusName = "prepared" | "uploading" | "candidate-ready" | "ready" | "applying" | "committed" | "conflict" | "rejected" | "blocked";
|
|
5
|
+
export interface MutationSource {
|
|
6
|
+
kind: "regular" | "symlink";
|
|
7
|
+
mode: number;
|
|
8
|
+
sha256: `sha256:${string}`;
|
|
9
|
+
size: number;
|
|
10
|
+
}
|
|
11
|
+
/** Exact V2 prepare body; unknown fields are rejected by both client and API. */
|
|
12
|
+
export interface MutationRequest {
|
|
13
|
+
contractVersion: 2;
|
|
14
|
+
deviceId: string;
|
|
15
|
+
clientMutationId: string;
|
|
16
|
+
canonicalPath: string;
|
|
17
|
+
operation: MutationOperation;
|
|
18
|
+
baseVersionId: string | null;
|
|
19
|
+
generation: number;
|
|
20
|
+
membershipRevision: string;
|
|
21
|
+
scopeRevision: string;
|
|
22
|
+
source?: MutationSource;
|
|
23
|
+
}
|
|
24
|
+
export type MutationStatus = {
|
|
25
|
+
status: "prepared" | "uploading" | "candidate-ready" | "ready" | "applying";
|
|
26
|
+
attemptId: string;
|
|
27
|
+
} | {
|
|
28
|
+
status: "committed";
|
|
29
|
+
attemptId: string;
|
|
30
|
+
versionId: string | null;
|
|
31
|
+
deltaId: string;
|
|
32
|
+
} | {
|
|
33
|
+
status: "conflict";
|
|
34
|
+
attemptId: string;
|
|
35
|
+
code: "MUTATION_CONFLICT" | "CASE_COLLISION";
|
|
36
|
+
} | {
|
|
37
|
+
status: "rejected" | "blocked";
|
|
38
|
+
attemptId: string;
|
|
39
|
+
code: string;
|
|
40
|
+
};
|
|
41
|
+
export type MutationAuthorization = CandidateTransportAuthorization;
|
|
42
|
+
export interface MutationClientOptions {
|
|
43
|
+
apiUrl: string;
|
|
44
|
+
fetchImpl?: CandidateFetch;
|
|
45
|
+
now?: () => number;
|
|
46
|
+
authorizationTimeoutMs?: number;
|
|
47
|
+
candidateUploader?: Pick<CandidateUploader, "uploadSmall">;
|
|
48
|
+
multipartUploader?: Pick<MultipartUploader, "upload">;
|
|
49
|
+
}
|
|
50
|
+
export interface SubmitMutationInput {
|
|
51
|
+
authorization: MutationAuthorization;
|
|
52
|
+
request: MutationRequest;
|
|
53
|
+
/** Required for upserts and is the immutable bytes referenced by `source`. */
|
|
54
|
+
bytes?: Uint8Array;
|
|
55
|
+
/** Required only when an upsert is larger than the single-candidate limit. */
|
|
56
|
+
spool?: DurableAttemptSpool;
|
|
57
|
+
/** Private local directory for an attempt-ID-named spool created after prepare. */
|
|
58
|
+
spoolDirectory?: string;
|
|
59
|
+
/** Lets a caller detect source edits before multipart transfer. */
|
|
60
|
+
sourceChecksum?: () => Promise<`sha256:${string}`>;
|
|
61
|
+
}
|
|
62
|
+
export interface MutationSubmission {
|
|
63
|
+
requestDigest: string;
|
|
64
|
+
status: MutationStatus;
|
|
65
|
+
}
|
|
66
|
+
/** Shared digest algorithm with protocol-v2: RFC8785 key ordering + SHA-256. */
|
|
67
|
+
export declare function mutationRequestDigest(request: MutationRequest): string;
|
|
68
|
+
export declare class MutationClient {
|
|
69
|
+
private readonly apiUrl;
|
|
70
|
+
private readonly fetchImpl;
|
|
71
|
+
private readonly now;
|
|
72
|
+
private readonly timeoutMs;
|
|
73
|
+
private readonly candidate;
|
|
74
|
+
private readonly multipart;
|
|
75
|
+
constructor(options: MutationClientOptions);
|
|
76
|
+
submit(input: SubmitMutationInput): Promise<MutationSubmission>;
|
|
77
|
+
/** The sole recovery action after timeout/5xx/lost commit response. */
|
|
78
|
+
recover(authorization: MutationAuthorization, attemptId: string): Promise<MutationStatus>;
|
|
79
|
+
private prepare;
|
|
80
|
+
private createAttemptSpool;
|
|
81
|
+
private commit;
|
|
82
|
+
private control;
|
|
83
|
+
private assertAuthorization;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=mutation-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutation-client.d.ts","sourceRoot":"","sources":["../../src/sync/mutation-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authenticated mutation boundary for realtime vault sync v2.
|
|
3
|
+
*
|
|
4
|
+
* This is deliberately the only writer-side V2 seam. It receives a lease,
|
|
5
|
+
* talks exclusively to V2 control-plane routes, and delegates byte transfer to
|
|
6
|
+
* the candidate transports that only accept server-issued URLs. In particular,
|
|
7
|
+
* a lost response is recovered through GET status; it never replays a raw S3
|
|
8
|
+
* operation or downgrades to the V1 list/presign surface.
|
|
9
|
+
*/
|
|
10
|
+
import { createHash } from "node:crypto";
|
|
11
|
+
import * as fs from "node:fs";
|
|
12
|
+
import { CandidateUploader, MAX_SMALL_CANDIDATE_BYTES, } from "./candidate-uploader.js";
|
|
13
|
+
import { DurableAttemptSpool, MultipartUploader } from "./multipart-uploader.js";
|
|
14
|
+
const SHA256 = /^sha256:[a-f0-9]{64}$/;
|
|
15
|
+
const OPAQUE_ID = /^[A-Za-z0-9._~-]{1,512}$/;
|
|
16
|
+
function isRecord(value) {
|
|
17
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
18
|
+
}
|
|
19
|
+
function nonEmpty(value, label) {
|
|
20
|
+
if (typeof value !== "string" || value.trim() === "")
|
|
21
|
+
throw new Error(`realtime mutation: ${label} is required`);
|
|
22
|
+
return value;
|
|
23
|
+
}
|
|
24
|
+
function exactKeys(value, keys, label) {
|
|
25
|
+
if (Object.keys(value).some((key) => !keys.includes(key)))
|
|
26
|
+
throw new Error(`realtime mutation: ${label} contains an unknown field`);
|
|
27
|
+
}
|
|
28
|
+
function canonicalJson(value) {
|
|
29
|
+
if (value === null)
|
|
30
|
+
return "null";
|
|
31
|
+
if (typeof value === "boolean")
|
|
32
|
+
return value ? "true" : "false";
|
|
33
|
+
if (typeof value === "number") {
|
|
34
|
+
if (!Number.isFinite(value))
|
|
35
|
+
throw new Error("realtime mutation: digest only accepts finite JSON numbers");
|
|
36
|
+
return JSON.stringify(value);
|
|
37
|
+
}
|
|
38
|
+
if (typeof value === "string")
|
|
39
|
+
return JSON.stringify(value);
|
|
40
|
+
if (Array.isArray(value))
|
|
41
|
+
return `[${value.map(canonicalJson).join(",")}]`;
|
|
42
|
+
if (!isRecord(value) || Object.getPrototypeOf(value) !== Object.prototype) {
|
|
43
|
+
throw new Error("realtime mutation: digest only accepts JSON values");
|
|
44
|
+
}
|
|
45
|
+
return `{${Object.entries(value).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)
|
|
46
|
+
.map(([key, entry]) => `${JSON.stringify(key)}:${canonicalJson(entry)}`).join(",")}}`;
|
|
47
|
+
}
|
|
48
|
+
/** Shared digest algorithm with protocol-v2: RFC8785 key ordering + SHA-256. */
|
|
49
|
+
export function mutationRequestDigest(request) {
|
|
50
|
+
validateRequest(request);
|
|
51
|
+
const { source, ...withoutSource } = request;
|
|
52
|
+
return createHash("sha256").update(canonicalJson({
|
|
53
|
+
...withoutSource,
|
|
54
|
+
...(source === undefined ? {} : { source }),
|
|
55
|
+
}), "utf8").digest("hex");
|
|
56
|
+
}
|
|
57
|
+
function validateRequest(request) {
|
|
58
|
+
exactKeys(request, ["contractVersion", "deviceId", "clientMutationId", "canonicalPath", "operation", "baseVersionId", "generation", "membershipRevision", "scopeRevision", "source"], "prepare request");
|
|
59
|
+
if (request.contractVersion !== 2 || !OPAQUE_ID.test(request.clientMutationId) || !request.canonicalPath || request.canonicalPath.startsWith("/") || request.canonicalPath.startsWith(".hq-control/") || request.canonicalPath.endsWith("/") || request.canonicalPath.split("/").some((part) => !part || part === "." || part === "..") || (request.operation !== "upsert" && request.operation !== "delete") || (request.baseVersionId !== null && typeof request.baseVersionId !== "string") || !Number.isSafeInteger(request.generation) || request.generation < 0 || !request.membershipRevision || !request.scopeRevision || !request.deviceId) {
|
|
60
|
+
throw new Error("realtime mutation: prepare request is invalid");
|
|
61
|
+
}
|
|
62
|
+
if (request.operation === "delete") {
|
|
63
|
+
if (request.source !== undefined)
|
|
64
|
+
throw new Error("realtime mutation: delete cannot carry source metadata");
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const source = request.source;
|
|
68
|
+
if (!source || (source.kind !== "regular" && source.kind !== "symlink") || !Number.isSafeInteger(source.mode) || !Number.isSafeInteger(source.size) || source.size < 0 || !SHA256.test(source.sha256)) {
|
|
69
|
+
throw new Error("realtime mutation: upsert source metadata is invalid");
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function parseStatus(value) {
|
|
73
|
+
if (!isRecord(value) || typeof value.status !== "string" || typeof value.attemptId !== "string" || !OPAQUE_ID.test(value.attemptId)) {
|
|
74
|
+
throw new Error("realtime mutation: status response is invalid");
|
|
75
|
+
}
|
|
76
|
+
switch (value.status) {
|
|
77
|
+
case "prepared":
|
|
78
|
+
case "uploading":
|
|
79
|
+
case "candidate-ready":
|
|
80
|
+
case "ready":
|
|
81
|
+
case "applying":
|
|
82
|
+
exactKeys(value, ["status", "attemptId"], "in-flight status");
|
|
83
|
+
return { status: value.status, attemptId: value.attemptId };
|
|
84
|
+
case "committed":
|
|
85
|
+
exactKeys(value, ["status", "attemptId", "versionId", "deltaId"], "committed status");
|
|
86
|
+
if ((value.versionId !== null && typeof value.versionId !== "string") || typeof value.deltaId !== "string" || !value.deltaId)
|
|
87
|
+
throw new Error("realtime mutation: committed status is invalid");
|
|
88
|
+
return { status: "committed", attemptId: value.attemptId, versionId: value.versionId, deltaId: value.deltaId };
|
|
89
|
+
case "conflict":
|
|
90
|
+
exactKeys(value, ["status", "attemptId", "code"], "conflict status");
|
|
91
|
+
if (value.code !== "MUTATION_CONFLICT" && value.code !== "CASE_COLLISION")
|
|
92
|
+
throw new Error("realtime mutation: conflict status is invalid");
|
|
93
|
+
return { status: "conflict", attemptId: value.attemptId, code: value.code };
|
|
94
|
+
case "rejected":
|
|
95
|
+
case "blocked":
|
|
96
|
+
exactKeys(value, ["status", "attemptId", "code"], "terminal status");
|
|
97
|
+
return { status: value.status, attemptId: value.attemptId, code: nonEmpty(value.code, "status code") };
|
|
98
|
+
default:
|
|
99
|
+
throw new Error(`realtime mutation: unknown status ${value.status}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function isTerminal(status) {
|
|
103
|
+
return status.status === "committed" || status.status === "conflict" || status.status === "rejected" || status.status === "blocked";
|
|
104
|
+
}
|
|
105
|
+
export class MutationClient {
|
|
106
|
+
apiUrl;
|
|
107
|
+
fetchImpl;
|
|
108
|
+
now;
|
|
109
|
+
timeoutMs;
|
|
110
|
+
candidate;
|
|
111
|
+
multipart;
|
|
112
|
+
constructor(options) {
|
|
113
|
+
if (!options.apiUrl.trim())
|
|
114
|
+
throw new Error("realtime mutation: apiUrl is required");
|
|
115
|
+
this.apiUrl = options.apiUrl.replace(/\/+$/, "");
|
|
116
|
+
this.fetchImpl = options.fetchImpl ?? globalThis.fetch;
|
|
117
|
+
this.now = options.now ?? Date.now;
|
|
118
|
+
this.timeoutMs = options.authorizationTimeoutMs ?? 15_000;
|
|
119
|
+
if (!Number.isSafeInteger(this.timeoutMs) || this.timeoutMs < 1)
|
|
120
|
+
throw new Error("realtime mutation: authorizationTimeoutMs must be positive");
|
|
121
|
+
this.candidate = options.candidateUploader ?? new CandidateUploader({ apiUrl: this.apiUrl, fetchImpl: this.fetchImpl, now: this.now, authorizationTimeoutMs: this.timeoutMs });
|
|
122
|
+
this.multipart = options.multipartUploader ?? new MultipartUploader({ apiUrl: this.apiUrl, fetchImpl: this.fetchImpl, now: this.now, authorizationTimeoutMs: this.timeoutMs });
|
|
123
|
+
}
|
|
124
|
+
async submit(input) {
|
|
125
|
+
validateRequest(input.request);
|
|
126
|
+
this.assertAuthorization(input.authorization, input.request);
|
|
127
|
+
const digest = mutationRequestDigest(input.request);
|
|
128
|
+
const bytes = input.bytes;
|
|
129
|
+
// Verify the immutable source before prepare creates any durable server
|
|
130
|
+
// attempt. A caller with changed bytes must start a later generation.
|
|
131
|
+
if (input.request.operation === "upsert") {
|
|
132
|
+
if (!bytes)
|
|
133
|
+
throw new Error("realtime mutation: upsert requires immutable bytes");
|
|
134
|
+
if (input.request.source.size !== bytes.byteLength || input.request.source.sha256 !== checksum(bytes)) {
|
|
135
|
+
throw new Error("realtime mutation: upsert bytes do not match prepared source metadata");
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
const status = await this.prepare(input.authorization, input.request);
|
|
139
|
+
if (isTerminal(status) || input.request.operation === "delete") {
|
|
140
|
+
return { requestDigest: digest, status: input.request.operation === "delete" && !isTerminal(status) ? await this.commit(input.authorization, status.attemptId, digest, "delete", null) : status };
|
|
141
|
+
}
|
|
142
|
+
if (!bytes)
|
|
143
|
+
throw new Error("realtime mutation: upsert requires immutable bytes");
|
|
144
|
+
let candidateVersionId;
|
|
145
|
+
let createdSpool;
|
|
146
|
+
if (bytes.byteLength <= MAX_SMALL_CANDIDATE_BYTES) {
|
|
147
|
+
candidateVersionId = (await this.candidate.uploadSmall({ authorization: input.authorization, attemptId: status.attemptId, bytes })).candidateVersionId;
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
const spool = input.spool ?? this.createAttemptSpool(input.spoolDirectory, status.attemptId, bytes);
|
|
151
|
+
if (!input.spool)
|
|
152
|
+
createdSpool = spool;
|
|
153
|
+
if (!spool || spool.attemptId !== status.attemptId || spool.size !== bytes.byteLength || spool.sha256 !== checksum(bytes)) {
|
|
154
|
+
throw new Error("realtime mutation: large upsert requires its matching durable attempt spool");
|
|
155
|
+
}
|
|
156
|
+
candidateVersionId = (await this.multipart.upload({
|
|
157
|
+
authorization: input.authorization,
|
|
158
|
+
spool,
|
|
159
|
+
sourceChecksum: input.sourceChecksum ?? (async () => checksum(bytes)),
|
|
160
|
+
})).candidateVersionId;
|
|
161
|
+
}
|
|
162
|
+
const result = { requestDigest: digest, status: await this.commit(input.authorization, status.attemptId, digest, "upsert", candidateVersionId) };
|
|
163
|
+
if (createdSpool) {
|
|
164
|
+
try {
|
|
165
|
+
fs.unlinkSync(createdSpool.filePath);
|
|
166
|
+
}
|
|
167
|
+
catch { /* committed attempts need no spool; cleanup is best-effort */ }
|
|
168
|
+
}
|
|
169
|
+
return result;
|
|
170
|
+
}
|
|
171
|
+
/** The sole recovery action after timeout/5xx/lost commit response. */
|
|
172
|
+
async recover(authorization, attemptId) {
|
|
173
|
+
this.assertAuthorization(authorization);
|
|
174
|
+
return this.control(authorization, "GET", `/v2/sync/mutations/${encodeURIComponent(requireAttemptId(attemptId))}`, undefined, "status");
|
|
175
|
+
}
|
|
176
|
+
async prepare(authorization, request) {
|
|
177
|
+
return this.control(authorization, "POST", "/v2/sync/mutations/prepare", request, "prepare");
|
|
178
|
+
}
|
|
179
|
+
createAttemptSpool(directory, attemptId, bytes) {
|
|
180
|
+
if (directory === undefined)
|
|
181
|
+
return undefined;
|
|
182
|
+
if (typeof directory !== "string" || directory.trim() === "") {
|
|
183
|
+
throw new Error("realtime mutation: spool directory is invalid");
|
|
184
|
+
}
|
|
185
|
+
return DurableAttemptSpool.create(directory, attemptId, bytes);
|
|
186
|
+
}
|
|
187
|
+
async commit(authorization, attemptId, requestDigest, operation, candidateVersionId) {
|
|
188
|
+
return this.control(authorization, "POST", `/v2/sync/mutations/${encodeURIComponent(requireAttemptId(attemptId))}/commit`, operation === "delete" ? { requestDigest, operation } : { requestDigest, operation, candidateVersionId }, "commit");
|
|
189
|
+
}
|
|
190
|
+
async control(authorization, method, requestPath, body, label) {
|
|
191
|
+
this.assertAuthorization(authorization);
|
|
192
|
+
const controller = new AbortController();
|
|
193
|
+
const timer = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
194
|
+
let response;
|
|
195
|
+
try {
|
|
196
|
+
response = await this.fetchImpl(`${this.apiUrl}${requestPath}`, {
|
|
197
|
+
method,
|
|
198
|
+
headers: {
|
|
199
|
+
Authorization: `Bearer ${nonEmpty(authorization.bearer, "bearer")}`,
|
|
200
|
+
Accept: "application/json",
|
|
201
|
+
"X-HQ-Sync-Contract": "2",
|
|
202
|
+
"X-HQ-Device-ID": nonEmpty(authorization.deviceId, "deviceId"),
|
|
203
|
+
"X-HQ-Cloud-Version": nonEmpty(authorization.capabilityVector.hqCloud, "hqCloud version"),
|
|
204
|
+
"X-HQ-Desktop-Version": nonEmpty(authorization.capabilityVector.hqDesktop, "hqDesktop version"),
|
|
205
|
+
"X-HQ-Sync-Lease": nonEmpty(authorization.lease.lease, "lease"),
|
|
206
|
+
...(method === "POST" ? { "Content-Type": "application/json" } : {}),
|
|
207
|
+
},
|
|
208
|
+
...(method === "POST" ? { body: JSON.stringify(body) } : {}),
|
|
209
|
+
signal: controller.signal,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
throw new Error(`realtime mutation: ${label} request failed; recover with status: ${error instanceof Error ? error.message : String(error)}`);
|
|
214
|
+
}
|
|
215
|
+
finally {
|
|
216
|
+
clearTimeout(timer);
|
|
217
|
+
}
|
|
218
|
+
const text = await response.text().catch((error) => {
|
|
219
|
+
throw new Error(`realtime mutation: ${label} response unreadable; recover with status: ${error instanceof Error ? error.message : String(error)}`);
|
|
220
|
+
});
|
|
221
|
+
if (!response.ok)
|
|
222
|
+
throw new Error(`realtime mutation: ${label} failed (${response.status}); recover with status: ${text.slice(0, 300)}`);
|
|
223
|
+
try {
|
|
224
|
+
return parseStatus(JSON.parse(text));
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
throw new Error(`realtime mutation: ${label} response invalid; recover with status: ${error instanceof Error ? error.message : String(error)}`);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
assertAuthorization(authorization, request) {
|
|
231
|
+
if (Date.parse(authorization.lease.expiresAt) <= this.now())
|
|
232
|
+
throw new Error("realtime mutation: lease expired before guarded I/O");
|
|
233
|
+
if (request && request.deviceId !== authorization.deviceId)
|
|
234
|
+
throw new Error("realtime mutation: request device does not match lease device");
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
function checksum(bytes) {
|
|
238
|
+
return `sha256:${createHash("sha256").update(bytes).digest("hex")}`;
|
|
239
|
+
}
|
|
240
|
+
function requireAttemptId(value) {
|
|
241
|
+
if (!OPAQUE_ID.test(value))
|
|
242
|
+
throw new Error("realtime mutation: attemptId is invalid");
|
|
243
|
+
return value;
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=mutation-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutation-client.js","sourceRoot":"","sources":["../../src/sync/mutation-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutation-client.test.d.ts","sourceRoot":"","sources":["../../src/sync/mutation-client.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { MutationClient, mutationRequestDigest } from "./mutation-client.js";
|
|
3
|
+
const now = Date.parse("2026-08-13T00:00:00.000Z");
|
|
4
|
+
const authorization = {
|
|
5
|
+
bearer: "access-token", deviceId: "device_a",
|
|
6
|
+
capabilityVector: { hqCloud: "6.14.50", hqDesktop: "none", protocol: 2, journal: 3, durableApply: 2 },
|
|
7
|
+
lease: { lease: "lease_1", issuedAt: "2026-08-13T00:00:00.000Z", expiresAt: "2026-08-13T00:01:00.000Z", authorizationEpoch: "epoch_1" },
|
|
8
|
+
};
|
|
9
|
+
const request = {
|
|
10
|
+
contractVersion: 2, deviceId: "device_a", clientMutationId: "mutation_1", canonicalPath: "notes/a.md", operation: "upsert", baseVersionId: null, generation: 7, membershipRevision: "member_1", scopeRevision: "scope_1",
|
|
11
|
+
source: { kind: "regular", mode: 0o644, sha256: "sha256:9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", size: 4 },
|
|
12
|
+
};
|
|
13
|
+
function response(status, body) {
|
|
14
|
+
return { ok: status >= 200 && status < 300, status, headers: { get: () => null }, body: null, text: async () => typeof body === "string" ? body : JSON.stringify(body) };
|
|
15
|
+
}
|
|
16
|
+
describe("MutationClient", () => {
|
|
17
|
+
it("prepares, uploads through the exact candidate seam, then commits using the RFC8785 digest", async () => {
|
|
18
|
+
const fetchImpl = vi.fn()
|
|
19
|
+
.mockResolvedValueOnce(response(201, { status: "prepared", attemptId: "attempt_1" }))
|
|
20
|
+
.mockResolvedValueOnce(response(202, { status: "ready", attemptId: "attempt_1" }));
|
|
21
|
+
const uploadSmall = vi.fn().mockResolvedValue({ candidateVersionId: "candidate_1", sha256: request.source.sha256, size: 4 });
|
|
22
|
+
const client = new MutationClient({ apiUrl: "https://api.example.test", fetchImpl, now: () => now, candidateUploader: { uploadSmall }, multipartUploader: { upload: vi.fn() } });
|
|
23
|
+
await expect(client.submit({ authorization, request, bytes: Buffer.from("test") })).resolves.toEqual({ requestDigest: mutationRequestDigest(request), status: { status: "ready", attemptId: "attempt_1" } });
|
|
24
|
+
expect(uploadSmall).toHaveBeenCalledWith({ authorization, attemptId: "attempt_1", bytes: Buffer.from("test") });
|
|
25
|
+
expect(fetchImpl.mock.calls[0]?.[0]).toBe("https://api.example.test/v2/sync/mutations/prepare");
|
|
26
|
+
expect(fetchImpl.mock.calls[0]?.[1]).toMatchObject({ method: "POST", headers: expect.objectContaining({ Authorization: "Bearer access-token", "X-HQ-Sync-Contract": "2", "X-HQ-Sync-Lease": "lease_1" }) });
|
|
27
|
+
expect(fetchImpl.mock.calls[1]?.[0]).toBe("https://api.example.test/v2/sync/mutations/attempt_1/commit");
|
|
28
|
+
expect(JSON.parse(fetchImpl.mock.calls[1]?.[1]?.body)).toEqual({ requestDigest: mutationRequestDigest(request), operation: "upsert", candidateVersionId: "candidate_1" });
|
|
29
|
+
});
|
|
30
|
+
it("commits deletes with no candidate transfer", async () => {
|
|
31
|
+
const fetchImpl = vi.fn().mockResolvedValueOnce(response(201, { status: "prepared", attemptId: "attempt_delete" })).mockResolvedValueOnce(response(202, { status: "ready", attemptId: "attempt_delete" }));
|
|
32
|
+
const client = new MutationClient({ apiUrl: "https://api.example.test", fetchImpl, now: () => now, candidateUploader: { uploadSmall: vi.fn() }, multipartUploader: { upload: vi.fn() } });
|
|
33
|
+
const deletion = { ...request, operation: "delete", source: undefined, clientMutationId: "mutation_delete" };
|
|
34
|
+
await expect(client.submit({ authorization, request: deletion })).resolves.toMatchObject({ status: { status: "ready", attemptId: "attempt_delete" } });
|
|
35
|
+
expect(JSON.parse(fetchImpl.mock.calls[1]?.[1]?.body)).toEqual({ requestDigest: mutationRequestDigest(deletion), operation: "delete" });
|
|
36
|
+
});
|
|
37
|
+
it("uses status recovery after a lost response and never invokes a V1/raw API", async () => {
|
|
38
|
+
const fetchImpl = vi.fn().mockResolvedValueOnce(response(200, { status: "committed", attemptId: "attempt_1", versionId: "version_1", deltaId: "delta_1" }));
|
|
39
|
+
const client = new MutationClient({ apiUrl: "https://api.example.test", fetchImpl, now: () => now });
|
|
40
|
+
await expect(client.recover(authorization, "attempt_1")).resolves.toEqual({ status: "committed", attemptId: "attempt_1", versionId: "version_1", deltaId: "delta_1" });
|
|
41
|
+
expect(fetchImpl).toHaveBeenCalledWith("https://api.example.test/v2/sync/mutations/attempt_1", expect.objectContaining({ method: "GET" }));
|
|
42
|
+
expect(fetchImpl.mock.calls.map(([url]) => url)).not.toContain(expect.stringContaining("/v1/"));
|
|
43
|
+
});
|
|
44
|
+
it("rejects bytes that differ from the immutable source metadata before transfer", async () => {
|
|
45
|
+
const fetchImpl = vi.fn();
|
|
46
|
+
const client = new MutationClient({ apiUrl: "https://api.example.test", fetchImpl, now: () => now });
|
|
47
|
+
await expect(client.submit({ authorization, request, bytes: Buffer.from("nope") })).rejects.toThrow("bytes do not match");
|
|
48
|
+
expect(fetchImpl).not.toHaveBeenCalled();
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
//# sourceMappingURL=mutation-client.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutation-client.test.js","sourceRoot":"","sources":["../../src/sync/mutation-client.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -202,6 +202,51 @@ export interface PushReceiver {
|
|
|
202
202
|
/** Advisory: is the subscription currently believed to be open? */
|
|
203
203
|
readonly connected: boolean;
|
|
204
204
|
}
|
|
205
|
+
/**
|
|
206
|
+
* V2 delivery is deliberately not a `PushEvent`: paths, hashes, versions, and
|
|
207
|
+
* device identifiers are not allowed in a wake. The opaque cursor is a hint
|
|
208
|
+
* only; the fixed-high-water delta reader remains the correctness source.
|
|
209
|
+
*/
|
|
210
|
+
export interface RealtimeWake {
|
|
211
|
+
readonly contractVersion: 2;
|
|
212
|
+
readonly eventType: "vault.changed";
|
|
213
|
+
readonly scopeHandle: string;
|
|
214
|
+
readonly cursor: string;
|
|
215
|
+
}
|
|
216
|
+
/** Strict wire decoder for the normative v2 delivery envelope. */
|
|
217
|
+
export declare function decodeRealtimeWake(raw: string): RealtimeWake;
|
|
218
|
+
/**
|
|
219
|
+
* Narrow delivery source for the v2 receiver. Server delivery owns the SQS
|
|
220
|
+
* subscription and credentials; this client seam deliberately has no route
|
|
221
|
+
* that can mint them. A source must stop delivering after `dispose`.
|
|
222
|
+
*/
|
|
223
|
+
export interface RealtimeWakeSource {
|
|
224
|
+
start(onMessage: (raw: string) => void): Promise<void> | void;
|
|
225
|
+
dispose(): Promise<void> | void;
|
|
226
|
+
}
|
|
227
|
+
export interface RealtimeWakeReceiverOptions {
|
|
228
|
+
source: RealtimeWakeSource;
|
|
229
|
+
onWake: (wake: RealtimeWake) => void;
|
|
230
|
+
logger?: ReceiverLogger;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Identity-bound v2 delivery receiver. It never compares wake cursors or
|
|
234
|
+
* dispatches a path operation: every syntactically valid wake means exactly
|
|
235
|
+
* the same thing, namely set the scope's drain bit. Invalid deliveries are
|
|
236
|
+
* named diagnostics with no identifiers logged.
|
|
237
|
+
*/
|
|
238
|
+
export declare class RealtimeWakeReceiver implements PushReceiver {
|
|
239
|
+
private readonly source;
|
|
240
|
+
private readonly onWake;
|
|
241
|
+
private readonly logger;
|
|
242
|
+
private _connected;
|
|
243
|
+
private disposed;
|
|
244
|
+
private disposePromise;
|
|
245
|
+
constructor(options: RealtimeWakeReceiverOptions);
|
|
246
|
+
get connected(): boolean;
|
|
247
|
+
start(): Promise<void>;
|
|
248
|
+
dispose(): Promise<void>;
|
|
249
|
+
}
|
|
205
250
|
/**
|
|
206
251
|
* Default `PushReceiver` used when no real queue is wired (or the flag is OFF
|
|
207
252
|
* at the factory). `start()` flips `connected` true; `dispose()` flips it
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push-receiver.d.ts","sourceRoot":"","sources":["../../src/sync/push-receiver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"push-receiver.d.ts","sourceRoot":"","sources":["../../src/sync/push-receiver.ts"],"names":[],"mappings":"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"}
|