ovsx 1.0.2 → 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/LICENSE CHANGED
@@ -261,8 +261,8 @@ No third-party beneficiary rights are created under this Agreement.
261
261
 
262
262
  Exhibit A - Form of Secondary Licenses Notice
263
263
 
264
- "This Source Code may also be made available under the following
265
- Secondary Licenses when the conditions for such availability set forth
264
+ "This Source Code may also be made available under the following
265
+ Secondary Licenses when the conditions for such availability set forth
266
266
  in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
267
267
  version(s), and exceptions or additional permissions here}."
268
268
 
@@ -274,4 +274,4 @@ version(s), and exceptions or additional permissions here}."
274
274
  file in a relevant directory) where a recipient would be likely to
275
275
  look for such a notice.
276
276
 
277
- You may add additional accurate notices of copyright ownership.
277
+ You may add additional accurate notices of copyright ownership.
package/README.md CHANGED
@@ -59,4 +59,4 @@ The `logout` command lets you remove a stored access token.
59
59
  * `ovsx logout <name>`
60
60
  the name must correspond to the `publisher` of your extension.
61
61
 
62
- By default `ovsx` will try to use a `keytar` store with a plaintext file store as fallback. You can specify the environment variable `OVSX_STORE=file` to use the file store.
62
+ By default `ovsx` stores access tokens in the operating system's credential manager (via [`cross-keychain`](https://www.npmjs.com/package/cross-keychain)), falling back to storing them as plaintext in the `~/.ovsx` file if the credential manager can't be used. You can also set the environment variable `OVSX_STORE=file` to force plaintext storage; this is strongly discouraged, as it leaves your tokens readable by anyone with access to your home directory.
@@ -1 +1 @@
1
- {"version":3,"file":"check-license.d.ts","sourceRoot":"","sources":["../src/check-license.ts"],"names":[],"mappings":"AAAA;;;;;;;;kFAQkF;AAIlF,OAAO,EAC0B,QAAQ,EACxC,MAAM,QAAQ,CAAC;AAgChB,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAiB5F;AAED,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKrE"}
1
+ {"version":3,"file":"check-license.d.ts","sourceRoot":"","sources":["../src/check-license.ts"],"names":[],"mappings":"AAAA;;;;;;;;kFAQkF;AAKlF,OAAO,EAC0B,QAAQ,EACxC,MAAM,QAAQ,CAAC;AAsChB,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAiB5F;AAED,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKrE"}
@@ -13,6 +13,7 @@ exports.isLicenseOk = isLicenseOk;
13
13
  exports.checkLicense = checkLicense;
14
14
  const fs = require("fs");
15
15
  const isCI = require("is-ci");
16
+ const prompts_1 = require("@inquirer/prompts");
16
17
  const util_1 = require("./util");
17
18
  async function addLicense(packagePath, manifest) {
18
19
  console.log('Extension ' + manifest.publisher + '.' + manifest.name + ' has no license. All Open VSX '
@@ -22,10 +23,17 @@ async function addLicense(packagePath, manifest) {
22
23
  + 'the MIT license and for compliance with that license.');
23
24
  let answer;
24
25
  do {
25
- console.log();
26
- answer = await (0, util_1.getUserChoice)('Would you like to publish your extension '
27
- + manifest.publisher + '.' + manifest.name
28
- + ' under the MIT license?', ['yes', 'help', 'no'], 'no');
26
+ answer = await (0, prompts_1.select)({
27
+ message: 'Would you like to publish your extension '
28
+ + manifest.publisher + '.' + manifest.name
29
+ + ' under the MIT license?',
30
+ choices: [
31
+ { name: 'Yes', value: 'yes' },
32
+ { name: 'Help', value: 'help' },
33
+ { name: 'No', value: 'no' }
34
+ ],
35
+ default: 'no'
36
+ });
29
37
  switch (answer) {
30
38
  case 'yes':
31
39
  await useMITLicense(manifest, packagePath);
@@ -66,10 +74,10 @@ async function checkLicense(packagePath) {
66
74
  async function useMITLicense(manifest, packagePath) {
67
75
  console.log('Please enter a value for Copyright Year and Copyright Holder.\n'
68
76
  + 'Example: "Copyright 2020 John Doe"\n');
69
- const copyright = await (0, util_1.getUserInput)('Copyright ');
70
- if (!copyright) {
71
- throw new Error('A copyright declaration is necessary for the MIT license.');
72
- }
77
+ const copyright = await (0, prompts_1.input)({
78
+ message: 'Copyright',
79
+ validate: value => value.trim().length > 0 || 'A copyright declaration is necessary for the MIT license.'
80
+ });
73
81
  manifest.license = 'MIT';
74
82
  await (0, util_1.writeManifest)(manifest, packagePath);
75
83
  const license = MIT_LICENSE_TEXT.replace('<YEAR> <COPYRIGHT HOLDER>', copyright);
@@ -1 +1 @@
1
- {"version":3,"file":"check-license.js","sourceRoot":"","sources":["../src/check-license.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"check-license.js","sourceRoot":"","sources":["../src/check-license.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,wBAA8B,KAAK,CAAC,OAAO,EAAE,YAAY,iBAmBxD"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,wBAA8B,KAAK,CAAC,OAAO,EAAE,YAAY,iBAsBxD"}
package/lib/login.js CHANGED
@@ -1,6 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.default = login;
4
+ /********************************************************************************
5
+ * Copyright (c) 2024 Precies. Software and others
6
+ *
7
+ * This program and the accompanying materials are made available under the
8
+ * terms of the Eclipse Public License v. 2.0 which is available at
9
+ * http://www.eclipse.org/legal/epl-2.0.
10
+ *
11
+ * SPDX-License-Identifier: EPL-2.0
12
+ ********************************************************************************/
13
+ const prompts_1 = require("@inquirer/prompts");
4
14
  const util_1 = require("./util");
5
15
  const store_1 = require("./store");
6
16
  const pat_1 = require("./pat");
@@ -10,11 +20,14 @@ async function login(options) {
10
20
  throw new Error('Missing namespace name.');
11
21
  }
12
22
  const store = await (0, store_1.openDefaultStore)();
13
- let pat = store.get(options.namespace);
23
+ let pat = await store.get(options.namespace);
14
24
  if (pat) {
15
25
  console.log(`Namespace '${options.namespace}' is already known.`);
16
- const answer = await (0, util_1.getUserInput)('Do you want to overwrite its PAT? [y/N] ');
17
- if (!/^y$/i.test(answer)) {
26
+ const overwrite = await (0, prompts_1.confirm)({
27
+ message: 'Do you want to overwrite its PAT?',
28
+ default: false
29
+ });
30
+ if (!overwrite) {
18
31
  throw new Error('Aborted.');
19
32
  }
20
33
  }
package/lib/login.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":";;AAeA,wBAmBC;AAxBD,iCAAqD;AACrD,mCAA2C;AAE3C,+BAAmC;AAEpB,KAAK,UAAU,KAAK,CAAC,OAAqB;IACxD,IAAA,oBAAa,EAAC,OAAO,CAAC,CAAC;IACvB,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAEJ,MAAM,KAAK,GAAG,MAAM,IAAA,wBAAgB,GAAE,CAAC;IACvC,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,SAAS,qBAAqB,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAY,EAAC,0CAA0C,CAAC,CAAC;QAE9E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7B,CAAC;IACF,CAAC;IAED,GAAG,GAAG,MAAM,IAAA,gBAAU,EAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":";;AAeA,wBAsBC;AArCD;;;;;;;;kFAQkF;AAClF,+CAA4C;AAC5C,iCAAuC;AACvC,mCAA2C;AAE3C,+BAAmC;AAEpB,KAAK,UAAU,KAAK,CAAC,OAAqB;IACxD,IAAA,oBAAa,EAAC,OAAO,CAAC,CAAC;IACvB,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAEJ,MAAM,KAAK,GAAG,MAAM,IAAA,wBAAgB,GAAE,CAAC;IACvC,IAAI,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,SAAS,qBAAqB,CAAC,CAAC;QAClE,MAAM,SAAS,GAAG,MAAM,IAAA,iBAAO,EAAC;YAC/B,OAAO,EAAE,mCAAmC;YAC5C,OAAO,EAAE,KAAK;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7B,CAAC;IACF,CAAC;IAED,GAAG,GAAG,MAAM,IAAA,gBAAU,EAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AACzC,CAAC"}
package/lib/logout.js CHANGED
@@ -16,7 +16,7 @@ async function logout(namespaceName) {
16
16
  throw new Error('Missing namespace name.');
17
17
  }
18
18
  const store = await (0, store_1.openDefaultStore)();
19
- if (!store.get(namespaceName)) {
19
+ if (!await store.get(namespaceName)) {
20
20
  throw new Error(`Unknown namespace '${namespaceName}'.`);
21
21
  }
22
22
  await store.delete(namespaceName);
package/lib/logout.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"logout.js","sourceRoot":"","sources":["../src/logout.ts"],"names":[],"mappings":";;AAWA,yBAYC;AAvBD;;;;;;;;kFAQkF;AAClF,mCAA2C;AAE5B,KAAK,UAAU,MAAM,CAAC,aAAqB;IACzD,IAAI,CAAC,aAAa,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAEJ,MAAM,KAAK,GAAG,MAAM,IAAA,wBAAgB,GAAE,CAAC;IACvC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,sBAAsB,aAAa,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,iBAAiB,aAAa,4CAA4C,CAAC,CAAC;AAC5F,CAAC"}
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../src/logout.ts"],"names":[],"mappings":";;AAWA,yBAYC;AAvBD;;;;;;;;kFAQkF;AAClF,mCAA2C;AAE5B,KAAK,UAAU,MAAM,CAAC,aAAqB;IACzD,IAAI,CAAC,aAAa,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAEJ,MAAM,KAAK,GAAG,MAAM,IAAA,wBAAgB,GAAE,CAAC;IACvC,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,sBAAsB,aAAa,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,iBAAiB,aAAa,4CAA4C,CAAC,CAAC;AAC5F,CAAC"}
package/lib/main.js CHANGED
@@ -48,10 +48,11 @@ module.exports = function (argv) {
48
48
  .option('--baseImagesUrl <url>', 'Prepend all relative image links in README.md with this URL.')
49
49
  .option('--yarn', 'Use yarn instead of npm while packing extension files.')
50
50
  .option('--pre-release', 'Mark this package as a pre-release')
51
+ .option('--allow-missing-repository', 'Allow packaging an extension whose package.json has no repository field')
51
52
  .option('--no-dependencies', 'Disable dependency detection via npm or yarn')
52
53
  .option('--skip-duplicate', 'Fail silently if version already exists on the marketplace')
53
54
  .option('--packageVersion <version>', 'Version of the provided VSIX packages.')
54
- .action((extensionFile, { target, packagePath, baseContentUrl, baseImagesUrl, yarn, preRelease, dependencies, skipDuplicate, packageVersion }) => {
55
+ .action((extensionFile, { target, packagePath, baseContentUrl, baseImagesUrl, yarn, preRelease, allowMissingRepository, dependencies, skipDuplicate, packageVersion }) => {
55
56
  if (extensionFile !== undefined && packagePath !== undefined) {
56
57
  console.error('\u274c Please specify either a package file or a package path, but not both.\n');
57
58
  publishCmd.help();
@@ -68,8 +69,10 @@ module.exports = function (argv) {
68
69
  console.warn("Ignoring option '--yarn' for prepackaged extension.");
69
70
  if (extensionFile !== undefined && packageVersion !== undefined)
70
71
  console.warn("Ignoring option '--packageVersion' for prepackaged extension.");
72
+ if (extensionFile !== undefined && allowMissingRepository !== undefined)
73
+ console.warn("Ignoring option '--allow-missing-repository' for prepackaged extension.");
71
74
  const { registryUrl, pat } = program.opts();
72
- (0, publish_1.publish)({ extensionFile, registryUrl, pat, targets: typeof target === 'string' ? [target] : target, packagePath: typeof packagePath === 'string' ? [packagePath] : packagePath, baseContentUrl, baseImagesUrl, yarn, preRelease, dependencies, skipDuplicate, packageVersion })
75
+ (0, publish_1.publish)({ extensionFile, registryUrl, pat, targets: typeof target === 'string' ? [target] : target, packagePath: typeof packagePath === 'string' ? [packagePath] : packagePath, baseContentUrl, baseImagesUrl, yarn, preRelease, allowMissingRepository, dependencies, skipDuplicate, packageVersion })
73
76
  .then(results => {
74
77
  const reasons = results.filter(result => result.status === 'rejected')
75
78
  .map(rejectedResult => rejectedResult.reason);
package/lib/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
package/lib/pat.d.ts CHANGED
@@ -1,12 +1,3 @@
1
- /** ******************************************************************************
2
- * Copyright (c) 2025 Precies. Software OU and others
3
- *
4
- * This program and the accompanying materials are made available under the
5
- * terms of the Eclipse Public License v. 2.0 which is available at
6
- * http://www.eclipse.org/legal/epl-2.0.
7
- *
8
- * SPDX-License-Identifier: EPL-2.0
9
- * ****************************************************************************** */
10
1
  import { CreateNamespaceOptions } from './create-namespace-options';
11
2
  import { PublishOptions } from './publish-options';
12
3
  import { VerifyPatOptions } from './verify-pat-options';
package/lib/pat.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pat.d.ts","sourceRoot":"","sources":["../src/pat.ts"],"names":[],"mappings":"AAAA;;;;;;;;oFAQoF;AACpF,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAKxD,wBAAsB,WAAW,CAAC,OAAO,EAAE,gBAAgB,iBAS1D;AAED,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,cAAc,GAAG,gBAAgB,EAAE,MAAM,GAAE,OAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAOhK;AAED,wBAAsB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,cAAc,GAAG,gBAAgB,EAAE,MAAM,GAAE,OAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAe5J"}
1
+ {"version":3,"file":"pat.d.ts","sourceRoot":"","sources":["../src/pat.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAIxD,wBAAsB,WAAW,CAAC,OAAO,EAAE,gBAAgB,iBAS1D;AAED,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,cAAc,GAAG,gBAAgB,EAAE,MAAM,GAAE,OAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAWhK;AAED,wBAAsB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,cAAc,GAAG,gBAAgB,EAAE,MAAM,GAAE,OAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAe5J"}
package/lib/pat.js CHANGED
@@ -3,8 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.doVerifyPat = doVerifyPat;
4
4
  exports.requestPAT = requestPAT;
5
5
  exports.getPAT = getPAT;
6
+ /** ******************************************************************************
7
+ * Copyright (c) 2025 Precies. Software OU and others
8
+ *
9
+ * This program and the accompanying materials are made available under the
10
+ * terms of the Eclipse Public License v. 2.0 which is available at
11
+ * http://www.eclipse.org/legal/epl-2.0.
12
+ *
13
+ * SPDX-License-Identifier: EPL-2.0
14
+ * ****************************************************************************** */
15
+ const prompts_1 = require("@inquirer/prompts");
6
16
  const registry_1 = require("./registry");
7
- const util_1 = require("./util");
8
17
  const store_1 = require("./store");
9
18
  async function doVerifyPat(options) {
10
19
  const registry = new registry_1.Registry(options);
@@ -17,7 +26,11 @@ async function doVerifyPat(options) {
17
26
  console.log(`\ud83d\ude80 PAT valid to publish at ${namespace}`);
18
27
  }
19
28
  async function requestPAT(namespace, options, verify = true) {
20
- const pat = await (0, util_1.getUserInput)(`Personal Access Token for namespace '${namespace}':`);
29
+ const pat = await (0, prompts_1.password)({
30
+ message: `Personal Access Token for namespace '${namespace}':`,
31
+ mask: true,
32
+ validate: value => value.trim().length > 0 || 'A personal access token is required.'
33
+ });
21
34
  if (verify) {
22
35
  await doVerifyPat({ ...options, namespace, pat });
23
36
  }
@@ -28,7 +41,7 @@ async function getPAT(namespace, options, verify = true) {
28
41
  return options.pat;
29
42
  }
30
43
  const store = await (0, store_1.openDefaultStore)();
31
- let pat = store.get(namespace);
44
+ let pat = await store.get(namespace);
32
45
  if (pat) {
33
46
  return pat;
34
47
  }
package/lib/pat.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pat.js","sourceRoot":"","sources":["../src/pat.ts"],"names":[],"mappings":";;AAgBA,kCASC;AAED,gCAOC;AAED,wBAeC;AAvCD,yCAAsC;AACtC,iCAAsC;AACtC,mCAA2C;AAEpC,KAAK,UAAU,WAAW,CAAC,OAAyB;IACvD,MAAM,QAAQ,GAAG,IAAI,mBAAQ,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAmB,CAAC;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAa,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACxD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,yCAAyC,SAAS,EAAE,CAAC,CAAC;AACtE,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,SAAiB,EAAE,OAAmE,EAAE,SAAkB,IAAI;IAC3I,MAAM,GAAG,GAAG,MAAM,IAAA,mBAAY,EAAC,wCAAwC,SAAS,IAAI,CAAC,CAAC;IACtF,IAAI,MAAM,EAAE,CAAC;QACT,MAAM,WAAW,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC;AAEM,KAAK,UAAU,MAAM,CAAC,SAAiB,EAAE,OAAmE,EAAE,SAAkB,IAAI;IACvI,IAAI,OAAO,EAAE,GAAG,EAAE,CAAC;QACf,OAAO,OAAO,CAAC,GAAG,CAAC;IACvB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,IAAA,wBAAgB,GAAE,CAAC;IACvC,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC/B,IAAI,GAAG,EAAE,CAAC;QACN,OAAO,GAAG,CAAC;IACf,CAAC;IAED,GAAG,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAEhC,OAAO,GAAG,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"pat.js","sourceRoot":"","sources":["../src/pat.ts"],"names":[],"mappings":";;AAgBA,kCASC;AAED,gCAWC;AAED,wBAeC;AAvDD;;;;;;;;oFAQoF;AACpF,+CAA6C;AAI7C,yCAAsC;AACtC,mCAA2C;AAEpC,KAAK,UAAU,WAAW,CAAC,OAAyB;IACvD,MAAM,QAAQ,GAAG,IAAI,mBAAQ,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAmB,CAAC;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAa,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACxD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,yCAAyC,SAAS,EAAE,CAAC,CAAC;AACtE,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,SAAiB,EAAE,OAAmE,EAAE,SAAkB,IAAI;IAC3I,MAAM,GAAG,GAAG,MAAM,IAAA,kBAAQ,EAAC;QACvB,OAAO,EAAE,wCAAwC,SAAS,IAAI;QAC9D,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,sCAAsC;KACvF,CAAC,CAAC;IACH,IAAI,MAAM,EAAE,CAAC;QACT,MAAM,WAAW,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC;AAEM,KAAK,UAAU,MAAM,CAAC,SAAiB,EAAE,OAAmE,EAAE,SAAkB,IAAI;IACvI,IAAI,OAAO,EAAE,GAAG,EAAE,CAAC;QACf,OAAO,OAAO,CAAC,GAAG,CAAC;IACvB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,IAAA,wBAAgB,GAAE,CAAC;IACvC,IAAI,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,GAAG,EAAE,CAAC;QACN,OAAO,GAAG,CAAC;IACf,CAAC;IAED,GAAG,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAEhC,OAAO,GAAG,CAAC;AACf,CAAC"}
@@ -29,6 +29,11 @@ export interface PublishCommonOptions extends RegistryOptions {
29
29
  * Mark this package as a pre-release. Only valid with `packagePath`.
30
30
  */
31
31
  preRelease?: boolean;
32
+ /**
33
+ * Package the extension even though its manifest has no `repository` field, instead of asking for
34
+ * confirmation. Only valid with `packagePath`.
35
+ */
36
+ allowMissingRepository?: boolean;
32
37
  /**
33
38
  * Whether to fail silently if version already exists on the marketplace
34
39
  */
@@ -1 +1 @@
1
- {"version":3,"file":"publish-options.d.ts","sourceRoot":"","sources":["../src/publish-options.ts"],"names":[],"mappings":"AAAA;;;;;;;;kFAQkF;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IACzD;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAGD,MAAM,WAAW,cAAe,SAAQ,oBAAoB;IAExD;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B"}
1
+ {"version":3,"file":"publish-options.d.ts","sourceRoot":"","sources":["../src/publish-options.ts"],"names":[],"mappings":"AAAA;;;;;;;;kFAQkF;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IACzD;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAGD,MAAM,WAAW,cAAe,SAAQ,oBAAoB;IAExD;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B"}
package/lib/publish.js CHANGED
@@ -90,6 +90,7 @@ async function packageExtension(options, registry) {
90
90
  useYarn: options.yarn,
91
91
  dependencies: options.dependencies,
92
92
  preRelease: options.preRelease,
93
+ allowMissingRepository: options.allowMissingRepository,
93
94
  version: options.packageVersion
94
95
  };
95
96
  await (0, vsce_1.createVSIX)(packageOptions);
@@ -1 +1 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"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"}
package/lib/store.d.ts CHANGED
@@ -1,38 +1,49 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2024 Precies. Software and others
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License v. 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * SPDX-License-Identifier: EPL-2.0
9
+ ********************************************************************************/
1
10
  interface StoreEntry {
2
11
  name: string;
3
12
  value: string;
4
13
  }
5
- export interface Store extends Iterable<StoreEntry> {
6
- readonly size: number;
7
- get(name: string): string | undefined;
14
+ export interface Store {
15
+ get(name: string): Promise<string | undefined>;
8
16
  add(name: string, value: string): Promise<void>;
9
17
  delete(name: string): Promise<void>;
10
18
  }
11
19
  export declare class FileStore implements Store {
12
20
  readonly path: string;
13
21
  private entries;
14
- private static readonly DefaultPath;
22
+ static readonly DefaultPath: string;
15
23
  static open(path?: string): Promise<FileStore>;
16
24
  get size(): number;
17
25
  private constructor();
18
26
  private save;
19
27
  deleteStore(): Promise<void>;
20
- get(name: string): string | undefined;
28
+ get(name: string): Promise<string | undefined>;
21
29
  add(name: string, value: string): Promise<void>;
22
30
  delete(name: string): Promise<void>;
23
31
  [Symbol.iterator](): ArrayIterator<StoreEntry>;
24
32
  }
25
- export declare class KeytarStore implements Store {
26
- private readonly keytar;
27
- private readonly serviceName;
28
- private entries;
29
- static open(serviceName?: string): Promise<KeytarStore>;
30
- get size(): number;
31
- private constructor();
32
- get(name: string): string | undefined;
33
+ /** Shared behavior for stores backed by the cross-keychain library. */
34
+ declare abstract class CrossKeychainStore implements Store {
35
+ protected readonly keychain: typeof import('cross-keychain');
36
+ protected readonly serviceName: string;
37
+ protected constructor(keychain: typeof import('cross-keychain'), serviceName: string);
38
+ get(name: string): Promise<string | undefined>;
33
39
  add(name: string, value: string): Promise<void>;
34
40
  delete(name: string): Promise<void>;
35
- [Symbol.iterator](): Iterator<StoreEntry, any, undefined>;
41
+ }
42
+ export declare class KeychainStore extends CrossKeychainStore {
43
+ static open(serviceName?: string): Promise<KeychainStore>;
44
+ }
45
+ export declare class EncryptedFileStore extends CrossKeychainStore {
46
+ static open(serviceName?: string): Promise<EncryptedFileStore>;
36
47
  }
37
48
  export declare function openDefaultStore(): Promise<Store>;
38
49
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAaA,UAAU,UAAU;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,KAAM,SAAQ,QAAQ,CAAC,UAAU,CAAC;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACtC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED,qBAAa,SAAU,YAAW,KAAK;IAsBlB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAE,OAAO,CAAC,OAAO;IArB1D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAiC;WAEvD,IAAI,CAAC,IAAI,GAAE,MAA8B,GAAG,OAAO,CAAC,SAAS,CAAC;IAe3E,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,OAAO;YAEO,IAAI;IAIZ,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAQlC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI/B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC,CAAC,MAAM,CAAC,QAAQ,CAAC;CAGjB;AAED,qBAAa,WAAY,YAAW,KAAK;IAiBvC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,OAAO;WAlBH,IAAI,CAAC,WAAW,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IAW7D,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,OAAO;IAMP,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI/B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,CAAC;CAGzD;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,KAAK,CAAC,CA2BvD"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;kFAQkF;AAMlF,UAAU,UAAU;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,KAAK;IACrB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC/C,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED,qBAAa,SAAU,YAAW,KAAK;IAsBlB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAE,OAAO,CAAC,OAAO;IArB1D,MAAM,CAAC,QAAQ,CAAC,WAAW,SAAiC;WAE/C,IAAI,CAAC,IAAI,GAAE,MAA8B,GAAG,OAAO,CAAC,SAAS,CAAC;IAe3E,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,OAAO;YAEO,IAAI;IAIZ,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAI9C,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC,CAAC,MAAM,CAAC,QAAQ,CAAC;CAGjB;AAYD,uEAAuE;AACvE,uBAAe,kBAAmB,YAAW,KAAK;IAEhD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,gBAAgB,CAAC;IAC5D,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM;IAFvC,SAAS,aACW,QAAQ,EAAE,cAAc,gBAAgB,CAAC,EACzC,WAAW,EAAE,MAAM;IAGjC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAI9C,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGzC;AAED,qBAAa,aAAc,SAAQ,kBAAkB;WACvC,IAAI,CAAC,WAAW,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;CAY/D;AAED,qBAAa,kBAAmB,SAAQ,kBAAkB;WACzC,IAAI,CAAC,WAAW,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAOvE;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,KAAK,CAAC,CAyCvD"}
package/lib/store.js CHANGED
@@ -1,7 +1,4 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.KeytarStore = exports.FileStore = void 0;
4
- exports.openDefaultStore = openDefaultStore;
5
2
  /********************************************************************************
6
3
  * Copyright (c) 2024 Precies. Software and others
7
4
  *
@@ -11,6 +8,9 @@ exports.openDefaultStore = openDefaultStore;
11
8
  *
12
9
  * SPDX-License-Identifier: EPL-2.0
13
10
  ********************************************************************************/
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.EncryptedFileStore = exports.KeychainStore = exports.FileStore = void 0;
13
+ exports.openDefaultStore = openDefaultStore;
14
14
  const fs = require("fs");
15
15
  const path = require("path");
16
16
  const os_1 = require("os");
@@ -48,7 +48,7 @@ class FileStore {
48
48
  // noop
49
49
  }
50
50
  }
51
- get(name) {
51
+ async get(name) {
52
52
  return this.entries.find(p => p.name === name)?.value;
53
53
  }
54
54
  async add(name, value) {
@@ -66,59 +66,104 @@ class FileStore {
66
66
  }
67
67
  exports.FileStore = FileStore;
68
68
  FileStore.DefaultPath = path.join((0, os_1.homedir)(), '.ovsx');
69
- class KeytarStore {
70
- static async open(serviceName = 'ovsx') {
71
- const keytar = await Promise.resolve().then(() => require('keytar'));
72
- const creds = await keytar.findCredentials(serviceName);
73
- return new KeytarStore(keytar, serviceName, creds.map(({ account, password }) => ({ name: account, value: password })));
69
+ async function verifyBackend(keychain, serviceName, description) {
70
+ // Probe the active backend so we fail fast when it's present but unusable (e.g.
71
+ // `security`/`secret-tool` exists but the keychain is locked or the daemon is down).
72
+ try {
73
+ await keychain.getPassword(serviceName, serviceName);
74
74
  }
75
- get size() {
76
- return this.entries.length;
75
+ catch (err) {
76
+ throw new Error(`${description} is unavailable: ${err.message}`);
77
77
  }
78
- constructor(keytar, serviceName, entries) {
79
- this.keytar = keytar;
78
+ }
79
+ /** Shared behavior for stores backed by the cross-keychain library. */
80
+ class CrossKeychainStore {
81
+ constructor(keychain, serviceName) {
82
+ this.keychain = keychain;
80
83
  this.serviceName = serviceName;
81
- this.entries = entries;
82
84
  }
83
- get(name) {
84
- return this.entries.find(p => p.name === name)?.value;
85
+ async get(name) {
86
+ return await this.keychain.getPassword(this.serviceName, name) ?? undefined;
85
87
  }
86
88
  async add(name, value) {
87
- const newEntry = { name, value };
88
- this.entries = [...this.entries.filter(p => p.name !== name), newEntry];
89
- await this.keytar.setPassword(this.serviceName, name, value);
89
+ await this.keychain.setPassword(this.serviceName, name, value);
90
90
  }
91
91
  async delete(name) {
92
- this.entries = this.entries.filter(p => p.name !== name);
93
- await this.keytar.deletePassword(this.serviceName, name);
92
+ await this.keychain.deletePassword(this.serviceName, name);
94
93
  }
95
- [Symbol.iterator]() {
96
- return this.entries[Symbol.iterator]();
94
+ }
95
+ class KeychainStore extends CrossKeychainStore {
96
+ static async open(serviceName = 'ovsx') {
97
+ const keychain = await Promise.resolve().then(() => require('cross-keychain'));
98
+ // cross-keychain auto-detects the highest-priority backend for this platform.
99
+ const { id, name } = await keychain.diagnose();
100
+ if (id === 'file' || id === 'null') {
101
+ throw new Error('No OS credential store detected on this platform.');
102
+ }
103
+ await verifyBackend(keychain, serviceName, `System credential store '${name}'`);
104
+ return new KeychainStore(keychain, serviceName);
97
105
  }
98
106
  }
99
- exports.KeytarStore = KeytarStore;
107
+ exports.KeychainStore = KeychainStore;
108
+ class EncryptedFileStore extends CrossKeychainStore {
109
+ static async open(serviceName = 'ovsx') {
110
+ const keychain = await Promise.resolve().then(() => require('cross-keychain'));
111
+ await keychain.useBackend('file');
112
+ await verifyBackend(keychain, serviceName, 'Encrypted file store');
113
+ return new EncryptedFileStore(keychain, serviceName);
114
+ }
115
+ }
116
+ exports.EncryptedFileStore = EncryptedFileStore;
100
117
  async function openDefaultStore() {
101
- if (/^file$/i.test(process.env['OVSX_STORE'] ?? '')) {
118
+ // OVSX_STORE=file forces the encrypted file store and skips the OS credential store.
119
+ const forceFile = /^file$/i.test(process.env['OVSX_STORE'] ?? '');
120
+ let store;
121
+ // Prefer the operating system's credential store.
122
+ if (!forceFile) {
123
+ try {
124
+ store = await KeychainStore.open();
125
+ }
126
+ catch (err) {
127
+ console.warn(`WARN: ${err.message}`);
128
+ }
129
+ }
130
+ // Otherwise fall back to cross-keychain's encrypted file store.
131
+ if (!store) {
132
+ try {
133
+ store = await EncryptedFileStore.open();
134
+ if (!forceFile) {
135
+ console.warn(`WARN: Storing secrets in cross-keychain's encrypted file store as system keychain is not available..`);
136
+ }
137
+ }
138
+ catch (err) {
139
+ console.warn(`WARN: ${err.message}`);
140
+ }
141
+ }
142
+ // Last resort: if no cross-keychain store works, keep publishing usable by storing secrets clear-text.
143
+ if (!store) {
144
+ console.warn(`WARN: Falling back to storing secrets clear-text at '${FileStore.DefaultPath}' (not recommended).`);
102
145
  return await FileStore.open();
103
146
  }
104
- let keytarStore;
105
147
  try {
106
- keytarStore = await KeytarStore.open();
148
+ await migrateLegacyStore(store);
107
149
  }
108
150
  catch (err) {
109
- const store = await FileStore.open();
110
- console.warn(`Failed to open credential store. Falling back to storing secrets clear-text in: ${store.path}.`);
111
- return store;
151
+ console.warn(`WARN: Failed to read legacy file store at '${FileStore.DefaultPath}': ${err.message}`);
152
+ console.warn(`WARN: Skipping migration of Legacy file store.`);
112
153
  }
154
+ return store;
155
+ }
156
+ // Migrate secrets from the legacy clear-text file store into the given store, then delete it.
157
+ async function migrateLegacyStore(target) {
113
158
  const fileStore = await FileStore.open();
114
- // migrate from file store
115
- if (fileStore.size) {
116
- for (const { name, value } of fileStore) {
117
- await keytarStore.add(name, value);
118
- }
119
- await fileStore.deleteStore();
120
- console.info(`Migrated ${fileStore.size} publishers to system credential manager. Deleted local store '${fileStore.path}'.`);
159
+ if (!fileStore.size) {
160
+ return;
161
+ }
162
+ const migrated = fileStore.size;
163
+ for (const { name, value } of fileStore) {
164
+ await target.add(name, value);
121
165
  }
122
- return keytarStore;
166
+ await fileStore.deleteStore();
167
+ console.info(`INFO: Migrated ${migrated} publishers to the credential store. Deleted local store '${fileStore.path}'.`);
123
168
  }
124
169
  //# sourceMappingURL=store.js.map
package/lib/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/lib/util.d.ts CHANGED
@@ -31,6 +31,4 @@ export interface Manifest {
31
31
  version: string;
32
32
  license?: string;
33
33
  }
34
- export declare function getUserInput(text: string): Promise<string>;
35
- export declare function getUserChoice<R extends string>(text: string, values: R[], defaultValue: R, lowerCase?: boolean): Promise<R>;
36
34
  //# sourceMappingURL=util.d.ts.map
package/lib/util.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA;;;;;;;;kFAQkF;AAElF,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAK5D;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAEnE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC,KAAK,GAAG,SAAS,CAAC,CAI7E;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAazD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAS3E;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,kBAGnC;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,OAAc,GAAG,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAmBpH;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,GAAG,KAAK,CAKjE;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,cAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAchH;AAED,wBAAsB,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAG1E;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAUzD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,cAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAehI;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGrF;AAED,MAAM,WAAW,QAAQ;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ1D;AAED,wBAAsB,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,EACvE,YAAY,EAAE,CAAC,EAAE,SAAS,UAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAarD"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA;;;;;;;;kFAQkF;AAElF,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAK5D;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAEnE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC,KAAK,GAAG,SAAS,CAAC,CAI7E;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAazD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAS3E;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,kBAGnC;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,OAAc,GAAG,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAmBpH;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,GAAG,KAAK,CAKjE;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,cAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAchH;AAED,wBAAsB,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAG1E;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAUzD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,cAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAehI;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGrF;AAED,MAAM,WAAW,QAAQ;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB"}
package/lib/util.js CHANGED
@@ -23,12 +23,9 @@ exports.readManifest = readManifest;
23
23
  exports.validateManifest = validateManifest;
24
24
  exports.writeFile = writeFile;
25
25
  exports.writeManifest = writeManifest;
26
- exports.getUserInput = getUserInput;
27
- exports.getUserChoice = getUserChoice;
28
26
  const fs = require("fs");
29
27
  const path = require("path");
30
28
  const tmp = require("tmp");
31
- const readline = require("readline");
32
29
  var util_1 = require("util");
33
30
  Object.defineProperty(exports, "promisify", { enumerable: true, get: function () { return util_1.promisify; } });
34
31
  function addEnvOptions(options) {
@@ -145,27 +142,4 @@ function writeManifest(manifest, packagePath) {
145
142
  const content = JSON.stringify(manifest, null, 4);
146
143
  return writeFile('package.json', content, packagePath);
147
144
  }
148
- function getUserInput(text) {
149
- return new Promise(resolve => {
150
- const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
151
- rl.question(text, answer => {
152
- resolve(answer);
153
- rl.close();
154
- });
155
- });
156
- }
157
- async function getUserChoice(text, values, defaultValue, lowerCase = true) {
158
- const prompt = text + '\n' + values.map(v => v === defaultValue ? `[${v}]` : v).join('/') + ': ';
159
- const answer = await getUserInput(prompt);
160
- if (!answer) {
161
- return defaultValue;
162
- }
163
- const lcAnswer = lowerCase ? answer.toLowerCase() : answer;
164
- for (const value of values) {
165
- if (value.startsWith(lcAnswer)) {
166
- return value;
167
- }
168
- }
169
- return defaultValue;
170
- }
171
145
  //# sourceMappingURL=util.js.map
package/lib/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
package/lib/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const LIB_VERSION = "1.0.2";
1
+ export declare const LIB_VERSION = "1.1.0";
2
2
  //# sourceMappingURL=version.d.ts.map
package/lib/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.LIB_VERSION = void 0;
4
- exports.LIB_VERSION = "1.0.2";
4
+ exports.LIB_VERSION = "1.1.0";
5
5
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ovsx",
3
- "version": "1.0.2",
3
+ "version": "1.1.0",
4
4
  "description": "Command line interface for Eclipse Open VSX",
5
5
  "keywords": [
6
6
  "cli",
@@ -34,8 +34,10 @@
34
34
  "node": ">= 20"
35
35
  },
36
36
  "dependencies": {
37
+ "@inquirer/prompts": "^7.10.1",
37
38
  "@vscode/vsce": "^3.7.1",
38
39
  "commander": "^6.2.1",
40
+ "cross-keychain": "^1.1.0",
39
41
  "follow-redirects": "^1.16.0",
40
42
  "is-ci": "^2.0.0",
41
43
  "leven": "^3.1.0",
@@ -10,8 +10,9 @@
10
10
 
11
11
  import * as fs from 'fs';
12
12
  import * as isCI from 'is-ci';
13
+ import { input, select } from '@inquirer/prompts';
13
14
  import {
14
- readManifest, writeManifest, Manifest, getUserInput, getUserChoice, writeFile, validateManifest, promisify
15
+ readManifest, writeManifest, Manifest, writeFile, validateManifest, promisify
15
16
  } from './util';
16
17
 
17
18
  async function addLicense(packagePath: string, manifest: Manifest): Promise<void> {
@@ -22,11 +23,17 @@ async function addLicense(packagePath: string, manifest: Manifest): Promise<void
22
23
  + 'the MIT license and for compliance with that license.');
23
24
  let answer: 'yes' | 'help' | 'no';
24
25
  do {
25
- console.log();
26
- answer = await getUserChoice('Would you like to publish your extension '
27
- + manifest.publisher + '.' + manifest.name
28
- + ' under the MIT license?',
29
- ['yes', 'help', 'no'], 'no');
26
+ answer = await select({
27
+ message: 'Would you like to publish your extension '
28
+ + manifest.publisher + '.' + manifest.name
29
+ + ' under the MIT license?',
30
+ choices: [
31
+ { name: 'Yes', value: 'yes' },
32
+ { name: 'Help', value: 'help' },
33
+ { name: 'No', value: 'no' }
34
+ ],
35
+ default: 'no'
36
+ });
30
37
  switch (answer) {
31
38
  case 'yes':
32
39
  await useMITLicense(manifest, packagePath);
@@ -73,10 +80,10 @@ export async function checkLicense(packagePath: string): Promise<void> {
73
80
  async function useMITLicense(manifest: Manifest, packagePath?: string) {
74
81
  console.log('Please enter a value for Copyright Year and Copyright Holder.\n'
75
82
  + 'Example: "Copyright 2020 John Doe"\n');
76
- const copyright = await getUserInput('Copyright ');
77
- if (!copyright) {
78
- throw new Error('A copyright declaration is necessary for the MIT license.');
79
- }
83
+ const copyright = await input({
84
+ message: 'Copyright',
85
+ validate: value => value.trim().length > 0 || 'A copyright declaration is necessary for the MIT license.'
86
+ });
80
87
  manifest.license = 'MIT';
81
88
  await writeManifest(manifest, packagePath);
82
89
  const license = MIT_LICENSE_TEXT.replace('<YEAR> <COPYRIGHT HOLDER>', copyright);
@@ -14,4 +14,4 @@ export interface LoginOptions extends RegistryOptions {
14
14
  * Name of the namespace.
15
15
  */
16
16
  namespace?: string
17
- }
17
+ }
package/src/login.ts CHANGED
@@ -7,8 +7,8 @@
7
7
  *
8
8
  * SPDX-License-Identifier: EPL-2.0
9
9
  ********************************************************************************/
10
- import { } from '@vscode/vsce';
11
- import { addEnvOptions, getUserInput } from './util';
10
+ import { confirm } from '@inquirer/prompts';
11
+ import { addEnvOptions } from './util';
12
12
  import { openDefaultStore } from './store';
13
13
  import { LoginOptions } from './login-options';
14
14
  import { requestPAT } from './pat';
@@ -20,16 +20,19 @@ export default async function login(options: LoginOptions) {
20
20
  }
21
21
 
22
22
  const store = await openDefaultStore();
23
- let pat = store.get(options.namespace);
23
+ let pat = await store.get(options.namespace);
24
24
  if (pat) {
25
25
  console.log(`Namespace '${options.namespace}' is already known.`);
26
- const answer = await getUserInput('Do you want to overwrite its PAT? [y/N] ');
26
+ const overwrite = await confirm({
27
+ message: 'Do you want to overwrite its PAT?',
28
+ default: false
29
+ });
27
30
 
28
- if (!/^y$/i.test(answer)) {
31
+ if (!overwrite) {
29
32
  throw new Error('Aborted.');
30
33
  }
31
34
  }
32
35
 
33
36
  pat = await requestPAT(options.namespace, options);
34
37
  await store.add(options.namespace, pat);
35
- }
38
+ }
package/src/logout.ts CHANGED
@@ -15,10 +15,10 @@ export default async function logout(namespaceName: string) {
15
15
  }
16
16
 
17
17
  const store = await openDefaultStore();
18
- if (!store.get(namespaceName)) {
18
+ if (!await store.get(namespaceName)) {
19
19
  throw new Error(`Unknown namespace '${namespaceName}'.`);
20
20
  }
21
21
 
22
22
  await store.delete(namespaceName);
23
23
  console.log(`\ud83d\ude80 ${namespaceName} removed from the list of known namespaces`);
24
- }
24
+ }
package/src/main.ts CHANGED
@@ -51,10 +51,11 @@ module.exports = function (argv: string[]): void {
51
51
  .option('--baseImagesUrl <url>', 'Prepend all relative image links in README.md with this URL.')
52
52
  .option('--yarn', 'Use yarn instead of npm while packing extension files.')
53
53
  .option('--pre-release', 'Mark this package as a pre-release')
54
+ .option('--allow-missing-repository', 'Allow packaging an extension whose package.json has no repository field')
54
55
  .option('--no-dependencies', 'Disable dependency detection via npm or yarn')
55
56
  .option('--skip-duplicate', 'Fail silently if version already exists on the marketplace')
56
57
  .option('--packageVersion <version>', 'Version of the provided VSIX packages.')
57
- .action((extensionFile: string, { target, packagePath, baseContentUrl, baseImagesUrl, yarn, preRelease, dependencies, skipDuplicate, packageVersion }) => {
58
+ .action((extensionFile: string, { target, packagePath, baseContentUrl, baseImagesUrl, yarn, preRelease, allowMissingRepository, dependencies, skipDuplicate, packageVersion }) => {
58
59
  if (extensionFile !== undefined && packagePath !== undefined) {
59
60
  console.error('\u274c Please specify either a package file or a package path, but not both.\n');
60
61
  publishCmd.help();
@@ -71,8 +72,10 @@ module.exports = function (argv: string[]): void {
71
72
  console.warn("Ignoring option '--yarn' for prepackaged extension.");
72
73
  if (extensionFile !== undefined && packageVersion !== undefined)
73
74
  console.warn("Ignoring option '--packageVersion' for prepackaged extension.");
75
+ if (extensionFile !== undefined && allowMissingRepository !== undefined)
76
+ console.warn("Ignoring option '--allow-missing-repository' for prepackaged extension.");
74
77
  const { registryUrl, pat } = program.opts();
75
- publish({ extensionFile, registryUrl, pat, targets: typeof target === 'string' ? [target] : target, packagePath: typeof packagePath === 'string' ? [packagePath] : packagePath, baseContentUrl, baseImagesUrl, yarn, preRelease, dependencies, skipDuplicate, packageVersion })
78
+ publish({ extensionFile, registryUrl, pat, targets: typeof target === 'string' ? [target] : target, packagePath: typeof packagePath === 'string' ? [packagePath] : packagePath, baseContentUrl, baseImagesUrl, yarn, preRelease, allowMissingRepository, dependencies, skipDuplicate, packageVersion })
76
79
  .then(results => {
77
80
  const reasons = results.filter(result => result.status === 'rejected')
78
81
  .map(rejectedResult => rejectedResult.reason);
package/src/pat.ts CHANGED
@@ -7,11 +7,11 @@
7
7
  *
8
8
  * SPDX-License-Identifier: EPL-2.0
9
9
  * ****************************************************************************** */
10
+ import { password } from '@inquirer/prompts';
10
11
  import { CreateNamespaceOptions } from './create-namespace-options';
11
12
  import { PublishOptions } from './publish-options';
12
13
  import { VerifyPatOptions } from './verify-pat-options';
13
14
  import { Registry } from './registry';
14
- import { getUserInput } from './util';
15
15
  import { openDefaultStore } from './store';
16
16
 
17
17
  export async function doVerifyPat(options: VerifyPatOptions) {
@@ -26,7 +26,11 @@ export async function doVerifyPat(options: VerifyPatOptions) {
26
26
  }
27
27
 
28
28
  export async function requestPAT(namespace: string, options: CreateNamespaceOptions | PublishOptions | VerifyPatOptions, verify: boolean = true): Promise<string> {
29
- const pat = await getUserInput(`Personal Access Token for namespace '${namespace}':`);
29
+ const pat = await password({
30
+ message: `Personal Access Token for namespace '${namespace}':`,
31
+ mask: true,
32
+ validate: value => value.trim().length > 0 || 'A personal access token is required.'
33
+ });
30
34
  if (verify) {
31
35
  await doVerifyPat({ ...options, namespace, pat });
32
36
  }
@@ -40,7 +44,7 @@ export async function getPAT(namespace: string, options: CreateNamespaceOptions
40
44
  }
41
45
 
42
46
  const store = await openDefaultStore();
43
- let pat = store.get(namespace);
47
+ let pat = await store.get(namespace);
44
48
  if (pat) {
45
49
  return pat;
46
50
  }
@@ -49,4 +53,4 @@ export async function getPAT(namespace: string, options: CreateNamespaceOptions
49
53
  await store.add(namespace, pat);
50
54
 
51
55
  return pat;
52
- }
56
+ }
@@ -30,6 +30,11 @@ export interface PublishCommonOptions extends RegistryOptions {
30
30
  * Mark this package as a pre-release. Only valid with `packagePath`.
31
31
  */
32
32
  preRelease?: boolean;
33
+ /**
34
+ * Package the extension even though its manifest has no `repository` field, instead of asking for
35
+ * confirmation. Only valid with `packagePath`.
36
+ */
37
+ allowMissingRepository?: boolean;
33
38
  /**
34
39
  * Whether to fail silently if version already exists on the marketplace
35
40
  */
@@ -58,4 +63,4 @@ export interface PublishOptions extends PublishCommonOptions {
58
63
  * Whether to do dependency detection via npm or yarn
59
64
  */
60
65
  dependencies?: boolean;
61
- }
66
+ }
package/src/publish.ts CHANGED
@@ -94,6 +94,7 @@ async function packageExtension(options: InternalPublishOptions, registry: Regis
94
94
  useYarn: options.yarn,
95
95
  dependencies: options.dependencies,
96
96
  preRelease: options.preRelease,
97
+ allowMissingRepository: options.allowMissingRepository,
97
98
  version: options.packageVersion
98
99
  };
99
100
  await createVSIX(packageOptions);
@@ -119,4 +120,4 @@ interface InternalPublishOptions extends PublishCommonOptions {
119
120
  * Whether to do dependency detection via npm or yarn
120
121
  */
121
122
  dependencies?: boolean;
122
- }
123
+ }
@@ -33,4 +33,4 @@ export interface RegistryOptions {
33
33
  * Maximal request body size for publishing.
34
34
  */
35
35
  maxPublishSize?: number;
36
- }
36
+ }
package/src/store.ts CHANGED
@@ -7,6 +7,7 @@
7
7
  *
8
8
  * SPDX-License-Identifier: EPL-2.0
9
9
  ********************************************************************************/
10
+
10
11
  import * as fs from 'fs';
11
12
  import * as path from 'path';
12
13
  import { homedir } from 'os';
@@ -16,15 +17,14 @@ interface StoreEntry {
16
17
  value: string
17
18
  }
18
19
 
19
- export interface Store extends Iterable<StoreEntry> {
20
- readonly size: number;
21
- get(name: string): string | undefined;
20
+ export interface Store {
21
+ get(name: string): Promise<string | undefined>;
22
22
  add(name: string, value: string): Promise<void>;
23
23
  delete(name: string): Promise<void>;
24
24
  }
25
25
 
26
26
  export class FileStore implements Store {
27
- private static readonly DefaultPath = path.join(homedir(), '.ovsx');
27
+ static readonly DefaultPath = path.join(homedir(), '.ovsx');
28
28
 
29
29
  static async open(path: string = FileStore.DefaultPath): Promise<FileStore> {
30
30
  try {
@@ -59,7 +59,7 @@ export class FileStore implements Store {
59
59
  }
60
60
  }
61
61
 
62
- get(name: string): string | undefined {
62
+ async get(name: string): Promise<string | undefined> {
63
63
  return this.entries.find(p => p.name === name)?.value;
64
64
  }
65
65
 
@@ -79,73 +79,116 @@ export class FileStore implements Store {
79
79
  }
80
80
  }
81
81
 
82
- export class KeytarStore implements Store {
83
- static async open(serviceName = 'ovsx'): Promise<KeytarStore> {
84
- const keytar = await import('keytar');
85
- const creds = await keytar.findCredentials(serviceName);
86
-
87
- return new KeytarStore(
88
- keytar,
89
- serviceName,
90
- creds.map(({ account, password }) => ({ name: account, value: password }))
91
- );
92
- }
93
-
94
- get size(): number {
95
- return this.entries.length;
82
+ async function verifyBackend(keychain: typeof import('cross-keychain'), serviceName: string, description: string): Promise<void> {
83
+ // Probe the active backend so we fail fast when it's present but unusable (e.g.
84
+ // `security`/`secret-tool` exists but the keychain is locked or the daemon is down).
85
+ try {
86
+ await keychain.getPassword(serviceName, serviceName);
87
+ } catch (err) {
88
+ throw new Error(`${description} is unavailable: ${err.message}`);
96
89
  }
90
+ }
97
91
 
98
- private constructor(
99
- private readonly keytar: typeof import('keytar'),
100
- private readonly serviceName: string,
101
- private entries: StoreEntry[]
92
+ /** Shared behavior for stores backed by the cross-keychain library. */
93
+ abstract class CrossKeychainStore implements Store {
94
+ protected constructor(
95
+ protected readonly keychain: typeof import('cross-keychain'),
96
+ protected readonly serviceName: string
102
97
  ) { }
103
98
 
104
- get(name: string): string | undefined {
105
- return this.entries.find(p => p.name === name)?.value;
99
+ async get(name: string): Promise<string | undefined> {
100
+ return await this.keychain.getPassword(this.serviceName, name) ?? undefined;
106
101
  }
107
102
 
108
103
  async add(name: string, value: string): Promise<void> {
109
- const newEntry: StoreEntry = { name, value };
110
- this.entries = [...this.entries.filter(p => p.name !== name), newEntry];
111
- await this.keytar.setPassword(this.serviceName, name, value);
104
+ await this.keychain.setPassword(this.serviceName, name, value);
112
105
  }
113
106
 
114
107
  async delete(name: string): Promise<void> {
115
- this.entries = this.entries.filter(p => p.name !== name);
116
- await this.keytar.deletePassword(this.serviceName, name);
108
+ await this.keychain.deletePassword(this.serviceName, name);
117
109
  }
110
+ }
118
111
 
119
- [Symbol.iterator](): Iterator<StoreEntry, any, undefined> {
120
- return this.entries[Symbol.iterator]();
112
+ export class KeychainStore extends CrossKeychainStore {
113
+ static async open(serviceName = 'ovsx'): Promise<KeychainStore> {
114
+ const keychain = await import('cross-keychain');
115
+
116
+ // cross-keychain auto-detects the highest-priority backend for this platform.
117
+ const { id, name } = await keychain.diagnose();
118
+ if (id === 'file' || id === 'null') {
119
+ throw new Error('No OS credential store detected on this platform.');
120
+ }
121
+
122
+ await verifyBackend(keychain, serviceName, `System credential store '${name}'`);
123
+ return new KeychainStore(keychain, serviceName);
124
+ }
125
+ }
126
+
127
+ export class EncryptedFileStore extends CrossKeychainStore {
128
+ static async open(serviceName = 'ovsx'): Promise<EncryptedFileStore> {
129
+ const keychain = await import('cross-keychain');
130
+
131
+ await keychain.useBackend('file');
132
+ await verifyBackend(keychain, serviceName, 'Encrypted file store');
133
+ return new EncryptedFileStore(keychain, serviceName);
121
134
  }
122
135
  }
123
136
 
124
137
  export async function openDefaultStore(): Promise<Store> {
125
- if (/^file$/i.test(process.env['OVSX_STORE'] ?? '')) {
126
- return await FileStore.open();
138
+ // OVSX_STORE=file forces the encrypted file store and skips the OS credential store.
139
+ const forceFile = /^file$/i.test(process.env['OVSX_STORE'] ?? '');
140
+
141
+ let store: KeychainStore | EncryptedFileStore | undefined;
142
+
143
+ // Prefer the operating system's credential store.
144
+ if (!forceFile) {
145
+ try {
146
+ store = await KeychainStore.open();
147
+ } catch (err) {
148
+ console.warn(`WARN: ${err.message}`);
149
+ }
127
150
  }
128
151
 
129
- let keytarStore: Store;
130
- try {
131
- keytarStore = await KeytarStore.open();
132
- } catch (err) {
133
- const store = await FileStore.open();
134
- console.warn(`Failed to open credential store. Falling back to storing secrets clear-text in: ${store.path}.`);
135
- return store;
152
+ // Otherwise fall back to cross-keychain's encrypted file store.
153
+ if (!store) {
154
+ try {
155
+ store = await EncryptedFileStore.open();
156
+ if (!forceFile) {
157
+ console.warn(`WARN: Storing secrets in cross-keychain's encrypted file store as system keychain is not available..`);
158
+ }
159
+ } catch (err) {
160
+ console.warn(`WARN: ${err.message}`);
161
+ }
136
162
  }
137
163
 
138
- const fileStore = await FileStore.open();
164
+ // Last resort: if no cross-keychain store works, keep publishing usable by storing secrets clear-text.
165
+ if (!store) {
166
+ console.warn(`WARN: Falling back to storing secrets clear-text at '${FileStore.DefaultPath}' (not recommended).`);
167
+ return await FileStore.open();
168
+ }
139
169
 
140
- // migrate from file store
141
- if (fileStore.size) {
142
- for (const { name, value } of fileStore) {
143
- await keytarStore.add(name, value);
144
- }
170
+ try {
171
+ await migrateLegacyStore(store);
172
+ } catch (err) {
173
+ console.warn(`WARN: Failed to read legacy file store at '${FileStore.DefaultPath}': ${err.message}`);
174
+ console.warn(`WARN: Skipping migration of Legacy file store.`);
175
+ }
176
+
177
+ return store;
178
+ }
145
179
 
146
- await fileStore.deleteStore();
147
- console.info(`Migrated ${fileStore.size} publishers to system credential manager. Deleted local store '${fileStore.path}'.`);
180
+ // Migrate secrets from the legacy clear-text file store into the given store, then delete it.
181
+ async function migrateLegacyStore(target: Store): Promise<void> {
182
+ const fileStore = await FileStore.open();
183
+ if (!fileStore.size) {
184
+ return;
148
185
  }
149
186
 
150
- return keytarStore;
151
- }
187
+ const migrated = fileStore.size;
188
+ for (const { name, value } of fileStore) {
189
+ await target.add(name, value);
190
+ }
191
+
192
+ await fileStore.deleteStore();
193
+ console.info(`INFO: Migrated ${migrated} publishers to the credential store. Deleted local store '${fileStore.path}'.`);
194
+ }
package/src/util.ts CHANGED
@@ -12,7 +12,6 @@ import * as fs from 'fs';
12
12
  import * as path from 'path';
13
13
  import * as tmp from 'tmp';
14
14
  import * as http from 'http';
15
- import * as readline from 'readline';
16
15
  import { RegistryOptions } from './registry-options';
17
16
 
18
17
  export { promisify } from 'util';
@@ -154,29 +153,3 @@ export interface Manifest {
154
153
  version: string;
155
154
  license?: string;
156
155
  }
157
-
158
- export function getUserInput(text: string): Promise<string> {
159
- return new Promise(resolve => {
160
- const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
161
- rl.question(text, answer => {
162
- resolve(answer);
163
- rl.close();
164
- });
165
- });
166
- }
167
-
168
- export async function getUserChoice<R extends string>(text: string, values: R[],
169
- defaultValue: R, lowerCase = true): Promise<R> {
170
- const prompt = text + '\n' + values.map(v => v === defaultValue ? `[${v}]` : v).join('/') + ': ';
171
- const answer = await getUserInput(prompt);
172
- if (!answer) {
173
- return defaultValue;
174
- }
175
- const lcAnswer = lowerCase ? answer.toLowerCase() : answer;
176
- for (const value of values) {
177
- if (value.startsWith(lcAnswer)) {
178
- return value;
179
- }
180
- }
181
- return defaultValue;
182
- }
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const LIB_VERSION = "1.0.2";
1
+ export const LIB_VERSION = "1.1.0";