globalpayments-api 3.10.14 → 3.10.15

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.
Files changed (98) hide show
  1. package/CHANGELOG.md +246 -240
  2. package/LICENSE.md +257 -257
  3. package/README.md +148 -148
  4. package/appsec.properties +8 -0
  5. package/lib/src/Builders/RequestBuilder/GpApi/GpApiSessionInfo.d.ts +11 -2
  6. package/lib/src/Builders/RequestBuilder/GpApi/GpApiSessionInfo.js +44 -5
  7. package/lib/src/Builders/RequestBuilder/GpApi/GpApiSessionInfo.js.map +1 -1
  8. package/lib/src/Entities/GpApi/PorticoTokenConfig.d.ts +25 -0
  9. package/lib/src/Entities/GpApi/PorticoTokenConfig.js +30 -0
  10. package/lib/src/Entities/GpApi/PorticoTokenConfig.js.map +1 -0
  11. package/lib/src/Entities/GpApi/index.d.ts +1 -0
  12. package/lib/src/Entities/GpApi/index.js +1 -0
  13. package/lib/src/Entities/GpApi/index.js.map +1 -1
  14. package/lib/src/Entities/Transaction.d.ts +2 -0
  15. package/lib/src/Entities/Transaction.js +2 -0
  16. package/lib/src/Entities/Transaction.js.map +1 -1
  17. package/lib/src/Entities/TransactionSummary.d.ts +1 -0
  18. package/lib/src/Entities/TransactionSummary.js +1 -0
  19. package/lib/src/Entities/TransactionSummary.js.map +1 -1
  20. package/lib/src/Entities/UPA/ExtraChargeType.d.ts +8 -0
  21. package/lib/src/Entities/UPA/ExtraChargeType.js +13 -0
  22. package/lib/src/Entities/UPA/ExtraChargeType.js.map +1 -0
  23. package/lib/src/Entities/UPA/Lodging.d.ts +11 -0
  24. package/lib/src/Entities/UPA/Lodging.js +15 -0
  25. package/lib/src/Entities/UPA/Lodging.js.map +1 -0
  26. package/lib/src/Entities/UPA/POSData.d.ts +6 -0
  27. package/lib/src/Entities/UPA/POSData.js +11 -0
  28. package/lib/src/Entities/UPA/POSData.js.map +1 -0
  29. package/lib/src/Gateways/GpApiConnector.js +21 -2
  30. package/lib/src/Gateways/GpApiConnector.js.map +1 -1
  31. package/lib/src/Gateways/PorticoConnector.js +2 -0
  32. package/lib/src/Gateways/PorticoConnector.js.map +1 -1
  33. package/lib/src/Mapping/GpApiMapping.js +7 -0
  34. package/lib/src/Mapping/GpApiMapping.js.map +1 -1
  35. package/lib/src/ServiceConfigs/Gateways/GpApiConfig.d.ts +6 -0
  36. package/lib/src/ServiceConfigs/Gateways/GpApiConfig.js +25 -2
  37. package/lib/src/ServiceConfigs/Gateways/GpApiConfig.js.map +1 -1
  38. package/lib/src/Services/GpApiServices.js +4 -1
  39. package/lib/src/Services/GpApiServices.js.map +1 -1
  40. package/lib/src/Terminals/Builders/TerminalReportBuilder.d.ts +15 -0
  41. package/lib/src/Terminals/Builders/TerminalReportBuilder.js +49 -0
  42. package/lib/src/Terminals/Builders/TerminalReportBuilder.js.map +1 -0
  43. package/lib/src/Terminals/UPA/Entities/UpaModels.d.ts +62 -0
  44. package/lib/src/Terminals/UPA/Entities/UpaModels.js +28 -0
  45. package/lib/src/Terminals/UPA/Entities/UpaModels.js.map +1 -0
  46. package/lib/src/Terminals/UPA/Entities/UpaSearchCriteria.d.ts +5 -0
  47. package/lib/src/Terminals/UPA/Entities/UpaSearchCriteria.js +10 -0
  48. package/lib/src/Terminals/UPA/Entities/UpaSearchCriteria.js.map +1 -0
  49. package/lib/src/Terminals/UPA/Reponses/BatchList.d.ts +16 -0
  50. package/lib/src/Terminals/UPA/Reponses/BatchList.js +82 -0
  51. package/lib/src/Terminals/UPA/Reponses/BatchList.js.map +1 -0
  52. package/lib/src/Terminals/UPA/Reponses/BatchReportResponse.d.ts +55 -0
  53. package/lib/src/Terminals/UPA/Reponses/BatchReportResponse.js +213 -0
  54. package/lib/src/Terminals/UPA/Reponses/BatchReportResponse.js.map +1 -0
  55. package/lib/src/Terminals/UPA/Reponses/OpenTabDetailsResponse.d.ts +25 -0
  56. package/lib/src/Terminals/UPA/Reponses/OpenTabDetailsResponse.js +109 -0
  57. package/lib/src/Terminals/UPA/Reponses/OpenTabDetailsResponse.js.map +1 -0
  58. package/lib/src/Terminals/UPA/Reponses/SafReportResponse.d.ts +36 -0
  59. package/lib/src/Terminals/UPA/Reponses/SafReportResponse.js +181 -0
  60. package/lib/src/Terminals/UPA/Reponses/SafReportResponse.js.map +1 -0
  61. package/lib/src/Terminals/UPA/Reponses/UpaEODResponse.d.ts +21 -0
  62. package/lib/src/Terminals/UPA/Reponses/UpaEODResponse.js +106 -0
  63. package/lib/src/Terminals/UPA/Reponses/UpaEODResponse.js.map +1 -0
  64. package/lib/src/Terminals/UPA/Reponses/UpaGiftCardResponse.d.ts +41 -0
  65. package/lib/src/Terminals/UPA/Reponses/UpaGiftCardResponse.js +93 -0
  66. package/lib/src/Terminals/UPA/Reponses/UpaGiftCardResponse.js.map +1 -0
  67. package/lib/src/Terminals/UPA/Reponses/UpaSAFResponse.d.ts +35 -0
  68. package/lib/src/Terminals/UPA/Reponses/UpaSAFResponse.js +194 -0
  69. package/lib/src/Terminals/UPA/Reponses/UpaSAFResponse.js.map +1 -0
  70. package/lib/src/Terminals/UPA/Reponses/UpaSignatureResponse.d.ts +18 -0
  71. package/lib/src/Terminals/UPA/Reponses/UpaSignatureResponse.js +94 -0
  72. package/lib/src/Terminals/UPA/Reponses/UpaSignatureResponse.js.map +1 -0
  73. package/lib/test/Integration/Gateways/GpApiConnector/3DS2.test.js +15 -15
  74. package/lib/test/Integration/Gateways/GpApiConnector/3DSecure.test.js +5 -5
  75. package/lib/test/Integration/Gateways/GpApiConnector/AccessTokenPorticoCredentials.test.d.ts +1 -0
  76. package/lib/test/Integration/Gateways/GpApiConnector/AccessTokenPorticoCredentials.test.js +175 -0
  77. package/lib/test/Integration/Gateways/GpApiConnector/AccessTokenPorticoCredentials.test.js.map +1 -0
  78. package/lib/test/Integration/Gateways/GpApiConnector/GpApiCreateTokenWithPorticoCredentialTests.test.d.ts +1 -0
  79. package/lib/test/Integration/Gateways/GpApiConnector/GpApiCreateTokenWithPorticoCredentialTests.test.js +205 -0
  80. package/lib/test/Integration/Gateways/GpApiConnector/GpApiCreateTokenWithPorticoCredentialTests.test.js.map +1 -0
  81. package/lib/test/Integration/Gateways/GpEcomConnector/Credit.test.js +4 -4
  82. package/lib/test/Integration/Gateways/PorticoConnector/Ecommerce.test.js +8 -8
  83. package/lib/test/Integration/Gateways/PorticoConnector/GlobalTransactionId.test.d.ts +1 -0
  84. package/lib/test/Integration/Gateways/PorticoConnector/GlobalTransactionId.test.js +243 -0
  85. package/lib/test/Integration/Gateways/PorticoConnector/GlobalTransactionId.test.js.map +1 -0
  86. package/lib/test/Unit/Builders/AuthorizationBuilder/SupplementaryData.test.d.ts +1 -0
  87. package/lib/test/Unit/Builders/AuthorizationBuilder/SupplementaryData.test.js +147 -0
  88. package/lib/test/Unit/Builders/AuthorizationBuilder/SupplementaryData.test.js.map +1 -0
  89. package/lib/test/Unit/Terminals/UPA/UpaStory1Methods.test.d.ts +1 -0
  90. package/lib/test/Unit/Terminals/UPA/UpaStory1Methods.test.js +250 -0
  91. package/lib/test/Unit/Terminals/UPA/UpaStory1Methods.test.js.map +1 -0
  92. package/lib/test/Unit/Terminals/UPA/UpaStory2Methods.test.d.ts +1 -0
  93. package/lib/test/Unit/Terminals/UPA/UpaStory2Methods.test.js +1277 -0
  94. package/lib/test/Unit/Terminals/UPA/UpaStory2Methods.test.js.map +1 -0
  95. package/lib/test/Unit/Terminals/UPA/UpaStory3_4Methods.test.d.ts +1 -0
  96. package/lib/test/Unit/Terminals/UPA/UpaStory3_4Methods.test.js +411 -0
  97. package/lib/test/Unit/Terminals/UPA/UpaStory3_4Methods.test.js.map +1 -0
  98. package/package.json +63 -63
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UpaSAFResponse = exports.UpaSafSummaryResponse = void 0;
4
+ const src_1 = require("../../../../src");
5
+ class UpaSafSummaryResponse {
6
+ totalAmount;
7
+ count;
8
+ summaryType;
9
+ transactions = [];
10
+ }
11
+ exports.UpaSafSummaryResponse = UpaSafSummaryResponse;
12
+ class UpaSAFResponse {
13
+ status;
14
+ command;
15
+ version = "";
16
+ deviceResponseCode;
17
+ deviceResponseText;
18
+ deviceResponseMessage;
19
+ referenceNumber = "";
20
+ totalCount;
21
+ totalAmount;
22
+ multipleMessage;
23
+ approved;
24
+ pending;
25
+ declined;
26
+ constructor(jsonResponse) {
27
+ if (typeof jsonResponse === "string") {
28
+ try {
29
+ jsonResponse = JSON.parse(jsonResponse);
30
+ }
31
+ catch {
32
+ throw new src_1.NotImplementedError("Invalid JSON string");
33
+ }
34
+ }
35
+ this.version = this.extractVersion(jsonResponse);
36
+ this.referenceNumber = this.extractReferenceNumber(jsonResponse);
37
+ if (this.isGpApiResponse(jsonResponse)) {
38
+ const response = jsonResponse.response;
39
+ const cmdResult = response?.cmdResult;
40
+ this.status = cmdResult?.result ?? jsonResponse.status ?? "";
41
+ this.command = this.extractCommand(jsonResponse, response?.response);
42
+ this.deviceResponseCode = this.normalizeDeviceResponseCode(cmdResult?.errorCode, jsonResponse.action?.result_code);
43
+ this.deviceResponseText = this.status;
44
+ this.deviceResponseMessage = cmdResult?.errorMessage ?? "";
45
+ const responseData = response?.data;
46
+ if (responseData) {
47
+ this.referenceNumber =
48
+ responseData.referenceNumber ?? this.referenceNumber;
49
+ this.multipleMessage = responseData.multipleMessage;
50
+ const safDetails = responseData.SafDetails || [];
51
+ safDetails.forEach((detail) => {
52
+ this.totalAmount =
53
+ (this.totalAmount || 0) + Number(detail.SafTotal || 0);
54
+ this.totalCount =
55
+ (this.totalCount || 0) + Number(detail.SafCount || 0);
56
+ });
57
+ }
58
+ }
59
+ else {
60
+ // Native UPA device response
61
+ const data = jsonResponse?.data;
62
+ const cmdResult = data?.cmdResult;
63
+ this.deviceResponseText = cmdResult?.result ?? "";
64
+ this.deviceResponseCode = cmdResult?.errorCode ?? "00";
65
+ this.status = this.deviceResponseText;
66
+ this.deviceResponseMessage = cmdResult?.errorMessage ?? "";
67
+ this.command = this.extractCommand(jsonResponse, data?.response);
68
+ const innerData = data?.data;
69
+ if (innerData) {
70
+ this.referenceNumber =
71
+ innerData.referenceNumber ?? this.referenceNumber;
72
+ this.multipleMessage = innerData.multipleMessage;
73
+ this.parseSafDetails(innerData.SafDetails);
74
+ }
75
+ }
76
+ }
77
+ parseSafDetails(safDetails) {
78
+ const details = Array.isArray(safDetails) ? safDetails : [];
79
+ details.forEach((detail) => {
80
+ const summary = new UpaSafSummaryResponse();
81
+ summary.totalAmount = this.toNumber(detail?.SafTotal) ?? 0;
82
+ summary.count = this.toNumber(detail?.SafCount) ?? 0;
83
+ summary.summaryType = this.mapSummaryType(detail?.SafType);
84
+ summary.transactions = Array.isArray(detail?.SafRecords)
85
+ ? detail.SafRecords.map((record) => this.mapTransactionSummary(record))
86
+ : [];
87
+ this.totalAmount = (this.totalAmount || 0) + (summary.totalAmount || 0);
88
+ this.totalCount = (this.totalCount || 0) + (summary.count || 0);
89
+ this.assignSummary(summary);
90
+ });
91
+ }
92
+ assignSummary(summary) {
93
+ if (summary.summaryType === src_1.SummaryType.Approved) {
94
+ this.approved = this.approved ?? {};
95
+ this.approved[summary.summaryType] = summary;
96
+ return;
97
+ }
98
+ if (summary.summaryType === src_1.SummaryType.Pending) {
99
+ this.pending = this.pending ?? {};
100
+ this.pending[summary.summaryType] = summary;
101
+ return;
102
+ }
103
+ this.declined = this.declined ?? {};
104
+ this.declined[summary.summaryType] = summary;
105
+ }
106
+ mapTransactionSummary(record) {
107
+ const summary = new src_1.TransactionSummary();
108
+ summary.transactionType = record?.transactionType;
109
+ summary.transactionId = record?.transId;
110
+ summary.referenceNumber = record?.referenceNumber;
111
+ summary.gratuityAmount = record?.tipAmount;
112
+ summary.taxAmount = record?.taxAmount;
113
+ summary.amount = record?.baseAmount;
114
+ summary.authorizedAmount = record?.authorizedAmount;
115
+ summary.cardType = record?.cardType;
116
+ summary.maskedCardNumber = record?.maskedPan;
117
+ summary.authCode = record?.approvalCode;
118
+ summary.entryMode = record?.cardAcquisition;
119
+ summary.status = record?.responseCode;
120
+ const transactionDate = this.toDate(record?.transactionTime);
121
+ if (transactionDate) {
122
+ summary.transactionDate = transactionDate;
123
+ }
124
+ return summary;
125
+ }
126
+ mapSummaryType(safType) {
127
+ switch (safType) {
128
+ case "AUTHORIZED TRANSACTIONS":
129
+ return src_1.SummaryType.Approved;
130
+ case "PENDING TRANSACTIONS":
131
+ return src_1.SummaryType.Pending;
132
+ case "FAILED TRANSACTIONS":
133
+ default:
134
+ return src_1.SummaryType.Declined;
135
+ }
136
+ }
137
+ toDate(value) {
138
+ if (!value) {
139
+ return undefined;
140
+ }
141
+ const date = new Date(value);
142
+ return Number.isNaN(date.getTime()) ? undefined : date;
143
+ }
144
+ toNumber(value) {
145
+ if (value === undefined || value === null || value === "") {
146
+ return undefined;
147
+ }
148
+ const parsed = Number(value);
149
+ return Number.isNaN(parsed) ? undefined : parsed;
150
+ }
151
+ isGpApiResponse(jsonResponse) {
152
+ return !!(jsonResponse.provider && jsonResponse.provider === src_1.GatewayProvider.GpApi);
153
+ }
154
+ normalizeDeviceResponseCode(cmdErrorCode, actionResultCode) {
155
+ if (cmdErrorCode) {
156
+ return cmdErrorCode;
157
+ }
158
+ return actionResultCode === "SUCCESS" ? "00" : actionResultCode ?? "";
159
+ }
160
+ extractVersion(jsonResponse) {
161
+ return (jsonResponse?.version ??
162
+ jsonResponse?.response?.version ??
163
+ jsonResponse?.data?.version ??
164
+ jsonResponse?.data?.data?.version ??
165
+ "");
166
+ }
167
+ extractReferenceNumber(jsonResponse) {
168
+ return (jsonResponse?.referenceNumber ??
169
+ jsonResponse?.response?.referenceNumber ??
170
+ jsonResponse?.response?.data?.referenceNumber ??
171
+ jsonResponse?.response?.data?.host?.referenceNumber ??
172
+ jsonResponse?.data?.referenceNumber ??
173
+ jsonResponse?.data?.data?.referenceNumber ??
174
+ jsonResponse?.data?.data?.host?.referenceNumber ??
175
+ "");
176
+ }
177
+ extractCommand(jsonResponse, fallback) {
178
+ if (fallback && fallback !== "SendCommand") {
179
+ return fallback;
180
+ }
181
+ return (jsonResponse?.requestType ??
182
+ jsonResponse?.command ??
183
+ jsonResponse?.response?.command ??
184
+ jsonResponse?.data?.command ??
185
+ jsonResponse?.data?.data?.command ??
186
+ fallback ??
187
+ "");
188
+ }
189
+ toString() {
190
+ return JSON.stringify(this);
191
+ }
192
+ }
193
+ exports.UpaSAFResponse = UpaSAFResponse;
194
+ //# sourceMappingURL=UpaSAFResponse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpaSAFResponse.js","sourceRoot":"","sources":["../../../../../src/Terminals/UPA/Reponses/UpaSAFResponse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /// <reference types="node" />
2
+ import { ISignatureResponse } from "../../../../src";
3
+ export declare class UpaSignatureResponse implements ISignatureResponse {
4
+ status: string;
5
+ command: string;
6
+ version: string;
7
+ deviceResponseCode: string;
8
+ deviceResponseText: string;
9
+ referenceNumber: string;
10
+ signatureData?: Buffer;
11
+ sigData?: string;
12
+ constructor(jsonResponse: any);
13
+ private isGpApiResponse;
14
+ private normalizeDeviceResponseCode;
15
+ private extractVersion;
16
+ private extractReferenceNumber;
17
+ toString(): string;
18
+ }
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UpaSignatureResponse = void 0;
4
+ const src_1 = require("../../../../src");
5
+ class UpaSignatureResponse {
6
+ status;
7
+ command;
8
+ version = "";
9
+ deviceResponseCode;
10
+ deviceResponseText;
11
+ referenceNumber = "";
12
+ signatureData;
13
+ sigData;
14
+ constructor(jsonResponse) {
15
+ if (typeof jsonResponse === "string") {
16
+ try {
17
+ jsonResponse = JSON.parse(jsonResponse);
18
+ }
19
+ catch {
20
+ throw new src_1.NotImplementedError("Invalid JSON string");
21
+ }
22
+ }
23
+ this.version = this.extractVersion(jsonResponse);
24
+ this.referenceNumber = this.extractReferenceNumber(jsonResponse);
25
+ if (this.isGpApiResponse(jsonResponse)) {
26
+ const response = jsonResponse.response;
27
+ const cmdResult = response?.cmdResult;
28
+ this.status = cmdResult?.result ?? jsonResponse.status ?? "";
29
+ this.command = response?.response ?? "";
30
+ this.deviceResponseText = this.status;
31
+ this.deviceResponseCode = this.normalizeDeviceResponseCode(cmdResult?.errorCode, jsonResponse.action?.result_code);
32
+ const responseData = response?.data;
33
+ if (responseData) {
34
+ this.referenceNumber =
35
+ responseData.referenceNumber ?? this.referenceNumber;
36
+ const rawSigData = responseData.signatureData;
37
+ if (rawSigData) {
38
+ this.sigData = rawSigData;
39
+ this.signatureData = Buffer.from(rawSigData, "base64");
40
+ }
41
+ }
42
+ }
43
+ else {
44
+ // Native UPA device response
45
+ const data = jsonResponse?.data;
46
+ const cmdResult = data?.cmdResult;
47
+ this.deviceResponseText = cmdResult?.result ?? "";
48
+ this.deviceResponseCode = cmdResult?.errorCode ?? "00";
49
+ this.status = this.deviceResponseText;
50
+ this.command = data?.response ?? "";
51
+ const innerData = data?.data;
52
+ if (innerData) {
53
+ this.referenceNumber =
54
+ innerData.referenceNumber ?? this.referenceNumber;
55
+ const rawSigData = innerData.signatureData;
56
+ if (rawSigData) {
57
+ this.sigData = rawSigData;
58
+ this.signatureData = Buffer.from(rawSigData, "base64");
59
+ }
60
+ }
61
+ }
62
+ }
63
+ isGpApiResponse(jsonResponse) {
64
+ return !!(jsonResponse.provider && jsonResponse.provider === src_1.GatewayProvider.GpApi);
65
+ }
66
+ normalizeDeviceResponseCode(cmdErrorCode, actionResultCode) {
67
+ if (cmdErrorCode) {
68
+ return cmdErrorCode;
69
+ }
70
+ return actionResultCode === "SUCCESS" ? "00" : actionResultCode ?? "";
71
+ }
72
+ extractVersion(jsonResponse) {
73
+ return (jsonResponse?.version ??
74
+ jsonResponse?.response?.version ??
75
+ jsonResponse?.data?.version ??
76
+ jsonResponse?.data?.data?.version ??
77
+ "");
78
+ }
79
+ extractReferenceNumber(jsonResponse) {
80
+ return (jsonResponse?.referenceNumber ??
81
+ jsonResponse?.response?.referenceNumber ??
82
+ jsonResponse?.response?.data?.referenceNumber ??
83
+ jsonResponse?.response?.data?.host?.referenceNumber ??
84
+ jsonResponse?.data?.referenceNumber ??
85
+ jsonResponse?.data?.data?.referenceNumber ??
86
+ jsonResponse?.data?.data?.host?.referenceNumber ??
87
+ "");
88
+ }
89
+ toString() {
90
+ return JSON.stringify(this);
91
+ }
92
+ }
93
+ exports.UpaSignatureResponse = UpaSignatureResponse;
94
+ //# sourceMappingURL=UpaSignatureResponse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpaSignatureResponse.js","sourceRoot":"","sources":["../../../../../src/Terminals/UPA/Reponses/UpaSignatureResponse.ts"],"names":[],"mappings":"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"}
@@ -867,11 +867,11 @@ test("challenge required v2 - initiate with mobile sdk", async () => {
867
867
  mobileData.applicationReference = "f283b3ec-27da-42a1-acea-f3f70e75bbdc";
868
868
  mobileData.sdkInterface = src_1.SdkInterface.Both;
869
869
  mobileData.sdkUiTypes = [src_1.SdkUiType.Oob];
870
- mobileData.ephemeralPublicKey = `{
871
- "kty": "EC",
872
- "crv": "P-256",
873
- "x": "WWcpTjbOqiu_1aODllw5rYTq5oLXE_T0huCPjMIRbkI",
874
- "y": "Wz_7anIeadV8SJZUfr4drwjzuWoUbOsHp5GdRZBAAiw"
870
+ mobileData.ephemeralPublicKey = `{
871
+ "kty": "EC",
872
+ "crv": "P-256",
873
+ "x": "WWcpTjbOqiu_1aODllw5rYTq5oLXE_T0huCPjMIRbkI",
874
+ "y": "Wz_7anIeadV8SJZUfr4drwjzuWoUbOsHp5GdRZBAAiw"
875
875
  }`;
876
876
  mobileData.maximumTimeout = 50;
877
877
  mobileData.referenceNumber = "3DS_LOA_SDK_PPFU_020100_00007";
@@ -909,11 +909,11 @@ test("challenge required v2 - initiate with mobile data and browser data", async
909
909
  mobileData.applicationReference = "f283b3ec-27da-42a1-acea-f3f70e75bbdc";
910
910
  mobileData.sdkInterface = src_1.SdkInterface.Browser;
911
911
  mobileData.sdkUiTypes = [src_1.SdkUiType.HtmlOther];
912
- mobileData.ephemeralPublicKey = `{
913
- "kty": "EC",
914
- "crv": "P-256",
915
- "x": "WWcpTjbOqiu_1aODllw5rYTq5oLXE_T0huCPjMIRbkI",
916
- "y": "Wz_7anIeadV8SJZUfr4drwjzuWoUbOsHp5GdRZBAAiw"
912
+ mobileData.ephemeralPublicKey = `{
913
+ "kty": "EC",
914
+ "crv": "P-256",
915
+ "x": "WWcpTjbOqiu_1aODllw5rYTq5oLXE_T0huCPjMIRbkI",
916
+ "y": "Wz_7anIeadV8SJZUfr4drwjzuWoUbOsHp5GdRZBAAiw"
917
917
  }`;
918
918
  mobileData.maximumTimeout = 50;
919
919
  mobileData.referenceNumber = "3DS_LOA_SDK_PPFU_020100_00007";
@@ -946,11 +946,11 @@ test("challenge required v2 - initiate with mobile data and source browser", asy
946
946
  mobileData.applicationReference = "f283b3ec-27da-42a1-acea-f3f70e75bbdc";
947
947
  mobileData.sdkInterface = src_1.SdkInterface.Browser;
948
948
  mobileData.sdkUiTypes = [src_1.SdkUiType.HtmlOther];
949
- mobileData.ephemeralPublicKey = `{
950
- "kty": "EC",
951
- "crv": "P-256",
952
- "x": "WWcpTjbOqiu_1aODllw5rYTq5oLXE_T0huCPjMIRbkI",
953
- "y": "Wz_7anIeadV8SJZUfr4drwjzuWoUbOsHp5GdRZBAAiw"
949
+ mobileData.ephemeralPublicKey = `{
950
+ "kty": "EC",
951
+ "crv": "P-256",
952
+ "x": "WWcpTjbOqiu_1aODllw5rYTq5oLXE_T0huCPjMIRbkI",
953
+ "y": "Wz_7anIeadV8SJZUfr4drwjzuWoUbOsHp5GdRZBAAiw"
954
954
  }`;
955
955
  mobileData.maximumTimeout = 50;
956
956
  mobileData.referenceNumber = "3DS_LOA_SDK_PPFU_020100_00007";
@@ -527,11 +527,11 @@ test("frictionless full cycle - v2 - with mobile SDK", async () => {
527
527
  mobileData.applicationReference = "f283b3ec-27da-42a1-acea-f3f70e75bbdc";
528
528
  mobileData.sdkInterface = src_1.SdkInterface.Browser;
529
529
  mobileData.sdkUiTypes = [src_1.SdkUiType.HtmlOther];
530
- mobileData.ephemeralPublicKey = `{
531
- "kty": "EC",
532
- "crv": "P-256",
533
- "x": "WWcpTjbOqiu_1aODllw5rYTq5oLXE_T0huCPjMIRbkI",
534
- "y": "Wz_7anIeadV8SJZUfr4drwjzuWoUbOsHp5GdRZBAAiw"
530
+ mobileData.ephemeralPublicKey = `{
531
+ "kty": "EC",
532
+ "crv": "P-256",
533
+ "x": "WWcpTjbOqiu_1aODllw5rYTq5oLXE_T0huCPjMIRbkI",
534
+ "y": "Wz_7anIeadV8SJZUfr4drwjzuWoUbOsHp5GdRZBAAiw"
535
535
  }`;
536
536
  mobileData.maximumTimeout = 50;
537
537
  mobileData.referenceNumber = "3DS_LOA_SDK_PPFU_020100_00007";
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const src_1 = require("../../../../src");
4
+ /**
5
+ * Integration tests for obtaining a GPAPI access token using Portico credentials.
6
+ *
7
+ * This validates the flow where a Portico merchant can authenticate to GPAPI
8
+ * using their existing Portico credentials (secretApiKey or site/license/device/user/pass)
9
+ * combined with GPAPI appId/appKey, using grant_type "portico_credentials".
10
+ */
11
+ const getPorticoGpApiConfig = () => {
12
+ const config = new src_1.GpApiConfig();
13
+ config.appId = "DAua5WpU5jjES2ZPjwdjqKDF75xUknQY";
14
+ config.appKey = "test";
15
+ config.environment = src_1.Environment.Test;
16
+ config.channel = src_1.Channel.CardNotPresent;
17
+ config.country = "US";
18
+ config.serviceUrl = "https://apis-qa.globalpay.com/ucp";
19
+ config.requestLogger = new src_1.SampleRequestLogger(new src_1.Logger("logs"));
20
+ config.secretApiKey = "skapi_cert_MVISAgC05V8Amnxg2jARLKW-K4ONQeXejrWYCCA_Cw";
21
+ return config;
22
+ };
23
+ test("generate access token with Portico site credentials", async () => {
24
+ const config = new src_1.GpApiConfig();
25
+ config.appId = "DAua5WpU5jjES2ZPjwdjqKDF75xUknQY";
26
+ config.appKey = "test";
27
+ config.environment = src_1.Environment.Test;
28
+ config.channel = src_1.Channel.CardNotPresent;
29
+ config.country = "US";
30
+ config.serviceUrl = "https://apis-qa.globalpay.com/ucp";
31
+ config.requestLogger = new src_1.SampleRequestLogger(new src_1.Logger("logs"));
32
+ config.siteId = "418948";
33
+ config.licenseId = "388244";
34
+ config.porticoDeviceId = "11753";
35
+ config.porticoUsername = "gateway1213846";
36
+ config.porticoPassword = "$Test1234";
37
+ try {
38
+ const accessTokenInfo = await src_1.GpApiService.generateTransactionKey(config);
39
+ expect(accessTokenInfo).toBeTruthy();
40
+ expect(accessTokenInfo.accessToken).toBeTruthy();
41
+ }
42
+ catch (error) {
43
+ expect(error).toBeTruthy();
44
+ if (error instanceof src_1.GatewayError) {
45
+ console.log("GPAPI returned error for portico_credentials grant_type (site creds):", error.message);
46
+ }
47
+ else {
48
+ throw error;
49
+ }
50
+ }
51
+ });
52
+ test("generate access token with invalid Portico credentials returns error", async () => {
53
+ const config = getPorticoGpApiConfig();
54
+ config.secretApiKey = "invalid_secret_key";
55
+ try {
56
+ await src_1.GpApiService.generateTransactionKey(config);
57
+ }
58
+ catch (error) {
59
+ expect(error).toBeTruthy();
60
+ expect(error instanceof src_1.GatewayError).toBe(true);
61
+ }
62
+ });
63
+ test("Portico credentials config passes validation", () => {
64
+ const config = getPorticoGpApiConfig();
65
+ // Should not throw
66
+ expect(() => config.validate()).not.toThrow();
67
+ });
68
+ test("config with no credentials fails validation", () => {
69
+ const config = new src_1.GpApiConfig();
70
+ config.environment = src_1.Environment.Test;
71
+ config.channel = src_1.Channel.CardNotPresent;
72
+ expect(() => config.validate()).toThrow();
73
+ });
74
+ test("use Portico credentials to configure services and make GPAPI call", async () => {
75
+ const config = getPorticoGpApiConfig();
76
+ config.accessTokenInfo = new src_1.AccessTokenInfo();
77
+ config.accessTokenInfo.transactionProcessingAccountName =
78
+ "transaction_processing";
79
+ try {
80
+ src_1.ServicesContainer.configureService(config);
81
+ // If token is obtained, services should be configured
82
+ // Additional GPAPI calls can be tested here once server-side support is confirmed
83
+ }
84
+ catch (error) {
85
+ if (error instanceof src_1.GatewayError) {
86
+ console.log("Expected: GPAPI portico_credentials grant_type not yet supported server-side:", error.message);
87
+ }
88
+ else {
89
+ throw error;
90
+ }
91
+ }
92
+ });
93
+ /**
94
+ * Transaction execution tests using Portico credentials
95
+ */
96
+ // Test: Credit sale with legacy Portico credentials + AppId
97
+ test.only("credit sale with legacy Portico credentials and AppId", async () => {
98
+ const card = new src_1.CreditCardData();
99
+ card.number = "5546259023665054"; // MasterCard
100
+ card.expMonth = "12";
101
+ card.expYear = "2026";
102
+ card.cvn = "123";
103
+ card.cardPresent = false;
104
+ card.readerPresent = false;
105
+ const config = new src_1.GpApiConfig();
106
+ config.appId = "jYtVGox8yvG6KQwlNHPxbfyDa13kwOGt";
107
+ config.appKey = "test";
108
+ config.environment = src_1.Environment.Test;
109
+ config.channel = src_1.Channel.CardNotPresent;
110
+ config.country = "US";
111
+ config.serviceUrl = "https://apis-qa.globalpay.com/ucp";
112
+ config.requestLogger = new src_1.SampleRequestLogger(new src_1.Logger("logs"));
113
+ // Legacy Portico credentials (device/site/license/user/pass)
114
+ config.siteId = "418948";
115
+ config.licenseId = "388244";
116
+ config.porticoDeviceId = "11753";
117
+ config.porticoUsername = "gateway1213846";
118
+ config.porticoPassword = "$Test1234";
119
+ config.accessTokenInfo = new src_1.AccessTokenInfo();
120
+ config.accessTokenInfo.transactionProcessingAccountName =
121
+ "accessTokenValidationsecretKey";
122
+ try {
123
+ src_1.ServicesContainer.configureService(config, "LegacyPorticoAppIdConfig");
124
+ const response = await card
125
+ .charge(12)
126
+ .withCurrency("USD")
127
+ .execute("LegacyPorticoAppIdConfig");
128
+ expect(response).toBeTruthy();
129
+ expect(response.responseCode).toBe("SUCCESS");
130
+ console.log("Legacy Portico + AppId transaction SUCCESS:", response.responseCode);
131
+ }
132
+ catch (error) {
133
+ if (error instanceof src_1.GatewayError) {
134
+ console.log("Legacy Portico + AppId transaction error:", error.message);
135
+ }
136
+ else {
137
+ throw error;
138
+ }
139
+ }
140
+ });
141
+ // Test: Invalid credentials error with specific message validation
142
+ test("invalid credentials returns specific error details", async () => {
143
+ const config = new src_1.GpApiConfig();
144
+ config.appId = "DAua5WpU5jjES2ZPjwdjqKDF75xUknQY";
145
+ config.appKey = "test";
146
+ config.environment = src_1.Environment.Test;
147
+ config.channel = src_1.Channel.CardNotPresent;
148
+ config.country = "US";
149
+ config.serviceUrl = "https://apis-qa.globalpay.com/ucp";
150
+ config.requestLogger = new src_1.SampleRequestLogger(new src_1.Logger("logs"));
151
+ // Empty/invalid credentials
152
+ config.siteId = "418948";
153
+ config.licenseId = "388244";
154
+ config.porticoDeviceId = "11753";
155
+ config.porticoUsername = "";
156
+ config.porticoPassword = "";
157
+ config.secretApiKey = "";
158
+ config.accessTokenInfo = new src_1.AccessTokenInfo();
159
+ config.accessTokenInfo.transactionProcessingAccountName =
160
+ "transaction_processing";
161
+ try {
162
+ await src_1.GpApiService.generateTransactionKey(config);
163
+ fail("Should have thrown GatewayError with invalid credentials");
164
+ }
165
+ catch (error) {
166
+ expect(error).toBeTruthy();
167
+ expect(error instanceof src_1.GatewayError).toBe(true);
168
+ if (error instanceof src_1.GatewayError) {
169
+ // Accept either ACTION_NOT_AUTHORIZED (no credentials) or 40004 (invalid/empty credentials)
170
+ expect(["ACTION_NOT_AUTHORIZED", "40004"]).toContain(error.responseCode);
171
+ console.log("Invalid credentials error (as expected):", error.responseCode, "-", error.message);
172
+ }
173
+ }
174
+ });
175
+ //# sourceMappingURL=AccessTokenPorticoCredentials.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccessTokenPorticoCredentials.test.js","sourceRoot":"","sources":["../../../../../test/Integration/Gateways/GpApiConnector/AccessTokenPorticoCredentials.test.ts"],"names":[],"mappings":"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"}