@sonisoft/now-sdk-ext-core 1.0.0-alpha.32 → 2.0.0-alpha.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/dist/auth/NowSDKAuthenticationHandler.d.ts +3 -3
- package/dist/auth/NowSDKAuthenticationHandler.js +6 -3
- package/dist/auth/NowSDKAuthenticationHandler.js.map +1 -1
- package/dist/comm/http/HTTPRequest.d.ts +2 -0
- package/dist/comm/http/RequestHandler.d.ts +1 -0
- package/dist/comm/http/RequestHandler.js +49 -15
- package/dist/comm/http/RequestHandler.js.map +1 -1
- package/dist/comm/http/ServiceNowProcessorRequest.d.ts +3 -0
- package/dist/comm/http/ServiceNowProcessorRequest.js +7 -4
- package/dist/comm/http/ServiceNowProcessorRequest.js.map +1 -1
- package/dist/index.d.ts +13 -3
- package/dist/index.js +13 -3
- package/dist/index.js.map +1 -1
- package/dist/sn/Application.d.ts +1 -0
- package/dist/sn/Application.js +26 -0
- package/dist/sn/Application.js.map +1 -1
- package/dist/sn/IServiceNowInstance.d.ts +1 -1
- package/dist/sn/ProgressWorker.d.ts +33 -0
- package/dist/sn/ProgressWorker.js +24 -0
- package/dist/sn/ProgressWorker.js.map +1 -0
- package/dist/sn/ServiceNowInstance.d.ts +2 -2
- package/dist/sn/ServiceNowInstance.js.map +1 -1
- package/dist/sn/amb/AMBClient.d.ts +66 -0
- package/dist/sn/amb/AMBClient.js +358 -0
- package/dist/sn/amb/AMBClient.js.map +1 -0
- package/dist/sn/amb/AMBConstants.d.ts +8 -0
- package/dist/sn/amb/AMBConstants.js +10 -0
- package/dist/sn/amb/AMBConstants.js.map +1 -0
- package/dist/sn/amb/AuthenticatedWebSocket.d.ts +25 -0
- package/dist/sn/amb/AuthenticatedWebSocket.js +56 -0
- package/dist/sn/amb/AuthenticatedWebSocket.js.map +1 -0
- package/dist/sn/amb/Channel.d.ts +67 -0
- package/dist/sn/amb/Channel.js +212 -0
- package/dist/sn/amb/Channel.js.map +1 -0
- package/dist/sn/amb/ChannelListener.d.ts +31 -0
- package/dist/sn/amb/ChannelListener.js +60 -0
- package/dist/sn/amb/ChannelListener.js.map +1 -0
- package/dist/sn/amb/ChannelRedirect.d.ts +13 -0
- package/dist/sn/amb/ChannelRedirect.js +50 -0
- package/dist/sn/amb/ChannelRedirect.js.map +1 -0
- package/dist/sn/amb/CrossClientChannel.d.ts +4 -0
- package/dist/sn/amb/CrossClientChannel.js +14 -0
- package/dist/sn/amb/CrossClientChannel.js.map +1 -0
- package/dist/sn/amb/EventManager.d.ts +13 -0
- package/dist/sn/amb/EventManager.js +40 -0
- package/dist/sn/amb/EventManager.js.map +1 -0
- package/dist/sn/amb/FunctionQueue.d.ts +53 -0
- package/dist/sn/amb/FunctionQueue.js +95 -0
- package/dist/sn/amb/FunctionQueue.js.map +1 -0
- package/dist/sn/amb/GraphQLSubscriptionExtension.d.ts +12 -0
- package/dist/sn/amb/GraphQLSubscriptionExtension.js +31 -0
- package/dist/sn/amb/GraphQLSubscriptionExtension.js.map +1 -0
- package/dist/sn/amb/Helper.d.ts +5 -0
- package/dist/sn/amb/Helper.js +6 -0
- package/dist/sn/amb/Helper.js.map +1 -0
- package/dist/sn/amb/MessageClient.d.ts +73 -0
- package/dist/sn/amb/MessageClient.js +154 -0
- package/dist/sn/amb/MessageClient.js.map +1 -0
- package/dist/sn/amb/MessageClientBuilder.d.ts +24 -0
- package/dist/sn/amb/MessageClientBuilder.js +95 -0
- package/dist/sn/amb/MessageClientBuilder.js.map +1 -0
- package/dist/sn/amb/Properties.d.ts +16 -0
- package/dist/sn/amb/Properties.js +32 -0
- package/dist/sn/amb/Properties.js.map +1 -0
- package/dist/sn/amb/ServerConnection.d.ts +132 -0
- package/dist/sn/amb/ServerConnection.js +579 -0
- package/dist/sn/amb/ServerConnection.js.map +1 -0
- package/dist/sn/amb/SessionExtension.d.ts +8 -0
- package/dist/sn/amb/SessionExtension.js +20 -0
- package/dist/sn/amb/SessionExtension.js.map +1 -0
- package/dist/sn/amb/SubscriptionCommandSender.d.ts +60 -0
- package/dist/sn/amb/SubscriptionCommandSender.js +222 -0
- package/dist/sn/amb/SubscriptionCommandSender.js.map +1 -0
- package/dist/sn/amb/TokenManagementExtension.d.ts +20 -0
- package/dist/sn/amb/TokenManagementExtension.js +90 -0
- package/dist/sn/amb/TokenManagementExtension.js.map +1 -0
- package/dist/sn/amb/XMLHttpRequest.d.ts +31 -0
- package/dist/sn/amb/XMLHttpRequest.js +287 -0
- package/dist/sn/amb/XMLHttpRequest.js.map +1 -0
- package/dist/sn/amb/cometd-nodejs-client.d.ts +1 -0
- package/dist/sn/amb/cometd-nodejs-client.js +84 -0
- package/dist/sn/amb/cometd-nodejs-client.js.map +1 -0
- package/dist/sn/amb/index.d.ts +19 -0
- package/dist/sn/amb/index.js +20 -0
- package/dist/sn/amb/index.js.map +1 -0
- package/dist/sn/application/AppRepoApplication.d.ts +166 -0
- package/dist/sn/application/AppRepoApplication.js +167 -0
- package/dist/sn/application/AppRepoApplication.js.map +1 -0
- package/dist/sn/application/ApplicationDetailModel.d.ts +71 -0
- package/dist/sn/application/ApplicationDetailModel.js +72 -0
- package/dist/sn/application/ApplicationDetailModel.js.map +1 -0
- package/dist/sn/application/ApplicationManager.d.ts +117 -0
- package/dist/sn/application/ApplicationManager.js +251 -0
- package/dist/sn/application/ApplicationManager.js.map +1 -0
- package/dist/sn/application/BatchDefinition.d.ts +16 -0
- package/dist/sn/application/BatchDefinition.js +60 -0
- package/dist/sn/application/BatchDefinition.js.map +1 -0
- package/dist/sn/application/BatchInstallation.d.ts +8 -0
- package/dist/sn/application/BatchInstallation.js +20 -0
- package/dist/sn/application/BatchInstallation.js.map +1 -0
- package/dist/sn/application/CompanyApplications.d.ts +234 -0
- package/dist/sn/application/CompanyApplications.js +91 -0
- package/dist/sn/application/CompanyApplications.js.map +1 -0
- package/dist/sn/atf/ATFTest.d.ts +27 -0
- package/dist/sn/atf/ATFTest.js +3 -0
- package/dist/sn/atf/ATFTest.js.map +1 -0
- package/dist/sn/atf/ATFTestExecutor.d.ts +115 -0
- package/dist/sn/atf/ATFTestExecutor.js +239 -0
- package/dist/sn/atf/ATFTestExecutor.js.map +1 -0
- package/dist/sn/atf/ATFTestStep.d.ts +0 -0
- package/dist/sn/atf/ATFTestStep.js +1 -0
- package/dist/sn/atf/ATFTestStep.js.map +1 -0
- package/dist/sn/atf/ATFTestSuite.d.ts +0 -0
- package/dist/sn/atf/ATFTestSuite.js +1 -0
- package/dist/sn/atf/ATFTestSuite.js.map +1 -0
- package/dist/sn/atf/TestFactory.d.ts +2 -0
- package/dist/sn/atf/TestFactory.js +3 -0
- package/dist/sn/atf/TestFactory.js.map +1 -0
- package/dist/sn/atf/TestStepFactory.d.ts +0 -0
- package/dist/sn/atf/TestStepFactory.js +1 -0
- package/dist/sn/atf/TestStepFactory.js.map +1 -0
- package/dist/sn/atf/TestSuiteFactory.d.ts +0 -0
- package/dist/sn/atf/TestSuiteFactory.js +1 -0
- package/dist/sn/atf/TestSuiteFactory.js.map +1 -0
- package/dist/sn/syslog/SyslogReader.d.ts +113 -0
- package/dist/sn/syslog/SyslogReader.js +369 -0
- package/dist/sn/syslog/SyslogReader.js.map +1 -0
- package/dist/sn/syslog/SyslogRecord.d.ts +86 -0
- package/dist/sn/syslog/SyslogRecord.js +2 -0
- package/dist/sn/syslog/SyslogRecord.js.map +1 -0
- package/package.json +8 -9
- package/dist/comm/http/CookieStore.d.ts +0 -8
- package/dist/comm/http/CookieStore.js +0 -21
- package/dist/comm/http/CookieStore.js.map +0 -1
- package/dist/comm/http/CookieStoreFactory.d.ts +0 -5
- package/dist/comm/http/CookieStoreFactory.js +0 -11
- package/dist/comm/http/CookieStoreFactory.js.map +0 -1
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { ServiceNowInstance } from "../ServiceNowInstance.js";
|
|
2
|
+
import { SyslogRecord, SyslogAppScopeRecord, SyslogFormatOptions, SyslogTailOptions } from './SyslogRecord.js';
|
|
3
|
+
/**
|
|
4
|
+
* SyslogReader class for querying and tailing ServiceNow syslog tables
|
|
5
|
+
* Supports encoded query strings, formatted table output, and file export
|
|
6
|
+
*/
|
|
7
|
+
export declare class SyslogReader {
|
|
8
|
+
private readonly SYSLOG_TABLE;
|
|
9
|
+
private readonly SYSLOG_APP_SCOPE_TABLE;
|
|
10
|
+
private _logger;
|
|
11
|
+
private _tableAPI;
|
|
12
|
+
private _instance;
|
|
13
|
+
private _tailInterval?;
|
|
14
|
+
private _lastFetchedSysId?;
|
|
15
|
+
private _isTailing;
|
|
16
|
+
constructor(instance: ServiceNowInstance);
|
|
17
|
+
/**
|
|
18
|
+
* Query the syslog table with an encoded query string
|
|
19
|
+
* @param encodedQuery ServiceNow encoded query string (e.g., "levelSTARTSWITHerror^ORDERBYDESCsys_created_on")
|
|
20
|
+
* @param limit Maximum number of records to return (default: 100)
|
|
21
|
+
* @returns Promise<SyslogRecord[]> Array of syslog records
|
|
22
|
+
*/
|
|
23
|
+
querySyslog(encodedQuery?: string, limit?: number): Promise<SyslogRecord[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Query the syslog_app_scope table with an encoded query string
|
|
26
|
+
* @param encodedQuery ServiceNow encoded query string
|
|
27
|
+
* @param limit Maximum number of records to return (default: 100)
|
|
28
|
+
* @returns Promise<SyslogAppScopeRecord[]> Array of syslog_app_scope records
|
|
29
|
+
*/
|
|
30
|
+
querySyslogAppScope(encodedQuery?: string, limit?: number): Promise<SyslogAppScopeRecord[]>;
|
|
31
|
+
/**
|
|
32
|
+
* Format syslog records as a table for console output
|
|
33
|
+
* @param records Array of syslog records
|
|
34
|
+
* @param options Formatting options
|
|
35
|
+
* @returns string Formatted table as string
|
|
36
|
+
*/
|
|
37
|
+
formatAsTable(records: (SyslogRecord | SyslogAppScopeRecord)[], options?: SyslogFormatOptions): string;
|
|
38
|
+
/**
|
|
39
|
+
* Build ASCII table from rows
|
|
40
|
+
* @param rows Array of row data
|
|
41
|
+
* @param colWidths Column widths
|
|
42
|
+
* @param hasHeader Whether first row is header
|
|
43
|
+
* @returns Formatted table string
|
|
44
|
+
*/
|
|
45
|
+
private buildAsciiTable;
|
|
46
|
+
/**
|
|
47
|
+
* Pad string to specified width
|
|
48
|
+
* @param str String to pad
|
|
49
|
+
* @param width Target width
|
|
50
|
+
* @returns Padded string
|
|
51
|
+
*/
|
|
52
|
+
private padString;
|
|
53
|
+
/**
|
|
54
|
+
* Format and print syslog records to console
|
|
55
|
+
* @param records Array of syslog records
|
|
56
|
+
* @param options Formatting options
|
|
57
|
+
*/
|
|
58
|
+
printTable(records: (SyslogRecord | SyslogAppScopeRecord)[], options?: SyslogFormatOptions): void;
|
|
59
|
+
/**
|
|
60
|
+
* Save syslog records to a file
|
|
61
|
+
* @param records Array of syslog records
|
|
62
|
+
* @param filePath Path to save the file
|
|
63
|
+
* @param format Output format ('json', 'csv', 'table')
|
|
64
|
+
* @param append Whether to append to existing file (default: false)
|
|
65
|
+
*/
|
|
66
|
+
saveToFile(records: (SyslogRecord | SyslogAppScopeRecord)[], filePath: string, format?: 'json' | 'csv' | 'table', append?: boolean): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Tail syslog in real-time (like tail -f)
|
|
69
|
+
* @param tableName Table to tail ('syslog' or 'syslog_app_scope')
|
|
70
|
+
* @param options Tail options including query, interval, and callbacks
|
|
71
|
+
*/
|
|
72
|
+
startTailing(tableName?: 'syslog' | 'syslog_app_scope', options?: SyslogTailOptions): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Stop tailing logs
|
|
75
|
+
*/
|
|
76
|
+
stopTailing(): void;
|
|
77
|
+
/**
|
|
78
|
+
* Check if currently tailing
|
|
79
|
+
*/
|
|
80
|
+
get isTailing(): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Format records as CSV
|
|
83
|
+
* @param records Array of records
|
|
84
|
+
* @returns CSV string
|
|
85
|
+
*/
|
|
86
|
+
private formatAsCSV;
|
|
87
|
+
/**
|
|
88
|
+
* Format date based on format option
|
|
89
|
+
* @param dateString ISO date string
|
|
90
|
+
* @param format Date format option
|
|
91
|
+
* @returns Formatted date string
|
|
92
|
+
*/
|
|
93
|
+
private formatDate;
|
|
94
|
+
/**
|
|
95
|
+
* Get relative time string (e.g., "2 minutes ago")
|
|
96
|
+
* @param date Date object
|
|
97
|
+
* @returns Relative time string
|
|
98
|
+
*/
|
|
99
|
+
private getRelativeTime;
|
|
100
|
+
/**
|
|
101
|
+
* Colorize log level for console output
|
|
102
|
+
* @param level Log level
|
|
103
|
+
* @returns Colorized level string
|
|
104
|
+
*/
|
|
105
|
+
private colorizeLevel;
|
|
106
|
+
/**
|
|
107
|
+
* Truncate string to maximum length
|
|
108
|
+
* @param str String to truncate
|
|
109
|
+
* @param maxLength Maximum length
|
|
110
|
+
* @returns Truncated string
|
|
111
|
+
*/
|
|
112
|
+
private truncateString;
|
|
113
|
+
}
|
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
import { Logger } from "../../util/Logger.js";
|
|
2
|
+
import { TableAPIRequest } from "../../comm/http/TableAPIRequest.js";
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
/**
|
|
6
|
+
* SyslogReader class for querying and tailing ServiceNow syslog tables
|
|
7
|
+
* Supports encoded query strings, formatted table output, and file export
|
|
8
|
+
*/
|
|
9
|
+
export class SyslogReader {
|
|
10
|
+
SYSLOG_TABLE = 'syslog';
|
|
11
|
+
SYSLOG_APP_SCOPE_TABLE = 'syslog_app_scope';
|
|
12
|
+
_logger = new Logger("SyslogReader");
|
|
13
|
+
_tableAPI;
|
|
14
|
+
_instance;
|
|
15
|
+
_tailInterval;
|
|
16
|
+
_lastFetchedSysId;
|
|
17
|
+
_isTailing = false;
|
|
18
|
+
constructor(instance) {
|
|
19
|
+
this._instance = instance;
|
|
20
|
+
this._tableAPI = new TableAPIRequest(instance);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Query the syslog table with an encoded query string
|
|
24
|
+
* @param encodedQuery ServiceNow encoded query string (e.g., "levelSTARTSWITHerror^ORDERBYDESCsys_created_on")
|
|
25
|
+
* @param limit Maximum number of records to return (default: 100)
|
|
26
|
+
* @returns Promise<SyslogRecord[]> Array of syslog records
|
|
27
|
+
*/
|
|
28
|
+
async querySyslog(encodedQuery, limit = 100) {
|
|
29
|
+
this._logger.info(`Querying syslog table with query: ${encodedQuery || 'none'}`);
|
|
30
|
+
const query = {
|
|
31
|
+
sysparm_limit: limit,
|
|
32
|
+
sysparm_display_value: 'false'
|
|
33
|
+
};
|
|
34
|
+
if (encodedQuery) {
|
|
35
|
+
query.sysparm_query = encodedQuery;
|
|
36
|
+
}
|
|
37
|
+
const response = await this._tableAPI.get(this.SYSLOG_TABLE, query);
|
|
38
|
+
if (response.status === 200 && response.bodyObject?.result) {
|
|
39
|
+
this._logger.info(`Retrieved ${response.bodyObject.result.length} syslog records`);
|
|
40
|
+
return response.bodyObject.result;
|
|
41
|
+
}
|
|
42
|
+
throw new Error(`Failed to query syslog table. Status: ${response.status}`);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Query the syslog_app_scope table with an encoded query string
|
|
46
|
+
* @param encodedQuery ServiceNow encoded query string
|
|
47
|
+
* @param limit Maximum number of records to return (default: 100)
|
|
48
|
+
* @returns Promise<SyslogAppScopeRecord[]> Array of syslog_app_scope records
|
|
49
|
+
*/
|
|
50
|
+
async querySyslogAppScope(encodedQuery, limit = 100) {
|
|
51
|
+
this._logger.info(`Querying syslog_app_scope table with query: ${encodedQuery || 'none'}`);
|
|
52
|
+
const query = {
|
|
53
|
+
sysparm_limit: limit,
|
|
54
|
+
sysparm_display_value: 'false'
|
|
55
|
+
};
|
|
56
|
+
if (encodedQuery) {
|
|
57
|
+
query.sysparm_query = encodedQuery;
|
|
58
|
+
}
|
|
59
|
+
const response = await this._tableAPI.get(this.SYSLOG_APP_SCOPE_TABLE, query);
|
|
60
|
+
if (response.status === 200 && response.bodyObject?.result) {
|
|
61
|
+
this._logger.info(`Retrieved ${response.bodyObject.result.length} syslog_app_scope records`);
|
|
62
|
+
return response.bodyObject.result;
|
|
63
|
+
}
|
|
64
|
+
throw new Error(`Failed to query syslog_app_scope table. Status: ${response.status}`);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Format syslog records as a table for console output
|
|
68
|
+
* @param records Array of syslog records
|
|
69
|
+
* @param options Formatting options
|
|
70
|
+
* @returns string Formatted table as string
|
|
71
|
+
*/
|
|
72
|
+
formatAsTable(records, options = {}) {
|
|
73
|
+
const { fields = ['sys_created_on', 'level', 'source', 'message'], maxMessageWidth = 80, includeHeaders = true, dateFormat = 'locale' } = options;
|
|
74
|
+
if (records.length === 0) {
|
|
75
|
+
return 'No records found.';
|
|
76
|
+
}
|
|
77
|
+
// Determine if we have app_scope records
|
|
78
|
+
const hasAppScope = 'app_scope' in records[0];
|
|
79
|
+
const displayFields = hasAppScope && !fields.includes('app_scope')
|
|
80
|
+
? [...fields.slice(0, 2), 'app_scope', ...fields.slice(2)]
|
|
81
|
+
: fields;
|
|
82
|
+
// Define column widths
|
|
83
|
+
const colWidths = {
|
|
84
|
+
'sys_created_on': 25,
|
|
85
|
+
'level': 10,
|
|
86
|
+
'source': 30,
|
|
87
|
+
'app_scope': 30,
|
|
88
|
+
'message': maxMessageWidth,
|
|
89
|
+
'sys_id': 36
|
|
90
|
+
};
|
|
91
|
+
// Build rows
|
|
92
|
+
const rows = [];
|
|
93
|
+
if (includeHeaders) {
|
|
94
|
+
rows.push(displayFields.map(f => f.toUpperCase()));
|
|
95
|
+
}
|
|
96
|
+
records.forEach(record => {
|
|
97
|
+
const row = displayFields.map(field => {
|
|
98
|
+
let value;
|
|
99
|
+
if (field === 'sys_created_on') {
|
|
100
|
+
value = this.formatDate(record[field], dateFormat);
|
|
101
|
+
}
|
|
102
|
+
else if (field === 'level') {
|
|
103
|
+
value = this.colorizeLevel(record[field]);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
value = String(record[field] || '');
|
|
107
|
+
}
|
|
108
|
+
const width = colWidths[field] || 30;
|
|
109
|
+
return this.truncateString(value, width);
|
|
110
|
+
});
|
|
111
|
+
rows.push(row);
|
|
112
|
+
});
|
|
113
|
+
// Format as table
|
|
114
|
+
return this.buildAsciiTable(rows, displayFields.map(f => colWidths[f] || 30), includeHeaders);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Build ASCII table from rows
|
|
118
|
+
* @param rows Array of row data
|
|
119
|
+
* @param colWidths Column widths
|
|
120
|
+
* @param hasHeader Whether first row is header
|
|
121
|
+
* @returns Formatted table string
|
|
122
|
+
*/
|
|
123
|
+
buildAsciiTable(rows, colWidths, hasHeader) {
|
|
124
|
+
const lines = [];
|
|
125
|
+
// Top border
|
|
126
|
+
lines.push('┌' + colWidths.map(w => '─'.repeat(w + 2)).join('┬') + '┐');
|
|
127
|
+
// Header row
|
|
128
|
+
if (hasHeader && rows.length > 0) {
|
|
129
|
+
const header = rows[0];
|
|
130
|
+
lines.push('│ ' + header.map((cell, i) => this.padString(cell, colWidths[i])).join(' │ ') + ' │');
|
|
131
|
+
lines.push('├' + colWidths.map(w => '─'.repeat(w + 2)).join('┼') + '┤');
|
|
132
|
+
}
|
|
133
|
+
// Data rows
|
|
134
|
+
const startIdx = hasHeader ? 1 : 0;
|
|
135
|
+
for (let i = startIdx; i < rows.length; i++) {
|
|
136
|
+
const row = rows[i];
|
|
137
|
+
lines.push('│ ' + row.map((cell, j) => this.padString(cell, colWidths[j])).join(' │ ') + ' │');
|
|
138
|
+
}
|
|
139
|
+
// Bottom border
|
|
140
|
+
lines.push('└' + colWidths.map(w => '─'.repeat(w + 2)).join('┴') + '┘');
|
|
141
|
+
return lines.join('\n');
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Pad string to specified width
|
|
145
|
+
* @param str String to pad
|
|
146
|
+
* @param width Target width
|
|
147
|
+
* @returns Padded string
|
|
148
|
+
*/
|
|
149
|
+
padString(str, width) {
|
|
150
|
+
// Remove ANSI color codes for length calculation
|
|
151
|
+
const strippedStr = str.replace(/\x1b\[[0-9;]*m/g, '');
|
|
152
|
+
const padding = width - strippedStr.length;
|
|
153
|
+
if (padding <= 0)
|
|
154
|
+
return str;
|
|
155
|
+
return str + ' '.repeat(padding);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Format and print syslog records to console
|
|
159
|
+
* @param records Array of syslog records
|
|
160
|
+
* @param options Formatting options
|
|
161
|
+
*/
|
|
162
|
+
printTable(records, options = {}) {
|
|
163
|
+
console.log(this.formatAsTable(records, options));
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Save syslog records to a file
|
|
167
|
+
* @param records Array of syslog records
|
|
168
|
+
* @param filePath Path to save the file
|
|
169
|
+
* @param format Output format ('json', 'csv', 'table')
|
|
170
|
+
* @param append Whether to append to existing file (default: false)
|
|
171
|
+
*/
|
|
172
|
+
async saveToFile(records, filePath, format = 'json', append = false) {
|
|
173
|
+
const dir = path.dirname(filePath);
|
|
174
|
+
// Ensure directory exists
|
|
175
|
+
if (!fs.existsSync(dir)) {
|
|
176
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
177
|
+
}
|
|
178
|
+
let content;
|
|
179
|
+
switch (format) {
|
|
180
|
+
case 'json':
|
|
181
|
+
content = JSON.stringify(records, null, 2);
|
|
182
|
+
break;
|
|
183
|
+
case 'csv':
|
|
184
|
+
content = this.formatAsCSV(records);
|
|
185
|
+
break;
|
|
186
|
+
case 'table':
|
|
187
|
+
content = this.formatAsTable(records);
|
|
188
|
+
break;
|
|
189
|
+
default:
|
|
190
|
+
content = JSON.stringify(records, null, 2);
|
|
191
|
+
}
|
|
192
|
+
if (append) {
|
|
193
|
+
fs.appendFileSync(filePath, content + '\n');
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
fs.writeFileSync(filePath, content);
|
|
197
|
+
}
|
|
198
|
+
this._logger.info(`Saved ${records.length} records to ${filePath}`);
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Tail syslog in real-time (like tail -f)
|
|
202
|
+
* @param tableName Table to tail ('syslog' or 'syslog_app_scope')
|
|
203
|
+
* @param options Tail options including query, interval, and callbacks
|
|
204
|
+
*/
|
|
205
|
+
async startTailing(tableName = 'syslog', options = {}) {
|
|
206
|
+
if (this._isTailing) {
|
|
207
|
+
throw new Error('Already tailing logs. Stop current tail before starting a new one.');
|
|
208
|
+
}
|
|
209
|
+
const { interval = 5000, initialLimit = 10, query, onLog, formatOptions, outputFile, append = true } = options;
|
|
210
|
+
this._isTailing = true;
|
|
211
|
+
this._logger.info(`Starting to tail ${tableName} table with ${interval}ms interval`);
|
|
212
|
+
// Fetch initial records
|
|
213
|
+
const queryMethod = tableName === 'syslog'
|
|
214
|
+
? this.querySyslog.bind(this)
|
|
215
|
+
: this.querySyslogAppScope.bind(this);
|
|
216
|
+
let initialQuery = query || '';
|
|
217
|
+
if (initialQuery && !initialQuery.includes('ORDERBY')) {
|
|
218
|
+
initialQuery += '^ORDERBYDESCsys_created_on';
|
|
219
|
+
}
|
|
220
|
+
else if (!initialQuery) {
|
|
221
|
+
initialQuery = 'ORDERBYDESCsys_created_on';
|
|
222
|
+
}
|
|
223
|
+
const initialRecords = await queryMethod(initialQuery, initialLimit);
|
|
224
|
+
if (initialRecords.length > 0) {
|
|
225
|
+
this._lastFetchedSysId = initialRecords[0].sys_id;
|
|
226
|
+
console.log('\n=== Initial Logs ===');
|
|
227
|
+
this.printTable(initialRecords, formatOptions);
|
|
228
|
+
if (outputFile) {
|
|
229
|
+
await this.saveToFile(initialRecords, outputFile, 'table', append);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// Start polling for new records
|
|
233
|
+
this._tailInterval = setInterval(async () => {
|
|
234
|
+
try {
|
|
235
|
+
let newQuery = query || '';
|
|
236
|
+
// Add filter for records newer than last fetched
|
|
237
|
+
if (this._lastFetchedSysId) {
|
|
238
|
+
newQuery = newQuery
|
|
239
|
+
? `${newQuery}^sys_idNOT IN${this._lastFetchedSysId}^ORDERBYDESCsys_created_on`
|
|
240
|
+
: `sys_idNOT IN${this._lastFetchedSysId}^ORDERBYDESCsys_created_on`;
|
|
241
|
+
}
|
|
242
|
+
const newRecords = await queryMethod(newQuery, 100);
|
|
243
|
+
if (newRecords.length > 0) {
|
|
244
|
+
this._lastFetchedSysId = newRecords[0].sys_id;
|
|
245
|
+
// Process each new record
|
|
246
|
+
newRecords.reverse().forEach(record => {
|
|
247
|
+
if (onLog) {
|
|
248
|
+
onLog(record);
|
|
249
|
+
}
|
|
250
|
+
// Print to console
|
|
251
|
+
this.printTable([record], formatOptions);
|
|
252
|
+
});
|
|
253
|
+
// Append to file if specified
|
|
254
|
+
if (outputFile) {
|
|
255
|
+
await this.saveToFile(newRecords, outputFile, 'table', true);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
catch (error) {
|
|
260
|
+
this._logger.error(`Error while tailing: ${error}`);
|
|
261
|
+
}
|
|
262
|
+
}, interval);
|
|
263
|
+
console.log(`\n👀 Tailing ${tableName} table (press Ctrl+C to stop)...`);
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Stop tailing logs
|
|
267
|
+
*/
|
|
268
|
+
stopTailing() {
|
|
269
|
+
if (this._tailInterval) {
|
|
270
|
+
clearInterval(this._tailInterval);
|
|
271
|
+
this._tailInterval = undefined;
|
|
272
|
+
}
|
|
273
|
+
this._isTailing = false;
|
|
274
|
+
this._lastFetchedSysId = undefined;
|
|
275
|
+
this._logger.info('Stopped tailing logs');
|
|
276
|
+
console.log('\n✓ Stopped tailing logs');
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Check if currently tailing
|
|
280
|
+
*/
|
|
281
|
+
get isTailing() {
|
|
282
|
+
return this._isTailing;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Format records as CSV
|
|
286
|
+
* @param records Array of records
|
|
287
|
+
* @returns CSV string
|
|
288
|
+
*/
|
|
289
|
+
formatAsCSV(records) {
|
|
290
|
+
if (records.length === 0)
|
|
291
|
+
return '';
|
|
292
|
+
const keys = Object.keys(records[0]);
|
|
293
|
+
const header = keys.join(',');
|
|
294
|
+
const rows = records.map(record => keys.map(key => {
|
|
295
|
+
const value = String(record[key] || '');
|
|
296
|
+
return value.includes(',') ? `"${value.replace(/"/g, '""')}"` : value;
|
|
297
|
+
}).join(','));
|
|
298
|
+
return [header, ...rows].join('\n');
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Format date based on format option
|
|
302
|
+
* @param dateString ISO date string
|
|
303
|
+
* @param format Date format option
|
|
304
|
+
* @returns Formatted date string
|
|
305
|
+
*/
|
|
306
|
+
formatDate(dateString, format) {
|
|
307
|
+
if (!dateString)
|
|
308
|
+
return '';
|
|
309
|
+
const date = new Date(dateString);
|
|
310
|
+
switch (format) {
|
|
311
|
+
case 'iso':
|
|
312
|
+
return date.toISOString();
|
|
313
|
+
case 'locale':
|
|
314
|
+
return date.toLocaleString();
|
|
315
|
+
case 'relative':
|
|
316
|
+
return this.getRelativeTime(date);
|
|
317
|
+
default:
|
|
318
|
+
return date.toLocaleString();
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Get relative time string (e.g., "2 minutes ago")
|
|
323
|
+
* @param date Date object
|
|
324
|
+
* @returns Relative time string
|
|
325
|
+
*/
|
|
326
|
+
getRelativeTime(date) {
|
|
327
|
+
const now = new Date();
|
|
328
|
+
const diffMs = now.getTime() - date.getTime();
|
|
329
|
+
const diffSecs = Math.floor(diffMs / 1000);
|
|
330
|
+
const diffMins = Math.floor(diffSecs / 60);
|
|
331
|
+
const diffHours = Math.floor(diffMins / 60);
|
|
332
|
+
const diffDays = Math.floor(diffHours / 24);
|
|
333
|
+
if (diffSecs < 60)
|
|
334
|
+
return `${diffSecs}s ago`;
|
|
335
|
+
if (diffMins < 60)
|
|
336
|
+
return `${diffMins}m ago`;
|
|
337
|
+
if (diffHours < 24)
|
|
338
|
+
return `${diffHours}h ago`;
|
|
339
|
+
return `${diffDays}d ago`;
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Colorize log level for console output
|
|
343
|
+
* @param level Log level
|
|
344
|
+
* @returns Colorized level string
|
|
345
|
+
*/
|
|
346
|
+
colorizeLevel(level) {
|
|
347
|
+
const colors = {
|
|
348
|
+
error: '\x1b[31m', // Red
|
|
349
|
+
warn: '\x1b[33m', // Yellow
|
|
350
|
+
info: '\x1b[32m', // Green
|
|
351
|
+
debug: '\x1b[36m', // Cyan
|
|
352
|
+
};
|
|
353
|
+
const reset = '\x1b[0m';
|
|
354
|
+
const color = colors[level.toLowerCase()] || '';
|
|
355
|
+
return `${color}${level.toUpperCase()}${reset}`;
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Truncate string to maximum length
|
|
359
|
+
* @param str String to truncate
|
|
360
|
+
* @param maxLength Maximum length
|
|
361
|
+
* @returns Truncated string
|
|
362
|
+
*/
|
|
363
|
+
truncateString(str, maxLength) {
|
|
364
|
+
if (str.length <= maxLength)
|
|
365
|
+
return str;
|
|
366
|
+
return str.substring(0, maxLength - 3) + '...';
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
//# sourceMappingURL=SyslogReader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SyslogReader.js","sourceRoot":"","sources":["../../../src/sn/syslog/SyslogReader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAU7B;;;GAGG;AACH,MAAM,OAAO,YAAY;IACJ,YAAY,GAAG,QAAQ,CAAC;IACxB,sBAAsB,GAAG,kBAAkB,CAAC;IAErD,OAAO,GAAW,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC;IAC7C,SAAS,CAAkB;IAC3B,SAAS,CAAqB;IAC9B,aAAa,CAAkB;IAC/B,iBAAiB,CAAU;IAC3B,UAAU,GAAY,KAAK,CAAC;IAEpC,YAAmB,QAA4B;QAC3C,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,WAAW,CAAC,YAAqB,EAAE,QAAgB,GAAG;QAC/D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,qCAAqC,YAAY,IAAI,MAAM,EAAE,CAAC,CAAC;QAEjF,MAAM,KAAK,GAAoC;YAC3C,aAAa,EAAE,KAAK;YACpB,qBAAqB,EAAE,OAAO;SACjC,CAAC;QAEF,IAAI,YAAY,EAAE,CAAC;YACf,KAAK,CAAC,aAAa,GAAG,YAAY,CAAC;QACvC,CAAC;QAED,MAAM,QAAQ,GAAkC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CACpE,IAAI,CAAC,YAAY,EACjB,KAAK,CACR,CAAC;QAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YACzD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,iBAAiB,CAAC,CAAC;YACnF,OAAO,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;QACtC,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,yCAAyC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAChF,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,mBAAmB,CAAC,YAAqB,EAAE,QAAgB,GAAG;QACvE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,+CAA+C,YAAY,IAAI,MAAM,EAAE,CAAC,CAAC;QAE3F,MAAM,KAAK,GAAoC;YAC3C,aAAa,EAAE,KAAK;YACpB,qBAAqB,EAAE,OAAO;SACjC,CAAC;QAEF,IAAI,YAAY,EAAE,CAAC;YACf,KAAK,CAAC,aAAa,GAAG,YAAY,CAAC;QACvC,CAAC;QAED,MAAM,QAAQ,GAA0C,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAC5E,IAAI,CAAC,sBAAsB,EAC3B,KAAK,CACR,CAAC;QAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YACzD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,2BAA2B,CAAC,CAAC;YAC7F,OAAO,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;QACtC,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,mDAAmD,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED;;;;;OAKG;IACI,aAAa,CAChB,OAAgD,EAChD,UAA+B,EAAE;QAEjC,MAAM,EACF,MAAM,GAAG,CAAC,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,EACzD,eAAe,GAAG,EAAE,EACpB,cAAc,GAAG,IAAI,EACrB,UAAU,GAAG,QAAQ,EACxB,GAAG,OAAO,CAAC;QAEZ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,mBAAmB,CAAC;QAC/B,CAAC;QAED,yCAAyC;QACzC,MAAM,WAAW,GAAG,WAAW,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,aAAa,GAAG,WAAW,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC9D,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1D,CAAC,CAAC,MAAM,CAAC;QAEb,uBAAuB;QACvB,MAAM,SAAS,GAA2B;YACtC,gBAAgB,EAAE,EAAE;YACpB,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,EAAE;YACZ,WAAW,EAAE,EAAE;YACf,SAAS,EAAE,eAAe;YAC1B,QAAQ,EAAE,EAAE;SACf,CAAC;QAEF,aAAa;QACb,MAAM,IAAI,GAAe,EAAE,CAAC;QAE5B,IAAI,cAAc,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACrB,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBAClC,IAAI,KAAa,CAAC;gBAClB,IAAI,KAAK,KAAK,gBAAgB,EAAE,CAAC;oBAC7B,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAW,EAAE,UAAU,CAAC,CAAC;gBACjE,CAAC;qBAAM,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;oBAC3B,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAW,CAAC,CAAC;gBACxD,CAAC;qBAAM,CAAC;oBACJ,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBACxC,CAAC;gBAED,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACrC,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,kBAAkB;QAClB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;IAClG,CAAC;IAED;;;;;;OAMG;IACK,eAAe,CAAC,IAAgB,EAAE,SAAmB,EAAE,SAAkB;QAC7E,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,aAAa;QACb,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QAExE,aAAa;QACb,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YAClG,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QAC5E,CAAC;QAED,YAAY;QACZ,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QACnG,CAAC;QAED,gBAAgB;QAChB,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QAExE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED;;;;;OAKG;IACK,SAAS,CAAC,GAAW,EAAE,KAAa;QACxC,iDAAiD;QACjD,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC;QAC3C,IAAI,OAAO,IAAI,CAAC;YAAE,OAAO,GAAG,CAAC;QAC7B,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED;;;;OAIG;IACI,UAAU,CACb,OAAgD,EAChD,UAA+B,EAAE;QAEjC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACtD,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,UAAU,CACnB,OAAgD,EAChD,QAAgB,EAChB,SAAmC,MAAM,EACzC,SAAkB,KAAK;QAEvB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEnC,0BAA0B;QAC1B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,OAAe,CAAC;QAEpB,QAAQ,MAAM,EAAE,CAAC;YACb,KAAK,MAAM;gBACP,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC3C,MAAM;YACV,KAAK,KAAK;gBACN,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBACpC,MAAM;YACV,KAAK,OAAO;gBACR,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBACtC,MAAM;YACV;gBACI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACT,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACJ,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,eAAe,QAAQ,EAAE,CAAC,CAAC;IACxE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,YAAY,CACrB,YAA2C,QAAQ,EACnD,UAA6B,EAAE;QAE/B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QAC1F,CAAC;QAED,MAAM,EACF,QAAQ,GAAG,IAAI,EACf,YAAY,GAAG,EAAE,EACjB,KAAK,EACL,KAAK,EACL,aAAa,EACb,UAAU,EACV,MAAM,GAAG,IAAI,EAChB,GAAG,OAAO,CAAC;QAEZ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,SAAS,eAAe,QAAQ,aAAa,CAAC,CAAC;QAErF,wBAAwB;QACxB,MAAM,WAAW,GAAG,SAAS,KAAK,QAAQ;YACtC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7B,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1C,IAAI,YAAY,GAAG,KAAK,IAAI,EAAE,CAAC;QAC/B,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACpD,YAAY,IAAI,4BAA4B,CAAC;QACjD,CAAC;aAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,YAAY,GAAG,2BAA2B,CAAC;QAC/C,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,WAAW,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAErE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,iBAAiB,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YACtC,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;YAE/C,IAAI,UAAU,EAAE,CAAC;gBACb,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YACvE,CAAC;QACL,CAAC;QAED,gCAAgC;QAChC,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;YACxC,IAAI,CAAC;gBACD,IAAI,QAAQ,GAAG,KAAK,IAAI,EAAE,CAAC;gBAE3B,iDAAiD;gBACjD,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACzB,QAAQ,GAAG,QAAQ;wBACf,CAAC,CAAC,GAAG,QAAQ,gBAAgB,IAAI,CAAC,iBAAiB,4BAA4B;wBAC/E,CAAC,CAAC,eAAe,IAAI,CAAC,iBAAiB,4BAA4B,CAAC;gBAC5E,CAAC;gBAED,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;gBAEpD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxB,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;oBAE9C,0BAA0B;oBAC1B,UAAU,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;wBAClC,IAAI,KAAK,EAAE,CAAC;4BACR,KAAK,CAAC,MAAM,CAAC,CAAC;wBAClB,CAAC;wBAED,mBAAmB;wBACnB,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC;oBAC7C,CAAC,CAAC,CAAC;oBAEH,8BAA8B;oBAC9B,IAAI,UAAU,EAAE,CAAC;wBACb,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;oBACjE,CAAC;gBACL,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,wBAAwB,KAAK,EAAE,CAAC,CAAC;YACxD,CAAC;QACL,CAAC,EAAE,QAAQ,CAAC,CAAC;QAEb,OAAO,CAAC,GAAG,CAAC,gBAAgB,SAAS,kCAAkC,CAAC,CAAC;IAC7E,CAAC;IAED;;OAEG;IACI,WAAW;QACd,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAClC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACK,WAAW,CAAC,OAAgD;QAChE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEpC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAC9B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACX,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YACxC,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1E,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CACf,CAAC;QAEF,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED;;;;;OAKG;IACK,UAAU,CAAC,UAAkB,EAAE,MAAqC;QACxE,IAAI,CAAC,UAAU;YAAE,OAAO,EAAE,CAAC;QAE3B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;QAElC,QAAQ,MAAM,EAAE,CAAC;YACb,KAAK,KAAK;gBACN,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;YAC9B,KAAK,QAAQ;gBACT,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;YACjC,KAAK,UAAU;gBACX,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACtC;gBACI,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;QACrC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACK,eAAe,CAAC,IAAU;QAC9B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;QAE5C,IAAI,QAAQ,GAAG,EAAE;YAAE,OAAO,GAAG,QAAQ,OAAO,CAAC;QAC7C,IAAI,QAAQ,GAAG,EAAE;YAAE,OAAO,GAAG,QAAQ,OAAO,CAAC;QAC7C,IAAI,SAAS,GAAG,EAAE;YAAE,OAAO,GAAG,SAAS,OAAO,CAAC;QAC/C,OAAO,GAAG,QAAQ,OAAO,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACK,aAAa,CAAC,KAAa;QAC/B,MAAM,MAAM,GAA2B;YACnC,KAAK,EAAE,UAAU,EAAE,MAAM;YACzB,IAAI,EAAE,UAAU,EAAG,SAAS;YAC5B,IAAI,EAAE,UAAU,EAAG,QAAQ;YAC3B,KAAK,EAAE,UAAU,EAAE,OAAO;SAC7B,CAAC;QACF,MAAM,KAAK,GAAG,SAAS,CAAC;QACxB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAChD,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,GAAG,KAAK,EAAE,CAAC;IACpD,CAAC;IAED;;;;;OAKG;IACK,cAAc,CAAC,GAAW,EAAE,SAAiB;QACjD,IAAI,GAAG,CAAC,MAAM,IAAI,SAAS;YAAE,OAAO,GAAG,CAAC;QACxC,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IACnD,CAAC;CACJ"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents a syslog record from the ServiceNow syslog table
|
|
3
|
+
*/
|
|
4
|
+
export interface SyslogRecord {
|
|
5
|
+
/** System ID */
|
|
6
|
+
sys_id: string;
|
|
7
|
+
/** Created timestamp */
|
|
8
|
+
sys_created_on: string;
|
|
9
|
+
/** Message level (debug, info, warn, error) */
|
|
10
|
+
level: string;
|
|
11
|
+
/** Log message */
|
|
12
|
+
message: string;
|
|
13
|
+
/** Source of the log entry */
|
|
14
|
+
source: string;
|
|
15
|
+
/** User who triggered the log */
|
|
16
|
+
sys_created_by?: string;
|
|
17
|
+
/** Additional fields that may be present */
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Represents a syslog_app_scope record from ServiceNow
|
|
22
|
+
*/
|
|
23
|
+
export interface SyslogAppScopeRecord {
|
|
24
|
+
/** System ID */
|
|
25
|
+
sys_id: string;
|
|
26
|
+
/** Created timestamp */
|
|
27
|
+
sys_created_on: string;
|
|
28
|
+
/** Message level (debug, info, warn, error) */
|
|
29
|
+
level: string;
|
|
30
|
+
/** Log message */
|
|
31
|
+
message: string;
|
|
32
|
+
/** Source of the log entry */
|
|
33
|
+
source: string;
|
|
34
|
+
/** Application scope */
|
|
35
|
+
app_scope: string;
|
|
36
|
+
/** Application name */
|
|
37
|
+
app_name?: string;
|
|
38
|
+
/** User who triggered the log */
|
|
39
|
+
sys_created_by?: string;
|
|
40
|
+
/** Additional fields that may be present */
|
|
41
|
+
[key: string]: unknown;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Response from syslog table query
|
|
45
|
+
*/
|
|
46
|
+
export interface SyslogResponse {
|
|
47
|
+
result: SyslogRecord[];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Response from syslog_app_scope table query
|
|
51
|
+
*/
|
|
52
|
+
export interface SyslogAppScopeResponse {
|
|
53
|
+
result: SyslogAppScopeRecord[];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Options for formatting syslog output
|
|
57
|
+
*/
|
|
58
|
+
export interface SyslogFormatOptions {
|
|
59
|
+
/** Fields to display in the output */
|
|
60
|
+
fields?: string[];
|
|
61
|
+
/** Maximum width for message field */
|
|
62
|
+
maxMessageWidth?: number;
|
|
63
|
+
/** Whether to include headers in the output */
|
|
64
|
+
includeHeaders?: boolean;
|
|
65
|
+
/** Date format for timestamps */
|
|
66
|
+
dateFormat?: 'iso' | 'locale' | 'relative';
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Options for tailing syslog
|
|
70
|
+
*/
|
|
71
|
+
export interface SyslogTailOptions {
|
|
72
|
+
/** Polling interval in milliseconds */
|
|
73
|
+
interval?: number;
|
|
74
|
+
/** Number of initial records to fetch */
|
|
75
|
+
initialLimit?: number;
|
|
76
|
+
/** Encoded query string to filter logs */
|
|
77
|
+
query?: string;
|
|
78
|
+
/** Callback function for each new log entry */
|
|
79
|
+
onLog?: (log: SyslogRecord | SyslogAppScopeRecord) => void;
|
|
80
|
+
/** Format options for output */
|
|
81
|
+
formatOptions?: SyslogFormatOptions;
|
|
82
|
+
/** File path to write logs to (optional) */
|
|
83
|
+
outputFile?: string;
|
|
84
|
+
/** Whether to append to existing file */
|
|
85
|
+
append?: boolean;
|
|
86
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SyslogRecord.js","sourceRoot":"","sources":["../../../src/sn/syslog/SyslogRecord.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sonisoft/now-sdk-ext-core",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0-alpha.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "",
|
|
@@ -40,13 +40,11 @@
|
|
|
40
40
|
"types": "./dist/index.d.ts",
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@servicenow/glide": "^26.0.1",
|
|
43
|
-
"@servicenow/sdk": "
|
|
44
|
-
"@servicenow/sdk-build": "
|
|
45
|
-
"@servicenow/sdk-cli": "
|
|
43
|
+
"@servicenow/sdk": "4.0.2",
|
|
44
|
+
"@servicenow/sdk-build-core": "4.0.2",
|
|
45
|
+
"@servicenow/sdk-cli": "4.0.2",
|
|
46
46
|
"@servicenow/sdk-cli-core": "3.0.2",
|
|
47
|
-
"@servicenow/sdk-core": "
|
|
48
|
-
"@servicenow/sdk-project": "3.0.2",
|
|
49
|
-
"@servicenow/sdk-build-core": "3.0.2",
|
|
47
|
+
"@servicenow/sdk-core": "4.0.2",
|
|
50
48
|
"@ts-morph/common": "^0.24.0",
|
|
51
49
|
"@types/mock-fs": "^4.13.4",
|
|
52
50
|
"@types/node-gzip": "^1.1.3",
|
|
@@ -77,12 +75,13 @@
|
|
|
77
75
|
"winston": "3.14.2",
|
|
78
76
|
"ws": "^8.18.0",
|
|
79
77
|
"xml2js": "^0.6.2",
|
|
78
|
+
"xmldom": "^0.6.0",
|
|
80
79
|
"zod": "^3.23.8"
|
|
81
80
|
},
|
|
82
81
|
"devDependencies": {
|
|
83
82
|
"@eslint/js": "^9.10.0",
|
|
84
83
|
"@semantic-release/git": "^10.0.1",
|
|
85
|
-
"@semantic-release/gitlab": "^13.2.
|
|
84
|
+
"@semantic-release/gitlab": "^13.2.9",
|
|
86
85
|
"@semantic-release/npm": "^12.0.1",
|
|
87
86
|
"@types/async": "3.2.24",
|
|
88
87
|
"@types/bcrypt-nodejs": "0.0.31",
|
|
@@ -136,4 +135,4 @@
|
|
|
136
135
|
"engines": {
|
|
137
136
|
"node": ">=14.0.0"
|
|
138
137
|
}
|
|
139
|
-
}
|
|
138
|
+
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { ICookieStore } from "./ICookieStore.js";
|
|
2
|
-
import { CookieJar, Cookie } from 'tough-cookie';
|
|
3
|
-
export declare class CookieStore implements ICookieStore {
|
|
4
|
-
private _cookieJar;
|
|
5
|
-
constructor(cookieJar: CookieJar);
|
|
6
|
-
getCookies(currentUrl: string, options?: CookieJar.GetCookiesOptions): Promise<Cookie[]>;
|
|
7
|
-
getCookieString(currentUrl: string): Promise<string>;
|
|
8
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { isNil } from "../../util/utils.js";
|
|
2
|
-
export class CookieStore {
|
|
3
|
-
_cookieJar;
|
|
4
|
-
constructor(cookieJar) {
|
|
5
|
-
this._cookieJar = cookieJar;
|
|
6
|
-
}
|
|
7
|
-
async getCookies(currentUrl, options) {
|
|
8
|
-
let cookies = null;
|
|
9
|
-
if (isNil(options)) {
|
|
10
|
-
cookies = await this._cookieJar.getCookies(currentUrl);
|
|
11
|
-
}
|
|
12
|
-
else {
|
|
13
|
-
cookies = await this._cookieJar.getCookies(currentUrl, options);
|
|
14
|
-
}
|
|
15
|
-
return cookies;
|
|
16
|
-
}
|
|
17
|
-
async getCookieString(currentUrl) {
|
|
18
|
-
return await this._cookieJar.getCookieString(currentUrl);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=CookieStore.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CookieStore.js","sourceRoot":"","sources":["../../../src/comm/http/CookieStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAIzC,MAAM,OAAO,WAAW;IAEZ,UAAU,CAAW;IAC7B,YAAmB,SAAmB;QAClC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAChC,CAAC;IAGM,KAAK,CAAC,UAAU,CAAC,UAAiB,EAAE,OAAoC;QAE3E,IAAI,OAAO,GAAY,IAAI,CAAC;QAE5B,IAAG,KAAK,CAAC,OAAO,CAAC,EAAC,CAAC;YACf,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC3D,CAAC;aAAI,CAAC;YACF,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACpE,CAAC;QAGD,OAAO,OAAO,CAAC;IACnB,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,UAAiB;QAC1C,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAC7D,CAAC;CACJ"}
|