@sonisoft/now-sdk-ext-core 6.18.3 → 6.18.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,8 @@
1
1
  import { ServiceNowInstance } from "../../sn/ServiceNowInstance.js";
2
2
  import { ServiceNowRequest } from "./ServiceNowRequest.js";
3
3
  /**
4
- * Singleton registry of authenticated ServiceNowRequest instances keyed by instance alias.
4
+ * Singleton registry of authenticated ServiceNowRequest instances keyed by instance alias (or host), plus the
5
+ * instance's elevated roles when it has any: an elevated session is a separate server session.
5
6
  * Ensures all components sharing the same alias reuse the same HTTP session.
6
7
  */
7
8
  export declare class SessionManager {
@@ -15,7 +16,7 @@ export declare class SessionManager {
15
16
  static resetInstance(): void;
16
17
  /**
17
18
  * Get or create a ServiceNowRequest for this instance.
18
- * Keyed by alias (falls back to host).
19
+ * Keyed by alias (falls back to host) and elevated roles.
19
20
  */
20
21
  getRequest(instance: ServiceNowInstance): ServiceNowRequest;
21
22
  /**
@@ -34,7 +35,7 @@ export declare class SessionManager {
34
35
  */
35
36
  getAuthenticatedRequest(instance: ServiceNowInstance): Promise<ServiceNowRequest>;
36
37
  /**
37
- * Remove cached session for a given alias.
38
+ * Remove the cached sessions of an alias (or host): the plain one and every elevated one.
38
39
  */
39
40
  clearSession(alias: string): void;
40
41
  /**
@@ -42,7 +43,8 @@ export declare class SessionManager {
42
43
  */
43
44
  clearAll(): void;
44
45
  /**
45
- * Check if a session exists for a given alias.
46
+ * Check if a session exists under a key: the alias (or host) for a plain session; an elevated
47
+ * session's key is `alias#elevated:<roles, sorted, comma-separated>`.
46
48
  */
47
49
  hasSession(alias: string): boolean;
48
50
  private getKey;
@@ -1,7 +1,10 @@
1
1
  import { ServiceNowRequest } from "./ServiceNowRequest.js";
2
2
  import { Logger } from "../../util/Logger.js";
3
+ /** Separates an elevated session's key from its alias: `dev#elevated:security_admin`. */
4
+ const ELEVATED_KEY = '#elevated:';
3
5
  /**
4
- * Singleton registry of authenticated ServiceNowRequest instances keyed by instance alias.
6
+ * Singleton registry of authenticated ServiceNowRequest instances keyed by instance alias (or host), plus the
7
+ * instance's elevated roles when it has any: an elevated session is a separate server session.
5
8
  * Ensures all components sharing the same alias reuse the same HTTP session.
6
9
  */
7
10
  export class SessionManager {
@@ -22,12 +25,12 @@ export class SessionManager {
22
25
  }
23
26
  /**
24
27
  * Get or create a ServiceNowRequest for this instance.
25
- * Keyed by alias (falls back to host).
28
+ * Keyed by alias (falls back to host) and elevated roles.
26
29
  */
27
30
  getRequest(instance) {
28
31
  const key = this.getKey(instance);
29
32
  let request = this._sessions.get(key);
30
- // The key is alias-or-host, which says nothing about *which* ServiceNowInstance
33
+ // The key is alias-or-host (and elevation), which says nothing about *which* ServiceNowInstance
31
34
  // object asked. A consumer that rebuilds its connection — now-sdk-ext-mcp evicts
32
35
  // on a 30-minute TTL — passes a new instance under the same alias and would
33
36
  // otherwise be handed the previous one's request, still holding the previous
@@ -102,14 +105,19 @@ export class SessionManager {
102
105
  return authPromise;
103
106
  }
104
107
  /**
105
- * Remove cached session for a given alias.
108
+ * Remove the cached sessions of an alias (or host): the plain one and every elevated one.
106
109
  */
107
110
  clearSession(alias) {
108
111
  this._logger.debug(`Clearing session for alias: ${alias}`);
109
- this._sessions.delete(alias);
110
- // An auth started before the clear would otherwise resolve after it and hand
111
- // the caller the request we just evicted.
112
- this._authPromises.delete(alias);
112
+ // The alias's elevated sessions go with it: they log in with the same credentials.
113
+ const keys = [...new Set([...this._sessions.keys(), ...this._authPromises.keys()])]
114
+ .filter(key => key === alias || key.startsWith(`${alias}${ELEVATED_KEY}`));
115
+ for (const key of keys) {
116
+ this._sessions.delete(key);
117
+ // An auth started before the clear would otherwise resolve after it and hand
118
+ // the caller the request we just evicted.
119
+ this._authPromises.delete(key);
120
+ }
113
121
  }
114
122
  /**
115
123
  * Remove all cached sessions.
@@ -120,7 +128,8 @@ export class SessionManager {
120
128
  this._authPromises.clear();
121
129
  }
122
130
  /**
123
- * Check if a session exists for a given alias.
131
+ * Check if a session exists under a key: the alias (or host) for a plain session; an elevated
132
+ * session's key is `alias#elevated:<roles, sorted, comma-separated>`.
124
133
  */
125
134
  hasSession(alias) {
126
135
  return this._sessions.has(alias);
@@ -130,7 +139,14 @@ export class SessionManager {
130
139
  if (!key) {
131
140
  throw new Error("ServiceNowInstance must have an alias or host to identify the session");
132
141
  }
133
- return key;
142
+ // The marker would let a plain instance's key equal an elevated one's.
143
+ if (key.includes(ELEVATED_KEY)) {
144
+ throw new Error(`ServiceNowInstance alias or host may not contain "${ELEVATED_KEY}"`);
145
+ }
146
+ // An elevated session is a different server session: a long-lived consumer (now-sdk-ext-mcp) keeps a plain
147
+ // and an elevated instance for one alias side by side, and neither may replace the other's session.
148
+ const elevated = instance.elevatedRoles ?? [];
149
+ return elevated.length ? `${key}${ELEVATED_KEY}${[...elevated].sort().join(',')}` : key;
134
150
  }
135
151
  }
136
152
  //# sourceMappingURL=SessionManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../../src/comm/http/SessionManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../../src/comm/http/SessionManager.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.18.3",
3
+ "version": "6.18.4",
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",