react-native-mcp-kit 3.0.0 → 4.0.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 +22 -10
- package/dist/bin/ios-hid +0 -0
- package/dist/client/contexts/McpContext/McpProvider.d.ts.map +1 -1
- package/dist/client/contexts/McpContext/McpProvider.js +5 -5
- package/dist/client/contexts/McpContext/McpProvider.js.map +1 -1
- package/dist/client/core/McpClient.d.ts.map +1 -1
- package/dist/client/core/McpClient.js +26 -32
- package/dist/client/core/McpClient.js.map +1 -1
- package/dist/modules/alert/alert.d.ts.map +1 -1
- package/dist/modules/alert/alert.js +2 -5
- package/dist/modules/alert/alert.js.map +1 -1
- package/dist/modules/console/console.d.ts.map +1 -1
- package/dist/modules/console/console.js +32 -107
- package/dist/modules/console/console.js.map +1 -1
- package/dist/modules/console/types.d.ts +1 -0
- package/dist/modules/console/types.d.ts.map +1 -1
- package/dist/modules/device/device.d.ts.map +1 -1
- package/dist/modules/device/device.js +224 -133
- package/dist/modules/device/device.js.map +1 -1
- package/dist/modules/errors/errors.d.ts.map +1 -1
- package/dist/modules/errors/errors.js +19 -36
- package/dist/modules/errors/errors.js.map +1 -1
- package/dist/modules/fiberTree/children.d.ts +49 -0
- package/dist/modules/fiberTree/children.d.ts.map +1 -0
- package/dist/modules/fiberTree/children.js +182 -0
- package/dist/modules/fiberTree/children.js.map +1 -0
- package/dist/modules/fiberTree/constants.d.ts +13 -0
- package/dist/modules/fiberTree/constants.d.ts.map +1 -0
- package/dist/modules/fiberTree/constants.js +24 -0
- package/dist/modules/fiberTree/constants.js.map +1 -0
- package/dist/modules/fiberTree/fiberTree.d.ts +3 -6
- package/dist/modules/fiberTree/fiberTree.d.ts.map +1 -1
- package/dist/modules/fiberTree/fiberTree.js +219 -1080
- package/dist/modules/fiberTree/fiberTree.js.map +1 -1
- package/dist/modules/fiberTree/finder.d.ts +60 -0
- package/dist/modules/fiberTree/finder.d.ts.map +1 -0
- package/dist/modules/fiberTree/finder.js +107 -0
- package/dist/modules/fiberTree/finder.js.map +1 -0
- package/dist/modules/fiberTree/hooks.d.ts +103 -0
- package/dist/modules/fiberTree/hooks.d.ts.map +1 -0
- package/dist/modules/fiberTree/hooks.js +532 -0
- package/dist/modules/fiberTree/hooks.js.map +1 -0
- package/dist/modules/fiberTree/projection.d.ts +49 -0
- package/dist/modules/fiberTree/projection.d.ts.map +1 -0
- package/dist/modules/fiberTree/projection.js +82 -0
- package/dist/modules/fiberTree/projection.js.map +1 -0
- package/dist/modules/fiberTree/query.d.ts +56 -0
- package/dist/modules/fiberTree/query.d.ts.map +1 -0
- package/dist/modules/fiberTree/query.js +151 -0
- package/dist/modules/fiberTree/query.js.map +1 -0
- package/dist/modules/fiberTree/redact.d.ts +24 -0
- package/dist/modules/fiberTree/redact.d.ts.map +1 -0
- package/dist/modules/fiberTree/redact.js +51 -0
- package/dist/modules/fiberTree/redact.js.map +1 -0
- package/dist/modules/fiberTree/types.d.ts +7 -0
- package/dist/modules/fiberTree/types.d.ts.map +1 -1
- package/dist/modules/fiberTree/utils.d.ts +8 -2
- package/dist/modules/fiberTree/utils.d.ts.map +1 -1
- package/dist/modules/fiberTree/utils.js +79 -78
- package/dist/modules/fiberTree/utils.js.map +1 -1
- package/dist/modules/fiberTree/viewport.d.ts +28 -0
- package/dist/modules/fiberTree/viewport.d.ts.map +1 -0
- package/dist/modules/fiberTree/viewport.js +50 -0
- package/dist/modules/fiberTree/viewport.js.map +1 -0
- package/dist/modules/fiberTree/waitFor.d.ts +52 -0
- package/dist/modules/fiberTree/waitFor.d.ts.map +1 -0
- package/dist/modules/fiberTree/waitFor.js +98 -0
- package/dist/modules/fiberTree/waitFor.js.map +1 -0
- package/dist/modules/logBox/logBox.d.ts.map +1 -1
- package/dist/modules/logBox/logBox.js +59 -66
- package/dist/modules/logBox/logBox.js.map +1 -1
- package/dist/modules/navigation/navigation.d.ts.map +1 -1
- package/dist/modules/navigation/navigation.js +115 -114
- package/dist/modules/navigation/navigation.js.map +1 -1
- package/dist/modules/network/network.d.ts.map +1 -1
- package/dist/modules/network/network.js +78 -197
- package/dist/modules/network/network.js.map +1 -1
- package/dist/modules/network/types.d.ts +23 -27
- package/dist/modules/network/types.d.ts.map +1 -1
- package/dist/modules/reactQuery/reactQuery.d.ts.map +1 -1
- package/dist/modules/reactQuery/reactQuery.js +46 -52
- package/dist/modules/reactQuery/reactQuery.js.map +1 -1
- package/dist/modules/storage/storage.d.ts.map +1 -1
- package/dist/modules/storage/storage.js +20 -3
- package/dist/modules/storage/storage.js.map +1 -1
- package/dist/server/host/tools/input.js +2 -2
- package/dist/server/host/tools/input.js.map +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +33 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/mcpServer.d.ts.map +1 -1
- package/dist/server/mcpServer.js +43 -3
- package/dist/server/mcpServer.js.map +1 -1
- package/dist/server/metro/eventCapture.d.ts +0 -2
- package/dist/server/metro/eventCapture.d.ts.map +1 -1
- package/dist/server/metro/eventCapture.js +1 -2
- package/dist/server/metro/eventCapture.js.map +1 -1
- package/dist/server/metro/tools/events.d.ts.map +1 -1
- package/dist/server/metro/tools/events.js +11 -11
- package/dist/server/metro/tools/events.js.map +1 -1
- package/dist/shared/projection/projectValue.d.ts +90 -0
- package/dist/shared/projection/projectValue.d.ts.map +1 -0
- package/dist/shared/projection/projectValue.js +322 -0
- package/dist/shared/projection/projectValue.js.map +1 -0
- package/dist/shared/projection/redact.d.ts +31 -0
- package/dist/shared/projection/redact.d.ts.map +1 -0
- package/dist/shared/projection/redact.js +78 -0
- package/dist/shared/projection/redact.js.map +1 -0
- package/dist/shared/projection/resolvePath.d.ts +45 -0
- package/dist/shared/projection/resolvePath.d.ts.map +1 -0
- package/dist/shared/projection/resolvePath.js +211 -0
- package/dist/shared/projection/resolvePath.js.map +1 -0
- package/dist/shared/rn/core.d.ts +48 -0
- package/dist/shared/rn/core.d.ts.map +1 -0
- package/dist/shared/rn/core.js +100 -0
- package/dist/shared/rn/core.js.map +1 -0
- package/dist/shared/rn/deviceInfo.d.ts +40 -0
- package/dist/shared/rn/deviceInfo.d.ts.map +1 -0
- package/dist/shared/rn/deviceInfo.js +78 -0
- package/dist/shared/rn/deviceInfo.js.map +1 -0
- package/package.json +2 -2
- package/dist/client/hooks/useMcpState.d.ts +0 -3
- package/dist/client/hooks/useMcpState.d.ts.map +0 -1
- package/dist/client/hooks/useMcpState.js +0 -20
- package/dist/client/hooks/useMcpState.js.map +0 -1
- package/dist/server/canonicalize.d.ts +0 -8
- package/dist/server/canonicalize.d.ts.map +0 -1
- package/dist/server/canonicalize.js +0 -23
- package/dist/server/canonicalize.js.map +0 -1
- package/dist/server/host/modules/screenshot.d.ts +0 -4
- package/dist/server/host/modules/screenshot.d.ts.map +0 -1
- package/dist/server/host/modules/screenshot.js +0 -615
- package/dist/server/host/modules/screenshot.js.map +0 -1
- package/dist/server/host/tools/connectionStatus.d.ts +0 -9
- package/dist/server/host/tools/connectionStatus.d.ts.map +0 -1
- package/dist/server/host/tools/connectionStatus.js +0 -39
- package/dist/server/host/tools/connectionStatus.js.map +0 -1
- package/dist/server/host/tools/symbolicate.d.ts +0 -3
- package/dist/server/host/tools/symbolicate.d.ts.map +0 -1
- package/dist/server/host/tools/symbolicate.js +0 -209
- package/dist/server/host/tools/symbolicate.js.map +0 -1
- package/dist/server/host/wda.d.ts +0 -15
- package/dist/server/host/wda.d.ts.map +0 -1
- package/dist/server/host/wda.js +0 -100
- package/dist/server/host/wda.js.map +0 -1
- package/dist/server/inputSchemaToZod.d.ts +0 -19
- package/dist/server/inputSchemaToZod.d.ts.map +0 -1
- package/dist/server/inputSchemaToZod.js +0 -89
- package/dist/server/inputSchemaToZod.js.map +0 -1
- package/dist/server/metro/tools/openUrl.d.ts +0 -3
- package/dist/server/metro/tools/openUrl.d.ts.map +0 -1
- package/dist/server/metro/tools/openUrl.js +0 -71
- package/dist/server/metro/tools/openUrl.js.map +0 -1
- package/dist/shared/slice.d.ts +0 -16
- package/dist/shared/slice.d.ts.map +0 -1
- package/dist/shared/slice.js +0 -29
- package/dist/shared/slice.js.map +0 -1
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isMarker = exports.projectValue = exports.applyProjection = exports.projectAsValue = exports.PROJECTION_SCHEMA = exports.makeProjectionSchema = exports.DEFAULT_MAX_BYTES = exports.DEFAULT_PREVIEW_CAP = exports.DEFAULT_ARRAY_CAP = exports.DEFAULT_OBJECT_CAP = exports.MAX_DEPTH = exports.DEFAULT_DEPTH = void 0;
|
|
4
|
+
const redact_1 = require("./redact");
|
|
5
|
+
const resolvePath_1 = require("./resolvePath");
|
|
6
|
+
/**
|
|
7
|
+
* Single canonical "render this value into a compact, agent-friendly JSON"
|
|
8
|
+
* primitive. Replaces the per-module serializers (`fiberTree:serializeValue`,
|
|
9
|
+
* `console:serializeArg`, `network:captureBody`).
|
|
10
|
+
*
|
|
11
|
+
* Behaviour:
|
|
12
|
+
* - Walks the value to depth `depth` (default 1, max 8).
|
|
13
|
+
* - Containers expanded inside the depth budget → raw JSON.
|
|
14
|
+
* - Containers beyond depth, or specials (Date/Error/etc.) → string-keyed
|
|
15
|
+
* sentinel marker `{ "${kind}": meta }` (see plan §2 for full table).
|
|
16
|
+
* - Wide containers are width-capped: 30 keys for objects, 50 items for
|
|
17
|
+
* arrays; the cut adds a `${truncated}` sentinel as the FIRST entry of
|
|
18
|
+
* the container.
|
|
19
|
+
* - Long strings (> previewCap) become `{ "${str}": { "len": N, "preview": "..." } }`.
|
|
20
|
+
* - Cycles → `{ "${cyc}": true }`.
|
|
21
|
+
* - Pluggable `collapse` rules let modules detect domain-specific shapes
|
|
22
|
+
* (fiberTree component refs) and replace them with their own marker.
|
|
23
|
+
* - Optional `path` — resolves the path inside `input` first; then projects
|
|
24
|
+
* the resolved subtree under the same rules. Path slice (`[N:M]`) overrides
|
|
25
|
+
* the default container width-cap for that specific level.
|
|
26
|
+
*/
|
|
27
|
+
exports.DEFAULT_DEPTH = 1;
|
|
28
|
+
exports.MAX_DEPTH = 8;
|
|
29
|
+
exports.DEFAULT_OBJECT_CAP = 30;
|
|
30
|
+
exports.DEFAULT_ARRAY_CAP = 50;
|
|
31
|
+
exports.DEFAULT_PREVIEW_CAP = 100;
|
|
32
|
+
exports.DEFAULT_MAX_BYTES = 50_000;
|
|
33
|
+
/**
|
|
34
|
+
* Standard `path` / `depth` / `maxBytes` arg shape for any tool that returns
|
|
35
|
+
* heavy JSON. Modules call `makeProjectionSchema(defaultDepth)` to get a
|
|
36
|
+
* description string that reflects their per-tool default, and spread the
|
|
37
|
+
* result into their inputSchema. Args are then funnelled through
|
|
38
|
+
* `applyProjection` at the handler exit.
|
|
39
|
+
*/
|
|
40
|
+
// Reusable description shared across all tools: full path/depth/maxBytes
|
|
41
|
+
// semantics live in the server BASE_INSTRUCTIONS — schemas just reference it
|
|
42
|
+
// to keep `describe_tool` payloads small.
|
|
43
|
+
const makeProjectionSchema = (defaultDepth = exports.DEFAULT_DEPTH) => {
|
|
44
|
+
return {
|
|
45
|
+
depth: {
|
|
46
|
+
description: `Expansion depth (default ${defaultDepth}, max ${exports.MAX_DEPTH}). See server instructions § Path-based drill.`,
|
|
47
|
+
examples: [1, 3, 8],
|
|
48
|
+
type: 'number',
|
|
49
|
+
},
|
|
50
|
+
maxBytes: {
|
|
51
|
+
description: `Soft byte cap (default ${exports.DEFAULT_MAX_BYTES}). See server instructions § Path-based drill.`,
|
|
52
|
+
type: 'number',
|
|
53
|
+
},
|
|
54
|
+
path: {
|
|
55
|
+
description: 'Path drill into response (`.key`, `[N]`, `[a:b]`). See server instructions § Path-based drill for full syntax.',
|
|
56
|
+
examples: ['items[0].body', 'items[0:3].id', 'data.user.email'],
|
|
57
|
+
type: 'string',
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
exports.makeProjectionSchema = makeProjectionSchema;
|
|
62
|
+
/** Default-depth projection schema — for modules that don't override depth. */
|
|
63
|
+
exports.PROJECTION_SCHEMA = (0, exports.makeProjectionSchema)();
|
|
64
|
+
/**
|
|
65
|
+
* Convenience wrapper around `projectValue` that returns just the projected
|
|
66
|
+
* value (drops the `{ bytes, truncated }` envelope). Most module handlers
|
|
67
|
+
* want this form when they don't need byte-cap telemetry.
|
|
68
|
+
*/
|
|
69
|
+
const projectAsValue = (value, options) => {
|
|
70
|
+
return (0, exports.projectValue)(value, options).value;
|
|
71
|
+
};
|
|
72
|
+
exports.projectAsValue = projectAsValue;
|
|
73
|
+
/**
|
|
74
|
+
* Standard handler-exit hook. Call this on the final raw response with the
|
|
75
|
+
* tool's args; it pulls `path`/`depth`/`maxBytes` and forwards to the given
|
|
76
|
+
* projector. Modules may override `defaultDepth` per-tool (e.g. fiberTree
|
|
77
|
+
* uses 2 because its top-level shape is an array of matches and depth 1
|
|
78
|
+
* would collapse the array itself into a marker).
|
|
79
|
+
*/
|
|
80
|
+
const applyProjection = (result, args, projector, defaultDepth = exports.DEFAULT_DEPTH) => {
|
|
81
|
+
return projector(result, {
|
|
82
|
+
depth: args.depth ?? defaultDepth,
|
|
83
|
+
maxBytes: args.maxBytes,
|
|
84
|
+
path: args.path,
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
exports.applyProjection = applyProjection;
|
|
88
|
+
const isPlainObject = (v) => {
|
|
89
|
+
if (v === null || typeof v !== 'object')
|
|
90
|
+
return false;
|
|
91
|
+
const proto = Object.getPrototypeOf(v);
|
|
92
|
+
return proto === Object.prototype || proto === null;
|
|
93
|
+
};
|
|
94
|
+
const isMarker = (v) => {
|
|
95
|
+
if (!v || typeof v !== 'object' || Array.isArray(v))
|
|
96
|
+
return false;
|
|
97
|
+
const keys = Object.keys(v);
|
|
98
|
+
return keys.length === 1 && keys[0].startsWith('${') && keys[0].endsWith('}');
|
|
99
|
+
};
|
|
100
|
+
exports.isMarker = isMarker;
|
|
101
|
+
const constructorName = (v) => {
|
|
102
|
+
const proto = Object.getPrototypeOf(v);
|
|
103
|
+
if (!proto || proto === Object.prototype)
|
|
104
|
+
return null;
|
|
105
|
+
const ctor = proto.constructor;
|
|
106
|
+
return ctor?.name ?? null;
|
|
107
|
+
};
|
|
108
|
+
const projectString = (s, previewCap) => {
|
|
109
|
+
if (s.length <= previewCap)
|
|
110
|
+
return s;
|
|
111
|
+
return { ['${str}']: { len: s.length, preview: s.slice(0, previewCap) } };
|
|
112
|
+
};
|
|
113
|
+
const projectSpecial = (v, collapse) => {
|
|
114
|
+
// built-ins first
|
|
115
|
+
if (v instanceof Date)
|
|
116
|
+
return { ['${Date}']: v.toISOString() };
|
|
117
|
+
if (v instanceof RegExp)
|
|
118
|
+
return { ['${RegExp}']: v.toString() };
|
|
119
|
+
if (v instanceof Error) {
|
|
120
|
+
return { ['${Err}']: { msg: v.message, name: v.name } };
|
|
121
|
+
}
|
|
122
|
+
if (v instanceof Map)
|
|
123
|
+
return { ['${map}']: v.size };
|
|
124
|
+
if (v instanceof Set)
|
|
125
|
+
return { ['${set}']: v.size };
|
|
126
|
+
if (typeof v === 'function') {
|
|
127
|
+
const name = v.name;
|
|
128
|
+
return { ['${fun}']: name && name.length > 0 ? name : '<anon>' };
|
|
129
|
+
}
|
|
130
|
+
if (typeof v === 'symbol') {
|
|
131
|
+
return { ['${sym}']: v.toString() };
|
|
132
|
+
}
|
|
133
|
+
// pluggable collapse rules (fiberTree component refs etc.)
|
|
134
|
+
for (const rule of collapse) {
|
|
135
|
+
const out = rule(v);
|
|
136
|
+
if (out !== undefined)
|
|
137
|
+
return out;
|
|
138
|
+
}
|
|
139
|
+
return undefined;
|
|
140
|
+
};
|
|
141
|
+
const collapsedContainer = (v) => {
|
|
142
|
+
if (Array.isArray(v))
|
|
143
|
+
return { ['${arr}']: v.length };
|
|
144
|
+
if (isPlainObject(v))
|
|
145
|
+
return { ['${obj}']: Object.keys(v).length };
|
|
146
|
+
if (v && typeof v === 'object') {
|
|
147
|
+
const cls = constructorName(v);
|
|
148
|
+
if (cls)
|
|
149
|
+
return { ['${cls}']: { len: Object.keys(v).length, name: cls } };
|
|
150
|
+
return { ['${obj}']: Object.keys(v).length };
|
|
151
|
+
}
|
|
152
|
+
return undefined;
|
|
153
|
+
};
|
|
154
|
+
const walkContainer = (v, depth, ctx, seen) => {
|
|
155
|
+
// strings, primitives — handled before this fn is called
|
|
156
|
+
// specials (Date, Error, ...) — handled before via projectSpecial
|
|
157
|
+
if (Array.isArray(v)) {
|
|
158
|
+
return walkArray(v, depth, ctx, seen);
|
|
159
|
+
}
|
|
160
|
+
return walkObject(v, depth, ctx, seen);
|
|
161
|
+
};
|
|
162
|
+
const walkArray = (arr, depth, ctx, seen) => {
|
|
163
|
+
const total = arr.length;
|
|
164
|
+
const cap = ctx.arrayCap;
|
|
165
|
+
const sliced = arr.slice(0, cap);
|
|
166
|
+
const out = [];
|
|
167
|
+
if (total > cap) {
|
|
168
|
+
out.push({ ['${truncated}']: { slice: [0, cap], total } });
|
|
169
|
+
}
|
|
170
|
+
for (const item of sliced) {
|
|
171
|
+
out.push(walk(item, depth - 1, ctx, seen));
|
|
172
|
+
}
|
|
173
|
+
return out;
|
|
174
|
+
};
|
|
175
|
+
const walkObject = (obj, depth, ctx, seen) => {
|
|
176
|
+
const allKeys = Object.keys(obj).filter((k) => {
|
|
177
|
+
return !matchesSkip(k, ctx);
|
|
178
|
+
});
|
|
179
|
+
const total = allKeys.length;
|
|
180
|
+
const cap = ctx.objectCap;
|
|
181
|
+
const keys = allKeys.slice(0, cap);
|
|
182
|
+
const out = {};
|
|
183
|
+
if (total > cap) {
|
|
184
|
+
out['${truncated}'] = { slice: [0, cap], total };
|
|
185
|
+
}
|
|
186
|
+
for (const k of keys) {
|
|
187
|
+
if ((0, redact_1.matchesRedact)(k, ctx.compiledRedact)) {
|
|
188
|
+
out[k] = '[redacted]';
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
out[k] = walk(obj[k], depth - 1, ctx, seen);
|
|
192
|
+
}
|
|
193
|
+
return out;
|
|
194
|
+
};
|
|
195
|
+
const matchesSkip = (key, ctx) => {
|
|
196
|
+
if (ctx.skipExact.has(key))
|
|
197
|
+
return true;
|
|
198
|
+
for (const rx of ctx.skipRegex)
|
|
199
|
+
if (rx.test(key))
|
|
200
|
+
return true;
|
|
201
|
+
return false;
|
|
202
|
+
};
|
|
203
|
+
const walk = (v, remainingDepth, ctx, seen) => {
|
|
204
|
+
// primitives
|
|
205
|
+
if (v === null || v === undefined)
|
|
206
|
+
return v;
|
|
207
|
+
const t = typeof v;
|
|
208
|
+
if (t === 'number' || t === 'boolean')
|
|
209
|
+
return v;
|
|
210
|
+
if (t === 'bigint')
|
|
211
|
+
return { ['${bigint}']: v.toString() };
|
|
212
|
+
if (t === 'string')
|
|
213
|
+
return projectString(v, ctx.previewCap);
|
|
214
|
+
// specials before container check (Map/Set/Date/etc. typeof === 'object')
|
|
215
|
+
const special = projectSpecial(v, ctx.collapse);
|
|
216
|
+
if (special !== undefined)
|
|
217
|
+
return special;
|
|
218
|
+
// cycle
|
|
219
|
+
if (typeof v === 'object' && v !== null) {
|
|
220
|
+
if (seen.has(v))
|
|
221
|
+
return { ['${cyc}']: true };
|
|
222
|
+
seen.add(v);
|
|
223
|
+
}
|
|
224
|
+
// depth exhausted — collapse to marker
|
|
225
|
+
if (remainingDepth <= 0) {
|
|
226
|
+
const collapsed = collapsedContainer(v);
|
|
227
|
+
return collapsed ?? v;
|
|
228
|
+
}
|
|
229
|
+
// expand container
|
|
230
|
+
return walkContainer(v, remainingDepth, ctx, seen);
|
|
231
|
+
};
|
|
232
|
+
const projectValue = (input, options) => {
|
|
233
|
+
const opts = options ?? {};
|
|
234
|
+
const depth = clampDepth(opts.depth ?? exports.DEFAULT_DEPTH);
|
|
235
|
+
const objectCap = exports.DEFAULT_OBJECT_CAP;
|
|
236
|
+
const arrayCap = exports.DEFAULT_ARRAY_CAP;
|
|
237
|
+
const previewCap = opts.previewCap ?? exports.DEFAULT_PREVIEW_CAP;
|
|
238
|
+
const maxBytes = opts.maxBytes ?? exports.DEFAULT_MAX_BYTES;
|
|
239
|
+
const collapse = opts.collapse ?? [];
|
|
240
|
+
const skipExact = new Set();
|
|
241
|
+
const skipRegex = [];
|
|
242
|
+
for (const k of opts.skipKeys ?? []) {
|
|
243
|
+
if (typeof k === 'string')
|
|
244
|
+
skipExact.add(k);
|
|
245
|
+
else
|
|
246
|
+
skipRegex.push(k);
|
|
247
|
+
}
|
|
248
|
+
const compiledRedact = (0, redact_1.compileRedact)(opts.redact);
|
|
249
|
+
// resolve path first (if any) — applies to the input tree, not the projection
|
|
250
|
+
let target = input;
|
|
251
|
+
let pathResolved = false;
|
|
252
|
+
if (opts.path) {
|
|
253
|
+
const res = (0, resolvePath_1.resolvePath)(input, opts.path);
|
|
254
|
+
if (!res.ok) {
|
|
255
|
+
return {
|
|
256
|
+
bytes: 0,
|
|
257
|
+
truncated: false,
|
|
258
|
+
value: { error: res.error, validUpTo: res.validUpTo },
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
target = res.value;
|
|
262
|
+
pathResolved = true;
|
|
263
|
+
}
|
|
264
|
+
// When path explicitly resolves to a string scalar, return the raw string
|
|
265
|
+
// (truncated only if it would blow the maxBytes cap). The user navigated
|
|
266
|
+
// to a leaf — they asked for the content, not a preview marker.
|
|
267
|
+
if (pathResolved && typeof target === 'string') {
|
|
268
|
+
if (target.length > maxBytes) {
|
|
269
|
+
return {
|
|
270
|
+
bytes: target.length,
|
|
271
|
+
truncated: true,
|
|
272
|
+
value: { ['${str}']: { len: target.length, preview: target.slice(0, 200) } },
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
return { bytes: target.length, truncated: false, value: target };
|
|
276
|
+
}
|
|
277
|
+
const ctx = {
|
|
278
|
+
arrayCap,
|
|
279
|
+
collapse,
|
|
280
|
+
compiledRedact,
|
|
281
|
+
objectCap,
|
|
282
|
+
previewCap,
|
|
283
|
+
skipExact,
|
|
284
|
+
skipRegex,
|
|
285
|
+
};
|
|
286
|
+
const seen = new WeakSet();
|
|
287
|
+
// walk with depth + 1 because the caller's "depth: N" means N levels of
|
|
288
|
+
// container expansion; our walk decrements before recursing into children.
|
|
289
|
+
const projected = walk(target, depth, ctx, seen);
|
|
290
|
+
// soft byte cap — if exceeded, replace with a string-marker that carries
|
|
291
|
+
// the original size + a short preview
|
|
292
|
+
const serialized = safeStringify(projected);
|
|
293
|
+
if (serialized.length > maxBytes) {
|
|
294
|
+
const preview = serialized.slice(0, Math.min(maxBytes, 200));
|
|
295
|
+
return {
|
|
296
|
+
bytes: serialized.length,
|
|
297
|
+
truncated: true,
|
|
298
|
+
value: {
|
|
299
|
+
['${str}']: {
|
|
300
|
+
len: serialized.length,
|
|
301
|
+
preview,
|
|
302
|
+
},
|
|
303
|
+
},
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
return { bytes: serialized.length, truncated: false, value: projected };
|
|
307
|
+
};
|
|
308
|
+
exports.projectValue = projectValue;
|
|
309
|
+
const clampDepth = (d) => {
|
|
310
|
+
if (!Number.isFinite(d) || d < 0)
|
|
311
|
+
return exports.DEFAULT_DEPTH;
|
|
312
|
+
return Math.min(Math.floor(d), exports.MAX_DEPTH);
|
|
313
|
+
};
|
|
314
|
+
const safeStringify = (v) => {
|
|
315
|
+
try {
|
|
316
|
+
return JSON.stringify(v) ?? '';
|
|
317
|
+
}
|
|
318
|
+
catch {
|
|
319
|
+
return '';
|
|
320
|
+
}
|
|
321
|
+
};
|
|
322
|
+
//# sourceMappingURL=projectValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectValue.js","sourceRoot":"","sources":["../../../src/shared/projection/projectValue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared redact utility used by `projectValue` and modules that have their
|
|
3
|
+
* own redact lists (network headers/body keys). Extracted from `network.ts`
|
|
4
|
+
* verbatim so behaviour stays identical for existing callers.
|
|
5
|
+
*
|
|
6
|
+
* - Pattern list is `Array<string | RegExp>`. Strings are lowercased and
|
|
7
|
+
* matched as substring on lowercased keys; regexes are matched verbatim.
|
|
8
|
+
* - `false` (instead of array) — disables redaction.
|
|
9
|
+
* - `undefined` — uses provided defaults.
|
|
10
|
+
*/
|
|
11
|
+
export type RedactPatterns = ReadonlyArray<string | RegExp> | false;
|
|
12
|
+
interface CompiledRedact {
|
|
13
|
+
empty: boolean;
|
|
14
|
+
exact: Set<string>;
|
|
15
|
+
regexes: RegExp[];
|
|
16
|
+
}
|
|
17
|
+
export declare const compileRedact: (list: RedactPatterns | undefined, defaults?: ReadonlyArray<string | RegExp>) => CompiledRedact | null;
|
|
18
|
+
export declare const matchesRedact: (key: string, compiled: CompiledRedact | null) => boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Walk an object/array graph; replace value of any key matching a redact
|
|
21
|
+
* pattern with `[redacted]`. Preserves shape so caller still sees the field
|
|
22
|
+
* exists. Used by network for request/response bodies; also re-exported for
|
|
23
|
+
* `projectValue` which inlines the same matcher in its walk.
|
|
24
|
+
*/
|
|
25
|
+
export declare const redactValue: (value: unknown, compiled: CompiledRedact | null) => unknown;
|
|
26
|
+
/**
|
|
27
|
+
* Redact a flat headers map (case-insensitive on key names).
|
|
28
|
+
*/
|
|
29
|
+
export declare const redactHeaders: (headers: Record<string, string>, compiled: CompiledRedact | null) => Record<string, string>;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=redact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../../src/shared/projection/redact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC;AAEpE,UAAU,cAAc;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,eAAO,MAAM,aAAa,SAClB,cAAc,GAAG,SAAS,aACtB,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,KACvC,cAAc,GAAG,IAUnB,CAAC;AAEF,eAAO,MAAM,aAAa,QAAS,MAAM,YAAY,cAAc,GAAG,IAAI,KAAG,OAQ5E,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,UAAW,OAAO,YAAY,cAAc,GAAG,IAAI,KAAG,OAa7E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,YACf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,YACrB,cAAc,GAAG,IAAI,KAC9B,MAAM,CAAC,MAAM,EAAE,MAAM,CAOvB,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared redact utility used by `projectValue` and modules that have their
|
|
4
|
+
* own redact lists (network headers/body keys). Extracted from `network.ts`
|
|
5
|
+
* verbatim so behaviour stays identical for existing callers.
|
|
6
|
+
*
|
|
7
|
+
* - Pattern list is `Array<string | RegExp>`. Strings are lowercased and
|
|
8
|
+
* matched as substring on lowercased keys; regexes are matched verbatim.
|
|
9
|
+
* - `false` (instead of array) — disables redaction.
|
|
10
|
+
* - `undefined` — uses provided defaults.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.redactHeaders = exports.redactValue = exports.matchesRedact = exports.compileRedact = void 0;
|
|
14
|
+
const compileRedact = (list, defaults = []) => {
|
|
15
|
+
if (list === false)
|
|
16
|
+
return null;
|
|
17
|
+
const src = list === undefined ? defaults : list;
|
|
18
|
+
const exact = new Set();
|
|
19
|
+
const regexes = [];
|
|
20
|
+
for (const item of src) {
|
|
21
|
+
if (typeof item === 'string')
|
|
22
|
+
exact.add(item.toLowerCase());
|
|
23
|
+
else
|
|
24
|
+
regexes.push(item);
|
|
25
|
+
}
|
|
26
|
+
return { empty: exact.size === 0 && regexes.length === 0, exact, regexes };
|
|
27
|
+
};
|
|
28
|
+
exports.compileRedact = compileRedact;
|
|
29
|
+
const matchesRedact = (key, compiled) => {
|
|
30
|
+
if (!compiled || compiled.empty)
|
|
31
|
+
return false;
|
|
32
|
+
const lower = key.toLowerCase();
|
|
33
|
+
if (compiled.exact.has(lower))
|
|
34
|
+
return true;
|
|
35
|
+
for (const rx of compiled.regexes) {
|
|
36
|
+
if (rx.test(key))
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
return false;
|
|
40
|
+
};
|
|
41
|
+
exports.matchesRedact = matchesRedact;
|
|
42
|
+
/**
|
|
43
|
+
* Walk an object/array graph; replace value of any key matching a redact
|
|
44
|
+
* pattern with `[redacted]`. Preserves shape so caller still sees the field
|
|
45
|
+
* exists. Used by network for request/response bodies; also re-exported for
|
|
46
|
+
* `projectValue` which inlines the same matcher in its walk.
|
|
47
|
+
*/
|
|
48
|
+
const redactValue = (value, compiled) => {
|
|
49
|
+
if (!compiled || compiled.empty)
|
|
50
|
+
return value;
|
|
51
|
+
if (value === null || typeof value !== 'object')
|
|
52
|
+
return value;
|
|
53
|
+
if (Array.isArray(value)) {
|
|
54
|
+
return value.map((item) => {
|
|
55
|
+
return (0, exports.redactValue)(item, compiled);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
const out = {};
|
|
59
|
+
for (const [key, v] of Object.entries(value)) {
|
|
60
|
+
out[key] = (0, exports.matchesRedact)(key, compiled) ? '[redacted]' : (0, exports.redactValue)(v, compiled);
|
|
61
|
+
}
|
|
62
|
+
return out;
|
|
63
|
+
};
|
|
64
|
+
exports.redactValue = redactValue;
|
|
65
|
+
/**
|
|
66
|
+
* Redact a flat headers map (case-insensitive on key names).
|
|
67
|
+
*/
|
|
68
|
+
const redactHeaders = (headers, compiled) => {
|
|
69
|
+
if (!compiled || compiled.empty)
|
|
70
|
+
return headers;
|
|
71
|
+
const out = {};
|
|
72
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
73
|
+
out[key] = (0, exports.matchesRedact)(key, compiled) ? '[redacted]' : value;
|
|
74
|
+
}
|
|
75
|
+
return out;
|
|
76
|
+
};
|
|
77
|
+
exports.redactHeaders = redactHeaders;
|
|
78
|
+
//# sourceMappingURL=redact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../../src/shared/projection/redact.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAUI,MAAM,aAAa,GAAG,CAC3B,IAAgC,EAChC,WAA2C,EAAE,EACtB,EAAE;IACzB,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IACjD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;;YACvD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC7E,CAAC,CAAC;AAbW,QAAA,aAAa,iBAaxB;AAEK,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,QAA+B,EAAW,EAAE;IACrF,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAChC,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QAClC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AARW,QAAA,aAAa,iBAQxB;AAEF;;;;;GAKG;AACI,MAAM,WAAW,GAAG,CAAC,KAAc,EAAE,QAA+B,EAAW,EAAE;IACtF,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAC9C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACxB,OAAO,IAAA,mBAAW,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAA,qBAAa,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAA,mBAAW,EAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAbW,QAAA,WAAW,eAatB;AAEF;;GAEG;AACI,MAAM,aAAa,GAAG,CAC3B,OAA+B,EAC/B,QAA+B,EACP,EAAE;IAC1B,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC;IAChD,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,GAAG,CAAC,GAAG,IAAA,qBAAa,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;IACjE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAVW,QAAA,aAAa,iBAUxB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JS-style path parser/resolver. Path examples:
|
|
3
|
+
* foo.bar — object key access
|
|
4
|
+
* foo[3] — array index
|
|
5
|
+
* foo[1:5] — array/object slice (Python-style)
|
|
6
|
+
* foo[3:] — slice from 3 to end
|
|
7
|
+
* foo[:5] — slice from start to 5
|
|
8
|
+
* foo["key.with.dots"] — bracket-quoted object key
|
|
9
|
+
* foo['k'] — single-quoted also accepted
|
|
10
|
+
*
|
|
11
|
+
* Used by `projectValue` to navigate inside a response before applying
|
|
12
|
+
* shape rendering. After a slice, chained access has special semantics:
|
|
13
|
+
* - array slice + `.key` → map (apply to every element)
|
|
14
|
+
* - array slice + `[N]` → pick Nth element of the window
|
|
15
|
+
* - object slice + `.key` → take key from sub-object (no map)
|
|
16
|
+
* - object slice + `[N]` → Nth key in window (insertion order)
|
|
17
|
+
*/
|
|
18
|
+
export type PathSegment = {
|
|
19
|
+
kind: 'key';
|
|
20
|
+
name: string;
|
|
21
|
+
} | {
|
|
22
|
+
index: number;
|
|
23
|
+
kind: 'index';
|
|
24
|
+
} | {
|
|
25
|
+
kind: 'slice';
|
|
26
|
+
end?: number;
|
|
27
|
+
start?: number;
|
|
28
|
+
};
|
|
29
|
+
export type PathResult = {
|
|
30
|
+
ok: true;
|
|
31
|
+
value: unknown;
|
|
32
|
+
} | {
|
|
33
|
+
actual: unknown;
|
|
34
|
+
error: string;
|
|
35
|
+
ok: false;
|
|
36
|
+
validUpTo: string;
|
|
37
|
+
};
|
|
38
|
+
export declare const parsePath: (path: string) => PathSegment[];
|
|
39
|
+
/**
|
|
40
|
+
* Walk a path through a value tree. Slice + chained access has the semantics
|
|
41
|
+
* documented in this file's header. Returns either the resolved value or a
|
|
42
|
+
* detailed failure pointing at where the path broke.
|
|
43
|
+
*/
|
|
44
|
+
export declare const resolvePath: (root: unknown, path: string) => PathResult;
|
|
45
|
+
//# sourceMappingURL=resolvePath.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolvePath.d.ts","sourceRoot":"","sources":["../../../src/shared/projection/resolvePath.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpD,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC5B;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,KAAK,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAErE,eAAO,MAAM,SAAS,SAAU,MAAM,KAAG,WAAW,EA4BnD,CAAC;AAqDF;;;;GAIG;AACH,eAAO,MAAM,WAAW,SAAU,OAAO,QAAQ,MAAM,KAAG,UAgCzD,CAAC"}
|