@vectle/cli 1.0.0 → 1.1.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 (105) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +15 -8
  3. package/dist/activity.d.ts +10 -0
  4. package/dist/activity.js +10 -0
  5. package/dist/activity.js.map +1 -0
  6. package/dist/adapters/claude.d.ts +4 -0
  7. package/dist/adapters/claude.js +279 -0
  8. package/dist/adapters/claude.js.map +1 -0
  9. package/dist/adapters/codex.d.ts +16 -0
  10. package/dist/adapters/codex.js +410 -0
  11. package/dist/adapters/codex.js.map +1 -0
  12. package/dist/adapters/common.d.ts +80 -0
  13. package/dist/adapters/common.js +249 -0
  14. package/dist/adapters/common.js.map +1 -0
  15. package/dist/adapters/cursor.d.ts +4 -0
  16. package/dist/adapters/cursor.js +240 -0
  17. package/dist/adapters/cursor.js.map +1 -0
  18. package/dist/adapters/vscode.d.ts +4 -0
  19. package/dist/adapters/vscode.js +240 -0
  20. package/dist/adapters/vscode.js.map +1 -0
  21. package/dist/agent-policy.d.ts +50 -0
  22. package/dist/agent-policy.js +83 -0
  23. package/dist/agent-policy.js.map +1 -0
  24. package/dist/client.d.ts +69 -10
  25. package/dist/client.js +247 -24
  26. package/dist/client.js.map +1 -1
  27. package/dist/constants.d.ts +12 -2
  28. package/dist/constants.js +7 -1
  29. package/dist/constants.js.map +1 -1
  30. package/dist/contracts.d.ts +53 -0
  31. package/dist/contracts.js +68 -0
  32. package/dist/contracts.js.map +1 -0
  33. package/dist/delivery.d.ts +80 -0
  34. package/dist/delivery.js +304 -0
  35. package/dist/delivery.js.map +1 -0
  36. package/dist/findings.d.ts +12 -0
  37. package/dist/findings.js +41 -0
  38. package/dist/findings.js.map +1 -0
  39. package/dist/help.d.ts +1 -0
  40. package/dist/help.js +53 -0
  41. package/dist/help.js.map +1 -0
  42. package/dist/index.js +370 -72
  43. package/dist/index.js.map +1 -1
  44. package/dist/integrations.d.ts +126 -0
  45. package/dist/integrations.js +173 -0
  46. package/dist/integrations.js.map +1 -0
  47. package/dist/legacy-compat.d.ts +45 -0
  48. package/dist/legacy-compat.js +149 -0
  49. package/dist/legacy-compat.js.map +1 -0
  50. package/dist/lifecycle.d.ts +50 -0
  51. package/dist/lifecycle.js +146 -0
  52. package/dist/lifecycle.js.map +1 -0
  53. package/dist/locator.d.ts +58 -0
  54. package/dist/locator.js +233 -0
  55. package/dist/locator.js.map +1 -0
  56. package/dist/mcp.d.ts +12 -2
  57. package/dist/mcp.js +194 -48
  58. package/dist/mcp.js.map +1 -1
  59. package/dist/modes.d.ts +37 -0
  60. package/dist/modes.js +32 -0
  61. package/dist/modes.js.map +1 -0
  62. package/dist/outbox.d.ts +9 -0
  63. package/dist/outbox.js +188 -0
  64. package/dist/outbox.js.map +1 -0
  65. package/dist/parser.d.ts +10 -0
  66. package/dist/parser.js +99 -0
  67. package/dist/parser.js.map +1 -0
  68. package/dist/pulse.d.ts +122 -0
  69. package/dist/pulse.js +412 -0
  70. package/dist/pulse.js.map +1 -0
  71. package/dist/release-manifest.d.ts +123 -0
  72. package/dist/release-manifest.js +226 -0
  73. package/dist/release-manifest.js.map +1 -0
  74. package/dist/release.d.ts +1 -1
  75. package/dist/response.d.ts +17 -0
  76. package/dist/response.js +15 -0
  77. package/dist/response.js.map +1 -1
  78. package/dist/rollout.d.ts +8 -0
  79. package/dist/rollout.js +27 -0
  80. package/dist/rollout.js.map +1 -0
  81. package/dist/runtime.d.ts +60 -0
  82. package/dist/runtime.js +276 -0
  83. package/dist/runtime.js.map +1 -0
  84. package/dist/secure-store.d.ts +36 -0
  85. package/dist/secure-store.js +282 -0
  86. package/dist/secure-store.js.map +1 -0
  87. package/dist/setup.d.ts +159 -0
  88. package/dist/setup.js +629 -0
  89. package/dist/setup.js.map +1 -0
  90. package/dist/state.d.ts +98 -0
  91. package/dist/state.js +226 -0
  92. package/dist/state.js.map +1 -0
  93. package/dist/status.d.ts +282 -0
  94. package/dist/status.js +213 -0
  95. package/dist/status.js.map +1 -0
  96. package/dist/store.d.ts +44 -2
  97. package/dist/store.js +222 -44
  98. package/dist/store.js.map +1 -1
  99. package/dist/update.d.ts +33 -1
  100. package/dist/update.js +88 -16
  101. package/dist/update.js.map +1 -1
  102. package/dist/write-journal.d.ts +71 -0
  103. package/dist/write-journal.js +175 -0
  104. package/dist/write-journal.js.map +1 -0
  105. package/package.json +7 -2
package/dist/store.js CHANGED
@@ -1,10 +1,11 @@
1
- import { execFileSync, spawnSync } from 'node:child_process';
2
- import { chmodSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
1
+ import { randomBytes } from 'node:crypto';
2
+ import { chmodSync, existsSync, lstatSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from 'node:fs';
3
3
  import { homedir } from 'node:os';
4
- import { join } from 'node:path';
4
+ import { isAbsolute, join } from 'node:path';
5
5
  import { DEFAULT_ENDPOINT } from './constants.js';
6
- const keychainService = 'com.vectle.cli';
7
- const keychainAccount = 'default';
6
+ import { consentPolicyDigest } from './agent-policy.js';
7
+ import { readActiveRoot } from './locator.js';
8
+ import { availableSecureBackend, credentialAccountHandle, deleteLegacyNativeSecret, deleteSecureSecret, installationBackendName, readLegacyNativeSecret, readSecureSecret, secureBackendForInstallationName, writeLegacyNativeSecret, writeSecureSecret } from './secure-store.js';
8
9
  export function configDirectory() {
9
10
  if (process.env.VECTLE_CONFIG_DIR)
10
11
  return process.env.VECTLE_CONFIG_DIR;
@@ -14,49 +15,163 @@ export function configDirectory() {
14
15
  }
15
16
  export function configPath() { return join(configDirectory(), 'config.json'); }
16
17
  function credentialPath() { return join(configDirectory(), 'credential'); }
18
+ function validV2Installation(value) {
19
+ if (!value || typeof value !== 'object' || Array.isArray(value))
20
+ return false;
21
+ const raw = value;
22
+ const scopes = raw.consented_scopes;
23
+ const validScopes = ['activity:read', 'content:withdraw', 'findings:write', 'profile:read', 'standing:write', 'updates:read'];
24
+ return Object.keys(raw).length === 10
25
+ && typeof raw.support_code === 'string' && /^vci_[A-Za-z0-9_-]{22}$/u.test(raw.support_code)
26
+ && typeof raw.approved_api_origin === 'string'
27
+ && (() => { try {
28
+ return new URL(raw.approved_api_origin).protocol === 'https:' && new URL(raw.approved_api_origin).pathname === '/' && new URL(raw.approved_api_origin).search === '' && new URL(raw.approved_api_origin).hash === '';
29
+ }
30
+ catch {
31
+ return false;
32
+ } })()
33
+ && ['macos_keychain', 'linux_secret_service', 'windows_credential_manager', 'file'].includes(String(raw.credential_backend))
34
+ && typeof raw.credential_account_handle === 'string' && /^vci-[0-9a-f]{32}$/u.test(raw.credential_account_handle)
35
+ && raw.consent_version === 2
36
+ && Array.isArray(scopes) && scopes.length >= 1 && scopes.length <= validScopes.length
37
+ && scopes.every(scope => typeof scope === 'string' && validScopes.includes(scope))
38
+ && new Set(scopes).size === scopes.length
39
+ && [...scopes].sort().every((scope, index) => scope === scopes[index])
40
+ && typeof raw.consent_policy_digest === 'string' && /^sha256:[0-9a-f]{64}$/u.test(raw.consent_policy_digest) && raw.consent_policy_digest === consentPolicyDigest()
41
+ && typeof raw.approved_at === 'string' && Number.isFinite(Date.parse(raw.approved_at))
42
+ && typeof raw.automatic_lookup === 'boolean'
43
+ && typeof raw.automatic_sharing === 'boolean'
44
+ && (() => { try {
45
+ return credentialAccountHandle(raw.approved_api_origin, raw.support_code) === raw.credential_account_handle;
46
+ }
47
+ catch {
48
+ return false;
49
+ } })();
50
+ }
51
+ function isV2Raw(value) {
52
+ if (!value || typeof value !== 'object' || Array.isArray(value))
53
+ return false;
54
+ const raw = value;
55
+ return Object.keys(raw).length === 7
56
+ && raw.schema_version === 'vectle-config-v2'
57
+ && typeof raw.endpoint === 'string'
58
+ && ['unconfigured', 'active', 'read-only', 'paused', 'revocation_pending', 'off'].includes(String(raw.mode))
59
+ && typeof raw.query_analytics === 'boolean'
60
+ && typeof raw.operational_analytics === 'boolean'
61
+ && typeof raw.rollout_seed === 'string'
62
+ && (raw.installation === null || validV2Installation(raw.installation));
63
+ }
17
64
  export function defaultConfig() {
18
- return { endpoint: process.env.VECTLE_API_URL?.replace(/\/$/u, '') || DEFAULT_ENDPOINT, clientFamily: 'terminal', queryAnalytics: true };
65
+ return { endpoint: process.env.VECTLE_API_URL?.replace(/\/$/u, '') || DEFAULT_ENDPOINT, clientFamily: 'terminal', queryAnalytics: true, operationalAnalytics: true, query_analytics: true, operational_analytics: true, mode: 'unconfigured', installation: null };
19
66
  }
20
67
  export function loadConfig() {
21
68
  try {
22
- return { ...defaultConfig(), ...JSON.parse(readFileSync(configPath(), 'utf8')) };
69
+ const raw = JSON.parse(readFileSync(configPath(), 'utf8'));
70
+ if (isV2Raw(raw)) {
71
+ const queryAnalytics = raw.query_analytics;
72
+ const operationalAnalytics = raw.operational_analytics;
73
+ const activeRoot = readActiveRoot();
74
+ return { ...defaultConfig(), schema_version: 'vectle-config-v2', config_source: 'v2', endpoint: raw.endpoint, mode: raw.mode, installation: raw.installation, rollout_seed: raw.rollout_seed, queryAnalytics, operationalAnalytics, query_analytics: queryAnalytics, operational_analytics: operationalAnalytics, ...(activeRoot ? { stateRoot: activeRoot.state_root } : {}) };
75
+ }
76
+ if (raw.schema_version === 'vectle-config-v2')
77
+ return { ...defaultConfig(), schema_version: 'vectle-config-v2', config_source: 'v2', configCorrupt: true, mode: 'off', installation: null };
78
+ const queryAnalytics = typeof raw.query_analytics === 'boolean'
79
+ ? raw.query_analytics
80
+ : typeof raw.queryAnalytics === 'boolean' ? raw.queryAnalytics : true;
81
+ const operationalAnalytics = typeof raw.operational_analytics === 'boolean'
82
+ ? raw.operational_analytics
83
+ : typeof raw.operationalAnalytics === 'boolean' ? raw.operationalAnalytics : true;
84
+ return { ...defaultConfig(), ...raw, queryAnalytics, operationalAnalytics, query_analytics: queryAnalytics, operational_analytics: operationalAnalytics, config_source: 'legacy_v1' };
23
85
  }
24
86
  catch {
25
87
  return defaultConfig();
26
88
  }
27
89
  }
90
+ /**
91
+ * Read the minimal v2 config projection bound to an explicit state root.
92
+ * Managed MCP and lifecycle processes use this instead of trusting an
93
+ * ambient VECTLE_CONFIG_DIR selected by the host.
94
+ */
95
+ export function loadBoundConfig(root) {
96
+ if (!isAbsolute(root))
97
+ return null;
98
+ try {
99
+ const raw = JSON.parse(readFileSync(join(root, 'config.json'), 'utf8'));
100
+ if (!isV2Raw(raw))
101
+ return null;
102
+ const queryAnalytics = raw.query_analytics;
103
+ const operationalAnalytics = raw.operational_analytics;
104
+ return { ...defaultConfig(), schema_version: 'vectle-config-v2', config_source: 'v2', endpoint: raw.endpoint, mode: raw.mode, installation: raw.installation, rollout_seed: raw.rollout_seed, queryAnalytics, operationalAnalytics, query_analytics: queryAnalytics, operational_analytics: operationalAnalytics, stateRoot: root };
105
+ }
106
+ catch {
107
+ return null;
108
+ }
109
+ }
28
110
  export function saveConfig(config) {
111
+ if (config.configCorrupt)
112
+ throw new Error('invalid_v2_config');
29
113
  mkdirSync(configDirectory(), { recursive: true, mode: 0o700 });
30
- writeFileSync(configPath(), `${JSON.stringify(config, null, 2)}\n`, { mode: 0o600 });
114
+ const queryAnalytics = typeof config.query_analytics === 'boolean' ? config.query_analytics : config.queryAnalytics;
115
+ const operationalAnalytics = typeof config.operational_analytics === 'boolean' ? config.operational_analytics : config.operationalAnalytics ?? true;
116
+ const persisted = config.schema_version === 'vectle-config-v2'
117
+ ? (() => {
118
+ if (!['unconfigured', 'active', 'read-only', 'paused', 'revocation_pending', 'off'].includes(String(config.mode ?? '')) || (config.installation !== null && !validV2Installation(config.installation)))
119
+ throw new Error('invalid_v2_config');
120
+ return {
121
+ schema_version: 'vectle-config-v2',
122
+ endpoint: config.endpoint.replace(/\/$/u, ''),
123
+ mode: config.mode ?? (config.installation ? 'active' : 'unconfigured'),
124
+ query_analytics: queryAnalytics,
125
+ operational_analytics: operationalAnalytics,
126
+ rollout_seed: config.rollout_seed ?? randomRolloutSeed(),
127
+ installation: config.installation ?? null,
128
+ };
129
+ })()
130
+ : { ...config, queryAnalytics, operationalAnalytics, query_analytics: queryAnalytics, operational_analytics: operationalAnalytics };
131
+ writeFileSync(configPath(), `${JSON.stringify(persisted, null, 2)}\n`, { mode: 0o600 });
31
132
  chmodSync(configPath(), 0o600);
133
+ if (config.schema_version === 'vectle-config-v2' && config.stateRoot && isAbsolute(config.stateRoot)) {
134
+ try {
135
+ const rootStats = lstatSync(config.stateRoot);
136
+ if (!rootStats.isSymbolicLink() && rootStats.isDirectory() && rootStats.uid === (typeof process.getuid === 'function' ? process.getuid() : rootStats.uid) && (process.platform === 'win32' || (rootStats.mode & 0o077) === 0)) {
137
+ const boundPath = join(config.stateRoot, 'config.json');
138
+ const temporary = `${boundPath}.tmp-${randomBytes(8).toString('hex')}`;
139
+ writeFileSync(temporary, `${JSON.stringify(persisted, null, 2)}\n`, { mode: 0o600 });
140
+ renameSync(temporary, boundPath);
141
+ chmodSync(boundPath, 0o600);
142
+ }
143
+ }
144
+ catch { /* the primary config remains authoritative for legacy/default paths */ }
145
+ }
146
+ }
147
+ function randomRolloutSeed() {
148
+ // The value is only a local bucket seed. It is never transmitted and does
149
+ // not identify a user or installation.
150
+ return `seed-${randomBytes(18).toString('base64url')}`;
32
151
  }
33
152
  export function keychainAvailable() {
34
153
  if (process.env.VECTLE_TOKEN)
35
154
  return 'environment';
36
155
  if (process.env.VECTLE_TEST_CREDENTIAL_BACKEND === 'file')
37
156
  return 'file';
38
- if (process.platform === 'darwin')
39
- return existsSync('/usr/bin/security') ? 'keychain' : null;
40
- if (process.platform === 'linux') {
41
- const result = spawnSync('secret-tool', ['--help'], { stdio: 'ignore' });
42
- return result.status === 0 ? 'keychain' : null;
43
- }
44
- return null;
157
+ const backend = availableSecureBackend();
158
+ return backend === 'keychain' || backend === 'secret_service' || backend === 'credential_manager' ? 'keychain' : null;
45
159
  }
46
160
  export function storeCredential(token, allowFileFallback = false) {
47
- if (!/^vctk_[A-Za-z0-9_-]{43}$/u.test(token))
161
+ if (!/^(?:vctk|vctir|vctia)_[A-Za-z0-9_-]{43}$/u.test(token))
48
162
  throw new Error('Vectle returned an invalid credential.');
49
163
  const backend = keychainAvailable();
50
164
  if (backend === 'environment')
51
165
  return 'environment';
52
- if (backend === 'keychain' && process.platform === 'darwin') {
53
- execFileSync('/usr/bin/security', ['add-generic-password', '-a', keychainAccount, '-s', keychainService, '-w', token, '-U'], { stdio: 'ignore' });
54
- return 'keychain';
55
- }
56
- if (backend === 'keychain' && process.platform === 'linux') {
57
- const result = spawnSync('secret-tool', ['store', '--label=Vectle CLI', 'service', keychainService, 'account', keychainAccount], { input: token, encoding: 'utf8', stdio: ['pipe', 'ignore', 'ignore'] });
58
- if (result.status === 0)
59
- return 'keychain';
166
+ if (backend === 'keychain') {
167
+ const actual = availableSecureBackend();
168
+ if (actual && actual !== 'file' && actual !== 'environment') {
169
+ try {
170
+ writeLegacyNativeSecret(token, actual, 'refresh');
171
+ return 'keychain';
172
+ }
173
+ catch { /* try the explicit fallback below */ }
174
+ }
60
175
  }
61
176
  if (!allowFileFallback && process.env.VECTLE_TEST_CREDENTIAL_BACKEND !== 'file')
62
177
  throw new Error('No supported OS keychain was found. Set VECTLE_ALLOW_FILE_CREDENTIAL=1 only if you accept a private 0600 file fallback.');
@@ -66,20 +181,22 @@ export function storeCredential(token, allowFileFallback = false) {
66
181
  return 'file';
67
182
  }
68
183
  export function readCredential() {
69
- if (process.env.VECTLE_TOKEN)
70
- return process.env.VECTLE_TOKEN.trim();
71
- const config = loadConfig();
72
- if (config.credentialBackend === 'keychain' && process.platform === 'darwin') {
73
- try {
74
- return execFileSync('/usr/bin/security', ['find-generic-password', '-a', keychainAccount, '-s', keychainService, '-w'], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();
75
- }
76
- catch {
77
- return null;
78
- }
184
+ if (process.env.VECTLE_TOKEN) {
185
+ const value = process.env.VECTLE_TOKEN.trim();
186
+ // Environment credentials remain a non-owning 1.0 compatibility
187
+ // override. Never treat a v2 refresh/access token in the environment as
188
+ // the selected installation's secure slot.
189
+ return /^vctk_[A-Za-z0-9_-]{43}$/u.test(value) ? value : null;
79
190
  }
80
- if (config.credentialBackend === 'keychain' && process.platform === 'linux') {
81
- const result = spawnSync('secret-tool', ['lookup', 'service', keychainService, 'account', keychainAccount], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] });
82
- return result.status === 0 ? result.stdout.trim() : null;
191
+ const config = loadConfig();
192
+ if (config.configCorrupt)
193
+ return null;
194
+ if (config.schema_version === 'vectle-config-v2' && config.installation)
195
+ return readInstallationCredential(config);
196
+ if (config.credentialBackend === 'keychain') {
197
+ const actual = availableSecureBackend();
198
+ if (actual && actual !== 'file' && actual !== 'environment')
199
+ return readLegacyNativeSecret(actual, 'refresh');
83
200
  }
84
201
  try {
85
202
  return readFileSync(credentialPath(), 'utf8').trim();
@@ -90,14 +207,16 @@ export function readCredential() {
90
207
  }
91
208
  export function deleteCredential() {
92
209
  const config = loadConfig();
93
- if (config.credentialBackend === 'keychain' && process.platform === 'darwin') {
94
- try {
95
- execFileSync('/usr/bin/security', ['delete-generic-password', '-a', keychainAccount, '-s', keychainService], { stdio: 'ignore' });
96
- }
97
- catch { /* already absent */ }
210
+ if (config.schema_version === 'vectle-config-v2' && config.installation) {
211
+ deleteInstallationCredential(config);
212
+ return;
98
213
  }
99
- else if (config.credentialBackend === 'keychain' && process.platform === 'linux') {
100
- spawnSync('secret-tool', ['clear', 'service', keychainService, 'account', keychainAccount], { stdio: 'ignore' });
214
+ if (config.credentialBackend === 'keychain') {
215
+ const actual = availableSecureBackend();
216
+ if (actual && actual !== 'file' && actual !== 'environment') {
217
+ deleteLegacyNativeSecret(actual);
218
+ return;
219
+ }
101
220
  }
102
221
  if (existsSync(credentialPath()))
103
222
  rmSync(credentialPath());
@@ -107,4 +226,63 @@ export function credentialBackendDescription() {
107
226
  return 'environment override';
108
227
  return loadConfig().credentialBackend ?? 'not configured';
109
228
  }
229
+ function installationAccount(config) {
230
+ if (!config.installation)
231
+ throw new Error('not_connected');
232
+ const derived = credentialAccountHandle(config.installation.approved_api_origin || config.endpoint, config.installation.support_code);
233
+ if (config.installation.credential_account_handle && config.installation.credential_account_handle !== derived)
234
+ throw new Error('credential_binding_mismatch');
235
+ return derived;
236
+ }
237
+ function installationBackend(config) {
238
+ const name = config.installation?.credential_backend;
239
+ if (!name)
240
+ return null;
241
+ try {
242
+ return secureBackendForInstallationName(name);
243
+ }
244
+ catch {
245
+ return null;
246
+ }
247
+ }
248
+ export function installationCredentialAccount(config) {
249
+ return installationAccount(config);
250
+ }
251
+ export function storeInstallationCredential(token, config, allowFileFallback = false) {
252
+ const account = installationAccount(config);
253
+ const backend = installationBackend(config) ?? availableSecureBackend({ allowFileFallback });
254
+ if (!backend || backend === 'environment')
255
+ throw new Error('secure_store_unavailable');
256
+ const handle = writeSecureSecret(token, { baseDirectory: configDirectory(), account, purpose: 'refresh', backend, allowFileFallback });
257
+ return installationBackendName(handle.backend);
258
+ }
259
+ export function readInstallationCredential(config) {
260
+ const account = installationAccount(config);
261
+ const backend = installationBackend(config) ?? availableSecureBackend({ allowFileFallback: true });
262
+ if (!backend || backend === 'environment')
263
+ return null;
264
+ return readSecureSecret({ baseDirectory: configDirectory(), account, purpose: 'refresh', backend });
265
+ }
266
+ export function deleteInstallationCredential(config) {
267
+ const account = installationAccount(config);
268
+ const backend = installationBackend(config) ?? availableSecureBackend({ allowFileFallback: true });
269
+ if (!backend || backend === 'environment')
270
+ return;
271
+ deleteSecureSecret({ baseDirectory: configDirectory(), account, purpose: 'refresh', backend });
272
+ }
273
+ export function storeTransientCredential(secret, config, purpose, operationId, expiresAt, allowFileFallback = false) {
274
+ const account = config.installation ? installationAccount(config) : `vci-${'f'.repeat(32)}`;
275
+ const backend = config.installation ? installationBackend(config) ?? availableSecureBackend({ allowFileFallback }) : availableSecureBackend({ allowFileFallback });
276
+ if (!backend || backend === 'environment')
277
+ throw new Error('secure_store_unavailable');
278
+ return writeSecureSecret(secret, { baseDirectory: configDirectory(), account, purpose, operationId, expiresAt, backend, allowFileFallback });
279
+ }
280
+ export function readTransientCredential(config, purpose, operationId, backend) {
281
+ const account = config.installation ? installationAccount(config) : `vci-${'f'.repeat(32)}`;
282
+ return readSecureSecret({ baseDirectory: configDirectory(), account, purpose, operationId, backend: backend ?? installationBackend(config) ?? undefined });
283
+ }
284
+ export function deleteTransientCredential(config, purpose, operationId, backend) {
285
+ const account = config.installation ? installationAccount(config) : `vci-${'f'.repeat(32)}`;
286
+ deleteSecureSecret({ baseDirectory: configDirectory(), account, purpose, operationId, backend: backend ?? installationBackend(config) ?? undefined });
287
+ }
110
288
  //# sourceMappingURL=store.js.map
package/dist/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAChG,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAkBlD,MAAM,eAAe,GAAG,gBAAgB,CAAC;AACzC,MAAM,eAAe,GAAG,SAAS,CAAC;AAElC,MAAM,UAAU,eAAe;IAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACxE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC1F,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,UAAU,KAAK,OAAO,IAAI,CAAC,eAAe,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;AAC/E,SAAS,cAAc,KAAK,OAAO,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AAE3E,MAAM,UAAU,aAAa;IAC3B,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;AAC3I,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,OAAO,EAAE,GAAG,aAAa,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,CAA0B,EAAE,CAAC;IAC5G,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,aAAa,EAAE,CAAC;IACzB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,SAAS,CAAC,eAAe,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,aAAa,CAAC,UAAU,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACrF,SAAS,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;QAAE,OAAO,aAAsB,CAAC;IAC5D,IAAI,OAAO,CAAC,GAAG,CAAC,8BAA8B,KAAK,MAAM;QAAE,OAAO,MAAe,CAAC;IAClF,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,UAAmB,CAAC,CAAC,CAAC,IAAI,CAAC;IACvG,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzE,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,UAAmB,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,iBAAiB,GAAG,KAAK;IACtE,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACxG,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,IAAI,OAAO,KAAK,aAAa;QAAE,OAAO,aAAa,CAAC;IACpD,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC5D,YAAY,CAAC,mBAAmB,EAAE,CAAC,sBAAsB,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClJ,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC3D,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC1M,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,UAAU,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,8BAA8B,KAAK,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,yHAAyH,CAAC,CAAC;IAC5N,SAAS,CAAC,eAAe,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,aAAa,CAAC,cAAc,EAAE,EAAE,GAAG,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,SAAS,CAAC,cAAc,EAAE,EAAE,KAAK,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IACrE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,MAAM,CAAC,iBAAiB,KAAK,UAAU,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC7E,IAAI,CAAC;YAAC,OAAO,YAAY,CAAC,mBAAmB,EAAE,CAAC,uBAAuB,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;IAC3N,CAAC;IACD,IAAI,MAAM,CAAC,iBAAiB,KAAK,UAAU,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC5E,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvK,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC;QAAC,OAAO,YAAY,CAAC,cAAc,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,MAAM,CAAC,iBAAiB,KAAK,UAAU,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC7E,IAAI,CAAC;YAAC,YAAY,CAAC,mBAAmB,EAAE,CAAC,yBAAyB,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC3K,CAAC;SAAM,IAAI,MAAM,CAAC,iBAAiB,KAAK,UAAU,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACnF,SAAS,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACnH,CAAC;IACD,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;QAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;QAAE,OAAO,sBAAsB,CAAC;IAC5D,OAAO,UAAU,EAAE,CAAC,iBAAiB,IAAI,gBAAgB,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/dist/update.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { VectleClient } from './client.js';
2
+ import type { VectleConfig } from './store.js';
2
3
  export type CliRelease = {
3
4
  schema_version: 'cli-release-v1';
4
5
  package: '@vectle/cli';
@@ -10,7 +11,7 @@ export type CliRelease = {
10
11
  reauthorization_required: boolean;
11
12
  };
12
13
  export declare function expectedChecksum(value: string, archiveName: string): string;
13
- export declare function updateCli(client: VectleClient, endpoint: string): Promise<{
14
+ export declare function updateCli(client: VectleClient, endpoint: string, config?: VectleConfig): Promise<{
14
15
  status: string;
15
16
  version: string;
16
17
  previous_version?: undefined;
@@ -25,3 +26,34 @@ export declare function updateCli(client: VectleClient, endpoint: string): Promi
25
26
  reauthorization_required: boolean;
26
27
  release_notes: string;
27
28
  }>;
29
+ /** Read-only signed metadata check. It never invokes npm, changes config, or
30
+ * promotes an executable; the manifest cache contains only public metadata. */
31
+ export declare function checkCliUpdate(config: VectleConfig): Promise<{
32
+ schema_version: string;
33
+ status: string;
34
+ manifest_state: "unavailable";
35
+ current_version: string;
36
+ minimum_supported_version: null;
37
+ recommended_version: null;
38
+ artifact_sha256: null;
39
+ update_available: null;
40
+ error: string;
41
+ manifest_sequence?: undefined;
42
+ artifact_size_bytes?: undefined;
43
+ artifact_integrity?: undefined;
44
+ update_command?: undefined;
45
+ } | {
46
+ schema_version: string;
47
+ status: string;
48
+ manifest_state: "live" | "cached";
49
+ manifest_sequence: number;
50
+ current_version: string;
51
+ minimum_supported_version: string;
52
+ recommended_version: string;
53
+ artifact_sha256: string | null;
54
+ artifact_size_bytes: number | null;
55
+ artifact_integrity: string | null;
56
+ update_available: boolean;
57
+ update_command: string | null;
58
+ error?: undefined;
59
+ }>;
package/dist/update.js CHANGED
@@ -5,6 +5,8 @@ import { tmpdir } from 'node:os';
5
5
  import { basename, join } from 'node:path';
6
6
  import { CLI_VERSION } from './constants.js';
7
7
  import { compareVersions } from './release.js';
8
+ import { fetchReleaseManifest } from './release-manifest.js';
9
+ import { localStateRoot } from './delivery.js';
8
10
  const maxArchiveBytes = 20 * 1024 * 1024;
9
11
  function trustedReleaseUrl(value, endpoint) {
10
12
  const url = new URL(value);
@@ -21,7 +23,7 @@ export function expectedChecksum(value, archiveName) {
21
23
  throw new Error('The release checksum document is invalid.');
22
24
  return match[1].toLowerCase();
23
25
  }
24
- async function fetchBounded(url) {
26
+ async function fetchBounded(url, expectedSize) {
25
27
  const response = await fetch(url, {
26
28
  headers: { Accept: 'application/octet-stream' },
27
29
  redirect: 'error',
@@ -35,9 +37,35 @@ async function fetchBounded(url) {
35
37
  const bytes = new Uint8Array(await response.arrayBuffer());
36
38
  if (bytes.byteLength === 0 || bytes.byteLength > maxArchiveBytes)
37
39
  throw new Error('The release archive has an invalid size.');
40
+ if (expectedSize !== undefined && (expectedSize < 1 || expectedSize > maxArchiveBytes || bytes.byteLength !== expectedSize || declaredSize !== 0 && declaredSize !== expectedSize))
41
+ throw new Error('The release archive size did not match signed metadata.');
38
42
  return bytes;
39
43
  }
40
- export async function updateCli(client, endpoint) {
44
+ function verifyManifestArtifact(archive, artifact) {
45
+ const sha256 = createHash('sha256').update(archive).digest('hex');
46
+ if (sha256 !== artifact.sha256)
47
+ throw new Error('The downloaded release did not match its signed SHA-256 digest.');
48
+ const sha512 = `sha512-${createHash('sha512').update(archive).digest('base64')}`;
49
+ if (artifact.package_integrity !== sha512)
50
+ throw new Error('The downloaded release did not match its signed npm integrity.');
51
+ }
52
+ function installArchive(archive, archiveName) {
53
+ const directory = mkdtempSync(join(tmpdir(), 'vectle-update-'));
54
+ const archivePath = join(directory, archiveName);
55
+ try {
56
+ writeFileSync(archivePath, archive, { mode: 0o600 });
57
+ const npm = process.platform === 'win32' ? 'npm.cmd' : 'npm';
58
+ const installed = spawnSync(npm, ['install', '--global', archivePath], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'], timeout: 120_000 });
59
+ if (installed.error)
60
+ throw installed.error;
61
+ if (installed.status !== 0)
62
+ throw new Error(`npm exited with status ${installed.status ?? 'unknown'}: ${installed.stderr.trim().slice(0, 500)}`);
63
+ }
64
+ finally {
65
+ rmSync(directory, { recursive: true, force: true });
66
+ }
67
+ }
68
+ async function updateCliFromLegacy(client, endpoint) {
41
69
  const release = await client.latestRelease();
42
70
  if (release.schema_version !== 'cli-release-v1' || release.package !== '@vectle/cli' || compareVersions(release.version, CLI_VERSION) === null) {
43
71
  throw new Error('Vectle returned invalid release metadata.');
@@ -63,20 +91,7 @@ export async function updateCli(client, endpoint) {
63
91
  const actual = createHash('sha256').update(archive).digest('hex');
64
92
  if (actual !== expected)
65
93
  throw new Error('The downloaded release did not match its published SHA-256 checksum.');
66
- const directory = mkdtempSync(join(tmpdir(), 'vectle-update-'));
67
- const archivePath = join(directory, archiveName);
68
- try {
69
- writeFileSync(archivePath, archive, { mode: 0o600 });
70
- const npm = process.platform === 'win32' ? 'npm.cmd' : 'npm';
71
- const installed = spawnSync(npm, ['install', '--global', archivePath], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'], timeout: 120_000 });
72
- if (installed.error)
73
- throw installed.error;
74
- if (installed.status !== 0)
75
- throw new Error(`npm exited with status ${installed.status ?? 'unknown'}: ${installed.stderr.trim().slice(0, 500)}`);
76
- }
77
- finally {
78
- rmSync(directory, { recursive: true, force: true });
79
- }
94
+ installArchive(archive, archiveName);
80
95
  return {
81
96
  status: 'updated',
82
97
  previous_version: CLI_VERSION,
@@ -86,4 +101,61 @@ export async function updateCli(client, endpoint) {
86
101
  release_notes: release.release_notes,
87
102
  };
88
103
  }
104
+ async function updateCliFromManifest(endpoint, config) {
105
+ const result = await fetchReleaseManifest(endpoint, localStateRoot(config));
106
+ if (!result.envelope)
107
+ throw new Error(result.error ?? 'The signed release manifest was unavailable.');
108
+ const manifest = result.envelope.manifest;
109
+ const comparison = compareVersions(CLI_VERSION, manifest.recommended_cli);
110
+ if (comparison === null)
111
+ throw new Error('The signed release manifest contained an invalid CLI version.');
112
+ if (comparison >= 0)
113
+ return { status: 'already_current', version: CLI_VERSION, manifest_sequence: manifest.sequence };
114
+ const artifact = manifest.artifacts.find(item => item.artifact_kind === 'cli_package' && item.platform === 'any' && item.architecture === 'any' && item.version === manifest.recommended_cli);
115
+ if (!artifact || !artifact.package_integrity)
116
+ throw new Error('The signed release manifest did not contain the recommended CLI artifact.');
117
+ const downloadUrl = trustedReleaseUrl(artifact.url, endpoint);
118
+ const archiveName = basename(downloadUrl.pathname);
119
+ if (archiveName !== `vectle-cli-${artifact.version}.tgz`)
120
+ throw new Error('The signed CLI artifact name is invalid.');
121
+ const archive = await fetchBounded(downloadUrl, artifact.size_bytes);
122
+ verifyManifestArtifact(archive, artifact);
123
+ installArchive(archive, archiveName);
124
+ return {
125
+ status: 'updated',
126
+ previous_version: CLI_VERSION,
127
+ version: artifact.version,
128
+ manifest_sequence: manifest.sequence,
129
+ checksum_verified: true,
130
+ integrity_verified: true,
131
+ reauthorization_required: false,
132
+ release_notes: 'Vectle signed release metadata verified the immutable CLI artifact.',
133
+ };
134
+ }
135
+ export async function updateCli(client, endpoint, config) {
136
+ const manifestVersion = compareVersions(CLI_VERSION, '1.1.0');
137
+ if (manifestVersion !== null && manifestVersion >= 0) {
138
+ if (!config)
139
+ throw new Error('Vectle 1.1 updates require a bound local configuration.');
140
+ return updateCliFromManifest(endpoint, config);
141
+ }
142
+ return updateCliFromLegacy(client, endpoint);
143
+ }
144
+ /** Read-only signed metadata check. It never invokes npm, changes config, or
145
+ * promotes an executable; the manifest cache contains only public metadata. */
146
+ export async function checkCliUpdate(config) {
147
+ const result = await fetchReleaseManifest(config.endpoint, localStateRoot(config));
148
+ if (!result.envelope)
149
+ return { schema_version: 'cli-update-check-v1', status: 'unavailable', manifest_state: result.state, current_version: CLI_VERSION, minimum_supported_version: null, recommended_version: null, artifact_sha256: null, update_available: null, error: result.error ?? null };
150
+ const manifest = result.envelope.manifest;
151
+ const artifact = manifest.artifacts.find(item => item.artifact_kind === 'cli_package' && item.platform === 'any' && item.architecture === 'any') ?? null;
152
+ const recommended = manifest.recommended_cli;
153
+ const comparison = compareVersions(CLI_VERSION, recommended);
154
+ return {
155
+ schema_version: 'cli-update-check-v1', status: comparison !== null && comparison < 0 ? 'update_available' : 'current', manifest_state: result.state,
156
+ manifest_sequence: manifest.sequence, current_version: CLI_VERSION, minimum_supported_version: manifest.minimum_supported_cli, recommended_version: recommended,
157
+ artifact_sha256: artifact?.sha256 ?? null, artifact_size_bytes: artifact?.size_bytes ?? null, artifact_integrity: artifact?.package_integrity ?? null,
158
+ update_available: comparison !== null && comparison < 0, update_command: comparison !== null && comparison < 0 ? 'vectle update' : null,
159
+ };
160
+ }
89
161
  //# sourceMappingURL=update.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}