@vercel/cli-auth 0.1.0-canary.20260211173433.cdd2da6 → 0.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.
@@ -0,0 +1,59 @@
1
+ declare const AUTH_TOKEN_STORAGE: {
2
+ readonly AUTO: "auto";
3
+ readonly FILE: "file";
4
+ readonly KEYRING: "keyring";
5
+ };
6
+ type KeyringEntry = {
7
+ getPassword(): string | null;
8
+ setPassword(password: string): void;
9
+ deleteCredential(): boolean;
10
+ };
11
+ type KeyringEntryConstructor = new (service: string, account: string) => KeyringEntry;
12
+ type LoadKeyringModule = () => {
13
+ Entry: KeyringEntryConstructor;
14
+ };
15
+ export type AuthTokenStorage = (typeof AUTH_TOKEN_STORAGE)[keyof typeof AUTH_TOKEN_STORAGE];
16
+ export type CredentialsStorageLocation = Exclude<AuthTokenStorage, (typeof AUTH_TOKEN_STORAGE)['AUTO']>;
17
+ export interface GlobalConfig {
18
+ authTokenStorage?: AuthTokenStorage;
19
+ }
20
+ export interface Credentials {
21
+ /** An `access_token` obtained using the OAuth Device Authorization flow. */
22
+ token?: string;
23
+ /** A `refresh_token` obtained using the OAuth Device Authorization flow. */
24
+ refreshToken?: string;
25
+ /**
26
+ * The absolute time (seconds) when the {@link Credentials.token} expires.
27
+ * Used to optimistically check if the token is still valid.
28
+ */
29
+ expiresAt?: number;
30
+ /** Whether to skip writing the credentials to disk during {@link CredentialsStore.update} */
31
+ skipWrite?: boolean;
32
+ '// Note'?: string;
33
+ '// Docs'?: string;
34
+ }
35
+ export declare function hasCredentials(credentials: Partial<Credentials>): boolean;
36
+ export declare function resolveAuthTokenStorage(value: unknown): AuthTokenStorage;
37
+ /**
38
+ * Returns in which directory the config should be present
39
+ * @internal Should only be used in {@link CredentialsStore} or tests.
40
+ */
41
+ export declare function getGlobalPathConfig(appName: string): string;
42
+ export declare function getConfigFilePath(dir: string): string;
43
+ export declare function getAuthConfigFilePath(dir: string): string;
44
+ export declare function readGlobalConfig(dir: string): GlobalConfig;
45
+ export declare function getAuthTokenStorage(dir: string, config?: GlobalConfig): AuthTokenStorage;
46
+ export declare function setLoadKeyringModuleForTesting(nextLoadKeyringModule?: LoadKeyringModule): void;
47
+ export declare function CredentialsStore(dir: string, config?: GlobalConfig): {
48
+ configPath: string;
49
+ get(): Credentials;
50
+ /** Update the credentials store. If `skipWrite` is set, the update will be skipped. */
51
+ update(config: Partial<Credentials>): CredentialsStorageLocation | void;
52
+ delete(): void;
53
+ };
54
+ export declare function readCredentials(dir: string, config?: GlobalConfig): Credentials;
55
+ export declare function writeCredentials(dir: string, credentials: Partial<Credentials>, config?: GlobalConfig): void | CredentialsStorageLocation;
56
+ export declare function clearCredentials(dir: string, config?: GlobalConfig): void;
57
+ export declare function clearAllCredentials(dir: string): void;
58
+ export declare function clearAllCredentialsStrict(dir: string): void;
59
+ export {};
@@ -0,0 +1,450 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.hasCredentials = hasCredentials;
40
+ exports.resolveAuthTokenStorage = resolveAuthTokenStorage;
41
+ exports.getGlobalPathConfig = getGlobalPathConfig;
42
+ exports.getConfigFilePath = getConfigFilePath;
43
+ exports.getAuthConfigFilePath = getAuthConfigFilePath;
44
+ exports.readGlobalConfig = readGlobalConfig;
45
+ exports.getAuthTokenStorage = getAuthTokenStorage;
46
+ exports.setLoadKeyringModuleForTesting = setLoadKeyringModuleForTesting;
47
+ exports.CredentialsStore = CredentialsStore;
48
+ exports.readCredentials = readCredentials;
49
+ exports.writeCredentials = writeCredentials;
50
+ exports.clearCredentials = clearCredentials;
51
+ exports.clearAllCredentials = clearAllCredentials;
52
+ exports.clearAllCredentialsStrict = clearAllCredentialsStrict;
53
+ const node_path_1 = __importDefault(require("node:path"));
54
+ const node_crypto_1 = require("node:crypto");
55
+ const fs = __importStar(require("node:fs"));
56
+ const node_os_1 = require("node:os");
57
+ // NOTE: We are pinned on v5 because newer versions behave differently
58
+ // when there are dots in the application name, eg. `com.vercel.cli` becomes `com.vercel`
59
+ const xdg_app_paths_1 = __importDefault(require("xdg-app-paths"));
60
+ // Avoid exposing zod v4 types to TS 4.9 workspace consumers during type-check.
61
+ const { z } = require('zod/mini');
62
+ const AUTH_TOKEN_STORAGE = {
63
+ AUTO: 'auto',
64
+ FILE: 'file',
65
+ KEYRING: 'keyring',
66
+ };
67
+ const AUTH_TOKEN_STORAGE_VALUES = Object.values(AUTH_TOKEN_STORAGE);
68
+ const DEFAULT_AUTH_TOKEN_STORAGE = AUTH_TOKEN_STORAGE.FILE;
69
+ const KEYRING_SERVICE = 'Vercel Auth';
70
+ const KEYRING_UNAVAILABLE_ERROR = 'OS keyring support is unavailable. Set `authTokenStorage` to `auto` or `file` to store credentials in auth.json instead.';
71
+ const defaultLoadKeyringModule = () => require('@napi-rs/keyring');
72
+ let loadKeyringModule = defaultLoadKeyringModule;
73
+ const CredentialsSchema = z.object({
74
+ /** An `access_token` obtained using the OAuth Device Authorization flow. */
75
+ token: z.optional(z.string()),
76
+ /** The ID of the currently authenticated user, cached from `/v2/user`. */
77
+ userId: z.optional(z.string()),
78
+ /** A `refresh_token` obtained using the OAuth Device Authorization flow. */
79
+ refreshToken: z.optional(z.string()),
80
+ /**
81
+ * The absolute time (seconds) when the {@link Credentials.token} expires.
82
+ * Used to optimistically check if the token is still valid.
83
+ */
84
+ expiresAt: z.optional(z.number()),
85
+ /** Whether to skip writing the credentials to disk during {@link CredentialsStore.update} */
86
+ skipWrite: z.optional(z.boolean()),
87
+ '// Note': z.optional(z.string()),
88
+ '// Docs': z.optional(z.string()),
89
+ });
90
+ function hasCredentials(credentials) {
91
+ return Boolean(credentials.token ||
92
+ credentials.refreshToken ||
93
+ typeof credentials.expiresAt === 'number');
94
+ }
95
+ function parseCredentials(value) {
96
+ return CredentialsSchema.parse(value);
97
+ }
98
+ function isAuthTokenStorage(value) {
99
+ return (typeof value === 'string' &&
100
+ AUTH_TOKEN_STORAGE_VALUES.some(storage => storage === value));
101
+ }
102
+ function resolveAuthTokenStorage(value) {
103
+ if (typeof value === 'undefined') {
104
+ return DEFAULT_AUTH_TOKEN_STORAGE;
105
+ }
106
+ if (isAuthTokenStorage(value)) {
107
+ return value;
108
+ }
109
+ throw new Error(`Invalid value for \`authTokenStorage\`: ${JSON.stringify(value)}. Expected one of: ${AUTH_TOKEN_STORAGE_VALUES.map(storage => JSON.stringify(storage)).join(', ')}.`);
110
+ }
111
+ /** Returns whether a directory exists */
112
+ function isDirectory(path) {
113
+ try {
114
+ return fs.lstatSync(path).isDirectory();
115
+ }
116
+ catch (_) {
117
+ // We don't care which kind of error occured, it isn't a directory anyway.
118
+ return false;
119
+ }
120
+ }
121
+ /**
122
+ * Returns in which directory the config should be present
123
+ * @internal Should only be used in {@link CredentialsStore} or tests.
124
+ */
125
+ function getGlobalPathConfig(appName) {
126
+ const vercelDirectories = (0, xdg_app_paths_1.default)(appName).dataDirs();
127
+ const possibleConfigPaths = [
128
+ ...vercelDirectories, // latest vercel directory
129
+ node_path_1.default.join((0, node_os_1.homedir)(), '.now'), // legacy config in user's home directory
130
+ ...(0, xdg_app_paths_1.default)('now').dataDirs(), // legacy XDG directory
131
+ ];
132
+ // The customPath flag is the preferred location,
133
+ // followed by the vercel directory,
134
+ // followed by the now directory.
135
+ // If none of those exist, use the vercel directory.
136
+ return (possibleConfigPaths.find(configPath => isDirectory(configPath)) ||
137
+ vercelDirectories[0]);
138
+ }
139
+ function getConfigFilePath(dir) {
140
+ return node_path_1.default.join(dir, 'config.json');
141
+ }
142
+ function getAuthConfigFilePath(dir) {
143
+ return node_path_1.default.join(dir, 'auth.json');
144
+ }
145
+ function readGlobalConfig(dir) {
146
+ const configPath = getConfigFilePath(dir);
147
+ let config;
148
+ try {
149
+ config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
150
+ }
151
+ catch (error) {
152
+ if (isENOENTError(error)) {
153
+ return {};
154
+ }
155
+ throw error;
156
+ }
157
+ return {
158
+ authTokenStorage: typeof config.authTokenStorage === 'undefined'
159
+ ? undefined
160
+ : resolveAuthTokenStorage(config.authTokenStorage),
161
+ };
162
+ }
163
+ function getAuthTokenStorage(dir, config) {
164
+ if (config?.authTokenStorage) {
165
+ return resolveAuthTokenStorage(config.authTokenStorage);
166
+ }
167
+ return resolveAuthTokenStorage(readGlobalConfig(dir).authTokenStorage);
168
+ }
169
+ function getKeyringAccount(configPath) {
170
+ const digest = (0, node_crypto_1.createHash)('sha256').update(configPath).digest('hex');
171
+ return `cli:${digest.slice(0, 16)}`;
172
+ }
173
+ function setLoadKeyringModuleForTesting(nextLoadKeyringModule) {
174
+ loadKeyringModule = nextLoadKeyringModule ?? defaultLoadKeyringModule;
175
+ }
176
+ function createKeyringEntry(configPath) {
177
+ try {
178
+ const { Entry } = loadKeyringModule();
179
+ return new Entry(KEYRING_SERVICE, getKeyringAccount(configPath));
180
+ }
181
+ catch (error) {
182
+ const wrappedError = new Error(KEYRING_UNAVAILABLE_ERROR);
183
+ wrappedError.cause = error;
184
+ throw wrappedError;
185
+ }
186
+ }
187
+ function isKeyringUnavailableError(error) {
188
+ return error instanceof Error && error.message === KEYRING_UNAVAILABLE_ERROR;
189
+ }
190
+ function readCredentialsFromFile(configPath) {
191
+ return parseCredentials(JSON.parse(fs.readFileSync(configPath, 'utf8')));
192
+ }
193
+ function isENOENTError(error) {
194
+ return (typeof error === 'object' &&
195
+ error !== null &&
196
+ 'code' in error &&
197
+ error.code === 'ENOENT');
198
+ }
199
+ function createMissingCredentialsError(configPath) {
200
+ const error = new Error(`ENOENT: no such file or directory, open '${configPath}'`);
201
+ Object.assign(error, { code: 'ENOENT' });
202
+ return error;
203
+ }
204
+ function writeCredentialsToFile(configPath, config) {
205
+ const directory = node_path_1.default.dirname(configPath);
206
+ const temporaryPath = node_path_1.default.join(directory, `${node_path_1.default.basename(configPath)}.${process.pid}.${(0, node_crypto_1.randomUUID)()}.tmp`);
207
+ fs.mkdirSync(node_path_1.default.dirname(configPath), { recursive: true });
208
+ try {
209
+ fs.writeFileSync(temporaryPath, JSON.stringify(config, null, 2) + '\n', {
210
+ mode: 0o600,
211
+ });
212
+ fs.renameSync(temporaryPath, configPath);
213
+ }
214
+ catch (error) {
215
+ fs.rmSync(temporaryPath, { force: true });
216
+ throw error;
217
+ }
218
+ }
219
+ function readCredentialsFromKeyring(configPath) {
220
+ const entry = createKeyringEntry(configPath);
221
+ const value = entry.getPassword();
222
+ if (value === null) {
223
+ return null;
224
+ }
225
+ return parseCredentials(JSON.parse(value));
226
+ }
227
+ function writeCredentialsToKeyring(configPath, config) {
228
+ const entry = createKeyringEntry(configPath);
229
+ entry.setPassword(JSON.stringify(config));
230
+ }
231
+ function deleteCredentialsFromKeyring(configPath) {
232
+ const entry = createKeyringEntry(configPath);
233
+ return entry.deleteCredential();
234
+ }
235
+ function deleteCredentialsFile(configPath) {
236
+ fs.rmSync(configPath, { force: true });
237
+ }
238
+ function tryDeleteCredentialsFromKeyring(configPath) {
239
+ try {
240
+ deleteCredentialsFromKeyring(configPath);
241
+ }
242
+ catch { }
243
+ }
244
+ function deleteCredentialsFromKeyringIfAvailable(configPath) {
245
+ try {
246
+ deleteCredentialsFromKeyring(configPath);
247
+ }
248
+ catch (error) {
249
+ if (!isKeyringUnavailableError(error)) {
250
+ throw error;
251
+ }
252
+ }
253
+ }
254
+ function migrateCredentialsToFile(configPath, credentials) {
255
+ writeCredentialsToFile(configPath, credentials);
256
+ tryDeleteCredentialsFromKeyring(configPath);
257
+ return credentials;
258
+ }
259
+ function tryReadKeyringCredentialsIntoFile(configPath) {
260
+ try {
261
+ const credentials = readCredentialsFromKeyring(configPath);
262
+ if (credentials === null) {
263
+ return null;
264
+ }
265
+ return migrateCredentialsToFile(configPath, credentials);
266
+ }
267
+ catch {
268
+ return null;
269
+ }
270
+ }
271
+ function readFileStorageCredentials(configPath) {
272
+ try {
273
+ const credentials = readCredentialsFromFile(configPath);
274
+ if (hasCredentials(credentials)) {
275
+ return credentials;
276
+ }
277
+ // File mode treats keyring contents as stale-but-authoritative backup only
278
+ // when auth.json has no usable credentials.
279
+ return tryReadKeyringCredentialsIntoFile(configPath) ?? credentials;
280
+ }
281
+ catch (error) {
282
+ if (!isENOENTError(error)) {
283
+ throw error;
284
+ }
285
+ const credentials = tryReadKeyringCredentialsIntoFile(configPath);
286
+ if (credentials !== null) {
287
+ return credentials;
288
+ }
289
+ throw error;
290
+ }
291
+ }
292
+ function migrateCredentialsToKeyring(configPath, credentials) {
293
+ writeCredentialsToKeyring(configPath, credentials);
294
+ deleteCredentialsFile(configPath);
295
+ return credentials;
296
+ }
297
+ function readKeyringStorageCredentials(configPath) {
298
+ const credentials = readCredentialsFromKeyring(configPath);
299
+ if (credentials !== null) {
300
+ return credentials;
301
+ }
302
+ try {
303
+ const fileCredentials = readCredentialsFromFile(configPath);
304
+ // Keyring mode eagerly migrates any remaining plaintext credentials out of
305
+ // auth.json after the first successful read.
306
+ return migrateCredentialsToKeyring(configPath, fileCredentials);
307
+ }
308
+ catch (error) {
309
+ if (isENOENTError(error)) {
310
+ throw createMissingCredentialsError(configPath);
311
+ }
312
+ throw error;
313
+ }
314
+ }
315
+ function readAutoStorageCredentials(configPath) {
316
+ try {
317
+ const credentials = readCredentialsFromKeyring(configPath);
318
+ if (credentials !== null) {
319
+ return credentials;
320
+ }
321
+ }
322
+ catch { }
323
+ // Auto mode intentionally avoids read-time migration so that machines
324
+ // without usable keyring support can keep working off auth.json.
325
+ return readCredentialsFromFile(configPath);
326
+ }
327
+ function writeFileStorageCredentials(configPath, credentials) {
328
+ writeCredentialsToFile(configPath, credentials);
329
+ tryDeleteCredentialsFromKeyring(configPath);
330
+ return 'file';
331
+ }
332
+ function writeKeyringStorageCredentials(configPath, credentials) {
333
+ writeCredentialsToKeyring(configPath, credentials);
334
+ deleteCredentialsFile(configPath);
335
+ return 'keyring';
336
+ }
337
+ function writeAutoStorageCredentials(configPath, credentials) {
338
+ try {
339
+ return writeKeyringStorageCredentials(configPath, credentials);
340
+ }
341
+ catch {
342
+ tryDeleteCredentialsFromKeyring(configPath);
343
+ return writeFileStorageCredentials(configPath, credentials);
344
+ }
345
+ }
346
+ function deleteFileStorageCredentials(configPath) {
347
+ deleteCredentialsFile(configPath);
348
+ deleteCredentialsFromKeyringIfAvailable(configPath);
349
+ }
350
+ function deleteKeyringStorageCredentials(configPath) {
351
+ deleteCredentialsFromKeyring(configPath);
352
+ deleteCredentialsFile(configPath);
353
+ }
354
+ function deleteAutoStorageCredentials(configPath) {
355
+ try {
356
+ deleteCredentialsFromKeyring(configPath);
357
+ }
358
+ catch { }
359
+ deleteCredentialsFile(configPath);
360
+ }
361
+ function CredentialsStore(dir, config = {}) {
362
+ const configPath = getAuthConfigFilePath(dir);
363
+ const tokenStorage = getAuthTokenStorage(dir, config);
364
+ return {
365
+ configPath,
366
+ get() {
367
+ switch (tokenStorage) {
368
+ case AUTH_TOKEN_STORAGE.FILE:
369
+ return readFileStorageCredentials(configPath);
370
+ case AUTH_TOKEN_STORAGE.KEYRING:
371
+ return readKeyringStorageCredentials(configPath);
372
+ case AUTH_TOKEN_STORAGE.AUTO:
373
+ return readAutoStorageCredentials(configPath);
374
+ }
375
+ },
376
+ /** Update the credentials store. If `skipWrite` is set, the update will be skipped. */
377
+ update(config) {
378
+ if (config.skipWrite)
379
+ return;
380
+ const parsedConfig = parseCredentials(config);
381
+ switch (tokenStorage) {
382
+ case AUTH_TOKEN_STORAGE.FILE:
383
+ return writeFileStorageCredentials(configPath, parsedConfig);
384
+ case AUTH_TOKEN_STORAGE.KEYRING:
385
+ return writeKeyringStorageCredentials(configPath, parsedConfig);
386
+ case AUTH_TOKEN_STORAGE.AUTO:
387
+ return writeAutoStorageCredentials(configPath, parsedConfig);
388
+ }
389
+ },
390
+ delete() {
391
+ switch (tokenStorage) {
392
+ case AUTH_TOKEN_STORAGE.FILE:
393
+ deleteFileStorageCredentials(configPath);
394
+ break;
395
+ case AUTH_TOKEN_STORAGE.KEYRING:
396
+ deleteKeyringStorageCredentials(configPath);
397
+ break;
398
+ case AUTH_TOKEN_STORAGE.AUTO:
399
+ deleteAutoStorageCredentials(configPath);
400
+ break;
401
+ }
402
+ },
403
+ };
404
+ }
405
+ function readCredentials(dir, config = {}) {
406
+ return CredentialsStore(dir, config).get();
407
+ }
408
+ function writeCredentials(dir, credentials, config = {}) {
409
+ return CredentialsStore(dir, config).update(credentials);
410
+ }
411
+ function clearCredentials(dir, config = {}) {
412
+ CredentialsStore(dir, config).delete();
413
+ }
414
+ function clearAllCredentials(dir) {
415
+ for (const authTokenStorage of [
416
+ AUTH_TOKEN_STORAGE.FILE,
417
+ AUTH_TOKEN_STORAGE.KEYRING,
418
+ ]) {
419
+ try {
420
+ clearCredentials(dir, { authTokenStorage });
421
+ }
422
+ catch { }
423
+ }
424
+ }
425
+ function clearAllCredentialsStrict(dir) {
426
+ const configPath = getAuthConfigFilePath(dir);
427
+ let fileError;
428
+ let keyringError;
429
+ try {
430
+ deleteCredentialsFile(configPath);
431
+ }
432
+ catch (error) {
433
+ fileError = error;
434
+ }
435
+ try {
436
+ deleteCredentialsFromKeyring(configPath);
437
+ }
438
+ catch (error) {
439
+ if (!isKeyringUnavailableError(error)) {
440
+ keyringError = error;
441
+ }
442
+ }
443
+ if (keyringError) {
444
+ throw keyringError;
445
+ }
446
+ if (fileError) {
447
+ throw fileError;
448
+ }
449
+ }
450
+ //# sourceMappingURL=credentials-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials-store.js","sourceRoot":"","sources":["credentials-store.ts"],"names":[],"mappings":"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"}