cloudcommerce 0.0.96 → 0.0.98
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/package.json +3 -3
- package/packages/api/package.json +1 -1
- package/packages/apps/correios/lib-mjs/correios-ws.mjs +2 -1
- package/packages/apps/correios/package.json +1 -1
- package/packages/apps/custom-shipping/package.json +1 -1
- package/packages/apps/discounts/package.json +1 -1
- package/packages/apps/frenet/package.json +1 -1
- package/packages/apps/tiny-erp/lib/event-to-tiny.js +94 -94
- package/packages/apps/tiny-erp/lib/index.js +1 -1
- package/packages/apps/tiny-erp/lib/integration/after-tiny-queue.js +74 -71
- package/packages/apps/tiny-erp/lib/integration/export-order-to-tiny.js +73 -70
- package/packages/apps/tiny-erp/lib/integration/export-product-to-tiny.js +53 -49
- package/packages/apps/tiny-erp/lib/integration/helpers/format-tiny-date.js +3 -3
- package/packages/apps/tiny-erp/lib/integration/import-order-from-tiny.js +75 -76
- package/packages/apps/tiny-erp/lib/integration/import-product-from-tiny.js +140 -137
- package/packages/apps/tiny-erp/lib/integration/parsers/order-from-tiny.js +39 -40
- package/packages/apps/tiny-erp/lib/integration/parsers/order-to-tiny.js +178 -173
- package/packages/apps/tiny-erp/lib/integration/parsers/product-from-tiny.js +171 -173
- package/packages/apps/tiny-erp/lib/integration/parsers/product-to-tiny.js +127 -123
- package/packages/apps/tiny-erp/lib/integration/parsers/status-from-tiny.js +32 -32
- package/packages/apps/tiny-erp/lib/integration/parsers/status-to-tiny.js +37 -37
- package/packages/apps/tiny-erp/lib/integration/post-tiny-erp.js +43 -42
- package/packages/apps/tiny-erp/lib/tiny-erp.js +6 -8
- package/packages/apps/tiny-erp/lib/tiny-webhook.js +73 -76
- package/packages/apps/tiny-erp/package.json +2 -2
- package/packages/cli/package.json +1 -1
- package/packages/config/package.json +1 -1
- package/packages/events/package.json +2 -2
- package/packages/firebase/package.json +3 -3
- package/packages/modules/lib/firebase/ajv.js +19 -24
- package/packages/modules/lib/firebase/call-app-module.js +116 -110
- package/packages/modules/lib/firebase/checkout.js +151 -152
- package/packages/modules/lib/firebase/functions-checkout/fix-items.js +194 -187
- package/packages/modules/lib/firebase/functions-checkout/get-custumerId.js +25 -26
- package/packages/modules/lib/firebase/functions-checkout/handle-order-transaction.js +110 -109
- package/packages/modules/lib/firebase/functions-checkout/new-order.js +177 -177
- package/packages/modules/lib/firebase/functions-checkout/request-to-module.js +59 -59
- package/packages/modules/lib/firebase/functions-checkout/utils.js +195 -197
- package/packages/modules/lib/firebase/handle-module.js +144 -146
- package/packages/modules/lib/firebase/proxy-apps.js +2 -1
- package/packages/modules/lib/firebase/serve-modules-api.js +52 -53
- package/packages/modules/lib/firebase.js +4 -6
- package/packages/modules/lib/index.js +12 -15
- package/packages/modules/package.json +2 -2
- package/packages/passport/package.json +2 -2
- package/packages/ssr/package.json +2 -2
- package/packages/storefront/.eslintrc.cjs +1 -0
- package/packages/storefront/astro.config.mjs +11 -1
- package/packages/storefront/dist/client/LoginOffcanvas.daf3f717.js +1 -0
- package/packages/storefront/dist/client/assets/_...522e6bf2.css +4 -0
- package/packages/storefront/dist/client/assets/{_...ee104f19.css → _...a48b75c7.css} +1 -1
- package/packages/storefront/dist/client/chunks/LoginForm.d9251274.js +1066 -0
- package/packages/storefront/dist/client/chunks/LoginOffcanvas.07fe6492.js +1 -0
- package/packages/storefront/dist/client/{hoisted.46e058d2.js → chunks/index.esm.84a649c7.js} +77 -17
- package/packages/storefront/dist/client/chunks/preload-helper.f15ab524.js +1 -0
- package/packages/storefront/dist/client/chunks/runtime-dom.esm-bundler.738639ee.js +1 -0
- package/packages/storefront/dist/client/client.b552d86a.js +1 -0
- package/packages/storefront/dist/client/hoisted.054c36ac.js +1 -0
- package/packages/storefront/dist/client/manifest.webmanifest +1 -1
- package/packages/storefront/dist/client/sw.js +1 -1
- package/packages/storefront/dist/server/entry.mjs +370 -180
- package/packages/storefront/dist/server/manifest.webmanifest +1 -1
- package/packages/storefront/package.json +6 -5
- package/packages/storefront/src/assets/pico.css +0 -1
- package/packages/storefront/src/env.d.ts +1 -1
- package/packages/storefront/src/lib/components/AOffcanvas.vue +98 -0
- package/packages/storefront/src/lib/components/LoginForm.vue +54 -0
- package/packages/storefront/src/lib/components/LoginOffcanvas.vue +41 -0
- package/packages/storefront/src/lib/components/TheHeader.vue +37 -3
- package/packages/storefront/src/lib/components/TopBar.vue +13 -21
- package/packages/storefront/src/lib/layouts/BaseBody.astro +41 -38
- package/packages/storefront/src/lib/layouts/BaseHead.astro +0 -5
- package/packages/storefront/src/lib/layouts/BaseStateJson.astro +12 -11
- package/packages/storefront/src/lib/layouts/PagesHeader.astro +29 -20
- package/packages/storefront/src/lib/scripts/firebase-app.ts +16 -0
- package/packages/storefront/src/lib/{helpers → ssr}/image.ts +1 -1
- package/packages/storefront/src/pages/app/account.astro +0 -0
- package/packages/storefront/storefront.config.mjs +1 -1
- package/packages/storefront/tsconfig.json +4 -1
- package/packages/types/package.json +1 -1
- package/packages/storefront/dist/client/assets/_...73e01db2.css +0 -4
- package/packages/storefront/dist/client/client.80baece3.js +0 -1
- package/packages/storefront/src/lib/components/LoginModal.vue +0 -82
|
@@ -1,34 +1,34 @@
|
|
|
1
1
|
export default (situacao) => {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
2
|
+
let financialStatus;
|
|
3
|
+
let fulfillmentStatus;
|
|
4
|
+
switch (situacao) {
|
|
5
|
+
case 'aprovado':
|
|
6
|
+
financialStatus = 'paid';
|
|
7
|
+
break;
|
|
8
|
+
case 'preparando_envio':
|
|
9
|
+
case 'preparando envio':
|
|
10
|
+
fulfillmentStatus = 'in_separation';
|
|
11
|
+
break;
|
|
12
|
+
case 'faturado':
|
|
13
|
+
case 'faturado (atendido)':
|
|
14
|
+
case 'atendido':
|
|
15
|
+
fulfillmentStatus = 'invoice_issued';
|
|
16
|
+
break;
|
|
17
|
+
case 'pronto_envio':
|
|
18
|
+
case 'pronto para envio':
|
|
19
|
+
fulfillmentStatus = 'ready_for_shipping';
|
|
20
|
+
break;
|
|
21
|
+
case 'enviado':
|
|
22
|
+
fulfillmentStatus = 'shipped';
|
|
23
|
+
break;
|
|
24
|
+
case 'entregue':
|
|
25
|
+
fulfillmentStatus = 'delivered';
|
|
26
|
+
break;
|
|
27
|
+
case 'cancelado':
|
|
28
|
+
financialStatus = 'voided';
|
|
29
|
+
break;
|
|
30
|
+
default:
|
|
31
|
+
}
|
|
32
|
+
return { financialStatus, fulfillmentStatus };
|
|
33
33
|
};
|
|
34
|
-
|
|
34
|
+
//# sourceMappingURL=status-from-tiny.js.map
|
|
@@ -1,39 +1,39 @@
|
|
|
1
1
|
export default (order) => {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
2
|
+
const financialStatus = order.financial_status && order.financial_status.current;
|
|
3
|
+
switch (financialStatus) {
|
|
4
|
+
case 'pending':
|
|
5
|
+
case 'under_analysis':
|
|
6
|
+
case 'unknown':
|
|
7
|
+
case 'authorized':
|
|
8
|
+
case 'partially_paid':
|
|
9
|
+
return 'aberto';
|
|
10
|
+
case 'voided':
|
|
11
|
+
case 'refunded':
|
|
12
|
+
case 'in_dispute':
|
|
13
|
+
case 'unauthorized':
|
|
14
|
+
return 'cancelado';
|
|
15
|
+
default:
|
|
16
|
+
}
|
|
17
|
+
switch (order.fulfillment_status && order.fulfillment_status.current) {
|
|
18
|
+
case 'in_production':
|
|
19
|
+
case 'in_separation':
|
|
20
|
+
return 'preparando_envio';
|
|
21
|
+
case 'invoice_issued':
|
|
22
|
+
return 'faturado';
|
|
23
|
+
case 'ready_for_shipping':
|
|
24
|
+
return 'pronto_envio';
|
|
25
|
+
case 'shipped':
|
|
26
|
+
case 'partially_shipped':
|
|
27
|
+
return 'enviado';
|
|
28
|
+
case 'delivered':
|
|
29
|
+
return 'entregue';
|
|
30
|
+
case 'returned':
|
|
31
|
+
return 'cancelado';
|
|
32
|
+
default:
|
|
33
|
+
}
|
|
34
|
+
if (financialStatus === 'paid') {
|
|
35
|
+
return 'aprovado';
|
|
36
|
+
}
|
|
37
|
+
return 'aberto';
|
|
38
38
|
};
|
|
39
|
-
|
|
39
|
+
//# sourceMappingURL=status-to-tiny.js.map
|
|
@@ -1,47 +1,48 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
|
-
|
|
3
2
|
export default (url, body, token = process.env.TINY_ERP_TOKEN, options = {}) => {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
3
|
+
// https://www.tiny.com.br/ajuda/api/api2
|
|
4
|
+
let data = `token=${token}&formato=JSON`;
|
|
5
|
+
if (body) {
|
|
6
|
+
Object.keys(body).forEach((field) => {
|
|
7
|
+
if (body[field]) {
|
|
8
|
+
switch (typeof body[field]) {
|
|
9
|
+
case 'object':
|
|
10
|
+
data += `&${field}=${JSON.stringify(body[field])}`;
|
|
11
|
+
break;
|
|
12
|
+
case 'string':
|
|
13
|
+
case 'number':
|
|
14
|
+
data += `&${field}=${body[field]}`;
|
|
15
|
+
break;
|
|
16
|
+
default:
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
return axios.post(url, data, {
|
|
22
|
+
baseURL: 'https://api.tiny.com.br/api2/',
|
|
23
|
+
timeout: 30000,
|
|
24
|
+
...options,
|
|
25
|
+
})
|
|
26
|
+
.then((response) => {
|
|
27
|
+
const { retorno } = response.data;
|
|
28
|
+
if (retorno.status === 'Erro') {
|
|
29
|
+
const err = new Error('Tiny error response');
|
|
30
|
+
const tinyErrorCode = parseInt(retorno.codigo_erro, 10);
|
|
31
|
+
if (tinyErrorCode <= 2) {
|
|
32
|
+
response.status = 401;
|
|
33
|
+
}
|
|
34
|
+
else if (tinyErrorCode === 6) {
|
|
35
|
+
response.status = 503;
|
|
36
|
+
}
|
|
37
|
+
else if (tinyErrorCode === 20) {
|
|
38
|
+
response.status = 404;
|
|
39
|
+
}
|
|
40
|
+
err.response = response;
|
|
41
|
+
err.config = response.config;
|
|
42
|
+
err.request = response.request;
|
|
43
|
+
throw err;
|
|
18
44
|
}
|
|
19
|
-
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
return axios.post(url, data, {
|
|
23
|
-
baseURL: 'https://api.tiny.com.br/api2/',
|
|
24
|
-
timeout: 30000,
|
|
25
|
-
...options,
|
|
26
|
-
})
|
|
27
|
-
.then((response) => {
|
|
28
|
-
const { retorno } = response.data;
|
|
29
|
-
if (retorno.status === 'Erro') {
|
|
30
|
-
const err = new Error('Tiny error response');
|
|
31
|
-
const tinyErrorCode = parseInt(retorno.codigo_erro, 10);
|
|
32
|
-
if (tinyErrorCode <= 2) {
|
|
33
|
-
response.status = 401;
|
|
34
|
-
} else if (tinyErrorCode === 6) {
|
|
35
|
-
response.status = 503;
|
|
36
|
-
} else if (tinyErrorCode === 20) {
|
|
37
|
-
response.status = 404;
|
|
38
|
-
}
|
|
39
|
-
err.response = response;
|
|
40
|
-
err.config = response.config;
|
|
41
|
-
err.request = response.request;
|
|
42
|
-
throw err;
|
|
43
|
-
}
|
|
44
|
-
return retorno;
|
|
45
|
+
return retorno;
|
|
45
46
|
});
|
|
46
47
|
};
|
|
47
|
-
|
|
48
|
+
//# sourceMappingURL=post-tiny-erp.js.map
|
|
@@ -3,16 +3,14 @@ import '@cloudcommerce/firebase/lib/init';
|
|
|
3
3
|
// eslint-disable-next-line import/no-unresolved
|
|
4
4
|
import { onRequest } from 'firebase-functions/v2/https';
|
|
5
5
|
import config from '@cloudcommerce/firebase/lib/config';
|
|
6
|
-
import { createAppEventsFunction } from '@cloudcommerce/firebase/lib/helpers/pubsub';
|
|
6
|
+
import { createAppEventsFunction, } from '@cloudcommerce/firebase/lib/helpers/pubsub';
|
|
7
7
|
import handleApiEvent from './event-to-tiny.js';
|
|
8
8
|
import handleTinyWebhook from './tiny-webhook.js';
|
|
9
|
-
|
|
10
9
|
const { httpsFunctionOptions } = config.get();
|
|
11
|
-
|
|
12
10
|
export const tinyerp = {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
onStoreEvent: createAppEventsFunction('tinyErp', handleApiEvent),
|
|
12
|
+
webhook: onRequest(httpsFunctionOptions, (req, res) => {
|
|
13
|
+
handleTinyWebhook(req, res);
|
|
14
|
+
}),
|
|
17
15
|
};
|
|
18
|
-
|
|
16
|
+
//# sourceMappingURL=tiny-erp.js.map
|
|
@@ -3,90 +3,87 @@ import api from '@cloudcommerce/api';
|
|
|
3
3
|
import config from '@cloudcommerce/firebase/lib/config';
|
|
4
4
|
import importProduct from './integration/import-product-from-tiny.js';
|
|
5
5
|
import importOrder from './integration/import-order-from-tiny.js';
|
|
6
|
-
|
|
7
6
|
let appData = {};
|
|
8
7
|
let application;
|
|
9
|
-
|
|
10
8
|
export default async (req, res) => {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
const tinyToken = req.query.token;
|
|
10
|
+
if (typeof tinyToken === 'string' && tinyToken && req.body) {
|
|
11
|
+
const { dados, tipo } = req.body;
|
|
12
|
+
if (dados) {
|
|
13
|
+
/*
|
|
16
14
|
TODO: Check Tiny server IPs
|
|
17
15
|
const clientIp = req.get('x-forwarded-for') || req.connection.remoteAddress
|
|
18
16
|
*/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
17
|
+
const { TINY_ERP_TOKEN } = process.env;
|
|
18
|
+
if (!TINY_ERP_TOKEN || TINY_ERP_TOKEN !== tinyToken) {
|
|
19
|
+
const { apps: { tinyErp: { appId } } } = config.get();
|
|
20
|
+
const applicationId = req.query._id;
|
|
21
|
+
const appEndpoint = applicationId && typeof applicationId === 'string'
|
|
22
|
+
? `applications/${applicationId}`
|
|
23
|
+
: `applications/app_id:${appId}`;
|
|
24
|
+
application = (await api.get(appEndpoint)).data;
|
|
25
|
+
appData = {
|
|
26
|
+
...application.data,
|
|
27
|
+
...application.hidden_data,
|
|
28
|
+
};
|
|
29
|
+
if (appData.tiny_api_token !== tinyToken) {
|
|
30
|
+
return res.sendStatus(401);
|
|
31
|
+
}
|
|
32
|
+
process.env.TINY_ERP_TOKEN = tinyToken;
|
|
33
|
+
}
|
|
34
|
+
if (dados.idVendaTiny) {
|
|
35
|
+
const orderNumber = `id:${dados.idVendaTiny}`;
|
|
36
|
+
const queueEntry = {
|
|
37
|
+
nextId: orderNumber,
|
|
38
|
+
isNotQueued: true,
|
|
39
|
+
};
|
|
40
|
+
await importOrder({}, queueEntry);
|
|
41
|
+
}
|
|
42
|
+
else if ((tipo === 'produto' || tipo === 'estoque')
|
|
44
43
|
&& (dados.id || dados.idProduto)
|
|
45
44
|
&& (dados.codigo || dados.sku)) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
45
|
+
const nextId = String(dados.skuMapeamento || dados.sku || dados.codigo);
|
|
46
|
+
const tinyStockUpdate = {
|
|
47
|
+
ref: `${nextId}`,
|
|
48
|
+
tipo,
|
|
49
|
+
produto: {
|
|
50
|
+
id: dados.idProduto,
|
|
51
|
+
codigo: dados.sku,
|
|
52
|
+
...dados,
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
logger.info(`> Tiny webhook: ${nextId} => ${tinyStockUpdate.produto.saldo}`);
|
|
56
|
+
const queueEntry = {
|
|
57
|
+
nextId,
|
|
58
|
+
tinyStockUpdate,
|
|
59
|
+
isNotQueued: true,
|
|
60
|
+
app: application,
|
|
61
|
+
};
|
|
62
|
+
await importProduct({}, queueEntry, appData, false, true);
|
|
63
|
+
}
|
|
64
|
+
if (tipo === 'produto') {
|
|
65
|
+
const mapeamentos = [];
|
|
66
|
+
const parseTinyItem = (tinyItem) => {
|
|
67
|
+
if (tinyItem) {
|
|
68
|
+
const { idMapeamento, id, codigo, sku, } = tinyItem;
|
|
69
|
+
mapeamentos.push({
|
|
70
|
+
idMapeamento: idMapeamento || id,
|
|
71
|
+
skuMapeamento: codigo || sku,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
parseTinyItem(dados);
|
|
76
|
+
if (Array.isArray(dados.variacoes)) {
|
|
77
|
+
dados.variacoes.forEach((variacao) => {
|
|
78
|
+
parseTinyItem(variacao.id ? variacao : variacao.variacao);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
return res.status(200).send(mapeamentos);
|
|
82
|
+
}
|
|
83
|
+
return res.sendStatus(200);
|
|
83
84
|
}
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
return res.sendStatus(200);
|
|
85
|
+
logger.warn('< Invalid Tiny Webhook body', req.body);
|
|
87
86
|
}
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
return res.sendStatus(403);
|
|
87
|
+
return res.sendStatus(403);
|
|
91
88
|
};
|
|
92
|
-
|
|
89
|
+
//# sourceMappingURL=tiny-webhook.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudcommerce/app-tiny-erp",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.98",
|
|
5
5
|
"description": "E-Com Plus Cloud Commerce app for Tiny ERP",
|
|
6
6
|
"main": "lib/tiny-erp.js",
|
|
7
7
|
"repository": {
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"@ecomplus/utils": "^1.4.1",
|
|
25
25
|
"axios": "^0.27.2",
|
|
26
26
|
"firebase-admin": "^11.0.1",
|
|
27
|
-
"firebase-functions": "^3.
|
|
27
|
+
"firebase-functions": "^3.24.0",
|
|
28
28
|
"form-data": "^4.0.0"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudcommerce/events",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.98",
|
|
5
5
|
"description": "E-Com Plus Cloud Commerce app events",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"exports": {
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"@cloudcommerce/app-tiny-erp": "workspace:*",
|
|
28
28
|
"@cloudcommerce/firebase": "workspace:*",
|
|
29
29
|
"firebase-admin": "^11.0.1",
|
|
30
|
-
"firebase-functions": "^3.
|
|
30
|
+
"firebase-functions": "^3.24.0",
|
|
31
31
|
"source-map-support": "^0.5.21"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudcommerce/firebase",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.98",
|
|
5
5
|
"description": "E-Com Plus Cloud Commerce on Firebase",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"types": "lib/index.d.ts",
|
|
@@ -31,9 +31,9 @@
|
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@cloudcommerce/api": "workspace:*",
|
|
33
33
|
"@cloudcommerce/config": "workspace:*",
|
|
34
|
-
"@google-cloud/pubsub": "^3.
|
|
34
|
+
"@google-cloud/pubsub": "^3.2.0",
|
|
35
35
|
"firebase-admin": "^11.0.1",
|
|
36
|
-
"firebase-functions": "^3.
|
|
36
|
+
"firebase-functions": "^3.24.0",
|
|
37
37
|
"node-fetch": "^3.2.10",
|
|
38
38
|
"source-map-support": "^0.5.21"
|
|
39
39
|
},
|
|
@@ -1,34 +1,29 @@
|
|
|
1
1
|
import Ajv from 'ajv';
|
|
2
2
|
import addFormats from 'ajv-formats';
|
|
3
|
-
|
|
4
3
|
const ajvOptions = {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
coerceTypes: false,
|
|
5
|
+
useDefaults: true,
|
|
6
|
+
removeAdditional: true,
|
|
7
|
+
// Explicitly set `allErrors` to false, when set to true a DoS attack is possible
|
|
8
|
+
allErrors: false,
|
|
9
|
+
multipleOfPrecision: 5,
|
|
10
|
+
allowMatchingProperties: true,
|
|
12
11
|
};
|
|
13
12
|
const ajv = addFormats(new Ajv(ajvOptions));
|
|
14
13
|
const parseAjvErrors = (errors, ajvInstance = ajv) => {
|
|
15
|
-
|
|
14
|
+
return ajvInstance.errorsText(errors, { separator: '\n' });
|
|
16
15
|
};
|
|
17
16
|
const sendRequestError = (res, modName, errors) => {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
17
|
+
res.status(400).send({
|
|
18
|
+
status: 400,
|
|
19
|
+
error_code: 'MOD901',
|
|
20
|
+
message: 'Bad-formatted JSON body (POST) or URL params (GET), details in `user_message`',
|
|
21
|
+
user_message: {
|
|
22
|
+
en_us: ajv.errorsText(errors, { separator: '\n' }),
|
|
23
|
+
},
|
|
24
|
+
more_info: `/${modName}/schema`,
|
|
25
|
+
});
|
|
27
26
|
};
|
|
28
|
-
|
|
29
27
|
export default ajv;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
ajv, ajvOptions, parseAjvErrors, sendRequestError,
|
|
33
|
-
};
|
|
34
|
-
// # sourceMappingURL=ajv.js.map
|
|
28
|
+
export { ajv, ajvOptions, parseAjvErrors, sendRequestError, };
|
|
29
|
+
//# sourceMappingURL=ajv.js.map
|