@vibes.diy/api-types 8.1.1 → 8.2.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/research.js ADDED
@@ -0,0 +1,262 @@
1
+ import { exception2Result } from "@adviser/cement";
2
+ import { type } from "arktype";
3
+ import { CoercedDate, utf8ByteLength } from "@vibes.diy/call-ai-v2";
4
+ export const RESEARCH_BLOCK_SEQ = -1;
5
+ export const RESEARCH_MAX_SOURCES = 3;
6
+ export const RESEARCH_MAX_EXCERPTS = 8;
7
+ export const RESEARCH_MAX_API_ENDPOINTS = 8;
8
+ export const RESEARCH_MAX_SEED_ROWS = 24;
9
+ export const RESEARCH_MAX_BRIEF_CHARS = 4_000;
10
+ export const RESEARCH_MAX_SOURCE_URL_CHARS = 2_048;
11
+ export const RESEARCH_MAX_CONTENT_TYPE_CHARS = 256;
12
+ export const RESEARCH_MAX_EXCERPT_CHARS = 400;
13
+ export const RESEARCH_MAX_LOCATOR_CHARS = 200;
14
+ export const RESEARCH_MAX_METHOD_CHARS = 32;
15
+ export const RESEARCH_MAX_PATH_CHARS = 512;
16
+ export const RESEARCH_MAX_DESCRIPTION_CHARS = 400;
17
+ export const RESEARCH_MAX_FIELD_CHARS = 128;
18
+ export const RESEARCH_MAX_FIELDS = 16;
19
+ export const RESEARCH_MAX_SEED_NAME_CHARS = 128;
20
+ export const RESEARCH_MAX_ITEM_BYTES = 8 * 1024;
21
+ export const RESEARCH_MAX_SEED_BYTES = 64 * 1024;
22
+ export const RESEARCH_MAX_EVENT_BYTES = 48 * 1024;
23
+ export const RESEARCH_JOB_MAX_TEXT_CHARS = 12_000;
24
+ export const RESEARCH_JOB_MAX_ID_CHARS = 256;
25
+ export const RESEARCH_JOB_MAX_MODEL_CHARS = 256;
26
+ export const RESEARCH_JOB_MAX_HANDLE_CHARS = 256;
27
+ const RESEARCH_MAX_ID_CHARS = 256;
28
+ const RESEARCH_MAX_COMPLETED_AT_CHARS = 64;
29
+ const RESEARCH_MAX_ERROR_CODE_CHARS = 64;
30
+ const RESEARCH_ERROR_CODE_RE = /^[a-z0-9][a-z0-9_.:-]*$/;
31
+ const RESEARCH_MAX_SEED_DEPTH = 5;
32
+ const RESEARCH_SEED_NAME_RE = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
33
+ export function isValidIsoTimestamp(value) {
34
+ if (typeof value !== "string")
35
+ return false;
36
+ const parsed = new Date(value);
37
+ return Number.isFinite(parsed.getTime()) && parsed.toISOString() === value;
38
+ }
39
+ function isPlainObject(value) {
40
+ return typeof value === "object" && value !== null && Array.isArray(value) === false;
41
+ }
42
+ function isBoundedJsonValue(value, depth) {
43
+ if (depth > RESEARCH_MAX_SEED_DEPTH)
44
+ return false;
45
+ if (value === null || typeof value === "string" || typeof value === "boolean")
46
+ return true;
47
+ if (typeof value === "number")
48
+ return Number.isFinite(value);
49
+ if (Array.isArray(value))
50
+ return value.every((item) => isBoundedJsonValue(item, depth + 1));
51
+ if (isPlainObject(value))
52
+ return Object.values(value).every((item) => isBoundedJsonValue(item, depth + 1));
53
+ return false;
54
+ }
55
+ function jsonByteLength(value) {
56
+ const serialized = exception2Result(() => JSON.stringify(value));
57
+ if (serialized.isErr())
58
+ return undefined;
59
+ const json = serialized.Ok();
60
+ return json === undefined ? undefined : utf8ByteLength(json);
61
+ }
62
+ function isSafeErrorCode(value) {
63
+ return (typeof value === "string" &&
64
+ value.length > 0 &&
65
+ value.length <= RESEARCH_MAX_ERROR_CODE_CHARS &&
66
+ RESEARCH_ERROR_CODE_RE.test(value));
67
+ }
68
+ const ResearchSource = type({
69
+ url: "string",
70
+ finalUrl: "string | null",
71
+ contentType: "string | null",
72
+ httpStatus: "number | null",
73
+ backendFetchable: "boolean",
74
+ fetched: "boolean",
75
+ "errorCode?": "string",
76
+ "+": "reject",
77
+ }).narrow((value, ctx) => {
78
+ if (value.url.length === 0 || value.url.length > RESEARCH_MAX_SOURCE_URL_CHARS) {
79
+ return ctx.mustBe("a bounded source URL");
80
+ }
81
+ if (value.finalUrl !== null && value.finalUrl.length > RESEARCH_MAX_SOURCE_URL_CHARS) {
82
+ return ctx.mustBe("a bounded final URL");
83
+ }
84
+ if (value.contentType !== null && value.contentType.length > RESEARCH_MAX_CONTENT_TYPE_CHARS) {
85
+ return ctx.mustBe("a bounded content type");
86
+ }
87
+ if (value.httpStatus !== null &&
88
+ (Number.isInteger(value.httpStatus) === false || value.httpStatus < 100 || value.httpStatus > 599)) {
89
+ return ctx.mustBe("a valid HTTP status");
90
+ }
91
+ if (value.errorCode !== undefined && isSafeErrorCode(value.errorCode) === false) {
92
+ return ctx.mustBe("a safe error code");
93
+ }
94
+ return true;
95
+ });
96
+ const ResearchApiEndpoint = type({
97
+ method: "string",
98
+ path: "string",
99
+ description: "string",
100
+ fields: "string[]",
101
+ "+": "reject",
102
+ }).narrow((value, ctx) => {
103
+ if (value.method.length === 0 || value.method.length > RESEARCH_MAX_METHOD_CHARS) {
104
+ return ctx.mustBe("a bounded method");
105
+ }
106
+ if (value.path.length === 0 || value.path.length > RESEARCH_MAX_PATH_CHARS) {
107
+ return ctx.mustBe("a bounded API path");
108
+ }
109
+ if (value.description.length > RESEARCH_MAX_DESCRIPTION_CHARS) {
110
+ return ctx.mustBe("a bounded API description");
111
+ }
112
+ if (value.fields.length > RESEARCH_MAX_FIELDS || value.fields.some((field) => field.length > RESEARCH_MAX_FIELD_CHARS)) {
113
+ return ctx.mustBe("bounded API fields");
114
+ }
115
+ return true;
116
+ });
117
+ const ResearchExcerpt = type({
118
+ sourceUrl: "string",
119
+ text: "string",
120
+ "locator?": "string",
121
+ "+": "reject",
122
+ }).narrow((value, ctx) => {
123
+ if (value.sourceUrl.length === 0 || value.sourceUrl.length > RESEARCH_MAX_SOURCE_URL_CHARS) {
124
+ return ctx.mustBe("a bounded excerpt source URL");
125
+ }
126
+ if (value.text.length > RESEARCH_MAX_EXCERPT_CHARS) {
127
+ return ctx.mustBe("a bounded excerpt");
128
+ }
129
+ if (value.locator !== undefined && value.locator.length > RESEARCH_MAX_LOCATOR_CHARS) {
130
+ return ctx.mustBe("a bounded excerpt locator");
131
+ }
132
+ return true;
133
+ });
134
+ const ResearchSeedRow = type({
135
+ sourceUrl: "string",
136
+ dbName: "string",
137
+ key: "string",
138
+ item: "unknown",
139
+ "+": "reject",
140
+ }).narrow((value, ctx) => {
141
+ if (value.sourceUrl.length === 0 || value.sourceUrl.length > RESEARCH_MAX_SOURCE_URL_CHARS) {
142
+ return ctx.mustBe("a bounded seed source URL");
143
+ }
144
+ if (value.dbName.length === 0 ||
145
+ value.dbName.length > RESEARCH_MAX_SEED_NAME_CHARS ||
146
+ RESEARCH_SEED_NAME_RE.test(value.dbName) === false) {
147
+ return ctx.mustBe("a safe seed database name");
148
+ }
149
+ if (value.key.length === 0 ||
150
+ value.key.length > RESEARCH_MAX_SEED_NAME_CHARS ||
151
+ RESEARCH_SEED_NAME_RE.test(value.key) === false) {
152
+ return ctx.mustBe("a safe seed key");
153
+ }
154
+ if (isBoundedJsonValue(value.item, 0) === false)
155
+ return ctx.mustBe("bounded JSON seed data");
156
+ const itemBytes = jsonByteLength(value.item);
157
+ if (itemBytes === undefined || itemBytes > RESEARCH_MAX_ITEM_BYTES) {
158
+ return ctx.mustBe("a bounded seed item");
159
+ }
160
+ return true;
161
+ });
162
+ export const PromptResearch = type({
163
+ type: "'prompt.research'",
164
+ version: "1",
165
+ streamId: "string",
166
+ chatId: "string",
167
+ seq: "number",
168
+ timestamp: CoercedDate,
169
+ researchId: "string",
170
+ status: "'complete'|'partial'|'failed'",
171
+ brief: "string",
172
+ sources: ResearchSource.array(),
173
+ api: ResearchApiEndpoint.array(),
174
+ excerpts: ResearchExcerpt.array(),
175
+ seedRows: ResearchSeedRow.array(),
176
+ completedAt: "string",
177
+ "errorCode?": "string",
178
+ "+": "reject",
179
+ }).narrow((value, ctx) => {
180
+ if (value.researchId.length === 0 || value.researchId.length > RESEARCH_MAX_ID_CHARS) {
181
+ return ctx.mustBe("a bounded research id");
182
+ }
183
+ if (value.brief.length > RESEARCH_MAX_BRIEF_CHARS)
184
+ return ctx.mustBe("a bounded research brief");
185
+ if (value.sources.length > RESEARCH_MAX_SOURCES)
186
+ return ctx.mustBe("bounded research sources");
187
+ if (value.api.length > RESEARCH_MAX_API_ENDPOINTS)
188
+ return ctx.mustBe("bounded research API endpoints");
189
+ if (value.excerpts.length > RESEARCH_MAX_EXCERPTS)
190
+ return ctx.mustBe("bounded research excerpts");
191
+ if (value.seedRows.length > RESEARCH_MAX_SEED_ROWS)
192
+ return ctx.mustBe("bounded research seed rows");
193
+ if (value.seq !== RESEARCH_BLOCK_SEQ)
194
+ return ctx.mustBe("the hidden research section sequence");
195
+ if (value.completedAt.length === 0 ||
196
+ value.completedAt.length > RESEARCH_MAX_COMPLETED_AT_CHARS ||
197
+ isValidIsoTimestamp(value.completedAt) === false) {
198
+ return ctx.mustBe("a bounded completion timestamp");
199
+ }
200
+ if (value.timestamp instanceof Date === false || Number.isFinite(value.timestamp.getTime()) === false) {
201
+ return ctx.mustBe("a valid server timestamp");
202
+ }
203
+ if (value.errorCode !== undefined && isSafeErrorCode(value.errorCode) === false) {
204
+ return ctx.mustBe("a safe research error code");
205
+ }
206
+ const seedBytes = jsonByteLength(value.seedRows);
207
+ if (seedBytes === undefined || seedBytes > RESEARCH_MAX_SEED_BYTES)
208
+ return ctx.mustBe("bounded research seed data");
209
+ const eventBytes = jsonByteLength(value);
210
+ if (eventBytes === undefined || eventBytes > RESEARCH_MAX_EVENT_BYTES)
211
+ return ctx.mustBe("a bounded research event");
212
+ return true;
213
+ });
214
+ export function isPromptResearch(value) {
215
+ return !(PromptResearch(value) instanceof type.errors);
216
+ }
217
+ export const evtUrlResearch = type({
218
+ type: "'vibes.diy.evt-url-research'",
219
+ userId: "string",
220
+ chatId: "string",
221
+ promptId: "string",
222
+ ownerHandle: "string",
223
+ appSlug: "string",
224
+ currentUserText: "string",
225
+ activatedUrls: "string[]",
226
+ model: "string",
227
+ "+": "reject",
228
+ }).narrow((value, ctx) => {
229
+ if (value.userId.length === 0 ||
230
+ value.chatId.length === 0 ||
231
+ value.promptId.length === 0 ||
232
+ value.userId.length > RESEARCH_JOB_MAX_ID_CHARS ||
233
+ value.chatId.length > RESEARCH_JOB_MAX_ID_CHARS ||
234
+ value.promptId.length > RESEARCH_JOB_MAX_ID_CHARS) {
235
+ return ctx.mustBe("bounded research identifiers");
236
+ }
237
+ if (value.ownerHandle.length === 0 ||
238
+ value.appSlug.length === 0 ||
239
+ value.ownerHandle.length > RESEARCH_JOB_MAX_HANDLE_CHARS ||
240
+ value.appSlug.length > RESEARCH_JOB_MAX_HANDLE_CHARS) {
241
+ return ctx.mustBe("bounded research app scope");
242
+ }
243
+ if (value.currentUserText.length > RESEARCH_JOB_MAX_TEXT_CHARS) {
244
+ return ctx.mustBe("bounded research user text");
245
+ }
246
+ if (value.model.length === 0 ||
247
+ value.model.length > RESEARCH_JOB_MAX_MODEL_CHARS ||
248
+ value.activatedUrls.length === 0 ||
249
+ value.activatedUrls.length > RESEARCH_MAX_SOURCES ||
250
+ value.activatedUrls.some((url) => url.length === 0 || url.length > RESEARCH_MAX_SOURCE_URL_CHARS || /\s/.test(url) || url.startsWith("https://") === false)) {
251
+ return ctx.mustBe("bounded HTTPS research candidates");
252
+ }
253
+ const eventBytes = jsonByteLength(value);
254
+ if (eventBytes === undefined || eventBytes > RESEARCH_MAX_EVENT_BYTES) {
255
+ return ctx.mustBe("a bounded research queue event");
256
+ }
257
+ return true;
258
+ });
259
+ export function isEvtUrlResearch(value) {
260
+ return !(evtUrlResearch(value) instanceof type.errors);
261
+ }
262
+ //# sourceMappingURL=research.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"research.js","sourceRoot":"","sources":["../jsr/research.ts"],"names":[],"mappings":"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"}