@syswatch/core 1.0.3 → 1.0.4

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/dist/index.d.mts CHANGED
@@ -27,55 +27,74 @@ interface CreateMetricDto {
27
27
  tags?: string[];
28
28
  unit?: string;
29
29
  }
30
+ interface CreateLogBatchDto {
31
+ logs: CreateLogDto[];
32
+ }
33
+ interface CreateMetricBatchDto {
34
+ metrics: CreateMetricDto[];
35
+ }
30
36
 
31
37
  type LogOptions = Omit<CreateLogDto, "level" | "message" | "type"> & {
32
38
  type?: string;
33
39
  };
34
40
  declare class Logs {
35
41
  private sendLog;
36
- constructor(sendLog: (log: CreateLogDto) => Promise<void>);
42
+ private sendLogBatch;
43
+ constructor(sendLog: (log: CreateLogDto) => Promise<void>, sendLogBatch: (logs: CreateLogDto[]) => Promise<void>);
44
+ /**
45
+ * Send multiple logs in batch
46
+ * @param logs Array of log entries
47
+ */
48
+ batch(logs: CreateLogDto[]): Promise<void>;
37
49
  /**
38
50
  * Send a DEBUG log
39
51
  * @param message Log message
40
52
  * @param options Additional options (meta, tags, etc.)
41
53
  */
42
54
  debug(type: string, message: string, options?: LogOptions): Promise<void>;
55
+ debug(type: string, options?: LogOptions): Promise<void>;
43
56
  /**
44
57
  * Send an INFO log
45
58
  * @param message Log message
46
59
  * @param options Additional options (meta, tags, etc.)
47
60
  */
48
61
  info(type: string, message: string, options?: LogOptions): Promise<void>;
62
+ info(type: string, options?: LogOptions): Promise<void>;
49
63
  /**
50
64
  * Send a SUCCESS log
51
65
  * @param message Log message
52
66
  * @param options Additional options (meta, tags, etc.)
53
67
  */
54
68
  success(type: string, message: string, options?: LogOptions): Promise<void>;
69
+ success(type: string, options?: LogOptions): Promise<void>;
55
70
  /**
56
71
  * Send a FAILURE log
57
72
  * @param message Log message
58
73
  * @param options Additional options (meta, tags, etc.)
59
74
  */
60
75
  failure(type: string, message: string, options?: LogOptions): Promise<void>;
76
+ failure(type: string, options?: LogOptions): Promise<void>;
61
77
  /**
62
78
  * Send a WARN log
63
79
  * @param message Log message
64
80
  * @param options Additional options (meta, tags, etc.)
65
81
  */
66
82
  warn(type: string, message: string, options?: LogOptions): Promise<void>;
83
+ warn(type: string, options?: LogOptions): Promise<void>;
67
84
  /**
68
85
  * Send an ERROR log with smart error handling
69
86
  * @param message Log message
70
87
  * @param errorOrOptions Error object or options object
71
88
  */
72
89
  error(type: string, message: string, errorOrOptions?: Error | LogOptions): Promise<void>;
90
+ error(type: string, errorOrOptions?: Error | LogOptions): Promise<void>;
73
91
  /**
74
92
  * Send a CRITICAL log
75
93
  * @param message Log message
76
94
  * @param options Additional options (meta, tags, etc.)
77
95
  */
78
96
  critical(type: string, message: string, options?: LogOptions): Promise<void>;
97
+ critical(type: string, options?: LogOptions): Promise<void>;
79
98
  }
80
99
 
81
100
  interface SysWatchConfig {
@@ -88,14 +107,22 @@ declare class SysWatch {
88
107
  private baseUrl;
89
108
  private defaultMeta;
90
109
  private defaultTags;
110
+ private authorized;
91
111
  log: Logs;
92
112
  constructor(config: SysWatchConfig);
113
+ init(): Promise<this>;
114
+ static create(config: SysWatchConfig): Promise<SysWatch>;
93
115
  private request;
94
116
  /**
95
117
  * Send a log entry to SysWatch
96
118
  * @param data Log data
97
119
  */
98
120
  private sendLog;
121
+ /**
122
+ * Send multiple log entries to SysWatch in batch
123
+ * @param logs Array of log data
124
+ */
125
+ private sendLogBatch;
99
126
  /**
100
127
  * Track a metric value
101
128
  * @param type Metric type key
@@ -104,6 +131,11 @@ declare class SysWatch {
104
131
  * @param options Additional options
105
132
  */
106
133
  trackMetric(type: string, value: number, unit?: string, options?: Omit<CreateMetricDto, "type" | "value" | "unit">): Promise<any>;
134
+ /**
135
+ * Track multiple metric values in batch
136
+ * @param metrics Array of metric data
137
+ */
138
+ trackMetricBatch(metrics: CreateMetricDto[]): Promise<any>;
107
139
  }
108
140
 
109
- export { type CreateLogDto, type CreateMetricDto, LogLevel, SysWatch, type SysWatchConfig };
141
+ export { type CreateLogBatchDto, type CreateLogDto, type CreateMetricBatchDto, type CreateMetricDto, LogLevel, SysWatch, type SysWatchConfig };
package/dist/index.d.ts CHANGED
@@ -27,55 +27,74 @@ interface CreateMetricDto {
27
27
  tags?: string[];
28
28
  unit?: string;
29
29
  }
30
+ interface CreateLogBatchDto {
31
+ logs: CreateLogDto[];
32
+ }
33
+ interface CreateMetricBatchDto {
34
+ metrics: CreateMetricDto[];
35
+ }
30
36
 
31
37
  type LogOptions = Omit<CreateLogDto, "level" | "message" | "type"> & {
32
38
  type?: string;
33
39
  };
34
40
  declare class Logs {
35
41
  private sendLog;
36
- constructor(sendLog: (log: CreateLogDto) => Promise<void>);
42
+ private sendLogBatch;
43
+ constructor(sendLog: (log: CreateLogDto) => Promise<void>, sendLogBatch: (logs: CreateLogDto[]) => Promise<void>);
44
+ /**
45
+ * Send multiple logs in batch
46
+ * @param logs Array of log entries
47
+ */
48
+ batch(logs: CreateLogDto[]): Promise<void>;
37
49
  /**
38
50
  * Send a DEBUG log
39
51
  * @param message Log message
40
52
  * @param options Additional options (meta, tags, etc.)
41
53
  */
42
54
  debug(type: string, message: string, options?: LogOptions): Promise<void>;
55
+ debug(type: string, options?: LogOptions): Promise<void>;
43
56
  /**
44
57
  * Send an INFO log
45
58
  * @param message Log message
46
59
  * @param options Additional options (meta, tags, etc.)
47
60
  */
48
61
  info(type: string, message: string, options?: LogOptions): Promise<void>;
62
+ info(type: string, options?: LogOptions): Promise<void>;
49
63
  /**
50
64
  * Send a SUCCESS log
51
65
  * @param message Log message
52
66
  * @param options Additional options (meta, tags, etc.)
53
67
  */
54
68
  success(type: string, message: string, options?: LogOptions): Promise<void>;
69
+ success(type: string, options?: LogOptions): Promise<void>;
55
70
  /**
56
71
  * Send a FAILURE log
57
72
  * @param message Log message
58
73
  * @param options Additional options (meta, tags, etc.)
59
74
  */
60
75
  failure(type: string, message: string, options?: LogOptions): Promise<void>;
76
+ failure(type: string, options?: LogOptions): Promise<void>;
61
77
  /**
62
78
  * Send a WARN log
63
79
  * @param message Log message
64
80
  * @param options Additional options (meta, tags, etc.)
65
81
  */
66
82
  warn(type: string, message: string, options?: LogOptions): Promise<void>;
83
+ warn(type: string, options?: LogOptions): Promise<void>;
67
84
  /**
68
85
  * Send an ERROR log with smart error handling
69
86
  * @param message Log message
70
87
  * @param errorOrOptions Error object or options object
71
88
  */
72
89
  error(type: string, message: string, errorOrOptions?: Error | LogOptions): Promise<void>;
90
+ error(type: string, errorOrOptions?: Error | LogOptions): Promise<void>;
73
91
  /**
74
92
  * Send a CRITICAL log
75
93
  * @param message Log message
76
94
  * @param options Additional options (meta, tags, etc.)
77
95
  */
78
96
  critical(type: string, message: string, options?: LogOptions): Promise<void>;
97
+ critical(type: string, options?: LogOptions): Promise<void>;
79
98
  }
80
99
 
81
100
  interface SysWatchConfig {
@@ -88,14 +107,22 @@ declare class SysWatch {
88
107
  private baseUrl;
89
108
  private defaultMeta;
90
109
  private defaultTags;
110
+ private authorized;
91
111
  log: Logs;
92
112
  constructor(config: SysWatchConfig);
113
+ init(): Promise<this>;
114
+ static create(config: SysWatchConfig): Promise<SysWatch>;
93
115
  private request;
94
116
  /**
95
117
  * Send a log entry to SysWatch
96
118
  * @param data Log data
97
119
  */
98
120
  private sendLog;
121
+ /**
122
+ * Send multiple log entries to SysWatch in batch
123
+ * @param logs Array of log data
124
+ */
125
+ private sendLogBatch;
99
126
  /**
100
127
  * Track a metric value
101
128
  * @param type Metric type key
@@ -104,6 +131,11 @@ declare class SysWatch {
104
131
  * @param options Additional options
105
132
  */
106
133
  trackMetric(type: string, value: number, unit?: string, options?: Omit<CreateMetricDto, "type" | "value" | "unit">): Promise<any>;
134
+ /**
135
+ * Track multiple metric values in batch
136
+ * @param metrics Array of metric data
137
+ */
138
+ trackMetricBatch(metrics: CreateMetricDto[]): Promise<any>;
107
139
  }
108
140
 
109
- export { type CreateLogDto, type CreateMetricDto, LogLevel, SysWatch, type SysWatchConfig };
141
+ export { type CreateLogBatchDto, type CreateLogDto, type CreateMetricBatchDto, type CreateMetricDto, LogLevel, SysWatch, type SysWatchConfig };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var o=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var d=(a,t)=>{for(var s in t)o(a,s,{get:t[s],enumerable:!0})},m=(a,t,s,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of p(t))!h.call(a,r)&&r!==s&&o(a,r,{get:()=>t[r],enumerable:!(e=u(t,r))||e.enumerable});return a};var y=a=>m(o({},"__esModule",{value:!0}),a);var f={};d(f,{LogLevel:()=>l,SysWatch:()=>c});module.exports=y(f);var l=(i=>(i.DEBUG="DEBUG",i.INFO="INFO",i.SUCCESS="SUCCESS",i.FAILURE="FAILURE",i.WARN="WARN",i.ERROR="ERROR",i.CRITICAL="CRITICAL",i))(l||{});var g=class{constructor(t){this.sendLog=t}async debug(t,s,e){return this.sendLog({level:"DEBUG",type:t,message:s,...e})}async info(t,s,e){return this.sendLog({type:t,level:"INFO",message:s,...e})}async success(t,s,e){return this.sendLog({type:t,level:"SUCCESS",message:s,...e})}async failure(t,s,e){return this.sendLog({type:t,level:"FAILURE",message:s,...e})}async warn(t,s,e){return this.sendLog({type:t,level:"WARN",message:s,...e})}async error(t,s,e){let r={},n={};return e instanceof Error?r={error:{name:e.name,message:e.message,stack:e.stack}}:e&&(n=e),this.sendLog({type:t,level:"ERROR",message:s,...n,meta:{...r,...n.meta||{}}})}async critical(t,s,e){return this.sendLog({type:t,level:"CRITICAL",message:s,...e})}};var c=class{constructor(t){this.apiKey=t.apiKey,this.baseUrl="https://syswatchapp.discloud.app/v1",this.defaultMeta=t.defaultMeta||{},this.defaultTags=t.defaultTags||[],this.baseUrl.endsWith("/")&&(this.baseUrl=this.baseUrl.slice(0,-1)),this.log=new g(this.sendLog.bind(this))}async request(t,s){try{let e=await fetch(`${this.baseUrl}${t}`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":this.apiKey,"user-agent":"NodeJS SysWatch SDK "},body:JSON.stringify(s)});if(!e.ok){let r=await e.text();throw new Error(`SysWatch API Error: ${e.status} ${e.statusText} - ${r}`)}return await e.json()}catch(e){throw e}}async sendLog(t){let s={...t,...(this.defaultMeta||t?.meta)&&{meta:{...this.defaultMeta,...t?.meta}},...(this.defaultTags||t?.tags)&&{tags:[...this.defaultTags,...t?.tags||[]]}};return this.request("/logs",s)}async trackMetric(t,s,e,r){let n={type:t,value:s,unit:e,...r,...(this.defaultMeta||r?.meta)&&{meta:{...this.defaultMeta,...r?.meta}},...(this.defaultTags||r?.tags)&&{tags:[...this.defaultTags,...r?.tags||[]]}};return this.request("/metrics",n)}};0&&(module.exports={LogLevel,SysWatch});
1
+ "use strict";var g=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var y=(o,t)=>{for(var e in t)g(o,e,{get:t[e],enumerable:!0})},h=(o,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of u(t))!f.call(o,i)&&i!==e&&g(o,i,{get:()=>t[i],enumerable:!(s=l(t,i))||s.enumerable});return o};var m=o=>h(g({},"__esModule",{value:!0}),o);var L={};y(L,{LogLevel:()=>p,SysWatch:()=>d});module.exports=m(L);var p=(n=>(n.DEBUG="DEBUG",n.INFO="INFO",n.SUCCESS="SUCCESS",n.FAILURE="FAILURE",n.WARN="WARN",n.ERROR="ERROR",n.CRITICAL="CRITICAL",n))(p||{});var a=class{constructor(t,e){this.sendLog=t;this.sendLogBatch=e}async batch(t){return this.sendLogBatch(t)}async debug(t,e,s){let i,r;return typeof e=="string"?(i=e,r=s):r=e,this.sendLog({level:"DEBUG",type:t,message:i,...r})}async info(t,e,s){let i,r;return typeof e=="string"?(i=e,r=s):r=e,this.sendLog({type:t,level:"INFO",message:i,...r})}async success(t,e,s){let i,r;return typeof e=="string"?(i=e,r=s):r=e,this.sendLog({type:t,level:"SUCCESS",message:i,...r})}async failure(t,e,s){let i,r;return typeof e=="string"?(i=e,r=s):r=e,this.sendLog({type:t,level:"FAILURE",message:i,...r})}async warn(t,e,s){let i,r;return typeof e=="string"?(i=e,r=s):r=e,this.sendLog({type:t,level:"WARN",message:i,...r})}async error(t,e,s){let i,r;typeof e=="string"?(i=e,r=s):r=e;let c={},n={};return r instanceof Error?c={error:{name:r.name,message:r.message,stack:r.stack}}:r&&(n=r),this.sendLog({type:t,level:"ERROR",message:i,...n,meta:{...c,...n.meta||{}}})}async critical(t,e,s){let i,r;return typeof e=="string"?(i=e,r=s):r=e,this.sendLog({type:t,level:"CRITICAL",message:i,...r})}};var d=class o{constructor(t){this.authorized=!1;this.apiKey=t.apiKey,this.baseUrl="https://syswatchapp.discloud.app/v1",this.defaultMeta=t.defaultMeta||{},this.defaultTags=t.defaultTags||[],this.baseUrl.endsWith("/")&&(this.baseUrl=this.baseUrl.slice(0,-1)),this.log=new a(this.sendLog.bind(this),this.sendLogBatch.bind(this))}async init(){try{let t=await fetch(`${this.baseUrl}/systems/validate-api-key/${this.apiKey}`,{method:"GET",headers:{"Content-Type":"application/json","user-agent":"NodeJS SysWatch SDK"}});if(!t.ok)throw new Error("Failed to validate API Key");if(!(await t.json()).valid)throw new Error("Invalid API Key");return this.authorized=!0,this}catch(t){throw this.authorized=!1,new Error(`SysWatch Initialization Error: ${t instanceof Error?t.message:"Unknown error"}`)}}static async create(t){let e=new o(t);return await e.init(),e}async request(t,e){if(!this.authorized){console.warn("SysWatch: API Key not authorized. Request blocked. Make sure to call init() and that the key is valid.");return}try{let s=await fetch(`${this.baseUrl}${t}`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":this.apiKey,"user-agent":"NodeJS SysWatch SDK"},body:JSON.stringify(e)});if(!s.ok){let i=await s.text();throw new Error(`SysWatch API Error: ${s.status} ${s.statusText} - ${i}`)}return await s.json()}catch(s){throw s}}async sendLog(t){let e={...t,...(this.defaultMeta||t?.meta)&&{meta:{...this.defaultMeta,...t?.meta}},...(this.defaultTags||t?.tags)&&{tags:[...this.defaultTags,...t?.tags||[]]}};return this.request("/logs",e)}async sendLogBatch(t){let e=t.map(s=>({...s,...(this.defaultMeta||s.meta)&&{meta:{...this.defaultMeta,...s.meta}},...(this.defaultTags||s.tags)&&{tags:[...this.defaultTags,...s.tags||[]]}}));return this.request("/logs/batch",{logs:e})}async trackMetric(t,e,s,i){let r={type:t,value:e,unit:s,...i,...(this.defaultMeta||i?.meta)&&{meta:{...this.defaultMeta,...i?.meta}},...(this.defaultTags||i?.tags)&&{tags:[...this.defaultTags,...i?.tags||[]]}};return this.request("/metrics",r)}async trackMetricBatch(t){let e=t.map(s=>({...s,...(this.defaultMeta||s.meta)&&{meta:{...this.defaultMeta,...s.meta}},...(this.defaultTags||s.tags)&&{tags:[...this.defaultTags,...s.tags||[]]}}));return this.request("/metrics/batch",{metrics:e})}};0&&(module.exports={LogLevel,SysWatch});
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/types.ts","../src/logs.ts","../src/client.ts"],"sourcesContent":["export * from './types';\nexport * from './client';\n","export enum LogLevel {\n DEBUG = 'DEBUG',\n INFO = 'INFO',\n SUCCESS = 'SUCCESS',\n FAILURE = 'FAILURE',\n WARN = 'WARN',\n ERROR = 'ERROR',\n CRITICAL = 'CRITICAL',\n}\n\nexport interface CreateLogDto {\n type: string;\n level: LogLevel;\n message?: string;\n meta?: Record<string, any>;\n environment?: string;\n userId?: string;\n ip?: string;\n timestamp?: Date | string;\n tags?: string[];\n}\n\nexport interface CreateMetricDto {\n type: string;\n value: number;\n meta?: Record<string, any>;\n environment?: string;\n timestamp?: Date | string;\n tags?: string[];\n unit?: string;\n}\n","import { CreateLogDto, LogLevel } from \"./types\";\n\ntype LogOptions = Omit<CreateLogDto, \"level\" | \"message\" | \"type\"> & {\n type?: string;\n};\n\nexport class Logs {\n constructor(private sendLog: (log: CreateLogDto) => Promise<void>) {}\n\n /**\n * Send a DEBUG log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async debug(type: string, message: string, options?: LogOptions) {\n return this.sendLog({\n level: LogLevel.DEBUG,\n type,\n message,\n ...options,\n });\n }\n\n /**\n * Send an INFO log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async info(type: string, message: string, options?: LogOptions) {\n return this.sendLog({\n type,\n level: LogLevel.INFO,\n message,\n ...options,\n });\n }\n\n /**\n * Send a SUCCESS log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async success(type: string, message: string, options?: LogOptions) {\n return this.sendLog({\n type,\n level: LogLevel.SUCCESS,\n message,\n ...options,\n });\n }\n /**\n * Send a FAILURE log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async failure(type: string, message: string, options?: LogOptions) {\n return this.sendLog({\n type,\n level: LogLevel.FAILURE,\n message,\n ...options,\n });\n }\n\n /**\n * Send a WARN log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async warn(type: string, message: string, options?: LogOptions) {\n return this.sendLog({\n type,\n level: LogLevel.WARN,\n message,\n ...options,\n });\n }\n\n /**\n * Send an ERROR log with smart error handling\n * @param message Log message\n * @param errorOrOptions Error object or options object\n */\n async error(\n type: string,\n message: string,\n errorOrOptions?: Error | LogOptions,\n ) {\n let meta = {};\n let options: Partial<CreateLogDto> = {};\n\n if (errorOrOptions instanceof Error) {\n meta = {\n error: {\n name: errorOrOptions.name,\n message: errorOrOptions.message,\n stack: errorOrOptions.stack,\n },\n };\n } else if (errorOrOptions) {\n options = errorOrOptions;\n }\n\n return this.sendLog({\n type,\n level: LogLevel.ERROR,\n message,\n ...options,\n meta: { ...meta, ...(options.meta || {}) },\n });\n }\n\n /**\n * Send a CRITICAL log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async critical(type: string, message: string, options?: LogOptions) {\n return this.sendLog({\n type,\n level: LogLevel.CRITICAL,\n message,\n ...options,\n });\n }\n}\n","import { Logs } from \"./logs\";\nimport { CreateLogDto, CreateMetricDto } from \"./types\";\n\nexport interface SysWatchConfig {\n apiKey: string;\n defaultMeta?: Record<string, any>;\n defaultTags?: string[];\n}\n\nexport class SysWatch {\n private apiKey: string;\n private baseUrl: string;\n private defaultMeta: Record<string, any>;\n private defaultTags: string[];\n\n public log: Logs;\n\n constructor(config: SysWatchConfig) {\n this.apiKey = config.apiKey;\n this.baseUrl = \"https://syswatchapp.discloud.app/v1\";\n this.defaultMeta = config.defaultMeta || {};\n this.defaultTags = config.defaultTags || [];\n\n if (this.baseUrl.endsWith(\"/\")) {\n this.baseUrl = this.baseUrl.slice(0, -1);\n }\n\n this.log = new Logs(this.sendLog.bind(this));\n }\n\n private async request(path: string, body: any) {\n try {\n const response = await fetch(`${this.baseUrl}${path}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-api-key\": this.apiKey,\n \"user-agent\": \"NodeJS SysWatch SDK \",\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `SysWatch API Error: ${response.status} ${response.statusText} - ${errorText}`\n );\n }\n\n return await response.json();\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Send a log entry to SysWatch\n * @param data Log data\n */\n private async sendLog(data: CreateLogDto) {\n const payload: CreateLogDto = {\n ...data,\n ...((this.defaultMeta || data?.meta) && {\n meta: { ...this.defaultMeta, ...data?.meta },\n }),\n ...((this.defaultTags || data?.tags) && {\n tags: [...this.defaultTags, ...(data?.tags || [])],\n }),\n };\n return this.request(\"/logs\", payload);\n }\n\n /**\n * Track a metric value\n * @param type Metric type key\n * @param value Metric value\n * @param unit Unit of measurement (optional)\n * @param options Additional options\n */\n async trackMetric(\n type: string,\n value: number,\n unit?: string,\n options?: Omit<CreateMetricDto, \"type\" | \"value\" | \"unit\">\n ) {\n const payload: CreateMetricDto = {\n type,\n value,\n unit,\n ...options,\n ...((this.defaultMeta || options?.meta) && {\n meta: { ...this.defaultMeta, ...options?.meta },\n }),\n ...((this.defaultTags || options?.tags) && {\n tags: [...this.defaultTags, ...(options?.tags || [])],\n }),\n };\n return this.request(\"/metrics\", payload);\n }\n}\n"],"mappings":"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","names":["index_exports","__export","LogLevel","SysWatch","__toCommonJS","LogLevel","Logs","sendLog","type","message","options","errorOrOptions","meta","SysWatch","config","Logs","path","body","response","errorText","error","data","payload","type","value","unit","options"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/types.ts","../src/logs.ts","../src/client.ts"],"sourcesContent":["export * from './types';\nexport * from './client';\n","export enum LogLevel {\n DEBUG = 'DEBUG',\n INFO = 'INFO',\n SUCCESS = 'SUCCESS',\n FAILURE = 'FAILURE',\n WARN = 'WARN',\n ERROR = 'ERROR',\n CRITICAL = 'CRITICAL',\n}\n\nexport interface CreateLogDto {\n type: string;\n level: LogLevel;\n message?: string;\n meta?: Record<string, any>;\n environment?: string;\n userId?: string;\n ip?: string;\n timestamp?: Date | string;\n tags?: string[];\n}\n\nexport interface CreateMetricDto {\n type: string;\n value: number;\n meta?: Record<string, any>;\n environment?: string;\n timestamp?: Date | string;\n tags?: string[];\n unit?: string;\n}\n\nexport interface CreateLogBatchDto {\n logs: CreateLogDto[];\n}\n\nexport interface CreateMetricBatchDto {\n metrics: CreateMetricDto[];\n}\n","import { CreateLogDto, LogLevel } from \"./types\";\n\ntype LogOptions = Omit<CreateLogDto, \"level\" | \"message\" | \"type\"> & {\n type?: string;\n};\n\nexport class Logs {\n constructor(\n private sendLog: (log: CreateLogDto) => Promise<void>,\n private sendLogBatch: (logs: CreateLogDto[]) => Promise<void>,\n ) {}\n\n /**\n * Send multiple logs in batch\n * @param logs Array of log entries\n */\n async batch(logs: CreateLogDto[]) {\n return this.sendLogBatch(logs);\n }\n\n /**\n * Send a DEBUG log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async debug(type: string, message: string, options?: LogOptions): Promise<void>;\n async debug(type: string, options?: LogOptions): Promise<void>;\n async debug(\n type: string,\n messageOrOptions?: string | LogOptions,\n options?: LogOptions,\n ) {\n let message: string | undefined;\n let finalOptions: LogOptions | undefined;\n\n if (typeof messageOrOptions === \"string\") {\n message = messageOrOptions;\n finalOptions = options;\n } else {\n finalOptions = messageOrOptions;\n }\n\n return this.sendLog({\n level: LogLevel.DEBUG,\n type,\n message,\n ...finalOptions,\n });\n }\n\n /**\n * Send an INFO log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async info(type: string, message: string, options?: LogOptions): Promise<void>;\n async info(type: string, options?: LogOptions): Promise<void>;\n async info(\n type: string,\n messageOrOptions?: string | LogOptions,\n options?: LogOptions,\n ) {\n let message: string | undefined;\n let finalOptions: LogOptions | undefined;\n\n if (typeof messageOrOptions === \"string\") {\n message = messageOrOptions;\n finalOptions = options;\n } else {\n finalOptions = messageOrOptions;\n }\n\n return this.sendLog({\n type,\n level: LogLevel.INFO,\n message,\n ...finalOptions,\n });\n }\n\n /**\n * Send a SUCCESS log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async success(type: string, message: string, options?: LogOptions): Promise<void>;\n async success(type: string, options?: LogOptions): Promise<void>;\n async success(\n type: string,\n messageOrOptions?: string | LogOptions,\n options?: LogOptions,\n ) {\n let message: string | undefined;\n let finalOptions: LogOptions | undefined;\n\n if (typeof messageOrOptions === \"string\") {\n message = messageOrOptions;\n finalOptions = options;\n } else {\n finalOptions = messageOrOptions;\n }\n\n return this.sendLog({\n type,\n level: LogLevel.SUCCESS,\n message,\n ...finalOptions,\n });\n }\n /**\n * Send a FAILURE log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async failure(type: string, message: string, options?: LogOptions): Promise<void>;\n async failure(type: string, options?: LogOptions): Promise<void>;\n async failure(\n type: string,\n messageOrOptions?: string | LogOptions,\n options?: LogOptions,\n ) {\n let message: string | undefined;\n let finalOptions: LogOptions | undefined;\n\n if (typeof messageOrOptions === \"string\") {\n message = messageOrOptions;\n finalOptions = options;\n } else {\n finalOptions = messageOrOptions;\n }\n\n return this.sendLog({\n type,\n level: LogLevel.FAILURE,\n message,\n ...finalOptions,\n });\n }\n\n /**\n * Send a WARN log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async warn(type: string, message: string, options?: LogOptions): Promise<void>;\n async warn(type: string, options?: LogOptions): Promise<void>;\n async warn(\n type: string,\n messageOrOptions?: string | LogOptions,\n options?: LogOptions,\n ) {\n let message: string | undefined;\n let finalOptions: LogOptions | undefined;\n\n if (typeof messageOrOptions === \"string\") {\n message = messageOrOptions;\n finalOptions = options;\n } else {\n finalOptions = messageOrOptions;\n }\n\n return this.sendLog({\n type,\n level: LogLevel.WARN,\n message,\n ...finalOptions,\n });\n }\n\n /**\n * Send an ERROR log with smart error handling\n * @param message Log message\n * @param errorOrOptions Error object or options object\n */\n async error(\n type: string,\n message: string,\n errorOrOptions?: Error | LogOptions,\n ): Promise<void>;\n async error(type: string, errorOrOptions?: Error | LogOptions): Promise<void>;\n async error(\n type: string,\n messageOrErrorOrOptions?: string | Error | LogOptions,\n errorOrOptions?: Error | LogOptions,\n ) {\n let message: string | undefined;\n let finalErrorOrOptions: Error | LogOptions | undefined;\n\n if (typeof messageOrErrorOrOptions === \"string\") {\n message = messageOrErrorOrOptions;\n finalErrorOrOptions = errorOrOptions;\n } else {\n finalErrorOrOptions = messageOrErrorOrOptions as Error | LogOptions;\n }\n\n let meta = {};\n let options: Partial<CreateLogDto> = {};\n\n if (finalErrorOrOptions instanceof Error) {\n meta = {\n error: {\n name: finalErrorOrOptions.name,\n message: finalErrorOrOptions.message,\n stack: finalErrorOrOptions.stack,\n },\n };\n } else if (finalErrorOrOptions) {\n options = finalErrorOrOptions;\n }\n\n return this.sendLog({\n type,\n level: LogLevel.ERROR,\n message,\n ...options,\n meta: { ...meta, ...(options.meta || {}) },\n });\n }\n\n /**\n * Send a CRITICAL log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async critical(type: string, message: string, options?: LogOptions): Promise<void>;\n async critical(type: string, options?: LogOptions): Promise<void>;\n async critical(\n type: string,\n messageOrOptions?: string | LogOptions,\n options?: LogOptions,\n ) {\n let message: string | undefined;\n let finalOptions: LogOptions | undefined;\n\n if (typeof messageOrOptions === \"string\") {\n message = messageOrOptions;\n finalOptions = options;\n } else {\n finalOptions = messageOrOptions;\n }\n\n return this.sendLog({\n type,\n level: LogLevel.CRITICAL,\n message,\n ...finalOptions,\n });\n }\n}\n","import { Logs } from \"./logs\";\nimport { CreateLogDto, CreateMetricDto } from \"./types\";\n\nexport interface SysWatchConfig {\n apiKey: string;\n defaultMeta?: Record<string, any>;\n defaultTags?: string[];\n}\n\nexport class SysWatch {\n private apiKey: string;\n private baseUrl: string;\n private defaultMeta: Record<string, any>;\n private defaultTags: string[];\n private authorized: boolean = false;\n\n public log: Logs;\n\n constructor(config: SysWatchConfig) {\n this.apiKey = config.apiKey;\n this.baseUrl = \"https://syswatchapp.discloud.app/v1\";\n this.defaultMeta = config.defaultMeta || {};\n this.defaultTags = config.defaultTags || [];\n\n if (this.baseUrl.endsWith(\"/\")) {\n this.baseUrl = this.baseUrl.slice(0, -1);\n }\n\n this.log = new Logs(this.sendLog.bind(this), this.sendLogBatch.bind(this));\n }\n\n async init() {\n try {\n const response = await fetch(\n `${this.baseUrl}/systems/validate-api-key/${this.apiKey}`,\n {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"user-agent\": \"NodeJS SysWatch SDK\",\n },\n },\n );\n\n if (!response.ok) {\n throw new Error(\"Failed to validate API Key\");\n }\n\n const data = await response.json();\n if (!data.valid) {\n throw new Error(\"Invalid API Key\");\n }\n\n this.authorized = true;\n\n return this;\n } catch (error) {\n this.authorized = false;\n throw new Error(\n `SysWatch Initialization Error: ${\n error instanceof Error ? error.message : \"Unknown error\"\n }`,\n );\n }\n }\n\n static async create(config: SysWatchConfig) {\n const instance = new SysWatch(config);\n await instance.init();\n return instance;\n }\n\n private async request(path: string, body: any) {\n if (!this.authorized) {\n console.warn(\n \"SysWatch: API Key not authorized. Request blocked. Make sure to call init() and that the key is valid.\",\n );\n return;\n }\n\n try {\n const response = await fetch(`${this.baseUrl}${path}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-api-key\": this.apiKey,\n \"user-agent\": \"NodeJS SysWatch SDK\",\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `SysWatch API Error: ${response.status} ${response.statusText} - ${errorText}`,\n );\n }\n\n return await response.json();\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Send a log entry to SysWatch\n * @param data Log data\n */\n private async sendLog(data: CreateLogDto) {\n const payload: CreateLogDto = {\n ...data,\n ...((this.defaultMeta || data?.meta) && {\n meta: { ...this.defaultMeta, ...data?.meta },\n }),\n ...((this.defaultTags || data?.tags) && {\n tags: [...this.defaultTags, ...(data?.tags || [])],\n }),\n };\n return this.request(\"/logs\", payload);\n }\n\n /**\n * Send multiple log entries to SysWatch in batch\n * @param logs Array of log data\n */\n private async sendLogBatch(logs: CreateLogDto[]) {\n const processedLogs = logs.map((log) => ({\n ...log,\n ...((this.defaultMeta || log.meta) && {\n meta: { ...this.defaultMeta, ...log.meta },\n }),\n ...((this.defaultTags || log.tags) && {\n tags: [...this.defaultTags, ...(log.tags || [])],\n }),\n }));\n\n return this.request(\"/logs/batch\", { logs: processedLogs });\n }\n\n /**\n * Track a metric value\n * @param type Metric type key\n * @param value Metric value\n * @param unit Unit of measurement (optional)\n * @param options Additional options\n */\n async trackMetric(\n type: string,\n value: number,\n unit?: string,\n options?: Omit<CreateMetricDto, \"type\" | \"value\" | \"unit\">,\n ) {\n const payload: CreateMetricDto = {\n type,\n value,\n unit,\n ...options,\n ...((this.defaultMeta || options?.meta) && {\n meta: { ...this.defaultMeta, ...options?.meta },\n }),\n ...((this.defaultTags || options?.tags) && {\n tags: [...this.defaultTags, ...(options?.tags || [])],\n }),\n };\n return this.request(\"/metrics\", payload);\n }\n\n /**\n * Track multiple metric values in batch\n * @param metrics Array of metric data\n */\n async trackMetricBatch(metrics: CreateMetricDto[]) {\n const processedMetrics = metrics.map((metric) => ({\n ...metric,\n ...((this.defaultMeta || metric.meta) && {\n meta: { ...this.defaultMeta, ...metric.meta },\n }),\n ...((this.defaultTags || metric.tags) && {\n tags: [...this.defaultTags, ...(metric.tags || [])],\n }),\n }));\n\n return this.request(\"/metrics/batch\", { metrics: processedMetrics });\n }\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,cAAAE,EAAA,aAAAC,IAAA,eAAAC,EAAAJ,GCAO,IAAKK,OACVA,EAAA,MAAQ,QACRA,EAAA,KAAO,OACPA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,KAAO,OACPA,EAAA,MAAQ,QACRA,EAAA,SAAW,WAPDA,OAAA,ICML,IAAMC,EAAN,KAAW,CAChB,YACUC,EACAC,EACR,CAFQ,aAAAD,EACA,kBAAAC,CACP,CAMH,MAAM,MAAMC,EAAsB,CAChC,OAAO,KAAK,aAAaA,CAAI,CAC/B,CASA,MAAM,MACJC,EACAC,EACAC,EACA,CACA,IAAIC,EACAC,EAEJ,OAAI,OAAOH,GAAqB,UAC9BE,EAAUF,EACVG,EAAeF,GAEfE,EAAeH,EAGV,KAAK,QAAQ,CAClB,cACA,KAAAD,EACA,QAAAG,EACA,GAAGC,CACL,CAAC,CACH,CASA,MAAM,KACJJ,EACAC,EACAC,EACA,CACA,IAAIC,EACAC,EAEJ,OAAI,OAAOH,GAAqB,UAC9BE,EAAUF,EACVG,EAAeF,GAEfE,EAAeH,EAGV,KAAK,QAAQ,CAClB,KAAAD,EACA,aACA,QAAAG,EACA,GAAGC,CACL,CAAC,CACH,CASA,MAAM,QACJJ,EACAC,EACAC,EACA,CACA,IAAIC,EACAC,EAEJ,OAAI,OAAOH,GAAqB,UAC9BE,EAAUF,EACVG,EAAeF,GAEfE,EAAeH,EAGV,KAAK,QAAQ,CAClB,KAAAD,EACA,gBACA,QAAAG,EACA,GAAGC,CACL,CAAC,CACH,CAQA,MAAM,QACJJ,EACAC,EACAC,EACA,CACA,IAAIC,EACAC,EAEJ,OAAI,OAAOH,GAAqB,UAC9BE,EAAUF,EACVG,EAAeF,GAEfE,EAAeH,EAGV,KAAK,QAAQ,CAClB,KAAAD,EACA,gBACA,QAAAG,EACA,GAAGC,CACL,CAAC,CACH,CASA,MAAM,KACJJ,EACAC,EACAC,EACA,CACA,IAAIC,EACAC,EAEJ,OAAI,OAAOH,GAAqB,UAC9BE,EAAUF,EACVG,EAAeF,GAEfE,EAAeH,EAGV,KAAK,QAAQ,CAClB,KAAAD,EACA,aACA,QAAAG,EACA,GAAGC,CACL,CAAC,CACH,CAaA,MAAM,MACJJ,EACAK,EACAC,EACA,CACA,IAAIH,EACAI,EAEA,OAAOF,GAA4B,UACrCF,EAAUE,EACVE,EAAsBD,GAEtBC,EAAsBF,EAGxB,IAAIG,EAAO,CAAC,EACRN,EAAiC,CAAC,EAEtC,OAAIK,aAA+B,MACjCC,EAAO,CACL,MAAO,CACL,KAAMD,EAAoB,KAC1B,QAASA,EAAoB,QAC7B,MAAOA,EAAoB,KAC7B,CACF,EACSA,IACTL,EAAUK,GAGL,KAAK,QAAQ,CAClB,KAAAP,EACA,cACA,QAAAG,EACA,GAAGD,EACH,KAAM,CAAE,GAAGM,EAAM,GAAIN,EAAQ,MAAQ,CAAC,CAAG,CAC3C,CAAC,CACH,CASA,MAAM,SACJF,EACAC,EACAC,EACA,CACA,IAAIC,EACAC,EAEJ,OAAI,OAAOH,GAAqB,UAC9BE,EAAUF,EACVG,EAAeF,GAEfE,EAAeH,EAGV,KAAK,QAAQ,CAClB,KAAAD,EACA,iBACA,QAAAG,EACA,GAAGC,CACL,CAAC,CACH,CACF,EC/OO,IAAMK,EAAN,MAAMC,CAAS,CASpB,YAAYC,EAAwB,CAJpC,KAAQ,WAAsB,GAK5B,KAAK,OAASA,EAAO,OACrB,KAAK,QAAU,sCACf,KAAK,YAAcA,EAAO,aAAe,CAAC,EAC1C,KAAK,YAAcA,EAAO,aAAe,CAAC,EAEtC,KAAK,QAAQ,SAAS,GAAG,IAC3B,KAAK,QAAU,KAAK,QAAQ,MAAM,EAAG,EAAE,GAGzC,KAAK,IAAM,IAAIC,EAAK,KAAK,QAAQ,KAAK,IAAI,EAAG,KAAK,aAAa,KAAK,IAAI,CAAC,CAC3E,CAEA,MAAM,MAAO,CACX,GAAI,CACF,IAAMC,EAAW,MAAM,MACrB,GAAG,KAAK,OAAO,6BAA6B,KAAK,MAAM,GACvD,CACE,OAAQ,MACR,QAAS,CACP,eAAgB,mBAChB,aAAc,qBAChB,CACF,CACF,EAEA,GAAI,CAACA,EAAS,GACZ,MAAM,IAAI,MAAM,4BAA4B,EAI9C,GAAI,EADS,MAAMA,EAAS,KAAK,GACvB,MACR,MAAM,IAAI,MAAM,iBAAiB,EAGnC,YAAK,WAAa,GAEX,IACT,OAASC,EAAO,CACd,WAAK,WAAa,GACZ,IAAI,MACR,kCACEA,aAAiB,MAAQA,EAAM,QAAU,eAC3C,EACF,CACF,CACF,CAEA,aAAa,OAAOH,EAAwB,CAC1C,IAAMI,EAAW,IAAIL,EAASC,CAAM,EACpC,aAAMI,EAAS,KAAK,EACbA,CACT,CAEA,MAAc,QAAQC,EAAcC,EAAW,CAC7C,GAAI,CAAC,KAAK,WAAY,CACpB,QAAQ,KACN,wGACF,EACA,MACF,CAEA,GAAI,CACF,IAAMJ,EAAW,MAAM,MAAM,GAAG,KAAK,OAAO,GAAGG,CAAI,GAAI,CACrD,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,YAAa,KAAK,OAClB,aAAc,qBAChB,EACA,KAAM,KAAK,UAAUC,CAAI,CAC3B,CAAC,EAED,GAAI,CAACJ,EAAS,GAAI,CAChB,IAAMK,EAAY,MAAML,EAAS,KAAK,EACtC,MAAM,IAAI,MACR,uBAAuBA,EAAS,MAAM,IAAIA,EAAS,UAAU,MAAMK,CAAS,EAC9E,CACF,CAEA,OAAO,MAAML,EAAS,KAAK,CAC7B,OAASC,EAAO,CACd,MAAMA,CACR,CACF,CAMA,MAAc,QAAQK,EAAoB,CACxC,IAAMC,EAAwB,CAC5B,GAAGD,EACH,IAAK,KAAK,aAAeA,GAAM,OAAS,CACtC,KAAM,CAAE,GAAG,KAAK,YAAa,GAAGA,GAAM,IAAK,CAC7C,EACA,IAAK,KAAK,aAAeA,GAAM,OAAS,CACtC,KAAM,CAAC,GAAG,KAAK,YAAa,GAAIA,GAAM,MAAQ,CAAC,CAAE,CACnD,CACF,EACA,OAAO,KAAK,QAAQ,QAASC,CAAO,CACtC,CAMA,MAAc,aAAaC,EAAsB,CAC/C,IAAMC,EAAgBD,EAAK,IAAKE,IAAS,CACvC,GAAGA,EACH,IAAK,KAAK,aAAeA,EAAI,OAAS,CACpC,KAAM,CAAE,GAAG,KAAK,YAAa,GAAGA,EAAI,IAAK,CAC3C,EACA,IAAK,KAAK,aAAeA,EAAI,OAAS,CACpC,KAAM,CAAC,GAAG,KAAK,YAAa,GAAIA,EAAI,MAAQ,CAAC,CAAE,CACjD,CACF,EAAE,EAEF,OAAO,KAAK,QAAQ,cAAe,CAAE,KAAMD,CAAc,CAAC,CAC5D,CASA,MAAM,YACJE,EACAC,EACAC,EACAC,EACA,CACA,IAAMP,EAA2B,CAC/B,KAAAI,EACA,MAAAC,EACA,KAAAC,EACA,GAAGC,EACH,IAAK,KAAK,aAAeA,GAAS,OAAS,CACzC,KAAM,CAAE,GAAG,KAAK,YAAa,GAAGA,GAAS,IAAK,CAChD,EACA,IAAK,KAAK,aAAeA,GAAS,OAAS,CACzC,KAAM,CAAC,GAAG,KAAK,YAAa,GAAIA,GAAS,MAAQ,CAAC,CAAE,CACtD,CACF,EACA,OAAO,KAAK,QAAQ,WAAYP,CAAO,CACzC,CAMA,MAAM,iBAAiBQ,EAA4B,CACjD,IAAMC,EAAmBD,EAAQ,IAAKE,IAAY,CAChD,GAAGA,EACH,IAAK,KAAK,aAAeA,EAAO,OAAS,CACvC,KAAM,CAAE,GAAG,KAAK,YAAa,GAAGA,EAAO,IAAK,CAC9C,EACA,IAAK,KAAK,aAAeA,EAAO,OAAS,CACvC,KAAM,CAAC,GAAG,KAAK,YAAa,GAAIA,EAAO,MAAQ,CAAC,CAAE,CACpD,CACF,EAAE,EAEF,OAAO,KAAK,QAAQ,iBAAkB,CAAE,QAASD,CAAiB,CAAC,CACrE,CACF","names":["index_exports","__export","LogLevel","SysWatch","__toCommonJS","LogLevel","Logs","sendLog","sendLogBatch","logs","type","messageOrOptions","options","message","finalOptions","messageOrErrorOrOptions","errorOrOptions","finalErrorOrOptions","meta","SysWatch","_SysWatch","config","Logs","response","error","instance","path","body","errorText","data","payload","logs","processedLogs","log","type","value","unit","options","metrics","processedMetrics","metric"]}
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- var g=(a=>(a.DEBUG="DEBUG",a.INFO="INFO",a.SUCCESS="SUCCESS",a.FAILURE="FAILURE",a.WARN="WARN",a.ERROR="ERROR",a.CRITICAL="CRITICAL",a))(g||{});var n=class{constructor(t){this.sendLog=t}async debug(t,s,e){return this.sendLog({level:"DEBUG",type:t,message:s,...e})}async info(t,s,e){return this.sendLog({type:t,level:"INFO",message:s,...e})}async success(t,s,e){return this.sendLog({type:t,level:"SUCCESS",message:s,...e})}async failure(t,s,e){return this.sendLog({type:t,level:"FAILURE",message:s,...e})}async warn(t,s,e){return this.sendLog({type:t,level:"WARN",message:s,...e})}async error(t,s,e){let r={},i={};return e instanceof Error?r={error:{name:e.name,message:e.message,stack:e.stack}}:e&&(i=e),this.sendLog({type:t,level:"ERROR",message:s,...i,meta:{...r,...i.meta||{}}})}async critical(t,s,e){return this.sendLog({type:t,level:"CRITICAL",message:s,...e})}};var o=class{constructor(t){this.apiKey=t.apiKey,this.baseUrl="https://syswatchapp.discloud.app/v1",this.defaultMeta=t.defaultMeta||{},this.defaultTags=t.defaultTags||[],this.baseUrl.endsWith("/")&&(this.baseUrl=this.baseUrl.slice(0,-1)),this.log=new n(this.sendLog.bind(this))}async request(t,s){try{let e=await fetch(`${this.baseUrl}${t}`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":this.apiKey,"user-agent":"NodeJS SysWatch SDK "},body:JSON.stringify(s)});if(!e.ok){let r=await e.text();throw new Error(`SysWatch API Error: ${e.status} ${e.statusText} - ${r}`)}return await e.json()}catch(e){throw e}}async sendLog(t){let s={...t,...(this.defaultMeta||t?.meta)&&{meta:{...this.defaultMeta,...t?.meta}},...(this.defaultTags||t?.tags)&&{tags:[...this.defaultTags,...t?.tags||[]]}};return this.request("/logs",s)}async trackMetric(t,s,e,r){let i={type:t,value:s,unit:e,...r,...(this.defaultMeta||r?.meta)&&{meta:{...this.defaultMeta,...r?.meta}},...(this.defaultTags||r?.tags)&&{tags:[...this.defaultTags,...r?.tags||[]]}};return this.request("/metrics",i)}};export{g as LogLevel,o as SysWatch};
1
+ var p=(n=>(n.DEBUG="DEBUG",n.INFO="INFO",n.SUCCESS="SUCCESS",n.FAILURE="FAILURE",n.WARN="WARN",n.ERROR="ERROR",n.CRITICAL="CRITICAL",n))(p||{});var o=class{constructor(t,e){this.sendLog=t;this.sendLogBatch=e}async batch(t){return this.sendLogBatch(t)}async debug(t,e,s){let r,i;return typeof e=="string"?(r=e,i=s):i=e,this.sendLog({level:"DEBUG",type:t,message:r,...i})}async info(t,e,s){let r,i;return typeof e=="string"?(r=e,i=s):i=e,this.sendLog({type:t,level:"INFO",message:r,...i})}async success(t,e,s){let r,i;return typeof e=="string"?(r=e,i=s):i=e,this.sendLog({type:t,level:"SUCCESS",message:r,...i})}async failure(t,e,s){let r,i;return typeof e=="string"?(r=e,i=s):i=e,this.sendLog({type:t,level:"FAILURE",message:r,...i})}async warn(t,e,s){let r,i;return typeof e=="string"?(r=e,i=s):i=e,this.sendLog({type:t,level:"WARN",message:r,...i})}async error(t,e,s){let r,i;typeof e=="string"?(r=e,i=s):i=e;let g={},n={};return i instanceof Error?g={error:{name:i.name,message:i.message,stack:i.stack}}:i&&(n=i),this.sendLog({type:t,level:"ERROR",message:r,...n,meta:{...g,...n.meta||{}}})}async critical(t,e,s){let r,i;return typeof e=="string"?(r=e,i=s):i=e,this.sendLog({type:t,level:"CRITICAL",message:r,...i})}};var d=class a{constructor(t){this.authorized=!1;this.apiKey=t.apiKey,this.baseUrl="https://syswatchapp.discloud.app/v1",this.defaultMeta=t.defaultMeta||{},this.defaultTags=t.defaultTags||[],this.baseUrl.endsWith("/")&&(this.baseUrl=this.baseUrl.slice(0,-1)),this.log=new o(this.sendLog.bind(this),this.sendLogBatch.bind(this))}async init(){try{let t=await fetch(`${this.baseUrl}/systems/validate-api-key/${this.apiKey}`,{method:"GET",headers:{"Content-Type":"application/json","user-agent":"NodeJS SysWatch SDK"}});if(!t.ok)throw new Error("Failed to validate API Key");if(!(await t.json()).valid)throw new Error("Invalid API Key");return this.authorized=!0,this}catch(t){throw this.authorized=!1,new Error(`SysWatch Initialization Error: ${t instanceof Error?t.message:"Unknown error"}`)}}static async create(t){let e=new a(t);return await e.init(),e}async request(t,e){if(!this.authorized){console.warn("SysWatch: API Key not authorized. Request blocked. Make sure to call init() and that the key is valid.");return}try{let s=await fetch(`${this.baseUrl}${t}`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":this.apiKey,"user-agent":"NodeJS SysWatch SDK"},body:JSON.stringify(e)});if(!s.ok){let r=await s.text();throw new Error(`SysWatch API Error: ${s.status} ${s.statusText} - ${r}`)}return await s.json()}catch(s){throw s}}async sendLog(t){let e={...t,...(this.defaultMeta||t?.meta)&&{meta:{...this.defaultMeta,...t?.meta}},...(this.defaultTags||t?.tags)&&{tags:[...this.defaultTags,...t?.tags||[]]}};return this.request("/logs",e)}async sendLogBatch(t){let e=t.map(s=>({...s,...(this.defaultMeta||s.meta)&&{meta:{...this.defaultMeta,...s.meta}},...(this.defaultTags||s.tags)&&{tags:[...this.defaultTags,...s.tags||[]]}}));return this.request("/logs/batch",{logs:e})}async trackMetric(t,e,s,r){let i={type:t,value:e,unit:s,...r,...(this.defaultMeta||r?.meta)&&{meta:{...this.defaultMeta,...r?.meta}},...(this.defaultTags||r?.tags)&&{tags:[...this.defaultTags,...r?.tags||[]]}};return this.request("/metrics",i)}async trackMetricBatch(t){let e=t.map(s=>({...s,...(this.defaultMeta||s.meta)&&{meta:{...this.defaultMeta,...s.meta}},...(this.defaultTags||s.tags)&&{tags:[...this.defaultTags,...s.tags||[]]}}));return this.request("/metrics/batch",{metrics:e})}};export{p as LogLevel,d as SysWatch};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts","../src/logs.ts","../src/client.ts"],"sourcesContent":["export enum LogLevel {\n DEBUG = 'DEBUG',\n INFO = 'INFO',\n SUCCESS = 'SUCCESS',\n FAILURE = 'FAILURE',\n WARN = 'WARN',\n ERROR = 'ERROR',\n CRITICAL = 'CRITICAL',\n}\n\nexport interface CreateLogDto {\n type: string;\n level: LogLevel;\n message?: string;\n meta?: Record<string, any>;\n environment?: string;\n userId?: string;\n ip?: string;\n timestamp?: Date | string;\n tags?: string[];\n}\n\nexport interface CreateMetricDto {\n type: string;\n value: number;\n meta?: Record<string, any>;\n environment?: string;\n timestamp?: Date | string;\n tags?: string[];\n unit?: string;\n}\n","import { CreateLogDto, LogLevel } from \"./types\";\n\ntype LogOptions = Omit<CreateLogDto, \"level\" | \"message\" | \"type\"> & {\n type?: string;\n};\n\nexport class Logs {\n constructor(private sendLog: (log: CreateLogDto) => Promise<void>) {}\n\n /**\n * Send a DEBUG log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async debug(type: string, message: string, options?: LogOptions) {\n return this.sendLog({\n level: LogLevel.DEBUG,\n type,\n message,\n ...options,\n });\n }\n\n /**\n * Send an INFO log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async info(type: string, message: string, options?: LogOptions) {\n return this.sendLog({\n type,\n level: LogLevel.INFO,\n message,\n ...options,\n });\n }\n\n /**\n * Send a SUCCESS log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async success(type: string, message: string, options?: LogOptions) {\n return this.sendLog({\n type,\n level: LogLevel.SUCCESS,\n message,\n ...options,\n });\n }\n /**\n * Send a FAILURE log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async failure(type: string, message: string, options?: LogOptions) {\n return this.sendLog({\n type,\n level: LogLevel.FAILURE,\n message,\n ...options,\n });\n }\n\n /**\n * Send a WARN log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async warn(type: string, message: string, options?: LogOptions) {\n return this.sendLog({\n type,\n level: LogLevel.WARN,\n message,\n ...options,\n });\n }\n\n /**\n * Send an ERROR log with smart error handling\n * @param message Log message\n * @param errorOrOptions Error object or options object\n */\n async error(\n type: string,\n message: string,\n errorOrOptions?: Error | LogOptions,\n ) {\n let meta = {};\n let options: Partial<CreateLogDto> = {};\n\n if (errorOrOptions instanceof Error) {\n meta = {\n error: {\n name: errorOrOptions.name,\n message: errorOrOptions.message,\n stack: errorOrOptions.stack,\n },\n };\n } else if (errorOrOptions) {\n options = errorOrOptions;\n }\n\n return this.sendLog({\n type,\n level: LogLevel.ERROR,\n message,\n ...options,\n meta: { ...meta, ...(options.meta || {}) },\n });\n }\n\n /**\n * Send a CRITICAL log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async critical(type: string, message: string, options?: LogOptions) {\n return this.sendLog({\n type,\n level: LogLevel.CRITICAL,\n message,\n ...options,\n });\n }\n}\n","import { Logs } from \"./logs\";\nimport { CreateLogDto, CreateMetricDto } from \"./types\";\n\nexport interface SysWatchConfig {\n apiKey: string;\n defaultMeta?: Record<string, any>;\n defaultTags?: string[];\n}\n\nexport class SysWatch {\n private apiKey: string;\n private baseUrl: string;\n private defaultMeta: Record<string, any>;\n private defaultTags: string[];\n\n public log: Logs;\n\n constructor(config: SysWatchConfig) {\n this.apiKey = config.apiKey;\n this.baseUrl = \"https://syswatchapp.discloud.app/v1\";\n this.defaultMeta = config.defaultMeta || {};\n this.defaultTags = config.defaultTags || [];\n\n if (this.baseUrl.endsWith(\"/\")) {\n this.baseUrl = this.baseUrl.slice(0, -1);\n }\n\n this.log = new Logs(this.sendLog.bind(this));\n }\n\n private async request(path: string, body: any) {\n try {\n const response = await fetch(`${this.baseUrl}${path}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-api-key\": this.apiKey,\n \"user-agent\": \"NodeJS SysWatch SDK \",\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `SysWatch API Error: ${response.status} ${response.statusText} - ${errorText}`\n );\n }\n\n return await response.json();\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Send a log entry to SysWatch\n * @param data Log data\n */\n private async sendLog(data: CreateLogDto) {\n const payload: CreateLogDto = {\n ...data,\n ...((this.defaultMeta || data?.meta) && {\n meta: { ...this.defaultMeta, ...data?.meta },\n }),\n ...((this.defaultTags || data?.tags) && {\n tags: [...this.defaultTags, ...(data?.tags || [])],\n }),\n };\n return this.request(\"/logs\", payload);\n }\n\n /**\n * Track a metric value\n * @param type Metric type key\n * @param value Metric value\n * @param unit Unit of measurement (optional)\n * @param options Additional options\n */\n async trackMetric(\n type: string,\n value: number,\n unit?: string,\n options?: Omit<CreateMetricDto, \"type\" | \"value\" | \"unit\">\n ) {\n const payload: CreateMetricDto = {\n type,\n value,\n unit,\n ...options,\n ...((this.defaultMeta || options?.meta) && {\n meta: { ...this.defaultMeta, ...options?.meta },\n }),\n ...((this.defaultTags || options?.tags) && {\n tags: [...this.defaultTags, ...(options?.tags || [])],\n }),\n };\n return this.request(\"/metrics\", payload);\n }\n}\n"],"mappings":"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","names":["LogLevel","Logs","sendLog","type","message","options","errorOrOptions","meta","SysWatch","config","Logs","path","body","response","errorText","error","data","payload","type","value","unit","options"]}
1
+ {"version":3,"sources":["../src/types.ts","../src/logs.ts","../src/client.ts"],"sourcesContent":["export enum LogLevel {\n DEBUG = 'DEBUG',\n INFO = 'INFO',\n SUCCESS = 'SUCCESS',\n FAILURE = 'FAILURE',\n WARN = 'WARN',\n ERROR = 'ERROR',\n CRITICAL = 'CRITICAL',\n}\n\nexport interface CreateLogDto {\n type: string;\n level: LogLevel;\n message?: string;\n meta?: Record<string, any>;\n environment?: string;\n userId?: string;\n ip?: string;\n timestamp?: Date | string;\n tags?: string[];\n}\n\nexport interface CreateMetricDto {\n type: string;\n value: number;\n meta?: Record<string, any>;\n environment?: string;\n timestamp?: Date | string;\n tags?: string[];\n unit?: string;\n}\n\nexport interface CreateLogBatchDto {\n logs: CreateLogDto[];\n}\n\nexport interface CreateMetricBatchDto {\n metrics: CreateMetricDto[];\n}\n","import { CreateLogDto, LogLevel } from \"./types\";\n\ntype LogOptions = Omit<CreateLogDto, \"level\" | \"message\" | \"type\"> & {\n type?: string;\n};\n\nexport class Logs {\n constructor(\n private sendLog: (log: CreateLogDto) => Promise<void>,\n private sendLogBatch: (logs: CreateLogDto[]) => Promise<void>,\n ) {}\n\n /**\n * Send multiple logs in batch\n * @param logs Array of log entries\n */\n async batch(logs: CreateLogDto[]) {\n return this.sendLogBatch(logs);\n }\n\n /**\n * Send a DEBUG log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async debug(type: string, message: string, options?: LogOptions): Promise<void>;\n async debug(type: string, options?: LogOptions): Promise<void>;\n async debug(\n type: string,\n messageOrOptions?: string | LogOptions,\n options?: LogOptions,\n ) {\n let message: string | undefined;\n let finalOptions: LogOptions | undefined;\n\n if (typeof messageOrOptions === \"string\") {\n message = messageOrOptions;\n finalOptions = options;\n } else {\n finalOptions = messageOrOptions;\n }\n\n return this.sendLog({\n level: LogLevel.DEBUG,\n type,\n message,\n ...finalOptions,\n });\n }\n\n /**\n * Send an INFO log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async info(type: string, message: string, options?: LogOptions): Promise<void>;\n async info(type: string, options?: LogOptions): Promise<void>;\n async info(\n type: string,\n messageOrOptions?: string | LogOptions,\n options?: LogOptions,\n ) {\n let message: string | undefined;\n let finalOptions: LogOptions | undefined;\n\n if (typeof messageOrOptions === \"string\") {\n message = messageOrOptions;\n finalOptions = options;\n } else {\n finalOptions = messageOrOptions;\n }\n\n return this.sendLog({\n type,\n level: LogLevel.INFO,\n message,\n ...finalOptions,\n });\n }\n\n /**\n * Send a SUCCESS log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async success(type: string, message: string, options?: LogOptions): Promise<void>;\n async success(type: string, options?: LogOptions): Promise<void>;\n async success(\n type: string,\n messageOrOptions?: string | LogOptions,\n options?: LogOptions,\n ) {\n let message: string | undefined;\n let finalOptions: LogOptions | undefined;\n\n if (typeof messageOrOptions === \"string\") {\n message = messageOrOptions;\n finalOptions = options;\n } else {\n finalOptions = messageOrOptions;\n }\n\n return this.sendLog({\n type,\n level: LogLevel.SUCCESS,\n message,\n ...finalOptions,\n });\n }\n /**\n * Send a FAILURE log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async failure(type: string, message: string, options?: LogOptions): Promise<void>;\n async failure(type: string, options?: LogOptions): Promise<void>;\n async failure(\n type: string,\n messageOrOptions?: string | LogOptions,\n options?: LogOptions,\n ) {\n let message: string | undefined;\n let finalOptions: LogOptions | undefined;\n\n if (typeof messageOrOptions === \"string\") {\n message = messageOrOptions;\n finalOptions = options;\n } else {\n finalOptions = messageOrOptions;\n }\n\n return this.sendLog({\n type,\n level: LogLevel.FAILURE,\n message,\n ...finalOptions,\n });\n }\n\n /**\n * Send a WARN log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async warn(type: string, message: string, options?: LogOptions): Promise<void>;\n async warn(type: string, options?: LogOptions): Promise<void>;\n async warn(\n type: string,\n messageOrOptions?: string | LogOptions,\n options?: LogOptions,\n ) {\n let message: string | undefined;\n let finalOptions: LogOptions | undefined;\n\n if (typeof messageOrOptions === \"string\") {\n message = messageOrOptions;\n finalOptions = options;\n } else {\n finalOptions = messageOrOptions;\n }\n\n return this.sendLog({\n type,\n level: LogLevel.WARN,\n message,\n ...finalOptions,\n });\n }\n\n /**\n * Send an ERROR log with smart error handling\n * @param message Log message\n * @param errorOrOptions Error object or options object\n */\n async error(\n type: string,\n message: string,\n errorOrOptions?: Error | LogOptions,\n ): Promise<void>;\n async error(type: string, errorOrOptions?: Error | LogOptions): Promise<void>;\n async error(\n type: string,\n messageOrErrorOrOptions?: string | Error | LogOptions,\n errorOrOptions?: Error | LogOptions,\n ) {\n let message: string | undefined;\n let finalErrorOrOptions: Error | LogOptions | undefined;\n\n if (typeof messageOrErrorOrOptions === \"string\") {\n message = messageOrErrorOrOptions;\n finalErrorOrOptions = errorOrOptions;\n } else {\n finalErrorOrOptions = messageOrErrorOrOptions as Error | LogOptions;\n }\n\n let meta = {};\n let options: Partial<CreateLogDto> = {};\n\n if (finalErrorOrOptions instanceof Error) {\n meta = {\n error: {\n name: finalErrorOrOptions.name,\n message: finalErrorOrOptions.message,\n stack: finalErrorOrOptions.stack,\n },\n };\n } else if (finalErrorOrOptions) {\n options = finalErrorOrOptions;\n }\n\n return this.sendLog({\n type,\n level: LogLevel.ERROR,\n message,\n ...options,\n meta: { ...meta, ...(options.meta || {}) },\n });\n }\n\n /**\n * Send a CRITICAL log\n * @param message Log message\n * @param options Additional options (meta, tags, etc.)\n */\n async critical(type: string, message: string, options?: LogOptions): Promise<void>;\n async critical(type: string, options?: LogOptions): Promise<void>;\n async critical(\n type: string,\n messageOrOptions?: string | LogOptions,\n options?: LogOptions,\n ) {\n let message: string | undefined;\n let finalOptions: LogOptions | undefined;\n\n if (typeof messageOrOptions === \"string\") {\n message = messageOrOptions;\n finalOptions = options;\n } else {\n finalOptions = messageOrOptions;\n }\n\n return this.sendLog({\n type,\n level: LogLevel.CRITICAL,\n message,\n ...finalOptions,\n });\n }\n}\n","import { Logs } from \"./logs\";\nimport { CreateLogDto, CreateMetricDto } from \"./types\";\n\nexport interface SysWatchConfig {\n apiKey: string;\n defaultMeta?: Record<string, any>;\n defaultTags?: string[];\n}\n\nexport class SysWatch {\n private apiKey: string;\n private baseUrl: string;\n private defaultMeta: Record<string, any>;\n private defaultTags: string[];\n private authorized: boolean = false;\n\n public log: Logs;\n\n constructor(config: SysWatchConfig) {\n this.apiKey = config.apiKey;\n this.baseUrl = \"https://syswatchapp.discloud.app/v1\";\n this.defaultMeta = config.defaultMeta || {};\n this.defaultTags = config.defaultTags || [];\n\n if (this.baseUrl.endsWith(\"/\")) {\n this.baseUrl = this.baseUrl.slice(0, -1);\n }\n\n this.log = new Logs(this.sendLog.bind(this), this.sendLogBatch.bind(this));\n }\n\n async init() {\n try {\n const response = await fetch(\n `${this.baseUrl}/systems/validate-api-key/${this.apiKey}`,\n {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"user-agent\": \"NodeJS SysWatch SDK\",\n },\n },\n );\n\n if (!response.ok) {\n throw new Error(\"Failed to validate API Key\");\n }\n\n const data = await response.json();\n if (!data.valid) {\n throw new Error(\"Invalid API Key\");\n }\n\n this.authorized = true;\n\n return this;\n } catch (error) {\n this.authorized = false;\n throw new Error(\n `SysWatch Initialization Error: ${\n error instanceof Error ? error.message : \"Unknown error\"\n }`,\n );\n }\n }\n\n static async create(config: SysWatchConfig) {\n const instance = new SysWatch(config);\n await instance.init();\n return instance;\n }\n\n private async request(path: string, body: any) {\n if (!this.authorized) {\n console.warn(\n \"SysWatch: API Key not authorized. Request blocked. Make sure to call init() and that the key is valid.\",\n );\n return;\n }\n\n try {\n const response = await fetch(`${this.baseUrl}${path}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-api-key\": this.apiKey,\n \"user-agent\": \"NodeJS SysWatch SDK\",\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `SysWatch API Error: ${response.status} ${response.statusText} - ${errorText}`,\n );\n }\n\n return await response.json();\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Send a log entry to SysWatch\n * @param data Log data\n */\n private async sendLog(data: CreateLogDto) {\n const payload: CreateLogDto = {\n ...data,\n ...((this.defaultMeta || data?.meta) && {\n meta: { ...this.defaultMeta, ...data?.meta },\n }),\n ...((this.defaultTags || data?.tags) && {\n tags: [...this.defaultTags, ...(data?.tags || [])],\n }),\n };\n return this.request(\"/logs\", payload);\n }\n\n /**\n * Send multiple log entries to SysWatch in batch\n * @param logs Array of log data\n */\n private async sendLogBatch(logs: CreateLogDto[]) {\n const processedLogs = logs.map((log) => ({\n ...log,\n ...((this.defaultMeta || log.meta) && {\n meta: { ...this.defaultMeta, ...log.meta },\n }),\n ...((this.defaultTags || log.tags) && {\n tags: [...this.defaultTags, ...(log.tags || [])],\n }),\n }));\n\n return this.request(\"/logs/batch\", { logs: processedLogs });\n }\n\n /**\n * Track a metric value\n * @param type Metric type key\n * @param value Metric value\n * @param unit Unit of measurement (optional)\n * @param options Additional options\n */\n async trackMetric(\n type: string,\n value: number,\n unit?: string,\n options?: Omit<CreateMetricDto, \"type\" | \"value\" | \"unit\">,\n ) {\n const payload: CreateMetricDto = {\n type,\n value,\n unit,\n ...options,\n ...((this.defaultMeta || options?.meta) && {\n meta: { ...this.defaultMeta, ...options?.meta },\n }),\n ...((this.defaultTags || options?.tags) && {\n tags: [...this.defaultTags, ...(options?.tags || [])],\n }),\n };\n return this.request(\"/metrics\", payload);\n }\n\n /**\n * Track multiple metric values in batch\n * @param metrics Array of metric data\n */\n async trackMetricBatch(metrics: CreateMetricDto[]) {\n const processedMetrics = metrics.map((metric) => ({\n ...metric,\n ...((this.defaultMeta || metric.meta) && {\n meta: { ...this.defaultMeta, ...metric.meta },\n }),\n ...((this.defaultTags || metric.tags) && {\n tags: [...this.defaultTags, ...(metric.tags || [])],\n }),\n }));\n\n return this.request(\"/metrics/batch\", { metrics: processedMetrics });\n }\n}\n"],"mappings":"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","names":["LogLevel","Logs","sendLog","sendLogBatch","logs","type","messageOrOptions","options","message","finalOptions","messageOrErrorOrOptions","errorOrOptions","finalErrorOrOptions","meta","SysWatch","_SysWatch","config","Logs","response","error","instance","path","body","errorText","data","payload","logs","processedLogs","log","type","value","unit","options","metrics","processedMetrics","metric"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@syswatch/core",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.mjs",
6
6
  "types": "dist/index.d.ts",