btrz-api-client 8.33.0 → 8.34.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 (65) hide show
  1. package/lib/client-standalone-min.js +3 -3
  2. package/lib/client.js +6 -2
  3. package/lib/endpoints/btrzpay/adyen.js +58 -0
  4. package/lib/endpoints/btrzpay/cardpointe.js +6 -3
  5. package/lib/endpoints/btrzpay/customerCards.js +19 -19
  6. package/lib/endpoints/btrzpay/customers.js +13 -13
  7. package/lib/endpoints/btrzpay/cybersource3ds.js +142 -0
  8. package/lib/endpoints/btrzpay/datalogic.js +64 -28
  9. package/lib/endpoints/btrzpay/oxxo.js +54 -28
  10. package/lib/endpoints/btrzpay/prismaTerminals.js +24 -15
  11. package/lib/endpoints/btrzpay/referenced-payments.js +4 -4
  12. package/lib/endpoints/btrzpay/square.js +8 -8
  13. package/lib/endpoints/btrzpay/stripe-terminals.js +16 -11
  14. package/lib/endpoints/btrzpay/stripe3ds.js +54 -0
  15. package/lib/endpoints/btrzpay/terminalPayments.js +19 -19
  16. package/lib/endpoints/inventory/segments-information-tables.js +13 -7
  17. package/lib/endpoints/inventory/trip-ids.js +67 -0
  18. package/lib/endpoints/inventory/trips.js +60 -13
  19. package/lib/endpoints/invoices/emails.js +15 -5
  20. package/lib/endpoints/invoices/invoices.js +46 -25
  21. package/lib/endpoints/invoices/pdfs.js +15 -8
  22. package/lib/endpoints/invoices/providers.js +42 -25
  23. package/lib/endpoints/invoices/tax-ids.js +11 -7
  24. package/lib/endpoints/sales/cancellations.js +43 -31
  25. package/lib/endpoints/sales/cart.js +21 -18
  26. package/lib/endpoints/sales/flexpasses.js +2 -5
  27. package/lib/endpoints/sales/order.js +41 -7
  28. package/lib/endpoints/sales/parcel-quotes.js +2 -2
  29. package/package.json +1 -1
  30. package/src/client.js +6 -2
  31. package/src/endpoints/btrzpay/adyen.js +44 -0
  32. package/src/endpoints/btrzpay/cardpointe.js +6 -4
  33. package/src/endpoints/btrzpay/customerCards.js +19 -19
  34. package/src/endpoints/btrzpay/customers.js +13 -13
  35. package/src/endpoints/btrzpay/cybersource3ds.js +114 -0
  36. package/src/endpoints/btrzpay/datalogic.js +63 -28
  37. package/src/endpoints/btrzpay/oxxo.js +53 -26
  38. package/src/endpoints/btrzpay/prismaTerminals.js +24 -15
  39. package/src/endpoints/btrzpay/referenced-payments.js +4 -4
  40. package/src/endpoints/btrzpay/square.js +8 -8
  41. package/src/endpoints/btrzpay/stripe-terminals.js +17 -10
  42. package/src/endpoints/btrzpay/stripe3ds.js +40 -0
  43. package/src/endpoints/btrzpay/terminalPayments.js +19 -19
  44. package/src/endpoints/inventory/segments-information-tables.js +13 -7
  45. package/src/endpoints/inventory/trip-ids.js +54 -0
  46. package/src/endpoints/inventory/trips.js +52 -14
  47. package/src/endpoints/invoices/emails.js +15 -5
  48. package/src/endpoints/invoices/invoices.js +46 -25
  49. package/src/endpoints/invoices/pdfs.js +15 -8
  50. package/src/endpoints/invoices/providers.js +42 -25
  51. package/src/endpoints/invoices/tax-ids.js +11 -7
  52. package/src/endpoints/sales/cancellations.js +43 -31
  53. package/src/endpoints/sales/cart.js +20 -18
  54. package/src/endpoints/sales/flexpasses.js +3 -4
  55. package/src/endpoints/sales/order.js +34 -7
  56. package/src/endpoints/sales/parcel-quotes.js +2 -2
  57. package/test/endpoints/btrzpay/adyen.tests.js +27 -0
  58. package/test/endpoints/btrzpay/carpointe.tests.js +14 -0
  59. package/test/endpoints/btrzpay/customerCards.test.js +9 -6
  60. package/test/endpoints/btrzpay/cybersource3ds.tests.js +55 -0
  61. package/test/endpoints/btrzpay/stripe-terminals.tests.js +5 -6
  62. package/test/endpoints/btrzpay/stripe3ds.tests.js +31 -0
  63. package/test/endpoints/inventory/trip-ids.test.js +27 -0
  64. package/test/endpoints/inventory/trips.test.js +19 -14
  65. package/test/endpoints/sales/order.test.js +7 -1
@@ -5,104 +5,139 @@ const {
5
5
  /**
6
6
  * Query params for GET /datalogic/payments (btrz-api-payments). See get-payments-handler getSpec().
7
7
  * @typedef {Object} DatalogicPaymentsListQuery
8
- * @property {string} [referenceNumber] - The payment reference number
8
+ * @property {string} referenceNumber - Payment reference number (required)
9
9
  */
10
10
 
11
11
  /**
12
- * Factory for Datalogic API (btrz-api-payments).
12
+ * Request body for POST /datalogic/payments/:referenceNumber. PostDatalogicPaymentsPayload.
13
+ * @typedef {Object} PostDatalogicPaymentsPayload
14
+ * @property {string} folio - FEMSA transaction id
15
+ * @property {number} id_terminal - Terminal/group ID
16
+ * @property {string} local_date - Local date (e.g. "02/08/2022 20:33:43")
17
+ * @property {string} amount - Debt amount
18
+ * @property {number} trx_no - Transaction number
19
+ */
20
+
21
+ /**
22
+ * Request body for POST /datalogic/reverse/:referenceNumber. PostDatalogicReversePayload.
23
+ * @typedef {Object} PostDatalogicReversePayload
24
+ * @property {string} folio - FEMSA transaction id
25
+ * @property {number} id_terminal - Terminal/group ID
26
+ * @property {string} local_date - Local date (e.g. "02/08/2022 20:33:43")
27
+ * @property {number} trx_no - Transaction number
28
+ */
29
+
30
+ /**
31
+ * Factory for Datalogic API (btrz-api-payments). Endpoints are hideInDocumentation; client for internal use.
13
32
  * @param {Object} deps
14
33
  * @param {import("axios").AxiosInstance} deps.client
15
34
  * @param {{ getToken: function(): string }} [deps.internalAuthTokenProvider]
16
35
  * @returns {{ payments: Object, referenceNumber: Object, authCode: Object }}
17
36
  */
18
- function datalogicFactory({client}) {
37
+ function datalogicFactory({client, internalAuthTokenProvider}) {
38
+ function authProvider(opts) {
39
+ return opts !== undefined && opts !== null ? opts : internalAuthTokenProvider;
40
+ }
41
+
19
42
  const payments = {
20
43
  /**
21
- * GET /datalogic/payments - list Datalogic payments.
44
+ * GET /datalogic/payments - list Datalogic payments by reference number.
22
45
  * @param {Object} opts
23
46
  * @param {string} [opts.token] - API key
24
47
  * @param {string} [opts.jwtToken] - JWT or internal auth symbol
25
- * @param {DatalogicPaymentsListQuery} [opts.query] - Query params (referenceNumber)
48
+ * @param {DatalogicPaymentsListQuery} opts.query - referenceNumber (required)
26
49
  * @param {Object} [opts.headers] - Optional headers
27
- * @returns {Promise<import("axios").AxiosResponse>}
50
+ * @param {{ getToken: function(): string }} [opts.internalAuthTokenProvider] - Internal auth provider
51
+ * @returns {Promise<import("axios").AxiosResponse<{ payments: Array }>>}
52
+ * GetDatalogicPaymentsResponse. Rejects 400, 401, 500.
28
53
  */
29
- all({token, jwtToken, headers, query, internalAuthTokenProvider}) {
54
+ all({token, jwtToken, headers, query, internalAuthTokenProvider: optsAuth}) {
30
55
  return client({
31
56
  url: "/datalogic/payments",
32
57
  params: query,
33
- headers: authorizationHeaders({token, jwtToken, internalAuthTokenProvider, headers})
58
+ headers: authorizationHeaders({token, jwtToken, internalAuthTokenProvider: authProvider(optsAuth), headers})
34
59
  });
35
60
  },
36
61
  /**
37
- * POST /datalogic/payments/:referenceNumber - update Datalogic payment. API does not accept query params.
62
+ * POST /datalogic/payments/:referenceNumber - pay by reference (20 digits).
63
+ * Body: datalogicInfo or flat PostDatalogicPaymentsPayload.
38
64
  * @param {Object} opts
39
65
  * @param {string} [opts.token] - API key
40
66
  * @param {string} [opts.jwtToken] - JWT or internal auth symbol
41
- * @param {string} opts.referenceNumber - Reference number
42
- * @param {Object} [opts.data] - Request body
67
+ * @param {string} opts.referenceNumber - Reference number (20 digits)
68
+ * @param {PostDatalogicPaymentsPayload|{ datalogicInfo: PostDatalogicPaymentsPayload }} opts.data - Body
43
69
  * @param {Object} [opts.headers] - Optional headers
44
- * @returns {Promise<import("axios").AxiosResponse>}
70
+ * @param {{ getToken: function(): string }} [opts.internalAuthTokenProvider] - Internal auth provider
71
+ * @returns {Promise<import("axios").AxiosResponse<{ payment: Object }>>}
72
+ * PostDatalogicPaymentsResponse. Rejects 400, 401, 500.
45
73
  */
46
- update({token, jwtToken, headers, query, referenceNumber, data, internalAuthTokenProvider}) {
74
+ update({token, jwtToken, headers, query, referenceNumber, data, internalAuthTokenProvider: optsAuth}) {
47
75
  return client({
48
76
  url: `/datalogic/payments/${referenceNumber}`,
49
77
  method: "post",
50
78
  params: query,
51
79
  data,
52
- headers: authorizationHeaders({token, jwtToken, internalAuthTokenProvider, headers})
80
+ headers: authorizationHeaders({token, jwtToken, internalAuthTokenProvider: authProvider(optsAuth), headers})
53
81
  });
54
82
  },
55
83
  /**
56
- * POST /datalogic/reverse/:referenceNumber - reverse Datalogic payment. API does not accept query params.
84
+ * POST /datalogic/reverse/:referenceNumber - reverse by reference (20 digits).
85
+ * Body: datalogicReverseInfo or flat PostDatalogicReversePayload.
57
86
  * @param {Object} opts
58
87
  * @param {string} [opts.token] - API key
59
88
  * @param {string} [opts.jwtToken] - JWT or internal auth symbol
60
- * @param {string} opts.referenceNumber - Reference number
61
- * @param {Object} [opts.data] - Request body
89
+ * @param {string} opts.referenceNumber - Reference number (20 digits)
90
+ * @param {PostDatalogicReversePayload|{ datalogicReverseInfo: PostDatalogicReversePayload }} opts.data - Body
62
91
  * @param {Object} [opts.headers] - Optional headers
63
- * @returns {Promise<import("axios").AxiosResponse>}
92
+ * @param {{ getToken: function(): string }} [opts.internalAuthTokenProvider] - Internal auth provider
93
+ * @returns {Promise<import("axios").AxiosResponse<{ payment: Object }>>}
94
+ * PostDatalogicPaymentsResponse. Rejects 400, 401, 500.
64
95
  */
65
- reverse({token, jwtToken, headers, query, referenceNumber, data, internalAuthTokenProvider}) {
96
+ reverse({token, jwtToken, headers, query, referenceNumber, data, internalAuthTokenProvider: optsAuth}) {
66
97
  return client({
67
98
  url: `/datalogic/reverse/${referenceNumber}`,
68
99
  method: "post",
69
100
  params: query,
70
101
  data,
71
- headers: authorizationHeaders({token, jwtToken, internalAuthTokenProvider, headers})
102
+ headers: authorizationHeaders({token, jwtToken, internalAuthTokenProvider: authProvider(optsAuth), headers})
72
103
  });
73
104
  }
74
105
  };
75
106
 
76
107
  const referenceNumber = {
77
108
  /**
78
- * GET /datalogic/reference-number - get reference number. API does not accept query params.
109
+ * GET /datalogic/reference-number - get new Datalogic reference number.
79
110
  * @param {Object} opts
80
111
  * @param {string} [opts.token] - API key
81
112
  * @param {string} [opts.jwtToken] - JWT or internal auth symbol
82
113
  * @param {Object} [opts.headers] - Optional headers
83
- * @returns {Promise<import("axios").AxiosResponse>}
114
+ * @param {{ getToken: function(): string }} [opts.internalAuthTokenProvider] - Internal auth provider
115
+ * @returns {Promise<import("axios").AxiosResponse<{ referenceNumber: string }>>}
116
+ * GetDatalogicReferenceNumberResponse. Rejects 401, 404, 500.
84
117
  */
85
- get({token, jwtToken, headers, internalAuthTokenProvider}) {
118
+ get({token, jwtToken, headers, internalAuthTokenProvider: optsAuth}) {
86
119
  return client({
87
120
  url: "/datalogic/reference-number",
88
- headers: authorizationHeaders({token, jwtToken, internalAuthTokenProvider, headers})
121
+ headers: authorizationHeaders({token, jwtToken, internalAuthTokenProvider: authProvider(optsAuth), headers})
89
122
  });
90
123
  }
91
124
  };
92
125
 
93
126
  const authCode = {
94
127
  /**
95
- * GET /datalogic/auth-code - get auth code. API does not accept query params.
128
+ * GET /datalogic/auth-code - get new Datalogic authorization code.
96
129
  * @param {Object} opts
97
130
  * @param {string} [opts.token] - API key
98
131
  * @param {string} [opts.jwtToken] - JWT or internal auth symbol
99
132
  * @param {Object} [opts.headers] - Optional headers
100
- * @returns {Promise<import("axios").AxiosResponse>}
133
+ * @param {{ getToken: function(): string }} [opts.internalAuthTokenProvider] - Internal auth provider
134
+ * @returns {Promise<import("axios").AxiosResponse<{ authCode: string }>>}
135
+ * GetDatalogicAuthCodeResponse. Rejects 401, 404, 500.
101
136
  */
102
- get({token, jwtToken, headers, internalAuthTokenProvider}) {
137
+ get({token, jwtToken, headers, internalAuthTokenProvider: optsAuth}) {
103
138
  return client({
104
139
  url: "/datalogic/auth-code",
105
- headers: authorizationHeaders({token, jwtToken, internalAuthTokenProvider, headers})
140
+ headers: authorizationHeaders({token, jwtToken, internalAuthTokenProvider: authProvider(optsAuth), headers})
106
141
  });
107
142
  }
108
143
  };
@@ -5,91 +5,118 @@ const {
5
5
  /**
6
6
  * Query params for GET /oxxo/:token/payments (btrz-api-payments). See get-payments-handler getSpec().
7
7
  * @typedef {Object} OxxoPaymentsListQuery
8
- * @property {string} [referenceNumber] - Payment reference number
8
+ * @property {string} referenceNumber - Payment reference number (required)
9
9
  */
10
10
 
11
11
  /**
12
- * Factory for OXXO API (btrz-api-payments).
12
+ * Request body for POST /oxxo/:token/payments/:referenceNumber. PostOxxoPaymentsPayload.
13
+ * @typedef {Object} PostOxxoPaymentsPayload
14
+ * @property {string} ticket - Oxxo sale ticket id
15
+ * @property {number} amount - Amount to pay in cents
16
+ * @property {string} folio - FEMSA transaction id
17
+ * @property {string} store - Store id
18
+ * @property {string} account - Account id (ObjectId)
19
+ */
20
+
21
+ /**
22
+ * Request body for POST /oxxo/:token/reverse/:referenceNumber. PostOxxoReversePayload.
23
+ * @typedef {Object} PostOxxoReversePayload
24
+ * @property {string} ticket - Oxxo sale ticket id
25
+ * @property {number} amount - Amount in cents
26
+ * @property {string} folio - FEMSA transaction id
27
+ * @property {string} store - Store id
28
+ * @property {string} account - Account id (ObjectId)
29
+ */
30
+
31
+ /**
32
+ * Factory for OXXO API (btrz-api-payments). Endpoints are hideInDocumentation; client for internal use.
13
33
  * @param {Object} deps
14
34
  * @param {import("axios").AxiosInstance} deps.client
15
35
  * @param {{ getToken: function(): string }} [deps.internalAuthTokenProvider]
16
36
  * @returns {{ token: Object, payments: Object }}
17
37
  */
18
- function oxxoFactory({client, internalAuthTokenProvider: _internalAuthTokenProvider}) {
38
+ function oxxoFactory({client, internalAuthTokenProvider}) {
39
+ function authProvider(opts) {
40
+ return opts !== undefined && opts !== null ? opts : internalAuthTokenProvider;
41
+ }
42
+
19
43
  const token = {
20
44
  /**
21
- * GET /oxxo/token - get OXXO token. API does not accept query params.
45
+ * GET /oxxo/token - get new Oxxo token. No query params.
22
46
  * @param {Object} opts
23
47
  * @param {string} [opts.jwtToken] - JWT or internal auth symbol
24
48
  * @param {{ getToken: function(): string }} [opts.internalAuthTokenProvider]
25
49
  * @param {Object} [opts.headers] - Optional request headers
26
- * @returns {Promise<import("axios").AxiosResponse>}
50
+ * @returns {Promise<import("axios").AxiosResponse<{ token: string }>>}
51
+ * GetOxxoTokenResponse. Rejects with 401, 500.
27
52
  */
28
- get({jwtToken, headers, internalAuthTokenProvider}) {
53
+ get({jwtToken, headers, internalAuthTokenProvider: optsAuth}) {
29
54
  return client({
30
55
  url: "/oxxo/token",
31
- headers: authorizationHeaders({jwtToken, internalAuthTokenProvider, headers})
56
+ headers: authorizationHeaders({jwtToken, internalAuthTokenProvider: authProvider(optsAuth), headers})
32
57
  });
33
58
  }
34
59
  };
35
60
 
36
61
  const payments = {
37
62
  /**
38
- * GET /oxxo/:oxxoToken/payments - list OXXO payments.
63
+ * GET /oxxo/:token/payments - list Oxxo payments by token and reference number.
39
64
  * @param {Object} opts
40
65
  * @param {string} [opts.jwtToken] - JWT or internal auth symbol
41
- * @param {string} opts.oxxoToken - OXXO token
42
- * @param {OxxoPaymentsListQuery} [opts.query] - Query params (referenceNumber)
66
+ * @param {string} opts.oxxoToken - Oxxo token
67
+ * @param {OxxoPaymentsListQuery} opts.query - referenceNumber (required)
43
68
  * @param {{ getToken: function(): string }} [opts.internalAuthTokenProvider]
44
69
  * @param {Object} [opts.headers] - Optional request headers
45
- * @returns {Promise<import("axios").AxiosResponse>} GetOxxoPaymentsResponse; 400 ERROR_GETTING_PAYMENT_METHODS
70
+ * @returns {Promise<import("axios").AxiosResponse<{ payments: Array }>>}
71
+ * GetOxxoPaymentsResponse. Rejects with 400 (ERROR_GETTING_PAYMENT_METHODS, OXXO_PAY_NOT_ENABLED), 401, 500.
46
72
  */
47
- all({jwtToken, headers, oxxoToken, query, internalAuthTokenProvider}) {
73
+ all({jwtToken, headers, oxxoToken, query, internalAuthTokenProvider: optsAuth}) {
48
74
  return client({
49
75
  url: `/oxxo/${oxxoToken}/payments`,
50
76
  params: query,
51
- headers: authorizationHeaders({jwtToken, internalAuthTokenProvider, headers})
77
+ headers: authorizationHeaders({jwtToken, internalAuthTokenProvider: authProvider(optsAuth), headers})
52
78
  });
53
79
  },
54
80
  /**
55
- * POST /oxxo/:oxxoToken/payments/:referenceNumber - update OXXO payment. API does not accept query params.
81
+ * POST /oxxo/:token/payments/:referenceNumber - pay Oxxo payment (referenceNumber: UUID v4 or 20 digits).
56
82
  * @param {Object} opts
57
83
  * @param {string} [opts.jwtToken] - JWT or internal auth symbol
58
- * @param {string} opts.oxxoToken - OXXO token
84
+ * @param {string} opts.oxxoToken - Oxxo token
59
85
  * @param {string} opts.referenceNumber - Payment reference number
60
- * @param {Object} opts.data - Request body (PostOxxoPaymentsPayload)
86
+ * @param {PostOxxoPaymentsPayload|{ oxxoInfo: PostOxxoPaymentsPayload }} opts.data - Request body
61
87
  * @param {{ getToken: function(): string }} [opts.internalAuthTokenProvider]
62
88
  * @param {Object} [opts.headers] - Optional request headers
63
- * @returns {Promise<import("axios").AxiosResponse>}
89
+ * @returns {Promise<import("axios").AxiosResponse<{ payment: Object }>>}
90
+ * Rejects with 400 (INVALID_REFERENCE_NUMBER_FORMAT, INVALID_ACCOUNT, OXXO_PAY_NOT_ENABLED), 401, 500.
64
91
  */
65
- update({jwtToken, headers, oxxoToken, query, referenceNumber, data, internalAuthTokenProvider}) {
92
+ update({jwtToken, headers, oxxoToken, query, referenceNumber, data, internalAuthTokenProvider: optsAuth}) {
66
93
  return client({
67
94
  url: `/oxxo/${oxxoToken}/payments/${referenceNumber}`,
68
95
  method: "post",
69
96
  params: query,
70
97
  data,
71
- headers: authorizationHeaders({jwtToken, internalAuthTokenProvider, headers})
98
+ headers: authorizationHeaders({jwtToken, internalAuthTokenProvider: authProvider(optsAuth), headers})
72
99
  });
73
100
  },
74
101
  /**
75
- * POST /oxxo/:oxxoToken/reverse/:referenceNumber - reverse OXXO payment. API does not accept query params.
102
+ * POST /oxxo/:token/reverse/:referenceNumber - reverse Oxxo payment (referenceNumber: UUID v4 or 20 digits).
76
103
  * @param {Object} opts
77
- * @param {string} [opts.token] - API key
78
104
  * @param {string} [opts.jwtToken] - JWT or internal auth symbol
79
- * @param {string} opts.oxxoToken - OXXO token
105
+ * @param {string} opts.oxxoToken - Oxxo token
80
106
  * @param {string} opts.referenceNumber - Payment reference number
81
- * @param {Object} [opts.data] - Request body (PostOxxoReversePayload)
107
+ * @param {PostOxxoReversePayload|{ oxxoInfo: PostOxxoReversePayload }} [opts.data] - Request body
82
108
  * @param {{ getToken: function(): string }} [opts.internalAuthTokenProvider]
83
109
  * @param {Object} [opts.headers] - Optional request headers
84
- * @returns {Promise<import("axios").AxiosResponse>}
110
+ * @returns {Promise<import("axios").AxiosResponse<{ payment: Object }>>}
111
+ * Rejects with 400 (INVALID_REFERENCE_NUMBER_FORMAT, INVALID_ACCOUNT, OXXO_PAY_NOT_ENABLED), 401, 500.
85
112
  */
86
- reverse({token: authToken, jwtToken, headers, query, referenceNumber, data, internalAuthTokenProvider, oxxoToken}) {
113
+ reverse({jwtToken, headers, query, referenceNumber, data, internalAuthTokenProvider: optsAuth, oxxoToken}) {
87
114
  return client({
88
115
  url: `/oxxo/${oxxoToken}/reverse/${referenceNumber}`,
89
116
  method: "post",
90
117
  params: query,
91
118
  data,
92
- headers: authorizationHeaders({token: authToken, jwtToken, internalAuthTokenProvider, headers})
119
+ headers: authorizationHeaders({jwtToken, internalAuthTokenProvider: authProvider(optsAuth), headers})
93
120
  });
94
121
  }
95
122
  };
@@ -3,10 +3,11 @@ const {
3
3
  } = require("../endpoints_helpers.js");
4
4
 
5
5
  /**
6
- * Query params for GET payment/reversal/refund and PUT refund (btrz-api-payments). See get-by-id-* and put-refunds getSpec().
6
+ * Query params for Prisma terminals endpoints (btrz-api-payments).
7
7
  * @typedef {Object} PrismaTerminalsQuery
8
8
  * @property {string} [providerId] - Account provider (operator) ID; used by agencies/sellers
9
9
  * @property {boolean} [validateRefund] - (PUT refunds only) If true, fetch current state from Prisma before applying
10
+ * @property {boolean} [validatePayment] - (PUT payments only) If true, validate payment against the provider
10
11
  */
11
12
 
12
13
  /**
@@ -35,12 +36,13 @@ function prismaTerminalsFactory({client, internalAuthTokenProvider}) {
35
36
  });
36
37
  },
37
38
  /**
38
- * POST /prisma-terminals/payments/:id/reversals - create reversal. API does not accept query params.
39
+ * POST /prisma-terminals/payments/:id/reversals - create reversal.
39
40
  * @param {Object} opts
40
41
  * @param {string} [opts.token] - API key
41
42
  * @param {string} [opts.jwtToken] - JWT or internal auth symbol
42
- * @param {string} opts.id - Payment id
43
+ * @param {string} opts.id - Payment id (prismaPaymentId)
43
44
  * @param {Object} opts.prismaReversal - Prisma reversal payload
45
+ * @param {PrismaTerminalsQuery} [opts.query] - Query params (providerId)
44
46
  * @param {Object} [opts.headers] - Optional headers
45
47
  * @returns {Promise<import("axios").AxiosResponse>}
46
48
  */
@@ -54,11 +56,12 @@ function prismaTerminalsFactory({client, internalAuthTokenProvider}) {
54
56
  });
55
57
  },
56
58
  /**
57
- * DELETE /prisma-terminals/reversals/:id - delete reversal. API does not accept query params.
59
+ * DELETE /prisma-terminals/reversals/:id - delete reversal.
58
60
  * @param {Object} opts
59
61
  * @param {string} [opts.token] - API key
60
62
  * @param {string} [opts.jwtToken] - JWT or internal auth symbol
61
- * @param {string} opts.id - Reversal id
63
+ * @param {string} opts.id - Reversal id (prismaPaymentId)
64
+ * @param {PrismaTerminalsQuery} [opts.query] - Query params (providerId)
62
65
  * @param {Object} [opts.headers] - Optional headers
63
66
  * @returns {Promise<import("axios").AxiosResponse>}
64
67
  */
@@ -90,12 +93,13 @@ function prismaTerminalsFactory({client, internalAuthTokenProvider}) {
90
93
  });
91
94
  },
92
95
  /**
93
- * POST /prisma-terminals/payments/:id/refunds - create refund. API does not accept query params.
96
+ * POST /prisma-terminals/payments/:id/refunds - create refund.
94
97
  * @param {Object} opts
95
98
  * @param {string} [opts.token] - API key
96
99
  * @param {string} [opts.jwtToken] - JWT or internal auth symbol
97
- * @param {string} opts.id - Payment id
100
+ * @param {string} opts.id - Payment id (prismaPaymentId)
98
101
  * @param {Object} opts.prismaRefund - Prisma refund payload
102
+ * @param {PrismaTerminalsQuery} [opts.query] - Query params (providerId)
99
103
  * @param {Object} [opts.headers] - Optional headers
100
104
  * @returns {Promise<import("axios").AxiosResponse>}
101
105
  */
@@ -109,11 +113,12 @@ function prismaTerminalsFactory({client, internalAuthTokenProvider}) {
109
113
  });
110
114
  },
111
115
  /**
112
- * DELETE /prisma-terminals/refunds/:id - delete refund. API does not accept query params.
116
+ * DELETE /prisma-terminals/refunds/:id - delete refund.
113
117
  * @param {Object} opts
114
118
  * @param {string} [opts.token] - API key
115
119
  * @param {string} [opts.jwtToken] - JWT or internal auth symbol
116
- * @param {string} opts.id - Refund id
120
+ * @param {string} opts.id - Refund id (prismaPaymentId)
121
+ * @param {PrismaTerminalsQuery} [opts.query] - Query params (providerId)
117
122
  * @param {Object} [opts.headers] - Optional headers
118
123
  * @returns {Promise<import("axios").AxiosResponse>}
119
124
  */
@@ -165,11 +170,12 @@ function prismaTerminalsFactory({client, internalAuthTokenProvider}) {
165
170
  });
166
171
  },
167
172
  /**
168
- * POST /prisma-terminals/payments - create payment. API does not accept query params.
173
+ * POST /prisma-terminals/payments - create payment.
169
174
  * @param {Object} opts
170
175
  * @param {string} [opts.token] - API key
171
176
  * @param {string} [opts.jwtToken] - JWT or internal auth symbol
172
177
  * @param {Object} opts.prismaPayment - Prisma payment payload
178
+ * @param {PrismaTerminalsQuery} [opts.query] - Query params (providerId)
173
179
  * @param {Object} [opts.headers] - Optional headers
174
180
  * @returns {Promise<import("axios").AxiosResponse>}
175
181
  */
@@ -183,11 +189,12 @@ function prismaTerminalsFactory({client, internalAuthTokenProvider}) {
183
189
  });
184
190
  },
185
191
  /**
186
- * DELETE /prisma-terminals/payments/:id - delete payment. API does not accept query params.
192
+ * DELETE /prisma-terminals/payments/:id - delete payment.
187
193
  * @param {Object} opts
188
194
  * @param {string} [opts.token] - API key
189
195
  * @param {string} [opts.jwtToken] - JWT or internal auth symbol
190
- * @param {string} opts.id - Payment id
196
+ * @param {string} opts.id - Payment id (prismaPaymentId)
197
+ * @param {PrismaTerminalsQuery} [opts.query] - Query params (providerId)
191
198
  * @param {Object} [opts.headers] - Optional headers
192
199
  * @returns {Promise<import("axios").AxiosResponse>}
193
200
  */
@@ -200,12 +207,13 @@ function prismaTerminalsFactory({client, internalAuthTokenProvider}) {
200
207
  });
201
208
  },
202
209
  /**
203
- * PUT /prisma-terminals/payments/:id - update payment. API does not accept query params.
210
+ * PUT /prisma-terminals/payments/:id - update payment (hidden in API docs).
204
211
  * @param {Object} opts
205
212
  * @param {string} [opts.token] - API key
206
213
  * @param {string} [opts.jwtToken] - JWT or internal auth symbol
207
- * @param {string} opts.id - Payment id
214
+ * @param {string} opts.id - Payment id (prismaPaymentId)
208
215
  * @param {Object} opts.prismaPayment - Prisma payment payload
216
+ * @param {PrismaTerminalsQuery} [opts.query] - Query params (providerId, validatePayment)
209
217
  * @param {Object} [opts.headers] - Optional headers
210
218
  * @returns {Promise<import("axios").AxiosResponse>}
211
219
  */
@@ -224,11 +232,12 @@ function prismaTerminalsFactory({client, internalAuthTokenProvider}) {
224
232
 
225
233
  const settlements = {
226
234
  /**
227
- * POST /prisma-terminals/settlements - create settlement. API does not accept query params.
235
+ * POST /prisma-terminals/settlements - create settlement.
228
236
  * @param {Object} opts
229
237
  * @param {string} [opts.token] - API key
230
238
  * @param {string} [opts.jwtToken] - JWT or internal auth symbol
231
239
  * @param {Object} opts.settlement - Settlement payload
240
+ * @param {PrismaTerminalsQuery} [opts.query] - Query params (providerId)
232
241
  * @param {Object} [opts.headers] - Optional headers
233
242
  * @returns {Promise<import("axios").AxiosResponse>}
234
243
  */
@@ -15,14 +15,14 @@ const {authorizationHeaders} = require("./../endpoints_helpers.js");
15
15
  */
16
16
  function referencedPaymentsFactory({client, internalAuthTokenProvider}) {
17
17
  /**
18
- * GET /referenced-payments/:transactionId/:referenceNumber/status - get status. API does not accept query params.
18
+ * GET /referenced-payments/:transactionId/:referenceNumber/status - get referenced payment status. Requires backoffice auth. Response body: { paymentResult: { status, result } | null }.
19
19
  * @param {Object} opts
20
20
  * @param {string} [opts.token] - API key
21
21
  * @param {string} [opts.jwtToken] - JWT or internal auth symbol
22
- * @param {string} opts.transactionId - Transaction id
23
- * @param {string} opts.referenceNumber - Reference number
22
+ * @param {string} opts.transactionId - Transaction ID
23
+ * @param {string} opts.referenceNumber - Reference number of the payment
24
24
  * @param {Object} [opts.headers] - Optional headers
25
- * @returns {Promise<import("axios").AxiosResponse>}
25
+ * @returns {Promise<import("axios").AxiosResponse<{ paymentResult: { status: "error"|"pending"|"success"|"review", result: object } | null }>>}
26
26
  */
27
27
  function getStatus({token, jwtToken, transactionId, referenceNumber, headers}) {
28
28
  return client.get(`/referenced-payments/${transactionId}/${referenceNumber}/status`, {
@@ -3,7 +3,7 @@ const {
3
3
  } = require("./../endpoints_helpers.js");
4
4
 
5
5
  /**
6
- * Factory for Square webhooks API (btrz-api-payments).
6
+ * Factory for Square webhooks API (btrz-api-payments). Used to forward or simulate Square webhook requests to the Payments API.
7
7
  * @param {Object} deps
8
8
  * @param {import("axios").AxiosInstance} deps.client
9
9
  * @param {{ getToken: function(): string }} [deps.internalAuthTokenProvider]
@@ -11,14 +11,14 @@ const {
11
11
  */
12
12
  function squareWebhooksFactory({client, internalAuthTokenProvider}) {
13
13
  /**
14
- * POST /square-webhooks/:providerId - create Square webhook. API does not accept query params.
14
+ * POST /square-webhooks/:providerId - send Square webhook payload to the Payments API. API verifies x-square-signature when present. Body must include type and data (Square webhook format).
15
15
  * @param {Object} opts
16
16
  * @param {string} [opts.token] - API key
17
17
  * @param {string} [opts.jwtToken] - JWT or internal auth symbol
18
- * @param {string} opts.providerId - Provider id
19
- * @param {Object} opts.data - Request body
20
- * @param {Object} [opts.headers] - Optional headers
21
- * @returns {Promise<import("axios").AxiosResponse>}
18
+ * @param {string} opts.providerId - Provider ID (square_terminal payment method owner)
19
+ * @param {Object} opts.data - Request body (Square webhook payload: type, data required; optional merchant_id, event_id, created_at)
20
+ * @param {Object} [opts.headers] - Optional headers (e.g. x-square-signature for verification)
21
+ * @returns {Promise<import("axios").AxiosResponse<{ status: "OK" }>>}
22
22
  */
23
23
  function create({token, jwtToken, data, providerId, headers}) {
24
24
  return client({
@@ -43,12 +43,12 @@ function squareWebhooksFactory({client, internalAuthTokenProvider}) {
43
43
  */
44
44
  function squareTerminalsFactory({client, internalAuthTokenProvider}) {
45
45
  /**
46
- * GET /square-terminals - get Square terminals. API does not accept query params.
46
+ * GET /square-terminals - list Square terminals for the account. Requires JWT (BETTEREZ_APP or MOBILE_SCANNER). Response body: { terminals } with terminal objects (id, name, code, deviceId, productType, locationId, status, pairBy, createdAt, statusChangedAt).
47
47
  * @param {Object} opts
48
48
  * @param {string} [opts.token] - API key
49
49
  * @param {string} [opts.jwtToken] - JWT or internal auth symbol
50
50
  * @param {Object} [opts.headers] - Optional headers
51
- * @returns {Promise<import("axios").AxiosResponse>}
51
+ * @returns {Promise<import("axios").AxiosResponse<{ terminals: Array<{ id: string, name: string, code: string, deviceId?: string, productType?: string, locationId: string, status?: string, pairBy?: string, createdAt?: string, statusChangedAt?: string }> }>>}
52
52
  */
53
53
  function get({token, jwtToken, headers}) {
54
54
  return client.get("/square-terminals", {
@@ -5,7 +5,15 @@ const {
5
5
  /**
6
6
  * Query params for GET /stripe-terminals (btrz-api-payments). See get-handler getSpec().
7
7
  * @typedef {Object} StripeTerminalsListQuery
8
- * @property {string} [providerId] - Account provider (operator) ID; used by agencies/sellers
8
+ * @property {string} [providerId] - Account provider (operator) ID; used by agencies/sellers; when omitted, authenticated account ID is used
9
+ */
10
+
11
+ /**
12
+ * Response for GET /stripe-terminals. Paginated list of Stripe readers.
13
+ * @typedef {Object} GetStripeTerminalsResponse
14
+ * @property {Object[]} stripeTerminals - Stripe Terminal reader objects (id, label, serial_number, status, etc.)
15
+ * @property {string} next - Next page link; empty if no next page
16
+ * @property {string} previous - Previous page link; empty if no previous page
9
17
  */
10
18
 
11
19
  /**
@@ -17,13 +25,13 @@ const {
17
25
  */
18
26
  function stripeTerminalsFactory({client, internalAuthTokenProvider}) {
19
27
  /**
20
- * GET /stripe-terminals - list Stripe terminals.
28
+ * GET /stripe-terminals - list Stripe Terminal readers for the account (paginated).
21
29
  * @param {Object} opts
22
30
  * @param {string} [opts.token] - API key
23
31
  * @param {string} [opts.jwtToken] - JWT or internal auth symbol
24
- * @param {StripeTerminalsListQuery} [opts.query] - Query params (providerId)
32
+ * @param {StripeTerminalsListQuery} [opts.query] - Optional providerId
25
33
  * @param {Object} [opts.headers] - Optional headers
26
- * @returns {Promise<import("axios").AxiosResponse>}
34
+ * @returns {Promise<import("axios").AxiosResponse<GetStripeTerminalsResponse>>} Rejects with 400 (STRIPE_SECRET_KEY_INVALID), 401, 404 (PAYMENT_METHOD_NOT_FOUND), 500.
27
35
  */
28
36
  function all({token, jwtToken, headers, query = {}}) {
29
37
  return client.get("/stripe-terminals", {
@@ -35,21 +43,20 @@ function stripeTerminalsFactory({client, internalAuthTokenProvider}) {
35
43
  }
36
44
 
37
45
  /**
38
- * POST /stripe-terminals/:id/simulate - simulate Stripe payment. API does not accept query params.
46
+ * POST /stripe-terminals/:terminalId/simulate - simulate a payment on a Stripe Terminal reader. API does not accept query params.
39
47
  * @param {Object} opts
40
48
  * @param {string} [opts.token] - API key
41
49
  * @param {string} [opts.jwtToken] - JWT or internal auth symbol
42
- * @param {string} opts.id - Terminal id
43
- * @param {Object} opts.stripePayment - Stripe payment payload
50
+ * @param {string} opts.id - Terminal ID (Stripe reader id, e.g. tmr_xxx)
51
+ * @param {{ ccNumber: string }} opts.stripePayment - Payment to simulate; ccNumber required
44
52
  * @param {Object} [opts.headers] - Optional headers
45
- * @returns {Promise<import("axios").AxiosResponse>}
53
+ * @returns {Promise<import("axios").AxiosResponse<{ stripeTerminalPayment: Object }>>} Rejects with 400 (WRONG_DATA), 401, 404 (PAYMENT_METHOD_NOT_FOUND, TRANSACTION_NOT_FOUND), 409 (errorCode/errorMessage), 500.
46
54
  */
47
- function simulate({token, jwtToken, id, stripePayment, query = {}, headers}) {
55
+ function simulate({token, jwtToken, id, stripePayment, headers}) {
48
56
  return client({
49
57
  url: `/stripe-terminals/${id}/simulate`,
50
58
  method: "post",
51
59
  headers: authorizationHeaders({token, jwtToken, internalAuthTokenProvider, headers}),
52
- params: query,
53
60
  data: {stripePayment}
54
61
  });
55
62
  }
@@ -0,0 +1,40 @@
1
+ /* eslint-disable max-len */
2
+ const {authorizationHeaders} = require("../endpoints_helpers.js");
3
+
4
+ /**
5
+ * Request body for POST /stripe-payment-intent (btrz-api-payments). PaymentIntentPostData.
6
+ * @typedef {Object} PaymentIntentPostData
7
+ * @property {string} providerName - Provider name (e.g. "stripe") used to resolve the payment method with Stripe 3DS
8
+ * @property {Object} data - Payment data: card details, amount, currency, transactionId, customer info, etc.
9
+ */
10
+
11
+ /**
12
+ * Factory for Stripe 3DS API (btrz-api-payments): create Stripe Payment Intent for 3DS flows.
13
+ * @param {Object} deps
14
+ * @param {import("axios").AxiosInstance} deps.client
15
+ * @param {{ getToken: function(): string }} [deps.internalAuthTokenProvider]
16
+ * @returns {{ createPaymentIntent: function }}
17
+ */
18
+ function stripe3dsFactory({client, internalAuthTokenProvider}) {
19
+ /**
20
+ * POST /stripe-payment-intent - creates a Stripe Payment Intent for 3DS; returns requires_action and payment_intent_client_secret.
21
+ * @param {Object} opts
22
+ * @param {string} [opts.token] - API key
23
+ * @param {string} [opts.jwtToken] - JWT or internal auth symbol
24
+ * @param {string} opts.providerName - Provider name (e.g. "stripe")
25
+ * @param {Object} opts.data - Payment data (card, amount, currency, transactionId, etc.)
26
+ * @param {Object} [opts.headers] - Optional request headers
27
+ * @returns {Promise<import("axios").AxiosResponse<{ requires_action: boolean, payment_intent_client_secret: string }>>} PaymentIntentResponse. Rejects with 400 (WRONG_DATA, PAYMENT_INTENT_MISSING_PAYMENT_DATA, PAYMENT_INTENT_MISSING_PROVIDER, PROVIDER_NOT_FOUND, MISSING_PAYMENT_METHOD_PARAMS, PAYMENT_METHOD_NOT_FOUND, STRIPE_MISSING_PRIVATE_KEY, MISSING_PAYMENT_DATA), 401, 500.
28
+ */
29
+ function createPaymentIntent({token, jwtToken, providerName, data, headers}) {
30
+ return client.post("/stripe-payment-intent", {providerName, data}, {
31
+ headers: authorizationHeaders({token, jwtToken, internalAuthTokenProvider, headers})
32
+ });
33
+ }
34
+
35
+ return {
36
+ createPaymentIntent
37
+ };
38
+ }
39
+
40
+ module.exports = stripe3dsFactory;