@webbers/pay-payments-medusa 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/.medusa/server/package.json +90 -0
  2. package/.medusa/server/src/admin/index.js +229 -0
  3. package/.medusa/server/src/admin/index.mjs +228 -0
  4. package/.medusa/server/src/api/admin/pay/clear-cache/route.js +23 -0
  5. package/.medusa/server/src/api/admin/pay/payment-methods/route.js +36 -0
  6. package/.medusa/server/src/api/store/pay/payment-methods/route.js +36 -0
  7. package/.medusa/server/src/providers/pay/core/constants.js +52 -0
  8. package/.medusa/server/src/providers/pay/core/http-client.js +107 -0
  9. package/.medusa/server/src/providers/pay/core/pay-base.js +561 -0
  10. package/.medusa/server/src/providers/pay/core/pay-client.js +118 -0
  11. package/.medusa/server/src/providers/pay/index.js +22 -0
  12. package/.medusa/server/src/providers/pay/services/index.js +17 -0
  13. package/.medusa/server/src/providers/pay/services/pay-bancontact.js +21 -0
  14. package/.medusa/server/src/providers/pay/services/pay-creditcard.js +21 -0
  15. package/.medusa/server/src/providers/pay/services/pay-ideal.js +21 -0
  16. package/.medusa/server/src/providers/pay/services/pay-provider.js +23 -0
  17. package/.medusa/server/src/providers/pay/services/pay-softpos.js +20 -0
  18. package/.medusa/server/src/providers/pay/types/common.js +3 -0
  19. package/.medusa/server/src/providers/pay/types/index.js +28 -0
  20. package/.medusa/server/src/providers/pay/types/order.js +3 -0
  21. package/.medusa/server/src/providers/pay/types/transaction.js +3 -0
  22. package/.medusa/server/src/providers/pay/utils/getExpirationForPaymentMethod.js +16 -0
  23. package/.medusa/server/src/providers/pay/utils/getSortedPaymentMethods.js +20 -0
  24. package/.medusa/server/src/providers/pay/utils/paymentMethodMap.js +133 -0
  25. package/.medusa/server/src/workflows/hooks/order-created.js +96 -0
  26. package/README.md +221 -0
  27. package/package.json +90 -0
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PayPaymentStatus = exports.PayApiPath = exports.PayEnvironmentPaths = exports.PAY_CACHE_KEY = void 0;
4
+ exports.PAY_CACHE_KEY = {
5
+ CONFIG: "pay_config_cache",
6
+ SALES_CHANNEL_OPTIONS: "pay_sales_channel_options",
7
+ };
8
+ exports.PayEnvironmentPaths = {
9
+ REST_API: "https://rest.pay.nl/v2",
10
+ TGU_API: "https://connect.pay.nl/v1",
11
+ REST_API_v3: "https://rest-api.pay.nl/v3",
12
+ };
13
+ exports.PayApiPath = {
14
+ GET_CONFIG: "/services/config?serviceId={id}",
15
+ ORDER_CREATE: "/orders",
16
+ ORDER_UPDATE: "/orders/{id}",
17
+ ORDER_STATUS: "/orders/{id}/status",
18
+ ORDER_CAPTURE: "/orders/{id}/capture",
19
+ ORDER_ABORT: "/orders/{id}/abort",
20
+ GET_TRANSACTION: "/transactions/{id}",
21
+ TRANSACTION_REFUND: "/transactions/{id}/refund",
22
+ DIRECT_DEBIT: "/DirectDebit/debitAdd/json",
23
+ DIRECT_DEBIT_INFO: "/DirectDebit/info/json",
24
+ };
25
+ // Transaction Statuses: https://developer.pay.nl/docs/transaction-statuses#after-processing-statuses
26
+ exports.PayPaymentStatus = {
27
+ // Pending Statuses
28
+ INIT: 20,
29
+ PENDING_20: 20,
30
+ PENDING_50: 50,
31
+ PENDING_90: 90,
32
+ PENDING_98: 98,
33
+ // Processing statuses
34
+ CANCEL: -90,
35
+ EXPIRED: -80,
36
+ DENIED_64: -64,
37
+ DENIED_63: -63,
38
+ CANCEL_61: -61,
39
+ FAILURE: -60,
40
+ PAID_CHECKAMOUNT: -51,
41
+ PARTIAL_PAYMENT: 80,
42
+ VERIFY: 85,
43
+ AUTHORIZE: 95,
44
+ PARTLY_CAPTURED: 97,
45
+ PAID: 100,
46
+ // After processing statuses
47
+ CHARGEBACK: -71,
48
+ REFUNDING: -72,
49
+ REFUND: -81,
50
+ PARTIAL_REFUND: -82,
51
+ };
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9wYXkvY29yZS9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR2EsUUFBQSxhQUFhLEdBQUc7SUFDM0IsTUFBTSxFQUFFLGtCQUFrQjtJQUMxQixxQkFBcUIsRUFBRSwyQkFBMkI7Q0FDMUMsQ0FBQTtBQUVHLFFBQUEsbUJBQW1CLEdBQUc7SUFDakMsUUFBUSxFQUFFLHdCQUF3QjtJQUNsQyxPQUFPLEVBQUUsMkJBQTJCO0lBQ3BDLFdBQVcsRUFBRSw0QkFBNEI7Q0FDMUMsQ0FBQTtBQUVZLFFBQUEsVUFBVSxHQUFHO0lBQ3hCLFVBQVUsRUFBRSxpQ0FBaUM7SUFDN0MsWUFBWSxFQUFFLFNBQVM7SUFDdkIsWUFBWSxFQUFFLGNBQWM7SUFDNUIsWUFBWSxFQUFFLHFCQUFxQjtJQUNuQyxhQUFhLEVBQUUsc0JBQXNCO0lBQ3JDLFdBQVcsRUFBRSxvQkFBb0I7SUFDakMsZUFBZSxFQUFFLG9CQUFvQjtJQUNyQyxrQkFBa0IsRUFBRSwyQkFBMkI7SUFDL0MsWUFBWSxFQUFFLDRCQUE0QjtJQUMxQyxpQkFBaUIsRUFBRSx3QkFBd0I7Q0FDNUMsQ0FBQTtBQUVELHFHQUFxRztBQUN4RixRQUFBLGdCQUFnQixHQUFHO0lBQzlCLG1CQUFtQjtJQUNuQixJQUFJLEVBQUUsRUFBRTtJQUNSLFVBQVUsRUFBRSxFQUFFO0lBQ2QsVUFBVSxFQUFFLEVBQUU7SUFDZCxVQUFVLEVBQUUsRUFBRTtJQUNkLFVBQVUsRUFBRSxFQUFFO0lBQ2Qsc0JBQXNCO0lBQ3RCLE1BQU0sRUFBRSxDQUFDLEVBQUU7SUFDWCxPQUFPLEVBQUUsQ0FBQyxFQUFFO0lBQ1osU0FBUyxFQUFFLENBQUMsRUFBRTtJQUNkLFNBQVMsRUFBRSxDQUFDLEVBQUU7SUFDZCxTQUFTLEVBQUUsQ0FBQyxFQUFFO0lBQ2QsT0FBTyxFQUFFLENBQUMsRUFBRTtJQUNaLGdCQUFnQixFQUFFLENBQUMsRUFBRTtJQUNyQixlQUFlLEVBQUUsRUFBRTtJQUNuQixNQUFNLEVBQUUsRUFBRTtJQUNWLFNBQVMsRUFBRSxFQUFFO0lBQ2IsZUFBZSxFQUFFLEVBQUU7SUFDbkIsSUFBSSxFQUFFLEdBQUc7SUFDVCw0QkFBNEI7SUFDNUIsVUFBVSxFQUFFLENBQUMsRUFBRTtJQUNmLFNBQVMsRUFBRSxDQUFDLEVBQUU7SUFDZCxNQUFNLEVBQUUsQ0FBQyxFQUFFO0lBQ1gsY0FBYyxFQUFFLENBQUMsRUFBRTtDQUNYLENBQUEifQ==
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpClient = void 0;
4
+ const constants_1 = require("./constants");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ class HttpClient {
7
+ constructor({ options, logger }) {
8
+ this.options_ = options;
9
+ this.logger = logger;
10
+ this.testMode = options.testMode ?? true;
11
+ this.restApiUrl = constants_1.PayEnvironmentPaths.REST_API;
12
+ this.tguApiUrl = options.tguApiUrl ?? constants_1.PayEnvironmentPaths.TGU_API;
13
+ this.restApiV3Url = constants_1.PayEnvironmentPaths.REST_API_v3;
14
+ }
15
+ async restApiV3Request({ endpoint, data, method, }) {
16
+ const body = new URLSearchParams();
17
+ if (data) {
18
+ const keys = Object.keys(data);
19
+ for (const key of keys) {
20
+ body.append(key, `${data[key]}`);
21
+ }
22
+ }
23
+ return this.request_({
24
+ url: `${this.restApiV3Url}${endpoint}`,
25
+ data: body.toString(),
26
+ method,
27
+ headers: {
28
+ "Content-Type": "application/x-www-form-urlencoded",
29
+ },
30
+ });
31
+ }
32
+ async apiRequest({ endpoint, data, method, }) {
33
+ return this.request_({ url: `${this.restApiUrl}${endpoint}`, data, method });
34
+ }
35
+ async tguRequest({ endpoint, data, method, }) {
36
+ return this.request_({ url: `${this.tguApiUrl}${endpoint}`, data, method });
37
+ }
38
+ /**
39
+ * Run a request and return the result
40
+ * @param url
41
+ * @param data
42
+ * @param method
43
+ * @protected
44
+ */
45
+ async request_({ url, data, method, headers, }) {
46
+ const fetchHeaders = {
47
+ "Content-Type": "application/json",
48
+ Authorization: `Basic ${Buffer.from(`${this.options_.atCode}:${this.options_.apiToken}`).toString("base64")}`,
49
+ ...headers,
50
+ };
51
+ const response = (await fetch(url, {
52
+ method: method ?? "POST",
53
+ headers: fetchHeaders,
54
+ ...(data
55
+ ? {
56
+ body: fetchHeaders["Content-Type"] !== "application/json"
57
+ ? data
58
+ : JSON.stringify({
59
+ ...data,
60
+ integration: {
61
+ test: this.testMode,
62
+ },
63
+ }),
64
+ }
65
+ : {}),
66
+ }).then(async (resp) => {
67
+ const result = resp.headers
68
+ .get("content-type")
69
+ ?.includes("application/json")
70
+ ? await resp.json()
71
+ : await resp.text();
72
+ if (!resp.ok) {
73
+ if (this.testMode) {
74
+ try {
75
+ this.logger.debug(JSON.stringify({
76
+ url,
77
+ method,
78
+ body: JSON.stringify({
79
+ ...data,
80
+ integration: {
81
+ test: this.testMode,
82
+ },
83
+ }),
84
+ }));
85
+ this.logger.debug(JSON.stringify(result));
86
+ }
87
+ catch (e) { }
88
+ }
89
+ this.throwError(result);
90
+ }
91
+ return result;
92
+ }));
93
+ return response;
94
+ }
95
+ throwError(error) {
96
+ this.logger.error(error);
97
+ const message = error?.message ??
98
+ error?.detail ??
99
+ error?.violations?.[0]?.message ??
100
+ error?.title ??
101
+ "There was an error in the the Pay. response";
102
+ const code = error?.violations?.[0]?.code ?? error?.code;
103
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `${code ? `[${code}]: ` : ""}${message}`, code);
104
+ }
105
+ }
106
+ exports.HttpClient = HttpClient;
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3BheS9jb3JlL2h0dHAtY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDJDQUErQztBQUUvQyxxREFBcUQ7QUFFckQsTUFBYSxVQUFVO0lBUXJCLFlBQVksRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUE2QztRQUN2RSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQTtRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFBO1FBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsK0JBQW1CLENBQUMsUUFBUSxDQUFBO1FBQzlDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSwrQkFBbUIsQ0FBQyxPQUFPLENBQUE7UUFDakUsSUFBSSxDQUFDLFlBQVksR0FBRywrQkFBbUIsQ0FBQyxXQUFXLENBQUE7SUFDckQsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBZSxFQUNuQyxRQUFRLEVBQ1IsSUFBSSxFQUNKLE1BQU0sR0FLUDtRQUNDLE1BQU0sSUFBSSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUE7UUFFbEMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDOUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQ2xDLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ25CLEdBQUcsRUFBRSxH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