@houlak/plexo-sdk 0.1.14 → 0.1.17
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/lib/handler/PlexoHandler.d.ts +5 -5
- package/lib/handler/PlexoHandler.js +27 -20
- package/lib/handler/services/evaluator.service.js +3 -3
- package/lib/lib/logger.lib.js +3 -3
- package/lib/sdk/PaymentGatewayClient.js +5 -6
- package/lib/sdk/PaymentGatewayMock.js +3 -3
- package/lib/sdk/enums/plexo-error-enum.d.ts +1 -0
- package/lib/sdk/enums/plexo-error-enum.js +1 -0
- package/lib/sdk/helpers/signature/signatureHelper.d.ts +0 -1
- package/lib/sdk/helpers/signature/signatureHelper.js +26 -53
- package/lib/sdk/mocks/mocks.js +19 -19
- package/lib/sdk/models/GenericSignedObject.d.ts +3 -3
- package/lib/sdk/models/GenericSignedObject.js +3 -3
- package/lib/sdk/models/GenericStateObject.d.ts +1 -1
- package/lib/sdk/models/GenericStateObject.js +3 -3
- package/lib/sdk/models/InstrumentCallback.d.ts +5 -5
- package/lib/sdk/models/InstrumentCallback.js +5 -5
- package/lib/sdk/models/InstrumentWithMetadata.d.ts +3 -3
- package/lib/sdk/models/InstrumentWithMetadata.js +3 -3
- package/lib/sdk/models/PaymentInstrument.d.ts +11 -11
- package/lib/sdk/models/StateObject.d.ts +2 -2
- package/lib/sdk/models/StateObject.js +2 -2
- package/lib/sdk/models/TransactionCallback.d.ts +4 -4
- package/lib/sdk/models/TransactionCallback.js +3 -3
- package/lib/utils/case.util.d.ts +4 -0
- package/lib/utils/case.util.js +43 -0
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.js +5 -0
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Authorization, BaseServerResponse, CancelRequest, ClientSignedResponse, Commerce, CommerceIdRequest, CommerceIssuerIdRequest, CommerceRequest, DeleteInstrumentRequest, ExpressCheckoutRequest, InstrumentCallback, IssuerData, IssuerInfo, IssuerProcessor, PaymentRequest,
|
|
1
|
+
import { Authorization, BaseServerResponse, CancelRequest, ClientSignedResponse, Commerce, CommerceIdRequest, CommerceIssuerIdRequest, CommerceRequest, DeleteInstrumentRequest, ExpressCheckoutRequest, InstrumentCallback, IssuerData, IssuerInfo, IssuerProcessor, PaymentRequest, Session, Transaction, TransactionCallback } from '../sdk/index';
|
|
2
2
|
import { BaseResponse } from './types/BaseResponse';
|
|
3
3
|
export declare const PlexoHandler: {
|
|
4
4
|
AddCommerce: (commerceRequest: CommerceRequest) => Promise<BaseResponse<Commerce>>;
|
|
@@ -14,8 +14,8 @@ export declare const PlexoHandler: {
|
|
|
14
14
|
Cancel: (cancellation: CancelRequest) => Promise<BaseResponse<Transaction>>;
|
|
15
15
|
ExpressCheckout: (expressCheckout: ExpressCheckoutRequest) => Promise<BaseResponse<Session>>;
|
|
16
16
|
Purchase: (purchase: PaymentRequest) => Promise<BaseResponse<Transaction>>;
|
|
17
|
-
UnwrapInstrumentCallback: (instrumentCallback:
|
|
18
|
-
UnwrapTransactionCallback: (transactionCallback:
|
|
19
|
-
SignInstrumentCallback: (instrumentCallback:
|
|
20
|
-
SignTransactionCallback: (transactionCallback:
|
|
17
|
+
UnwrapInstrumentCallback: (instrumentCallback: any) => Promise<BaseResponse<InstrumentCallback>>;
|
|
18
|
+
UnwrapTransactionCallback: (transactionCallback: any) => Promise<BaseResponse<TransactionCallback>>;
|
|
19
|
+
SignInstrumentCallback: (instrumentCallback: any) => Promise<BaseResponse<ClientSignedResponse>>;
|
|
20
|
+
SignTransactionCallback: (transactionCallback: any) => Promise<BaseResponse<ClientSignedResponse>>;
|
|
21
21
|
};
|
|
@@ -41,6 +41,7 @@ var index_1 = require("../sdk/index");
|
|
|
41
41
|
var evaluator_service_1 = require("./services/evaluator.service");
|
|
42
42
|
var config_1 = require("../config/config");
|
|
43
43
|
var PaymentGatewayMock_1 = require("../sdk/PaymentGatewayMock");
|
|
44
|
+
var utils_1 = require("../utils");
|
|
44
45
|
var isTesting = config_1.config.env === 'TEST';
|
|
45
46
|
var paymentGatewayClient = isTesting
|
|
46
47
|
? new PaymentGatewayMock_1.PaymentGatewayMock()
|
|
@@ -202,34 +203,38 @@ var Purchase = function (purchase) { return __awaiter(void 0, void 0, void 0, fu
|
|
|
202
203
|
});
|
|
203
204
|
}); };
|
|
204
205
|
var UnwrapInstrumentCallback = function (instrumentCallback) { return __awaiter(void 0, void 0, void 0, function () {
|
|
205
|
-
var instrumentCallbackResponse;
|
|
206
|
+
var instrumentCallbackCamelCase, instrumentCallbackResponse;
|
|
206
207
|
return __generator(this, function (_a) {
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
208
|
+
switch (_a.label) {
|
|
209
|
+
case 0:
|
|
210
|
+
instrumentCallbackCamelCase = utils_1.caseUtils.toCamelKeys(instrumentCallback);
|
|
211
|
+
return [4 /*yield*/, paymentGatewayClient.UnwrapInstrumentCallbackAsync(instrumentCallbackCamelCase)];
|
|
212
|
+
case 1:
|
|
213
|
+
instrumentCallbackResponse = _a.sent();
|
|
214
|
+
return [2 /*return*/, evaluator_service_1.Evaluator.genericEvaluator(instrumentCallback, instrumentCallbackResponse)];
|
|
215
|
+
}
|
|
214
216
|
});
|
|
215
217
|
}); };
|
|
216
218
|
var UnwrapTransactionCallback = function (transactionCallback) { return __awaiter(void 0, void 0, void 0, function () {
|
|
217
|
-
var transactionCallbackResponse;
|
|
219
|
+
var transactionCallbackCamelCase, transactionCallbackResponse;
|
|
218
220
|
return __generator(this, function (_a) {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
221
|
+
switch (_a.label) {
|
|
222
|
+
case 0:
|
|
223
|
+
transactionCallbackCamelCase = utils_1.caseUtils.toCamelKeys(transactionCallback);
|
|
224
|
+
return [4 /*yield*/, paymentGatewayClient.UnwrapTransactionCallbackAsync(transactionCallbackCamelCase)];
|
|
225
|
+
case 1:
|
|
226
|
+
transactionCallbackResponse = _a.sent();
|
|
227
|
+
return [2 /*return*/, evaluator_service_1.Evaluator.genericEvaluator(transactionCallback, transactionCallbackResponse)];
|
|
228
|
+
}
|
|
226
229
|
});
|
|
227
230
|
}); };
|
|
228
231
|
var SignInstrumentCallback = function (instrumentCallback) { return __awaiter(void 0, void 0, void 0, function () {
|
|
229
|
-
var signInstrumentCallbackResponse;
|
|
232
|
+
var instrumentCallbackCamelCase, signInstrumentCallbackResponse;
|
|
230
233
|
return __generator(this, function (_a) {
|
|
231
234
|
switch (_a.label) {
|
|
232
|
-
case 0:
|
|
235
|
+
case 0:
|
|
236
|
+
instrumentCallbackCamelCase = utils_1.caseUtils.toCamelKeys(instrumentCallback);
|
|
237
|
+
return [4 /*yield*/, paymentGatewayClient.SignInstrumentCallback(instrumentCallbackCamelCase)];
|
|
233
238
|
case 1:
|
|
234
239
|
signInstrumentCallbackResponse = _a.sent();
|
|
235
240
|
return [2 /*return*/, evaluator_service_1.Evaluator.genericEvaluator(instrumentCallback, signInstrumentCallbackResponse)];
|
|
@@ -237,10 +242,12 @@ var SignInstrumentCallback = function (instrumentCallback) { return __awaiter(vo
|
|
|
237
242
|
});
|
|
238
243
|
}); };
|
|
239
244
|
var SignTransactionCallback = function (transactionCallback) { return __awaiter(void 0, void 0, void 0, function () {
|
|
240
|
-
var signTransactionCallbackResponse;
|
|
245
|
+
var transactionCallbackCamelCase, signTransactionCallbackResponse;
|
|
241
246
|
return __generator(this, function (_a) {
|
|
242
247
|
switch (_a.label) {
|
|
243
|
-
case 0:
|
|
248
|
+
case 0:
|
|
249
|
+
transactionCallbackCamelCase = utils_1.caseUtils.toCamelKeys(transactionCallback);
|
|
250
|
+
return [4 /*yield*/, paymentGatewayClient.SignTransactionCallback(transactionCallbackCamelCase)];
|
|
244
251
|
case 1:
|
|
245
252
|
signTransactionCallbackResponse = _a.sent();
|
|
246
253
|
return [2 /*return*/, evaluator_service_1.Evaluator.genericEvaluator(transactionCallback, signTransactionCallbackResponse)];
|
|
@@ -105,14 +105,14 @@ var transactionEvaluator = function (request, response, transactionName, transac
|
|
|
105
105
|
// wether or not we want to log successful transactions 🤔
|
|
106
106
|
return new BaseResponse_1.BaseResponse(undefined, true, 'Success', response.response);
|
|
107
107
|
}
|
|
108
|
-
logger_lib_1.default.
|
|
108
|
+
logger_lib_1.default.info({
|
|
109
109
|
transactionName: transactionName,
|
|
110
110
|
plexoOrTransactionError: plexoOrTransactionError,
|
|
111
111
|
errorCode: errorCode,
|
|
112
112
|
errorMessage: errorMessage,
|
|
113
113
|
});
|
|
114
|
-
logger_lib_1.default.
|
|
115
|
-
logger_lib_1.default.
|
|
114
|
+
logger_lib_1.default.info({ request: request }, 'Request --> ');
|
|
115
|
+
logger_lib_1.default.info({ response: response }, 'Response --> ');
|
|
116
116
|
return new BaseResponse_1.BaseResponse(errorCode, false, errorMessage, response.response);
|
|
117
117
|
};
|
|
118
118
|
exports.Evaluator = { genericEvaluator: genericEvaluator, transactionEvaluator: transactionEvaluator };
|
package/lib/lib/logger.lib.js
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
var pino_1 = require("pino");
|
|
4
4
|
var config_1 = require("../config/config");
|
|
5
|
-
var transport =
|
|
5
|
+
var transport = null;
|
|
6
6
|
if (['LOCAL', 'TEST'].includes(config_1.config.env)) {
|
|
7
7
|
transport = {
|
|
8
8
|
target: 'pino-pretty',
|
|
9
9
|
options: {
|
|
10
|
-
colorize: true
|
|
11
|
-
}
|
|
10
|
+
colorize: true,
|
|
11
|
+
},
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
14
|
var logger = (0, pino_1.default)({
|
|
@@ -52,6 +52,7 @@ var axios_1 = require("axios");
|
|
|
52
52
|
var logger_lib_1 = require("../lib/logger.lib");
|
|
53
53
|
var config_1 = require("../config/config");
|
|
54
54
|
var signatureHelper_1 = require("./helpers/signature/signatureHelper");
|
|
55
|
+
var utils_1 = require("../utils");
|
|
55
56
|
var client = axios_1.default.create({
|
|
56
57
|
baseURL: config_1.config.plexoUrl,
|
|
57
58
|
});
|
|
@@ -66,7 +67,7 @@ var requestToPlexo = function (endpoint, request) { return __awaiter(void 0, voi
|
|
|
66
67
|
request: request,
|
|
67
68
|
};
|
|
68
69
|
stateObject = {
|
|
69
|
-
|
|
70
|
+
fingerprint: '',
|
|
70
71
|
utcUnixTimeExpiration: Date.parse(new Date().toString()),
|
|
71
72
|
object: object,
|
|
72
73
|
};
|
|
@@ -79,7 +80,7 @@ var requestToPlexo = function (endpoint, request) { return __awaiter(void 0, voi
|
|
|
79
80
|
case 2:
|
|
80
81
|
data = (_a.sent()).data;
|
|
81
82
|
logger_lib_1.default.debug({ data: data });
|
|
82
|
-
return [2 /*return*/,
|
|
83
|
+
return [2 /*return*/, utils_1.caseUtils.toCamelKeys(data.Object.Object)];
|
|
83
84
|
case 3:
|
|
84
85
|
err_1 = _a.sent();
|
|
85
86
|
logger_lib_1.default.error({ err: err_1 });
|
|
@@ -326,7 +327,7 @@ var PaymentGatewayClient = /** @class */ (function () {
|
|
|
326
327
|
var verify;
|
|
327
328
|
return __generator(this, function (_a) {
|
|
328
329
|
switch (_a.label) {
|
|
329
|
-
case 0: return [4 /*yield*/, signatureHelper_1.SignatureHelper.getPlexoSignature(serverSignedInstrumentCallback.
|
|
330
|
+
case 0: return [4 /*yield*/, signatureHelper_1.SignatureHelper.getPlexoSignature(serverSignedInstrumentCallback.object.fingerprint, serverSignedInstrumentCallback)];
|
|
330
331
|
case 1:
|
|
331
332
|
verify = _a.sent();
|
|
332
333
|
return [2 /*return*/, verify];
|
|
@@ -339,9 +340,7 @@ var PaymentGatewayClient = /** @class */ (function () {
|
|
|
339
340
|
var verify;
|
|
340
341
|
return __generator(this, function (_a) {
|
|
341
342
|
switch (_a.label) {
|
|
342
|
-
case 0:
|
|
343
|
-
logger_lib_1.default.debug("SERVER SIGNED CALLBACK --> ".concat(JSON.stringify(serverSignedTransactionCallback)));
|
|
344
|
-
return [4 /*yield*/, signatureHelper_1.SignatureHelper.getPlexoSignature(serverSignedTransactionCallback.Object.Fingerprint, serverSignedTransactionCallback)];
|
|
343
|
+
case 0: return [4 /*yield*/, signatureHelper_1.SignatureHelper.getPlexoSignature(serverSignedTransactionCallback.object.fingerprint, serverSignedTransactionCallback)];
|
|
345
344
|
case 1:
|
|
346
345
|
verify = _a.sent();
|
|
347
346
|
return [2 /*return*/, verify];
|
|
@@ -276,7 +276,7 @@ var PaymentGatewayMock = /** @class */ (function () {
|
|
|
276
276
|
return __generator(this, function (_a) {
|
|
277
277
|
return [2 /*return*/, {
|
|
278
278
|
resultCode: IndexSDK_1.ResultCodes.Ok,
|
|
279
|
-
response: __assign(__assign({}, mocks_1.mocks.paymentInstrumentMock), {
|
|
279
|
+
response: __assign(__assign({}, mocks_1.mocks.paymentInstrumentMock), { issuer: __assign(__assign({}, mocks_1.mocks.paymentInstrumentMock.issuer), { issuerId: request.issuerId }) }),
|
|
280
280
|
}];
|
|
281
281
|
});
|
|
282
282
|
});
|
|
@@ -296,7 +296,7 @@ var PaymentGatewayMock = /** @class */ (function () {
|
|
|
296
296
|
return __generator(this, function (_a) {
|
|
297
297
|
return [2 /*return*/, {
|
|
298
298
|
resultCode: IndexSDK_1.ResultCodes.Ok,
|
|
299
|
-
response: __assign(__assign({}, mocks_1.mocks.instrumentCallbackMock), serverSignedInstrumentCallback.
|
|
299
|
+
response: __assign(__assign({}, mocks_1.mocks.instrumentCallbackMock), serverSignedInstrumentCallback.object),
|
|
300
300
|
}];
|
|
301
301
|
});
|
|
302
302
|
});
|
|
@@ -306,7 +306,7 @@ var PaymentGatewayMock = /** @class */ (function () {
|
|
|
306
306
|
return __generator(this, function (_a) {
|
|
307
307
|
return [2 /*return*/, {
|
|
308
308
|
resultCode: IndexSDK_1.ResultCodes.Ok,
|
|
309
|
-
response: __assign(__assign({}, mocks_1.mocks.transactionCallbackMock), serverSignedTransactionCallback.
|
|
309
|
+
response: __assign(__assign({}, mocks_1.mocks.transactionCallbackMock), serverSignedTransactionCallback.object),
|
|
310
310
|
}];
|
|
311
311
|
});
|
|
312
312
|
});
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.PlexoErrorEnum = void 0;
|
|
4
4
|
var PlexoErrorEnum;
|
|
5
5
|
(function (PlexoErrorEnum) {
|
|
6
|
+
PlexoErrorEnum[PlexoErrorEnum["CommerceAlreadyExits"] = 25] = "CommerceAlreadyExits";
|
|
6
7
|
PlexoErrorEnum[PlexoErrorEnum["ExceptionHandlingTransaction"] = 1200] = "ExceptionHandlingTransaction";
|
|
7
8
|
PlexoErrorEnum[PlexoErrorEnum["PlexoAuthorizationError"] = 1201] = "PlexoAuthorizationError";
|
|
8
9
|
PlexoErrorEnum[PlexoErrorEnum["InstrumentNotFound"] = 1202] = "InstrumentNotFound";
|
|
@@ -6,5 +6,4 @@ export declare const SignatureHelper: {
|
|
|
6
6
|
getSignatureFromPlexo: <T extends object>(objectToSign: GenericStateObject<T>) => Promise<GenericSignedObject<T>>;
|
|
7
7
|
getSignatureFromCallback: (response: ServerResponse<InstrumentCallback | TransactionCallback>) => Promise<ServerResponse<ClientSignedResponse>>;
|
|
8
8
|
getPlexoSignature: <T_1 extends object>(fingerprint: string, response: GenericSignedObject<T_1>) => Promise<ServerResponse<T_1>>;
|
|
9
|
-
toCamelKeys: <T_2 extends object>(object: T_2) => T_2;
|
|
10
9
|
};
|
|
@@ -41,53 +41,20 @@ var axios_1 = require("axios");
|
|
|
41
41
|
var fs = require("fs");
|
|
42
42
|
var pem = require("pem");
|
|
43
43
|
var crypto_1 = require("crypto");
|
|
44
|
-
var js_convert_case_1 = require("js-convert-case");
|
|
45
44
|
var util_1 = require("util");
|
|
46
45
|
var logger_lib_1 = require("../../../lib/logger.lib");
|
|
47
46
|
var config_1 = require("../../../config/config");
|
|
48
47
|
var __1 = require("../..");
|
|
48
|
+
var utils_1 = require("../../../utils");
|
|
49
49
|
var stringifyWithFloats_1 = require("./stringifyWithFloats");
|
|
50
50
|
var client = axios_1.default.create({
|
|
51
51
|
baseURL: config_1.config.plexoUrl,
|
|
52
52
|
});
|
|
53
|
-
var specialWords = [
|
|
54
|
-
{ word: 'UtcUnixTimeExpiration', substitute: 'UTCUnixTimeExpiration' },
|
|
55
|
-
{ word: 'VatAmount', substitute: 'VATAmount' },
|
|
56
|
-
];
|
|
57
53
|
var canonizeJson = function (object) {
|
|
58
54
|
var cleanObject = deleteObjectUndefined(object);
|
|
59
55
|
return sort(cleanObject);
|
|
60
56
|
};
|
|
61
57
|
exports.canonizeJson = canonizeJson;
|
|
62
|
-
var toCamelKeys = function (object) {
|
|
63
|
-
var parsedObject = (0, js_convert_case_1.camelKeys)(object, { recursive: true, recursiveInArray: true });
|
|
64
|
-
return parsedObject;
|
|
65
|
-
};
|
|
66
|
-
function substituteWordRecursively(theParsedObject, word, substitute) {
|
|
67
|
-
var deleteObject = function (obj, key) {
|
|
68
|
-
delete obj[key];
|
|
69
|
-
};
|
|
70
|
-
if (typeof theParsedObject === 'object') {
|
|
71
|
-
Object.keys(theParsedObject).map(function (key) {
|
|
72
|
-
if (key === word) {
|
|
73
|
-
Object.defineProperty(theParsedObject, substitute, Object.getOwnPropertyDescriptor(theParsedObject, word) || '');
|
|
74
|
-
deleteObject(theParsedObject, word);
|
|
75
|
-
}
|
|
76
|
-
if (typeof theParsedObject[key] === 'object') {
|
|
77
|
-
substituteWordRecursively(theParsedObject[key], word, substitute);
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
var toPascalKeys = function (object) {
|
|
83
|
-
var parsedObject = (0, js_convert_case_1.pascalKeys)(object, { recursive: true, recursiveInArray: true });
|
|
84
|
-
specialWords.forEach(function (specialWord) {
|
|
85
|
-
if (JSON.stringify(parsedObject).includes(specialWord.word)) {
|
|
86
|
-
substituteWordRecursively(parsedObject, specialWord.word, specialWord.substitute);
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
return parsedObject;
|
|
90
|
-
};
|
|
91
58
|
var sort = function (object) {
|
|
92
59
|
if (Array.isArray(object)) {
|
|
93
60
|
var newArray_1 = [];
|
|
@@ -197,16 +164,16 @@ var getSignatureFromPlexo = function (objectToSign) { return __awaiter(void 0, v
|
|
|
197
164
|
.map(function (line) { return line.trim(); })
|
|
198
165
|
.join('');
|
|
199
166
|
signedObject = {
|
|
200
|
-
|
|
201
|
-
|
|
167
|
+
object: objectToSign,
|
|
168
|
+
signature: '',
|
|
202
169
|
};
|
|
203
170
|
thumbnail = getFingerprint(stringifiedCert, 'sha1', 'base64', 'hex').toUpperCase();
|
|
204
|
-
objectToSign.
|
|
171
|
+
objectToSign.fingerprint = thumbnail;
|
|
205
172
|
canonizedObject = (0, exports.canonizeJson)(objectToSign);
|
|
206
|
-
objectoToPascalKeys = toPascalKeys(canonizedObject);
|
|
173
|
+
objectoToPascalKeys = utils_1.caseUtils.toPascalKeys(canonizedObject);
|
|
207
174
|
signKey = generateSignature(objectoToPascalKeys, privateKey);
|
|
208
|
-
signedObject.
|
|
209
|
-
signedObject.
|
|
175
|
+
signedObject.signature = signKey;
|
|
176
|
+
signedObject.object = canonizedObject;
|
|
210
177
|
return [2 /*return*/, signedObject];
|
|
211
178
|
}
|
|
212
179
|
});
|
|
@@ -217,11 +184,11 @@ var getSignatureFromCallback = function (response) { return __awaiter(void 0, vo
|
|
|
217
184
|
switch (_a.label) {
|
|
218
185
|
case 0:
|
|
219
186
|
object = {
|
|
220
|
-
client: response.response.
|
|
187
|
+
client: response.response.client,
|
|
221
188
|
request: response,
|
|
222
189
|
};
|
|
223
190
|
stateObject = {
|
|
224
|
-
|
|
191
|
+
fingerprint: '',
|
|
225
192
|
utcUnixTimeExpiration: Date.parse(new Date().toString()),
|
|
226
193
|
object: object,
|
|
227
194
|
};
|
|
@@ -230,15 +197,15 @@ var getSignatureFromCallback = function (response) { return __awaiter(void 0, vo
|
|
|
230
197
|
objectSignature = _a.sent();
|
|
231
198
|
serverResponse = {
|
|
232
199
|
response: {
|
|
233
|
-
|
|
200
|
+
object: {
|
|
234
201
|
object: {
|
|
235
|
-
client: objectSignature.
|
|
202
|
+
client: objectSignature.object.object.client,
|
|
236
203
|
resultCode: response.resultCode,
|
|
237
204
|
},
|
|
238
|
-
|
|
239
|
-
utcUnixTimeExpiration: objectSignature.
|
|
205
|
+
fingerprint: objectSignature.object.fingerprint,
|
|
206
|
+
utcUnixTimeExpiration: objectSignature.object.utcUnixTimeExpiration,
|
|
240
207
|
},
|
|
241
|
-
|
|
208
|
+
signature: objectSignature.signature,
|
|
242
209
|
},
|
|
243
210
|
resultCode: response.resultCode,
|
|
244
211
|
errorMessage: response.errorMessage,
|
|
@@ -263,7 +230,7 @@ var getPlexoKey = function (fingerprint) { return __awaiter(void 0, void 0, void
|
|
|
263
230
|
});
|
|
264
231
|
}); };
|
|
265
232
|
var getPlexoSignature = function (fingerprint, response) { return __awaiter(void 0, void 0, void 0, function () {
|
|
266
|
-
var serverResponse, plexoResponse, err_1, key, objectBuffer, verifySignature;
|
|
233
|
+
var serverResponse, plexoResponse, err_1, key, objectInPascalCase, objectBuffer, verifySignature;
|
|
267
234
|
return __generator(this, function (_a) {
|
|
268
235
|
switch (_a.label) {
|
|
269
236
|
case 0:
|
|
@@ -276,19 +243,26 @@ var getPlexoSignature = function (fingerprint, response) { return __awaiter(void
|
|
|
276
243
|
err_1 = _a.sent();
|
|
277
244
|
logger_lib_1.default.error({ err: err_1 }, 'Error getting plexo certificate');
|
|
278
245
|
serverResponse = {
|
|
279
|
-
response: response.
|
|
246
|
+
response: response.object.object,
|
|
280
247
|
resultCode: __1.ResultCodes.InvalidFingerprint,
|
|
281
248
|
errorMessage: err_1,
|
|
282
249
|
};
|
|
283
250
|
return [2 /*return*/, serverResponse];
|
|
284
251
|
case 3:
|
|
252
|
+
logger_lib_1.default.debug({
|
|
253
|
+
plexoResponse: plexoResponse
|
|
254
|
+
});
|
|
285
255
|
key = "-----BEGIN CERTIFICATE-----\n".concat(plexoResponse.Object.Object.Response.Key, "\n-----END CERTIFICATE-----");
|
|
286
|
-
|
|
256
|
+
objectInPascalCase = utils_1.caseUtils.toPascalKeys((0, exports.canonizeJson)(response.object));
|
|
257
|
+
objectBuffer = new util_1.TextEncoder().encode((0, stringifyWithFloats_1.stringifyAmountsWithFloats)(objectInPascalCase));
|
|
287
258
|
verifySignature = (0, crypto_1.createVerify)('SHA512')
|
|
288
259
|
.update(objectBuffer)
|
|
289
|
-
.verify(key, response.
|
|
260
|
+
.verify(key, response.signature);
|
|
261
|
+
logger_lib_1.default.debug({
|
|
262
|
+
verifySignature: verifySignature,
|
|
263
|
+
});
|
|
290
264
|
serverResponse = {
|
|
291
|
-
response: response.
|
|
265
|
+
response: response.object.object,
|
|
292
266
|
resultCode: verifySignature ? __1.ResultCodes.Ok : __1.ResultCodes.InvalidSignature,
|
|
293
267
|
errorMessage: verifySignature ? "Signature do not match" : 'Success',
|
|
294
268
|
};
|
|
@@ -301,5 +275,4 @@ exports.SignatureHelper = {
|
|
|
301
275
|
getSignatureFromPlexo: getSignatureFromPlexo,
|
|
302
276
|
getSignatureFromCallback: getSignatureFromCallback,
|
|
303
277
|
getPlexoSignature: getPlexoSignature,
|
|
304
|
-
toCamelKeys: toCamelKeys,
|
|
305
278
|
};
|
package/lib/sdk/mocks/mocks.js
CHANGED
|
@@ -49,16 +49,16 @@ var issuerMock = {
|
|
|
49
49
|
fields: [fieldMock],
|
|
50
50
|
};
|
|
51
51
|
var paymentInstrumentMock = {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
52
|
+
instrumentToken: 'token',
|
|
53
|
+
name: 'mockedInstrument',
|
|
54
|
+
issuer: issuerMock,
|
|
55
|
+
supportedCurrencies: [currencyMock],
|
|
56
|
+
status: IndexSDK_1.CardStatus.Ok,
|
|
57
|
+
instrumentExpirationUTC: 1919276061,
|
|
58
|
+
creditLimits: [amountLimitMock],
|
|
59
|
+
additionalRequirements: [timeLimitMock],
|
|
60
|
+
instrumentInformation: null,
|
|
61
|
+
sessionCreationId: 'MockedId',
|
|
62
62
|
};
|
|
63
63
|
var financialInclusionMock = {
|
|
64
64
|
isApplied: true,
|
|
@@ -138,9 +138,9 @@ var issuerProcessorMock = {
|
|
|
138
138
|
paymentProcessors: [paymentProcessorMock],
|
|
139
139
|
};
|
|
140
140
|
var clientSignedResponseMock = {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
141
|
+
signature: 'signature',
|
|
142
|
+
object: {
|
|
143
|
+
fingerprint: 'fingerprint',
|
|
144
144
|
utcUnixTimeExpiration: 1919276061,
|
|
145
145
|
object: {
|
|
146
146
|
client: 'PlexoMock',
|
|
@@ -148,13 +148,13 @@ var clientSignedResponseMock = {
|
|
|
148
148
|
},
|
|
149
149
|
},
|
|
150
150
|
};
|
|
151
|
-
var transactionCallbackMock = __assign(__assign({}, transactionMock), {
|
|
151
|
+
var transactionCallbackMock = __assign(__assign({}, transactionMock), { client: 'PlexoMock' });
|
|
152
152
|
var instrumentCallbackMock = {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
153
|
+
action: IndexSDK_1.ActionType.RegisterInstrument,
|
|
154
|
+
client: 'PlexoMock',
|
|
155
|
+
sessionId: (0, crypto_1.randomUUID)(),
|
|
156
|
+
optionalMetadata: 'metadata',
|
|
157
|
+
paymentInstrument: paymentInstrumentMock,
|
|
158
158
|
};
|
|
159
159
|
exports.mocks = {
|
|
160
160
|
currencyMock: currencyMock,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { GenericStateObject } from './GenericStateObject';
|
|
2
2
|
export declare class GenericSignedObject<T> {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
constructor(
|
|
3
|
+
object: GenericStateObject<T>;
|
|
4
|
+
signature: string;
|
|
5
|
+
constructor(object: GenericStateObject<T>, signature: string);
|
|
6
6
|
}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.GenericSignedObject = void 0;
|
|
4
4
|
var GenericSignedObject = /** @class */ (function () {
|
|
5
|
-
function GenericSignedObject(
|
|
6
|
-
this.
|
|
7
|
-
this.
|
|
5
|
+
function GenericSignedObject(object, signature) {
|
|
6
|
+
this.object = object;
|
|
7
|
+
this.signature = signature;
|
|
8
8
|
}
|
|
9
9
|
return GenericSignedObject;
|
|
10
10
|
}());
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { StateObject } from './StateObject';
|
|
2
2
|
export declare class GenericStateObject<T> extends StateObject {
|
|
3
3
|
object: T;
|
|
4
|
-
constructor(
|
|
4
|
+
constructor(object: T, fingerprint: string, utcUnixTimeExpiration: number);
|
|
5
5
|
}
|
|
@@ -19,9 +19,9 @@ exports.GenericStateObject = void 0;
|
|
|
19
19
|
var StateObject_1 = require("./StateObject");
|
|
20
20
|
var GenericStateObject = /** @class */ (function (_super) {
|
|
21
21
|
__extends(GenericStateObject, _super);
|
|
22
|
-
function GenericStateObject(
|
|
23
|
-
var _this = _super.call(this,
|
|
24
|
-
_this.object =
|
|
22
|
+
function GenericStateObject(object, fingerprint, utcUnixTimeExpiration) {
|
|
23
|
+
var _this = _super.call(this, fingerprint, utcUnixTimeExpiration) || this;
|
|
24
|
+
_this.object = object;
|
|
25
25
|
return _this;
|
|
26
26
|
}
|
|
27
27
|
return GenericStateObject;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { PaymentInstrument
|
|
1
|
+
import { PaymentInstrument } from '..';
|
|
2
2
|
import { ActionType } from './ActionType';
|
|
3
3
|
import { InstrumentWithMetadata } from './InstrumentWithMetadata';
|
|
4
4
|
export declare class InstrumentCallback extends InstrumentWithMetadata {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
constructor(
|
|
5
|
+
sessionId: string;
|
|
6
|
+
client: string;
|
|
7
|
+
action: ActionType;
|
|
8
|
+
constructor(sessionId: string, client: string, action: ActionType, paymentInstrument: PaymentInstrument, optionalMetadata: string);
|
|
9
9
|
}
|
|
@@ -19,11 +19,11 @@ exports.InstrumentCallback = void 0;
|
|
|
19
19
|
var InstrumentWithMetadata_1 = require("./InstrumentWithMetadata");
|
|
20
20
|
var InstrumentCallback = /** @class */ (function (_super) {
|
|
21
21
|
__extends(InstrumentCallback, _super);
|
|
22
|
-
function InstrumentCallback(
|
|
23
|
-
var _this = _super.call(this,
|
|
24
|
-
_this.
|
|
25
|
-
_this.
|
|
26
|
-
_this.
|
|
22
|
+
function InstrumentCallback(sessionId, client, action, paymentInstrument, optionalMetadata) {
|
|
23
|
+
var _this = _super.call(this, paymentInstrument, optionalMetadata) || this;
|
|
24
|
+
_this.sessionId = sessionId;
|
|
25
|
+
_this.client = client;
|
|
26
|
+
_this.action = action;
|
|
27
27
|
return _this;
|
|
28
28
|
}
|
|
29
29
|
return InstrumentCallback;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PaymentInstrument } from './PaymentInstrument';
|
|
2
2
|
export declare class InstrumentWithMetadata {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
constructor(
|
|
3
|
+
paymentInstrument: PaymentInstrument;
|
|
4
|
+
optionalMetadata: string;
|
|
5
|
+
constructor(paymentInstrument: PaymentInstrument, optionalMetadata: string);
|
|
6
6
|
}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.InstrumentWithMetadata = void 0;
|
|
4
4
|
var InstrumentWithMetadata = /** @class */ (function () {
|
|
5
|
-
function InstrumentWithMetadata(
|
|
6
|
-
this.
|
|
7
|
-
this.
|
|
5
|
+
function InstrumentWithMetadata(paymentInstrument, optionalMetadata) {
|
|
6
|
+
this.paymentInstrument = paymentInstrument;
|
|
7
|
+
this.optionalMetadata = optionalMetadata;
|
|
8
8
|
}
|
|
9
9
|
return InstrumentWithMetadata;
|
|
10
10
|
}());
|
|
@@ -4,15 +4,15 @@ import { Currency } from './Currency';
|
|
|
4
4
|
import { IssuerInfo } from './IssuerInfo';
|
|
5
5
|
import { TimeLimit } from './TimeLimit';
|
|
6
6
|
export declare type PaymentInstrument = {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
7
|
+
instrumentToken: string;
|
|
8
|
+
name: string;
|
|
9
|
+
issuer: IssuerInfo;
|
|
10
|
+
supportedCurrencies: Currency[];
|
|
11
|
+
status: CardStatus;
|
|
12
|
+
instrumentExpirationUTC: number;
|
|
13
|
+
anonInstrumentUsageTimeLimit?: number;
|
|
14
|
+
creditLimits: AmountLimit[];
|
|
15
|
+
additionalRequirements: TimeLimit[];
|
|
16
|
+
instrumentInformation: any;
|
|
17
|
+
sessionCreationId: string;
|
|
18
18
|
};
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.StateObject = void 0;
|
|
4
4
|
var StateObject = /** @class */ (function () {
|
|
5
|
-
function StateObject(
|
|
6
|
-
this.
|
|
5
|
+
function StateObject(fingerprint, utcUnixTimeExpiration) {
|
|
6
|
+
this.fingerprint = fingerprint;
|
|
7
7
|
this.utcUnixTimeExpiration = utcUnixTimeExpiration;
|
|
8
8
|
}
|
|
9
9
|
return StateObject;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Commerce
|
|
2
|
-
import { PaymentCode
|
|
1
|
+
import { Commerce, Currency, FinancialInclusionResult, IssuerInfo, TransactionType } from '..';
|
|
2
|
+
import { PaymentCode } from './CodeAction';
|
|
3
3
|
import { Transaction } from './Transaction';
|
|
4
4
|
export declare class TransactionCallback extends Transaction {
|
|
5
|
-
|
|
6
|
-
constructor(
|
|
5
|
+
client: string;
|
|
6
|
+
constructor(client: string, transactionId: string, commerce: Commerce, instrumentToken: string, instrumentName: string, issuer: IssuerInfo, amount: number, installments: number, currency: Currency, isAnonymous: boolean, currentState: TransactionType, invoiceNumber: string, financialInclusion: FinancialInclusionResult, transactions: any, fieldInformation: any, isAsyncPayment: boolean, paymentCode: PaymentCode, utcUnixTimeExpiration: number);
|
|
7
7
|
}
|
|
@@ -19,9 +19,9 @@ exports.TransactionCallback = void 0;
|
|
|
19
19
|
var Transaction_1 = require("./Transaction");
|
|
20
20
|
var TransactionCallback = /** @class */ (function (_super) {
|
|
21
21
|
__extends(TransactionCallback, _super);
|
|
22
|
-
function TransactionCallback(
|
|
23
|
-
var _this = _super.call(this,
|
|
24
|
-
_this.
|
|
22
|
+
function TransactionCallback(client, transactionId, commerce, instrumentToken, instrumentName, issuer, amount, installments, currency, isAnonymous, currentState, invoiceNumber, financialInclusion, transactions, fieldInformation, isAsyncPayment, paymentCode, utcUnixTimeExpiration) {
|
|
23
|
+
var _this = _super.call(this, transactionId, commerce, instrumentToken, instrumentName, issuer, amount, installments, currency, isAnonymous, currentState, invoiceNumber, financialInclusion, transactions, fieldInformation, isAsyncPayment, paymentCode, utcUnixTimeExpiration) || this;
|
|
24
|
+
_this.client = client;
|
|
25
25
|
return _this;
|
|
26
26
|
}
|
|
27
27
|
return TransactionCallback;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.caseUtils = void 0;
|
|
4
|
+
var js_convert_case_1 = require("js-convert-case");
|
|
5
|
+
var specialWords = [
|
|
6
|
+
{ word: 'UtcUnixTimeExpiration', substitute: 'UTCUnixTimeExpiration' },
|
|
7
|
+
{ word: 'UtcunixTimeExpiration', substitute: 'UTCUnixTimeExpiration' },
|
|
8
|
+
{ word: 'VatAmount', substitute: 'VATAmount' },
|
|
9
|
+
{ word: 'InstrumentExpirationUtc', substitute: 'InstrumentExpirationUTC' },
|
|
10
|
+
];
|
|
11
|
+
var toCamelKeys = function (object) {
|
|
12
|
+
var parsedObject = (0, js_convert_case_1.camelKeys)(object, { recursive: true, recursiveInArray: true });
|
|
13
|
+
return parsedObject;
|
|
14
|
+
};
|
|
15
|
+
var substituteWordRecursively = function (theParsedObject, word, substitute) {
|
|
16
|
+
var deleteObject = function (obj, key) {
|
|
17
|
+
delete obj[key];
|
|
18
|
+
};
|
|
19
|
+
if (typeof theParsedObject === 'object') {
|
|
20
|
+
Object.keys(theParsedObject).map(function (key) {
|
|
21
|
+
if (key === word) {
|
|
22
|
+
Object.defineProperty(theParsedObject, substitute, Object.getOwnPropertyDescriptor(theParsedObject, word) || '');
|
|
23
|
+
deleteObject(theParsedObject, word);
|
|
24
|
+
}
|
|
25
|
+
if (typeof theParsedObject[key] === 'object') {
|
|
26
|
+
substituteWordRecursively(theParsedObject[key], word, substitute);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
var toPascalKeys = function (object) {
|
|
32
|
+
var parsedObject = (0, js_convert_case_1.pascalKeys)(object, { recursive: true, recursiveInArray: true });
|
|
33
|
+
specialWords.forEach(function (specialWord) {
|
|
34
|
+
if (JSON.stringify(parsedObject).includes(specialWord.word)) {
|
|
35
|
+
substituteWordRecursively(parsedObject, specialWord.word, specialWord.substitute);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
return parsedObject;
|
|
39
|
+
};
|
|
40
|
+
exports.caseUtils = {
|
|
41
|
+
toCamelKeys: toCamelKeys,
|
|
42
|
+
toPascalKeys: toPascalKeys,
|
|
43
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { caseUtils } from './case.util';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.caseUtils = void 0;
|
|
4
|
+
var case_util_1 = require("./case.util");
|
|
5
|
+
Object.defineProperty(exports, "caseUtils", { enumerable: true, get: function () { return case_util_1.caseUtils; } });
|