@maxkabechani/mtn-momo-sdk 0.2.2 → 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/MIGRATION.md +79 -0
- package/README.md +68 -5
- package/lib/cjs/auth.d.ts +2 -2
- package/lib/cjs/auth.d.ts.map +1 -1
- package/lib/cjs/auth.js +31 -11
- package/lib/cjs/auth.js.map +1 -1
- package/lib/cjs/cli.js +5 -2
- package/lib/cjs/cli.js.map +1 -1
- package/lib/cjs/client.d.ts +3 -3
- package/lib/cjs/client.d.ts.map +1 -1
- package/lib/cjs/client.js +15 -7
- package/lib/cjs/client.js.map +1 -1
- package/lib/cjs/collections.d.ts +6 -5
- package/lib/cjs/collections.d.ts.map +1 -1
- package/lib/cjs/collections.js +45 -25
- package/lib/cjs/collections.js.map +1 -1
- package/lib/cjs/common.d.ts +13 -4
- package/lib/cjs/common.d.ts.map +1 -1
- package/lib/cjs/common.js.map +1 -1
- package/lib/cjs/disbursements.d.ts +7 -10
- package/lib/cjs/disbursements.d.ts.map +1 -1
- package/lib/cjs/disbursements.js +46 -31
- package/lib/cjs/disbursements.js.map +1 -1
- package/lib/cjs/errors.d.ts +15 -6
- package/lib/cjs/errors.d.ts.map +1 -1
- package/lib/cjs/errors.js +33 -23
- package/lib/cjs/errors.js.map +1 -1
- package/lib/cjs/httpClient.d.ts +50 -17
- package/lib/cjs/httpClient.d.ts.map +1 -1
- package/lib/cjs/httpClient.js +276 -78
- package/lib/cjs/httpClient.js.map +1 -1
- package/lib/cjs/index.d.ts +12 -11
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +30 -28
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/remittance.d.ts +5 -5
- package/lib/cjs/remittance.d.ts.map +1 -1
- package/lib/cjs/remittance.js +58 -41
- package/lib/cjs/remittance.js.map +1 -1
- package/lib/cjs/security.d.ts +32 -0
- package/lib/cjs/security.d.ts.map +1 -0
- package/lib/cjs/security.js +253 -0
- package/lib/cjs/security.js.map +1 -0
- package/lib/cjs/users.d.ts +5 -3
- package/lib/cjs/users.d.ts.map +1 -1
- package/lib/cjs/users.js +17 -6
- package/lib/cjs/users.js.map +1 -1
- package/lib/cjs/validate.d.ts +7 -7
- package/lib/cjs/validate.d.ts.map +1 -1
- package/lib/cjs/validate.js +67 -84
- package/lib/cjs/validate.js.map +1 -1
- package/lib/esm/auth.d.ts +2 -2
- package/lib/esm/auth.d.ts.map +1 -1
- package/lib/esm/auth.js +28 -8
- package/lib/esm/auth.js.map +1 -1
- package/lib/esm/cli.js +5 -2
- package/lib/esm/cli.js.map +1 -1
- package/lib/esm/client.d.ts +3 -3
- package/lib/esm/client.d.ts.map +1 -1
- package/lib/esm/client.js +14 -6
- package/lib/esm/client.js.map +1 -1
- package/lib/esm/collections.d.ts +6 -5
- package/lib/esm/collections.d.ts.map +1 -1
- package/lib/esm/collections.js +38 -18
- package/lib/esm/collections.js.map +1 -1
- package/lib/esm/common.d.ts +13 -4
- package/lib/esm/common.d.ts.map +1 -1
- package/lib/esm/common.js.map +1 -1
- package/lib/esm/disbursements.d.ts +7 -10
- package/lib/esm/disbursements.d.ts.map +1 -1
- package/lib/esm/disbursements.js +34 -19
- package/lib/esm/disbursements.js.map +1 -1
- package/lib/esm/errors.d.ts +15 -6
- package/lib/esm/errors.d.ts.map +1 -1
- package/lib/esm/errors.js +16 -6
- package/lib/esm/errors.js.map +1 -1
- package/lib/esm/httpClient.d.ts +50 -17
- package/lib/esm/httpClient.d.ts.map +1 -1
- package/lib/esm/httpClient.js +271 -77
- package/lib/esm/httpClient.js.map +1 -1
- package/lib/esm/index.d.ts +12 -11
- package/lib/esm/index.d.ts.map +1 -1
- package/lib/esm/index.js +12 -11
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/remittance.d.ts +5 -5
- package/lib/esm/remittance.d.ts.map +1 -1
- package/lib/esm/remittance.js +52 -35
- package/lib/esm/remittance.js.map +1 -1
- package/lib/esm/security.d.ts +32 -0
- package/lib/esm/security.d.ts.map +1 -0
- package/lib/esm/security.js +234 -0
- package/lib/esm/security.js.map +1 -0
- package/lib/esm/users.d.ts +5 -3
- package/lib/esm/users.d.ts.map +1 -1
- package/lib/esm/users.js +17 -6
- package/lib/esm/users.js.map +1 -1
- package/lib/esm/validate.d.ts +7 -7
- package/lib/esm/validate.d.ts.map +1 -1
- package/lib/esm/validate.js +66 -84
- package/lib/esm/validate.js.map +1 -1
- package/package.json +23 -5
package/lib/cjs/remittance.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { HttpClient } from "./httpClient";
|
|
2
|
-
import type { Balance, BasicUserInfo, BcAuthorizeRequest, BcAuthorizeResponse, CashTransfer, CashTransferRequest, ConsentKycResponse, OAuth2TokenRequest, OAuth2TokenResponse } from "./common";
|
|
3
|
-
import { PartyIdType } from "./common";
|
|
4
|
-
import type { Config } from "./common";
|
|
1
|
+
import type { HttpClient } from "./httpClient.js";
|
|
2
|
+
import type { Balance, BasicUserInfo, BcAuthorizeRequest, BcAuthorizeResponse, CashTransfer, CashTransferRequest, ConsentKycResponse, OAuth2TokenRequest, OAuth2TokenResponse } from "./common.js";
|
|
3
|
+
import { PartyIdType } from "./common.js";
|
|
4
|
+
import type { Config } from "./common.js";
|
|
5
5
|
/**
|
|
6
6
|
* Remittance product for cross-border money transfers with optional OAuth2 consent flows
|
|
7
7
|
*/
|
|
@@ -53,7 +53,7 @@ export default class Remittance {
|
|
|
53
53
|
* Requires prior OAuth2 user consent/login flow to obtain authorization
|
|
54
54
|
* @returns A promise that resolves to the user's information and KYC consent details
|
|
55
55
|
*/
|
|
56
|
-
getUserInfoWithConsent(): Promise<ConsentKycResponse>;
|
|
56
|
+
getUserInfoWithConsent(consentToken: string): Promise<ConsentKycResponse>;
|
|
57
57
|
/**
|
|
58
58
|
* Request Biometric Consent (BC) authorization.
|
|
59
59
|
* This initiates the BC authorization flow for enhanced security.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remittance.d.ts","sourceRoot":"","sources":["../../src/remittance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"remittance.d.ts","sourceRoot":"","sources":["../../src/remittance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EACV,OAAO,EACP,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAqB,MAAM,aAAa,CAAC;AAG7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAW1C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM;IAK9C;;;;OAIG;IACG,QAAQ,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;IA8B7D;;;;OAIG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAahE;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAMpC;;;;;OAKG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,WAAgC,GAC5C,OAAO,CAAC,OAAO,CAAC;IAqBnB;;;;;;OAMG;IACI,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAShE;;;;;OAKG;IACI,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ/D;;;;OAIG;IACI,sBAAsB,CAC3B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,kBAAkB,CAAC;IAW9B;;;;;;OAMG;IACI,WAAW,CAChB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,mBAAmB,CAAC;IA2B/B;;;;;;OAMG;IACI,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;IA8BlE;;;;;OAKG;IACI,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAclE;;;;;OAKG;IACI,cAAc,CACnB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,mBAAmB,CAAC;CAehC"}
|
package/lib/cjs/remittance.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
3
|
+
const common_js_1 = require("./common.js");
|
|
4
|
+
const auth_js_1 = require("./auth.js");
|
|
5
|
+
const errors_js_1 = require("./errors.js");
|
|
6
|
+
const security_js_1 = require("./security.js");
|
|
7
|
+
const validate_js_1 = require("./validate.js");
|
|
7
8
|
/**
|
|
8
9
|
* Remittance product for cross-border money transfers with optional OAuth2 consent flows
|
|
9
10
|
*/
|
|
@@ -18,7 +19,8 @@ class Remittance {
|
|
|
18
19
|
* @returns A promise that resolves to the financial transaction ID (referenceId)
|
|
19
20
|
*/
|
|
20
21
|
async transfer(request) {
|
|
21
|
-
|
|
22
|
+
await (0, validate_js_1.validateCashTransferRequest)(request);
|
|
23
|
+
const referenceId = (0, security_js_1.resolveReferenceId)(request.referenceId);
|
|
22
24
|
await this.client.post(`/remittance/v1_0/transfer`, {
|
|
23
25
|
amount: request.amount,
|
|
24
26
|
currency: request.currency,
|
|
@@ -46,10 +48,10 @@ class Remittance {
|
|
|
46
48
|
* @returns A promise that resolves to the transfer details and status
|
|
47
49
|
*/
|
|
48
50
|
async getTransaction(referenceId) {
|
|
49
|
-
const response = await this.client.get(`/remittance/v1_0/transfer/${referenceId}`);
|
|
51
|
+
const response = await this.client.get(`/remittance/v1_0/transfer/${(0, security_js_1.pathUuid)(referenceId)}`);
|
|
50
52
|
const transaction = response.data;
|
|
51
|
-
if (transaction.status ===
|
|
52
|
-
return Promise.reject((0,
|
|
53
|
+
if (transaction.status === common_js_1.TransactionStatus.FAILED) {
|
|
54
|
+
return Promise.reject((0, errors_js_1.getTransactionError)(transaction));
|
|
53
55
|
}
|
|
54
56
|
return transaction;
|
|
55
57
|
}
|
|
@@ -68,13 +70,18 @@ class Remittance {
|
|
|
68
70
|
* @param partyIdType - The type of ID (MSISDN, EMAIL, or PARTY_CODE)
|
|
69
71
|
* @returns A promise that resolves to true if the beneficiary is active, false otherwise
|
|
70
72
|
*/
|
|
71
|
-
async isPayerActive(partyId, partyIdType =
|
|
73
|
+
async isPayerActive(partyId, partyIdType = common_js_1.PartyIdType.MSISDN) {
|
|
74
|
+
const safeType = (0, security_js_1.pathPartyType)(partyIdType);
|
|
75
|
+
const safeId = (0, security_js_1.pathPartyId)(safeType, partyId);
|
|
72
76
|
try {
|
|
73
|
-
const response = await this.client.get(`/remittance/v1_0/accountholder/${
|
|
74
|
-
return response.
|
|
77
|
+
const response = await this.client.get(`/remittance/v1_0/accountholder/${safeType}/${safeId}/active`);
|
|
78
|
+
return response.data?.result === true;
|
|
75
79
|
}
|
|
76
80
|
catch (error) {
|
|
77
|
-
if (error
|
|
81
|
+
if (error &&
|
|
82
|
+
typeof error === "object" &&
|
|
83
|
+
"status" in error &&
|
|
84
|
+
error.status === 404) {
|
|
78
85
|
return false;
|
|
79
86
|
}
|
|
80
87
|
throw error;
|
|
@@ -88,8 +95,9 @@ class Remittance {
|
|
|
88
95
|
* @returns A promise that resolves to the basic user information
|
|
89
96
|
*/
|
|
90
97
|
getBasicUserInfo(partyId) {
|
|
98
|
+
const safeId = (0, security_js_1.pathPartyId)(common_js_1.PartyIdType.MSISDN, partyId);
|
|
91
99
|
return this.client
|
|
92
|
-
.get(`/remittance/v1_0/accountholder/MSISDN/${
|
|
100
|
+
.get(`/remittance/v1_0/accountholder/MSISDN/${safeId}/basicuserinfo`)
|
|
93
101
|
.then((response) => response.data);
|
|
94
102
|
}
|
|
95
103
|
/**
|
|
@@ -100,7 +108,7 @@ class Remittance {
|
|
|
100
108
|
*/
|
|
101
109
|
getBalanceInCurrency(currency) {
|
|
102
110
|
return this.client
|
|
103
|
-
.get(`/remittance/v1_0/account/balance/${currency}`)
|
|
111
|
+
.get(`/remittance/v1_0/account/balance/${(0, security_js_1.pathCurrency)(currency)}`)
|
|
104
112
|
.then((response) => response.data);
|
|
105
113
|
}
|
|
106
114
|
/**
|
|
@@ -108,9 +116,14 @@ class Remittance {
|
|
|
108
116
|
* Requires prior OAuth2 user consent/login flow to obtain authorization
|
|
109
117
|
* @returns A promise that resolves to the user's information and KYC consent details
|
|
110
118
|
*/
|
|
111
|
-
getUserInfoWithConsent() {
|
|
119
|
+
getUserInfoWithConsent(consentToken) {
|
|
120
|
+
(0, security_js_1.validateAccessToken)(consentToken);
|
|
112
121
|
return this.client
|
|
113
|
-
.get(
|
|
122
|
+
.get("/remittance/oauth2/v1_0/userinfo", {
|
|
123
|
+
headers: {
|
|
124
|
+
Authorization: `Bearer ${consentToken}`,
|
|
125
|
+
},
|
|
126
|
+
})
|
|
114
127
|
.then((response) => response.data);
|
|
115
128
|
}
|
|
116
129
|
/**
|
|
@@ -134,7 +147,7 @@ class Remittance {
|
|
|
134
147
|
if (request.scope_instruction) {
|
|
135
148
|
params.append("scope_instruction", request.scope_instruction);
|
|
136
149
|
}
|
|
137
|
-
const basicAuthToken = (0,
|
|
150
|
+
const basicAuthToken = (0, auth_js_1.createBasicAuthToken)(this.config);
|
|
138
151
|
return this.client
|
|
139
152
|
.post("/remittance/v1_0/bc-authorize", params, {
|
|
140
153
|
headers: {
|
|
@@ -152,27 +165,29 @@ class Remittance {
|
|
|
152
165
|
* @returns A promise that resolves to the reference ID
|
|
153
166
|
*/
|
|
154
167
|
cashTransfer(request) {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
.
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
168
|
+
return (0, validate_js_1.validateCashTransferRequest)(request).then(() => {
|
|
169
|
+
const referenceId = (0, security_js_1.resolveReferenceId)(request.referenceId);
|
|
170
|
+
return this.client
|
|
171
|
+
.post("/remittance/v2_0/cashtransfer", {
|
|
172
|
+
amount: request.amount,
|
|
173
|
+
currency: request.currency,
|
|
174
|
+
externalId: request.externalId,
|
|
175
|
+
payee: request.payee,
|
|
176
|
+
originatingCountry: request.originatingCountry,
|
|
177
|
+
originalAmount: request.originalAmount,
|
|
178
|
+
originalCurrency: request.originalCurrency,
|
|
179
|
+
payerMessage: request.payerMessage,
|
|
180
|
+
payeeNote: request.payeeNote,
|
|
181
|
+
}, {
|
|
182
|
+
headers: {
|
|
183
|
+
"X-Reference-Id": referenceId,
|
|
184
|
+
...(request.callbackUrl
|
|
185
|
+
? { "X-Callback-Url": request.callbackUrl }
|
|
186
|
+
: {}),
|
|
187
|
+
},
|
|
188
|
+
})
|
|
189
|
+
.then(() => referenceId);
|
|
190
|
+
});
|
|
176
191
|
}
|
|
177
192
|
/**
|
|
178
193
|
* Get the details and status of a cash transfer (V2).
|
|
@@ -182,11 +197,11 @@ class Remittance {
|
|
|
182
197
|
*/
|
|
183
198
|
getCashTransfer(referenceId) {
|
|
184
199
|
return this.client
|
|
185
|
-
.get(`/remittance/v2_0/cashtransfer/${referenceId}`)
|
|
200
|
+
.get(`/remittance/v2_0/cashtransfer/${(0, security_js_1.pathUuid)(referenceId)}`)
|
|
186
201
|
.then((response) => response.data)
|
|
187
202
|
.then((transfer) => {
|
|
188
|
-
if (transfer.status ===
|
|
189
|
-
return Promise.reject((0,
|
|
203
|
+
if (transfer.status === common_js_1.TransactionStatus.FAILED) {
|
|
204
|
+
return Promise.reject((0, errors_js_1.getTransactionError)(transfer));
|
|
190
205
|
}
|
|
191
206
|
return transfer;
|
|
192
207
|
});
|
|
@@ -201,9 +216,11 @@ class Remittance {
|
|
|
201
216
|
const params = new URLSearchParams();
|
|
202
217
|
params.append("grant_type", request.grant_type);
|
|
203
218
|
params.append("auth_req_id", request.auth_req_id);
|
|
219
|
+
const basicAuthToken = (0, auth_js_1.createBasicAuthToken)(this.config);
|
|
204
220
|
return this.client
|
|
205
221
|
.post("/remittance/oauth2/token/", params, {
|
|
206
222
|
headers: {
|
|
223
|
+
Authorization: `Basic ${basicAuthToken}`,
|
|
207
224
|
"Content-Type": "application/x-www-form-urlencoded",
|
|
208
225
|
},
|
|
209
226
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remittance.js","sourceRoot":"","sources":["../../src/remittance.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"remittance.js","sourceRoot":"","sources":["../../src/remittance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Environment, PartyIdType } from "./common.js";
|
|
2
|
+
import type { GlobalConfig, Party } from "./common.js";
|
|
3
|
+
export declare const DEFAULT_TIMEOUT_MS = 30000;
|
|
4
|
+
export declare const DEFAULT_MAX_RESPONSE_BYTES: number;
|
|
5
|
+
export declare const MAX_TIMEOUT_MS = 120000;
|
|
6
|
+
export declare const MAX_RESPONSE_BYTES: number;
|
|
7
|
+
export interface FinancialOperationOptions {
|
|
8
|
+
/**
|
|
9
|
+
* Stable MTN resource identifier for this logical financial operation.
|
|
10
|
+
*
|
|
11
|
+
* Production callers that may retry must generate and persist this value
|
|
12
|
+
* before the first request, then reuse it for every retry.
|
|
13
|
+
*/
|
|
14
|
+
referenceId?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function generateReferenceId(): string;
|
|
17
|
+
export declare function requireUuidV4(value: unknown, name?: string): string;
|
|
18
|
+
export declare function resolveReferenceId(referenceId?: string): string;
|
|
19
|
+
export declare function pathUuid(value: unknown, name?: string): string;
|
|
20
|
+
export declare function pathCurrency(value: unknown): string;
|
|
21
|
+
export declare function pathPartyType(value: unknown): PartyIdType;
|
|
22
|
+
export declare function pathPartyId(type: PartyIdType, value: unknown): string;
|
|
23
|
+
export declare function validateParty(party: Party | undefined, name: string): void;
|
|
24
|
+
export declare function encodeStrictPathSegment(value: unknown, name: string): string;
|
|
25
|
+
export declare function validateFinancialAmount(amount: unknown, name?: string): asserts amount is string;
|
|
26
|
+
export declare function validateCurrency(currency: unknown): asserts currency is string;
|
|
27
|
+
export declare function validateAccessToken(token: unknown, name?: string): asserts token is string;
|
|
28
|
+
export declare function normalizeBaseUrl(baseUrl: string, environment: Environment): string;
|
|
29
|
+
export declare function validateGlobalSecurityConfig(config: GlobalConfig): void;
|
|
30
|
+
export declare function redactSensitiveText(value: string): string;
|
|
31
|
+
export declare function redactUrl(value: string): string;
|
|
32
|
+
//# sourceMappingURL=security.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/security.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAYvD,eAAO,MAAM,kBAAkB,QAAS,CAAC;AACzC,eAAO,MAAM,0BAA0B,QAAc,CAAC;AACtD,eAAO,MAAM,cAAc,SAAU,CAAC;AACtC,eAAO,MAAM,kBAAkB,QAAmB,CAAC;AAEnD,MAAM,WAAW,yBAAyB;IACxC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,SAAgB,GAAG,MAAM,CAQ1E;AAED,wBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAI/D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,SAAgB,GAAG,MAAM,CAErE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQnD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CASzD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAgBrE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAY1E;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,GACX,MAAM,CAyCR;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,OAAO,EACf,IAAI,SAAW,GACd,OAAO,CAAC,MAAM,IAAI,MAAM,CAU1B;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,QAAQ,IAAI,MAAM,CAE5B;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,EACd,IAAI,SAAiB,GACpB,OAAO,CAAC,KAAK,IAAI,MAAM,CASzB;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,WAAW,GACvB,MAAM,CAiCR;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAiCvE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQzD;AA6BD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAe/C"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_RESPONSE_BYTES = exports.MAX_TIMEOUT_MS = exports.DEFAULT_MAX_RESPONSE_BYTES = exports.DEFAULT_TIMEOUT_MS = void 0;
|
|
4
|
+
exports.generateReferenceId = generateReferenceId;
|
|
5
|
+
exports.requireUuidV4 = requireUuidV4;
|
|
6
|
+
exports.resolveReferenceId = resolveReferenceId;
|
|
7
|
+
exports.pathUuid = pathUuid;
|
|
8
|
+
exports.pathCurrency = pathCurrency;
|
|
9
|
+
exports.pathPartyType = pathPartyType;
|
|
10
|
+
exports.pathPartyId = pathPartyId;
|
|
11
|
+
exports.validateParty = validateParty;
|
|
12
|
+
exports.encodeStrictPathSegment = encodeStrictPathSegment;
|
|
13
|
+
exports.validateFinancialAmount = validateFinancialAmount;
|
|
14
|
+
exports.validateCurrency = validateCurrency;
|
|
15
|
+
exports.validateAccessToken = validateAccessToken;
|
|
16
|
+
exports.normalizeBaseUrl = normalizeBaseUrl;
|
|
17
|
+
exports.validateGlobalSecurityConfig = validateGlobalSecurityConfig;
|
|
18
|
+
exports.redactSensitiveText = redactSensitiveText;
|
|
19
|
+
exports.redactUrl = redactUrl;
|
|
20
|
+
const uuid_1 = require("uuid");
|
|
21
|
+
const common_js_1 = require("./common.js");
|
|
22
|
+
const UUID_V4 = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
23
|
+
const POSITIVE_DECIMAL = /^(?:0|[1-9]\d*)(?:\.\d+)?$/;
|
|
24
|
+
const CURRENCY = /^[A-Z]{3}$/;
|
|
25
|
+
const MSISDN = /^\+?[0-9]{5,15}$/;
|
|
26
|
+
const EMAIL = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
27
|
+
const CONTROL_CHARACTER = /[\u0000-\u001f\u007f]/;
|
|
28
|
+
const FORBIDDEN_PATH_CHARACTER = /[\/\\?#]/;
|
|
29
|
+
const ENCODED_PATH_SEPARATOR = /%(?:2f|5c)/i;
|
|
30
|
+
exports.DEFAULT_TIMEOUT_MS = 30000;
|
|
31
|
+
exports.DEFAULT_MAX_RESPONSE_BYTES = 1024 * 1024;
|
|
32
|
+
exports.MAX_TIMEOUT_MS = 120000;
|
|
33
|
+
exports.MAX_RESPONSE_BYTES = 10 * 1024 * 1024;
|
|
34
|
+
function generateReferenceId() {
|
|
35
|
+
return (0, uuid_1.v4)();
|
|
36
|
+
}
|
|
37
|
+
function requireUuidV4(value, name = "referenceId") {
|
|
38
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
39
|
+
throw new TypeError(`${name} is required`);
|
|
40
|
+
}
|
|
41
|
+
if (!UUID_V4.test(value)) {
|
|
42
|
+
throw new TypeError(`${name} must be a valid uuid v4`);
|
|
43
|
+
}
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
46
|
+
function resolveReferenceId(referenceId) {
|
|
47
|
+
return referenceId === undefined
|
|
48
|
+
? generateReferenceId()
|
|
49
|
+
: requireUuidV4(referenceId);
|
|
50
|
+
}
|
|
51
|
+
function pathUuid(value, name = "referenceId") {
|
|
52
|
+
return encodeURIComponent(requireUuidV4(value, name));
|
|
53
|
+
}
|
|
54
|
+
function pathCurrency(value) {
|
|
55
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
56
|
+
throw new TypeError("currency is required");
|
|
57
|
+
}
|
|
58
|
+
if (!CURRENCY.test(value)) {
|
|
59
|
+
throw new TypeError("currency must be a 3-letter uppercase ISO 4217 code");
|
|
60
|
+
}
|
|
61
|
+
return value;
|
|
62
|
+
}
|
|
63
|
+
function pathPartyType(value) {
|
|
64
|
+
if (value !== common_js_1.PartyIdType.MSISDN &&
|
|
65
|
+
value !== common_js_1.PartyIdType.EMAIL &&
|
|
66
|
+
value !== common_js_1.PartyIdType.PARTY_CODE) {
|
|
67
|
+
throw new TypeError("partyIdType must be MSISDN, EMAIL, or PARTY_CODE");
|
|
68
|
+
}
|
|
69
|
+
return value;
|
|
70
|
+
}
|
|
71
|
+
function pathPartyId(type, value) {
|
|
72
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
73
|
+
throw new TypeError("partyId is required");
|
|
74
|
+
}
|
|
75
|
+
if (type === common_js_1.PartyIdType.MSISDN && !MSISDN.test(value)) {
|
|
76
|
+
throw new TypeError("MSISDN partyId must contain 5 to 15 digits");
|
|
77
|
+
}
|
|
78
|
+
if (type === common_js_1.PartyIdType.EMAIL && !EMAIL.test(value)) {
|
|
79
|
+
throw new TypeError("EMAIL partyId must be a valid email address");
|
|
80
|
+
}
|
|
81
|
+
if (type === common_js_1.PartyIdType.PARTY_CODE) {
|
|
82
|
+
requireUuidV4(value, "PARTY_CODE partyId");
|
|
83
|
+
}
|
|
84
|
+
return encodeStrictPathSegment(value, "partyId");
|
|
85
|
+
}
|
|
86
|
+
function validateParty(party, name) {
|
|
87
|
+
if (!party) {
|
|
88
|
+
throw new TypeError(`${name} is required`);
|
|
89
|
+
}
|
|
90
|
+
if (typeof party.partyId !== "string" || party.partyId.length === 0) {
|
|
91
|
+
throw new TypeError(`${name}.partyId is required`);
|
|
92
|
+
}
|
|
93
|
+
if (!party.partyIdType) {
|
|
94
|
+
throw new TypeError(`${name}.partyIdType is required`);
|
|
95
|
+
}
|
|
96
|
+
const type = pathPartyType(party.partyIdType);
|
|
97
|
+
pathPartyId(type, party.partyId);
|
|
98
|
+
}
|
|
99
|
+
function encodeStrictPathSegment(value, name) {
|
|
100
|
+
if (typeof value !== "string" &&
|
|
101
|
+
typeof value !== "number" &&
|
|
102
|
+
typeof value !== "bigint") {
|
|
103
|
+
throw new TypeError(`${name} must be a supported primitive`);
|
|
104
|
+
}
|
|
105
|
+
const segment = String(value);
|
|
106
|
+
if (!segment) {
|
|
107
|
+
throw new TypeError(`${name} is required`);
|
|
108
|
+
}
|
|
109
|
+
if (CONTROL_CHARACTER.test(segment)) {
|
|
110
|
+
throw new TypeError(`${name} contains control characters`);
|
|
111
|
+
}
|
|
112
|
+
if (segment === "." ||
|
|
113
|
+
segment === ".." ||
|
|
114
|
+
FORBIDDEN_PATH_CHARACTER.test(segment) ||
|
|
115
|
+
ENCODED_PATH_SEPARATOR.test(segment)) {
|
|
116
|
+
throw new TypeError(`${name} contains unsafe path characters`);
|
|
117
|
+
}
|
|
118
|
+
let decoded = segment;
|
|
119
|
+
try {
|
|
120
|
+
decoded = decodeURIComponent(segment);
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
throw new TypeError(`${name} contains invalid percent encoding`);
|
|
124
|
+
}
|
|
125
|
+
if (decoded === "." ||
|
|
126
|
+
decoded === ".." ||
|
|
127
|
+
FORBIDDEN_PATH_CHARACTER.test(decoded) ||
|
|
128
|
+
CONTROL_CHARACTER.test(decoded)) {
|
|
129
|
+
throw new TypeError(`${name} contains unsafe path characters`);
|
|
130
|
+
}
|
|
131
|
+
return encodeURIComponent(segment);
|
|
132
|
+
}
|
|
133
|
+
function validateFinancialAmount(amount, name = "amount") {
|
|
134
|
+
if (typeof amount !== "string" || amount.length === 0) {
|
|
135
|
+
throw new TypeError(`${name} is required`);
|
|
136
|
+
}
|
|
137
|
+
if (!POSITIVE_DECIMAL.test(amount)) {
|
|
138
|
+
throw new TypeError(`${name} must be a number`);
|
|
139
|
+
}
|
|
140
|
+
if (/^0+(?:\.0+)?$/.test(amount)) {
|
|
141
|
+
throw new TypeError(`${name} must be greater than zero`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
function validateCurrency(currency) {
|
|
145
|
+
pathCurrency(currency);
|
|
146
|
+
}
|
|
147
|
+
function validateAccessToken(token, name = "consentToken") {
|
|
148
|
+
if (typeof token !== "string" ||
|
|
149
|
+
token.length === 0 ||
|
|
150
|
+
/\s/.test(token) ||
|
|
151
|
+
CONTROL_CHARACTER.test(token)) {
|
|
152
|
+
throw new TypeError(`${name} must be a non-empty bearer token`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
function normalizeBaseUrl(baseUrl, environment) {
|
|
156
|
+
let url;
|
|
157
|
+
try {
|
|
158
|
+
url = new URL(baseUrl);
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
throw new TypeError("baseUrl must be a valid absolute URL");
|
|
162
|
+
}
|
|
163
|
+
if (url.username || url.password) {
|
|
164
|
+
throw new TypeError("baseUrl must not contain embedded credentials");
|
|
165
|
+
}
|
|
166
|
+
if (url.search || url.hash) {
|
|
167
|
+
throw new TypeError("baseUrl must not contain a query string or fragment");
|
|
168
|
+
}
|
|
169
|
+
const loopback = url.hostname === "127.0.0.1" ||
|
|
170
|
+
url.hostname === "localhost" ||
|
|
171
|
+
url.hostname === "::1" ||
|
|
172
|
+
url.hostname === "[::1]";
|
|
173
|
+
const testLoopback = environment === common_js_1.Environment.SANDBOX &&
|
|
174
|
+
process.env.NODE_ENV === "test" &&
|
|
175
|
+
loopback &&
|
|
176
|
+
url.protocol === "http:";
|
|
177
|
+
if (url.protocol !== "https:" && !testLoopback) {
|
|
178
|
+
const scope = environment === common_js_1.Environment.PRODUCTION ? "production " : "";
|
|
179
|
+
throw new TypeError(`${scope}baseUrl must use https`);
|
|
180
|
+
}
|
|
181
|
+
return url.toString().replace(/\/+$/, "");
|
|
182
|
+
}
|
|
183
|
+
function validateGlobalSecurityConfig(config) {
|
|
184
|
+
const environment = config.environment ?? common_js_1.Environment.SANDBOX;
|
|
185
|
+
if (environment !== common_js_1.Environment.SANDBOX &&
|
|
186
|
+
environment !== common_js_1.Environment.PRODUCTION) {
|
|
187
|
+
throw new TypeError("environment must be sandbox or production");
|
|
188
|
+
}
|
|
189
|
+
const baseUrl = config.baseUrl ?? "https://sandbox.momodeveloper.mtn.com";
|
|
190
|
+
normalizeBaseUrl(baseUrl, environment);
|
|
191
|
+
if (config.timeoutMs !== undefined &&
|
|
192
|
+
(!Number.isInteger(config.timeoutMs) ||
|
|
193
|
+
config.timeoutMs <= 0 ||
|
|
194
|
+
config.timeoutMs > exports.MAX_TIMEOUT_MS)) {
|
|
195
|
+
throw new TypeError(`timeoutMs must be an integer between 1 and ${exports.MAX_TIMEOUT_MS}`);
|
|
196
|
+
}
|
|
197
|
+
if (config.maxResponseBytes !== undefined &&
|
|
198
|
+
(!Number.isInteger(config.maxResponseBytes) ||
|
|
199
|
+
config.maxResponseBytes < 1024 ||
|
|
200
|
+
config.maxResponseBytes > exports.MAX_RESPONSE_BYTES)) {
|
|
201
|
+
throw new TypeError(`maxResponseBytes must be an integer between 1024 and ${exports.MAX_RESPONSE_BYTES}`);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
function redactSensitiveText(value) {
|
|
205
|
+
return value
|
|
206
|
+
.replace(/\b(Basic|Bearer)\s+\S+/gi, "$1 [redacted]")
|
|
207
|
+
.replace(/\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi, "[redacted]")
|
|
208
|
+
.replace(/\+?\d{7,15}/g, "[redacted]");
|
|
209
|
+
}
|
|
210
|
+
const SAFE_PATH_PARTS = new Set([
|
|
211
|
+
"",
|
|
212
|
+
"collection",
|
|
213
|
+
"disbursement",
|
|
214
|
+
"remittance",
|
|
215
|
+
"v1_0",
|
|
216
|
+
"v2_0",
|
|
217
|
+
"oauth2",
|
|
218
|
+
"token",
|
|
219
|
+
"requesttopay",
|
|
220
|
+
"requesttowithdraw",
|
|
221
|
+
"transfer",
|
|
222
|
+
"cashtransfer",
|
|
223
|
+
"deposit",
|
|
224
|
+
"refund",
|
|
225
|
+
"account",
|
|
226
|
+
"balance",
|
|
227
|
+
"accountholder",
|
|
228
|
+
"active",
|
|
229
|
+
"basicuserinfo",
|
|
230
|
+
"userinfo",
|
|
231
|
+
"bc-authorize",
|
|
232
|
+
"deliverynotification",
|
|
233
|
+
"apiuser",
|
|
234
|
+
"apikey",
|
|
235
|
+
]);
|
|
236
|
+
function redactUrl(value) {
|
|
237
|
+
try {
|
|
238
|
+
const url = new URL(value);
|
|
239
|
+
url.username = "";
|
|
240
|
+
url.password = "";
|
|
241
|
+
url.search = "";
|
|
242
|
+
url.hash = "";
|
|
243
|
+
url.pathname = url.pathname
|
|
244
|
+
.split("/")
|
|
245
|
+
.map((part) => (SAFE_PATH_PARTS.has(part) ? part : "[redacted]"))
|
|
246
|
+
.join("/");
|
|
247
|
+
return url.toString();
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
return "[invalid-url]";
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=security.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/security.ts"],"names":[],"mappings":";;;AA8BA,kDAEC;AAED,sCAQC;AAED,gDAIC;AAED,4BAEC;AAED,oCAQC;AAED,sCASC;AAED,kCAgBC;AAED,sCAYC;AAED,0DA4CC;AAED,0DAaC;AAED,4CAIC;AAED,kDAYC;AAED,4CAoCC;AAED,oEAiCC;AAED,kDAQC;AA6BD,8BAeC;AAzTD,+BAAkC;AAElC,2CAAuD;AAGvD,MAAM,OAAO,GACX,wEAAwE,CAAC;AAC3E,MAAM,gBAAgB,GAAG,4BAA4B,CAAC;AACtD,MAAM,QAAQ,GAAG,YAAY,CAAC;AAC9B,MAAM,MAAM,GAAG,kBAAkB,CAAC;AAClC,MAAM,KAAK,GAAG,4BAA4B,CAAC;AAC3C,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAClD,MAAM,wBAAwB,GAAG,UAAU,CAAC;AAC5C,MAAM,sBAAsB,GAAG,aAAa,CAAC;AAEhC,QAAA,kBAAkB,GAAG,KAAM,CAAC;AAC5B,QAAA,0BAA0B,GAAG,IAAI,GAAG,IAAI,CAAC;AACzC,QAAA,cAAc,GAAG,MAAO,CAAC;AACzB,QAAA,kBAAkB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAYnD,SAAgB,mBAAmB;IACjC,OAAO,IAAA,SAAI,GAAE,CAAC;AAChB,CAAC;AAED,SAAgB,aAAa,CAAC,KAAc,EAAE,IAAI,GAAG,aAAa;IAChE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,cAAc,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,0BAA0B,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,kBAAkB,CAAC,WAAoB;IACrD,OAAO,WAAW,KAAK,SAAS;QAC9B,CAAC,CAAC,mBAAmB,EAAE;QACvB,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;AACjC,CAAC;AAED,SAAgB,QAAQ,CAAC,KAAc,EAAE,IAAI,GAAG,aAAa;IAC3D,OAAO,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,SAAgB,YAAY,CAAC,KAAc;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,SAAS,CAAC,sBAAsB,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,SAAS,CAAC,qDAAqD,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,aAAa,CAAC,KAAc;IAC1C,IACE,KAAK,KAAK,uBAAW,CAAC,MAAM;QAC5B,KAAK,KAAK,uBAAW,CAAC,KAAK;QAC3B,KAAK,KAAK,uBAAW,CAAC,UAAU,EAChC,CAAC;QACD,MAAM,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,WAAW,CAAC,IAAiB,EAAE,KAAc;IAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,IAAI,KAAK,uBAAW,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,IAAI,KAAK,uBAAW,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,IAAI,KAAK,uBAAW,CAAC,UAAU,EAAE,CAAC;QACpC,aAAa,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,uBAAuB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACnD,CAAC;AAED,SAAgB,aAAa,CAAC,KAAwB,EAAE,IAAY;IAClE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,cAAc,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,sBAAsB,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,0BAA0B,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC9C,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,SAAgB,uBAAuB,CACrC,KAAc,EACd,IAAY;IAEZ,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,QAAQ,EACzB,CAAC;QACD,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,gCAAgC,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,cAAc,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,8BAA8B,CAAC,CAAC;IAC7D,CAAC;IACD,IACE,OAAO,KAAK,GAAG;QACf,OAAO,KAAK,IAAI;QAChB,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC;QACtC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,EACpC,CAAC;QACD,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,kCAAkC,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,OAAO,GAAG,OAAO,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,oCAAoC,CAAC,CAAC;IACnE,CAAC;IACD,IACE,OAAO,KAAK,GAAG;QACf,OAAO,KAAK,IAAI;QAChB,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC;QACtC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAC/B,CAAC;QACD,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,kCAAkC,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,SAAgB,uBAAuB,CACrC,MAAe,EACf,IAAI,GAAG,QAAQ;IAEf,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,cAAc,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,mBAAmB,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,4BAA4B,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAED,SAAgB,gBAAgB,CAC9B,QAAiB;IAEjB,YAAY,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC;AAED,SAAgB,mBAAmB,CACjC,KAAc,EACd,IAAI,GAAG,cAAc;IAErB,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,CAAC,MAAM,KAAK,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAChB,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAC7B,CAAC;QACD,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,mCAAmC,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED,SAAgB,gBAAgB,CAC9B,OAAe,EACf,WAAwB;IAExB,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjC,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3B,MAAM,IAAI,SAAS,CAAC,qDAAqD,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,QAAQ,GACZ,GAAG,CAAC,QAAQ,KAAK,WAAW;QAC5B,GAAG,CAAC,QAAQ,KAAK,WAAW;QAC5B,GAAG,CAAC,QAAQ,KAAK,KAAK;QACtB,GAAG,CAAC,QAAQ,KAAK,OAAO,CAAC;IAC3B,MAAM,YAAY,GAChB,WAAW,KAAK,uBAAW,CAAC,OAAO;QACnC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM;QAC/B,QAAQ;QACR,GAAG,CAAC,QAAQ,KAAK,OAAO,CAAC;IAE3B,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;QAC/C,MAAM,KAAK,GACT,WAAW,KAAK,uBAAW,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,wBAAwB,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,4BAA4B,CAAC,MAAoB;IAC/D,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,uBAAW,CAAC,OAAO,CAAC;IAC9D,IACE,WAAW,KAAK,uBAAW,CAAC,OAAO;QACnC,WAAW,KAAK,uBAAW,CAAC,UAAU,EACtC,CAAC;QACD,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,OAAO,GACX,MAAM,CAAC,OAAO,IAAI,uCAAuC,CAAC;IAC5D,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAEvC,IACE,MAAM,CAAC,SAAS,KAAK,SAAS;QAC9B,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;YAClC,MAAM,CAAC,SAAS,IAAI,CAAC;YACrB,MAAM,CAAC,SAAS,GAAG,sBAAc,CAAC,EACpC,CAAC;QACD,MAAM,IAAI,SAAS,CACjB,8CAA8C,sBAAc,EAAE,CAC/D,CAAC;IACJ,CAAC;IAED,IACE,MAAM,CAAC,gBAAgB,KAAK,SAAS;QACrC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC;YACzC,MAAM,CAAC,gBAAgB,GAAG,IAAI;YAC9B,MAAM,CAAC,gBAAgB,GAAG,0BAAkB,CAAC,EAC/C,CAAC;QACD,MAAM,IAAI,SAAS,CACjB,wDAAwD,0BAAkB,EAAE,CAC7E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAgB,mBAAmB,CAAC,KAAa;IAC/C,OAAO,KAAK;SACT,OAAO,CAAC,0BAA0B,EAAE,eAAe,CAAC;SACpD,OAAO,CACN,oEAAoE,EACpE,YAAY,CACb;SACA,OAAO,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,EAAE;IACF,YAAY;IACZ,cAAc;IACd,YAAY;IACZ,MAAM;IACN,MAAM;IACN,QAAQ;IACR,OAAO;IACP,cAAc;IACd,mBAAmB;IACnB,UAAU;IACV,cAAc;IACd,SAAS;IACT,QAAQ;IACR,SAAS;IACT,SAAS;IACT,eAAe;IACf,QAAQ;IACR,eAAe;IACf,UAAU;IACV,cAAc;IACd,sBAAsB;IACtB,SAAS;IACT,QAAQ;CACT,CAAC,CAAC;AAEH,SAAgB,SAAS,CAAC,KAAa;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;QAClB,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;QAClB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;QAChB,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;QACd,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ;aACxB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;aAChE,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,eAAe,CAAC;IACzB,CAAC;AACH,CAAC"}
|
package/lib/cjs/users.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type { HttpClient } from "./httpClient";
|
|
2
|
-
import type
|
|
1
|
+
import type { HttpClient } from "./httpClient.js";
|
|
2
|
+
import { Environment, type ApiUserInfo, type Credentials } from "./common.js";
|
|
3
3
|
export default class Users {
|
|
4
4
|
private client;
|
|
5
|
-
|
|
5
|
+
private environment;
|
|
6
|
+
constructor(client: HttpClient, environment?: Environment);
|
|
6
7
|
/**
|
|
7
8
|
* Used to create an API user in the sandbox target environment
|
|
8
9
|
* @param host The provider callback host
|
|
@@ -18,5 +19,6 @@ export default class Users {
|
|
|
18
19
|
* @param referenceId API user reference id (X-Reference-Id used at creation)
|
|
19
20
|
*/
|
|
20
21
|
getApiUser(referenceId: string): Promise<ApiUserInfo>;
|
|
22
|
+
private assertSandbox;
|
|
21
23
|
}
|
|
22
24
|
//# sourceMappingURL=users.d.ts.map
|
package/lib/cjs/users.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/users.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/users.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAO9E,MAAM,CAAC,OAAO,OAAO,KAAK;IACxB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,WAAW,CAAc;gBAG/B,MAAM,EAAE,UAAU,EAClB,WAAW,GAAE,WAAiC;IAMhD;;;OAGG;IACI,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiB5C;;;OAGG;IACI,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAOlD;;;OAGG;IACI,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAO5D,OAAO,CAAC,aAAa;CAKtB"}
|
package/lib/cjs/users.js
CHANGED
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
3
|
+
const common_js_1 = require("./common.js");
|
|
4
|
+
const security_js_1 = require("./security.js");
|
|
4
5
|
class Users {
|
|
5
|
-
constructor(client) {
|
|
6
|
+
constructor(client, environment = common_js_1.Environment.SANDBOX) {
|
|
6
7
|
this.client = client;
|
|
8
|
+
this.environment = environment;
|
|
7
9
|
}
|
|
8
10
|
/**
|
|
9
11
|
* Used to create an API user in the sandbox target environment
|
|
10
12
|
* @param host The provider callback host
|
|
11
13
|
*/
|
|
12
14
|
create(host) {
|
|
13
|
-
|
|
15
|
+
this.assertSandbox();
|
|
16
|
+
const safeHost = (0, security_js_1.encodeStrictPathSegment)(host, "host");
|
|
17
|
+
const userId = (0, security_js_1.generateReferenceId)();
|
|
14
18
|
return this.client
|
|
15
|
-
.post("/v1_0/apiuser", { providerCallbackHost:
|
|
19
|
+
.post("/v1_0/apiuser", { providerCallbackHost: decodeURIComponent(safeHost) }, {
|
|
16
20
|
headers: {
|
|
17
21
|
"X-Reference-Id": userId,
|
|
18
22
|
},
|
|
@@ -24,8 +28,9 @@ class Users {
|
|
|
24
28
|
* @param userId
|
|
25
29
|
*/
|
|
26
30
|
login(userId) {
|
|
31
|
+
this.assertSandbox();
|
|
27
32
|
return this.client
|
|
28
|
-
.post(`/v1_0/apiuser/${userId}/apikey`)
|
|
33
|
+
.post(`/v1_0/apiuser/${(0, security_js_1.pathUuid)(userId, "userId")}/apikey`)
|
|
29
34
|
.then((response) => response.data);
|
|
30
35
|
}
|
|
31
36
|
/**
|
|
@@ -33,10 +38,16 @@ class Users {
|
|
|
33
38
|
* @param referenceId API user reference id (X-Reference-Id used at creation)
|
|
34
39
|
*/
|
|
35
40
|
getApiUser(referenceId) {
|
|
41
|
+
this.assertSandbox();
|
|
36
42
|
return this.client
|
|
37
|
-
.get(`/v1_0/apiuser/${referenceId}`)
|
|
43
|
+
.get(`/v1_0/apiuser/${(0, security_js_1.pathUuid)(referenceId)}`)
|
|
38
44
|
.then((response) => response.data);
|
|
39
45
|
}
|
|
46
|
+
assertSandbox() {
|
|
47
|
+
if (this.environment !== common_js_1.Environment.SANDBOX) {
|
|
48
|
+
throw new Error("API user provisioning is only available in sandbox");
|
|
49
|
+
}
|
|
50
|
+
}
|
|
40
51
|
}
|
|
41
52
|
exports.default = Users;
|
|
42
53
|
//# sourceMappingURL=users.js.map
|
package/lib/cjs/users.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/users.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/users.ts"],"names":[],"mappings":";;AAEA,2CAA8E;AAC9E,+CAIuB;AAEvB,MAAqB,KAAK;IAIxB,YACE,MAAkB,EAClB,cAA2B,uBAAW,CAAC,OAAO;QAE9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,IAAY;QACxB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,IAAA,qCAAuB,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAA,iCAAmB,GAAE,CAAC;QACrC,OAAO,IAAI,CAAC,MAAM;aACf,IAAI,CACH,eAAe,EACf,EAAE,oBAAoB,EAAE,kBAAkB,CAAC,QAAQ,CAAC,EAAE,EACtD;YACE,OAAO,EAAE;gBACP,gBAAgB,EAAE,MAAM;aACzB;SACF,CACF;aACA,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,MAAc;QACzB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC,MAAM;aACf,IAAI,CAAc,iBAAiB,IAAA,sBAAQ,EAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC;aACvE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACI,UAAU,CAAC,WAAmB;QACnC,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC,MAAM;aACf,GAAG,CAAc,iBAAiB,IAAA,sBAAQ,EAAC,WAAW,CAAC,EAAE,CAAC;aAC1D,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,WAAW,KAAK,uBAAW,CAAC,OAAO,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;CACF;AA5DD,wBA4DC"}
|