@hasna/accounts 0.1.17 → 0.1.19
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/dist/cli.js +10 -3
- package/dist/index.js +10 -3
- package/dist/lib/profiles.d.ts.map +1 -1
- package/dist/mcp.js +4 -1
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +4 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -42008,7 +42008,7 @@ import { join as join3 } from "node:path";
|
|
|
42008
42008
|
import { homedir as homedir2 } from "node:os";
|
|
42009
42009
|
import { hostname } from "node:os";
|
|
42010
42010
|
import { join as join2 } from "node:path";
|
|
42011
|
-
import { existsSync as existsSync3, mkdirSync as mkdirSync2, readFileSync, writeFileSync } from "node:fs";
|
|
42011
|
+
import { chmodSync, existsSync as existsSync3, mkdirSync as mkdirSync2, readFileSync, writeFileSync } from "node:fs";
|
|
42012
42012
|
|
|
42013
42013
|
// src/lib/safe-path.ts
|
|
42014
42014
|
import { existsSync as existsSync2, lstatSync, mkdirSync, realpathSync } from "node:fs";
|
|
@@ -42149,8 +42149,11 @@ function saveStore(store) {
|
|
|
42149
42149
|
const path = storePath();
|
|
42150
42150
|
assertSafeWritePath(path, { mustStayUnder: accountsHome() });
|
|
42151
42151
|
mkdirSync2(join2(path, ".."), { recursive: true });
|
|
42152
|
+
if (existsSync3(path))
|
|
42153
|
+
chmodSync(path, 384);
|
|
42152
42154
|
writeFileSync(path, JSON.stringify(store, null, 2) + `
|
|
42153
42155
|
`, { mode: 384 });
|
|
42156
|
+
chmodSync(path, 384);
|
|
42154
42157
|
}
|
|
42155
42158
|
function firstEnv(env2, primary, fallback) {
|
|
42156
42159
|
return env2[primary] || env2[fallback] || undefined;
|
|
@@ -42541,7 +42544,7 @@ function removeCustomTool(id) {
|
|
|
42541
42544
|
|
|
42542
42545
|
// src/lib/profiles.ts
|
|
42543
42546
|
import { homedir as homedir4 } from "node:os";
|
|
42544
|
-
import { isAbsolute, join as join5, resolve as resolve2 } from "node:path";
|
|
42547
|
+
import { isAbsolute, join as join5, relative, resolve as resolve2 } from "node:path";
|
|
42545
42548
|
import { existsSync as existsSync5, mkdirSync as mkdirSync3, rmSync } from "node:fs";
|
|
42546
42549
|
|
|
42547
42550
|
// src/lib/detect.ts
|
|
@@ -42599,6 +42602,10 @@ function listProfiles(toolId) {
|
|
|
42599
42602
|
function profileMatches(name, toolId) {
|
|
42600
42603
|
return loadStore().profiles.filter((p) => p.name === name && (!toolId || p.tool === toolId));
|
|
42601
42604
|
}
|
|
42605
|
+
function isManagedProfileDir(dir) {
|
|
42606
|
+
const rel = relative(resolve2(profilesDir()), resolve2(dir));
|
|
42607
|
+
return rel !== "" && !rel.startsWith("..") && !isAbsolute(rel);
|
|
42608
|
+
}
|
|
42602
42609
|
function getProfile(name, toolId) {
|
|
42603
42610
|
const matches = profileMatches(name, toolId);
|
|
42604
42611
|
if (matches.length === 0) {
|
|
@@ -42662,7 +42669,7 @@ function removeProfile(name, opts = {}) {
|
|
|
42662
42669
|
let purged = false;
|
|
42663
42670
|
let purgeNote;
|
|
42664
42671
|
if (options.purge) {
|
|
42665
|
-
const managed = profile.dir
|
|
42672
|
+
const managed = isManagedProfileDir(profile.dir);
|
|
42666
42673
|
const isDefault = profile.dir === getTool(profile.tool).defaultDir;
|
|
42667
42674
|
if (managed && !isDefault && existsSync5(profile.dir)) {
|
|
42668
42675
|
rmSync(profile.dir, { recursive: true, force: true });
|
package/dist/index.js
CHANGED
|
@@ -4030,7 +4030,7 @@ class AccountsError extends Error {
|
|
|
4030
4030
|
// src/storage.ts
|
|
4031
4031
|
import { homedir } from "node:os";
|
|
4032
4032
|
import { join } from "node:path";
|
|
4033
|
-
import { existsSync as existsSync2, mkdirSync as mkdirSync2, readFileSync, writeFileSync } from "node:fs";
|
|
4033
|
+
import { chmodSync, existsSync as existsSync2, mkdirSync as mkdirSync2, readFileSync, writeFileSync } from "node:fs";
|
|
4034
4034
|
|
|
4035
4035
|
// src/lib/safe-path.ts
|
|
4036
4036
|
import { existsSync, lstatSync, mkdirSync, realpathSync } from "node:fs";
|
|
@@ -4161,8 +4161,11 @@ function saveStore(store) {
|
|
|
4161
4161
|
const path = storePath();
|
|
4162
4162
|
assertSafeWritePath(path, { mustStayUnder: accountsHome() });
|
|
4163
4163
|
mkdirSync2(join(path, ".."), { recursive: true });
|
|
4164
|
+
if (existsSync2(path))
|
|
4165
|
+
chmodSync(path, 384);
|
|
4164
4166
|
writeFileSync(path, JSON.stringify(store, null, 2) + `
|
|
4165
4167
|
`, { mode: 384 });
|
|
4168
|
+
chmodSync(path, 384);
|
|
4166
4169
|
}
|
|
4167
4170
|
// src/lib/tools.ts
|
|
4168
4171
|
import { homedir as homedir2 } from "node:os";
|
|
@@ -4846,7 +4849,7 @@ function readEmail(file, path) {
|
|
|
4846
4849
|
}
|
|
4847
4850
|
// src/lib/profiles.ts
|
|
4848
4851
|
import { homedir as homedir4 } from "node:os";
|
|
4849
|
-
import { isAbsolute, join as join7, resolve as resolve2 } from "node:path";
|
|
4852
|
+
import { isAbsolute, join as join7, relative, resolve as resolve2 } from "node:path";
|
|
4850
4853
|
import { existsSync as existsSync6, mkdirSync as mkdirSync5, rmSync } from "node:fs";
|
|
4851
4854
|
function nowIso() {
|
|
4852
4855
|
return new Date().toISOString();
|
|
@@ -4867,6 +4870,10 @@ function listProfiles(toolId) {
|
|
|
4867
4870
|
function profileMatches(name, toolId) {
|
|
4868
4871
|
return loadStore().profiles.filter((p) => p.name === name && (!toolId || p.tool === toolId));
|
|
4869
4872
|
}
|
|
4873
|
+
function isManagedProfileDir(dir) {
|
|
4874
|
+
const rel = relative(resolve2(profilesDir()), resolve2(dir));
|
|
4875
|
+
return rel !== "" && !rel.startsWith("..") && !isAbsolute(rel);
|
|
4876
|
+
}
|
|
4870
4877
|
function findProfile(name, toolId) {
|
|
4871
4878
|
const matches = profileMatches(name, toolId);
|
|
4872
4879
|
return matches.length === 1 ? matches[0] : undefined;
|
|
@@ -4934,7 +4941,7 @@ function removeProfile(name, opts = {}) {
|
|
|
4934
4941
|
let purged = false;
|
|
4935
4942
|
let purgeNote;
|
|
4936
4943
|
if (options.purge) {
|
|
4937
|
-
const managed = profile.dir
|
|
4944
|
+
const managed = isManagedProfileDir(profile.dir);
|
|
4938
4945
|
const isDefault = profile.dir === getTool(profile.tool).defaultDir;
|
|
4939
4946
|
if (managed && !isDefault && existsSync6(profile.dir)) {
|
|
4940
4947
|
rmSync(profile.dir, { recursive: true, force: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/lib/profiles.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,OAAO,EAAoC,MAAM,aAAa,CAAC;AAS7E,4DAA4D;AAC5D,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK5C;AAED,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE,CAIvD;
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/lib/profiles.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,OAAO,EAAoC,MAAM,aAAa,CAAC;AAS7E,4DAA4D;AAC5D,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK5C;AAED,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE,CAIvD;AAWD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAG9E;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAajE;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAgCpD;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,aAAa,GAAG,OAAY,GACjC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAoC3D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAyBxF;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAsBxE;AAED,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAiBpE;AAED,qDAAqD;AACrD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAiB9F;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAKlE"}
|
package/dist/mcp.js
CHANGED
|
@@ -16666,7 +16666,7 @@ class AccountsError extends Error {
|
|
|
16666
16666
|
// src/storage.ts
|
|
16667
16667
|
import { homedir } from "node:os";
|
|
16668
16668
|
import { join } from "node:path";
|
|
16669
|
-
import { existsSync as existsSync2, mkdirSync as mkdirSync2, readFileSync, writeFileSync } from "node:fs";
|
|
16669
|
+
import { chmodSync, existsSync as existsSync2, mkdirSync as mkdirSync2, readFileSync, writeFileSync } from "node:fs";
|
|
16670
16670
|
|
|
16671
16671
|
// src/lib/safe-path.ts
|
|
16672
16672
|
import { existsSync, lstatSync, mkdirSync, realpathSync } from "node:fs";
|
|
@@ -16794,8 +16794,11 @@ function saveStore(store) {
|
|
|
16794
16794
|
const path = storePath();
|
|
16795
16795
|
assertSafeWritePath(path, { mustStayUnder: accountsHome() });
|
|
16796
16796
|
mkdirSync2(join(path, ".."), { recursive: true });
|
|
16797
|
+
if (existsSync2(path))
|
|
16798
|
+
chmodSync(path, 384);
|
|
16797
16799
|
writeFileSync(path, JSON.stringify(store, null, 2) + `
|
|
16798
16800
|
`, { mode: 384 });
|
|
16801
|
+
chmodSync(path, 384);
|
|
16799
16802
|
}
|
|
16800
16803
|
|
|
16801
16804
|
// src/lib/tools.ts
|
package/dist/storage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,KAAK,EAAiD,MAAM,YAAY,CAAC;AAGvF,eAAO,MAAM,oBAAoB;;;;;;;;CAQvB,CAAC;AAEX,eAAO,MAAM,6BAA6B;;;;;;;;CAQhC,CAAC;AAEX,eAAO,MAAM,gBAAgB,+BAA4B,CAAC;AAC1D,eAAO,MAAM,cAAc,aAAc,CAAC;AAE1C,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEhE,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,MAAM,EAAE;QACN,UAAU,EAAE,OAAO,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,kBAAkB,EAAE,OAAO,CAAC;KAC7B,CAAC;IACF,GAAG,EAAE,OAAO,oBAAoB,CAAC;IACjC,WAAW,EAAE,OAAO,6BAA6B,CAAC;IAClD,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC;CACd;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAUD,4EAA4E;AAC5E,wBAAgB,YAAY,IAAI,MAAM,CAIrC;AAED,sEAAsE;AACtE,wBAAgB,SAAS,IAAI,MAAM,CAIlC;AAED,0EAA0E;AAC1E,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAID,wBAAgB,SAAS,IAAI,KAAK,CA+BjC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
package/dist/storage.js
CHANGED
|
@@ -19,7 +19,7 @@ var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
|
19
19
|
import { homedir } from "node:os";
|
|
20
20
|
import { hostname } from "node:os";
|
|
21
21
|
import { join } from "node:path";
|
|
22
|
-
import { existsSync as existsSync2, mkdirSync as mkdirSync2, readFileSync, writeFileSync } from "node:fs";
|
|
22
|
+
import { chmodSync, existsSync as existsSync2, mkdirSync as mkdirSync2, readFileSync, writeFileSync } from "node:fs";
|
|
23
23
|
|
|
24
24
|
// node_modules/zod/v3/external.js
|
|
25
25
|
var exports_external = {};
|
|
@@ -4175,8 +4175,11 @@ function saveStore(store) {
|
|
|
4175
4175
|
const path = storePath();
|
|
4176
4176
|
assertSafeWritePath(path, { mustStayUnder: accountsHome() });
|
|
4177
4177
|
mkdirSync2(join(path, ".."), { recursive: true });
|
|
4178
|
+
if (existsSync2(path))
|
|
4179
|
+
chmodSync(path, 384);
|
|
4178
4180
|
writeFileSync(path, JSON.stringify(store, null, 2) + `
|
|
4179
4181
|
`, { mode: 384 });
|
|
4182
|
+
chmodSync(path, 384);
|
|
4180
4183
|
}
|
|
4181
4184
|
function firstEnv(env, primary, fallback) {
|
|
4182
4185
|
return env[primary] || env[fallback] || undefined;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hasna/accounts",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.19",
|
|
4
4
|
"description": "Manage and switch between multiple Claude Code (and other AI coding tool) profiles/accounts locally — isolated config dirs, per-account email, one-command switching.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|