akeyless-server-commons 1.0.76 → 1.0.78

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 (85) hide show
  1. package/dist/cjs/helpers/global_helpers.d.ts +0 -1
  2. package/dist/cjs/helpers/global_helpers.js +1 -5
  3. package/dist/cjs/helpers/global_helpers.js.map +1 -1
  4. package/dist/cjs/helpers/tasks.d.ts +12 -0
  5. package/dist/cjs/helpers/tasks.js +62 -0
  6. package/dist/cjs/helpers/tasks.js.map +1 -0
  7. package/dist/cjs/managers/cacche_manager2.d.ts +18 -0
  8. package/dist/cjs/managers/cacche_manager2.js +41 -0
  9. package/dist/cjs/managers/cacche_manager2.js.map +1 -0
  10. package/dist/cjs/managers/socket_manager.d.ts +34 -0
  11. package/dist/cjs/managers/socket_manager.js +222 -0
  12. package/dist/cjs/managers/socket_manager.js.map +1 -0
  13. package/dist/esm/helpers/global_helpers.d.ts +0 -1
  14. package/dist/esm/helpers/global_helpers.js +0 -3
  15. package/dist/esm/helpers/global_helpers.js.map +1 -1
  16. package/dist/esm/helpers/tasks.d.ts +12 -0
  17. package/dist/esm/helpers/tasks.js +58 -0
  18. package/dist/esm/helpers/tasks.js.map +1 -0
  19. package/dist/esm/managers/cacche_manager2.d.ts +18 -0
  20. package/dist/esm/managers/cacche_manager2.js +37 -0
  21. package/dist/esm/managers/cacche_manager2.js.map +1 -0
  22. package/dist/esm/managers/socket_manager.d.ts +34 -0
  23. package/dist/esm/managers/socket_manager.js +219 -0
  24. package/dist/esm/managers/socket_manager.js.map +1 -0
  25. package/package.json +1 -1
  26. package/dist/helpers/boards_helpers.js +0 -11
  27. package/dist/helpers/email_helpers.js +0 -69
  28. package/dist/helpers/firebase_helpers.js +0 -379
  29. package/dist/helpers/global_helpers.js +0 -123
  30. package/dist/helpers/index.js +0 -10
  31. package/dist/helpers/login_helpers.js +0 -18
  32. package/dist/helpers/notification_helpers.js +0 -230
  33. package/dist/helpers/phone_number_helpers.js +0 -88
  34. package/dist/helpers/start.js +0 -43
  35. package/dist/helpers/tasks_helpers.js +0 -125
  36. package/dist/helpers/time_helpers.js +0 -63
  37. package/dist/index.js +0 -5
  38. package/dist/managers/cache_manager.js +0 -27
  39. package/dist/managers/index.js +0 -3
  40. package/dist/managers/logger_manager.js +0 -51
  41. package/dist/managers/translation_manager.js +0 -38
  42. package/dist/middlewares/auth_mw.js +0 -49
  43. package/dist/middlewares/error_handling.js +0 -19
  44. package/dist/middlewares/global_mw.js +0 -50
  45. package/dist/middlewares/index.js +0 -3
  46. package/dist/test.js +0 -1
  47. package/dist/types/enums/global.js +0 -18
  48. package/dist/types/enums/index.js +0 -1
  49. package/dist/types/helpers/boards_helpers.d.ts +0 -7
  50. package/dist/types/helpers/email_helpers.d.ts +0 -2
  51. package/dist/types/helpers/firebase_helpers.d.ts +0 -37
  52. package/dist/types/helpers/global_helpers.d.ts +0 -14
  53. package/dist/types/helpers/index.d.ts +0 -10
  54. package/dist/types/helpers/login_helpers.d.ts +0 -4
  55. package/dist/types/helpers/notification_helpers.d.ts +0 -11
  56. package/dist/types/helpers/phone_number_helpers.d.ts +0 -13
  57. package/dist/types/helpers/start.d.ts +0 -5
  58. package/dist/types/helpers/tasks_helpers.d.ts +0 -20
  59. package/dist/types/helpers/time_helpers.d.ts +0 -26
  60. package/dist/types/index.d.ts +0 -5
  61. package/dist/types/index.js +0 -3
  62. package/dist/types/interfaces/email.js +0 -1
  63. package/dist/types/interfaces/global.js +0 -1
  64. package/dist/types/interfaces/index.js +0 -2
  65. package/dist/types/managers/cache_manager.d.ts +0 -11
  66. package/dist/types/managers/index.d.ts +0 -3
  67. package/dist/types/managers/logger_manager.d.ts +0 -12
  68. package/dist/types/managers/translation_manager.d.ts +0 -14
  69. package/dist/types/middlewares/auth_mw.d.ts +0 -4
  70. package/dist/types/middlewares/error_handling.d.ts +0 -11
  71. package/dist/types/middlewares/global_mw.d.ts +0 -2
  72. package/dist/types/middlewares/index.d.ts +0 -3
  73. package/dist/types/test.d.ts +0 -0
  74. package/dist/types/types/enums/global.d.ts +0 -16
  75. package/dist/types/types/enums/index.d.ts +0 -1
  76. package/dist/types/types/firebase_types.js +0 -1
  77. package/dist/types/types/global.js +0 -1
  78. package/dist/types/types/index.d.ts +0 -3
  79. package/dist/types/types/index.js +0 -2
  80. package/dist/types/types/interfaces/email.d.ts +0 -24
  81. package/dist/types/types/interfaces/global.d.ts +0 -12
  82. package/dist/types/types/interfaces/index.d.ts +0 -2
  83. package/dist/types/types/types/firebase_types.d.ts +0 -30
  84. package/dist/types/types/types/global.d.ts +0 -15
  85. package/dist/types/types/types/index.d.ts +0 -2
@@ -1,230 +0,0 @@
1
- import axios from "axios";
2
- import { cache_manager, logger, translation_manager } from "../managers";
3
- import { add_audit_record } from "./global_helpers";
4
- import { add_document, messaging } from "./firebase_helpers";
5
- import { is_iccid, is_international_phone_number } from "./phone_number_helpers";
6
- import { Twilio } from "twilio";
7
- import { Timestamp } from "firebase-admin/firestore";
8
- import { v4 as uniqId } from "uuid";
9
- import FormData from "form-data";
10
- const send_local_sms = async (recepient, text, details) => {
11
- const { sms_provider: { multisend }, } = cache_manager.getObjectData("nx-settings");
12
- const msgId = uniqId();
13
- let data = new FormData();
14
- data.append("user", multisend.user);
15
- data.append("password", multisend.password);
16
- data.append("from", multisend.from);
17
- data.append("recipient", recepient);
18
- data.append("message", text);
19
- data.append("customermessageid", msgId);
20
- const config = {
21
- method: "post",
22
- maxBodyLength: Infinity,
23
- url: "https://api.multisend.co.il/v2/sendsms",
24
- data: data,
25
- };
26
- const response = await axios(config);
27
- if (response.status !== 200) {
28
- throw `multisend request failed , status: ${response.status} , data: ${JSON.stringify(response.data)}`;
29
- }
30
- if (!response.data.success) {
31
- throw `http request to multisend error ${JSON.stringify(response.data.error)}`;
32
- }
33
- await keep_outgoing_sms(recepient, text, "multisend", msgId, details);
34
- logger.log("send_local_sms. message sent successfully", { number: recepient, text, response: response.data });
35
- return "multisend";
36
- };
37
- const send_international_sms = async (recepient, text, details) => {
38
- const { sms_provider: { twilio }, } = cache_manager.getObjectData("nx-settings");
39
- const twilioClient = new Twilio(twilio.account_sid, twilio.token);
40
- const message = await twilioClient.messages.create({
41
- messagingServiceSid: twilio.messaging_service_sid,
42
- body: text,
43
- to: recepient,
44
- });
45
- if (message.errorMessage) {
46
- throw `twilioClient.messages.create failed: ${message.errorMessage} `;
47
- }
48
- await keep_outgoing_sms(recepient, text, "twilio", message.sid, details);
49
- logger.log("send_international_sms. message sent successfully", { number: recepient, text, response: message });
50
- return "twilio";
51
- };
52
- const login_to_monogoto = async () => {
53
- try {
54
- const { sms_provider: { monogoto }, } = cache_manager.getObjectData("nx-settings");
55
- const data = { UserName: monogoto.user, Password: monogoto.password };
56
- const response = await axios({
57
- method: "post",
58
- url: `https://console.monogoto.io/Auth`,
59
- data,
60
- });
61
- return response.data;
62
- }
63
- catch (error) {
64
- throw `login_to_monogoto failed: ` + error;
65
- }
66
- };
67
- const send_iccid_sms = async (recepient, text, details) => {
68
- const { sms_provider: { monogoto }, } = cache_manager.getObjectData("nx-settings");
69
- const monogoto_auth = await login_to_monogoto();
70
- const data = { Message: text, From: monogoto.from };
71
- const response = await axios({
72
- method: "post",
73
- url: `https://console.monogoto.io/thing/ThingId_ICCID_${recepient}/sms`,
74
- data: data,
75
- headers: {
76
- Authorization: `Bearer ${monogoto_auth.token}`,
77
- apikey: monogoto_auth.CustomerId,
78
- },
79
- });
80
- if (response.status !== 200) {
81
- throw `monogoto request failed , status: ${response.status} , data: ${JSON.stringify(response.data)}`;
82
- }
83
- await keep_outgoing_sms(recepient, text, "monogoto", response.data, details);
84
- logger.log("send_iccid_sms. message sent successfully", { number: recepient, text, response: response.data });
85
- return "monogoto";
86
- };
87
- export const send_sms = async (recepient, text, entity_for_audit, details) => {
88
- try {
89
- const send = async () => {
90
- if (is_iccid(recepient)) {
91
- return await send_iccid_sms(recepient, text, details);
92
- }
93
- if (is_international_phone_number(recepient)) {
94
- return send_international_sms(recepient, text, details);
95
- }
96
- return await send_local_sms(recepient, text, details);
97
- };
98
- const service = await send();
99
- await add_audit_record("send_sms", entity_for_audit || "general", {
100
- recepient,
101
- message: text,
102
- service,
103
- });
104
- }
105
- catch (error) {
106
- logger.error(`${entity_for_audit}, send_sms failed:`, error);
107
- throw `${entity_for_audit}, send_sms failed: ` + error;
108
- }
109
- };
110
- const keep_outgoing_sms = async (recepient, content, service, external_id, details) => {
111
- const timestamp = Timestamp.now();
112
- const data = {
113
- external_id,
114
- content,
115
- recipient: recepient,
116
- service,
117
- timestamp,
118
- status: "new",
119
- };
120
- if (details) {
121
- data.details = details;
122
- }
123
- await add_document("nx-sms-out", data);
124
- };
125
- export const push_event_to_mobile_users = async (event) => {
126
- const units = cache_manager.getArrayData("units");
127
- const users_units = cache_manager.getArrayData("usersUnits");
128
- const mobile_users_app_pro = cache_manager.getArrayData("mobile_users_app_pro");
129
- const app_pro_extra_pushes = cache_manager.getArrayData("app_pro_extra_pushes");
130
- console.log(`units: ${units.length}, users_units: ${users_units.length}, mobile_users_app_pro: ${mobile_users_app_pro.length}, app_pro_extra_pushes: ${app_pro_extra_pushes.length}`);
131
- if (!units.length || !users_units.length || !mobile_users_app_pro.length) {
132
- throw "push_event_to_mobile_users. missing cached data for any of the following: units, usersUnits, mobile_users_app_pro, app_pro_extra_pushes";
133
- }
134
- ///-- main driver
135
- const unit = units.find((unit) => unit.carId == event.car_number);
136
- const main_driver = mobile_users_app_pro.find((user) => user.short_phone_number == unit.userPhone);
137
- ///-- secondary drivers
138
- const secondary_units = users_units.filter((unit) => unit.carId == event.car_number);
139
- const secondary_phone_numbers = secondary_units.map((unit) => unit.phone);
140
- const secondary_drivers = mobile_users_app_pro.filter((user) => secondary_phone_numbers.includes(user.long_phone_number));
141
- ///-- extra users
142
- const extra_uids = app_pro_extra_pushes.filter((doc) => doc.car_number == event.car_number).map((doc) => doc.uid);
143
- const extra_drivers = extra_uids.length > 0 ? mobile_users_app_pro.filter((user) => extra_uids.includes(user.uid)) : [];
144
- const drivers = [main_driver, ...secondary_drivers, ...extra_drivers];
145
- for (const mobile_user of drivers) {
146
- const source = event.source == "erm" || event.source == "erm2" ? "erm" : event.source;
147
- if (mobile_user.disabled_events?.[event.car_number]?.[source]?.includes(event.event_id)) {
148
- logger.log(`push_event_to_mobile_users. event ${event.event_id} / ${event.event_name} is disabled for user ${mobile_user.uid} / ${mobile_user.short_phone_number}`);
149
- continue;
150
- }
151
- const mobile_user_language = mobile_user.language;
152
- const language = { heb: "he", en: "en", ru: "ru" }[mobile_user_language];
153
- const message_title = translation_manager.get_translation("push_notifications", language, "title", "event_from_device");
154
- const message_body = translation_manager.get_translation("events_from_device", language, "", event.event_name);
155
- await send_fcm_message(message_title, message_body, [mobile_user.fcm_token], "");
156
- }
157
- };
158
- export const send_fcm_message = async (title, body, fcm_tokens, custom_sound) => {
159
- fcm_tokens = [...new Set(fcm_tokens)];
160
- if (fcm_tokens.length == 0) {
161
- return {
162
- success: false,
163
- response: "No recipients",
164
- };
165
- }
166
- if (fcm_tokens.length == 0) {
167
- return {
168
- success: false,
169
- response: "No recipients",
170
- success_count: 0,
171
- failure_count: 0,
172
- };
173
- }
174
- const message = {
175
- tokens: fcm_tokens,
176
- notification: {
177
- title: title,
178
- body: body,
179
- },
180
- android: {
181
- ttl: 3600 * 1000,
182
- priority: "high",
183
- notification: {
184
- sound: custom_sound || "default",
185
- channelId: custom_sound,
186
- title: title,
187
- body: body,
188
- },
189
- },
190
- apns: {
191
- payload: {
192
- aps: {
193
- sound: custom_sound ? `${custom_sound}.wav` : "default",
194
- alert: {
195
- title: title,
196
- body: body,
197
- },
198
- },
199
- },
200
- },
201
- };
202
- try {
203
- const response = await messaging.sendEachForMulticast(message);
204
- const { successCount: success_count, failureCount: failure_count, responses } = response;
205
- if (success_count && !failure_count) {
206
- logger.log(`send_fcm_message. Successfully sent to all ${success_count} recipients. `, { title, body });
207
- }
208
- else if (success_count && failure_count) {
209
- logger.log(`send_fcm_message. Successfully sent to ${success_count} recipients, but failed to sent to ${failure_count} recipients`, {
210
- title,
211
- body,
212
- responses,
213
- });
214
- }
215
- else {
216
- logger.log(`send_fcm_message. Failed to sent to ${failure_count} recipients`, { title, body, responses: response.responses });
217
- }
218
- return {
219
- success: success_count > 0 && failure_count == 0,
220
- response: JSON.stringify(response.responses),
221
- };
222
- }
223
- catch (error) {
224
- logger.error("Exception", error.message);
225
- return {
226
- success: false,
227
- response: `Exception: ${error.message}`,
228
- };
229
- }
230
- };
@@ -1,88 +0,0 @@
1
- import { SimProvider } from "../types/enums";
2
- export const is_long_phone_number = (phone_number) => {
3
- return phone_number.startsWith("+");
4
- };
5
- export const is_israel_long_phone_number = (phone_number) => {
6
- return phone_number.startsWith("+9725");
7
- };
8
- export const is_international_phone_number = (phone_number) => {
9
- return is_long_phone_number(phone_number) && !is_israel_long_phone_number(phone_number);
10
- };
11
- export const is_iccid = (number) => {
12
- if (number.length < 19 || number.length > 22)
13
- return false;
14
- if (!/^\d+$/.test(number))
15
- return false;
16
- if (!number.startsWith("89"))
17
- return false;
18
- return true;
19
- };
20
- export const convert_to_short_israel_phone = (international_number) => {
21
- return international_number.replace("+972", "0");
22
- };
23
- export const is_sim_provider_partner = (phone_number) => {
24
- const { short_phone_number } = long_short_phone_numbers(phone_number);
25
- return short_phone_number.startsWith("054");
26
- };
27
- export const is_sim_provider_pelephone = (phone_number) => {
28
- const { short_phone_number } = long_short_phone_numbers(phone_number);
29
- return short_phone_number.startsWith("050");
30
- };
31
- export const is_sim_provider_celcom = (phone_number) => {
32
- const { short_phone_number } = long_short_phone_numbers(phone_number);
33
- return short_phone_number.startsWith("052");
34
- };
35
- export const is_sim_provider_monogoto = (phone_number) => {
36
- return is_iccid(phone_number);
37
- };
38
- export const get_sim_provider = (phone_number) => {
39
- if (is_sim_provider_partner(phone_number)) {
40
- return SimProvider.partner;
41
- }
42
- if (is_sim_provider_pelephone(phone_number)) {
43
- return SimProvider.pelephone;
44
- }
45
- if (is_sim_provider_celcom(phone_number)) {
46
- return SimProvider.celcom;
47
- }
48
- if (is_sim_provider_monogoto(phone_number)) {
49
- return SimProvider.monogoto;
50
- }
51
- return SimProvider.unknown;
52
- };
53
- export const long_short_phone_numbers = (phone_number) => {
54
- phone_number = phone_number.trim();
55
- if (!phone_number.length) {
56
- return {
57
- short_phone_number: phone_number,
58
- long_phone_number: phone_number,
59
- is_israeli: true,
60
- };
61
- }
62
- if (is_iccid(phone_number)) {
63
- return {
64
- short_phone_number: phone_number,
65
- long_phone_number: phone_number,
66
- is_israeli: false,
67
- };
68
- }
69
- let short_phone_number = phone_number;
70
- let long_phone_number = phone_number;
71
- if (phone_number.startsWith("05")) {
72
- short_phone_number = phone_number;
73
- long_phone_number = `+9725${short_phone_number.slice(2)}`;
74
- }
75
- else if (phone_number.startsWith("+972")) {
76
- long_phone_number = phone_number;
77
- short_phone_number = long_phone_number.replace("+9725", "05");
78
- }
79
- else if (phone_number.startsWith("+1")) {
80
- long_phone_number = phone_number;
81
- short_phone_number = long_phone_number.replace("+1", "");
82
- }
83
- return {
84
- short_phone_number,
85
- long_phone_number,
86
- is_israeli: long_phone_number.startsWith("+972"),
87
- };
88
- };
@@ -1,43 +0,0 @@
1
- import express from "express";
2
- import cors from "cors";
3
- import { logger } from "../managers";
4
- import { init_env_variables, init_snapshots } from "./";
5
- import { error_handler } from "../middlewares/error_handling";
6
- export const start_server = async (main_router, project_name, version, port) => {
7
- const app = express();
8
- let env_data = init_env_variables(["mode"]);
9
- port = port || Number(env_data.port);
10
- app.use(cors());
11
- app.use(express.json());
12
- main_router(app);
13
- app.use(error_handler);
14
- return new Promise((resolve, reject) => {
15
- app.listen(port, () => {
16
- logger.log(`Server is running at http://localhost:${port}`);
17
- logger.log("project status", { project_name, version, environment: env_data.mode });
18
- resolve(app);
19
- });
20
- });
21
- };
22
- export const basic_init = async (main_router, project_name, version, port) => {
23
- try {
24
- await init_snapshots();
25
- const app = await start_server(main_router, project_name, version, port);
26
- return app;
27
- }
28
- catch (error) {
29
- logger.error("Error from init function: ", error);
30
- process.exit(1);
31
- }
32
- };
33
- export const nextjs_init = async (project_name, version) => {
34
- try {
35
- await init_snapshots();
36
- console.log("project name:", project_name);
37
- console.log("version :", version);
38
- }
39
- catch (error) {
40
- logger.error("Error from nextjs init function: ", error);
41
- process.exit(1);
42
- }
43
- };
@@ -1,125 +0,0 @@
1
- import { cache_manager, logger } from "../managers";
2
- import { get_document_by_id_optional, set_document } from "./firebase_helpers";
3
- import admin from "firebase-admin";
4
- export var TaskName;
5
- (function (TaskName) {
6
- TaskName["collect_gprs_balances"] = "collect_gprs_balances";
7
- TaskName["send_reset_sms"] = "send_reset_sms";
8
- TaskName["collect_devices_health"] = "collect_devices_health";
9
- TaskName["collect_billing_balance"] = "collect_billing_balance";
10
- })(TaskName || (TaskName = {}));
11
- export var TaskStatus;
12
- (function (TaskStatus) {
13
- TaskStatus["running"] = "running";
14
- TaskStatus["completed"] = "completed";
15
- TaskStatus["failed"] = "failed";
16
- TaskStatus["suspeneded"] = "suspeneded";
17
- })(TaskStatus || (TaskStatus = {}));
18
- const save_task_data_in_cache = (task_name, data) => {
19
- if (Array.isArray(data)) {
20
- cache_manager.setArrayData(task_name, data);
21
- }
22
- else {
23
- cache_manager.setObjectData(task_name, data);
24
- }
25
- };
26
- export const execute_task = async (source, task_name, task, options) => {
27
- try {
28
- await set_document("nx-tasks", task_name, {
29
- source,
30
- status: TaskStatus.running,
31
- started: new Date(),
32
- timestamp: new Date(),
33
- results: "",
34
- }, false);
35
- logger.log(`Task [${task_name}] started`);
36
- const start = performance.now();
37
- const data = await task();
38
- const update = {
39
- status: TaskStatus.completed,
40
- completed: new Date(),
41
- timestamp: new Date(),
42
- };
43
- if (data) {
44
- if (options?.save_in === "storage" && typeof data === "object") {
45
- save_task_data_in_cache(task_name, data);
46
- const url = await keep_task_data_in_storage(task_name, data);
47
- update.data = url;
48
- }
49
- else {
50
- save_task_data_in_cache(task_name, data);
51
- update.data = data;
52
- }
53
- }
54
- await set_document("nx-tasks", task_name, update);
55
- logger.log(`Task [${task_name}] ended. It took ${Math.round(performance.now() - start)} ms`);
56
- }
57
- catch (exception) {
58
- const error_for_db = exception instanceof Error ? exception.message : exception;
59
- logger.error(`Task [${task_name}] error`, error_for_db);
60
- await set_document("nx-tasks", task_name, {
61
- status: TaskStatus.failed,
62
- completed: new Date(),
63
- timestamp: new Date(),
64
- data: `Error: ${error_for_db}`,
65
- });
66
- }
67
- };
68
- export const get_task_data = async (task_name) => {
69
- const cached_data = cache_manager.getArrayData(task_name);
70
- const cached_data_object = cache_manager.getObjectData(task_name, null);
71
- if (cached_data.length > 0) {
72
- return cached_data;
73
- }
74
- if (cached_data_object) {
75
- return cached_data;
76
- }
77
- const task_data = await get_document_by_id_optional("nx-tasks", task_name);
78
- if (typeof task_data?.data === "string" && task_data.data.startsWith("http")) {
79
- const storage_data = await get_task_data_from_storage(task_name);
80
- if (storage_data) {
81
- const value = task_data?.data === "object" && task_data.data ? storage_data : [];
82
- save_task_data_in_cache(task_name, value);
83
- return value;
84
- }
85
- }
86
- const value = typeof task_data?.data === "object" ? task_data.data : null;
87
- if (value) {
88
- save_task_data_in_cache(task_name, value);
89
- }
90
- return value || [];
91
- };
92
- export const get_task_data_from_storage = async (task_name) => {
93
- const bucket = admin.storage().bucket();
94
- const file = bucket.file(`tasks_data/${task_name}.json`);
95
- try {
96
- const [contents] = await file.download();
97
- return JSON.parse(contents.toString("utf-8"));
98
- }
99
- catch (error) {
100
- logger.error("Task error reading file from Firebase Storage:", error);
101
- return null;
102
- }
103
- };
104
- export const keep_task_data_in_storage = async (task_name, data) => {
105
- const bucket = admin.storage().bucket();
106
- const file = bucket.file(`tasks_data/${task_name}.json`);
107
- try {
108
- if (typeof data !== "object") {
109
- throw new Error("Only arrays or objects can be written");
110
- }
111
- const json_string = JSON.stringify(data, null);
112
- await file.save(json_string, {
113
- contentType: "application/json",
114
- });
115
- const [signed_url] = await file.getSignedUrl({
116
- action: "read",
117
- expires: Date.now() + 1000 * 60 * 60 * 24 * 7,
118
- });
119
- return signed_url;
120
- }
121
- catch (error) {
122
- logger.error("Error writing file to Firebase Storage:", error);
123
- return "";
124
- }
125
- };
@@ -1,63 +0,0 @@
1
- import { Timestamp } from "firebase-admin/firestore";
2
- import moment from "moment";
3
- /**
4
- * Converts a Firebase Timestamp object into a formatted string.
5
- *
6
- * @param {firebase_timestamp} firebaseTimestamp - The Firebase timestamp object containing _seconds and _nanoseconds.
7
- * @param {string} [format="DD-MM-YYYY HH:mm:ss"] - Optional the format string used to format the date. Default is "DD-MM-YYYY HH:mm:ss".
8
- * @returns {string} - A formatted date string according to the specified format or the default format.
9
- */
10
- export function timestamp_to_string(firebaseTimestamp, format = "DD-MM-YYYY HH:mm:ss") {
11
- const timestamp = new Timestamp(firebaseTimestamp._seconds, firebaseTimestamp._nanoseconds);
12
- return moment(timestamp.toDate()).utc().format(format);
13
- }
14
- /**
15
- * Converts a Firebase Timestamp object into milliseconds since the Unix epoch.
16
- *
17
- * @param {firebase_timestamp} firebaseTimestamp - The Firebase timestamp object containing _seconds and _nanoseconds.
18
- * @returns {number} - Time in milliseconds
19
- */
20
- export function timestamp_to_millis(firebaseTimestamp) {
21
- const timestamp = new Timestamp(firebaseTimestamp._seconds, firebaseTimestamp._nanoseconds);
22
- return timestamp.toMillis();
23
- }
24
- export function sort_by_timestamp(a, b, reverse = false) {
25
- return reverse ? timestamp_to_millis(b) - timestamp_to_millis(a) : timestamp_to_millis(a) - timestamp_to_millis(b);
26
- }
27
- export const calculate_time_passed = (datetime) => {
28
- const now = new Date();
29
- const diff_in_milliseconds = Math.max(0, now.getTime() - datetime.getTime());
30
- const seconds_passed = Math.floor(diff_in_milliseconds / 1000);
31
- const minutes_passed = Math.floor(seconds_passed / 60);
32
- const hours_passed = Math.floor(minutes_passed / 60);
33
- const days_passed = Math.floor(hours_passed / 24);
34
- const remaining_hours = hours_passed % 24;
35
- const remaining_minutes = minutes_passed % 60;
36
- const remaining_seconds = seconds_passed % 60;
37
- const pad_zero = (value) => (value < 10 ? `0${value}` : `${value}`);
38
- let parts = [];
39
- if (days_passed > 0)
40
- parts.push(days_passed);
41
- if (remaining_hours > 0 || days_passed > 0)
42
- parts.push(pad_zero(remaining_hours));
43
- parts.push(pad_zero(remaining_minutes));
44
- parts.push(pad_zero(remaining_seconds));
45
- const time_passed_formatted_short = parts.join(":");
46
- parts = [];
47
- if (days_passed > 0)
48
- parts.push(`${days_passed} d`);
49
- if (days_passed > 0 || remaining_hours > 0)
50
- parts.push(`${remaining_hours} h`);
51
- if (days_passed > 0 || remaining_hours > 0 || remaining_minutes > 0)
52
- parts.push(`${remaining_minutes} min`);
53
- parts.push(`${remaining_seconds} sec`);
54
- const time_passed_formatted_long = parts.join(" ");
55
- return {
56
- seconds_passed,
57
- minutes_passed,
58
- hours_passed,
59
- days_passed,
60
- time_passed_formatted_short,
61
- time_passed_formatted_long,
62
- };
63
- };
package/dist/index.js DELETED
@@ -1,5 +0,0 @@
1
- import * as helpers from "./helpers";
2
- import * as managers from "./managers";
3
- import * as middlewares from "./middlewares";
4
- import * as types from "./types";
5
- export { helpers, managers, middlewares, types };
@@ -1,27 +0,0 @@
1
- export class CacheManager {
2
- constructor() {
3
- this.data = {};
4
- }
5
- static getInstance() {
6
- if (!CacheManager.instance) {
7
- CacheManager.instance = new CacheManager();
8
- }
9
- return CacheManager.instance;
10
- }
11
- setArrayData(key, data) {
12
- this.data[key] = data;
13
- }
14
- getArrayData(key) {
15
- if (!this.data[key]) {
16
- return [];
17
- }
18
- return this.data[key];
19
- }
20
- setObjectData(key, data) {
21
- this.data[key] = data;
22
- }
23
- getObjectData(key, default_value = null) {
24
- return this.data[key] || default_value;
25
- }
26
- }
27
- export const cache_manager = CacheManager.getInstance();
@@ -1,3 +0,0 @@
1
- export * from "./cache_manager";
2
- export * from "./translation_manager";
3
- export * from "./logger_manager";
@@ -1,51 +0,0 @@
1
- import moment_timezone from "moment-timezone";
2
- import axios from "axios";
3
- import { isObject } from "lodash";
4
- import { parse_error } from "../helpers";
5
- class LoggerManager {
6
- constructor() { }
7
- static getInstance() {
8
- if (!LoggerManager.instance) {
9
- LoggerManager.instance = new LoggerManager();
10
- }
11
- return LoggerManager.instance;
12
- }
13
- get_date() {
14
- return moment_timezone().tz("Asia/Jerusalem").format("DD/MM/YYYY HH:mm:ss.SS");
15
- }
16
- log(msg, data) {
17
- const is_table = !process.env.KUBERNETES_SERVICE_HOST &&
18
- Array.isArray(data) &&
19
- data.length > 1 &&
20
- data.every((val) => {
21
- if (typeof val === "object" && !Array.isArray(val)) {
22
- return Object.values(val).every((v) => ["string", "number", "boolean"].includes(typeof v) || v === null);
23
- }
24
- return false;
25
- }) &&
26
- data.some((val) => Object.values(val).length > 1);
27
- if (is_table) {
28
- console.log(`${this.get_date()} - `, msg, ": ");
29
- console.table(data);
30
- return;
31
- }
32
- console.log(`${this.get_date()} - ${msg}`, data === undefined ? "" : `: ${isObject(data) || Array.isArray(data) ? JSON.stringify(data) : data}`);
33
- }
34
- error(msg, data) {
35
- if (axios.isAxiosError(data)) {
36
- if (!!data.response?.data) {
37
- console.error(`${this.get_date()} - ${msg}, axios error: ${data.message}, data: ${JSON.stringify(data)}`);
38
- }
39
- else {
40
- console.error(`${this.get_date()} - ${msg}, axios error: ${data.message}`);
41
- }
42
- }
43
- else {
44
- console.error(`${this.get_date()} - ${msg}`, data === undefined ? "" : `: ${JSON.stringify(parse_error(data))}`);
45
- }
46
- }
47
- warn(msg, data) {
48
- console.warn(`${this.get_date()} - ${msg}`, data === undefined ? "" : `: ${JSON.stringify(data)}`);
49
- }
50
- }
51
- export const logger = LoggerManager.getInstance();
@@ -1,38 +0,0 @@
1
- export class TranslationManager {
2
- constructor() {
3
- this.data = {};
4
- }
5
- static getInstance() {
6
- if (!TranslationManager.instance) {
7
- TranslationManager.instance = new TranslationManager();
8
- }
9
- return TranslationManager.instance;
10
- }
11
- setTranslationData(data) {
12
- this.data = data;
13
- }
14
- getTranslationData() {
15
- return this.data;
16
- }
17
- get_translation(scope, lang, entity, key) {
18
- key = entity + (entity === "" ? "" : "__") + key;
19
- return this.data[scope][lang][key] || key;
20
- }
21
- get_sms(lang, entity, key) {
22
- try {
23
- return this.data["sms"][lang][entity + "__" + key];
24
- }
25
- catch (error) {
26
- return "N/A";
27
- }
28
- }
29
- get_email(lang, entity, key) {
30
- try {
31
- return this.data["email"][lang][entity + "__" + key];
32
- }
33
- catch (error) {
34
- return "N/A";
35
- }
36
- }
37
- }
38
- export const translation_manager = TranslationManager.getInstance();