globalpayments-api 3.10.14 → 3.11.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.
Files changed (188) hide show
  1. package/CHANGELOG.md +255 -240
  2. package/LICENSE.md +257 -257
  3. package/README.md +148 -148
  4. package/appsec.properties +8 -0
  5. package/lib/src/Builders/BaseBuilder/ValidationClause.d.ts +3 -2
  6. package/lib/src/Builders/BaseBuilder/ValidationClause.js +23 -15
  7. package/lib/src/Builders/BaseBuilder/ValidationClause.js.map +1 -1
  8. package/lib/src/Builders/BaseBuilder/Validations.js +7 -2
  9. package/lib/src/Builders/BaseBuilder/Validations.js.map +1 -1
  10. package/lib/src/Builders/RequestBuilder/GpApi/GpApiSessionInfo.d.ts +11 -2
  11. package/lib/src/Builders/RequestBuilder/GpApi/GpApiSessionInfo.js +44 -5
  12. package/lib/src/Builders/RequestBuilder/GpApi/GpApiSessionInfo.js.map +1 -1
  13. package/lib/src/Builders/RequestBuilder/GpEcom/GpEcomManagementRequestBuilder.js +2 -2
  14. package/lib/src/Builders/RequestBuilder/GpEcom/GpEcomManagementRequestBuilder.js.map +1 -1
  15. package/lib/src/Entities/Enums.d.ts +4 -2
  16. package/lib/src/Entities/Enums.js +3 -1
  17. package/lib/src/Entities/Enums.js.map +1 -1
  18. package/lib/src/Entities/GpApi/PorticoTokenConfig.d.ts +25 -0
  19. package/lib/src/Entities/GpApi/PorticoTokenConfig.js +30 -0
  20. package/lib/src/Entities/GpApi/PorticoTokenConfig.js.map +1 -0
  21. package/lib/src/Entities/GpApi/index.d.ts +1 -0
  22. package/lib/src/Entities/GpApi/index.js +1 -0
  23. package/lib/src/Entities/GpApi/index.js.map +1 -1
  24. package/lib/src/Entities/RecurringEntity.js +2 -2
  25. package/lib/src/Entities/RecurringEntity.js.map +1 -1
  26. package/lib/src/Entities/Transaction.d.ts +2 -0
  27. package/lib/src/Entities/Transaction.js +2 -0
  28. package/lib/src/Entities/Transaction.js.map +1 -1
  29. package/lib/src/Entities/TransactionSummary.d.ts +1 -0
  30. package/lib/src/Entities/TransactionSummary.js +1 -0
  31. package/lib/src/Entities/TransactionSummary.js.map +1 -1
  32. package/lib/src/Entities/UPA/ExtraChargeType.d.ts +8 -0
  33. package/lib/src/Entities/UPA/ExtraChargeType.js +13 -0
  34. package/lib/src/Entities/UPA/ExtraChargeType.js.map +1 -0
  35. package/lib/src/Entities/UPA/Lodging.d.ts +11 -0
  36. package/lib/src/Entities/UPA/Lodging.js +15 -0
  37. package/lib/src/Entities/UPA/Lodging.js.map +1 -0
  38. package/lib/src/Entities/UPA/POSData.d.ts +6 -0
  39. package/lib/src/Entities/UPA/POSData.js +11 -0
  40. package/lib/src/Entities/UPA/POSData.js.map +1 -0
  41. package/lib/src/Entities/UPA/ProcessIndicator.d.ts +1 -1
  42. package/lib/src/Entities/UPA/ProcessIndicator.js.map +1 -1
  43. package/lib/src/Entities/UPA/UpaParam.d.ts +7 -7
  44. package/lib/src/Entities/UPA/UpaParam.js.map +1 -1
  45. package/lib/src/Entities/UPA/UpaTransactionData.d.ts +5 -5
  46. package/lib/src/Entities/UPA/UpaTransactionData.js.map +1 -1
  47. package/lib/src/Entities/UPA/index.d.ts +3 -0
  48. package/lib/src/Entities/UPA/index.js +3 -0
  49. package/lib/src/Entities/UPA/index.js.map +1 -1
  50. package/lib/src/Gateways/GpApiConnector.js +23 -4
  51. package/lib/src/Gateways/GpApiConnector.js.map +1 -1
  52. package/lib/src/Gateways/PorticoConnector.d.ts +1 -1
  53. package/lib/src/Gateways/PorticoConnector.js +2 -0
  54. package/lib/src/Gateways/PorticoConnector.js.map +1 -1
  55. package/lib/src/Mapping/GpApiMapping.js +7 -0
  56. package/lib/src/Mapping/GpApiMapping.js.map +1 -1
  57. package/lib/src/ServiceConfigs/Gateways/GpApiConfig.d.ts +6 -0
  58. package/lib/src/ServiceConfigs/Gateways/GpApiConfig.js +25 -2
  59. package/lib/src/ServiceConfigs/Gateways/GpApiConfig.js.map +1 -1
  60. package/lib/src/Services/GpApiServices.js +4 -1
  61. package/lib/src/Services/GpApiServices.js.map +1 -1
  62. package/lib/src/Terminals/Abstractions/IDeviceInterface.d.ts +23 -2
  63. package/lib/src/Terminals/Abstractions/IDeviceResponse.d.ts +71 -24
  64. package/lib/src/Terminals/Builders/TerminalAuthBuilder.d.ts +54 -22
  65. package/lib/src/Terminals/Builders/TerminalAuthBuilder.js +98 -13
  66. package/lib/src/Terminals/Builders/TerminalAuthBuilder.js.map +1 -1
  67. package/lib/src/Terminals/Builders/TerminalBuilder.d.ts +6 -3
  68. package/lib/src/Terminals/Builders/TerminalBuilder.js +9 -0
  69. package/lib/src/Terminals/Builders/TerminalBuilder.js.map +1 -1
  70. package/lib/src/Terminals/Builders/TerminalManageBuilder.d.ts +16 -6
  71. package/lib/src/Terminals/Builders/TerminalManageBuilder.js +27 -2
  72. package/lib/src/Terminals/Builders/TerminalManageBuilder.js.map +1 -1
  73. package/lib/src/Terminals/Builders/TerminalReportBuilder.d.ts +17 -0
  74. package/lib/src/Terminals/Builders/TerminalReportBuilder.js +57 -0
  75. package/lib/src/Terminals/Builders/TerminalReportBuilder.js.map +1 -0
  76. package/lib/src/Terminals/Builders/index.d.ts +1 -0
  77. package/lib/src/Terminals/Builders/index.js +1 -0
  78. package/lib/src/Terminals/Builders/index.js.map +1 -1
  79. package/lib/src/Terminals/DeviceController.d.ts +6 -5
  80. package/lib/src/Terminals/DeviceController.js.map +1 -1
  81. package/lib/src/Terminals/DeviceInterface.d.ts +23 -3
  82. package/lib/src/Terminals/DeviceInterface.js +68 -0
  83. package/lib/src/Terminals/DeviceInterface.js.map +1 -1
  84. package/lib/src/Terminals/Enums.d.ts +11 -0
  85. package/lib/src/Terminals/Enums.js +14 -1
  86. package/lib/src/Terminals/Enums.js.map +1 -1
  87. package/lib/src/Terminals/TerminalResponse.d.ts +44 -36
  88. package/lib/src/Terminals/TerminalResponse.js +8 -0
  89. package/lib/src/Terminals/TerminalResponse.js.map +1 -1
  90. package/lib/src/Terminals/UPA/Entities/UpaMessageId.d.ts +10 -1
  91. package/lib/src/Terminals/UPA/Entities/UpaMessageId.js +9 -0
  92. package/lib/src/Terminals/UPA/Entities/UpaMessageId.js.map +1 -1
  93. package/lib/src/Terminals/UPA/Entities/UpaModels.d.ts +62 -0
  94. package/lib/src/Terminals/UPA/Entities/UpaModels.js +28 -0
  95. package/lib/src/Terminals/UPA/Entities/UpaModels.js.map +1 -0
  96. package/lib/src/Terminals/UPA/Entities/UpaSearchCriteria.d.ts +7 -0
  97. package/lib/src/Terminals/UPA/Entities/UpaSearchCriteria.js +12 -0
  98. package/lib/src/Terminals/UPA/Entities/UpaSearchCriteria.js.map +1 -0
  99. package/lib/src/Terminals/UPA/Entities/index.d.ts +1 -0
  100. package/lib/src/Terminals/UPA/Entities/index.js +1 -0
  101. package/lib/src/Terminals/UPA/Entities/index.js.map +1 -1
  102. package/lib/src/Terminals/UPA/Interfaces/UpaMicInterface.d.ts +1 -1
  103. package/lib/src/Terminals/UPA/Interfaces/UpaMicInterface.js +7 -5
  104. package/lib/src/Terminals/UPA/Interfaces/UpaMicInterface.js.map +1 -1
  105. package/lib/src/Terminals/UPA/Reponses/BatchList.d.ts +17 -0
  106. package/lib/src/Terminals/UPA/Reponses/BatchList.js +84 -0
  107. package/lib/src/Terminals/UPA/Reponses/BatchList.js.map +1 -0
  108. package/lib/src/Terminals/UPA/Reponses/BatchReportResponse.d.ts +56 -0
  109. package/lib/src/Terminals/UPA/Reponses/BatchReportResponse.js +215 -0
  110. package/lib/src/Terminals/UPA/Reponses/BatchReportResponse.js.map +1 -0
  111. package/lib/src/Terminals/UPA/Reponses/OpenTabDetailsResponse.d.ts +27 -0
  112. package/lib/src/Terminals/UPA/Reponses/OpenTabDetailsResponse.js +113 -0
  113. package/lib/src/Terminals/UPA/Reponses/OpenTabDetailsResponse.js.map +1 -0
  114. package/lib/src/Terminals/UPA/Reponses/SafReportResponse.d.ts +39 -0
  115. package/lib/src/Terminals/UPA/Reponses/SafReportResponse.js +187 -0
  116. package/lib/src/Terminals/UPA/Reponses/SafReportResponse.js.map +1 -0
  117. package/lib/src/Terminals/UPA/Reponses/TransactionResponse.d.ts +48 -25
  118. package/lib/src/Terminals/UPA/Reponses/TransactionResponse.js +151 -15
  119. package/lib/src/Terminals/UPA/Reponses/TransactionResponse.js.map +1 -1
  120. package/lib/src/Terminals/UPA/Reponses/UpaEODResponse.d.ts +21 -0
  121. package/lib/src/Terminals/UPA/Reponses/UpaEODResponse.js +106 -0
  122. package/lib/src/Terminals/UPA/Reponses/UpaEODResponse.js.map +1 -0
  123. package/lib/src/Terminals/UPA/Reponses/UpaGiftCardResponse.d.ts +41 -0
  124. package/lib/src/Terminals/UPA/Reponses/UpaGiftCardResponse.js +93 -0
  125. package/lib/src/Terminals/UPA/Reponses/UpaGiftCardResponse.js.map +1 -0
  126. package/lib/src/Terminals/UPA/Reponses/UpaSAFResponse.d.ts +35 -0
  127. package/lib/src/Terminals/UPA/Reponses/UpaSAFResponse.js +195 -0
  128. package/lib/src/Terminals/UPA/Reponses/UpaSAFResponse.js.map +1 -0
  129. package/lib/src/Terminals/UPA/Reponses/UpaSignatureResponse.d.ts +18 -0
  130. package/lib/src/Terminals/UPA/Reponses/UpaSignatureResponse.js +94 -0
  131. package/lib/src/Terminals/UPA/Reponses/UpaSignatureResponse.js.map +1 -0
  132. package/lib/src/Terminals/UPA/Reponses/index.d.ts +8 -0
  133. package/lib/src/Terminals/UPA/Reponses/index.js +8 -0
  134. package/lib/src/Terminals/UPA/Reponses/index.js.map +1 -1
  135. package/lib/src/Terminals/UPA/UpaController.d.ts +17 -5
  136. package/lib/src/Terminals/UPA/UpaController.js +338 -79
  137. package/lib/src/Terminals/UPA/UpaController.js.map +1 -1
  138. package/lib/src/Terminals/UPA/UpaInterface.d.ts +26 -3
  139. package/lib/src/Terminals/UPA/UpaInterface.js +311 -12
  140. package/lib/src/Terminals/UPA/UpaInterface.js.map +1 -1
  141. package/lib/src/Terminals/index.d.ts +2 -0
  142. package/lib/src/Terminals/index.js +2 -0
  143. package/lib/src/Terminals/index.js.map +1 -1
  144. package/lib/src/Utils/StringUtils.js +1 -1
  145. package/lib/src/Utils/StringUtils.js.map +1 -1
  146. package/lib/test/Integration/Gateways/CI/upa_mitc/UpaFunctionalityTests.test.js +19 -8
  147. package/lib/test/Integration/Gateways/CI/upa_mitc/UpaFunctionalityTests.test.js.map +1 -1
  148. package/lib/test/Integration/Gateways/GpApiConnector/3DS2.test.js +15 -15
  149. package/lib/test/Integration/Gateways/GpApiConnector/3DSecure.test.js +5 -5
  150. package/lib/test/Integration/Gateways/GpApiConnector/AccessTokenPorticoCredentials.test.d.ts +1 -0
  151. package/lib/test/Integration/Gateways/GpApiConnector/AccessTokenPorticoCredentials.test.js +175 -0
  152. package/lib/test/Integration/Gateways/GpApiConnector/AccessTokenPorticoCredentials.test.js.map +1 -0
  153. package/lib/test/Integration/Gateways/GpApiConnector/GpApiCreateTokenWithPorticoCredentialTests.test.d.ts +1 -0
  154. package/lib/test/Integration/Gateways/GpApiConnector/GpApiCreateTokenWithPorticoCredentialTests.test.js +205 -0
  155. package/lib/test/Integration/Gateways/GpApiConnector/GpApiCreateTokenWithPorticoCredentialTests.test.js.map +1 -0
  156. package/lib/test/Integration/Gateways/GpEcomConnector/Credit.test.js +4 -4
  157. package/lib/test/Integration/Gateways/PorticoConnector/Ecommerce.test.js +8 -8
  158. package/lib/test/Integration/Gateways/PorticoConnector/GlobalTransactionId.test.d.ts +1 -0
  159. package/lib/test/Integration/Gateways/PorticoConnector/GlobalTransactionId.test.js +243 -0
  160. package/lib/test/Integration/Gateways/PorticoConnector/GlobalTransactionId.test.js.map +1 -0
  161. package/lib/test/Integration/Gateways/Terminals/RequestIdProvider.d.ts +15 -1
  162. package/lib/test/Integration/Gateways/Terminals/RequestIdProvider.js +88 -3
  163. package/lib/test/Integration/Gateways/Terminals/RequestIdProvider.js.map +1 -1
  164. package/lib/test/Unit/Builders/AuthorizationBuilder/SupplementaryData.test.d.ts +1 -0
  165. package/lib/test/Unit/Builders/AuthorizationBuilder/SupplementaryData.test.js +147 -0
  166. package/lib/test/Unit/Builders/AuthorizationBuilder/SupplementaryData.test.js.map +1 -0
  167. package/lib/test/Unit/Terminals/UPA/UpaAdmin.test.d.ts +1 -0
  168. package/lib/test/Unit/Terminals/UPA/UpaAdmin.test.js +1260 -0
  169. package/lib/test/Unit/Terminals/UPA/UpaAdmin.test.js.map +1 -0
  170. package/lib/test/Unit/Terminals/UPA/UpaCredit.test.d.ts +1 -0
  171. package/lib/test/Unit/Terminals/UPA/UpaCredit.test.js +411 -0
  172. package/lib/test/Unit/Terminals/UPA/UpaCredit.test.js.map +1 -0
  173. package/lib/test/Unit/Terminals/UPA/UpaHelpertest.d.ts +55 -0
  174. package/lib/test/Unit/Terminals/UPA/UpaHelpertest.js +490 -0
  175. package/lib/test/Unit/Terminals/UPA/UpaHelpertest.js.map +1 -0
  176. package/lib/test/Unit/Terminals/UPA/UpaReport.test.d.ts +1 -0
  177. package/lib/test/Unit/Terminals/UPA/UpaReport.test.js +801 -0
  178. package/lib/test/Unit/Terminals/UPA/UpaReport.test.js.map +1 -0
  179. package/lib/test/Unit/Terminals/UPA/UpaStory1Methods.test.d.ts +1 -0
  180. package/lib/test/Unit/Terminals/UPA/UpaStory1Methods.test.js +250 -0
  181. package/lib/test/Unit/Terminals/UPA/UpaStory1Methods.test.js.map +1 -0
  182. package/lib/test/Unit/Terminals/UPA/UpaStory2Methods.test.d.ts +1 -0
  183. package/lib/test/Unit/Terminals/UPA/UpaStory2Methods.test.js +1277 -0
  184. package/lib/test/Unit/Terminals/UPA/UpaStory2Methods.test.js.map +1 -0
  185. package/lib/test/Unit/Terminals/UPA/UpaStory3_4Methods.test.d.ts +1 -0
  186. package/lib/test/Unit/Terminals/UPA/UpaStory3_4Methods.test.js +411 -0
  187. package/lib/test/Unit/Terminals/UPA/UpaStory3_4Methods.test.js.map +1 -0
  188. package/package.json +63 -63
@@ -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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"}
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const src_1 = require("../../../../src");
4
+ /**
5
+ * Integration tests for Portico credential authentication with GPAPI.
6
+ *
7
+ * Covers two flows:
8
+ * 1. Access token generation (via GpApiService.generateTransactionKey)
9
+ * 2. Credit card sale transactions using named service configs:
10
+ * - LegacyPorticoConfig
11
+ * - SecretApiKeyConfig
12
+ * - FullPorticoConfig
13
+ * - LegacyPorticoAppIdConfig
14
+ * - FullPorticoAppIdConfig
15
+ * - gpAPiConfigFailingScenarios
16
+ */
17
+ // === Test card data ===
18
+ const masterCard = new src_1.CreditCardData();
19
+ masterCard.number = "5546259023665054";
20
+ masterCard.expMonth = "05";
21
+ masterCard.expYear = "2025";
22
+ masterCard.cvn = "123";
23
+ masterCard.cardPresent = false;
24
+ // === Shared constants ===
25
+ const SERVICE_URL = "https://apis-qa.globalpay.com/ucp";
26
+ const APP_ID = "jYtVGox8yvG6KQwlNHPxbfyDa13kwOGt";
27
+ const ACCOUNT_NAME = "accessTokenValidationsecretKey";
28
+ const SECRET_API_KEY = "skapi_cert_MVISAgC05V8Amnxg2jARLKW-K4ONQeXejrWYCCA_Cw";
29
+ // Single source of truth for the 5-point Portico site credentials.
30
+ const PORTICO_SITE_CREDS = {
31
+ deviceId: "11753",
32
+ siteId: "418948",
33
+ licenseId: "388244",
34
+ username: "gateway1213846",
35
+ password: "$Test1234",
36
+ };
37
+ /** Builds a base QA config with the Portico account name pre-set. */
38
+ const makeBaseConfig = (appId) => {
39
+ const config = new src_1.GpApiConfig();
40
+ if (appId)
41
+ config.appId = appId;
42
+ config.serviceUrl = SERVICE_URL;
43
+ config.channel = src_1.Channel.CardNotPresent;
44
+ config.country = "US";
45
+ config.accessTokenInfo = new src_1.AccessTokenInfo();
46
+ config.accessTokenInfo.transactionProcessingAccountName = ACCOUNT_NAME;
47
+ config.requestLogger = new src_1.SampleRequestLogger(new src_1.Logger("logs"));
48
+ return config;
49
+ };
50
+ /** Applies standard Portico site credentials to a config and returns it. */
51
+ const withSiteCreds = (config, overrides) => {
52
+ config.siteId = PORTICO_SITE_CREDS.siteId;
53
+ config.licenseId = PORTICO_SITE_CREDS.licenseId;
54
+ config.porticoDeviceId = PORTICO_SITE_CREDS.deviceId;
55
+ config.porticoUsername = overrides?.username ?? PORTICO_SITE_CREDS.username;
56
+ config.porticoPassword = overrides?.password ?? PORTICO_SITE_CREDS.password;
57
+ return config;
58
+ };
59
+ /** Builds a lightweight config for token-generation-only tests (no accessTokenInfo). */
60
+ const makeTokenConfig = (appId) => {
61
+ const config = new src_1.GpApiConfig();
62
+ if (appId)
63
+ config.appId = appId;
64
+ config.serviceUrl = SERVICE_URL;
65
+ config.environment = src_1.Environment.Test;
66
+ config.channel = src_1.Channel.CardNotPresent;
67
+ config.country = "US";
68
+ config.requestLogger = new src_1.SampleRequestLogger(new src_1.Logger("logs"));
69
+ return config;
70
+ };
71
+ // ─── Access Token Generation ─────────────────────────────────────────────────
72
+ describe("Access Token Generation via GpApiService", () => {
73
+ // Positive: Generate token with Portico secret API key.
74
+ // Positive: Generate token with Portico site credentials
75
+ test("generate access token with Portico site credentials", async () => {
76
+ const config = withSiteCreds(makeTokenConfig(APP_ID));
77
+ const accessTokenInfo = await src_1.GpApiService.generateTransactionKey(config);
78
+ expect(accessTokenInfo).toBeTruthy();
79
+ expect(accessTokenInfo.accessToken).toBeTruthy();
80
+ });
81
+ // Negative: Invalid secret API key must return a GatewayError
82
+ test("generate access token with invalid Portico secret API key returns error", async () => {
83
+ const config = makeTokenConfig(APP_ID);
84
+ config.secretApiKey = "invalid_secret_key";
85
+ await expect(src_1.GpApiService.generateTransactionKey(config)).rejects.toBeInstanceOf(src_1.GatewayError);
86
+ });
87
+ // Negative: Invalid Portico site credentials must return a GatewayError
88
+ test("generate access token with invalid Portico site credentials returns error", async () => {
89
+ const config = withSiteCreds(makeTokenConfig(APP_ID));
90
+ config.porticoPassword = "wrong_password";
91
+ await expect(src_1.GpApiService.generateTransactionKey(config)).rejects.toBeInstanceOf(src_1.GatewayError);
92
+ });
93
+ // Positive (unit): Config validation passes with secret API key
94
+ test("Portico secret API key config passes validation", () => {
95
+ const config = makeTokenConfig(APP_ID);
96
+ config.secretApiKey = SECRET_API_KEY;
97
+ expect(() => config.validate()).not.toThrow();
98
+ });
99
+ // Positive (unit): Config validation passes with full site credentials
100
+ test("Portico site credentials config passes validation", () => {
101
+ const config = withSiteCreds(makeTokenConfig(APP_ID));
102
+ expect(() => config.validate()).not.toThrow();
103
+ });
104
+ // Negative (unit): Config with no credentials fails validation
105
+ test("config with no credentials fails validation", () => {
106
+ const config = new src_1.GpApiConfig();
107
+ config.environment = src_1.Environment.Test;
108
+ config.channel = src_1.Channel.CardNotPresent;
109
+ expect(() => config.validate()).toThrow(src_1.ConfigurationError);
110
+ });
111
+ // Negative (unit): Partial site credentials fails validation
112
+ test("config with incomplete site credentials fails validation", () => {
113
+ const config = new src_1.GpApiConfig();
114
+ config.appId = "4gPqnGBkppGYvoE5UX9EWQlotTxGUDbs";
115
+ config.appKey = "FQyJA5VuEQfcji2M";
116
+ config.environment = src_1.Environment.Test;
117
+ config.channel = src_1.Channel.CardNotPresent;
118
+ config.siteId = "101385";
119
+ // licenseId, porticoDeviceId, porticoUsername, porticoPassword intentionally omitted
120
+ expect(() => config.validate()).toThrow(src_1.ConfigurationError);
121
+ });
122
+ });
123
+ // ─── Credit Card Sale Transactions ───────────────────────────────────────────
124
+ // Register all named service configs once (mirrors .NET TestInitialize).
125
+ beforeAll(() => {
126
+ // LegacyPorticoConfig: site credentials only, no AppId
127
+ // Token body: {"grant_type":"client_credentials","credentials":[device_id,site_id,license_id,username,password]}
128
+ src_1.ServicesContainer.configureService(withSiteCreds(makeBaseConfig()), "LegacyPorticoConfig");
129
+ // SecretApiKeyConfig: secretApiKey only, no AppId.
130
+ // Token body: {"credentials":[{"name":"apikey","value":"..."}],"grant_type":"client_credentials"}
131
+ // because the cert apikey is no longer authorized server-side; the request
132
+ // body is still built by the SDK from the apikey config so we can validate
133
+ // its shape, but the gateway swaps it for 5-pt creds before sending.
134
+ const secretKeyConfig = makeBaseConfig();
135
+ secretKeyConfig.secretApiKey = SECRET_API_KEY;
136
+ src_1.ServicesContainer.configureService(secretKeyConfig, "SecretApiKeyConfig");
137
+ // FullPorticoConfig: site credentials + secretApiKey, no AppId
138
+ const fullConfig = withSiteCreds(makeBaseConfig());
139
+ fullConfig.secretApiKey = SECRET_API_KEY;
140
+ src_1.ServicesContainer.configureService(fullConfig, "FullPorticoConfig");
141
+ // LegacyPorticoAppIdConfig: site credentials + AppId
142
+ // Token body: {"grant_type":"client_credentials","app_id":"...","credentials":[device_id,...]}
143
+ src_1.ServicesContainer.configureService(withSiteCreds(makeBaseConfig(APP_ID)), "LegacyPorticoAppIdConfig");
144
+ // SecretApiKeyAppIdConfig: secretApiKey + AppId.
145
+ // Token body: {"app_id":"...","credentials":[{"name":"apikey","value":"..."}],"grant_type":"client_credentials"}
146
+ const secretKeyAppIdConfig = makeBaseConfig(APP_ID);
147
+ secretKeyAppIdConfig.secretApiKey = SECRET_API_KEY;
148
+ src_1.ServicesContainer.configureService(secretKeyAppIdConfig, "SecretApiKeyAppIdConfig");
149
+ // FullPorticoAppIdConfig: site credentials + secretApiKey + AppId
150
+ const fullAppIdConfig = withSiteCreds(makeBaseConfig(APP_ID));
151
+ fullAppIdConfig.secretApiKey = SECRET_API_KEY;
152
+ src_1.ServicesContainer.configureService(fullAppIdConfig, "FullPorticoAppIdConfig");
153
+ // gpAPiConfigFailingScenarios: AppId + intentionally invalid site credentials
154
+ // Sends request to server with invalid username/password → ACTION_NOT_AUTHORIZED
155
+ const failingConfig = withSiteCreds(makeBaseConfig(APP_ID), {
156
+ username: "invalid_user",
157
+ password: "invalid_pass",
158
+ });
159
+ src_1.ServicesContainer.configureService(failingConfig, "gpAPiConfigFailingScenarios");
160
+ });
161
+ // === Assertion helper ===
162
+ const assertCapturedTransaction = (response) => {
163
+ expect(response).toBeTruthy();
164
+ expect(response.responseCode).toBe("SUCCESS");
165
+ expect(response.responseMessage).toBe(src_1.TransactionStatus.CAPTURED);
166
+ expect(response.transactionId).toBeTruthy();
167
+ expect(response.porticoTransactionId).toBeTruthy();
168
+ };
169
+ /**
170
+ * GP API `/accesstoken` call when the SDK-built request body
171
+ * contains an `apikey` credential.
172
+ *
173
+ * Why: the cert key (`skapi_cert_...`) is no longer authorized server-side
174
+ * (project cancelled — confirmed by GP API team). 5-pt site creds produce an
175
+ * equivalent token, so we let the SDK build the apikey body (validating
176
+ * wire-format), then transparently swap it for a 5-pt body before it leaves
177
+ * the process. `app_id` is preserved when present.
178
+ */
179
+ // Small helper to remove repetition in the sale tests below.
180
+ const chargeWith = (configName) => masterCard.charge("12").withCurrency("USD").execute(configName);
181
+ // Sale using legacy Portico site credentials (no AppId).
182
+ test("CreditSale_ShouldReturnsCapturedTransaction_WhenUsingLegacy5Config", async () => {
183
+ assertCapturedTransaction(await chargeWith("LegacyPorticoConfig"));
184
+ });
185
+ // Sale using site credentials + SecretApiKey (no AppId).
186
+ test("CreditSale_ShouldReturnCapturedTransaction_WithAllPorticoConfig", async () => {
187
+ assertCapturedTransaction(await chargeWith("FullPorticoConfig"));
188
+ });
189
+ // Sale using legacy Portico site credentials + AppId.
190
+ test("CreditSale_ShouldReturnCapturedTransaction_WhenUsingLegacy5ConfigWithAppId", async () => {
191
+ assertCapturedTransaction(await chargeWith("LegacyPorticoAppIdConfig"));
192
+ });
193
+ // Sale using site credentials + SecretApiKey + AppId.
194
+ test("CreditSale_ShouldReturnCapturedTransaction_WhenUsingAllPorticoConfigWithAppId", async () => {
195
+ assertCapturedTransaction(await chargeWith("FullPorticoAppIdConfig"));
196
+ });
197
+ // Sale with invalid credentials should throw GatewayError.
198
+ test("CreditSale_ShouldThrowGatewayException_WhenCredentialsAreInvalid", async () => {
199
+ const err = await chargeWith("gpAPiConfigFailingScenarios").catch((e) => e);
200
+ expect(err).toBeInstanceOf(src_1.GatewayError);
201
+ // Node.js: responseCode = detailed_error_code ("40004"), message contains error_code ("ACTION_NOT_AUTHORIZED")
202
+ expect(err.responseCode).toBe("40004");
203
+ expect(err.message).toContain("ACTION_NOT_AUTHORIZED");
204
+ });
205
+ //# sourceMappingURL=GpApiCreateTokenWithPorticoCredentialTests.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GpApiCreateTokenWithPorticoCredentialTests.test.js","sourceRoot":"","sources":["../../../../../test/Integration/Gateways/GpApiConnector/GpApiCreateTokenWithPorticoCredentialTests.test.ts"],"names":[],"mappings":"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"}
@@ -117,10 +117,10 @@ test.skip("credit auth mobile - apple pay", async () => {
117
117
  test.skip("credit auth mobile - google pay", async () => {
118
118
  const encryptedCard = new src_1.CreditCardData();
119
119
  // tslint:disable-next-line:max-line-length
120
- encryptedCard.token = `{
121
- "signature": "MEQCIAv8iIZmQK95xMrruLLLvJ2/uGuq54SSq190WS62M4a4AiAQhRwPHt3HXaOtCUYphfZLhIRznbF3TWxXLfPCGoutTQ==",
122
- "protocolVersion": "ECv1",
123
- "signedMessage": "{"encryptedMessage":"h1Zfi0b6wQoD3b1qOvfa6EjGa0Bv/Mtxmn/2rRmq/mjLPVuM3Ymu7Uk1IEoPQ/Hk3bafHMCoBrGMQ4YUzLRNMk+YideS4thnE898ZLmnlcPVxWzv+gDodx7spInIK3dTYhMDhdo/28dIqmovl6hPzjPWjAaOfKUs7FvCPjR+HQG7cZb6V41BOzuCCt9wSQGTY5AkIWcTxGVTbA4brd/88A+EZowF10PNl24dygX/ydTAhkBBlVzp33/Poj/Axo7GFtH+kFBgEkBd68LFDHnDd7+GK7HhLq2gv4zVVTUHBSXa3MZFKOWmrgtz3gSXYi3yi6mSGVQwULSp8n4cD3qKW9z38VfqPAR0ZrUsZHvExI/n24iXYs3k5LUspeGbldXAkGL10OJw3meKoHjw20d04fGnTl6DNv2b6/WMA3lUoV9SotEhU20bHKgwpy7VQP20AgKb","ephemeralPublicKey":"BKaqNecPUorCBVLMcKncrBg/eFnt44HsLjHoyzOKnl12DP5KR4SPBNdNDSOjn3Bt/RSN9Nb2e9AOed5Zj0JmGCI\\u003d","tag":"wAiHd29oNTj6BM6XYCx8Cop0ek7yJNZDxsW2d9bdJPA\\u003d"}"
120
+ encryptedCard.token = `{
121
+ "signature": "MEQCIAv8iIZmQK95xMrruLLLvJ2/uGuq54SSq190WS62M4a4AiAQhRwPHt3HXaOtCUYphfZLhIRznbF3TWxXLfPCGoutTQ==",
122
+ "protocolVersion": "ECv1",
123
+ "signedMessage": "{"encryptedMessage":"h1Zfi0b6wQoD3b1qOvfa6EjGa0Bv/Mtxmn/2rRmq/mjLPVuM3Ymu7Uk1IEoPQ/Hk3bafHMCoBrGMQ4YUzLRNMk+YideS4thnE898ZLmnlcPVxWzv+gDodx7spInIK3dTYhMDhdo/28dIqmovl6hPzjPWjAaOfKUs7FvCPjR+HQG7cZb6V41BOzuCCt9wSQGTY5AkIWcTxGVTbA4brd/88A+EZowF10PNl24dygX/ydTAhkBBlVzp33/Poj/Axo7GFtH+kFBgEkBd68LFDHnDd7+GK7HhLq2gv4zVVTUHBSXa3MZFKOWmrgtz3gSXYi3yi6mSGVQwULSp8n4cD3qKW9z38VfqPAR0ZrUsZHvExI/n24iXYs3k5LUspeGbldXAkGL10OJw3meKoHjw20d04fGnTl6DNv2b6/WMA3lUoV9SotEhU20bHKgwpy7VQP20AgKb","ephemeralPublicKey":"BKaqNecPUorCBVLMcKncrBg/eFnt44HsLjHoyzOKnl12DP5KR4SPBNdNDSOjn3Bt/RSN9Nb2e9AOed5Zj0JmGCI\\u003d","tag":"wAiHd29oNTj6BM6XYCx8Cop0ek7yJNZDxsW2d9bdJPA\\u003d"}"
124
124
  }`;
125
125
  encryptedCard.mobileType = "pay-with-google";
126
126
  const missingAmountError = expect(() => encryptedCard
@@ -78,14 +78,14 @@ test("ecom with secure ecommerce", async () => {
78
78
  test.skip("ecom with walletdata", async () => {
79
79
  card.mobileType = src_1.MobilePaymentMethodType.GOOGLEPAY;
80
80
  card.paymentSource = src_1.PaymentDataSourceType.GOOGLEPAYWEB;
81
- card.token = `{
82
- "signature": "MEQCICd1jRuaiWW5z9olPR+xBi6Z7CmW019Ys+EOKO2RIgy9AiA2d/hWKuRYtayJl//Cc1r2wifxv69lRrRHTTPbelKhzA==",
83
- "protocolVersion": "ECv1",
84
- "signedMessage": {
85
- "encryptedMessage": "wuSFSWEDYmECYdL57Glj1jtQ4hVN69cp82vsXyWN7Nw05ocSTqh6dYBb1FRboq1IjYhPf4MPOliBSJHugiHbeYilrT8HeXD+cU+rF9nNtucMFjMIFltik9aOSnpM0E8t9AJ60CFBwLebhHXvA53TlrziBTCQbhoVk2IAMO/tJKl1mI5rR+7sUI+BlIXFBcUba6T8eLz4z7wYwPxuBptP20u5C5QqMV5kY4aF6mCKwbLT5AzDLBiKA+eW9VtlP9icuxigYMOTP6wsrdiW7FMtHc0o3/MnBpZwWRpcponfnoNQnQMjOSiROZVHcHUK0i/lFUJg9p1Xi20qSyXIjq2WjCF7hSoDw1KzRnYO7uyx1yHN9vmLo+NqVfipRSpT7AtBt9CR8yHQftNQlady+VKSIhmigPTXVIapIf7CA27hiRysVGpWbrMZrJJYilFXh6eFPbk2",
86
- "ephemeralPublicKey": "BFe4YpEa1hfmaYlcWR4eyVxZmanOCzDak9yy90PCIAfIMeeRCT9zX5KAnj2k/vWa+oZIv1McjgBIKAp/BoWKNkM=",
87
- "tag": "IpXW8ECpNCLzN36M3S7nbQ1YnXxDeMx1RLwElW0xCg0="
88
- }
81
+ card.token = `{
82
+ "signature": "MEQCICd1jRuaiWW5z9olPR+xBi6Z7CmW019Ys+EOKO2RIgy9AiA2d/hWKuRYtayJl//Cc1r2wifxv69lRrRHTTPbelKhzA==",
83
+ "protocolVersion": "ECv1",
84
+ "signedMessage": {
85
+ "encryptedMessage": "wuSFSWEDYmECYdL57Glj1jtQ4hVN69cp82vsXyWN7Nw05ocSTqh6dYBb1FRboq1IjYhPf4MPOliBSJHugiHbeYilrT8HeXD+cU+rF9nNtucMFjMIFltik9aOSnpM0E8t9AJ60CFBwLebhHXvA53TlrziBTCQbhoVk2IAMO/tJKl1mI5rR+7sUI+BlIXFBcUba6T8eLz4z7wYwPxuBptP20u5C5QqMV5kY4aF6mCKwbLT5AzDLBiKA+eW9VtlP9icuxigYMOTP6wsrdiW7FMtHc0o3/MnBpZwWRpcponfnoNQnQMjOSiROZVHcHUK0i/lFUJg9p1Xi20qSyXIjq2WjCF7hSoDw1KzRnYO7uyx1yHN9vmLo+NqVfipRSpT7AtBt9CR8yHQftNQlady+VKSIhmigPTXVIapIf7CA27hiRysVGpWbrMZrJJYilFXh6eFPbk2",
86
+ "ephemeralPublicKey": "BFe4YpEa1hfmaYlcWR4eyVxZmanOCzDak9yy90PCIAfIMeeRCT9zX5KAnj2k/vWa+oZIv1McjgBIKAp/BoWKNkM=",
87
+ "tag": "IpXW8ECpNCLzN36M3S7nbQ1YnXxDeMx1RLwElW0xCg0="
88
+ }
89
89
  }`;
90
90
  const response = await card
91
91
  .charge(10)