@indigoai-us/hq-cloud 5.1.9 → 5.1.11

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 (48) hide show
  1. package/dist/auth.js +2 -2
  2. package/dist/auth.js.map +1 -1
  3. package/dist/bin/sync-runner.d.ts +28 -0
  4. package/dist/bin/sync-runner.d.ts.map +1 -1
  5. package/dist/bin/sync-runner.js +101 -34
  6. package/dist/bin/sync-runner.js.map +1 -1
  7. package/dist/bin/sync-runner.test.js +194 -1
  8. package/dist/bin/sync-runner.test.js.map +1 -1
  9. package/dist/cli/accept.js +2 -2
  10. package/dist/cli/accept.js.map +1 -1
  11. package/dist/cli/share.d.ts +18 -0
  12. package/dist/cli/share.d.ts.map +1 -1
  13. package/dist/cli/share.js +71 -14
  14. package/dist/cli/share.js.map +1 -1
  15. package/dist/cli/share.test.js +167 -13
  16. package/dist/cli/share.test.js.map +1 -1
  17. package/dist/cli/sync.d.ts.map +1 -1
  18. package/dist/cli/sync.js +6 -1
  19. package/dist/cli/sync.js.map +1 -1
  20. package/dist/cli/sync.test.js +31 -12
  21. package/dist/cli/sync.test.js.map +1 -1
  22. package/dist/cognito-auth.d.ts +13 -2
  23. package/dist/cognito-auth.d.ts.map +1 -1
  24. package/dist/cognito-auth.js +18 -9
  25. package/dist/cognito-auth.js.map +1 -1
  26. package/dist/cognito-auth.test.d.ts +3 -3
  27. package/dist/cognito-auth.test.js +21 -10
  28. package/dist/cognito-auth.test.js.map +1 -1
  29. package/dist/vault-client.d.ts +1 -0
  30. package/dist/vault-client.d.ts.map +1 -1
  31. package/dist/vault-client.js +9 -2
  32. package/dist/vault-client.js.map +1 -1
  33. package/dist/vault-client.test.js +46 -0
  34. package/dist/vault-client.test.js.map +1 -1
  35. package/package.json +1 -1
  36. package/src/auth.ts +2 -2
  37. package/src/bin/sync-runner.test.ts +256 -1
  38. package/src/bin/sync-runner.ts +138 -34
  39. package/src/cli/accept.ts +2 -2
  40. package/src/cli/share.test.ts +201 -13
  41. package/src/cli/share.ts +91 -15
  42. package/src/cli/sync.test.ts +33 -12
  43. package/src/cli/sync.ts +6 -1
  44. package/src/cognito-auth.test.ts +22 -14
  45. package/src/cognito-auth.ts +31 -11
  46. package/src/vault-client.test.ts +60 -0
  47. package/src/vault-client.ts +8 -1
  48. package/test/invite-flow.integration.test.ts +1 -1
package/dist/auth.js CHANGED
@@ -6,7 +6,7 @@ import * as fs from "fs";
6
6
  import * as path from "path";
7
7
  import * as http from "http";
8
8
  import open from "open";
9
- const AUTH_URL = "https://hq.indigoai.com/auth";
9
+ const AUTH_URL = "https://example.com/auth";
10
10
  const CALLBACK_PORT = 19847;
11
11
  const CREDS_DIR = path.join(process.env.HOME || process.env.USERPROFILE || "~", ".hq");
12
12
  const CREDS_FILE = path.join(CREDS_DIR, "credentials.json");
@@ -94,7 +94,7 @@ export async function authenticate() {
94
94
  * Refresh temporary AWS credentials using refresh token
95
95
  */
96
96
  export async function refreshAwsCredentials(creds) {
97
- const response = await fetch("https://hq.indigoai.com/api/auth/refresh", {
97
+ const response = await fetch("https://example.com/api/auth/refresh", {
98
98
  method: "POST",
99
99
  headers: { "Content-Type": "application/json" },
100
100
  body: JSON.stringify({ refreshToken: creds.refreshToken }),
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,20 @@
33
33
  */
34
34
  import { type VaultServiceConfig, type Membership, type EntityInfo, type PendingInviteByEmail } from "../index.js";
35
35
  import type { SyncOptions, SyncResult, SyncProgressEvent } from "../cli/sync.js";
36
+ import type { ShareOptions, ShareResult } from "../cli/share.js";
37
+ /**
38
+ * Sync direction for a run.
39
+ *
40
+ * - `pull`: download-only (legacy `hq sync` behaviour, and the default for
41
+ * back-compat with pre-5.1.11 callers of the runner).
42
+ * - `push`: upload-only. Walks the company folder and sends every file whose
43
+ * local hash differs from the journal (skipUnchanged).
44
+ * - `both`: push first, then pull. "Sync Now" in the menubar app targets this.
45
+ * Push runs first so the subsequent pull doesn't redownload files we were
46
+ * about to replace; if a company aborts on push conflict, pull is skipped
47
+ * for that company but the fanout continues.
48
+ */
49
+ export type Direction = "pull" | "push" | "both";
36
50
  /**
37
51
  * Every event emitted on stdout. The `company` field is present on every
38
52
  * event except `setup-needed` / `auth-error` / `fanout-plan` / `all-complete`
@@ -64,11 +78,23 @@ export type RunnerEvent = {
64
78
  }>, "type">) | ({
65
79
  type: "complete";
66
80
  company: string;
81
+ /**
82
+ * Upload counters. Always emitted (0 when the run was pull-only) so
83
+ * downstream consumers don't need to conditionally read the field.
84
+ * Tauri's `SyncCompleteEvent` ignores extra fields today; adding them
85
+ * to the Rust struct is a follow-up when the UI needs to surface push
86
+ * totals.
87
+ */
88
+ filesUploaded: number;
89
+ bytesUploaded: number;
67
90
  } & SyncResult) | {
68
91
  type: "all-complete";
69
92
  companiesAttempted: number;
70
93
  filesDownloaded: number;
71
94
  bytesDownloaded: number;
95
+ /** Always emitted; 0 when no push phase ran. */
96
+ filesUploaded: number;
97
+ bytesUploaded: number;
72
98
  errors: Array<{
73
99
  company: string;
74
100
  message: string;
@@ -128,6 +154,8 @@ export interface RunnerDeps {
128
154
  createVaultClient?: (config: VaultServiceConfig) => VaultClientSurface;
129
155
  /** Sync function. Defaults to `cli/sync.sync`. */
130
156
  sync?: (options: SyncOptions) => Promise<SyncResult>;
157
+ /** Share function (push phase). Defaults to `cli/share.share`. */
158
+ share?: (options: ShareOptions) => Promise<ShareResult>;
131
159
  }
132
160
  export declare function runRunner(argv: string[], deps?: RunnerDeps): Promise<number>;
133
161
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"sync-runner.d.ts","sourceRoot":"","sources":["../../src/bin/sync-runner.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAMH,OAAO,EAOL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,oBAAoB,EAC1B,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AA6BxB;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACvC;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChE,GACD,CAAC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GACxG,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GACnG,CAAC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,CAAC,GACpD;IACE,IAAI,EAAE,cAAc,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrD,CAAC;AAEN;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,EAAE,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC/C,2BAA2B,EAAE,MAAM,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACnE,0BAA0B,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,oBAAoB,EAAE,CAAC,KAAK,EAAE;QAC5B,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;KACrB,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1B,MAAM,EAAE;QACN,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;KAC3C,CAAC;CACH;AAED,mEAAmE;AACnE,UAAU,aAAa;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,kEAAkE;IAClE,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAAA;KAAE,CAAC;IACtD,gEAAgE;IAChE,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAAA;KAAE,CAAC;IACtD,uFAAuF;IACvF,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,aAAa,GAAG,IAAI,CAAC;IAC9C;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,kBAAkB,CAAC;IACvE,kDAAkD;IAClD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CACtD;AAuID,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,GAAE,UAAe,GACpB,OAAO,CAAC,MAAM,CAAC,CAmKjB"}
1
+ {"version":3,"file":"sync-runner.d.ts","sourceRoot":"","sources":["../../src/bin/sync-runner.ts"],"names":[],"mappings":"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"}
@@ -37,6 +37,7 @@ import * as fs from "fs";
37
37
  import { fileURLToPath } from "url";
38
38
  import { getValidAccessToken, loadCachedTokens, VaultClient, VaultAuthError, } from "../index.js";
39
39
  import { sync as defaultSync } from "../cli/sync.js";
40
+ import { share as defaultShare } from "../cli/share.js";
40
41
  // ---------------------------------------------------------------------------
41
42
  // Defaults — mirror `hq-cli/src/utils/cognito-session.ts`. Inlined (not
42
43
  // imported) to avoid a circular dep between hq-cli and hq-cloud. If these
@@ -121,6 +122,7 @@ function parseArgs(argv) {
121
122
  let company;
122
123
  let onConflict = "abort";
123
124
  let hqRoot = DEFAULT_HQ_ROOT;
125
+ let direction = "pull";
124
126
  for (let i = 0; i < argv.length; i++) {
125
127
  const arg = argv[i];
126
128
  switch (arg) {
@@ -142,6 +144,16 @@ function parseArgs(argv) {
142
144
  onConflict = val;
143
145
  break;
144
146
  }
147
+ case "--direction": {
148
+ const val = argv[++i];
149
+ if (val !== "pull" && val !== "push" && val !== "both") {
150
+ return {
151
+ error: `--direction must be one of pull|push|both, got: ${val ?? "(missing)"}`,
152
+ };
153
+ }
154
+ direction = val;
155
+ break;
156
+ }
145
157
  case "--hq-root":
146
158
  hqRoot = argv[++i];
147
159
  if (!hqRoot)
@@ -160,7 +172,7 @@ function parseArgs(argv) {
160
172
  if (!companies && !company) {
161
173
  return { error: "Pass --companies or --company <slug>" };
162
174
  }
163
- return { companies, company, onConflict, hqRoot };
175
+ return { companies, company, onConflict, hqRoot, direction };
164
176
  }
165
177
  // ---------------------------------------------------------------------------
166
178
  // runRunner — testable entrypoint
@@ -265,42 +277,95 @@ export async function runRunner(argv, deps = {}) {
265
277
  emit({ type: "fanout-plan", companies: plan });
266
278
  // ---- fanout -----------------------------------------------------------
267
279
  const syncFn = deps.sync ?? defaultSync;
268
- let totalFiles = 0;
269
- let totalBytes = 0;
280
+ const shareFn = deps.share ?? defaultShare;
281
+ const doPush = parsed.direction === "push" || parsed.direction === "both";
282
+ const doPull = parsed.direction === "pull" || parsed.direction === "both";
283
+ let totalDownloaded = 0;
284
+ let totalDownloadedBytes = 0;
285
+ let totalUploaded = 0;
286
+ let totalUploadedBytes = 0;
270
287
  const errors = [];
271
288
  for (const target of plan) {
272
289
  const companyLabel = target.slug;
290
+ // Per-company event tagger — shared by push and pull phases so progress
291
+ // rows land on the right company regardless of which phase emitted them.
292
+ const tagAndEmit = (event) => {
293
+ if (event.type === "progress") {
294
+ emit({
295
+ type: "progress",
296
+ company: companyLabel,
297
+ path: event.path,
298
+ bytes: event.bytes,
299
+ ...(event.message ? { message: event.message } : {}),
300
+ });
301
+ }
302
+ else {
303
+ emit({
304
+ type: "error",
305
+ company: companyLabel,
306
+ path: event.path,
307
+ message: event.message,
308
+ });
309
+ }
310
+ };
273
311
  try {
274
- const result = await syncFn({
275
- company: target.uid,
276
- vaultConfig,
277
- hqRoot: parsed.hqRoot,
278
- onConflict: parsed.onConflict,
279
- onEvent: (event) => {
280
- // Tag per-file events with the company they belong to so the
281
- // menubar can route them to the right company's progress bar.
282
- if (event.type === "progress") {
283
- emit({
284
- type: "progress",
285
- company: companyLabel,
286
- path: event.path,
287
- bytes: event.bytes,
288
- ...(event.message ? { message: event.message } : {}),
289
- });
290
- }
291
- else {
292
- emit({
293
- type: "error",
294
- company: companyLabel,
295
- path: event.path,
296
- message: event.message,
297
- });
298
- }
299
- },
312
+ let pushResult = {
313
+ filesUploaded: 0,
314
+ bytesUploaded: 0,
315
+ filesSkipped: 0,
316
+ aborted: false,
317
+ };
318
+ let pullResult = {
319
+ filesDownloaded: 0,
320
+ bytesDownloaded: 0,
321
+ filesSkipped: 0,
322
+ conflicts: 0,
323
+ aborted: false,
324
+ };
325
+ // Push first so a subsequent pull doesn't overwrite files we were about
326
+ // to broadcast. Uses the walk-everything-under-companies/{slug}/ entry
327
+ // point with `skipUnchanged` so we don't re-upload files that haven't
328
+ // changed since the last sync.
329
+ if (doPush) {
330
+ pushResult = await shareFn({
331
+ paths: [path.join(parsed.hqRoot, "companies", target.slug)],
332
+ company: target.uid,
333
+ vaultConfig,
334
+ hqRoot: parsed.hqRoot,
335
+ onConflict: parsed.onConflict,
336
+ skipUnchanged: true,
337
+ onEvent: tagAndEmit,
338
+ });
339
+ }
340
+ // Pull runs unless the push phase aborted on conflict — aborted means
341
+ // the user has local edits + remote drift; blindly pulling would erase
342
+ // whichever side `--on-conflict abort` just protected.
343
+ if (doPull && !pushResult.aborted) {
344
+ pullResult = await syncFn({
345
+ company: target.uid,
346
+ vaultConfig,
347
+ hqRoot: parsed.hqRoot,
348
+ onConflict: parsed.onConflict,
349
+ onEvent: tagAndEmit,
350
+ });
351
+ }
352
+ emit({
353
+ type: "complete",
354
+ company: companyLabel,
355
+ filesDownloaded: pullResult.filesDownloaded,
356
+ bytesDownloaded: pullResult.bytesDownloaded,
357
+ filesUploaded: pushResult.filesUploaded,
358
+ bytesUploaded: pushResult.bytesUploaded,
359
+ filesSkipped: pullResult.filesSkipped + pushResult.filesSkipped,
360
+ conflicts: pullResult.conflicts,
361
+ // Either phase aborting marks the company aborted — the UI treats
362
+ // `aborted: true` as "sync didn't complete cleanly for this company".
363
+ aborted: pullResult.aborted || pushResult.aborted,
300
364
  });
301
- emit({ type: "complete", company: companyLabel, ...result });
302
- totalFiles += result.filesDownloaded;
303
- totalBytes += result.bytesDownloaded;
365
+ totalDownloaded += pullResult.filesDownloaded;
366
+ totalDownloadedBytes += pullResult.bytesDownloaded;
367
+ totalUploaded += pushResult.filesUploaded;
368
+ totalUploadedBytes += pushResult.bytesUploaded;
304
369
  }
305
370
  catch (err) {
306
371
  const message = err instanceof Error ? err.message : String(err);
@@ -317,8 +382,10 @@ export async function runRunner(argv, deps = {}) {
317
382
  emit({
318
383
  type: "all-complete",
319
384
  companiesAttempted: plan.length,
320
- filesDownloaded: totalFiles,
321
- bytesDownloaded: totalBytes,
385
+ filesDownloaded: totalDownloaded,
386
+ bytesDownloaded: totalDownloadedBytes,
387
+ filesUploaded: totalUploaded,
388
+ bytesUploaded: totalUploadedBytes,
322
389
  errors,
323
390
  });
324
391
  return 0;
@@ -1 +1 @@
1
- {"version":3,"file":"sync-runner.js","sourceRoot":"","sources":["../../src/bin/sync-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync-runner.js","sourceRoot":"","sources":["../../src/bin/sync-runner.ts"],"names":[],"mappings":"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"}
@@ -37,6 +37,15 @@ function defaultSyncResult(overrides = {}) {
37
37
  ...overrides,
38
38
  };
39
39
  }
40
+ function defaultShareResult(overrides = {}) {
41
+ return {
42
+ filesUploaded: 0,
43
+ bytesUploaded: 0,
44
+ filesSkipped: 0,
45
+ aborted: false,
46
+ ...overrides,
47
+ };
48
+ }
40
49
  /**
41
50
  * Produce a minimal VaultClientSurface stub. Tests pass in the memberships
42
51
  * they want `listMyMemberships` to return, plus the sequence of `entity.get`
@@ -494,10 +503,17 @@ describe("per-company fanout", () => {
494
503
  const complete = deps.stdout
495
504
  .events()
496
505
  .find((e) => e.type === "complete");
506
+ // Pull-only run: upload counters are 0.
497
507
  expect(complete).toEqual({
498
508
  type: "complete",
499
509
  company: "acme",
500
- ...result,
510
+ filesDownloaded: result.filesDownloaded,
511
+ bytesDownloaded: result.bytesDownloaded,
512
+ filesSkipped: result.filesSkipped,
513
+ conflicts: result.conflicts,
514
+ aborted: result.aborted,
515
+ filesUploaded: 0,
516
+ bytesUploaded: 0,
501
517
  });
502
518
  });
503
519
  it("passes --on-conflict and --hq-root through to sync()", async () => {
@@ -579,6 +595,8 @@ describe("all-complete aggregate", () => {
579
595
  companiesAttempted: 2,
580
596
  filesDownloaded: 7,
581
597
  bytesDownloaded: 350,
598
+ filesUploaded: 0,
599
+ bytesUploaded: 0,
582
600
  errors: [],
583
601
  });
584
602
  });
@@ -640,6 +658,181 @@ describe("ndjson stream shape", () => {
640
658
  });
641
659
  });
642
660
  // ---------------------------------------------------------------------------
661
+ // --direction flag
662
+ // ---------------------------------------------------------------------------
663
+ describe("--direction", () => {
664
+ it("rejects invalid --direction value", async () => {
665
+ const deps = makeDeps();
666
+ const code = await runRunner(["--companies", "--direction", "sideways"], deps);
667
+ expect(code).toBe(1);
668
+ expect(deps.stderr.raw()).toContain("pull|push|both");
669
+ });
670
+ it("defaults to pull: share is not called, sync is", async () => {
671
+ const shareSpy = vi.fn();
672
+ const syncSpy = vi.fn().mockResolvedValue(defaultSyncResult());
673
+ const deps = makeDeps({
674
+ createVaultClient: () => makeVaultStub({
675
+ memberships: [{ companyUid: "cmp_a" }],
676
+ entityGet: (uid) => Promise.resolve({ uid, slug: "acme" }),
677
+ }),
678
+ sync: syncSpy,
679
+ share: shareSpy,
680
+ });
681
+ const code = await runRunner(["--companies"], deps);
682
+ expect(code).toBe(0);
683
+ expect(syncSpy).toHaveBeenCalledTimes(1);
684
+ expect(shareSpy).not.toHaveBeenCalled();
685
+ });
686
+ it("direction=push: share is called, sync is not", async () => {
687
+ const shareSpy = vi.fn().mockResolvedValue(defaultShareResult());
688
+ const syncSpy = vi.fn();
689
+ const deps = makeDeps({
690
+ createVaultClient: () => makeVaultStub({
691
+ memberships: [{ companyUid: "cmp_a" }],
692
+ entityGet: (uid) => Promise.resolve({ uid, slug: "acme" }),
693
+ }),
694
+ sync: syncSpy,
695
+ share: shareSpy,
696
+ });
697
+ const code = await runRunner(["--companies", "--direction", "push"], deps);
698
+ expect(code).toBe(0);
699
+ expect(shareSpy).toHaveBeenCalledTimes(1);
700
+ expect(syncSpy).not.toHaveBeenCalled();
701
+ });
702
+ it("direction=both: push runs first, then pull", async () => {
703
+ const callOrder = [];
704
+ const shareSpy = vi.fn().mockImplementation(async () => {
705
+ callOrder.push("share");
706
+ return defaultShareResult({ filesUploaded: 2, bytesUploaded: 200 });
707
+ });
708
+ const syncSpy = vi.fn().mockImplementation(async () => {
709
+ callOrder.push("sync");
710
+ return defaultSyncResult({ filesDownloaded: 3, bytesDownloaded: 300 });
711
+ });
712
+ const deps = makeDeps({
713
+ createVaultClient: () => makeVaultStub({
714
+ memberships: [{ companyUid: "cmp_a" }],
715
+ entityGet: (uid) => Promise.resolve({ uid, slug: "acme" }),
716
+ }),
717
+ sync: syncSpy,
718
+ share: shareSpy,
719
+ });
720
+ const code = await runRunner(["--companies", "--direction", "both"], deps);
721
+ expect(code).toBe(0);
722
+ expect(callOrder).toEqual(["share", "sync"]);
723
+ const complete = deps.stdout
724
+ .events()
725
+ .find((e) => e.type === "complete");
726
+ expect(complete).toMatchObject({
727
+ company: "acme",
728
+ filesUploaded: 2,
729
+ bytesUploaded: 200,
730
+ filesDownloaded: 3,
731
+ bytesDownloaded: 300,
732
+ });
733
+ });
734
+ it("direction=both: pull is skipped when push aborts on conflict", async () => {
735
+ const shareSpy = vi
736
+ .fn()
737
+ .mockResolvedValue(defaultShareResult({ aborted: true }));
738
+ const syncSpy = vi.fn();
739
+ const deps = makeDeps({
740
+ createVaultClient: () => makeVaultStub({
741
+ memberships: [{ companyUid: "cmp_a" }],
742
+ entityGet: (uid) => Promise.resolve({ uid, slug: "acme" }),
743
+ }),
744
+ sync: syncSpy,
745
+ share: shareSpy,
746
+ });
747
+ const code = await runRunner(["--companies", "--direction", "both"], deps);
748
+ expect(code).toBe(0);
749
+ expect(shareSpy).toHaveBeenCalledTimes(1);
750
+ expect(syncSpy).not.toHaveBeenCalled();
751
+ const complete = deps.stdout
752
+ .events()
753
+ .find((e) => e.type === "complete");
754
+ expect(complete.aborted).toBe(true);
755
+ });
756
+ it("direction=push: passes skipUnchanged and company root path to share()", async () => {
757
+ const shareSpy = vi.fn().mockResolvedValue(defaultShareResult());
758
+ const deps = makeDeps({
759
+ createVaultClient: () => makeVaultStub({
760
+ memberships: [{ companyUid: "cmp_a" }],
761
+ entityGet: (uid) => Promise.resolve({ uid, slug: "acme" }),
762
+ }),
763
+ sync: vi.fn(),
764
+ share: shareSpy,
765
+ });
766
+ await runRunner([
767
+ "--companies",
768
+ "--direction",
769
+ "push",
770
+ "--hq-root",
771
+ "/tmp/fake-hq",
772
+ ], deps);
773
+ const opts = shareSpy.mock.calls[0][0];
774
+ expect(opts.skipUnchanged).toBe(true);
775
+ expect(opts.paths).toEqual(["/tmp/fake-hq/companies/acme"]);
776
+ expect(opts.company).toBe("cmp_a");
777
+ expect(opts.hqRoot).toBe("/tmp/fake-hq");
778
+ });
779
+ it("direction=both: all-complete sums uploaded and downloaded across companies", async () => {
780
+ const slugs = { cmp_a: "acme", cmp_b: "beta" };
781
+ const deps = makeDeps({
782
+ createVaultClient: () => makeVaultStub({
783
+ memberships: [{ companyUid: "cmp_a" }, { companyUid: "cmp_b" }],
784
+ entityGet: (uid) => Promise.resolve({ uid, slug: slugs[uid] ?? uid }),
785
+ }),
786
+ sync: vi
787
+ .fn()
788
+ .mockResolvedValueOnce(defaultSyncResult({ filesDownloaded: 3, bytesDownloaded: 100 }))
789
+ .mockResolvedValueOnce(defaultSyncResult({ filesDownloaded: 4, bytesDownloaded: 250 })),
790
+ share: vi
791
+ .fn()
792
+ .mockResolvedValueOnce(defaultShareResult({ filesUploaded: 1, bytesUploaded: 50 }))
793
+ .mockResolvedValueOnce(defaultShareResult({ filesUploaded: 2, bytesUploaded: 75 })),
794
+ });
795
+ const code = await runRunner(["--companies", "--direction", "both"], deps);
796
+ expect(code).toBe(0);
797
+ const all = deps.stdout
798
+ .events()
799
+ .find((e) => e.type === "all-complete");
800
+ expect(all).toEqual({
801
+ type: "all-complete",
802
+ companiesAttempted: 2,
803
+ filesDownloaded: 7,
804
+ bytesDownloaded: 350,
805
+ filesUploaded: 3,
806
+ bytesUploaded: 125,
807
+ errors: [],
808
+ });
809
+ });
810
+ it("direction=push: share progress events are tagged with the company slug", async () => {
811
+ const deps = makeDeps({
812
+ createVaultClient: () => makeVaultStub({
813
+ memberships: [{ companyUid: "cmp_a" }],
814
+ entityGet: (uid) => Promise.resolve({ uid, slug: "acme" }),
815
+ }),
816
+ sync: vi.fn(),
817
+ share: vi.fn().mockImplementation(async (opts) => {
818
+ opts.onEvent?.({
819
+ type: "progress",
820
+ path: "docs/a.md",
821
+ bytes: 100,
822
+ });
823
+ return defaultShareResult({ filesUploaded: 1, bytesUploaded: 100 });
824
+ }),
825
+ });
826
+ await runRunner(["--companies", "--direction", "push"], deps);
827
+ const progress = deps.stdout
828
+ .events()
829
+ .filter((e) => e.type === "progress");
830
+ expect(progress).toEqual([
831
+ { type: "progress", company: "acme", path: "docs/a.md", bytes: 100 },
832
+ ]);
833
+ });
834
+ });
835
+ // ---------------------------------------------------------------------------
643
836
  // Re-initialize for each test (mock state hygiene)
644
837
  // ---------------------------------------------------------------------------
645
838
  beforeEach(() => {