cloudcommerce 0.1.3 → 0.1.5

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 (119) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/ecomplus-stores/monocard/functions/core/package.json +1 -1
  3. package/ecomplus-stores/monocard/functions/events/package.json +2 -2
  4. package/ecomplus-stores/monocard/functions/modules/package.json +2 -2
  5. package/ecomplus-stores/monocard/functions/passport/package.json +2 -2
  6. package/ecomplus-stores/monocard/functions/ssr/package.json +6 -6
  7. package/ecomplus-stores/monocard/package.json +1 -1
  8. package/ecomplus-stores/tia-sonia/functions/core/package.json +1 -1
  9. package/ecomplus-stores/tia-sonia/functions/events/package.json +2 -2
  10. package/ecomplus-stores/tia-sonia/functions/modules/package.json +2 -2
  11. package/ecomplus-stores/tia-sonia/functions/passport/package.json +2 -2
  12. package/ecomplus-stores/tia-sonia/functions/ssr/content/settings.json +1 -1
  13. package/ecomplus-stores/tia-sonia/functions/ssr/package.json +9 -7
  14. package/ecomplus-stores/tia-sonia/functions/ssr/public/img/uploads/acai-com-granola.jpg +0 -0
  15. package/ecomplus-stores/tia-sonia/functions/ssr/public/img/uploads/cafe-com-tapioca-e-aveia.jpg +0 -0
  16. package/ecomplus-stores/tia-sonia/functions/ssr/public/img/uploads/fimdeano1920x736.jpg +0 -0
  17. package/ecomplus-stores/tia-sonia/functions/ssr/src/components/PitchBar.vue +65 -0
  18. package/ecomplus-stores/tia-sonia/functions/ssr/src/components/TheHeader.vue +104 -10
  19. package/ecomplus-stores/tia-sonia/functions/ssr/src/components/header/HeaderBarLink.vue +5 -0
  20. package/ecomplus-stores/tia-sonia/functions/ssr/src/components/header/HeaderButtonLink.vue +1 -1
  21. package/ecomplus-stores/tia-sonia/functions/ssr/src/components/header/HeaderNav.vue +7 -6
  22. package/ecomplus-stores/tia-sonia/functions/ssr/src/layouts/Base.astro +10 -6
  23. package/ecomplus-stores/tia-sonia/functions/ssr/src/layouts/Pages.astro +19 -12
  24. package/ecomplus-stores/tia-sonia/functions/ssr/src/main/Home.astro +32 -9
  25. package/ecomplus-stores/tia-sonia/functions/ssr/tailwind.config.cjs +15 -1
  26. package/ecomplus-stores/tia-sonia/functions/ssr/uno.config.cjs +2 -1
  27. package/ecomplus-stores/tia-sonia/package.json +1 -1
  28. package/package.json +2 -1
  29. package/packages/api/package.json +1 -1
  30. package/packages/apps/correios/package.json +1 -1
  31. package/packages/apps/custom-payment/package.json +1 -1
  32. package/packages/apps/custom-shipping/package.json +1 -1
  33. package/packages/apps/discounts/package.json +1 -1
  34. package/packages/apps/emails/package.json +1 -1
  35. package/packages/apps/frenet/events.js +1 -0
  36. package/packages/apps/frenet/lib/frenet-events.d.ts +6 -0
  37. package/packages/apps/frenet/lib/frenet-events.js +19 -0
  38. package/packages/apps/frenet/lib/frenet-events.js.map +1 -0
  39. package/packages/apps/frenet/lib/functions-lib/database.d.ts +18 -0
  40. package/packages/apps/frenet/lib/functions-lib/database.js +128 -0
  41. package/packages/apps/frenet/lib/functions-lib/database.js.map +1 -0
  42. package/packages/apps/frenet/lib/functions-lib/events-to-frenet.d.ts +3 -0
  43. package/packages/apps/frenet/lib/functions-lib/events-to-frenet.js +48 -0
  44. package/packages/apps/frenet/lib/functions-lib/events-to-frenet.js.map +1 -0
  45. package/packages/apps/frenet/lib/functions-lib/fetch-tracking-code.d.ts +2 -0
  46. package/packages/apps/frenet/lib/functions-lib/fetch-tracking-code.js +19 -0
  47. package/packages/apps/frenet/lib/functions-lib/fetch-tracking-code.js.map +1 -0
  48. package/packages/apps/frenet/lib/functions-lib/remove-delivered.d.ts +2 -0
  49. package/packages/apps/frenet/lib/functions-lib/remove-delivered.js +30 -0
  50. package/packages/apps/frenet/lib/functions-lib/remove-delivered.js.map +1 -0
  51. package/packages/apps/frenet/lib/functions-lib/tracking-codes.d.ts +2 -0
  52. package/packages/apps/frenet/lib/functions-lib/tracking-codes.js +138 -0
  53. package/packages/apps/frenet/lib/functions-lib/tracking-codes.js.map +1 -0
  54. package/packages/apps/frenet/lib/functions-lib/update-fulfillments.d.ts +5 -0
  55. package/packages/apps/frenet/lib/functions-lib/update-fulfillments.js +49 -0
  56. package/packages/apps/frenet/lib/functions-lib/update-fulfillments.js.map +1 -0
  57. package/packages/apps/frenet/package.json +11 -3
  58. package/packages/apps/frenet/src/frenet-events.ts +25 -0
  59. package/packages/apps/frenet/src/functions-lib/database.ts +159 -0
  60. package/packages/apps/frenet/src/functions-lib/events-to-frenet.ts +62 -0
  61. package/packages/apps/frenet/src/functions-lib/fetch-tracking-code.ts +22 -0
  62. package/packages/apps/frenet/src/functions-lib/remove-delivered.ts +31 -0
  63. package/packages/apps/frenet/src/functions-lib/tracking-codes.ts +170 -0
  64. package/packages/apps/frenet/src/functions-lib/update-fulfillments.ts +56 -0
  65. package/packages/apps/galaxpay/package.json +1 -1
  66. package/packages/apps/infinitepay/package.json +1 -1
  67. package/packages/apps/jadlog/package.json +1 -1
  68. package/packages/apps/loyalty-points/package.json +1 -1
  69. package/packages/apps/mercadopago/package.json +1 -1
  70. package/packages/apps/pagarme/package.json +1 -1
  71. package/packages/apps/pix/package.json +1 -1
  72. package/packages/apps/tiny-erp/package.json +1 -1
  73. package/packages/cli/package.json +1 -1
  74. package/packages/config/package.json +1 -1
  75. package/packages/emails/package.json +1 -1
  76. package/packages/events/lib/firebase.js +2 -0
  77. package/packages/events/lib/firebase.js.map +1 -1
  78. package/packages/events/package.json +2 -1
  79. package/packages/events/src/firebase.ts +2 -0
  80. package/packages/firebase/lib/config.d.ts +1 -0
  81. package/packages/firebase/lib/config.js +4 -0
  82. package/packages/firebase/lib/config.js.map +1 -1
  83. package/packages/firebase/package.json +1 -1
  84. package/packages/firebase/src/config.ts +5 -0
  85. package/packages/i18n/package.json +1 -1
  86. package/packages/modules/package.json +1 -1
  87. package/packages/passport/package.json +1 -1
  88. package/packages/ssr/package.json +1 -2
  89. package/packages/storefront/dist/client/HeaderButtons.300c19e5.js +1 -0
  90. package/packages/storefront/dist/client/Prices.6c44a513.js +1 -0
  91. package/packages/storefront/dist/client/{ProductCard.7b68cc35.js → ProductCard.69bba7fc.js} +1 -1
  92. package/packages/storefront/dist/client/assets/_...slug_.15bda576.css +1 -0
  93. package/packages/storefront/dist/client/assets/server.4d9646d8.css +1 -0
  94. package/packages/storefront/dist/client/chunks/{HeaderButtons.cbbb059d.js → HeaderButtons.1abd5bf4.js} +1 -1
  95. package/packages/storefront/dist/client/chunks/{LoginForm.ac2f1b1f.js → LoginForm.7e7d6137.js} +1 -1
  96. package/packages/storefront/dist/client/chunks/Prices.vue_vue_type_script_setup_true_lang.e4525076.js +1 -0
  97. package/packages/storefront/dist/client/chunks/_plugin-vue_export-helper.fc452b02.js +1 -0
  98. package/packages/storefront/dist/client/chunks/runtime-core.esm-bundler.b4556b35.js +1 -0
  99. package/packages/storefront/dist/client/client.2a3e5a58.js +1 -0
  100. package/packages/storefront/dist/client/sw.js +1 -1
  101. package/packages/storefront/dist/server/entry.mjs +34 -1558
  102. package/packages/storefront/package.json +4 -5
  103. package/packages/storefront/src/lib/assets/tooltip.css +43 -0
  104. package/packages/storefront/src/lib/components/Prices.vue +2 -2
  105. package/packages/storefront/src/lib/layouts/BaseBody.astro +1 -1
  106. package/packages/storefront/src/lib/pages/_vue.ts +0 -2
  107. package/packages/storefront/tailwind.config.cjs +38 -23
  108. package/packages/storefront/uno.config.cjs +37 -35
  109. package/packages/types/package.json +1 -1
  110. package/ecomplus-stores/tia-sonia/functions/ssr/src/components/TopBar.vue +0 -133
  111. package/ecomplus-stores/tia-sonia/functions/ssr/src/components/header/HeaderNavLink.vue +0 -5
  112. package/packages/storefront/dist/client/HeaderButtons.8acf8a3b.js +0 -1
  113. package/packages/storefront/dist/client/Prices.9099fe99.js +0 -1
  114. package/packages/storefront/dist/client/assets/_...slug_.f19a16ca.css +0 -1
  115. package/packages/storefront/dist/client/assets/server.55b8d73d.css +0 -1
  116. package/packages/storefront/dist/client/chunks/Prices.vue_vue_type_script_setup_true_lang.c37148c1.js +0 -1
  117. package/packages/storefront/dist/client/chunks/_plugin-vue_export-helper.5ccc5d75.js +0 -1
  118. package/packages/storefront/dist/client/chunks/runtime-core.esm-bundler.d5646b29.js +0 -1
  119. package/packages/storefront/dist/client/client.9783ef49.js +0 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-correios",
3
3
  "type": "module",
4
- "version": "0.1.3",
4
+ "version": "0.1.5",
5
5
  "description": "E-Com Plus Cloud Commerce app for Correios shipping calculation",
6
6
  "main": "lib/correios.js",
7
7
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-custom-payment",
3
3
  "type": "module",
4
- "version": "0.1.3",
4
+ "version": "0.1.5",
5
5
  "description": "E-Com Plus Cloud Commerce app for simple custom payment methods",
6
6
  "main": "lib/index.js",
7
7
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-custom-shipping",
3
3
  "type": "module",
4
- "version": "0.1.3",
4
+ "version": "0.1.5",
5
5
  "description": "E-Com Plus Cloud Commerce app for custom shipping methods",
6
6
  "main": "lib/custom-shipping.js",
7
7
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-discounts",
3
3
  "type": "module",
4
- "version": "0.1.3",
4
+ "version": "0.1.5",
5
5
  "description": "E-Com Plus Cloud Commerce app for complex discount rules",
6
6
  "main": "lib/discounts.js",
7
7
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-emails",
3
3
  "type": "module",
4
- "version": "0.1.3",
4
+ "version": "0.1.5",
5
5
  "description": "E-Com Plus Cloud Commerce default transactional email app",
6
6
  "main": "lib/index.js",
7
7
  "repository": {
@@ -0,0 +1 @@
1
+ export * from './lib/frenet-events';
@@ -0,0 +1,6 @@
1
+ import '@cloudcommerce/firebase/lib/init';
2
+ import functions from 'firebase-functions/v1';
3
+ export declare const frenet: {
4
+ cronTrackingCodes: functions.CloudFunction<unknown>;
5
+ onStoreEvent: functions.CloudFunction<functions.pubsub.Message>;
6
+ };
@@ -0,0 +1,19 @@
1
+ /* eslint-disable import/prefer-default-export */
2
+ import '@cloudcommerce/firebase/lib/init';
3
+ import { createAppEventsFunction } from '@cloudcommerce/firebase/lib/helpers/pubsub';
4
+ import config from '@cloudcommerce/firebase/lib/config';
5
+ import functions from 'firebase-functions/v1';
6
+ import handleTrackingCodes from './functions-lib/tracking-codes.js';
7
+ import handleApiEvent from './functions-lib/events-to-frenet.js';
8
+
9
+ const { httpsFunctionOptions: { region } } = config.get();
10
+
11
+ export const frenet = {
12
+ cronTrackingCodes: functions.region(region).pubsub
13
+ .schedule('*/30 * * * *')
14
+ .onRun(() => {
15
+ return handleTrackingCodes;
16
+ }),
17
+ onStoreEvent: createAppEventsFunction('frenet', handleApiEvent),
18
+ };
19
+ // # sourceMappingURL=frenet-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frenet-events.js","sourceRoot":"","sources":["../src/frenet-events.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,OAAO,kCAAkC,CAAC;AAC1C,OAAO,EACL,uBAAuB,GAExB,MAAM,4CAA4C,CAAC;AACpD,OAAO,MAAM,MAAM,oCAAoC,CAAC;AACxD,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAC9C,OAAO,mBAAmB,MAAM,gCAAgC,CAAC;AACjE,OAAO,cAAc,MAAM,kCAAkC,CAAC;AAE9D,MAAM,EAAE,oBAAoB,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AAE1D,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,iBAAiB,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM;SAC/C,QAAQ,CAAC,cAAc,CAAC;SACxB,KAAK,CAAC,GAAG,EAAE;QACV,OAAO,mBAAmB,CAAC;IAC7B,CAAC,CAAC;IAEJ,YAAY,EAAE,uBAAuB,CACnC,QAAQ,EACR,cAAiC,CAClC;CACF,CAAC"}
@@ -0,0 +1,18 @@
1
+ declare const db: {
2
+ save: (orderId: string, trackingStatus: string, trackingCode: string, serviceCode?: string) => Promise<unknown>;
3
+ get: (orderId: string, trackingCode: string) => Promise<unknown>;
4
+ clear: () => Promise<unknown>;
5
+ remove: (trackingCode: string, serviceCode: string) => Promise<unknown>;
6
+ update: (trackingStatus: string, trackingCode: string) => Promise<unknown>;
7
+ getAll: () => Promise<unknown>;
8
+ getAllDelivered: () => Promise<unknown>;
9
+ };
10
+ export default db;
11
+ export type TrackingDoc = {
12
+ orderId: string;
13
+ trackingStatus: string;
14
+ trackingCode: string;
15
+ serviceCode: string;
16
+ createdAt: string;
17
+ updateAt?: string;
18
+ };
@@ -0,0 +1,128 @@
1
+ import { getFirestore } from 'firebase-admin/firestore';
2
+ import logger from 'firebase-functions/logger';
3
+
4
+ const firestoreColl = 'frenetTrackingCodes';
5
+ const save = (orderId, trackingStatus, trackingCode, serviceCode) => new Promise((resolve) => {
6
+ const documentRef = getFirestore().doc(`${firestoreColl}/${trackingCode}`);
7
+ if (documentRef) {
8
+ documentRef.set({
9
+ orderId,
10
+ trackingStatus,
11
+ trackingCode,
12
+ serviceCode,
13
+ createdAt: new Date(),
14
+ }).then(() => resolve(true))
15
+ .catch(logger.error);
16
+ }
17
+ });
18
+ const get = async (orderId, trackingCode) => new Promise((resolve, reject) => {
19
+ getFirestore().doc(`${firestoreColl}/${trackingCode}`)
20
+ .get()
21
+ .then((documentSnapshot) => {
22
+ if (documentSnapshot && documentSnapshot.exists) {
23
+ const data = documentSnapshot.data();
24
+ if (data && data.orderId === orderId) {
25
+ resolve({ ...data, createdAt: data.createdAt.toDate() });
26
+ } else {
27
+ resolve(null);
28
+ }
29
+ } else {
30
+ resolve(null);
31
+ }
32
+ })
33
+ .catch((err) => {
34
+ err.name = 'TrackingCodeNotFound';
35
+ reject(err);
36
+ });
37
+ });
38
+ const clear = async () => new Promise((resolve) => {
39
+ const deadline = new Date();
40
+ deadline.setMonth(deadline.getMonth() - 2);
41
+ getFirestore().collection(firestoreColl)
42
+ .where('createdAt', '<=', deadline)
43
+ .get()
44
+ .then((docsRef) => {
45
+ docsRef.docs.forEach((doc) => {
46
+ doc.ref.delete();
47
+ });
48
+ resolve(true);
49
+ });
50
+ });
51
+ const remove = async (trackingCode, serviceCode) => new Promise((resolve) => {
52
+ getFirestore().doc(`${firestoreColl}/${trackingCode}`)
53
+ .get()
54
+ .then(async (documentSnapshot) => {
55
+ if (documentSnapshot && documentSnapshot.exists) {
56
+ const data = documentSnapshot.data();
57
+ if (data && data.serviceCode === serviceCode) {
58
+ await documentSnapshot.ref.delete();
59
+ resolve(true);
60
+ }
61
+ }
62
+ resolve(false);
63
+ });
64
+ });
65
+ const update = async (trackingStatus, trackingCode) => new Promise((resolve) => {
66
+ const documentRef = getFirestore().doc(`${firestoreColl}/${trackingCode}`);
67
+ if (documentRef) {
68
+ documentRef.set({
69
+ trackingStatus,
70
+ updateAt: new Date().toISOString(),
71
+ }, { merge: true })
72
+ .then(() => resolve(true));
73
+ }
74
+ });
75
+ const getAll = () => new Promise((resolve, reject) => {
76
+ getFirestore().collection(firestoreColl)
77
+ .where('trackingStatus', '!=', '9')
78
+ .get()
79
+ .then((docsRef) => {
80
+ if (docsRef.size > 0) {
81
+ const list = [];
82
+ docsRef.forEach((documentSnapshot) => {
83
+ if (documentSnapshot && documentSnapshot.exists) {
84
+ const data = documentSnapshot.data();
85
+ list.push({ ...data, createAt: data.toDate() });
86
+ }
87
+ });
88
+ resolve(list);
89
+ } else {
90
+ const err = new Error('Tracking code not found for any store :)');
91
+ err.name = 'NoTrackingCodesForUpdate';
92
+ reject(err);
93
+ }
94
+ });
95
+ });
96
+ const getAllDelivered = () => new Promise((resolve, reject) => {
97
+ getFirestore().collection(firestoreColl)
98
+ .where('trackingStatus', '==', '9')
99
+ .get()
100
+ .then((docsRef) => {
101
+ if (docsRef.size > 0) {
102
+ const list = [];
103
+ docsRef.forEach((documentSnapshot) => {
104
+ if (documentSnapshot && documentSnapshot.exists) {
105
+ const data = documentSnapshot.data();
106
+ list.push({ ...data, createAt: data.toDate() });
107
+ }
108
+ });
109
+ resolve(list);
110
+ } else {
111
+ const err = new Error('Tracking code not found for any store :)');
112
+ err.name = 'NoTrackingCodesForUpdate';
113
+ reject(err);
114
+ }
115
+ });
116
+ });
117
+ const db = {
118
+ save,
119
+ get,
120
+ clear,
121
+ remove,
122
+ update,
123
+ getAll,
124
+ getAllDelivered,
125
+ };
126
+
127
+ export default db;
128
+ // # sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/functions-lib/database.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ApiEventHandler } from '@cloudcommerce/firebase/lib/helpers/pubsub';
2
+ declare const handleApiEvent: ApiEventHandler;
3
+ export default handleApiEvent;
@@ -0,0 +1,48 @@
1
+ import logger from 'firebase-functions/logger';
2
+ import db from './database.js';
3
+
4
+ const pattern = /rastreador|lang|version|(http|https):\/\/(\w+:{0,1}\w*)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%!\-/]))?/;
5
+ const isUrl = (str) => pattern.test(str);
6
+ const handleApiEvent = async ({
7
+ evName, apiEvent, apiDoc, app,
8
+ }) => {
9
+ const resourceId = apiEvent.resource_id;
10
+ logger.info('>> ', resourceId, ' - Action: ', apiEvent.action);
11
+ const key = `${evName}_${resourceId}`;
12
+ const appData = { ...app.data, ...app.hidden_data };
13
+ const order = apiDoc;
14
+ const orderId = order._id;
15
+ if ((Array.isArray(appData.ignore_events)
16
+ && appData.ignore_events.includes(evName))
17
+ || !order.shipping_lines) {
18
+ logger.info('>> ', key, ' - Ignored event');
19
+ return null;
20
+ }
21
+ logger.info(`> Webhook ${resourceId} [${evName}]`);
22
+ order.shipping_lines.forEach((shipping) => {
23
+ if (shipping.tracking_codes
24
+ && shipping.custom_fields
25
+ && shipping.custom_fields.find(({ field }) => field === 'by_frenet')) {
26
+ shipping.tracking_codes.forEach(async ({ code }) => {
27
+ // algumas integrações enviam um link de rastreamento
28
+ // ao invés do código de rastreamento, como é o caso do bling
29
+ // para evitar gargalos na fila só salva se for código
30
+ if (code && !isUrl(code)) {
31
+ const trackingCode = await db.get(orderId, code);
32
+ if (!trackingCode) {
33
+ const appShipping = shipping.app;
34
+ await db.save(orderId, '0', code, appShipping?.service_code);
35
+ }
36
+ return null;
37
+ }
38
+ logger.error(`> (App Frenet) Error => webhook #${orderId}: ${code},
39
+ Não foi possivel salvar código de rastreio pois seu formato é inválido. `, shipping.tracking_codes);
40
+ return null;
41
+ });
42
+ }
43
+ });
44
+ return null;
45
+ };
46
+
47
+ export default handleApiEvent;
48
+ // # sourceMappingURL=events-to-frenet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-to-frenet.js","sourceRoot":"","sources":["../../src/functions-lib/events-to-frenet.ts"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,2BAA2B,CAAC;AAC/C,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,OAAO,GAAG,oGAAoG,CAAC;AACrH,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEjD,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;IAEpD,MAAM,KAAK,GAAG,MAAgB,CAAC;IAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC;IAC1B,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;WAChC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;WACzC,CAAC,KAAK,CAAC,cAAc,EACxB;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,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QACxC,IAAI,QAAQ,CAAC,cAAc;eACtB,QAAQ,CAAC,aAAa;eACtB,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,KAAK,WAAW,CAAC,EACpE;YACA,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;gBACjD,qDAAqD;gBACrD,6DAA6D;gBAC7D,sDAAsD;gBAEtD,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;oBACxB,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBACjD,IAAI,CAAC,YAAY,EAAE;wBACjB,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC;wBACjC,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;qBAC9D;oBACD,OAAO,IAAI,CAAC;iBACb;gBACD,MAAM,CAAC,KAAK,CACV,oCAAoC,OAAO,KAAK,IAAI;mFACqB,EACzE,QAAQ,CAAC,cAAc,CACxB,CAAC;gBACF,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;SACJ;IACH,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const _default: (trackingCode: string, serviceCode: string, token: string) => Promise<unknown>;
2
+ export default _default;
@@ -0,0 +1,19 @@
1
+ import axios from 'axios';
2
+
3
+ export default (trackingCode, serviceCode, token) => new Promise((resolve) => {
4
+ axios({
5
+ method: 'post',
6
+ url: 'http://api.frenet.com.br/tracking/trackinginfo',
7
+ headers: {
8
+ 'Content-Type': 'application/json',
9
+ Accept: 'application/json',
10
+ token,
11
+ },
12
+ data: {
13
+ ShippingServiceCode: serviceCode,
14
+ TrackingNumber: trackingCode,
15
+ },
16
+ })
17
+ .then(({ data }) => resolve(data));
18
+ });
19
+ // # sourceMappingURL=fetch-tracking-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-tracking-code.js","sourceRoot":"","sources":["../../src/functions-lib/fetch-tracking-code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,eAAe,CACb,YAAoB,EACpB,WAAmB,EACnB,KAAa,EACb,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;IAC3B,KAAK,CAAC;QACJ,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,gDAAgD;QACrD,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,kBAAkB;YAC1B,KAAK;SACN;QACD,IAAI,EAAE;YACJ,mBAAmB,EAAE,WAAW;YAChC,cAAc,EAAE,YAAY;SAC7B;KACF,CAAC;SACC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACvC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const removeDeliveredToFirestore: () => Promise<void>;
2
+ export default removeDeliveredToFirestore;
@@ -0,0 +1,30 @@
1
+ import logger from 'firebase-functions/logger';
2
+ import db from './database.js';
3
+
4
+ const removeDeliveredToFirestore = async () => {
5
+ // eslint-disable-next-line no-async-promise-executor
6
+ const job = new Promise(async (resolve, reject) => {
7
+ try {
8
+ const codes = await db.getAllDelivered();
9
+ if (codes.length > 0) {
10
+ codes.forEach(async (code) => {
11
+ try {
12
+ await db.remove(code.trackingCode, code.serviceCode);
13
+ logger.log('> (App Frenet) Code removed, delivered status', code);
14
+ } catch (err) {
15
+ logger.error('> (App Frenet) => TrackingCodesRemoveErr =>', err);
16
+ }
17
+ });
18
+ resolve(null);
19
+ }
20
+ } catch (err) {
21
+ reject(err);
22
+ }
23
+ });
24
+ await job.catch((err) => {
25
+ logger.error('> (App Frenet) Error => ', err);
26
+ });
27
+ };
28
+
29
+ export default removeDeliveredToFirestore;
30
+ // # sourceMappingURL=remove-delivered.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-delivered.js","sourceRoot":"","sources":["../../src/functions-lib/remove-delivered.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,2BAA2B,CAAC;AAC/C,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,0BAA0B,GAAG,KAAK,IAAI,EAAE;IAC5C,qDAAqD;IACrD,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QAChD,IAAI;YACF,MAAM,KAAK,GAAkB,MAAM,EAAE,CAAC,eAAe,EAAmB,CAAC;YACzE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACpB,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;oBAC3B,IAAI;wBACF,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;wBACrD,MAAM,CAAC,GAAG,CAAC,+CAA+C,EAAE,IAAI,CAAC,CAAC;qBACnE;oBAAC,OAAO,GAAG,EAAE;wBACZ,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE,GAAG,CAAC,CAAC;qBAClE;gBACH,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,CAAC;aACf;SACF;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,CAAC,GAAG,CAAC,CAAC;SACb;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACtB,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,0BAA0B,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const handleTrackingCodes: () => Promise<void>;
2
+ export default handleTrackingCodes;
@@ -0,0 +1,138 @@
1
+ import api from '@cloudcommerce/api';
2
+ import logger from 'firebase-functions/logger';
3
+ import db from './database.js';
4
+ import updateOrderfulfilllment from './update-fulfillments.js';
5
+ import fetchTrackingEvents from './fetch-tracking-code.js';
6
+ import removeDeliveredToFirestore from './remove-delivered.js';
7
+
8
+ const getConfig = async () => {
9
+ try {
10
+ const app = (await api.get('applications?app_id=1244&fields=hidden_data')).data.result;
11
+ return app[0].hidden_data;
12
+ } catch (err) {
13
+ logger.error('(App Frenet) Error =>', err);
14
+ return null;
15
+ }
16
+ };
17
+ const diffInDays = (createdAt) => {
18
+ const today = new Date();
19
+ const created = new Date(createdAt);
20
+ const diff = today.getTime() - created.getTime();
21
+ return Math.ceil(diff / (1000 * 3600 * 24));
22
+ };
23
+ const handleTrackingCodes = async () => {
24
+ const appConfig = await getConfig();
25
+ // eslint-disable-next-line no-async-promise-executor
26
+ const checkTrackingCodes = new Promise(async (resolve, reject) => {
27
+ logger.log('> (App Frenet) Automatic tracking code update started.');
28
+ let codes;
29
+ try {
30
+ codes = await db.getAll();
31
+ } catch (err) {
32
+ if (err.name !== 'NoTrackingCodesForUpdate') {
33
+ reject(err);
34
+ }
35
+ resolve(null);
36
+ }
37
+ if (!appConfig || !appConfig.frenet_access_token || !codes) {
38
+ // no config for store bye
39
+ resolve(null);
40
+ } else {
41
+ // eslint-disable-next-line consistent-return
42
+ codes.forEach(async (code) => {
43
+ const serviceCode = String(code.serviceCode).startsWith('FR')
44
+ ? String(code.serviceCode.replace(/^FR/, '')).trim()
45
+ : code.serviceCode;
46
+ let trackingData;
47
+ try {
48
+ trackingData = await fetchTrackingEvents(code.trackingCode, serviceCode, appConfig.frenet_access_token);
49
+ } catch (err) {
50
+ logger.error('> (App Frenet) Error => ', err);
51
+ }
52
+ if (trackingData) {
53
+ const { ErrorMessage, TrackingEvents } = trackingData;
54
+ if (ErrorMessage && (!Array.isArray(TrackingEvents) || !TrackingEvents.length)) {
55
+ const startWithError = [
56
+ 'ShippingServiceCode ou CarrierCode informado não foram encontrados',
57
+ 'Object reference not set to an instance of an object',
58
+ 'Value cannot be null',
59
+ 'Cannot deserialize the current JSON array',
60
+ ].some((msg) => ErrorMessage.startsWith(msg));
61
+ if (startWithError || ErrorMessage.startsWith('Objeto não encontrado na base de dados dos Correios')) {
62
+ if (startWithError || diffInDays(code.createdAt) >= 15) {
63
+ // remove pra evitar flod com errors
64
+ try {
65
+ await db.remove(code.trackingCode, code.serviceCode);
66
+ logger.log('> (App Frenet) Code removed, error detected in \'trackingData\'', code);
67
+ } catch (err) {
68
+ logger.error('> (App Frenet) => TrackingCodesRemoveErr =>', err);
69
+ }
70
+ }
71
+ } else {
72
+ const err = {
73
+ ...code,
74
+ error: true,
75
+ ErrorMessage,
76
+ TrackingEvents,
77
+ };
78
+ logger.error('> (App Frenet) Error => ', err);
79
+ }
80
+ } else if (TrackingEvents && Array.isArray(TrackingEvents)) {
81
+ let trackingEvent;
82
+ TrackingEvents.forEach(({ EventType, EventDateTime, EventDescription }) => {
83
+ const [day, month, yearAndTime] = EventDateTime.split('/');
84
+ const [year, time] = yearAndTime.split(' ');
85
+ const [hour, minute] = time.split(':');
86
+ const date = new Date(Date.UTC(year, parseInt(month, 10) - 1, day, hour, minute));
87
+ date.setHours(date.getHours() - 3);
88
+ if (!trackingEvent || trackingEvent.date.getTime() < date.getTime()) {
89
+ trackingEvent = {
90
+ status: parseInt(EventType, 10),
91
+ date,
92
+ description: EventDescription,
93
+ };
94
+ }
95
+ });
96
+ if (trackingEvent && parseInt(code.trackingStatus, 10) !== trackingEvent.status) {
97
+ try {
98
+ await updateOrderfulfilllment(code.orderId, code.trackingCode, trackingEvent.status, trackingEvent.date);
99
+ await db.update(trackingEvent.status, code.trackingCode);
100
+ logger.log(`> (App Frenet) Novo Evento => orderId #${code.orderId},
101
+ code: ${code.trackingCode} lastStatus: ${code.trackingStatus}
102
+ newStatus: ${trackingEvent.status} description: ${trackingEvent.description}`);
103
+ } catch (err) {
104
+ if (err.response) {
105
+ const payload = {
106
+ message: err.message,
107
+ config: err.response.toJSON(),
108
+ orderId: code.orderId,
109
+ };
110
+ logger.error('> (App Frenet) Error => ', payload);
111
+ } else {
112
+ logger.error('> (App Frenet) Error => ', err);
113
+ }
114
+ }
115
+ }
116
+ }
117
+ }
118
+ resolve(null);
119
+ });
120
+ }
121
+ });
122
+ if (appConfig && appConfig.frenet_access_token) {
123
+ await checkTrackingCodes.catch((err) => {
124
+ logger.error('> (App Frenet) Error => ', err);
125
+ });
126
+ await removeDeliveredToFirestore().catch((err) => {
127
+ logger.error('> (App Frenet) Error removing Delivered to Firestore => ', err);
128
+ });
129
+ if (new Date().getHours() === 23) {
130
+ await db.clear().catch((err) => {
131
+ logger.error('> (App Frenet) Error removing old tracking codes => ', err);
132
+ });
133
+ }
134
+ }
135
+ };
136
+
137
+ export default handleTrackingCodes;
138
+ // # sourceMappingURL=tracking-codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking-codes.js","sourceRoot":"","sources":["../../src/functions-lib/tracking-codes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ declare const updateFulfillments: (orderId: string, trackingCode: string, eventType: number, eventDate: Date) => Promise<true | (Response & {
2
+ config: import("@cloudcommerce/api/lib/types").Config;
3
+ data: null;
4
+ }) | null>;
5
+ export default updateFulfillments;
@@ -0,0 +1,49 @@
1
+ import api from '@cloudcommerce/api';
2
+
3
+ const parseStatus = (status) => {
4
+ switch (status) {
5
+ case 0:
6
+ case 1:
7
+ case 2:
8
+ return 'shipped';
9
+ case 3:
10
+ case 4:
11
+ return 'returned';
12
+ case 9:
13
+ return 'delivered';
14
+ default:
15
+ return '';
16
+ }
17
+ };
18
+ const updateFulfillments = async (orderId, trackingCode, eventType, eventDate) => {
19
+ let notes;
20
+ const status = parseStatus(eventType);
21
+ const bodyFulfillments = {
22
+ date_time: eventDate.toISOString(),
23
+ status,
24
+ notification_code: String(trackingCode),
25
+ flags: [
26
+ 'app-frenet',
27
+ ],
28
+ }; // TODO: incompatible type=> amount;
29
+ if (eventType === 2) {
30
+ notes = 'Entrega está atrasada.';
31
+ } else if (eventType === 4) {
32
+ notes = 'Pedido extraviado.';
33
+ }
34
+ const order = (await api.get(`orders/${orderId}`)).data;
35
+ if (order.fulfillment_status && order.fulfillment_status.current === status) {
36
+ return null;
37
+ }
38
+ await api.post(`orders/${orderId}/fulfillments`, bodyFulfillments);
39
+ if (notes) {
40
+ if (order.notes) {
41
+ notes = `${order.notes}\n${notes}`;
42
+ }
43
+ return api.patch(`orders/${orderId}`, { notes });
44
+ }
45
+ return true;
46
+ };
47
+
48
+ export default updateFulfillments;
49
+ // # sourceMappingURL=update-fulfillments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-fulfillments.js","sourceRoot":"","sources":["../../src/functions-lib/update-fulfillments.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,oBAAoB,CAAC;AAErC,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,EAAE;IACrC,QAAQ,MAAM,EAAE;QACd,KAAK,CAAC,CAAC;QACP,KAAK,CAAC,CAAC;QACP,KAAK,CAAC;YACJ,OAAO,SAAS,CAAC;QACnB,KAAK,CAAC,CAAC;QACP,KAAK,CAAC;YACJ,OAAO,UAAU,CAAC;QACpB,KAAK,CAAC;YACJ,OAAO,WAAW,CAAC;QACrB;YACE,OAAO,EAAE,CAAC;KACb;AACH,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,KAAK,EAC9B,OAAe,EACf,YAAoB,EACpB,SAAiB,EACjB,SAAe,EACf,EAAE;IACF,IAAI,KAAK,CAAC;IACV,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACtC,MAAM,gBAAgB,GAAG;QACvB,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE;QAClC,MAAM;QACN,iBAAiB,EAAE,MAAM,CAAC,YAAY,CAAC;QACvC,KAAK,EAAE;YACL,YAAY;SACb;KACK,CAAC,CAAC,oCAAoC;IAE9C,IAAI,SAAS,KAAK,CAAC,EAAE;QACnB,KAAK,GAAG,wBAAwB,CAAC;KAClC;SAAM,IAAI,SAAS,KAAK,CAAC,EAAE;QAC1B,KAAK,GAAG,oBAAoB,CAAC;KAC9B;IAED,MAAM,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACxD,IAAI,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,kBAAkB,CAAC,OAAO,KAAK,MAAM,EAAE;QAC3E,OAAO,IAAI,CAAC;KACb;IACD,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,OAAO,eAAe,EAAE,gBAAgB,CAAC,CAAC;IACnE,IAAI,KAAK,EAAE;QACT,IAAI,KAAK,CAAC,KAAK,EAAE;YACf,KAAK,GAAG,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;SACpC;QACD,OAAO,GAAG,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;KAClD;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -1,9 +1,13 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-frenet",
3
3
  "type": "module",
4
- "version": "0.1.3",
4
+ "version": "0.1.5",
5
5
  "description": "E-Com Plus Cloud Commerce app for Frenet shipping calculation",
6
6
  "main": "lib/frenet.js",
7
+ "exports": {
8
+ ".": "./lib/frenet.js",
9
+ "./events": "./lib/frenet-events.js"
10
+ },
7
11
  "repository": {
8
12
  "type": "git",
9
13
  "url": "git+https://github.com/ecomplus/cloud-commerce.git",
@@ -20,9 +24,13 @@
20
24
  },
21
25
  "dependencies": {
22
26
  "@cloudcommerce/api": "workspace:*",
23
- "axios": "^1.2.1"
27
+ "@cloudcommerce/firebase": "workspace:*",
28
+ "axios": "^1.2.1",
29
+ "firebase-admin": "^11.4.0",
30
+ "firebase-functions": "^4.1.1"
24
31
  },
25
32
  "devDependencies": {
26
- "@cloudcommerce/types": "workspace:*"
33
+ "@cloudcommerce/types": "workspace:*",
34
+ "@firebase/app-types": "^0.9.0"
27
35
  }
28
36
  }
@@ -0,0 +1,25 @@
1
+ /* eslint-disable import/prefer-default-export */
2
+ import '@cloudcommerce/firebase/lib/init';
3
+ import {
4
+ createAppEventsFunction,
5
+ ApiEventHandler,
6
+ } from '@cloudcommerce/firebase/lib/helpers/pubsub';
7
+ import config from '@cloudcommerce/firebase/lib/config';
8
+ import functions from 'firebase-functions/v1';
9
+ import handleTrackingCodes from './functions-lib/tracking-codes';
10
+ import handleApiEvent from './functions-lib/events-to-frenet';
11
+
12
+ const { httpsFunctionOptions: { region } } = config.get();
13
+
14
+ export const frenet = {
15
+ cronTrackingCodes: functions.region(region).pubsub
16
+ .schedule('*/30 * * * *')
17
+ .onRun(() => {
18
+ return handleTrackingCodes;
19
+ }),
20
+
21
+ onStoreEvent: createAppEventsFunction(
22
+ 'frenet',
23
+ handleApiEvent as ApiEventHandler,
24
+ ),
25
+ };