auth-mn 1.1.0 → 1.3.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 +240 -236
- package/dist/index.d.ts +22 -4
- package/dist/index.js +7 -3
- package/dist/types.d.ts +53 -0
- package/dist/user.d.ts +24 -3
- package/dist/user.js +22 -4
- package/dist/wallet.d.ts +47 -0
- package/dist/wallet.js +42 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,236 +1,240 @@
|
|
|
1
|
-
# auth-mn
|
|
2
|
-
|
|
3
|
-
**Auth.mn** — таны апп-уудын нэгдсэн хэрэглэгчийн систем. Хэрэглэгч бүртгүүлэх, нэвтрэх
|
|
4
|
-
(утас / имэйл OTP, Google, Facebook, Steam, QR), профайл, төхөөрөмж, мэдэгдлийг Auth.mn
|
|
5
|
-
хариуцна; таны апп зөвхөн **хэрэглэгчийн token**-ийг хүлээж аваад Auth.mn-ээс мэдээллийг нь
|
|
6
|
-
асууна.
|
|
7
|
-
|
|
8
|
-
Энэ сан нь таны **backend (Node.js)** дээр ажиллана:
|
|
9
|
-
|
|
10
|
-
| Та юу хийх вэ | Сангийн функц | Шаардлагатай эрх |
|
|
11
|
-
|---|---|---|
|
|
12
|
-
| Frontend-ээс ирсэн хэрэглэгчийн token шалгаж мэдээллийг авах | `user.verify(token)` / `user.middleware()` | `user.verify` |
|
|
13
|
-
| user_id / утас / имэйлээр нэг хэрэглэгч авах | `user.find({...})` | `user.read` |
|
|
14
|
-
| Олон хэрэглэгч (өөрийн апп-ийн хэрэглэгчид, ID жагсаалт, хайлт) | `user.list({...})` / `user.listAll({...})` | `user.read` |
|
|
15
|
-
| Push мэдэгдэл, SMS, имэйл илгээх | `notification.push / sms / mail` | `notification.*` |
|
|
16
|
-
| Хэрэглэгчийн нээлттэй апп дээр realtime toast / төлөв харуулах | `socket.toast / status / orderStatus / emit` | `socket.*` |
|
|
17
|
-
|
|
18
|
-
Frontend дээр нэвтрэх товч, QR нэвтрэлт хэрэгтэй бол **[auth-mn-react](https://www.npmjs.com/package/auth-mn-react)** санг хэрэглэнэ.
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
npm i auth-mn
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## 1. Client бүртгүүлэх
|
|
27
|
-
|
|
28
|
-
Auth.mn **admin panel → Апп-ууд (Client)** дээр апп-аа бүртгэхэд `client_id` (`cl_…`) болон
|
|
29
|
-
`client_secret` (`sk_…`) олгоно. Secret **нэг л удаа** харагдана — `.env`-дээ хадгална.
|
|
30
|
-
Тухайн апп ямар API дуудаж болохыг (эрхүүдийг) admin тэндээ сонгоно; эрхгүй API дуудвал
|
|
31
|
-
`403` + ямар эрх дутууг хэлсэн message ирнэ.
|
|
32
|
-
|
|
33
|
-
```env
|
|
34
|
-
AUTH_MN_CLIENT_ID=cl_xxxxxxxxxxxxxxxx
|
|
35
|
-
AUTH_MN_CLIENT_SECRET=sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
## 2. Тохиргоо
|
|
39
|
-
|
|
40
|
-
```ts
|
|
41
|
-
import authMn, { setAuth, setHost } from "auth-mn";
|
|
42
|
-
|
|
43
|
-
setHost("prod"); // "staging" эсвэл setHost({ MAIN: "https://api.auth.mn" })
|
|
44
|
-
setAuth({
|
|
45
|
-
client_id: process.env.AUTH_MN_CLIENT_ID!,
|
|
46
|
-
client_secret: process.env.AUTH_MN_CLIENT_SECRET!
|
|
47
|
-
});
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Үүний дараа юу ч хийх шаардлагагүй: сан `client_id + secret`-ээр access token (1 цаг) болон
|
|
51
|
-
refresh token (30 хоног) авч, хугацаа дуусахаас өмнө өөрөө сунгана. 401 ирвэл token-оо
|
|
52
|
-
сэргээж нэг удаа дахин оролдоно. **Бүх функц `{ success, message, data, status }` буцна, throw хийхгүй.**
|
|
53
|
-
|
|
54
|
-
## 3. Хэрэглэгч нэвтрүүлэх (гол урсгал)
|
|
55
|
-
|
|
56
|
-
```
|
|
57
|
-
[Frontend] auth-mn-react → Auth.mn дээр нэвтэрнэ → таны сайт руу ?authToken=... буцна
|
|
58
|
-
(эсвэл QR / OTP-оор token авна)
|
|
59
|
-
│ Authorization: Bearer <authToken>
|
|
60
|
-
▼
|
|
61
|
-
[Таны backend] authMn.user.verify(authToken) ──► Auth.mn (client token + user.verify эрх)
|
|
62
|
-
│ token-ийг задалж, хэрэглэгчийн
|
|
63
|
-
▼ мэдээллийг буцаана
|
|
64
|
-
өөрийн session / JWT үүсгэнэ, хэрэглэгчийг DB-дээ user_id-аар холбоно
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
### 3.1 Нэвтрэх endpoint
|
|
68
|
-
|
|
69
|
-
```ts
|
|
70
|
-
app.post("/api/auth/callback", async (req, res) => {
|
|
71
|
-
const v = await authMn.user.verify(req.body.authToken);
|
|
72
|
-
if (!v.success) return res.status(401).json({ message: v.message });
|
|
73
|
-
|
|
74
|
-
const u = v.data.user; // user_id, user_name, primary_phone, primary_email, profile_image_url, ...
|
|
75
|
-
// 1) өөрийн DB-д user_id-аар хайж байхгүй бол үүсгэнэ
|
|
76
|
-
// 2) өөрийн session / JWT үүсгэж cookie-д хадгална
|
|
77
|
-
res.json({ success: true, user: u });
|
|
78
|
-
});
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
`v.data`:
|
|
82
|
-
|
|
83
|
-
```ts
|
|
84
|
-
{
|
|
85
|
-
user: UserT; // доорх бүтэц
|
|
86
|
-
exp: number | null; // хэрэглэгчийн token дуусах хугацаа (unix sec)
|
|
87
|
-
client: { client_id, name } // ямар client-ээр шалгасан
|
|
88
|
-
}
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
Шалгалт бүр хэрэглэгчийн **нэвтрэлтийн түүхэнд** "`<таны домэйн>`-д дамжуулсан" гэж бүртгэгдэнэ —
|
|
92
|
-
хэрэглэгч Auth.mn дээрээ аль апп-д хэзээ нэвтэрснээ харна.
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
app.get("/api/
|
|
105
|
-
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
await authMn.user.list({
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
await authMn.socket.
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
//
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
authMn.auth.
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
- `
|
|
1
|
+
# auth-mn
|
|
2
|
+
|
|
3
|
+
**Auth.mn** — таны апп-уудын нэгдсэн хэрэглэгчийн систем. Хэрэглэгч бүртгүүлэх, нэвтрэх
|
|
4
|
+
(утас / имэйл OTP, Google, Facebook, Steam, QR), профайл, төхөөрөмж, мэдэгдлийг Auth.mn
|
|
5
|
+
хариуцна; таны апп зөвхөн **хэрэглэгчийн token**-ийг хүлээж аваад Auth.mn-ээс мэдээллийг нь
|
|
6
|
+
асууна.
|
|
7
|
+
|
|
8
|
+
Энэ сан нь таны **backend (Node.js)** дээр ажиллана:
|
|
9
|
+
|
|
10
|
+
| Та юу хийх вэ | Сангийн функц | Шаардлагатай эрх |
|
|
11
|
+
|---|---|---|
|
|
12
|
+
| Frontend-ээс ирсэн хэрэглэгчийн token шалгаж мэдээллийг авах | `user.verify(token)` / `user.middleware()` | `user.verify` |
|
|
13
|
+
| user_id / утас / имэйлээр нэг хэрэглэгч авах | `user.find({...})` | `user.read` |
|
|
14
|
+
| Олон хэрэглэгч (өөрийн апп-ийн хэрэглэгчид, ID жагсаалт, хайлт) | `user.list({...})` / `user.listAll({...})` | `user.read` |
|
|
15
|
+
| Push мэдэгдэл, SMS, имэйл илгээх | `notification.push / sms / mail` | `notification.*` |
|
|
16
|
+
| Хэрэглэгчийн нээлттэй апп дээр realtime toast / төлөв харуулах | `socket.toast / status / orderStatus / emit` | `socket.*` |
|
|
17
|
+
|
|
18
|
+
Frontend дээр нэвтрэх товч, QR нэвтрэлт хэрэгтэй бол **[auth-mn-react](https://www.npmjs.com/package/auth-mn-react)** санг хэрэглэнэ.
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm i auth-mn
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 1. Client бүртгүүлэх
|
|
27
|
+
|
|
28
|
+
Auth.mn **admin panel → Апп-ууд (Client)** дээр апп-аа бүртгэхэд `client_id` (`cl_…`) болон
|
|
29
|
+
`client_secret` (`sk_…`) олгоно. Secret **нэг л удаа** харагдана — `.env`-дээ хадгална.
|
|
30
|
+
Тухайн апп ямар API дуудаж болохыг (эрхүүдийг) admin тэндээ сонгоно; эрхгүй API дуудвал
|
|
31
|
+
`403` + ямар эрх дутууг хэлсэн message ирнэ.
|
|
32
|
+
|
|
33
|
+
```env
|
|
34
|
+
AUTH_MN_CLIENT_ID=cl_xxxxxxxxxxxxxxxx
|
|
35
|
+
AUTH_MN_CLIENT_SECRET=sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## 2. Тохиргоо
|
|
39
|
+
|
|
40
|
+
```ts
|
|
41
|
+
import authMn, { setAuth, setHost } from "auth-mn";
|
|
42
|
+
|
|
43
|
+
setHost("prod"); // "staging" эсвэл setHost({ MAIN: "https://api.auth.mn" })
|
|
44
|
+
setAuth({
|
|
45
|
+
client_id: process.env.AUTH_MN_CLIENT_ID!,
|
|
46
|
+
client_secret: process.env.AUTH_MN_CLIENT_SECRET!
|
|
47
|
+
});
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Үүний дараа юу ч хийх шаардлагагүй: сан `client_id + secret`-ээр access token (1 цаг) болон
|
|
51
|
+
refresh token (30 хоног) авч, хугацаа дуусахаас өмнө өөрөө сунгана. 401 ирвэл token-оо
|
|
52
|
+
сэргээж нэг удаа дахин оролдоно. **Бүх функц `{ success, message, data, status }` буцна, throw хийхгүй.**
|
|
53
|
+
|
|
54
|
+
## 3. Хэрэглэгч нэвтрүүлэх (гол урсгал)
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
[Frontend] auth-mn-react → Auth.mn дээр нэвтэрнэ → таны сайт руу ?authToken=... буцна
|
|
58
|
+
(эсвэл QR / OTP-оор token авна)
|
|
59
|
+
│ Authorization: Bearer <authToken>
|
|
60
|
+
▼
|
|
61
|
+
[Таны backend] authMn.user.verify(authToken) ──► Auth.mn (client token + user.verify эрх)
|
|
62
|
+
│ token-ийг задалж, хэрэглэгчийн
|
|
63
|
+
▼ мэдээллийг буцаана
|
|
64
|
+
өөрийн session / JWT үүсгэнэ, хэрэглэгчийг DB-дээ user_id-аар холбоно
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 3.1 Нэвтрэх endpoint
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
app.post("/api/auth/callback", async (req, res) => {
|
|
71
|
+
const v = await authMn.user.verify(req.body.authToken);
|
|
72
|
+
if (!v.success) return res.status(401).json({ message: v.message });
|
|
73
|
+
|
|
74
|
+
const u = v.data.user; // user_id, user_name, primary_phone, primary_email, profile_image_url, ...
|
|
75
|
+
// 1) өөрийн DB-д user_id-аар хайж байхгүй бол үүсгэнэ
|
|
76
|
+
// 2) өөрийн session / JWT үүсгэж cookie-д хадгална
|
|
77
|
+
res.json({ success: true, user: u });
|
|
78
|
+
});
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
`v.data`:
|
|
82
|
+
|
|
83
|
+
```ts
|
|
84
|
+
{
|
|
85
|
+
user: UserT; // доорх бүтэц
|
|
86
|
+
exp: number | null; // хэрэглэгчийн token дуусах хугацаа (unix sec)
|
|
87
|
+
client: { client_id, name } // ямар client-ээр шалгасан
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Шалгалт бүр хэрэглэгчийн **нэвтрэлтийн түүхэнд** "`<таны домэйн>`-д дамжуулсан" гэж бүртгэгдэнэ —
|
|
92
|
+
хэрэглэгч Auth.mn дээрээ аль апп-д хэзээ нэвтэрснээ харна.
|
|
93
|
+
|
|
94
|
+
`user.verify` default-оор token-ийн payload-аас шууд буцаадаг (Auth.mn DB руу хандахгүй, хурдан;
|
|
95
|
+
мэдээлэл token-ийн хугацаа дуустал хуучирч болно). Төлбөр, данс зэрэг чухал үйлдэлд
|
|
96
|
+
`authMn.user.verify(token, { fresh: true })` — DB-ээс хамгийн сүүлийн мэдээлэл.
|
|
97
|
+
|
|
98
|
+
### 3.2 Route хамгаалах middleware
|
|
99
|
+
|
|
100
|
+
Хэрэглэгчийн token-ийг хүсэлт бүрт шалгах бол:
|
|
101
|
+
|
|
102
|
+
```ts
|
|
103
|
+
// Authorization: Bearer <token> (эсвэл ?authToken= / body.authToken)
|
|
104
|
+
app.get("/api/me", authMn.user.middleware(), (req, res) => {
|
|
105
|
+
res.json(req.authMnUser); // UserT
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
app.get("/api/feed", authMn.user.middleware({ required: false }), (req, res) => {
|
|
109
|
+
// нэвтрээгүй бол req.authMnUser === null, алдаа өгөхгүй
|
|
110
|
+
});
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
> Хүсэлт бүрт Auth.mn руу нэг дуудлага хийдэг тул ачаалал ихтэй бол 3.1-ийн адил нэвтрэх үед нэг удаа
|
|
114
|
+
> шалгаад өөрийн session/JWT ашиглахыг зөвлөнө.
|
|
115
|
+
|
|
116
|
+
### 3.3 Хэрэглэгч хайх
|
|
117
|
+
|
|
118
|
+
```ts
|
|
119
|
+
const r = await authMn.user.find({ user_id: 5742248 }); // эсвэл { phone_number: "99112233" } / { email }
|
|
120
|
+
if (r.success) console.log(r.data.user_name);
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### 3.4 Олон хэрэглэгч (жагсаалт)
|
|
124
|
+
|
|
125
|
+
```ts
|
|
126
|
+
// Таны апп-д бүртгүүлсэн бүх хэрэглэгч — campaign, push илгээхэд
|
|
127
|
+
const r = await authMn.user.list({ app_name: "CHARGEX", fields: "lite", page: 1, limit: 500 });
|
|
128
|
+
// r.data = { list: UserLite[], total, page, limit }
|
|
129
|
+
|
|
130
|
+
const all = await authMn.user.listAll({ app_name: "CHARGEX", fields: "lite" }); // бүх хуудсыг нэгтгэнэ
|
|
131
|
+
await authMn.user.list({ user_ids: [5742248, 5742249] });
|
|
132
|
+
await authMn.user.list({ q: "9911", last_login_after: "2026-01-01" });
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Шүүлтүүр: `user_ids | app_name | phone_number | email | name | q | gender | last_login_after | page | limit (≤500) | fields ("full" | "lite")`.
|
|
136
|
+
|
|
137
|
+
### UserT
|
|
138
|
+
|
|
139
|
+
```ts
|
|
140
|
+
{
|
|
141
|
+
user_id: number; // Auth.mn-ийн тогтмол ID — өөрийн DB-д үүгээр холбоно
|
|
142
|
+
user_name: string;
|
|
143
|
+
nick_name: string;
|
|
144
|
+
primary_phone: string | null;
|
|
145
|
+
primary_email: string | null;
|
|
146
|
+
emails: { email, verified, primary }[];
|
|
147
|
+
phone_numbers: { number, verified, primary }[];
|
|
148
|
+
profile_image_url: string;
|
|
149
|
+
gender?: "MEN" | "WOMEN";
|
|
150
|
+
date_of_birth: Date | null;
|
|
151
|
+
auth_profiles: { google_id, facebook_id, steam_id, ... };
|
|
152
|
+
sign_up_date, last_login, ...
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## 4. Мэдэгдэл
|
|
157
|
+
|
|
158
|
+
```ts
|
|
159
|
+
await authMn.notification.push({
|
|
160
|
+
user_id: 5742248,
|
|
161
|
+
target_app: "MY-APP",
|
|
162
|
+
body: { title: "Захиалга", body: "Захиалга #123 батлагдлаа", button: { title: "Харах", url: "https://..." } }
|
|
163
|
+
}); // notification.push
|
|
164
|
+
await authMn.notification.sms({ to: "99112233", from: "MYAPP", text: "Код: 1234" }); // notification.sms
|
|
165
|
+
await authMn.notification.mail({
|
|
166
|
+
type: "notification", to: ["a@b.mn"], subject: "Сайн уу",
|
|
167
|
+
body: { name: "Бат", title: "Тавтай морил", desc: "..." }
|
|
168
|
+
}); // notification.mail
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## 5. Socket (realtime)
|
|
172
|
+
|
|
173
|
+
Хэрэглэгч Auth.mn-тэй холбогдсон аль нэг апп-аа нээлттэй байхад:
|
|
174
|
+
|
|
175
|
+
```ts
|
|
176
|
+
await authMn.socket.toast({ user_id, type: "info", text: "Төлбөр амжилттай" }); // socket.toast
|
|
177
|
+
await authMn.socket.status({ user_id, id: "order-123", type: "Loading", title: "Боловсруулж байна" }); // socket.status
|
|
178
|
+
await authMn.socket.status({ user_id, id: "order-123", type: "Success", title: "Амжилттай", amount: 15000 });
|
|
179
|
+
await authMn.socket.orderStatus({ user_id, order_id: "order-123" }); // socket.status
|
|
180
|
+
await authMn.socket.emit([{ user_id, emit_name: "my-event", data: { any: 1 } }]); // socket.emit
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## 6. EXP нэмэх (Seller Panda г.м.)
|
|
184
|
+
|
|
185
|
+
Хэрэглэгчид exp олгох. client_id/secret-ээс **тусдаа EXP түлхүүр** хэрэгтэй — Admin panel →
|
|
186
|
+
**EXP түлхүүр** дээр нэр (ж: `Seller Panda`) + нэг дуудлагад олгох exp-ийг admin тохируулж
|
|
187
|
+
үүсгэнэ (`exp_…`, нэг удаа харагдана). Хэдэн exp нэмэгдэх нь түлхүүр дээр тогтсон — дуудагч
|
|
188
|
+
тал өөрчилж чадахгүй.
|
|
189
|
+
|
|
190
|
+
```ts
|
|
191
|
+
import authMn, { setExpKey } from "auth-mn";
|
|
192
|
+
|
|
193
|
+
setExpKey(process.env.AUTH_MN_EXP_KEY); // exp_…
|
|
194
|
+
|
|
195
|
+
// user_id-ээр
|
|
196
|
+
const r = await authMn.exp.add({
|
|
197
|
+
user_id: 8636569,
|
|
198
|
+
desc: "Худалдан авалт #1234",
|
|
199
|
+
ref: "order-1234" // optional — ижил ref-ээр дахин дуудахад давхар нэмэхгүй
|
|
200
|
+
});
|
|
201
|
+
// r.data → { user_id, exp: 10, exp_total: 1250, desc, ref, duplicate: false, ... }
|
|
202
|
+
|
|
203
|
+
// эсвэл frontend-ээс ирсэн хэрэглэгчийн token-оор
|
|
204
|
+
await authMn.exp.add({ token: userToken, desc: "Өдөр тутмын нэвтрэлт" });
|
|
205
|
+
|
|
206
|
+
// тухайн түлхүүрээр нэмсэн лог
|
|
207
|
+
const logs = await authMn.exp.logs({ user_id: 8636569, page: 1, limit: 20 });
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Шууд HTTP: `POST https://api.auth.mn/main/v1/auth/exp/add` — `Authorization: Bearer exp_…`
|
|
211
|
+
(эсвэл `x-exp-key: exp_…`), body `{ user_id | token, desc, ref? }`.
|
|
212
|
+
|
|
213
|
+
## 7. Client өөрийн мэдээлэл
|
|
214
|
+
|
|
215
|
+
```ts
|
|
216
|
+
import { config } from "auth-mn";
|
|
217
|
+
await authMn.auth.getToken(); // хүчинтэй access token (шаардлагатай бол refresh / login хийгээд)
|
|
218
|
+
config.token; // одоогийн access token — гараар Authorization: Bearer үүсгэхэд
|
|
219
|
+
|
|
220
|
+
await authMn.auth.me(); // { client_id, name, permissions, ... }
|
|
221
|
+
authMn.auth.hasPermission("notification.sms"); // сүүлийн token-оос
|
|
222
|
+
await authMn.auth.permissions(); // Auth.mn-ийн бүх боломжит эрх
|
|
223
|
+
await authMn.auth.revoke(); // refresh token-оо хүчингүй болгоод cache цэвэрлэнэ
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## Алдаа
|
|
227
|
+
|
|
228
|
+
| status | Шалтгаан |
|
|
229
|
+
|---|---|
|
|
230
|
+
| 401 | client_id/secret буруу, client идэвхгүй, эсвэл хэрэглэгчийн token хүчингүй |
|
|
231
|
+
| 403 | Энэ API-д шаардлагатай эрх client-д олгогдоогүй — admin panel дээр нэмнэ |
|
|
232
|
+
| 0 | Сүлжээний алдаа (`message`-д шалтгаан) |
|
|
233
|
+
|
|
234
|
+
## 0.x → 1.0 шилжилт
|
|
235
|
+
|
|
236
|
+
- `config.auth.username / password`, `auth.TOKEN({username,password})` → `setAuth({ client_id, client_secret })`.
|
|
237
|
+
Хуучин client бүртгэлүүд admin panel дээр **Secret шинэчлэх** дарж secret авна.
|
|
238
|
+
- `find.USER / MERCHANT / ADMIN / CLIENT / CRM` **хасагдсан** — хэрэглэгчийн мэдээлэл `user.verify` / `user.find`-ээр.
|
|
239
|
+
- `notification.SinglePushNoti / SMS / MAIL`, `socket.ShowToast / ShowStatus / ShowOrderStatus / EMIT` хэвээр ажиллана (alias).
|
|
240
|
+
- `notification._3RD.*` хасагдсан.
|
package/dist/index.d.ts
CHANGED
|
@@ -9,15 +9,17 @@
|
|
|
9
9
|
* Token-ийг lib өөрөө авч, хугацаа дуусахаас өмнө refresh хийнэ.
|
|
10
10
|
* Client-д олгосон permission-ээс гадуур API дуудвал 403 + message буцна.
|
|
11
11
|
*
|
|
12
|
-
* Хамрах хүрээ: хэрэглэгч (verify / find), мэдэгдэл (push / sms / mail),
|
|
12
|
+
* Хамрах хүрээ: хэрэглэгч (verify / find / bankAccounts), мэдэгдэл (push / sms / mail),
|
|
13
13
|
* socket (toast / status / orderStatus / emit), exp (хэрэглэгчид exp нэмэх —
|
|
14
|
-
* тусдаа EXP түлхүүр, setExpKey)
|
|
14
|
+
* тусдаа EXP түлхүүр, setExpKey), wallet (хэрэглэгчийн token-оор хэтэвч
|
|
15
|
+
* үүсгэх / үлдэгдэл / лог). Merchant/admin зэрэг дотоод бүртгэлүүд энэ санд байхгүй.
|
|
15
16
|
*/
|
|
16
17
|
import auth from "./auth";
|
|
17
18
|
import user from "./user";
|
|
18
19
|
import notification from "./notification";
|
|
19
20
|
import socket from "./socket";
|
|
20
21
|
import exp from "./exp";
|
|
22
|
+
import wallet from "./wallet";
|
|
21
23
|
export type Env = "prod" | "staging";
|
|
22
24
|
export type Config = {
|
|
23
25
|
/** Одоогийн client access token (сан автоматаар шинэчилнэ; гараар Authorization header үүсгэхэд ашиглаж болно) */
|
|
@@ -54,7 +56,7 @@ export declare const setLogger: (status: boolean) => void;
|
|
|
54
56
|
export declare const jsonToQueryString: (params: Record<string, any>) => string;
|
|
55
57
|
export declare const ObjectId: () => string;
|
|
56
58
|
import { authState } from "./auth";
|
|
57
|
-
export { auth, user, notification, socket, exp, authState };
|
|
59
|
+
export { auth, user, notification, socket, exp, wallet, authState };
|
|
58
60
|
export * from "./types";
|
|
59
61
|
declare const _default: {
|
|
60
62
|
auth: {
|
|
@@ -73,7 +75,9 @@ declare const _default: {
|
|
|
73
75
|
state: import("./auth").AuthState;
|
|
74
76
|
};
|
|
75
77
|
user: {
|
|
76
|
-
verify: (token: string
|
|
78
|
+
verify: (token: string, opts?: {
|
|
79
|
+
fresh?: boolean;
|
|
80
|
+
}) => Promise<import("./types").Result<import("./types").VerifiedUser>>;
|
|
77
81
|
find: (query: {
|
|
78
82
|
user_id?: number | string;
|
|
79
83
|
phone_number?: string;
|
|
@@ -81,6 +85,9 @@ declare const _default: {
|
|
|
81
85
|
}) => Promise<import("./types").Result<import("./types").UserT>>;
|
|
82
86
|
list: typeof import("./user").list;
|
|
83
87
|
listAll: typeof import("./user").listAll;
|
|
88
|
+
bankAccounts: (query: {
|
|
89
|
+
user_id: number | string;
|
|
90
|
+
}) => Promise<import("./types").Result<import("./types").UserBankAccount[]>>;
|
|
84
91
|
middleware: (opts?: import("./user").MiddlewareOptions) => (req: {
|
|
85
92
|
[k: string]: any;
|
|
86
93
|
headers: Record<string, any>;
|
|
@@ -123,6 +130,17 @@ declare const _default: {
|
|
|
123
130
|
limit?: number;
|
|
124
131
|
}, key?: string) => Promise<import("./types").Result<import("./types").PageResult<import("./types").ExpLog>>>;
|
|
125
132
|
};
|
|
133
|
+
wallet: {
|
|
134
|
+
templates: (token: string) => Promise<import("./types").Result<import("./types").WalletTemplate[]>>;
|
|
135
|
+
create: (token: string, key_id: string) => Promise<import("./types").Result<import("./types").UserWalletItem>>;
|
|
136
|
+
balance: (token: string) => Promise<import("./types").Result<import("./types").WalletBalanceItem[]>>;
|
|
137
|
+
logs: (token: string, params?: {
|
|
138
|
+
wallet_id?: string;
|
|
139
|
+
tra_type?: string;
|
|
140
|
+
page?: number;
|
|
141
|
+
limit?: number;
|
|
142
|
+
}) => Promise<import("./types").Result<import("./types").PageResult<import("./types").WalletLogItem>>>;
|
|
143
|
+
};
|
|
126
144
|
setAuth: (auth: {
|
|
127
145
|
client_id: string;
|
|
128
146
|
client_secret: string;
|
package/dist/index.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.authState = exports.exp = exports.socket = exports.notification = exports.user = exports.auth = exports.ObjectId = exports.jsonToQueryString = exports.setLogger = exports.setExpKey = exports.setAuth = exports.setHost = exports.config = void 0;
|
|
17
|
+
exports.authState = exports.wallet = exports.exp = exports.socket = exports.notification = exports.user = exports.auth = exports.ObjectId = exports.jsonToQueryString = exports.setLogger = exports.setExpKey = exports.setAuth = exports.setHost = exports.config = void 0;
|
|
18
18
|
/**
|
|
19
19
|
* auth-mn — Auth.mn API client (Node.js)
|
|
20
20
|
*
|
|
@@ -26,9 +26,10 @@ exports.authState = exports.exp = exports.socket = exports.notification = export
|
|
|
26
26
|
* Token-ийг lib өөрөө авч, хугацаа дуусахаас өмнө refresh хийнэ.
|
|
27
27
|
* Client-д олгосон permission-ээс гадуур API дуудвал 403 + message буцна.
|
|
28
28
|
*
|
|
29
|
-
* Хамрах хүрээ: хэрэглэгч (verify / find), мэдэгдэл (push / sms / mail),
|
|
29
|
+
* Хамрах хүрээ: хэрэглэгч (verify / find / bankAccounts), мэдэгдэл (push / sms / mail),
|
|
30
30
|
* socket (toast / status / orderStatus / emit), exp (хэрэглэгчид exp нэмэх —
|
|
31
|
-
* тусдаа EXP түлхүүр, setExpKey)
|
|
31
|
+
* тусдаа EXP түлхүүр, setExpKey), wallet (хэрэглэгчийн token-оор хэтэвч
|
|
32
|
+
* үүсгэх / үлдэгдэл / лог). Merchant/admin зэрэг дотоод бүртгэлүүд энэ санд байхгүй.
|
|
32
33
|
*/
|
|
33
34
|
const auth_1 = require("./auth");
|
|
34
35
|
exports.auth = auth_1.default;
|
|
@@ -40,6 +41,8 @@ const socket_1 = require("./socket");
|
|
|
40
41
|
exports.socket = socket_1.default;
|
|
41
42
|
const exp_1 = require("./exp");
|
|
42
43
|
exports.exp = exp_1.default;
|
|
44
|
+
const wallet_1 = require("./wallet");
|
|
45
|
+
exports.wallet = wallet_1.default;
|
|
43
46
|
const HOSTS = {
|
|
44
47
|
prod: { MAIN: "https://api.auth.mn", WALLET: "https://api.auth.mn" },
|
|
45
48
|
staging: { MAIN: "https://staging-api.auth.mn", WALLET: "https://staging-api.auth.mn" }
|
|
@@ -109,6 +112,7 @@ exports.default = {
|
|
|
109
112
|
notification: notification_1.default,
|
|
110
113
|
socket: socket_1.default,
|
|
111
114
|
exp: exp_1.default,
|
|
115
|
+
wallet: wallet_1.default,
|
|
112
116
|
setAuth: exports.setAuth,
|
|
113
117
|
setHost: exports.setHost,
|
|
114
118
|
setExpKey: exports.setExpKey,
|
package/dist/types.d.ts
CHANGED
|
@@ -32,6 +32,8 @@ export type VerifiedUser = {
|
|
|
32
32
|
client_id: string;
|
|
33
33
|
name: string;
|
|
34
34
|
};
|
|
35
|
+
/** true бол DB-ээс шинээр уншсан, false бол token-ийн payload */
|
|
36
|
+
fresh?: boolean;
|
|
35
37
|
};
|
|
36
38
|
export type ClientInfo = {
|
|
37
39
|
client_id: string;
|
|
@@ -250,3 +252,54 @@ export type EmitT = {
|
|
|
250
252
|
emit_name: string;
|
|
251
253
|
data: any;
|
|
252
254
|
};
|
|
255
|
+
/** GET /main/v1/wallet/balance — хэтэвч тус бүрийн үлдэгдэл */
|
|
256
|
+
export type WalletBalanceItem = {
|
|
257
|
+
key_id: string;
|
|
258
|
+
name: string;
|
|
259
|
+
wallet_id: string;
|
|
260
|
+
balance: number;
|
|
261
|
+
status: string;
|
|
262
|
+
wallet_type: string;
|
|
263
|
+
};
|
|
264
|
+
/** GET /main/v1/wallet/list — апп-уудын хэтэвчний загварууд */
|
|
265
|
+
export type WalletTemplate = {
|
|
266
|
+
key_id: string;
|
|
267
|
+
wallet_type: string;
|
|
268
|
+
wallet_name: string;
|
|
269
|
+
role: string[];
|
|
270
|
+
};
|
|
271
|
+
/** GET /main/v1/wallet/logs — гүйлгээний лог (wallet service-ээс sync хийгдсэн) */
|
|
272
|
+
export type WalletLogItem = {
|
|
273
|
+
_id?: string;
|
|
274
|
+
group_id?: string;
|
|
275
|
+
payment_id?: string;
|
|
276
|
+
description?: string;
|
|
277
|
+
/** P2P | M2P | M2M | P2M | T2M | T2P | P2T | M2T */
|
|
278
|
+
type?: string;
|
|
279
|
+
/** NORMAL | FEE | REFUND */
|
|
280
|
+
tra_type?: string;
|
|
281
|
+
source?: string;
|
|
282
|
+
receiver?: string;
|
|
283
|
+
wallet_id?: string;
|
|
284
|
+
amount?: number;
|
|
285
|
+
createdAt?: string | Date;
|
|
286
|
+
[k: string]: unknown;
|
|
287
|
+
};
|
|
288
|
+
export type UserBankAccount = {
|
|
289
|
+
_id: string;
|
|
290
|
+
/** Khan refNo (ж: "003" Хаан, "203" Голомт) */
|
|
291
|
+
bank_code: string;
|
|
292
|
+
bank_name: string;
|
|
293
|
+
/** Дансны дугаар (IBAN-гүй) */
|
|
294
|
+
account: string;
|
|
295
|
+
iban: string;
|
|
296
|
+
currency?: string;
|
|
297
|
+
/** Банкнаас ирсэн дансны эзний нэр */
|
|
298
|
+
holder_name: string;
|
|
299
|
+
/** ДАН-ы нэртэй таарц, 0–100 */
|
|
300
|
+
match: number;
|
|
301
|
+
primary: boolean;
|
|
302
|
+
label?: string;
|
|
303
|
+
verified_at?: string | Date | null;
|
|
304
|
+
createdAt?: string | Date;
|
|
305
|
+
};
|
package/dist/user.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PageResult, Result, UserListFilter, UserLite, UserT, VerifiedUser } from "./types";
|
|
1
|
+
import { PageResult, Result, UserBankAccount, UserListFilter, UserLite, UserT, VerifiedUser } from "./types";
|
|
2
2
|
/**
|
|
3
3
|
* Хэрэглэгчийн token-ийг Auth.mn сервер дээр баталгаажуулж, хэрэглэгчийн
|
|
4
4
|
* мэдээллийг авна. Frontend (auth-mn-react redirect / QR / OTP) -ээс ирсэн
|
|
@@ -7,8 +7,14 @@ import { PageResult, Result, UserListFilter, UserLite, UserT, VerifiedUser } fro
|
|
|
7
7
|
* const v = await authMn.user.verify(token);
|
|
8
8
|
* if (!v.success) return res.status(401).json({ message: v.message });
|
|
9
9
|
* v.data.user.user_id ...
|
|
10
|
+
*
|
|
11
|
+
* Default-оор Auth.mn token-ийн payload-аас шууд буцаана (DB-гүй, хурдан) — мэдээлэл token-ийн
|
|
12
|
+
* хугацаа дуустал хуучирч болно. Төлбөр, данс зэрэг чухал үйлдэлд { fresh: true } өгвөл DB-ээс
|
|
13
|
+
* хамгийн сүүлийн мэдээллийг уншина.
|
|
10
14
|
*/
|
|
11
|
-
export declare const verify: (token: string
|
|
15
|
+
export declare const verify: (token: string, opts?: {
|
|
16
|
+
fresh?: boolean;
|
|
17
|
+
}) => Promise<Result<VerifiedUser>>;
|
|
12
18
|
/**
|
|
13
19
|
* Хэрэглэгч хайх — user_id, phone_number эсвэл email-ийн аль нэгээр (нэг хэрэглэгч).
|
|
14
20
|
* Permission: user.read
|
|
@@ -35,6 +41,16 @@ export declare function listAll(filter: UserListFilter & {
|
|
|
35
41
|
fields: "lite";
|
|
36
42
|
}, max?: number): Promise<Result<UserLite[]>>;
|
|
37
43
|
export declare function listAll(filter?: UserListFilter, max?: number): Promise<Result<UserT[]>>;
|
|
44
|
+
/**
|
|
45
|
+
* Хэрэглэгчийн ДАН-аар баталгаажуулж холбосон банкны дансууд (primary эхэндээ).
|
|
46
|
+
* Мөнгө буцаан олголт, таталтын хүсэлтэд ашиглана. Permission: user.bank.read
|
|
47
|
+
*
|
|
48
|
+
* const r = await authMn.user.bankAccounts({ user_id: 8636569 });
|
|
49
|
+
* r.data → [{ bank_code, bank_name, account, iban, holder_name, primary, ... }]
|
|
50
|
+
*/
|
|
51
|
+
export declare const bankAccounts: (query: {
|
|
52
|
+
user_id: number | string;
|
|
53
|
+
}) => Promise<Result<UserBankAccount[]>>;
|
|
38
54
|
type AnyReq = {
|
|
39
55
|
headers: Record<string, any>;
|
|
40
56
|
query?: any;
|
|
@@ -65,7 +81,9 @@ export type MiddlewareOptions = {
|
|
|
65
81
|
*/
|
|
66
82
|
export declare const middleware: (opts?: MiddlewareOptions) => (req: AnyReq, res: AnyRes, next: Next) => Promise<any>;
|
|
67
83
|
declare const _default: {
|
|
68
|
-
verify: (token: string
|
|
84
|
+
verify: (token: string, opts?: {
|
|
85
|
+
fresh?: boolean;
|
|
86
|
+
}) => Promise<Result<VerifiedUser>>;
|
|
69
87
|
find: (query: {
|
|
70
88
|
user_id?: number | string;
|
|
71
89
|
phone_number?: string;
|
|
@@ -73,6 +91,9 @@ declare const _default: {
|
|
|
73
91
|
}) => Promise<Result<UserT>>;
|
|
74
92
|
list: typeof list;
|
|
75
93
|
listAll: typeof listAll;
|
|
94
|
+
bankAccounts: (query: {
|
|
95
|
+
user_id: number | string;
|
|
96
|
+
}) => Promise<Result<UserBankAccount[]>>;
|
|
76
97
|
middleware: (opts?: MiddlewareOptions) => (req: AnyReq, res: AnyRes, next: Next) => Promise<any>;
|
|
77
98
|
};
|
|
78
99
|
export default _default;
|
package/dist/user.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.middleware = exports.find = exports.verify = void 0;
|
|
3
|
+
exports.middleware = exports.bankAccounts = exports.find = exports.verify = void 0;
|
|
4
4
|
exports.list = list;
|
|
5
5
|
exports.listAll = listAll;
|
|
6
6
|
const request_1 = require("./request");
|
|
@@ -12,12 +12,16 @@ const request_1 = require("./request");
|
|
|
12
12
|
* const v = await authMn.user.verify(token);
|
|
13
13
|
* if (!v.success) return res.status(401).json({ message: v.message });
|
|
14
14
|
* v.data.user.user_id ...
|
|
15
|
+
*
|
|
16
|
+
* Default-оор Auth.mn token-ийн payload-аас шууд буцаана (DB-гүй, хурдан) — мэдээлэл token-ийн
|
|
17
|
+
* хугацаа дуустал хуучирч болно. Төлбөр, данс зэрэг чухал үйлдэлд { fresh: true } өгвөл DB-ээс
|
|
18
|
+
* хамгийн сүүлийн мэдээллийг уншина.
|
|
15
19
|
*/
|
|
16
|
-
const verify = (token) => (0, request_1.request)({
|
|
20
|
+
const verify = (token, opts = {}) => (0, request_1.request)({
|
|
17
21
|
method: "POST",
|
|
18
22
|
path: "/main/v1/auth/client/user/verify",
|
|
19
23
|
name: "user verify",
|
|
20
|
-
data: { token }
|
|
24
|
+
data: { token, fresh: !!opts.fresh }
|
|
21
25
|
});
|
|
22
26
|
exports.verify = verify;
|
|
23
27
|
/**
|
|
@@ -49,6 +53,20 @@ async function listAll(filter = {}, max = 50000) {
|
|
|
49
53
|
}
|
|
50
54
|
return { success: true, message: "Амжилттай", data: all, status: 200 };
|
|
51
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Хэрэглэгчийн ДАН-аар баталгаажуулж холбосон банкны дансууд (primary эхэндээ).
|
|
58
|
+
* Мөнгө буцаан олголт, таталтын хүсэлтэд ашиглана. Permission: user.bank.read
|
|
59
|
+
*
|
|
60
|
+
* const r = await authMn.user.bankAccounts({ user_id: 8636569 });
|
|
61
|
+
* r.data → [{ bank_code, bank_name, account, iban, holder_name, primary, ... }]
|
|
62
|
+
*/
|
|
63
|
+
const bankAccounts = (query) => (0, request_1.request)({
|
|
64
|
+
method: "POST",
|
|
65
|
+
path: "/main/v1/auth/client/user/bank-accounts",
|
|
66
|
+
name: "user bank accounts",
|
|
67
|
+
data: query
|
|
68
|
+
});
|
|
69
|
+
exports.bankAccounts = bankAccounts;
|
|
52
70
|
const defaultGetToken = (req) => {
|
|
53
71
|
var _a, _b, _c, _d;
|
|
54
72
|
const h = String(((_a = req.headers) === null || _a === void 0 ? void 0 : _a.authorization) || ((_b = req.headers) === null || _b === void 0 ? void 0 : _b.Authorization) || "");
|
|
@@ -90,4 +108,4 @@ const middleware = (opts = {}) => async (req, res, next) => {
|
|
|
90
108
|
return next();
|
|
91
109
|
};
|
|
92
110
|
exports.middleware = middleware;
|
|
93
|
-
exports.default = { verify: exports.verify, find: exports.find, list, listAll, middleware: exports.middleware };
|
|
111
|
+
exports.default = { verify: exports.verify, find: exports.find, list, listAll, bankAccounts: exports.bankAccounts, middleware: exports.middleware };
|
package/dist/wallet.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { PageResult, Result, UserWalletItem, WalletBalanceItem, WalletLogItem, WalletTemplate } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Wallet — хэрэглэгчийн хэтэвч (Auth.mn main API, /main/v1/wallet/*).
|
|
4
|
+
*
|
|
5
|
+
* Эдгээр нь бүгд ХЭРЭГЛЭГЧИЙН token-оор дуудагддаг: frontend-ээс ирсэн
|
|
6
|
+
* Bearer token-ийг эхний аргумент болгон өгнө. Client permission шаардахгүй.
|
|
7
|
+
*
|
|
8
|
+
* // Хэтэвч үүсгэх (апп-ын key_id-ээр, ж: "SELLER-APP")
|
|
9
|
+
* const w = await authMn.wallet.create(userToken, "SELLER-APP");
|
|
10
|
+
* // Үлдэгдэл (хэрэглэгчийн бүх хэтэвч)
|
|
11
|
+
* const b = await authMn.wallet.balance(userToken);
|
|
12
|
+
* // Гүйлгээний лог
|
|
13
|
+
* const l = await authMn.wallet.logs(userToken, { wallet_id: w.data?.wallet_id });
|
|
14
|
+
*
|
|
15
|
+
* Хэрэглэгчийн wallet_id/wallet_key-г сервер талаас token-гүй авах бол
|
|
16
|
+
* authMn.user.find({ user_id }) → data.wallets (permission: user.read).
|
|
17
|
+
*/
|
|
18
|
+
/** Үүсгэж болох хэтэвчний загварууд */
|
|
19
|
+
export declare const templates: (token: string) => Promise<Result<WalletTemplate[]>>;
|
|
20
|
+
/**
|
|
21
|
+
* Хэтэвч үүсгэх. Хэрэглэгч тухайн key_id-ийн хэтэвчтэй бол байгааг нь буцаана.
|
|
22
|
+
* key_id нь Auth.mn дээр бүртгэлтэй байх ёстой (ERR_WALLET_KEY).
|
|
23
|
+
*/
|
|
24
|
+
export declare const create: (token: string, key_id: string) => Promise<Result<UserWalletItem>>;
|
|
25
|
+
/** Хэрэглэгчийн бүх хэтэвчний үлдэгдэл */
|
|
26
|
+
export declare const balance: (token: string) => Promise<Result<WalletBalanceItem[]>>;
|
|
27
|
+
/** Гүйлгээний лог (wallet_id өгөхгүй бол бүх хэтэвч) */
|
|
28
|
+
export declare const logs: (token: string, params?: {
|
|
29
|
+
wallet_id?: string;
|
|
30
|
+
/** NORMAL | FEE | REFUND */
|
|
31
|
+
tra_type?: string;
|
|
32
|
+
page?: number;
|
|
33
|
+
limit?: number;
|
|
34
|
+
}) => Promise<Result<PageResult<WalletLogItem>>>;
|
|
35
|
+
declare const _default: {
|
|
36
|
+
templates: (token: string) => Promise<Result<WalletTemplate[]>>;
|
|
37
|
+
create: (token: string, key_id: string) => Promise<Result<UserWalletItem>>;
|
|
38
|
+
balance: (token: string) => Promise<Result<WalletBalanceItem[]>>;
|
|
39
|
+
logs: (token: string, params?: {
|
|
40
|
+
wallet_id?: string;
|
|
41
|
+
/** NORMAL | FEE | REFUND */
|
|
42
|
+
tra_type?: string;
|
|
43
|
+
page?: number;
|
|
44
|
+
limit?: number;
|
|
45
|
+
}) => Promise<Result<PageResult<WalletLogItem>>>;
|
|
46
|
+
};
|
|
47
|
+
export default _default;
|
package/dist/wallet.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.logs = exports.balance = exports.create = exports.templates = void 0;
|
|
4
|
+
const request_1 = require("./request");
|
|
5
|
+
/**
|
|
6
|
+
* Wallet — хэрэглэгчийн хэтэвч (Auth.mn main API, /main/v1/wallet/*).
|
|
7
|
+
*
|
|
8
|
+
* Эдгээр нь бүгд ХЭРЭГЛЭГЧИЙН token-оор дуудагддаг: frontend-ээс ирсэн
|
|
9
|
+
* Bearer token-ийг эхний аргумент болгон өгнө. Client permission шаардахгүй.
|
|
10
|
+
*
|
|
11
|
+
* // Хэтэвч үүсгэх (апп-ын key_id-ээр, ж: "SELLER-APP")
|
|
12
|
+
* const w = await authMn.wallet.create(userToken, "SELLER-APP");
|
|
13
|
+
* // Үлдэгдэл (хэрэглэгчийн бүх хэтэвч)
|
|
14
|
+
* const b = await authMn.wallet.balance(userToken);
|
|
15
|
+
* // Гүйлгээний лог
|
|
16
|
+
* const l = await authMn.wallet.logs(userToken, { wallet_id: w.data?.wallet_id });
|
|
17
|
+
*
|
|
18
|
+
* Хэрэглэгчийн wallet_id/wallet_key-г сервер талаас token-гүй авах бол
|
|
19
|
+
* authMn.user.find({ user_id }) → data.wallets (permission: user.read).
|
|
20
|
+
*/
|
|
21
|
+
/** Үүсгэж болох хэтэвчний загварууд */
|
|
22
|
+
const templates = (token) => (0, request_1.rawRequest)({ method: "GET", path: "/main/v1/wallet/list", name: "wallet templates", auth: false }, token);
|
|
23
|
+
exports.templates = templates;
|
|
24
|
+
/**
|
|
25
|
+
* Хэтэвч үүсгэх. Хэрэглэгч тухайн key_id-ийн хэтэвчтэй бол байгааг нь буцаана.
|
|
26
|
+
* key_id нь Auth.mn дээр бүртгэлтэй байх ёстой (ERR_WALLET_KEY).
|
|
27
|
+
*/
|
|
28
|
+
const create = (token, key_id) => (0, request_1.rawRequest)({
|
|
29
|
+
method: "POST",
|
|
30
|
+
path: "/main/v1/wallet/create",
|
|
31
|
+
name: "wallet create",
|
|
32
|
+
data: { key_id },
|
|
33
|
+
auth: false
|
|
34
|
+
}, token);
|
|
35
|
+
exports.create = create;
|
|
36
|
+
/** Хэрэглэгчийн бүх хэтэвчний үлдэгдэл */
|
|
37
|
+
const balance = (token) => (0, request_1.rawRequest)({ method: "GET", path: "/main/v1/wallet/balance", name: "wallet balance", auth: false }, token);
|
|
38
|
+
exports.balance = balance;
|
|
39
|
+
/** Гүйлгээний лог (wallet_id өгөхгүй бол бүх хэтэвч) */
|
|
40
|
+
const logs = (token, params = {}) => (0, request_1.rawRequest)({ method: "GET", path: "/main/v1/wallet/logs", name: "wallet logs", params, auth: false }, token);
|
|
41
|
+
exports.logs = logs;
|
|
42
|
+
exports.default = { templates: exports.templates, create: exports.create, balance: exports.balance, logs: exports.logs };
|