auth-mn 0.2.0 → 1.0.1
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 +206 -1
- package/dist/auth.d.ts +55 -1
- package/dist/auth.js +142 -85
- package/dist/index.d.ts +94 -349
- package/dist/index.js +82 -47
- package/dist/notification.d.ts +16 -116
- package/dist/notification.js +16 -258
- package/dist/request.d.ts +19 -0
- package/dist/request.js +81 -0
- package/dist/socket.d.ts +21 -98
- package/dist/socket.js +25 -198
- package/dist/types.d.ts +235 -0
- package/dist/types.js +7 -0
- package/dist/user.d.ts +78 -0
- package/dist/user.js +93 -0
- package/package.json +8 -9
- package/dist/find.d.ts +0 -208
- package/dist/find.js +0 -256
package/dist/socket.js
CHANGED
|
@@ -1,200 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EMIT = exports.ShowOrderStatus = exports.ShowStatus = exports.ShowToast = void 0;
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
console.log({
|
|
29
|
-
time: data.json.time,
|
|
30
|
-
request: data.json.request,
|
|
31
|
-
response: `${data.json.response}`,
|
|
32
|
-
responseBody: data.json.responseBody,
|
|
33
|
-
statusCode: data.json.statusCode
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
return { success: true, data: result.data, message: result.message };
|
|
39
|
-
}
|
|
40
|
-
catch (error) {
|
|
41
|
-
const axiosError = error;
|
|
42
|
-
if (axiosError.data) {
|
|
43
|
-
console.log(axiosError.data);
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
console.error("Request Failed:", axiosError);
|
|
47
|
-
}
|
|
48
|
-
return {
|
|
49
|
-
success: false,
|
|
50
|
-
data: null,
|
|
51
|
-
message: ((_a = axiosError.data) === null || _a === void 0 ? void 0 : _a.message) || ""
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
exports.ShowToast = ShowToast;
|
|
56
|
-
const ShowStatus = async (body) => {
|
|
57
|
-
var _a;
|
|
58
|
-
try {
|
|
59
|
-
const result = await (0, axios_master_1.axiosMasterLogger)({
|
|
60
|
-
method: "POST",
|
|
61
|
-
url: `${_1.config.hosts.MAIN}/main/v1/socket/notification/status`,
|
|
62
|
-
headers: {
|
|
63
|
-
Accept: "application/json",
|
|
64
|
-
"Content-Type": "application/json",
|
|
65
|
-
Authorization: `Bearer ${_1.config.token}`
|
|
66
|
-
},
|
|
67
|
-
data: body
|
|
68
|
-
}, {
|
|
69
|
-
name: "socket status",
|
|
70
|
-
timeout: 20000,
|
|
71
|
-
retryFunction: auth_1.getToken,
|
|
72
|
-
shouldRetry: true,
|
|
73
|
-
shouldRetryStatus: [401, 400],
|
|
74
|
-
logger(data) {
|
|
75
|
-
if (_1.config.logger) {
|
|
76
|
-
console.log({
|
|
77
|
-
time: data.json.time,
|
|
78
|
-
request: data.json.request,
|
|
79
|
-
response: `${data.json.response}`,
|
|
80
|
-
responseBody: data.json.responseBody,
|
|
81
|
-
statusCode: data.json.statusCode
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
return { success: true, data: result.data, message: result.message };
|
|
87
|
-
}
|
|
88
|
-
catch (error) {
|
|
89
|
-
const axiosError = error;
|
|
90
|
-
if (axiosError.data) {
|
|
91
|
-
console.log(axiosError.data);
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
console.error("Request Failed:", axiosError);
|
|
95
|
-
}
|
|
96
|
-
return {
|
|
97
|
-
success: false,
|
|
98
|
-
data: null,
|
|
99
|
-
message: ((_a = axiosError.data) === null || _a === void 0 ? void 0 : _a.message) || ""
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
exports.ShowStatus = ShowStatus;
|
|
104
|
-
const ShowOrderStatus = async (body) => {
|
|
105
|
-
var _a;
|
|
106
|
-
try {
|
|
107
|
-
const result = await (0, axios_master_1.axiosMasterLogger)({
|
|
108
|
-
method: "POST",
|
|
109
|
-
url: `${_1.config.hosts.MAIN}/main/v1/socket/notification/order/status`,
|
|
110
|
-
headers: {
|
|
111
|
-
Accept: "application/json",
|
|
112
|
-
"Content-Type": "application/json",
|
|
113
|
-
Authorization: `Bearer ${_1.config.token}`
|
|
114
|
-
},
|
|
115
|
-
data: body
|
|
116
|
-
}, {
|
|
117
|
-
name: "socket order status",
|
|
118
|
-
timeout: 20000,
|
|
119
|
-
retryFunction: auth_1.getToken,
|
|
120
|
-
shouldRetry: true,
|
|
121
|
-
shouldRetryStatus: [401, 400],
|
|
122
|
-
logger(data) {
|
|
123
|
-
if (_1.config.logger) {
|
|
124
|
-
console.log({
|
|
125
|
-
time: data.json.time,
|
|
126
|
-
request: data.json.request,
|
|
127
|
-
response: `${data.json.response}`,
|
|
128
|
-
responseBody: data.json.responseBody,
|
|
129
|
-
statusCode: data.json.statusCode
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
|
-
return { success: true, data: result.data, message: result.message };
|
|
135
|
-
}
|
|
136
|
-
catch (error) {
|
|
137
|
-
const axiosError = error;
|
|
138
|
-
if (axiosError.data) {
|
|
139
|
-
console.log(axiosError.data);
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
console.error("Request Failed:", axiosError);
|
|
143
|
-
}
|
|
144
|
-
return {
|
|
145
|
-
success: false,
|
|
146
|
-
data: null,
|
|
147
|
-
message: ((_a = axiosError.data) === null || _a === void 0 ? void 0 : _a.message) || ""
|
|
148
|
-
};
|
|
149
|
-
}
|
|
150
|
-
};
|
|
151
|
-
exports.ShowOrderStatus = ShowOrderStatus;
|
|
152
|
-
const EMIT = async (body) => {
|
|
153
|
-
var _a;
|
|
154
|
-
try {
|
|
155
|
-
const result = await (0, axios_master_1.axiosMasterLogger)({
|
|
156
|
-
method: "POST",
|
|
157
|
-
url: `${_1.config.hosts.MAIN}/main/v1/socket/emit`,
|
|
158
|
-
headers: {
|
|
159
|
-
Accept: "application/json",
|
|
160
|
-
"Content-Type": "application/json",
|
|
161
|
-
Authorization: `Bearer ${_1.config.token}`
|
|
162
|
-
},
|
|
163
|
-
data: body
|
|
164
|
-
}, {
|
|
165
|
-
name: "socket emit",
|
|
166
|
-
timeout: 20000,
|
|
167
|
-
retryFunction: auth_1.getToken,
|
|
168
|
-
shouldRetry: true,
|
|
169
|
-
shouldRetryStatus: [401, 400],
|
|
170
|
-
logger(data) {
|
|
171
|
-
if (_1.config.logger) {
|
|
172
|
-
console.log({
|
|
173
|
-
time: data.json.time,
|
|
174
|
-
request: data.json.request,
|
|
175
|
-
response: `${data.json.response}`,
|
|
176
|
-
responseBody: data.json.responseBody,
|
|
177
|
-
statusCode: data.json.statusCode
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
return { success: true, data: result.data, message: result.message };
|
|
183
|
-
}
|
|
184
|
-
catch (error) {
|
|
185
|
-
const axiosError = error;
|
|
186
|
-
if (axiosError.data) {
|
|
187
|
-
console.log(axiosError.data);
|
|
188
|
-
}
|
|
189
|
-
else {
|
|
190
|
-
console.error("Request Failed:", axiosError);
|
|
191
|
-
}
|
|
192
|
-
return {
|
|
193
|
-
success: false,
|
|
194
|
-
data: null,
|
|
195
|
-
message: ((_a = axiosError.data) === null || _a === void 0 ? void 0 : _a.message) || ""
|
|
196
|
-
};
|
|
197
|
-
}
|
|
198
|
-
};
|
|
199
|
-
exports.EMIT = EMIT;
|
|
200
|
-
exports.default = { ShowToast: exports.ShowToast, ShowStatus: exports.ShowStatus, ShowOrderStatus: exports.ShowOrderStatus, EMIT: exports.EMIT };
|
|
3
|
+
exports.EMIT = exports.ShowOrderStatus = exports.ShowStatus = exports.ShowToast = exports.emit = exports.orderStatus = exports.status = exports.toast = void 0;
|
|
4
|
+
const request_1 = require("./request");
|
|
5
|
+
/** Хэрэглэгчийн нээлттэй апп дээр toast — permission: socket.toast */
|
|
6
|
+
const toast = (body) => (0, request_1.request)({ method: "POST", path: "/main/v1/socket/notification/toast", name: "socket toast", data: body });
|
|
7
|
+
exports.toast = toast;
|
|
8
|
+
/** Төлөвийн карт (Loading / Success / Failure) — permission: socket.status */
|
|
9
|
+
const status = (body) => (0, request_1.request)({ method: "POST", path: "/main/v1/socket/notification/status", name: "socket status", data: body });
|
|
10
|
+
exports.status = status;
|
|
11
|
+
/** Захиалгын төлөв шинэчлэгдсэн event — permission: socket.status */
|
|
12
|
+
const orderStatus = (body) => (0, request_1.request)({
|
|
13
|
+
method: "POST",
|
|
14
|
+
path: "/main/v1/socket/notification/order/status",
|
|
15
|
+
name: "socket order status",
|
|
16
|
+
data: body
|
|
17
|
+
});
|
|
18
|
+
exports.orderStatus = orderStatus;
|
|
19
|
+
/** Дурын event олон хэрэглэгч рүү — permission: socket.emit */
|
|
20
|
+
const emit = (body) => (0, request_1.request)({ method: "POST", path: "/main/v1/socket/emit", name: "socket emit", data: body });
|
|
21
|
+
exports.emit = emit;
|
|
22
|
+
// Хуучин нэрүүд (0.x)
|
|
23
|
+
exports.ShowToast = exports.toast;
|
|
24
|
+
exports.ShowStatus = exports.status;
|
|
25
|
+
exports.ShowOrderStatus = exports.orderStatus;
|
|
26
|
+
exports.EMIT = exports.emit;
|
|
27
|
+
exports.default = { toast: exports.toast, status: exports.status, orderStatus: exports.orderStatus, emit: exports.emit, ShowToast: exports.ShowToast, ShowStatus: exports.ShowStatus, ShowOrderStatus: exports.ShowOrderStatus, EMIT: exports.EMIT };
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
export type ApiResponse<T> = {
|
|
2
|
+
code: string;
|
|
3
|
+
success: boolean;
|
|
4
|
+
message: string;
|
|
5
|
+
token?: string;
|
|
6
|
+
data: T;
|
|
7
|
+
};
|
|
8
|
+
/** Lib-ийн бүх функц ийм бүтэцтэй буцна — хэзээ ч throw хийхгүй */
|
|
9
|
+
export type Result<T> = {
|
|
10
|
+
success: boolean;
|
|
11
|
+
message: string;
|
|
12
|
+
data: T | null;
|
|
13
|
+
/** HTTP status (сүлжээний алдаа бол 0) */
|
|
14
|
+
status?: number;
|
|
15
|
+
};
|
|
16
|
+
export type TokenData = {
|
|
17
|
+
token_type: "Bearer";
|
|
18
|
+
access_token: string;
|
|
19
|
+
expires_in: number;
|
|
20
|
+
refresh_token: string;
|
|
21
|
+
refresh_expires_in: number;
|
|
22
|
+
client_id: string;
|
|
23
|
+
name: string;
|
|
24
|
+
permissions: string[];
|
|
25
|
+
};
|
|
26
|
+
/** user.verify хариу */
|
|
27
|
+
export type VerifiedUser = {
|
|
28
|
+
user: UserT;
|
|
29
|
+
/** token-ийн дуусах хугацаа (unix sec) */
|
|
30
|
+
exp: number | null;
|
|
31
|
+
client: {
|
|
32
|
+
client_id: string;
|
|
33
|
+
name: string;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
export type ClientInfo = {
|
|
37
|
+
client_id: string;
|
|
38
|
+
name: string;
|
|
39
|
+
description?: string;
|
|
40
|
+
domain?: string;
|
|
41
|
+
logo?: string;
|
|
42
|
+
owner_email?: string;
|
|
43
|
+
permissions: string[];
|
|
44
|
+
token_expires_in: string;
|
|
45
|
+
refresh_expires_in: string;
|
|
46
|
+
active: boolean;
|
|
47
|
+
last_used_at?: string | null;
|
|
48
|
+
createdAt?: string;
|
|
49
|
+
};
|
|
50
|
+
export type PermissionGroup = {
|
|
51
|
+
key: string;
|
|
52
|
+
label: string;
|
|
53
|
+
permissions: {
|
|
54
|
+
key: string;
|
|
55
|
+
label: string;
|
|
56
|
+
desc: string;
|
|
57
|
+
}[];
|
|
58
|
+
};
|
|
59
|
+
export declare const genders: readonly ["MEN", "WOMEN"];
|
|
60
|
+
export type Gender = (typeof genders)[number];
|
|
61
|
+
export interface UserEmailItem {
|
|
62
|
+
email: string;
|
|
63
|
+
verified: boolean;
|
|
64
|
+
primary: boolean;
|
|
65
|
+
}
|
|
66
|
+
export interface UserPhoneItem {
|
|
67
|
+
number: string;
|
|
68
|
+
verified: boolean;
|
|
69
|
+
primary: boolean;
|
|
70
|
+
}
|
|
71
|
+
export interface UserAuthProfiles {
|
|
72
|
+
facebook_id?: string | null;
|
|
73
|
+
google_id?: string | null;
|
|
74
|
+
steam_id?: string | null;
|
|
75
|
+
apple_id?: string | null;
|
|
76
|
+
twitter_id?: string | null;
|
|
77
|
+
monpay_id?: string | null;
|
|
78
|
+
toki_id?: string | null;
|
|
79
|
+
social_id?: string | null;
|
|
80
|
+
hipay_id?: string | null;
|
|
81
|
+
digi_id?: string | null;
|
|
82
|
+
happy_pay_id?: string | null;
|
|
83
|
+
most_id?: string | null;
|
|
84
|
+
}
|
|
85
|
+
export interface UserPreferences {
|
|
86
|
+
language: string;
|
|
87
|
+
notifications: boolean;
|
|
88
|
+
}
|
|
89
|
+
export interface UserStatus {
|
|
90
|
+
is_active: boolean;
|
|
91
|
+
is_banned: boolean;
|
|
92
|
+
verified: boolean;
|
|
93
|
+
}
|
|
94
|
+
export interface UserVerifyInfo {
|
|
95
|
+
first_name: string;
|
|
96
|
+
last_name: string;
|
|
97
|
+
born_date: string | Date | null;
|
|
98
|
+
national_id: string;
|
|
99
|
+
}
|
|
100
|
+
export interface UserAppItem {
|
|
101
|
+
app_name: string;
|
|
102
|
+
app_id: string;
|
|
103
|
+
device_id: string;
|
|
104
|
+
}
|
|
105
|
+
export interface UserWalletItem {
|
|
106
|
+
key_id: string;
|
|
107
|
+
wallet_id: string;
|
|
108
|
+
wallet_key: string;
|
|
109
|
+
wallet_type: string;
|
|
110
|
+
wallet_name: string;
|
|
111
|
+
role: string[];
|
|
112
|
+
}
|
|
113
|
+
export type UserT = {
|
|
114
|
+
user_id: number;
|
|
115
|
+
user_name: string;
|
|
116
|
+
nick_name: string;
|
|
117
|
+
exp: number;
|
|
118
|
+
primary_email?: string | null;
|
|
119
|
+
primary_phone?: string | null;
|
|
120
|
+
emails: UserEmailItem[];
|
|
121
|
+
phone_numbers: UserPhoneItem[];
|
|
122
|
+
auth_profiles: UserAuthProfiles;
|
|
123
|
+
profile_image_url: string;
|
|
124
|
+
date_of_birth: string | Date | null;
|
|
125
|
+
gender?: Gender;
|
|
126
|
+
sign_up_date: string | Date | null;
|
|
127
|
+
last_login: string | Date | null;
|
|
128
|
+
wallets?: UserWalletItem[];
|
|
129
|
+
preferences?: UserPreferences;
|
|
130
|
+
status?: UserStatus;
|
|
131
|
+
verify_info?: UserVerifyInfo;
|
|
132
|
+
dynamic_info?: Record<string, any>;
|
|
133
|
+
apps?: UserAppItem[];
|
|
134
|
+
};
|
|
135
|
+
export type UserListFilter = {
|
|
136
|
+
/** user_id жагсаалт (max 1000) */
|
|
137
|
+
user_ids?: (number | string)[];
|
|
138
|
+
/** Таны апп-д бүртгүүлсэн хэрэглэгчид (apps.app_name) */
|
|
139
|
+
app_name?: string;
|
|
140
|
+
phone_number?: string;
|
|
141
|
+
email?: string;
|
|
142
|
+
/** нэр (хэсэгчилсэн) */
|
|
143
|
+
name?: string;
|
|
144
|
+
/** нэр / nick / имэйл / утас дээр ерөнхий хайлт */
|
|
145
|
+
q?: string;
|
|
146
|
+
gender?: Gender;
|
|
147
|
+
/** энэ хугацаанаас хойш нэвтэрсэн (ISO) */
|
|
148
|
+
last_login_after?: string | Date;
|
|
149
|
+
page?: number;
|
|
150
|
+
/** max 500, default 100 */
|
|
151
|
+
limit?: number;
|
|
152
|
+
/** lite: зөвхөн user_id, нэр, утас, имэйл, зураг, last_login (хурдан) */
|
|
153
|
+
fields?: "full" | "lite";
|
|
154
|
+
};
|
|
155
|
+
export type UserLite = Pick<UserT, "user_id" | "user_name" | "nick_name" | "primary_phone" | "primary_email" | "profile_image_url" | "last_login">;
|
|
156
|
+
export type PageResult<T> = {
|
|
157
|
+
list: T[];
|
|
158
|
+
total: number;
|
|
159
|
+
page: number;
|
|
160
|
+
limit: number;
|
|
161
|
+
};
|
|
162
|
+
export type PushNotiT = {
|
|
163
|
+
user_id: number;
|
|
164
|
+
target_app: string;
|
|
165
|
+
body: {
|
|
166
|
+
title: string;
|
|
167
|
+
body: string;
|
|
168
|
+
icon?: string;
|
|
169
|
+
image?: string;
|
|
170
|
+
button?: {
|
|
171
|
+
title: string;
|
|
172
|
+
url: string;
|
|
173
|
+
} | null;
|
|
174
|
+
data?: Record<string, string>;
|
|
175
|
+
};
|
|
176
|
+
};
|
|
177
|
+
export type SmsT = {
|
|
178
|
+
text: string;
|
|
179
|
+
to: string;
|
|
180
|
+
from: string;
|
|
181
|
+
};
|
|
182
|
+
export type MailT = {
|
|
183
|
+
type: "notification" | "otp" | "custom";
|
|
184
|
+
form?: {
|
|
185
|
+
name?: string;
|
|
186
|
+
email?: string;
|
|
187
|
+
};
|
|
188
|
+
to: string[];
|
|
189
|
+
subject: string;
|
|
190
|
+
body: {
|
|
191
|
+
name: string;
|
|
192
|
+
title?: string;
|
|
193
|
+
desc?: string;
|
|
194
|
+
otp?: string | number;
|
|
195
|
+
button?: {
|
|
196
|
+
text: string;
|
|
197
|
+
url: string | null;
|
|
198
|
+
};
|
|
199
|
+
footer_text?: string;
|
|
200
|
+
};
|
|
201
|
+
};
|
|
202
|
+
export type ToastT = {
|
|
203
|
+
user_id: number;
|
|
204
|
+
type?: "info" | "warning";
|
|
205
|
+
text: string;
|
|
206
|
+
};
|
|
207
|
+
export type StatusT = {
|
|
208
|
+
user_id: number;
|
|
209
|
+
id: string;
|
|
210
|
+
type?: "Loading" | "Success" | "Failure";
|
|
211
|
+
title?: string;
|
|
212
|
+
amount?: number | string;
|
|
213
|
+
desc?: string;
|
|
214
|
+
footer?: {
|
|
215
|
+
text: string;
|
|
216
|
+
buttons: {
|
|
217
|
+
text: string;
|
|
218
|
+
fun: "href" | "close" | "exit";
|
|
219
|
+
href?: string | null;
|
|
220
|
+
}[];
|
|
221
|
+
};
|
|
222
|
+
show?: boolean;
|
|
223
|
+
expired_date?: Date | string;
|
|
224
|
+
start_date?: Date | string;
|
|
225
|
+
};
|
|
226
|
+
export type OrderStatusT = {
|
|
227
|
+
user_id: number;
|
|
228
|
+
order_id: string;
|
|
229
|
+
[k: string]: any;
|
|
230
|
+
};
|
|
231
|
+
export type EmitT = {
|
|
232
|
+
user_id: number;
|
|
233
|
+
emit_name: string;
|
|
234
|
+
data: any;
|
|
235
|
+
};
|
package/dist/types.js
ADDED
package/dist/user.d.ts
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { PageResult, Result, UserListFilter, UserLite, UserT, VerifiedUser } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Хэрэглэгчийн token-ийг Auth.mn сервер дээр баталгаажуулж, хэрэглэгчийн
|
|
4
|
+
* мэдээллийг авна. Frontend (auth-mn-react redirect / QR / OTP) -ээс ирсэн
|
|
5
|
+
* token-ийг backend дээрээ ингэж шалгана. Permission: user.verify
|
|
6
|
+
*
|
|
7
|
+
* const v = await authMn.user.verify(token);
|
|
8
|
+
* if (!v.success) return res.status(401).json({ message: v.message });
|
|
9
|
+
* v.data.user.user_id ...
|
|
10
|
+
*/
|
|
11
|
+
export declare const verify: (token: string) => Promise<Result<VerifiedUser>>;
|
|
12
|
+
/**
|
|
13
|
+
* Хэрэглэгч хайх — user_id, phone_number эсвэл email-ийн аль нэгээр (нэг хэрэглэгч).
|
|
14
|
+
* Permission: user.read
|
|
15
|
+
*/
|
|
16
|
+
export declare const find: (query: {
|
|
17
|
+
user_id?: number | string;
|
|
18
|
+
phone_number?: string;
|
|
19
|
+
email?: string;
|
|
20
|
+
}) => Promise<Result<UserT>>;
|
|
21
|
+
/**
|
|
22
|
+
* Олон хэрэглэгч — хуудаслалттай. Permission: user.read
|
|
23
|
+
* await authMn.user.list({ app_name: "CHARGEX", fields: "lite", limit: 500 });
|
|
24
|
+
* → { list, total, page, limit }
|
|
25
|
+
*/
|
|
26
|
+
export declare function list(filter: UserListFilter & {
|
|
27
|
+
fields: "lite";
|
|
28
|
+
}): Promise<Result<PageResult<UserLite>>>;
|
|
29
|
+
export declare function list(filter?: UserListFilter): Promise<Result<PageResult<UserT>>>;
|
|
30
|
+
/**
|
|
31
|
+
* Бүх хуудсыг татаж нэг массив болгоно (campaign, тайлан г.м.). max нь хамгаалалт (default 50000).
|
|
32
|
+
* const users = await authMn.user.listAll({ app_name: "CHARGEX", fields: "lite" });
|
|
33
|
+
*/
|
|
34
|
+
export declare function listAll(filter: UserListFilter & {
|
|
35
|
+
fields: "lite";
|
|
36
|
+
}, max?: number): Promise<Result<UserLite[]>>;
|
|
37
|
+
export declare function listAll(filter?: UserListFilter, max?: number): Promise<Result<UserT[]>>;
|
|
38
|
+
type AnyReq = {
|
|
39
|
+
headers: Record<string, any>;
|
|
40
|
+
query?: any;
|
|
41
|
+
body?: any;
|
|
42
|
+
[k: string]: any;
|
|
43
|
+
};
|
|
44
|
+
type AnyRes = {
|
|
45
|
+
status: (code: number) => {
|
|
46
|
+
json: (b: any) => any;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
type Next = (err?: any) => void;
|
|
50
|
+
export type MiddlewareOptions = {
|
|
51
|
+
/** false бол token байхгүй/буруу үед алдаа өгөхгүй, req.authMnUser = null байж next() (default true) */
|
|
52
|
+
required?: boolean;
|
|
53
|
+
/** Token-ийг хаанаас авах: default Authorization: Bearer, дараа нь ?authToken= / body.authToken */
|
|
54
|
+
getToken?: (req: AnyReq) => string | undefined | null;
|
|
55
|
+
/** Хэрэглэгчийн мэдээллийг хадгалах талбарын нэр (default "authMnUser") */
|
|
56
|
+
property?: string;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Express middleware — Auth.mn хэрэглэгчийн token-ийг шалгаад req.authMnUser-д хадгална.
|
|
60
|
+
*
|
|
61
|
+
* app.get("/api/me", authMn.user.middleware(), (req, res) => res.json(req.authMnUser));
|
|
62
|
+
*
|
|
63
|
+
* Санамж: хүсэлт бүрт Auth.mn руу нэг дуудлага хийнэ. Ачаалал ихтэй бол нэвтрэх үед
|
|
64
|
+
* нэг удаа verify хийгээд өөрийн session/JWT үүсгэх нь дээр.
|
|
65
|
+
*/
|
|
66
|
+
export declare const middleware: (opts?: MiddlewareOptions) => (req: AnyReq, res: AnyRes, next: Next) => Promise<any>;
|
|
67
|
+
declare const _default: {
|
|
68
|
+
verify: (token: string) => Promise<Result<VerifiedUser>>;
|
|
69
|
+
find: (query: {
|
|
70
|
+
user_id?: number | string;
|
|
71
|
+
phone_number?: string;
|
|
72
|
+
email?: string;
|
|
73
|
+
}) => Promise<Result<UserT>>;
|
|
74
|
+
list: typeof list;
|
|
75
|
+
listAll: typeof listAll;
|
|
76
|
+
middleware: (opts?: MiddlewareOptions) => (req: AnyReq, res: AnyRes, next: Next) => Promise<any>;
|
|
77
|
+
};
|
|
78
|
+
export default _default;
|
package/dist/user.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.middleware = exports.find = exports.verify = void 0;
|
|
4
|
+
exports.list = list;
|
|
5
|
+
exports.listAll = listAll;
|
|
6
|
+
const request_1 = require("./request");
|
|
7
|
+
/**
|
|
8
|
+
* Хэрэглэгчийн token-ийг Auth.mn сервер дээр баталгаажуулж, хэрэглэгчийн
|
|
9
|
+
* мэдээллийг авна. Frontend (auth-mn-react redirect / QR / OTP) -ээс ирсэн
|
|
10
|
+
* token-ийг backend дээрээ ингэж шалгана. Permission: user.verify
|
|
11
|
+
*
|
|
12
|
+
* const v = await authMn.user.verify(token);
|
|
13
|
+
* if (!v.success) return res.status(401).json({ message: v.message });
|
|
14
|
+
* v.data.user.user_id ...
|
|
15
|
+
*/
|
|
16
|
+
const verify = (token) => (0, request_1.request)({
|
|
17
|
+
method: "POST",
|
|
18
|
+
path: "/main/v1/auth/client/user/verify",
|
|
19
|
+
name: "user verify",
|
|
20
|
+
data: { token }
|
|
21
|
+
});
|
|
22
|
+
exports.verify = verify;
|
|
23
|
+
/**
|
|
24
|
+
* Хэрэглэгч хайх — user_id, phone_number эсвэл email-ийн аль нэгээр (нэг хэрэглэгч).
|
|
25
|
+
* Permission: user.read
|
|
26
|
+
*/
|
|
27
|
+
const find = (query) => (0, request_1.request)({ method: "POST", path: "/main/v1/auth/client/user/find", name: "user find", data: query });
|
|
28
|
+
exports.find = find;
|
|
29
|
+
function list(filter = {}) {
|
|
30
|
+
return (0, request_1.request)({
|
|
31
|
+
method: "POST",
|
|
32
|
+
path: "/main/v1/auth/client/user/list",
|
|
33
|
+
name: "user list",
|
|
34
|
+
data: filter
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
async function listAll(filter = {}, max = 50000) {
|
|
38
|
+
const limit = Math.min(500, filter.limit || 500);
|
|
39
|
+
const all = [];
|
|
40
|
+
let page = 1;
|
|
41
|
+
for (;;) {
|
|
42
|
+
const r = await list({ ...filter, page, limit });
|
|
43
|
+
if (!r.success || !r.data)
|
|
44
|
+
return { success: false, message: r.message, data: null, status: r.status };
|
|
45
|
+
all.push(...r.data.list);
|
|
46
|
+
if (all.length >= r.data.total || r.data.list.length < limit || all.length >= max)
|
|
47
|
+
break;
|
|
48
|
+
page++;
|
|
49
|
+
}
|
|
50
|
+
return { success: true, message: "Амжилттай", data: all, status: 200 };
|
|
51
|
+
}
|
|
52
|
+
const defaultGetToken = (req) => {
|
|
53
|
+
var _a, _b, _c, _d;
|
|
54
|
+
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) || "");
|
|
55
|
+
const m = h.match(/^Bearer\s+(.+)$/i);
|
|
56
|
+
if (m)
|
|
57
|
+
return m[1].trim();
|
|
58
|
+
return ((_c = req.query) === null || _c === void 0 ? void 0 : _c.authToken) || ((_d = req.body) === null || _d === void 0 ? void 0 : _d.authToken) || undefined;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Express middleware — Auth.mn хэрэглэгчийн token-ийг шалгаад req.authMnUser-д хадгална.
|
|
62
|
+
*
|
|
63
|
+
* app.get("/api/me", authMn.user.middleware(), (req, res) => res.json(req.authMnUser));
|
|
64
|
+
*
|
|
65
|
+
* Санамж: хүсэлт бүрт Auth.mn руу нэг дуудлага хийнэ. Ачаалал ихтэй бол нэвтрэх үед
|
|
66
|
+
* нэг удаа verify хийгээд өөрийн session/JWT үүсгэх нь дээр.
|
|
67
|
+
*/
|
|
68
|
+
const middleware = (opts = {}) => async (req, res, next) => {
|
|
69
|
+
var _a;
|
|
70
|
+
const required = opts.required !== false;
|
|
71
|
+
const prop = opts.property || "authMnUser";
|
|
72
|
+
const token = (opts.getToken || defaultGetToken)(req);
|
|
73
|
+
if (!token) {
|
|
74
|
+
req[prop] = null;
|
|
75
|
+
if (!required)
|
|
76
|
+
return next();
|
|
77
|
+
return res.status(401).json({ success: false, message: "Нэвтрээгүй байна.", code: "401", data: null });
|
|
78
|
+
}
|
|
79
|
+
const v = await (0, exports.verify)(token);
|
|
80
|
+
if (!v.success || !((_a = v.data) === null || _a === void 0 ? void 0 : _a.user)) {
|
|
81
|
+
req[prop] = null;
|
|
82
|
+
if (!required)
|
|
83
|
+
return next();
|
|
84
|
+
return res
|
|
85
|
+
.status(v.status === 403 ? 403 : 401)
|
|
86
|
+
.json({ success: false, message: v.message || "Token хүчингүй.", code: "401", data: null });
|
|
87
|
+
}
|
|
88
|
+
req[prop] = v.data.user;
|
|
89
|
+
req[`${prop}Token`] = token;
|
|
90
|
+
return next();
|
|
91
|
+
};
|
|
92
|
+
exports.middleware = middleware;
|
|
93
|
+
exports.default = { verify: exports.verify, find: exports.find, list, listAll, middleware: exports.middleware };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "auth-mn",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Auth.mn API",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "Auth.mn API client for Node.js — client_id/secret token, user, notification, socket",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"files": [
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
"build-ts": "rm -rf ./dist && npx tsc",
|
|
13
13
|
"build": "npx tsc",
|
|
14
14
|
"debug": "npm run build && npm run watch-debug",
|
|
15
|
-
"lint": "tsc --noEmit && eslint \"**/*.{js,ts}\" --quiet --fix"
|
|
15
|
+
"lint": "tsc --noEmit && eslint \"**/*.{js,ts}\" --quiet --fix",
|
|
16
|
+
"typecheck": "tsc --noEmit"
|
|
16
17
|
},
|
|
17
18
|
"repository": {
|
|
18
19
|
"type": "git",
|
|
@@ -30,17 +31,15 @@
|
|
|
30
31
|
},
|
|
31
32
|
"homepage": "https://github.com/togtokh-dev/auth-mn/#readme",
|
|
32
33
|
"dependencies": {
|
|
33
|
-
"axios": "^1.6.2"
|
|
34
|
-
"axios-master": "^2.0.7",
|
|
35
|
-
"https": "^1.0.0",
|
|
36
|
-
"ts-node": "^10.9.2",
|
|
37
|
-
"typescript": "^5.0.4"
|
|
34
|
+
"axios": "^1.6.2"
|
|
38
35
|
},
|
|
39
36
|
"devDependencies": {
|
|
40
37
|
"@types/node": "^18.15.11",
|
|
41
38
|
"@typescript-eslint/eslint-plugin": "^6.4.0",
|
|
42
39
|
"@typescript-eslint/parser": "^6.4.0",
|
|
43
|
-
"eslint": "^8.47.0"
|
|
40
|
+
"eslint": "^8.47.0",
|
|
41
|
+
"ts-node": "^10.9.2",
|
|
42
|
+
"typescript": "^5.0.4"
|
|
44
43
|
},
|
|
45
44
|
"publishConfig": {
|
|
46
45
|
"access": "public"
|