@missionsquad/mcp-msq 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/README.md +232 -0
- package/dist/config.d.ts +20 -0
- package/dist/config.js +77 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +15 -0
- package/dist/errors.js +75 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/json.d.ts +4 -0
- package/dist/json.js +13 -0
- package/dist/json.js.map +1 -0
- package/dist/msq-client.d.ts +42 -0
- package/dist/msq-client.js +218 -0
- package/dist/msq-client.js.map +1 -0
- package/dist/schemas.d.ts +644 -0
- package/dist/schemas.js +169 -0
- package/dist/schemas.js.map +1 -0
- package/dist/stdio-safe-console.d.ts +6 -0
- package/dist/stdio-safe-console.js +27 -0
- package/dist/stdio-safe-console.js.map +1 -0
- package/dist/tools.d.ts +3 -0
- package/dist/tools.js +415 -0
- package/dist/tools.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { basename } from 'node:path';
|
|
3
|
+
import { appConfig, resolveRequestConfig } from './config.js';
|
|
4
|
+
import { MsqApiError, MsqTransportError } from './errors.js';
|
|
5
|
+
function parseContentLength(rawHeader) {
|
|
6
|
+
if (!rawHeader) {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
const parsed = Number(rawHeader);
|
|
10
|
+
if (!Number.isFinite(parsed) || parsed < 0) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
return Math.floor(parsed);
|
|
14
|
+
}
|
|
15
|
+
async function readResponseBodyWithLimit(response, maxBytes) {
|
|
16
|
+
if (!response.body) {
|
|
17
|
+
return {
|
|
18
|
+
buffer: Buffer.alloc(0),
|
|
19
|
+
bytesRead: 0,
|
|
20
|
+
truncated: false,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
const reader = response.body.getReader();
|
|
24
|
+
const chunks = [];
|
|
25
|
+
let bytesRead = 0;
|
|
26
|
+
let bytesKept = 0;
|
|
27
|
+
let truncated = false;
|
|
28
|
+
while (true) {
|
|
29
|
+
const { value, done } = await reader.read();
|
|
30
|
+
if (done) {
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
if (!value) {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
bytesRead += value.byteLength;
|
|
37
|
+
if (bytesKept < maxBytes) {
|
|
38
|
+
const remaining = maxBytes - bytesKept;
|
|
39
|
+
const nextSlice = value.byteLength > remaining ? value.subarray(0, remaining) : value;
|
|
40
|
+
if (nextSlice.byteLength > 0) {
|
|
41
|
+
chunks.push(Buffer.from(nextSlice));
|
|
42
|
+
bytesKept += nextSlice.byteLength;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (bytesRead > maxBytes) {
|
|
46
|
+
truncated = true;
|
|
47
|
+
await reader.cancel();
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
buffer: Buffer.concat(chunks),
|
|
53
|
+
bytesRead,
|
|
54
|
+
truncated,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export class MissionSquadClient {
|
|
58
|
+
requestConfig;
|
|
59
|
+
constructor(requestConfig) {
|
|
60
|
+
this.requestConfig = requestConfig;
|
|
61
|
+
}
|
|
62
|
+
async requestJson(options) {
|
|
63
|
+
const url = this.buildUrl(options.path, options.query);
|
|
64
|
+
const headers = {
|
|
65
|
+
'x-api-key': this.requestConfig.apiKey,
|
|
66
|
+
...this.compactHeaders(options.headers),
|
|
67
|
+
};
|
|
68
|
+
let body;
|
|
69
|
+
if (options.body !== undefined) {
|
|
70
|
+
headers['Content-Type'] = 'application/json';
|
|
71
|
+
body = JSON.stringify(options.body);
|
|
72
|
+
}
|
|
73
|
+
const response = await this.fetchWithTimeout(url, {
|
|
74
|
+
method: options.method,
|
|
75
|
+
headers,
|
|
76
|
+
body,
|
|
77
|
+
});
|
|
78
|
+
return this.parseStructuredResponse(response, url);
|
|
79
|
+
}
|
|
80
|
+
async uploadFile(options) {
|
|
81
|
+
const payload = await readFile(options.filePath);
|
|
82
|
+
const filename = options.filename?.trim() || basename(options.filePath);
|
|
83
|
+
const form = new FormData();
|
|
84
|
+
form.append('file', new Blob([payload]), filename);
|
|
85
|
+
form.append('purpose', options.purpose);
|
|
86
|
+
if (options.relativePath) {
|
|
87
|
+
form.append('relativePath', options.relativePath);
|
|
88
|
+
}
|
|
89
|
+
if (options.collectionName) {
|
|
90
|
+
form.append('collectionName', options.collectionName);
|
|
91
|
+
}
|
|
92
|
+
const url = this.buildUrl('files');
|
|
93
|
+
const response = await this.fetchWithTimeout(url, {
|
|
94
|
+
method: 'POST',
|
|
95
|
+
headers: {
|
|
96
|
+
'x-api-key': this.requestConfig.apiKey,
|
|
97
|
+
},
|
|
98
|
+
body: form,
|
|
99
|
+
});
|
|
100
|
+
return this.parseStructuredResponse(response, url);
|
|
101
|
+
}
|
|
102
|
+
async getFileContent(options) {
|
|
103
|
+
const maxBytes = options.maxBytes ?? this.requestConfig.defaultFileContentMaxBytes;
|
|
104
|
+
const url = this.buildUrl(`files/${encodeURIComponent(options.fileId)}/content`);
|
|
105
|
+
const response = await this.fetchWithTimeout(url, {
|
|
106
|
+
method: 'GET',
|
|
107
|
+
headers: {
|
|
108
|
+
'x-api-key': this.requestConfig.apiKey,
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
if (!response.ok) {
|
|
112
|
+
const errorPayload = await this.parseErrorPayload(response);
|
|
113
|
+
throw new MsqApiError(`MissionSquad API request failed with ${response.status} ${response.statusText}.`, response.status, response.statusText, url, errorPayload);
|
|
114
|
+
}
|
|
115
|
+
const limited = await readResponseBodyWithLimit(response, maxBytes);
|
|
116
|
+
return {
|
|
117
|
+
contentType: response.headers.get('content-type'),
|
|
118
|
+
contentLength: parseContentLength(response.headers.get('content-length')),
|
|
119
|
+
bytesRead: limited.bytesRead,
|
|
120
|
+
truncated: limited.truncated,
|
|
121
|
+
base64: limited.buffer.toString('base64'),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
buildUrl(path, query) {
|
|
125
|
+
const normalizedPath = path.startsWith('/') ? path.slice(1) : path;
|
|
126
|
+
const baseUrlWithSlash = this.requestConfig.baseUrl.endsWith('/')
|
|
127
|
+
? this.requestConfig.baseUrl
|
|
128
|
+
: `${this.requestConfig.baseUrl}/`;
|
|
129
|
+
const url = new URL(normalizedPath, baseUrlWithSlash);
|
|
130
|
+
if (query) {
|
|
131
|
+
for (const [key, value] of Object.entries(query)) {
|
|
132
|
+
if (value !== undefined) {
|
|
133
|
+
url.searchParams.set(key, String(value));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return url.toString();
|
|
138
|
+
}
|
|
139
|
+
compactHeaders(headers) {
|
|
140
|
+
if (!headers) {
|
|
141
|
+
return {};
|
|
142
|
+
}
|
|
143
|
+
const output = {};
|
|
144
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
145
|
+
if (value !== undefined) {
|
|
146
|
+
output[key] = value;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return output;
|
|
150
|
+
}
|
|
151
|
+
async fetchWithTimeout(url, init) {
|
|
152
|
+
const controller = new AbortController();
|
|
153
|
+
const timeoutId = setTimeout(() => {
|
|
154
|
+
controller.abort();
|
|
155
|
+
}, this.requestConfig.httpTimeoutMs);
|
|
156
|
+
try {
|
|
157
|
+
return await fetch(url, {
|
|
158
|
+
...init,
|
|
159
|
+
signal: controller.signal,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
164
|
+
throw new MsqTransportError(`MissionSquad API request timed out after ${this.requestConfig.httpTimeoutMs}ms.`, error);
|
|
165
|
+
}
|
|
166
|
+
throw new MsqTransportError('MissionSquad API request failed before receiving a response.', error);
|
|
167
|
+
}
|
|
168
|
+
finally {
|
|
169
|
+
clearTimeout(timeoutId);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
async parseStructuredResponse(response, url) {
|
|
173
|
+
const payload = await this.parseResponseBody(response);
|
|
174
|
+
if (!response.ok) {
|
|
175
|
+
throw new MsqApiError(`MissionSquad API request failed with ${response.status} ${response.statusText}.`, response.status, response.statusText, url, payload);
|
|
176
|
+
}
|
|
177
|
+
return payload;
|
|
178
|
+
}
|
|
179
|
+
async parseResponseBody(response) {
|
|
180
|
+
const contentType = response.headers.get('content-type') ?? '';
|
|
181
|
+
if (contentType.includes('application/json')) {
|
|
182
|
+
try {
|
|
183
|
+
return await response.json();
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
return { parseError: 'Invalid JSON response body.' };
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
const text = await response.text();
|
|
190
|
+
if (text.length === 0) {
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
return text;
|
|
194
|
+
}
|
|
195
|
+
async parseErrorPayload(response) {
|
|
196
|
+
const contentType = response.headers.get('content-type') ?? '';
|
|
197
|
+
if (contentType.includes('application/json')) {
|
|
198
|
+
try {
|
|
199
|
+
return await response.json();
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
return { parseError: 'Invalid JSON error response body.' };
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
try {
|
|
206
|
+
const text = await response.text();
|
|
207
|
+
return text.length > 0 ? text : null;
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
export function createMissionSquadClient(extraArgs) {
|
|
215
|
+
const requestConfig = resolveRequestConfig(extraArgs, appConfig);
|
|
216
|
+
return new MissionSquadClient(requestConfig);
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=msq-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"msq-client.js","sourceRoot":"","sources":["../src/msq-client.ts"],"names":[],"mappings":"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"}
|