hikoutei 0.10.11-dev → 0.10.14-dev

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 (39) hide show
  1. package/dist/auth/serviceAccountAuthPool.d.ts +72 -0
  2. package/dist/auth/serviceAccountAuthPool.d.ts.map +1 -0
  3. package/dist/auth/serviceAccountAuthPool.js +92 -0
  4. package/dist/auth/serviceAccountAuthPool.js.map +1 -0
  5. package/dist/auth/serviceAccountKey.d.ts +85 -0
  6. package/dist/auth/serviceAccountKey.d.ts.map +1 -0
  7. package/dist/auth/serviceAccountKey.js +104 -0
  8. package/dist/auth/serviceAccountKey.js.map +1 -0
  9. package/dist/cli/args.d.ts +19 -0
  10. package/dist/cli/args.d.ts.map +1 -1
  11. package/dist/cli/args.js +50 -0
  12. package/dist/cli/args.js.map +1 -1
  13. package/dist/cli/checkpoint.d.ts +37 -1
  14. package/dist/cli/checkpoint.d.ts.map +1 -1
  15. package/dist/cli/checkpoint.js +94 -14
  16. package/dist/cli/checkpoint.js.map +1 -1
  17. package/dist/cli/confirm.d.ts +17 -0
  18. package/dist/cli/confirm.d.ts.map +1 -1
  19. package/dist/cli/confirm.js +1 -1
  20. package/dist/cli/confirm.js.map +1 -1
  21. package/dist/cli/envFileWriter.d.ts +15 -2
  22. package/dist/cli/envFileWriter.d.ts.map +1 -1
  23. package/dist/cli/envFileWriter.js +18 -3
  24. package/dist/cli/envFileWriter.js.map +1 -1
  25. package/dist/cli/setup.d.ts +2 -0
  26. package/dist/cli/setup.d.ts.map +1 -1
  27. package/dist/cli/setup.js +20 -2
  28. package/dist/cli/setup.js.map +1 -1
  29. package/dist/cli/setupFlow.d.ts +67 -0
  30. package/dist/cli/setupFlow.d.ts.map +1 -1
  31. package/dist/cli/setupFlow.js +401 -65
  32. package/dist/cli/setupFlow.js.map +1 -1
  33. package/dist/cli/setupProgress.d.ts +16 -1
  34. package/dist/cli/setupProgress.d.ts.map +1 -1
  35. package/dist/cli/setupProgress.js +47 -1
  36. package/dist/cli/setupProgress.js.map +1 -1
  37. package/dist/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.js +1 -1
  38. package/dist/sync-engine/sync/service/syncAutoStart.js +1 -1
  39. package/package.json +1 -1
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Shared service-account credential-pool ownership (Batch A).
3
+ *
4
+ * This module owns the N-`GoogleAuth` pool every provider line paces and
5
+ * signs with: one auth per key file (one Google quota principal), the
6
+ * deterministic round-robin cursor, and the per-identity index binding that
7
+ * ties admission to transport (the admitted identity IS the signing
8
+ * identity). Providers build their API clients (`sheets({ version, auth })`
9
+ * stays provider-side) from the selected auths; the pacing pool
10
+ * (`CredentialPacingPool` in ikisaki) meets this pool at the existing
11
+ * admission→transport index binding, which is unchanged.
12
+ *
13
+ * Out-of-range selection fails CLOSED through the caller-supplied
14
+ * `onInvalidSelection` (same parameterization as the key loader's `fail`):
15
+ * signing with a different identity than the one admission paced against
16
+ * would silently defeat the per-identity quota contract.
17
+ */
18
+ import type { GoogleAuth } from "google-auth-library";
19
+ import { type ServiceAccountKeyLoadOptions } from "./serviceAccountKey.js";
20
+ /**
21
+ * Advances (and returns) the next round-robin client index for a pool.
22
+ *
23
+ * A preferred (provider-admitted) index is returned WITHOUT advancing the
24
+ * cursor, so admission-bound calls never skew the fallback rotation. The
25
+ * cursor is a mutable carrier so callers keep the rotation across requests;
26
+ * `clientCount` must be ≥ 1.
27
+ */
28
+ export declare function nextPooledClientIndex(cursor: {
29
+ next: number;
30
+ }, clientCount: number, preferredIndex: number | undefined): number;
31
+ /** Selection failure mapping (must throw, never return). */
32
+ export interface ServiceAccountAuthPoolSelection {
33
+ readonly onInvalidSelection: (message: string) => never;
34
+ }
35
+ /** Key-file pool construction: scopes plus both failure mappings. */
36
+ export interface ServiceAccountAuthPoolKeyFilesOptions extends ServiceAccountKeyLoadOptions, ServiceAccountAuthPoolSelection {
37
+ /** OAuth scopes the pooled auths request (provider-owned, e.g. Sheets/Drive). */
38
+ readonly scopes: readonly string[];
39
+ }
40
+ /**
41
+ * The N-`GoogleAuth` credential pool plus its rotation cursor.
42
+ *
43
+ * Generic over the auth value so providers wrap their own auth flavor
44
+ * (injected test auths, the ADC default) together with the file-backed
45
+ * `GoogleAuth` instances under ONE selection cursor.
46
+ */
47
+ export declare class ServiceAccountAuthPool<TAuth = GoogleAuth> {
48
+ /** Every pooled credential; index-aligned with the provider's clients. */
49
+ readonly auths: readonly TAuth[];
50
+ private readonly selection;
51
+ /** Fallback rotation cursor for requests WITHOUT an admitted index. */
52
+ private readonly poolCursor;
53
+ constructor(
54
+ /** Every pooled credential; index-aligned with the provider's clients. */
55
+ auths: readonly TAuth[], selection: ServiceAccountAuthPoolSelection);
56
+ /**
57
+ * Builds the file-backed pool: each key file is read and turned into its
58
+ * own `GoogleAuth` at construction (fail fast on unreadable or malformed
59
+ * files). Error payloads carry the PATH only — never file contents,
60
+ * client emails, or key material.
61
+ */
62
+ static loadFromKeyFiles(keyFiles: readonly string[], options: ServiceAccountAuthPoolKeyFilesOptions): ServiceAccountAuthPool<GoogleAuth>;
63
+ /** Number of pooled credentials (quota principals). */
64
+ get size(): number;
65
+ /**
66
+ * Picks the pool index for one request: the admitted identity when the
67
+ * request carries one, otherwise the next round-robin entry (a 1-auth
68
+ * pool always selects index 0 — the historical single-auth path).
69
+ */
70
+ selectIndex(preferredIndex: number | undefined): number;
71
+ }
72
+ //# sourceMappingURL=serviceAccountAuthPool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serviceAccountAuthPool.d.ts","sourceRoot":"","sources":["../../../../../../../src/auth/serviceAccountAuthPool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAIL,KAAK,4BAA4B,EAClC,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EACxB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,GAAG,SAAS,GACjC,MAAM,CAOR;AAED,4DAA4D;AAC5D,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC;CACzD;AAED,qEAAqE;AACrE,MAAM,WAAW,qCACf,SAAQ,4BAA4B,EAAE,+BAA+B;IACrE,iFAAiF;IACjF,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED;;;;;;GAMG;AACH,qBAAa,sBAAsB,CAAC,KAAK,GAAG,UAAU;IAKlD,0EAA0E;aAC1D,KAAK,EAAE,SAAS,KAAK,EAAE;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAN5B,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiC;;IAG1D,0EAA0E;IAC1D,KAAK,EAAE,SAAS,KAAK,EAAE,EACtB,SAAS,EAAE,+BAA+B;IAG7D;;;;;OAKG;WACW,gBAAgB,CAC5B,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,OAAO,EAAE,qCAAqC,GAC7C,sBAAsB,CAAC,UAAU,CAAC;IASrC,uDAAuD;IACvD,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;;;OAIG;IACI,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM;CAe/D"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Shared service-account credential-pool ownership (Batch A).
3
+ *
4
+ * This module owns the N-`GoogleAuth` pool every provider line paces and
5
+ * signs with: one auth per key file (one Google quota principal), the
6
+ * deterministic round-robin cursor, and the per-identity index binding that
7
+ * ties admission to transport (the admitted identity IS the signing
8
+ * identity). Providers build their API clients (`sheets({ version, auth })`
9
+ * stays provider-side) from the selected auths; the pacing pool
10
+ * (`CredentialPacingPool` in ikisaki) meets this pool at the existing
11
+ * admission→transport index binding, which is unchanged.
12
+ *
13
+ * Out-of-range selection fails CLOSED through the caller-supplied
14
+ * `onInvalidSelection` (same parameterization as the key loader's `fail`):
15
+ * signing with a different identity than the one admission paced against
16
+ * would silently defeat the per-identity quota contract.
17
+ */
18
+ import { createServiceAccountAuth, loadServiceAccountKeyFileSync, } from "./serviceAccountKey.js";
19
+ /**
20
+ * Advances (and returns) the next round-robin client index for a pool.
21
+ *
22
+ * A preferred (provider-admitted) index is returned WITHOUT advancing the
23
+ * cursor, so admission-bound calls never skew the fallback rotation. The
24
+ * cursor is a mutable carrier so callers keep the rotation across requests;
25
+ * `clientCount` must be ≥ 1.
26
+ */
27
+ export function nextPooledClientIndex(cursor, clientCount, preferredIndex) {
28
+ if (preferredIndex !== undefined) {
29
+ return preferredIndex;
30
+ }
31
+ const index = cursor.next % clientCount;
32
+ cursor.next = (index + 1) % clientCount;
33
+ return index;
34
+ }
35
+ /**
36
+ * The N-`GoogleAuth` credential pool plus its rotation cursor.
37
+ *
38
+ * Generic over the auth value so providers wrap their own auth flavor
39
+ * (injected test auths, the ADC default) together with the file-backed
40
+ * `GoogleAuth` instances under ONE selection cursor.
41
+ */
42
+ export class ServiceAccountAuthPool {
43
+ auths;
44
+ selection;
45
+ /** Fallback rotation cursor for requests WITHOUT an admitted index. */
46
+ poolCursor = { next: 0 };
47
+ constructor(
48
+ /** Every pooled credential; index-aligned with the provider's clients. */
49
+ auths, selection) {
50
+ this.auths = auths;
51
+ this.selection = selection;
52
+ }
53
+ /**
54
+ * Builds the file-backed pool: each key file is read and turned into its
55
+ * own `GoogleAuth` at construction (fail fast on unreadable or malformed
56
+ * files). Error payloads carry the PATH only — never file contents,
57
+ * client emails, or key material.
58
+ */
59
+ static loadFromKeyFiles(keyFiles, options) {
60
+ const fail = (failure) => options.fail(failure);
61
+ const auths = keyFiles.map((keyFile) => {
62
+ const { credentials } = loadServiceAccountKeyFileSync(keyFile, { fail });
63
+ return createServiceAccountAuth(credentials, options.scopes);
64
+ });
65
+ return new ServiceAccountAuthPool(auths, options);
66
+ }
67
+ /** Number of pooled credentials (quota principals). */
68
+ get size() {
69
+ return this.auths.length;
70
+ }
71
+ /**
72
+ * Picks the pool index for one request: the admitted identity when the
73
+ * request carries one, otherwise the next round-robin entry (a 1-auth
74
+ * pool always selects index 0 — the historical single-auth path).
75
+ */
76
+ selectIndex(preferredIndex) {
77
+ if (preferredIndex !== undefined) {
78
+ if (this.auths[preferredIndex] === undefined) {
79
+ // Fail CLOSED before any wire contact: signing with a different
80
+ // identity than the one admission paced against would silently
81
+ // defeat the per-identity quota contract.
82
+ this.selection.onInvalidSelection("credentialIndex is outside the client pool");
83
+ }
84
+ return preferredIndex;
85
+ }
86
+ if (this.auths.length === 1) {
87
+ return 0;
88
+ }
89
+ return nextPooledClientIndex(this.poolCursor, this.auths.length, undefined);
90
+ }
91
+ }
92
+ //# sourceMappingURL=serviceAccountAuthPool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serviceAccountAuthPool.js","sourceRoot":"","sources":["../../../../../../../src/auth/serviceAccountAuthPool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EACL,wBAAwB,EACxB,6BAA6B,GAG9B,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAwB,EACxB,WAAmB,EACnB,cAAkC;IAElC,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC;IACxC,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC;IACxC,OAAO,KAAK,CAAC;AACf,CAAC;AAcD;;;;;;GAMG;AACH,MAAM,OAAO,sBAAsB;IAMf;IACC;IANnB,uEAAuE;IACtD,UAAU,GAAqB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAE5D;IACE,0EAA0E;IAC1D,KAAuB,EACtB,SAA0C;QAD3C,UAAK,GAAL,KAAK,CAAkB;QACtB,cAAS,GAAT,SAAS,CAAiC;IAC1D,CAAC;IAEJ;;;;;OAKG;IACI,MAAM,CAAC,gBAAgB,CAC5B,QAA2B,EAC3B,OAA8C;QAE9C,MAAM,IAAI,GAAG,CAAC,OAAiC,EAAS,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjF,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YACrC,MAAM,EAAE,WAAW,EAAE,GAAG,6BAA6B,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YACzE,OAAO,wBAAwB,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,uDAAuD;IACvD,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACI,WAAW,CAAC,cAAkC;QACnD,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC7C,gEAAgE;gBAChE,+DAA+D;gBAC/D,0CAA0C;gBAC1C,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,4CAA4C,CAAC,CAAC;YAClF,CAAC;YACD,OAAO,cAAc,CAAC;QACxB,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC9E,CAAC;CACF"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Shared service-account key-file loading + shape validation (Batch A).
3
+ *
4
+ * This is the ONE loader for Google service-account key files, reused by
5
+ * every provider line (Sheets today; Drive/Gmail next) and by the sync
6
+ * auto-start bridge. It reads, JSON-parses, and SHAPE-validates a key file
7
+ * so a misconfigured credential fails fast and locally — a malformed file
8
+ * must never build an auth client that only breaks on first signing.
9
+ *
10
+ * Neutral error contract: this leaf owns no provider vocabulary, so every
11
+ * failure is reported through the caller-supplied `fail` callback as a
12
+ * discriminated `ServiceAccountKeyFailure` (quotaGovernor `timingDefaults`
13
+ * precedent — behavior injected, dependency direction kept acyclic). The
14
+ * Sheets transport maps every kind to its transport error; the sync
15
+ * auto-start bridge maps them to the stable startup codes. Failure payloads
16
+ * carry the PATH (and field names) only — never file contents, client
17
+ * emails, or key material.
18
+ */
19
+ import { GoogleAuth } from "google-auth-library";
20
+ /** Required service-account key-file fields, checked by SHAPE (non-blank string) only at load. */
21
+ export declare const SERVICE_ACCOUNT_KEY_FIELDS: readonly ["type", "client_email", "private_key", "project_id"];
22
+ /** Structured key-file load failure (path-bearing only, never key material). */
23
+ export type ServiceAccountKeyFailure = {
24
+ /** The file could not be read (`code` is the Node errno, e.g. `ENOENT`). */
25
+ readonly kind: "read-error";
26
+ readonly path: string;
27
+ readonly code: string | undefined;
28
+ } | {
29
+ /** The file contents are not valid JSON. */
30
+ readonly kind: "invalid-json";
31
+ readonly path: string;
32
+ } | {
33
+ /** The file parsed but is not a JSON object. */
34
+ readonly kind: "not-object";
35
+ readonly path: string;
36
+ } | {
37
+ /** Required service-account fields are missing or blank (NAMES only, never values). */
38
+ readonly kind: "field-missing";
39
+ readonly path: string;
40
+ readonly fields: readonly string[];
41
+ };
42
+ /** Loader options: the caller's failure mapping (must throw, never return). */
43
+ export interface ServiceAccountKeyLoadOptions {
44
+ readonly fail: (failure: ServiceAccountKeyFailure) => never;
45
+ }
46
+ /** One validated service-account key: raw credentials plus the client email. */
47
+ export interface LoadedServiceAccountKey {
48
+ /** Parsed key JSON, passed straight into `GoogleAuth.credentials` (never logged). */
49
+ readonly credentials: Record<string, unknown>;
50
+ /** The `client_email` field (used for access-denied hints, never logged by this leaf). */
51
+ readonly clientEmail: string;
52
+ }
53
+ /**
54
+ * Validates parsed key JSON by SHAPE and promotes it to a loaded key.
55
+ *
56
+ * Shared by the sync/async file loaders so both paths enforce the identical
57
+ * contract: the payload must be a JSON object whose required
58
+ * service-account fields are non-blank strings. Without this, ANY JSON
59
+ * object builds a GoogleAuth client and the failure surfaces mid-run on
60
+ * first signing instead of at load.
61
+ */
62
+ export declare function parseServiceAccountKeyJson(raw: string, path: string, options: ServiceAccountKeyLoadOptions): LoadedServiceAccountKey;
63
+ /**
64
+ * Loads + validates one key file synchronously (transport construction path).
65
+ *
66
+ * Reads and shape-validates the file at construction so a misconfigured
67
+ * pool fails fast and locally. Failure messages carry the path only.
68
+ */
69
+ export declare function loadServiceAccountKeyFileSync(keyFile: string, options: ServiceAccountKeyLoadOptions): LoadedServiceAccountKey;
70
+ /**
71
+ * Loads + validates one key file asynchronously (startup-bridge path).
72
+ *
73
+ * Same contract as the sync loader; the bridge keeps its own env parsing
74
+ * and error-code mapping and delegates only file loading/validation here.
75
+ */
76
+ export declare function loadServiceAccountKeyFile(keyFile: string, options: ServiceAccountKeyLoadOptions): Promise<LoadedServiceAccountKey>;
77
+ /**
78
+ * Builds one pooled `GoogleAuth` from validated key credentials.
79
+ *
80
+ * The caller supplies the scopes (Sheets/Drive/Gmail each request their
81
+ * own); the cast keeps the google-auth-library version-shape mismatch
82
+ * inside this leaf, exactly like the former per-provider boundary casts.
83
+ */
84
+ export declare function createServiceAccountAuth(credentials: Record<string, unknown>, scopes: readonly string[]): GoogleAuth;
85
+ //# sourceMappingURL=serviceAccountKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serviceAccountKey.d.ts","sourceRoot":"","sources":["../../../../../../../src/auth/serviceAccountKey.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAIjD,kGAAkG;AAClG,eAAO,MAAM,0BAA0B,gEAAiE,CAAC;AAEzG,gFAAgF;AAChF,MAAM,MAAM,wBAAwB,GAChC;IACE,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC,GACD;IACE,4CAA4C;IAC5C,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,GACD;IACE,gDAAgD;IAChD,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,GACD;IACE,uFAAuF;IACvF,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC;AAEN,+EAA+E;AAC/E,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,KAAK,CAAC;CAC7D;AAED,gFAAgF;AAChF,MAAM,WAAW,uBAAuB;IACtC,qFAAqF;IACrF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,0FAA0F;IAC1F,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,4BAA4B,GACpC,uBAAuB,CAkBzB;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,4BAA4B,GACpC,uBAAuB,CAQzB;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,uBAAuB,CAAC,CAQlC;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,MAAM,EAAE,SAAS,MAAM,EAAE,GACxB,UAAU,CAKZ"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Shared service-account key-file loading + shape validation (Batch A).
3
+ *
4
+ * This is the ONE loader for Google service-account key files, reused by
5
+ * every provider line (Sheets today; Drive/Gmail next) and by the sync
6
+ * auto-start bridge. It reads, JSON-parses, and SHAPE-validates a key file
7
+ * so a misconfigured credential fails fast and locally — a malformed file
8
+ * must never build an auth client that only breaks on first signing.
9
+ *
10
+ * Neutral error contract: this leaf owns no provider vocabulary, so every
11
+ * failure is reported through the caller-supplied `fail` callback as a
12
+ * discriminated `ServiceAccountKeyFailure` (quotaGovernor `timingDefaults`
13
+ * precedent — behavior injected, dependency direction kept acyclic). The
14
+ * Sheets transport maps every kind to its transport error; the sync
15
+ * auto-start bridge maps them to the stable startup codes. Failure payloads
16
+ * carry the PATH (and field names) only — never file contents, client
17
+ * emails, or key material.
18
+ */
19
+ import { GoogleAuth } from "google-auth-library";
20
+ import { readFileSync } from "node:fs";
21
+ import { readFile } from "node:fs/promises";
22
+ /** Required service-account key-file fields, checked by SHAPE (non-blank string) only at load. */
23
+ export const SERVICE_ACCOUNT_KEY_FIELDS = ["type", "client_email", "private_key", "project_id"];
24
+ /**
25
+ * Validates parsed key JSON by SHAPE and promotes it to a loaded key.
26
+ *
27
+ * Shared by the sync/async file loaders so both paths enforce the identical
28
+ * contract: the payload must be a JSON object whose required
29
+ * service-account fields are non-blank strings. Without this, ANY JSON
30
+ * object builds a GoogleAuth client and the failure surfaces mid-run on
31
+ * first signing instead of at load.
32
+ */
33
+ export function parseServiceAccountKeyJson(raw, path, options) {
34
+ let parsed;
35
+ try {
36
+ parsed = JSON.parse(raw);
37
+ }
38
+ catch {
39
+ options.fail({ kind: "invalid-json", path });
40
+ }
41
+ if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
42
+ options.fail({ kind: "not-object", path });
43
+ }
44
+ const record = parsed;
45
+ const invalidFields = SERVICE_ACCOUNT_KEY_FIELDS.filter((field) => typeof record[field] !== "string" || record[field].trim() === "");
46
+ if (invalidFields.length > 0) {
47
+ options.fail({ kind: "field-missing", path, fields: invalidFields });
48
+ }
49
+ return { credentials: record, clientEmail: record.client_email };
50
+ }
51
+ /**
52
+ * Loads + validates one key file synchronously (transport construction path).
53
+ *
54
+ * Reads and shape-validates the file at construction so a misconfigured
55
+ * pool fails fast and locally. Failure messages carry the path only.
56
+ */
57
+ export function loadServiceAccountKeyFileSync(keyFile, options) {
58
+ let raw;
59
+ try {
60
+ raw = readFileSync(keyFile, "utf8");
61
+ }
62
+ catch (error) {
63
+ options.fail({ kind: "read-error", path: keyFile, code: nodeErrorCode(error) });
64
+ }
65
+ return parseServiceAccountKeyJson(raw, keyFile, options);
66
+ }
67
+ /**
68
+ * Loads + validates one key file asynchronously (startup-bridge path).
69
+ *
70
+ * Same contract as the sync loader; the bridge keeps its own env parsing
71
+ * and error-code mapping and delegates only file loading/validation here.
72
+ */
73
+ export async function loadServiceAccountKeyFile(keyFile, options) {
74
+ let raw;
75
+ try {
76
+ raw = await readFile(keyFile, "utf8");
77
+ }
78
+ catch (error) {
79
+ options.fail({ kind: "read-error", path: keyFile, code: nodeErrorCode(error) });
80
+ }
81
+ return parseServiceAccountKeyJson(raw, keyFile, options);
82
+ }
83
+ /**
84
+ * Builds one pooled `GoogleAuth` from validated key credentials.
85
+ *
86
+ * The caller supplies the scopes (Sheets/Drive/Gmail each request their
87
+ * own); the cast keeps the google-auth-library version-shape mismatch
88
+ * inside this leaf, exactly like the former per-provider boundary casts.
89
+ */
90
+ export function createServiceAccountAuth(credentials, scopes) {
91
+ return new GoogleAuth({
92
+ scopes: [...scopes],
93
+ credentials,
94
+ });
95
+ }
96
+ /** Extracts the Node errno (`ENOENT`, ...) from a caught read failure. */
97
+ function nodeErrorCode(error) {
98
+ if (error !== null && typeof error === "object") {
99
+ const code = error.code;
100
+ return typeof code === "string" ? code : undefined;
101
+ }
102
+ return undefined;
103
+ }
104
+ //# sourceMappingURL=serviceAccountKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serviceAccountKey.js","sourceRoot":"","sources":["../../../../../../../src/auth/serviceAccountKey.ts"],"names":[],"mappings":"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"}
@@ -10,12 +10,31 @@ import { type SetupFailure } from "./errors.js";
10
10
  export declare const DEFAULT_SA_NAME = "hikoutei-sa";
11
11
  /** Default output file name (resolved against the current directory by main). */
12
12
  export declare const DEFAULT_OUTPUT_FILE_NAME = ".env";
13
+ /** Maximum service accounts per setup run (quota-exhaustion guard). */
14
+ export declare const MAX_SETUP_SA_COUNT = 10;
15
+ /**
16
+ * Validates an `--sa-count` value: a positive safe integer capped at
17
+ * {@link MAX_SETUP_SA_COUNT}. Returns the count, or an error message.
18
+ */
19
+ export declare function parseSaCount(value: string): {
20
+ readonly status: "ok";
21
+ readonly saCount: number;
22
+ } | {
23
+ readonly status: "error";
24
+ readonly message: string;
25
+ };
13
26
  /** Parsed and defaulted setup options handed to the setup flow. */
14
27
  export interface SetupOptions {
15
28
  /** Existing Google Cloud project id; when absent the flow creates one. */
16
29
  readonly projectId?: string;
17
30
  /** Service-account name within the project. */
18
31
  readonly saName: string;
32
+ /**
33
+ * Number of service accounts to provision as a credential pool. Absent
34
+ * means the flag was not given (default 1); the interactive prompt
35
+ * (TTY, no --yes) resolves the count, while --yes/non-TTY runs use 1.
36
+ */
37
+ readonly saCount?: number;
19
38
  /** Spreadsheet title; when absent the flow derives `hikoutei-sync-<project>`. */
20
39
  readonly spreadsheetTitle?: string;
21
40
  /** Output .env path (relative to the current directory). */
@@ -1 +1 @@
1
- {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../../../../../src/args.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAmC,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAEjF,kEAAkE;AAClE,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAE7C,iFAAiF;AACjF,eAAO,MAAM,wBAAwB,SAAS,CAAC;AAE/C,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,0EAA0E;IAC1E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qCAAqC;IACrC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,gDAAgD;AAChD,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAA;CAAE,GAC5D;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC;AAanE,eAAO,MAAM,eAAe,QAyFhB,CAAC;AAUb;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,oBAAoB,CAyG5E"}
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../../../../../src/args.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAmC,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAEjF,kEAAkE;AAClE,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAE7C,iFAAiF;AACjF,eAAO,MAAM,wBAAwB,SAAS,CAAC;AAE/C,uEAAuE;AACvE,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAqBxJ;AAED,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,0EAA0E;IAC1E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,iFAAiF;IACjF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qCAAqC;IACrC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,gDAAgD;AAChD,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAA;CAAE,GAC5D;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC;AAcnE,eAAO,MAAM,eAAe,QAgGhB,CAAC;AAWb;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,oBAAoB,CAsH5E"}
package/dist/cli/args.js CHANGED
@@ -11,11 +11,40 @@ import { SETUP_ERROR_CODES, setupFailure } from "./errors.js";
11
11
  export const DEFAULT_SA_NAME = "hikoutei-sa";
12
12
  /** Default output file name (resolved against the current directory by main). */
13
13
  export const DEFAULT_OUTPUT_FILE_NAME = ".env";
14
+ /** Maximum service accounts per setup run (quota-exhaustion guard). */
15
+ export const MAX_SETUP_SA_COUNT = 10;
16
+ /**
17
+ * Validates an `--sa-count` value: a positive safe integer capped at
18
+ * {@link MAX_SETUP_SA_COUNT}. Returns the count, or an error message.
19
+ */
20
+ export function parseSaCount(value) {
21
+ if (!/^\d+$/.test(value)) {
22
+ return {
23
+ status: "error",
24
+ message: `invalid value for --sa-count: expected a positive integer between 1 and ${MAX_SETUP_SA_COUNT}`,
25
+ };
26
+ }
27
+ const saCount = Number(value);
28
+ if (saCount > MAX_SETUP_SA_COUNT) {
29
+ return {
30
+ status: "error",
31
+ message: `sa-count is capped at ${MAX_SETUP_SA_COUNT} to avoid accidental quota exhaustion`,
32
+ };
33
+ }
34
+ if (!Number.isSafeInteger(saCount) || saCount < 1) {
35
+ return {
36
+ status: "error",
37
+ message: `invalid value for --sa-count: expected a positive integer between 1 and ${MAX_SETUP_SA_COUNT}`,
38
+ };
39
+ }
40
+ return { status: "ok", saCount };
41
+ }
14
42
  const SETUP_FLAGS = {
15
43
  HELP: "--help",
16
44
  HELP_SHORT: "-h",
17
45
  PROJECT: "--project",
18
46
  SA_NAME: "--sa-name",
47
+ SA_COUNT: "--sa-count",
19
48
  SPREADSHEET_TITLE: "--spreadsheet-title",
20
49
  OUTPUT: "--output",
21
50
  YES: "--yes",
@@ -42,6 +71,13 @@ export const SETUP_HELP_TEXT = [
42
71
  " creating one (verified with `gcloud projects",
43
72
  " describe`).",
44
73
  " --sa-name <name> Service-account name (default: hikoutei-sa).",
74
+ " --sa-count <n> Number of service accounts to create as a",
75
+ " credential pool (default 1; capped at 10).",
76
+ " Additional accounts are granted writer access",
77
+ " to the same spreadsheet and written to",
78
+ " HIKOUTEI_SYNC_CREDENTIALS. Resuming with a",
79
+ " smaller count keeps the existing pool",
80
+ " (entries are never removed).",
45
81
  " --spreadsheet-title <title> Title of the spreadsheet to create (default:",
46
82
  " hikoutei-sync-<project>).",
47
83
  " --output <path> .env file to write or update (default: .env in",
@@ -115,6 +151,7 @@ export const SETUP_HELP_TEXT = [
115
151
  const VALUE_FLAGS = [
116
152
  SETUP_FLAGS.PROJECT,
117
153
  SETUP_FLAGS.SA_NAME,
154
+ SETUP_FLAGS.SA_COUNT,
118
155
  SETUP_FLAGS.SPREADSHEET_TITLE,
119
156
  SETUP_FLAGS.OUTPUT,
120
157
  ];
@@ -132,6 +169,7 @@ export function parseSetupArgs(argv) {
132
169
  const args = argv.length > 0 && argv[0] === "setup" ? argv.slice(1) : argv;
133
170
  let projectId;
134
171
  let saName = DEFAULT_SA_NAME;
172
+ let saCount;
135
173
  let spreadsheetTitle;
136
174
  let output = DEFAULT_OUTPUT_FILE_NAME;
137
175
  let yes = false;
@@ -188,6 +226,17 @@ export function parseSetupArgs(argv) {
188
226
  }
189
227
  saName = value;
190
228
  break;
229
+ case SETUP_FLAGS.SA_COUNT: {
230
+ const parsed = parseSaCount(value);
231
+ if (parsed.status === "error") {
232
+ return {
233
+ status: "invalid",
234
+ failure: setupFailure(SETUP_ERROR_CODES.INVALID_ARGS, parsed.message),
235
+ };
236
+ }
237
+ saCount = parsed.saCount;
238
+ break;
239
+ }
191
240
  case SETUP_FLAGS.SPREADSHEET_TITLE:
192
241
  spreadsheetTitle = value;
193
242
  break;
@@ -216,6 +265,7 @@ export function parseSetupArgs(argv) {
216
265
  options: {
217
266
  ...(projectId !== undefined ? { projectId } : {}),
218
267
  ...(spreadsheetTitle !== undefined ? { spreadsheetTitle } : {}),
268
+ ...(saCount !== undefined ? { saCount } : {}),
219
269
  saName,
220
270
  output,
221
271
  yes,
@@ -1 +1 @@
1
- {"version":3,"file":"args.js","sourceRoot":"","sources":["../../../../../../src/args.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../../../../../src/args.ts"],"names":[],"mappings":"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"}
@@ -68,6 +68,13 @@
68
68
  * stay no-ops. Starting fresh requires removing both the checkpoint and
69
69
  * the key file (or passing the matching `--project` for recovery).
70
70
  *
71
+ * A `complete` checkpoint may additionally carry `pool`, the provisioned
72
+ * credential pool for `--sa-count` runs (entry 1 duplicates the primary
73
+ * fields; entries 2..N are the additional accounts). The pool is
74
+ * append-reconciled on resume: a stored pool never conflicts with a new
75
+ * `--sa-count` (saCount is a run option, not checkpoint state), and
76
+ * already-recorded entries are skipped.
77
+ *
71
78
  * The spreadsheet URL is never stored: it is derived deterministically from
72
79
  * the spreadsheet id, so a stored URL can never disagree with the id.
73
80
  * `projectMode` records whether the project was explicit (`--project`) or
@@ -219,6 +226,19 @@ export type KeyOrigin = "created" | "reused";
219
226
  * shared-but-unverified state keeps its propagation evidence.
220
227
  */
221
228
  export type ShareOrigin = "fresh" | "reused";
229
+ /**
230
+ * One provisioned service account of a credential pool.
231
+ *
232
+ * Non-secret identities only (names, emails, paths — never key material):
233
+ * entry 1 duplicates the primary `saName`/`saEmail`/`keyPath` fields, and
234
+ * entries 2..N are the additional pool accounts (`<saName>-<i>`) sharing
235
+ * the same spreadsheet. A resumed run skips entries already present.
236
+ */
237
+ export interface SetupPoolEntry {
238
+ readonly saName: string;
239
+ readonly saEmail: string;
240
+ readonly keyPath: string;
241
+ }
222
242
  /** Progression statuses of a setup run; later statuses mean earlier work is done. */
223
243
  export type SetupStateStatus = "project_selected" | "key_create_started" | "key_ready" | "spreadsheet_create_started" | "spreadsheet_created" | "spreadsheet_share_started" | "spreadsheet_shared" | "complete";
224
244
  /** Fields shared by every checkpoint status. */
@@ -274,7 +294,7 @@ export type SetupState = (SetupStateCommon & {
274
294
  readonly spreadsheetId: string;
275
295
  readonly keyOrigin: KeyOrigin;
276
296
  }) | (SetupStateCommon & {
277
- readonly status: "spreadsheet_shared" | "complete";
297
+ readonly status: "spreadsheet_shared";
278
298
  readonly spreadsheetId: string;
279
299
  readonly keyOrigin: KeyOrigin;
280
300
  /**
@@ -283,6 +303,22 @@ export type SetupState = (SetupStateCommon & {
283
303
  * 403/404 propagation freshness.
284
304
  */
285
305
  readonly shareOrigin: ShareOrigin;
306
+ }) | (SetupStateCommon & {
307
+ readonly status: "complete";
308
+ readonly spreadsheetId: string;
309
+ readonly keyOrigin: KeyOrigin;
310
+ /**
311
+ * Non-secret provenance of the SA writer permission; required once the
312
+ * share step is done so a resumed shared-but-unverified state keeps its
313
+ * 403/404 propagation freshness.
314
+ */
315
+ readonly shareOrigin: ShareOrigin;
316
+ /**
317
+ * Credential pool (entry 1 duplicates the primary fields). Absent for
318
+ * single-SA runs; a present pool is non-empty and append-reconciled on
319
+ * resume (a stored pool never conflicts with a new --sa-count).
320
+ */
321
+ readonly pool?: readonly SetupPoolEntry[];
286
322
  });
287
323
  /** Result of loading the checkpoint file from disk. */
288
324
  export type LoadSetupStateResult = {
@@ -1 +1 @@
1
- {"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../../../../../src/checkpoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+FG;AAkBH,OAAO,EAUL,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,4EAA4E;AAC5E,eAAO,MAAM,qBAAqB,+BAA+B,CAAC;AAElE;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,uFAAuF;AACvF,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,sEAAsE;AACtE,eAAO,MAAM,qBAAqB,MAAQ,CAAC;AAE3C,+EAA+E;AAC/E,eAAO,MAAM,6BAA6B,MAAQ,CAAC;AAEnD;;;;;;;;;GASG;AACH,eAAO,MAAM,8BAA8B,QAAyB,CAAC;AAErE;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,QACqC,CAAC;AAE1E;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,QAAqB,CAAC;AAEnD,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE9D;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,sBAAsB,QAAmC,CAAC;AAEvE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,4BAA4B,QAAmC,CAAC;AAE7E,2DAA2D;AAC3D,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEnE;AAED,iEAAiE;AACjE,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEzE;AAED,sEAAsE;AACtE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAErE;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEhE;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,2DAA2D;AAC3D,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,WAAW,CAAC;AAEnD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE7C;;;;;;;;;;GAUG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE7C,qFAAqF;AACrF,MAAM,MAAM,gBAAgB,GACxB,kBAAkB,GAClB,oBAAoB,GACpB,WAAW,GACX,4BAA4B,GAC5B,qBAAqB,GACrB,2BAA2B,GAC3B,oBAAoB,GACpB,UAAU,CAAC;AAEf,gDAAgD;AAChD,UAAU,gBAAgB;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,mBAAmB,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,6FAA6F;IAC7F,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,UAAU,GAClB,CAAC,gBAAgB,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAAC,GAC5D,CAAC,gBAAgB,GAAG;IACpB,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,8EAA8E;IAC9E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,oFAAoF;IACpF,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC,CAAC,GACA,CAAC,gBAAgB,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;CAAE,CAAC,GACpF,CAAC,gBAAgB,GAAG;IACpB,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAC;IAC9C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B,CAAC,GACA,CAAC,gBAAgB,GAAG;IACpB,QAAQ,CAAC,MAAM,EAAE,qBAAqB,GAAG,2BAA2B,CAAC;IACrE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B,CAAC,GACA,CAAC,gBAAgB,GAAG;IACpB,QAAQ,CAAC,MAAM,EAAE,oBAAoB,GAAG,UAAU,CAAC;IACnD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;CACnC,CAAC,CAAC;AAEL,uDAAuD;AACvD,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GACzD;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,sEAAsE;AACtE,MAAM,WAAW,uBAAuB;IACtC,8EAA8E;IAC9E,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,6DAA6D;AAC7D,MAAM,MAAM,kBAAkB,GAC1B;IAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9D,6DAA6D;AAC7D,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,0FAA0F;IAC1F,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,CAAA;CAAE,GACvE;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,CAAA;CAAE,GACvE;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG;QACvB,cAAc,IAAI,OAAO,CAAC;QAC1B,MAAM,IAAI,OAAO,CAAC;QAClB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9C,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG;QACrB,MAAM,IAAI,OAAO,CAAC;QAClB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IACnD,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAWD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,EAAE,GAAE,gBAA0C,GAC7C,oBAAoB,CAyFtB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAkJpE;AAwCD;;;;;;;;;;;GAWG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAWzG;AA2CD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,UAAU,EACjB,QAAQ,GAAE,MAA4C,EACtD,EAAE,GAAE,iBAA4C,GAC/C,IAAI,CAiFN;AAuCD;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,uBAAuB,GAC7B,kBAAkB,CAoDpB;AAWD,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,uCAAuC,EACvC,KAAK,SAAS,GACf,MAAM,kBAAkB,CAAC;AAE1B,iFAAiF;AACjF,MAAM,WAAW,MAAM;IACrB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9C,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG;QACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,WAAW,IAAI,OAAO,CAAC;KACxB,CAAC;IACF,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAUD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAsBD,oDAAoD;AACpD,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,GAC5D;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAE,MAAsB,GAAG,eAAe,CAyD9F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,GAAE,MAAsB,GAAG,IAAI,CA4G3G;AAWD,2DAA2D;AAC3D,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C"}
1
+ {"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../../../../../src/checkpoint.ts"],"names":[],"mappings":"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"}