cloudcommerce 0.0.60 → 0.0.63
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.
- package/CHANGELOG.md +26 -0
- package/action.yml +6 -1
- package/package.json +1 -1
- package/packages/api/package.json +1 -1
- package/packages/apps/discounts/package.json +1 -1
- package/packages/apps/tiny-erp/lib/event-to-tiny.js +9 -3
- package/packages/apps/tiny-erp/lib/event-to-tiny.js.map +1 -1
- package/packages/apps/tiny-erp/lib/integration/import-order-from-tiny.js +4 -6
- package/packages/apps/tiny-erp/lib/integration/import-order-from-tiny.js.map +1 -1
- package/packages/apps/tiny-erp/lib/integration/import-product-from-tiny.js +5 -16
- package/packages/apps/tiny-erp/lib/integration/import-product-from-tiny.js.map +1 -1
- package/packages/apps/tiny-erp/lib/tiny-erp.js +6 -5
- package/packages/apps/tiny-erp/lib/tiny-erp.js.map +1 -1
- package/packages/apps/tiny-erp/lib/tiny-webhook.js +46 -89
- package/packages/apps/tiny-erp/lib/tiny-webhook.js.map +1 -1
- package/packages/apps/tiny-erp/package.json +1 -1
- package/packages/apps/tiny-erp/src/event-to-tiny.ts +10 -3
- package/packages/apps/tiny-erp/src/integration/import-order-from-tiny.ts +4 -6
- package/packages/apps/tiny-erp/src/integration/import-product-from-tiny.ts +5 -17
- package/packages/apps/tiny-erp/src/tiny-erp.ts +9 -7
- package/packages/apps/tiny-erp/src/tiny-webhook.ts +49 -92
- package/packages/cli/package.json +1 -1
- package/packages/events/lib/index.js +1 -1
- package/packages/events/package.json +1 -1
- package/packages/firebase/lib/index.js +1 -1
- package/packages/firebase/package.json +1 -1
- package/packages/modules/package.json +1 -1
- package/packages/passport/package.json +1 -1
- package/packages/ssr/package.json +1 -1
- package/packages/storefront/package.json +1 -1
- package/packages/types/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [0.0.63](https://github.com/ecomplus/cloud-commerce/compare/v0.0.62...v0.0.63) (2022-08-31)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* Group app (Tiny ERP) functions and fix name for CLoud Functions v2 limits ([a059056](https://github.com/ecomplus/cloud-commerce/commit/a0590564ce8e376c000ba02ccb3b2a94d31e3c0d))
|
|
11
|
+
|
|
12
|
+
### [0.0.62](https://github.com/ecomplus/cloud-commerce/compare/v0.0.61...v0.0.62) (2022-08-31)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* Properly import `firebase-admin/firestore` ([5754bb0](https://github.com/ecomplus/cloud-commerce/commit/5754bb0f7378106b15f9f683597f78afeb92ba74))
|
|
18
|
+
|
|
19
|
+
### [0.0.61](https://github.com/ecomplus/cloud-commerce/compare/v0.0.60...v0.0.61) (2022-08-31)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### Features
|
|
23
|
+
|
|
24
|
+
* Add optional `tiny-erp-token` input to GH Action to improve Tiny webhooks performance ([0444f65](https://github.com/ecomplus/cloud-commerce/commit/0444f655b0a358979b14cee8ab85f0f018d08df3))
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
### Bug Fixes
|
|
28
|
+
|
|
29
|
+
* **tiny-erp:** Properly set and reuse `process.env.TINY_ERP_TOKEN` on webhooks ([4aee43a](https://github.com/ecomplus/cloud-commerce/commit/4aee43a3f067eb430c0c183eada27dca1b331fd3))
|
|
30
|
+
|
|
5
31
|
### [0.0.60](https://github.com/ecomplus/cloud-commerce/compare/v0.0.59...v0.0.60) (2022-08-30)
|
|
6
32
|
|
|
7
33
|
|
package/action.yml
CHANGED
|
@@ -15,7 +15,9 @@ inputs:
|
|
|
15
15
|
description: 'E-Com Plus store API key'
|
|
16
16
|
required: true
|
|
17
17
|
ecom-store-id:
|
|
18
|
-
description: 'Store ID if defined in config.json'
|
|
18
|
+
description: 'Store ID if not defined in config.json'
|
|
19
|
+
tiny-erp-token:
|
|
20
|
+
description: 'App: Tiny ERP API token'
|
|
19
21
|
|
|
20
22
|
outputs: {}
|
|
21
23
|
|
|
@@ -26,6 +28,7 @@ runs:
|
|
|
26
28
|
with:
|
|
27
29
|
node-version: 16
|
|
28
30
|
cache: 'npm'
|
|
31
|
+
cache-dependency-path: '**/package-lock.json'
|
|
29
32
|
|
|
30
33
|
- if: github.event_name == 'push'
|
|
31
34
|
shell: bash
|
|
@@ -52,6 +55,7 @@ runs:
|
|
|
52
55
|
ECOM_AUTHENTICATION_ID: ${{ inputs.ecom-authentication-id }}
|
|
53
56
|
ECOM_API_KEY: ${{ inputs.ecom-api-key }}
|
|
54
57
|
ECOM_STORE_ID: ${{ inputs.ecom-store-id }}
|
|
58
|
+
TINY_ERP_TOKEN: ${{ inputs.tiny-erp-token }}
|
|
55
59
|
run: |
|
|
56
60
|
export GAC_FILENAME=".gac-$RANDOM.json"
|
|
57
61
|
echo $FIREBASE_SERVICE_ACCOUNT > $GAC_FILENAME
|
|
@@ -59,6 +63,7 @@ runs:
|
|
|
59
63
|
ECOM_API_KEY=$ECOM_API_KEY
|
|
60
64
|
ECOM_STORE_ID=$ECOM_STORE_ID
|
|
61
65
|
GITHUB_TOKEN=$GITHUB_TOKEN
|
|
66
|
+
TINY_ERP_TOKEN=$TINY_ERP_TOKEN
|
|
62
67
|
" > functions/.env
|
|
63
68
|
GOOGLE_APPLICATION_CREDENTIALS=$GAC_FILENAME npm run deploy
|
|
64
69
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cloudcommerce",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.63",
|
|
5
5
|
"description": "Open fair-code headless commerce platform: API-first, microservices based, event driven and cloud native",
|
|
6
6
|
"main": "packages/api/lib/index.js",
|
|
7
7
|
"author": "E-Com Club Softwares para E-commerce <ti@e-com.club>",
|
|
@@ -29,9 +29,15 @@ const handleApiEvent = async ({
|
|
|
29
29
|
return null;
|
|
30
30
|
}
|
|
31
31
|
logger.info(`> Webhook ${resourceId} [${evName}]`);
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
if (!process.env.TINY_ERP_TOKEN) {
|
|
33
|
+
const tinyToken = appData.tiny_api_token;
|
|
34
|
+
if (typeof tinyToken === 'string' && tinyToken) {
|
|
35
|
+
process.env.TINY_ERP_TOKEN = tinyToken;
|
|
36
|
+
} else {
|
|
37
|
+
logger.warn('Missing Tiny API token');
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (process.env.TINY_ERP_TOKEN) {
|
|
35
41
|
let integrationConfig;
|
|
36
42
|
let canCreateNew = false;
|
|
37
43
|
if (evName === 'applications-dataSet') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-to-tiny.js","sourceRoot":"","sources":["../src/event-to-tiny.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,+BAA+B,CAAC;AACnD,OAAO,aAAa,MAAM,sCAAsC,CAAC;AACjE,OAAO,WAAW,MAAM,oCAAoC,CAAC;AAC7D,OAAO,aAAa,MAAM,wCAAwC,CAAC;AACnE,OAAO,WAAW,MAAM,sCAAsC,CAAC;AAC/D,OAAO,UAAU,MAAM,gCAAgC,CAAC;AAExD,6BAA6B;AAC7B,MAAM,mBAAmB,GAAG;IAC1B,WAAW,EAAE;QACX,WAAW,EAAE,aAAa;QAC1B,SAAS,EAAE,WAAW;KACvB;IACD,WAAW,EAAE;QACX,IAAI,EAAE,aAAa;QACnB,aAAa,EAAE,WAAW;KAC3B;CACF,CAAC;AAEF,MAAM,cAAc,GAAoB,KAAK,EAAE,EAC7C,MAAM,EACN,QAAQ,EACR,MAAM,EACN,GAAG,GACJ,EAAE,EAAE;IACH,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC;IACxC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,UAAU,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IACpD,IACE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;WACjC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EACzC;QACA,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;KACb;IACD,MAAM,CAAC,IAAI,CAAC,aAAa,UAAU,KAAK,MAAM,GAAG,CAAC,CAAC;IAEnD,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"event-to-tiny.js","sourceRoot":"","sources":["../src/event-to-tiny.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,+BAA+B,CAAC;AACnD,OAAO,aAAa,MAAM,sCAAsC,CAAC;AACjE,OAAO,WAAW,MAAM,oCAAoC,CAAC;AAC7D,OAAO,aAAa,MAAM,wCAAwC,CAAC;AACnE,OAAO,WAAW,MAAM,sCAAsC,CAAC;AAC/D,OAAO,UAAU,MAAM,gCAAgC,CAAC;AAExD,6BAA6B;AAC7B,MAAM,mBAAmB,GAAG;IAC1B,WAAW,EAAE;QACX,WAAW,EAAE,aAAa;QAC1B,SAAS,EAAE,WAAW;KACvB;IACD,WAAW,EAAE;QACX,IAAI,EAAE,aAAa;QACnB,aAAa,EAAE,WAAW;KAC3B;CACF,CAAC;AAEF,MAAM,cAAc,GAAoB,KAAK,EAAE,EAC7C,MAAM,EACN,QAAQ,EACR,MAAM,EACN,GAAG,GACJ,EAAE,EAAE;IACH,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC;IACxC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,UAAU,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IACpD,IACE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;WACjC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EACzC;QACA,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;KACb;IACD,MAAM,CAAC,IAAI,CAAC,aAAa,UAAU,KAAK,MAAM,GAAG,CAAC,CAAC;IAEnD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE;QAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;QACzC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,EAAE;YAC9C,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,SAAS,CAAC;SACxC;aAAM;YACL,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;SACvC;KACF;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE;QAC9B,IAAI,iBAAiB,CAAC;QACtB,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,IAAI,MAAM,KAAK,sBAAsB,EAAE;YACrC,iBAAiB,GAAG,OAAO,CAAC;YAC5B,YAAY,GAAG,IAAI,CAAC;SACrB;aAAM,IAAI,MAAM,KAAK,qBAAqB,EAAE;YAC3C,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC3C,iBAAiB,GAAG;gBAClB,YAAY,EAAE;oBACZ,SAAS,EAAE,CAAC,UAAU,CAAC;iBACxB;aACF,CAAC;SACH;aAAM;YACL,IAAI,MAAM,KAAK,cAAc,EAAE;gBAC7B,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;oBACzB,OAAO,IAAI,CAAC;iBACb;aACF;iBAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;gBAChC,OAAO,IAAI,CAAC;aACb;YACD,iBAAiB,GAAG;gBAClB,YAAY,EAAE;oBACZ,WAAW,EAAE,CAAC,UAAU,CAAC;iBAC1B;aACF,CAAC;SACH;QAED,IAAI,iBAAiB,EAAE;YACrB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACjD,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC3B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;iBAC7C;YACH,CAAC,CAAC,CAAC;YACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACvC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC1B,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAE/C,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,EAAE;oBACpD,8DAA8D;oBAC9D,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE;wBAChC,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;wBAChC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE;4BACpC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;4BAC/C,MAAM,kBAAkB,GAAG,MAAM,KAAK,sBAAsB,CAAC;4BAC7D,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;4BAC9C,MAAM,OAAO,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;4BACtE,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;4BAEtB,IACE,OAAO,MAAM,KAAK,QAAQ;mCACvB,MAAM,CAAC,MAAM;mCACb,OAAO,EACV;gCACA,MAAM,SAAS,GAAG,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;gCAClD,MAAM,CAAC,IAAI,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;gCACvC,MAAM,UAAU,GAAG;oCACjB,MAAM;oCACN,KAAK;oCACL,MAAM;oCACN,GAAG;oCACH,kBAAkB;oCAClB,GAAG;iCACJ,CAAC;gCACF,OAAO,OAAO,CACZ,MAAM,EACN,UAAU,EACV,OAAO,EACP,YAAY,EACZ,aAAa,CACd,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;oCACjB,OAAO,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;gCACvD,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oCACf,OAAO,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gCACnD,CAAC,CAAC,CAAC;6BACJ;yBACF;qBACF;iBACF;aACF;SACF;KACF;IACD,gBAAgB;IAChB,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
// eslint-disable-next-line import/no-unresolved
|
|
2
|
+
import { getFirestore } from 'firebase-admin/firestore';
|
|
2
3
|
import logger from 'firebase-functions/lib/logger';
|
|
3
4
|
import api from '@cloudcommerce/api';
|
|
4
5
|
import postTiny from './post-tiny-erp.js';
|
|
@@ -26,7 +27,7 @@ export default async (apiDoc, queueEntry) => {
|
|
|
26
27
|
: null;
|
|
27
28
|
const orderNumber = pedido.numero_ecommerce;
|
|
28
29
|
logger.info(`Import order n${orderNumber} ${tinyOrderId} => ${situacao}`);
|
|
29
|
-
const documentRef =
|
|
30
|
+
const documentRef = getFirestore().doc(`tinyErpOrders/${tinyOrderId}`);
|
|
30
31
|
const documentSnapshot = await documentRef.get();
|
|
31
32
|
if (documentSnapshot.exists
|
|
32
33
|
&& documentSnapshot.get('situacao') === situacao) {
|
|
@@ -68,10 +69,7 @@ export default async (apiDoc, queueEntry) => {
|
|
|
68
69
|
});
|
|
69
70
|
return Promise.all(promises)
|
|
70
71
|
.then(([firstResult]) => {
|
|
71
|
-
documentRef.set({
|
|
72
|
-
situacao,
|
|
73
|
-
updatedAt: firestore.Timestamp.fromDate(new Date()),
|
|
74
|
-
}).catch(logger.error);
|
|
72
|
+
documentRef.set({ situacao }).catch(logger.error);
|
|
75
73
|
return (firstResult && firstResult.response) || firstResult;
|
|
76
74
|
});
|
|
77
75
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-order-from-tiny.js","sourceRoot":"","sources":["../../src/integration/import-order-from-tiny.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"import-order-from-tiny.js","sourceRoot":"","sources":["../../src/integration/import-order-from-tiny.ts"],"names":[],"mappings":"AACA,gDAAgD;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,MAAM,MAAM,+BAA+B,CAAC;AACnD,OAAO,GAAG,MAAM,oBAAoB,CAAC;AACrC,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,UAAU,MAAM,2BAA2B,CAAC;AACnD,OAAO,WAAW,MAAM,4BAA4B,CAAC;AAErD,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,EAAE;IAChC,IAAI,YAAY,CAAC;IACjB,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACzB,IACE,MAAM;eACH,CAAC,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,IAAI,YAAY,CAAC,SAAS,CAAC,EACrF;YACA,YAAY,GAAG,MAAM,CAAC;SACvB;IACH,CAAC,CAAC,CAAC;IACH,OAAO,YAAY,IAAI,YAAY,CAAC,MAAM,CAAC;AAC7C,CAAC,CAAC;AAEF,eAAe,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE;IAC1C,MAAM,YAAY,GAAG,KAAK,EAAE,WAAW,EAAE,EAAE;QACzC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,mBAAmB,EAAE;YACrD,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC;SACxB,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;YAClD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE;YAC/B,CAAC,CAAC,IAAI,CAAC;QACT,MAAM,WAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,iBAAiB,WAAW,IAAI,WAAW,OAAO,QAAQ,EAAE,CAAC,CAAC;QAE1E,MAAM,WAAW,GAAG,YAAY,EAAE,CAAC,GAAG,CAAC,iBAAiB,WAAW,EAAE,CAAC,CAAC;QACvE,MAAM,gBAAgB,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,CAAC;QACjD,IACE,gBAAgB,CAAC,MAAM;eACpB,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,QAAQ,EAChD;YACA,MAAM,CAAC,IAAI,CAAC,2BAA2B,WAAW,IAAI,WAAW,mBAAmB,CAAC,CAAC;YACtF,OAAO,IAAI,CAAC;SACb;QAED,IAAI,YAAY,GAAG,wEAAwE,CAAC;QAC5F,IAAI,WAAW,EAAE;YACf,YAAY,IAAI,WAAW,WAAW,EAAE,CAAC;SAC1C;aAAM;YACL,YAAY,IAAI,4BAA4B,WAAW,OAAO,CAAC;SAChE;QACD,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,YAAwB,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAClB,OAAO,IAAI,CAAC;SACb;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,cAAc,CAAW,CAAC;QAC9E,MAAM,QAAQ,GAAmB,EAAE,CAAC;QACpC,IAAI,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE;YACpD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;SAC/D;QACD,MAAM,EAAE,iBAAiB,EAAE,eAAe,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QACrE,MAAM,IAAI,GAAwB;YAChC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK,EAAE,CAAC,WAAW,CAAC;SACrB,CAAC;QACF;YACE,CAAC,eAAe,EAAE,kBAAkB,CAAC;YACrC,CAAC,iBAAiB,EAAE,cAAc,CAAC;SACpC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,EAAE;YACrC,IACE,SAAS;gBACT,aAAa;mBACV,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,SAAS,CAAC,EAC3E;gBACA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;gBACxB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,GAAG,IAAI,WAAW,EAAE,EAAE,IAAW,CAAC,CAAC,CAAC;gBAC3E,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,eAAe,SAAS,cAAc,WAAW,EAAE,CAAC,CAAC;aAC9E;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;aACzB,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE;YACtB,WAAW,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAClD,OAAO,CAAC,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC;QAC9D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC;IAC1C,IAAI,OAAO,eAAe,KAAK,QAAQ,IAAI,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;QAC5E,OAAO,YAAY,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KACnD;IACD,OAAO,QAAQ,CAAC,uBAAuB,EAAE;QACvC,MAAM,EAAE,eAAe;KACxB,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;QACtB,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YAC5C,OAAO,MAAM,CAAC,eAAe,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QACH,IAAI,SAAS,EAAE;YACb,OAAO,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAC1C;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
// eslint-disable-next-line import/no-unresolved
|
|
2
|
-
import { getFirestore } from 'firebase-admin/firestore';
|
|
3
1
|
import logger from 'firebase-functions/lib/logger';
|
|
4
2
|
import api from '@cloudcommerce/api';
|
|
5
3
|
import updateAppData from '@cloudcommerce/firebase/lib/helpers/update-app-data';
|
|
@@ -8,20 +6,6 @@ import parseProduct from './parsers/product-from-tiny.js';
|
|
|
8
6
|
|
|
9
7
|
export default async (apiDoc, queueEntry, appData, canCreateNew, isHiddenQueue) => {
|
|
10
8
|
const [sku, productId] = String(queueEntry.nextId).split(';:');
|
|
11
|
-
let { tinyStockUpdate } = queueEntry;
|
|
12
|
-
if (!tinyStockUpdate) {
|
|
13
|
-
const querySnapshot = await getFirestore().collection('tinyErpStockUpdates')
|
|
14
|
-
.where('ref', '==', `${sku}`).get();
|
|
15
|
-
let lastUpdateTime;
|
|
16
|
-
querySnapshot.forEach((documentSnapshot) => {
|
|
17
|
-
const updateTime = documentSnapshot.updateTime.toDate().getTime();
|
|
18
|
-
if (!lastUpdateTime || updateTime > lastUpdateTime) {
|
|
19
|
-
lastUpdateTime = updateTime;
|
|
20
|
-
tinyStockUpdate = documentSnapshot.data();
|
|
21
|
-
}
|
|
22
|
-
documentSnapshot.ref.delete().catch(logger.error);
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
9
|
let product = null;
|
|
26
10
|
try {
|
|
27
11
|
product = (await api.get(`products/${(productId || `sku:${sku}`)}`)).data;
|
|
@@ -101,6 +85,10 @@ export default async (apiDoc, queueEntry, appData, canCreateNew, isHiddenQueue)
|
|
|
101
85
|
data: product,
|
|
102
86
|
});
|
|
103
87
|
if (Array.isArray(produto.variacoes) && produto.variacoes.length) {
|
|
88
|
+
if (!queueEntry.app) {
|
|
89
|
+
logger.warn('Variations cannot be queued without `queueEntry.app`');
|
|
90
|
+
return promise;
|
|
91
|
+
}
|
|
104
92
|
promise.then((response) => {
|
|
105
93
|
let skus = appData.__importation && appData.__importation.skus;
|
|
106
94
|
if (!Array.isArray(skus)) {
|
|
@@ -141,6 +129,7 @@ export default async (apiDoc, queueEntry, appData, canCreateNew, isHiddenQueue)
|
|
|
141
129
|
hasVariations,
|
|
142
130
|
variationId,
|
|
143
131
|
}));
|
|
132
|
+
const { tinyStockUpdate } = queueEntry;
|
|
144
133
|
if (tinyStockUpdate && isHiddenQueue && productId) {
|
|
145
134
|
return handleTinyStock(tinyStockUpdate);
|
|
146
135
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-product-from-tiny.js","sourceRoot":"","sources":["../../src/integration/import-product-from-tiny.ts"],"names":[],"mappings":"AACA,
|
|
1
|
+
{"version":3,"file":"import-product-from-tiny.js","sourceRoot":"","sources":["../../src/integration/import-product-from-tiny.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,9 +9,10 @@ import handleTinyWebhook from './tiny-webhook.js';
|
|
|
9
9
|
|
|
10
10
|
const { httpsFunctionOptions } = config.get();
|
|
11
11
|
|
|
12
|
-
export const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
})
|
|
12
|
+
export const tinyerp = {
|
|
13
|
+
onStoreEvent: createAppEventsFunction('tinyErp', handleApiEvent),
|
|
14
|
+
webhook: onRequest(httpsFunctionOptions, (req, res) => {
|
|
15
|
+
handleTinyWebhook(req, res);
|
|
16
|
+
}),
|
|
17
|
+
};
|
|
17
18
|
// # 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,gDAAgD;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,MAAM,MAAM,oCAAoC,CAAC;AACxD,OAAO,EACL,uBAAuB,GAExB,MAAM,4CAA4C,CAAC;AACpD,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAC7C,OAAO,iBAAiB,MAAM,gBAAgB,CAAC;AAE/C,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AAE9C,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"tiny-erp.js","sourceRoot":"","sources":["../src/tiny-erp.ts"],"names":[],"mappings":"AAAA,iDAAiD;AAEjD,OAAO,kCAAkC,CAAC;AAC1C,gDAAgD;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,MAAM,MAAM,oCAAoC,CAAC;AACxD,OAAO,EACL,uBAAuB,GAExB,MAAM,4CAA4C,CAAC;AACpD,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAC7C,OAAO,iBAAiB,MAAM,gBAAgB,CAAC;AAE/C,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AAE9C,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,YAAY,EAAE,uBAAuB,CACnC,SAAS,EACT,cAAiC,CAClC;IAED,OAAO,EAAE,SAAS,CAAC,oBAAoB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACpD,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9B,CAAC,CAAC;CACH,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { firestore } from 'firebase-admin';
|
|
2
1
|
import logger from 'firebase-functions/lib/logger';
|
|
3
2
|
import api from '@cloudcommerce/api';
|
|
4
3
|
import config from '@cloudcommerce/firebase/lib/config';
|
|
5
|
-
import updateAppData from '@cloudcommerce/firebase/lib/helpers/update-app-data';
|
|
6
4
|
import importProduct from './integration/import-product-from-tiny.js';
|
|
7
5
|
import importOrder from './integration/import-order-from-tiny.js';
|
|
8
|
-
|
|
6
|
+
|
|
7
|
+
let appData = {};
|
|
8
|
+
let application;
|
|
9
9
|
|
|
10
10
|
export default async (req, res) => {
|
|
11
11
|
const tinyToken = req.query.token;
|
|
@@ -16,95 +16,51 @@ export default async (req, res) => {
|
|
|
16
16
|
TODO: Check Tiny server IPs
|
|
17
17
|
const clientIp = req.get('x-forwarded-for') || req.connection.remoteAddress
|
|
18
18
|
*/
|
|
19
|
-
const {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
19
|
+
const { TINY_ERP_TOKEN } = process.env;
|
|
20
|
+
if (!TINY_ERP_TOKEN || TINY_ERP_TOKEN !== tinyToken) {
|
|
21
|
+
const { apps: { tinyErp: { appId } } } = config.get();
|
|
22
|
+
const applicationId = req.query._id;
|
|
23
|
+
const appEndpoint = applicationId && typeof applicationId === 'string'
|
|
24
|
+
? `applications/${applicationId}`
|
|
25
|
+
: `applications/app_id:${appId}`;
|
|
26
|
+
application = (await api.get(appEndpoint)).data;
|
|
27
|
+
appData = {
|
|
28
|
+
...application.data,
|
|
29
|
+
...application.hidden_data,
|
|
30
|
+
};
|
|
31
|
+
if (appData.tiny_api_token !== tinyToken) {
|
|
32
|
+
return res.sendStatus(401);
|
|
33
|
+
}
|
|
34
|
+
process.env.TINY_ERP_TOKEN = tinyToken;
|
|
31
35
|
}
|
|
32
36
|
if (dados.idVendaTiny) {
|
|
33
|
-
let orderNumbers = appData.___importation?.order_numbers;
|
|
34
|
-
if (!Array.isArray(orderNumbers)) {
|
|
35
|
-
orderNumbers = [];
|
|
36
|
-
}
|
|
37
37
|
const orderNumber = `id:${dados.idVendaTiny}`;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
const nextId = String(dados.skuMapeamento || dados.sku || dados.codigo);
|
|
65
|
-
const tinyStockUpdate = {
|
|
66
|
-
ref: `${nextId}`,
|
|
67
|
-
tipo,
|
|
68
|
-
produto: {
|
|
69
|
-
id: dados.idProduto,
|
|
70
|
-
codigo: dados.sku,
|
|
71
|
-
...dados,
|
|
72
|
-
},
|
|
73
|
-
updatedAt: firestore.Timestamp.fromDate(new Date()),
|
|
74
|
-
};
|
|
75
|
-
logger.info(`> Tiny webhook: ${nextId} => ${tinyStockUpdate.produto.saldo}`);
|
|
76
|
-
const saveToQueue = () => {
|
|
77
|
-
let skus = appData.___importation && appData.___importation.skus;
|
|
78
|
-
if (!Array.isArray(skus)) {
|
|
79
|
-
skus = [];
|
|
80
|
-
}
|
|
81
|
-
if (!skus.includes(nextId)) {
|
|
82
|
-
return firestore().collection('tinyErpStockUpdates').add(tinyStockUpdate)
|
|
83
|
-
.then(() => {
|
|
84
|
-
skus.push(nextId);
|
|
85
|
-
logger.info(`> SKUs: ${JSON.stringify(skus)}`);
|
|
86
|
-
return updateAppData(application, {
|
|
87
|
-
___importation: {
|
|
88
|
-
...appData.___importation,
|
|
89
|
-
skus,
|
|
90
|
-
},
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
return Promise.resolve(null);
|
|
95
|
-
};
|
|
96
|
-
const queueEntry = {
|
|
97
|
-
nextId,
|
|
98
|
-
tinyStockUpdate,
|
|
99
|
-
isNotQueued: true,
|
|
100
|
-
};
|
|
101
|
-
try {
|
|
102
|
-
const payload = await importProduct({}, queueEntry, appData, false, true);
|
|
103
|
-
await afterQueue(queueEntry, appData, application, payload);
|
|
104
|
-
} catch (e) {
|
|
105
|
-
await saveToQueue();
|
|
106
|
-
}
|
|
107
|
-
}
|
|
38
|
+
const queueEntry = {
|
|
39
|
+
nextId: orderNumber,
|
|
40
|
+
isNotQueued: true,
|
|
41
|
+
};
|
|
42
|
+
await importOrder({}, queueEntry);
|
|
43
|
+
} else if ((tipo === 'produto' || tipo === 'estoque')
|
|
44
|
+
&& (dados.id || dados.idProduto)
|
|
45
|
+
&& (dados.codigo || dados.sku)) {
|
|
46
|
+
const nextId = String(dados.skuMapeamento || dados.sku || dados.codigo);
|
|
47
|
+
const tinyStockUpdate = {
|
|
48
|
+
ref: `${nextId}`,
|
|
49
|
+
tipo,
|
|
50
|
+
produto: {
|
|
51
|
+
id: dados.idProduto,
|
|
52
|
+
codigo: dados.sku,
|
|
53
|
+
...dados,
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
logger.info(`> Tiny webhook: ${nextId} => ${tinyStockUpdate.produto.saldo}`);
|
|
57
|
+
const queueEntry = {
|
|
58
|
+
nextId,
|
|
59
|
+
tinyStockUpdate,
|
|
60
|
+
isNotQueued: true,
|
|
61
|
+
app: application,
|
|
62
|
+
};
|
|
63
|
+
await importProduct({}, queueEntry, appData, false, true);
|
|
108
64
|
}
|
|
109
65
|
if (tipo === 'produto') {
|
|
110
66
|
const mapeamentos = [];
|
|
@@ -129,6 +85,7 @@ export default async (req, res) => {
|
|
|
129
85
|
}
|
|
130
86
|
return res.sendStatus(200);
|
|
131
87
|
}
|
|
88
|
+
logger.warn('< Invalid Tiny Webhook body', req.body);
|
|
132
89
|
}
|
|
133
90
|
return res.sendStatus(403);
|
|
134
91
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tiny-webhook.js","sourceRoot":"","sources":["../src/tiny-webhook.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tiny-webhook.js","sourceRoot":"","sources":["../src/tiny-webhook.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,9 +37,16 @@ const handleApiEvent: ApiEventHandler = async ({
|
|
|
37
37
|
}
|
|
38
38
|
logger.info(`> Webhook ${resourceId} [${evName}]`);
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
if (!process.env.TINY_ERP_TOKEN) {
|
|
41
|
+
const tinyToken = appData.tiny_api_token;
|
|
42
|
+
if (typeof tinyToken === 'string' && tinyToken) {
|
|
43
|
+
process.env.TINY_ERP_TOKEN = tinyToken;
|
|
44
|
+
} else {
|
|
45
|
+
logger.warn('Missing Tiny API token');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (process.env.TINY_ERP_TOKEN) {
|
|
43
50
|
let integrationConfig;
|
|
44
51
|
let canCreateNew = false;
|
|
45
52
|
if (evName === 'applications-dataSet') {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Orders } from '@cloudcommerce/types';
|
|
2
|
-
|
|
2
|
+
// eslint-disable-next-line import/no-unresolved
|
|
3
|
+
import { getFirestore } from 'firebase-admin/firestore';
|
|
3
4
|
import logger from 'firebase-functions/lib/logger';
|
|
4
5
|
import api from '@cloudcommerce/api';
|
|
5
6
|
import postTiny from './post-tiny-erp';
|
|
@@ -30,7 +31,7 @@ export default async (apiDoc, queueEntry) => {
|
|
|
30
31
|
const orderNumber = pedido.numero_ecommerce;
|
|
31
32
|
logger.info(`Import order n${orderNumber} ${tinyOrderId} => ${situacao}`);
|
|
32
33
|
|
|
33
|
-
const documentRef =
|
|
34
|
+
const documentRef = getFirestore().doc(`tinyErpOrders/${tinyOrderId}`);
|
|
34
35
|
const documentSnapshot = await documentRef.get();
|
|
35
36
|
if (
|
|
36
37
|
documentSnapshot.exists
|
|
@@ -78,10 +79,7 @@ export default async (apiDoc, queueEntry) => {
|
|
|
78
79
|
|
|
79
80
|
return Promise.all(promises)
|
|
80
81
|
.then(([firstResult]) => {
|
|
81
|
-
documentRef.set({
|
|
82
|
-
situacao,
|
|
83
|
-
updatedAt: firestore.Timestamp.fromDate(new Date()),
|
|
84
|
-
}).catch(logger.error);
|
|
82
|
+
documentRef.set({ situacao }).catch(logger.error);
|
|
85
83
|
return (firstResult && firstResult.response) || firstResult;
|
|
86
84
|
});
|
|
87
85
|
};
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import type { Products } from '@cloudcommerce/types';
|
|
2
|
-
// eslint-disable-next-line import/no-unresolved
|
|
3
|
-
import { getFirestore } from 'firebase-admin/firestore';
|
|
4
2
|
import logger from 'firebase-functions/lib/logger';
|
|
5
3
|
import api from '@cloudcommerce/api';
|
|
6
4
|
import updateAppData from '@cloudcommerce/firebase/lib/helpers/update-app-data';
|
|
@@ -9,21 +7,6 @@ import parseProduct from './parsers/product-from-tiny';
|
|
|
9
7
|
|
|
10
8
|
export default async (apiDoc, queueEntry, appData, canCreateNew, isHiddenQueue) => {
|
|
11
9
|
const [sku, productId] = String(queueEntry.nextId).split(';:');
|
|
12
|
-
let { tinyStockUpdate } = queueEntry;
|
|
13
|
-
if (!tinyStockUpdate) {
|
|
14
|
-
const querySnapshot = await getFirestore().collection('tinyErpStockUpdates')
|
|
15
|
-
.where('ref', '==', `${sku}`).get();
|
|
16
|
-
let lastUpdateTime;
|
|
17
|
-
querySnapshot.forEach((documentSnapshot) => {
|
|
18
|
-
const updateTime = documentSnapshot.updateTime.toDate().getTime();
|
|
19
|
-
if (!lastUpdateTime || updateTime > lastUpdateTime) {
|
|
20
|
-
lastUpdateTime = updateTime;
|
|
21
|
-
tinyStockUpdate = documentSnapshot.data();
|
|
22
|
-
}
|
|
23
|
-
documentSnapshot.ref.delete().catch(logger.error);
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
|
|
27
10
|
let product: Products | null = null;
|
|
28
11
|
try {
|
|
29
12
|
product = (await api.get(`products/${(productId || `sku:${sku}`)}`)).data;
|
|
@@ -106,6 +89,10 @@ export default async (apiDoc, queueEntry, appData, canCreateNew, isHiddenQueue)
|
|
|
106
89
|
});
|
|
107
90
|
|
|
108
91
|
if (Array.isArray(produto.variacoes) && produto.variacoes.length) {
|
|
92
|
+
if (!queueEntry.app) {
|
|
93
|
+
logger.warn('Variations cannot be queued without `queueEntry.app`');
|
|
94
|
+
return promise;
|
|
95
|
+
}
|
|
109
96
|
promise.then((response) => {
|
|
110
97
|
let skus = appData.__importation && appData.__importation.skus;
|
|
111
98
|
if (!Array.isArray(skus)) {
|
|
@@ -147,6 +134,7 @@ export default async (apiDoc, queueEntry, appData, canCreateNew, isHiddenQueue)
|
|
|
147
134
|
hasVariations,
|
|
148
135
|
variationId,
|
|
149
136
|
}));
|
|
137
|
+
const { tinyStockUpdate } = queueEntry;
|
|
150
138
|
if (tinyStockUpdate && isHiddenQueue && productId) {
|
|
151
139
|
return handleTinyStock(tinyStockUpdate as any);
|
|
152
140
|
}
|
|
@@ -13,11 +13,13 @@ import handleTinyWebhook from './tiny-webhook';
|
|
|
13
13
|
|
|
14
14
|
const { httpsFunctionOptions } = config.get();
|
|
15
15
|
|
|
16
|
-
export const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
export const tinyerp = {
|
|
17
|
+
onStoreEvent: createAppEventsFunction(
|
|
18
|
+
'tinyErp',
|
|
19
|
+
handleApiEvent as ApiEventHandler,
|
|
20
|
+
),
|
|
20
21
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
})
|
|
22
|
+
webhook: onRequest(httpsFunctionOptions, (req, res) => {
|
|
23
|
+
handleTinyWebhook(req, res);
|
|
24
|
+
}),
|
|
25
|
+
};
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { Request, Response } from 'firebase-functions';
|
|
2
|
-
import {
|
|
2
|
+
import type { Applications } from '@cloudcommerce/types';
|
|
3
3
|
import logger from 'firebase-functions/lib/logger';
|
|
4
4
|
import api from '@cloudcommerce/api';
|
|
5
5
|
import config from '@cloudcommerce/firebase/lib/config';
|
|
6
|
-
import updateAppData from '@cloudcommerce/firebase/lib/helpers/update-app-data';
|
|
7
6
|
import importProduct from './integration/import-product-from-tiny';
|
|
8
7
|
import importOrder from './integration/import-order-from-tiny';
|
|
9
|
-
|
|
8
|
+
|
|
9
|
+
let appData: Record<string, any> = {};
|
|
10
|
+
let application: Applications;
|
|
10
11
|
|
|
11
12
|
export default async (req: Request, res: Response) => {
|
|
12
13
|
const tinyToken = req.query.token;
|
|
@@ -17,99 +18,54 @@ export default async (req: Request, res: Response) => {
|
|
|
17
18
|
TODO: Check Tiny server IPs
|
|
18
19
|
const clientIp = req.get('x-forwarded-for') || req.connection.remoteAddress
|
|
19
20
|
*/
|
|
20
|
-
const {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
21
|
+
const { TINY_ERP_TOKEN } = process.env;
|
|
22
|
+
if (!TINY_ERP_TOKEN || TINY_ERP_TOKEN !== tinyToken) {
|
|
23
|
+
const { apps: { tinyErp: { appId } } } = config.get();
|
|
24
|
+
const applicationId = req.query._id;
|
|
25
|
+
const appEndpoint = applicationId && typeof applicationId === 'string'
|
|
26
|
+
? `applications/${applicationId}`
|
|
27
|
+
: `applications/app_id:${appId}`;
|
|
28
|
+
application = (await api.get(appEndpoint as 'applications/id')).data;
|
|
29
|
+
appData = {
|
|
30
|
+
...application.data,
|
|
31
|
+
...application.hidden_data,
|
|
32
|
+
};
|
|
33
|
+
if (appData.tiny_api_token !== tinyToken) {
|
|
34
|
+
return res.sendStatus(401);
|
|
35
|
+
}
|
|
36
|
+
process.env.TINY_ERP_TOKEN = tinyToken;
|
|
32
37
|
}
|
|
33
38
|
|
|
34
39
|
if (dados.idVendaTiny) {
|
|
35
|
-
let orderNumbers = appData.___importation?.order_numbers;
|
|
36
|
-
if (!Array.isArray(orderNumbers)) {
|
|
37
|
-
orderNumbers = [];
|
|
38
|
-
}
|
|
39
40
|
const orderNumber = `id:${dados.idVendaTiny}`;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
const nextId = String(dados.skuMapeamento || dados.sku || dados.codigo);
|
|
69
|
-
const tinyStockUpdate = {
|
|
70
|
-
ref: `${nextId}`,
|
|
71
|
-
tipo,
|
|
72
|
-
produto: {
|
|
73
|
-
id: dados.idProduto,
|
|
74
|
-
codigo: dados.sku,
|
|
75
|
-
...dados,
|
|
76
|
-
},
|
|
77
|
-
updatedAt: firestore.Timestamp.fromDate(new Date()),
|
|
78
|
-
};
|
|
79
|
-
logger.info(`> Tiny webhook: ${nextId} => ${tinyStockUpdate.produto.saldo}`);
|
|
80
|
-
const saveToQueue = () => {
|
|
81
|
-
let skus = appData.___importation && appData.___importation.skus;
|
|
82
|
-
if (!Array.isArray(skus)) {
|
|
83
|
-
skus = [];
|
|
84
|
-
}
|
|
85
|
-
if (!skus.includes(nextId)) {
|
|
86
|
-
return firestore().collection('tinyErpStockUpdates').add(tinyStockUpdate)
|
|
87
|
-
.then(() => {
|
|
88
|
-
skus.push(nextId);
|
|
89
|
-
logger.info(`> SKUs: ${JSON.stringify(skus)}`);
|
|
90
|
-
return updateAppData(application, {
|
|
91
|
-
___importation: {
|
|
92
|
-
...appData.___importation,
|
|
93
|
-
skus,
|
|
94
|
-
},
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
return Promise.resolve(null);
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
const queueEntry = {
|
|
102
|
-
nextId,
|
|
103
|
-
tinyStockUpdate,
|
|
104
|
-
isNotQueued: true,
|
|
105
|
-
};
|
|
106
|
-
try {
|
|
107
|
-
const payload = await importProduct({}, queueEntry, appData, false, true);
|
|
108
|
-
await afterQueue(queueEntry, appData, application, payload);
|
|
109
|
-
} catch (e) {
|
|
110
|
-
await saveToQueue();
|
|
111
|
-
}
|
|
112
|
-
}
|
|
41
|
+
const queueEntry = {
|
|
42
|
+
nextId: orderNumber,
|
|
43
|
+
isNotQueued: true,
|
|
44
|
+
};
|
|
45
|
+
await importOrder({}, queueEntry);
|
|
46
|
+
} else if (
|
|
47
|
+
(tipo === 'produto' || tipo === 'estoque')
|
|
48
|
+
&& (dados.id || dados.idProduto)
|
|
49
|
+
&& (dados.codigo || dados.sku)
|
|
50
|
+
) {
|
|
51
|
+
const nextId = String(dados.skuMapeamento || dados.sku || dados.codigo);
|
|
52
|
+
const tinyStockUpdate = {
|
|
53
|
+
ref: `${nextId}`,
|
|
54
|
+
tipo,
|
|
55
|
+
produto: {
|
|
56
|
+
id: dados.idProduto,
|
|
57
|
+
codigo: dados.sku,
|
|
58
|
+
...dados,
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
logger.info(`> Tiny webhook: ${nextId} => ${tinyStockUpdate.produto.saldo}`);
|
|
62
|
+
const queueEntry = {
|
|
63
|
+
nextId,
|
|
64
|
+
tinyStockUpdate,
|
|
65
|
+
isNotQueued: true,
|
|
66
|
+
app: application,
|
|
67
|
+
};
|
|
68
|
+
await importProduct({}, queueEntry, appData, false, true);
|
|
113
69
|
}
|
|
114
70
|
|
|
115
71
|
if (tipo === 'produto') {
|
|
@@ -138,6 +94,7 @@ export default async (req: Request, res: Response) => {
|
|
|
138
94
|
}
|
|
139
95
|
return res.sendStatus(200);
|
|
140
96
|
}
|
|
97
|
+
logger.warn('< Invalid Tiny Webhook body', req.body);
|
|
141
98
|
}
|
|
142
99
|
return res.sendStatus(403);
|
|
143
100
|
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import './firebase';
|
|
1
|
+
import './firebase.js';
|
|
2
2
|
// # sourceMappingURL=index.js.map
|