@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.
Files changed (137) hide show
  1. package/dist/auth/NowSDKAuthenticationHandler.d.ts +3 -3
  2. package/dist/auth/NowSDKAuthenticationHandler.js +6 -3
  3. package/dist/auth/NowSDKAuthenticationHandler.js.map +1 -1
  4. package/dist/comm/http/HTTPRequest.d.ts +2 -0
  5. package/dist/comm/http/RequestHandler.d.ts +1 -0
  6. package/dist/comm/http/RequestHandler.js +49 -15
  7. package/dist/comm/http/RequestHandler.js.map +1 -1
  8. package/dist/comm/http/ServiceNowProcessorRequest.d.ts +3 -0
  9. package/dist/comm/http/ServiceNowProcessorRequest.js +7 -4
  10. package/dist/comm/http/ServiceNowProcessorRequest.js.map +1 -1
  11. package/dist/index.d.ts +13 -3
  12. package/dist/index.js +13 -3
  13. package/dist/index.js.map +1 -1
  14. package/dist/sn/Application.d.ts +1 -0
  15. package/dist/sn/Application.js +26 -0
  16. package/dist/sn/Application.js.map +1 -1
  17. package/dist/sn/IServiceNowInstance.d.ts +1 -1
  18. package/dist/sn/ProgressWorker.d.ts +33 -0
  19. package/dist/sn/ProgressWorker.js +24 -0
  20. package/dist/sn/ProgressWorker.js.map +1 -0
  21. package/dist/sn/ServiceNowInstance.d.ts +2 -2
  22. package/dist/sn/ServiceNowInstance.js.map +1 -1
  23. package/dist/sn/amb/AMBClient.d.ts +66 -0
  24. package/dist/sn/amb/AMBClient.js +358 -0
  25. package/dist/sn/amb/AMBClient.js.map +1 -0
  26. package/dist/sn/amb/AMBConstants.d.ts +8 -0
  27. package/dist/sn/amb/AMBConstants.js +10 -0
  28. package/dist/sn/amb/AMBConstants.js.map +1 -0
  29. package/dist/sn/amb/AuthenticatedWebSocket.d.ts +25 -0
  30. package/dist/sn/amb/AuthenticatedWebSocket.js +56 -0
  31. package/dist/sn/amb/AuthenticatedWebSocket.js.map +1 -0
  32. package/dist/sn/amb/Channel.d.ts +67 -0
  33. package/dist/sn/amb/Channel.js +212 -0
  34. package/dist/sn/amb/Channel.js.map +1 -0
  35. package/dist/sn/amb/ChannelListener.d.ts +31 -0
  36. package/dist/sn/amb/ChannelListener.js +60 -0
  37. package/dist/sn/amb/ChannelListener.js.map +1 -0
  38. package/dist/sn/amb/ChannelRedirect.d.ts +13 -0
  39. package/dist/sn/amb/ChannelRedirect.js +50 -0
  40. package/dist/sn/amb/ChannelRedirect.js.map +1 -0
  41. package/dist/sn/amb/CrossClientChannel.d.ts +4 -0
  42. package/dist/sn/amb/CrossClientChannel.js +14 -0
  43. package/dist/sn/amb/CrossClientChannel.js.map +1 -0
  44. package/dist/sn/amb/EventManager.d.ts +13 -0
  45. package/dist/sn/amb/EventManager.js +40 -0
  46. package/dist/sn/amb/EventManager.js.map +1 -0
  47. package/dist/sn/amb/FunctionQueue.d.ts +53 -0
  48. package/dist/sn/amb/FunctionQueue.js +95 -0
  49. package/dist/sn/amb/FunctionQueue.js.map +1 -0
  50. package/dist/sn/amb/GraphQLSubscriptionExtension.d.ts +12 -0
  51. package/dist/sn/amb/GraphQLSubscriptionExtension.js +31 -0
  52. package/dist/sn/amb/GraphQLSubscriptionExtension.js.map +1 -0
  53. package/dist/sn/amb/Helper.d.ts +5 -0
  54. package/dist/sn/amb/Helper.js +6 -0
  55. package/dist/sn/amb/Helper.js.map +1 -0
  56. package/dist/sn/amb/MessageClient.d.ts +73 -0
  57. package/dist/sn/amb/MessageClient.js +154 -0
  58. package/dist/sn/amb/MessageClient.js.map +1 -0
  59. package/dist/sn/amb/MessageClientBuilder.d.ts +24 -0
  60. package/dist/sn/amb/MessageClientBuilder.js +95 -0
  61. package/dist/sn/amb/MessageClientBuilder.js.map +1 -0
  62. package/dist/sn/amb/Properties.d.ts +16 -0
  63. package/dist/sn/amb/Properties.js +32 -0
  64. package/dist/sn/amb/Properties.js.map +1 -0
  65. package/dist/sn/amb/ServerConnection.d.ts +132 -0
  66. package/dist/sn/amb/ServerConnection.js +579 -0
  67. package/dist/sn/amb/ServerConnection.js.map +1 -0
  68. package/dist/sn/amb/SessionExtension.d.ts +8 -0
  69. package/dist/sn/amb/SessionExtension.js +20 -0
  70. package/dist/sn/amb/SessionExtension.js.map +1 -0
  71. package/dist/sn/amb/SubscriptionCommandSender.d.ts +60 -0
  72. package/dist/sn/amb/SubscriptionCommandSender.js +222 -0
  73. package/dist/sn/amb/SubscriptionCommandSender.js.map +1 -0
  74. package/dist/sn/amb/TokenManagementExtension.d.ts +20 -0
  75. package/dist/sn/amb/TokenManagementExtension.js +90 -0
  76. package/dist/sn/amb/TokenManagementExtension.js.map +1 -0
  77. package/dist/sn/amb/XMLHttpRequest.d.ts +31 -0
  78. package/dist/sn/amb/XMLHttpRequest.js +287 -0
  79. package/dist/sn/amb/XMLHttpRequest.js.map +1 -0
  80. package/dist/sn/amb/cometd-nodejs-client.d.ts +1 -0
  81. package/dist/sn/amb/cometd-nodejs-client.js +84 -0
  82. package/dist/sn/amb/cometd-nodejs-client.js.map +1 -0
  83. package/dist/sn/amb/index.d.ts +19 -0
  84. package/dist/sn/amb/index.js +20 -0
  85. package/dist/sn/amb/index.js.map +1 -0
  86. package/dist/sn/application/AppRepoApplication.d.ts +166 -0
  87. package/dist/sn/application/AppRepoApplication.js +167 -0
  88. package/dist/sn/application/AppRepoApplication.js.map +1 -0
  89. package/dist/sn/application/ApplicationDetailModel.d.ts +71 -0
  90. package/dist/sn/application/ApplicationDetailModel.js +72 -0
  91. package/dist/sn/application/ApplicationDetailModel.js.map +1 -0
  92. package/dist/sn/application/ApplicationManager.d.ts +117 -0
  93. package/dist/sn/application/ApplicationManager.js +251 -0
  94. package/dist/sn/application/ApplicationManager.js.map +1 -0
  95. package/dist/sn/application/BatchDefinition.d.ts +16 -0
  96. package/dist/sn/application/BatchDefinition.js +60 -0
  97. package/dist/sn/application/BatchDefinition.js.map +1 -0
  98. package/dist/sn/application/BatchInstallation.d.ts +8 -0
  99. package/dist/sn/application/BatchInstallation.js +20 -0
  100. package/dist/sn/application/BatchInstallation.js.map +1 -0
  101. package/dist/sn/application/CompanyApplications.d.ts +234 -0
  102. package/dist/sn/application/CompanyApplications.js +91 -0
  103. package/dist/sn/application/CompanyApplications.js.map +1 -0
  104. package/dist/sn/atf/ATFTest.d.ts +27 -0
  105. package/dist/sn/atf/ATFTest.js +3 -0
  106. package/dist/sn/atf/ATFTest.js.map +1 -0
  107. package/dist/sn/atf/ATFTestExecutor.d.ts +115 -0
  108. package/dist/sn/atf/ATFTestExecutor.js +239 -0
  109. package/dist/sn/atf/ATFTestExecutor.js.map +1 -0
  110. package/dist/sn/atf/ATFTestStep.d.ts +0 -0
  111. package/dist/sn/atf/ATFTestStep.js +1 -0
  112. package/dist/sn/atf/ATFTestStep.js.map +1 -0
  113. package/dist/sn/atf/ATFTestSuite.d.ts +0 -0
  114. package/dist/sn/atf/ATFTestSuite.js +1 -0
  115. package/dist/sn/atf/ATFTestSuite.js.map +1 -0
  116. package/dist/sn/atf/TestFactory.d.ts +2 -0
  117. package/dist/sn/atf/TestFactory.js +3 -0
  118. package/dist/sn/atf/TestFactory.js.map +1 -0
  119. package/dist/sn/atf/TestStepFactory.d.ts +0 -0
  120. package/dist/sn/atf/TestStepFactory.js +1 -0
  121. package/dist/sn/atf/TestStepFactory.js.map +1 -0
  122. package/dist/sn/atf/TestSuiteFactory.d.ts +0 -0
  123. package/dist/sn/atf/TestSuiteFactory.js +1 -0
  124. package/dist/sn/atf/TestSuiteFactory.js.map +1 -0
  125. package/dist/sn/syslog/SyslogReader.d.ts +113 -0
  126. package/dist/sn/syslog/SyslogReader.js +369 -0
  127. package/dist/sn/syslog/SyslogReader.js.map +1 -0
  128. package/dist/sn/syslog/SyslogRecord.d.ts +86 -0
  129. package/dist/sn/syslog/SyslogRecord.js +2 -0
  130. package/dist/sn/syslog/SyslogRecord.js.map +1 -0
  131. package/package.json +8 -9
  132. package/dist/comm/http/CookieStore.d.ts +0 -8
  133. package/dist/comm/http/CookieStore.js +0 -21
  134. package/dist/comm/http/CookieStore.js.map +0 -1
  135. package/dist/comm/http/CookieStoreFactory.d.ts +0 -5
  136. package/dist/comm/http/CookieStoreFactory.js +0 -11
  137. 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":"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"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=SyslogRecord.js.map
@@ -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": "1.0.0-alpha.32",
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": "3.0.2",
44
- "@servicenow/sdk-build": "3.0.2",
45
- "@servicenow/sdk-cli": "3.0.2",
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": "3.0.2",
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.1",
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"}