metro-mcp 0.1.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/LICENSE +21 -0
- package/README.md +143 -0
- package/dist/bin/metro-mcp.js +3726 -0
- package/dist/client/client-buffer.d.ts +14 -0
- package/dist/client/client-buffer.d.ts.map +1 -0
- package/dist/client/index.cjs +346 -0
- package/dist/client/index.d.ts +80 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +307 -0
- package/dist/client/lifecycle.d.ts +17 -0
- package/dist/client/lifecycle.d.ts.map +1 -0
- package/dist/client/logger.d.ts +17 -0
- package/dist/client/logger.d.ts.map +1 -0
- package/dist/client/middleware/navigation.d.ts +22 -0
- package/dist/client/middleware/navigation.d.ts.map +1 -0
- package/dist/client/middleware/redux.d.ts +22 -0
- package/dist/client/middleware/redux.d.ts.map +1 -0
- package/dist/client/performance.d.ts +18 -0
- package/dist/client/performance.d.ts.map +1 -0
- package/dist/client/state.d.ts +13 -0
- package/dist/client/state.d.ts.map +1 -0
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3746 -0
- package/dist/metro/connection.d.ts +66 -0
- package/dist/metro/connection.d.ts.map +1 -0
- package/dist/metro/discovery.d.ts +19 -0
- package/dist/metro/discovery.d.ts.map +1 -0
- package/dist/metro/types.d.ts +49 -0
- package/dist/metro/types.d.ts.map +1 -0
- package/dist/plugin.cjs +51 -0
- package/dist/plugin.d.ts +97 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +14 -0
- package/dist/plugins/accessibility.d.ts +2 -0
- package/dist/plugins/accessibility.d.ts.map +1 -0
- package/dist/plugins/appium.d.ts +2 -0
- package/dist/plugins/appium.d.ts.map +1 -0
- package/dist/plugins/bundle.d.ts +2 -0
- package/dist/plugins/bundle.d.ts.map +1 -0
- package/dist/plugins/commands.d.ts +2 -0
- package/dist/plugins/commands.d.ts.map +1 -0
- package/dist/plugins/components.d.ts +2 -0
- package/dist/plugins/components.d.ts.map +1 -0
- package/dist/plugins/console.d.ts +2 -0
- package/dist/plugins/console.d.ts.map +1 -0
- package/dist/plugins/deeplink.d.ts +2 -0
- package/dist/plugins/deeplink.d.ts.map +1 -0
- package/dist/plugins/device.d.ts +2 -0
- package/dist/plugins/device.d.ts.map +1 -0
- package/dist/plugins/errors.d.ts +2 -0
- package/dist/plugins/errors.d.ts.map +1 -0
- package/dist/plugins/evaluate.d.ts +2 -0
- package/dist/plugins/evaluate.d.ts.map +1 -0
- package/dist/plugins/maestro.d.ts +2 -0
- package/dist/plugins/maestro.d.ts.map +1 -0
- package/dist/plugins/navigation.d.ts +2 -0
- package/dist/plugins/navigation.d.ts.map +1 -0
- package/dist/plugins/network.d.ts +2 -0
- package/dist/plugins/network.d.ts.map +1 -0
- package/dist/plugins/prompts.d.ts +2 -0
- package/dist/plugins/prompts.d.ts.map +1 -0
- package/dist/plugins/redux.d.ts +2 -0
- package/dist/plugins/redux.d.ts.map +1 -0
- package/dist/plugins/simulator.d.ts +2 -0
- package/dist/plugins/simulator.d.ts.map +1 -0
- package/dist/plugins/source.d.ts +2 -0
- package/dist/plugins/source.d.ts.map +1 -0
- package/dist/plugins/storage.d.ts +2 -0
- package/dist/plugins/storage.d.ts.map +1 -0
- package/dist/plugins/ui-interact.d.ts +2 -0
- package/dist/plugins/ui-interact.d.ts.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/utils/buffer.d.ts +19 -0
- package/dist/utils/buffer.d.ts.map +1 -0
- package/dist/utils/cdp.d.ts +6 -0
- package/dist/utils/cdp.d.ts.map +1 -0
- package/dist/utils/fiber.d.ts +33 -0
- package/dist/utils/fiber.d.ts.map +1 -0
- package/dist/utils/format.d.ts +34 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +3 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple circular buffer for client-side use.
|
|
3
|
+
* Shared across all client SDK modules.
|
|
4
|
+
*/
|
|
5
|
+
export declare class ClientBuffer<T> {
|
|
6
|
+
private maxSize;
|
|
7
|
+
private items;
|
|
8
|
+
constructor(maxSize: number);
|
|
9
|
+
push(item: T): void;
|
|
10
|
+
getAll(): T[];
|
|
11
|
+
clear(): void;
|
|
12
|
+
get size(): number;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=client-buffer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-buffer.d.ts","sourceRoot":"","sources":["../../src/client/client-buffer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,YAAY,CAAC,CAAC;IAEb,OAAO,CAAC,OAAO;IAD3B,OAAO,CAAC,KAAK,CAAW;gBACJ,OAAO,EAAE,MAAM;IAEnC,IAAI,CAAC,IAAI,EAAE,CAAC;IAKZ,MAAM,IAAI,CAAC,EAAE;IACb,KAAK;IACL,IAAI,IAAI,WAAgC;CACzC"}
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
function __accessProp(key) {
|
|
6
|
+
return this[key];
|
|
7
|
+
}
|
|
8
|
+
var __toCommonJS = (from) => {
|
|
9
|
+
var entry = (__moduleCache ??= new WeakMap).get(from), desc;
|
|
10
|
+
if (entry)
|
|
11
|
+
return entry;
|
|
12
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (var key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(entry, key))
|
|
16
|
+
__defProp(entry, key, {
|
|
17
|
+
get: __accessProp.bind(from, key),
|
|
18
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
__moduleCache.set(from, entry);
|
|
22
|
+
return entry;
|
|
23
|
+
};
|
|
24
|
+
var __moduleCache;
|
|
25
|
+
var __returnValue = (v) => v;
|
|
26
|
+
function __exportSetter(name, newValue) {
|
|
27
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
28
|
+
}
|
|
29
|
+
var __export = (target, all) => {
|
|
30
|
+
for (var name in all)
|
|
31
|
+
__defProp(target, name, {
|
|
32
|
+
get: all[name],
|
|
33
|
+
enumerable: true,
|
|
34
|
+
configurable: true,
|
|
35
|
+
set: __exportSetter.bind(all, name)
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// src/client/index.ts
|
|
40
|
+
var exports_client = {};
|
|
41
|
+
__export(exports_client, {
|
|
42
|
+
registerCommand: () => registerCommand,
|
|
43
|
+
createReduxMiddleware: () => createReduxMiddleware,
|
|
44
|
+
createNavigationTracking: () => createNavigationTracking,
|
|
45
|
+
StructuredLogger: () => StructuredLogger,
|
|
46
|
+
StateSubscriptionManager: () => StateSubscriptionManager,
|
|
47
|
+
PerformanceTracker: () => PerformanceTracker,
|
|
48
|
+
MetroMCPClient: () => MetroMCPClient,
|
|
49
|
+
LifecycleTracker: () => LifecycleTracker
|
|
50
|
+
});
|
|
51
|
+
module.exports = __toCommonJS(exports_client);
|
|
52
|
+
|
|
53
|
+
// src/client/client-buffer.ts
|
|
54
|
+
class ClientBuffer {
|
|
55
|
+
maxSize;
|
|
56
|
+
items = [];
|
|
57
|
+
constructor(maxSize) {
|
|
58
|
+
this.maxSize = maxSize;
|
|
59
|
+
}
|
|
60
|
+
push(item) {
|
|
61
|
+
this.items.push(item);
|
|
62
|
+
if (this.items.length > this.maxSize)
|
|
63
|
+
this.items.shift();
|
|
64
|
+
}
|
|
65
|
+
getAll() {
|
|
66
|
+
return [...this.items];
|
|
67
|
+
}
|
|
68
|
+
clear() {
|
|
69
|
+
this.items = [];
|
|
70
|
+
}
|
|
71
|
+
get size() {
|
|
72
|
+
return this.items.length;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// src/client/middleware/redux.ts
|
|
77
|
+
function createReduxMiddleware() {
|
|
78
|
+
const actions = new ClientBuffer(200);
|
|
79
|
+
const middleware = (store) => (next) => (action) => {
|
|
80
|
+
const start = Date.now();
|
|
81
|
+
const actionObj = action;
|
|
82
|
+
const entry = {
|
|
83
|
+
type: actionObj?.type || "UNKNOWN",
|
|
84
|
+
timestamp: start,
|
|
85
|
+
payload: actionObj?.payload
|
|
86
|
+
};
|
|
87
|
+
const result = next(action);
|
|
88
|
+
entry.duration = Date.now() - start;
|
|
89
|
+
actions.push(entry);
|
|
90
|
+
return result;
|
|
91
|
+
};
|
|
92
|
+
return { middleware, actions };
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// src/client/middleware/navigation.ts
|
|
96
|
+
function createNavigationTracking(navigationRef) {
|
|
97
|
+
const events = new ClientBuffer(100);
|
|
98
|
+
function getState() {
|
|
99
|
+
try {
|
|
100
|
+
return navigationRef.current?.getRootState?.() || null;
|
|
101
|
+
} catch {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const addListener = navigationRef.addListener || navigationRef.current?.addListener;
|
|
106
|
+
if (addListener) {
|
|
107
|
+
try {
|
|
108
|
+
addListener("state", (e) => {
|
|
109
|
+
const state = getState();
|
|
110
|
+
if (state?.routes) {
|
|
111
|
+
const routes = state.routes;
|
|
112
|
+
const index = state.index ?? routes.length - 1;
|
|
113
|
+
const currentRoute = routes[index];
|
|
114
|
+
events.push({
|
|
115
|
+
timestamp: Date.now(),
|
|
116
|
+
type: "state_change",
|
|
117
|
+
routeName: currentRoute?.name,
|
|
118
|
+
params: currentRoute?.params
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
} catch {}
|
|
123
|
+
}
|
|
124
|
+
return { events, getState };
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// src/client/performance.ts
|
|
128
|
+
class PerformanceTracker {
|
|
129
|
+
marks = new Map;
|
|
130
|
+
measures = [];
|
|
131
|
+
mark(name) {
|
|
132
|
+
this.marks.set(name, Date.now());
|
|
133
|
+
}
|
|
134
|
+
measure(name, startMark, endMark) {
|
|
135
|
+
const start = this.marks.get(startMark);
|
|
136
|
+
const end = this.marks.get(endMark);
|
|
137
|
+
if (start === undefined || end === undefined)
|
|
138
|
+
return null;
|
|
139
|
+
const duration = end - start;
|
|
140
|
+
this.measures.push({ name, startMark, endMark, duration });
|
|
141
|
+
if (this.measures.length > 100) {
|
|
142
|
+
this.measures = this.measures.slice(-100);
|
|
143
|
+
}
|
|
144
|
+
return duration;
|
|
145
|
+
}
|
|
146
|
+
getMeasures() {
|
|
147
|
+
return [...this.measures];
|
|
148
|
+
}
|
|
149
|
+
clear() {
|
|
150
|
+
this.marks.clear();
|
|
151
|
+
this.measures = [];
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// src/client/logger.ts
|
|
156
|
+
class StructuredLogger {
|
|
157
|
+
channels = new Map;
|
|
158
|
+
log(channel, data) {
|
|
159
|
+
if (!this.channels.has(channel)) {
|
|
160
|
+
this.channels.set(channel, new ClientBuffer(200));
|
|
161
|
+
}
|
|
162
|
+
this.channels.get(channel).push({
|
|
163
|
+
timestamp: Date.now(),
|
|
164
|
+
channel,
|
|
165
|
+
data
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
getChannel(channel) {
|
|
169
|
+
return this.channels.get(channel)?.getAll() || [];
|
|
170
|
+
}
|
|
171
|
+
getAllChannels() {
|
|
172
|
+
return Array.from(this.channels.keys());
|
|
173
|
+
}
|
|
174
|
+
clear(channel) {
|
|
175
|
+
if (channel) {
|
|
176
|
+
this.channels.get(channel)?.clear();
|
|
177
|
+
} else {
|
|
178
|
+
this.channels.clear();
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// src/client/state.ts
|
|
184
|
+
class StateSubscriptionManager {
|
|
185
|
+
subscriptions = new Map;
|
|
186
|
+
subscribe(name, getter) {
|
|
187
|
+
this.subscriptions.set(name, getter);
|
|
188
|
+
}
|
|
189
|
+
unsubscribe(name) {
|
|
190
|
+
this.subscriptions.delete(name);
|
|
191
|
+
}
|
|
192
|
+
getState(name) {
|
|
193
|
+
const getter = this.subscriptions.get(name);
|
|
194
|
+
if (!getter)
|
|
195
|
+
return;
|
|
196
|
+
try {
|
|
197
|
+
return getter();
|
|
198
|
+
} catch {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
getAllStates() {
|
|
203
|
+
const result = {};
|
|
204
|
+
for (const [name, getter] of this.subscriptions) {
|
|
205
|
+
try {
|
|
206
|
+
result[name] = getter();
|
|
207
|
+
} catch {
|
|
208
|
+
result[name] = "[error]";
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return result;
|
|
212
|
+
}
|
|
213
|
+
listSubscriptions() {
|
|
214
|
+
return Array.from(this.subscriptions.keys());
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// src/client/lifecycle.ts
|
|
219
|
+
class LifecycleTracker {
|
|
220
|
+
events = new ClientBuffer(100);
|
|
221
|
+
started = false;
|
|
222
|
+
start() {
|
|
223
|
+
if (this.started)
|
|
224
|
+
return;
|
|
225
|
+
this.started = true;
|
|
226
|
+
try {
|
|
227
|
+
const { AppState, Linking } = (()=>{throw new Error("Cannot require module "+"react-native");})();
|
|
228
|
+
if (AppState) {
|
|
229
|
+
AppState.addEventListener("change", (nextState) => {
|
|
230
|
+
this.events.push({
|
|
231
|
+
timestamp: Date.now(),
|
|
232
|
+
type: nextState === "active" ? "foreground" : "background"
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
if (Linking) {
|
|
237
|
+
Linking.addEventListener("url", (event) => {
|
|
238
|
+
this.events.push({
|
|
239
|
+
timestamp: Date.now(),
|
|
240
|
+
type: "deep_link",
|
|
241
|
+
data: { url: event.url }
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
Linking.getInitialURL().then((url) => {
|
|
245
|
+
if (url) {
|
|
246
|
+
this.events.push({
|
|
247
|
+
timestamp: Date.now(),
|
|
248
|
+
type: "deep_link",
|
|
249
|
+
data: { url, initial: true }
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
} catch {}
|
|
255
|
+
this.events.push({
|
|
256
|
+
timestamp: Date.now(),
|
|
257
|
+
type: "foreground",
|
|
258
|
+
data: { initial: true }
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
trackCustomEvent(type, data) {
|
|
262
|
+
this.events.push({
|
|
263
|
+
timestamp: Date.now(),
|
|
264
|
+
type: "custom",
|
|
265
|
+
data: { customType: type, ...data || {} }
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// src/client/index.ts
|
|
271
|
+
class MetroMCPClient {
|
|
272
|
+
mcpGlobal;
|
|
273
|
+
performance;
|
|
274
|
+
logger;
|
|
275
|
+
stateManager;
|
|
276
|
+
lifecycleTracker;
|
|
277
|
+
constructor() {
|
|
278
|
+
this.mcpGlobal = {
|
|
279
|
+
commands: {}
|
|
280
|
+
};
|
|
281
|
+
this.performance = new PerformanceTracker;
|
|
282
|
+
this.logger = new StructuredLogger;
|
|
283
|
+
this.stateManager = new StateSubscriptionManager;
|
|
284
|
+
this.lifecycleTracker = new LifecycleTracker;
|
|
285
|
+
global.__METRO_MCP__ = this.mcpGlobal;
|
|
286
|
+
}
|
|
287
|
+
registerCommand(name, handler) {
|
|
288
|
+
this.mcpGlobal.commands[name] = handler;
|
|
289
|
+
}
|
|
290
|
+
useReduxMiddleware(store) {
|
|
291
|
+
const { middleware, actions } = createReduxMiddleware();
|
|
292
|
+
this.mcpGlobal.redux = {
|
|
293
|
+
actions,
|
|
294
|
+
getState: () => store.getState(),
|
|
295
|
+
dispatch: (action) => store.dispatch(action)
|
|
296
|
+
};
|
|
297
|
+
store.__metroMcpMiddleware = middleware;
|
|
298
|
+
}
|
|
299
|
+
getReduxMiddleware() {
|
|
300
|
+
if (!this.mcpGlobal.redux) {
|
|
301
|
+
throw new Error("Call useReduxMiddleware(store) first");
|
|
302
|
+
}
|
|
303
|
+
return this.mcpGlobal.redux.actions;
|
|
304
|
+
}
|
|
305
|
+
useNavigationTracking(navigationRef) {
|
|
306
|
+
const { events, getState } = createNavigationTracking(navigationRef);
|
|
307
|
+
this.mcpGlobal.navigation = { events, getState };
|
|
308
|
+
}
|
|
309
|
+
mark(name) {
|
|
310
|
+
this.performance.mark(name);
|
|
311
|
+
this.ensurePerformanceGlobal();
|
|
312
|
+
}
|
|
313
|
+
measure(name, startMark, endMark) {
|
|
314
|
+
const duration = this.performance.measure(name, startMark, endMark);
|
|
315
|
+
this.ensurePerformanceGlobal();
|
|
316
|
+
return duration;
|
|
317
|
+
}
|
|
318
|
+
ensurePerformanceGlobal() {
|
|
319
|
+
this.mcpGlobal.performance = {
|
|
320
|
+
marks: this.performance.marks,
|
|
321
|
+
measures: this.performance.measures
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
log(channel, data) {
|
|
325
|
+
this.logger.log(channel, data);
|
|
326
|
+
this.mcpGlobal.logs = { channels: this.logger.channels };
|
|
327
|
+
}
|
|
328
|
+
subscribeState(name, getter) {
|
|
329
|
+
this.stateManager.subscribe(name, getter);
|
|
330
|
+
this.mcpGlobal.state = { subscriptions: this.stateManager.subscriptions };
|
|
331
|
+
}
|
|
332
|
+
trackLifecycle() {
|
|
333
|
+
this.lifecycleTracker.start();
|
|
334
|
+
this.mcpGlobal.lifecycle = { events: this.lifecycleTracker.events };
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
function registerCommand(name, handler) {
|
|
338
|
+
const g = global;
|
|
339
|
+
if (!g.__METRO_MCP__) {
|
|
340
|
+
g.__METRO_MCP__ = { commands: {} };
|
|
341
|
+
}
|
|
342
|
+
const mcp = g.__METRO_MCP__;
|
|
343
|
+
if (!mcp.commands)
|
|
344
|
+
mcp.commands = {};
|
|
345
|
+
mcp.commands[name] = handler;
|
|
346
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* metro-mcp Client SDK
|
|
3
|
+
*
|
|
4
|
+
* Optional dev dependency for enhanced features.
|
|
5
|
+
* All features register on global.__METRO_MCP__ which the server
|
|
6
|
+
* discovers via Runtime.evaluate.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* import { MetroMCPClient } from 'metro-mcp/client';
|
|
10
|
+
*
|
|
11
|
+
* if (__DEV__) {
|
|
12
|
+
* const mcp = new MetroMCPClient();
|
|
13
|
+
* mcp.registerCommand('login', async ({ email, password }) => { ... });
|
|
14
|
+
* mcp.useReduxMiddleware(store);
|
|
15
|
+
* mcp.useNavigationTracking(navigationRef);
|
|
16
|
+
* }
|
|
17
|
+
*/
|
|
18
|
+
import { type ReduxStore } from './middleware/redux.js';
|
|
19
|
+
import { type NavigationRef } from './middleware/navigation.js';
|
|
20
|
+
import { ClientBuffer } from './client-buffer.js';
|
|
21
|
+
export interface MetroMCPGlobal {
|
|
22
|
+
commands: Record<string, (params: Record<string, unknown>) => unknown>;
|
|
23
|
+
redux?: {
|
|
24
|
+
actions: ClientBuffer<unknown>;
|
|
25
|
+
getState: () => unknown;
|
|
26
|
+
dispatch: (action: unknown) => unknown;
|
|
27
|
+
};
|
|
28
|
+
navigation?: {
|
|
29
|
+
events: ClientBuffer<unknown>;
|
|
30
|
+
getState: () => unknown;
|
|
31
|
+
};
|
|
32
|
+
performance?: {
|
|
33
|
+
marks: Map<string, number>;
|
|
34
|
+
measures: Array<{
|
|
35
|
+
name: string;
|
|
36
|
+
startMark: string;
|
|
37
|
+
endMark: string;
|
|
38
|
+
duration: number;
|
|
39
|
+
}>;
|
|
40
|
+
};
|
|
41
|
+
logs?: {
|
|
42
|
+
channels: Map<string, ClientBuffer<unknown>>;
|
|
43
|
+
};
|
|
44
|
+
state?: {
|
|
45
|
+
subscriptions: Map<string, () => unknown>;
|
|
46
|
+
};
|
|
47
|
+
lifecycle?: {
|
|
48
|
+
events: ClientBuffer<unknown>;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export declare class MetroMCPClient {
|
|
52
|
+
private mcpGlobal;
|
|
53
|
+
private performance;
|
|
54
|
+
private logger;
|
|
55
|
+
private stateManager;
|
|
56
|
+
private lifecycleTracker;
|
|
57
|
+
constructor();
|
|
58
|
+
registerCommand(name: string, handler: (params: Record<string, unknown>) => unknown): void;
|
|
59
|
+
useReduxMiddleware(store: ReduxStore): void;
|
|
60
|
+
/**
|
|
61
|
+
* Get the Redux middleware to add to your store.
|
|
62
|
+
* Call this AFTER useReduxMiddleware().
|
|
63
|
+
*/
|
|
64
|
+
getReduxMiddleware(): unknown;
|
|
65
|
+
useNavigationTracking(navigationRef: NavigationRef): void;
|
|
66
|
+
mark(name: string): void;
|
|
67
|
+
measure(name: string, startMark: string, endMark: string): number | null;
|
|
68
|
+
private ensurePerformanceGlobal;
|
|
69
|
+
log(channel: string, data: unknown): void;
|
|
70
|
+
subscribeState(name: string, getter: () => unknown): void;
|
|
71
|
+
trackLifecycle(): void;
|
|
72
|
+
}
|
|
73
|
+
export { createReduxMiddleware } from './middleware/redux.js';
|
|
74
|
+
export { createNavigationTracking } from './middleware/navigation.js';
|
|
75
|
+
export { PerformanceTracker } from './performance.js';
|
|
76
|
+
export { StructuredLogger } from './logger.js';
|
|
77
|
+
export { StateSubscriptionManager } from './state.js';
|
|
78
|
+
export { LifecycleTracker } from './lifecycle.js';
|
|
79
|
+
export declare function registerCommand(name: string, handler: (params: Record<string, unknown>) => unknown): void;
|
|
80
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAyB,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAA4B,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAK1F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKlD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC;IACvE,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAC/B,QAAQ,EAAE,MAAM,OAAO,CAAC;QACxB,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;KACxC,CAAC;IACF,UAAU,CAAC,EAAE;QACX,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAC9B,QAAQ,EAAE,MAAM,OAAO,CAAC;KACzB,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3B,QAAQ,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACzF,CAAC;IACF,IAAI,CAAC,EAAE;QACL,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;KAC9C,CAAC;IACF,KAAK,CAAC,EAAE;QACN,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC;KAC3C,CAAC;IACF,SAAS,CAAC,EAAE;QACV,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;KAC/B,CAAC;CACH;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,gBAAgB,CAAmB;;IAkB3C,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,GAAG,IAAI;IAM1F,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAY3C;;;OAGG;IACH,kBAAkB,IAAI,OAAO;IAS7B,qBAAqB,CAAC,aAAa,EAAE,aAAa,GAAG,IAAI;IAOzD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKxB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMxE,OAAO,CAAC,uBAAuB;IAS/B,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAOzC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,GAAG,IAAI;IAOzD,cAAc,IAAI,IAAI;CAIvB;AAGD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGlD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,GACpD,IAAI,CAQN"}
|