cloudcommerce 0.0.74 → 0.0.76

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 (113) hide show
  1. package/.vscode/extensions.json +2 -1
  2. package/.vscode/settings.json +9 -0
  3. package/CHANGELOG.md +19 -0
  4. package/package.json +1 -1
  5. package/packages/api/package.json +1 -1
  6. package/packages/apps/correios/package.json +1 -1
  7. package/packages/apps/custom-shipping/package.json +1 -1
  8. package/packages/apps/discounts/package.json +1 -1
  9. package/packages/apps/frenet/package.json +1 -1
  10. package/packages/apps/tiny-erp/lib/event-to-tiny.js +115 -0
  11. package/packages/apps/tiny-erp/lib/event-to-tiny.js.map +1 -0
  12. package/packages/apps/tiny-erp/lib/index.js +2 -0
  13. package/packages/apps/tiny-erp/lib/index.js.map +1 -0
  14. package/packages/apps/tiny-erp/lib/integration/after-tiny-queue.js +79 -0
  15. package/packages/apps/tiny-erp/lib/integration/after-tiny-queue.js.map +1 -0
  16. package/packages/apps/tiny-erp/lib/integration/export-order-to-tiny.js +84 -0
  17. package/packages/apps/tiny-erp/lib/integration/export-order-to-tiny.js.map +1 -0
  18. package/packages/apps/tiny-erp/lib/integration/export-product-to-tiny.js +58 -0
  19. package/packages/apps/tiny-erp/lib/integration/export-product-to-tiny.js.map +1 -0
  20. package/packages/apps/tiny-erp/lib/integration/helpers/format-tiny-date.js +7 -0
  21. package/packages/apps/tiny-erp/lib/integration/helpers/format-tiny-date.js.map +1 -0
  22. package/packages/apps/tiny-erp/lib/integration/import-order-from-tiny.js +92 -0
  23. package/packages/apps/tiny-erp/lib/integration/import-order-from-tiny.js.map +1 -0
  24. package/packages/apps/tiny-erp/lib/integration/import-product-from-tiny.js +158 -0
  25. package/packages/apps/tiny-erp/lib/integration/import-product-from-tiny.js.map +1 -0
  26. package/packages/apps/tiny-erp/lib/integration/parsers/order-from-tiny.js +46 -0
  27. package/packages/apps/tiny-erp/lib/integration/parsers/order-from-tiny.js.map +1 -0
  28. package/packages/apps/tiny-erp/lib/integration/parsers/order-to-tiny.js +193 -0
  29. package/packages/apps/tiny-erp/lib/integration/parsers/order-to-tiny.js.map +1 -0
  30. package/packages/apps/tiny-erp/lib/integration/parsers/product-from-tiny.js +199 -0
  31. package/packages/apps/tiny-erp/lib/integration/parsers/product-from-tiny.js.map +1 -0
  32. package/packages/apps/tiny-erp/lib/integration/parsers/product-to-tiny.js +129 -0
  33. package/packages/apps/tiny-erp/lib/integration/parsers/product-to-tiny.js.map +1 -0
  34. package/packages/apps/tiny-erp/lib/integration/parsers/status-from-tiny.js +34 -0
  35. package/packages/apps/tiny-erp/lib/integration/parsers/status-from-tiny.js.map +1 -0
  36. package/packages/apps/tiny-erp/lib/integration/parsers/status-to-tiny.js +39 -0
  37. package/packages/apps/tiny-erp/lib/integration/parsers/status-to-tiny.js.map +1 -0
  38. package/packages/apps/tiny-erp/lib/integration/post-tiny-erp.js +47 -0
  39. package/packages/apps/tiny-erp/lib/integration/post-tiny-erp.js.map +1 -0
  40. package/packages/apps/tiny-erp/lib/tiny-erp.js +18 -0
  41. package/packages/apps/tiny-erp/lib/tiny-erp.js.map +1 -0
  42. package/packages/apps/tiny-erp/lib/tiny-webhook.js +92 -0
  43. package/packages/apps/tiny-erp/lib/tiny-webhook.js.map +1 -0
  44. package/packages/apps/tiny-erp/package.json +1 -1
  45. package/packages/cli/config/firebase.json +7 -0
  46. package/packages/cli/package.json +1 -1
  47. package/packages/config/package.json +1 -1
  48. package/packages/events/package.json +1 -1
  49. package/packages/firebase/package.json +1 -1
  50. package/packages/modules/lib/firebase/ajv.js +34 -0
  51. package/packages/modules/lib/firebase/ajv.js.map +1 -0
  52. package/packages/modules/lib/firebase/call-app-module.js +135 -0
  53. package/packages/modules/lib/firebase/call-app-module.js.map +1 -0
  54. package/packages/modules/lib/firebase/checkout.js +1 -0
  55. package/packages/modules/lib/firebase/checkout.js.map +1 -0
  56. package/packages/modules/lib/firebase/handle-module.js +169 -0
  57. package/packages/modules/lib/firebase/handle-module.js.map +1 -0
  58. package/packages/modules/lib/firebase/proxy-apps.js +1 -0
  59. package/packages/modules/lib/firebase/proxy-apps.js.map +1 -0
  60. package/packages/modules/lib/firebase/serve-modules-api.js +58 -0
  61. package/packages/modules/lib/firebase/serve-modules-api.js.map +1 -0
  62. package/packages/modules/lib/firebase.js +13 -0
  63. package/packages/modules/lib/firebase.js.map +1 -0
  64. package/packages/modules/lib/index.js +25 -0
  65. package/packages/modules/lib/index.js.map +1 -0
  66. package/packages/modules/package.json +1 -1
  67. package/packages/passport/lib/firebase/handle-passport.js +92 -96
  68. package/packages/passport/lib/firebase/serve-passport-api.js +34 -35
  69. package/packages/passport/lib/firebase.js +7 -5
  70. package/packages/passport/lib/index.js +1 -2
  71. package/packages/passport/package.json +1 -1
  72. package/packages/ssr/lib/firebase/serve-storefront.js +33 -33
  73. package/packages/ssr/lib/firebase.js +4 -2
  74. package/packages/ssr/lib/index.js +2 -1
  75. package/packages/ssr/package.json +1 -1
  76. package/packages/storefront/astro.config.mjs +9 -3
  77. package/packages/storefront/dist/client/assets/_...3d331176.css +1 -0
  78. package/packages/storefront/dist/client/assets/{fallback.9cd2ed3f.css → _...b330a555.css} +1 -1
  79. package/packages/storefront/dist/client/assets/_...c1ec409f.css +4 -0
  80. package/packages/storefront/dist/client/assets/fallback-index.552fd862.css +1 -0
  81. package/packages/storefront/dist/client/assets/{_...27b7eb4d.css → fallback.a3f85892.css} +1 -1
  82. package/packages/storefront/dist/client/assets/{index.c5a9ea80.css → index.73f26ab5.css} +1 -1
  83. package/packages/storefront/dist/client/client.80baece3.js +1 -0
  84. package/packages/storefront/dist/client/hoisted.61a32b69.js +661 -0
  85. package/packages/storefront/dist/server/entry.mjs +326 -161
  86. package/packages/storefront/package.json +8 -3
  87. package/packages/storefront/src/html.d.ts +23 -0
  88. package/packages/storefront/src/lib/components/Card.astro +1 -1
  89. package/packages/storefront/src/lib/components/LoginModal.vue +14 -20
  90. package/packages/storefront/src/lib/layouts/Base.astro +129 -0
  91. package/packages/storefront/src/lib/layouts/Checkout.astro +0 -0
  92. package/packages/storefront/src/lib/layouts/Pages.astro +30 -0
  93. package/packages/storefront/src/lib/layouts/meta/Head.astro +62 -1
  94. package/packages/storefront/src/lib/layouts/meta/Json.astro +49 -10
  95. package/packages/storefront/src/lib/main/Home.astro +84 -0
  96. package/packages/storefront/src/lib/main/Wildcard.astro +0 -0
  97. package/packages/storefront/src/lib/ssr-context.ts +2 -1
  98. package/packages/storefront/src/lib/views/[...slug].astro +3 -3
  99. package/packages/storefront/src/lib/views/fallback.astro +5 -3
  100. package/packages/storefront/src/lib/views/index.astro +4 -3
  101. package/packages/storefront/src/pages/index.astro +7 -2
  102. package/packages/storefront/tailwind.config.ts +0 -0
  103. package/packages/storefront/uno.config.ts +98 -0
  104. package/packages/types/package.json +1 -1
  105. package/packages/storefront/dist/client/LoginModal.d6b935cf.js +0 -1
  106. package/packages/storefront/dist/client/assets/_...b3f65c5c.css +0 -1
  107. package/packages/storefront/dist/client/assets/fallback-index.90217cf0.css +0 -1
  108. package/packages/storefront/dist/client/chunks/index.esm.69f70489.js +0 -1726
  109. package/packages/storefront/dist/client/chunks/index.esm2017.1194d1a1.js +0 -457
  110. package/packages/storefront/dist/client/chunks/runtime-core.esm-bundler.a7337834.js +0 -1
  111. package/packages/storefront/dist/client/client.80b904f3.js +0 -1
  112. package/packages/storefront/dist/client/hoisted.24787260.js +0 -376
  113. package/packages/storefront/src/lib/layouts/Layout.astro +0 -84
@@ -0,0 +1,169 @@
1
+ import { logger } from 'firebase-functions';
2
+ import Ajv from 'ajv';
3
+ import addFormats from 'ajv-formats';
4
+ import api from '@cloudcommerce/api';
5
+ import config from '@cloudcommerce/firebase/lib/config';
6
+ import {
7
+ ajv, ajvOptions, parseAjvErrors, sendRequestError,
8
+ } from './ajv.js';
9
+ import callAppModule from './call-app-module.js';
10
+
11
+ const ajvAppsResponse = addFormats(new Ajv({ ...ajvOptions, allErrors: true }));
12
+ // Cache apps list and no params modules results
13
+ const appsCache = {};
14
+ const resultsCache = {};
15
+ async function runModule(params, res, modName, validate, responseValidate, appId) {
16
+ const respond = (result) => res.send({
17
+ result,
18
+ meta: params,
19
+ });
20
+ const { storeId } = config.get();
21
+ const isEmptyParams = (!params || !Object.keys(params).length);
22
+ if (!validate(params)) {
23
+ return sendRequestError(res, modName, validate.errors);
24
+ }
25
+ let canCache = true;
26
+ const cacheKey = `${storeId}:${modName}`;
27
+ const listAppsParams = {
28
+ state: 'active',
29
+ [`modules.${modName}.enabled`]: true,
30
+ fields: `_id,app_id,version,data,hidden_data,modules.${modName}`,
31
+ };
32
+ if (appId
33
+ && (typeof appId === 'number' || (typeof appId === 'string' && /^\d+$/.test(appId)))) {
34
+ if (typeof appId === 'string') {
35
+ appId = parseInt(appId, 10);
36
+ }
37
+ canCache = false;
38
+ listAppsParams.app_id = appId;
39
+ listAppsParams.limit = 1;
40
+ }
41
+ let canCacheResults = false;
42
+ if (canCache && isEmptyParams) {
43
+ if (resultsCache[cacheKey]) {
44
+ return respond(resultsCache[cacheKey]);
45
+ }
46
+ canCacheResults = true;
47
+ }
48
+ let appsList;
49
+ if (canCache && appsCache[cacheKey]) {
50
+ appsList = appsCache[cacheKey];
51
+ } else {
52
+ try {
53
+ const { data } = await api.get('applications', {
54
+ params: listAppsParams,
55
+ });
56
+ appsList = data.result;
57
+ } catch (err) {
58
+ logger.error(err);
59
+ const error = err;
60
+ return res.status(500).send({
61
+ status: 500,
62
+ error_code: 'MOD801',
63
+ message: `Store API returned status ${error.statusCode} trying to list apps`,
64
+ more_info: error.data?.user_message?.en_us,
65
+ });
66
+ }
67
+ }
68
+ if (Array.isArray(appsList)) {
69
+ if (!appsList.length) {
70
+ return respond([]);
71
+ }
72
+ if (canCache && !appsCache[cacheKey]) {
73
+ appsCache[cacheKey] = appsList;
74
+ setTimeout(() => {
75
+ appsCache[cacheKey] = null;
76
+ delete appsCache[cacheKey];
77
+ }, appsList.length ? 60000 : 3000);
78
+ }
79
+ const moduleReqs = [];
80
+ for (let i = 0; i < appsList.length; i++) {
81
+ const application = appsList[i];
82
+ if (!application.hidden_data) {
83
+ application.hidden_data = {};
84
+ }
85
+ if (!application.data) {
86
+ application.data = {};
87
+ }
88
+ const appModuleUrl = application.modules[modName].endpoint;
89
+ // Handle request with big timeout if proxying one app (by ID) only
90
+ const isBigTimeout = !!(appId);
91
+ const appModuleBody = {
92
+ storeId,
93
+ module: modName,
94
+ params,
95
+ application,
96
+ };
97
+ const reqStartTime = Date.now();
98
+ moduleReqs.push(new Promise((resolve) => {
99
+ let response;
100
+ let isError = false;
101
+ let errorMessage = null;
102
+ callAppModule(appId, modName, appModuleUrl, appModuleBody, isBigTimeout)
103
+ .then((appResponse) => {
104
+ response = appResponse;
105
+ if (appResponse?.error) {
106
+ isError = true;
107
+ errorMessage = appResponse.message || String(appResponse.error);
108
+ }
109
+ })
110
+ .catch((err) => {
111
+ response = null;
112
+ isError = true;
113
+ errorMessage = err.message;
114
+ })
115
+ .finally(() => {
116
+ const result = {
117
+ _id: application._id,
118
+ app_id: application.app_id,
119
+ took: Date.now() - reqStartTime,
120
+ version: application.version,
121
+ validated: false,
122
+ response_errors: null,
123
+ error: isError,
124
+ error_message: errorMessage,
125
+ response,
126
+ };
127
+ if (!isError && typeof response === 'object' && response !== null) {
128
+ result.validated = responseValidate(response);
129
+ if (!result.validated) {
130
+ // @ts-ignore
131
+ result.response_errors = parseAjvErrors(responseValidate.errors, ajvAppsResponse);
132
+ }
133
+ }
134
+ resolve(result);
135
+ });
136
+ }));
137
+ }
138
+ return Promise.all(moduleReqs).then((results) => {
139
+ if (!results.find(({ response }) => response)) {
140
+ res.status(409);
141
+ canCacheResults = false;
142
+ }
143
+ if (canCacheResults && !resultsCache[cacheKey]) {
144
+ resultsCache[cacheKey] = results;
145
+ setTimeout(() => {
146
+ resultsCache[cacheKey] = null;
147
+ delete resultsCache[cacheKey];
148
+ }, 60000);
149
+ }
150
+ return respond(results);
151
+ });
152
+ }
153
+ // Shoud never happen
154
+ return res.sendStatus(501);
155
+ }
156
+
157
+ export default (modName, schema, responseSchema, req, res) => {
158
+ const validate = ajv.compile(schema);
159
+ const responseValidate = ajvAppsResponse.compile(responseSchema);
160
+ return {
161
+ GET() {
162
+ runModule(req.query, res, modName, validate, responseValidate);
163
+ },
164
+ POST() {
165
+ runModule(req.body, res, modName, validate, responseValidate, req.query.app_id);
166
+ },
167
+ };
168
+ };
169
+ // # sourceMappingURL=handle-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle-module.js","sourceRoot":"","sources":["../../src/firebase/handle-module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ // # sourceMappingURL=proxy-apps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-apps.js","sourceRoot":"","sources":["../../src/firebase/proxy-apps.ts"],"names":[],"mappings":""}
@@ -0,0 +1,58 @@
1
+ import { schemas } from '../index.js';
2
+ import handleModule from './handle-module.js';
3
+
4
+ export default (req, res) => {
5
+ const { method } = req;
6
+ if (method !== 'POST' && method !== 'GET') {
7
+ return res.sendStatus(405);
8
+ }
9
+ if (method === 'POST'
10
+ && (!req.body || typeof req.body !== 'object' || Array.isArray(req.body))) {
11
+ return res.sendStatus(400);
12
+ }
13
+ let { url } = req;
14
+ if (url.endsWith('.json')) {
15
+ url = url.slice(0, -5);
16
+ }
17
+ [url] = url.split('?');
18
+ const modName = url.split('/')[1];
19
+ const sendSchema = (isResponseSchema = false) => {
20
+ return res.status(200)
21
+ .setHeader('Cache-Control', 'public, max-age=3600')
22
+ .send(schemas[modName][isResponseSchema ? 'response' : 'params']);
23
+ };
24
+ if (modName === '@checkout') {
25
+ if (url === '/@checkout') {
26
+ return res.status(200).send({
27
+ status: 200,
28
+ message: 'CHECKOUT',
29
+ });
30
+ }
31
+ if (url === '/@checkout/schema') {
32
+ return sendSchema();
33
+ }
34
+ return res.sendStatus(404);
35
+ }
36
+ if (schemas[modName]) {
37
+ const { params: schema, response: responseSchema } = schemas[modName];
38
+ if (!schema.$schema) {
39
+ schema.$schema = 'http://json-schema.org/draft-07/schema#';
40
+ schema.title = `Module \`${modName}\`: Params model`;
41
+ }
42
+ if (!responseSchema.$schema) {
43
+ responseSchema.$schema = 'http://json-schema.org/draft-07/schema#';
44
+ responseSchema.title = `Module \`${modName}\`: App response model`;
45
+ }
46
+ if (url === `/${modName}/schema`) {
47
+ return sendSchema();
48
+ }
49
+ if (url === `/${modName}/response_schema`) {
50
+ return sendSchema(true);
51
+ }
52
+ if (url === `/${modName}`) {
53
+ return handleModule(modName, schema, responseSchema, req, res)[method]();
54
+ }
55
+ }
56
+ return res.sendStatus(404);
57
+ };
58
+ // # sourceMappingURL=serve-modules-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve-modules-api.js","sourceRoot":"","sources":["../../src/firebase/serve-modules-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /* eslint-disable import/prefer-default-export */
2
+ import '@cloudcommerce/firebase/lib/init';
3
+ // eslint-disable-next-line import/no-unresolved
4
+ import { onRequest } from 'firebase-functions/v2/https';
5
+ import config from '@cloudcommerce/firebase/lib/config';
6
+ import serveModulesApi from './firebase/serve-modules-api.js';
7
+
8
+ const { httpsFunctionOptions } = config.get();
9
+
10
+ export const modules = onRequest(httpsFunctionOptions, (req, res) => {
11
+ serveModulesApi(req, res);
12
+ });
13
+ // # sourceMappingURL=firebase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firebase.js","sourceRoot":"","sources":["../src/firebase.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,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"}
@@ -0,0 +1,25 @@
1
+ import * as calculateShipping from '../schemas/calculate_shipping.cjs';
2
+ import * as applyDiscount from '../schemas/apply_discount.cjs';
3
+ import * as listPayments from '../schemas/list_payments.cjs';
4
+ import * as createTransaction from '../schemas/create_transaction.cjs';
5
+ import * as checkout from '../schemas/@checkout.cjs';
6
+
7
+ const schemas = {
8
+ calculate_shipping: calculateShipping,
9
+ apply_discount: applyDiscount,
10
+ list_payments: listPayments,
11
+ create_transaction: createTransaction,
12
+ '@checkout': checkout,
13
+ };
14
+
15
+ export default {
16
+ calculateShipping,
17
+ applyDiscount,
18
+ listPayments,
19
+ createTransaction,
20
+ checkout,
21
+ schemas,
22
+ };
23
+
24
+ export { schemas };
25
+ // # sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,iBAAiB,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,aAAa,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,YAAY,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,iBAAiB,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,QAAQ,MAAM,0BAA0B,CAAC;AAErD,MAAM,OAAO,GAAG;IACd,kBAAkB,EAAE,iBAAiB;IACrC,cAAc,EAAE,aAAa;IAC7B,aAAa,EAAE,YAAY;IAC3B,kBAAkB,EAAE,iBAAiB;IACrC,WAAW,EAAE,QAAQ;CACtB,CAAC;AAEF,eAAe;IACb,iBAAiB;IACjB,aAAa;IACb,YAAY;IACZ,iBAAiB;IACjB,QAAQ;IACR,OAAO;CACR,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/modules",
3
3
  "type": "module",
4
- "version": "0.0.74",
4
+ "version": "0.0.76",
5
5
  "description": "E-Com Plus Cloud Commerce modules API",
6
6
  "main": "lib/index.cjs",
7
7
  "exports": {
@@ -1,114 +1,110 @@
1
1
  import { logger } from 'firebase-functions';
2
2
  import api from '@cloudcommerce/api';
3
3
  import getEnv from '@cloudcommerce/firebase/lib/env';
4
+
4
5
  const findCustomerByEmail = async (email) => {
5
- try {
6
- const { data } = await api.get(`customers?main_email=${email}`);
7
- if (data.result.length) {
8
- return data.result[0];
9
- }
10
- return null;
11
- }
12
- catch (e) {
13
- logger.error(e);
14
- return null;
6
+ try {
7
+ const { data } = await api.get(`customers?main_email=${email}`);
8
+ if (data.result.length) {
9
+ return data.result[0];
15
10
  }
11
+ return null;
12
+ } catch (e) {
13
+ logger.error(e);
14
+ return null;
15
+ }
16
16
  };
17
17
  const checkFirebaseAuth = async (auth, authToken) => {
18
- if (authToken && !Array.isArray(authToken)) {
19
- try {
20
- const customer = await auth.verifyIdToken(authToken);
21
- return customer;
22
- }
23
- catch (e) {
24
- return null;
25
- }
26
- }
27
- else {
28
- return null;
18
+ if (authToken && !Array.isArray(authToken)) {
19
+ try {
20
+ const customer = await auth.verifyIdToken(authToken);
21
+ return customer;
22
+ } catch (e) {
23
+ return null;
29
24
  }
25
+ } else {
26
+ return null;
27
+ }
30
28
  };
31
29
  const createCustomer = async (customer) => {
32
- try {
33
- const { data } = await api.post('customers', customer);
34
- return data._id;
35
- }
36
- catch (e) {
37
- logger.error(e);
38
- return null;
39
- }
30
+ try {
31
+ const { data } = await api.post('customers', customer);
32
+ return data._id;
33
+ } catch (e) {
34
+ logger.error(e);
35
+ return null;
36
+ }
40
37
  };
41
38
  const generateAccessToken = async (firestore, customerId) => {
42
- const { apiAuth } = getEnv();
43
- const docRef = firestore.doc(`customerTokens/${customerId}`);
44
- const doc = await docRef.get();
45
- const expires = doc.data()?.expires;
46
- if (expires && new Date(expires).getTime() - Date.now() >= 2 * 60 * 1000) {
47
- return doc.data();
48
- }
49
- try {
50
- const { data } = await api({
51
- endpoint: 'authenticate',
52
- method: 'post',
53
- body: {
54
- _id: apiAuth.authenticationId,
55
- api_key: apiAuth.apiKey,
56
- customer_id: customerId,
57
- },
58
- });
59
- const accessToken = {
60
- access_token: data.access_token,
61
- expires: data.expires,
62
- customer_id: customerId,
63
- };
64
- docRef.set(accessToken).catch(logger.error);
65
- return accessToken;
66
- }
67
- catch (e) {
68
- logger.error(e);
69
- return null;
70
- }
39
+ const { apiAuth } = getEnv();
40
+ const docRef = firestore.doc(`customerTokens/${customerId}`);
41
+ const doc = await docRef.get();
42
+ const expires = doc.data()?.expires;
43
+ if (expires && new Date(expires).getTime() - Date.now() >= 2 * 60 * 1000) {
44
+ return doc.data();
45
+ }
46
+ try {
47
+ const { data } = await api({
48
+ endpoint: 'authenticate',
49
+ method: 'post',
50
+ body: {
51
+ _id: apiAuth.authenticationId,
52
+ api_key: apiAuth.apiKey,
53
+ customer_id: customerId,
54
+ },
55
+ });
56
+ const accessToken = {
57
+ access_token: data.access_token,
58
+ expires: data.expires,
59
+ customer_id: customerId,
60
+ };
61
+ docRef.set(accessToken).catch(logger.error);
62
+ return accessToken;
63
+ } catch (e) {
64
+ logger.error(e);
65
+ return null;
66
+ }
71
67
  };
72
68
  const getAuthCustomerApi = async (firestore, authtoken, authFirebase) => {
73
- const customerFirebaseAuth = await checkFirebaseAuth(authFirebase, authtoken);
74
- if (customerFirebaseAuth !== null && customerFirebaseAuth.email) {
75
- const customer = await findCustomerByEmail(customerFirebaseAuth.email);
76
- if (customer !== null) {
77
- return generateAccessToken(firestore, customer._id);
78
- }
79
- const newCustomer = {
80
- display_name: customerFirebaseAuth.name || '',
81
- main_email: customerFirebaseAuth.email,
82
- emails: [{
83
- address: customerFirebaseAuth.email,
84
- verified: customerFirebaseAuth.email_verified,
85
- }],
86
- oauth_providers: [{
87
- provider: customerFirebaseAuth.firebase.sign_in_provider,
88
- user_id: customerFirebaseAuth.user_id,
89
- }],
90
- };
91
- const customerId = await createCustomer(newCustomer);
92
- if (customerId) {
93
- return generateAccessToken(firestore, customerId);
94
- }
69
+ const customerFirebaseAuth = await checkFirebaseAuth(authFirebase, authtoken);
70
+ if (customerFirebaseAuth !== null && customerFirebaseAuth.email) {
71
+ const customer = await findCustomerByEmail(customerFirebaseAuth.email);
72
+ if (customer !== null) {
73
+ return generateAccessToken(firestore, customer._id);
95
74
  }
96
- // TODO: Find customer by phone number, generate token if found, otherwise unauthorize
97
- return null;
75
+ const newCustomer = {
76
+ display_name: customerFirebaseAuth.name || '',
77
+ main_email: customerFirebaseAuth.email,
78
+ emails: [{
79
+ address: customerFirebaseAuth.email,
80
+ verified: customerFirebaseAuth.email_verified,
81
+ }],
82
+ oauth_providers: [{
83
+ provider: customerFirebaseAuth.firebase.sign_in_provider,
84
+ user_id: customerFirebaseAuth.user_id,
85
+ }],
86
+ };
87
+ const customerId = await createCustomer(newCustomer);
88
+ if (customerId) {
89
+ return generateAccessToken(firestore, customerId);
90
+ }
91
+ }
92
+ // TODO: Find customer by phone number, generate token if found, otherwise unauthorize
93
+ return null;
98
94
  };
99
95
  const sendError = (res, msg, status = 400) => {
100
- if (msg) {
101
- res.status(status).json({
102
- status,
103
- error: msg,
104
- });
105
- }
106
- else {
107
- res.status(500).json({
108
- status: 500,
109
- error: 'Internal server error',
110
- });
111
- }
96
+ if (msg) {
97
+ res.status(status).json({
98
+ status,
99
+ error: msg,
100
+ });
101
+ } else {
102
+ res.status(500).json({
103
+ status: 500,
104
+ error: 'Internal server error',
105
+ });
106
+ }
112
107
  };
113
- export { sendError, getAuthCustomerApi, };
114
- //# sourceMappingURL=handle-passport.js.map
108
+
109
+ export { sendError, getAuthCustomerApi };
110
+ // # sourceMappingURL=handle-passport.js.map
@@ -1,42 +1,41 @@
1
1
  import { logger } from 'firebase-functions';
2
- import { sendError, getAuthCustomerApi, } from './handle-passport.js';
2
+ import { sendError, getAuthCustomerApi } from './handle-passport.js';
3
+
3
4
  export default async (req, res, firestore, authFirebase, storeId) => {
4
- const { method } = req;
5
- if (method !== 'POST') {
6
- return res.sendStatus(405);
7
- }
8
- if (method === 'POST'
5
+ const { method } = req;
6
+ if (method !== 'POST') {
7
+ return res.sendStatus(405);
8
+ }
9
+ if (method === 'POST'
9
10
  && (!req.body || typeof req.body !== 'object' || Array.isArray(req.body))) {
10
- return res.sendStatus(400);
11
- }
12
- let { url } = req;
13
- if (url.endsWith('.json')) {
14
- url = url.slice(0, -5);
11
+ return res.sendStatus(400);
12
+ }
13
+ let { url } = req;
14
+ if (url.endsWith('.json')) {
15
+ url = url.slice(0, -5);
16
+ }
17
+ const endpoint = url.split('/')[1];
18
+ // endpoint /token
19
+ if (endpoint === 'token' && method === 'POST') {
20
+ const { authtoken } = req.body;
21
+ if (!firestore) {
22
+ return sendError(res, 'Firestore not found', 500);
15
23
  }
16
- const endpoint = url.split('/')[1];
17
- // endpoint /token
18
- if (endpoint === 'token' && method === 'POST') {
19
- const { authtoken } = req.body;
20
- if (!firestore) {
21
- return sendError(res, 'Firestore not found', 500);
22
- }
23
- if (storeId < 100) {
24
- return sendError(res, 'Invalid store');
25
- }
26
- try {
27
- const authCustomerApi = await getAuthCustomerApi(firestore, authtoken, authFirebase);
28
- if (authCustomerApi !== null) {
29
- return res.send(authCustomerApi);
30
- }
31
- return sendError(res, 'Invalid token, unauthorized', 401);
32
- }
33
- catch (e) {
34
- logger.error(e);
35
- return sendError(res);
36
- }
24
+ if (storeId < 100) {
25
+ return sendError(res, 'Invalid store');
37
26
  }
38
- else {
39
- return res.sendStatus(400);
27
+ try {
28
+ const authCustomerApi = await getAuthCustomerApi(firestore, authtoken, authFirebase);
29
+ if (authCustomerApi !== null) {
30
+ return res.send(authCustomerApi);
31
+ }
32
+ return sendError(res, 'Invalid token, unauthorized', 401);
33
+ } catch (e) {
34
+ logger.error(e);
35
+ return sendError(res);
40
36
  }
37
+ } else {
38
+ return res.sendStatus(400);
39
+ }
41
40
  };
42
- //# sourceMappingURL=serve-passport-api.js.map
41
+ // # sourceMappingURL=serve-passport-api.js.map
@@ -7,6 +7,7 @@ import { getAuth } from 'firebase-admin/auth';
7
7
  import { onRequest } from 'firebase-functions/v2/https';
8
8
  import config from '@cloudcommerce/firebase/lib/config';
9
9
  import servePassportApi from './firebase/serve-passport-api.js';
10
+
10
11
  // References:
11
12
  // https:// firebase.google.com/docs/auth/admin/manage-cookies
12
13
  // https://itnext.io/how-to-use-firebase-auth-with-a-custom-node-backend-99a106376c8a
@@ -15,12 +16,13 @@ import servePassportApi from './firebase/serve-passport-api.js';
15
16
  const authFirebase = getAuth();
16
17
  const firestore = getFirestore();
17
18
  const options = {
18
- ...config.get().httpsFunctionOptions,
19
- memory: '128MiB',
19
+ ...config.get().httpsFunctionOptions,
20
+ memory: '128MiB',
20
21
  };
22
+
21
23
  // eslint-disable-next-line import/prefer-default-export
22
24
  export const passport = onRequest(options, (req, res) => {
23
- const { storeId } = config.get();
24
- servePassportApi(req, res, firestore, authFirebase, storeId);
25
+ const { storeId } = config.get();
26
+ servePassportApi(req, res, firestore, authFirebase, storeId);
25
27
  });
26
- //# sourceMappingURL=firebase.js.map
28
+ // # sourceMappingURL=firebase.js.map
@@ -1,2 +1 @@
1
- "use strict";
2
- //# sourceMappingURL=index.js.map
1
+ // # sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/passport",
3
3
  "type": "module",
4
- "version": "0.0.74",
4
+ "version": "0.0.76",
5
5
  "description": "E-Com Plus Cloud Commerce customers authentication (passport) API",
6
6
  "main": "lib/index.js",
7
7
  "exports": {