@browserlessapi/inferlo 0.6.0 → 0.7.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 +7 -4
- package/dist/ai/ai-sdk.d.ts +48 -0
- package/dist/ai/ai-sdk.js +235 -0
- package/dist/ai/ai-sdk.js.map +1 -0
- package/dist/ai/index.d.ts +37 -3
- package/dist/ai/index.js +96 -7
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/public.d.ts +5 -1
- package/dist/ai/public.js +2 -0
- package/dist/ai/public.js.map +1 -1
- package/dist/ai/ui.d.ts +47 -0
- package/dist/ai/ui.js +33 -0
- package/dist/ai/ui.js.map +1 -0
- package/dist/app.d.ts +31 -4
- package/dist/app.js +106 -29
- package/dist/app.js.map +1 -1
- package/dist/astro.d.ts +60 -0
- package/dist/astro.js +68 -0
- package/dist/astro.js.map +1 -0
- package/dist/audit.d.ts +8 -1
- package/dist/audit.js +9 -2
- package/dist/audit.js.map +1 -1
- package/dist/auth.d.ts +1 -0
- package/dist/auth.js +1 -0
- package/dist/auth.js.map +1 -1
- package/dist/azure.d.ts +66 -0
- package/dist/azure.js +119 -0
- package/dist/azure.js.map +1 -0
- package/dist/cache.d.ts +13 -9
- package/dist/cache.js +11 -9
- package/dist/cache.js.map +1 -1
- package/dist/cli/main.js +4 -4
- package/dist/cli/main.js.map +1 -1
- package/dist/client-ip.d.ts +36 -1
- package/dist/client-ip.js +80 -1
- package/dist/client-ip.js.map +1 -1
- package/dist/db/memory.js +2 -1
- package/dist/db/memory.js.map +1 -1
- package/dist/db/postgres.js +4 -1
- package/dist/db/postgres.js.map +1 -1
- package/dist/db/table.d.ts +37 -5
- package/dist/db/table.js +96 -15
- package/dist/db/table.js.map +1 -1
- package/dist/db/types.d.ts +2 -0
- package/dist/describe.d.ts +15 -4
- package/dist/describe.js +10 -2
- package/dist/describe.js.map +1 -1
- package/dist/events.d.ts +134 -0
- package/dist/events.js +196 -0
- package/dist/events.js.map +1 -0
- package/dist/index.d.ts +12 -5
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/jobs.d.ts +50 -10
- package/dist/jobs.js +66 -13
- package/dist/jobs.js.map +1 -1
- package/dist/langchain.d.ts +58 -0
- package/dist/langchain.js +220 -0
- package/dist/langchain.js.map +1 -0
- package/dist/model.d.ts +23 -6
- package/dist/model.js +35 -6
- package/dist/model.js.map +1 -1
- package/dist/rate-limit.d.ts +5 -3
- package/dist/rate-limit.js +3 -3
- package/dist/rate-limit.js.map +1 -1
- package/dist/redis-events.d.ts +27 -0
- package/dist/redis-events.js +163 -0
- package/dist/redis-events.js.map +1 -0
- package/dist/redis-jobs.d.ts +24 -0
- package/dist/redis-jobs.js +203 -0
- package/dist/redis-jobs.js.map +1 -0
- package/dist/redis.d.ts +30 -0
- package/dist/redis.js +106 -0
- package/dist/redis.js.map +1 -0
- package/dist/response-body.d.ts +6 -0
- package/dist/response-body.js +7 -0
- package/dist/response-body.js.map +1 -0
- package/dist/route.d.ts +14 -1
- package/dist/route.js.map +1 -1
- package/dist/schema.d.ts +2 -2
- package/dist/serve.d.ts +6 -1
- package/dist/serve.js +64 -7
- package/dist/serve.js.map +1 -1
- package/dist/service-client.d.ts +91 -0
- package/dist/service-client.js +177 -0
- package/dist/service-client.js.map +1 -0
- package/dist/sessions.d.ts +2 -0
- package/dist/sessions.js +1 -0
- package/dist/sessions.js.map +1 -1
- package/dist/tracing.d.ts +7 -3
- package/dist/tracing.js +8 -2
- package/dist/tracing.js.map +1 -1
- package/llms.txt +1 -0
- package/package.json +36 -4
- package/templates/app/AGENTS.md +5 -3
package/dist/schema.d.ts
CHANGED
|
@@ -26,8 +26,8 @@ export interface Def {
|
|
|
26
26
|
example?: unknown;
|
|
27
27
|
unique?: boolean;
|
|
28
28
|
index?: boolean;
|
|
29
|
-
/** Filled in by the framework (id, createdAt, updatedAt). Never accepted as input. */
|
|
30
|
-
system?: "id" | "createdAt" | "updatedAt";
|
|
29
|
+
/** Filled in by the framework (id, createdAt, updatedAt, and tenantId on tenant-scoped models). Never accepted as input. */
|
|
30
|
+
system?: "id" | "createdAt" | "updatedAt" | "tenantId";
|
|
31
31
|
}
|
|
32
32
|
export interface Issue {
|
|
33
33
|
path: (string | number)[];
|
package/dist/serve.d.ts
CHANGED
|
@@ -24,6 +24,11 @@ export interface NodeRequest {
|
|
|
24
24
|
* array. Used instead of the stream. Instances of other classes are ignored and the stream is read.
|
|
25
25
|
*/
|
|
26
26
|
body?: unknown;
|
|
27
|
+
/**
|
|
28
|
+
* The exact bytes of a body the host already read, as Google Cloud Run functions (the Functions Framework)
|
|
29
|
+
* and Firebase set them. Preferred over body when present, so forms and JSON reach the app unchanged.
|
|
30
|
+
*/
|
|
31
|
+
rawBody?: unknown;
|
|
27
32
|
[Symbol.asyncIterator](): AsyncIterator<unknown>;
|
|
28
33
|
}
|
|
29
34
|
/** The parts of a Node.js http.ServerResponse that Inferlo writes to. */
|
|
@@ -78,5 +83,5 @@ export declare function writeResponse(res: NodeResponse, response: Response, met
|
|
|
78
83
|
*/
|
|
79
84
|
export declare function toNodeHandler(app: Pick<App<any>, "fetch">, options?: NodeHandlerOptions): NodeHandler;
|
|
80
85
|
export declare function serve(app: Pick<App<any>, "fetch">, options?: ServeOptions): Promise<Server>;
|
|
81
|
-
/** Closes every open connection of a
|
|
86
|
+
/** Closes every open connection of a server from serve() (Node.js, Bun and Deno), for app.close() after its timeout. */
|
|
82
87
|
export declare const forceClosers: WeakMap<Server, () => void>;
|
package/dist/serve.js
CHANGED
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
import { createRedactor } from "./redact.js";
|
|
9
9
|
import { appAnswers } from "./request-matcher.js";
|
|
10
10
|
import { InferloError } from "./errors.js";
|
|
11
|
-
import { clientIps } from "./client-ip.js";
|
|
11
|
+
import { clientIps, clientSignals } from "./client-ip.js";
|
|
12
|
+
import { knownBodies } from "./response-body.js";
|
|
12
13
|
export function normalizePrefix(prefix) {
|
|
13
14
|
if (!prefix || prefix === "/")
|
|
14
15
|
return "";
|
|
@@ -95,7 +96,12 @@ export function buildRequest(req, path, signal) {
|
|
|
95
96
|
const method = (req.method ?? "GET").toUpperCase();
|
|
96
97
|
let body;
|
|
97
98
|
if (method !== "GET" && method !== "HEAD") {
|
|
98
|
-
if (isParsedBody(req.body)) {
|
|
99
|
+
if (req.rawBody instanceof Uint8Array && isParsedBody(req.body)) {
|
|
100
|
+
// The host read the stream and kept the bytes: the app gets them unchanged, with their own content type.
|
|
101
|
+
headers.delete("content-length");
|
|
102
|
+
body = req.rawBody;
|
|
103
|
+
}
|
|
104
|
+
else if (isParsedBody(req.body)) {
|
|
99
105
|
// The host framework already read the stream: use what it parsed.
|
|
100
106
|
headers.delete("content-length");
|
|
101
107
|
if (typeof req.body === "string" || req.body instanceof Uint8Array)
|
|
@@ -129,6 +135,12 @@ export function fromNodeRequest(req, options = {}) {
|
|
|
129
135
|
const path = stripPrefix(raw, normalizePrefix(options.prefix)) ?? (raw.startsWith("/") ? raw : "/" + raw);
|
|
130
136
|
return buildRequest(req, path, options.signal);
|
|
131
137
|
}
|
|
138
|
+
const encoder = new TextEncoder();
|
|
139
|
+
/** UTF-8 length of a string, with Buffer where the runtime has it (Node.js, Bun). */
|
|
140
|
+
function byteLength(text) {
|
|
141
|
+
const B = globalThis.Buffer;
|
|
142
|
+
return B ? B.byteLength(text) : encoder.encode(text).byteLength;
|
|
143
|
+
}
|
|
132
144
|
/** Write a Web Response (status, headers with every Set-Cookie, streamed body) to a Node response. */
|
|
133
145
|
export async function writeResponse(res, response, method) {
|
|
134
146
|
const outHeaders = {};
|
|
@@ -140,6 +152,13 @@ export async function writeResponse(res, response, method) {
|
|
|
140
152
|
const cookies = response.headers.getSetCookie?.() ?? [];
|
|
141
153
|
if (cookies.length)
|
|
142
154
|
outHeaders["set-cookie"] = cookies;
|
|
155
|
+
// A JSON answer Inferlo built from a string: headers and body in one write, with its length.
|
|
156
|
+
const known = knownBodies.get(response);
|
|
157
|
+
if (known !== undefined && !response.bodyUsed && method !== "HEAD" && outHeaders["content-length"] === undefined && outHeaders["transfer-encoding"] === undefined) {
|
|
158
|
+
outHeaders["content-length"] = String(byteLength(known));
|
|
159
|
+
res.writeHead(response.status, outHeaders);
|
|
160
|
+
return void res.end(known);
|
|
161
|
+
}
|
|
143
162
|
res.writeHead(response.status, outHeaders);
|
|
144
163
|
if (!response.body || method === "HEAD")
|
|
145
164
|
return void res.end();
|
|
@@ -179,7 +198,8 @@ export function toNodeHandler(app, options = {}) {
|
|
|
179
198
|
if (!res.writableFinished)
|
|
180
199
|
controller.abort();
|
|
181
200
|
});
|
|
182
|
-
const request = buildRequest(req, path ?? (req.url ?? "/")
|
|
201
|
+
const request = buildRequest(req, path ?? (req.url ?? "/"));
|
|
202
|
+
clientSignals.set(request, controller.signal);
|
|
183
203
|
const response = await app.fetch(request);
|
|
184
204
|
await writeResponse(res, response, request.method);
|
|
185
205
|
}
|
|
@@ -197,11 +217,48 @@ export async function serve(app, options = {}) {
|
|
|
197
217
|
const g = globalThis;
|
|
198
218
|
if (g.Bun) {
|
|
199
219
|
const server = g.Bun.serve({ port, hostname, fetch: (req, bunServer) => app.fetch(req, bunServer) });
|
|
200
|
-
|
|
220
|
+
// Wait until the open requests (and streamed answers) are done, then stop, closing the idle keep-alive
|
|
221
|
+
// connections too. Requests that arrive meanwhile get 503 IL2006 from app.close(). app.close() calls the force
|
|
222
|
+
// closer, stop(true), when its timeout is up. (stop() without true would leave keep-alive connections served on
|
|
223
|
+
// Bun 1.3, and a later stop(true) would then do nothing.)
|
|
224
|
+
let forced = false;
|
|
225
|
+
const result = {
|
|
226
|
+
port: server.port,
|
|
227
|
+
close: async () => {
|
|
228
|
+
while (server.pendingRequests > 0 && !forced)
|
|
229
|
+
await new Promise((resolve) => setTimeout(resolve, 20));
|
|
230
|
+
await server.stop(true);
|
|
231
|
+
},
|
|
232
|
+
};
|
|
233
|
+
forceClosers.set(result, () => {
|
|
234
|
+
forced = true;
|
|
235
|
+
void server.stop(true);
|
|
236
|
+
});
|
|
237
|
+
return result;
|
|
201
238
|
}
|
|
202
239
|
if (g.Deno) {
|
|
203
|
-
|
|
204
|
-
|
|
240
|
+
// shutdown() waits for every open request and streamed answer, with no way to cut them off. So each answer
|
|
241
|
+
// with a body is passed through a stream that the force closer can abort when app.close()'s timeout is up.
|
|
242
|
+
const open = new Set();
|
|
243
|
+
const server = g.Deno.serve({ port, hostname, onListen() { } }, async (req, info) => {
|
|
244
|
+
const response = await app.fetch(req, info);
|
|
245
|
+
if (!response.body)
|
|
246
|
+
return response;
|
|
247
|
+
const abort = new AbortController();
|
|
248
|
+
const { readable, writable } = new TransformStream();
|
|
249
|
+
open.add(abort);
|
|
250
|
+
void response.body
|
|
251
|
+
.pipeTo(writable, { signal: abort.signal })
|
|
252
|
+
.catch(() => { })
|
|
253
|
+
.finally(() => open.delete(abort));
|
|
254
|
+
return new Response(readable, { status: response.status, statusText: response.statusText, headers: response.headers });
|
|
255
|
+
});
|
|
256
|
+
const result = { port: server.addr.port, close: () => server.shutdown() };
|
|
257
|
+
forceClosers.set(result, () => {
|
|
258
|
+
for (const abort of open)
|
|
259
|
+
abort.abort();
|
|
260
|
+
});
|
|
261
|
+
return result;
|
|
205
262
|
}
|
|
206
263
|
const http = await import("node:http");
|
|
207
264
|
const handler = toNodeHandler(app);
|
|
@@ -221,6 +278,6 @@ export async function serve(app, options = {}) {
|
|
|
221
278
|
forceClosers.set(result, () => server.closeAllConnections());
|
|
222
279
|
return result;
|
|
223
280
|
}
|
|
224
|
-
/** Closes every open connection of a
|
|
281
|
+
/** Closes every open connection of a server from serve() (Node.js, Bun and Deno), for app.close() after its timeout. */
|
|
225
282
|
export const forceClosers = new WeakMap();
|
|
226
283
|
//# sourceMappingURL=serve.js.map
|
package/dist/serve.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed calls from one Inferlo service to another (microservices, part 1).
|
|
3
|
+
*
|
|
4
|
+
* import { getTicket, createTicket } from "../../tickets/src/routes/tickets.ts"; // the other service's routes
|
|
5
|
+
* const tickets = serviceClient({ baseUrl: settings.TICKETS_URL, token: settings.TICKETS_TOKEN });
|
|
6
|
+
*
|
|
7
|
+
* // in a route handler: input and answer are typed from the route
|
|
8
|
+
* const ticket = await tickets.call(getTicket, { params: { id }, ctx });
|
|
9
|
+
*
|
|
10
|
+
* The route definition gives the method, the path and the types; nothing is generated and nothing is global.
|
|
11
|
+
* Passing ctx forwards the request id (X-Request-Id) and cancels the call when the request is aborted. With
|
|
12
|
+
* tracing: { api: otel }, every attempt is a client span that sends its W3C traceparent, so the other service's
|
|
13
|
+
* spans join the caller's trace.
|
|
14
|
+
*/
|
|
15
|
+
import { InferloError } from "./errors.ts";
|
|
16
|
+
import type { RouteDef } from "./route.ts";
|
|
17
|
+
import { type TracingConfig } from "./tracing.ts";
|
|
18
|
+
export interface ServiceClientOptions {
|
|
19
|
+
/** Where the other service is reached, with any path prefix it is mounted under: "http://tickets.internal" or "https://api.example.com/v1". */
|
|
20
|
+
baseUrl: string;
|
|
21
|
+
/** Sent as Authorization: Bearer <token> on every call. */
|
|
22
|
+
token?: string;
|
|
23
|
+
/** Headers sent on every call. */
|
|
24
|
+
headers?: Record<string, string>;
|
|
25
|
+
/** Longest wait for one attempt, in milliseconds. Default 10000. */
|
|
26
|
+
timeoutMs?: number;
|
|
27
|
+
/**
|
|
28
|
+
* Extra attempts for idempotent calls (GET, PUT, DELETE) that fail with a network error, a timeout, or a 502, 503
|
|
29
|
+
* or 504 answer, waiting 100 ms, 200 ms, 400 ms... in between. POST and PATCH are never retried. Default 0.
|
|
30
|
+
*/
|
|
31
|
+
retries?: number;
|
|
32
|
+
/** The fetch to use. Default globalThis.fetch; pass otherApp.fetch to call an app in the same process (tests). */
|
|
33
|
+
fetch?: (request: Request) => Promise<Response>;
|
|
34
|
+
/**
|
|
35
|
+
* OpenTelemetry tracing: import * as otel from "@opentelemetry/api", then tracing: { api: otel }. Every attempt
|
|
36
|
+
* gets a client span ("GET /tickets/:id") under the active span and sends its trace context (traceparent), so a
|
|
37
|
+
* receiving Inferlo app with createApp({ tracing }) continues the same trace.
|
|
38
|
+
*/
|
|
39
|
+
tracing?: TracingConfig;
|
|
40
|
+
}
|
|
41
|
+
/** A route made with route.<method>(...).handle(...): carries the types of its input and answer. */
|
|
42
|
+
export type TypedRoute = RouteDef & {
|
|
43
|
+
readonly $response: unknown;
|
|
44
|
+
readonly $input: {
|
|
45
|
+
body: unknown;
|
|
46
|
+
query: unknown;
|
|
47
|
+
params: unknown;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
type ParamsInput<P> = keyof P extends never ? {
|
|
51
|
+
params?: P;
|
|
52
|
+
} : {
|
|
53
|
+
params: P;
|
|
54
|
+
};
|
|
55
|
+
type BodyInput<B> = undefined extends B ? {
|
|
56
|
+
body?: B;
|
|
57
|
+
} : {
|
|
58
|
+
body: B;
|
|
59
|
+
};
|
|
60
|
+
/** The request context to forward: pass the handler's ctx. */
|
|
61
|
+
export interface CallContext {
|
|
62
|
+
requestId: string;
|
|
63
|
+
signal: AbortSignal;
|
|
64
|
+
}
|
|
65
|
+
/** Options of one call, next to its params, query and body. */
|
|
66
|
+
export interface CallOptions {
|
|
67
|
+
/** The handler's context: forwards its request id and cancels the call when the request is aborted. */
|
|
68
|
+
ctx?: CallContext;
|
|
69
|
+
/** Cancels the call (in addition to ctx). */
|
|
70
|
+
signal?: AbortSignal;
|
|
71
|
+
/** Headers for this call. */
|
|
72
|
+
headers?: Record<string, string>;
|
|
73
|
+
}
|
|
74
|
+
export type CallInput<R extends TypedRoute> = ParamsInput<R["$input"]["params"]> & BodyInput<R["$input"]["body"]> & {
|
|
75
|
+
query?: Partial<R["$input"]["query"]>;
|
|
76
|
+
} & CallOptions;
|
|
77
|
+
/** The answer of a route: its JSON data, undefined for 204, or the Response itself for routes that return one (streams, files). */
|
|
78
|
+
export type CallResult<R extends TypedRoute> = R["$response"] extends Response ? Response : R["$response"] extends void | undefined ? undefined : R["$response"];
|
|
79
|
+
export interface ServiceClient {
|
|
80
|
+
/** Calls a route of the other service. Rejects with IL2008 when the call fails or answers with an error status. */
|
|
81
|
+
call<R extends TypedRoute>(route: R, ...input: {} extends CallInput<R> ? [input?: CallInput<R>] : [input: CallInput<R>]): Promise<CallResult<R>>;
|
|
82
|
+
}
|
|
83
|
+
/** Raised when a call to another service fails: remoteStatus is its HTTP status (0 when no answer came), remoteCode its error code. */
|
|
84
|
+
export declare class ServiceCallError extends InferloError {
|
|
85
|
+
readonly remoteStatus: number;
|
|
86
|
+
readonly remoteCode: string | undefined;
|
|
87
|
+
constructor(message: string, remoteStatus: number, remoteCode: string | undefined, fix: string, details: Record<string, unknown>);
|
|
88
|
+
}
|
|
89
|
+
/** A client for calls to another Inferlo service. See ServiceClientOptions. */
|
|
90
|
+
export declare function serviceClient(options: ServiceClientOptions): ServiceClient;
|
|
91
|
+
export {};
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed calls from one Inferlo service to another (microservices, part 1).
|
|
3
|
+
*
|
|
4
|
+
* import { getTicket, createTicket } from "../../tickets/src/routes/tickets.ts"; // the other service's routes
|
|
5
|
+
* const tickets = serviceClient({ baseUrl: settings.TICKETS_URL, token: settings.TICKETS_TOKEN });
|
|
6
|
+
*
|
|
7
|
+
* // in a route handler: input and answer are typed from the route
|
|
8
|
+
* const ticket = await tickets.call(getTicket, { params: { id }, ctx });
|
|
9
|
+
*
|
|
10
|
+
* The route definition gives the method, the path and the types; nothing is generated and nothing is global.
|
|
11
|
+
* Passing ctx forwards the request id (X-Request-Id) and cancels the call when the request is aborted. With
|
|
12
|
+
* tracing: { api: otel }, every attempt is a client span that sends its W3C traceparent, so the other service's
|
|
13
|
+
* spans join the caller's trace.
|
|
14
|
+
*/
|
|
15
|
+
import { InferloError } from "./errors.js";
|
|
16
|
+
import { checkTracing, clientTracing } from "./tracing.js";
|
|
17
|
+
/** Raised when a call to another service fails: remoteStatus is its HTTP status (0 when no answer came), remoteCode its error code. */
|
|
18
|
+
export class ServiceCallError extends InferloError {
|
|
19
|
+
remoteStatus;
|
|
20
|
+
remoteCode;
|
|
21
|
+
constructor(message, remoteStatus, remoteCode, fix, details) {
|
|
22
|
+
super("IL2008", message, { status: 502, expose: false, fix, details });
|
|
23
|
+
this.remoteStatus = remoteStatus;
|
|
24
|
+
this.remoteCode = remoteCode;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const IDEMPOTENT = new Set(["GET", "HEAD", "PUT", "DELETE", "OPTIONS"]);
|
|
28
|
+
const RETRY_STATUS = new Set([502, 503, 504]);
|
|
29
|
+
function invalid(message, fix) {
|
|
30
|
+
return new InferloError("IL2009", message, { status: 500, expose: false, fix });
|
|
31
|
+
}
|
|
32
|
+
function isRouteDef(value) {
|
|
33
|
+
return typeof value === "object" && value !== null && value.kind === "inferlo.route";
|
|
34
|
+
}
|
|
35
|
+
/** The path with :params filled in, each value URL-encoded. */
|
|
36
|
+
function fillPath(path, params, route) {
|
|
37
|
+
return path.replace(/:([A-Za-z0-9_]+)/g, (_, name) => {
|
|
38
|
+
const value = params?.[name];
|
|
39
|
+
if (value === undefined || value === null || value === "") {
|
|
40
|
+
throw invalid(`The call to ${route.method} ${route.path} has no value for the path parameter "${name}".`, `Pass it: client.call(route, { params: { ${name}: "..." } }).`);
|
|
41
|
+
}
|
|
42
|
+
return encodeURIComponent(String(value));
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
const sleep = (ms, signal) => new Promise((resolve) => {
|
|
46
|
+
const timer = setTimeout(resolve, ms);
|
|
47
|
+
signal?.addEventListener("abort", () => (clearTimeout(timer), resolve()), { once: true });
|
|
48
|
+
});
|
|
49
|
+
/** A client for calls to another Inferlo service. See ServiceClientOptions. */
|
|
50
|
+
export function serviceClient(options) {
|
|
51
|
+
if (typeof options !== "object" || options === null)
|
|
52
|
+
throw invalid("serviceClient() needs options.", 'Use serviceClient({ baseUrl: "http://tickets.internal" }).');
|
|
53
|
+
for (const key of Object.keys(options)) {
|
|
54
|
+
if (!["baseUrl", "token", "headers", "timeoutMs", "retries", "fetch", "tracing"].includes(key)) {
|
|
55
|
+
throw invalid(`serviceClient() has an unknown option "${key}".`, "The options are baseUrl, token, headers, timeoutMs, retries, fetch and tracing.");
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
let base;
|
|
59
|
+
try {
|
|
60
|
+
base = new URL(options.baseUrl);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
throw invalid(`serviceClient() baseUrl ${JSON.stringify(options.baseUrl)} is not a URL.`, 'Use the address of the other service, such as "http://tickets.internal" or "https://api.example.com/v1".');
|
|
64
|
+
}
|
|
65
|
+
if (base.protocol !== "http:" && base.protocol !== "https:")
|
|
66
|
+
throw invalid(`serviceClient() baseUrl must use http or https, got ${base.protocol}.`, 'Use "http://..." or "https://...".');
|
|
67
|
+
if (base.search || base.hash)
|
|
68
|
+
throw invalid("serviceClient() baseUrl must not have a query string or fragment.", "Pass query values per call: client.call(route, { query }).");
|
|
69
|
+
const timeoutMs = options.timeoutMs ?? 10_000;
|
|
70
|
+
const retries = options.retries ?? 0;
|
|
71
|
+
if (!Number.isFinite(timeoutMs) || timeoutMs <= 0)
|
|
72
|
+
throw invalid(`serviceClient() timeoutMs must be a positive number of milliseconds, got ${String(options.timeoutMs)}.`, "Use timeoutMs: 5000, or leave it out for 10 s.");
|
|
73
|
+
if (!Number.isInteger(retries) || retries < 0 || retries > 10)
|
|
74
|
+
throw invalid(`serviceClient() retries must be a whole number from 0 to 10, got ${String(options.retries)}.`, "Use retries: 2 for idempotent calls that may meet a restarting instance.");
|
|
75
|
+
const doFetch = options.fetch ?? ((request) => globalThis.fetch(request));
|
|
76
|
+
const basePath = base.pathname.replace(/\/+$/, "");
|
|
77
|
+
const tracingConfig = checkTracing(options.tracing, "serviceClient");
|
|
78
|
+
const tracing = tracingConfig ? clientTracing(tracingConfig, "inferlo") : undefined;
|
|
79
|
+
return {
|
|
80
|
+
async call(route, input = {}) {
|
|
81
|
+
if (!isRouteDef(route))
|
|
82
|
+
throw invalid("client.call() needs a route made with route.<method>(...).handle(...).", "Import the route from the other service and pass it: client.call(getTicket, { params: { id } }).");
|
|
83
|
+
const { params, query, body, ctx, signal, headers } = input;
|
|
84
|
+
const url = new URL(base.origin + basePath + fillPath(route.path, params, route));
|
|
85
|
+
for (const [k, v] of Object.entries(query ?? {})) {
|
|
86
|
+
if (v === undefined || v === null)
|
|
87
|
+
continue;
|
|
88
|
+
for (const item of Array.isArray(v) ? v : [v])
|
|
89
|
+
url.searchParams.append(k, String(item));
|
|
90
|
+
}
|
|
91
|
+
const method = route.method.toUpperCase();
|
|
92
|
+
const sent = { accept: "application/json", ...options.headers, ...headers };
|
|
93
|
+
if (options.token)
|
|
94
|
+
sent.authorization = `Bearer ${options.token}`;
|
|
95
|
+
if (ctx?.requestId)
|
|
96
|
+
sent["x-request-id"] = ctx.requestId;
|
|
97
|
+
const hasBody = body !== undefined && method !== "GET" && method !== "HEAD";
|
|
98
|
+
if (hasBody)
|
|
99
|
+
sent["content-type"] = "application/json";
|
|
100
|
+
const payload = hasBody ? JSON.stringify(body) : undefined;
|
|
101
|
+
const callerSignals = [ctx?.signal, signal].filter((s) => s !== undefined);
|
|
102
|
+
const callerSignal = callerSignals.length ? AbortSignal.any(callerSignals) : undefined;
|
|
103
|
+
const attempts = IDEMPOTENT.has(method) ? retries + 1 : 1;
|
|
104
|
+
const where = `${method} ${url.origin}${url.pathname}`;
|
|
105
|
+
const details = (extra) => ({ method, url: `${url.origin}${url.pathname}`, requestId: ctx?.requestId, ...extra });
|
|
106
|
+
for (let attempt = 1;; attempt++) {
|
|
107
|
+
const timeout = AbortSignal.timeout(timeoutMs);
|
|
108
|
+
const combined = callerSignal ? AbortSignal.any([timeout, callerSignal]) : timeout;
|
|
109
|
+
let span;
|
|
110
|
+
let headersSent = sent;
|
|
111
|
+
if (tracing) {
|
|
112
|
+
const attributes = { "http.request.method": method, "url.full": `${url.origin}${url.pathname}`, "url.template": route.path, "server.address": url.hostname };
|
|
113
|
+
if (url.port)
|
|
114
|
+
attributes["server.port"] = Number(url.port);
|
|
115
|
+
if (attempt > 1)
|
|
116
|
+
attributes["http.request.resend_count"] = attempt - 1;
|
|
117
|
+
span = tracing.start(`${method} ${route.path}`, attributes);
|
|
118
|
+
headersSent = { ...sent };
|
|
119
|
+
tracing.inject(span, headersSent);
|
|
120
|
+
}
|
|
121
|
+
let response;
|
|
122
|
+
try {
|
|
123
|
+
const request = new Request(url, { method, headers: headersSent, body: payload, signal: combined });
|
|
124
|
+
response = await (span ? tracing.within(span, () => doFetch(request)) : doFetch(request));
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
const timedOut = timeout.aborted;
|
|
128
|
+
if (span)
|
|
129
|
+
tracing.fail(span, error, callerSignal?.aborted ? "cancelled" : timedOut ? "timeout" : undefined);
|
|
130
|
+
if (callerSignal?.aborted)
|
|
131
|
+
throw callerSignal.reason ?? error;
|
|
132
|
+
if (attempt < attempts) {
|
|
133
|
+
await sleep(100 * 2 ** (attempt - 1), callerSignal);
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
const failure = new ServiceCallError(timedOut ? `${where} did not answer within ${timeoutMs} ms.` : `${where} could not be reached: ${error instanceof Error ? error.message : String(error)}.`, 0, undefined, timedOut ? "Check that the service is healthy, or raise serviceClient({ timeoutMs })." : "Check serviceClient({ baseUrl }) and that the service is running and reachable.", details({ attempts: attempt }));
|
|
137
|
+
failure.cause = error;
|
|
138
|
+
throw failure;
|
|
139
|
+
}
|
|
140
|
+
span?.setAttribute("http.response.status_code", response.status);
|
|
141
|
+
if (response.ok) {
|
|
142
|
+
span?.end();
|
|
143
|
+
if (response.status === 204 || method === "HEAD")
|
|
144
|
+
return undefined;
|
|
145
|
+
const type = response.headers.get("content-type") ?? "";
|
|
146
|
+
if (/^application\/(.+\+)?json\b/i.test(type))
|
|
147
|
+
return (await response.json());
|
|
148
|
+
return response;
|
|
149
|
+
}
|
|
150
|
+
if (RETRY_STATUS.has(response.status) && attempt < attempts) {
|
|
151
|
+
if (span)
|
|
152
|
+
tracing.fail(span, new Error(`${where} answered ${response.status}.`), String(response.status));
|
|
153
|
+
await response.body?.cancel();
|
|
154
|
+
await sleep(100 * 2 ** (attempt - 1), callerSignal);
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
let remote;
|
|
158
|
+
try {
|
|
159
|
+
remote = (await response.json()).error;
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
remote = undefined;
|
|
163
|
+
}
|
|
164
|
+
const code = typeof remote?.code === "string" ? remote.code : undefined;
|
|
165
|
+
const failure = new ServiceCallError(`${where} answered ${response.status}${code ? ` ${code}` : ""}${remote?.message ? `: ${remote.message}` : ""}.`, response.status, code, response.status === 401 || response.status === 403
|
|
166
|
+
? "Check serviceClient({ token }) and the other service's auth."
|
|
167
|
+
: response.status >= 500
|
|
168
|
+
? "See the other service's logs for this request id."
|
|
169
|
+
: "Check the input against the other service's route, or handle the answer: catch the error and read error.remoteStatus.", details({ status: response.status, code, attempts: attempt }));
|
|
170
|
+
if (span)
|
|
171
|
+
tracing.fail(span, failure, String(response.status));
|
|
172
|
+
throw failure;
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=service-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-client.js","sourceRoot":"","sources":["../src/service-client.ts"],"names":[],"mappings":"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"}
|
package/dist/sessions.d.ts
CHANGED
|
@@ -51,6 +51,8 @@ export interface SessionsOptions {
|
|
|
51
51
|
cookie?: SessionCookieOptions;
|
|
52
52
|
/** Roles of a user, checked when a route uses auth: "<role>". Default: user.roles ?? []. */
|
|
53
53
|
roles?: (user: AppUser) => string[];
|
|
54
|
+
/** The tenant of a user, for tenant-scoped models. Default: user.tenantId. */
|
|
55
|
+
tenant?: (user: AppUser) => string | null | undefined;
|
|
54
56
|
}
|
|
55
57
|
/** What session.signIn and session.signOut need from the route context. */
|
|
56
58
|
export interface SessionResponseContext {
|
package/dist/sessions.js
CHANGED
|
@@ -85,6 +85,7 @@ export function sessions(options) {
|
|
|
85
85
|
return (await options.user(current.data, { db, req })) ?? null;
|
|
86
86
|
},
|
|
87
87
|
roles: options.roles,
|
|
88
|
+
tenant: options.tenant,
|
|
88
89
|
async signIn(ctx, userId) {
|
|
89
90
|
if (typeof userId !== "string" || !userId)
|
|
90
91
|
throw new InferloError("IL6029", "session.signIn(ctx, userId) needs the user's id as a non-empty string.", { fix: "Call it after checking the password: await session.signIn(ctx, user.id)." });
|
package/dist/sessions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"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"}
|
package/dist/tracing.d.ts
CHANGED
|
@@ -72,7 +72,7 @@ export interface RequestTracing {
|
|
|
72
72
|
run<T>(req: Request, url: URL, fn: (span: OtelSpan) => Promise<T>): Promise<T>;
|
|
73
73
|
}
|
|
74
74
|
/** Checks a tracing option (createApp or createAI) and returns it, or undefined without tracing. */
|
|
75
|
-
export declare function checkTracing(option: unknown, where: "createApp" | "createAI"): TracingConfig | undefined;
|
|
75
|
+
export declare function checkTracing(option: unknown, where: "createApp" | "createAI" | "serviceClient"): TracingConfig | undefined;
|
|
76
76
|
/** Checks createApp({ tracing }) and returns the request tracer, or undefined without tracing. */
|
|
77
77
|
export declare function requestTracing(option: unknown, appName: string, appVersion: string): RequestTracing | undefined;
|
|
78
78
|
/** Client spans for calls Inferlo makes: AI models and the database. */
|
|
@@ -81,8 +81,12 @@ export interface ClientTracing {
|
|
|
81
81
|
start(name: string, attributes: Attributes): OtelSpan;
|
|
82
82
|
/** Runs fn inside a client span that is active while fn runs, and ends it; errors are recorded on it. */
|
|
83
83
|
run<T>(name: string, attributes: Attributes, fn: (span: OtelSpan) => Promise<T>): Promise<T>;
|
|
84
|
-
/** Records an error on a span and ends it. */
|
|
85
|
-
fail(span: OtelSpan, error: unknown): void;
|
|
84
|
+
/** Records an error on a span and ends it. errorType overrides error.type (by default the error's code or name). */
|
|
85
|
+
fail(span: OtelSpan, error: unknown, errorType?: string): void;
|
|
86
|
+
/** Runs fn with span as the active span. */
|
|
87
|
+
within<T>(span: OtelSpan, fn: () => T): T;
|
|
88
|
+
/** Writes the trace context of span (W3C traceparent, through the registered propagator) into headers. */
|
|
89
|
+
inject(span: OtelSpan, headers: Record<string, string>): void;
|
|
86
90
|
/** True while a span (a request's or a job's) is active. */
|
|
87
91
|
inSpan(): boolean;
|
|
88
92
|
}
|
package/dist/tracing.js
CHANGED
|
@@ -66,10 +66,12 @@ export function clientTracing(config, defaultName, version) {
|
|
|
66
66
|
const api = config.api;
|
|
67
67
|
const tracer = api.trace.getTracer(config.tracerName ?? defaultName, version);
|
|
68
68
|
const kind = api.SpanKind.CLIENT ?? CLIENT_KIND;
|
|
69
|
-
const fail = (span, error) => {
|
|
69
|
+
const fail = (span, error, errorType) => {
|
|
70
70
|
span.recordException(error instanceof Error ? error : String(error));
|
|
71
71
|
const code = error?.code;
|
|
72
|
-
if (
|
|
72
|
+
if (errorType)
|
|
73
|
+
span.setAttribute("error.type", errorType);
|
|
74
|
+
else if (typeof code === "string")
|
|
73
75
|
span.setAttribute("error.type", code);
|
|
74
76
|
else
|
|
75
77
|
span.setAttribute("error.type", error instanceof Error ? error.name : "Error");
|
|
@@ -80,6 +82,10 @@ export function clientTracing(config, defaultName, version) {
|
|
|
80
82
|
return {
|
|
81
83
|
start,
|
|
82
84
|
fail,
|
|
85
|
+
within: (span, fn) => api.context.with(api.trace.setSpan(api.context.active(), span), fn),
|
|
86
|
+
inject(span, headers) {
|
|
87
|
+
api.propagation.inject?.(api.trace.setSpan(api.context.active(), span), headers);
|
|
88
|
+
},
|
|
83
89
|
async run(name, attributes, fn) {
|
|
84
90
|
const span = start(name, attributes);
|
|
85
91
|
let result;
|