cloudcommerce 0.1.0 → 0.1.2

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 (112) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/ecomplus-stores/monocard/.vscode/settings.json +5 -1
  3. package/ecomplus-stores/monocard/functions/core/package.json +1 -1
  4. package/ecomplus-stores/monocard/functions/events/package.json +2 -2
  5. package/ecomplus-stores/monocard/functions/modules/package.json +2 -2
  6. package/ecomplus-stores/monocard/functions/passport/package.json +2 -2
  7. package/ecomplus-stores/monocard/functions/ssr/.nvmrc +1 -0
  8. package/ecomplus-stores/monocard/functions/ssr/content/settings.json +13 -10
  9. package/ecomplus-stores/monocard/functions/ssr/package.json +18 -10
  10. package/ecomplus-stores/monocard/functions/ssr/src/components/LottiePhoneNFC.vue +1 -1
  11. package/ecomplus-stores/monocard/functions/ssr/src/pages/_vue.ts +3 -0
  12. package/ecomplus-stores/monocard/package.json +1 -1
  13. package/ecomplus-stores/tia-sonia/.firebaserc +5 -0
  14. package/ecomplus-stores/tia-sonia/.vscode/settings.json +5 -1
  15. package/ecomplus-stores/tia-sonia/functions/config.json +2 -2
  16. package/ecomplus-stores/tia-sonia/functions/core/package.json +1 -1
  17. package/ecomplus-stores/tia-sonia/functions/events/package.json +2 -2
  18. package/ecomplus-stores/tia-sonia/functions/modules/package.json +2 -2
  19. package/ecomplus-stores/tia-sonia/functions/passport/package.json +2 -2
  20. package/ecomplus-stores/tia-sonia/functions/ssr/.nvmrc +1 -0
  21. package/ecomplus-stores/tia-sonia/functions/ssr/content/settings.json +14 -11
  22. package/ecomplus-stores/tia-sonia/functions/ssr/package.json +15 -7
  23. package/ecomplus-stores/tia-sonia/functions/ssr/src/pages/_vue.ts +3 -0
  24. package/ecomplus-stores/tia-sonia/functions/ssr/src/scripts/InlineScripts.astro +6 -7
  25. package/ecomplus-stores/tia-sonia/package.json +1 -1
  26. package/package.json +1 -1
  27. package/packages/api/package.json +1 -1
  28. package/packages/apps/correios/package.json +1 -1
  29. package/packages/apps/custom-payment/package.json +1 -1
  30. package/packages/apps/custom-shipping/package.json +1 -1
  31. package/packages/apps/discounts/package.json +1 -1
  32. package/packages/apps/emails/package.json +1 -1
  33. package/packages/apps/frenet/package.json +1 -1
  34. package/packages/apps/galaxpay/package.json +1 -1
  35. package/packages/apps/infinitepay/package.json +1 -1
  36. package/packages/apps/jadlog/package.json +1 -1
  37. package/packages/apps/loyalty-points/CHANGELOG.md +1 -0
  38. package/packages/apps/loyalty-points/README.md +1 -0
  39. package/packages/apps/loyalty-points/events.js +1 -0
  40. package/packages/apps/loyalty-points/lib/functions-lib/get-program-id.d.ts +5 -0
  41. package/packages/apps/loyalty-points/lib/functions-lib/get-program-id.js +20 -0
  42. package/packages/apps/loyalty-points/lib/functions-lib/get-program-id.js.map +1 -0
  43. package/packages/apps/loyalty-points/lib/functions-lib/handle-loyalty-points-event.d.ts +3 -0
  44. package/packages/apps/loyalty-points/lib/functions-lib/handle-loyalty-points-event.js +172 -0
  45. package/packages/apps/loyalty-points/lib/functions-lib/handle-loyalty-points-event.js.map +1 -0
  46. package/packages/apps/loyalty-points/lib/index.d.ts +1 -0
  47. package/packages/apps/loyalty-points/lib/index.js +2 -0
  48. package/packages/apps/loyalty-points/lib/index.js.map +1 -0
  49. package/packages/apps/loyalty-points/lib/loyalty-create-transaction.d.ts +76 -0
  50. package/packages/apps/loyalty-points/lib/loyalty-create-transaction.js +210 -0
  51. package/packages/apps/loyalty-points/lib/loyalty-create-transaction.js.map +1 -0
  52. package/packages/apps/loyalty-points/lib/loyalty-list-payments.d.ts +3 -0
  53. package/packages/apps/loyalty-points/lib/loyalty-list-payments.js +44 -0
  54. package/packages/apps/loyalty-points/lib/loyalty-list-payments.js.map +1 -0
  55. package/packages/apps/loyalty-points/lib/loyalty-points-events.d.ts +4 -0
  56. package/packages/apps/loyalty-points/lib/loyalty-points-events.js +28 -0
  57. package/packages/apps/loyalty-points/lib/loyalty-points-events.js.map +1 -0
  58. package/packages/apps/loyalty-points/lib/loyalty-points.d.ts +77 -0
  59. package/packages/apps/loyalty-points/lib/loyalty-points.js +12 -0
  60. package/packages/apps/loyalty-points/lib/loyalty-points.js.map +1 -0
  61. package/packages/apps/loyalty-points/package.json +32 -0
  62. package/packages/apps/loyalty-points/src/functions-lib/get-program-id.ts +23 -0
  63. package/packages/apps/loyalty-points/src/functions-lib/handle-loyalty-points-event.ts +207 -0
  64. package/packages/apps/loyalty-points/src/index.ts +1 -0
  65. package/packages/apps/loyalty-points/src/loyalty-create-transaction.ts +241 -0
  66. package/packages/apps/loyalty-points/src/loyalty-list-payments.ts +55 -0
  67. package/packages/apps/loyalty-points/src/loyalty-points-events.ts +41 -0
  68. package/packages/apps/loyalty-points/src/loyalty-points.ts +12 -0
  69. package/packages/apps/loyalty-points/tsconfig.json +6 -0
  70. package/packages/apps/mercadopago/package.json +1 -1
  71. package/packages/apps/pagarme/package.json +1 -1
  72. package/packages/apps/pix/package.json +1 -1
  73. package/packages/apps/tiny-erp/package.json +1 -1
  74. package/packages/cli/package.json +1 -1
  75. package/packages/config/package.json +1 -1
  76. package/packages/emails/package.json +1 -1
  77. package/packages/events/lib/firebase.js +2 -0
  78. package/packages/events/lib/firebase.js.map +1 -1
  79. package/packages/events/package.json +2 -1
  80. package/packages/events/src/firebase.ts +2 -0
  81. package/packages/firebase/lib/config.d.ts +4 -0
  82. package/packages/firebase/lib/config.js +8 -0
  83. package/packages/firebase/lib/config.js.map +1 -1
  84. package/packages/firebase/package.json +1 -1
  85. package/packages/firebase/src/config.ts +9 -0
  86. package/packages/i18n/package.json +1 -1
  87. package/packages/modules/lib/firebase/call-app-module.js +12 -0
  88. package/packages/modules/lib/firebase/call-app-module.js.map +1 -1
  89. package/packages/modules/package.json +2 -1
  90. package/packages/modules/src/firebase/call-app-module.ts +12 -0
  91. package/packages/passport/package.json +1 -1
  92. package/packages/ssr/package.json +2 -1
  93. package/packages/storefront/dist/client/HeaderButtons.8acf8a3b.js +1 -0
  94. package/packages/storefront/dist/client/Prices.9099fe99.js +1 -0
  95. package/packages/storefront/dist/client/{ProductCard.f477b7a1.js → ProductCard.7b68cc35.js} +1 -1
  96. package/packages/storefront/dist/client/assets/{_...slug_.15766f41.css → _...slug_.f19a16ca.css} +1 -1
  97. package/packages/storefront/dist/client/assets/server.55b8d73d.css +1 -0
  98. package/packages/storefront/dist/client/chunks/{HeaderButtons.27ab2180.js → HeaderButtons.cbbb059d.js} +1 -1
  99. package/packages/storefront/dist/client/chunks/{LoginForm.36774236.js → LoginForm.ac2f1b1f.js} +1 -1
  100. package/packages/storefront/dist/client/chunks/{Prices.vue_vue_type_script_setup_true_lang.522e4ac4.js → Prices.vue_vue_type_script_setup_true_lang.c37148c1.js} +1 -1
  101. package/packages/storefront/dist/client/chunks/{_plugin-vue_export-helper.979dc9e3.js → _plugin-vue_export-helper.5ccc5d75.js} +1 -1
  102. package/packages/storefront/dist/client/chunks/{runtime-core.esm-bundler.6c012e5d.js → runtime-core.esm-bundler.d5646b29.js} +1 -1
  103. package/packages/storefront/dist/client/client.9783ef49.js +1 -0
  104. package/packages/storefront/dist/client/sw.js +1 -1
  105. package/packages/storefront/dist/server/entry.mjs +1544 -28
  106. package/packages/storefront/package.json +1 -1
  107. package/packages/storefront/src/lib/pages/_vue.ts +1 -1
  108. package/packages/types/package.json +1 -1
  109. package/packages/storefront/dist/client/HeaderButtons.f1c92fd8.js +0 -1
  110. package/packages/storefront/dist/client/Prices.795d082c.js +0 -1
  111. package/packages/storefront/dist/client/assets/server.4d9646d8.css +0 -1
  112. package/packages/storefront/dist/client/client.8b4e336b.js +0 -1
@@ -0,0 +1,172 @@
1
+ import api from '@cloudcommerce/api';
2
+ import { getFirestore } from 'firebase-admin/firestore';
3
+ import logger from 'firebase-functions/logger';
4
+ import getProgramId from './get-program-id.js';
5
+
6
+ const ECHO_SUCCESS = 'SUCCESS';
7
+ const ECHO_SKIP = 'SKIP';
8
+ const responsePubSub = (response) => {
9
+ logger.log('(App: Loyalty Points): ', response);
10
+ return null;
11
+ };
12
+ const haveEarnedPoints = (pointsList, orderId) => {
13
+ if (pointsList) {
14
+ let hasEarned = false;
15
+ for (let i = 0; i < pointsList.length; i++) {
16
+ const point = pointsList[i];
17
+ if (point.order_id === orderId) {
18
+ hasEarned = true;
19
+ break;
20
+ }
21
+ }
22
+ return hasEarned;
23
+ }
24
+ return false;
25
+ };
26
+ const findPointIndex = (pointsList, pointEntry) => {
27
+ if (pointsList) {
28
+ for (let i = 0; i < pointsList.length; i++) {
29
+ const point = pointsList[i];
30
+ if (point.name === pointEntry.name) {
31
+ return i;
32
+ }
33
+ }
34
+ }
35
+ return null;
36
+ };
37
+ const handleLoyaltyPointsEvent = async (order, programRules) => {
38
+ const orderId = order._id;
39
+ const currentStatus = order.financial_status && order.financial_status.current;
40
+ let isPaid = false;
41
+ let isCancelled = false;
42
+ switch (currentStatus) {
43
+ case 'paid':
44
+ isPaid = true;
45
+ break;
46
+ case 'unauthorized':
47
+ case 'partially_refunded':
48
+ case 'refunded':
49
+ case 'voided':
50
+ isCancelled = true;
51
+ break;
52
+ case 'partially_paid':
53
+ if (order.transactions) {
54
+ order.transactions.forEach((transaction) => {
55
+ if (transaction.payment_method.code !== 'loyalty_points' && transaction.status) {
56
+ switch (transaction.status.current) {
57
+ case 'unauthorized':
58
+ case 'refunded':
59
+ case 'voided':
60
+ isCancelled = true;
61
+ break;
62
+ default:
63
+ break;
64
+ }
65
+ }
66
+ });
67
+ }
68
+ break;
69
+ default:
70
+ break;
71
+ }
72
+ try {
73
+ if (isPaid || isCancelled) {
74
+ // get app configured options
75
+ const { amount, buyers } = order;
76
+ const customerId = buyers && buyers[0] && buyers[0]._id;
77
+ if (customerId) {
78
+ const pointsList = (await api.get(`customers/${customerId}/loyalty_points_entries`)).data;
79
+ if (pointsList) {
80
+ const hasEarnedPoints = haveEarnedPoints(pointsList, orderId);
81
+ if (isPaid && !hasEarnedPoints) {
82
+ for (let i = 0; i < programRules.length; i++) {
83
+ const rule = programRules[i];
84
+ if (amount.subtotal) {
85
+ if (!rule.min_subtotal_to_earn || rule.min_subtotal_to_earn <= amount.subtotal) {
86
+ const pointsValue = ((rule.earn_percentage || 1) / 100)
87
+ * (amount.subtotal - (amount.discount || 0));
88
+ let validThru;
89
+ if (rule.expiration_days > 0) {
90
+ const d = new Date();
91
+ d.setDate(d.getDate() + rule.expiration_days);
92
+ validThru = d.toISOString();
93
+ }
94
+ const data = {
95
+ name: rule.name,
96
+ program_id: getProgramId(rule, i),
97
+ earned_points: pointsValue,
98
+ active_points: pointsValue,
99
+ ratio: rule.ratio || 1,
100
+ valid_thru: validThru,
101
+ order_id: orderId,
102
+ }; // TODO: set the correct type
103
+ // eslint-disable-next-line no-await-in-loop
104
+ await api.post(`customers/${customerId}/loyalty_points_entries`, data);
105
+ return responsePubSub(ECHO_SUCCESS);
106
+ }
107
+ }
108
+ }
109
+ }
110
+ if (isCancelled && hasEarnedPoints) {
111
+ for (let i = 0; i < pointsList.length; i++) {
112
+ if (pointsList[i].order_id === orderId) {
113
+ // eslint-disable-next-line no-await-in-loop
114
+ await api.delete(`customers/${customerId}/loyalty_points_entries/${i}`);
115
+ }
116
+ }
117
+ return responsePubSub(ECHO_SUCCESS);
118
+ }
119
+ }
120
+ if (isCancelled) {
121
+ const documentRef = getFirestore().doc(`billedPoints/${orderId}`);
122
+ const documentSnapshot = await documentRef.get();
123
+ if (documentSnapshot.exists) {
124
+ const usedPointsEntries = documentSnapshot.get('usedPointsEntries');
125
+ documentRef.delete();
126
+ if (Array.isArray(usedPointsEntries)) {
127
+ for (let i = 0; i < usedPointsEntries.length; i++) {
128
+ const pointsEntry = usedPointsEntries[i];
129
+ const pointsToRefund = pointsEntry.original_active_points
130
+ - pointsEntry.active_points;
131
+ if (pointsToRefund > 0) {
132
+ const pointIndex = findPointIndex(pointsList, pointsEntry);
133
+ if (pointIndex && pointsList) {
134
+ const activePoints = pointsList[pointIndex].active_points;
135
+ const body = {
136
+ active_points: activePoints + pointsToRefund,
137
+ };
138
+ // eslint-disable-next-line no-await-in-loop
139
+ await api.patch(`customers/${customerId}/loyalty_points_entries/${pointIndex}`, body);
140
+ return responsePubSub(ECHO_SUCCESS);
141
+ }
142
+ }
143
+ }
144
+ const transaction = order.transactions
145
+ && order.transactions.find((transactionFound) => {
146
+ return transactionFound.payment_method.code === 'loyalty_points';
147
+ });
148
+ if (transaction) {
149
+ const bodyPaymentHistory = {
150
+ transaction_id: transaction._id,
151
+ date_time: new Date().toISOString(),
152
+ status: currentStatus?.startsWith('partially') ? 'refunded' : currentStatus,
153
+ customer_notified: true,
154
+ }; // TODO: incompatible type=> amount and status
155
+ await api.post(`orders/${orderId}/payments_history`, bodyPaymentHistory);
156
+ }
157
+ }
158
+ }
159
+ }
160
+ }
161
+ return responsePubSub('');
162
+ }
163
+ // not paid nor cancelled
164
+ return responsePubSub(ECHO_SKIP);
165
+ } catch (err) {
166
+ logger.error('(App Loyalty Points) Error =>', err);
167
+ throw err;
168
+ }
169
+ };
170
+
171
+ export default handleLoyaltyPointsEvent;
172
+ // # sourceMappingURL=handle-loyalty-points-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle-loyalty-points-event.js","sourceRoot":"","sources":["../../src/functions-lib/handle-loyalty-points-event.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from './loyalty-points';
@@ -0,0 +1,2 @@
1
+ export * from './loyalty-points.js';
2
+ // # sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,76 @@
1
+ import type { AppModuleBody } from '@cloudcommerce/types';
2
+ declare const _default: (appData: AppModuleBody) => Promise<{
3
+ status: number;
4
+ redirect_to_payment: boolean;
5
+ transaction: {
6
+ payment_link?: string | undefined;
7
+ payment_instructions?: string | undefined;
8
+ intermediator?: {
9
+ transaction_id?: string | undefined;
10
+ transaction_code?: string | undefined;
11
+ transaction_reference?: string | undefined;
12
+ payment_method?: {
13
+ code: string;
14
+ name?: string | undefined;
15
+ } | undefined;
16
+ buyer_id?: string | undefined;
17
+ } | undefined;
18
+ credit_card?: {
19
+ holder_name?: string | undefined;
20
+ avs_result_code?: string | null | undefined;
21
+ cvv_result_code?: string | null | undefined;
22
+ bin?: number | undefined;
23
+ company?: string | undefined;
24
+ last_digits?: string | undefined;
25
+ token?: string | undefined;
26
+ error_code?: "incorrect_number" | "invalid_number" | "invalid_expiry_date" | "invalid_cvc" | "expired_card" | "incorrect_cvc" | "incorrect_zip" | "incorrect_address" | "card_declined" | "processing_error" | "call_issuer" | "pick_up_card" | undefined;
27
+ } | undefined;
28
+ banking_billet?: {
29
+ code?: string | undefined;
30
+ valid_thru?: string | undefined;
31
+ text_lines?: string[] | undefined;
32
+ link?: string | undefined;
33
+ } | undefined;
34
+ loyalty_points?: {
35
+ name?: string | undefined;
36
+ program_id: string;
37
+ points_value: number;
38
+ ratio?: number | undefined;
39
+ } | undefined;
40
+ currency_id?: string | undefined;
41
+ currency_symbol?: string | undefined;
42
+ discount?: number | undefined;
43
+ amount: number;
44
+ installments?: {
45
+ number: number;
46
+ value?: number | undefined;
47
+ tax?: boolean | undefined;
48
+ total?: number | undefined;
49
+ } | undefined;
50
+ creditor_fees?: {
51
+ installment?: number | undefined;
52
+ operational?: number | undefined;
53
+ intermediation?: number | undefined;
54
+ other?: number | undefined;
55
+ } | undefined;
56
+ status?: {
57
+ updated_at?: string | undefined;
58
+ current: "authorized" | "unauthorized" | "pending" | "under_analysis" | "paid" | "in_dispute" | "refunded" | "voided" | "unknown";
59
+ } | undefined;
60
+ flags?: string[] | undefined;
61
+ custom_fields?: {
62
+ field: string;
63
+ value: string;
64
+ }[] | undefined;
65
+ notes?: string | undefined;
66
+ };
67
+ error?: undefined;
68
+ message?: undefined;
69
+ } | {
70
+ error: string;
71
+ message: any;
72
+ status?: undefined;
73
+ redirect_to_payment?: undefined;
74
+ transaction?: undefined;
75
+ }>;
76
+ export default _default;
@@ -0,0 +1,210 @@
1
+ import api from '@cloudcommerce/api';
2
+ import { getFirestore } from 'firebase-admin/firestore';
3
+ import logger from 'firebase-functions/logger';
4
+ import getProgramId from './functions-lib/get-program-id.js';
5
+
6
+ const collectionRef = getFirestore().collection('billedPoints');
7
+ const updateTransactionStatus = (orderId) => {
8
+ setTimeout(async () => {
9
+ const order = (await api.get(`orders/${orderId}`)).data;
10
+ // appSdk.apiRequest(storeId, `/orders/${orderId}.json`).then(({ response }) => {
11
+ const { transactions } = order;
12
+ if (transactions) {
13
+ const transaction = transactions.find((transactionFound) => {
14
+ return transactionFound.payment_method.code === 'loyalty_points';
15
+ });
16
+ if (transaction) {
17
+ const bodyPaymentHistory = {
18
+ transaction_id: transaction._id,
19
+ date_time: new Date().toISOString(),
20
+ status: 'paid',
21
+ customer_notified: true,
22
+ }; // TODO: incompatible type=> amount and status;
23
+ await api.post(`orders/${orderId}/payments_history`, bodyPaymentHistory);
24
+ }
25
+ }
26
+ }, 500);
27
+ };
28
+ const handleUpdatedPoints = (
29
+ endpoint, // TODO: endpoint type not string compatible
30
+ body,
31
+ orderId,
32
+ usedPointsEntries,
33
+ timeout = 400,
34
+ isLastRequest = false,
35
+ ) => {
36
+ setTimeout(async () => {
37
+ await api.patch(endpoint, body);
38
+ // appSdk.apiRequest(storeId, endpoint, 'PATCH', data).then(() => {
39
+ logger.log(`#(App Loyalty Points): ${orderId} ${endpoint} => ${JSON.stringify(body)}`);
40
+ if (isLastRequest) {
41
+ updateTransactionStatus(orderId);
42
+ collectionRef.doc(orderId).set({ usedPointsEntries });
43
+ }
44
+ // });
45
+ }, timeout);
46
+ };
47
+
48
+ export default async (appData) => {
49
+ const { application, storeId } = appData;
50
+ const { params } = appData;
51
+ // app configured options
52
+ const appConfig = { ...application.data, ...application.hidden_data };
53
+ const { lang, amount } = params;
54
+ // setup required `transaction` response object
55
+ const transaction = {
56
+ amount: amount.total,
57
+ };
58
+ if (params.payment_method.code === 'loyalty_points') {
59
+ const pointsApplied = params.loyalty_points_applied;
60
+ const programsRules = appConfig.programs_rules;
61
+ if (pointsApplied && Array.isArray(programsRules) && programsRules.length) {
62
+ // for (const programId in pointsApplied) {
63
+ Object.keys(pointsApplied).forEach((programId) => {
64
+ const pointsValue = pointsApplied[programId];
65
+ if (pointsValue > 0) {
66
+ const programRule = programsRules.find((programRuleFound, index) => {
67
+ if (programRuleFound) {
68
+ programRuleFound.program_id = getProgramId(programRuleFound, index);
69
+ return programId === programRuleFound.program_id;
70
+ }
71
+ return false;
72
+ });
73
+ if (programRule) {
74
+ const ratio = programRule.ratio || 1;
75
+ transaction.loyalty_points = {
76
+ name: programRule.name,
77
+ program_id: programRule.program_id,
78
+ ratio,
79
+ points_value: programRule.max_points < pointsValue
80
+ ? programRule.max_points
81
+ : pointsValue,
82
+ };
83
+ transaction.amount = pointsValue * ratio;
84
+ }
85
+ }
86
+ });
87
+ }
88
+ }
89
+ if (transaction.amount) {
90
+ const loyaltyPoints = transaction.loyalty_points;
91
+ const customerId = params.buyer.customer_id;
92
+ const orderId = params.order_id;
93
+ const usedPointsEntries = [];
94
+ try {
95
+ const customer = (await api.get(`customers/${customerId}`)).data;
96
+ // return appSdk.apiRequest(storeId, `/customers/${customerId}.json`)
97
+ // .then(({ response }) => {
98
+ const pointsEntries = customer.loyalty_points_entries;
99
+ let pointsToConsume = loyaltyPoints?.points_value;
100
+ if (pointsEntries && pointsToConsume) {
101
+ pointsEntries.sort((a, b) => {
102
+ let value = 0;
103
+ if (a.valid_thru && b.valid_thru) {
104
+ if (a.valid_thru < b.valid_thru) {
105
+ value = -1;
106
+ } else if (a.valid_thru > b.valid_thru) {
107
+ value = 1;
108
+ }
109
+ }
110
+ return value;
111
+ });
112
+ for (let i = 0; i < pointsEntries.length; i++) {
113
+ if (pointsToConsume <= 0) {
114
+ break;
115
+ }
116
+ const pointsEntry = pointsEntries[i];
117
+ if (pointsEntry.program_id === loyaltyPoints?.program_id) {
118
+ const validThru = pointsEntry.valid_thru;
119
+ const activePoints = pointsEntry.active_points;
120
+ if (activePoints > 0 && (!validThru || new Date(validThru).getTime() >= Date.now())) {
121
+ const pointsDiff = activePoints - pointsToConsume;
122
+ if (pointsDiff > 0 && pointsDiff < 0.01) {
123
+ pointsToConsume = activePoints;
124
+ }
125
+ if (pointsToConsume >= activePoints) {
126
+ pointsToConsume -= activePoints;
127
+ pointsEntry.active_points = 0;
128
+ if (pointsToConsume < 0.02) {
129
+ pointsToConsume = 0;
130
+ }
131
+ } else {
132
+ pointsEntry.active_points -= pointsToConsume;
133
+ pointsToConsume = 0;
134
+ }
135
+ usedPointsEntries.push({
136
+ ...pointsEntry,
137
+ original_active_points: activePoints,
138
+ });
139
+ }
140
+ }
141
+ }
142
+ if (pointsToConsume <= 0) {
143
+ if (usedPointsEntries.length <= 3) {
144
+ usedPointsEntries.forEach((pointsEntry, i) => {
145
+ /* Obs:
146
+ Store api v2 => loyalty_points_entries do not have id,
147
+ but change can be done by index
148
+ */
149
+ const endpoint = `customers/${customerId}/loyalty_points_entries/${i}`;
150
+ const body = {
151
+ active_points: pointsEntry.active_points,
152
+ };
153
+ handleUpdatedPoints(endpoint, body, orderId, usedPointsEntries, (i + 1) * 400, i + 1 === usedPointsEntries.length);
154
+ });
155
+ } else {
156
+ const endpoint = `customers/${customerId}`;
157
+ const body = {
158
+ loyalty_points_entries: pointsEntries,
159
+ };
160
+ handleUpdatedPoints(endpoint, body, orderId, usedPointsEntries, 400, true);
161
+ }
162
+ }
163
+ }
164
+ transaction.status = {
165
+ current: pointsToConsume && pointsToConsume <= 0 ? 'authorized' : 'unauthorized',
166
+ };
167
+ return {
168
+ status: 200,
169
+ redirect_to_payment: false,
170
+ transaction,
171
+ };
172
+ } catch (error) {
173
+ // try to debug request error
174
+ const errCode = 'POINTS_TRANSACTION_ERR';
175
+ let { message } = error;
176
+ const err = {
177
+ message: `CREATE_TRANSACTION_ERR #${storeId} - ${orderId} => ${message}`,
178
+ payment: '',
179
+ status: 0,
180
+ response: '',
181
+ usedPointsEntries,
182
+ };
183
+ if (error.response) {
184
+ const { status, data } = error.response;
185
+ err.status = status;
186
+ if (status !== 401 && status !== 403) {
187
+ if (typeof data === 'object' && data) {
188
+ err.response = JSON.stringify(data);
189
+ } else {
190
+ err.response = data;
191
+ }
192
+ }
193
+ if (data && data.user_message) {
194
+ message = lang ? data.user_message[lang] : data.user_message.en_us;
195
+ }
196
+ }
197
+ logger.error(err);
198
+ return {
199
+ error: errCode,
200
+ message,
201
+ };
202
+ }
203
+ }
204
+ return {
205
+ status: 200,
206
+ redirect_to_payment: false,
207
+ transaction,
208
+ };
209
+ };
210
+ // # sourceMappingURL=loyalty-create-transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loyalty-create-transaction.js","sourceRoot":"","sources":["../src/loyalty-create-transaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { AppModuleBody, ListPaymentsResponse } from '@cloudcommerce/types';
2
+ declare const _default: (data: AppModuleBody) => ListPaymentsResponse;
3
+ export default _default;
@@ -0,0 +1,44 @@
1
+ import getProgramId from './functions-lib/get-program-id.js';
2
+
3
+ export default (data) => {
4
+ const { application } = data;
5
+ const { params } = data;
6
+ const appData = {
7
+ ...application.data,
8
+ ...application.hidden_data,
9
+ };
10
+ // const { storeId } = req
11
+ // setup basic required response object
12
+ const response = {
13
+ payment_gateways: [],
14
+ };
15
+ const label = params.lang === 'pt_br' || !params.lang
16
+ ? 'Pontos de fidelidade'
17
+ : 'Loyalty points';
18
+ response.payment_gateways.push({
19
+ type: 'payment',
20
+ payment_method: {
21
+ code: 'loyalty_points',
22
+ name: label,
23
+ },
24
+ label,
25
+ });
26
+ if (Array.isArray(appData.programs_rules)) {
27
+ const pointsPrograms = {};
28
+ appData.programs_rules.forEach((programRule, index) => {
29
+ const programId = getProgramId(programRule, index);
30
+ pointsPrograms[programId] = {
31
+ name: programRule.name,
32
+ ratio: programRule.ratio || 1,
33
+ max_points: programRule.max_points,
34
+ min_subtotal_to_earn: programRule.min_subtotal_to_earn,
35
+ earn_percentage: programRule.earn_percentage,
36
+ };
37
+ });
38
+ if (Object.keys(pointsPrograms).length) {
39
+ response.loyalty_points_programs = pointsPrograms;
40
+ }
41
+ }
42
+ return response;
43
+ };
44
+ // # sourceMappingURL=loyalty-list-payments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loyalty-list-payments.js","sourceRoot":"","sources":["../src/loyalty-list-payments.ts"],"names":[],"mappings":"AAKA,OAAO,YAAY,MAAM,gCAAgC,CAAC;AAE1D,eAAe,CAAC,IAAmB,EAAE,EAAE;IACrC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,MAA4B,CAAC;IAEjD,MAAM,OAAO,GAAG;QACd,GAAG,WAAW,CAAC,IAAI;QACnB,GAAG,WAAW,CAAC,WAAW;KAC3B,CAAC;IAEF,0BAA0B;IAC1B,uCAAuC;IACvC,MAAM,QAAQ,GAAyB;QACrC,gBAAgB,EAAE,EAAE;KACrB,CAAC;IAEF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI;QACnD,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,gBAAgB,CAAC;IAErB,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC7B,IAAI,EAAE,SAAS;QACf,cAAc,EAAE;YACd,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,KAAK;SACZ;QACD,KAAK;KACN,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;QACzC,MAAM,cAAc,GAAG,EAAE,CAAC;QAC1B,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE;YACpD,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YACnD,cAAc,CAAC,SAAS,CAAC,GAAG;gBAC1B,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,KAAK,EAAE,WAAW,CAAC,KAAK,IAAI,CAAC;gBAC7B,UAAU,EAAE,WAAW,CAAC,UAAU;gBAClC,oBAAoB,EAAE,WAAW,CAAC,oBAAoB;gBACtD,eAAe,EAAE,WAAW,CAAC,eAAe;aAC7C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE;YACtC,QAAQ,CAAC,uBAAuB,GAAG,cAAc,CAAC;SACnD;KACF;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import '@cloudcommerce/firebase/lib/init';
2
+ export declare const loyaltypoints: {
3
+ onStoreEvent: any;
4
+ };
@@ -0,0 +1,28 @@
1
+ /* eslint-disable import/prefer-default-export */
2
+ import '@cloudcommerce/firebase/lib/init';
3
+ import { createAppEventsFunction } from '@cloudcommerce/firebase/lib/helpers/pubsub';
4
+ import logger from 'firebase-functions/logger';
5
+ import handleLoyaltyPointsEvent from './functions-lib/handle-loyalty-points-event.js';
6
+
7
+ const handleApiEvent = async ({
8
+ evName, apiEvent, apiDoc, app,
9
+ }) => {
10
+ const resourceId = apiEvent.resource_id;
11
+ logger.info('>> ', resourceId, ' - Action: ', apiEvent.action);
12
+ const key = `${evName}_${resourceId}`;
13
+ const appData = { ...app.data, ...app.hidden_data };
14
+ const programRules = appData.programs_rules;
15
+ if ((Array.isArray(appData.ignore_events)
16
+ && appData.ignore_events.includes(evName))
17
+ || (!Array.isArray(programRules) || !programRules.length)) {
18
+ logger.info('>> ', key, ' - Ignored event');
19
+ return null;
20
+ }
21
+ logger.info(`> Webhook ${resourceId} [${evName}]`);
22
+ return handleLoyaltyPointsEvent(apiDoc, programRules);
23
+ };
24
+
25
+ export const loyaltypoints = {
26
+ onStoreEvent: createAppEventsFunction('loyaltyPoints', handleApiEvent),
27
+ };
28
+ // # sourceMappingURL=loyalty-points-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loyalty-points-events.js","sourceRoot":"","sources":["../src/loyalty-points-events.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,OAAO,kCAAkC,CAAC;AAE1C,OAAO,EACL,uBAAuB,GAExB,MAAM,4CAA4C,CAAC;AACpD,OAAO,MAAM,MAAM,2BAA2B,CAAC;AAC/C,OAAO,wBAAwB,MAAM,6CAA6C,CAAC;AAEnF,MAAM,cAAc,GAAoB,KAAK,EAAE,EAC7C,MAAM,EACN,QAAQ,EACR,MAAM,EACN,GAAG,GACJ,EAAE,EAAE;IACH,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC;IACxC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,UAAU,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IACpD,MAAM,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;IAE5C,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;WAChC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;WACzC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EACzD;QACA,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;KACb;IACD,MAAM,CAAC,IAAI,CAAC,aAAa,UAAU,KAAK,MAAM,GAAG,CAAC,CAAC;IAEnD,OAAO,wBAAwB,CAAC,MAAgB,EAAE,YAAY,CAAC,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,YAAY,EAAE,uBAAuB,CACnC,eAAe,EACf,cAAc,CACR;CACT,CAAC"}
@@ -0,0 +1,77 @@
1
+ import '@cloudcommerce/firebase/lib/init';
2
+ import type { AppModuleBody } from '@cloudcommerce/types';
3
+ export declare const listPayments: (modBody: AppModuleBody) => Promise<import("@cloudcommerce/types").ListPaymentsResponse>;
4
+ export declare const createTransaction: (modBody: AppModuleBody) => Promise<{
5
+ status: number;
6
+ redirect_to_payment: boolean;
7
+ transaction: {
8
+ payment_link?: string | undefined;
9
+ payment_instructions?: string | undefined;
10
+ intermediator?: {
11
+ transaction_id?: string | undefined;
12
+ transaction_code?: string | undefined;
13
+ transaction_reference?: string | undefined;
14
+ payment_method?: {
15
+ code: string;
16
+ name?: string | undefined;
17
+ } | undefined;
18
+ buyer_id?: string | undefined;
19
+ } | undefined;
20
+ credit_card?: {
21
+ holder_name?: string | undefined;
22
+ avs_result_code?: string | null | undefined;
23
+ cvv_result_code?: string | null | undefined;
24
+ bin?: number | undefined;
25
+ company?: string | undefined;
26
+ last_digits?: string | undefined;
27
+ token?: string | undefined;
28
+ error_code?: "incorrect_number" | "invalid_number" | "invalid_expiry_date" | "invalid_cvc" | "expired_card" | "incorrect_cvc" | "incorrect_zip" | "incorrect_address" | "card_declined" | "processing_error" | "call_issuer" | "pick_up_card" | undefined;
29
+ } | undefined;
30
+ banking_billet?: {
31
+ code?: string | undefined;
32
+ valid_thru?: string | undefined;
33
+ text_lines?: string[] | undefined;
34
+ link?: string | undefined;
35
+ } | undefined;
36
+ loyalty_points?: {
37
+ name?: string | undefined;
38
+ program_id: string;
39
+ points_value: number;
40
+ ratio?: number | undefined;
41
+ } | undefined;
42
+ currency_id?: string | undefined;
43
+ currency_symbol?: string | undefined;
44
+ discount?: number | undefined;
45
+ amount: number;
46
+ installments?: {
47
+ number: number;
48
+ value?: number | undefined;
49
+ tax?: boolean | undefined;
50
+ total?: number | undefined;
51
+ } | undefined;
52
+ creditor_fees?: {
53
+ installment?: number | undefined;
54
+ operational?: number | undefined;
55
+ intermediation?: number | undefined;
56
+ other?: number | undefined;
57
+ } | undefined;
58
+ status?: {
59
+ updated_at?: string | undefined;
60
+ current: "authorized" | "unauthorized" | "pending" | "under_analysis" | "paid" | "in_dispute" | "refunded" | "voided" | "unknown";
61
+ } | undefined;
62
+ flags?: string[] | undefined;
63
+ custom_fields?: {
64
+ field: string;
65
+ value: string;
66
+ }[] | undefined;
67
+ notes?: string | undefined;
68
+ };
69
+ error?: undefined;
70
+ message?: undefined;
71
+ } | {
72
+ error: string;
73
+ message: any;
74
+ status?: undefined;
75
+ redirect_to_payment?: undefined;
76
+ transaction?: undefined;
77
+ }>;