cordova-plugin-unvired-logger 0.0.6 → 0.0.7

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cordova-plugin-unvired-logger",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "description": "A logger plugin for Electron, Android, Browser, and iOS that appends logs to log.txt files organized by user ID.",
5
5
  "cordova": {
6
6
  "id": "cordova-plugin-unvired-logger",
package/plugin.xml CHANGED
@@ -1,5 +1,5 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <plugin id="cordova-plugin-unvired-logger" version="0.0.6"
2
+ <plugin id="cordova-plugin-unvired-logger" version="0.0.7"
3
3
  xmlns="http://apache.org/cordova/ns/plugins/1.0"
4
4
  xmlns:android="http://schemas.android.com/apk/res/android">
5
5
 
@@ -15,230 +15,179 @@ let defaultLogLevel = LogLevel.Info;
15
15
  const getStorageKey = (userId, fileName) => `unvired_logger_${userId}_${fileName}`;
16
16
  const getLogLevelKey = (userId) => `unvired_logger_${userId}_level`;
17
17
 
18
- function logDebug(args) {
19
- return loggerWithLevel(args);
18
+ module.exports.logDebug = async function (successCallback, errorCallback, args) {
19
+ loggerWithLevel(successCallback, errorCallback, args);
20
20
  }
21
21
 
22
- function logError(args) {
23
- return loggerWithLevel(args);
22
+ module.exports.logError = async function (successCallback, errorCallback, args) {
23
+ loggerWithLevel(successCallback, errorCallback, args);
24
24
  }
25
25
 
26
- function logInfo(args) {
27
- return loggerWithLevel(args);
26
+ module.exports.logInfo = async function (successCallback, errorCallback, args) {
27
+ loggerWithLevel(successCallback, errorCallback, args);
28
28
  }
29
29
 
30
- function setLogLevel(level) {
31
- return new Promise((resolve) => {
32
- // If level is an array (from Cordova), extract the first element
33
- if (Array.isArray(level)) {
34
- defaultLogLevel = level[0];
35
- } else {
36
- defaultLogLevel = level;
37
- }
38
- resolve();
39
- });
30
+ module.exports.setLogLevel = function(successCallback, errorCallback, level) {
31
+ // If level is an array (from Cordova), extract the first element
32
+ if (Array.isArray(level)) {
33
+ defaultLogLevel = level[0];
34
+ } else {
35
+ defaultLogLevel = level;
36
+ }
37
+ successCallback("")
40
38
  }
41
39
 
42
- function getLogLevel() {
43
- return new Promise((resolve) => {
44
- resolve(defaultLogLevel);
45
- });
40
+ module.exports.getLogLevel = function(successCallback, errorCallback) {
41
+ successCallback(defaultLogLevel)
46
42
  }
47
43
 
48
- function getLogFileURL(args) {
44
+ module.exports.getLogFileURL = function(successCallback, errorCallback, args) {
49
45
  // In browser, we return a data URL or storage reference
50
- return `browser://${getStorageKey(args[0].userId, LOG_FILE_NAME)}`;
46
+ successCallback(`browser://${getStorageKey(args[0].userId, LOG_FILE_NAME)}`);
51
47
  }
52
48
 
53
- function getLogFileContent(args) {
54
- return new Promise((resolve, reject) => {
55
- try {
56
- const userId = args[0].userId;
57
- const storageKey = getStorageKey(userId, LOG_FILE_NAME);
58
- const content = localStorage.getItem(storageKey) || '';
59
- resolve(content);
60
- } catch (err) {
61
- reject(new Error(`Failed to read log file: ${err.message}`));
62
- }
63
- });
49
+ module.exports.getLogFileContent = async function (successCallback, errorCallback, args) {
50
+ try {
51
+ const userId = args[0].userId;
52
+ const storageKey = getStorageKey(userId, LOG_FILE_NAME);
53
+ const content = localStorage.getItem(storageKey) || '';
54
+ successCallback(content);
55
+ } catch (err) {
56
+ errorCallback(new Error(`Failed to read log file: ${err.message}`));
57
+ }
64
58
  }
65
59
 
66
- function clearLogFile(args) {
67
- return new Promise((resolve, reject) => {
68
- try {
69
- const userId = args[0].userId;
70
- const storageKey = getStorageKey(userId, LOG_FILE_NAME);
71
- localStorage.removeItem(storageKey);
72
- resolve();
73
- } catch (err) {
74
- reject(new Error(`Failed to clear log file: ${err.message}`));
75
- }
76
- });
60
+ module.exports.clearLogFile = async function (successCallback, errorCallback, args) {
61
+ try {
62
+ const userId = args[0].userId;
63
+ const storageKey = getStorageKey(userId, LOG_FILE_NAME);
64
+ localStorage.removeItem(storageKey);
65
+ successCallback();
66
+ } catch (err) {
67
+ errorCallback(new Error(`Failed to clear log file: ${err.message}`));
68
+ }
77
69
  }
78
70
 
79
- function getBackupLogFileURL(args) {
80
- return `browser://${getStorageKey(args[0].userId, BACKUP_LOG_FILE_NAME)}`;
71
+ module.exports.getBackupLogFileURL = function (successCallback, errorCallback, args) {
72
+ successCallback(`browser://${getStorageKey(args[0].userId, BACKUP_LOG_FILE_NAME)}`);
81
73
  }
82
74
 
83
- function getBackupLogFileContent(args) {
84
- return new Promise((resolve, reject) => {
85
- try {
86
- const userId = args[0].userId;
87
- const storageKey = getStorageKey(userId, BACKUP_LOG_FILE_NAME);
88
- const content = localStorage.getItem(storageKey) || '';
89
- resolve(content);
90
- } catch (err) {
91
- reject(new Error(`Failed to read backup log file: ${err.message}`));
92
- }
93
- });
75
+ module.exports.getBackupLogFileContent = async function(successCallback, errorCallback, args) {
76
+ try {
77
+ const userId = args[0].userId;
78
+ const storageKey = getStorageKey(userId, BACKUP_LOG_FILE_NAME);
79
+ const content = localStorage.getItem(storageKey) || '';
80
+ successCallback(content);
81
+ } catch (err) {
82
+ errorCallback(new Error(`Failed to read backup log file: ${err.message}`));
83
+ }
94
84
  }
95
85
 
96
- function copyLogToBackup(args) {
97
- return new Promise((resolve, reject) => {
98
- try {
99
- const userId = args[0].userId;
100
- const logStorageKey = getStorageKey(userId, LOG_FILE_NAME);
101
- const backupStorageKey = getStorageKey(userId, BACKUP_LOG_FILE_NAME);
102
- const logContent = localStorage.getItem(logStorageKey) || '';
103
- localStorage.setItem(backupStorageKey, logContent);
104
- resolve();
105
- } catch (err) {
106
- reject(new Error(`Failed to copy log file to backup: ${err.message}`));
107
- }
108
- });
86
+ module.exports.copyLogToBackup = async function(successCallback, errorCallback, args) {
87
+ try {
88
+ const userId = args[0].userId;
89
+ const logStorageKey = getStorageKey(userId, LOG_FILE_NAME);
90
+ const backupStorageKey = getStorageKey(userId, BACKUP_LOG_FILE_NAME);
91
+ const logContent = localStorage.getItem(logStorageKey) || '';
92
+ localStorage.setItem(backupStorageKey, logContent);
93
+ successCallback();
94
+ } catch (err) {
95
+ errorCallback(new Error(`Failed to copy log file to backup: ${err.message}`));
96
+ }
109
97
  }
110
98
 
111
- function loggerWithLevel(args) {
112
- return new Promise(async (resolve, reject) => {
113
- try {
114
- if (!args || !args[0]) {
115
- return reject(new Error("Invalid arguments provided"));
116
- }
117
-
118
- const { userId, level, sourceClass, sourceMethod, message } = args[0];
119
-
120
- if (!userId) return reject(new Error("userId is required"));
121
- if (!level) return reject(new Error("level is required"));
122
- if (!message) return reject(new Error("message is required"));
123
-
124
- // Normalize log levels for comparison
125
- const normalizedDefaultLogLevel = (defaultLogLevel || '').toLowerCase();
126
- const normalizedLevel = (level || '').toLowerCase();
127
-
128
- // Log level filtering using normalized values
129
- if (
130
- (normalizedDefaultLogLevel === LogLevel.Error && (normalizedLevel === LogLevel.Debug || normalizedLevel === LogLevel.Info)) ||
131
- (normalizedDefaultLogLevel === LogLevel.Info && normalizedLevel === LogLevel.Debug)
132
- ) {
133
- return resolve();
134
- }
135
-
136
- await checkAndRotateLogFile(args);
137
-
138
- const currentDate = new Date();
139
- const formatter = new Intl.DateTimeFormat('en-US', {
140
- day: '2-digit', month: '2-digit', year: 'numeric',
141
- hour: '2-digit', minute: '2-digit', second: '2-digit'
142
- });
143
- const localDateString = formatter.format(currentDate);
144
-
145
- const dateUtc = new Date(currentDate.toUTCString());
146
- const utcFormatter = new Intl.DateTimeFormat('en-US', {
147
- day: '2-digit', month: '2-digit', year: 'numeric',
148
- hour: '2-digit', minute: '2-digit', second: '2-digit', timeZone: 'UTC'
149
- });
150
- const utcDateString = utcFormatter.format(dateUtc);
151
-
152
- let data = `${localDateString} | UTC:${utcDateString} | ${getStringFromLevel(level)} | ${sourceClass} | ${sourceMethod} | ${message}\n`;
153
- if (level === LogLevel.Error) {
154
- data = `⭕️⭕️⭕️ ${data}`;
155
- }
156
-
157
- // Log to console for browser debugging
158
- console.log(data);
159
-
160
- // Store in localStorage
161
- const storageKey = getStorageKey(userId, LOG_FILE_NAME);
162
- const existingContent = localStorage.getItem(storageKey) || '';
163
- const newContent = existingContent + data;
164
-
165
- // Check size limit
166
- if (newContent.length > MAX_LOG_SIZE) {
167
- // If content is too large, truncate it
168
- const truncatedContent = newContent.substring(newContent.length - MAX_LOG_SIZE / 2);
169
- localStorage.setItem(storageKey, truncatedContent);
170
- } else {
171
- localStorage.setItem(storageKey, newContent);
172
- }
173
-
174
- resolve(`Logged to browser storage: ${storageKey}`);
175
- } catch (err) {
176
- reject(new Error(`Logging failed: ${err.message}`));
99
+ module.exports.loggerWithLevel = async function(successCallback, errorCallback, args) {
100
+ try {
101
+ if (!args || !args[0]) {
102
+ return errorCallback(new Error("Invalid arguments provided"));
103
+ }
104
+
105
+ const { userId, level, sourceClass, sourceMethod, message } = args[0];
106
+
107
+ if (!userId) return reject(new Error("userId is required"));
108
+ if (!level) return reject(new Error("level is required"));
109
+ if (!message) return reject(new Error("message is required"));
110
+
111
+ // Normalize log levels for comparison
112
+ const normalizedDefaultLogLevel = (defaultLogLevel || '').toLowerCase();
113
+ const normalizedLevel = (level || '').toLowerCase();
114
+
115
+ // Log level filtering using normalized values
116
+ if (
117
+ (normalizedDefaultLogLevel === LogLevel.Error && (normalizedLevel === LogLevel.Debug || normalizedLevel === LogLevel.Info)) ||
118
+ (normalizedDefaultLogLevel === LogLevel.Info && normalizedLevel === LogLevel.Debug)
119
+ ) {
120
+ return successCallback();
121
+ }
122
+
123
+ await checkAndRotateLogFile(args);
124
+
125
+ const currentDate = new Date();
126
+ const formatter = new Intl.DateTimeFormat('en-US', {
127
+ day: '2-digit', month: '2-digit', year: 'numeric',
128
+ hour: '2-digit', minute: '2-digit', second: '2-digit'
129
+ });
130
+ const localDateString = formatter.format(currentDate);
131
+
132
+ const dateUtc = new Date(currentDate.toUTCString());
133
+ const utcFormatter = new Intl.DateTimeFormat('en-US', {
134
+ day: '2-digit', month: '2-digit', year: 'numeric',
135
+ hour: '2-digit', minute: '2-digit', second: '2-digit', timeZone: 'UTC'
136
+ });
137
+ const utcDateString = utcFormatter.format(dateUtc);
138
+
139
+ let data = `${localDateString} | UTC:${utcDateString} | ${getStringFromLevel(level)} | ${sourceClass} | ${sourceMethod} | ${message}\n`;
140
+ if (level === LogLevel.Error) {
141
+ data = `⭕️⭕️⭕️ ${data}`;
177
142
  }
178
- });
143
+
144
+ // Log to console for browser debugging
145
+ console.log(data);
146
+
147
+ // Store in localStorage
148
+ const storageKey = getStorageKey(userId, LOG_FILE_NAME);
149
+ const existingContent = localStorage.getItem(storageKey) || '';
150
+ const newContent = existingContent + data;
151
+
152
+ // Check size limit
153
+ if (newContent.length > MAX_LOG_SIZE) {
154
+ // If content is too large, truncate it
155
+ const truncatedContent = newContent.substring(newContent.length - MAX_LOG_SIZE / 2);
156
+ localStorage.setItem(storageKey, truncatedContent);
157
+ } else {
158
+ localStorage.setItem(storageKey, newContent);
159
+ }
160
+
161
+ successCallback(`Logged to browser storage: ${storageKey}`);
162
+ } catch (err) {
163
+ errorCallback(new Error(`Logging failed: ${err.message}`));
164
+ }
179
165
  }
180
166
 
181
- function getStringFromLevel(level) {
167
+ module.exports.getStringFromLevel = async function (successCallback, errorCallback, level) {
182
168
  switch (level) {
183
- case LogLevel.Info: return 'IMPORTANT';
184
- case LogLevel.Error: return 'ERROR';
185
- case LogLevel.Debug: return 'DEBUG';
186
- default: return '';
169
+ case LogLevel.Info: successCallback('IMPORTANT');return;
170
+ case LogLevel.Error: successCallback('ERROR');return;
171
+ case LogLevel.Debug: successCallback('DEBUG');return;
172
+ default: successCallback('');return;
187
173
  }
188
174
  }
189
175
 
190
- function checkAndRotateLogFile(args) {
191
- return new Promise(async (resolve, reject) => {
192
- try {
193
- const userId = args[0].userId;
194
- const storageKey = getStorageKey(userId, LOG_FILE_NAME);
195
- const content = localStorage.getItem(storageKey) || '';
196
-
197
- if (content.length > MAX_LOG_SIZE) {
198
- const backupStorageKey = getStorageKey(userId, BACKUP_LOG_FILE_NAME);
199
- localStorage.setItem(backupStorageKey, content);
200
- localStorage.setItem(storageKey, '');
201
- }
202
- resolve();
203
- } catch (err) {
204
- reject(new Error(`Failed to rotate log file: ${err.message}`));
176
+ module.exports.checkAndRotateLogFile = async function (successCallback, errorCallback, args) {
177
+ try {
178
+ const userId = args[0].userId;
179
+ const storageKey = getStorageKey(userId, LOG_FILE_NAME);
180
+ const content = localStorage.getItem(storageKey) || '';
181
+
182
+ if (content.length > MAX_LOG_SIZE) {
183
+ const backupStorageKey = getStorageKey(userId, BACKUP_LOG_FILE_NAME);
184
+ localStorage.setItem(backupStorageKey, content);
185
+ localStorage.setItem(storageKey, '');
205
186
  }
206
- });
187
+ successCallback();
188
+ } catch (err) {
189
+ errorCallback(new Error(`Failed to rotate log file: ${err.message}`));
190
+ }
207
191
  }
208
192
 
209
- // Export for browser environment
210
- if (typeof module !== 'undefined' && module.exports) {
211
- module.exports = {
212
- logDebug,
213
- logError,
214
- logInfo,
215
- setLogLevel,
216
- getLogLevel,
217
- getLogFileContent,
218
- clearLogFile,
219
- getBackupLogFileContent,
220
- LogLevel,
221
- copyLogToBackup,
222
- getLogFileURL,
223
- getBackupLogFileURL,
224
- };
225
- require('cordova/exec/proxy').add('UnviredLogger', module.exports);
226
- } else if (typeof window !== 'undefined') {
227
- // Browser environment
228
- window.UnviredLogger = {
229
- logDebug,
230
- logError,
231
- logInfo,
232
- setLogLevel,
233
- getLogLevel,
234
- getLogFileContent,
235
- clearLogFile,
236
- getBackupLogFileContent,
237
- LogLevel,
238
- copyLogToBackup,
239
- getLogFileURL,
240
- getBackupLogFileURL,
241
- };
242
- window.Logger = window.UnviredLogger;
243
- require('cordova/exec/proxy').add('UnviredLogger', window.Logger);
244
- }
193
+ require('cordova/exec/proxy').add('Logger', module.exports);