cloudcommerce 0.0.59 → 0.0.62

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 (136) hide show
  1. package/.eslintrc.cjs +2 -0
  2. package/CHANGELOG.md +42 -0
  3. package/action.yml +6 -1
  4. package/package.json +9 -8
  5. package/packages/api/lib/api.d.ts +5036 -0
  6. package/packages/api/lib/{index.js → api.js} +16 -10
  7. package/packages/api/lib/api.js.map +1 -0
  8. package/packages/api/lib/types.d.ts +1 -0
  9. package/packages/api/package.json +3 -3
  10. package/packages/api/src/{index.ts → api.ts} +21 -17
  11. package/packages/api/src/types.ts +1 -0
  12. package/packages/api/tests/index.test.ts +2 -2
  13. package/packages/apps/discounts/lib/discounts.js +1 -1
  14. package/packages/apps/discounts/lib/discounts.js.map +1 -1
  15. package/packages/apps/discounts/{lib-cjs/apply-discount.cjs → lib-mjs/apply-discount.mjs} +7 -9
  16. package/packages/apps/discounts/{lib-cjs/helpers.cjs → lib-mjs/helpers.mjs} +2 -2
  17. package/packages/apps/discounts/package.json +1 -1
  18. package/packages/apps/discounts/src/discounts.ts +1 -1
  19. package/packages/apps/tiny-erp/lib/event-to-tiny.js +117 -0
  20. package/packages/apps/tiny-erp/lib/event-to-tiny.js.map +1 -0
  21. package/packages/apps/tiny-erp/lib/index.js +2 -0
  22. package/packages/apps/tiny-erp/lib/index.js.map +1 -0
  23. package/packages/apps/tiny-erp/lib/integration/after-tiny-queue.js +79 -0
  24. package/packages/apps/tiny-erp/lib/integration/after-tiny-queue.js.map +1 -0
  25. package/packages/apps/tiny-erp/lib/integration/export-order-to-tiny.js +81 -0
  26. package/packages/apps/tiny-erp/lib/integration/export-order-to-tiny.js.map +1 -0
  27. package/packages/apps/tiny-erp/lib/integration/export-product-to-tiny.js +58 -0
  28. package/packages/apps/tiny-erp/lib/integration/export-product-to-tiny.js.map +1 -0
  29. package/packages/apps/tiny-erp/lib/integration/helpers/format-tiny-date.js +7 -0
  30. package/packages/apps/tiny-erp/lib/integration/helpers/format-tiny-date.js.map +1 -0
  31. package/packages/apps/tiny-erp/lib/integration/import-order-from-tiny.js +92 -0
  32. package/packages/apps/tiny-erp/lib/integration/import-order-from-tiny.js.map +1 -0
  33. package/packages/apps/tiny-erp/lib/integration/import-product-from-tiny.js +158 -0
  34. package/packages/apps/tiny-erp/lib/integration/import-product-from-tiny.js.map +1 -0
  35. package/packages/apps/tiny-erp/lib/integration/parsers/order-from-tiny.js +46 -0
  36. package/packages/apps/tiny-erp/lib/integration/parsers/order-from-tiny.js.map +1 -0
  37. package/packages/apps/tiny-erp/lib/integration/parsers/order-to-tiny.js +193 -0
  38. package/packages/apps/tiny-erp/lib/integration/parsers/order-to-tiny.js.map +1 -0
  39. package/packages/apps/tiny-erp/lib/integration/parsers/product-from-tiny.js +199 -0
  40. package/packages/apps/tiny-erp/lib/integration/parsers/product-from-tiny.js.map +1 -0
  41. package/packages/apps/tiny-erp/lib/integration/parsers/product-to-tiny.js +129 -0
  42. package/packages/apps/tiny-erp/lib/integration/parsers/product-to-tiny.js.map +1 -0
  43. package/packages/apps/tiny-erp/lib/integration/parsers/status-from-tiny.js +34 -0
  44. package/packages/apps/tiny-erp/lib/integration/parsers/status-from-tiny.js.map +1 -0
  45. package/packages/apps/tiny-erp/lib/integration/parsers/status-to-tiny.js +39 -0
  46. package/packages/apps/tiny-erp/lib/integration/parsers/status-to-tiny.js.map +1 -0
  47. package/packages/apps/tiny-erp/lib/integration/post-tiny-erp.js +47 -0
  48. package/packages/apps/tiny-erp/lib/integration/post-tiny-erp.js.map +1 -0
  49. package/packages/apps/tiny-erp/lib/tiny-erp.js +17 -0
  50. package/packages/apps/tiny-erp/lib/tiny-erp.js.map +1 -0
  51. package/packages/apps/tiny-erp/lib/tiny-webhook.js +92 -0
  52. package/packages/apps/tiny-erp/lib/tiny-webhook.js.map +1 -0
  53. package/packages/apps/tiny-erp/package.json +13 -6
  54. package/packages/apps/tiny-erp/src/event-to-tiny.ts +136 -0
  55. package/packages/apps/tiny-erp/src/index.ts +1 -0
  56. package/packages/apps/tiny-erp/src/integration/after-tiny-queue.ts +80 -0
  57. package/packages/apps/tiny-erp/src/integration/export-order-to-tiny.ts +86 -0
  58. package/packages/apps/tiny-erp/src/integration/export-product-to-tiny.ts +60 -0
  59. package/packages/apps/tiny-erp/src/integration/helpers/format-tiny-date.ts +6 -0
  60. package/packages/apps/tiny-erp/src/integration/import-order-from-tiny.ts +102 -0
  61. package/packages/apps/tiny-erp/src/integration/import-product-from-tiny.ts +162 -0
  62. package/packages/apps/tiny-erp/src/integration/parsers/order-from-tiny.ts +49 -0
  63. package/packages/apps/tiny-erp/src/integration/parsers/order-to-tiny.ts +205 -0
  64. package/packages/apps/tiny-erp/src/integration/parsers/product-from-tiny.ts +215 -0
  65. package/packages/apps/tiny-erp/src/integration/parsers/product-to-tiny.ts +138 -0
  66. package/packages/apps/tiny-erp/src/integration/parsers/status-from-tiny.ts +35 -0
  67. package/packages/apps/tiny-erp/src/integration/parsers/status-to-tiny.ts +42 -0
  68. package/packages/apps/tiny-erp/src/integration/post-tiny-erp.ts +52 -0
  69. package/packages/apps/tiny-erp/src/tiny-erp.ts +23 -0
  70. package/packages/apps/tiny-erp/src/tiny-webhook.ts +100 -0
  71. package/packages/cli/package.json +1 -1
  72. package/packages/events/lib/firebase.js +2 -26
  73. package/packages/events/lib/firebase.js.map +1 -1
  74. package/packages/events/lib/index.js +1 -1
  75. package/packages/events/lib/index.js.map +1 -1
  76. package/packages/events/package.json +1 -1
  77. package/packages/events/src/firebase.ts +2 -28
  78. package/packages/events/src/index.ts +1 -1
  79. package/packages/firebase/lib/config.d.ts +2 -2
  80. package/packages/firebase/lib/config.js +7 -5
  81. package/packages/firebase/lib/config.js.map +1 -1
  82. package/packages/firebase/lib/const.d.ts +2 -0
  83. package/packages/firebase/lib/const.js +6 -0
  84. package/packages/firebase/lib/const.js.map +1 -0
  85. package/packages/firebase/lib/handlers/check-store-events.js +50 -27
  86. package/packages/firebase/lib/handlers/check-store-events.js.map +1 -1
  87. package/packages/firebase/lib/helpers/pubsub.d.ts +9 -0
  88. package/packages/firebase/lib/helpers/pubsub.js +32 -0
  89. package/packages/firebase/lib/helpers/pubsub.js.map +1 -0
  90. package/packages/firebase/lib/helpers/update-app-data.d.ts +9 -0
  91. package/packages/firebase/lib/helpers/update-app-data.js +45 -0
  92. package/packages/firebase/lib/helpers/update-app-data.js.map +1 -0
  93. package/packages/firebase/lib/index.d.ts +1 -2
  94. package/packages/firebase/lib/index.js +1 -6
  95. package/packages/firebase/lib/index.js.map +1 -1
  96. package/packages/firebase/lib/init.d.ts +2 -0
  97. package/packages/firebase/lib/init.js +9 -0
  98. package/packages/firebase/lib/init.js.map +1 -0
  99. package/packages/firebase/package.json +5 -2
  100. package/packages/firebase/src/config.ts +9 -6
  101. package/packages/firebase/src/const.ts +5 -0
  102. package/packages/firebase/src/handlers/check-store-events.ts +56 -33
  103. package/packages/firebase/src/helpers/pubsub.ts +52 -0
  104. package/packages/firebase/src/helpers/update-app-data.ts +49 -0
  105. package/packages/firebase/src/index.ts +1 -7
  106. package/packages/firebase/src/init.ts +9 -0
  107. package/packages/modules/lib/firebase/handle-module.js +4 -5
  108. package/packages/modules/lib/firebase/handle-module.js.map +1 -1
  109. package/packages/modules/lib/firebase/serve-modules-api.js +2 -2
  110. package/packages/modules/lib/firebase/serve-modules-api.js.map +1 -1
  111. package/packages/modules/lib/firebase.js +2 -7
  112. package/packages/modules/lib/firebase.js.map +1 -1
  113. package/packages/modules/package.json +1 -1
  114. package/packages/modules/src/firebase/handle-module.ts +2 -5
  115. package/packages/modules/src/firebase/serve-modules-api.ts +2 -6
  116. package/packages/modules/src/firebase.ts +2 -7
  117. package/packages/passport/lib/firebase/handle-passport.js +12 -10
  118. package/packages/passport/lib/firebase/handle-passport.js.map +1 -1
  119. package/packages/passport/lib/firebase/serve-passport-api.js +2 -2
  120. package/packages/passport/lib/firebase/serve-passport-api.js.map +1 -1
  121. package/packages/passport/lib/firebase.js +2 -7
  122. package/packages/passport/lib/firebase.js.map +1 -1
  123. package/packages/passport/package.json +1 -1
  124. package/packages/passport/src/firebase/handle-passport.ts +10 -19
  125. package/packages/passport/src/firebase/serve-passport-api.ts +0 -2
  126. package/packages/passport/src/firebase.ts +1 -7
  127. package/packages/ssr/lib/firebase.js +1 -4
  128. package/packages/ssr/lib/firebase.js.map +1 -1
  129. package/packages/ssr/package.json +1 -1
  130. package/packages/ssr/src/firebase.ts +1 -4
  131. package/packages/storefront/package.json +4 -4
  132. package/packages/types/index.ts +18 -3
  133. package/packages/types/package.json +1 -1
  134. package/packages/api/lib/index.d.ts +0 -9974
  135. package/packages/api/lib/index.js.map +0 -1
  136. package/packages/apps/tiny-erp/src/firebase.ts +0 -0
@@ -0,0 +1,23 @@
1
+ /* eslint-disable import/prefer-default-export */
2
+
3
+ import '@cloudcommerce/firebase/lib/init';
4
+ // eslint-disable-next-line import/no-unresolved
5
+ import { onRequest } from 'firebase-functions/v2/https';
6
+ import config from '@cloudcommerce/firebase/lib/config';
7
+ import {
8
+ createAppEventsFunction,
9
+ ApiEventHandler,
10
+ } from '@cloudcommerce/firebase/lib/helpers/pubsub';
11
+ import handleApiEvent from './event-to-tiny';
12
+ import handleTinyWebhook from './tiny-webhook';
13
+
14
+ const { httpsFunctionOptions } = config.get();
15
+
16
+ export const tinyErpOnApiEvent = createAppEventsFunction(
17
+ 'tinyErp',
18
+ handleApiEvent as ApiEventHandler,
19
+ );
20
+
21
+ export const tinyErpWebhook = onRequest(httpsFunctionOptions, (req, res) => {
22
+ handleTinyWebhook(req, res);
23
+ });
@@ -0,0 +1,100 @@
1
+ import type { Request, Response } from 'firebase-functions';
2
+ import type { Applications } from '@cloudcommerce/types';
3
+ import logger from 'firebase-functions/lib/logger';
4
+ import api from '@cloudcommerce/api';
5
+ import config from '@cloudcommerce/firebase/lib/config';
6
+ import importProduct from './integration/import-product-from-tiny';
7
+ import importOrder from './integration/import-order-from-tiny';
8
+
9
+ let appData: Record<string, any> = {};
10
+ let application: Applications;
11
+
12
+ export default async (req: Request, res: Response) => {
13
+ const tinyToken = req.query.token;
14
+ if (typeof tinyToken === 'string' && tinyToken && req.body) {
15
+ const { dados, tipo } = req.body;
16
+ if (dados) {
17
+ /*
18
+ TODO: Check Tiny server IPs
19
+ const clientIp = req.get('x-forwarded-for') || req.connection.remoteAddress
20
+ */
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;
37
+ }
38
+
39
+ if (dados.idVendaTiny) {
40
+ const orderNumber = `id:${dados.idVendaTiny}`;
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);
69
+ }
70
+
71
+ if (tipo === 'produto') {
72
+ const mapeamentos: any[] = [];
73
+ const parseTinyItem = (tinyItem) => {
74
+ if (tinyItem) {
75
+ const {
76
+ idMapeamento,
77
+ id,
78
+ codigo,
79
+ sku,
80
+ } = tinyItem;
81
+ mapeamentos.push({
82
+ idMapeamento: idMapeamento || id,
83
+ skuMapeamento: codigo || sku,
84
+ });
85
+ }
86
+ };
87
+ parseTinyItem(dados);
88
+ if (Array.isArray(dados.variacoes)) {
89
+ dados.variacoes.forEach((variacao) => {
90
+ parseTinyItem(variacao.id ? variacao : variacao.variacao);
91
+ });
92
+ }
93
+ return res.status(200).send(mapeamentos);
94
+ }
95
+ return res.sendStatus(200);
96
+ }
97
+ logger.warn('< Invalid Tiny Webhook body', req.body);
98
+ }
99
+ return res.sendStatus(403);
100
+ };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/cli",
3
3
  "type": "module",
4
- "version": "0.0.59",
4
+ "version": "0.0.62",
5
5
  "description": "E-Com Plus Cloud Commerce CLI tools",
6
6
  "bin": {
7
7
  "cloudcommerce": "./bin/run.mjs"
@@ -1,29 +1,5 @@
1
1
  /* eslint-disable import/prefer-default-export */
2
- import 'source-map-support/register.js';
3
- // eslint-disable-next-line import/no-unresolved
4
- import { initializeApp } from 'firebase-admin/app';
5
- import functions from 'firebase-functions';
6
- import config from '@cloudcommerce/firebase/lib/config';
2
+ import '@cloudcommerce/firebase/lib/init';
7
3
 
8
- const { logger } = functions;
9
- initializeApp();
10
- const eventMaxAgeMs = 60000;
11
- const newOrderTopic = 'orders-new';
12
- const { httpsFunctionOptions: { region } } = config.get();
13
-
14
- export const onNewOrder = functions.region(region)
15
- .runWith({ failurePolicy: true })
16
- .pubsub.topic(newOrderTopic).onPublish((message, context) => {
17
- const eventAgeMs = Date.now() - Date.parse(context.timestamp);
18
- if (eventAgeMs > eventMaxAgeMs) {
19
- logger.warn(`Dropping event ${context.eventId} with age[ms]: ${eventAgeMs}`);
20
- return;
21
- }
22
- const { json } = message;
23
- logger.info({
24
- topic: newOrderTopic,
25
- eventId: context.eventId,
26
- json,
27
- });
28
- });
4
+ export * from '@cloudcommerce/app-tiny-erp';
29
5
  // # sourceMappingURL=firebase.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"firebase.js","sourceRoot":"","sources":["../src/firebase.ts"],"names":[],"mappings":"AAAA,iDAAiD;AAGjD,OAAO,gCAAgC,CAAC;AACxC,gDAAgD;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,MAAM,MAAM,oCAAoC,CAAC;AAExD,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;AAC7B,aAAa,EAAE,CAAC;AAEhB,MAAM,aAAa,GAAG,KAAK,CAAC;AAC5B,MAAM,aAAa,GAAmB,YAAY,CAAC;AACnD,MAAM,EAAE,oBAAoB,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AAE1D,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;KAC/C,OAAO,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;KAChC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;IAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9D,IAAI,UAAU,GAAG,aAAa,EAAE;QAC9B,MAAM,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,OAAO,kBAAkB,UAAU,EAAE,CAAC,CAAC;QAC7E,OAAO;KACR;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACzB,MAAM,CAAC,IAAI,CAAC;QACV,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,IAAI;KACL,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"firebase.js","sourceRoot":"","sources":["../src/firebase.ts"],"names":[],"mappings":"AAAA,iDAAiD;AAEjD,OAAO,kCAAkC,CAAC;AAE1C,cAAc,6BAA6B,CAAC"}
@@ -1,2 +1,2 @@
1
- export default {};
1
+ import './firebase.js';
2
2
  // # sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,CAAC"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/events",
3
3
  "type": "module",
4
- "version": "0.0.59",
4
+ "version": "0.0.62",
5
5
  "description": "E-Com Plus Cloud Commerce app events",
6
6
  "main": "lib/index.js",
7
7
  "exports": {
@@ -1,31 +1,5 @@
1
1
  /* eslint-disable import/prefer-default-export */
2
2
 
3
- import type { AppEventsTopic } from '@cloudcommerce/types';
4
- import 'source-map-support/register.js';
5
- // eslint-disable-next-line import/no-unresolved
6
- import { initializeApp } from 'firebase-admin/app';
7
- import functions from 'firebase-functions';
8
- import config from '@cloudcommerce/firebase/lib/config';
3
+ import '@cloudcommerce/firebase/lib/init';
9
4
 
10
- const { logger } = functions;
11
- initializeApp();
12
-
13
- const eventMaxAgeMs = 60000;
14
- const newOrderTopic: AppEventsTopic = 'orders-new';
15
- const { httpsFunctionOptions: { region } } = config.get();
16
-
17
- export const onNewOrder = functions.region(region)
18
- .runWith({ failurePolicy: true })
19
- .pubsub.topic(newOrderTopic).onPublish((message, context) => {
20
- const eventAgeMs = Date.now() - Date.parse(context.timestamp);
21
- if (eventAgeMs > eventMaxAgeMs) {
22
- logger.warn(`Dropping event ${context.eventId} with age[ms]: ${eventAgeMs}`);
23
- return;
24
- }
25
- const { json } = message;
26
- logger.info({
27
- topic: newOrderTopic,
28
- eventId: context.eventId,
29
- json,
30
- });
31
- });
5
+ export * from '@cloudcommerce/app-tiny-erp';
@@ -1 +1 @@
1
- export default {};
1
+ import './firebase';
@@ -1,4 +1,4 @@
1
- import type { AppEventsTopic } from '@cloudcommerce/types';
1
+ import type { ApiEventName } from '@cloudcommerce/types';
2
2
  declare const _default: {
3
3
  get(): {
4
4
  hello: string;
@@ -16,7 +16,7 @@ declare const _default: {
16
16
  };
17
17
  tinyErp: {
18
18
  appId: number;
19
- events: AppEventsTopic[];
19
+ events: ApiEventName[];
20
20
  };
21
21
  };
22
22
  };
@@ -8,6 +8,12 @@ const env = (typeof process === 'object' && process?.env)
8
8
  || (typeof window === 'object' && window)
9
9
  || {};
10
10
  const deepmerge = Deepmerge();
11
+ const tinyErpEvents = [
12
+ 'orders-anyStatusSet',
13
+ 'products-new',
14
+ 'products-priceSet',
15
+ 'applications-dataSet',
16
+ ];
11
17
  const self = {
12
18
  __config: {
13
19
  hello: 'from @cloudcommerce/firebase',
@@ -25,11 +31,7 @@ const self = {
25
31
  },
26
32
  tinyErp: {
27
33
  appId: 105922,
28
- events: [
29
- 'orders-anyStatusSet',
30
- 'products-new',
31
- 'products-priceSet',
32
- ],
34
+ events: tinyErpEvents,
33
35
  },
34
36
  },
35
37
  },
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,aAAa;AACb,MAAM,GAAG,GAA8B,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,EAAE,GAAG,CAAC;OAC/E,CAAC,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC;OACtC,EAAE,CAAC;AAER,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC;AAE9B,MAAM,IAAI,GAAG;IACX,QAAQ,EAAE;QACR,KAAK,EAAE,8BAA8B;QACrC,IAAI,EAAE,GAAG,CAAC,SAAS,IAAI,YAAY;QACnC,QAAQ,EAAE,GAAG,CAAC,aAAa,IAAI,gBAAgB;QAC/C,cAAc,EAAE,GAAG,CAAC,oBAAoB,IAAI,uBAAuB;QACnE,WAAW,EAAE,GAAG,CAAC,iBAAiB,IAAI,oBAAoB;QAC1D,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC;QAClC,oBAAoB,EAAE;YACpB,MAAM,EAAE,GAAG,CAAC,aAAa,IAAI,oBAAoB;SAClD;QACD,IAAI,EAAE;YACJ,SAAS,EAAE;gBACT,KAAK,EAAE,IAAI;aACZ;YACD,OAAO,EAAE;gBACP,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE;oBACN,qBAAqB;oBACrB,cAAc;oBACd,mBAAmB;iBACA;aACtB;SACF;KACF;CACF,CAAC;AAEF,eAAe;IACb,GAAG;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACD,GAAG,CAAC,MAAM;QACR,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,MAAM,CAAC,OAAO,EAAE;YAClB,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;SACpC;IACH,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,aAAa;AACb,MAAM,GAAG,GAA8B,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,EAAE,GAAG,CAAC;OAC/E,CAAC,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC;OACtC,EAAE,CAAC;AAER,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC;AAE9B,MAAM,aAAa,GAAmB;IACpC,qBAAqB;IACrB,cAAc;IACd,mBAAmB;IACnB,sBAAsB;CACvB,CAAC;AAEF,MAAM,IAAI,GAAG;IACX,QAAQ,EAAE;QACR,KAAK,EAAE,8BAA8B;QACrC,IAAI,EAAE,GAAG,CAAC,SAAS,IAAI,YAAY;QACnC,QAAQ,EAAE,GAAG,CAAC,aAAa,IAAI,gBAAgB;QAC/C,cAAc,EAAE,GAAG,CAAC,oBAAoB,IAAI,uBAAuB;QACnE,WAAW,EAAE,GAAG,CAAC,iBAAiB,IAAI,oBAAoB;QAC1D,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC;QAClC,oBAAoB,EAAE;YACpB,MAAM,EAAE,GAAG,CAAC,aAAa,IAAI,oBAAoB;SAClD;QACD,IAAI,EAAE;YACJ,SAAS,EAAE;gBACT,KAAK,EAAE,IAAI;aACZ;YACD,OAAO,EAAE;gBACP,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,aAAa;aACtB;SACF;KACF;CACF,CAAC;AAEF,eAAe;IACb,GAAG;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACD,GAAG,CAAC,MAAM;QACR,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,MAAM,CAAC,OAAO,EAAE;YAClB,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;SACpC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const EVENT_SKIP_FLAG = "_skip";
2
+ export declare const GET_PUBSUB_TOPIC: (appId: number) => string;
@@ -0,0 +1,6 @@
1
+ export const EVENT_SKIP_FLAG = '_skip';
2
+
3
+ export const GET_PUBSUB_TOPIC = (appId) => {
4
+ return `app${appId}_api_events`;
5
+ };
6
+ // # sourceMappingURL=const.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"const.js","sourceRoot":"","sources":["../src/const.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;AAEvC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAE,EAAE;IAChD,OAAO,MAAM,KAAK,aAAa,CAAC;AAClC,CAAC,CAAC"}
@@ -3,19 +3,21 @@ import { getFirestore } from 'firebase-admin/firestore';
3
3
  import logger from 'firebase-functions/lib/logger';
4
4
  import { PubSub } from '@google-cloud/pubsub';
5
5
  import api from '@cloudcommerce/api';
6
- import getEnv from '../env.js';
7
6
  import config from '../config.js';
7
+ import { EVENT_SKIP_FLAG, GET_PUBSUB_TOPIC } from '../const.js';
8
8
 
9
- const parseEventsTopic = (eventsTopic, baseApiEventsFilter) => {
10
- const [resource, eventName] = eventsTopic.split('-');
11
- const params = {};
9
+ const parseEventName = (evName, baseApiEventsFilter) => {
10
+ const [resource, actionName] = evName.split('-');
11
+ const params = {
12
+ 'flag!': EVENT_SKIP_FLAG,
13
+ };
12
14
  const bodySet = { ...baseApiEventsFilter };
13
- if (eventName === 'new') {
15
+ if (actionName === 'new') {
14
16
  params.action = 'create';
15
17
  } else {
16
18
  switch (resource) {
17
19
  case 'orders':
18
- switch (eventName) {
20
+ switch (actionName) {
19
21
  case 'paid':
20
22
  bodySet['financial_status.current'] = 'paid';
21
23
  break;
@@ -24,7 +26,7 @@ const parseEventsTopic = (eventsTopic, baseApiEventsFilter) => {
24
26
  break;
25
27
  case 'shipped':
26
28
  case 'delivered':
27
- bodySet['fulfillment_status.current'] = eventName;
29
+ bodySet['fulfillment_status.current'] = actionName;
28
30
  break;
29
31
  case 'cancelled':
30
32
  bodySet.status = 'cancelled';
@@ -38,13 +40,16 @@ const parseEventsTopic = (eventsTopic, baseApiEventsFilter) => {
38
40
  }
39
41
  break;
40
42
  case 'products':
41
- params.modified_fields = eventName === 'priceSet'
43
+ params.modified_fields = actionName === 'priceSet'
42
44
  ? ['price', 'variations.price']
43
45
  : ['quantity']; // quantitySet
44
46
  break;
45
47
  case 'carts':
46
48
  params.modified_fields = ['customers']; // customerSet
47
49
  break;
50
+ case 'applications':
51
+ params.modified_fields = ['data', 'hidden_data']; // dataSet
52
+ break;
48
53
  default:
49
54
  }
50
55
  }
@@ -78,7 +83,6 @@ export default async () => {
78
83
  'timestamp<': new Date(timestamp).toISOString(),
79
84
  };
80
85
  const { apps } = config.get();
81
- const { apiAuth } = getEnv();
82
86
  const subscribersApps = [];
83
87
  Object.keys(apps).forEach((appName) => {
84
88
  const appObj = apps[appName];
@@ -86,27 +90,30 @@ export default async () => {
86
90
  subscribersApps.push(appObj);
87
91
  }
88
92
  });
89
- const activeAppsIds = (await api.get('applications', {
93
+ const activeApps = (await api.get('applications', {
90
94
  params: {
91
95
  state: 'active',
92
96
  app_id: subscribersApps.map(({ appId }) => appId),
93
- fields: 'app_id',
97
+ fields: '_id,app_id,data,hidden_data',
94
98
  },
95
- })).data.result.map((app) => app.app_id);
99
+ })).data.result;
96
100
  const listenedEvents = [];
97
101
  subscribersApps.forEach(({ appId, events }) => {
98
- if (activeAppsIds.includes(appId)) {
99
- events.forEach((eventsTopic) => {
100
- if (!listenedEvents.includes(eventsTopic)) {
101
- listenedEvents.push(eventsTopic);
102
+ if (activeApps.find((app) => app.app_id === appId)) {
103
+ events.forEach((evName) => {
104
+ if (!listenedEvents.includes(evName)) {
105
+ listenedEvents.push(evName);
102
106
  }
103
107
  });
104
108
  }
105
109
  });
106
- listenedEvents.forEach(async (eventsTopic) => {
107
- const { resource, params } = parseEventsTopic(eventsTopic, baseApiEventsFilter);
110
+ listenedEvents.forEach(async (listenedEventName) => {
111
+ const { resource, params } = parseEventName(listenedEventName, baseApiEventsFilter);
112
+ if (resource !== 'orders' && resource !== 'carts' && new Date().getMinutes() % 5) {
113
+ // Other resource events are not listened to every minute
114
+ return;
115
+ }
108
116
  let { data: { result } } = await api.get(`events/${resource}`, {
109
- ...apiAuth,
110
117
  params,
111
118
  });
112
119
  /*
@@ -124,23 +131,39 @@ export default async () => {
124
131
  if (typeof middleware === 'function') {
125
132
  result = await middleware(resource, result);
126
133
  }
127
- result.forEach((apiEvent) => {
128
- subscribersApps.forEach(({ appId, events }) => {
129
- if (events.includes(eventsTopic) && activeAppsIds.includes(appId)) {
130
- const topicName = `app${appId}_${eventsTopic}`;
134
+ const resourceIdsRead = [];
135
+ result.forEach(async (apiEvent) => {
136
+ const resourceId = apiEvent.resource_id;
137
+ if (resourceIdsRead.includes(resourceId)) {
138
+ return;
139
+ }
140
+ resourceIdsRead.push(resourceId);
141
+ const apiDoc = resource !== 'applications'
142
+ ? (await api.get(`${resource}/${resourceId}`)).data
143
+ : null;
144
+ activeApps.forEach((app) => {
145
+ const appConfig = subscribersApps.find(({ appId }) => appId === app.app_id);
146
+ if (appConfig?.events.includes(listenedEventName)) {
147
+ const topicName = GET_PUBSUB_TOPIC(app.app_id);
148
+ const json = {
149
+ evName: listenedEventName,
150
+ apiEvent,
151
+ apiDoc: apiDoc || app,
152
+ app,
153
+ };
131
154
  const messageObj = {
132
- messageId: `${eventsTopic}_${apiEvent.timestamp}`,
133
- json: apiEvent,
155
+ messageId: `${resourceId}_${apiEvent.timestamp}`,
156
+ json,
134
157
  };
135
158
  tryPubSubPublish(topicName, messageObj);
136
159
  }
137
160
  });
138
161
  });
139
- logger.info(`> '${eventsTopic}' events: `, result);
162
+ logger.info(`> '${listenedEventName}' events: `, result);
140
163
  });
141
164
  return documentRef.set({
142
165
  timestamp,
143
- activeAppsIds,
166
+ activeApps,
144
167
  listenedEvents,
145
168
  });
146
169
  };
@@ -1 +1 @@
1
- {"version":3,"file":"check-store-events.js","sourceRoot":"","sources":["../../src/handlers/check-store-events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"check-store-events.js","sourceRoot":"","sources":["../../src/handlers/check-store-events.ts"],"names":[],"mappings":"AACA,gDAAgD;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,MAAM,MAAM,+BAA+B,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,GAAkB,MAAM,oBAAoB,CAAC;AACpD,OAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE7D,MAAM,cAAc,GAAG,CACrB,MAAoB,EACpB,mBAA2C,EAC3C,EAAE;IACF,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjD,MAAM,MAAM,GAAwB;QAClC,OAAO,EAAE,eAAe;KACzB,CAAC;IACF,MAAM,OAAO,GAA2B,EAAE,GAAG,mBAAmB,EAAE,CAAC;IACnE,IAAI,UAAU,KAAK,KAAK,EAAE;QACxB,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;KAC1B;SAAM;QACL,QAAQ,QAAQ,EAAE;YAChB,KAAK,QAAQ;gBACX,QAAQ,UAAU,EAAE;oBAClB,KAAK,MAAM;wBACT,OAAO,CAAC,0BAA0B,CAAC,GAAG,MAAM,CAAC;wBAC7C,MAAM;oBACR,KAAK,kBAAkB;wBACrB,OAAO,CAAC,4BAA4B,CAAC,GAAG,oBAAoB,CAAC;wBAC7D,MAAM;oBACR,KAAK,SAAS,CAAC;oBACf,KAAK,WAAW;wBACd,OAAO,CAAC,4BAA4B,CAAC,GAAG,UAAU,CAAC;wBACnD,MAAM;oBACR,KAAK,WAAW;wBACd,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC;wBAC7B,MAAM;oBACR,SAAS,eAAe;wBACtB,MAAM,CAAC,eAAe,GAAG;4BACvB,kBAAkB;4BAClB,oBAAoB;4BACpB,QAAQ;yBACT,CAAC;iBACL;gBACD,MAAM;YACR,KAAK,UAAU;gBACb,MAAM,CAAC,eAAe,GAAG,UAAU,KAAK,UAAU;oBAChD,CAAC,CAAC,CAAC,OAAO,EAAE,kBAAkB,CAAC;oBAC/B,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc;gBAChC,MAAM;YACR,KAAK,OAAO;gBACV,MAAM,CAAC,eAAe,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc;gBACtD,MAAM;YACR,KAAK,cAAc;gBACjB,MAAM,CAAC,eAAe,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,UAAU;gBAC5D,MAAM;YACR,QAAQ;SACT;KACF;IACD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACrC,MAAM,CAAC,QAAQ,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAGxB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,IAAI,MAAM,EAAE,CAAC;AAClC,MAAM,gBAAgB,GAAG,CACvB,SAAiB,EACjB,UAA4C,EAC5C,OAAO,GAAG,CAAC,EACX,EAAE;IACF,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC;SACrD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACb,6CAA6C;QAC7C,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClB,IAAI,OAAO,IAAI,CAAC,EAAE;YAChB,UAAU,CAAC,GAAG,EAAE;gBACd,gBAAgB,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;YACvD,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC;SAC3B;IACH,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,eAAe,KAAK,IAAI,EAAE;IACxB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,YAAY,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC3D,MAAM,gBAAgB,GAAW,CAAC,MAAM,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;WACtE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;IAChC,MAAM,mBAAmB,GAAG;QAC1B,YAAY,EAAE,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE;QAC1D,YAAY,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;KAChD,CAAC;IACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;IAC9B,MAAM,eAAe,GAAqD,EAAE,CAAC;IAC7E,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;YACzC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC9B;IACH,CAAC,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE;QAChD,MAAM,EAAE;YACN,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC;YACjD,MAAM,EAAE,6BAA6B;SACtC;KACF,CAAC,CAAC,CAAC,IAAI,CAAC,MAAwC,CAAC;IAClD,MAAM,cAAc,GAAmB,EAAE,CAAC;IAC1C,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;QAC5C,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC,EAAE;YAClD,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBACxB,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;oBACpC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAC7B;YACH,CAAC,CAAC,CAAC;SACJ;IACH,CAAC,CAAC,CAAC;IACH,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,iBAAiB,EAAE,EAAE;QACjD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;QACpF,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE;YAChF,yDAAyD;YACzD,OAAO;SACR;QACD,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,UAAU,QAAQ,EAAE,EAAE;YAC7D,MAAM;SACP,CAAC,CAAC;QACH;;;;;;;;;;UAUE;QACF,MAAM,UAAU,GAAG,MAAM,CAAC,qBAAqB,CAAC;QAChD,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE;YACpC,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;SAC7C;QACD,MAAM,eAAe,GAAa,EAAE,CAAC;QACrC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;YAChC,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC;YACxC,IAAI,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;gBACxC,OAAO;aACR;YACD,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACjC,MAAM,MAAM,GAAG,QAAQ,KAAK,cAAc;gBACxC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI;gBACnD,CAAC,CAAC,IAAI,CAAC;YACT,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBACzB,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC5E,IAAI,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;oBACjD,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC/C,MAAM,IAAI,GAAqB;wBAC7B,MAAM,EAAE,iBAAiB;wBACzB,QAAQ;wBACR,MAAM,EAAE,MAAM,IAAI,GAAG;wBACrB,GAAG;qBACJ,CAAC;oBACF,MAAM,UAAU,GAAG;wBACjB,SAAS,EAAE,GAAG,UAAU,IAAI,QAAQ,CAAC,SAAS,EAAE;wBAChD,IAAI;qBACL,CAAC;oBACF,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;iBACzC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,MAAM,iBAAiB,YAAY,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IACH,OAAO,WAAW,CAAC,GAAG,CAAC;QACrB,SAAS;QACT,UAAU;QACV,cAAc;KACf,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { AppEventsPayload } from '@cloudcommerce/types';
2
+ import functions from 'firebase-functions';
3
+ declare type PubSubHandler<TMessage> = (json: TMessage, context: functions.EventContext, message: functions.pubsub.Message) => void;
4
+ declare type ApiEventHandler = PubSubHandler<AppEventsPayload>;
5
+ declare const createPubSubFunction: (pubSubTopic: string, fn: PubSubHandler<any>, eventMaxAgeMs?: number) => functions.CloudFunction<functions.pubsub.Message>;
6
+ declare const createAppEventsFunction: (appNameOrId: string | number, fn: ApiEventHandler, eventMaxAgeMs?: number) => functions.CloudFunction<functions.pubsub.Message>;
7
+ export default createPubSubFunction;
8
+ export { createPubSubFunction, createAppEventsFunction };
9
+ export type { PubSubHandler, ApiEventHandler };
@@ -0,0 +1,32 @@
1
+ import functions from 'firebase-functions';
2
+ import config from '../config.js';
3
+ import { GET_PUBSUB_TOPIC } from '../const.js';
4
+
5
+ const { logger } = functions;
6
+ /* eslint-enable no-unused-vars */
7
+ const createPubSubFunction = (pubSubTopic, fn, eventMaxAgeMs = 60000) => {
8
+ const { httpsFunctionOptions: { region } } = config.get();
9
+ return functions.region(region)
10
+ .runWith({ failurePolicy: true })
11
+ .pubsub.topic(pubSubTopic).onPublish((message, context) => {
12
+ const eventAgeMs = Date.now() - Date.parse(context.timestamp);
13
+ if (eventAgeMs > eventMaxAgeMs) {
14
+ logger.warn(`Dropping event ${context.eventId} with age[ms]: ${eventAgeMs}`);
15
+ }
16
+ fn(message.json, context, message);
17
+ });
18
+ };
19
+ const createAppEventsFunction = (appNameOrId, fn, eventMaxAgeMs = 60000) => {
20
+ let appId;
21
+ if (typeof appNameOrId === 'string') {
22
+ appId = config.get().apps[appNameOrId].appId;
23
+ } else {
24
+ appId = appNameOrId;
25
+ }
26
+ return createPubSubFunction(GET_PUBSUB_TOPIC(appId), fn, eventMaxAgeMs);
27
+ };
28
+
29
+ export default createPubSubFunction;
30
+
31
+ export { createPubSubFunction, createAppEventsFunction };
32
+ // # sourceMappingURL=pubsub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../../src/helpers/pubsub.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;AAS7B,kCAAkC;AAElC,MAAM,oBAAoB,GAAG,CAC3B,WAAmB,EACnB,EAAsB,EACtB,aAAa,GAAG,KAAK,EACrB,EAAE;IACF,MAAM,EAAE,oBAAoB,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;IAC1D,OAAO,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;SAC5B,OAAO,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SAChC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;QACxD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC9D,IAAI,UAAU,GAAG,aAAa,EAAE;YAC9B,MAAM,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,OAAO,kBAAkB,UAAU,EAAE,CAAC,CAAC;SAC9E;QACD,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAC9B,WAA4B,EAC5B,EAAmB,EACnB,aAAa,GAAG,KAAK,EACrB,EAAE;IACF,IAAI,KAAa,CAAC;IAClB,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;QACnC,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;KAC9C;SAAM;QACL,KAAK,GAAG,WAAW,CAAC;KACrB;IACD,OAAO,oBAAoB,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF,eAAe,oBAAoB,CAAC;AAEpC,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Applications } from '@cloudcommerce/types';
2
+ declare const _default: (application: Applications | Applications['_id'], data: Record<string, any>, { isHiddenData, canSendPubSub }?: {
3
+ isHiddenData?: boolean | undefined;
4
+ canSendPubSub?: boolean | undefined;
5
+ }) => Promise<Response & {
6
+ config: import("@cloudcommerce/api/lib/types").Config;
7
+ data: null;
8
+ }>;
9
+ export default _default;
@@ -0,0 +1,45 @@
1
+ import { PubSub } from '@google-cloud/pubsub';
2
+ import logger from 'firebase-functions/lib/logger';
3
+ import api from '@cloudcommerce/api';
4
+ import { EVENT_SKIP_FLAG, GET_PUBSUB_TOPIC } from '../const.js';
5
+
6
+ export default async (application, data, { isHiddenData = false, canSendPubSub = true } = {}) => {
7
+ const applicationId = typeof application === 'string'
8
+ ? application : application._id;
9
+ const subresource = isHiddenData ? 'hidden_data' : 'data';
10
+ if (application && typeof application === 'object' && canSendPubSub) {
11
+ // eslint-disable-next-line no-param-reassign
12
+ application[subresource] = data;
13
+ const json = {
14
+ evName: 'applications-dataSet',
15
+ apiEvent: {
16
+ timestamp: new Date().toISOString(),
17
+ resource_id: applicationId,
18
+ action: 'update',
19
+ modified_fields: [subresource],
20
+ authentication_id: null,
21
+ },
22
+ apiDoc: application,
23
+ app: {
24
+ _id: applicationId,
25
+ app_id: application.app_id,
26
+ data: application.data,
27
+ hidden_data: application.hidden_data,
28
+ },
29
+ isInternal: true,
30
+ };
31
+ try {
32
+ await new PubSub()
33
+ .topic(GET_PUBSUB_TOPIC(application.app_id))
34
+ .publishMessage({ json });
35
+ } catch (err) {
36
+ logger.error(err);
37
+ }
38
+ }
39
+ return api.patch(`applications/${applicationId}/${subresource}`, data, {
40
+ headers: {
41
+ 'X-Event-Flag': EVENT_SKIP_FLAG,
42
+ },
43
+ });
44
+ };
45
+ // # sourceMappingURL=update-app-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-app-data.js","sourceRoot":"","sources":["../../src/helpers/update-app-data.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,MAAM,MAAM,+BAA+B,CAAC;AACnD,OAAO,GAAG,MAAM,oBAAoB,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE7D,eAAe,KAAK,EAClB,WAA+C,EAC/C,IAAyB,EACzB,EAAE,YAAY,GAAG,KAAK,EAAE,aAAa,GAAG,IAAI,EAAE,GAAG,EAAE,EACnD,EAAE;IACF,MAAM,aAAa,GAAG,OAAO,WAAW,KAAK,QAAQ;QACnD,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC;IAClC,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC;IAC1D,IAAI,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,aAAa,EAAE;QACnE,6CAA6C;QAC7C,WAAW,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;QAChC,MAAM,IAAI,GAAqB;YAC7B,MAAM,EAAE,sBAAsB;YAC9B,QAAQ,EAAE;gBACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,WAAW,EAAE,aAAa;gBAC1B,MAAM,EAAE,QAAQ;gBAChB,eAAe,EAAE,CAAC,WAAW,CAAC;gBAC9B,iBAAiB,EAAE,IAAI;aACxB;YACD,MAAM,EAAE,WAAW;YACnB,GAAG,EAAE;gBACH,GAAG,EAAE,aAAa;gBAClB,MAAM,EAAE,WAAW,CAAC,MAAM;gBAC1B,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,WAAW,EAAE,WAAW,CAAC,WAAW;aACrC;YACD,UAAU,EAAE,IAAI;SACjB,CAAC;QACF,IAAI;YACF,MAAM,IAAI,MAAM,EAAE;iBACf,KAAK,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;iBAC3C,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SAC7B;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACnB;KACF;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,gBAAgB,aAAa,IAAI,WAAW,EAAE,EAAE,IAAI,EAAE;QACrE,OAAO,EAAE;YACP,cAAc,EAAE,eAAe;SAChC;KACF,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -1,4 +1,3 @@
1
- import 'source-map-support/register.js';
2
- import '@cloudcommerce/api/fetch-polyfill.js';
1
+ import './init';
3
2
  import functions from 'firebase-functions';
4
3
  export declare const cronStoreEvents: functions.CloudFunction<unknown>;
@@ -1,14 +1,9 @@
1
1
  /* eslint-disable import/prefer-default-export */
2
- import 'source-map-support/register.js';
3
- import '@cloudcommerce/api/fetch-polyfill.js';
4
- // https://github.com/import-js/eslint-plugin-import/issues/1810
5
- // eslint-disable-next-line import/no-unresolved
6
- import { initializeApp } from 'firebase-admin/app';
2
+ import './init.js';
7
3
  import functions from 'firebase-functions';
8
4
  import config from './config.js';
9
5
  import checkStoreEvents from './handlers/check-store-events.js';
10
6
 
11
- initializeApp();
12
7
  const { httpsFunctionOptions: { region } } = config.get();
13
8
  const functionBuilder = functions
14
9
  .region(region)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iDAAiD;AAEjD,OAAO,gCAAgC,CAAC;AACxC,OAAO,sCAAsC,CAAC;AAC9C,gEAAgE;AAChE,gDAAgD;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,gBAAgB,MAAM,+BAA+B,CAAC;AAE7D,aAAa,EAAE,CAAC;AAEhB,MAAM,EAAE,oBAAoB,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AAE1D,MAAM,eAAe,GAAG,SAAS;KAC9B,MAAM,CAAC,MAAM,CAAC;KACd,OAAO,CAAC;IACP,cAAc,EAAE,GAAG;IACnB,MAAM,EAAE,OAAO;CAChB,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM;KAClD,QAAQ,CAAC,WAAW,CAAC;KACrB,KAAK,CAAC,GAAG,EAAE;IACV,OAAO,gBAAgB,EAAE,CAAC;AAC5B,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iDAAiD;AAEjD,OAAO,QAAQ,CAAC;AAChB,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,gBAAgB,MAAM,+BAA+B,CAAC;AAE7D,MAAM,EAAE,oBAAoB,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AAE1D,MAAM,eAAe,GAAG,SAAS;KAC9B,MAAM,CAAC,MAAM,CAAC;KACd,OAAO,CAAC;IACP,cAAc,EAAE,GAAG;IACnB,MAAM,EAAE,OAAO;CAChB,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM;KAClD,QAAQ,CAAC,WAAW,CAAC;KACrB,KAAK,CAAC,GAAG,EAAE;IACV,OAAO,gBAAgB,EAAE,CAAC;AAC5B,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import 'source-map-support/register.js';
2
+ import '@cloudcommerce/api/fetch-polyfill.js';
@@ -0,0 +1,9 @@
1
+ /* eslint-disable import/first */
2
+ import 'source-map-support/register.js';
3
+ import '@cloudcommerce/api/fetch-polyfill.js';
4
+ // https://github.com/import-js/eslint-plugin-import/issues/1810
5
+ // eslint-disable-next-line import/no-unresolved
6
+ import { initializeApp } from 'firebase-admin/app';
7
+
8
+ initializeApp();
9
+ // # sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,iCAAiC;AAEjC,OAAO,gCAAgC,CAAC;AACxC,OAAO,sCAAsC,CAAC;AAC9C,gEAAgE;AAChE,gDAAgD;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,aAAa,EAAE,CAAC"}