@cloudcommerce/app-tiny-erp 2.56.3 → 2.57.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,96 @@
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
+ import exportOrderToTiny from './integration/export-order-to-tiny.js';
5
+
6
+ export const sendWaitingOrders = async () => {
7
+ const startDate = new Date();
8
+ const isEvenHour = !(startDate.getHours() % 2);
9
+ const appData = await getAppData('tinyErp', ['hidden_data', 'data']);
10
+ if (!process.env.TINYERP_TOKEN) {
11
+ const tinyToken = appData?.tiny_api_token;
12
+ if (!tinyToken) {
13
+ logger.warn('Missing Tiny API token');
14
+ return;
15
+ }
16
+ process.env.TINYERP_TOKEN = tinyToken;
17
+ }
18
+ const d = new Date();
19
+ d.setDate(d.getDate() - 60);
20
+ const fields = [
21
+ '_id',
22
+ 'number',
23
+ 'amount',
24
+ 'financial_status',
25
+ 'fulfillment_status',
26
+ 'fulfillments',
27
+ 'shipping_lines',
28
+ 'buyers',
29
+ 'items',
30
+ 'transactions',
31
+ 'opened_at',
32
+ 'created_at',
33
+ 'notes',
34
+ 'staff_notes',
35
+ 'extra_discount',
36
+ 'payment_method_label',
37
+ 'shipping_method_label',
38
+ ];
39
+ const endpoint = 'orders'
40
+ + `?fields=${fields.join(',')}`
41
+ + '&financial_status.current=paid'
42
+ + '&fulfillment_status.current=null'
43
+ + `&updated_at>=${d.toISOString()}`
44
+ + `&sort=${isEvenHour ? 'number' : '-number'}`
45
+ + '&limit=200';
46
+ logger.info('Start sending orders to Tiny', { endpoint });
47
+ try {
48
+ const { data } = await api.get(endpoint);
49
+ const orders = data.result;
50
+ logger.info(`${orders.length} orders listed`, {
51
+ ids: orders.map(({ _id }) => _id),
52
+ numbers: orders.map(({ number }) => number),
53
+ });
54
+ let createdCount = 0;
55
+ let skippedCount = 0;
56
+ for (let i = 0; i < orders.length; i++) {
57
+ const order = orders[i];
58
+ if (!order.number) continue;
59
+ try {
60
+ const queueEntry = { nextId: order._id };
61
+ // eslint-disable-next-line no-await-in-loop
62
+ const result = await exportOrderToTiny(order, queueEntry, appData, true);
63
+ if (result && typeof result === 'object' && 'registros' in result) {
64
+ createdCount += 1;
65
+ } else {
66
+ skippedCount += 1;
67
+ }
68
+ } catch (error) {
69
+ const err = new Error(`Failed sending order ${order.number} to Tiny`);
70
+ logger.error(err, {
71
+ orderId: order._id,
72
+ orderNumber: order.number,
73
+ request: error.config,
74
+ response: error.response?.data,
75
+ });
76
+ }
77
+ // Rate limit: 150ms between requests
78
+ // eslint-disable-next-line no-await-in-loop
79
+ await new Promise((resolve) => { setTimeout(resolve, 150); });
80
+ }
81
+ logger.info(`Finished sending orders to Tiny: ${createdCount} created, ${skippedCount} skipped`);
82
+ } catch (_err) {
83
+ if (_err.response) {
84
+ const err = new Error('Failed listing orders for Tiny');
85
+ logger.error(err, {
86
+ request: _err.config,
87
+ response: _err.response.data,
88
+ });
89
+ } else {
90
+ logger.error(_err);
91
+ }
92
+ }
93
+ };
94
+
95
+ export default sendWaitingOrders;
96
+ // # sourceMappingURL=tiny-erp-send-orders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiny-erp-send-orders.js","sourceRoot":"","sources":["../src/tiny-erp-send-orders.ts"],"names":[],"mappings":"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"}
package/lib/tiny-erp.js CHANGED
@@ -5,6 +5,7 @@ import config, { createExecContext } from '@cloudcommerce/firebase/lib/config';
5
5
  import { createAppEventsFunction } from '@cloudcommerce/firebase/lib/helpers/pubsub';
6
6
  import handleApiEvent from './event-to-tiny.js';
7
7
  import handleTinyWebhook from './tiny-webhook.js';
8
+ import sendWaitingOrders from './tiny-erp-send-orders.js';
8
9
 
9
10
  const { httpsFunctionOptions } = config.get();
10
11
  const { region } = httpsFunctionOptions;
@@ -21,5 +22,10 @@ export const tinyerp = {
21
22
  .https.onRequest((req, res) => {
22
23
  return createExecContext(() => handleTinyWebhook(req, res));
23
24
  }),
25
+ cronSendOrders: functions
26
+ .region(region)
27
+ .runWith({ timeoutSeconds: 540, memory: '512MB' })
28
+ .pubsub.schedule(process.env.CRONTAB_TINYERP_SEND_ORDERS || '17 */3 * * *')
29
+ .onRun(() => sendWaitingOrders()),
24
30
  };
25
31
  // # sourceMappingURL=tiny-erp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tiny-erp.js","sourceRoot":"","sources":["../src/tiny-erp.ts"],"names":[],"mappings":"AAAA,iDAAiD;AAEjD,OAAO,kCAAkC,CAAC;AAC1C,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAC9C,OAAO,MAAM,EAAE,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAC7C,OAAO,iBAAiB,MAAM,gBAAgB,CAAC;AAE/C,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AAC9C,MAAM,EAAE,MAAM,EAAE,GAAG,oBAAoB,CAAC;AAExC,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,YAAY,EAAE,uBAAuB,CACnC,SAAS,EACT,cAAc,EACd,EAAE,MAAM,EAAE,OAAO,EAAE,CACpB;IAED,OAAO,EAAE,SAAS;SACf,MAAM,CAAC,MAAM,CAAC;SACd,OAAO,CAAC;QACP,GAAG,oBAAoB;QACvB,MAAM,EAAE,OAAO;QACf,cAAc,EAAE,GAAG;KACpB,CAAC;SACD,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5B,OAAO,iBAAiB,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC;CACL,CAAC"}
1
+ {"version":3,"file":"tiny-erp.js","sourceRoot":"","sources":["../src/tiny-erp.ts"],"names":[],"mappings":"AAAA,iDAAiD;AAEjD,OAAO,kCAAkC,CAAC;AAC1C,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAC9C,OAAO,MAAM,EAAE,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAC7C,OAAO,iBAAiB,MAAM,gBAAgB,CAAC;AAC/C,OAAO,iBAAiB,MAAM,wBAAwB,CAAC;AAEvD,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AAC9C,MAAM,EAAE,MAAM,EAAE,GAAG,oBAAoB,CAAC;AAExC,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,YAAY,EAAE,uBAAuB,CACnC,SAAS,EACT,cAAc,EACd,EAAE,MAAM,EAAE,OAAO,EAAE,CACpB;IAED,OAAO,EAAE,SAAS;SACf,MAAM,CAAC,MAAM,CAAC;SACd,OAAO,CAAC;QACP,GAAG,oBAAoB;QACvB,MAAM,EAAE,OAAO;QACf,cAAc,EAAE,GAAG;KACpB,CAAC;SACD,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5B,OAAO,iBAAiB,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC;IAEJ,cAAc,EAAE,SAAS;SACtB,MAAM,CAAC,MAAM,CAAC;SACd,OAAO,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;SACjD,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,cAAc,CAAC;SAC1E,KAAK,CAAC,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC;CACpC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-tiny-erp",
3
3
  "type": "module",
4
- "version": "2.56.3",
4
+ "version": "2.57.0",
5
5
  "description": "e-com.plus Cloud Commerce app for Tiny ERP",
6
6
  "main": "lib/tiny-erp.js",
7
7
  "files": [
@@ -27,12 +27,12 @@
27
27
  "firebase-admin": "^13.6.0",
28
28
  "firebase-functions": "^6.6.0",
29
29
  "image-size": "^2.0.2",
30
- "@cloudcommerce/api": "2.56.3",
31
- "@cloudcommerce/firebase": "2.56.3"
30
+ "@cloudcommerce/api": "2.57.0",
31
+ "@cloudcommerce/firebase": "2.57.0"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@firebase/app-types": "^0.9.3",
35
- "@cloudcommerce/types": "2.56.3"
35
+ "@cloudcommerce/types": "2.57.0"
36
36
  },
37
37
  "scripts": {
38
38
  "build": "bash ../../../scripts/build-lib.sh"