@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.
- package/CHANGELOG.md +15 -0
- package/README.md +15 -8
- package/dist/activity.d.ts +10 -0
- package/dist/activity.js +10 -0
- package/dist/activity.js.map +1 -0
- package/dist/adapters/claude.d.ts +4 -0
- package/dist/adapters/claude.js +279 -0
- package/dist/adapters/claude.js.map +1 -0
- package/dist/adapters/codex.d.ts +16 -0
- package/dist/adapters/codex.js +410 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/common.d.ts +80 -0
- package/dist/adapters/common.js +249 -0
- package/dist/adapters/common.js.map +1 -0
- package/dist/adapters/cursor.d.ts +4 -0
- package/dist/adapters/cursor.js +240 -0
- package/dist/adapters/cursor.js.map +1 -0
- package/dist/adapters/vscode.d.ts +4 -0
- package/dist/adapters/vscode.js +240 -0
- package/dist/adapters/vscode.js.map +1 -0
- package/dist/agent-policy.d.ts +50 -0
- package/dist/agent-policy.js +83 -0
- package/dist/agent-policy.js.map +1 -0
- package/dist/client.d.ts +69 -10
- package/dist/client.js +247 -24
- package/dist/client.js.map +1 -1
- package/dist/constants.d.ts +12 -2
- package/dist/constants.js +7 -1
- package/dist/constants.js.map +1 -1
- package/dist/contracts.d.ts +53 -0
- package/dist/contracts.js +68 -0
- package/dist/contracts.js.map +1 -0
- package/dist/delivery.d.ts +80 -0
- package/dist/delivery.js +304 -0
- package/dist/delivery.js.map +1 -0
- package/dist/findings.d.ts +12 -0
- package/dist/findings.js +41 -0
- package/dist/findings.js.map +1 -0
- package/dist/help.d.ts +1 -0
- package/dist/help.js +53 -0
- package/dist/help.js.map +1 -0
- package/dist/index.js +370 -72
- package/dist/index.js.map +1 -1
- package/dist/integrations.d.ts +126 -0
- package/dist/integrations.js +173 -0
- package/dist/integrations.js.map +1 -0
- package/dist/legacy-compat.d.ts +45 -0
- package/dist/legacy-compat.js +149 -0
- package/dist/legacy-compat.js.map +1 -0
- package/dist/lifecycle.d.ts +50 -0
- package/dist/lifecycle.js +146 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/locator.d.ts +58 -0
- package/dist/locator.js +233 -0
- package/dist/locator.js.map +1 -0
- package/dist/mcp.d.ts +12 -2
- package/dist/mcp.js +194 -48
- package/dist/mcp.js.map +1 -1
- package/dist/modes.d.ts +37 -0
- package/dist/modes.js +32 -0
- package/dist/modes.js.map +1 -0
- package/dist/outbox.d.ts +9 -0
- package/dist/outbox.js +188 -0
- package/dist/outbox.js.map +1 -0
- package/dist/parser.d.ts +10 -0
- package/dist/parser.js +99 -0
- package/dist/parser.js.map +1 -0
- package/dist/pulse.d.ts +122 -0
- package/dist/pulse.js +412 -0
- package/dist/pulse.js.map +1 -0
- package/dist/release-manifest.d.ts +123 -0
- package/dist/release-manifest.js +226 -0
- package/dist/release-manifest.js.map +1 -0
- package/dist/release.d.ts +1 -1
- package/dist/response.d.ts +17 -0
- package/dist/response.js +15 -0
- package/dist/response.js.map +1 -1
- package/dist/rollout.d.ts +8 -0
- package/dist/rollout.js +27 -0
- package/dist/rollout.js.map +1 -0
- package/dist/runtime.d.ts +60 -0
- package/dist/runtime.js +276 -0
- package/dist/runtime.js.map +1 -0
- package/dist/secure-store.d.ts +36 -0
- package/dist/secure-store.js +282 -0
- package/dist/secure-store.js.map +1 -0
- package/dist/setup.d.ts +159 -0
- package/dist/setup.js +629 -0
- package/dist/setup.js.map +1 -0
- package/dist/state.d.ts +98 -0
- package/dist/state.js +226 -0
- package/dist/state.js.map +1 -0
- package/dist/status.d.ts +282 -0
- package/dist/status.js +213 -0
- package/dist/status.js.map +1 -0
- package/dist/store.d.ts +44 -2
- package/dist/store.js +222 -44
- package/dist/store.js.map +1 -1
- package/dist/update.d.ts +33 -1
- package/dist/update.js +88 -16
- package/dist/update.js.map +1 -1
- package/dist/write-journal.d.ts +71 -0
- package/dist/write-journal.js +175 -0
- package/dist/write-journal.js.map +1 -0
- package/package.json +7 -2
package/dist/store.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import {
|
|
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
|
-
|
|
7
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
39
|
-
|
|
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 (!/^
|
|
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'
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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
|
-
|
|
81
|
-
|
|
82
|
-
return
|
|
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.
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
catch { /* already absent */ }
|
|
210
|
+
if (config.schema_version === 'vectle-config-v2' && config.installation) {
|
|
211
|
+
deleteInstallationCredential(config);
|
|
212
|
+
return;
|
|
98
213
|
}
|
|
99
|
-
|
|
100
|
-
|
|
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":"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"}
|
|
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
|
-
|
|
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
|
-
|
|
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
|
package/dist/update.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
|