hci-atrium 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/LICENSE +21 -0
- package/README.md +182 -0
- package/dist/atrium.d.ts +522 -0
- package/dist/atrium.d.ts.map +1 -0
- package/dist/atrium.js +806 -0
- package/dist/atrium.js.map +1 -0
- package/dist/auth.d.ts +85 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +369 -0
- package/dist/auth.js.map +1 -0
- package/dist/by.d.ts +84 -0
- package/dist/by.d.ts.map +1 -0
- package/dist/by.js +87 -0
- package/dist/by.js.map +1 -0
- package/dist/decider.d.ts +40 -0
- package/dist/decider.d.ts.map +1 -0
- package/dist/decider.js +76 -0
- package/dist/decider.js.map +1 -0
- package/dist/discovery.d.ts +15 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +38 -0
- package/dist/discovery.js.map +1 -0
- package/dist/env.d.ts +11 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +28 -0
- package/dist/env.js.map +1 -0
- package/dist/errors.d.ts +67 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +86 -0
- package/dist/errors.js.map +1 -0
- package/dist/files.d.ts +7 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +2 -0
- package/dist/files.js.map +1 -0
- package/dist/http.d.ts +11 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +21 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/models.d.ts +456 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +487 -0
- package/dist/models.js.map +1 -0
- package/dist/pkce.d.ts +16 -0
- package/dist/pkce.d.ts.map +1 -0
- package/dist/pkce.js +40 -0
- package/dist/pkce.js.map +1 -0
- package/dist/react/index.d.ts +37 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +89 -0
- package/dist/react/index.js.map +1 -0
- package/dist/rooms/armed-set.d.ts +33 -0
- package/dist/rooms/armed-set.d.ts.map +1 -0
- package/dist/rooms/armed-set.js +65 -0
- package/dist/rooms/armed-set.js.map +1 -0
- package/dist/rooms/brokers.d.ts +62 -0
- package/dist/rooms/brokers.d.ts.map +1 -0
- package/dist/rooms/brokers.js +109 -0
- package/dist/rooms/brokers.js.map +1 -0
- package/dist/rooms/codec.d.ts +100 -0
- package/dist/rooms/codec.d.ts.map +1 -0
- package/dist/rooms/codec.js +101 -0
- package/dist/rooms/codec.js.map +1 -0
- package/dist/rooms/index.d.ts +40 -0
- package/dist/rooms/index.d.ts.map +1 -0
- package/dist/rooms/index.js +45 -0
- package/dist/rooms/index.js.map +1 -0
- package/dist/rooms/offer-capture.d.ts +96 -0
- package/dist/rooms/offer-capture.d.ts.map +1 -0
- package/dist/rooms/offer-capture.js +338 -0
- package/dist/rooms/offer-capture.js.map +1 -0
- package/dist/rooms/offer-transcription.d.ts +63 -0
- package/dist/rooms/offer-transcription.d.ts.map +1 -0
- package/dist/rooms/offer-transcription.js +231 -0
- package/dist/rooms/offer-transcription.js.map +1 -0
- package/dist/rooms/participant.d.ts +35 -0
- package/dist/rooms/participant.d.ts.map +1 -0
- package/dist/rooms/participant.js +53 -0
- package/dist/rooms/participant.js.map +1 -0
- package/dist/rooms/recorder.d.ts +74 -0
- package/dist/rooms/recorder.d.ts.map +1 -0
- package/dist/rooms/recorder.js +157 -0
- package/dist/rooms/recorder.js.map +1 -0
- package/dist/rooms/room.d.ts +542 -0
- package/dist/rooms/room.d.ts.map +1 -0
- package/dist/rooms/room.js +1357 -0
- package/dist/rooms/room.js.map +1 -0
- package/dist/rooms/snippet.d.ts +48 -0
- package/dist/rooms/snippet.d.ts.map +1 -0
- package/dist/rooms/snippet.js +70 -0
- package/dist/rooms/snippet.js.map +1 -0
- package/dist/rooms/sse.d.ts +102 -0
- package/dist/rooms/sse.d.ts.map +1 -0
- package/dist/rooms/sse.js +347 -0
- package/dist/rooms/sse.js.map +1 -0
- package/dist/rooms/standing-source.d.ts +190 -0
- package/dist/rooms/standing-source.d.ts.map +1 -0
- package/dist/rooms/standing-source.js +431 -0
- package/dist/rooms/standing-source.js.map +1 -0
- package/dist/rooms/transcriber.d.ts +81 -0
- package/dist/rooms/transcriber.d.ts.map +1 -0
- package/dist/rooms/transcriber.js +111 -0
- package/dist/rooms/transcriber.js.map +1 -0
- package/dist/rooms/transport-shared.d.ts +28 -0
- package/dist/rooms/transport-shared.d.ts.map +1 -0
- package/dist/rooms/transport-shared.js +42 -0
- package/dist/rooms/transport-shared.js.map +1 -0
- package/dist/rooms/transport.d.ts +161 -0
- package/dist/rooms/transport.d.ts.map +1 -0
- package/dist/rooms/transport.js +258 -0
- package/dist/rooms/transport.js.map +1 -0
- package/dist/shaping/assets.d.ts +42 -0
- package/dist/shaping/assets.d.ts.map +1 -0
- package/dist/shaping/assets.js +77 -0
- package/dist/shaping/assets.js.map +1 -0
- package/dist/shaping/chat.d.ts +39 -0
- package/dist/shaping/chat.d.ts.map +1 -0
- package/dist/shaping/chat.js +62 -0
- package/dist/shaping/chat.js.map +1 -0
- package/dist/shaping/index.d.ts +14 -0
- package/dist/shaping/index.d.ts.map +1 -0
- package/dist/shaping/index.js +13 -0
- package/dist/shaping/index.js.map +1 -0
- package/dist/shaping/library.d.ts +84 -0
- package/dist/shaping/library.d.ts.map +1 -0
- package/dist/shaping/library.js +288 -0
- package/dist/shaping/library.js.map +1 -0
- package/dist/shaping/request.d.ts +47 -0
- package/dist/shaping/request.d.ts.map +1 -0
- package/dist/shaping/request.js +25 -0
- package/dist/shaping/request.js.map +1 -0
- package/dist/shaping/rooms.d.ts +128 -0
- package/dist/shaping/rooms.d.ts.map +1 -0
- package/dist/shaping/rooms.js +330 -0
- package/dist/shaping/rooms.js.map +1 -0
- package/dist/shaping/sources.d.ts +29 -0
- package/dist/shaping/sources.d.ts.map +1 -0
- package/dist/shaping/sources.js +51 -0
- package/dist/shaping/sources.js.map +1 -0
- package/dist/shaping/structured.d.ts +47 -0
- package/dist/shaping/structured.d.ts.map +1 -0
- package/dist/shaping/structured.js +115 -0
- package/dist/shaping/structured.js.map +1 -0
- package/dist/storage.d.ts +36 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +86 -0
- package/dist/storage.js.map +1 -0
- package/dist/transcribe-stream.d.ts +81 -0
- package/dist/transcribe-stream.d.ts.map +1 -0
- package/dist/transcribe-stream.js +253 -0
- package/dist/transcribe-stream.js.map +1 -0
- package/dist/transcribe.d.ts +57 -0
- package/dist/transcribe.d.ts.map +1 -0
- package/dist/transcribe.js +267 -0
- package/dist/transcribe.js.map +1 -0
- package/dist/types.d.ts +20 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/shaping/assets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** Chat-completions + embeddings + transcription request shaping (mirror of ``_shaping``). */
|
|
2
|
+
import type { FileSource } from "../files.js";
|
|
3
|
+
import type { ShapedRequest } from "./request.js";
|
|
4
|
+
/** An OpenAI-style chat message. */
|
|
5
|
+
export interface ChatMessage {
|
|
6
|
+
role: string;
|
|
7
|
+
content: unknown;
|
|
8
|
+
[key: string]: unknown;
|
|
9
|
+
}
|
|
10
|
+
/** Build the ``/v1/chat/completions`` body. A bare string becomes a single user message. */
|
|
11
|
+
export declare function chatBody(messages: string | ChatMessage[], model: string | undefined, params?: Record<string, unknown>): Record<string, unknown>;
|
|
12
|
+
/** Build a ``POST /v1/chat/completions`` request from a shaped body. */
|
|
13
|
+
export declare function buildChat(body: Record<string, unknown>): ShapedRequest;
|
|
14
|
+
/** A media input for embeddings, already read to base64 by the client (shaping stays I/O-free). */
|
|
15
|
+
export interface EncodedMedia {
|
|
16
|
+
kind: "image" | "audio" | "video";
|
|
17
|
+
data: string;
|
|
18
|
+
format?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Build a ``POST /v1/embeddings`` request. Enforces the exactly-one-input contract (``text`` XOR one
|
|
22
|
+
* media input); the client resolves a media {@link FileSource} to {@link EncodedMedia} first.
|
|
23
|
+
*/
|
|
24
|
+
export declare function buildEmbed(model: string, text: string | undefined, media: EncodedMedia | undefined): ShapedRequest;
|
|
25
|
+
export interface BuildTranscribeInput {
|
|
26
|
+
audio: FileSource;
|
|
27
|
+
model?: string;
|
|
28
|
+
language?: string;
|
|
29
|
+
prompt?: string;
|
|
30
|
+
verbose?: boolean;
|
|
31
|
+
format?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Build the ``POST /v1/audio/transcriptions`` request — a multipart audio upload. ``verbose`` asks
|
|
35
|
+
* for segment timings (``response_format=verbose_json``); ``format`` names the file part for
|
|
36
|
+
* nameless bytes.
|
|
37
|
+
*/
|
|
38
|
+
export declare function buildTranscribe(input: BuildTranscribeInput): ShapedRequest;
|
|
39
|
+
//# sourceMappingURL=chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/shaping/chat.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAG9F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEjD,oCAAoC;AACpC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,4FAA4F;AAC5F,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,EAChC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACnC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOzB;AAED,wEAAwE;AACxE,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,CAEtE;AAED,mGAAmG;AACnG,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,KAAK,EAAE,YAAY,GAAG,SAAS,GAC9B,aAAa,CASf;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,UAAU,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,aAAa,CA2B1E"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/** Chat-completions + embeddings + transcription request shaping (mirror of ``_shaping``). */
|
|
2
|
+
import { InvalidArgumentError } from "../errors.js";
|
|
3
|
+
/** Build the ``/v1/chat/completions`` body. A bare string becomes a single user message. */
|
|
4
|
+
export function chatBody(messages, model, params = {}) {
|
|
5
|
+
const msgs = typeof messages === "string" ? [{ role: "user", content: messages }] : [...messages];
|
|
6
|
+
const body = { messages: msgs, ...params };
|
|
7
|
+
if (model !== undefined) {
|
|
8
|
+
body.model = model;
|
|
9
|
+
}
|
|
10
|
+
return body;
|
|
11
|
+
}
|
|
12
|
+
/** Build a ``POST /v1/chat/completions`` request from a shaped body. */
|
|
13
|
+
export function buildChat(body) {
|
|
14
|
+
return { method: "POST", path: "/v1/chat/completions", json: body };
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Build a ``POST /v1/embeddings`` request. Enforces the exactly-one-input contract (``text`` XOR one
|
|
18
|
+
* media input); the client resolves a media {@link FileSource} to {@link EncodedMedia} first.
|
|
19
|
+
*/
|
|
20
|
+
export function buildEmbed(model, text, media) {
|
|
21
|
+
if ((text !== undefined ? 1 : 0) + (media !== undefined ? 1 : 0) !== 1) {
|
|
22
|
+
throw new InvalidArgumentError("pass exactly one of text, image, audio, or video");
|
|
23
|
+
}
|
|
24
|
+
const body = text !== undefined
|
|
25
|
+
? { model, input: text }
|
|
26
|
+
: { model, input: [{ type: media?.kind, data: media?.data, format: media?.format }] };
|
|
27
|
+
return { method: "POST", path: "/v1/embeddings", json: body };
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Build the ``POST /v1/audio/transcriptions`` request — a multipart audio upload. ``verbose`` asks
|
|
31
|
+
* for segment timings (``response_format=verbose_json``); ``format`` names the file part for
|
|
32
|
+
* nameless bytes.
|
|
33
|
+
*/
|
|
34
|
+
export function buildTranscribe(input) {
|
|
35
|
+
const fields = {};
|
|
36
|
+
if (input.model !== undefined) {
|
|
37
|
+
fields.model = input.model;
|
|
38
|
+
}
|
|
39
|
+
if (input.language !== undefined) {
|
|
40
|
+
fields.language = input.language;
|
|
41
|
+
}
|
|
42
|
+
if (input.prompt !== undefined) {
|
|
43
|
+
fields.prompt = input.prompt;
|
|
44
|
+
}
|
|
45
|
+
if (input.verbose) {
|
|
46
|
+
fields.response_format = "verbose_json";
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
method: "POST",
|
|
50
|
+
path: "/v1/audio/transcriptions",
|
|
51
|
+
multipart: {
|
|
52
|
+
fields,
|
|
53
|
+
files: {
|
|
54
|
+
file: {
|
|
55
|
+
source: input.audio,
|
|
56
|
+
filename: input.format ? `audio.${input.format}` : undefined,
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/shaping/chat.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAE9F,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAWnD,4FAA4F;AAC5F,MAAM,UAAU,QAAQ,CACtB,QAAgC,EAChC,KAAyB,EACzB,SAAkC,EAAE;IAEpC,MAAM,IAAI,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAA;IACjG,MAAM,IAAI,GAA4B,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAA;IACnE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,SAAS,CAAC,IAA6B;IACrD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;AACrE,CAAC;AASD;;;GAGG;AACH,MAAM,UAAU,UAAU,CACxB,KAAa,EACb,IAAwB,EACxB,KAA+B;IAE/B,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,oBAAoB,CAAC,kDAAkD,CAAC,CAAA;IACpF,CAAC;IACD,MAAM,IAAI,GACR,IAAI,KAAK,SAAS;QAChB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;QACxB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAA;IACzF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;AAC/D,CAAC;AAWD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAA2B;IACzD,MAAM,MAAM,GAA2B,EAAE,CAAA;IACzC,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;IAC5B,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAA;IAClC,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;IAC9B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,CAAC,eAAe,GAAG,cAAc,CAAA;IACzC,CAAC;IACD,OAAO;QACL,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,0BAA0B;QAChC,SAAS,EAAE;YACT,MAAM;YACN,KAAK,EAAE;gBACL,IAAI,EAAE;oBACJ,MAAM,EAAE,KAAK,CAAC,KAAK;oBACnB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS;iBAC7D;aACF;SACF;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The pure request-shaping layer (decision 12: shape-once, orchestrate-twice). No I/O lives here —
|
|
3
|
+
* every builder returns a {@link ShapedRequest} the client turns into a ``fetch``. This is also the
|
|
4
|
+
* single seam where camelCase SDK names become the wire's snake_case (decision 5).
|
|
5
|
+
*/
|
|
6
|
+
export * from "./assets.js";
|
|
7
|
+
export * from "./chat.js";
|
|
8
|
+
export * from "./library.js";
|
|
9
|
+
export type { FilePart, HttpMethod, Multipart, ShapedRequest } from "./request.js";
|
|
10
|
+
export { applyScope } from "./request.js";
|
|
11
|
+
export * from "./rooms.js";
|
|
12
|
+
export * from "./sources.js";
|
|
13
|
+
export * from "./structured.js";
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shaping/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The pure request-shaping layer (decision 12: shape-once, orchestrate-twice). No I/O lives here —
|
|
3
|
+
* every builder returns a {@link ShapedRequest} the client turns into a ``fetch``. This is also the
|
|
4
|
+
* single seam where camelCase SDK names become the wire's snake_case (decision 5).
|
|
5
|
+
*/
|
|
6
|
+
export * from "./assets.js";
|
|
7
|
+
export * from "./chat.js";
|
|
8
|
+
export * from "./library.js";
|
|
9
|
+
export { applyScope } from "./request.js";
|
|
10
|
+
export * from "./rooms.js";
|
|
11
|
+
export * from "./sources.js";
|
|
12
|
+
export * from "./structured.js";
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shaping/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAE5B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Library search + search-by-examples request shaping (the mirror of ``_shaping`` search helpers).
|
|
3
|
+
*
|
|
4
|
+
* This is the one seam where camelCase SDK names become the wire's historical snake_case
|
|
5
|
+
* (``matchBy`` → ``match_by``, ``allKinds`` → ``all_kinds``, …). Nothing downstream re-translates.
|
|
6
|
+
*/
|
|
7
|
+
import type { Operand } from "../by.js";
|
|
8
|
+
import type { FileSource } from "../files.js";
|
|
9
|
+
import type { Filters } from "../models.js";
|
|
10
|
+
import { type ShapedRequest } from "./request.js";
|
|
11
|
+
export interface SearchFilterInput {
|
|
12
|
+
limit: number;
|
|
13
|
+
tags?: string[];
|
|
14
|
+
anyTags?: string[];
|
|
15
|
+
excludeTags?: string[];
|
|
16
|
+
provider?: string | string[];
|
|
17
|
+
filters?: Filters;
|
|
18
|
+
space?: string;
|
|
19
|
+
project?: string;
|
|
20
|
+
collection?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface BuildSearchInput extends SearchFilterInput {
|
|
23
|
+
query?: string;
|
|
24
|
+
like?: string;
|
|
25
|
+
likeBy?: string;
|
|
26
|
+
modality?: string;
|
|
27
|
+
media?: FileSource;
|
|
28
|
+
vector?: number[];
|
|
29
|
+
/** Inline one vector per hit: ``true`` (the scoring vector) or an already-resolved space id.
|
|
30
|
+
* Falsy → omitted, request byte-for-byte unchanged. */
|
|
31
|
+
includeVectors?: boolean | string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Build a library-search request — a text query, a "find similar" (``like``) query, a multipart
|
|
35
|
+
* file query, or a raw-vector query. ``like``, ``space``, ``project`` and ``collection`` are
|
|
36
|
+
* already resolved by the caller.
|
|
37
|
+
*/
|
|
38
|
+
export declare function buildSearch(input: BuildSearchInput): ShapedRequest;
|
|
39
|
+
export interface BuildSearchByExamplesInput {
|
|
40
|
+
positives: string[];
|
|
41
|
+
negatives?: string[];
|
|
42
|
+
method: string;
|
|
43
|
+
spaces?: string[];
|
|
44
|
+
limit: number;
|
|
45
|
+
contrastSamples?: number;
|
|
46
|
+
features?: Record<string, unknown>;
|
|
47
|
+
matchBy?: string[] | Record<string, number>;
|
|
48
|
+
filters?: Filters;
|
|
49
|
+
project?: string;
|
|
50
|
+
collection?: string;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Build a search-by-examples (mood-board) request. All narrowing rides on ``filters``; a Filters
|
|
54
|
+
* field with no wire slot here raises, as does ``matchBy`` given both as an argument and on
|
|
55
|
+
* ``filters``. ``spaces`` and the scope are already resolved.
|
|
56
|
+
*/
|
|
57
|
+
export declare function buildSearchByExamples(input: BuildSearchByExamplesInput): ShapedRequest;
|
|
58
|
+
/**
|
|
59
|
+
* Build a pairwise compare request (``POST /v1/library/compare``). A file operand becomes a
|
|
60
|
+
* multipart part (``a_file`` / ``b_file``); every other kind becomes a JSON-descriptor form field
|
|
61
|
+
* (``a`` / ``b``). With no file operand the body is ``application/x-www-form-urlencoded``. ``space``
|
|
62
|
+
* is already resolved by the caller.
|
|
63
|
+
*/
|
|
64
|
+
export declare function buildCompare(a: Operand, b: Operand, space?: string, breakdown?: boolean): ShapedRequest;
|
|
65
|
+
export interface BuildEnrichInput {
|
|
66
|
+
query: string;
|
|
67
|
+
modality: string;
|
|
68
|
+
tags?: string[];
|
|
69
|
+
total?: number;
|
|
70
|
+
preview?: boolean;
|
|
71
|
+
wait?: boolean;
|
|
72
|
+
}
|
|
73
|
+
/** Build an enrichment request — the ``preview`` dry-run, or the staging/enqueue endpoint. */
|
|
74
|
+
export declare function buildEnrich(input: BuildEnrichInput): ShapedRequest;
|
|
75
|
+
/** Build a ``GET /v1/library/tags`` listing request (scoped to the collection chain / root). */
|
|
76
|
+
export declare function buildTagsList(opts?: {
|
|
77
|
+
collection?: string;
|
|
78
|
+
}): ShapedRequest;
|
|
79
|
+
/** Build a ``GET /v1/library/tags/{ref}`` request (name- or id-addressed within scope). */
|
|
80
|
+
export declare function buildTagGet(ref: string, opts?: {
|
|
81
|
+
includeSnapshot?: boolean;
|
|
82
|
+
collection?: string;
|
|
83
|
+
}): ShapedRequest;
|
|
84
|
+
//# sourceMappingURL=library.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../src/shaping/library.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Library search + search-by-examples request shaping (the mirror of ``_shaping`` search helpers).
|
|
3
|
+
*
|
|
4
|
+
* This is the one seam where camelCase SDK names become the wire's historical snake_case
|
|
5
|
+
* (``matchBy`` → ``match_by``, ``allKinds`` → ``all_kinds``, …). Nothing downstream re-translates.
|
|
6
|
+
*/
|
|
7
|
+
import { InvalidArgumentError } from "../errors.js";
|
|
8
|
+
import { applyScope } from "./request.js";
|
|
9
|
+
function rangesToWire(ranges) {
|
|
10
|
+
return Object.entries(ranges).map(([key, [lo, hi]]) => `${key}:${lo === null ? "" : lo}:${hi === null ? "" : hi}`);
|
|
11
|
+
}
|
|
12
|
+
/** The filter fields shared by every search shape (text / media / vector / like). */
|
|
13
|
+
function searchFilterBody(input) {
|
|
14
|
+
const body = { limit: input.limit };
|
|
15
|
+
if (input.tags?.length) {
|
|
16
|
+
body.all_labels = input.tags;
|
|
17
|
+
}
|
|
18
|
+
if (input.anyTags?.length) {
|
|
19
|
+
body.any_labels = input.anyTags;
|
|
20
|
+
}
|
|
21
|
+
if (input.excludeTags?.length) {
|
|
22
|
+
body.none_labels = input.excludeTags;
|
|
23
|
+
}
|
|
24
|
+
if (input.provider !== undefined) {
|
|
25
|
+
body.provider = typeof input.provider === "string" ? [input.provider] : [...input.provider];
|
|
26
|
+
}
|
|
27
|
+
const f = input.filters;
|
|
28
|
+
if (f) {
|
|
29
|
+
if (f.allKinds?.length)
|
|
30
|
+
body.all_kinds = f.allKinds;
|
|
31
|
+
if (f.anyKinds?.length)
|
|
32
|
+
body.any_kinds = f.anyKinds;
|
|
33
|
+
if (f.noneKinds?.length)
|
|
34
|
+
body.none_kinds = f.noneKinds;
|
|
35
|
+
if (f.allLabels?.length)
|
|
36
|
+
body.all_labels = f.allLabels;
|
|
37
|
+
if (f.anyLabels?.length)
|
|
38
|
+
body.any_labels = f.anyLabels;
|
|
39
|
+
if (f.noneLabels?.length)
|
|
40
|
+
body.none_labels = f.noneLabels;
|
|
41
|
+
if (f.contentKind?.length)
|
|
42
|
+
body.content_kind = f.contentKind;
|
|
43
|
+
if (f.statuses?.length)
|
|
44
|
+
body.any_statuses = f.statuses;
|
|
45
|
+
if (f.ranges && Object.keys(f.ranges).length)
|
|
46
|
+
body.ranges = rangesToWire(f.ranges);
|
|
47
|
+
if (f.uploader?.length)
|
|
48
|
+
body.uploader = f.uploader;
|
|
49
|
+
if (f.maxSeconds !== undefined)
|
|
50
|
+
body.max_seconds = f.maxSeconds;
|
|
51
|
+
if (f.matchBy !== undefined)
|
|
52
|
+
body.match_by = f.matchBy; // [] is meaningful: match every signal
|
|
53
|
+
if (f.dataMatch && Object.keys(f.dataMatch).length)
|
|
54
|
+
body.data_match = f.dataMatch;
|
|
55
|
+
if (f.excludeIds?.length)
|
|
56
|
+
body.exclude_ids = f.excludeIds;
|
|
57
|
+
}
|
|
58
|
+
if (input.space !== undefined) {
|
|
59
|
+
body.space = input.space;
|
|
60
|
+
}
|
|
61
|
+
applyScope(body, input.project, input.collection);
|
|
62
|
+
return body;
|
|
63
|
+
}
|
|
64
|
+
/** Append ``modality`` to ``all_kinds`` (result-kind filter; the ranking space stays cross-modal). */
|
|
65
|
+
function mergeModalityIntoAllKinds(body, modality) {
|
|
66
|
+
const kinds = Array.isArray(body.all_kinds) ? body.all_kinds : [];
|
|
67
|
+
if (!kinds.includes(modality)) {
|
|
68
|
+
body.all_kinds = [...kinds, modality];
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Build a library-search request — a text query, a "find similar" (``like``) query, a multipart
|
|
73
|
+
* file query, or a raw-vector query. ``like``, ``space``, ``project`` and ``collection`` are
|
|
74
|
+
* already resolved by the caller.
|
|
75
|
+
*/
|
|
76
|
+
export function buildSearch(input) {
|
|
77
|
+
const { query = "", like, likeBy, modality, media, vector } = input;
|
|
78
|
+
if (like !== undefined && (query || media !== undefined || vector !== undefined)) {
|
|
79
|
+
throw new InvalidArgumentError("like is mutually exclusive with a text query / image / audio / video / vector — " +
|
|
80
|
+
"pass exactly one query input");
|
|
81
|
+
}
|
|
82
|
+
if (likeBy !== undefined && like === undefined) {
|
|
83
|
+
throw new InvalidArgumentError("likeBy only applies with like");
|
|
84
|
+
}
|
|
85
|
+
const body = searchFilterBody(input);
|
|
86
|
+
if (input.includeVectors) {
|
|
87
|
+
// Falsy (default) omits it — the request stays byte-for-byte unchanged.
|
|
88
|
+
body.include_vectors = input.includeVectors;
|
|
89
|
+
}
|
|
90
|
+
if (like !== undefined) {
|
|
91
|
+
body.like = like;
|
|
92
|
+
if (likeBy !== undefined) {
|
|
93
|
+
body.like_by = likeBy;
|
|
94
|
+
}
|
|
95
|
+
if (modality !== undefined) {
|
|
96
|
+
mergeModalityIntoAllKinds(body, modality);
|
|
97
|
+
}
|
|
98
|
+
return { method: "POST", path: "/v1/library/search", json: body };
|
|
99
|
+
}
|
|
100
|
+
if (vector !== undefined) {
|
|
101
|
+
body.vector = vector.map(Number);
|
|
102
|
+
if (modality !== undefined) {
|
|
103
|
+
body.modality = modality;
|
|
104
|
+
}
|
|
105
|
+
return { method: "POST", path: "/v1/library/search", json: body };
|
|
106
|
+
}
|
|
107
|
+
if (media !== undefined) {
|
|
108
|
+
if (modality !== undefined) {
|
|
109
|
+
mergeModalityIntoAllKinds(body, modality);
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
method: "POST",
|
|
113
|
+
path: "/v1/library/search/file",
|
|
114
|
+
multipart: {
|
|
115
|
+
fields: { params: JSON.stringify(body) },
|
|
116
|
+
files: { file: { source: media } },
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
body.query = query;
|
|
121
|
+
if (modality !== undefined) {
|
|
122
|
+
body.modality = modality;
|
|
123
|
+
}
|
|
124
|
+
return { method: "POST", path: "/v1/library/search", json: body };
|
|
125
|
+
}
|
|
126
|
+
// Filters fields ``searchByExamples`` has no wire slot for — setting one is a mistake worth naming.
|
|
127
|
+
const SEARCH_BY_EXAMPLES_UNSUPPORTED = [
|
|
128
|
+
"statuses",
|
|
129
|
+
"ranges",
|
|
130
|
+
"uploader",
|
|
131
|
+
"maxSeconds",
|
|
132
|
+
"dataMatch",
|
|
133
|
+
"excludeIds",
|
|
134
|
+
];
|
|
135
|
+
// Filters fields that map straight onto the search-by-examples body (camelCase → snake wire name).
|
|
136
|
+
const SEARCH_BY_EXAMPLES_MAPPED = [
|
|
137
|
+
["allKinds", "all_kinds"],
|
|
138
|
+
["anyKinds", "any_kinds"],
|
|
139
|
+
["noneKinds", "none_kinds"],
|
|
140
|
+
["allLabels", "all_labels"],
|
|
141
|
+
["anyLabels", "any_labels"],
|
|
142
|
+
["noneLabels", "none_labels"],
|
|
143
|
+
["contentKind", "content_kind"],
|
|
144
|
+
];
|
|
145
|
+
/**
|
|
146
|
+
* Build a search-by-examples (mood-board) request. All narrowing rides on ``filters``; a Filters
|
|
147
|
+
* field with no wire slot here raises, as does ``matchBy`` given both as an argument and on
|
|
148
|
+
* ``filters``. ``spaces`` and the scope are already resolved.
|
|
149
|
+
*/
|
|
150
|
+
export function buildSearchByExamples(input) {
|
|
151
|
+
const body = {
|
|
152
|
+
positives: input.positives,
|
|
153
|
+
method: input.method,
|
|
154
|
+
limit: input.limit,
|
|
155
|
+
};
|
|
156
|
+
if (input.negatives?.length) {
|
|
157
|
+
body.negatives = input.negatives;
|
|
158
|
+
}
|
|
159
|
+
if (input.spaces !== undefined) {
|
|
160
|
+
body.spaces = input.spaces;
|
|
161
|
+
}
|
|
162
|
+
if (input.contrastSamples !== undefined) {
|
|
163
|
+
body.contrast_samples = input.contrastSamples;
|
|
164
|
+
}
|
|
165
|
+
if (input.features !== undefined) {
|
|
166
|
+
body.features = input.features;
|
|
167
|
+
}
|
|
168
|
+
let matchBy = input.matchBy;
|
|
169
|
+
const f = input.filters;
|
|
170
|
+
if (f) {
|
|
171
|
+
for (const field of SEARCH_BY_EXAMPLES_UNSUPPORTED) {
|
|
172
|
+
if (f[field] !== undefined) {
|
|
173
|
+
throw new InvalidArgumentError(`${field} is not supported by searchByExamples`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
if (f.matchBy !== undefined) {
|
|
177
|
+
if (matchBy !== undefined) {
|
|
178
|
+
throw new InvalidArgumentError("matchBy is set both as an argument and on filters — pass just one");
|
|
179
|
+
}
|
|
180
|
+
matchBy = f.matchBy;
|
|
181
|
+
}
|
|
182
|
+
for (const [field, wire] of SEARCH_BY_EXAMPLES_MAPPED) {
|
|
183
|
+
const value = f[field];
|
|
184
|
+
if (Array.isArray(value) ? value.length : value !== undefined) {
|
|
185
|
+
body[wire] = value;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
if (matchBy !== undefined) {
|
|
190
|
+
body.match_by = matchBy;
|
|
191
|
+
}
|
|
192
|
+
applyScope(body, input.project, input.collection);
|
|
193
|
+
return { method: "POST", path: "/v1/library/search-by-examples", json: body };
|
|
194
|
+
}
|
|
195
|
+
/** The JSON descriptor for a non-file operand (a file operand rides as a multipart part instead). */
|
|
196
|
+
function operandDescriptor(op) {
|
|
197
|
+
switch (op.kind) {
|
|
198
|
+
case "asset":
|
|
199
|
+
return { asset: op.assetId };
|
|
200
|
+
case "vector":
|
|
201
|
+
return { vector: op.vector };
|
|
202
|
+
case "text":
|
|
203
|
+
return { text: op.text };
|
|
204
|
+
case "concept": {
|
|
205
|
+
const desc = { concept: op.name };
|
|
206
|
+
if (op.collection !== undefined) {
|
|
207
|
+
desc.collection = op.collection;
|
|
208
|
+
}
|
|
209
|
+
return desc;
|
|
210
|
+
}
|
|
211
|
+
default:
|
|
212
|
+
throw new InvalidArgumentError(`operand kind ${op.kind} has no JSON descriptor`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Build a pairwise compare request (``POST /v1/library/compare``). A file operand becomes a
|
|
217
|
+
* multipart part (``a_file`` / ``b_file``); every other kind becomes a JSON-descriptor form field
|
|
218
|
+
* (``a`` / ``b``). With no file operand the body is ``application/x-www-form-urlencoded``. ``space``
|
|
219
|
+
* is already resolved by the caller.
|
|
220
|
+
*/
|
|
221
|
+
export function buildCompare(a, b, space, breakdown) {
|
|
222
|
+
const fields = {};
|
|
223
|
+
const files = {};
|
|
224
|
+
for (const [name, op] of [
|
|
225
|
+
["a", a],
|
|
226
|
+
["b", b],
|
|
227
|
+
]) {
|
|
228
|
+
if (op.kind === "file") {
|
|
229
|
+
files[`${name}_file`] = {
|
|
230
|
+
source: op.file,
|
|
231
|
+
filename: op.format ? `${name}.${op.format}` : undefined,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
fields[name] = JSON.stringify(operandDescriptor(op));
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
if (space !== undefined) {
|
|
239
|
+
fields.space = space;
|
|
240
|
+
}
|
|
241
|
+
if (breakdown) {
|
|
242
|
+
fields.breakdown = "true";
|
|
243
|
+
}
|
|
244
|
+
if (Object.keys(files).length) {
|
|
245
|
+
return { method: "POST", path: "/v1/library/compare", multipart: { fields, files } };
|
|
246
|
+
}
|
|
247
|
+
return { method: "POST", path: "/v1/library/compare", form: fields };
|
|
248
|
+
}
|
|
249
|
+
/** Build an enrichment request — the ``preview`` dry-run, or the staging/enqueue endpoint. */
|
|
250
|
+
export function buildEnrich(input) {
|
|
251
|
+
const body = {
|
|
252
|
+
query: input.query,
|
|
253
|
+
modality: input.modality,
|
|
254
|
+
tags: input.tags ?? [],
|
|
255
|
+
};
|
|
256
|
+
if (input.total !== undefined) {
|
|
257
|
+
body.total = input.total;
|
|
258
|
+
}
|
|
259
|
+
if (input.preview) {
|
|
260
|
+
return { method: "POST", path: "/v1/library/enrich/preview", json: body };
|
|
261
|
+
}
|
|
262
|
+
body.wait = input.wait ?? false;
|
|
263
|
+
return { method: "POST", path: "/v1/library/enrich", json: body };
|
|
264
|
+
}
|
|
265
|
+
/** Build a ``GET /v1/library/tags`` listing request (scoped to the collection chain / root). */
|
|
266
|
+
export function buildTagsList(opts = {}) {
|
|
267
|
+
const req = { method: "GET", path: "/v1/library/tags" };
|
|
268
|
+
if (opts.collection !== undefined) {
|
|
269
|
+
req.query = { collection: opts.collection };
|
|
270
|
+
}
|
|
271
|
+
return req;
|
|
272
|
+
}
|
|
273
|
+
/** Build a ``GET /v1/library/tags/{ref}`` request (name- or id-addressed within scope). */
|
|
274
|
+
export function buildTagGet(ref, opts = {}) {
|
|
275
|
+
const query = {};
|
|
276
|
+
if (opts.includeSnapshot) {
|
|
277
|
+
query.include_snapshot = "true";
|
|
278
|
+
}
|
|
279
|
+
if (opts.collection !== undefined) {
|
|
280
|
+
query.collection = opts.collection;
|
|
281
|
+
}
|
|
282
|
+
const req = { method: "GET", path: `/v1/library/tags/${encodeURIComponent(ref)}` };
|
|
283
|
+
if (Object.keys(query).length) {
|
|
284
|
+
req.query = query;
|
|
285
|
+
}
|
|
286
|
+
return req;
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=library.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"library.js","sourceRoot":"","sources":["../../src/shaping/library.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The shaped-request type the pure builders emit (the ``_shaping.Request`` analog).
|
|
3
|
+
*
|
|
4
|
+
* A builder returns ``{ method, path }`` plus exactly one payload channel:
|
|
5
|
+
* - ``json`` — a JSON body (the common case),
|
|
6
|
+
* - ``query`` — URL query params (GET listings),
|
|
7
|
+
* - ``multipart`` — a ``multipart/form-data`` upload (file inputs).
|
|
8
|
+
*
|
|
9
|
+
* The client's I/O layer turns this into a real ``fetch`` call; the builders themselves do no I/O
|
|
10
|
+
* (a URL-string {@link FileSource} is carried through and fetched by the client, not here).
|
|
11
|
+
*/
|
|
12
|
+
import type { FileSource } from "../files.js";
|
|
13
|
+
export type HttpMethod = "GET" | "POST" | "PUT" | "DELETE";
|
|
14
|
+
/** One file part of a multipart upload. ``filename`` / ``contentType`` are hints for the client. */
|
|
15
|
+
export interface FilePart {
|
|
16
|
+
source: FileSource;
|
|
17
|
+
filename?: string;
|
|
18
|
+
contentType?: string;
|
|
19
|
+
}
|
|
20
|
+
/** A ``multipart/form-data`` payload: string form fields plus named file parts. */
|
|
21
|
+
export interface Multipart {
|
|
22
|
+
fields: Record<string, string>;
|
|
23
|
+
files: Record<string, FilePart>;
|
|
24
|
+
}
|
|
25
|
+
export interface ShapedRequest {
|
|
26
|
+
method: HttpMethod;
|
|
27
|
+
path: string;
|
|
28
|
+
/** A JSON request body. */
|
|
29
|
+
json?: unknown;
|
|
30
|
+
/** URL query parameters (arrays become repeated keys). */
|
|
31
|
+
query?: Record<string, string | number | Array<string | number>>;
|
|
32
|
+
/** An ``application/x-www-form-urlencoded`` body (``compare``'s non-file operands). */
|
|
33
|
+
form?: Record<string, string>;
|
|
34
|
+
/** A multipart upload body. */
|
|
35
|
+
multipart?: Multipart;
|
|
36
|
+
/** A raw byte body (a room recording's chunk-append PUT — the offer capture wire). */
|
|
37
|
+
content?: ArrayBuffer;
|
|
38
|
+
/** The ``Content-Type`` for a {@link content} body (defaults to ``application/octet-stream``). */
|
|
39
|
+
contentType?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Add project/collection scoping to a body or query dict (in place), matching the Python SDK's
|
|
43
|
+
* ``_apply_scope``: the projects filter is a list (one project scopes to it), collection is a
|
|
44
|
+
* scalar. Shared by the search and asset-list builders.
|
|
45
|
+
*/
|
|
46
|
+
export declare function applyScope(target: Record<string, unknown>, project?: string, collection?: string): void;
|
|
47
|
+
//# sourceMappingURL=request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/shaping/request.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAA;AAE1D,oGAAoG;AACpG,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,UAAU,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,mFAAmF;AACnF,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,UAAU,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,2BAA2B;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAA;IAChE,uFAAuF;IACvF,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,+BAA+B;IAC/B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,sFAAsF;IACtF,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,kGAAkG;IAClG,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI,CAON"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The shaped-request type the pure builders emit (the ``_shaping.Request`` analog).
|
|
3
|
+
*
|
|
4
|
+
* A builder returns ``{ method, path }`` plus exactly one payload channel:
|
|
5
|
+
* - ``json`` — a JSON body (the common case),
|
|
6
|
+
* - ``query`` — URL query params (GET listings),
|
|
7
|
+
* - ``multipart`` — a ``multipart/form-data`` upload (file inputs).
|
|
8
|
+
*
|
|
9
|
+
* The client's I/O layer turns this into a real ``fetch`` call; the builders themselves do no I/O
|
|
10
|
+
* (a URL-string {@link FileSource} is carried through and fetched by the client, not here).
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Add project/collection scoping to a body or query dict (in place), matching the Python SDK's
|
|
14
|
+
* ``_apply_scope``: the projects filter is a list (one project scopes to it), collection is a
|
|
15
|
+
* scalar. Shared by the search and asset-list builders.
|
|
16
|
+
*/
|
|
17
|
+
export function applyScope(target, project, collection) {
|
|
18
|
+
if (project !== undefined) {
|
|
19
|
+
target.projects = [project];
|
|
20
|
+
}
|
|
21
|
+
if (collection !== undefined) {
|
|
22
|
+
target.collection = collection;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/shaping/request.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAoCH;;;;GAIG;AACH,MAAM,UAAU,UAAU,CACxB,MAA+B,EAC/B,OAAgB,EAChB,UAAmB;IAEnB,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,CAAC,UAAU,GAAG,UAAU,CAAA;IAChC,CAAC;AACH,CAAC"}
|