@rshval/back-kit 1.1.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 +538 -0
- package/dist/api.d.ts +17 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +51 -0
- package/dist/api.js.map +1 -0
- package/dist/audit-log.d.ts +36 -0
- package/dist/audit-log.d.ts.map +1 -0
- package/dist/audit-log.js +45 -0
- package/dist/audit-log.js.map +1 -0
- package/dist/cache-middleware.d.ts +27 -0
- package/dist/cache-middleware.d.ts.map +1 -0
- package/dist/cache-middleware.js +72 -0
- package/dist/cache-middleware.js.map +1 -0
- package/dist/cache.d.ts +24 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +76 -0
- package/dist/cache.js.map +1 -0
- package/dist/database.d.ts +24 -0
- package/dist/database.d.ts.map +1 -0
- package/dist/database.js +90 -0
- package/dist/database.js.map +1 -0
- package/dist/email.d.ts +34 -0
- package/dist/email.d.ts.map +1 -0
- package/dist/email.js +26 -0
- package/dist/email.js.map +1 -0
- package/dist/global.d.ts +24 -0
- package/dist/global.d.ts.map +1 -0
- package/dist/global.js +20 -0
- package/dist/global.js.map +1 -0
- package/dist/helpers.d.ts +16 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +19 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +6 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +17 -0
- package/dist/logger.js.map +1 -0
- package/dist/mail-template.d.ts +41 -0
- package/dist/mail-template.d.ts.map +1 -0
- package/dist/mail-template.js +51 -0
- package/dist/mail-template.js.map +1 -0
- package/dist/paymaster.d.ts +51 -0
- package/dist/paymaster.d.ts.map +1 -0
- package/dist/paymaster.js +127 -0
- package/dist/paymaster.js.map +1 -0
- package/dist/seed.d.ts +15 -0
- package/dist/seed.d.ts.map +1 -0
- package/dist/seed.js +57 -0
- package/dist/seed.js.map +1 -0
- package/dist/site-helpers.d.ts +15 -0
- package/dist/site-helpers.d.ts.map +1 -0
- package/dist/site-helpers.js +21 -0
- package/dist/site-helpers.js.map +1 -0
- package/dist/socket-client.d.ts +19 -0
- package/dist/socket-client.d.ts.map +1 -0
- package/dist/socket-client.js +66 -0
- package/dist/socket-client.js.map +1 -0
- package/dist/utils.d.ts +3 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +6 -0
- package/dist/utils.js.map +1 -0
- package/dist/validation.d.ts +7 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +26 -0
- package/dist/validation.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
interface MailTemplateEntity {
|
|
2
|
+
subject: string;
|
|
3
|
+
bodyHtml?: string;
|
|
4
|
+
bodyText?: string;
|
|
5
|
+
}
|
|
6
|
+
interface CreateMailTemplateServiceOptions {
|
|
7
|
+
findTemplate: (args: {
|
|
8
|
+
key: string;
|
|
9
|
+
}) => Promise<(MailTemplateEntity & {
|
|
10
|
+
isActive?: boolean;
|
|
11
|
+
}) | null>;
|
|
12
|
+
sendEmail: (to: string, subject: string, text: string) => Promise<unknown>;
|
|
13
|
+
}
|
|
14
|
+
export declare const createMailTemplateService: ({ findTemplate, sendEmail, }: CreateMailTemplateServiceOptions) => {
|
|
15
|
+
extractVariables(template: string): string[];
|
|
16
|
+
renderTemplate(template: {
|
|
17
|
+
subject: string;
|
|
18
|
+
bodyHtml?: string;
|
|
19
|
+
bodyText?: string;
|
|
20
|
+
}, context?: {}): {
|
|
21
|
+
subject: string;
|
|
22
|
+
bodyHtml: string;
|
|
23
|
+
bodyText: string;
|
|
24
|
+
};
|
|
25
|
+
sendByKey({ key, to, context, }: {
|
|
26
|
+
key: string;
|
|
27
|
+
to: string;
|
|
28
|
+
context?: Record<string, unknown>;
|
|
29
|
+
}): Promise<{
|
|
30
|
+
readonly success: false;
|
|
31
|
+
readonly reason: "template_or_recipient_missing";
|
|
32
|
+
} | {
|
|
33
|
+
readonly success: false;
|
|
34
|
+
readonly reason: "empty_template";
|
|
35
|
+
} | {
|
|
36
|
+
readonly success: true;
|
|
37
|
+
readonly reason?: undefined;
|
|
38
|
+
}>;
|
|
39
|
+
};
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=mail-template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail-template.d.ts","sourceRoot":"","sources":["../src/mail-template.ts"],"names":[],"mappings":"AAqBA,UAAU,kBAAkB;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,gCAAgC;IACxC,YAAY,EAAE,CAAC,IAAI,EAAE;QACnB,GAAG,EAAE,MAAM,CAAC;KACb,KAAK,OAAO,CAAC,CAAC,kBAAkB,GAAG;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACpE,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC5E;AAED,eAAO,MAAM,yBAAyB,GAAI,8BAGvC,gCAAgC;+BAEJ,MAAM;6BAWrB;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;;;;;qCAclE;QACD,GAAG,EAAE,MAAM,CAAC;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC;;;;;;;;;;CA2BJ,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
const normalizeValue = (value) => value === undefined || value === null ? '' : String(value);
|
|
2
|
+
const tokenPattern = /{{\s*([a-zA-Z0-9_.-]+)\s*}}/g;
|
|
3
|
+
const resolveValue = (ctx, path) => {
|
|
4
|
+
const chunks = path.split('.');
|
|
5
|
+
let current = ctx;
|
|
6
|
+
for (const chunk of chunks) {
|
|
7
|
+
if (!current || typeof current !== 'object')
|
|
8
|
+
return '';
|
|
9
|
+
current = current[chunk];
|
|
10
|
+
}
|
|
11
|
+
return normalizeValue(current);
|
|
12
|
+
};
|
|
13
|
+
const render = (template, context) => normalizeValue(template).replace(tokenPattern, (_, path) => resolveValue(context, path));
|
|
14
|
+
export const createMailTemplateService = ({ findTemplate, sendEmail, }) => {
|
|
15
|
+
return {
|
|
16
|
+
extractVariables(template) {
|
|
17
|
+
const vars = new Set();
|
|
18
|
+
for (const match of normalizeValue(template).matchAll(tokenPattern)) {
|
|
19
|
+
if (match?.[1])
|
|
20
|
+
vars.add(String(match[1]));
|
|
21
|
+
}
|
|
22
|
+
return Array.from(vars.values()).sort();
|
|
23
|
+
},
|
|
24
|
+
renderTemplate(template, context = {}) {
|
|
25
|
+
const subject = render(template.subject, context);
|
|
26
|
+
const bodyHtml = render(template.bodyHtml || '', context);
|
|
27
|
+
const bodyText = render(template.bodyText || '', context);
|
|
28
|
+
return { subject, bodyHtml, bodyText };
|
|
29
|
+
},
|
|
30
|
+
async sendByKey({ key, to, context, }) {
|
|
31
|
+
const template = await findTemplate({ key });
|
|
32
|
+
if (!template || !to || template.isActive === false) {
|
|
33
|
+
return {
|
|
34
|
+
success: false,
|
|
35
|
+
reason: 'template_or_recipient_missing',
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const rendered = this.renderTemplate({
|
|
39
|
+
subject: template.subject,
|
|
40
|
+
bodyHtml: template.bodyHtml,
|
|
41
|
+
bodyText: template.bodyText,
|
|
42
|
+
}, context || {});
|
|
43
|
+
const text = rendered.bodyText || rendered.bodyHtml || '';
|
|
44
|
+
if (!text.trim())
|
|
45
|
+
return { success: false, reason: 'empty_template' };
|
|
46
|
+
await sendEmail(to, rendered.subject, text);
|
|
47
|
+
return { success: true };
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=mail-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail-template.js","sourceRoot":"","sources":["../src/mail-template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export type PaymasterCallbackPayload = Record<string, string | number | undefined | null>;
|
|
2
|
+
type PaymentStatus = 'paid' | 'cancelled';
|
|
3
|
+
interface PaymasterConfig {
|
|
4
|
+
merchantId: string;
|
|
5
|
+
secretKey?: string;
|
|
6
|
+
secretKeyDirect?: string;
|
|
7
|
+
signatureAlgorithm?: string;
|
|
8
|
+
checkoutUrl: string;
|
|
9
|
+
currency?: string;
|
|
10
|
+
successPath?: string;
|
|
11
|
+
failPath?: string;
|
|
12
|
+
notificationPathRequest?: string;
|
|
13
|
+
notificationPathOrder?: string;
|
|
14
|
+
checkSignature?: boolean;
|
|
15
|
+
}
|
|
16
|
+
interface PaymasterServiceOptions {
|
|
17
|
+
paymaster: PaymasterConfig;
|
|
18
|
+
clientServer: string;
|
|
19
|
+
serverBaseUrl: string;
|
|
20
|
+
}
|
|
21
|
+
export declare const createPaymasterService: ({ paymaster, clientServer, serverBaseUrl, }: PaymasterServiceOptions) => {
|
|
22
|
+
createPaymentLink({ requestId, amount, description, successUrl, failUrl, notificationPath, customerEmail, customerPhone, customerName, }: {
|
|
23
|
+
requestId: string;
|
|
24
|
+
amount: number;
|
|
25
|
+
description: string;
|
|
26
|
+
successUrl?: string;
|
|
27
|
+
failUrl?: string;
|
|
28
|
+
notificationPath?: string;
|
|
29
|
+
customerEmail?: string;
|
|
30
|
+
customerPhone?: string;
|
|
31
|
+
customerName?: string;
|
|
32
|
+
}): {
|
|
33
|
+
paymentNo: string;
|
|
34
|
+
paymentUrl: string;
|
|
35
|
+
urls: {
|
|
36
|
+
success: string;
|
|
37
|
+
fail: string;
|
|
38
|
+
notification: string;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
validateCallback(payload: PaymasterCallbackPayload, rawBody?: string): boolean;
|
|
42
|
+
parseCallback(payload: PaymasterCallbackPayload): {
|
|
43
|
+
requestId: string;
|
|
44
|
+
paymentNo: string;
|
|
45
|
+
paidAmount: number;
|
|
46
|
+
status: PaymentStatus;
|
|
47
|
+
statusRaw: string;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
export {};
|
|
51
|
+
//# sourceMappingURL=paymaster.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paymaster.d.ts","sourceRoot":"","sources":["../src/paymaster.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,wBAAwB,GAAG,MAAM,CAC3C,MAAM,EACN,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CACnC,CAAC;AAIF,KAAK,aAAa,GAAG,MAAM,GAAG,WAAW,CAAC;AAE1C,UAAU,eAAe;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,UAAU,uBAAuB;IAC/B,SAAS,EAAE,eAAe,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AA6CD,eAAO,MAAM,sBAAsB,GAAI,6CAIpC,uBAAuB;8IA6BnB;QACD,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB;;;;;;;;;8BAqDyB,wBAAwB;2BA8B3B,wBAAwB,GAAG;QAChD,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,aAAa,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;KACnB;CAwBJ,CAAC"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import crypto from 'crypto';
|
|
2
|
+
const normalize = (value) => value === undefined || value === null ? '' : String(value);
|
|
3
|
+
const toNumber = (value) => {
|
|
4
|
+
const n = Number(value);
|
|
5
|
+
return Number.isFinite(n) ? n : 0;
|
|
6
|
+
};
|
|
7
|
+
const generateSalt = () => crypto.randomBytes(8).toString('hex');
|
|
8
|
+
const hash = (algo, value) => crypto.createHash(algo).update(value).digest('hex');
|
|
9
|
+
const isAbsoluteUrl = (value) => /^https?:\/\//i.test(value);
|
|
10
|
+
const joinUrl = (base, path) => `${base.replace(/\/$/, '')}/${path.replace(/^\//, '')}`;
|
|
11
|
+
const resolveUrl = (base, maybePathOrUrl, fallbackPath) => {
|
|
12
|
+
const raw = normalize(maybePathOrUrl).trim() || fallbackPath;
|
|
13
|
+
if (!raw)
|
|
14
|
+
return '';
|
|
15
|
+
if (isAbsoluteUrl(raw))
|
|
16
|
+
return raw;
|
|
17
|
+
return joinUrl(base, raw);
|
|
18
|
+
};
|
|
19
|
+
const buildSignBase = (payload, secret) => [
|
|
20
|
+
normalize(payload.LMI_MERCHANT_ID),
|
|
21
|
+
normalize(payload.LMI_PAYMENT_NO),
|
|
22
|
+
normalize(payload.LMI_SYS_PAYMENT_ID),
|
|
23
|
+
normalize(payload.LMI_SYS_PAYMENT_DATE),
|
|
24
|
+
normalize(payload.LMI_PAYMENT_AMOUNT || payload.LMI_PAID_AMOUNT),
|
|
25
|
+
normalize(payload.LMI_CURRENCY || payload.LMI_PAID_CURRENCY),
|
|
26
|
+
normalize(payload.LMI_PAID_AMOUNT),
|
|
27
|
+
normalize(payload.LMI_PAID_CURRENCY),
|
|
28
|
+
normalize(payload.LMI_PAYMENT_SYSTEM),
|
|
29
|
+
normalize(payload.LMI_SIM_MODE),
|
|
30
|
+
secret,
|
|
31
|
+
].join(';');
|
|
32
|
+
export const createPaymasterService = ({ paymaster, clientServer, serverBaseUrl, }) => {
|
|
33
|
+
const getPaymasterSecrets = () => {
|
|
34
|
+
const direct = normalize(paymaster.secretKeyDirect).trim();
|
|
35
|
+
const base = normalize(paymaster.secretKey).trim();
|
|
36
|
+
return [direct, base].filter(Boolean);
|
|
37
|
+
};
|
|
38
|
+
const resolveSignatureAlgos = () => {
|
|
39
|
+
const configured = normalize(paymaster.signatureAlgorithm).toLowerCase();
|
|
40
|
+
if (configured === 'md5') {
|
|
41
|
+
return ['md5', 'sha256'];
|
|
42
|
+
}
|
|
43
|
+
return ['sha256', 'md5'];
|
|
44
|
+
};
|
|
45
|
+
return {
|
|
46
|
+
createPaymentLink({ requestId, amount, description, successUrl, failUrl, notificationPath, customerEmail, customerPhone, customerName, }) {
|
|
47
|
+
const paymentNo = `${requestId}-${Date.now()}`;
|
|
48
|
+
const params = new URLSearchParams();
|
|
49
|
+
params.set('LMI_MERCHANT_ID', paymaster.merchantId);
|
|
50
|
+
params.set('LMI_PAYMENT_NO', paymentNo);
|
|
51
|
+
params.set('LMI_PAYMENT_AMOUNT', amount.toFixed(2));
|
|
52
|
+
params.set('LMI_CURRENCY', paymaster.currency || 'RUB');
|
|
53
|
+
params.set('LMI_PAYMENT_DESC', description);
|
|
54
|
+
params.set('LMI_PAYER_PHONE_NUMBER', normalize(customerPhone));
|
|
55
|
+
params.set('LMI_PAYER_EMAIL', normalize(customerEmail));
|
|
56
|
+
params.set('LMI_PAYER_FULL_NAME', normalize(customerName));
|
|
57
|
+
params.set('LMI_PAYMENTFORM_DISABLED', '0');
|
|
58
|
+
params.set('LMI_SALT', generateSalt());
|
|
59
|
+
const resolvedSuccessUrl = resolveUrl(clientServer, successUrl || '', paymaster.successPath || '');
|
|
60
|
+
const resolvedFailUrl = resolveUrl(clientServer, failUrl || '', paymaster.failPath || '');
|
|
61
|
+
const fallbackNotificationPath = notificationPath ||
|
|
62
|
+
(requestId.startsWith('order_')
|
|
63
|
+
? paymaster.notificationPathOrder
|
|
64
|
+
: paymaster.notificationPathRequest) ||
|
|
65
|
+
'';
|
|
66
|
+
const resolvedNotificationUrl = resolveUrl(serverBaseUrl, '', fallbackNotificationPath);
|
|
67
|
+
if (resolvedSuccessUrl)
|
|
68
|
+
params.set('LMI_SUCCESS_URL', resolvedSuccessUrl);
|
|
69
|
+
if (resolvedFailUrl)
|
|
70
|
+
params.set('LMI_FAIL_URL', resolvedFailUrl);
|
|
71
|
+
if (resolvedNotificationUrl)
|
|
72
|
+
params.set('LMI_NOTIFICATION_URL', resolvedNotificationUrl);
|
|
73
|
+
return {
|
|
74
|
+
paymentNo,
|
|
75
|
+
paymentUrl: `${paymaster.checkoutUrl}?${params.toString()}`,
|
|
76
|
+
urls: {
|
|
77
|
+
success: resolvedSuccessUrl,
|
|
78
|
+
fail: resolvedFailUrl,
|
|
79
|
+
notification: resolvedNotificationUrl,
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
},
|
|
83
|
+
validateCallback(payload, rawBody = '') {
|
|
84
|
+
if (!paymaster.checkSignature)
|
|
85
|
+
return true;
|
|
86
|
+
const receivedHash = normalize(payload.LMI_HASH || payload.hash).toLowerCase();
|
|
87
|
+
if (!receivedHash)
|
|
88
|
+
return false;
|
|
89
|
+
const algos = resolveSignatureAlgos();
|
|
90
|
+
const secrets = getPaymasterSecrets();
|
|
91
|
+
for (const secret of secrets) {
|
|
92
|
+
const signBase = buildSignBase(payload, secret);
|
|
93
|
+
for (const algo of algos) {
|
|
94
|
+
if (receivedHash === hash(algo, signBase))
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
if (rawBody) {
|
|
98
|
+
const hmac = crypto
|
|
99
|
+
.createHmac('sha256', secret)
|
|
100
|
+
.update(rawBody)
|
|
101
|
+
.digest('hex');
|
|
102
|
+
if (receivedHash === hmac)
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return false;
|
|
107
|
+
},
|
|
108
|
+
parseCallback(payload) {
|
|
109
|
+
const paymentNoRaw = normalize(payload.LMI_PAYMENT_NO);
|
|
110
|
+
const requestId = paymentNoRaw.includes('-')
|
|
111
|
+
? paymentNoRaw.split('-')[0] || ''
|
|
112
|
+
: paymentNoRaw;
|
|
113
|
+
const paidAmount = toNumber(payload.LMI_PAID_AMOUNT || payload.LMI_PAYMENT_AMOUNT);
|
|
114
|
+
const statusRaw = normalize(payload.LMI_PAYMENT_STATUS || payload.LMI_STATUS).toLowerCase();
|
|
115
|
+
const isSuccess = ['success', 'paid', 'processed'].includes(statusRaw) ||
|
|
116
|
+
normalize(payload.LMI_PAYMENT_SYSTEM).length > 0;
|
|
117
|
+
return {
|
|
118
|
+
requestId,
|
|
119
|
+
paymentNo: paymentNoRaw,
|
|
120
|
+
paidAmount,
|
|
121
|
+
status: isSuccess ? 'paid' : 'cancelled',
|
|
122
|
+
statusRaw,
|
|
123
|
+
};
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
//# sourceMappingURL=paymaster.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paymaster.js","sourceRoot":"","sources":["../src/paymaster.ts"],"names":[],"mappings":"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"}
|
package/dist/seed.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Model } from 'mongoose';
|
|
2
|
+
interface CacheServiceLike {
|
|
3
|
+
getId: (value: object | string) => string;
|
|
4
|
+
get: (key: string) => Promise<any>;
|
|
5
|
+
}
|
|
6
|
+
interface CreateSeedFunctionsOptions {
|
|
7
|
+
cache: CacheServiceLike;
|
|
8
|
+
retryDelayMs?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare const createSeedFunctions: ({ cache, retryDelayMs, }: CreateSeedFunctionsOptions) => {
|
|
11
|
+
checkDatabaseIsConnected: () => Promise<boolean>;
|
|
12
|
+
setSeedData: (SeedModel: typeof Model, arr: object[]) => Promise<void>;
|
|
13
|
+
};
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=seed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../src/seed.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAoB,KAAK,EAAE,MAAM,UAAU,CAAC;AAExD,UAAU,gBAAgB;IACxB,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,CAAC;IAC1C,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACpC;AAED,UAAU,0BAA0B;IAClC,KAAK,EAAE,gBAAgB,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,mBAAmB,GAAI,0BAGjC,0BAA0B;;6BAwBd,OAAO,KAAK,OAClB,MAAM,EAAE,KACZ,OAAO,CAAC,IAAI,CAAC;CAkDjB,CAAC"}
|
package/dist/seed.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import delay from 'delay';
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
export const createSeedFunctions = ({ cache, retryDelayMs = 1000, }) => {
|
|
5
|
+
const checkDatabaseIsConnected = async () => {
|
|
6
|
+
const cacheIdDatabase = cache.getId({
|
|
7
|
+
service: 'database',
|
|
8
|
+
});
|
|
9
|
+
let cachedDatabaseData;
|
|
10
|
+
if (cacheIdDatabase) {
|
|
11
|
+
cachedDatabaseData = await cache.get(cacheIdDatabase);
|
|
12
|
+
}
|
|
13
|
+
if (cachedDatabaseData &&
|
|
14
|
+
cachedDatabaseData.length &&
|
|
15
|
+
cachedDatabaseData[0].status === 'connected') {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
return false;
|
|
19
|
+
};
|
|
20
|
+
const setSeedData = async (SeedModel, arr) => {
|
|
21
|
+
const databaseIsConnected = await checkDatabaseIsConnected();
|
|
22
|
+
if (databaseIsConnected) {
|
|
23
|
+
const spinner = ora(chalk.gray('add seed data - ' + SeedModel.modelName)).start();
|
|
24
|
+
const arrs = [];
|
|
25
|
+
let done2 = 0;
|
|
26
|
+
for (let i = 0; i < arr.length; i++) {
|
|
27
|
+
const obj = await new SeedModel(arr[i]);
|
|
28
|
+
arrs.push(obj);
|
|
29
|
+
if (++done2 === arr.length) {
|
|
30
|
+
let done = 0;
|
|
31
|
+
for (const item of arrs) {
|
|
32
|
+
await item
|
|
33
|
+
.save()
|
|
34
|
+
.then(() => {
|
|
35
|
+
if (++done === arrs.length) {
|
|
36
|
+
return done;
|
|
37
|
+
}
|
|
38
|
+
})
|
|
39
|
+
.catch(() => {
|
|
40
|
+
return null;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
spinner.start(chalk.green('seeds "' + SeedModel.modelName + '" added'));
|
|
46
|
+
spinner.succeed();
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
await delay(retryDelayMs);
|
|
50
|
+
return setSeedData(SeedModel, arr);
|
|
51
|
+
};
|
|
52
|
+
return {
|
|
53
|
+
checkDatabaseIsConnected,
|
|
54
|
+
setSeedData,
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=seed.js.map
|
package/dist/seed.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed.js","sourceRoot":"","sources":["../src/seed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAatB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAClC,KAAK,EACL,YAAY,GAAG,IAAI,GACQ,EAAE,EAAE;IAC/B,MAAM,wBAAwB,GAAG,KAAK,IAAI,EAAE;QAC1C,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC;YAClC,OAAO,EAAE,UAAU;SACpB,CAAC,CAAC;QAEH,IAAI,kBAAuB,CAAC;QAE5B,IAAI,eAAe,EAAE,CAAC;YACpB,kBAAkB,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACxD,CAAC;QAED,IACE,kBAAkB;YAClB,kBAAkB,CAAC,MAAM;YACzB,kBAAkB,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,EAC5C,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,EACvB,SAAuB,EACvB,GAAa,EACE,EAAE;QACjB,MAAM,mBAAmB,GAAG,MAAM,wBAAwB,EAAE,CAAC;QAE7D,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,GAAG,CACjB,KAAK,CAAC,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC,SAAS,CAAC,CACrD,CAAC,KAAK,EAAE,CAAC;YAIV,MAAM,IAAI,GAAU,EAAE,CAAC;YACvB,IAAI,KAAK,GAAG,CAAC,CAAC;YAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,MAAM,GAAG,GAAQ,MAAM,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAEf,IAAI,EAAE,KAAK,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC;oBAC3B,IAAI,IAAI,GAAG,CAAC,CAAC;oBAEb,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;wBACxB,MAAM,IAAI;6BACP,IAAI,EAAE;6BACN,IAAI,CAAC,GAAG,EAAE;4BACT,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;gCAC3B,OAAO,IAAI,CAAC;4BACd,CAAC;wBACH,CAAC,CAAC;6BACD,KAAK,CAAC,GAAG,EAAE;4BACV,OAAO,IAAI,CAAC;wBACd,CAAC,CAAC,CAAC;oBACP,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC;YACxE,OAAO,CAAC,OAAO,EAAE,CAAC;YAElB,OAAO;QACT,CAAC;QAED,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;QAE1B,OAAO,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,OAAO;QACL,wBAAwB;QACxB,WAAW;KACZ,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { MailOptionsBody } from './email.js';
|
|
2
|
+
import { sendEmailWithConfig } from './email.js';
|
|
3
|
+
import { createTokenByConfig, getBaseUrlByConfig } from './global.js';
|
|
4
|
+
type AppConfig = Parameters<typeof getBaseUrlByConfig>[0];
|
|
5
|
+
type User = Parameters<typeof createTokenByConfig>[0]['user'];
|
|
6
|
+
type ExpiresIn = Parameters<typeof createTokenByConfig>[0]['expiresIn'];
|
|
7
|
+
type NodemailerConfig = Parameters<typeof sendEmailWithConfig>[0]['nodemailerConfig'];
|
|
8
|
+
export declare const buildGetBaseUrl: (config: AppConfig) => (baseUrl?: string) => string;
|
|
9
|
+
export declare const buildCreateToken: (config: AppConfig) => ({ user, expiresIn }: {
|
|
10
|
+
user: User;
|
|
11
|
+
expiresIn: ExpiresIn;
|
|
12
|
+
}) => string;
|
|
13
|
+
export declare const buildSendEmail: (nodemailerConfig: NodemailerConfig) => (to: MailOptionsBody | string, subject: string, text: string) => Promise<string>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=site-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"site-helpers.d.ts","sourceRoot":"","sources":["../src/site-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtE,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,KAAK,IAAI,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC9D,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;AACxE,KAAK,gBAAgB,GAAG,UAAU,CAChC,OAAO,mBAAmB,CAC3B,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAEzB,eAAO,MAAM,eAAe,GAAI,QAAQ,SAAS,MACvC,UAAU,MAAM,WACzB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,QAAQ,SAAS,MACxC,qBAAqB;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,SAAS,CAAA;CAAE,WAGlE,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,kBAAkB,gBAAgB,MACvD,IAAI,eAAe,GAAG,MAAM,EAAE,SAAS,MAAM,EAAE,MAAM,MAAM,oBAQpE,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { sendEmailWithConfig } from './email.js';
|
|
2
|
+
import { createTokenByConfig, getBaseUrlByConfig } from './global.js';
|
|
3
|
+
export const buildGetBaseUrl = (config) => {
|
|
4
|
+
return (baseUrl) => getBaseUrlByConfig(config, baseUrl);
|
|
5
|
+
};
|
|
6
|
+
export const buildCreateToken = (config) => {
|
|
7
|
+
return ({ user, expiresIn }) => {
|
|
8
|
+
return createTokenByConfig({ config, user, expiresIn });
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export const buildSendEmail = (nodemailerConfig) => {
|
|
12
|
+
return (to, subject, text) => {
|
|
13
|
+
return sendEmailWithConfig({
|
|
14
|
+
nodemailerConfig,
|
|
15
|
+
to,
|
|
16
|
+
subject,
|
|
17
|
+
text,
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=site-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"site-helpers.js","sourceRoot":"","sources":["../src/site-helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAStE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAiB,EAAE,EAAE;IACnD,OAAO,CAAC,OAAgB,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACnE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAiB,EAAE,EAAE;IACpD,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAwC,EAAE,EAAE;QACnE,OAAO,mBAAmB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,gBAAkC,EAAE,EAAE;IACnE,OAAO,CAAC,EAA4B,EAAE,OAAe,EAAE,IAAY,EAAE,EAAE;QACrE,OAAO,mBAAmB,CAAC;YACzB,gBAAgB;YAChB,EAAE;YACF,OAAO;YACP,IAAI;SACL,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
interface LoggerLike {
|
|
2
|
+
debug: (...args: unknown[]) => void;
|
|
3
|
+
error: (...args: unknown[]) => void;
|
|
4
|
+
}
|
|
5
|
+
interface CreateSocketClientServiceOptions {
|
|
6
|
+
wsName: string;
|
|
7
|
+
socketBase: string;
|
|
8
|
+
logger: LoggerLike;
|
|
9
|
+
runWorkers: () => void;
|
|
10
|
+
socketClientInterval?: number;
|
|
11
|
+
connectedTarget?: string;
|
|
12
|
+
}
|
|
13
|
+
interface SocketClientService {
|
|
14
|
+
doSocketClient: () => any;
|
|
15
|
+
getSocketClient: () => any;
|
|
16
|
+
}
|
|
17
|
+
export declare const createSocketClientService: ({ wsName, socketBase, logger, runWorkers, socketClientInterval, connectedTarget, }: CreateSocketClientServiceOptions) => SocketClientService;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=socket-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket-client.d.ts","sourceRoot":"","sources":["../src/socket-client.ts"],"names":[],"mappings":"AAKA,UAAU,UAAU;IAClB,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACrC;AAED,UAAU,gCAAgC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,UAAU,mBAAmB;IAC3B,cAAc,EAAE,MAAM,GAAG,CAAC;IAC1B,eAAe,EAAE,MAAM,GAAG,CAAC;CAC5B;AAED,eAAO,MAAM,yBAAyB,GAAI,oFAOvC,gCAAgC,KAAG,mBA6ErC,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import delay from 'delay';
|
|
3
|
+
import ora, {} from 'ora';
|
|
4
|
+
import { io } from 'socket.io-client';
|
|
5
|
+
export const createSocketClientService = ({ wsName, socketBase, logger, runWorkers, socketClientInterval = 300, connectedTarget, }) => {
|
|
6
|
+
let spinner;
|
|
7
|
+
let spinnerVisible = false;
|
|
8
|
+
let socketClient;
|
|
9
|
+
const buildConnectedMessage = () => {
|
|
10
|
+
const base = 'Websocket [ws] client connected';
|
|
11
|
+
return connectedTarget ? `${base} to ${connectedTarget}` : base;
|
|
12
|
+
};
|
|
13
|
+
const doSocketClient = () => {
|
|
14
|
+
setTimeout(() => {
|
|
15
|
+
spinner = ora(chalk.gray(`Connect to ${wsName} [ws] server`)).start();
|
|
16
|
+
}, 100);
|
|
17
|
+
socketClient = io(socketBase, {
|
|
18
|
+
secure: true,
|
|
19
|
+
rejectUnauthorized: false,
|
|
20
|
+
reconnectionDelayMax: 10000,
|
|
21
|
+
withCredentials: true,
|
|
22
|
+
});
|
|
23
|
+
socketClient.on('connect', () => {
|
|
24
|
+
const connectedMessage = buildConnectedMessage();
|
|
25
|
+
logger.debug(`[${new Date()}] ${connectedMessage}`);
|
|
26
|
+
setTimeout(() => {
|
|
27
|
+
spinnerVisible = false;
|
|
28
|
+
spinner.start(chalk.green(connectedMessage));
|
|
29
|
+
spinner.succeed();
|
|
30
|
+
}, 100);
|
|
31
|
+
setInterval(() => {
|
|
32
|
+
runWorkers();
|
|
33
|
+
}, socketClientInterval);
|
|
34
|
+
});
|
|
35
|
+
socketClient.on('connect_error', async (err) => {
|
|
36
|
+
if (err && err.context) {
|
|
37
|
+
const context = err.context || {};
|
|
38
|
+
const error = {
|
|
39
|
+
status: context.status,
|
|
40
|
+
statusText: context.statusText,
|
|
41
|
+
};
|
|
42
|
+
logger.error(`[${new Date()}] Websocket [ws] connection error:\n`, error);
|
|
43
|
+
}
|
|
44
|
+
if (!spinnerVisible) {
|
|
45
|
+
spinnerVisible = true;
|
|
46
|
+
await delay(100);
|
|
47
|
+
spinner.start(chalk.red('Websocket [ws] client reconnection...'));
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
socketClient.on('disconnect', async () => {
|
|
51
|
+
logger.debug(`[${new Date()}] Websocket [ws] client disconnect`);
|
|
52
|
+
if (!spinnerVisible) {
|
|
53
|
+
spinnerVisible = true;
|
|
54
|
+
await delay(100);
|
|
55
|
+
spinner.start(chalk.red('Websocket [ws] client reconnection...'));
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
return socketClient;
|
|
59
|
+
};
|
|
60
|
+
const getSocketClient = () => socketClient;
|
|
61
|
+
return {
|
|
62
|
+
doSocketClient,
|
|
63
|
+
getSocketClient,
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=socket-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket-client.js","sourceRoot":"","sources":["../src/socket-client.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,WAAU,CAAC;AAEnD,eAAO,MAAM,KAAK,cAGjB,CAAC"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AAEnD,MAAM,CAAC,MAAM,KAAK,GAAG,GAAG,EAAE;IACxB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,OAAO,CAAC,CAAC;AACX,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function patternEmail(): RegExp;
|
|
2
|
+
export declare function patternPassword(): RegExp;
|
|
3
|
+
export declare function isValidEmail(val: string): boolean;
|
|
4
|
+
export declare function isValidPhoneNumber(val: string): boolean | undefined;
|
|
5
|
+
export declare function isValidCode(code: number | string, length: number): boolean;
|
|
6
|
+
export declare function isEmpty(val: string | object): boolean;
|
|
7
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,WAE3B;AAED,wBAAgB,eAAe,WAE9B;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,WAGvC;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,uBAG7C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,WAEhE;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,WAK3C"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { parsePhoneNumberFromString } from 'libphonenumber-js';
|
|
2
|
+
export function patternEmail() {
|
|
3
|
+
return /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/u;
|
|
4
|
+
}
|
|
5
|
+
export function patternPassword() {
|
|
6
|
+
return /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d!@#$%^&*()_+\-=[\]{};:'",.<>?]{8,}$/;
|
|
7
|
+
}
|
|
8
|
+
export function isValidEmail(val) {
|
|
9
|
+
const pattern = patternEmail();
|
|
10
|
+
return new RegExp(pattern, 'u').test(val);
|
|
11
|
+
}
|
|
12
|
+
export function isValidPhoneNumber(val) {
|
|
13
|
+
const phoneNumber = parsePhoneNumberFromString(val);
|
|
14
|
+
return phoneNumber && phoneNumber.isValid();
|
|
15
|
+
}
|
|
16
|
+
export function isValidCode(code, length) {
|
|
17
|
+
return String(code).length === length;
|
|
18
|
+
}
|
|
19
|
+
export function isEmpty(val) {
|
|
20
|
+
if (typeof val === 'string')
|
|
21
|
+
return val.trim().length === 0;
|
|
22
|
+
if (typeof val === 'object')
|
|
23
|
+
return Object.keys(val).length === 0;
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAE/D,MAAM,UAAU,YAAY;IAC1B,OAAO,wIAAwI,CAAC;AAClJ,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,qEAAqE,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;IAC/B,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,MAAM,WAAW,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;IACpD,OAAO,WAAW,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAqB,EAAE,MAAc;IAC/D,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAoB;IAC1C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;IAC5D,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IAElE,OAAO,KAAK,CAAC;AACf,CAAC"}
|