cloudcommerce 0.0.59 → 0.0.60
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/.eslintrc.cjs +2 -0
- package/CHANGELOG.md +23 -0
- package/package.json +9 -8
- package/packages/api/lib/api.d.ts +5036 -0
- package/packages/api/lib/{index.js → api.js} +16 -10
- package/packages/api/lib/api.js.map +1 -0
- package/packages/api/lib/types.d.ts +1 -0
- package/packages/api/package.json +3 -3
- package/packages/api/src/{index.ts → api.ts} +21 -17
- package/packages/api/src/types.ts +1 -0
- package/packages/api/tests/index.test.ts +2 -2
- package/packages/apps/discounts/lib/discounts.js +1 -1
- package/packages/apps/discounts/lib/discounts.js.map +1 -1
- package/packages/apps/discounts/{lib-cjs/apply-discount.cjs → lib-mjs/apply-discount.mjs} +7 -9
- package/packages/apps/discounts/{lib-cjs/helpers.cjs → lib-mjs/helpers.mjs} +2 -2
- package/packages/apps/discounts/package.json +1 -1
- package/packages/apps/discounts/src/discounts.ts +1 -1
- package/packages/apps/tiny-erp/lib/event-to-tiny.js +111 -0
- package/packages/apps/tiny-erp/lib/event-to-tiny.js.map +1 -0
- package/packages/apps/tiny-erp/lib/index.js +2 -0
- package/packages/apps/tiny-erp/lib/index.js.map +1 -0
- package/packages/apps/tiny-erp/lib/integration/after-tiny-queue.js +79 -0
- package/packages/apps/tiny-erp/lib/integration/after-tiny-queue.js.map +1 -0
- package/packages/apps/tiny-erp/lib/integration/export-order-to-tiny.js +81 -0
- package/packages/apps/tiny-erp/lib/integration/export-order-to-tiny.js.map +1 -0
- package/packages/apps/tiny-erp/lib/integration/export-product-to-tiny.js +58 -0
- package/packages/apps/tiny-erp/lib/integration/export-product-to-tiny.js.map +1 -0
- package/packages/apps/tiny-erp/lib/integration/helpers/format-tiny-date.js +7 -0
- package/packages/apps/tiny-erp/lib/integration/helpers/format-tiny-date.js.map +1 -0
- package/packages/apps/tiny-erp/lib/integration/import-order-from-tiny.js +94 -0
- package/packages/apps/tiny-erp/lib/integration/import-order-from-tiny.js.map +1 -0
- package/packages/apps/tiny-erp/lib/integration/import-product-from-tiny.js +169 -0
- package/packages/apps/tiny-erp/lib/integration/import-product-from-tiny.js.map +1 -0
- package/packages/apps/tiny-erp/lib/integration/parsers/order-from-tiny.js +46 -0
- package/packages/apps/tiny-erp/lib/integration/parsers/order-from-tiny.js.map +1 -0
- package/packages/apps/tiny-erp/lib/integration/parsers/order-to-tiny.js +193 -0
- package/packages/apps/tiny-erp/lib/integration/parsers/order-to-tiny.js.map +1 -0
- package/packages/apps/tiny-erp/lib/integration/parsers/product-from-tiny.js +199 -0
- package/packages/apps/tiny-erp/lib/integration/parsers/product-from-tiny.js.map +1 -0
- package/packages/apps/tiny-erp/lib/integration/parsers/product-to-tiny.js +129 -0
- package/packages/apps/tiny-erp/lib/integration/parsers/product-to-tiny.js.map +1 -0
- package/packages/apps/tiny-erp/lib/integration/parsers/status-from-tiny.js +34 -0
- package/packages/apps/tiny-erp/lib/integration/parsers/status-from-tiny.js.map +1 -0
- package/packages/apps/tiny-erp/lib/integration/parsers/status-to-tiny.js +39 -0
- package/packages/apps/tiny-erp/lib/integration/parsers/status-to-tiny.js.map +1 -0
- package/packages/apps/tiny-erp/lib/integration/post-tiny-erp.js +47 -0
- package/packages/apps/tiny-erp/lib/integration/post-tiny-erp.js.map +1 -0
- package/packages/apps/tiny-erp/lib/tiny-erp.js +17 -0
- package/packages/apps/tiny-erp/lib/tiny-erp.js.map +1 -0
- package/packages/apps/tiny-erp/lib/tiny-webhook.js +135 -0
- package/packages/apps/tiny-erp/lib/tiny-webhook.js.map +1 -0
- package/packages/apps/tiny-erp/package.json +13 -6
- package/packages/apps/tiny-erp/src/event-to-tiny.ts +129 -0
- package/packages/apps/tiny-erp/src/index.ts +1 -0
- package/packages/apps/tiny-erp/src/integration/after-tiny-queue.ts +80 -0
- package/packages/apps/tiny-erp/src/integration/export-order-to-tiny.ts +86 -0
- package/packages/apps/tiny-erp/src/integration/export-product-to-tiny.ts +60 -0
- package/packages/apps/tiny-erp/src/integration/helpers/format-tiny-date.ts +6 -0
- package/packages/apps/tiny-erp/src/integration/import-order-from-tiny.ts +104 -0
- package/packages/apps/tiny-erp/src/integration/import-product-from-tiny.ts +174 -0
- package/packages/apps/tiny-erp/src/integration/parsers/order-from-tiny.ts +49 -0
- package/packages/apps/tiny-erp/src/integration/parsers/order-to-tiny.ts +205 -0
- package/packages/apps/tiny-erp/src/integration/parsers/product-from-tiny.ts +215 -0
- package/packages/apps/tiny-erp/src/integration/parsers/product-to-tiny.ts +138 -0
- package/packages/apps/tiny-erp/src/integration/parsers/status-from-tiny.ts +35 -0
- package/packages/apps/tiny-erp/src/integration/parsers/status-to-tiny.ts +42 -0
- package/packages/apps/tiny-erp/src/integration/post-tiny-erp.ts +52 -0
- package/packages/apps/tiny-erp/src/tiny-erp.ts +23 -0
- package/packages/apps/tiny-erp/src/tiny-webhook.ts +143 -0
- package/packages/cli/package.json +1 -1
- package/packages/events/lib/firebase.js +2 -26
- package/packages/events/lib/firebase.js.map +1 -1
- package/packages/events/lib/index.js +1 -1
- package/packages/events/lib/index.js.map +1 -1
- package/packages/events/package.json +1 -1
- package/packages/events/src/firebase.ts +2 -28
- package/packages/events/src/index.ts +1 -1
- package/packages/firebase/lib/config.d.ts +2 -2
- package/packages/firebase/lib/config.js +7 -5
- package/packages/firebase/lib/config.js.map +1 -1
- package/packages/firebase/lib/const.d.ts +2 -0
- package/packages/firebase/lib/const.js +6 -0
- package/packages/firebase/lib/const.js.map +1 -0
- package/packages/firebase/lib/handlers/check-store-events.js +50 -27
- package/packages/firebase/lib/handlers/check-store-events.js.map +1 -1
- package/packages/firebase/lib/helpers/pubsub.d.ts +9 -0
- package/packages/firebase/lib/helpers/pubsub.js +32 -0
- package/packages/firebase/lib/helpers/pubsub.js.map +1 -0
- package/packages/firebase/lib/helpers/update-app-data.d.ts +9 -0
- package/packages/firebase/lib/helpers/update-app-data.js +45 -0
- package/packages/firebase/lib/helpers/update-app-data.js.map +1 -0
- package/packages/firebase/lib/index.d.ts +1 -2
- package/packages/firebase/lib/index.js +1 -6
- package/packages/firebase/lib/index.js.map +1 -1
- package/packages/firebase/lib/init.d.ts +2 -0
- package/packages/firebase/lib/init.js +9 -0
- package/packages/firebase/lib/init.js.map +1 -0
- package/packages/firebase/package.json +5 -2
- package/packages/firebase/src/config.ts +9 -6
- package/packages/firebase/src/const.ts +5 -0
- package/packages/firebase/src/handlers/check-store-events.ts +56 -33
- package/packages/firebase/src/helpers/pubsub.ts +52 -0
- package/packages/firebase/src/helpers/update-app-data.ts +49 -0
- package/packages/firebase/src/index.ts +1 -7
- package/packages/firebase/src/init.ts +9 -0
- package/packages/modules/lib/firebase/handle-module.js +4 -5
- package/packages/modules/lib/firebase/handle-module.js.map +1 -1
- package/packages/modules/lib/firebase/serve-modules-api.js +2 -2
- package/packages/modules/lib/firebase/serve-modules-api.js.map +1 -1
- package/packages/modules/lib/firebase.js +2 -7
- package/packages/modules/lib/firebase.js.map +1 -1
- package/packages/modules/package.json +1 -1
- package/packages/modules/src/firebase/handle-module.ts +2 -5
- package/packages/modules/src/firebase/serve-modules-api.ts +2 -6
- package/packages/modules/src/firebase.ts +2 -7
- package/packages/passport/lib/firebase/handle-passport.js +12 -10
- package/packages/passport/lib/firebase/handle-passport.js.map +1 -1
- package/packages/passport/lib/firebase/serve-passport-api.js +2 -2
- package/packages/passport/lib/firebase/serve-passport-api.js.map +1 -1
- package/packages/passport/lib/firebase.js +2 -7
- package/packages/passport/lib/firebase.js.map +1 -1
- package/packages/passport/package.json +1 -1
- package/packages/passport/src/firebase/handle-passport.ts +10 -19
- package/packages/passport/src/firebase/serve-passport-api.ts +0 -2
- package/packages/passport/src/firebase.ts +1 -7
- package/packages/ssr/lib/firebase.js +1 -4
- package/packages/ssr/lib/firebase.js.map +1 -1
- package/packages/ssr/package.json +1 -1
- package/packages/ssr/src/firebase.ts +1 -4
- package/packages/storefront/package.json +4 -4
- package/packages/types/index.ts +18 -3
- package/packages/types/package.json +1 -1
- package/packages/api/lib/index.d.ts +0 -9974
- package/packages/api/lib/index.js.map +0 -1
- package/packages/apps/tiny-erp/src/firebase.ts +0 -0
|
@@ -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,14 +1,9 @@
|
|
|
1
1
|
/* eslint-disable import/prefer-default-export */
|
|
2
|
-
import '
|
|
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';
|
|
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,
|
|
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,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"}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudcommerce/firebase",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.60",
|
|
5
5
|
"description": "E-Com Plus Cloud Commerce on Firebase",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"types": "lib/index.d.ts",
|
|
8
8
|
"exports": {
|
|
9
9
|
".": "./lib/index.js",
|
|
10
10
|
"./config": "./config.js",
|
|
11
|
+
"./lib/init": "./lib/init.js",
|
|
11
12
|
"./lib/config": "./lib/config.js",
|
|
12
|
-
"./lib/env": "./lib/env.js"
|
|
13
|
+
"./lib/env": "./lib/env.js",
|
|
14
|
+
"./lib/helpers/pubsub": "./lib/helpers/pubsub.js",
|
|
15
|
+
"./lib/helpers/update-app-data": "./lib/helpers/update-app-data.js"
|
|
13
16
|
},
|
|
14
17
|
"repository": {
|
|
15
18
|
"type": "git",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ApiEventName } from '@cloudcommerce/types';
|
|
2
2
|
import Deepmerge from '@fastify/deepmerge';
|
|
3
3
|
import {
|
|
4
4
|
DEFAULT_LANG,
|
|
@@ -14,6 +14,13 @@ const env: { [key: string]: string } = (typeof process === 'object' && process?.
|
|
|
14
14
|
|
|
15
15
|
const deepmerge = Deepmerge();
|
|
16
16
|
|
|
17
|
+
const tinyErpEvents: ApiEventName[] = [
|
|
18
|
+
'orders-anyStatusSet',
|
|
19
|
+
'products-new',
|
|
20
|
+
'products-priceSet',
|
|
21
|
+
'applications-dataSet',
|
|
22
|
+
];
|
|
23
|
+
|
|
17
24
|
const self = {
|
|
18
25
|
__config: {
|
|
19
26
|
hello: 'from @cloudcommerce/firebase',
|
|
@@ -31,11 +38,7 @@ const self = {
|
|
|
31
38
|
},
|
|
32
39
|
tinyErp: {
|
|
33
40
|
appId: 105922,
|
|
34
|
-
events:
|
|
35
|
-
'orders-anyStatusSet',
|
|
36
|
-
'products-new',
|
|
37
|
-
'products-priceSet',
|
|
38
|
-
] as AppEventsTopic[],
|
|
41
|
+
events: tinyErpEvents,
|
|
39
42
|
},
|
|
40
43
|
},
|
|
41
44
|
},
|
|
@@ -1,25 +1,27 @@
|
|
|
1
|
-
import type { Resource,
|
|
1
|
+
import type { Resource, ApiEventName, AppEventsPayload } from '@cloudcommerce/types';
|
|
2
2
|
// eslint-disable-next-line import/no-unresolved
|
|
3
3
|
import { getFirestore } from 'firebase-admin/firestore';
|
|
4
4
|
import logger from 'firebase-functions/lib/logger';
|
|
5
5
|
import { PubSub } from '@google-cloud/pubsub';
|
|
6
6
|
import api, { ApiConfig } from '@cloudcommerce/api';
|
|
7
|
-
import getEnv from '../env';
|
|
8
7
|
import config from '../config';
|
|
8
|
+
import { EVENT_SKIP_FLAG, GET_PUBSUB_TOPIC } from '../const';
|
|
9
9
|
|
|
10
|
-
const
|
|
11
|
-
|
|
10
|
+
const parseEventName = (
|
|
11
|
+
evName: ApiEventName,
|
|
12
12
|
baseApiEventsFilter: Record<string, string>,
|
|
13
13
|
) => {
|
|
14
|
-
const [resource,
|
|
15
|
-
const params: ApiConfig['params'] = {
|
|
14
|
+
const [resource, actionName] = evName.split('-');
|
|
15
|
+
const params: ApiConfig['params'] = {
|
|
16
|
+
'flag!': EVENT_SKIP_FLAG,
|
|
17
|
+
};
|
|
16
18
|
const bodySet: { [key: string]: any } = { ...baseApiEventsFilter };
|
|
17
|
-
if (
|
|
19
|
+
if (actionName === 'new') {
|
|
18
20
|
params.action = 'create';
|
|
19
21
|
} else {
|
|
20
22
|
switch (resource) {
|
|
21
23
|
case 'orders':
|
|
22
|
-
switch (
|
|
24
|
+
switch (actionName) {
|
|
23
25
|
case 'paid':
|
|
24
26
|
bodySet['financial_status.current'] = 'paid';
|
|
25
27
|
break;
|
|
@@ -28,7 +30,7 @@ const parseEventsTopic = (
|
|
|
28
30
|
break;
|
|
29
31
|
case 'shipped':
|
|
30
32
|
case 'delivered':
|
|
31
|
-
bodySet['fulfillment_status.current'] =
|
|
33
|
+
bodySet['fulfillment_status.current'] = actionName;
|
|
32
34
|
break;
|
|
33
35
|
case 'cancelled':
|
|
34
36
|
bodySet.status = 'cancelled';
|
|
@@ -42,13 +44,16 @@ const parseEventsTopic = (
|
|
|
42
44
|
}
|
|
43
45
|
break;
|
|
44
46
|
case 'products':
|
|
45
|
-
params.modified_fields =
|
|
47
|
+
params.modified_fields = actionName === 'priceSet'
|
|
46
48
|
? ['price', 'variations.price']
|
|
47
49
|
: ['quantity']; // quantitySet
|
|
48
50
|
break;
|
|
49
51
|
case 'carts':
|
|
50
52
|
params.modified_fields = ['customers']; // customerSet
|
|
51
53
|
break;
|
|
54
|
+
case 'applications':
|
|
55
|
+
params.modified_fields = ['data', 'hidden_data']; // dataSet
|
|
56
|
+
break;
|
|
52
57
|
default:
|
|
53
58
|
}
|
|
54
59
|
}
|
|
@@ -56,8 +61,8 @@ const parseEventsTopic = (
|
|
|
56
61
|
params[`body.${field}`] = bodySet[field];
|
|
57
62
|
});
|
|
58
63
|
return { resource, params } as {
|
|
59
|
-
resource: Resource
|
|
60
|
-
params: ApiConfig['params']
|
|
64
|
+
resource: Resource,
|
|
65
|
+
params: ApiConfig['params'],
|
|
61
66
|
};
|
|
62
67
|
};
|
|
63
68
|
|
|
@@ -90,35 +95,37 @@ export default async () => {
|
|
|
90
95
|
'timestamp<': new Date(timestamp).toISOString(),
|
|
91
96
|
};
|
|
92
97
|
const { apps } = config.get();
|
|
93
|
-
const {
|
|
94
|
-
const subscribersApps: Array<{ appId: number, events: AppEventsTopic[] }> = [];
|
|
98
|
+
const subscribersApps: Array<{ appId: number, events: ApiEventName[] }> = [];
|
|
95
99
|
Object.keys(apps).forEach((appName) => {
|
|
96
100
|
const appObj = apps[appName];
|
|
97
101
|
if (appObj.events && appObj.events.length) {
|
|
98
102
|
subscribersApps.push(appObj);
|
|
99
103
|
}
|
|
100
104
|
});
|
|
101
|
-
const
|
|
105
|
+
const activeApps = (await api.get('applications', {
|
|
102
106
|
params: {
|
|
103
107
|
state: 'active',
|
|
104
108
|
app_id: subscribersApps.map(({ appId }) => appId),
|
|
105
|
-
fields: 'app_id',
|
|
109
|
+
fields: '_id,app_id,data,hidden_data',
|
|
106
110
|
},
|
|
107
|
-
})).data.result
|
|
108
|
-
const listenedEvents:
|
|
111
|
+
})).data.result as Array<AppEventsPayload['app']>;
|
|
112
|
+
const listenedEvents: ApiEventName[] = [];
|
|
109
113
|
subscribersApps.forEach(({ appId, events }) => {
|
|
110
|
-
if (
|
|
111
|
-
events.forEach((
|
|
112
|
-
if (!listenedEvents.includes(
|
|
113
|
-
listenedEvents.push(
|
|
114
|
+
if (activeApps.find((app) => app.app_id === appId)) {
|
|
115
|
+
events.forEach((evName) => {
|
|
116
|
+
if (!listenedEvents.includes(evName)) {
|
|
117
|
+
listenedEvents.push(evName);
|
|
114
118
|
}
|
|
115
119
|
});
|
|
116
120
|
}
|
|
117
121
|
});
|
|
118
|
-
listenedEvents.forEach(async (
|
|
119
|
-
const { resource, params } =
|
|
122
|
+
listenedEvents.forEach(async (listenedEventName) => {
|
|
123
|
+
const { resource, params } = parseEventName(listenedEventName, baseApiEventsFilter);
|
|
124
|
+
if (resource !== 'orders' && resource !== 'carts' && new Date().getMinutes() % 5) {
|
|
125
|
+
// Other resource events are not listened to every minute
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
120
128
|
let { data: { result } } = await api.get(`events/${resource}`, {
|
|
121
|
-
...apiAuth,
|
|
122
129
|
params,
|
|
123
130
|
});
|
|
124
131
|
/*
|
|
@@ -136,23 +143,39 @@ export default async () => {
|
|
|
136
143
|
if (typeof middleware === 'function') {
|
|
137
144
|
result = await middleware(resource, result);
|
|
138
145
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
146
|
+
const resourceIdsRead: string[] = [];
|
|
147
|
+
result.forEach(async (apiEvent) => {
|
|
148
|
+
const resourceId = apiEvent.resource_id;
|
|
149
|
+
if (resourceIdsRead.includes(resourceId)) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
resourceIdsRead.push(resourceId);
|
|
153
|
+
const apiDoc = resource !== 'applications'
|
|
154
|
+
? (await api.get(`${resource}/${resourceId}`)).data
|
|
155
|
+
: null;
|
|
156
|
+
activeApps.forEach((app) => {
|
|
157
|
+
const appConfig = subscribersApps.find(({ appId }) => appId === app.app_id);
|
|
158
|
+
if (appConfig?.events.includes(listenedEventName)) {
|
|
159
|
+
const topicName = GET_PUBSUB_TOPIC(app.app_id);
|
|
160
|
+
const json: AppEventsPayload = {
|
|
161
|
+
evName: listenedEventName,
|
|
162
|
+
apiEvent,
|
|
163
|
+
apiDoc: apiDoc || app,
|
|
164
|
+
app,
|
|
165
|
+
};
|
|
143
166
|
const messageObj = {
|
|
144
|
-
messageId: `${
|
|
145
|
-
json
|
|
167
|
+
messageId: `${resourceId}_${apiEvent.timestamp}`,
|
|
168
|
+
json,
|
|
146
169
|
};
|
|
147
170
|
tryPubSubPublish(topicName, messageObj);
|
|
148
171
|
}
|
|
149
172
|
});
|
|
150
173
|
});
|
|
151
|
-
logger.info(`> '${
|
|
174
|
+
logger.info(`> '${listenedEventName}' events: `, result);
|
|
152
175
|
});
|
|
153
176
|
return documentRef.set({
|
|
154
177
|
timestamp,
|
|
155
|
-
|
|
178
|
+
activeApps,
|
|
156
179
|
listenedEvents,
|
|
157
180
|
});
|
|
158
181
|
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { AppEventsPayload } from '@cloudcommerce/types';
|
|
2
|
+
import functions from 'firebase-functions';
|
|
3
|
+
import config from '../config';
|
|
4
|
+
import { GET_PUBSUB_TOPIC } from '../const';
|
|
5
|
+
|
|
6
|
+
const { logger } = functions;
|
|
7
|
+
|
|
8
|
+
/* eslint-disable no-unused-vars */
|
|
9
|
+
type PubSubHandler<TMessage> = (
|
|
10
|
+
json: TMessage,
|
|
11
|
+
context: functions.EventContext,
|
|
12
|
+
message: functions.pubsub.Message,
|
|
13
|
+
) => void;
|
|
14
|
+
type ApiEventHandler = PubSubHandler<AppEventsPayload>;
|
|
15
|
+
/* eslint-enable no-unused-vars */
|
|
16
|
+
|
|
17
|
+
const createPubSubFunction = (
|
|
18
|
+
pubSubTopic: string,
|
|
19
|
+
fn: PubSubHandler<any>,
|
|
20
|
+
eventMaxAgeMs = 60000,
|
|
21
|
+
) => {
|
|
22
|
+
const { httpsFunctionOptions: { region } } = config.get();
|
|
23
|
+
return functions.region(region)
|
|
24
|
+
.runWith({ failurePolicy: true })
|
|
25
|
+
.pubsub.topic(pubSubTopic).onPublish((message, context) => {
|
|
26
|
+
const eventAgeMs = Date.now() - Date.parse(context.timestamp);
|
|
27
|
+
if (eventAgeMs > eventMaxAgeMs) {
|
|
28
|
+
logger.warn(`Dropping event ${context.eventId} with age[ms]: ${eventAgeMs}`);
|
|
29
|
+
}
|
|
30
|
+
fn(message.json, context, message);
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const createAppEventsFunction = (
|
|
35
|
+
appNameOrId: string | number,
|
|
36
|
+
fn: ApiEventHandler,
|
|
37
|
+
eventMaxAgeMs = 60000,
|
|
38
|
+
) => {
|
|
39
|
+
let appId: number;
|
|
40
|
+
if (typeof appNameOrId === 'string') {
|
|
41
|
+
appId = config.get().apps[appNameOrId].appId;
|
|
42
|
+
} else {
|
|
43
|
+
appId = appNameOrId;
|
|
44
|
+
}
|
|
45
|
+
return createPubSubFunction(GET_PUBSUB_TOPIC(appId), fn, eventMaxAgeMs);
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export default createPubSubFunction;
|
|
49
|
+
|
|
50
|
+
export { createPubSubFunction, createAppEventsFunction };
|
|
51
|
+
|
|
52
|
+
export type { PubSubHandler, ApiEventHandler };
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { Applications, AppEventsPayload } from '@cloudcommerce/types';
|
|
2
|
+
import { PubSub } from '@google-cloud/pubsub';
|
|
3
|
+
import logger from 'firebase-functions/lib/logger';
|
|
4
|
+
import api from '@cloudcommerce/api';
|
|
5
|
+
import { EVENT_SKIP_FLAG, GET_PUBSUB_TOPIC } from '../const';
|
|
6
|
+
|
|
7
|
+
export default async (
|
|
8
|
+
application: Applications | Applications['_id'],
|
|
9
|
+
data: Record<string, any>,
|
|
10
|
+
{ isHiddenData = false, canSendPubSub = true } = {},
|
|
11
|
+
) => {
|
|
12
|
+
const applicationId = typeof application === 'string'
|
|
13
|
+
? application : application._id;
|
|
14
|
+
const subresource = isHiddenData ? 'hidden_data' : 'data';
|
|
15
|
+
if (application && typeof application === 'object' && canSendPubSub) {
|
|
16
|
+
// eslint-disable-next-line no-param-reassign
|
|
17
|
+
application[subresource] = data;
|
|
18
|
+
const json: AppEventsPayload = {
|
|
19
|
+
evName: 'applications-dataSet',
|
|
20
|
+
apiEvent: {
|
|
21
|
+
timestamp: new Date().toISOString(),
|
|
22
|
+
resource_id: applicationId,
|
|
23
|
+
action: 'update',
|
|
24
|
+
modified_fields: [subresource],
|
|
25
|
+
authentication_id: null,
|
|
26
|
+
},
|
|
27
|
+
apiDoc: application,
|
|
28
|
+
app: {
|
|
29
|
+
_id: applicationId,
|
|
30
|
+
app_id: application.app_id,
|
|
31
|
+
data: application.data,
|
|
32
|
+
hidden_data: application.hidden_data,
|
|
33
|
+
},
|
|
34
|
+
isInternal: true,
|
|
35
|
+
};
|
|
36
|
+
try {
|
|
37
|
+
await new PubSub()
|
|
38
|
+
.topic(GET_PUBSUB_TOPIC(application.app_id))
|
|
39
|
+
.publishMessage({ json });
|
|
40
|
+
} catch (err) {
|
|
41
|
+
logger.error(err);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return api.patch(`applications/${applicationId}/${subresource}`, data, {
|
|
45
|
+
headers: {
|
|
46
|
+
'X-Event-Flag': EVENT_SKIP_FLAG,
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
};
|
|
@@ -1,16 +1,10 @@
|
|
|
1
1
|
/* eslint-disable import/prefer-default-export */
|
|
2
2
|
|
|
3
|
-
import '
|
|
4
|
-
import '@cloudcommerce/api/fetch-polyfill.js';
|
|
5
|
-
// https://github.com/import-js/eslint-plugin-import/issues/1810
|
|
6
|
-
// eslint-disable-next-line import/no-unresolved
|
|
7
|
-
import { initializeApp } from 'firebase-admin/app';
|
|
3
|
+
import './init';
|
|
8
4
|
import functions from 'firebase-functions';
|
|
9
5
|
import config from './config';
|
|
10
6
|
import checkStoreEvents from './handlers/check-store-events';
|
|
11
7
|
|
|
12
|
-
initializeApp();
|
|
13
|
-
|
|
14
8
|
const { httpsFunctionOptions: { region } } = config.get();
|
|
15
9
|
|
|
16
10
|
const functionBuilder = functions
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/* eslint-disable import/first */
|
|
2
|
+
|
|
3
|
+
import 'source-map-support/register.js';
|
|
4
|
+
import '@cloudcommerce/api/fetch-polyfill.js';
|
|
5
|
+
// https://github.com/import-js/eslint-plugin-import/issues/1810
|
|
6
|
+
// eslint-disable-next-line import/no-unresolved
|
|
7
|
+
import { initializeApp } from 'firebase-admin/app';
|
|
8
|
+
|
|
9
|
+
initializeApp();
|
|
@@ -11,7 +11,7 @@ const ajvAppsResponse = new Ajv({ ...ajvOptions, allErrors: true });
|
|
|
11
11
|
// Cache apps list and no params modules results
|
|
12
12
|
const appsCache = {};
|
|
13
13
|
const resultsCache = {};
|
|
14
|
-
async function runModule(
|
|
14
|
+
async function runModule(params, res, modName, validate, responseValidate, appId) {
|
|
15
15
|
const respond = (result) => res.send({
|
|
16
16
|
result,
|
|
17
17
|
meta: params,
|
|
@@ -47,7 +47,6 @@ async function runModule(apiAuth, params, res, modName, validate, responseValida
|
|
|
47
47
|
} else {
|
|
48
48
|
try {
|
|
49
49
|
const { data } = await api.get('applications', {
|
|
50
|
-
...apiAuth,
|
|
51
50
|
params: listAppsParams,
|
|
52
51
|
});
|
|
53
52
|
appsList = data.result;
|
|
@@ -151,15 +150,15 @@ async function runModule(apiAuth, params, res, modName, validate, responseValida
|
|
|
151
150
|
return res.sendStatus(501);
|
|
152
151
|
}
|
|
153
152
|
|
|
154
|
-
export default (modName, schema, responseSchema, req, res
|
|
153
|
+
export default (modName, schema, responseSchema, req, res) => {
|
|
155
154
|
const validate = ajv.compile(schema);
|
|
156
155
|
const responseValidate = ajvAppsResponse.compile(responseSchema);
|
|
157
156
|
return {
|
|
158
157
|
GET() {
|
|
159
|
-
runModule(
|
|
158
|
+
runModule(req.query, res, modName, validate, responseValidate);
|
|
160
159
|
},
|
|
161
160
|
POST() {
|
|
162
|
-
runModule(
|
|
161
|
+
runModule(req.body, res, modName, validate, responseValidate, req.query.app_id);
|
|
163
162
|
},
|
|
164
163
|
};
|
|
165
164
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handle-module.js","sourceRoot":"","sources":["../../src/firebase/handle-module.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,GAAyB,MAAM,KAAK,CAAC;AAC5C,OAAO,GAA4B,MAAM,oBAAoB,CAAC;AAC9D,OAAO,MAAM,MAAM,oCAAoC,CAAC;AACxD,OAAO,EACL,GAAG,EACH,UAAU,EACV,cAAc,EACd,gBAAgB,GACjB,MAAM,OAAO,CAAC;AACf,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAE9C,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,EAAE,GAAG,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAEpE,gDAAgD;AAChD,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB,KAAK,UAAU,SAAS,CACtB,
|
|
1
|
+
{"version":3,"file":"handle-module.js","sourceRoot":"","sources":["../../src/firebase/handle-module.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { schemas } from '../index.js';
|
|
2
2
|
import handleModule from './handle-module.js';
|
|
3
3
|
|
|
4
|
-
export default (req, res
|
|
4
|
+
export default (req, res) => {
|
|
5
5
|
const { method } = req;
|
|
6
6
|
if (method !== 'POST' && method !== 'GET') {
|
|
7
7
|
return res.sendStatus(405);
|
|
@@ -49,7 +49,7 @@ export default (req, res, apiAuth) => {
|
|
|
49
49
|
return sendSchema(true);
|
|
50
50
|
}
|
|
51
51
|
if (url === `/${modName}`) {
|
|
52
|
-
return handleModule(modName, schema, responseSchema, req, res
|
|
52
|
+
return handleModule(modName, schema, responseSchema, req, res);
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
return res.sendStatus(404);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve-modules-api.js","sourceRoot":"","sources":["../../src/firebase/serve-modules-api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAE3C,eAAe,
|
|
1
|
+
{"version":3,"file":"serve-modules-api.js","sourceRoot":"","sources":["../../src/firebase/serve-modules-api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAE3C,eAAe,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IAC7C,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IACvB,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK,EAAE;QACzC,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;KAC5B;IACD,IACE,MAAM,KAAK,MAAM;WACd,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EACzE;QACA,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;KAC5B;IAED,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IAClB,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;QACzB,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KACxB;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,CAAC,gBAAgB,GAAG,KAAK,EAAE,EAAE;QAC9C,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;aACnB,SAAS,CAAC,eAAe,EAAE,sBAAsB,CAAC;aAClD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC;IAEF,IAAI,OAAO,KAAK,WAAW,EAAE;QAC3B,IAAI,GAAG,KAAK,YAAY,EAAE;YACxB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC1B,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,UAAU;aACpB,CAAC,CAAC;SACJ;QACD,IAAI,GAAG,KAAK,mBAAmB,EAAE;YAC/B,OAAO,UAAU,EAAE,CAAC;SACrB;QACD,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;KAC5B;IAED,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QACpB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACnB,MAAM,CAAC,OAAO,GAAG,yCAAyC,CAAC;YAC3D,MAAM,CAAC,KAAK,GAAG,YAAY,OAAO,kBAAkB,CAAC;SACtD;QACD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;YAC3B,cAAc,CAAC,OAAO,GAAG,yCAAyC,CAAC;YACnE,cAAc,CAAC,KAAK,GAAG,YAAY,OAAO,wBAAwB,CAAC;SACpE;QACD,IAAI,GAAG,KAAK,IAAI,OAAO,SAAS,EAAE;YAChC,OAAO,UAAU,EAAE,CAAC;SACrB;QACD,IAAI,GAAG,KAAK,IAAI,OAAO,kBAAkB,EAAE;YACzC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;SACzB;QACD,IAAI,GAAG,KAAK,IAAI,OAAO,EAAE,EAAE;YACzB,OAAO,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;SAChE;KACF;IACD,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC,CAAC"}
|
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
/* eslint-disable import/prefer-default-export */
|
|
2
|
-
import '
|
|
3
|
-
// eslint-disable-next-line import/no-unresolved
|
|
4
|
-
import { initializeApp } from 'firebase-admin/app';
|
|
2
|
+
import '@cloudcommerce/firebase/lib/init';
|
|
5
3
|
// eslint-disable-next-line import/no-unresolved
|
|
6
4
|
import { onRequest } from 'firebase-functions/v2/https';
|
|
7
5
|
import config from '@cloudcommerce/firebase/lib/config';
|
|
8
|
-
import getEnv from '@cloudcommerce/firebase/lib/env';
|
|
9
6
|
import serveModulesApi from './firebase/serve-modules-api.js';
|
|
10
7
|
|
|
11
|
-
initializeApp();
|
|
12
8
|
const { httpsFunctionOptions } = config.get();
|
|
13
9
|
|
|
14
10
|
export const modules = onRequest(httpsFunctionOptions, (req, res) => {
|
|
15
|
-
|
|
16
|
-
serveModulesApi(req, res, apiAuth);
|
|
11
|
+
serveModulesApi(req, res);
|
|
17
12
|
});
|
|
18
13
|
// # sourceMappingURL=firebase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firebase.js","sourceRoot":"","sources":["../src/firebase.ts"],"names":[],"mappings":"AAAA,iDAAiD;AAEjD,OAAO,
|
|
1
|
+
{"version":3,"file":"firebase.js","sourceRoot":"","sources":["../src/firebase.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,eAAe,MAAM,8BAA8B,CAAC;AAE3D,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AAE9C,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC,oBAAoB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IAClE,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC"}
|
|
@@ -19,7 +19,6 @@ const appsCache = {};
|
|
|
19
19
|
const resultsCache = {};
|
|
20
20
|
|
|
21
21
|
async function runModule(
|
|
22
|
-
apiAuth: { authenticationId: string, apiKey: string },
|
|
23
22
|
params: { [key: string]: any },
|
|
24
23
|
res: Response,
|
|
25
24
|
modName: string,
|
|
@@ -65,7 +64,6 @@ async function runModule(
|
|
|
65
64
|
} else {
|
|
66
65
|
try {
|
|
67
66
|
const { data } = await api.get('applications', {
|
|
68
|
-
...apiAuth,
|
|
69
67
|
params: listAppsParams,
|
|
70
68
|
});
|
|
71
69
|
appsList = data.result;
|
|
@@ -187,16 +185,15 @@ export default (
|
|
|
187
185
|
responseSchema: { [key: string]: any },
|
|
188
186
|
req: Request,
|
|
189
187
|
res: Response,
|
|
190
|
-
apiAuth: { authenticationId: string, apiKey: string },
|
|
191
188
|
) => {
|
|
192
189
|
const validate = ajv.compile(schema);
|
|
193
190
|
const responseValidate = ajvAppsResponse.compile(responseSchema);
|
|
194
191
|
return {
|
|
195
192
|
GET() {
|
|
196
|
-
runModule(
|
|
193
|
+
runModule(req.query, res, modName, validate, responseValidate);
|
|
197
194
|
},
|
|
198
195
|
POST() {
|
|
199
|
-
runModule(
|
|
196
|
+
runModule(req.body, res, modName, validate, responseValidate, req.query.app_id);
|
|
200
197
|
},
|
|
201
198
|
};
|
|
202
199
|
};
|