-
Notifications
You must be signed in to change notification settings - Fork 50
Expand file tree
/
Copy pathvalidate.ts
More file actions
125 lines (110 loc) · 4.39 KB
/
validate.ts
File metadata and controls
125 lines (110 loc) · 4.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import { strictEqual } from "assert";
import { PaymentRequest } from "./collections";
import {
Environment,
GlobalConfig,
ProductConfig,
SubscriptionConfig,
UserConfig
} from "./common";
import { TransferRequest } from "./disbursements";
import {RemittanceRequest} from "./remittances";
export function validateRequestToPay(
paymentRequest: PaymentRequest
): Promise<void> {
const { amount, currency, payer }: PaymentRequest = paymentRequest || {};
return Promise.resolve().then(() => {
strictEqual(isTruthy(amount), true, "amount is required");
strictEqual(isNumeric(amount), true, "amount must be a number");
strictEqual(isTruthy(currency), true, "currency is required");
strictEqual(isTruthy(payer), true, "payer is required");
strictEqual(isTruthy(payer.partyId), true, "payer.partyId is required");
strictEqual(
isTruthy(payer.partyIdType),
true,
"payer.partyIdType is required"
);
strictEqual(isString(currency), true, "amount must be a string");
});
}
export function validateTransfer(
payoutRequest: TransferRequest
): Promise<void> {
const { amount, currency, payee, referenceId }: TransferRequest = payoutRequest || {};
return Promise.resolve().then(() => {
strictEqual(isTruthy(referenceId), true, "referenceId is required");
strictEqual(isUuid4(referenceId as string), true, "referenceId must be a valid uuid v4");
strictEqual(isTruthy(amount), true, "amount is required");
strictEqual(isNumeric(amount), true, "amount must be a number");
strictEqual(isTruthy(currency), true, "currency is required");
strictEqual(isTruthy(payee), true, "payee is required");
strictEqual(isTruthy(payee.partyId), true, "payee.partyId is required");
strictEqual(
isTruthy(payee.partyIdType),
true,
"payee.partyIdType is required"
);
strictEqual(isString(currency), true, "amount must be a string");
});
}
export function validateRemittance( remittanceRequest: RemittanceRequest
): Promise<void> {
const { amount, currency, payee, referenceId }: RemittanceRequest = remittanceRequest || {};
return Promise.resolve().then(() => {
strictEqual(isTruthy(referenceId), true, "referenceId is required");
strictEqual(isUuid4(referenceId), true, "referenceId must be a valid uuid v4");
strictEqual(isTruthy(amount), true, "amount is required");
strictEqual(isNumeric(amount), true, "amount must be a number");
strictEqual(isTruthy(currency), true, "currency is required");
strictEqual(isTruthy(payee), true, "payee is required");
strictEqual(isTruthy(payee.partyId), true, "payee.partyId is required");
strictEqual(
isTruthy(payee.partyIdType),
true,
"payee.partyIdType is required"
);
strictEqual(isString(currency), true, "amount must be a string");
});
}
export function validateGlobalConfig(config: GlobalConfig): void {
const { callbackHost, baseUrl, environment } = config;
strictEqual(isTruthy(callbackHost), true, "callbackHost is required");
if (environment && environment !== Environment.SANDBOX) {
strictEqual(
isTruthy(baseUrl),
true,
"baseUrl is required if environment is not sandbox"
);
strictEqual(isString(baseUrl), true, "baseUrl must be a string");
}
}
export function validateProductConfig(config: ProductConfig): void {
validateSubscriptionConfig(config);
validateUserConfig(config);
}
export function validateSubscriptionConfig(config: SubscriptionConfig): void {
const { primaryKey } = config;
strictEqual(isTruthy(primaryKey), true, "primaryKey is required");
strictEqual(isString(primaryKey), true, "primaryKey must be a string");
}
export function validateUserConfig({ userId, userSecret }: UserConfig): void {
strictEqual(isTruthy(userId), true, "userId is required");
strictEqual(isString(userId), true, "userId must be a string");
strictEqual(isTruthy(userSecret), true, "userSecret is required");
strictEqual(isString(userSecret), true, "userSecret must be a string");
strictEqual(isUuid4(userId), true, "userId must be a valid uuid v4");
}
function isNumeric(value: any): boolean {
return !isNaN(parseInt(value, 10));
}
function isTruthy(value: any): boolean {
return !!value;
}
function isString(value: any): boolean {
return typeof value === "string";
}
function isUuid4(value: string): boolean {
return /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i.test(
value
);
}