@techery/appspector-mcp 1.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/LICENSE +21 -0
- package/README.md +293 -0
- package/dist/__tests__/api-client.test.d.ts +2 -0
- package/dist/__tests__/api-client.test.d.ts.map +1 -0
- package/dist/__tests__/api-client.test.js +88 -0
- package/dist/__tests__/api-client.test.js.map +1 -0
- package/dist/__tests__/session-loader.test.d.ts +2 -0
- package/dist/__tests__/session-loader.test.d.ts.map +1 -0
- package/dist/__tests__/session-loader.test.js +189 -0
- package/dist/__tests__/session-loader.test.js.map +1 -0
- package/dist/api-client.d.ts +29 -0
- package/dist/api-client.d.ts.map +1 -0
- package/dist/api-client.js +97 -0
- package/dist/api-client.js.map +1 -0
- package/dist/http-server.d.ts +3 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +426 -0
- package/dist/http-server.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +579 -0
- package/dist/index.js.map +1 -0
- package/dist/session-loader.d.ts +16 -0
- package/dist/session-loader.d.ts.map +1 -0
- package/dist/session-loader.js +258 -0
- package/dist/session-loader.js.map +1 -0
- package/dist/types.d.ts +177 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +19 -0
- package/dist/types.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { decode } from '@msgpack/msgpack';
|
|
2
|
+
const MAX_SEQUENCE_ID = 30 * 24 * 3600;
|
|
3
|
+
const getDispatcherHistoryHost = (dispatcherAddress) => {
|
|
4
|
+
try {
|
|
5
|
+
const dispatcherWSURL = new URL(dispatcherAddress);
|
|
6
|
+
const host = dispatcherWSURL.hostname;
|
|
7
|
+
const protocol = dispatcherWSURL.protocol === 'ws:' ? 'http:' : 'https:';
|
|
8
|
+
return `${protocol}//${host}`;
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return `https://${dispatcherAddress.replace(/^wss?:\/\//, '')}`;
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
const extractEvents = (packet) => {
|
|
15
|
+
const events = [];
|
|
16
|
+
if (packet.type !== 50) {
|
|
17
|
+
// Not EVENT_SEQUENCE
|
|
18
|
+
return events;
|
|
19
|
+
}
|
|
20
|
+
const payload = packet.payload;
|
|
21
|
+
if (!Array.isArray(payload)) {
|
|
22
|
+
return events;
|
|
23
|
+
}
|
|
24
|
+
for (const batch of payload) {
|
|
25
|
+
if (!Array.isArray(batch))
|
|
26
|
+
continue;
|
|
27
|
+
for (const event of batch) {
|
|
28
|
+
if (!event || typeof event !== 'object')
|
|
29
|
+
continue;
|
|
30
|
+
const eventData = event;
|
|
31
|
+
events.push({
|
|
32
|
+
id: eventData['id'] ?? '',
|
|
33
|
+
timestamp: eventData['timestamp'] ?? 0,
|
|
34
|
+
payload: eventData['payload'],
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return events;
|
|
39
|
+
};
|
|
40
|
+
export const loadSessionHistory = async ({ session, userToken, }) => {
|
|
41
|
+
const dispatcherHost = getDispatcherHistoryHost(session.dispatcherAddress);
|
|
42
|
+
const historyURL = `${dispatcherHost}/history?ticket=${session.connectionTicket}&ssi=0&esi=${MAX_SEQUENCE_ID}&start_seq_id=0&end_seq_id=${MAX_SEQUENCE_ID}&connection_token=${session.connectionToken}&connectionToken=${session.connectionToken}`;
|
|
43
|
+
const response = await fetch(historyURL, {
|
|
44
|
+
headers: {
|
|
45
|
+
Authorization: `Bearer ${userToken}`,
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
if (!response.ok) {
|
|
49
|
+
throw new Error(`Failed to fetch history: ${response.status} ${response.statusText}`);
|
|
50
|
+
}
|
|
51
|
+
const buffer = await response.arrayBuffer();
|
|
52
|
+
return decodeSessionData(buffer);
|
|
53
|
+
};
|
|
54
|
+
const decodeSessionData = (buffer) => {
|
|
55
|
+
const httpRequests = new Map();
|
|
56
|
+
const consoleLogs = [];
|
|
57
|
+
try {
|
|
58
|
+
// The history data is MessagePack encoded
|
|
59
|
+
// It can be a single packet or multiple packets concatenated
|
|
60
|
+
let offset = 0;
|
|
61
|
+
const data = new Uint8Array(buffer);
|
|
62
|
+
while (offset < data.length) {
|
|
63
|
+
try {
|
|
64
|
+
// Try to decode from current offset
|
|
65
|
+
const decoded = decode(data.subarray(offset));
|
|
66
|
+
// Find the actual bytes consumed
|
|
67
|
+
// This is a simplification - in production you'd use ExtensionCodec or similar
|
|
68
|
+
const packet = decodePacketFromDecoded(decoded);
|
|
69
|
+
const events = extractEvents(packet);
|
|
70
|
+
for (const event of events) {
|
|
71
|
+
processEvent(event, httpRequests, consoleLogs);
|
|
72
|
+
}
|
|
73
|
+
// Move to the next packet - this is an approximation
|
|
74
|
+
// MessagePack doesn't have a built-in way to know the encoded size
|
|
75
|
+
// So we need to try decoding from different positions
|
|
76
|
+
offset = data.length; // For now, assume single packet
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// If decoding fails, try next byte
|
|
80
|
+
offset++;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
// Try as a single packet
|
|
86
|
+
try {
|
|
87
|
+
const decoded = decode(new Uint8Array(buffer));
|
|
88
|
+
const packet = decodePacketFromDecoded(decoded);
|
|
89
|
+
const events = extractEvents(packet);
|
|
90
|
+
for (const event of events) {
|
|
91
|
+
processEvent(event, httpRequests, consoleLogs);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// Try as array of packets
|
|
96
|
+
try {
|
|
97
|
+
const decoded = decode(new Uint8Array(buffer));
|
|
98
|
+
if (Array.isArray(decoded)) {
|
|
99
|
+
for (const item of decoded) {
|
|
100
|
+
const packet = decodePacketFromDecoded(item);
|
|
101
|
+
const events = extractEvents(packet);
|
|
102
|
+
for (const event of events) {
|
|
103
|
+
processEvent(event, httpRequests, consoleLogs);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
console.error('Failed to decode session data');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
httpLogs: Array.from(httpRequests.values()),
|
|
115
|
+
consoleLogs,
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
const decodePacketFromDecoded = (decoded) => {
|
|
119
|
+
if (Array.isArray(decoded) && decoded.length >= 3) {
|
|
120
|
+
return {
|
|
121
|
+
type: decoded[0] ?? 0,
|
|
122
|
+
meta: decoded[1] ?? [],
|
|
123
|
+
payload: decoded[2],
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
// Try as object format
|
|
127
|
+
if (decoded && typeof decoded === 'object') {
|
|
128
|
+
const obj = decoded;
|
|
129
|
+
return {
|
|
130
|
+
type: obj['type'] ?? 50,
|
|
131
|
+
meta: obj['meta'] ?? [],
|
|
132
|
+
payload: obj['payload'] ?? decoded,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
// Treat the whole thing as payload
|
|
136
|
+
return {
|
|
137
|
+
type: 50,
|
|
138
|
+
meta: [],
|
|
139
|
+
payload: decoded,
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
const processEvent = (event, httpRequests, consoleLogs) => {
|
|
143
|
+
const { id, timestamp, payload } = event;
|
|
144
|
+
if (id === 'http.http-request') {
|
|
145
|
+
const httpPayload = payload;
|
|
146
|
+
const request = httpPayload.request;
|
|
147
|
+
try {
|
|
148
|
+
const url = new URL(request.url);
|
|
149
|
+
const protocol = url.protocol.slice(0, -1); // Remove trailing ':'
|
|
150
|
+
httpRequests.set(request.uid, {
|
|
151
|
+
uid: request.uid,
|
|
152
|
+
timestamp,
|
|
153
|
+
request: {
|
|
154
|
+
url: request.url,
|
|
155
|
+
body: request.body ? new Uint8Array(request.body) : null,
|
|
156
|
+
protocol,
|
|
157
|
+
host: url.hostname,
|
|
158
|
+
pathname: url.search ? url.pathname + url.search : url.pathname,
|
|
159
|
+
method: request.method,
|
|
160
|
+
headers: request.headers ?? {},
|
|
161
|
+
isLargeBody: httpPayload.large_body,
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
// Invalid URL, skip
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
else if (id === 'http.http-response') {
|
|
170
|
+
const httpPayload = payload;
|
|
171
|
+
const response = httpPayload.response;
|
|
172
|
+
const existingLog = httpRequests.get(response.requestUid);
|
|
173
|
+
if (existingLog) {
|
|
174
|
+
existingLog.response = {
|
|
175
|
+
statusCode: response.code,
|
|
176
|
+
headers: response.headers ?? {},
|
|
177
|
+
body: response.body ? new Uint8Array(response.body) : null,
|
|
178
|
+
isLargeBody: httpPayload.large_body,
|
|
179
|
+
duration: response.tookMs,
|
|
180
|
+
error: response.error ?? undefined,
|
|
181
|
+
timings: response.timings,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
else if (id === 'logs.log') {
|
|
186
|
+
const logPayload = payload;
|
|
187
|
+
consoleLogs.push({
|
|
188
|
+
timestamp,
|
|
189
|
+
message: logPayload.message,
|
|
190
|
+
tag: logPayload.tag,
|
|
191
|
+
level: logPayload.level ?? 'verbose',
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
export const createCurlString = (log) => {
|
|
196
|
+
const request = log.request;
|
|
197
|
+
try {
|
|
198
|
+
const url = new URL(request.pathname, request.url);
|
|
199
|
+
const headers = { ...request.headers };
|
|
200
|
+
// Remove headers that curl generates automatically
|
|
201
|
+
const avoidCurlHeaders = ['Host', 'Content-Length', 'Accept-Encoding', 'Connection'];
|
|
202
|
+
for (const header of avoidCurlHeaders) {
|
|
203
|
+
delete headers[header];
|
|
204
|
+
delete headers[header.toLowerCase()];
|
|
205
|
+
}
|
|
206
|
+
const contentType = Object.entries(headers).find(([k]) => k.toLowerCase() === 'content-type')?.at(1);
|
|
207
|
+
// Build curl command
|
|
208
|
+
let curlString = `curl --verbose -X ${request.method}`;
|
|
209
|
+
// Add URL
|
|
210
|
+
curlString += ` '${url.toString()}'`;
|
|
211
|
+
// Add headers
|
|
212
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
213
|
+
curlString += ` -H '${key}: ${value}'`;
|
|
214
|
+
}
|
|
215
|
+
// Add body
|
|
216
|
+
if (request.body?.length) {
|
|
217
|
+
if (contentType?.toLowerCase() === 'application/json') {
|
|
218
|
+
const decoder = new TextDecoder('utf-8');
|
|
219
|
+
const bodyStr = decoder.decode(request.body).replace(/'/g, "'\\''");
|
|
220
|
+
curlString += ` -d '${bodyStr}'`;
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
// For binary data, encode as hex
|
|
224
|
+
const hexStrings = [];
|
|
225
|
+
request.body.forEach((value) => {
|
|
226
|
+
hexStrings.push(`\\x${value.toString(16).padStart(2, '0')}`);
|
|
227
|
+
});
|
|
228
|
+
curlString = `echo -e '${hexStrings.join('')}' | ${curlString} --data-binary @-`;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return curlString;
|
|
232
|
+
}
|
|
233
|
+
catch (e) {
|
|
234
|
+
console.error('Failed to create curl string:', e);
|
|
235
|
+
return undefined;
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
export const executeCurl = async (curlCommand) => {
|
|
239
|
+
const { exec } = await import('child_process');
|
|
240
|
+
const { promisify } = await import('util');
|
|
241
|
+
const execAsync = promisify(exec);
|
|
242
|
+
try {
|
|
243
|
+
const { stdout, stderr } = await execAsync(curlCommand, {
|
|
244
|
+
maxBuffer: 10 * 1024 * 1024, // 10MB
|
|
245
|
+
timeout: 30000, // 30 seconds
|
|
246
|
+
});
|
|
247
|
+
return { stdout, stderr, exitCode: 0 };
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
const execError = error;
|
|
251
|
+
return {
|
|
252
|
+
stdout: execError.stdout ?? '',
|
|
253
|
+
stderr: execError.stderr ?? String(error),
|
|
254
|
+
exitCode: execError.code ?? 1,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
//# sourceMappingURL=session-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-loader.js","sourceRoot":"","sources":["../src/session-loader.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
export declare enum SessionState {
|
|
2
|
+
ONLINE = "online",
|
|
3
|
+
OFFLINE = "offline",
|
|
4
|
+
BUFFERED = "buffered",
|
|
5
|
+
ARCHIVED = "archived"
|
|
6
|
+
}
|
|
7
|
+
export type Platform = 'android' | 'ios' | 'appletv' | 'macOS';
|
|
8
|
+
export interface Device {
|
|
9
|
+
readonly OSName: string;
|
|
10
|
+
readonly OSVersion: string;
|
|
11
|
+
readonly deviceName: string;
|
|
12
|
+
readonly deviceKey: string;
|
|
13
|
+
readonly modelName: string;
|
|
14
|
+
readonly modelNumber: string;
|
|
15
|
+
readonly platform: Platform;
|
|
16
|
+
readonly isRealDevice: boolean;
|
|
17
|
+
readonly type: string;
|
|
18
|
+
}
|
|
19
|
+
export interface Monitor {
|
|
20
|
+
readonly id: string;
|
|
21
|
+
readonly enable: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface Session {
|
|
24
|
+
readonly id: string;
|
|
25
|
+
readonly appId: number;
|
|
26
|
+
readonly accountId: number;
|
|
27
|
+
readonly protocolVersion: number;
|
|
28
|
+
readonly appVersion: string;
|
|
29
|
+
readonly appName: string;
|
|
30
|
+
readonly sdkVersion: string;
|
|
31
|
+
readonly buildNumber?: string;
|
|
32
|
+
readonly latestSdkVersion: string;
|
|
33
|
+
readonly bundleId: string;
|
|
34
|
+
readonly device: Device;
|
|
35
|
+
readonly createdAt: number;
|
|
36
|
+
readonly lastActiveAt: number;
|
|
37
|
+
readonly state: SessionState;
|
|
38
|
+
readonly dispatcherAddress: string;
|
|
39
|
+
readonly monitors: Monitor[];
|
|
40
|
+
readonly connectionToken: string;
|
|
41
|
+
readonly connectionTicket: string;
|
|
42
|
+
readonly city: string;
|
|
43
|
+
readonly countryName: string;
|
|
44
|
+
readonly ip: string;
|
|
45
|
+
readonly compressionDictHash?: string;
|
|
46
|
+
readonly metadata: Record<string, unknown>;
|
|
47
|
+
readonly archiveURL: string;
|
|
48
|
+
readonly sdkPublicKey: string;
|
|
49
|
+
}
|
|
50
|
+
export interface App {
|
|
51
|
+
readonly id: number;
|
|
52
|
+
readonly name: string;
|
|
53
|
+
readonly accountId: number;
|
|
54
|
+
readonly bundleId: string;
|
|
55
|
+
readonly platform: Platform;
|
|
56
|
+
readonly sdkKey: string;
|
|
57
|
+
readonly iconUrl?: string;
|
|
58
|
+
readonly encryptionEnabled: boolean;
|
|
59
|
+
readonly clientId?: string;
|
|
60
|
+
readonly isFavorite: boolean;
|
|
61
|
+
readonly isLocked: boolean;
|
|
62
|
+
readonly createdAt: number;
|
|
63
|
+
}
|
|
64
|
+
export interface User {
|
|
65
|
+
readonly id: number;
|
|
66
|
+
readonly email: string;
|
|
67
|
+
readonly name: string;
|
|
68
|
+
readonly role?: string;
|
|
69
|
+
readonly avatarUrl?: string;
|
|
70
|
+
}
|
|
71
|
+
export interface UserSession {
|
|
72
|
+
readonly id: number;
|
|
73
|
+
readonly email: string;
|
|
74
|
+
readonly name: string;
|
|
75
|
+
readonly accountId: number;
|
|
76
|
+
readonly token: string;
|
|
77
|
+
readonly account: Account;
|
|
78
|
+
readonly agreementAccepted: boolean;
|
|
79
|
+
readonly authMode: string;
|
|
80
|
+
}
|
|
81
|
+
export interface Account {
|
|
82
|
+
readonly accountId: number;
|
|
83
|
+
readonly accountType: string;
|
|
84
|
+
readonly accessType: string;
|
|
85
|
+
readonly active: boolean;
|
|
86
|
+
readonly planId: string;
|
|
87
|
+
}
|
|
88
|
+
export type HTTPHeaders = Record<string, string>;
|
|
89
|
+
export type HTTPBody = Uint8Array | null;
|
|
90
|
+
export interface HTTPRequest {
|
|
91
|
+
readonly large_body: boolean;
|
|
92
|
+
readonly request: {
|
|
93
|
+
readonly body: HTTPBody;
|
|
94
|
+
readonly headers: HTTPHeaders | null;
|
|
95
|
+
readonly method: string;
|
|
96
|
+
readonly uid: string;
|
|
97
|
+
readonly url: string;
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
export interface Timings {
|
|
101
|
+
readonly domainLookupDuration: number;
|
|
102
|
+
readonly requestDuration: number;
|
|
103
|
+
readonly secureHandshakeDuration: number;
|
|
104
|
+
readonly connectDuration: number;
|
|
105
|
+
readonly responseDuration: number;
|
|
106
|
+
}
|
|
107
|
+
export interface Sizes {
|
|
108
|
+
readonly statusLine?: number;
|
|
109
|
+
readonly headers: number;
|
|
110
|
+
readonly body: number;
|
|
111
|
+
}
|
|
112
|
+
export interface HTTPResponse {
|
|
113
|
+
readonly large_body: boolean;
|
|
114
|
+
readonly response: {
|
|
115
|
+
readonly body: HTTPBody;
|
|
116
|
+
readonly headers: HTTPHeaders | null;
|
|
117
|
+
readonly requestUid: string;
|
|
118
|
+
readonly tookMs: number;
|
|
119
|
+
readonly code: number;
|
|
120
|
+
readonly error: string | null;
|
|
121
|
+
readonly timings?: Timings | null;
|
|
122
|
+
readonly requestSizes?: Sizes | null;
|
|
123
|
+
readonly responseSizes?: Sizes | null;
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
export interface HTTPSummaryLog {
|
|
127
|
+
readonly uid: string;
|
|
128
|
+
readonly timestamp: number;
|
|
129
|
+
readonly request: HTTPRequestLog;
|
|
130
|
+
readonly response?: HTTPResponseLog;
|
|
131
|
+
}
|
|
132
|
+
export interface HTTPRequestLog {
|
|
133
|
+
readonly url: string;
|
|
134
|
+
readonly body: HTTPBody;
|
|
135
|
+
readonly protocol: string;
|
|
136
|
+
readonly host: string;
|
|
137
|
+
readonly pathname: string;
|
|
138
|
+
queryParams?: Record<string, unknown>;
|
|
139
|
+
readonly method: string;
|
|
140
|
+
readonly headers: HTTPHeaders;
|
|
141
|
+
readonly isLargeBody: boolean;
|
|
142
|
+
}
|
|
143
|
+
export interface HTTPResponseLog {
|
|
144
|
+
readonly statusCode: number;
|
|
145
|
+
readonly headers: HTTPHeaders;
|
|
146
|
+
readonly body: HTTPBody;
|
|
147
|
+
readonly isLargeBody: boolean;
|
|
148
|
+
readonly duration: number;
|
|
149
|
+
readonly error?: string;
|
|
150
|
+
readonly timings?: Timings | null;
|
|
151
|
+
readonly totalSize?: number;
|
|
152
|
+
}
|
|
153
|
+
export interface LogRecord {
|
|
154
|
+
readonly timestamp: number;
|
|
155
|
+
readonly message: string;
|
|
156
|
+
readonly tag?: string;
|
|
157
|
+
readonly level?: string;
|
|
158
|
+
}
|
|
159
|
+
export declare enum PacketType {
|
|
160
|
+
REQUEST = 20,
|
|
161
|
+
SYSTEM_REQUEST = 21,
|
|
162
|
+
RESPONSE = 30,
|
|
163
|
+
SYSTEM_RESPONSE = 31,
|
|
164
|
+
SYSTEM = 40,
|
|
165
|
+
EVENT_SEQUENCE = 50
|
|
166
|
+
}
|
|
167
|
+
export interface Packet {
|
|
168
|
+
type: PacketType;
|
|
169
|
+
meta: readonly number[];
|
|
170
|
+
payload: unknown;
|
|
171
|
+
}
|
|
172
|
+
export interface SessionEvent {
|
|
173
|
+
id: string;
|
|
174
|
+
timestamp: number;
|
|
175
|
+
payload: unknown;
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Session types
|
|
2
|
+
export var SessionState;
|
|
3
|
+
(function (SessionState) {
|
|
4
|
+
SessionState["ONLINE"] = "online";
|
|
5
|
+
SessionState["OFFLINE"] = "offline";
|
|
6
|
+
SessionState["BUFFERED"] = "buffered";
|
|
7
|
+
SessionState["ARCHIVED"] = "archived";
|
|
8
|
+
})(SessionState || (SessionState = {}));
|
|
9
|
+
// Packet types
|
|
10
|
+
export var PacketType;
|
|
11
|
+
(function (PacketType) {
|
|
12
|
+
PacketType[PacketType["REQUEST"] = 20] = "REQUEST";
|
|
13
|
+
PacketType[PacketType["SYSTEM_REQUEST"] = 21] = "SYSTEM_REQUEST";
|
|
14
|
+
PacketType[PacketType["RESPONSE"] = 30] = "RESPONSE";
|
|
15
|
+
PacketType[PacketType["SYSTEM_RESPONSE"] = 31] = "SYSTEM_RESPONSE";
|
|
16
|
+
PacketType[PacketType["SYSTEM"] = 40] = "SYSTEM";
|
|
17
|
+
PacketType[PacketType["EVENT_SEQUENCE"] = 50] = "EVENT_SEQUENCE";
|
|
18
|
+
})(PacketType || (PacketType = {}));
|
|
19
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,MAAM,CAAN,IAAY,YAKX;AALD,WAAY,YAAY;IACtB,iCAAiB,CAAA;IACjB,mCAAmB,CAAA;IACnB,qCAAqB,CAAA;IACrB,qCAAqB,CAAA;AACvB,CAAC,EALW,YAAY,KAAZ,YAAY,QAKvB;AA+KD,eAAe;AACf,MAAM,CAAN,IAAY,UAOX;AAPD,WAAY,UAAU;IACpB,kDAAY,CAAA;IACZ,gEAAmB,CAAA;IACnB,oDAAa,CAAA;IACb,kEAAoB,CAAA;IACpB,gDAAW,CAAA;IACX,gEAAmB,CAAA;AACrB,CAAC,EAPW,UAAU,KAAV,UAAU,QAOrB"}
|
package/package.json
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@techery/appspector-mcp",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "MCP server for AppSpector - load console/network logs from mobile devices, execute curl from captured HTTP requests",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"appspector-mcp": "./dist/index.js",
|
|
9
|
+
"appspector-mcp-http": "./dist/http-server.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "tsc",
|
|
18
|
+
"start": "node dist/index.js",
|
|
19
|
+
"start:http": "node dist/http-server.js",
|
|
20
|
+
"dev": "tsx src/index.ts",
|
|
21
|
+
"dev:http": "tsx src/http-server.ts",
|
|
22
|
+
"docker:build": "npm run build && docker build -t appspector-mcp .",
|
|
23
|
+
"docker:run": "docker run -p 3000:3000 appspector-mcp",
|
|
24
|
+
"test": "vitest run",
|
|
25
|
+
"test:watch": "vitest",
|
|
26
|
+
"typecheck": "tsc --noEmit",
|
|
27
|
+
"lint": "eslint src --ext .ts",
|
|
28
|
+
"prepublishOnly": "npm run build"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"mcp",
|
|
32
|
+
"model-context-protocol",
|
|
33
|
+
"appspector",
|
|
34
|
+
"mobile",
|
|
35
|
+
"debugging",
|
|
36
|
+
"logs",
|
|
37
|
+
"network",
|
|
38
|
+
"curl",
|
|
39
|
+
"claude",
|
|
40
|
+
"ai"
|
|
41
|
+
],
|
|
42
|
+
"author": "Techery",
|
|
43
|
+
"license": "MIT",
|
|
44
|
+
"repository": {
|
|
45
|
+
"type": "git",
|
|
46
|
+
"url": "git+https://github.com/techery/appspector-mcp.git"
|
|
47
|
+
},
|
|
48
|
+
"homepage": "https://github.com/techery/appspector-mcp#readme",
|
|
49
|
+
"bugs": {
|
|
50
|
+
"url": "https://github.com/techery/appspector-mcp/issues"
|
|
51
|
+
},
|
|
52
|
+
"engines": {
|
|
53
|
+
"node": ">=18.0.0"
|
|
54
|
+
},
|
|
55
|
+
"publishConfig": {
|
|
56
|
+
"access": "public"
|
|
57
|
+
},
|
|
58
|
+
"dependencies": {
|
|
59
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
60
|
+
"@msgpack/msgpack": "^3.0.0-beta2",
|
|
61
|
+
"ws": "^8.16.0",
|
|
62
|
+
"zod": "^3.22.0"
|
|
63
|
+
},
|
|
64
|
+
"devDependencies": {
|
|
65
|
+
"@types/node": "^20.10.0",
|
|
66
|
+
"@types/ws": "^8.5.10",
|
|
67
|
+
"@typescript-eslint/eslint-plugin": "^6.13.0",
|
|
68
|
+
"@typescript-eslint/parser": "^6.13.0",
|
|
69
|
+
"eslint": "^8.55.0",
|
|
70
|
+
"tsx": "^4.7.0",
|
|
71
|
+
"typescript": "^5.3.0",
|
|
72
|
+
"vitest": "^4.0.17"
|
|
73
|
+
}
|
|
74
|
+
}
|