clishop 0.1.1 → 0.2.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/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  **CLISHOP** is a command-line shopping tool. Users search, browse, and buy products from multiple stores — all from the terminal. A single checkout covers items across stores.
4
4
 
5
- - **Package**: `clishop`
5
+ - **Package**: `@clishop/cli`
6
6
  - **Binary**: `clishop`
7
7
  - **Runtime**: Node.js ≥ 18
8
8
  - **Backend**: `https://clishop-backend.vercel.app/api`
@@ -12,7 +12,7 @@
12
12
  ## Install
13
13
 
14
14
  ```bash
15
- npm install -g clishop
15
+ npm install -g @clishop/cli
16
16
  ```
17
17
 
18
18
  Or from source:
package/dist/index.js CHANGED
@@ -10,7 +10,7 @@ import ora from "ora";
10
10
  import inquirer from "inquirer";
11
11
 
12
12
  // src/auth.ts
13
- import Conf2 from "conf";
13
+ import keytar from "keytar";
14
14
  import axios from "axios";
15
15
 
16
16
  // src/config.ts
@@ -97,32 +97,27 @@ function listAgents() {
97
97
  }
98
98
 
99
99
  // src/auth.ts
100
- var SERVICE_NAME = "clishop-auth";
100
+ var SERVICE_NAME = "clishop";
101
101
  var ACCOUNT_TOKEN = "auth-token";
102
102
  var ACCOUNT_REFRESH = "refresh-token";
103
103
  var ACCOUNT_USER = "user-info";
104
- var authStore = new Conf2({
105
- projectName: SERVICE_NAME,
106
- encryptionKey: "clishop-local-encryption-key"
107
- // Basic obfuscation
108
- });
109
104
  async function storeToken(token) {
110
- authStore.set(ACCOUNT_TOKEN, token);
105
+ await keytar.setPassword(SERVICE_NAME, ACCOUNT_TOKEN, token);
111
106
  }
112
107
  async function storeRefreshToken(token) {
113
- authStore.set(ACCOUNT_REFRESH, token);
108
+ await keytar.setPassword(SERVICE_NAME, ACCOUNT_REFRESH, token);
114
109
  }
115
110
  async function storeUserInfo(user) {
116
- authStore.set(ACCOUNT_USER, JSON.stringify(user));
111
+ await keytar.setPassword(SERVICE_NAME, ACCOUNT_USER, JSON.stringify(user));
117
112
  }
118
113
  async function getToken() {
119
- return authStore.get(ACCOUNT_TOKEN) || null;
114
+ return keytar.getPassword(SERVICE_NAME, ACCOUNT_TOKEN);
120
115
  }
121
116
  async function getRefreshToken() {
122
- return authStore.get(ACCOUNT_REFRESH) || null;
117
+ return keytar.getPassword(SERVICE_NAME, ACCOUNT_REFRESH);
123
118
  }
124
119
  async function getUserInfo() {
125
- const raw = authStore.get(ACCOUNT_USER);
120
+ const raw = await keytar.getPassword(SERVICE_NAME, ACCOUNT_USER);
126
121
  if (!raw) return null;
127
122
  try {
128
123
  return JSON.parse(raw);
@@ -131,9 +126,9 @@ async function getUserInfo() {
131
126
  }
132
127
  }
133
128
  async function clearAuth() {
134
- authStore.delete(ACCOUNT_TOKEN);
135
- authStore.delete(ACCOUNT_REFRESH);
136
- authStore.delete(ACCOUNT_USER);
129
+ await keytar.deletePassword(SERVICE_NAME, ACCOUNT_TOKEN);
130
+ await keytar.deletePassword(SERVICE_NAME, ACCOUNT_REFRESH);
131
+ await keytar.deletePassword(SERVICE_NAME, ACCOUNT_USER);
137
132
  }
138
133
  async function isLoggedIn() {
139
134
  const token = await getToken();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clishop",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "CLISHOP — Order anything from your terminal",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -37,10 +37,12 @@
37
37
  "commander": "^14.0.3",
38
38
  "conf": "^15.1.0",
39
39
  "inquirer": "^13.2.4",
40
+ "keytar": "^7.9.0",
40
41
  "ora": "^9.3.0"
41
42
  },
42
43
  "devDependencies": {
43
44
  "@types/inquirer": "^9.0.9",
45
+ "@types/keytar": "^4.4.0",
44
46
  "@types/node": "^25.2.3",
45
47
  "ts-node": "^10.9.2",
46
48
  "tsup": "^8.5.1",
package/src/auth.ts CHANGED
@@ -1,17 +1,12 @@
1
- import Conf from "conf";
1
+ import keytar from "keytar";
2
2
  import axios from "axios";
3
3
  import { getConfig } from "./config.js";
4
4
 
5
- const SERVICE_NAME = "clishop-auth";
5
+ const SERVICE_NAME = "clishop";
6
6
  const ACCOUNT_TOKEN = "auth-token";
7
7
  const ACCOUNT_REFRESH = "refresh-token";
8
8
  const ACCOUNT_USER = "user-info";
9
9
 
10
- const authStore = new Conf({
11
- projectName: SERVICE_NAME,
12
- encryptionKey: "clishop-local-encryption-key", // Basic obfuscation
13
- });
14
-
15
10
  export interface UserInfo {
16
11
  id: string;
17
12
  email: string;
@@ -19,30 +14,30 @@ export interface UserInfo {
19
14
  }
20
15
 
21
16
  /**
22
- * Store auth token securely.
17
+ * Store auth token securely in the OS keychain.
23
18
  */
24
19
  export async function storeToken(token: string): Promise<void> {
25
- authStore.set(ACCOUNT_TOKEN, token);
20
+ await keytar.setPassword(SERVICE_NAME, ACCOUNT_TOKEN, token);
26
21
  }
27
22
 
28
23
  export async function storeRefreshToken(token: string): Promise<void> {
29
- authStore.set(ACCOUNT_REFRESH, token);
24
+ await keytar.setPassword(SERVICE_NAME, ACCOUNT_REFRESH, token);
30
25
  }
31
26
 
32
27
  export async function storeUserInfo(user: UserInfo): Promise<void> {
33
- authStore.set(ACCOUNT_USER, JSON.stringify(user));
28
+ await keytar.setPassword(SERVICE_NAME, ACCOUNT_USER, JSON.stringify(user));
34
29
  }
35
30
 
36
31
  export async function getToken(): Promise<string | null> {
37
- return (authStore.get(ACCOUNT_TOKEN) as string) || null;
32
+ return keytar.getPassword(SERVICE_NAME, ACCOUNT_TOKEN);
38
33
  }
39
34
 
40
35
  export async function getRefreshToken(): Promise<string | null> {
41
- return (authStore.get(ACCOUNT_REFRESH) as string) || null;
36
+ return keytar.getPassword(SERVICE_NAME, ACCOUNT_REFRESH);
42
37
  }
43
38
 
44
39
  export async function getUserInfo(): Promise<UserInfo | null> {
45
- const raw = authStore.get(ACCOUNT_USER) as string;
40
+ const raw = await keytar.getPassword(SERVICE_NAME, ACCOUNT_USER);
46
41
  if (!raw) return null;
47
42
  try {
48
43
  return JSON.parse(raw) as UserInfo;
@@ -52,9 +47,9 @@ export async function getUserInfo(): Promise<UserInfo | null> {
52
47
  }
53
48
 
54
49
  export async function clearAuth(): Promise<void> {
55
- authStore.delete(ACCOUNT_TOKEN);
56
- authStore.delete(ACCOUNT_REFRESH);
57
- authStore.delete(ACCOUNT_USER);
50
+ await keytar.deletePassword(SERVICE_NAME, ACCOUNT_TOKEN);
51
+ await keytar.deletePassword(SERVICE_NAME, ACCOUNT_REFRESH);
52
+ await keytar.deletePassword(SERVICE_NAME, ACCOUNT_USER);
58
53
  }
59
54
 
60
55
  export async function isLoggedIn(): Promise<boolean> {