cloudcommerce 0.0.92 → 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.
- package/CHANGELOG.md +12 -0
- package/package.json +1 -1
- package/packages/api/package.json +1 -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/package.json +1 -1
- package/packages/cli/config/firebase.json +4 -2
- package/packages/cli/package.json +1 -1
- package/packages/config/package.json +1 -1
- package/packages/events/lib/firebase.js +2 -1
- package/packages/events/lib/index.js +1 -1
- package/packages/events/package.json +1 -1
- package/packages/firebase/package.json +1 -1
- package/packages/modules/lib/firebase/checkout.js +162 -0
- package/packages/modules/lib/firebase/checkout.js.map +1 -1
- package/packages/modules/lib/firebase/functions-checkout/fix-items.js +200 -0
- package/packages/modules/lib/firebase/functions-checkout/fix-items.js.map +1 -0
- package/packages/modules/lib/firebase/functions-checkout/get-custumerId.js +34 -0
- package/packages/modules/lib/firebase/functions-checkout/get-custumerId.js.map +1 -0
- package/packages/modules/lib/firebase/functions-checkout/handle-order-transaction.js +123 -0
- package/packages/modules/lib/firebase/functions-checkout/handle-order-transaction.js.map +1 -0
- package/packages/modules/lib/firebase/functions-checkout/new-order.js +191 -0
- package/packages/modules/lib/firebase/functions-checkout/new-order.js.map +1 -0
- package/packages/modules/lib/firebase/functions-checkout/request-to-module.js +67 -0
- package/packages/modules/lib/firebase/functions-checkout/request-to-module.js.map +1 -0
- package/packages/modules/lib/firebase/functions-checkout/utils.js +227 -0
- package/packages/modules/lib/firebase/functions-checkout/utils.js.map +1 -0
- package/packages/modules/lib/firebase/serve-modules-api.js +9 -4
- package/packages/modules/lib/firebase/serve-modules-api.js.map +1 -1
- package/packages/modules/package.json +1 -1
- package/packages/modules/schemas/@checkout.cjs +1 -1
- package/packages/modules/src/firebase/checkout.ts +235 -0
- package/packages/modules/src/firebase/functions-checkout/fix-items.ts +219 -0
- package/packages/modules/src/firebase/functions-checkout/get-custumerId.ts +33 -0
- package/packages/modules/src/firebase/functions-checkout/handle-order-transaction.ts +195 -0
- package/packages/modules/src/firebase/functions-checkout/new-order.ts +273 -0
- package/packages/modules/src/firebase/functions-checkout/request-to-module.ts +76 -0
- package/packages/modules/src/firebase/functions-checkout/utils.ts +301 -0
- package/packages/modules/src/firebase/serve-modules-api.ts +9 -4
- package/packages/modules/src/types/index.d.ts +67 -0
- package/packages/passport/lib/firebase/handle-passport.js +3 -1
- package/packages/passport/lib/firebase/handle-passport.js.map +1 -1
- package/packages/passport/lib/index.js +1 -0
- package/packages/passport/lib/index.js.map +1 -1
- package/packages/passport/package.json +1 -1
- package/packages/passport/src/firebase/handle-passport.ts +2 -0
- package/packages/passport/src/index.ts +1 -0
- package/packages/ssr/package.json +1 -1
- package/packages/storefront/package.json +1 -1
- package/packages/types/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
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
|
+
|
|
5
17
|
### [0.0.92](https://github.com/ecomplus/cloud-commerce/compare/v0.0.91...v0.0.92) (2022-09-23)
|
|
6
18
|
|
|
7
19
|
### [0.0.91](https://github.com/ecomplus/cloud-commerce/compare/v0.0.90...v0.0.91) (2022-09-23)
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cloudcommerce",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
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>",
|
|
@@ -29,8 +29,10 @@
|
|
|
29
29
|
"source": "functions/ssr",
|
|
30
30
|
"codebase": "ssr",
|
|
31
31
|
"ignore": [
|
|
32
|
-
"storefront
|
|
33
|
-
"
|
|
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,2 +1,2 @@
|
|
|
1
1
|
import './firebase.js';
|
|
2
|
-
|
|
2
|
+
// # sourceMappingURL=index.js.map
|
|
@@ -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"}
|