cloudcommerce 0.0.91 → 0.0.93

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 (51) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/package.json +1 -1
  3. package/packages/api/package.json +1 -1
  4. package/packages/apps/correios/package.json +1 -1
  5. package/packages/apps/custom-shipping/package.json +1 -1
  6. package/packages/apps/discounts/package.json +1 -1
  7. package/packages/apps/frenet/package.json +1 -1
  8. package/packages/apps/tiny-erp/package.json +1 -1
  9. package/packages/cli/config/firebase.json +4 -2
  10. package/packages/cli/package.json +1 -1
  11. package/packages/config/package.json +1 -1
  12. package/packages/events/package.json +1 -1
  13. package/packages/firebase/package.json +1 -1
  14. package/packages/modules/lib/firebase/checkout.js +162 -0
  15. package/packages/modules/lib/firebase/checkout.js.map +1 -1
  16. package/packages/modules/lib/firebase/functions-checkout/fix-items.js +200 -0
  17. package/packages/modules/lib/firebase/functions-checkout/fix-items.js.map +1 -0
  18. package/packages/modules/lib/firebase/functions-checkout/get-custumerId.js +34 -0
  19. package/packages/modules/lib/firebase/functions-checkout/get-custumerId.js.map +1 -0
  20. package/packages/modules/lib/firebase/functions-checkout/handle-order-transaction.js +123 -0
  21. package/packages/modules/lib/firebase/functions-checkout/handle-order-transaction.js.map +1 -0
  22. package/packages/modules/lib/firebase/functions-checkout/new-order.js +191 -0
  23. package/packages/modules/lib/firebase/functions-checkout/new-order.js.map +1 -0
  24. package/packages/modules/lib/firebase/functions-checkout/request-to-module.js +67 -0
  25. package/packages/modules/lib/firebase/functions-checkout/request-to-module.js.map +1 -0
  26. package/packages/modules/lib/firebase/functions-checkout/utils.js +227 -0
  27. package/packages/modules/lib/firebase/functions-checkout/utils.js.map +1 -0
  28. package/packages/modules/lib/firebase/serve-modules-api.js +9 -4
  29. package/packages/modules/lib/firebase/serve-modules-api.js.map +1 -1
  30. package/packages/modules/package.json +1 -1
  31. package/packages/modules/schemas/@checkout.cjs +1 -1
  32. package/packages/modules/src/firebase/checkout.ts +235 -0
  33. package/packages/modules/src/firebase/functions-checkout/fix-items.ts +219 -0
  34. package/packages/modules/src/firebase/functions-checkout/get-custumerId.ts +33 -0
  35. package/packages/modules/src/firebase/functions-checkout/handle-order-transaction.ts +195 -0
  36. package/packages/modules/src/firebase/functions-checkout/new-order.ts +273 -0
  37. package/packages/modules/src/firebase/functions-checkout/request-to-module.ts +76 -0
  38. package/packages/modules/src/firebase/functions-checkout/utils.ts +301 -0
  39. package/packages/modules/src/firebase/serve-modules-api.ts +9 -4
  40. package/packages/modules/src/types/index.d.ts +67 -0
  41. package/packages/passport/lib/firebase/handle-passport.js +3 -1
  42. package/packages/passport/lib/firebase/handle-passport.js.map +1 -1
  43. package/packages/passport/lib/index.js +1 -0
  44. package/packages/passport/lib/index.js.map +1 -1
  45. package/packages/passport/package.json +1 -1
  46. package/packages/passport/src/firebase/handle-passport.ts +2 -0
  47. package/packages/passport/src/index.ts +1 -0
  48. package/packages/ssr/package.json +1 -1
  49. package/packages/storefront/package.json +1 -1
  50. package/packages/types/package.json +1 -1
  51. package/pnpm-workspace.yaml +1 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,20 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [0.0.93](https://github.com/ecomplus/cloud-commerce/compare/v0.0.92...v0.0.93) (2022-09-24)
6
+
7
+
8
+ ### Features
9
+
10
+ * **modules:** Add checkout handler to Modules API ([#49](https://github.com/ecomplus/cloud-commerce/issues/49)) ([febf332](https://github.com/ecomplus/cloud-commerce/commit/febf3326ec4951416802b9afa7a6c92c948cd5cf))
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * **cli:** Fix ignored Storefront source files for SSR function deploy on `firebase.json` ([11b9d05](https://github.com/ecomplus/cloud-commerce/commit/11b9d05c9fa5bd43acfe99e24c24f1f5dd50ac38))
16
+
17
+ ### [0.0.92](https://github.com/ecomplus/cloud-commerce/compare/v0.0.91...v0.0.92) (2022-09-23)
18
+
5
19
  ### [0.0.91](https://github.com/ecomplus/cloud-commerce/compare/v0.0.90...v0.0.91) (2022-09-23)
6
20
 
7
21
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cloudcommerce",
3
3
  "type": "module",
4
- "version": "0.0.91",
4
+ "version": "0.0.93",
5
5
  "description": "Open fair-code headless commerce platform: API-first, microservices based, event driven and cloud native",
6
6
  "main": "packages/api/lib/index.js",
7
7
  "author": "E-Com Club Softwares para E-commerce <ti@e-com.club>",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/api",
3
3
  "type": "module",
4
- "version": "0.0.91",
4
+ "version": "0.0.93",
5
5
  "description": "E-Com Plus Cloud Commerce APIs client/adapter",
6
6
  "main": "lib/api.js",
7
7
  "types": "lib/api.d.ts",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-correios",
3
3
  "type": "module",
4
- "version": "0.0.91",
4
+ "version": "0.0.93",
5
5
  "description": "E-Com Plus Cloud Commerce app for Correios shipping calculation",
6
6
  "main": "lib/correios.js",
7
7
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-custom-shipping",
3
3
  "type": "module",
4
- "version": "0.0.91",
4
+ "version": "0.0.93",
5
5
  "description": "E-Com Plus Cloud Commerce app for custom shipping methods",
6
6
  "main": "lib/custom-shipping.js",
7
7
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-discounts",
3
3
  "type": "module",
4
- "version": "0.0.91",
4
+ "version": "0.0.93",
5
5
  "description": "E-Com Plus Cloud Commerce app for complex discount rules",
6
6
  "main": "lib/discounts.js",
7
7
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-frenet",
3
3
  "type": "module",
4
- "version": "0.0.91",
4
+ "version": "0.0.93",
5
5
  "description": "E-Com Plus Cloud Commerce app for Frenet shipping calculation",
6
6
  "main": "lib/frenet.js",
7
7
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-tiny-erp",
3
3
  "type": "module",
4
- "version": "0.0.91",
4
+ "version": "0.0.93",
5
5
  "description": "E-Com Plus Cloud Commerce app for Tiny ERP",
6
6
  "main": "lib/tiny-erp.js",
7
7
  "repository": {
@@ -29,8 +29,10 @@
29
29
  "source": "functions/ssr",
30
30
  "codebase": "ssr",
31
31
  "ignore": [
32
- "storefront/**/!(entry.mjs)",
33
- "functions/ssr/storefront/**/!(entry.mjs)"
32
+ "storefront/node_modules/**",
33
+ "storefront/dist/client/**",
34
+ "functions/ssr/storefront/node_modules/**",
35
+ "functions/ssr/storefront/dist/client/**"
34
36
  ]
35
37
  }
36
38
  ],
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/cli",
3
3
  "type": "module",
4
- "version": "0.0.91",
4
+ "version": "0.0.93",
5
5
  "description": "E-Com Plus Cloud Commerce CLI tools",
6
6
  "bin": {
7
7
  "cloudcommerce": "./bin/run.mjs"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/config",
3
3
  "type": "module",
4
- "version": "0.0.91",
4
+ "version": "0.0.93",
5
5
  "description": "E-Com Plus Cloud Commerce base config",
6
6
  "main": "lib/config.js",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/events",
3
3
  "type": "module",
4
- "version": "0.0.91",
4
+ "version": "0.0.93",
5
5
  "description": "E-Com Plus Cloud Commerce app events",
6
6
  "main": "lib/index.js",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/firebase",
3
3
  "type": "module",
4
- "version": "0.0.91",
4
+ "version": "0.0.93",
5
5
  "description": "E-Com Plus Cloud Commerce on Firebase",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",
@@ -1 +1,163 @@
1
+ import { ajv, sendRequestError } from './ajv.js';
2
+ import fixItems from './functions-checkout/fix-items.js';
3
+ import getCustomerId from './functions-checkout/get-custumerId.js';
4
+ import requestModule from './functions-checkout/request-to-module.js';
5
+ import {
6
+ sendError, fixAmount, getValidResults, handleShippingServices, handleApplyDiscount, handleListPayments,
7
+ } from './functions-checkout/utils.js';
8
+ import createOrder from './functions-checkout/new-order.js';
9
+
10
+ const runCheckout = async (checkoutBody, accessToken, res, validate, hostname) => {
11
+ if (!validate(checkoutBody)) {
12
+ return sendRequestError(res, '@checkout', validate.errors);
13
+ }
14
+ const { items, ...newBody } = checkoutBody;
15
+ const newItems = await fixItems(items);
16
+ const amount = {
17
+ subtotal: 0,
18
+ discount: 0,
19
+ freight: 0,
20
+ total: 0,
21
+ };
22
+ const body = {
23
+ ...newBody,
24
+ items: [...newItems],
25
+ subtotal: 0,
26
+ amount,
27
+ };
28
+ const countCheckoutItems = body.items.length;
29
+ const { customer } = body;
30
+ const customerId = await getCustomerId(accessToken, customer);
31
+ if (customerId && customer) {
32
+ if (newItems.length) {
33
+ const { _id, ...newCustomer } = customer;
34
+ // start mounting order body
35
+ // https://developers.e-com.plus/docs/api/#/store/orders/orders
36
+ const dateTime = new Date().toISOString();
37
+ const orderBody = {
38
+ opened_at: dateTime,
39
+ buyers: [
40
+ // received customer info
41
+ {
42
+ _id: customerId,
43
+ ...newCustomer,
44
+ },
45
+ ],
46
+ items: [],
47
+ amount: {
48
+ total: 0,
49
+ },
50
+ };
51
+ // bypass some order fields
52
+ const fields = [
53
+ 'utm',
54
+ 'affiliate_code',
55
+ 'browser_ip',
56
+ 'channel_id',
57
+ 'channel_type',
58
+ 'domain',
59
+ 'notes',
60
+ ];
61
+ fields.forEach((field) => {
62
+ if (body[field]) {
63
+ orderBody[field] = body[field];
64
+ }
65
+ });
66
+ if (orderBody.domain) {
67
+ // consider default Storefront app routes
68
+ if (!orderBody.checkout_link) {
69
+ orderBody.checkout_link = `https://${orderBody.domain}/app/#/checkout/(_id)`;
70
+ }
71
+ if (!orderBody.status_link) {
72
+ orderBody.status_link = `https://${orderBody.domain}/app/#/order/(_id)`;
73
+ }
74
+ }
75
+ // count subtotal value
76
+ let subtotal = 0;
77
+ newItems.forEach((item) => {
78
+ subtotal += (item.final_price || item.price * item.quantity);
79
+ // pass each item to prevent object overwrite
80
+ if (orderBody.items) {
81
+ orderBody.items.push({ ...item });
82
+ }
83
+ });
84
+ if (subtotal <= 0 && items.length < countCheckoutItems) {
85
+ return sendError(res, 400, 'CKT801', 'Cannot handle checkout, any valid cart item');
86
+ }
87
+ amount.subtotal = subtotal;
88
+ body.subtotal = subtotal;
89
+ fixAmount(amount, body, orderBody);
90
+ const transactions = Array.isArray(body.transaction) ? body.transaction : [body.transaction];
91
+ // add customer ID to order and transaction
92
+ customer._id = customerId;
93
+ transactions.forEach(({ buyer }) => {
94
+ if (buyer) {
95
+ buyer.customer_id = customerId;
96
+ }
97
+ });
98
+ let listShipping = await requestModule(body, hostname, 'shipping');
99
+ if (listShipping) {
100
+ listShipping = getValidResults(listShipping, 'shipping_services');
101
+ handleShippingServices(body, listShipping, amount, orderBody);
102
+ } else {
103
+ // problem with shipping response object
104
+ return sendError(res, 400, 'CKT901', 'Any valid shipping service from /calculate_shipping module', {
105
+ en_us: 'Shipping method not available, please choose another',
106
+ pt_br: 'Forma de envio indisponível, por favor escolha outra',
107
+ });
108
+ }
109
+ let discounts = await requestModule(body, hostname, 'discount');
110
+ if (discounts) {
111
+ discounts = getValidResults(discounts);
112
+ handleApplyDiscount(body, discounts, amount, orderBody);
113
+ }
114
+ const { transaction, ...bodyPayment } = body;
115
+ let paymentsBody;
116
+ if (Array.isArray(transaction)) {
117
+ paymentsBody = {
118
+ ...bodyPayment,
119
+ transaction: transaction[0],
120
+ };
121
+ } else {
122
+ paymentsBody = {
123
+ ...bodyPayment,
124
+ transaction,
125
+ };
126
+ }
127
+ let listPaymentGateways = await requestModule(paymentsBody, hostname, 'payment');
128
+ if (listPaymentGateways) {
129
+ listPaymentGateways = getValidResults(listPaymentGateways, 'payment_gateways');
130
+ handleListPayments(body, listPaymentGateways, paymentsBody, amount, orderBody);
131
+ } else {
132
+ return sendError(res, 409, 'CKT902', 'Any valid payment gateway from /list_payments module', {
133
+ en_us: 'Payment method not available, please choose another',
134
+ pt_br: 'Forma de pagamento indisponível, por favor escolha outra',
135
+ });
136
+ }
137
+ return createOrder(res, accessToken, hostname, amount, checkoutBody, orderBody, transactions, dateTime);
138
+ }
139
+ return sendError(res, 400, 'CKT801', 'Cannot handle checkout, any valid cart item');
140
+ }
141
+ return sendError(res, 404, -404, 'Not found', {
142
+ en_us: 'No customers found with ID or email provided',
143
+ pt_br: 'Nenhum cliente encontrado com ID ou e-mail fornecido',
144
+ });
145
+ };
146
+
147
+ export default (schema, req, res, hostname) => {
148
+ const validate = ajv.compile(schema);
149
+ const ip = req.headers['x-real-ip'];
150
+ if (!req.body.browser_ip && ip) {
151
+ req.body.browser_ip = ip;
152
+ }
153
+ let acessToken = req.headers.authorization;
154
+ if (acessToken) {
155
+ acessToken = acessToken.replace(/Bearer /i, '');
156
+ return runCheckout(req.body, acessToken, res, validate, hostname);
157
+ }
158
+ return sendError(res, 401, 109, "Token is required on 'Authorization'", {
159
+ en_us: 'No authorization for the requested method and resource',
160
+ pt_br: 'Sem autorização para o método e recurso solicitado',
161
+ });
162
+ };
1
163
  // # sourceMappingURL=checkout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkout.js","sourceRoot":"","sources":["../../src/firebase/checkout.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"checkout.js","sourceRoot":"","sources":["../../src/firebase/checkout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,200 @@
1
+ import api from '@cloudcommerce/api';
2
+
3
+ export default async (checkoutItems) => {
4
+ const items = [...checkoutItems];
5
+ // get each cart item
6
+ // count done processes
7
+ let itemsDone = 0;
8
+ const itemsTodo = items.length;
9
+ // eslint-disable-next-line consistent-return
10
+ const doFinally = () => {
11
+ // after each item
12
+ itemsDone += 1;
13
+ if (itemsDone === itemsTodo) {
14
+ return items;
15
+ }
16
+ };
17
+ // run item by item
18
+ for (let i = 0; i < items.length; i++) {
19
+ // i, item scoped
20
+ const item = items[i];
21
+ const removeItem = () => {
22
+ // remove invalid item from list
23
+ items.splice(i, 1);
24
+ doFinally();
25
+ };
26
+ if (!item.quantity) {
27
+ // ignore items without quantity or zero
28
+ removeItem();
29
+ i -= 1;
30
+ continue;
31
+ }
32
+ const proceedItem = () => {
33
+ // additions to final price
34
+ if (Array.isArray(item.customizations)) {
35
+ item.customizations.forEach((customization) => {
36
+ if (item.final_price) {
37
+ if (customization.add_to_price) {
38
+ const { type, addition } = customization.add_to_price;
39
+ item.final_price += type === 'fixed'
40
+ ? addition
41
+ : ((item.price * addition) / 100);
42
+ }
43
+ }
44
+ });
45
+ }
46
+ // done
47
+ doFinally();
48
+ };
49
+ const checkItem = (product) => {
50
+ if (!product.available) {
51
+ removeItem();
52
+ } else {
53
+ let body;
54
+ // check variation if any
55
+ if (!item.variation_id) {
56
+ body = product;
57
+ } else {
58
+ // find respective variation
59
+ let variation;
60
+ if (product.variations) {
61
+ variation = product.variations.find((variationFind) => variationFind._id === item.variation_id);
62
+ }
63
+ if (variation) {
64
+ // merge product body with variation object
65
+ body = Object.assign(product, variation);
66
+ }
67
+ }
68
+ // logger.log(body._id)
69
+ if (!body || (body.min_quantity && body.min_quantity > item.quantity)) {
70
+ // cannot handle current item
71
+ // invalid variation or quantity lower then minimum
72
+ removeItem();
73
+ } else {
74
+ // check quantity
75
+ if (body.quantity && body.quantity < item.quantity) {
76
+ // reduce to max available quantity
77
+ item.quantity = body.quantity;
78
+ }
79
+ // extend item properties with body
80
+ [
81
+ 'sku',
82
+ 'name',
83
+ 'currency_id',
84
+ 'currency_symbol',
85
+ 'price',
86
+ 'dimensions',
87
+ 'weight',
88
+ 'production_time',
89
+ ].forEach((prop) => {
90
+ if (body && body[prop] !== undefined) {
91
+ item[prop] = body[prop];
92
+ }
93
+ });
94
+ // price is required
95
+ if (!item.price) {
96
+ item.price = 0;
97
+ }
98
+ if (Array.isArray(item.flags)) {
99
+ // prevent error with repeated flags
100
+ const flags = [];
101
+ item.flags.forEach((flag) => {
102
+ if (!flags.includes(flag)) {
103
+ flags.push(flag);
104
+ }
105
+ });
106
+ item.flags = flags;
107
+ }
108
+ //
109
+ // item.final_price = getPrice(body);
110
+ proceedItem();
111
+ }
112
+ }
113
+ };
114
+ const checkKitProduct = (kitProduct, kitProductId) => {
115
+ if (item.kit_product) {
116
+ if (kitProduct.available && kitProduct.kit_composition) {
117
+ // check kit composition and quantities
118
+ let packQuantity = 0;
119
+ let isFixedQuantity = true;
120
+ let kitItem;
121
+ kitProduct.kit_composition.forEach((currentKitItem) => {
122
+ if (currentKitItem.quantity) {
123
+ packQuantity += currentKitItem.quantity;
124
+ } else if (isFixedQuantity) {
125
+ isFixedQuantity = false;
126
+ }
127
+ if (currentKitItem._id === item.product_id) {
128
+ kitItem = currentKitItem;
129
+ }
130
+ });
131
+ if (!isFixedQuantity) {
132
+ // use parent product min quantity
133
+ packQuantity = kitProduct.min_quantity || 0;
134
+ }
135
+ if (kitItem && (kitItem.quantity === undefined
136
+ || item.quantity % kitItem.quantity === 0)) {
137
+ // valid kit item and quantity
138
+ let kitTotalQuantity = 0;
139
+ items.forEach((itemFind) => {
140
+ if (itemFind.kit_product && itemFind.kit_product._id === kitProductId) {
141
+ kitTotalQuantity += itemFind.quantity;
142
+ }
143
+ });
144
+ const minPacks = kitItem.quantity
145
+ ? item.quantity / kitItem.quantity
146
+ : 1;
147
+ if (kitTotalQuantity && kitTotalQuantity % (minPacks * packQuantity) === 0) {
148
+ // matched pack quantity
149
+ // item.kit_product.price = getPrice(kitProduct);
150
+ item.kit_product.pack_quantity = packQuantity;
151
+ if (item.kit_product.price) {
152
+ // set final price from kit
153
+ item.final_price = item.kit_product.price / packQuantity;
154
+ }
155
+ proceedItem();
156
+ }
157
+ }
158
+ }
159
+ // remove items with invalid kit
160
+ let index = 0;
161
+ while (index < items.length) {
162
+ const itemKit = items[index].kit_product;
163
+ if (itemKit && itemKit._id === kitProductId) {
164
+ items.splice(index, 1);
165
+ } else {
166
+ index += 1;
167
+ }
168
+ }
169
+ doFinally();
170
+ }
171
+ };
172
+ if (item.kit_product) {
173
+ // GET public kit product object
174
+ const kitProductId = item.kit_product._id;
175
+ // eslint-disable-next-line no-await-in-loop
176
+ const kitProduct = (await api.get(`products/${kitProductId}`, {
177
+ isNoAuth: true,
178
+ })).data;
179
+ if (kitProduct) {
180
+ checkKitProduct(kitProduct, kitProductId);
181
+ } else {
182
+ removeItem();
183
+ }
184
+ } else {
185
+ // GET public product object
186
+ // eslint-disable-next-line no-await-in-loop
187
+ const product = (await api.get(`products/${item.product_id}`, {
188
+ isNoAuth: true,
189
+ })).data;
190
+ if (product) {
191
+ checkItem(product);
192
+ } else {
193
+ // remove cart item
194
+ removeItem();
195
+ }
196
+ }
197
+ }
198
+ return items;
199
+ };
200
+ // # sourceMappingURL=fix-items.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix-items.js","sourceRoot":"","sources":["../../../src/firebase/functions-checkout/fix-items.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import api from '@cloudcommerce/api';
2
+ import { logger } from 'firebase-functions';
3
+
4
+ const findCustomerByEmail = async (email, accessToken) => {
5
+ try {
6
+ const { data } = await api.get(`customers?main_email=${email}`, {
7
+ accessToken,
8
+ });
9
+ if (data.result.length) {
10
+ return data.result[0]._id;
11
+ }
12
+ return null;
13
+ } catch (e) {
14
+ logger.error(e);
15
+ return null;
16
+ }
17
+ };
18
+
19
+ export default (accessToken, customer) => {
20
+ if (customer) {
21
+ if (!customer._id) {
22
+ // try to find customer by e-mail
23
+ // GET customer object
24
+ return customer.main_email ? findCustomerByEmail(customer.main_email, accessToken) : null;
25
+ // use first resulted customer ID
26
+ }
27
+ if (customer._id && (typeof customer._id === 'string') && customer._id.length === 24) {
28
+ // customer ID already defined
29
+ return customer._id;
30
+ }
31
+ }
32
+ return null;
33
+ };
34
+ // # sourceMappingURL=get-custumerId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-custumerId.js","sourceRoot":"","sources":["../../../src/firebase/functions-checkout/get-custumerId.ts"],"names":[],"mappings":"AACA,OAAO,GAAG,MAAM,oBAAoB,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,mBAAmB,GAAG,KAAK,EAAE,KAAa,EAAE,WAAmB,EAAE,EAAE;IACvE,IAAI;QACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,wBAAwB,KAAK,EAAE,EAAE;YAC9D,WAAW;SACZ,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACtB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;SAC3B;QACD,OAAO,IAAI,CAAC;KACb;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC;KACb;AACH,CAAC,CAAC;AAEF,eAAe,CAAC,WAAmB,EAAE,QAA2B,EAAE,EAAE;IAClE,IAAI,QAAQ,EAAE;QACZ,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACnB,iCAAiC;YACjC,sBAAsB;YACpB,OAAO,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5F,iCAAiC;SAChC;QAAC,IAAI,QAAQ,CAAC,GAAG,IAAI,CAAC,OAAO,QAAQ,CAAC,GAAG,KAAK,QAAQ,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,KAAK,EAAE,EAAE;YACtF,8BAA8B;YAC9B,OAAO,QAAQ,CAAC,GAA+B,CAAC;SACjD;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}