@sonisoft/now-sdk-ext-core 6.5.2 → 6.6.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/README.md +18 -0
- package/dist/auth/BrowserSession.d.ts +2 -0
- package/dist/auth/BrowserSession.js +7 -2
- package/dist/auth/BrowserSession.js.map +1 -1
- package/dist/auth/DesktopBrowserSession.d.ts +31 -0
- package/dist/auth/DesktopBrowserSession.js +278 -0
- package/dist/auth/DesktopBrowserSession.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +5 -4
package/README.md
CHANGED
|
@@ -973,6 +973,24 @@ const session = await createBrowserSession({alias: 'dev206299'});
|
|
|
973
973
|
const context = await browser.newContext({storageState: session.storageState});
|
|
974
974
|
```
|
|
975
975
|
|
|
976
|
+
`injectBrowserSessionCdp({cdpUrl, session})` applies that same `storageState` to an
|
|
977
|
+
already-running Chromium DevTools endpoint (Edge, Chrome, or Brave started with
|
|
978
|
+
`--remote-debugging-port`) and navigates to `session.instanceUrl`. It does not close
|
|
979
|
+
the browser. Desktop failures use `DesktopBrowserError` (`NEX_BROWSER_UNAVAILABLE` /
|
|
980
|
+
`NEX_BROWSER_PROTOCOL`), not `SessionAuthError`. Cookie values are never logged.
|
|
981
|
+
|
|
982
|
+
Live coverage is `test/integration/auth/DesktopBrowserSession_IT.test.ts`. It mints a
|
|
983
|
+
session for `SN_INSTANCE_ALIAS` (default `dev206299` in `test/test_utils/test_config.ts`)
|
|
984
|
+
and injects it into a loopback DevTools fixture. Override the alias in `.env` or the
|
|
985
|
+
environment — do not embed an instance name in the test.
|
|
986
|
+
|
|
987
|
+
```ts
|
|
988
|
+
await injectBrowserSessionCdp({
|
|
989
|
+
cdpUrl: 'http://127.0.0.1:9222',
|
|
990
|
+
session,
|
|
991
|
+
});
|
|
992
|
+
```
|
|
993
|
+
|
|
976
994
|
Check `initCredentialStore().active` when the application requires the headless
|
|
977
995
|
backend. Imports alone never install the shim. Keep session state out of logs and
|
|
978
996
|
source control. A saved state file does not renew itself.
|
|
@@ -27,4 +27,6 @@ export declare function verifiedUserSession(credentials: SessionCredentials): Pr
|
|
|
27
27
|
/** Create a fresh, verified Playwright session using an existing SDK alias. */
|
|
28
28
|
export declare function createBrowserSession(options: {
|
|
29
29
|
alias: string;
|
|
30
|
+
/** Pre-resolved credentials. When omitted, the alias is looked up in the SDK store. */
|
|
31
|
+
credentials?: SessionCredentials;
|
|
30
32
|
}): Promise<BrowserSession>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getUserSession } from '@servicenow/sdk-cli-core/dist/auth/index.js';
|
|
2
|
-
import { resolveSessionCredentials } from './CredentialProvider.js';
|
|
2
|
+
import { resolveSessionCredentials, sessionCredentials } from './CredentialProvider.js';
|
|
3
3
|
import { SessionAuthError } from './SessionAuthError.js';
|
|
4
4
|
import { Cookie } from 'tough-cookie';
|
|
5
5
|
/** Establish SDK cookies and prove they authenticate without the OAuth bearer token. */
|
|
@@ -52,7 +52,12 @@ export async function verifiedUserSession(credentials) {
|
|
|
52
52
|
}
|
|
53
53
|
/** Create a fresh, verified Playwright session using an existing SDK alias. */
|
|
54
54
|
export async function createBrowserSession(options) {
|
|
55
|
-
|
|
55
|
+
if (!options.alias.trim()) {
|
|
56
|
+
throw new SessionAuthError('NEX_AUTH_INVALID', 'An explicit credential alias is required.');
|
|
57
|
+
}
|
|
58
|
+
const credentials = options.credentials
|
|
59
|
+
? sessionCredentials(options.credentials)
|
|
60
|
+
: await resolveSessionCredentials(options.alias);
|
|
56
61
|
const session = await verifiedUserSession(credentials);
|
|
57
62
|
const origin = new URL(credentials.instanceUrl);
|
|
58
63
|
const serialized = session.cookie.serializeSync().cookies;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrowserSession.js","sourceRoot":"","sources":["../../src/auth/BrowserSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAE7E,OAAO,EAAE,yBAAyB,EAAsB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"BrowserSession.js","sourceRoot":"","sources":["../../src/auth/BrowserSession.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { BrowserSession } from './BrowserSession.js';
|
|
2
|
+
/** Desktop / DevTools failures safe to expose across CLI and embedders. */
|
|
3
|
+
export declare class DesktopBrowserError extends Error {
|
|
4
|
+
readonly code: 'NEX_BROWSER_UNAVAILABLE' | 'NEX_BROWSER_PROTOCOL';
|
|
5
|
+
readonly remediation: string;
|
|
6
|
+
constructor(code: 'NEX_BROWSER_UNAVAILABLE' | 'NEX_BROWSER_PROTOCOL', remediation: string);
|
|
7
|
+
}
|
|
8
|
+
export declare function isDesktopBrowserError(error: unknown): error is DesktopBrowserError;
|
|
9
|
+
/** Minimal WebSocket surface used by CDP. `ws` and test fakes both satisfy this. */
|
|
10
|
+
export interface CdpSocket {
|
|
11
|
+
readonly readyState: number;
|
|
12
|
+
on(event: 'open' | 'message' | 'error' | 'close', listener: (data?: unknown) => void): unknown;
|
|
13
|
+
once(event: 'open' | 'message' | 'error' | 'close', listener: (data?: unknown) => void): unknown;
|
|
14
|
+
send(data: string): void;
|
|
15
|
+
close(): void;
|
|
16
|
+
}
|
|
17
|
+
export interface CdpWebSocketConstructor {
|
|
18
|
+
new (url: string): CdpSocket;
|
|
19
|
+
}
|
|
20
|
+
export interface InjectBrowserSessionCdpOptions {
|
|
21
|
+
cdpUrl: string;
|
|
22
|
+
session: BrowserSession;
|
|
23
|
+
timeoutMs?: number;
|
|
24
|
+
fetch?: typeof fetch;
|
|
25
|
+
WebSocket?: CdpWebSocketConstructor;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Apply a verified cookie session to an existing Chromium DevTools endpoint
|
|
29
|
+
* and navigate to the instance. Does not close the browser.
|
|
30
|
+
*/
|
|
31
|
+
export declare function injectBrowserSessionCdp(options: InjectBrowserSessionCdpOptions): Promise<void>;
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
import { WebSocket as WsWebSocket } from 'ws';
|
|
2
|
+
/** Desktop / DevTools failures safe to expose across CLI and embedders. */
|
|
3
|
+
export class DesktopBrowserError extends Error {
|
|
4
|
+
code;
|
|
5
|
+
remediation;
|
|
6
|
+
constructor(code, remediation) {
|
|
7
|
+
super(remediation);
|
|
8
|
+
this.code = code;
|
|
9
|
+
this.remediation = remediation;
|
|
10
|
+
this.name = 'DesktopBrowserError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function isDesktopBrowserError(error) {
|
|
14
|
+
if (!error || typeof error !== 'object')
|
|
15
|
+
return false;
|
|
16
|
+
const value = error;
|
|
17
|
+
return (value.code === 'NEX_BROWSER_UNAVAILABLE' || value.code === 'NEX_BROWSER_PROTOCOL') &&
|
|
18
|
+
typeof value.remediation === 'string';
|
|
19
|
+
}
|
|
20
|
+
const DEFAULT_TIMEOUT_MS = 15_000;
|
|
21
|
+
const POLL_MS = 250;
|
|
22
|
+
const SOCKET_TIMEOUT_MS = 10_000;
|
|
23
|
+
const UNAVAILABLE = 'The browser DevTools endpoint did not become ready. Confirm the browser started with --remote-debugging-port and retry.';
|
|
24
|
+
const PROTOCOL = 'The browser rejected a DevTools command. Confirm the debug port is reachable and retry.';
|
|
25
|
+
function sleep(ms) {
|
|
26
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
27
|
+
}
|
|
28
|
+
function parseCdpHttpUrl(value) {
|
|
29
|
+
let origin;
|
|
30
|
+
try {
|
|
31
|
+
origin = new URL(value);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
throw new DesktopBrowserError('NEX_BROWSER_UNAVAILABLE', 'Browser sessions require an HTTP DevTools URL.');
|
|
35
|
+
}
|
|
36
|
+
if ((origin.protocol !== 'http:' && origin.protocol !== 'https:') || origin.username || origin.password) {
|
|
37
|
+
throw new DesktopBrowserError('NEX_BROWSER_UNAVAILABLE', 'Browser sessions require an HTTP DevTools URL without embedded credentials.');
|
|
38
|
+
}
|
|
39
|
+
return origin;
|
|
40
|
+
}
|
|
41
|
+
function jsonBody(value) {
|
|
42
|
+
if (!value || typeof value !== 'object')
|
|
43
|
+
return undefined;
|
|
44
|
+
return Array.isArray(value) ? value : value;
|
|
45
|
+
}
|
|
46
|
+
async function readJson(response) {
|
|
47
|
+
try {
|
|
48
|
+
return await response.json();
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async function waitForVersion(origin, timeoutMs, fetchImpl) {
|
|
55
|
+
const deadline = Date.now() + timeoutMs;
|
|
56
|
+
const endpoint = new URL('/json/version', origin);
|
|
57
|
+
while (Date.now() < deadline) {
|
|
58
|
+
try {
|
|
59
|
+
const response = await fetchImpl(endpoint, { signal: AbortSignal.timeout(2_000) });
|
|
60
|
+
if (response.ok) {
|
|
61
|
+
const body = jsonBody(await readJson(response));
|
|
62
|
+
if (body && !Array.isArray(body))
|
|
63
|
+
return body;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// Browser has not opened the debug port yet.
|
|
68
|
+
}
|
|
69
|
+
await sleep(Math.min(POLL_MS, Math.max(0, deadline - Date.now())));
|
|
70
|
+
}
|
|
71
|
+
throw new DesktopBrowserError('NEX_BROWSER_UNAVAILABLE', UNAVAILABLE);
|
|
72
|
+
}
|
|
73
|
+
async function listTargets(origin, fetchImpl) {
|
|
74
|
+
for (const path of ['/json/list', '/json']) {
|
|
75
|
+
try {
|
|
76
|
+
const response = await fetchImpl(new URL(path, origin), { signal: AbortSignal.timeout(2_000) });
|
|
77
|
+
if (!response.ok)
|
|
78
|
+
continue;
|
|
79
|
+
const body = jsonBody(await readJson(response));
|
|
80
|
+
if (Array.isArray(body))
|
|
81
|
+
return body;
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Try the next discovery path.
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return [];
|
|
88
|
+
}
|
|
89
|
+
function pageSocketUrl(targets) {
|
|
90
|
+
for (const target of targets) {
|
|
91
|
+
if (!target || typeof target !== 'object')
|
|
92
|
+
continue;
|
|
93
|
+
const record = target;
|
|
94
|
+
if (record.type === 'page' && typeof record.webSocketDebuggerUrl === 'string' && record.webSocketDebuggerUrl) {
|
|
95
|
+
return record.webSocketDebuggerUrl;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
function socketData(data) {
|
|
101
|
+
if (typeof data === 'string')
|
|
102
|
+
return data;
|
|
103
|
+
if (data instanceof Uint8Array)
|
|
104
|
+
return new TextDecoder().decode(data);
|
|
105
|
+
return '';
|
|
106
|
+
}
|
|
107
|
+
function cdpCookie(cookie, instanceUrl) {
|
|
108
|
+
const domain = cookie.domain.startsWith('.') ? cookie.domain.slice(1) : cookie.domain;
|
|
109
|
+
const params = {
|
|
110
|
+
name: cookie.name,
|
|
111
|
+
value: cookie.value,
|
|
112
|
+
domain,
|
|
113
|
+
path: cookie.path || '/',
|
|
114
|
+
secure: cookie.secure,
|
|
115
|
+
httpOnly: cookie.httpOnly,
|
|
116
|
+
sameSite: cookie.sameSite,
|
|
117
|
+
url: instanceUrl,
|
|
118
|
+
};
|
|
119
|
+
if (Number.isFinite(cookie.expires) && cookie.expires > 0)
|
|
120
|
+
params.expires = cookie.expires;
|
|
121
|
+
return params;
|
|
122
|
+
}
|
|
123
|
+
class CdpClient {
|
|
124
|
+
socket;
|
|
125
|
+
nextId = 0;
|
|
126
|
+
pending = new Map();
|
|
127
|
+
constructor(socket) {
|
|
128
|
+
this.socket = socket;
|
|
129
|
+
this.socket.on('message', (data) => {
|
|
130
|
+
let parsed;
|
|
131
|
+
try {
|
|
132
|
+
parsed = JSON.parse(socketData(data));
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (typeof parsed.id !== 'number')
|
|
138
|
+
return;
|
|
139
|
+
const waiter = this.pending.get(parsed.id);
|
|
140
|
+
if (!waiter)
|
|
141
|
+
return;
|
|
142
|
+
this.pending.delete(parsed.id);
|
|
143
|
+
if (parsed.error)
|
|
144
|
+
waiter.reject(new DesktopBrowserError('NEX_BROWSER_PROTOCOL', PROTOCOL));
|
|
145
|
+
else
|
|
146
|
+
waiter.resolve(parsed.result ?? {});
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
send(method, params, sessionId) {
|
|
150
|
+
const id = ++this.nextId;
|
|
151
|
+
const payload = { id, method };
|
|
152
|
+
if (params)
|
|
153
|
+
payload.params = params;
|
|
154
|
+
if (sessionId)
|
|
155
|
+
payload.sessionId = sessionId;
|
|
156
|
+
return new Promise((resolve, reject) => {
|
|
157
|
+
const timer = setTimeout(() => {
|
|
158
|
+
this.pending.delete(id);
|
|
159
|
+
reject(new DesktopBrowserError('NEX_BROWSER_PROTOCOL', PROTOCOL));
|
|
160
|
+
}, SOCKET_TIMEOUT_MS);
|
|
161
|
+
this.pending.set(id, {
|
|
162
|
+
resolve: value => { clearTimeout(timer); resolve(value); },
|
|
163
|
+
reject: error => { clearTimeout(timer); reject(error); },
|
|
164
|
+
});
|
|
165
|
+
try {
|
|
166
|
+
this.socket.send(JSON.stringify(payload));
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
clearTimeout(timer);
|
|
170
|
+
this.pending.delete(id);
|
|
171
|
+
reject(new DesktopBrowserError('NEX_BROWSER_PROTOCOL', PROTOCOL));
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
close() {
|
|
176
|
+
for (const waiter of this.pending.values())
|
|
177
|
+
waiter.reject(new DesktopBrowserError('NEX_BROWSER_PROTOCOL', PROTOCOL));
|
|
178
|
+
this.pending.clear();
|
|
179
|
+
try {
|
|
180
|
+
this.socket.close();
|
|
181
|
+
}
|
|
182
|
+
catch { /* already closed */ }
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
async function openSocket(url, WebSocketImpl) {
|
|
186
|
+
const socket = new WebSocketImpl(url);
|
|
187
|
+
if (socket.readyState === 1)
|
|
188
|
+
return socket;
|
|
189
|
+
return new Promise((resolve, reject) => {
|
|
190
|
+
const timer = setTimeout(() => {
|
|
191
|
+
try {
|
|
192
|
+
socket.close();
|
|
193
|
+
}
|
|
194
|
+
catch { /* ignore */ }
|
|
195
|
+
reject(new DesktopBrowserError('NEX_BROWSER_UNAVAILABLE', UNAVAILABLE));
|
|
196
|
+
}, SOCKET_TIMEOUT_MS);
|
|
197
|
+
const succeed = () => { clearTimeout(timer); resolve(socket); };
|
|
198
|
+
const fail = () => {
|
|
199
|
+
clearTimeout(timer);
|
|
200
|
+
try {
|
|
201
|
+
socket.close();
|
|
202
|
+
}
|
|
203
|
+
catch { /* ignore */ }
|
|
204
|
+
reject(new DesktopBrowserError('NEX_BROWSER_UNAVAILABLE', UNAVAILABLE));
|
|
205
|
+
};
|
|
206
|
+
socket.once('open', succeed);
|
|
207
|
+
socket.once('error', fail);
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
async function applyCookiesAndNavigate(client, session, sessionId) {
|
|
211
|
+
await client.send('Network.enable', undefined, sessionId);
|
|
212
|
+
try {
|
|
213
|
+
await client.send('Storage.setCookies', {
|
|
214
|
+
cookies: session.storageState.cookies.map(cookie => cdpCookie(cookie, session.instanceUrl)),
|
|
215
|
+
}, sessionId);
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
for (const cookie of session.storageState.cookies) {
|
|
219
|
+
await client.send('Network.setCookie', cdpCookie(cookie, session.instanceUrl), sessionId);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
await client.send('Page.navigate', { url: session.instanceUrl }, sessionId);
|
|
223
|
+
}
|
|
224
|
+
async function injectThroughSocket(url, session, WebSocketImpl, attachTarget) {
|
|
225
|
+
const socket = await openSocket(url, WebSocketImpl);
|
|
226
|
+
const client = new CdpClient(socket);
|
|
227
|
+
try {
|
|
228
|
+
let sessionId;
|
|
229
|
+
if (attachTarget) {
|
|
230
|
+
const created = await client.send('Target.createTarget', { url: 'about:blank' });
|
|
231
|
+
const targetId = typeof created.targetId === 'string' ? created.targetId : undefined;
|
|
232
|
+
if (!targetId)
|
|
233
|
+
throw new DesktopBrowserError('NEX_BROWSER_PROTOCOL', PROTOCOL);
|
|
234
|
+
const attached = await client.send('Target.attachToTarget', { targetId, flatten: true });
|
|
235
|
+
sessionId = typeof attached.sessionId === 'string' ? attached.sessionId : undefined;
|
|
236
|
+
if (!sessionId)
|
|
237
|
+
throw new DesktopBrowserError('NEX_BROWSER_PROTOCOL', PROTOCOL);
|
|
238
|
+
}
|
|
239
|
+
await applyCookiesAndNavigate(client, session, sessionId);
|
|
240
|
+
}
|
|
241
|
+
finally {
|
|
242
|
+
client.close();
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Apply a verified cookie session to an existing Chromium DevTools endpoint
|
|
247
|
+
* and navigate to the instance. Does not close the browser.
|
|
248
|
+
*/
|
|
249
|
+
export async function injectBrowserSessionCdp(options) {
|
|
250
|
+
const origin = parseCdpHttpUrl(options.cdpUrl);
|
|
251
|
+
if (!options.session?.instanceUrl || !Array.isArray(options.session.storageState?.cookies)) {
|
|
252
|
+
throw new DesktopBrowserError('NEX_BROWSER_PROTOCOL', 'A verified browser session is required before opening the desktop UI.');
|
|
253
|
+
}
|
|
254
|
+
try {
|
|
255
|
+
new URL(options.session.instanceUrl);
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
throw new DesktopBrowserError('NEX_BROWSER_PROTOCOL', 'A verified browser session is required before opening the desktop UI.');
|
|
259
|
+
}
|
|
260
|
+
const fetchImpl = options.fetch ?? fetch;
|
|
261
|
+
const WebSocketImpl = options.WebSocket ?? WsWebSocket;
|
|
262
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
263
|
+
const version = await waitForVersion(origin, timeoutMs, fetchImpl);
|
|
264
|
+
const pageUrl = pageSocketUrl(await listTargets(origin, fetchImpl));
|
|
265
|
+
const browserUrl = typeof version.webSocketDebuggerUrl === 'string' ? version.webSocketDebuggerUrl : undefined;
|
|
266
|
+
const socketUrl = pageUrl ?? browserUrl;
|
|
267
|
+
if (!socketUrl)
|
|
268
|
+
throw new DesktopBrowserError('NEX_BROWSER_UNAVAILABLE', UNAVAILABLE);
|
|
269
|
+
try {
|
|
270
|
+
await injectThroughSocket(socketUrl, options.session, WebSocketImpl, !pageUrl);
|
|
271
|
+
}
|
|
272
|
+
catch (error) {
|
|
273
|
+
if (isDesktopBrowserError(error))
|
|
274
|
+
throw error;
|
|
275
|
+
throw new DesktopBrowserError('NEX_BROWSER_PROTOCOL', PROTOCOL);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=DesktopBrowserSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DesktopBrowserSession.js","sourceRoot":"","sources":["../../src/auth/DesktopBrowserSession.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from './auth/AuthenticationHandlerFactory.js';
|
|
2
2
|
export * from './auth/BrowserSession.js';
|
|
3
3
|
export * from './auth/CredentialProvider.js';
|
|
4
|
+
export * from './auth/DesktopBrowserSession.js';
|
|
4
5
|
export * from './auth/IAuthenticationHandler.js';
|
|
5
6
|
export * from './auth/NowSDKAuthenticationHandler.js';
|
|
6
7
|
export * from './auth/SessionAuthError.js';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from './auth/AuthenticationHandlerFactory.js';
|
|
2
2
|
export * from './auth/BrowserSession.js';
|
|
3
3
|
export * from './auth/CredentialProvider.js';
|
|
4
|
+
export * from './auth/DesktopBrowserSession.js';
|
|
4
5
|
export * from './auth/IAuthenticationHandler.js';
|
|
5
6
|
export * from './auth/NowSDKAuthenticationHandler.js';
|
|
6
7
|
export * from './auth/SessionAuthError.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wCAAwC,CAAC;AACvD,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC;AACnD,cAAc,0CAA0C,CAAC;AACzD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sCAAsC,CAAC;AACrD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,yCAAyC,CAAC;AACxD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC;AACpD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,iCAAiC,CAAC;AAChD,cAAc,yCAAyC,CAAC;AACxD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,yCAAyC,CAAC;AACxD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+CAA+C,CAAC;AAC9D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AAExC,0EAA0E;AAC1E,4EAA4E;AAC5E,gEAAgE;AAChE,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sonisoft/now-sdk-ext-core",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.6.0",
|
|
4
4
|
"description": "Comprehensive TypeScript library extending ServiceNow SDK with application management, ATF testing, real-time log monitoring, AMB event subscriptions, and automation tools",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"servicenow",
|
|
@@ -35,11 +35,12 @@
|
|
|
35
35
|
"semantic-release": "semantic-release",
|
|
36
36
|
"test": "node --experimental-vm-modules node_modules/.bin/jest --forceExit --coverage --collectCoverage --coverageDirectory=\"./coverage\" --ci --reporters=default --reporters=jest-junit --watchAll=false --testPathIgnorePatterns=\"/integration/\"",
|
|
37
37
|
"test:unit": "node --experimental-vm-modules node_modules/.bin/jest --forceExit --coverage --collectCoverage --coverageDirectory=\"./coverage\" --ci --reporters=default --reporters=jest-junit --watchAll=false --testPathIgnorePatterns=\"/integration/\"",
|
|
38
|
-
"test:eval": "node --experimental-vm-modules node_modules/.bin/jest --forceExit --runInBand --runTestsByPath test/unit/auth/CredentialProvider.test.ts test/unit/auth/BrowserSessionCsrf.test.ts test/unit/auth/SessionRenewal.test.ts test/unit/comm/http/sdkDeepImports.test.ts test/unit/BackgroundScriptExecutor.test.ts test/unit/sn/xml/XMLRecordManager.test.ts test/unit/sn/updateset/UpdateSetManager.test.ts test/unit/util/CSRFTokenHelper.test.ts test/unit/policy/RequestHandlerGate.test.ts test/unit/policy/ScriptEvasion.test.ts test/unit/util/LoggerRedaction.test.ts test/unit/util/NoStdoutWrites.test.ts",
|
|
38
|
+
"test:eval": "node --experimental-vm-modules node_modules/.bin/jest --forceExit --runInBand --runTestsByPath test/unit/auth/CredentialProvider.test.ts test/unit/auth/BrowserSession.test.ts test/unit/auth/BrowserSessionCsrf.test.ts test/unit/auth/DesktopBrowserSession.test.ts test/unit/auth/SessionRenewal.test.ts test/unit/test_utils/instance-alias.test.ts test/unit/comm/http/sdkDeepImports.test.ts test/unit/BackgroundScriptExecutor.test.ts test/unit/sn/xml/XMLRecordManager.test.ts test/unit/sn/updateset/UpdateSetManager.test.ts test/unit/util/CSRFTokenHelper.test.ts test/unit/policy/RequestHandlerGate.test.ts test/unit/policy/ScriptEvasion.test.ts test/unit/util/LoggerRedaction.test.ts test/unit/util/NoStdoutWrites.test.ts",
|
|
39
39
|
"test:consumer": "node scripts/sdk-compat-consumer.mjs",
|
|
40
40
|
"test:consumer:cleanup": "node scripts/sdk-compat-consumer-cleanup.test.mjs",
|
|
41
41
|
"test:eval:live": "node scripts/sdk-compat-live.mjs",
|
|
42
42
|
"test:integration": "node --experimental-vm-modules node_modules/.bin/jest --forceExit --testPathPatterns=\"/integration/\" --watchAll=false --testTimeout=120000",
|
|
43
|
+
"test:integration:auth": "node --experimental-vm-modules node_modules/.bin/jest --forceExit --runInBand --testTimeout=120000 --runTestsByPath test/integration/auth/DesktopBrowserSession_IT.test.ts",
|
|
43
44
|
"test:all": "node --experimental-vm-modules node_modules/.bin/jest --forceExit --coverage --collectCoverage --coverageDirectory=\"./coverage\" --ci --reporters=default --reporters=jest-junit --watchAll=false",
|
|
44
45
|
"watch-test": "npm run test:unit -- --watchAll",
|
|
45
46
|
"watch-test:integration": "npm run test:integration -- --watchAll",
|
|
@@ -87,7 +88,7 @@
|
|
|
87
88
|
"devDependencies": {
|
|
88
89
|
"@eslint/js": "^9.10.0",
|
|
89
90
|
"@semantic-release/git": "^10.0.1",
|
|
90
|
-
"@semantic-release/github": "^
|
|
91
|
+
"@semantic-release/github": "^12.0.9",
|
|
91
92
|
"@semantic-release/npm": "^13.0.0",
|
|
92
93
|
"@types/async": "3.2.25",
|
|
93
94
|
"@types/bluebird": "3.5.42",
|
|
@@ -110,7 +111,7 @@
|
|
|
110
111
|
"@types/winston": "2.4.4",
|
|
111
112
|
"@types/ws": "^8.5.12",
|
|
112
113
|
"chai": "6.2.2",
|
|
113
|
-
"concurrently": "10.0.
|
|
114
|
+
"concurrently": "10.0.5",
|
|
114
115
|
"conventional-changelog-conventionalcommits": "^10.2.1",
|
|
115
116
|
"create-ts-index": "^1.14.0",
|
|
116
117
|
"ctix": "^2.6.4",
|