ml-cache 1.0.0
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/LICENSE +21 -0
- package/README.md +599 -0
- package/dist/client.d.ts +175 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +411 -0
- package/dist/client.js.map +1 -0
- package/dist/constants.d.ts +184 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +236 -0
- package/dist/constants.js.map +1 -0
- package/dist/esm/client.d.ts +175 -0
- package/dist/esm/client.d.ts.map +1 -0
- package/dist/esm/client.js +407 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/constants.d.ts +184 -0
- package/dist/esm/constants.d.ts.map +1 -0
- package/dist/esm/constants.js +233 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/index.d.ts +58 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/queue.d.ts +106 -0
- package/dist/esm/queue.d.ts.map +1 -0
- package/dist/esm/queue.js +207 -0
- package/dist/esm/queue.js.map +1 -0
- package/dist/esm/storage/glacier-storage.d.ts +77 -0
- package/dist/esm/storage/glacier-storage.d.ts.map +1 -0
- package/dist/esm/storage/glacier-storage.js +133 -0
- package/dist/esm/storage/glacier-storage.js.map +1 -0
- package/dist/esm/storage/index.d.ts +7 -0
- package/dist/esm/storage/index.d.ts.map +1 -0
- package/dist/esm/storage/index.js +7 -0
- package/dist/esm/storage/index.js.map +1 -0
- package/dist/esm/storage/s3-storage.d.ts +89 -0
- package/dist/esm/storage/s3-storage.d.ts.map +1 -0
- package/dist/esm/storage/s3-storage.js +161 -0
- package/dist/esm/storage/s3-storage.js.map +1 -0
- package/dist/esm/types/index.d.ts +337 -0
- package/dist/esm/types/index.d.ts.map +1 -0
- package/dist/esm/types/index.js +6 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/utils/helpers.d.ts +132 -0
- package/dist/esm/utils/helpers.d.ts.map +1 -0
- package/dist/esm/utils/helpers.js +198 -0
- package/dist/esm/utils/helpers.js.map +1 -0
- package/dist/esm/utils/index.d.ts +8 -0
- package/dist/esm/utils/index.d.ts.map +1 -0
- package/dist/esm/utils/index.js +8 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/logger.d.ts +110 -0
- package/dist/esm/utils/logger.d.ts.map +1 -0
- package/dist/esm/utils/logger.js +177 -0
- package/dist/esm/utils/logger.js.map +1 -0
- package/dist/esm/utils/validator.d.ts +77 -0
- package/dist/esm/utils/validator.d.ts.map +1 -0
- package/dist/esm/utils/validator.js +208 -0
- package/dist/esm/utils/validator.js.map +1 -0
- package/dist/index.d.ts +58 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +100 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +72 -0
- package/dist/queue.d.ts +106 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +211 -0
- package/dist/queue.js.map +1 -0
- package/dist/storage/glacier-storage.d.ts +77 -0
- package/dist/storage/glacier-storage.d.ts.map +1 -0
- package/dist/storage/glacier-storage.js +137 -0
- package/dist/storage/glacier-storage.js.map +1 -0
- package/dist/storage/index.d.ts +7 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +12 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/s3-storage.d.ts +89 -0
- package/dist/storage/s3-storage.d.ts.map +1 -0
- package/dist/storage/s3-storage.js +165 -0
- package/dist/storage/s3-storage.js.map +1 -0
- package/dist/types/index.d.ts +337 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/helpers.d.ts +132 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +215 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +35 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +110 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +181 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/validator.d.ts +77 -0
- package/dist/utils/validator.d.ts.map +1 -0
- package/dist/utils/validator.js +221 -0
- package/dist/utils/validator.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/utils/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Utils barrel export
|
|
3
|
+
* @module ml-cache/utils
|
|
4
|
+
*/
|
|
5
|
+
export { Logger, defaultLogger } from './logger';
|
|
6
|
+
export { ValidationError, validateConfig, validateEvent, validateEventType, validateEventProperties, isValidTimestamp, isValidUUID } from './validator';
|
|
7
|
+
export { generateEventId, generateTimestamp, generateBatchId, createEventMetadata, enrichEvent, generateS3Key, generateGlacierDescription, serializeEventsToNDJSON, deserializeEventsFromNDJSON, calculateEventsSize, calculateRetryDelay, sleep, chunk, deepClone, safeStringify, } from './helpers';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACxJ,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,0BAA0B,EAC1B,uBAAuB,EACvB,2BAA2B,EAC3B,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,EACL,KAAK,EACL,SAAS,EACT,aAAa,GACd,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Utils barrel export
|
|
3
|
+
* @module ml-cache/utils
|
|
4
|
+
*/
|
|
5
|
+
export { Logger, defaultLogger } from './logger';
|
|
6
|
+
export { ValidationError, validateConfig, validateEvent, validateEventType, validateEventProperties, isValidTimestamp, isValidUUID } from './validator';
|
|
7
|
+
export { generateEventId, generateTimestamp, generateBatchId, createEventMetadata, enrichEvent, generateS3Key, generateGlacierDescription, serializeEventsToNDJSON, deserializeEventsFromNDJSON, calculateEventsSize, calculateRetryDelay, sleep, chunk, deepClone, safeStringify, } from './helpers';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACxJ,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,0BAA0B,EAC1B,uBAAuB,EACvB,2BAA2B,EAC3B,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,EACL,KAAK,EACL,SAAS,EACT,aAAa,GACd,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Logger utility for ml-cache SDK
|
|
3
|
+
* @module ml-cache/utils/logger
|
|
4
|
+
*/
|
|
5
|
+
import type { LogLevel, LogConfig, LoggerFunction } from '../types';
|
|
6
|
+
/**
|
|
7
|
+
* Logger class for SDK internal logging
|
|
8
|
+
* @class Logger
|
|
9
|
+
*/
|
|
10
|
+
export declare class Logger {
|
|
11
|
+
/** @private */
|
|
12
|
+
private config;
|
|
13
|
+
/** @private */
|
|
14
|
+
private prefix;
|
|
15
|
+
/**
|
|
16
|
+
* Creates a new Logger instance
|
|
17
|
+
* @param {Partial<LogConfig>} [config] - Logger configuration
|
|
18
|
+
* @param {string} [prefix] - Log message prefix
|
|
19
|
+
*/
|
|
20
|
+
constructor(config?: Partial<LogConfig>, prefix?: string);
|
|
21
|
+
/**
|
|
22
|
+
* Checks if a log level should be output
|
|
23
|
+
* @private
|
|
24
|
+
* @param {LogLevel} level - Log level to check
|
|
25
|
+
* @returns {boolean} Whether the level should be logged
|
|
26
|
+
*/
|
|
27
|
+
private shouldLog;
|
|
28
|
+
/**
|
|
29
|
+
* Formats a log message with timestamp and prefix
|
|
30
|
+
* @private
|
|
31
|
+
* @param {LogLevel} level - Log level
|
|
32
|
+
* @param {string} message - Log message
|
|
33
|
+
* @returns {string} Formatted message
|
|
34
|
+
*/
|
|
35
|
+
private formatMessage;
|
|
36
|
+
/**
|
|
37
|
+
* Outputs a log message
|
|
38
|
+
* @private
|
|
39
|
+
* @param {LogLevel} level - Log level
|
|
40
|
+
* @param {string} message - Log message
|
|
41
|
+
* @param {Record<string, unknown>} [data] - Additional data
|
|
42
|
+
*/
|
|
43
|
+
private log;
|
|
44
|
+
/**
|
|
45
|
+
* Gets the appropriate console method for a log level
|
|
46
|
+
* @private
|
|
47
|
+
* @param {LogLevel} level - Log level
|
|
48
|
+
* @returns {Function} Console method
|
|
49
|
+
*/
|
|
50
|
+
private getConsoleMethod;
|
|
51
|
+
/**
|
|
52
|
+
* Logs a debug message
|
|
53
|
+
* @param {string} message - Debug message
|
|
54
|
+
* @param {Record<string, unknown>} [data] - Additional data
|
|
55
|
+
*/
|
|
56
|
+
debug(message: string, data?: Record<string, unknown>): void;
|
|
57
|
+
/**
|
|
58
|
+
* Logs an info message
|
|
59
|
+
* @param {string} message - Info message
|
|
60
|
+
* @param {Record<string, unknown>} [data] - Additional data
|
|
61
|
+
*/
|
|
62
|
+
info(message: string, data?: Record<string, unknown>): void;
|
|
63
|
+
/**
|
|
64
|
+
* Logs a warning message
|
|
65
|
+
* @param {string} message - Warning message
|
|
66
|
+
* @param {Record<string, unknown>} [data] - Additional data
|
|
67
|
+
*/
|
|
68
|
+
warn(message: string, data?: Record<string, unknown>): void;
|
|
69
|
+
/**
|
|
70
|
+
* Logs an error message
|
|
71
|
+
* @param {string} message - Error message
|
|
72
|
+
* @param {Record<string, unknown>} [data] - Additional data
|
|
73
|
+
*/
|
|
74
|
+
error(message: string, data?: Record<string, unknown>): void;
|
|
75
|
+
/**
|
|
76
|
+
* Updates logger configuration
|
|
77
|
+
* @param {Partial<LogConfig>} config - New configuration
|
|
78
|
+
*/
|
|
79
|
+
setConfig(config: Partial<LogConfig>): void;
|
|
80
|
+
/**
|
|
81
|
+
* Sets the log level
|
|
82
|
+
* @param {LogLevel} level - New log level
|
|
83
|
+
*/
|
|
84
|
+
setLevel(level: LogLevel): void;
|
|
85
|
+
/**
|
|
86
|
+
* Enables logging
|
|
87
|
+
*/
|
|
88
|
+
enable(): void;
|
|
89
|
+
/**
|
|
90
|
+
* Disables logging
|
|
91
|
+
*/
|
|
92
|
+
disable(): void;
|
|
93
|
+
/**
|
|
94
|
+
* Sets a custom logger function
|
|
95
|
+
* @param {LoggerFunction} logger - Custom logger function
|
|
96
|
+
*/
|
|
97
|
+
setCustomLogger(logger: LoggerFunction): void;
|
|
98
|
+
/**
|
|
99
|
+
* Creates a child logger with a new prefix
|
|
100
|
+
* @param {string} childPrefix - Additional prefix for child logger
|
|
101
|
+
* @returns {Logger} New logger instance
|
|
102
|
+
*/
|
|
103
|
+
child(childPrefix: string): Logger;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Default logger instance
|
|
107
|
+
* @constant
|
|
108
|
+
*/
|
|
109
|
+
export declare const defaultLogger: Logger;
|
|
110
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAepE;;;GAGG;AACH,qBAAa,MAAM;IACjB,eAAe;IACf,OAAO,CAAC,MAAM,CAAY;IAE1B,eAAe;IACf,OAAO,CAAC,MAAM,CAAS;IAEvB;;;;OAIG;gBACS,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,GAAE,MAAqB;IAKtE;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAOjB;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IAKrB;;;;;;OAMG;IACH,OAAO,CAAC,GAAG;IAwBX;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;;;OAIG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D;;;;OAIG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D;;;;OAIG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D;;;;OAIG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI;IAI3C;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI/B;;OAEG;IACH,MAAM,IAAI,IAAI;IAId;;OAEG;IACH,OAAO,IAAI,IAAI;IAIf;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAI7C;;;;OAIG;IACH,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;CAGnC;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,QAAe,CAAC"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Logger utility for ml-cache SDK
|
|
3
|
+
* @module ml-cache/utils/logger
|
|
4
|
+
*/
|
|
5
|
+
import { DEFAULT_LOG_CONFIG } from '../constants';
|
|
6
|
+
/**
|
|
7
|
+
* Log level priority map (lower = more verbose)
|
|
8
|
+
* @constant
|
|
9
|
+
*/
|
|
10
|
+
const LOG_LEVEL_PRIORITY = {
|
|
11
|
+
debug: 0,
|
|
12
|
+
info: 1,
|
|
13
|
+
warn: 2,
|
|
14
|
+
error: 3,
|
|
15
|
+
silent: 4,
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Logger class for SDK internal logging
|
|
19
|
+
* @class Logger
|
|
20
|
+
*/
|
|
21
|
+
export class Logger {
|
|
22
|
+
/**
|
|
23
|
+
* Creates a new Logger instance
|
|
24
|
+
* @param {Partial<LogConfig>} [config] - Logger configuration
|
|
25
|
+
* @param {string} [prefix] - Log message prefix
|
|
26
|
+
*/
|
|
27
|
+
constructor(config, prefix = '[ml-cache]') {
|
|
28
|
+
this.config = { ...DEFAULT_LOG_CONFIG, ...config };
|
|
29
|
+
this.prefix = prefix;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Checks if a log level should be output
|
|
33
|
+
* @private
|
|
34
|
+
* @param {LogLevel} level - Log level to check
|
|
35
|
+
* @returns {boolean} Whether the level should be logged
|
|
36
|
+
*/
|
|
37
|
+
shouldLog(level) {
|
|
38
|
+
if (!this.config.enabled) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
return LOG_LEVEL_PRIORITY[level] >= LOG_LEVEL_PRIORITY[this.config.level];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Formats a log message with timestamp and prefix
|
|
45
|
+
* @private
|
|
46
|
+
* @param {LogLevel} level - Log level
|
|
47
|
+
* @param {string} message - Log message
|
|
48
|
+
* @returns {string} Formatted message
|
|
49
|
+
*/
|
|
50
|
+
formatMessage(level, message) {
|
|
51
|
+
const timestamp = new Date().toISOString();
|
|
52
|
+
return `${timestamp} ${this.prefix} [${level.toUpperCase()}] ${message}`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Outputs a log message
|
|
56
|
+
* @private
|
|
57
|
+
* @param {LogLevel} level - Log level
|
|
58
|
+
* @param {string} message - Log message
|
|
59
|
+
* @param {Record<string, unknown>} [data] - Additional data
|
|
60
|
+
*/
|
|
61
|
+
log(level, message, data) {
|
|
62
|
+
if (!this.shouldLog(level)) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (this.config.customLogger) {
|
|
66
|
+
this.config.customLogger(level, message, data);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const formattedMessage = this.formatMessage(level, message);
|
|
70
|
+
const consoleMethod = this.getConsoleMethod(level);
|
|
71
|
+
if (data) {
|
|
72
|
+
consoleMethod(formattedMessage, data);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
consoleMethod(formattedMessage);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Gets the appropriate console method for a log level
|
|
80
|
+
* @private
|
|
81
|
+
* @param {LogLevel} level - Log level
|
|
82
|
+
* @returns {Function} Console method
|
|
83
|
+
*/
|
|
84
|
+
getConsoleMethod(level) {
|
|
85
|
+
switch (level) {
|
|
86
|
+
case 'debug':
|
|
87
|
+
return console.debug.bind(console);
|
|
88
|
+
case 'info':
|
|
89
|
+
return console.info.bind(console);
|
|
90
|
+
case 'warn':
|
|
91
|
+
return console.warn.bind(console);
|
|
92
|
+
case 'error':
|
|
93
|
+
return console.error.bind(console);
|
|
94
|
+
default:
|
|
95
|
+
return console.log.bind(console);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Logs a debug message
|
|
100
|
+
* @param {string} message - Debug message
|
|
101
|
+
* @param {Record<string, unknown>} [data] - Additional data
|
|
102
|
+
*/
|
|
103
|
+
debug(message, data) {
|
|
104
|
+
this.log('debug', message, data);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Logs an info message
|
|
108
|
+
* @param {string} message - Info message
|
|
109
|
+
* @param {Record<string, unknown>} [data] - Additional data
|
|
110
|
+
*/
|
|
111
|
+
info(message, data) {
|
|
112
|
+
this.log('info', message, data);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Logs a warning message
|
|
116
|
+
* @param {string} message - Warning message
|
|
117
|
+
* @param {Record<string, unknown>} [data] - Additional data
|
|
118
|
+
*/
|
|
119
|
+
warn(message, data) {
|
|
120
|
+
this.log('warn', message, data);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Logs an error message
|
|
124
|
+
* @param {string} message - Error message
|
|
125
|
+
* @param {Record<string, unknown>} [data] - Additional data
|
|
126
|
+
*/
|
|
127
|
+
error(message, data) {
|
|
128
|
+
this.log('error', message, data);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Updates logger configuration
|
|
132
|
+
* @param {Partial<LogConfig>} config - New configuration
|
|
133
|
+
*/
|
|
134
|
+
setConfig(config) {
|
|
135
|
+
this.config = { ...this.config, ...config };
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Sets the log level
|
|
139
|
+
* @param {LogLevel} level - New log level
|
|
140
|
+
*/
|
|
141
|
+
setLevel(level) {
|
|
142
|
+
this.config.level = level;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Enables logging
|
|
146
|
+
*/
|
|
147
|
+
enable() {
|
|
148
|
+
this.config.enabled = true;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Disables logging
|
|
152
|
+
*/
|
|
153
|
+
disable() {
|
|
154
|
+
this.config.enabled = false;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Sets a custom logger function
|
|
158
|
+
* @param {LoggerFunction} logger - Custom logger function
|
|
159
|
+
*/
|
|
160
|
+
setCustomLogger(logger) {
|
|
161
|
+
this.config.customLogger = logger;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Creates a child logger with a new prefix
|
|
165
|
+
* @param {string} childPrefix - Additional prefix for child logger
|
|
166
|
+
* @returns {Logger} New logger instance
|
|
167
|
+
*/
|
|
168
|
+
child(childPrefix) {
|
|
169
|
+
return new Logger(this.config, `${this.prefix}:${childPrefix}`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Default logger instance
|
|
174
|
+
* @constant
|
|
175
|
+
*/
|
|
176
|
+
export const defaultLogger = new Logger();
|
|
177
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Validation utilities for ml-cache SDK
|
|
3
|
+
* @module ml-cache/utils/validator
|
|
4
|
+
*/
|
|
5
|
+
import type { MLCacheConfig, MLCacheEvent, S3Config, GlacierConfig, AWSCredentials } from '../types';
|
|
6
|
+
/**
|
|
7
|
+
* Validation error class
|
|
8
|
+
* @class ValidationError
|
|
9
|
+
* @extends Error
|
|
10
|
+
*/
|
|
11
|
+
export declare class ValidationError extends Error {
|
|
12
|
+
/** Error code */
|
|
13
|
+
code: string;
|
|
14
|
+
/** Field that failed validation */
|
|
15
|
+
field?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Creates a new ValidationError
|
|
18
|
+
* @param {string} message - Error message
|
|
19
|
+
* @param {string} [field] - Field that failed validation
|
|
20
|
+
*/
|
|
21
|
+
constructor(message: string, field?: string);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Validates AWS credentials
|
|
25
|
+
* @param {AWSCredentials} credentials - AWS credentials to validate
|
|
26
|
+
* @throws {ValidationError} If credentials are invalid
|
|
27
|
+
*/
|
|
28
|
+
export declare function validateCredentials(credentials: AWSCredentials): void;
|
|
29
|
+
/**
|
|
30
|
+
* Validates S3 configuration
|
|
31
|
+
* @param {S3Config} config - S3 configuration to validate
|
|
32
|
+
* @throws {ValidationError} If configuration is invalid
|
|
33
|
+
*/
|
|
34
|
+
export declare function validateS3Config(config: S3Config): void;
|
|
35
|
+
/**
|
|
36
|
+
* Validates Glacier configuration
|
|
37
|
+
* @param {GlacierConfig} config - Glacier configuration to validate
|
|
38
|
+
* @throws {ValidationError} If configuration is invalid
|
|
39
|
+
*/
|
|
40
|
+
export declare function validateGlacierConfig(config: GlacierConfig): void;
|
|
41
|
+
/**
|
|
42
|
+
* Validates complete SDK configuration
|
|
43
|
+
* @param {MLCacheConfig} config - SDK configuration to validate
|
|
44
|
+
* @throws {ValidationError} If configuration is invalid
|
|
45
|
+
*/
|
|
46
|
+
export declare function validateConfig(config: MLCacheConfig): void;
|
|
47
|
+
/**
|
|
48
|
+
* Validates an event type string
|
|
49
|
+
* @param {string} eventType - Event type to validate
|
|
50
|
+
* @throws {ValidationError} If event type is invalid
|
|
51
|
+
*/
|
|
52
|
+
export declare function validateEventType(eventType: string): void;
|
|
53
|
+
/**
|
|
54
|
+
* Validates event properties
|
|
55
|
+
* @param {Record<string, unknown>} properties - Properties to validate
|
|
56
|
+
* @throws {ValidationError} If properties are invalid
|
|
57
|
+
*/
|
|
58
|
+
export declare function validateEventProperties(properties: Record<string, unknown>): void;
|
|
59
|
+
/**
|
|
60
|
+
* Validates a complete event
|
|
61
|
+
* @param {MLCacheEvent} event - Event to validate
|
|
62
|
+
* @throws {ValidationError} If event is invalid
|
|
63
|
+
*/
|
|
64
|
+
export declare function validateEvent(event: MLCacheEvent): void;
|
|
65
|
+
/**
|
|
66
|
+
* Checks if a value is a valid ISO 8601 timestamp
|
|
67
|
+
* @param {string} timestamp - Timestamp to validate
|
|
68
|
+
* @returns {boolean} Whether the timestamp is valid
|
|
69
|
+
*/
|
|
70
|
+
export declare function isValidTimestamp(timestamp: string): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Checks if a value is a valid UUID
|
|
73
|
+
* @param {string} uuid - UUID to validate
|
|
74
|
+
* @returns {boolean} Whether the UUID is valid
|
|
75
|
+
*/
|
|
76
|
+
export declare function isValidUUID(uuid: string): boolean;
|
|
77
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../src/utils/validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,cAAc,EACf,MAAM,UAAU,CAAC;AASlB;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IAEb,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;OAIG;gBACS,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;CAM5C;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,cAAc,GAAG,IAAI,CA+BrE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,CAsBvD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAkBjE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CA8E1D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAqBzD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,IAAI,CAoBN;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAkBvD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAO3D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQjD"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Validation utilities for ml-cache SDK
|
|
3
|
+
* @module ml-cache/utils/validator
|
|
4
|
+
*/
|
|
5
|
+
import { ERROR_CODES, EVENT_TYPE_PATTERN, MAX_EVENT_TYPE_LENGTH, MAX_EVENT_SIZE_BYTES, MAX_PROPERTY_KEY_LENGTH, } from '../constants';
|
|
6
|
+
/**
|
|
7
|
+
* Validation error class
|
|
8
|
+
* @class ValidationError
|
|
9
|
+
* @extends Error
|
|
10
|
+
*/
|
|
11
|
+
export class ValidationError extends Error {
|
|
12
|
+
/**
|
|
13
|
+
* Creates a new ValidationError
|
|
14
|
+
* @param {string} message - Error message
|
|
15
|
+
* @param {string} [field] - Field that failed validation
|
|
16
|
+
*/
|
|
17
|
+
constructor(message, field) {
|
|
18
|
+
super(message);
|
|
19
|
+
this.name = 'ValidationError';
|
|
20
|
+
this.code = ERROR_CODES.VALIDATION_ERROR;
|
|
21
|
+
this.field = field;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Validates AWS credentials
|
|
26
|
+
* @param {AWSCredentials} credentials - AWS credentials to validate
|
|
27
|
+
* @throws {ValidationError} If credentials are invalid
|
|
28
|
+
*/
|
|
29
|
+
export function validateCredentials(credentials) {
|
|
30
|
+
if (!credentials) {
|
|
31
|
+
throw new ValidationError('AWS credentials are required', 'credentials');
|
|
32
|
+
}
|
|
33
|
+
if (!credentials.accessKeyId || typeof credentials.accessKeyId !== 'string') {
|
|
34
|
+
throw new ValidationError('AWS access key ID is required and must be a string', 'credentials.accessKeyId');
|
|
35
|
+
}
|
|
36
|
+
if (!credentials.secretAccessKey ||
|
|
37
|
+
typeof credentials.secretAccessKey !== 'string') {
|
|
38
|
+
throw new ValidationError('AWS secret access key is required and must be a string', 'credentials.secretAccessKey');
|
|
39
|
+
}
|
|
40
|
+
if (credentials.sessionToken !== undefined &&
|
|
41
|
+
typeof credentials.sessionToken !== 'string') {
|
|
42
|
+
throw new ValidationError('AWS session token must be a string', 'credentials.sessionToken');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Validates S3 configuration
|
|
47
|
+
* @param {S3Config} config - S3 configuration to validate
|
|
48
|
+
* @throws {ValidationError} If configuration is invalid
|
|
49
|
+
*/
|
|
50
|
+
export function validateS3Config(config) {
|
|
51
|
+
if (!config) {
|
|
52
|
+
throw new ValidationError('S3 configuration is required', 's3');
|
|
53
|
+
}
|
|
54
|
+
if (!config.bucket || typeof config.bucket !== 'string') {
|
|
55
|
+
throw new ValidationError('S3 bucket name is required and must be a string', 's3.bucket');
|
|
56
|
+
}
|
|
57
|
+
if (!config.region || typeof config.region !== 'string') {
|
|
58
|
+
throw new ValidationError('S3 region is required and must be a string', 's3.region');
|
|
59
|
+
}
|
|
60
|
+
if (config.prefix !== undefined && typeof config.prefix !== 'string') {
|
|
61
|
+
throw new ValidationError('S3 prefix must be a string', 's3.prefix');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Validates Glacier configuration
|
|
66
|
+
* @param {GlacierConfig} config - Glacier configuration to validate
|
|
67
|
+
* @throws {ValidationError} If configuration is invalid
|
|
68
|
+
*/
|
|
69
|
+
export function validateGlacierConfig(config) {
|
|
70
|
+
if (!config) {
|
|
71
|
+
throw new ValidationError('Glacier configuration is required', 'glacier');
|
|
72
|
+
}
|
|
73
|
+
if (!config.vaultName || typeof config.vaultName !== 'string') {
|
|
74
|
+
throw new ValidationError('Glacier vault name is required and must be a string', 'glacier.vaultName');
|
|
75
|
+
}
|
|
76
|
+
if (!config.region || typeof config.region !== 'string') {
|
|
77
|
+
throw new ValidationError('Glacier region is required and must be a string', 'glacier.region');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Validates complete SDK configuration
|
|
82
|
+
* @param {MLCacheConfig} config - SDK configuration to validate
|
|
83
|
+
* @throws {ValidationError} If configuration is invalid
|
|
84
|
+
*/
|
|
85
|
+
export function validateConfig(config) {
|
|
86
|
+
if (!config) {
|
|
87
|
+
throw new ValidationError('Configuration is required', 'config');
|
|
88
|
+
}
|
|
89
|
+
validateCredentials(config.credentials);
|
|
90
|
+
if (!config.storageMode) {
|
|
91
|
+
throw new ValidationError('Storage mode is required', 'storageMode');
|
|
92
|
+
}
|
|
93
|
+
const validModes = ['S3', 'GLACIER', 'S3_TO_GLACIER'];
|
|
94
|
+
if (!validModes.includes(config.storageMode)) {
|
|
95
|
+
throw new ValidationError(`Invalid storage mode. Must be one of: ${validModes.join(', ')}`, 'storageMode');
|
|
96
|
+
}
|
|
97
|
+
if (config.storageMode === 'S3' || config.storageMode === 'S3_TO_GLACIER') {
|
|
98
|
+
if (!config.s3) {
|
|
99
|
+
throw new ValidationError('S3 configuration is required for S3 or S3_TO_GLACIER storage mode', 's3');
|
|
100
|
+
}
|
|
101
|
+
validateS3Config(config.s3);
|
|
102
|
+
}
|
|
103
|
+
if (config.storageMode === 'GLACIER') {
|
|
104
|
+
if (!config.glacier) {
|
|
105
|
+
throw new ValidationError('Glacier configuration is required for GLACIER storage mode', 'glacier');
|
|
106
|
+
}
|
|
107
|
+
validateGlacierConfig(config.glacier);
|
|
108
|
+
}
|
|
109
|
+
if (config.batch) {
|
|
110
|
+
if (config.batch.maxSize !== undefined) {
|
|
111
|
+
if (typeof config.batch.maxSize !== 'number' ||
|
|
112
|
+
config.batch.maxSize < 1) {
|
|
113
|
+
throw new ValidationError('Batch max size must be a positive number', 'batch.maxSize');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (config.batch.maxWaitMs !== undefined) {
|
|
117
|
+
if (typeof config.batch.maxWaitMs !== 'number' ||
|
|
118
|
+
config.batch.maxWaitMs < 0) {
|
|
119
|
+
throw new ValidationError('Batch max wait must be a non-negative number', 'batch.maxWaitMs');
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (config.retry) {
|
|
124
|
+
if (config.retry.maxRetries !== undefined) {
|
|
125
|
+
if (typeof config.retry.maxRetries !== 'number' ||
|
|
126
|
+
config.retry.maxRetries < 0) {
|
|
127
|
+
throw new ValidationError('Max retries must be a non-negative number', 'retry.maxRetries');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Validates an event type string
|
|
134
|
+
* @param {string} eventType - Event type to validate
|
|
135
|
+
* @throws {ValidationError} If event type is invalid
|
|
136
|
+
*/
|
|
137
|
+
export function validateEventType(eventType) {
|
|
138
|
+
if (!eventType || typeof eventType !== 'string') {
|
|
139
|
+
throw new ValidationError('Event type is required and must be a string', 'eventType');
|
|
140
|
+
}
|
|
141
|
+
if (eventType.length > MAX_EVENT_TYPE_LENGTH) {
|
|
142
|
+
throw new ValidationError(`Event type must be at most ${MAX_EVENT_TYPE_LENGTH} characters`, 'eventType');
|
|
143
|
+
}
|
|
144
|
+
if (!EVENT_TYPE_PATTERN.test(eventType)) {
|
|
145
|
+
throw new ValidationError('Event type must start with a letter and contain only alphanumeric characters and underscores', 'eventType');
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Validates event properties
|
|
150
|
+
* @param {Record<string, unknown>} properties - Properties to validate
|
|
151
|
+
* @throws {ValidationError} If properties are invalid
|
|
152
|
+
*/
|
|
153
|
+
export function validateEventProperties(properties) {
|
|
154
|
+
if (properties === undefined || properties === null) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
if (typeof properties !== 'object' || Array.isArray(properties)) {
|
|
158
|
+
throw new ValidationError('Event properties must be an object', 'properties');
|
|
159
|
+
}
|
|
160
|
+
for (const key of Object.keys(properties)) {
|
|
161
|
+
if (key.length > MAX_PROPERTY_KEY_LENGTH) {
|
|
162
|
+
throw new ValidationError(`Property key "${key}" exceeds maximum length of ${MAX_PROPERTY_KEY_LENGTH}`, `properties.${key}`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Validates a complete event
|
|
168
|
+
* @param {MLCacheEvent} event - Event to validate
|
|
169
|
+
* @throws {ValidationError} If event is invalid
|
|
170
|
+
*/
|
|
171
|
+
export function validateEvent(event) {
|
|
172
|
+
if (!event) {
|
|
173
|
+
throw new ValidationError('Event is required', 'event');
|
|
174
|
+
}
|
|
175
|
+
validateEventType(event.eventType);
|
|
176
|
+
if (event.properties !== undefined) {
|
|
177
|
+
validateEventProperties(event.properties);
|
|
178
|
+
}
|
|
179
|
+
const eventSize = Buffer.byteLength(JSON.stringify(event), 'utf8');
|
|
180
|
+
if (eventSize > MAX_EVENT_SIZE_BYTES) {
|
|
181
|
+
throw new ValidationError(`Event size (${eventSize} bytes) exceeds maximum allowed size (${MAX_EVENT_SIZE_BYTES} bytes)`, 'event');
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Checks if a value is a valid ISO 8601 timestamp
|
|
186
|
+
* @param {string} timestamp - Timestamp to validate
|
|
187
|
+
* @returns {boolean} Whether the timestamp is valid
|
|
188
|
+
*/
|
|
189
|
+
export function isValidTimestamp(timestamp) {
|
|
190
|
+
if (!timestamp || typeof timestamp !== 'string') {
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
const date = new Date(timestamp);
|
|
194
|
+
return !isNaN(date.getTime());
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Checks if a value is a valid UUID
|
|
198
|
+
* @param {string} uuid - UUID to validate
|
|
199
|
+
* @returns {boolean} Whether the UUID is valid
|
|
200
|
+
*/
|
|
201
|
+
export function isValidUUID(uuid) {
|
|
202
|
+
if (!uuid || typeof uuid !== 'string') {
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
const uuidPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
206
|
+
return uuidPattern.test(uuid);
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/utils/validator.ts"],"names":[],"mappings":"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"}
|