@moorline/http 0.0.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/dist/http.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ import { Buffer } from 'node:buffer';
2
+ import type { IncomingMessage, ServerResponse } from 'node:http';
3
+ export declare function securityHeaders(): Record<string, string>;
4
+ export declare function readJsonBody(request: IncomingMessage): Promise<Record<string, unknown>>;
5
+ export declare function readRawBody(request: IncomingMessage, input?: {
6
+ maxBytes?: number;
7
+ errorLabel?: string;
8
+ }): Promise<Buffer>;
9
+ export declare function assertJsonContentType(request: IncomingMessage, path: string): void;
10
+ export declare function respondJson(response: ServerResponse, statusCode: number, value: unknown, headers?: Record<string, string>): void;
11
+ export declare function isLoopback(request: IncomingMessage): boolean;
package/dist/http.js ADDED
@@ -0,0 +1,182 @@
1
+ import { Buffer } from 'node:buffer';
2
+ import { JsonBodyError } from '@moorline/control-api/errors.js';
3
+ const MAX_JSON_BODY_BYTES = 1_000_000;
4
+ const DEFAULT_MAX_BINARY_BODY_BYTES = 250 * 1024 * 1024;
5
+ export function securityHeaders() {
6
+ return {
7
+ 'x-content-type-options': 'nosniff',
8
+ 'x-frame-options': 'DENY',
9
+ 'referrer-policy': 'no-referrer',
10
+ 'cross-origin-opener-policy': 'same-origin',
11
+ 'cross-origin-resource-policy': 'same-origin'
12
+ };
13
+ }
14
+ export function readJsonBody(request) {
15
+ return new Promise((resolve, reject) => {
16
+ let onData;
17
+ let onEnd;
18
+ let onError;
19
+ const contentLengthHeader = request.headers['content-length'];
20
+ const rejectOversize = (options = {}) => {
21
+ if (onData) {
22
+ request.removeListener('data', onData);
23
+ }
24
+ if (onEnd) {
25
+ request.removeListener('end', onEnd);
26
+ }
27
+ if (onError) {
28
+ request.removeListener('error', onError);
29
+ }
30
+ request.resume();
31
+ if (options.destroyStream !== false) {
32
+ request.destroy();
33
+ }
34
+ reject(new JsonBodyError(413, `JSON payload exceeds ${MAX_JSON_BODY_BYTES} bytes.`));
35
+ };
36
+ if (typeof contentLengthHeader === 'string') {
37
+ const declaredSize = Number.parseInt(contentLengthHeader, 10);
38
+ if (Number.isFinite(declaredSize) && declaredSize > MAX_JSON_BODY_BYTES) {
39
+ rejectOversize({ destroyStream: false });
40
+ return;
41
+ }
42
+ }
43
+ const chunks = [];
44
+ let totalBytes = 0;
45
+ onData = (chunk) => {
46
+ totalBytes += chunk.byteLength;
47
+ if (totalBytes > MAX_JSON_BODY_BYTES) {
48
+ rejectOversize();
49
+ return;
50
+ }
51
+ chunks.push(chunk);
52
+ };
53
+ onEnd = () => {
54
+ if (chunks.length === 0) {
55
+ resolve({});
56
+ return;
57
+ }
58
+ try {
59
+ const parsed = JSON.parse(Buffer.concat(chunks).toString('utf8'));
60
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
61
+ reject(new JsonBodyError(400, 'JSON body must be an object.'));
62
+ return;
63
+ }
64
+ resolve(parsed);
65
+ }
66
+ catch (error) {
67
+ reject(new JsonBodyError(400, `Invalid JSON body: ${error instanceof Error ? error.message : String(error)}`));
68
+ }
69
+ };
70
+ onError = (error) => {
71
+ reject(error);
72
+ };
73
+ request.on('data', onData);
74
+ request.on('end', onEnd);
75
+ request.on('error', onError);
76
+ });
77
+ }
78
+ export function readRawBody(request, input = {}) {
79
+ const maxBytes = input.maxBytes ?? DEFAULT_MAX_BINARY_BODY_BYTES;
80
+ const errorLabel = input.errorLabel ?? 'payload';
81
+ return new Promise((resolve, reject) => {
82
+ let onData;
83
+ let onEnd;
84
+ let onError;
85
+ const contentLengthHeader = request.headers['content-length'];
86
+ const rejectOversize = (options = {}) => {
87
+ if (onData) {
88
+ request.removeListener('data', onData);
89
+ }
90
+ if (onEnd) {
91
+ request.removeListener('end', onEnd);
92
+ }
93
+ if (onError) {
94
+ request.removeListener('error', onError);
95
+ }
96
+ request.resume();
97
+ if (options.destroyStream !== false) {
98
+ request.destroy();
99
+ }
100
+ reject(new JsonBodyError(413, `${errorLabel} exceeds ${maxBytes} bytes.`));
101
+ };
102
+ if (typeof contentLengthHeader === 'string') {
103
+ const declaredSize = Number.parseInt(contentLengthHeader, 10);
104
+ if (Number.isFinite(declaredSize) && declaredSize > maxBytes) {
105
+ rejectOversize({ destroyStream: false });
106
+ return;
107
+ }
108
+ }
109
+ const chunks = [];
110
+ let totalBytes = 0;
111
+ onData = (chunk) => {
112
+ totalBytes += chunk.byteLength;
113
+ if (totalBytes > maxBytes) {
114
+ rejectOversize();
115
+ return;
116
+ }
117
+ chunks.push(chunk);
118
+ };
119
+ onEnd = () => {
120
+ resolve(chunks.length > 0 ? Buffer.concat(chunks) : Buffer.alloc(0));
121
+ };
122
+ onError = (error) => {
123
+ reject(error);
124
+ };
125
+ request.on('data', onData);
126
+ request.on('end', onEnd);
127
+ request.on('error', onError);
128
+ });
129
+ }
130
+ export function assertJsonContentType(request, path) {
131
+ const header = request.headers['content-type'];
132
+ const value = (Array.isArray(header) ? header[0] : header ?? '').toLowerCase();
133
+ if (!value.startsWith('application/json')) {
134
+ throw new JsonBodyError(415, `Content-Type must be application/json for ${path}`);
135
+ }
136
+ }
137
+ export function respondJson(response, statusCode, value, headers = {}) {
138
+ if (statusCode === 204) {
139
+ response.writeHead(statusCode, {
140
+ 'cache-control': 'no-store',
141
+ ...securityHeaders(),
142
+ ...headers
143
+ });
144
+ response.end();
145
+ return;
146
+ }
147
+ response.writeHead(statusCode, {
148
+ 'content-type': 'application/json; charset=utf-8',
149
+ 'cache-control': 'no-store',
150
+ ...securityHeaders(),
151
+ ...headers
152
+ });
153
+ response.end(JSON.stringify(value));
154
+ }
155
+ export function isLoopback(request) {
156
+ const remote = (request.socket.remoteAddress ?? '').trim().toLowerCase();
157
+ if (!remote) {
158
+ return false;
159
+ }
160
+ if (remote === '::1' || remote === '0:0:0:0:0:0:0:1') {
161
+ return true;
162
+ }
163
+ if (isLoopbackIPv4(remote)) {
164
+ return true;
165
+ }
166
+ if (remote.startsWith('::ffff:')) {
167
+ return isLoopbackIPv4(remote.slice('::ffff:'.length));
168
+ }
169
+ return false;
170
+ }
171
+ function isLoopbackIPv4(address) {
172
+ const segments = address.split('.');
173
+ if (segments.length !== 4) {
174
+ return false;
175
+ }
176
+ const octets = segments.map((segment) => Number(segment));
177
+ if (octets.some((value) => !Number.isInteger(value) || value < 0 || value > 255)) {
178
+ return false;
179
+ }
180
+ return octets[0] === 127;
181
+ }
182
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../../src/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type RuntimeApiAdapter, type RuntimeApiAdapterPackage } from '@moorline/contracts';
2
+ import { ControlApiServer } from './server.js';
3
+ export declare function createAdapter(input: {
4
+ host: string;
5
+ port: number;
6
+ config: Record<string, unknown>;
7
+ configPath?: string;
8
+ entrypoint: string;
9
+ }): RuntimeApiAdapter;
10
+ export declare function runHttpAdapter(input: {
11
+ host: string;
12
+ port: number;
13
+ config: Record<string, unknown>;
14
+ configPath?: string;
15
+ entrypoint: string;
16
+ waitForShutdown?: () => Promise<void>;
17
+ }): Promise<RuntimeApiAdapter>;
18
+ declare const runtimePackage: RuntimeApiAdapterPackage;
19
+ export { ControlApiServer };
20
+ export default runtimePackage;
package/dist/index.js ADDED
@@ -0,0 +1,53 @@
1
+ import manifest from '../manifest.json' with { type: 'json' };
2
+ import { validateApiAdapterPackageManifest } from '@moorline/contracts';
3
+ import { ControlApiServer } from './server.js';
4
+ const packageManifest = validateApiAdapterPackageManifest(manifest);
5
+ export function createAdapter(input) {
6
+ const server = new ControlApiServer(input);
7
+ return {
8
+ async start() {
9
+ await server.start();
10
+ const url = server.getUrl();
11
+ return {
12
+ endpoints: url
13
+ ? [{
14
+ protocol: 'http',
15
+ url,
16
+ token: server.getApiToken(),
17
+ metadata: {
18
+ adapterPackageId: packageManifest.id
19
+ }
20
+ }]
21
+ : []
22
+ };
23
+ },
24
+ async stop() {
25
+ await server.stop();
26
+ }
27
+ };
28
+ }
29
+ export async function runHttpAdapter(input) {
30
+ const server = createAdapter(input);
31
+ await server.start();
32
+ if (input.waitForShutdown) {
33
+ void input.waitForShutdown().finally(() => {
34
+ void server.stop();
35
+ });
36
+ }
37
+ return server;
38
+ }
39
+ const runtimePackage = {
40
+ manifest: packageManifest,
41
+ createAdapter(input) {
42
+ return createAdapter({
43
+ host: input.host,
44
+ port: input.port,
45
+ config: input.config,
46
+ configPath: input.configPath,
47
+ entrypoint: input.entrypoint
48
+ });
49
+ }
50
+ };
51
+ export { ControlApiServer };
52
+ export default runtimePackage;
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,kBAAkB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC9D,OAAO,EAIL,iCAAiC,EAClC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,eAAe,GAAG,iCAAiC,CAAC,QAAqC,CAAC,CAAC;AAEjG,MAAM,UAAU,aAAa,CAAC,KAM7B;IACC,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC3C,OAAO;QACL,KAAK,CAAC,KAAK;YACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,OAAO;gBACL,SAAS,EAAE,GAAG;oBACZ,CAAC,CAAC,CAAC;4BACC,QAAQ,EAAE,MAAM;4BAChB,GAAG;4BACH,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE;4BAC3B,QAAQ,EAAE;gCACR,gBAAgB,EAAE,eAAe,CAAC,EAAE;6BACrC;yBACF,CAAC;oBACJ,CAAC,CAAC,EAAE;aACP,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI;YACR,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAOpC;IACC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;QAC1B,KAAK,KAAK,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YACxC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,cAAc,GAA6B;IAC/C,QAAQ,EAAE,eAAe;IACzB,aAAa,CAAC,KAAK;QACjB,OAAO,aAAa,CAAC;YACnB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAC5B,eAAe,cAAc,CAAC"}
@@ -0,0 +1,34 @@
1
+ interface ControlApiServerOptions {
2
+ host: string;
3
+ port: number;
4
+ config?: Record<string, unknown>;
5
+ configPath?: string;
6
+ entrypoint: string;
7
+ }
8
+ export declare class ControlApiServer {
9
+ private readonly options;
10
+ private readonly apiToken;
11
+ private readonly configPath;
12
+ private readonly temporaryConfigRoot;
13
+ private readonly controlPlane;
14
+ private readonly server;
15
+ private activePort;
16
+ private controlPlaneStarted;
17
+ private exposure;
18
+ constructor(options: ControlApiServerOptions);
19
+ start(): Promise<void>;
20
+ stop(): Promise<void>;
21
+ getUrl(): string | null;
22
+ getApiToken(): string;
23
+ private loadConfig;
24
+ private cleanupTemporaryConfig;
25
+ private loadApiConfig;
26
+ private prepareConfigPath;
27
+ private handle;
28
+ private handleApiRoute;
29
+ private handleApiGet;
30
+ private handleApiPost;
31
+ private buildState;
32
+ private listen;
33
+ }
34
+ export {};
package/dist/server.js ADDED
@@ -0,0 +1,503 @@
1
+ import { mkdtempSync, readFileSync, rmSync } from 'node:fs';
2
+ import { randomUUID } from 'node:crypto';
3
+ import { createServer } from 'node:http';
4
+ import { tmpdir } from 'node:os';
5
+ import { join } from 'node:path';
6
+ import { URL } from 'node:url';
7
+ import { assertJsonContentType, isLoopback, readJsonBody, readRawBody, respondJson, securityHeaders } from './http.js';
8
+ import { JsonBodyError } from '@moorline/control-api/errors.js';
9
+ import { configuredApiAdapterConfig, defaultAdminConfig, defaultHttpApiAdapterConfig, defaultMainProcessConfig, defaultNamespaceNames, formatManagementHttpUrl, parseHttpApiAdapterConfig } from '@moorline/core/types/config.js';
10
+ import { loadMoorlineConfig, resolveConfigPath, saveMoorlineConfig } from '@moorline/core/core/system/config/configStore.js';
11
+ import { redactSensitiveText } from '@moorline/core/core/shared/utils/payloadRedaction.js';
12
+ import { ControlPlane } from '@moorline/core/app/control-api/services/controlPlane.js';
13
+ import { projectConfigureState, projectOperationsState } from '@moorline/control-api/contracts/api.js';
14
+ import { parseHistoryDiffQuery, parseHistoryShowQuery, parseControlApiPostRoute, parsePendingInspectQuery } from '@moorline/control-api/contracts/routes.js';
15
+ function parseBearerToken(request) {
16
+ const header = request.headers.authorization;
17
+ if (typeof header !== 'string') {
18
+ return null;
19
+ }
20
+ const match = header.match(/^Bearer\s+(.+)$/iu);
21
+ return match?.[1]?.trim() || null;
22
+ }
23
+ export class ControlApiServer {
24
+ options;
25
+ apiToken = process.env.MOORLINE_API_TOKEN?.trim() || randomUUID();
26
+ configPath;
27
+ temporaryConfigRoot = null;
28
+ controlPlane;
29
+ server = createServer(async (request, response) => {
30
+ try {
31
+ await this.handle(request, response);
32
+ }
33
+ catch (error) {
34
+ if (error instanceof JsonBodyError) {
35
+ respondJson(response, error.statusCode, { error: redactSensitiveText(error.message) });
36
+ return;
37
+ }
38
+ const name = error instanceof Error ? error.name : 'UnknownError';
39
+ const detail = redactSensitiveText(error instanceof Error ? error.message : String(error));
40
+ globalThis.console.error('[moorline:control-api] request failed', { name, detail });
41
+ respondJson(response, 500, { error: detail || 'Internal server error.', detail, name });
42
+ }
43
+ });
44
+ activePort = null;
45
+ controlPlaneStarted = false;
46
+ exposure = 'loopback';
47
+ constructor(options) {
48
+ this.options = options;
49
+ const preparedConfig = this.prepareConfigPath(options);
50
+ this.configPath = preparedConfig.configPath;
51
+ this.temporaryConfigRoot = preparedConfig.temporaryConfigRoot;
52
+ this.controlPlane = new ControlPlane({
53
+ configPath: this.configPath,
54
+ entrypoint: options.entrypoint
55
+ });
56
+ }
57
+ async start() {
58
+ if (this.activePort !== null) {
59
+ return;
60
+ }
61
+ const api = this.loadApiConfig();
62
+ if (api?.enabled === false) {
63
+ return;
64
+ }
65
+ if (api?.tls?.enabled) {
66
+ throw new Error('official/http tls.enabled is not supported by the built-in HTTP API adapter.');
67
+ }
68
+ this.exposure = api?.exposure ?? 'loopback';
69
+ await this.controlPlane.start();
70
+ this.controlPlaneStarted = true;
71
+ try {
72
+ await this.listen(this.options.port).catch(async (error) => {
73
+ const code = error && typeof error === 'object' && 'code' in error ? error.code : null;
74
+ if (code === 'EADDRINUSE' && this.options.port !== 0) {
75
+ await this.listen(0);
76
+ return;
77
+ }
78
+ throw error;
79
+ });
80
+ }
81
+ catch (error) {
82
+ await this.stop();
83
+ throw error;
84
+ }
85
+ }
86
+ async stop() {
87
+ if (this.activePort === null && !this.controlPlaneStarted) {
88
+ this.cleanupTemporaryConfig();
89
+ return;
90
+ }
91
+ if (this.controlPlaneStarted) {
92
+ await this.controlPlane.stop();
93
+ this.controlPlaneStarted = false;
94
+ }
95
+ if (this.activePort !== null) {
96
+ await new Promise((resolve, reject) => {
97
+ this.server.close((error) => {
98
+ if (error) {
99
+ reject(error);
100
+ return;
101
+ }
102
+ resolve();
103
+ });
104
+ });
105
+ this.activePort = null;
106
+ }
107
+ this.cleanupTemporaryConfig();
108
+ }
109
+ getUrl() {
110
+ if (this.activePort === null) {
111
+ return null;
112
+ }
113
+ return formatManagementHttpUrl(this.options.host, this.activePort);
114
+ }
115
+ getApiToken() {
116
+ return this.apiToken;
117
+ }
118
+ loadConfig() {
119
+ return loadMoorlineConfig(this.configPath);
120
+ }
121
+ cleanupTemporaryConfig() {
122
+ if (this.temporaryConfigRoot) {
123
+ rmSync(this.temporaryConfigRoot, { recursive: true, force: true });
124
+ }
125
+ }
126
+ loadApiConfig() {
127
+ if (this.options.config) {
128
+ return parseHttpApiAdapterConfig(this.options.config);
129
+ }
130
+ return configuredApiAdapterConfig(this.loadConfig());
131
+ }
132
+ prepareConfigPath(options) {
133
+ if (options.configPath) {
134
+ return {
135
+ configPath: resolveConfigPath(options.configPath),
136
+ temporaryConfigRoot: null
137
+ };
138
+ }
139
+ const root = mkdtempSync(join(tmpdir(), 'moorline-http-adapter-'));
140
+ const configPath = join(root, 'config.json');
141
+ const adapterConfig = options.config ?? { ...defaultHttpApiAdapterConfig() };
142
+ const config = {
143
+ version: 4,
144
+ runtimeRoot: join(root, 'runtime'),
145
+ admin: defaultAdminConfig(),
146
+ main: defaultMainProcessConfig(),
147
+ defaults: {
148
+ runtimeMode: 'full-access',
149
+ model: 'latest'
150
+ },
151
+ surface: defaultNamespaceNames(),
152
+ setup: {
153
+ completed: false
154
+ },
155
+ surfaces: {
156
+ apiAdapter: {
157
+ activePackageId: 'official/http',
158
+ config: adapterConfig,
159
+ configByPackageId: {}
160
+ },
161
+ transport: {
162
+ activePackageId: null,
163
+ config: {},
164
+ configByPackageId: {}
165
+ },
166
+ provider: {
167
+ activePackageId: null,
168
+ config: {},
169
+ configByPackageId: {}
170
+ },
171
+ plugins: {
172
+ enabledPackageIds: [],
173
+ configByPackageId: {}
174
+ },
175
+ skills: {
176
+ enabledPackageIds: [],
177
+ configByPackageId: {}
178
+ }
179
+ }
180
+ };
181
+ saveMoorlineConfig(config, configPath);
182
+ return {
183
+ configPath,
184
+ temporaryConfigRoot: root
185
+ };
186
+ }
187
+ async handle(request, response) {
188
+ if (this.exposure !== 'remote' && !isLoopback(request)) {
189
+ respondJson(response, 403, { error: 'Control API only accepts loopback connections.' });
190
+ return;
191
+ }
192
+ const url = new URL(request.url ?? '/', this.getUrl() ?? formatManagementHttpUrl(this.options.host, this.options.port));
193
+ if (request.method === 'GET' && url.pathname === '/healthz') {
194
+ respondJson(response, 200, {
195
+ ok: true,
196
+ mode: this.controlPlane.mode(),
197
+ url: this.getUrl(),
198
+ tokenAvailable: true
199
+ });
200
+ return;
201
+ }
202
+ if (url.pathname === '/') {
203
+ respondJson(response, 200, {
204
+ ok: true,
205
+ name: 'Moorline HTTP API adapter',
206
+ health: '/healthz',
207
+ api: '/api/state'
208
+ });
209
+ return;
210
+ }
211
+ if (url.pathname.startsWith('/api/')) {
212
+ if (parseBearerToken(request) !== this.apiToken) {
213
+ respondJson(response, 401, { error: 'Control API requires a bearer token.' });
214
+ return;
215
+ }
216
+ await this.handleApiRoute(request, response, url);
217
+ return;
218
+ }
219
+ respondJson(response, 404, { error: 'Not found' });
220
+ }
221
+ async handleApiRoute(request, response, url) {
222
+ const method = (request.method ?? 'GET').toUpperCase();
223
+ if (method === 'GET') {
224
+ await this.handleApiGet(response, url);
225
+ return;
226
+ }
227
+ if (method !== 'POST') {
228
+ respondJson(response, 405, { error: 'Method not allowed.' });
229
+ return;
230
+ }
231
+ if (url.pathname === '/api/management/import') {
232
+ const force = url.searchParams.get('force') === '1';
233
+ const body = await readRawBody(request, { errorLabel: 'backup archive' });
234
+ const payload = await this.controlPlane.importBackupArchive({ archiveBytes: body, force });
235
+ respondJson(response, 200, payload);
236
+ return;
237
+ }
238
+ assertJsonContentType(request, url.pathname);
239
+ const body = await readJsonBody(request);
240
+ const payload = await this.handleApiPost(request, url.pathname, body);
241
+ respondJson(response, 200, payload === undefined ? { ok: true } : payload);
242
+ }
243
+ async handleApiGet(response, url) {
244
+ if (url.pathname === '/api/state') {
245
+ respondJson(response, 200, await this.buildState());
246
+ return;
247
+ }
248
+ if (url.pathname === '/api/main/status') {
249
+ respondJson(response, 200, await this.controlPlane.mainStatus());
250
+ return;
251
+ }
252
+ if (url.pathname === '/api/state/operations') {
253
+ respondJson(response, 200, (await this.buildState()).operations);
254
+ return;
255
+ }
256
+ if (url.pathname === '/api/state/configure') {
257
+ respondJson(response, 200, (await this.buildState()).configure);
258
+ return;
259
+ }
260
+ if (url.pathname === '/api/packages/catalog') {
261
+ const state = await this.buildState();
262
+ respondJson(response, 200, state.configure.packages.catalog);
263
+ return;
264
+ }
265
+ if (url.pathname === '/api/packages/search') {
266
+ respondJson(response, 200, await this.controlPlane.searchPackages(parsePackageSearchQuery(url)));
267
+ return;
268
+ }
269
+ if (url.pathname === '/api/packages/info') {
270
+ respondJson(response, 200, await this.controlPlane.packageInfo(parsePackageInfoQuery(url)));
271
+ return;
272
+ }
273
+ if (url.pathname === '/api/packages/installed') {
274
+ const state = await this.buildState();
275
+ respondJson(response, 200, state.configure.packages.installed);
276
+ return;
277
+ }
278
+ if (url.pathname === '/api/history/status') {
279
+ const state = await this.buildState();
280
+ respondJson(response, 200, state.configure.history.status);
281
+ return;
282
+ }
283
+ if (url.pathname === '/api/history/list') {
284
+ const state = await this.buildState();
285
+ respondJson(response, 200, state.configure.history.entries);
286
+ return;
287
+ }
288
+ if (url.pathname === '/api/history/show') {
289
+ const { commitish } = parseHistoryShowQuery(url);
290
+ respondJson(response, 200, this.controlPlane.showHistoryEntry(commitish));
291
+ return;
292
+ }
293
+ if (url.pathname === '/api/history/diff') {
294
+ const { from, to, path } = parseHistoryDiffQuery(url);
295
+ respondJson(response, 200, this.controlPlane.diffHistory({ from, to, path }));
296
+ return;
297
+ }
298
+ if (url.pathname === '/api/pending-requests/list') {
299
+ respondJson(response, 200, this.controlPlane.listPendingRequests());
300
+ return;
301
+ }
302
+ if (url.pathname === '/api/pending-requests/inspect') {
303
+ const { requestId } = parsePendingInspectQuery(url);
304
+ const payload = this.controlPlane.listPendingRequests();
305
+ if (!Array.isArray(payload)) {
306
+ throw new JsonBodyError(500, 'Pending requests response was malformed.');
307
+ }
308
+ const request = payload.find((entry) => {
309
+ if (!entry || typeof entry !== 'object') {
310
+ return false;
311
+ }
312
+ return entry.id === requestId;
313
+ });
314
+ if (!request) {
315
+ throw new JsonBodyError(404, `Pending request ${requestId} was not found.`);
316
+ }
317
+ respondJson(response, 200, request);
318
+ return;
319
+ }
320
+ if (url.pathname === '/api/management/diagnostics-export') {
321
+ respondJson(response, 200, this.controlPlane.diagnosticsExport());
322
+ return;
323
+ }
324
+ if (url.pathname === '/api/management/setup-export') {
325
+ const body = JSON.stringify(this.controlPlane.exportSetupBundle(), null, 2);
326
+ response.writeHead(200, {
327
+ 'content-type': 'application/json; charset=utf-8',
328
+ 'cache-control': 'no-store',
329
+ 'content-disposition': 'attachment; filename="moorline-setup.share.json"',
330
+ ...securityHeaders()
331
+ });
332
+ response.end(body);
333
+ return;
334
+ }
335
+ if (url.pathname === '/api/management/backup') {
336
+ const includeWorkspaces = url.searchParams.get('includeWorkspaces') === '1';
337
+ const archive = await this.controlPlane.createBackupArchive({ includeWorkspaces });
338
+ const bytes = readFileSync(archive.archivePath);
339
+ response.writeHead(200, {
340
+ 'content-type': 'application/gzip',
341
+ 'cache-control': 'no-store',
342
+ 'content-disposition': `attachment; filename="${archive.filename}"`,
343
+ ...securityHeaders()
344
+ });
345
+ response.end(bytes);
346
+ return;
347
+ }
348
+ respondJson(response, 404, { error: 'Not found' });
349
+ }
350
+ async handleApiPost(request, pathname, body) {
351
+ const route = parseControlApiPostRoute(pathname, body);
352
+ switch (route.path) {
353
+ case '/api/main/start':
354
+ return await this.controlPlane.startMain();
355
+ case '/api/main/stop':
356
+ return await this.controlPlane.stopMain();
357
+ case '/api/main/restart':
358
+ return await this.controlPlane.restartMain();
359
+ case '/api/shutdown':
360
+ globalThis.setTimeout(() => {
361
+ void this.stop();
362
+ }, 10);
363
+ return {
364
+ accepted: true,
365
+ detail: 'Control API shutdown requested.'
366
+ };
367
+ case '/api/leases/create':
368
+ return await this.controlPlane.createLease({
369
+ client: route.payload.client ?? 'unknown-client',
370
+ policy: route.payload.policy ?? 'detached',
371
+ ttlMs: route.payload.ttlMs
372
+ });
373
+ case '/api/leases/heartbeat':
374
+ return await this.controlPlane.heartbeatLease(route.payload);
375
+ case '/api/leases/release':
376
+ return await this.controlPlane.releaseLease(route.payload.leaseId);
377
+ case '/api/runtime/accepting':
378
+ return await this.controlPlane.setAcceptingNewWork(Boolean(route.payload.accepting));
379
+ case '/api/runtime/reload':
380
+ return await this.controlPlane.requestRuntimeReload(route.payload.mode === 'force' ? 'force' : 'graceful');
381
+ case '/api/provider/test':
382
+ return await this.controlPlane.testProvider(route.payload);
383
+ case '/api/provider/start':
384
+ return await this.controlPlane.startProvider(typeof route.payload.threadId === 'string' ? route.payload.threadId : undefined);
385
+ case '/api/provider/stop':
386
+ return await this.controlPlane.stopProvider(typeof route.payload.threadId === 'string' ? route.payload.threadId : undefined);
387
+ case '/api/work/session/create':
388
+ return await this.controlPlane.createSession(route.payload);
389
+ case '/api/work/session/direct':
390
+ return await this.controlPlane.directSession(route.payload);
391
+ case '/api/work/session/archive':
392
+ return await this.controlPlane.archiveSession(route.payload);
393
+ case '/api/work/session/delete':
394
+ return await this.controlPlane.deleteArchivedSession(route.payload);
395
+ case '/api/work/mission/create':
396
+ return await this.controlPlane.createMission(route.payload);
397
+ case '/api/work/mission/pause':
398
+ return await this.controlPlane.pauseMission(route.payload);
399
+ case '/api/work/mission/resume':
400
+ return await this.controlPlane.resumeMission(route.payload);
401
+ case '/api/work/mission/stop':
402
+ return await this.controlPlane.stopMission(route.payload);
403
+ case '/api/work/mission/run':
404
+ return await this.controlPlane.runMissionNow(route.payload);
405
+ case '/api/work/mission/archive':
406
+ return await this.controlPlane.archiveMission(route.payload);
407
+ case '/api/work/mission/delete':
408
+ return await this.controlPlane.deleteArchivedMission(route.payload);
409
+ case '/api/packages/install':
410
+ return this.controlPlane.installPackage(route.payload);
411
+ case '/api/packages/remove':
412
+ return this.controlPlane.removePackage(route.payload);
413
+ case '/api/packages/enable':
414
+ return this.controlPlane.enablePackage(route.payload);
415
+ case '/api/packages/disable':
416
+ return this.controlPlane.disablePackage(route.payload);
417
+ case '/api/packages/activate':
418
+ return this.controlPlane.activatePackage(route.payload);
419
+ case '/api/packages/deactivate':
420
+ return this.controlPlane.deactivatePackage(route.payload);
421
+ case '/api/packages/select':
422
+ return this.controlPlane.selectPackage(route.payload);
423
+ case '/api/packages/config':
424
+ return this.controlPlane.setPackageConfig(route.payload);
425
+ case '/api/packages/apply':
426
+ return await this.controlPlane.applyPackages();
427
+ case '/api/history/snapshot':
428
+ return this.controlPlane.createHistorySnapshot(String(route.payload.label ?? 'snapshot'));
429
+ case '/api/history/restore':
430
+ return this.controlPlane.restoreHistory(route.payload);
431
+ case '/api/history/discard':
432
+ return this.controlPlane.discardHistory(route.payload);
433
+ case '/api/pending-requests/resolve':
434
+ return await this.controlPlane.resolvePendingRequest(route.payload);
435
+ case '/api/pending-requests/answer':
436
+ return await this.controlPlane.answerPendingRequest(route.payload);
437
+ case '/api/pending-requests/cancel':
438
+ return await this.controlPlane.cancelPendingRequest(route.payload);
439
+ case '/api/management/default-model':
440
+ return await this.controlPlane.setDefaultModel(String(route.payload.model ?? ''));
441
+ case '/api/management/config-migration-warning/acknowledge':
442
+ return this.controlPlane.acknowledgeConfigMigrationWarning();
443
+ default:
444
+ throw new JsonBodyError(404, 'Not found');
445
+ }
446
+ }
447
+ async buildState() {
448
+ const readModel = this.controlPlane.readModel();
449
+ return {
450
+ generatedAt: new Date().toISOString(),
451
+ runtimeMode: this.controlPlane.mode(),
452
+ readModel,
453
+ operations: projectOperationsState(readModel),
454
+ configure: projectConfigureState(readModel)
455
+ };
456
+ }
457
+ async listen(port) {
458
+ await new Promise((resolve, reject) => {
459
+ const onError = (error) => {
460
+ this.server.off('listening', onListening);
461
+ reject(error);
462
+ };
463
+ const onListening = () => {
464
+ this.server.off('error', onError);
465
+ const address = this.server.address();
466
+ this.activePort = typeof address === 'object' && address ? address.port : port;
467
+ resolve();
468
+ };
469
+ this.server.once('error', onError);
470
+ this.server.once('listening', onListening);
471
+ this.server.listen(port, this.options.host);
472
+ });
473
+ }
474
+ }
475
+ function parsePackageKindQuery(value) {
476
+ if (!value) {
477
+ return undefined;
478
+ }
479
+ if (value === 'api-adapter' || value === 'transport' || value === 'provider' || value === 'plugin' || value === 'skill' || value === 'bundle') {
480
+ return value;
481
+ }
482
+ throw new JsonBodyError(422, 'kind must be one of: api-adapter, transport, provider, plugin, skill, bundle.');
483
+ }
484
+ function parsePackageSearchQuery(url) {
485
+ const query = url.searchParams.get('q')?.trim();
486
+ const compatibleOnly = url.searchParams.get('compatibleOnly');
487
+ return {
488
+ ...(query ? { query } : {}),
489
+ ...(parsePackageKindQuery(url.searchParams.get('kind')) ? { kind: parsePackageKindQuery(url.searchParams.get('kind')) } : {}),
490
+ ...(compatibleOnly ? { compatibleOnly: compatibleOnly === 'true' } : {})
491
+ };
492
+ }
493
+ function parsePackageInfoQuery(url) {
494
+ const packageId = url.searchParams.get('packageId')?.trim();
495
+ if (!packageId) {
496
+ throw new JsonBodyError(422, 'packageId is required.');
497
+ }
498
+ return {
499
+ packageId,
500
+ ...(parsePackageKindQuery(url.searchParams.get('kind')) ? { kind: parsePackageKindQuery(url.searchParams.get('kind')) } : {})
501
+ };
502
+ }
503
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../src/server.ts"],"names":[],"mappings":"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"}
package/index.mjs ADDED
@@ -0,0 +1,2 @@
1
+ export * from './dist/index.js';
2
+ export { default } from './dist/index.js';
package/manifest.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "id": "official/http",
3
+ "name": "official/http",
4
+ "version": "0.0.1",
5
+ "type": "api-adapter",
6
+ "description": "Official HTTP Control API adapter.",
7
+ "entrypoint": "index.mjs",
8
+ "displayCategory": "Official API Adapters",
9
+ "activation": {
10
+ "uniqueKey": "api-adapter"
11
+ },
12
+ "configSchema": {
13
+ "type": "object",
14
+ "properties": {
15
+ "host": {
16
+ "type": "string",
17
+ "title": "Host",
18
+ "description": "HTTP bind host.",
19
+ "default": "127.0.0.1"
20
+ },
21
+ "port": {
22
+ "type": "number",
23
+ "title": "Port",
24
+ "description": "HTTP bind port.",
25
+ "default": 45173
26
+ },
27
+ "exposure": {
28
+ "type": "string",
29
+ "title": "Exposure",
30
+ "description": "Use loopback by default; remote is intended for reverse-proxy deployments.",
31
+ "default": "loopback",
32
+ "enum": ["loopback", "remote"]
33
+ }
34
+ }
35
+ }
36
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "name": "official/http",
4
+ "description": "Official HTTP adapter for the Moorline Control API.",
5
+ "version": "0.0.1",
6
+ "display": {
7
+ "name": "HTTP API Adapter",
8
+ "description": "Expose Moorline control over HTTP with bearer-token auth.",
9
+ "version": "0.0.1",
10
+ "category": "Official API Adapters",
11
+ "tags": ["official", "http", "control-api"],
12
+ "publisher": "Moorline"
13
+ },
14
+ "distribution": {
15
+ "audiences": ["setup", "catalog"],
16
+ "recommendedForSetup": true,
17
+ "setupOrder": 5
18
+ },
19
+ "compatibility": {
20
+ "moorline": "~0.0.1"
21
+ },
22
+ "release": {
23
+ "recommendedRef": "v0.0.1",
24
+ "channel": "stable"
25
+ }
26
+ }
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@moorline/http",
3
+ "version": "0.0.1",
4
+ "description": "Official Moorline HTTP API adapter",
5
+ "type": "module",
6
+ "private": false,
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "default": "./dist/index.js"
13
+ },
14
+ "./server.js": {
15
+ "types": "./dist/server.d.ts",
16
+ "default": "./dist/server.js"
17
+ },
18
+ "./server": {
19
+ "types": "./dist/server.d.ts",
20
+ "default": "./dist/server.js"
21
+ }
22
+ },
23
+ "files": [
24
+ "dist",
25
+ "index.mjs",
26
+ "manifest.json",
27
+ "moorline.dist.json"
28
+ ],
29
+ "publishConfig": {
30
+ "access": "public"
31
+ },
32
+ "scripts": {
33
+ "build": "node ../../scripts/clean-package-dist.mjs http && tsc -p tsconfig.json && node ../../scripts/flatten-package-dist.mjs http",
34
+ "typecheck": "tsc --noEmit -p tsconfig.json"
35
+ },
36
+ "dependencies": {
37
+ "@moorline/contracts": "0.0.1",
38
+ "@moorline/core": "0.0.1",
39
+ "@moorline/control-api": "0.0.1"
40
+ },
41
+ "moorline": {
42
+ "schemaVersion": 1,
43
+ "packageId": "official/http",
44
+ "kind": "api-adapter",
45
+ "manifestPath": "manifest.json",
46
+ "distroPath": "moorline.dist.json"
47
+ },
48
+ "license": "MIT",
49
+ "repository": {
50
+ "type": "git",
51
+ "url": "git+ssh://git@github.com/Moorline/moorline.git",
52
+ "directory": "packages/http"
53
+ }
54
+ }