@melra/http-runtime 0.3.0-alpha.11 → 0.3.0-alpha.12
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/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/dist/index.test.d.ts +0 -2
- package/dist/index.test.d.ts.map +0 -1
- package/dist/index.test.js +0 -119
- package/dist/index.test.js.map +0 -1
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD;;;OAGG;IACH,WAAW,CAAC,EAAE,gBAAgB,CAAC;CAChC;AAED;;;;;;;;GAQG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,kBAAkB;IAElD,OAAO,CACX,SAAS,EAAE,aAAa,EACxB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD;;;OAGG;IACH,WAAW,CAAC,EAAE,gBAAgB,CAAC;CAChC;AAED;;;;;;;;GAQG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,kBAAkB;IAElD,OAAO,CACX,SAAS,EAAE,aAAa,EACxB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CA8IpC"}
|
package/dist/index.js
CHANGED
|
@@ -69,6 +69,13 @@ export class HttpRuntime {
|
|
|
69
69
|
// address the socket went to, or pinning would break every https URL.
|
|
70
70
|
...(secure ? { servername: url.hostname } : {}),
|
|
71
71
|
timeout: operation.timeoutMs,
|
|
72
|
+
// A fresh connection per effect, never one from Node's keep-alive
|
|
73
|
+
// pool. A pooled socket the server has already closed takes the whole
|
|
74
|
+
// request and then resets, and below that reads as "the far end may
|
|
75
|
+
// have acted" — a request that never reached anyone parked for
|
|
76
|
+
// reconciliation. On a connection of its own, a reset after the write
|
|
77
|
+
// really is an unknown outcome.
|
|
78
|
+
agent: false,
|
|
72
79
|
}, (response) => {
|
|
73
80
|
const chunks = [];
|
|
74
81
|
let bytes = 0;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,sCAAsC;AAEtC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AAGrD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EACL,qBAAqB,EACrB,iBAAiB,GAGlB,MAAM,oBAAoB,CAAC;AAU5B;;;;;;;;GAQG;AACH,MAAM,OAAO,WAAW;IACO;IAA7B,YAA6B,OAA2B;QAA3B,YAAO,GAAP,OAAO,CAAoB;IAAG,CAAC;IAE5D,KAAK,CAAC,OAAO,CACX,SAAwB,EACxB,MAAoB;QAEpB,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,MAAM,qBAAqB,CAClD,SAAS,CAAC,GAAG,EACb,IAAI,CAAC,OAAO,CACb,CAAC;QACF,0EAA0E;QAC1E,0EAA0E;QAC1E,4CAA4C;QAC5C,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;QACjD,uEAAuE;QACvE,wEAAwE;QACxE,yEAAyE;QACzE,yBAAyB;QACzB,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC;YAC1D,IAAI,EAAE,GAAG,CAAC,QAAQ;YAClB,UAAU;YACV,MAAM;SACP,CAAC,CAAC;QAEH,MAAM,OAAO,GAA2B;YACtC,yEAAyE;YACzE,0EAA0E;YAC1E,uEAAuE;YACvE,GAAG,MAAM,CAAC,WAAW,CACnB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC7D,IAAI,CAAC,WAAW,EAAE;gBAClB,KAAK;aACN,CAAC,CACH;YACD,uEAAuE;YACvE,sCAAsC;YACtC,GAAG,QAAQ,EAAE,OAAO;YACpB,yEAAyE;YACzE,sEAAsE;YACtE,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,GAAG,CAAC,SAAS,CAAC,cAAc,KAAK,SAAS;gBACxC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,iBAAiB,EAAE,SAAS,CAAC,cAAc,EAAE,CAAC;SACrD,CAAC;QACF,IAAI,SAAS,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3E,CAAC;QAED,OAAO,MAAM,IAAI,OAAO,CAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACpE,MAAM,IAAI,GAAG,IAAI,CACf;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC9D,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,IAAI,EAAE,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE;gBACpC,OAAO;gBACP,kEAAkE;gBAClE,sEAAsE;gBACtE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,OAAO,EAAE,SAAS,CAAC,SAAS;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@melra/http-runtime",
|
|
3
|
-
"version": "0.3.0-alpha.
|
|
3
|
+
"version": "0.3.0-alpha.12",
|
|
4
4
|
"description": "HTTP/API reference effect adapter for the MELRA kernel.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -21,13 +21,13 @@
|
|
|
21
21
|
"dist"
|
|
22
22
|
],
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@melra/policy-core": "0.3.0-alpha.
|
|
25
|
-
"@melra/protocol": "0.3.0-alpha.
|
|
24
|
+
"@melra/policy-core": "0.3.0-alpha.12",
|
|
25
|
+
"@melra/protocol": "0.3.0-alpha.12"
|
|
26
26
|
},
|
|
27
27
|
"scripts": {
|
|
28
28
|
"build": "tsc -p tsconfig.json",
|
|
29
29
|
"clean": "rm -rf dist",
|
|
30
30
|
"test": "vitest run",
|
|
31
|
-
"typecheck": "tsc -p tsconfig.json
|
|
31
|
+
"typecheck": "tsc -p tsconfig.test.json"
|
|
32
32
|
}
|
|
33
33
|
}
|
package/dist/index.test.d.ts
DELETED
package/dist/index.test.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
|
package/dist/index.test.js
DELETED
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
// Copyright 2026 XAGI Labs Private Limited
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import { createServer } from "node:http";
|
|
4
|
-
import { afterAll, beforeAll, describe, expect, it } from "vitest";
|
|
5
|
-
import { HttpOperationSchema } from "@melra/protocol";
|
|
6
|
-
import { HttpRuntime } from "./index.js";
|
|
7
|
-
let server;
|
|
8
|
-
let origin;
|
|
9
|
-
/** Last request the fixture saw, so header and body handling is assertable. */
|
|
10
|
-
let seen;
|
|
11
|
-
beforeAll(async () => {
|
|
12
|
-
server = createServer((req, res) => {
|
|
13
|
-
const chunks = [];
|
|
14
|
-
req.on("data", (chunk) => chunks.push(chunk));
|
|
15
|
-
req.on("end", () => {
|
|
16
|
-
seen = {
|
|
17
|
-
method: req.method ?? "",
|
|
18
|
-
url: req.url ?? "",
|
|
19
|
-
headers: req.headers,
|
|
20
|
-
body: Buffer.concat(chunks).toString("utf8"),
|
|
21
|
-
};
|
|
22
|
-
if (req.url === "/teapot") {
|
|
23
|
-
res.writeHead(418).end("no coffee");
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
if (req.url === "/big") {
|
|
27
|
-
res.writeHead(200).end("x".repeat(50_000));
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
// Accepts the request and never answers, which is the case MELRA must not
|
|
31
|
-
// report as "the effect did not happen".
|
|
32
|
-
if (req.url === "/silent")
|
|
33
|
-
return;
|
|
34
|
-
res.writeHead(201, { "content-type": "application/json" });
|
|
35
|
-
res.end(JSON.stringify({ created: true }));
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
39
|
-
origin = `http://127.0.0.1:${server.address().port}`;
|
|
40
|
-
});
|
|
41
|
-
afterAll(async () => {
|
|
42
|
-
await new Promise((resolve) => server.close(() => resolve()));
|
|
43
|
-
});
|
|
44
|
-
const runtime = () => new HttpRuntime({ allowedDomains: ["*"], allowLocalhost: true });
|
|
45
|
-
const operation = (fields) => HttpOperationSchema.parse({ kind: "http", action: "request", ...fields });
|
|
46
|
-
describe("http runtime", () => {
|
|
47
|
-
it("posts a body and reports the response status", async () => {
|
|
48
|
-
const result = await runtime().execute(operation({
|
|
49
|
-
method: "POST",
|
|
50
|
-
url: `${origin}/orders`,
|
|
51
|
-
content: JSON.stringify({ item: "widget" }),
|
|
52
|
-
headers: { "content-type": "application/json" },
|
|
53
|
-
idempotencyKey: "order-42",
|
|
54
|
-
}));
|
|
55
|
-
expect(seen.method).toBe("POST");
|
|
56
|
-
expect(seen.body).toBe('{"item":"widget"}');
|
|
57
|
-
expect(seen.headers["idempotency-key"]).toBe("order-42");
|
|
58
|
-
expect(result.status).toBe(201);
|
|
59
|
-
expect(result.success).toBe(true);
|
|
60
|
-
expect(result.content).toBe('{"created":true}');
|
|
61
|
-
});
|
|
62
|
-
it("reports a failing status as an unsuccessful effect", async () => {
|
|
63
|
-
const result = await runtime().execute(operation({ url: `${origin}/teapot` }));
|
|
64
|
-
expect(result.status).toBe(418);
|
|
65
|
-
// The adapter never asserts its own success: a 418 is a completed call and
|
|
66
|
-
// a failed effect, and verification is what turns that into `partial`.
|
|
67
|
-
expect(result.success).toBe(false);
|
|
68
|
-
});
|
|
69
|
-
it("stops reading a body past the cap instead of buffering it", async () => {
|
|
70
|
-
const result = await runtime().execute(operation({ url: `${origin}/big`, maxResponseBytes: 1_000 }));
|
|
71
|
-
expect(result.truncated).toBe(true);
|
|
72
|
-
expect(String(result.content).length).toBeLessThan(50_000);
|
|
73
|
-
});
|
|
74
|
-
it("refuses a private destination before any socket opens", async () => {
|
|
75
|
-
const guarded = new HttpRuntime({
|
|
76
|
-
allowedDomains: ["*"],
|
|
77
|
-
allowLocalhost: false,
|
|
78
|
-
});
|
|
79
|
-
await expect(guarded.execute(operation({ url: "http://169.254.169.254/latest/meta-data/" }))).rejects.toThrow("destination_private_blocked");
|
|
80
|
-
});
|
|
81
|
-
it("refuses a host outside the allowlist", async () => {
|
|
82
|
-
const guarded = new HttpRuntime({
|
|
83
|
-
allowedDomains: ["example.com"],
|
|
84
|
-
allowLocalhost: false,
|
|
85
|
-
});
|
|
86
|
-
await expect(guarded.execute(operation({ url: "http://attacker.test/" }))).rejects.toThrow("destination_domain_not_allowed");
|
|
87
|
-
});
|
|
88
|
-
it("rejects an unknown field", () => {
|
|
89
|
-
expect(() => operation({ url: `${origin}/`, followRedirects: true })).toThrow();
|
|
90
|
-
});
|
|
91
|
-
it("cancels in flight when the task signal aborts", async () => {
|
|
92
|
-
const controller = new AbortController();
|
|
93
|
-
const pending = runtime().execute(operation({ url: `${origin}/orders` }), controller.signal);
|
|
94
|
-
controller.abort();
|
|
95
|
-
await expect(pending).rejects.toThrow("task_cancelled");
|
|
96
|
-
});
|
|
97
|
-
it("marks the outcome unknown when a sent request goes unanswered", async () => {
|
|
98
|
-
// The far end has the request and may already have acted on it. Claiming
|
|
99
|
-
// failure here would be the kernel asserting something it cannot know.
|
|
100
|
-
await expect(runtime().execute(operation({
|
|
101
|
-
method: "POST",
|
|
102
|
-
url: `${origin}/silent`,
|
|
103
|
-
content: "charge",
|
|
104
|
-
timeoutMs: 300,
|
|
105
|
-
}))).rejects.toThrow("effect_outcome_unknown:http_timeout");
|
|
106
|
-
});
|
|
107
|
-
it("reports a plain failure when the request never left the machine", async () => {
|
|
108
|
-
const closed = createServer();
|
|
109
|
-
await new Promise((resolve) => closed.listen(0, "127.0.0.1", resolve));
|
|
110
|
-
const port = closed.address().port;
|
|
111
|
-
await new Promise((resolve) => closed.close(() => resolve()));
|
|
112
|
-
const attempt = runtime().execute(operation({ method: "POST", url: `http://127.0.0.1:${port}/charges` }));
|
|
113
|
-
// Nothing reached a server, so this one really did not happen — and must
|
|
114
|
-
// not be parked for reconciliation.
|
|
115
|
-
await expect(attempt).rejects.toThrow(/ECONNREFUSED/);
|
|
116
|
-
await expect(attempt).rejects.not.toThrow(/effect_outcome_unknown/);
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
//# sourceMappingURL=index.test.js.map
|
package/dist/index.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
|