auth-mn 0.1.9 → 1.0.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/dist/socket.js CHANGED
@@ -1,152 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ShowOrderStatus = exports.ShowStatus = exports.ShowToast = void 0;
4
- const _1 = require(".");
5
- const auth_1 = require("./auth");
6
- const axios_master_1 = require("axios-master");
7
- const ShowToast = async (body) => {
8
- var _a;
9
- try {
10
- const result = await (0, axios_master_1.axiosMasterLogger)({
11
- method: "POST",
12
- maxBodyLength: Infinity,
13
- url: `${_1.config.hosts.MAIN}/main/v1/socket/notification/toast`,
14
- headers: {
15
- Accept: "application/json",
16
- "Content-Type": "application/json",
17
- Authorization: `Bearer ${_1.config.token}`
18
- },
19
- data: body
20
- }, {
21
- name: "socket toast",
22
- timeout: 20000,
23
- retryFunction: auth_1.getToken,
24
- shouldRetry: true,
25
- shouldRetryStatus: [401, 400],
26
- logger(data) {
27
- if (_1.config.logger) {
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
- exports.default = { ShowToast: exports.ShowToast, ShowStatus: exports.ShowStatus, ShowOrderStatus: exports.ShowOrderStatus };
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 };
@@ -0,0 +1,208 @@
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 PushNotiT = {
136
+ user_id: number;
137
+ target_app: string;
138
+ body: {
139
+ title: string;
140
+ body: string;
141
+ icon?: string;
142
+ image?: string;
143
+ button?: {
144
+ title: string;
145
+ url: string;
146
+ } | null;
147
+ data?: Record<string, string>;
148
+ };
149
+ };
150
+ export type SmsT = {
151
+ text: string;
152
+ to: string;
153
+ from: string;
154
+ };
155
+ export type MailT = {
156
+ type: "notification" | "otp" | "custom";
157
+ form?: {
158
+ name?: string;
159
+ email?: string;
160
+ };
161
+ to: string[];
162
+ subject: string;
163
+ body: {
164
+ name: string;
165
+ title?: string;
166
+ desc?: string;
167
+ otp?: string | number;
168
+ button?: {
169
+ text: string;
170
+ url: string | null;
171
+ };
172
+ footer_text?: string;
173
+ };
174
+ };
175
+ export type ToastT = {
176
+ user_id: number;
177
+ type?: "info" | "warning";
178
+ text: string;
179
+ };
180
+ export type StatusT = {
181
+ user_id: number;
182
+ id: string;
183
+ type?: "Loading" | "Success" | "Failure";
184
+ title?: string;
185
+ amount?: number | string;
186
+ desc?: string;
187
+ footer?: {
188
+ text: string;
189
+ buttons: {
190
+ text: string;
191
+ fun: "href" | "close" | "exit";
192
+ href?: string | null;
193
+ }[];
194
+ };
195
+ show?: boolean;
196
+ expired_date?: Date | string;
197
+ start_date?: Date | string;
198
+ };
199
+ export type OrderStatusT = {
200
+ user_id: number;
201
+ order_id: string;
202
+ [k: string]: any;
203
+ };
204
+ export type EmitT = {
205
+ user_id: number;
206
+ emit_name: string;
207
+ data: any;
208
+ };
package/dist/types.js ADDED
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.genders = void 0;
4
+ /* -----------------------------
5
+ * User
6
+ * ----------------------------- */
7
+ exports.genders = ["MEN", "WOMEN"];
package/dist/user.d.ts ADDED
@@ -0,0 +1,59 @@
1
+ import { Result, 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
+ type AnyReq = {
22
+ headers: Record<string, any>;
23
+ query?: any;
24
+ body?: any;
25
+ [k: string]: any;
26
+ };
27
+ type AnyRes = {
28
+ status: (code: number) => {
29
+ json: (b: any) => any;
30
+ };
31
+ };
32
+ type Next = (err?: any) => void;
33
+ export type MiddlewareOptions = {
34
+ /** false бол token байхгүй/буруу үед алдаа өгөхгүй, req.authMnUser = null байж next() (default true) */
35
+ required?: boolean;
36
+ /** Token-ийг хаанаас авах: default Authorization: Bearer, дараа нь ?authToken= / body.authToken */
37
+ getToken?: (req: AnyReq) => string | undefined | null;
38
+ /** Хэрэглэгчийн мэдээллийг хадгалах талбарын нэр (default "authMnUser") */
39
+ property?: string;
40
+ };
41
+ /**
42
+ * Express middleware — Auth.mn хэрэглэгчийн token-ийг шалгаад req.authMnUser-д хадгална.
43
+ *
44
+ * app.get("/api/me", authMn.user.middleware(), (req, res) => res.json(req.authMnUser));
45
+ *
46
+ * Санамж: хүсэлт бүрт Auth.mn руу нэг дуудлага хийнэ. Ачаалал ихтэй бол нэвтрэх үед
47
+ * нэг удаа verify хийгээд өөрийн session/JWT үүсгэх нь дээр.
48
+ */
49
+ export declare const middleware: (opts?: MiddlewareOptions) => (req: AnyReq, res: AnyRes, next: Next) => Promise<any>;
50
+ declare const _default: {
51
+ verify: (token: string) => Promise<Result<VerifiedUser>>;
52
+ find: (query: {
53
+ user_id?: number | string;
54
+ phone_number?: string;
55
+ email?: string;
56
+ }) => Promise<Result<UserT>>;
57
+ middleware: (opts?: MiddlewareOptions) => (req: AnyReq, res: AnyRes, next: Next) => Promise<any>;
58
+ };
59
+ export default _default;
package/dist/user.js ADDED
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.middleware = exports.find = exports.verify = void 0;
4
+ const request_1 = require("./request");
5
+ /**
6
+ * Хэрэглэгчийн token-ийг Auth.mn сервер дээр баталгаажуулж, хэрэглэгчийн
7
+ * мэдээллийг авна. Frontend (auth-mn-react redirect / QR / OTP) -ээс ирсэн
8
+ * token-ийг backend дээрээ ингэж шалгана. Permission: user.verify
9
+ *
10
+ * const v = await authMn.user.verify(token);
11
+ * if (!v.success) return res.status(401).json({ message: v.message });
12
+ * v.data.user.user_id ...
13
+ */
14
+ const verify = (token) => (0, request_1.request)({
15
+ method: "POST",
16
+ path: "/main/v1/auth/client/user/verify",
17
+ name: "user verify",
18
+ data: { token }
19
+ });
20
+ exports.verify = verify;
21
+ /**
22
+ * Хэрэглэгч хайх — user_id, phone_number эсвэл email-ийн аль нэгээр (нэг хэрэглэгч).
23
+ * Permission: user.read
24
+ */
25
+ const find = (query) => (0, request_1.request)({ method: "POST", path: "/main/v1/auth/client/user/find", name: "user find", data: query });
26
+ exports.find = find;
27
+ const defaultGetToken = (req) => {
28
+ var _a, _b, _c, _d;
29
+ 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) || "");
30
+ const m = h.match(/^Bearer\s+(.+)$/i);
31
+ if (m)
32
+ return m[1].trim();
33
+ return ((_c = req.query) === null || _c === void 0 ? void 0 : _c.authToken) || ((_d = req.body) === null || _d === void 0 ? void 0 : _d.authToken) || undefined;
34
+ };
35
+ /**
36
+ * Express middleware — Auth.mn хэрэглэгчийн token-ийг шалгаад req.authMnUser-д хадгална.
37
+ *
38
+ * app.get("/api/me", authMn.user.middleware(), (req, res) => res.json(req.authMnUser));
39
+ *
40
+ * Санамж: хүсэлт бүрт Auth.mn руу нэг дуудлага хийнэ. Ачаалал ихтэй бол нэвтрэх үед
41
+ * нэг удаа verify хийгээд өөрийн session/JWT үүсгэх нь дээр.
42
+ */
43
+ const middleware = (opts = {}) => async (req, res, next) => {
44
+ var _a;
45
+ const required = opts.required !== false;
46
+ const prop = opts.property || "authMnUser";
47
+ const token = (opts.getToken || defaultGetToken)(req);
48
+ if (!token) {
49
+ req[prop] = null;
50
+ if (!required)
51
+ return next();
52
+ return res.status(401).json({ success: false, message: "Нэвтрээгүй байна.", code: "401", data: null });
53
+ }
54
+ const v = await (0, exports.verify)(token);
55
+ if (!v.success || !((_a = v.data) === null || _a === void 0 ? void 0 : _a.user)) {
56
+ req[prop] = null;
57
+ if (!required)
58
+ return next();
59
+ return res
60
+ .status(v.status === 403 ? 403 : 401)
61
+ .json({ success: false, message: v.message || "Token хүчингүй.", code: "401", data: null });
62
+ }
63
+ req[prop] = v.data.user;
64
+ req[`${prop}Token`] = token;
65
+ return next();
66
+ };
67
+ exports.middleware = middleware;
68
+ exports.default = { verify: exports.verify, find: exports.find, middleware: exports.middleware };
package/package.json CHANGED
@@ -1,48 +1,47 @@
1
- {
2
- "name": "auth-mn",
3
- "version": "0.1.9",
4
- "description": "Auth.mn API",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
7
- "files": [
8
- "dist/"
9
- ],
10
- "scripts": {
11
- "test": "echo \"Error: no test specified\" && exit 1",
12
- "build-ts": "rm -rf ./dist && npx tsc",
13
- "build": "npx tsc",
14
- "debug": "npm run build && npm run watch-debug",
15
- "lint": "tsc --noEmit && eslint \"**/*.{js,ts}\" --quiet --fix"
16
- },
17
- "repository": {
18
- "type": "git",
19
- "url": "git+https://github.com/togtokh-dev/auth-mn.git"
20
- },
21
- "keywords": [
22
- "auth.mn",
23
- "axios",
24
- "togtokh.dev"
25
- ],
26
- "author": "TOGTOKH.DEV",
27
- "license": "ISC",
28
- "bugs": {
29
- "url": "https://github.com/togtokh-dev/auth-mn/issues"
30
- },
31
- "homepage": "https://github.com/togtokh-dev/auth-mn/#readme",
32
- "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"
38
- },
39
- "devDependencies": {
40
- "@types/node": "^18.15.11",
41
- "@typescript-eslint/eslint-plugin": "^6.4.0",
42
- "@typescript-eslint/parser": "^6.4.0",
43
- "eslint": "^8.47.0"
44
- },
45
- "publishConfig": {
46
- "access": "public"
47
- }
48
- }
1
+ {
2
+ "name": "auth-mn",
3
+ "version": "1.0.0",
4
+ "description": "Auth.mn API client for Node.js — client_id/secret token, user, notification, socket",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist/"
9
+ ],
10
+ "scripts": {
11
+ "test": "echo \"Error: no test specified\" && exit 1",
12
+ "build-ts": "rm -rf ./dist && npx tsc",
13
+ "build": "npx tsc",
14
+ "debug": "npm run build && npm run watch-debug",
15
+ "lint": "tsc --noEmit && eslint \"**/*.{js,ts}\" --quiet --fix",
16
+ "typecheck": "tsc --noEmit"
17
+ },
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/togtokh-dev/auth-mn.git"
21
+ },
22
+ "keywords": [
23
+ "auth.mn",
24
+ "axios",
25
+ "togtokh.dev"
26
+ ],
27
+ "author": "TOGTOKH.DEV",
28
+ "license": "ISC",
29
+ "bugs": {
30
+ "url": "https://github.com/togtokh-dev/auth-mn/issues"
31
+ },
32
+ "homepage": "https://github.com/togtokh-dev/auth-mn/#readme",
33
+ "dependencies": {
34
+ "axios": "^1.6.2"
35
+ },
36
+ "devDependencies": {
37
+ "@types/node": "^18.15.11",
38
+ "@typescript-eslint/eslint-plugin": "^6.4.0",
39
+ "@typescript-eslint/parser": "^6.4.0",
40
+ "eslint": "^8.47.0",
41
+ "ts-node": "^10.9.2",
42
+ "typescript": "^5.0.4"
43
+ },
44
+ "publishConfig": {
45
+ "access": "public"
46
+ }
47
+ }