nowaikit 4.1.6 → 4.4.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/README.md +3 -3
- package/dist/embed.d.ts +37 -0
- package/dist/embed.d.ts.map +1 -0
- package/dist/embed.js +75 -0
- package/dist/embed.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +12 -2
- package/dist/server.js.map +1 -1
- package/dist/servicenow/client.d.ts +13 -0
- package/dist/servicenow/client.d.ts.map +1 -1
- package/dist/servicenow/client.js +65 -3
- package/dist/servicenow/client.js.map +1 -1
- package/dist/servicenow/instances.d.ts.map +1 -1
- package/dist/servicenow/instances.js +20 -0
- package/dist/servicenow/instances.js.map +1 -1
- package/dist/tools/blast-radius.d.ts +75 -0
- package/dist/tools/blast-radius.d.ts.map +1 -0
- package/dist/tools/blast-radius.js +205 -0
- package/dist/tools/blast-radius.js.map +1 -0
- package/dist/tools/catalog.d.ts.map +1 -1
- package/dist/tools/catalog.js +20 -3
- package/dist/tools/catalog.js.map +1 -1
- package/dist/tools/core.js +2 -2
- package/dist/tools/core.js.map +1 -1
- package/dist/tools/index.d.ts +182 -145
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +16 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/knowledge.d.ts.map +1 -1
- package/dist/tools/knowledge.js +9 -3
- package/dist/tools/knowledge.js.map +1 -1
- package/dist/tools/local-sync.d.ts +83 -0
- package/dist/tools/local-sync.d.ts.map +1 -0
- package/dist/tools/local-sync.js +256 -0
- package/dist/tools/local-sync.js.map +1 -0
- package/dist/tools/ml.d.ts +1 -1
- package/dist/tools/now-assist.d.ts +11 -145
- package/dist/tools/now-assist.d.ts.map +1 -1
- package/dist/tools/now-assist.js +50 -110
- package/dist/tools/now-assist.js.map +1 -1
- package/dist/tools/reporting.d.ts +55 -17
- package/dist/tools/reporting.d.ts.map +1 -1
- package/dist/tools/reporting.js +24 -15
- package/dist/tools/reporting.js.map +1 -1
- package/dist/tools-manifest.json +208 -95
- package/dist/transport/index.d.ts.map +1 -1
- package/dist/transport/index.js +18 -2
- package/dist/transport/index.js.map +1 -1
- package/dist/utils/permissions.d.ts +11 -5
- package/dist/utils/permissions.d.ts.map +1 -1
- package/dist/utils/permissions.js +39 -20
- package/dist/utils/permissions.js.map +1 -1
- package/dist/utils/request-context.d.ts +28 -0
- package/dist/utils/request-context.d.ts.map +1 -0
- package/dist/utils/request-context.js +71 -0
- package/dist/utils/request-context.js.map +1 -0
- package/package.json +8 -3
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-request delegated-auth context (DELEGATED_AUTH mode).
|
|
3
|
+
*
|
|
4
|
+
* When NowAIKit runs behind the NowAIKit Gateway (or any trusted upstream that
|
|
5
|
+
* performs per-user identity), each inbound HTTP request can carry the user's
|
|
6
|
+
* ServiceNow token and a resolved permission policy. This module threads that
|
|
7
|
+
* per-request context to the ServiceNow client and the permission checks via
|
|
8
|
+
* AsyncLocalStorage — without changing any tool signatures.
|
|
9
|
+
*
|
|
10
|
+
* Fully opt-in: only active when DELEGATED_AUTH=true AND a context is present.
|
|
11
|
+
* In stdio / normal single-user mode there is no context, so behaviour is
|
|
12
|
+
* identical to before (env-var driven).
|
|
13
|
+
*/
|
|
14
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
15
|
+
import { timingSafeEqual } from 'node:crypto';
|
|
16
|
+
const store = new AsyncLocalStorage();
|
|
17
|
+
/** True when delegated-auth mode is switched on. */
|
|
18
|
+
export function isDelegatedAuthEnabled() {
|
|
19
|
+
return process.env.DELEGATED_AUTH === 'true';
|
|
20
|
+
}
|
|
21
|
+
/** Run `fn` with the given delegated-auth context bound for its async lifetime. */
|
|
22
|
+
export function runWithDelegatedAuth(ctx, fn) {
|
|
23
|
+
return store.run(ctx, fn);
|
|
24
|
+
}
|
|
25
|
+
/** The current request's delegated-auth context, or undefined outside one. */
|
|
26
|
+
export function getDelegatedAuth() {
|
|
27
|
+
return store.getStore();
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* When NOWAIKIT_DELEGATED_SECRET is set, delegated-auth headers are only trusted if the
|
|
31
|
+
* request carries a matching x-nowaikit-gateway-secret (constant-time compared). This
|
|
32
|
+
* proves the request came from the trusted gateway and not from a client forging its own
|
|
33
|
+
* permission flags. If the secret is unset, behaviour is unchanged (back-compat), and the
|
|
34
|
+
* permission tiers still cap every delegated flag to the server's env ceiling.
|
|
35
|
+
*/
|
|
36
|
+
function gatewaySecretOk(get) {
|
|
37
|
+
const expected = process.env.NOWAIKIT_DELEGATED_SECRET;
|
|
38
|
+
if (!expected)
|
|
39
|
+
return true;
|
|
40
|
+
const got = get('x-nowaikit-gateway-secret') || '';
|
|
41
|
+
const a = Buffer.from(got);
|
|
42
|
+
const b = Buffer.from(expected);
|
|
43
|
+
return a.length === b.length && timingSafeEqual(a, b);
|
|
44
|
+
}
|
|
45
|
+
/** Build a delegated-auth context from inbound (lowercased) HTTP headers. */
|
|
46
|
+
export function parseDelegatedAuthHeaders(headers) {
|
|
47
|
+
const h = (k) => {
|
|
48
|
+
const v = headers[k];
|
|
49
|
+
return Array.isArray(v) ? v[0] : v;
|
|
50
|
+
};
|
|
51
|
+
// Fail closed: a request without the gateway secret gets no token and no flags, so it
|
|
52
|
+
// can neither reach ServiceNow as a delegated user nor self-assert a capability tier.
|
|
53
|
+
if (!gatewaySecretOk(h)) {
|
|
54
|
+
return { flags: {} };
|
|
55
|
+
}
|
|
56
|
+
const bool = (k) => h(k) === 'true';
|
|
57
|
+
return {
|
|
58
|
+
bearerToken: h('x-servicenow-token'),
|
|
59
|
+
instanceUrl: h('x-servicenow-instance-url'),
|
|
60
|
+
toolPackage: h('x-nowaikit-tool-package'),
|
|
61
|
+
user: h('x-nowaikit-user'),
|
|
62
|
+
flags: {
|
|
63
|
+
write: bool('x-nowaikit-write-enabled'),
|
|
64
|
+
cmdbWrite: bool('x-nowaikit-cmdb-write-enabled'),
|
|
65
|
+
scripting: bool('x-nowaikit-scripting-enabled'),
|
|
66
|
+
atf: bool('x-nowaikit-atf-enabled'),
|
|
67
|
+
nowAssist: bool('x-nowaikit-now-assist-enabled'),
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=request-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-context.js","sourceRoot":"","sources":["../../src/utils/request-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAuB9C,MAAM,KAAK,GAAG,IAAI,iBAAiB,EAAiB,CAAC;AAErD,oDAAoD;AACpD,MAAM,UAAU,sBAAsB;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,MAAM,CAAC;AAC/C,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,oBAAoB,CAAI,GAAkB,EAAE,EAAW;IACrE,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,gBAAgB;IAC9B,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC1B,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,GAAsC;IAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;IACvD,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,2BAA2B,CAAC,IAAI,EAAE,CAAC;IACnD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,yBAAyB,CACvC,OAAsD;IAEtD,MAAM,CAAC,GAAG,CAAC,CAAS,EAAsB,EAAE;QAC1C,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC;IACF,sFAAsF;IACtF,sFAAsF;IACtF,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACvB,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;IACrD,OAAO;QACL,WAAW,EAAE,CAAC,CAAC,oBAAoB,CAAC;QACpC,WAAW,EAAE,CAAC,CAAC,2BAA2B,CAAC;QAC3C,WAAW,EAAE,CAAC,CAAC,yBAAyB,CAAC;QACzC,IAAI,EAAE,CAAC,CAAC,iBAAiB,CAAC;QAC1B,KAAK,EAAE;YACL,KAAK,EAAE,IAAI,CAAC,0BAA0B,CAAC;YACvC,SAAS,EAAE,IAAI,CAAC,+BAA+B,CAAC;YAChD,SAAS,EAAE,IAAI,CAAC,8BAA8B,CAAC;YAC/C,GAAG,EAAE,IAAI,CAAC,wBAAwB,CAAC;YACnC,SAAS,EAAE,IAAI,CAAC,+BAA+B,CAAC;SACjD;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nowaikit",
|
|
3
3
|
"mcpName": "io.github.aartiq/nowaikit",
|
|
4
|
-
"version": "4.1
|
|
5
|
-
"description": "The Most Comprehensive ServiceNow AI Toolkit
|
|
4
|
+
"version": "4.4.1",
|
|
5
|
+
"description": "The Most Comprehensive ServiceNow AI Toolkit — 450+ MCP tools + 26 AI capabilities (scan, review, build, ops, docs) + direct BYOK mode. Integrates with Claude, ChatGPT, Gemini, Cursor, GitHub Copilot and any LLM.",
|
|
6
6
|
"main": "dist/server.js",
|
|
7
7
|
"types": "dist/server.d.ts",
|
|
8
8
|
"exports": {
|
|
@@ -10,6 +10,10 @@
|
|
|
10
10
|
"types": "./dist/server.d.ts",
|
|
11
11
|
"import": "./dist/server.js"
|
|
12
12
|
},
|
|
13
|
+
"./embed": {
|
|
14
|
+
"types": "./dist/embed.d.ts",
|
|
15
|
+
"import": "./dist/embed.js"
|
|
16
|
+
},
|
|
13
17
|
"./sdk": {
|
|
14
18
|
"types": "./dist/sdk/index.d.ts",
|
|
15
19
|
"import": "./dist/sdk/index.js"
|
|
@@ -24,7 +28,8 @@
|
|
|
24
28
|
}
|
|
25
29
|
},
|
|
26
30
|
"bin": {
|
|
27
|
-
"nowaikit": "dist/cli/index.js"
|
|
31
|
+
"nowaikit": "dist/cli/index.js",
|
|
32
|
+
"nowaikit-mcp": "dist/server.js"
|
|
28
33
|
},
|
|
29
34
|
"type": "module",
|
|
30
35
|
"files": [
|