@sonisoft/now-sdk-ext-core 3.8.0 → 5.0.1
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/PublicApi.d.ts +43 -0
- package/dist/PublicApi.js +46 -0
- package/dist/PublicApi.js.map +1 -0
- package/dist/cli/export-update-set.d.ts +1 -0
- package/dist/cli/export-update-set.js +45 -0
- package/dist/cli/export-update-set.js.map +1 -0
- package/dist/comm/http/ActiveSessionRegistry.d.ts +91 -0
- package/dist/comm/http/ActiveSessionRegistry.js +132 -0
- package/dist/comm/http/ActiveSessionRegistry.js.map +1 -0
- package/dist/comm/http/RequestHandler.js.map +1 -1
- package/dist/comm/http/SessionManager.d.ts +39 -0
- package/dist/comm/http/SessionManager.js +93 -0
- package/dist/comm/http/SessionManager.js.map +1 -0
- package/dist/comm/http/TableAPIRequest.js +2 -2
- package/dist/comm/http/TableAPIRequest.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/sn/BackgroundScriptExecutor.js +2 -2
- package/dist/sn/BackgroundScriptExecutor.js.map +1 -1
- package/dist/sn/amb/AMBClient.js +8 -4
- package/dist/sn/amb/AMBClient.js.map +1 -1
- package/dist/sn/amb/Channel.js +1 -1
- package/dist/sn/amb/Channel.js.map +1 -1
- package/dist/sn/amb/ChannelListener.js.map +1 -1
- package/dist/sn/amb/ChannelRedirect.js.map +1 -1
- package/dist/sn/amb/GraphQLSubscriptionExtension.js.map +1 -1
- package/dist/sn/amb/MessageClient.js +2 -2
- package/dist/sn/amb/MessageClient.js.map +1 -1
- package/dist/sn/amb/ServerConnection.d.ts +3 -1
- package/dist/sn/amb/ServerConnection.js +20 -9
- package/dist/sn/amb/ServerConnection.js.map +1 -1
- package/dist/sn/amb/SessionExtension.js.map +1 -1
- package/dist/sn/amb/SubscriptionCommandSender.js +1 -1
- package/dist/sn/amb/SubscriptionCommandSender.js.map +1 -1
- package/dist/sn/amb/TokenManagementExtension.js.map +1 -1
- package/dist/sn/amb/index.d.ts +1 -1
- package/dist/sn/amb/index.js +13 -1
- package/dist/sn/amb/index.js.map +1 -1
- package/dist/sn/application/ApplicationDetailModel.js.map +1 -1
- package/dist/sn/flow/FlowManager.d.ts +12 -1
- package/dist/sn/flow/FlowManager.js +51 -0
- package/dist/sn/flow/FlowManager.js.map +1 -1
- package/dist/sn/flow/FlowModels.d.ts +16 -0
- package/dist/sn/scripttracer/ScriptTracer.d.ts +27 -0
- package/dist/sn/scripttracer/ScriptTracer.js +173 -0
- package/dist/sn/scripttracer/ScriptTracer.js.map +1 -0
- package/dist/sn/scripttracer/ScriptTracerModels.d.ts +66 -0
- package/dist/sn/scripttracer/ScriptTracerModels.js +2 -0
- package/dist/sn/scripttracer/ScriptTracerModels.js.map +1 -0
- package/dist/sn/updateset/UpdateSetManager.d.ts +7 -0
- package/dist/sn/updateset/UpdateSetManager.js +76 -0
- package/dist/sn/updateset/UpdateSetManager.js.map +1 -1
- package/package.json +23 -41
- package/dist/encryption/decrypt.d.ts +0 -1
- package/dist/encryption/decrypt.js +0 -10
- package/dist/encryption/decrypt.js.map +0 -1
- package/dist/encryption/encrypt.d.ts +0 -1
- package/dist/encryption/encrypt.js +0 -13
- package/dist/encryption/encrypt.js.map +0 -1
- package/dist/sn/amb/Helper.d.ts +0 -5
- package/dist/sn/amb/Helper.js +0 -6
- package/dist/sn/amb/Helper.js.map +0 -1
- package/dist/sn/atf/ATFTestStep.d.ts +0 -0
- package/dist/sn/atf/ATFTestStep.js +0 -1
- package/dist/sn/atf/ATFTestStep.js.map +0 -1
- package/dist/sn/atf/ATFTestSuite.d.ts +0 -0
- package/dist/sn/atf/ATFTestSuite.js +0 -1
- package/dist/sn/atf/ATFTestSuite.js.map +0 -1
- package/dist/sn/atf/TestStepFactory.d.ts +0 -0
- package/dist/sn/atf/TestStepFactory.js +0 -1
- package/dist/sn/atf/TestStepFactory.js.map +0 -1
- package/dist/sn/atf/TestSuiteFactory.d.ts +0 -0
- package/dist/sn/atf/TestSuiteFactory.js +0 -1
- package/dist/sn/atf/TestSuiteFactory.js.map +0 -1
- package/dist/sn/factory/ISNFactory.d.ts +0 -0
- package/dist/sn/factory/ISNFactory.js +0 -1
- package/dist/sn/factory/ISNFactory.js.map +0 -1
- package/dist/sn/factory/SNFactoryBase.d.ts +0 -0
- package/dist/sn/factory/SNFactoryBase.js +0 -1
- package/dist/sn/factory/SNFactoryBase.js.map +0 -1
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hand-curated public exports.
|
|
3
|
+
*
|
|
4
|
+
* WHY THIS FILE EXISTS
|
|
5
|
+
* --------------------
|
|
6
|
+
* `src/index.ts` is generated by ctix, and ctix decides what to export purely
|
|
7
|
+
* from file layout: it skips a source file if — and only if — its own
|
|
8
|
+
* directory's index.ts re-exports it. Curation is therefore binary per
|
|
9
|
+
* directory, and `excludeFiles` is non-functional in ctix 2.8.2 (verified
|
|
10
|
+
* against the config key, the CLI flag, and every glob form).
|
|
11
|
+
*
|
|
12
|
+
* Because `src/sn/amb/index.ts` covers that whole folder, ctix omits it — which
|
|
13
|
+
* is why `AMBClient` never reached the barrel, leaving `ScriptTracer` (whose
|
|
14
|
+
* constructor requires one) unconstructible by any consumer.
|
|
15
|
+
*
|
|
16
|
+
* This file holds the exports ctix cannot express.
|
|
17
|
+
* `scripts/finalize-barrel.mjs` appends it to the generated barrel on every
|
|
18
|
+
* build. Add public API here — never to `src/index.ts`, which is regenerated.
|
|
19
|
+
*
|
|
20
|
+
* WHAT IS EXPORTED AND WHY
|
|
21
|
+
* ------------------------
|
|
22
|
+
* `ScriptTracer` was already exported, but its constructor is
|
|
23
|
+
* `(ambClient: AMBClient, instance, options?)` and `AMBClient` was not
|
|
24
|
+
* exported — so no consumer could construct it through the public API, and
|
|
25
|
+
* `MessageClientBuilder.createClient()` was unreachable as a factory too.
|
|
26
|
+
* README.md documents `import { AMBClient, MessageClientBuilder } from
|
|
27
|
+
* '@sonisoft/now-sdk-ext-core'`, which did not work.
|
|
28
|
+
*
|
|
29
|
+
* The surface below is the minimum needed to build an AMB client and hand it
|
|
30
|
+
* to `ScriptTracer`. The CometD transport internals (`ServerConnection`,
|
|
31
|
+
* `MessageClient`, `SubscriptionCommandSender`, `XMLHttpRequest`, the
|
|
32
|
+
* extensions, `FunctionQueue`, `EventManager`, `Properties`, …) stay private:
|
|
33
|
+
* they are ~2,900 lines of protocol plumbing, and publishing them would make
|
|
34
|
+
* every future refactor a semver-major event. `XMLHttpRequest` in particular
|
|
35
|
+
* must not be exported — it would shadow the DOM global for anyone doing
|
|
36
|
+
* `import * as core from '@sonisoft/now-sdk-ext-core'`.
|
|
37
|
+
*/
|
|
38
|
+
export { AuthenticatedWebSocket } from './sn/amb/AuthenticatedWebSocket.js';
|
|
39
|
+
export { AMBClient } from './sn/amb/AMBClient.js';
|
|
40
|
+
export { MessageClientBuilder } from './sn/amb/MessageClientBuilder.js';
|
|
41
|
+
export type { SubscriptionCollection, Context } from './sn/amb/MessageClientBuilder.js';
|
|
42
|
+
export { Channel } from './sn/amb/Channel.js';
|
|
43
|
+
export { ChannelListener } from './sn/amb/ChannelListener.js';
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hand-curated public exports.
|
|
3
|
+
*
|
|
4
|
+
* WHY THIS FILE EXISTS
|
|
5
|
+
* --------------------
|
|
6
|
+
* `src/index.ts` is generated by ctix, and ctix decides what to export purely
|
|
7
|
+
* from file layout: it skips a source file if — and only if — its own
|
|
8
|
+
* directory's index.ts re-exports it. Curation is therefore binary per
|
|
9
|
+
* directory, and `excludeFiles` is non-functional in ctix 2.8.2 (verified
|
|
10
|
+
* against the config key, the CLI flag, and every glob form).
|
|
11
|
+
*
|
|
12
|
+
* Because `src/sn/amb/index.ts` covers that whole folder, ctix omits it — which
|
|
13
|
+
* is why `AMBClient` never reached the barrel, leaving `ScriptTracer` (whose
|
|
14
|
+
* constructor requires one) unconstructible by any consumer.
|
|
15
|
+
*
|
|
16
|
+
* This file holds the exports ctix cannot express.
|
|
17
|
+
* `scripts/finalize-barrel.mjs` appends it to the generated barrel on every
|
|
18
|
+
* build. Add public API here — never to `src/index.ts`, which is regenerated.
|
|
19
|
+
*
|
|
20
|
+
* WHAT IS EXPORTED AND WHY
|
|
21
|
+
* ------------------------
|
|
22
|
+
* `ScriptTracer` was already exported, but its constructor is
|
|
23
|
+
* `(ambClient: AMBClient, instance, options?)` and `AMBClient` was not
|
|
24
|
+
* exported — so no consumer could construct it through the public API, and
|
|
25
|
+
* `MessageClientBuilder.createClient()` was unreachable as a factory too.
|
|
26
|
+
* README.md documents `import { AMBClient, MessageClientBuilder } from
|
|
27
|
+
* '@sonisoft/now-sdk-ext-core'`, which did not work.
|
|
28
|
+
*
|
|
29
|
+
* The surface below is the minimum needed to build an AMB client and hand it
|
|
30
|
+
* to `ScriptTracer`. The CometD transport internals (`ServerConnection`,
|
|
31
|
+
* `MessageClient`, `SubscriptionCommandSender`, `XMLHttpRequest`, the
|
|
32
|
+
* extensions, `FunctionQueue`, `EventManager`, `Properties`, …) stay private:
|
|
33
|
+
* they are ~2,900 lines of protocol plumbing, and publishing them would make
|
|
34
|
+
* every future refactor a semver-major event. `XMLHttpRequest` in particular
|
|
35
|
+
* must not be exported — it would shadow the DOM global for anyone doing
|
|
36
|
+
* `import * as core from '@sonisoft/now-sdk-ext-core'`.
|
|
37
|
+
*/
|
|
38
|
+
// Already part of the published contract (present in 3.9.0's dist/index.d.ts).
|
|
39
|
+
// Re-exported here rather than from the generated barrel so the whole AMB
|
|
40
|
+
// public surface lives in one place.
|
|
41
|
+
export { AuthenticatedWebSocket } from './sn/amb/AuthenticatedWebSocket.js';
|
|
42
|
+
export { AMBClient } from './sn/amb/AMBClient.js';
|
|
43
|
+
export { MessageClientBuilder } from './sn/amb/MessageClientBuilder.js';
|
|
44
|
+
export { Channel } from './sn/amb/Channel.js';
|
|
45
|
+
export { ChannelListener } from './sn/amb/ChannelListener.js';
|
|
46
|
+
//# sourceMappingURL=PublicApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PublicApi.js","sourceRoot":"","sources":["../src/PublicApi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,+EAA+E;AAC/E,0EAA0E;AAC1E,qCAAqC;AACrC,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import 'dotenv/config';
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import 'dotenv/config';
|
|
2
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { join, resolve } from 'node:path';
|
|
4
|
+
import { getCredentials } from '@servicenow/sdk-cli/dist/auth/index.js';
|
|
5
|
+
import { ServiceNowInstance } from '../sn/ServiceNowInstance.js';
|
|
6
|
+
import { UpdateSetManager } from '../sn/updateset/UpdateSetManager.js';
|
|
7
|
+
async function main() {
|
|
8
|
+
const updateSetSysId = process.argv[2];
|
|
9
|
+
const outputDirArg = process.argv[3];
|
|
10
|
+
if (!updateSetSysId?.trim() || !outputDirArg?.trim()) {
|
|
11
|
+
console.error('Usage: node dist/cli/export-update-set.js <updateSetSysId> <outputDirectory>');
|
|
12
|
+
console.error('Requires SN_INSTANCE_ALIAS (e.g. in .env) matching your ServiceNow CLI credential alias.');
|
|
13
|
+
process.exitCode = 1;
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const alias = process.env.SN_INSTANCE_ALIAS?.trim();
|
|
17
|
+
if (!alias) {
|
|
18
|
+
console.error('SN_INSTANCE_ALIAS is not set. Add it to .env or export it in the shell.');
|
|
19
|
+
process.exitCode = 1;
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const credential = await getCredentials(alias);
|
|
23
|
+
if (!credential) {
|
|
24
|
+
console.error(`No credentials found for alias: ${alias}`);
|
|
25
|
+
process.exitCode = 1;
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const snSettings = {
|
|
29
|
+
alias,
|
|
30
|
+
credential,
|
|
31
|
+
};
|
|
32
|
+
const instance = new ServiceNowInstance(snSettings);
|
|
33
|
+
const manager = new UpdateSetManager(instance);
|
|
34
|
+
const xml = await manager.exportUpdateSet(updateSetSysId.trim());
|
|
35
|
+
const outDir = resolve(outputDirArg.trim());
|
|
36
|
+
await mkdir(outDir, { recursive: true });
|
|
37
|
+
const filePath = join(outDir, `update-set-${updateSetSysId.trim()}.xml`);
|
|
38
|
+
await writeFile(filePath, xml, 'utf8');
|
|
39
|
+
console.log(`Wrote ${filePath}`);
|
|
40
|
+
}
|
|
41
|
+
main().catch((err) => {
|
|
42
|
+
console.error(err);
|
|
43
|
+
process.exitCode = 1;
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=export-update-set.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-update-set.js","sourceRoot":"","sources":["../../src/cli/export-update-set.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAA8B,MAAM,0BAA0B,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,KAAK,UAAU,IAAI;IACf,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAErC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,8EAA8E,CAAC,CAAC;QAC9F,OAAO,CAAC,KAAK,CAAC,0FAA0F,CAAC,CAAC;QAC1G,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACX,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC;IACpD,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;QACzF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACX,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,mCAAmC,KAAK,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACX,CAAC;IAED,MAAM,UAAU,GAA+B;QAC3C,KAAK;QACL,UAAU;KACb,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAE/C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,cAAc,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACzE,MAAM,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC1B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACzB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents a managed, stateful workflow session (e.g., script tracing, impersonation).
|
|
3
|
+
*
|
|
4
|
+
* Unlike SessionManager (which caches HTTP sessions by instance alias), an ActiveSession
|
|
5
|
+
* bundles together the stateful resources needed for a multi-step workflow under a unique ID.
|
|
6
|
+
* This allows stateless callers (MCP tools, CLI commands) to start a workflow, receive a
|
|
7
|
+
* session handle, and reference it in subsequent operations.
|
|
8
|
+
*/
|
|
9
|
+
export interface ActiveSession {
|
|
10
|
+
/** Unique session identifier (UUID v4) */
|
|
11
|
+
readonly id: string;
|
|
12
|
+
/** Session type discriminator (e.g., 'script-tracer', 'impersonation') */
|
|
13
|
+
readonly type: string;
|
|
14
|
+
/** The ServiceNow instance alias this session targets */
|
|
15
|
+
readonly instanceAlias: string;
|
|
16
|
+
/** When the session was created */
|
|
17
|
+
readonly createdAt: Date;
|
|
18
|
+
/** When the session was last accessed (updated on every getSession/getResource call) */
|
|
19
|
+
lastAccessedAt: Date;
|
|
20
|
+
/** Arbitrary keyed resources attached to this session (e.g., ScriptTracer, AMBClient) */
|
|
21
|
+
resources: Map<string, unknown>;
|
|
22
|
+
}
|
|
23
|
+
export interface CreateSessionOptions {
|
|
24
|
+
/** Session type discriminator */
|
|
25
|
+
type: string;
|
|
26
|
+
/** The ServiceNow instance alias */
|
|
27
|
+
instanceAlias: string;
|
|
28
|
+
/** Initial resources to attach (key → value) */
|
|
29
|
+
resources?: Record<string, unknown>;
|
|
30
|
+
/** Time-to-live in milliseconds. Session expires if not accessed within this window. */
|
|
31
|
+
ttlMs?: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Singleton registry of active workflow sessions.
|
|
35
|
+
*
|
|
36
|
+
* Provides a unique-ID-based lookup for stateful sessions that span multiple
|
|
37
|
+
* operations (e.g., start tracing → execute script → get results → stop tracing).
|
|
38
|
+
*
|
|
39
|
+
* Intended consumers:
|
|
40
|
+
* - MCP tools: create a session on "start", return the ID, retrieve on subsequent tool calls
|
|
41
|
+
* - CLI commands: same pattern when a command stays alive, or via future file-based persistence
|
|
42
|
+
*
|
|
43
|
+
* Resources are stored as opaque values — the registry does not know about ScriptTracer,
|
|
44
|
+
* AMBClient, etc. Callers use typed getResource<T>() to retrieve them.
|
|
45
|
+
*/
|
|
46
|
+
export declare class ActiveSessionRegistry {
|
|
47
|
+
private static _instance;
|
|
48
|
+
private _sessions;
|
|
49
|
+
private _ttls;
|
|
50
|
+
private _logger;
|
|
51
|
+
private constructor();
|
|
52
|
+
static getInstance(): ActiveSessionRegistry;
|
|
53
|
+
/** @internal Visible for testing only */
|
|
54
|
+
static resetInstance(): void;
|
|
55
|
+
/**
|
|
56
|
+
* Create a new active session and return its unique ID.
|
|
57
|
+
*/
|
|
58
|
+
createSession(options: CreateSessionOptions): string;
|
|
59
|
+
/**
|
|
60
|
+
* Retrieve an active session by ID. Returns null if not found or expired.
|
|
61
|
+
* Updates lastAccessedAt on access.
|
|
62
|
+
*/
|
|
63
|
+
getSession(id: string): ActiveSession | null;
|
|
64
|
+
/**
|
|
65
|
+
* Typed convenience for retrieving a single resource from a session.
|
|
66
|
+
* Returns null if the session doesn't exist, is expired, or the key is missing.
|
|
67
|
+
*/
|
|
68
|
+
getResource<T>(sessionId: string, key: string): T | null;
|
|
69
|
+
/**
|
|
70
|
+
* Attach or update a resource on an existing session.
|
|
71
|
+
*/
|
|
72
|
+
setResource(sessionId: string, key: string, value: unknown): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Destroy a session and remove all its resources.
|
|
75
|
+
* Callers are responsible for cleanup of resources (e.g., stopping a ScriptTracer)
|
|
76
|
+
* before calling this method.
|
|
77
|
+
*/
|
|
78
|
+
destroySession(id: string): boolean;
|
|
79
|
+
/**
|
|
80
|
+
* List active (non-expired) sessions, optionally filtered by type and/or instance alias.
|
|
81
|
+
*/
|
|
82
|
+
listSessions(filter?: {
|
|
83
|
+
type?: string;
|
|
84
|
+
instanceAlias?: string;
|
|
85
|
+
}): ActiveSession[];
|
|
86
|
+
/**
|
|
87
|
+
* Number of active sessions.
|
|
88
|
+
*/
|
|
89
|
+
get size(): number;
|
|
90
|
+
private isExpired;
|
|
91
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { Logger } from "../../util/Logger.js";
|
|
3
|
+
/**
|
|
4
|
+
* Singleton registry of active workflow sessions.
|
|
5
|
+
*
|
|
6
|
+
* Provides a unique-ID-based lookup for stateful sessions that span multiple
|
|
7
|
+
* operations (e.g., start tracing → execute script → get results → stop tracing).
|
|
8
|
+
*
|
|
9
|
+
* Intended consumers:
|
|
10
|
+
* - MCP tools: create a session on "start", return the ID, retrieve on subsequent tool calls
|
|
11
|
+
* - CLI commands: same pattern when a command stays alive, or via future file-based persistence
|
|
12
|
+
*
|
|
13
|
+
* Resources are stored as opaque values — the registry does not know about ScriptTracer,
|
|
14
|
+
* AMBClient, etc. Callers use typed getResource<T>() to retrieve them.
|
|
15
|
+
*/
|
|
16
|
+
export class ActiveSessionRegistry {
|
|
17
|
+
static _instance = null;
|
|
18
|
+
_sessions = new Map();
|
|
19
|
+
_ttls = new Map();
|
|
20
|
+
_logger = new Logger("ActiveSessionRegistry");
|
|
21
|
+
constructor() { }
|
|
22
|
+
static getInstance() {
|
|
23
|
+
if (!ActiveSessionRegistry._instance) {
|
|
24
|
+
ActiveSessionRegistry._instance = new ActiveSessionRegistry();
|
|
25
|
+
}
|
|
26
|
+
return ActiveSessionRegistry._instance;
|
|
27
|
+
}
|
|
28
|
+
/** @internal Visible for testing only */
|
|
29
|
+
static resetInstance() {
|
|
30
|
+
ActiveSessionRegistry._instance = null;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Create a new active session and return its unique ID.
|
|
34
|
+
*/
|
|
35
|
+
createSession(options) {
|
|
36
|
+
const id = randomUUID();
|
|
37
|
+
const now = new Date();
|
|
38
|
+
const session = {
|
|
39
|
+
id,
|
|
40
|
+
type: options.type,
|
|
41
|
+
instanceAlias: options.instanceAlias,
|
|
42
|
+
createdAt: now,
|
|
43
|
+
lastAccessedAt: now,
|
|
44
|
+
resources: new Map(Object.entries(options.resources ?? {})),
|
|
45
|
+
};
|
|
46
|
+
this._sessions.set(id, session);
|
|
47
|
+
if (options.ttlMs) {
|
|
48
|
+
this._ttls.set(id, options.ttlMs);
|
|
49
|
+
}
|
|
50
|
+
this._logger.info(`Created ${options.type} session ${id} for instance ${options.instanceAlias}`);
|
|
51
|
+
return id;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Retrieve an active session by ID. Returns null if not found or expired.
|
|
55
|
+
* Updates lastAccessedAt on access.
|
|
56
|
+
*/
|
|
57
|
+
getSession(id) {
|
|
58
|
+
const session = this._sessions.get(id);
|
|
59
|
+
if (!session)
|
|
60
|
+
return null;
|
|
61
|
+
if (this.isExpired(session)) {
|
|
62
|
+
this._logger.info(`Session ${id} expired`);
|
|
63
|
+
this.destroySession(id);
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
session.lastAccessedAt = new Date();
|
|
67
|
+
return session;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Typed convenience for retrieving a single resource from a session.
|
|
71
|
+
* Returns null if the session doesn't exist, is expired, or the key is missing.
|
|
72
|
+
*/
|
|
73
|
+
getResource(sessionId, key) {
|
|
74
|
+
const session = this.getSession(sessionId);
|
|
75
|
+
return session?.resources.get(key) ?? null;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Attach or update a resource on an existing session.
|
|
79
|
+
*/
|
|
80
|
+
setResource(sessionId, key, value) {
|
|
81
|
+
const session = this.getSession(sessionId);
|
|
82
|
+
if (!session)
|
|
83
|
+
return false;
|
|
84
|
+
session.resources.set(key, value);
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Destroy a session and remove all its resources.
|
|
89
|
+
* Callers are responsible for cleanup of resources (e.g., stopping a ScriptTracer)
|
|
90
|
+
* before calling this method.
|
|
91
|
+
*/
|
|
92
|
+
destroySession(id) {
|
|
93
|
+
const existed = this._sessions.delete(id);
|
|
94
|
+
this._ttls.delete(id);
|
|
95
|
+
if (existed) {
|
|
96
|
+
this._logger.info(`Destroyed session ${id}`);
|
|
97
|
+
}
|
|
98
|
+
return existed;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* List active (non-expired) sessions, optionally filtered by type and/or instance alias.
|
|
102
|
+
*/
|
|
103
|
+
listSessions(filter) {
|
|
104
|
+
// Evict expired sessions first
|
|
105
|
+
for (const [id, session] of this._sessions) {
|
|
106
|
+
if (this.isExpired(session)) {
|
|
107
|
+
this.destroySession(id);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
let sessions = Array.from(this._sessions.values());
|
|
111
|
+
if (filter?.type) {
|
|
112
|
+
sessions = sessions.filter(s => s.type === filter.type);
|
|
113
|
+
}
|
|
114
|
+
if (filter?.instanceAlias) {
|
|
115
|
+
sessions = sessions.filter(s => s.instanceAlias === filter.instanceAlias);
|
|
116
|
+
}
|
|
117
|
+
return sessions;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Number of active sessions.
|
|
121
|
+
*/
|
|
122
|
+
get size() {
|
|
123
|
+
return this._sessions.size;
|
|
124
|
+
}
|
|
125
|
+
isExpired(session) {
|
|
126
|
+
const ttl = this._ttls.get(session.id);
|
|
127
|
+
if (!ttl)
|
|
128
|
+
return false;
|
|
129
|
+
return (Date.now() - session.lastAccessedAt.getTime()) > ttl;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=ActiveSessionRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActiveSessionRegistry.js","sourceRoot":"","sources":["../../../src/comm/http/ActiveSessionRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RequestHandler.js","sourceRoot":"","sources":["../../../src/comm/http/RequestHandler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAK9C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"RequestHandler.js","sourceRoot":"","sources":["../../../src/comm/http/RequestHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ServiceNowInstance } from "../../sn/ServiceNowInstance.js";
|
|
2
|
+
import { ServiceNowRequest } from "./ServiceNowRequest.js";
|
|
3
|
+
/**
|
|
4
|
+
* Singleton registry of authenticated ServiceNowRequest instances keyed by instance alias.
|
|
5
|
+
* Ensures all components sharing the same alias reuse the same HTTP session.
|
|
6
|
+
*/
|
|
7
|
+
export declare class SessionManager {
|
|
8
|
+
private static _instance;
|
|
9
|
+
private _sessions;
|
|
10
|
+
private _authPromises;
|
|
11
|
+
private _logger;
|
|
12
|
+
private constructor();
|
|
13
|
+
static getInstance(): SessionManager;
|
|
14
|
+
/** @internal Visible for testing only — not exported from index.ts */
|
|
15
|
+
static resetInstance(): void;
|
|
16
|
+
/**
|
|
17
|
+
* Get or create a ServiceNowRequest for this instance.
|
|
18
|
+
* Keyed by alias (falls back to host).
|
|
19
|
+
*/
|
|
20
|
+
getRequest(instance: ServiceNowInstance): ServiceNowRequest;
|
|
21
|
+
/**
|
|
22
|
+
* Get or create a ServiceNowRequest and ensure it is authenticated.
|
|
23
|
+
* Uses an in-flight promise guard to prevent duplicate concurrent auth calls.
|
|
24
|
+
*/
|
|
25
|
+
getAuthenticatedRequest(instance: ServiceNowInstance): Promise<ServiceNowRequest>;
|
|
26
|
+
/**
|
|
27
|
+
* Remove cached session for a given alias.
|
|
28
|
+
*/
|
|
29
|
+
clearSession(alias: string): void;
|
|
30
|
+
/**
|
|
31
|
+
* Remove all cached sessions.
|
|
32
|
+
*/
|
|
33
|
+
clearAll(): void;
|
|
34
|
+
/**
|
|
35
|
+
* Check if a session exists for a given alias.
|
|
36
|
+
*/
|
|
37
|
+
hasSession(alias: string): boolean;
|
|
38
|
+
private getKey;
|
|
39
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { ServiceNowRequest } from "./ServiceNowRequest.js";
|
|
2
|
+
import { Logger } from "../../util/Logger.js";
|
|
3
|
+
/**
|
|
4
|
+
* Singleton registry of authenticated ServiceNowRequest instances keyed by instance alias.
|
|
5
|
+
* Ensures all components sharing the same alias reuse the same HTTP session.
|
|
6
|
+
*/
|
|
7
|
+
export class SessionManager {
|
|
8
|
+
static _instance = null;
|
|
9
|
+
_sessions = new Map();
|
|
10
|
+
_authPromises = new Map();
|
|
11
|
+
_logger = new Logger("SessionManager");
|
|
12
|
+
constructor() { }
|
|
13
|
+
static getInstance() {
|
|
14
|
+
if (!SessionManager._instance) {
|
|
15
|
+
SessionManager._instance = new SessionManager();
|
|
16
|
+
}
|
|
17
|
+
return SessionManager._instance;
|
|
18
|
+
}
|
|
19
|
+
/** @internal Visible for testing only — not exported from index.ts */
|
|
20
|
+
static resetInstance() {
|
|
21
|
+
SessionManager._instance = null;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get or create a ServiceNowRequest for this instance.
|
|
25
|
+
* Keyed by alias (falls back to host).
|
|
26
|
+
*/
|
|
27
|
+
getRequest(instance) {
|
|
28
|
+
const key = this.getKey(instance);
|
|
29
|
+
let request = this._sessions.get(key);
|
|
30
|
+
if (!request) {
|
|
31
|
+
this._logger.debug(`Creating new session for alias: ${key}`);
|
|
32
|
+
request = new ServiceNowRequest(instance);
|
|
33
|
+
this._sessions.set(key, request);
|
|
34
|
+
}
|
|
35
|
+
return request;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get or create a ServiceNowRequest and ensure it is authenticated.
|
|
39
|
+
* Uses an in-flight promise guard to prevent duplicate concurrent auth calls.
|
|
40
|
+
*/
|
|
41
|
+
async getAuthenticatedRequest(instance) {
|
|
42
|
+
const key = this.getKey(instance);
|
|
43
|
+
const request = this.getRequest(instance);
|
|
44
|
+
if (request.isLoggedIn()) {
|
|
45
|
+
return request;
|
|
46
|
+
}
|
|
47
|
+
// Guard against concurrent callers both triggering auth
|
|
48
|
+
const existing = this._authPromises.get(key);
|
|
49
|
+
if (existing) {
|
|
50
|
+
return existing;
|
|
51
|
+
}
|
|
52
|
+
const authPromise = (async () => {
|
|
53
|
+
try {
|
|
54
|
+
this._logger.debug(`Authenticating session for alias: ${key}`);
|
|
55
|
+
await request.getUserSession();
|
|
56
|
+
return request;
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
this._authPromises.delete(key);
|
|
60
|
+
}
|
|
61
|
+
})();
|
|
62
|
+
this._authPromises.set(key, authPromise);
|
|
63
|
+
return authPromise;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Remove cached session for a given alias.
|
|
67
|
+
*/
|
|
68
|
+
clearSession(alias) {
|
|
69
|
+
this._logger.debug(`Clearing session for alias: ${alias}`);
|
|
70
|
+
this._sessions.delete(alias);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Remove all cached sessions.
|
|
74
|
+
*/
|
|
75
|
+
clearAll() {
|
|
76
|
+
this._logger.debug(`Clearing all ${this._sessions.size} sessions`);
|
|
77
|
+
this._sessions.clear();
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Check if a session exists for a given alias.
|
|
81
|
+
*/
|
|
82
|
+
hasSession(alias) {
|
|
83
|
+
return this._sessions.has(alias);
|
|
84
|
+
}
|
|
85
|
+
getKey(instance) {
|
|
86
|
+
const key = instance.getAlias() ?? instance.getHost();
|
|
87
|
+
if (!key) {
|
|
88
|
+
throw new Error("ServiceNowInstance must have an alias or host to identify the session");
|
|
89
|
+
}
|
|
90
|
+
return key;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=SessionManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../../src/comm/http/SessionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SessionManager } from "./SessionManager.js";
|
|
2
2
|
export class TableAPIRequest {
|
|
3
3
|
_headers = {
|
|
4
4
|
"Content-Type": "application/json",
|
|
@@ -32,7 +32,7 @@ export class TableAPIRequest {
|
|
|
32
32
|
return await this._doRequest(uri, "patch", null, body);
|
|
33
33
|
}
|
|
34
34
|
async _doRequest(uri, httpMethod, query, bodyData) {
|
|
35
|
-
const req =
|
|
35
|
+
const req = SessionManager.getInstance().getRequest(this.snInstance);
|
|
36
36
|
const request = { path: uri, method: httpMethod, headers: this._headers, query: query, body: null, json: bodyData };
|
|
37
37
|
return await req.executeRequest(request);
|
|
38
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableAPIRequest.js","sourceRoot":"","sources":["../../../src/comm/http/TableAPIRequest.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"TableAPIRequest.js","sourceRoot":"","sources":["../../../src/comm/http/TableAPIRequest.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,OAAO,eAAe;IAEhB,QAAQ,GAAU;QACtB,cAAc,EAAC,kBAAkB;QACjC,QAAQ,EAAE,kBAAkB;KAC/B,CAAC;IAEM,QAAQ,GAAG,6BAA6B,CAAC;IAEzC,WAAW,CAAsB;IACzC,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IACD,IAAW,UAAU,CAAC,KAA0B;QAC5C,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED,YAAmB,QAA4B;QAC3C,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;IAC/B,CAAC;IAEM,KAAK,CAAC,GAAG,CAAI,SAAgB,EAAE,KAAY;QAE9C,MAAM,GAAG,GAAU,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAC,UAAU,EAAC,SAAS,EAAC,CAAC,CAAC;QAE1E,OAAO,MAAM,IAAI,CAAC,UAAU,CAAI,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAEM,KAAK,CAAC,IAAI,CAAI,SAAgB,EAAE,KAAY,EAAE,IAAW;QAE5D,MAAM,GAAG,GAAU,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAC,UAAU,EAAC,SAAS,EAAC,CAAC,CAAC;QAE1E,OAAO,MAAM,IAAI,CAAC,UAAU,CAAI,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9D,CAAC;IAEM,KAAK,CAAC,GAAG,CAAI,SAAgB,EAAE,KAAY,EAAE,IAAW;QAE3D,MAAM,GAAG,GAAU,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAC,UAAU,EAAC,SAAS,EAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC;QAExF,OAAO,MAAM,IAAI,CAAC,UAAU,CAAI,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IAEM,KAAK,CAAC,KAAK,CAAI,SAAgB,EAAE,KAAY,EAAE,IAAW;QAE7D,MAAM,GAAG,GAAU,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAC,UAAU,EAAC,SAAS,EAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC;QAExF,OAAO,MAAM,IAAI,CAAC,UAAU,CAAI,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9D,CAAC;IAEO,KAAK,CAAC,UAAU,CAAI,GAAU,EAAE,UAAiB,EAAE,KAAoB,EAAE,QAAsB;QACnG,MAAM,GAAG,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAgC,CAAC,CAAC;QAC3F,MAAM,OAAO,GAAe,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAC,CAAC;QAC/H,OAAO,MAAM,GAAG,CAAC,cAAc,CAAI,OAAO,CAAC,CAAC;IAChD,CAAC;IAGO,UAAU,CAAC,aAAoB,EAAE,SAAgB;QACtD,IAAI,YAAY,GAAU,aAAa,CAAC;QACvC,KAAI,MAAM,IAAI,IAAI,SAAS,EAAC,CAAC;YACzB,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,GAAC,IAAI,GAAC,GAAG,EAAE,SAAS,CAAC,IAAI,CAAW,CAAC,CAAC;QACjF,CAAC;QAED,OAAO,YAAY,CAAC;IACxB,CAAC;CACJ"}
|
package/dist/index.d.ts
CHANGED
|
@@ -19,6 +19,8 @@ export * from './util/AppUtil.js';
|
|
|
19
19
|
export * from './util/CSRFTokenHelper.js';
|
|
20
20
|
export * from './util/Logger.js';
|
|
21
21
|
export * from './util/NowStringUtil.js';
|
|
22
|
+
export * from './util/utils.js';
|
|
23
|
+
export * from './comm/http/ActiveSessionRegistry.js';
|
|
22
24
|
export * from './comm/http/HTTPRequest.js';
|
|
23
25
|
export * from './comm/http/HttpResponse.js';
|
|
24
26
|
export * from './comm/http/ICookieStore.js';
|
|
@@ -33,7 +35,6 @@ export * from './comm/http/TableAPIRequest.js';
|
|
|
33
35
|
export * from './comm/ws/ATFMessageHandler.js';
|
|
34
36
|
export * from './sn/aggregate/AggregateModels.js';
|
|
35
37
|
export * from './sn/aggregate/AggregateQuery.js';
|
|
36
|
-
export * from './sn/amb/AuthenticatedWebSocket.js';
|
|
37
38
|
export * from './sn/application/ApplicationDetailModel.js';
|
|
38
39
|
export * from './sn/application/ApplicationManager.js';
|
|
39
40
|
export * from './sn/application/AppRepoApplication.js';
|
|
@@ -71,6 +72,8 @@ export * from './sn/scope/ScopeModels.js';
|
|
|
71
72
|
export * from './sn/scriptsync/ScriptSync.js';
|
|
72
73
|
export * from './sn/scriptsync/ScriptSyncModels.js';
|
|
73
74
|
export * from './sn/scriptsync/ScriptWatcher.js';
|
|
75
|
+
export * from './sn/scripttracer/ScriptTracer.js';
|
|
76
|
+
export * from './sn/scripttracer/ScriptTracerModels.js';
|
|
74
77
|
export * from './sn/syslog/SyslogReader.js';
|
|
75
78
|
export * from './sn/syslog/SyslogRecord.js';
|
|
76
79
|
export * from './sn/task/TaskModels.js';
|
|
@@ -85,3 +88,4 @@ export * from './sn/xml/XMLRecordModels.js';
|
|
|
85
88
|
export * from './sn/user/factory/UserFactory.js';
|
|
86
89
|
export * from './sn/user/model/IUser.js';
|
|
87
90
|
export * from './sn/user/model/User.js';
|
|
91
|
+
export * from './PublicApi.js';
|
package/dist/index.js
CHANGED
|
@@ -19,6 +19,8 @@ export * from './util/AppUtil.js';
|
|
|
19
19
|
export * from './util/CSRFTokenHelper.js';
|
|
20
20
|
export * from './util/Logger.js';
|
|
21
21
|
export * from './util/NowStringUtil.js';
|
|
22
|
+
export * from './util/utils.js';
|
|
23
|
+
export * from './comm/http/ActiveSessionRegistry.js';
|
|
22
24
|
export * from './comm/http/HTTPRequest.js';
|
|
23
25
|
export * from './comm/http/HttpResponse.js';
|
|
24
26
|
export * from './comm/http/ICookieStore.js';
|
|
@@ -33,7 +35,6 @@ export * from './comm/http/TableAPIRequest.js';
|
|
|
33
35
|
export * from './comm/ws/ATFMessageHandler.js';
|
|
34
36
|
export * from './sn/aggregate/AggregateModels.js';
|
|
35
37
|
export * from './sn/aggregate/AggregateQuery.js';
|
|
36
|
-
export * from './sn/amb/AuthenticatedWebSocket.js';
|
|
37
38
|
export * from './sn/application/ApplicationDetailModel.js';
|
|
38
39
|
export * from './sn/application/ApplicationManager.js';
|
|
39
40
|
export * from './sn/application/AppRepoApplication.js';
|
|
@@ -71,6 +72,8 @@ export * from './sn/scope/ScopeModels.js';
|
|
|
71
72
|
export * from './sn/scriptsync/ScriptSync.js';
|
|
72
73
|
export * from './sn/scriptsync/ScriptSyncModels.js';
|
|
73
74
|
export * from './sn/scriptsync/ScriptWatcher.js';
|
|
75
|
+
export * from './sn/scripttracer/ScriptTracer.js';
|
|
76
|
+
export * from './sn/scripttracer/ScriptTracerModels.js';
|
|
74
77
|
export * from './sn/syslog/SyslogReader.js';
|
|
75
78
|
export * from './sn/syslog/SyslogRecord.js';
|
|
76
79
|
export * from './sn/task/TaskModels.js';
|
|
@@ -85,4 +88,8 @@ export * from './sn/xml/XMLRecordModels.js';
|
|
|
85
88
|
export * from './sn/user/factory/UserFactory.js';
|
|
86
89
|
export * from './sn/user/model/IUser.js';
|
|
87
90
|
export * from './sn/user/model/User.js';
|
|
91
|
+
// --- appended by scripts/finalize-barrel.mjs (see that file for why) ---
|
|
92
|
+
// Curated exports ctix cannot express: it omits src/sn/amb entirely because
|
|
93
|
+
// that folder has its own index.ts covering every module in it.
|
|
94
|
+
export * from './PublicApi.js';
|
|
88
95
|
//# sourceMappingURL=index.js.map
|