-
Notifications
You must be signed in to change notification settings - Fork 50
Expand file tree
/
Copy pathindex.ts
More file actions
126 lines (105 loc) · 3.1 KB
/
index.ts
File metadata and controls
126 lines (105 loc) · 3.1 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
126
export { Payment, PaymentRequest } from "./collections";
export { Transfer, TransferRequest } from "./disbursements";
export { Remit, RemittanceRequest } from "./remittances";
export * from "./errors";
export {
PartyIdType as PayerType,
Party as Payer,
TransactionStatus as Status,
Balance,
Environment,
FailureReason,
GlobalConfig,
ProductConfig
} from "./common";
import { AxiosInstance } from "axios";
import Collections from "./collections";
import Disbursements from "./disbursements";
import Remittances from "./remittances";
import Users from "./users";
import {
authorizeCollections,
authorizeDisbursements,
authorizeRemittances,
createTokenRefresher
} from "./auth";
import { createAuthClient, createClient } from "./client";
import {
validateGlobalConfig,
validateProductConfig,
validateSubscriptionConfig
} from "./validate";
import {
Config,
Environment,
GlobalConfig,
ProductConfig,
SubscriptionConfig
} from "./common";
export interface MomoClient {
Collections(productConfig: ProductConfig): Collections;
Disbursements(productConfig: ProductConfig): Disbursements;
Remittances(productConfig: ProductConfig): Remittances;
Users(subscription: SubscriptionConfig): Users;
}
const defaultGlobalConfig: GlobalConfig = {
baseUrl: "https://sandbox.momodeveloper.mtn.com",
environment: Environment.SANDBOX
};
/**
* Initialise the library
*
* @param globalConfig Global configuration required to use any product
*/
export function create(globalConfig: GlobalConfig): MomoClient {
validateGlobalConfig(globalConfig);
return {
Collections(productConfig: ProductConfig): Collections {
validateProductConfig(productConfig);
const config: Config = {
...defaultGlobalConfig,
...globalConfig,
...productConfig
};
const client: AxiosInstance = createAuthClient(
createTokenRefresher(authorizeCollections, config),
createClient(config)
);
return new Collections(client);
},
Disbursements(productConfig: ProductConfig): Disbursements {
const config: Config = {
...defaultGlobalConfig,
...globalConfig,
...productConfig
};
const client: AxiosInstance = createAuthClient(
createTokenRefresher(authorizeDisbursements, config),
createClient(config)
);
return new Disbursements(client);
},
Remittances(productConfig: ProductConfig): Remittances {
const config: Config = {
...defaultGlobalConfig,
...globalConfig,
...productConfig,
};
const client: AxiosInstance = createAuthClient(
createTokenRefresher(authorizeRemittances, config),
createClient(config)
);
return new Remittances(client);
},
Users(subscriptionConfig: SubscriptionConfig): Users {
validateSubscriptionConfig(subscriptionConfig);
const config: GlobalConfig & SubscriptionConfig = {
...defaultGlobalConfig,
...globalConfig,
...subscriptionConfig
};
const client: AxiosInstance = createClient(config);
return new Users(client);
}
};
}