@vltpkg/keychain 0.0.0-9 → 1.0.0-rc.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAOA,qBAAa,QAAQ,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;;gBAOjC,WAAW,EAAE,MAAM;IAK/B,IAAI,IAAI,WAEP;IACD,IAAI,KAAK,YAER;IAEK,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAI9C,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAI7B,IAAI;IAuBJ,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIxC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAoB7B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAKzB,MAAM,CAAC,GAAG,EAAE,MAAM;IAgBZ,IAAI;CAKX"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAOA,qBAAa,QAAQ,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;;gBAOjC,WAAW,EAAE,MAAM;IAK/B,IAAI,IAAI,WAEP;IACD,IAAI,KAAK,YAER;IAEK,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAI9C,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAI7B,IAAI;IAmBJ,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIxC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAoB7B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAKzB,MAAM,CAAC,GAAG,EAAE,MAAM;IAgBZ,IAAI;CAKX"}
package/dist/esm/index.js CHANGED
@@ -32,20 +32,16 @@ export class Keychain {
32
32
  async #load() {
33
33
  if (this.#data)
34
34
  return this;
35
- let ok = false;
36
35
  try {
37
36
  this.#data = JSON.parse(await readFile(this.#file, 'utf8'));
38
- ok = !!this.#data;
39
37
  }
40
- finally {
41
- if (!ok) {
42
- // just write the file if it failed in any way.
43
- this.#data = {};
44
- await this.#writeFile().catch(() => { });
45
- }
46
- // eslint-disable-next-line no-unsafe-finally
47
- return this;
38
+ catch { }
39
+ if (!this.#data) {
40
+ // just write the file if it failed in any way.
41
+ this.#data = {};
42
+ await this.#writeFile().catch(() => { });
48
43
  }
44
+ return this;
49
45
  }
50
46
  async has(key) {
51
47
  return (await this.#load()).hasSync(key);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,kEAAkE;AAClE,6CAA6C;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,MAAM,OAAO,QAAQ;IACnB,KAAK,CAAoB;IACzB,YAAY,GAAG,KAAK,CAAA;IACpB,MAAM,GAAG,KAAK,CAAA;IACd,KAAK,CAAQ;IACb,IAAI,CAAK;IAET,YAAY,WAAmB;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAA;QAChC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IAC9C,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IACD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC1C,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAA;QAC3B,IAAI,EAAE,GAAG,KAAK,CAAA;QACd,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CACrB,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CACd,CAAA;YACtB,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAA;QACnB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,+CAA+C;gBAC/C,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;gBACf,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YACzC,CAAC;YACD,6CAA6C;YAC7C,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC1C,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACvD,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC/B,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,KAAK;SACZ,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;QAC9C,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE;YACtD,IAAI,EAAE,KAAK;SACZ,CAAC,CAAA;QACF,MAAM,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAC/B,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAQ;QACvB,CAAC;QAAA,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACjC,IAAI,CAAC,UAAU,EAAE,CAAA;IACnB,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAM;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACtB,IAAI,CAAC,UAAU,EAAE,CAAA;IACnB,CAAC;IAED,UAAU;QACR,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAClB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;YACxB,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;gBAC9B,KAAK,IAAI,CAAC,IAAI,EAAE,CAAA;YAClB,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAM;QACvC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;IACzB,CAAC;CACF","sourcesContent":["// Note: this class does NOT handle reading from the environment,\n// only the keychain file. Any other source of auth data should be\n// handled before or instead of this utility.\nimport { XDG } from '@vltpkg/xdg'\nimport { mkdir, readFile, rename, writeFile } from 'node:fs/promises'\nimport { dirname } from 'node:path'\n\nexport class Keychain<V extends string = string> {\n #data?: Record<string, V>\n #didExitSave = false\n #dirty = false\n #file: string\n #xdg: XDG\n\n constructor(application: string) {\n this.#xdg = new XDG(application)\n this.#file = this.#xdg.data('keychain.json')\n }\n\n get file() {\n return this.#file\n }\n get dirty() {\n return this.#dirty\n }\n\n async get(key: string): Promise<V | undefined> {\n return (await this.#load()).getSync(key)\n }\n\n getSync(key: string): V | undefined {\n return this.#data?.[key]\n }\n\n async load() {\n await this.#load()\n }\n\n async #load(): Promise<this> {\n if (this.#data) return this\n let ok = false\n try {\n this.#data = JSON.parse(\n await readFile(this.#file, 'utf8'),\n ) as Record<string, V>\n ok = !!this.#data\n } finally {\n if (!ok) {\n // just write the file if it failed in any way.\n this.#data = {}\n await this.#writeFile().catch(() => {})\n }\n // eslint-disable-next-line no-unsafe-finally\n return this\n }\n }\n\n async has(key: string): Promise<boolean> {\n return (await this.#load()).hasSync(key)\n }\n\n hasSync(key: string): boolean {\n return !!this.#data && Object.hasOwn(this.#data, key)\n }\n\n async #mkdir() {\n await mkdir(dirname(this.#file), {\n recursive: true,\n mode: 0o700,\n })\n }\n\n async #writeFile() {\n await this.#mkdir()\n const tmp = this.#file + String(Math.random())\n await writeFile(tmp, JSON.stringify(this.#data) + '\\n', {\n mode: 0o600,\n })\n await rename(tmp, this.#file)\n }\n\n set(key: string, value: V) {\n ;(this.#data ??= {})[key] = value\n this.#makeDirty()\n }\n\n delete(key: string) {\n if (!this.#data) return\n delete this.#data[key]\n this.#makeDirty()\n }\n\n #makeDirty() {\n this.#dirty = true\n if (!this.#didExitSave) {\n this.#didExitSave = true\n process.once('beforeExit', () => {\n void this.save()\n })\n }\n }\n\n async save() {\n if (!this.#dirty || !this.#data) return\n this.#dirty = false\n await this.#writeFile()\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,kEAAkE;AAClE,6CAA6C;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,MAAM,OAAO,QAAQ;IACnB,KAAK,CAAoB;IACzB,YAAY,GAAG,KAAK,CAAA;IACpB,MAAM,GAAG,KAAK,CAAA;IACd,KAAK,CAAQ;IACb,IAAI,CAAK;IAET,YAAY,WAAmB;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAA;QAChC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IAC9C,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IACD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC1C,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAA;QAC3B,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CACrB,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CACd,CAAA;QACxB,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,+CAA+C;YAC/C,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;YACf,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACzC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC1C,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACvD,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC/B,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,KAAK;SACZ,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;QAC9C,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE;YACtD,IAAI,EAAE,KAAK;SACZ,CAAC,CAAA;QACF,MAAM,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAC/B,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAQ;QACvB,CAAC;QAAA,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACjC,IAAI,CAAC,UAAU,EAAE,CAAA;IACnB,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAM;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACtB,IAAI,CAAC,UAAU,EAAE,CAAA;IACnB,CAAC;IAED,UAAU;QACR,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAClB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;YACxB,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;gBAC9B,KAAK,IAAI,CAAC,IAAI,EAAE,CAAA;YAClB,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAM;QACvC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;IACzB,CAAC;CACF","sourcesContent":["// Note: this class does NOT handle reading from the environment,\n// only the keychain file. Any other source of auth data should be\n// handled before or instead of this utility.\nimport { XDG } from '@vltpkg/xdg'\nimport { mkdir, readFile, rename, writeFile } from 'node:fs/promises'\nimport { dirname } from 'node:path'\n\nexport class Keychain<V extends string = string> {\n #data?: Record<string, V>\n #didExitSave = false\n #dirty = false\n #file: string\n #xdg: XDG\n\n constructor(application: string) {\n this.#xdg = new XDG(application)\n this.#file = this.#xdg.data('keychain.json')\n }\n\n get file() {\n return this.#file\n }\n get dirty() {\n return this.#dirty\n }\n\n async get(key: string): Promise<V | undefined> {\n return (await this.#load()).getSync(key)\n }\n\n getSync(key: string): V | undefined {\n return this.#data?.[key]\n }\n\n async load() {\n await this.#load()\n }\n\n async #load(): Promise<this> {\n if (this.#data) return this\n try {\n this.#data = JSON.parse(\n await readFile(this.#file, 'utf8'),\n ) as Record<string, V>\n } catch {}\n if (!this.#data) {\n // just write the file if it failed in any way.\n this.#data = {}\n await this.#writeFile().catch(() => {})\n }\n return this\n }\n\n async has(key: string): Promise<boolean> {\n return (await this.#load()).hasSync(key)\n }\n\n hasSync(key: string): boolean {\n return !!this.#data && Object.hasOwn(this.#data, key)\n }\n\n async #mkdir() {\n await mkdir(dirname(this.#file), {\n recursive: true,\n mode: 0o700,\n })\n }\n\n async #writeFile() {\n await this.#mkdir()\n const tmp = this.#file + String(Math.random())\n await writeFile(tmp, JSON.stringify(this.#data) + '\\n', {\n mode: 0o600,\n })\n await rename(tmp, this.#file)\n }\n\n set(key: string, value: V) {\n ;(this.#data ??= {})[key] = value\n this.#makeDirty()\n }\n\n delete(key: string) {\n if (!this.#data) return\n delete this.#data[key]\n this.#makeDirty()\n }\n\n #makeDirty() {\n this.#dirty = true\n if (!this.#didExitSave) {\n this.#didExitSave = true\n process.once('beforeExit', () => {\n void this.save()\n })\n }\n }\n\n async save() {\n if (!this.#dirty || !this.#data) return\n this.#dirty = false\n await this.#writeFile()\n }\n}\n"]}
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@vltpkg/keychain",
3
3
  "description": "The filesystem keychain for `@vltpkg/registry-client`",
4
- "version": "0.0.0-9",
4
+ "version": "1.0.0-rc.2",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/vltpkg/vltpkg.git",
8
8
  "directory": "src/keychain"
9
9
  },
10
+ "author": "vlt technology inc. <support@vlt.sh> (http://vlt.sh)",
10
11
  "tshy": {
11
12
  "selfLink": false,
12
13
  "liveDev": true,
@@ -19,19 +20,18 @@
19
20
  }
20
21
  },
21
22
  "dependencies": {
22
- "@vltpkg/xdg": "0.0.0-9"
23
+ "@vltpkg/xdg": "1.0.0-rc.2"
23
24
  },
24
25
  "devDependencies": {
25
- "@eslint/js": "^9.20.0",
26
- "@types/eslint__js": "^8.42.3",
27
- "@types/node": "^22.13.1",
28
- "eslint": "^9.20.0",
29
- "prettier": "^3.4.2",
26
+ "@eslint/js": "^9.34.0",
27
+ "@types/node": "^22.17.2",
28
+ "eslint": "^9.34.0",
29
+ "prettier": "^3.6.2",
30
30
  "tap": "^21.1.0",
31
31
  "tshy": "^3.0.2",
32
- "typedoc": "0.27.6",
32
+ "typedoc": "~0.27.9",
33
33
  "typescript": "5.7.3",
34
- "typescript-eslint": "^8.23.0"
34
+ "typescript-eslint": "^8.40.0"
35
35
  },
36
36
  "license": "BSD-2-Clause-Patent",
37
37
  "engines": {
@@ -63,6 +63,7 @@
63
63
  "snap": "tap",
64
64
  "test": "tap",
65
65
  "posttest": "tsc --noEmit",
66
+ "tshy": "tshy",
66
67
  "typecheck": "tsc --noEmit"
67
68
  }
68
69
  }