@cloudcommerce/app-pagarme-v5 2.42.4 → 2.43.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.
@@ -0,0 +1,2 @@
1
+ export declare const cancelExpiredOrders: () => Promise<void>;
2
+ export default cancelExpiredOrders;
@@ -0,0 +1,52 @@
1
+ import logger from 'firebase-functions/logger';
2
+ import api from '@cloudcommerce/api';
3
+ import getAppData from '@cloudcommerce/firebase/lib/helpers/get-app-data';
4
+
5
+ export const cancelExpiredOrders = async () => {
6
+ const appData = await getAppData('pagarMeV5', ['data']);
7
+ const pixValidityMins = appData.account_deposit?.due_time;
8
+ const pixValidityMs = pixValidityMins * 60 * 1000;
9
+ const bolValidityDays = appData.banking_billet?.days_due_date;
10
+ const bolValidityMs = bolValidityDays * 24 * 60 * 60 * 1000;
11
+ if (!pixValidityMs && !bolValidityMs) {
12
+ return;
13
+ }
14
+ const d = new Date();
15
+ d.setDate(d.getDate() - 30);
16
+ const endpoint = 'orders'
17
+ + '?fields=_id,transactions'
18
+ + '&transactions.app.intermediator.code=pagarme'
19
+ + '&financial_status.current=pending'
20
+ + `&updated_at>=${d.toISOString()}`
21
+ + '&limit=500';
22
+ const { data: { result: orders } } = await api.get(endpoint);
23
+ logger.info(`${orders.length} orders listed`);
24
+ const now = Date.now();
25
+ orders.forEach(({ _id, transactions }) => {
26
+ const transaction = transactions?.find(({ app }) => {
27
+ return app?.intermediator?.code === 'pagarme';
28
+ });
29
+ if (!transaction) return;
30
+ const transactionDate = transaction.created_at && new Date(transaction.created_at);
31
+ if (!transactionDate) return;
32
+ const paymentMethod = transaction.payment_method.code;
33
+ if (paymentMethod === 'account_deposit') {
34
+ if (!pixValidityMs) return;
35
+ if (now - transactionDate.getTime() < pixValidityMs) return;
36
+ } else if (paymentMethod === 'banking_billet') {
37
+ if (!bolValidityMs) return;
38
+ if (now - transactionDate.getTime() < bolValidityMs) return;
39
+ } else {
40
+ return;
41
+ }
42
+ api.post(`orders/${_id}/payments_history`, {
43
+ transaction_id: transaction._id,
44
+ date_time: new Date().toISOString(),
45
+ status: 'voided',
46
+ flags: ['pagarme-expired'],
47
+ });
48
+ });
49
+ };
50
+
51
+ export default cancelExpiredOrders;
52
+ // # sourceMappingURL=pagarme-cancel-expireds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagarme-cancel-expireds.js","sourceRoot":"","sources":["../src/pagarme-cancel-expireds.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,2BAA2B,CAAC;AAC/C,OAAO,GAAG,MAAM,oBAAoB,CAAC;AACrC,OAAO,UAAU,MAAM,kDAAkD,CAAC;AAE1E,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,IAAI,EAAE;IAC5C,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC;IAC1D,MAAM,aAAa,GAAG,eAAe,GAAG,EAAE,GAAG,IAAI,CAAC;IAClD,MAAM,eAAe,GAAG,OAAO,CAAC,cAAc,EAAE,aAAa,CAAC;IAC9D,MAAM,aAAa,GAAG,eAAe,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC5D,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,EAAE,CAAC;QACrC,OAAO;IACT,CAAC;IACD,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;IACrB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5B,MAAM,QAAQ,GAAG,QAAQ;UACrB,0BAA0B;UAC1B,8CAA8C;UAC9C,mCAAmC;UACnC,gBAAgB,CAAC,CAAC,WAAW,EAAE,EAAE;UACjC,YAAkC,CAAC;IACvC,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7D,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,gBAAgB,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE;QACvC,MAAM,WAAW,GAAG,YAAY,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;YACjD,OAAO,GAAG,EAAE,aAAa,EAAE,IAAI,KAAK,SAAS,CAAC;QAChD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,MAAM,eAAe,GAAG,WAAW,CAAC,UAAU,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACnF,IAAI,CAAC,eAAe;YAAE,OAAO;QAC7B,MAAM,aAAa,GAAG,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC;QACtD,IAAI,aAAa,KAAK,iBAAiB,EAAE,CAAC;YACxC,IAAI,CAAC,aAAa;gBAAE,OAAO;YAC3B,IAAI,GAAG,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,aAAa;gBAAE,OAAO;QAC9D,CAAC;aAAM,IAAI,aAAa,KAAK,gBAAgB,EAAE,CAAC;YAC9C,IAAI,CAAC,aAAa;gBAAE,OAAO;YAC3B,IAAI,GAAG,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,aAAa;gBAAE,OAAO;QAC9D,CAAC;aAAM,CAAC;YACN,OAAO;QACT,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,mBAAmB,EAAE;YACzC,cAAc,EAAE,WAAW,CAAC,GAAG;YAC/B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,CAAC,iBAAiB,CAAC;SAC0B,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -3,4 +3,5 @@ import * as functions from 'firebase-functions/v1';
3
3
  export declare const pagarmev5: {
4
4
  onStoreEvent: functions.CloudFunction<functions.pubsub.Message>;
5
5
  webhook: functions.HttpsFunction;
6
+ cronCancelExpireds: functions.CloudFunction<unknown>;
6
7
  };
@@ -5,6 +5,7 @@ import config from '@cloudcommerce/firebase/lib/config';
5
5
  import { createAppEventsFunction } from '@cloudcommerce/firebase/lib/helpers/pubsub';
6
6
  import handleApiEvent from '../lib-mjs/events-to-pagarme5.mjs';
7
7
  import handlePagarmeV5Webhook from '../lib-mjs/pagarme5-webhook.mjs';
8
+ import cancelExpiredOrders from './pagarme-cancel-expireds.js';
8
9
 
9
10
  const { httpsFunctionOptions } = config.get();
10
11
 
@@ -20,5 +21,9 @@ export const pagarmev5 = {
20
21
  handlePagarmeV5Webhook(req, res);
21
22
  }
22
23
  }),
24
+ cronCancelExpireds: functions
25
+ .region(config.get().httpsFunctionOptions.region)
26
+ .pubsub.schedule(process.env.CRONTAB_PAGARME_CANCEL_EXPIREDS || '22 * * * *')
27
+ .onRun(() => cancelExpiredOrders()),
23
28
  };
24
29
  // # sourceMappingURL=pagarme-v5-events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pagarme-v5-events.js","sourceRoot":"","sources":["../src/pagarme-v5-events.ts"],"names":[],"mappings":"AAAA,iDAAiD;AAEjD,OAAO,kCAAkC,CAAC;AAC1C,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAC;AACnD,OAAO,MAAM,MAAM,oCAAoC,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,cAAc,MAAM,mCAAmC,CAAC;AAC/D,OAAO,sBAAsB,MAAM,iCAAiC,CAAC;AAErE,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AAE9C,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,YAAY,EAAE,uBAAuB,CAAC,WAAW,EAAE,cAAc,CAAC;IAElE,OAAO,EAAE,SAAS;SACf,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC;SACnC,OAAO,CAAC,oBAAoB,CAAC;SAC7B,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5B,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC1B,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC;CACL,CAAC"}
1
+ {"version":3,"file":"pagarme-v5-events.js","sourceRoot":"","sources":["../src/pagarme-v5-events.ts"],"names":[],"mappings":"AAAA,iDAAiD;AAEjD,OAAO,kCAAkC,CAAC;AAC1C,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAC;AACnD,OAAO,MAAM,MAAM,oCAAoC,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,cAAc,MAAM,mCAAmC,CAAC;AAC/D,OAAO,sBAAsB,MAAM,iCAAiC,CAAC;AACrE,OAAO,mBAAmB,MAAM,2BAA2B,CAAC;AAE5D,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AAE9C,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,YAAY,EAAE,uBAAuB,CAAC,WAAW,EAAE,cAAc,CAAC;IAElE,OAAO,EAAE,SAAS;SACf,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC;SACnC,OAAO,CAAC,oBAAoB,CAAC;SAC7B,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5B,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC1B,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC;IAEJ,kBAAkB,EAAE,SAAS;SAC1B,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC;SAChD,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,YAAY,CAAC;SAC5E,KAAK,CAAC,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC;CACtC,CAAC"}
@@ -197,12 +197,13 @@ const createPayment = async ({
197
197
  pagarmeOrder.items = [];
198
198
 
199
199
  items.forEach(async (item) => {
200
- if (item.quantity > 0) {
200
+ const itemAmount = Math.floor((item.final_price || item.price) * 100);
201
+ if (itemAmount > 0 && item.quantity > 0) {
201
202
  const itemOrder = {
202
203
  quantity: item.quantity,
203
204
  description: item.name || item.variation_id || item.product_id,
204
205
  code: item.sku?.substring(0, 52) || item.variation_id || item.product_id,
205
- amount: Math.floor((item.final_price || item.price) * 100),
206
+ amount: itemAmount,
206
207
  };
207
208
  pagarmeOrder.items.push(itemOrder);
208
209
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-pagarme-v5",
3
3
  "type": "module",
4
- "version": "2.42.4",
4
+ "version": "2.43.0",
5
5
  "description": "e-com.plus Cloud Commerce app to integrate Pagar.me API v5 with recurring payments",
6
6
  "main": "lib/index.js",
7
7
  "exports": {
@@ -29,14 +29,14 @@
29
29
  "dependencies": {
30
30
  "@ecomplus/utils": "1.5.0-rc.6",
31
31
  "axios": "^1.9.0",
32
- "firebase-admin": "^13.3.0",
32
+ "firebase-admin": "^13.4.0",
33
33
  "firebase-functions": "^6.3.2",
34
- "@cloudcommerce/api": "2.42.4",
35
- "@cloudcommerce/firebase": "2.42.4"
34
+ "@cloudcommerce/firebase": "2.43.0",
35
+ "@cloudcommerce/api": "2.43.0"
36
36
  },
37
37
  "devDependencies": {
38
- "@cloudcommerce/test-base": "2.42.4",
39
- "@cloudcommerce/types": "2.42.4"
38
+ "@cloudcommerce/types": "2.43.0",
39
+ "@cloudcommerce/test-base": "2.43.0"
40
40
  },
41
41
  "scripts": {
42
42
  "build": "bash scripts/build.sh",