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 +2 -2
- package/dist/index.js +11 -16
- package/package.json +3 -1
- package/src/auth.ts +12 -17
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**:
|
|
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
|
|
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
|
|
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
|
-
|
|
105
|
+
await keytar.setPassword(SERVICE_NAME, ACCOUNT_TOKEN, token);
|
|
111
106
|
}
|
|
112
107
|
async function storeRefreshToken(token) {
|
|
113
|
-
|
|
108
|
+
await keytar.setPassword(SERVICE_NAME, ACCOUNT_REFRESH, token);
|
|
114
109
|
}
|
|
115
110
|
async function storeUserInfo(user) {
|
|
116
|
-
|
|
111
|
+
await keytar.setPassword(SERVICE_NAME, ACCOUNT_USER, JSON.stringify(user));
|
|
117
112
|
}
|
|
118
113
|
async function getToken() {
|
|
119
|
-
return
|
|
114
|
+
return keytar.getPassword(SERVICE_NAME, ACCOUNT_TOKEN);
|
|
120
115
|
}
|
|
121
116
|
async function getRefreshToken() {
|
|
122
|
-
return
|
|
117
|
+
return keytar.getPassword(SERVICE_NAME, ACCOUNT_REFRESH);
|
|
123
118
|
}
|
|
124
119
|
async function getUserInfo() {
|
|
125
|
-
const raw =
|
|
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
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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.
|
|
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
|
|
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
|
|
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
|
-
|
|
20
|
+
await keytar.setPassword(SERVICE_NAME, ACCOUNT_TOKEN, token);
|
|
26
21
|
}
|
|
27
22
|
|
|
28
23
|
export async function storeRefreshToken(token: string): Promise<void> {
|
|
29
|
-
|
|
24
|
+
await keytar.setPassword(SERVICE_NAME, ACCOUNT_REFRESH, token);
|
|
30
25
|
}
|
|
31
26
|
|
|
32
27
|
export async function storeUserInfo(user: UserInfo): Promise<void> {
|
|
33
|
-
|
|
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
|
|
32
|
+
return keytar.getPassword(SERVICE_NAME, ACCOUNT_TOKEN);
|
|
38
33
|
}
|
|
39
34
|
|
|
40
35
|
export async function getRefreshToken(): Promise<string | null> {
|
|
41
|
-
return
|
|
36
|
+
return keytar.getPassword(SERVICE_NAME, ACCOUNT_REFRESH);
|
|
42
37
|
}
|
|
43
38
|
|
|
44
39
|
export async function getUserInfo(): Promise<UserInfo | null> {
|
|
45
|
-
const raw =
|
|
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
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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> {
|