@microwiseai/snapshot 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/dist/build-info.json +1 -0
  2. package/dist/commands/access.d.ts +25 -9
  3. package/dist/commands/access.d.ts.map +1 -1
  4. package/dist/commands/access.js +101 -47
  5. package/dist/commands/access.js.map +1 -1
  6. package/dist/commands/config.d.ts +3 -0
  7. package/dist/commands/config.d.ts.map +1 -0
  8. package/dist/commands/config.js +37 -0
  9. package/dist/commands/config.js.map +1 -0
  10. package/dist/commands/install.d.ts +54 -0
  11. package/dist/commands/install.d.ts.map +1 -1
  12. package/dist/commands/install.js +480 -65
  13. package/dist/commands/install.js.map +1 -1
  14. package/dist/commands/publish.d.ts +10 -0
  15. package/dist/commands/publish.d.ts.map +1 -1
  16. package/dist/commands/publish.js +94 -12
  17. package/dist/commands/publish.js.map +1 -1
  18. package/dist/index.js +45 -8
  19. package/dist/index.js.map +1 -1
  20. package/dist/lib/access-index.d.ts +81 -0
  21. package/dist/lib/access-index.d.ts.map +1 -0
  22. package/dist/lib/access-index.js +175 -0
  23. package/dist/lib/access-index.js.map +1 -0
  24. package/dist/lib/access-sync.d.ts +66 -17
  25. package/dist/lib/access-sync.d.ts.map +1 -1
  26. package/dist/lib/access-sync.js +391 -217
  27. package/dist/lib/access-sync.js.map +1 -1
  28. package/dist/lib/extends-access.d.ts +34 -0
  29. package/dist/lib/extends-access.d.ts.map +1 -0
  30. package/dist/lib/extends-access.js +82 -0
  31. package/dist/lib/extends-access.js.map +1 -0
  32. package/dist/lib/gitlab-publisher.d.ts +70 -0
  33. package/dist/lib/gitlab-publisher.d.ts.map +1 -0
  34. package/dist/lib/gitlab-publisher.js +165 -0
  35. package/dist/lib/gitlab-publisher.js.map +1 -0
  36. package/dist/lib/gitlab.d.ts +4 -0
  37. package/dist/lib/gitlab.d.ts.map +1 -1
  38. package/dist/lib/gitlab.js +1 -1
  39. package/dist/lib/gitlab.js.map +1 -1
  40. package/dist/lib/grant.d.ts +157 -0
  41. package/dist/lib/grant.d.ts.map +1 -0
  42. package/dist/lib/grant.js +352 -0
  43. package/dist/lib/grant.js.map +1 -0
  44. package/dist/lib/install-verify.d.ts +16 -2
  45. package/dist/lib/install-verify.d.ts.map +1 -1
  46. package/dist/lib/install-verify.js +24 -3
  47. package/dist/lib/install-verify.js.map +1 -1
  48. package/dist/lib/ledger.d.ts +13 -0
  49. package/dist/lib/ledger.d.ts.map +1 -1
  50. package/dist/lib/ledger.js.map +1 -1
  51. package/dist/lib/prerequisites.d.ts.map +1 -1
  52. package/dist/lib/prerequisites.js +4 -1
  53. package/dist/lib/prerequisites.js.map +1 -1
  54. package/dist/lib/proxy-auth-globalconfig.d.ts +55 -0
  55. package/dist/lib/proxy-auth-globalconfig.d.ts.map +1 -0
  56. package/dist/lib/proxy-auth-globalconfig.js +110 -0
  57. package/dist/lib/proxy-auth-globalconfig.js.map +1 -0
  58. package/dist/lib/semver-range.d.ts +32 -0
  59. package/dist/lib/semver-range.d.ts.map +1 -0
  60. package/dist/lib/semver-range.js +243 -0
  61. package/dist/lib/semver-range.js.map +1 -0
  62. package/dist/lib/session.d.ts +5 -0
  63. package/dist/lib/session.d.ts.map +1 -1
  64. package/dist/lib/session.js +9 -0
  65. package/dist/lib/session.js.map +1 -1
  66. package/dist/lib/skit-adapter.d.ts.map +1 -1
  67. package/dist/lib/skit-adapter.js +26 -3
  68. package/dist/lib/skit-adapter.js.map +1 -1
  69. package/dist/lib/timing.d.ts +7 -0
  70. package/dist/lib/timing.d.ts.map +1 -0
  71. package/dist/lib/timing.js +14 -0
  72. package/dist/lib/timing.js.map +1 -0
  73. package/dist/lib/types.d.ts +3 -0
  74. package/dist/lib/types.d.ts.map +1 -1
  75. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/command-specs.d.ts +25 -0
  76. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/command-specs.d.ts.map +1 -0
  77. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/command-specs.js +55 -0
  78. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/command-specs.js.map +1 -0
  79. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/config.d.ts +52 -0
  80. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/config.d.ts.map +1 -0
  81. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/config.js +62 -0
  82. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/config.js.map +1 -0
  83. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/detect.d.ts +30 -0
  84. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/detect.d.ts.map +1 -0
  85. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/detect.js +39 -0
  86. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/detect.js.map +1 -0
  87. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/index.d.ts +35 -0
  88. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/index.d.ts.map +1 -0
  89. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/index.js +31 -0
  90. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/index.js.map +1 -0
  91. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/policy.d.ts +42 -0
  92. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/policy.d.ts.map +1 -0
  93. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/policy.js +36 -0
  94. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/policy.js.map +1 -0
  95. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/report.d.ts +11 -0
  96. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/report.d.ts.map +1 -0
  97. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/report.js +46 -0
  98. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/report.js.map +1 -0
  99. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/semver.d.ts +11 -0
  100. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/semver.d.ts.map +1 -0
  101. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/semver.js +81 -0
  102. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/semver.js.map +1 -0
  103. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/types.d.ts +29 -0
  104. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/types.d.ts.map +1 -0
  105. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/types.js +6 -0
  106. package/node_modules/@microwiseai/snapshot-downgrade-guard/dist/types.js.map +1 -0
  107. package/node_modules/@microwiseai/snapshot-downgrade-guard/package.json +55 -0
  108. package/package.json +5 -2
  109. package/dist/lib/transitive-resolver.d.ts +0 -89
  110. package/dist/lib/transitive-resolver.d.ts.map +0 -1
  111. package/dist/lib/transitive-resolver.js +0 -447
  112. package/dist/lib/transitive-resolver.js.map +0 -1
package/dist/index.js CHANGED
@@ -7,9 +7,10 @@ import { listCommand } from './commands/list.js';
7
7
  import { currentCommand } from './commands/current.js';
8
8
  import { publishCommand } from './commands/publish.js';
9
9
  import { licenseActivateCommand, licenseStatusCommand, licenseDeactivateCommand, licenseRefreshCommand, } from './commands/license.js';
10
- import { accessSyncCommand } from './commands/access.js';
10
+ import { accessSyncCommand, accessIndexCommand } from './commands/access.js';
11
11
  import { doctorCommand } from './commands/doctor.js';
12
12
  import { setupCommand } from './commands/setup.js';
13
+ import { configGetCommand, configSetCommand } from './commands/config.js';
13
14
  import { reportImport } from '@microwiseai/import-telemetry';
14
15
  import { VENDOR_NAME, PACKAGE_NAME } from './lib/config.js';
15
16
  const require = createRequire(import.meta.url);
@@ -46,7 +47,10 @@ const program = new Command();
46
47
  program
47
48
  .name('snapshot')
48
49
  .description('IST Snapshot Installer - Install packages from GitLab snapshot repos')
49
- .version(pkg.version);
50
+ .version(pkg.version)
51
+ // Root options (only --version) are recognized before the subcommand only, so
52
+ // `access-index --version <v>` reaches the subcommand.
53
+ .enablePositionalOptions();
50
54
  program
51
55
  .command('install <name>')
52
56
  .description('Install packages from a snapshot (e.g., @scope/name)')
@@ -55,6 +59,7 @@ program
55
59
  .option('-y, --yes', 'With --replace, skip the removal confirmation prompt')
56
60
  .option('--no-converge', 'Raw/fast install: skip post-install convergence — only verify, and fail-loud on any divergence (convergence is ON by default)')
57
61
  .option('--pin <spec...>', 'Override a package version without re-publishing, e.g. --pin @ist/sesh@0.4.0 (repeatable)')
62
+ .option('--allow-downgrade', 'Proceed even if the snapshot would downgrade already-installed global packages (one-shot; same as SNAPSHOT_ALLOW_LOCAL=1)')
58
63
  .action(async (name, options) => {
59
64
  await installCommand(name, options);
60
65
  });
@@ -81,7 +86,9 @@ program
81
86
  .option('-b, --bump <type>', 'Bump version (patch, minor, major)')
82
87
  .option('-d, --dry-run', 'Show what would be published without publishing')
83
88
  .option('-v, --verbose', 'Show detailed output')
84
- .option('--skip-access-sync', 'Skip syncing access levels to license-api')
89
+ .option('--skip-access-sync', '(deprecated, no-op) license-api access sync was retired')
90
+ .option('--allow-partial', 'With --dry-run only: generate the access-index even if the closure has gaps')
91
+ .option('--index-out <path>', 'With --dry-run, write access-index.json here (default: temp dir)')
85
92
  .action(async (options) => {
86
93
  await publishCommand(options);
87
94
  });
@@ -89,14 +96,28 @@ program
89
96
  const accessCmd = program
90
97
  .command('access')
91
98
  .description('Package access management');
99
+ // Retired (2026-09-28, snapshot-tier-access): no license-api writes. Kept so
100
+ // the command fails loudly with the contract reference instead of "unknown".
92
101
  accessCmd
93
102
  .command('sync [path]')
94
- .description('Sync package access levels with license-api')
95
- .option('-d, --dry-run', 'Show what would be synced without syncing')
103
+ .description('(retired) license-api access sync — use access-index instead')
104
+ .allowUnknownOption()
105
+ .action(async () => {
106
+ await accessSyncCommand();
107
+ });
108
+ const collect = (value, prev = []) => [...prev, value];
109
+ program
110
+ .command('access-index <snapshot>')
111
+ .description('Backfill access-index.json for published snapshot versions (reads snapshot.json from the registry; never re-publishes the tarball)')
112
+ .option('--version <v>', 'Published version (repeatable)', collect)
113
+ .option('--all', 'All published versions of the snapshot')
114
+ .option('--force', 'Re-upload even if access-index.json already exists')
115
+ .option('-d, --dry-run', 'Generate files only (no upload)')
116
+ .option('--out <dir>', 'With --dry-run, write files into this directory')
117
+ .option('--allow-partial', 'With --dry-run only: generate even if the closure has gaps (never uploaded)')
96
118
  .option('-v, --verbose', 'Show detailed output')
97
- .option('--skip-transitive', 'Skip transitive dependencies')
98
- .action(async (path, options) => {
99
- await accessSyncCommand(path, options);
119
+ .action(async (snapshot, options) => {
120
+ await accessIndexCommand(snapshot, options);
100
121
  });
101
122
  // License management commands
102
123
  const licenseCmd = program
@@ -126,6 +147,22 @@ licenseCmd
126
147
  .action(async () => {
127
148
  await licenseRefreshCommand();
128
149
  });
150
+ // Machine-level config (thin wrapper over @microwiseai/snapshot-downgrade-guard)
151
+ const configCmd = program
152
+ .command('config')
153
+ .description('Machine-level snapshot config (~/.config/ist-snapshot/config.json)');
154
+ configCmd
155
+ .command('get [key]')
156
+ .description('Get a config value (default: show install.onDowngrade)')
157
+ .action(async (key) => {
158
+ await configGetCommand(key);
159
+ });
160
+ configCmd
161
+ .command('set <key> <value>')
162
+ .description('Set a config value, e.g. install.onDowngrade refuse|warn|allow')
163
+ .action(async (key, value) => {
164
+ await configSetCommand(key, value);
165
+ });
129
166
  program
130
167
  .command('doctor')
131
168
  .description('Check if all prerequisites are satisfied')
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * access-index.json — per-version serving manifest for registry-proxy.
3
+ *
4
+ * Contract (global state `snapshot-tier-access`, 2026-09-28 revision):
5
+ * snapshot.json `access` (authoring SSOT) → `snapshot publish` writes the
6
+ * install-set transitive closure (npmjs origin excluded) as access-index.json
7
+ * into the SAME generic package version (serving SSOT) → registry-proxy
8
+ * rebuilds its index from every published version of supported snapshots.
9
+ *
10
+ * Schema 1:
11
+ * { schema: 1, snapshot, version, access: "public" | "licensed",
12
+ * productId (required when licensed, else null),
13
+ * generatedBy: "@microwiseai/snapshot@<ver> <git sha>",
14
+ * closureSource: "gitlab" | "proxy" (additive, schema-1 compatible),
15
+ * packages: [{ name, versions: [exact…], kind: "npm" | "generic" }] }
16
+ * generic names use the proxy path form (`ist__qa-kit`). Output is sorted
17
+ * (packages by kind+name, versions ascending) so it is deterministic.
18
+ *
19
+ * Partial closures (unresolved / untraversed / skipped kits / unmatched) are
20
+ * refused by default — a partial index must not be published. `allowPartial`
21
+ * is the only escape hatch.
22
+ */
23
+ import type { Snapshot } from './types.js';
24
+ import { type ClosureSource, type InstallClosure } from './access-sync.js';
25
+ export { ACCESS_INDEX_FILE } from './gitlab-publisher.js';
26
+ export { downloadAccessIndex, findGenericPackageVersion, listGenericPackageVersions, listPackageFiles, resolveGenericProjectId, uploadAccessIndex, type GenericPackageVersion, type GenericTarget, } from './gitlab-publisher.js';
27
+ export declare const ACCESS_INDEX_SCHEMA = 1;
28
+ export interface AccessIndexPackage {
29
+ name: string;
30
+ versions: string[];
31
+ kind: 'npm' | 'generic';
32
+ }
33
+ export interface AccessIndex {
34
+ schema: 1;
35
+ snapshot: string;
36
+ version: string;
37
+ access: 'public' | 'licensed';
38
+ productId: string | null;
39
+ generatedBy: string;
40
+ /** Where the closure walk read packuments/kits (additive field). */
41
+ closureSource: ClosureSource;
42
+ packages: AccessIndexPackage[];
43
+ }
44
+ /** Closure gaps that make an index partial. */
45
+ export declare function closureGaps(closure: InstallClosure): string[];
46
+ export declare class PartialClosureError extends Error {
47
+ readonly snapshotSpec: string;
48
+ readonly gaps: string[];
49
+ constructor(snapshotSpec: string, gaps: string[]);
50
+ }
51
+ /** Map snapshot.json `access` to the schema-1 access/productId pair (fail-loud). */
52
+ export declare function indexAccess(snapshot: Snapshot): {
53
+ access: 'public' | 'licensed';
54
+ productId: string | null;
55
+ };
56
+ /**
57
+ * Pure builder: closure → schema-1 index. The snapshot's own generic package
58
+ * (e.g. `ist__beta@<version>`) is included so the proxy can serve the snapshot
59
+ * artifact itself under the same rule as its members.
60
+ */
61
+ export declare function buildAccessIndex(snapshot: Snapshot, closure: InstallClosure, generatedBy: string, closureSource?: ClosureSource): AccessIndex;
62
+ /** Stable serialization (2-space JSON + trailing newline). */
63
+ export declare function serializeAccessIndex(index: AccessIndex): string;
64
+ /** "@microwiseai/snapshot@<ver> <git sha>" of the running CLI. */
65
+ export declare function generatedByString(): string;
66
+ export interface GenerateResult {
67
+ index: AccessIndex;
68
+ closure: InstallClosure;
69
+ gaps: string[];
70
+ }
71
+ /**
72
+ * Walk the closure and build the index. Throws PartialClosureError on gaps
73
+ * unless `allowPartial` (gaps are then returned for the caller to warn about).
74
+ */
75
+ export declare function generateAccessIndex(snapshot: Snapshot, options?: {
76
+ allowPartial?: boolean;
77
+ verbose?: boolean;
78
+ generatedBy?: string;
79
+ source?: ClosureSource;
80
+ }): Promise<GenerateResult>;
81
+ //# sourceMappingURL=access-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-index.d.ts","sourceRoot":"","sources":["../../src/lib/access-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAOH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAA0C,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGnH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,0BAA0B,EAC1B,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EACjB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,GACnB,MAAM,uBAAuB,CAAC;AAC/B,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,CAAC,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAED,+CAA+C;AAC/C,wBAAgB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,EAAE,CAM7D;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAE1C,QAAQ,CAAC,YAAY,EAAE,MAAM;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE;gBADd,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EAAE;CAQ1B;AAED,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG;IAAE,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAa3G;AAWD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,MAAM,EACnB,aAAa,GAAE,aAAwB,GACtC,WAAW,CA6Bb;AAED,8DAA8D;AAC9D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAE/D;AAID,kEAAkE;AAClE,wBAAgB,iBAAiB,IAAI,MAAM,CAwC1C;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,aAAa,CAAA;CAAO,GACxG,OAAO,CAAC,cAAc,CAAC,CAWzB"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * access-index.json — per-version serving manifest for registry-proxy.
3
+ *
4
+ * Contract (global state `snapshot-tier-access`, 2026-09-28 revision):
5
+ * snapshot.json `access` (authoring SSOT) → `snapshot publish` writes the
6
+ * install-set transitive closure (npmjs origin excluded) as access-index.json
7
+ * into the SAME generic package version (serving SSOT) → registry-proxy
8
+ * rebuilds its index from every published version of supported snapshots.
9
+ *
10
+ * Schema 1:
11
+ * { schema: 1, snapshot, version, access: "public" | "licensed",
12
+ * productId (required when licensed, else null),
13
+ * generatedBy: "@microwiseai/snapshot@<ver> <git sha>",
14
+ * closureSource: "gitlab" | "proxy" (additive, schema-1 compatible),
15
+ * packages: [{ name, versions: [exact…], kind: "npm" | "generic" }] }
16
+ * generic names use the proxy path form (`ist__qa-kit`). Output is sorted
17
+ * (packages by kind+name, versions ascending) so it is deterministic.
18
+ *
19
+ * Partial closures (unresolved / untraversed / skipped kits / unmatched) are
20
+ * refused by default — a partial index must not be published. `allowPartial`
21
+ * is the only escape hatch.
22
+ */
23
+ import { execFileSync } from 'node:child_process';
24
+ import { existsSync, readFileSync } from 'node:fs';
25
+ import { dirname, join } from 'node:path';
26
+ import { fileURLToPath } from 'node:url';
27
+ import { createRequire } from 'node:module';
28
+ import { resolveInstallClosure, kitRegistryName } from './access-sync.js';
29
+ import { compareVersions, parseVersion } from './semver-range.js';
30
+ export { ACCESS_INDEX_FILE } from './gitlab-publisher.js';
31
+ export { downloadAccessIndex, findGenericPackageVersion, listGenericPackageVersions, listPackageFiles, resolveGenericProjectId, uploadAccessIndex, } from './gitlab-publisher.js';
32
+ export const ACCESS_INDEX_SCHEMA = 1;
33
+ /** Closure gaps that make an index partial. */
34
+ export function closureGaps(closure) {
35
+ return [
36
+ ...closure.unresolved.map((g) => `unresolved: ${g}`),
37
+ ...closure.untraversed.map((g) => `untraversed: ${g}`),
38
+ ...closure.skippedKits.map((g) => `kit not read: ${g}`),
39
+ ];
40
+ }
41
+ export class PartialClosureError extends Error {
42
+ snapshotSpec;
43
+ gaps;
44
+ constructor(snapshotSpec, gaps) {
45
+ super(`access-index for ${snapshotSpec} would be partial (${gaps.length} gap(s)); refusing to publish it. ` +
46
+ 'Fix the gaps or pass --allow-partial.\n - ' + gaps.join('\n - '));
47
+ this.snapshotSpec = snapshotSpec;
48
+ this.gaps = gaps;
49
+ this.name = 'PartialClosureError';
50
+ }
51
+ }
52
+ /** Map snapshot.json `access` to the schema-1 access/productId pair (fail-loud). */
53
+ export function indexAccess(snapshot) {
54
+ const a = snapshot.access;
55
+ if (a === 'public')
56
+ return { access: 'public', productId: null };
57
+ if (a && typeof a === 'object' && a.type === 'licensed') {
58
+ if (!a.productId || typeof a.productId !== 'string') {
59
+ throw new Error(`${snapshot.name}@${snapshot.version}: access is licensed but productId is missing`);
60
+ }
61
+ return { access: 'licensed', productId: a.productId };
62
+ }
63
+ throw new Error(`${snapshot.name}@${snapshot.version}: access-index schema 1 needs snapshot.json "access" = "public" ` +
64
+ `or { "type": "licensed", "productId": "…" } (got ${JSON.stringify(a ?? null)})`);
65
+ }
66
+ function sortVersions(versions) {
67
+ return [...new Set(versions)].sort((a, b) => {
68
+ const pa = parseVersion(a);
69
+ const pb = parseVersion(b);
70
+ if (pa && pb)
71
+ return compareVersions(pa, pb);
72
+ return a < b ? -1 : a > b ? 1 : 0;
73
+ });
74
+ }
75
+ /**
76
+ * Pure builder: closure → schema-1 index. The snapshot's own generic package
77
+ * (e.g. `ist__beta@<version>`) is included so the proxy can serve the snapshot
78
+ * artifact itself under the same rule as its members.
79
+ */
80
+ export function buildAccessIndex(snapshot, closure, generatedBy, closureSource = 'gitlab') {
81
+ const { access, productId } = indexAccess(snapshot);
82
+ const merged = new Map();
83
+ const add = (kind, name, versions) => {
84
+ const key = `${kind}:${name}`;
85
+ const e = merged.get(key) ?? { name, kind, versions: [] };
86
+ e.versions.push(...versions);
87
+ merged.set(key, e);
88
+ };
89
+ for (const r of closure.resolved) {
90
+ add(r.kind, r.kind === 'generic' ? kitRegistryName(r.name) : r.name, r.versions);
91
+ }
92
+ add('generic', kitRegistryName(snapshot.name), [snapshot.version]);
93
+ const packages = [...merged.values()]
94
+ .filter((p) => p.versions.length > 0)
95
+ .map((p) => ({ name: p.name, versions: sortVersions(p.versions), kind: p.kind }))
96
+ .sort((a, b) => (a.kind === b.kind ? (a.name < b.name ? -1 : a.name > b.name ? 1 : 0) : a.kind < b.kind ? 1 : -1));
97
+ return {
98
+ schema: ACCESS_INDEX_SCHEMA,
99
+ snapshot: snapshot.name,
100
+ version: snapshot.version,
101
+ access,
102
+ productId,
103
+ generatedBy,
104
+ closureSource,
105
+ packages,
106
+ };
107
+ }
108
+ /** Stable serialization (2-space JSON + trailing newline). */
109
+ export function serializeAccessIndex(index) {
110
+ return JSON.stringify(index, null, 2) + '\n';
111
+ }
112
+ let cachedGeneratedBy;
113
+ /** "@microwiseai/snapshot@<ver> <git sha>" of the running CLI. */
114
+ export function generatedByString() {
115
+ if (cachedGeneratedBy)
116
+ return cachedGeneratedBy;
117
+ const here = dirname(fileURLToPath(import.meta.url));
118
+ const require = createRequire(import.meta.url);
119
+ let name = '@microwiseai/snapshot';
120
+ let version = '0.0.0';
121
+ let pkgRoot = join(here, '..', '..');
122
+ try {
123
+ const pkgPath = require.resolve('../../package.json');
124
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
125
+ name = pkg.name ?? name;
126
+ version = pkg.version ?? version;
127
+ pkgRoot = dirname(pkgPath);
128
+ }
129
+ catch {
130
+ // keep defaults
131
+ }
132
+ let sha = process.env.SNAPSHOT_BUILD_SHA || '';
133
+ if (!sha) {
134
+ // dist/build-info.json is written at build time (scripts/write-build-info.mjs).
135
+ const info = join(pkgRoot, 'dist', 'build-info.json');
136
+ if (existsSync(info)) {
137
+ try {
138
+ sha = JSON.parse(readFileSync(info, 'utf-8')).gitSha ?? '';
139
+ }
140
+ catch {
141
+ // fall through
142
+ }
143
+ }
144
+ }
145
+ if (!sha) {
146
+ try {
147
+ sha = execFileSync('git', ['rev-parse', '--short=12', 'HEAD'], {
148
+ cwd: pkgRoot,
149
+ stdio: ['ignore', 'pipe', 'ignore'],
150
+ }).toString().trim();
151
+ }
152
+ catch {
153
+ sha = 'unknown';
154
+ }
155
+ }
156
+ cachedGeneratedBy = `${name}@${version} ${sha}`;
157
+ return cachedGeneratedBy;
158
+ }
159
+ /**
160
+ * Walk the closure and build the index. Throws PartialClosureError on gaps
161
+ * unless `allowPartial` (gaps are then returned for the caller to warn about).
162
+ */
163
+ export async function generateAccessIndex(snapshot, options = {}) {
164
+ indexAccess(snapshot); // fail fast before any network walk
165
+ // Publisher-side read from GitLab by default (decision 2026-09-28 (A)).
166
+ const source = options.source ?? 'gitlab';
167
+ const closure = await resolveInstallClosure(snapshot, { transitive: true, verbose: options.verbose, source });
168
+ const gaps = closureGaps(closure);
169
+ if (gaps.length > 0 && !options.allowPartial) {
170
+ throw new PartialClosureError(`${snapshot.name}@${snapshot.version}`, gaps);
171
+ }
172
+ const index = buildAccessIndex(snapshot, closure, options.generatedBy ?? generatedByString(), source);
173
+ return { index, closure, gaps };
174
+ }
175
+ //# sourceMappingURL=access-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-index.js","sourceRoot":"","sources":["../../src/lib/access-index.ts"],"names":[],"mappings":"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"}
@@ -1,26 +1,75 @@
1
1
  /**
2
- * Access Sync - Synchronize snapshot package access with license-api
2
+ * Install-set closure resolver (formerly "access sync").
3
3
  *
4
- * When a snapshot is published, this module registers all packages
5
- * in the snapshot's install list with the appropriate access level.
4
+ * Walks a snapshot's install-set dependency closure through the registry-proxy.
5
+ * The result feeds access-index.json (see ./access-index.ts), the serving SSOT
6
+ * that registry-proxy reads to grant snapshot members.
7
+ *
8
+ * The former license-api write path (POST /admin/package-access/with-deps,
9
+ * LICENSE_API_ADMIN_KEY) was retired by the 2026-09-28 owner decision
10
+ * (global state `snapshot-tier-access`, `owner-decision-2026-09-28-proxy-snapshot-driven`):
11
+ * "license-api package_access 에 snapshot 의존 패키지를 등록하지 않음(access-sync 의
12
+ * license-api 쓰기 경로 폐기)". Nothing in this module writes anywhere.
6
13
  */
7
14
  import type { Snapshot } from './types.js';
8
- interface SyncResult {
9
- success: boolean;
10
- registered: string[];
11
- failed: string[];
12
- skipped: string[];
15
+ /**
16
+ * Where the closure walk reads packuments / kit tarballs from.
17
+ * - 'proxy' (default): registry-proxy with the user's session/license token.
18
+ * - 'gitlab': GitLab directly with the publisher's glpkg token. Used by
19
+ * publish/backfill only (snapshot-mgr decision 2026-09-28 (A)): the proxy
20
+ * grants from access-index.json, so reading the closure through it is
21
+ * circular. GitLab 3xx/404 on a packument = npmjs origin (excluded).
22
+ */
23
+ export type ClosureSource = 'proxy' | 'gitlab';
24
+ /** Result of the install-set closure walk. @internal Exported for testing */
25
+ export interface InstallClosure {
26
+ /** Package names to register (discovery order, deduped). */
27
+ packages: string[];
28
+ /** Transitive deps judged public npmjs — not registered, not descended. */
29
+ npmjsExcluded: string[];
30
+ /** Kits whose skit.json could not be read. */
31
+ skippedKits: string[];
32
+ /** Our packages whose deps could not be read (name@version (reason)). */
33
+ untraversed: string[];
34
+ /** Transitive deps that could not be classified (not registered). */
35
+ unresolved: string[];
36
+ /**
37
+ * Exact versions the walk resolved, per package (npmjs-origin excluded).
38
+ * Kits are `kind: 'generic'` and keep their `@scope/name` here; the index
39
+ * builder converts them to the proxy generic path form (ist__qa-kit).
40
+ */
41
+ resolved: ResolvedPackage[];
42
+ }
43
+ /** One package of the closure with every exact version the walk resolved. */
44
+ export interface ResolvedPackage {
45
+ name: string;
46
+ kind: 'npm' | 'generic';
47
+ versions: string[];
13
48
  }
14
49
  /**
15
- * Sync snapshot packages with license-api
16
- *
17
- * @param snapshot - Parsed snapshot.json
18
- * @param options - Sync options
50
+ * Resolve a spec against a version list: dist-tag → exact → highest version
51
+ * satisfying the range (prerelease allowed only for prerelease pins).
52
+ * @internal Exported for testing
53
+ */
54
+ export declare function resolveSpecVersion(versions: string[], distTags: Record<string, string>, spec: string): string | null;
55
+ /**
56
+ * Pick the npm deps (name → spec) a kit's skit.json declares under
57
+ * `dependencies.npm`. Entries marked `source: "npm"` come from public npmjs
58
+ * and are excluded. Object entries use their `version` field.
59
+ * @internal Exported for testing
60
+ */
61
+ export declare function kitNpmDeps(skitJson: unknown): Array<[string, string]>;
62
+ /** @internal Exported for testing */
63
+ export declare function kitNpmDepNames(skitJson: unknown): string[];
64
+ /** `@ist/qa-kit` → `ist__qa-kit` (registry-proxy generic path form). */
65
+ export declare function kitRegistryName(kit: string): string;
66
+ /**
67
+ * Walk the install-set dependency closure once.
68
+ * @internal Exported for testing
19
69
  */
20
- export declare function syncPackageAccess(snapshot: Snapshot, options?: {
70
+ export declare function resolveInstallClosure(snapshot: Snapshot, options?: {
71
+ transitive?: boolean;
21
72
  verbose?: boolean;
22
- dryRun?: boolean;
23
- includeTransitive?: boolean;
24
- }): Promise<SyncResult>;
25
- export {};
73
+ source?: ClosureSource;
74
+ }): Promise<InstallClosure>;
26
75
  //# sourceMappingURL=access-sync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"access-sync.d.ts","sourceRoot":"","sources":["../../src/lib/access-sync.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,YAAY,CAAC;AA8B3D,UAAU,UAAU;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAyJD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE;IACP,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CACxB,GACL,OAAO,CAAC,UAAU,CAAC,CA8GrB"}
1
+ {"version":3,"file":"access-sync.d.ts","sourceRoot":"","sources":["../../src/lib/access-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAS3C;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,CAAC;AAsD/C,6EAA6E;AAC7E,MAAM,WAAW,cAAc;IAC7B,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,2EAA2E;IAC3E,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,8CAA8C;IAC9C,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,yEAAyE;IACzE,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,qEAAqE;IACrE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB;;;;OAIG;IACH,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,6EAA6E;AAC7E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAgCD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAAE,EAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,IAAI,CAIf;AAyDD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAerE;AAED,qCAAqC;AACrC,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,EAAE,CAE1D;AA4RD,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,aAAa,CAAA;CAAO,GAChF,OAAO,CAAC,cAAc,CAAC,CAQzB"}