@runappsai/sdk 0.0.0-stage → 0.3.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.
Files changed (105) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +274 -2
  3. package/dist/activity-tracker.d.ts +113 -0
  4. package/dist/activity-tracker.d.ts.map +1 -0
  5. package/dist/activity-tracker.js +176 -0
  6. package/dist/activity-tracker.js.map +1 -0
  7. package/dist/audio.d.ts +129 -0
  8. package/dist/audio.d.ts.map +1 -0
  9. package/dist/audio.js +267 -0
  10. package/dist/audio.js.map +1 -0
  11. package/dist/browser-auth.d.ts +179 -0
  12. package/dist/browser-auth.d.ts.map +1 -0
  13. package/dist/browser-auth.js +1361 -0
  14. package/dist/browser-auth.js.map +1 -0
  15. package/dist/chat.d.ts +221 -0
  16. package/dist/chat.d.ts.map +1 -0
  17. package/dist/chat.js +155 -0
  18. package/dist/chat.js.map +1 -0
  19. package/dist/client.d.ts +155 -0
  20. package/dist/client.d.ts.map +1 -0
  21. package/dist/client.js +157 -0
  22. package/dist/client.js.map +1 -0
  23. package/dist/computer.d.ts +57 -0
  24. package/dist/computer.d.ts.map +1 -0
  25. package/dist/computer.js +21 -0
  26. package/dist/computer.js.map +1 -0
  27. package/dist/embeddings.d.ts +64 -0
  28. package/dist/embeddings.d.ts.map +1 -0
  29. package/dist/embeddings.js +30 -0
  30. package/dist/embeddings.js.map +1 -0
  31. package/dist/errors.d.ts +24 -0
  32. package/dist/errors.d.ts.map +1 -0
  33. package/dist/errors.js +29 -0
  34. package/dist/errors.js.map +1 -0
  35. package/dist/event-wrap.d.ts +59 -0
  36. package/dist/event-wrap.d.ts.map +1 -0
  37. package/dist/event-wrap.js +142 -0
  38. package/dist/event-wrap.js.map +1 -0
  39. package/dist/events.d.ts +119 -0
  40. package/dist/events.d.ts.map +1 -0
  41. package/dist/events.js +87 -0
  42. package/dist/events.js.map +1 -0
  43. package/dist/files.d.ts +218 -0
  44. package/dist/files.d.ts.map +1 -0
  45. package/dist/files.js +212 -0
  46. package/dist/files.js.map +1 -0
  47. package/dist/image.d.ts +185 -0
  48. package/dist/image.d.ts.map +1 -0
  49. package/dist/image.js +148 -0
  50. package/dist/image.js.map +1 -0
  51. package/dist/index.d.ts +30 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +26 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/media.d.ts +56 -0
  56. package/dist/media.d.ts.map +1 -0
  57. package/dist/media.js +133 -0
  58. package/dist/media.js.map +1 -0
  59. package/dist/model_options.d.ts +165 -0
  60. package/dist/model_options.d.ts.map +1 -0
  61. package/dist/model_options.js +59 -0
  62. package/dist/model_options.js.map +1 -0
  63. package/dist/models.d.ts +88 -0
  64. package/dist/models.d.ts.map +1 -0
  65. package/dist/models.js +55 -0
  66. package/dist/models.js.map +1 -0
  67. package/dist/sdk.umd.js +4 -0
  68. package/dist/sdk.umd.js.map +1 -0
  69. package/dist/transport.d.ts +120 -0
  70. package/dist/transport.d.ts.map +1 -0
  71. package/dist/transport.js +214 -0
  72. package/dist/transport.js.map +1 -0
  73. package/dist/types.d.ts +31 -0
  74. package/dist/types.d.ts.map +1 -0
  75. package/dist/types.js +2 -0
  76. package/dist/types.js.map +1 -0
  77. package/dist/validate.d.ts +16 -0
  78. package/dist/validate.d.ts.map +1 -0
  79. package/dist/validate.js +329 -0
  80. package/dist/validate.js.map +1 -0
  81. package/dist/video.d.ts +134 -0
  82. package/dist/video.d.ts.map +1 -0
  83. package/dist/video.js +60 -0
  84. package/dist/video.js.map +1 -0
  85. package/package.json +54 -4
  86. package/src/activity-tracker.ts +251 -0
  87. package/src/audio.ts +440 -0
  88. package/src/browser-auth.ts +1529 -0
  89. package/src/chat.ts +368 -0
  90. package/src/client.ts +250 -0
  91. package/src/computer.ts +80 -0
  92. package/src/embeddings.ts +97 -0
  93. package/src/errors.ts +29 -0
  94. package/src/event-wrap.ts +168 -0
  95. package/src/events.ts +172 -0
  96. package/src/files.ts +347 -0
  97. package/src/image.ts +339 -0
  98. package/src/index.ts +151 -0
  99. package/src/media.ts +147 -0
  100. package/src/model_options.ts +220 -0
  101. package/src/models.ts +121 -0
  102. package/src/transport.ts +292 -0
  103. package/src/types.ts +31 -0
  104. package/src/validate.ts +364 -0
  105. package/src/video.ts +215 -0
@@ -0,0 +1,329 @@
1
+ // Generic validator for the gateway's options schema. Mirrors
2
+ // /Users/zero/repos/sdk-go/validate.go — three-pass algorithm,
3
+ // same field/constraint vocabulary, same parse logic.
4
+ import { normalizeGroups } from "./model_options.js";
5
+ /**
6
+ * Three-pass validator: per-field type/enum/bounds → per-field
7
+ * presence → cross-field constraints. Unknown fields in `req`
8
+ * (vendor passthroughs) are silently ignored — the gateway still
9
+ * validates them server-side if it cares.
10
+ *
11
+ * Returns an empty array on success, or a flat list of all
12
+ * validation failures so the UI can surface them at once.
13
+ */
14
+ export function validateRequest(schema, req = {}) {
15
+ if (!schema)
16
+ return [];
17
+ const errors = [];
18
+ // Pass 1+2: per-field.
19
+ if (schema.inputs) {
20
+ for (const [name, field] of Object.entries(schema.inputs)) {
21
+ const set = name in req;
22
+ const val = req[name];
23
+ if (set && !isEmpty(val)) {
24
+ errors.push(...validateFieldValue(name, field, val));
25
+ }
26
+ else if (set && field.min_items !== undefined) {
27
+ // Empty array trips min_items even when isEmpty() short-
28
+ // circuits validateFieldValue. Mirrors the sdk-go fix: bound
29
+ // was declared explicitly, dropping it silently would let a
30
+ // client POST `groups: []` to a schema that requires >=1.
31
+ if (Array.isArray(val) && val.length < field.min_items) {
32
+ errors.push({ field: name, reason: `at least ${field.min_items} items` });
33
+ }
34
+ }
35
+ errors.push(...validatePresence(name, field, val, set));
36
+ }
37
+ }
38
+ // Pass 3: cross-field.
39
+ for (const c of schema.constraints ?? []) {
40
+ errors.push(...validateConstraint(c, req));
41
+ }
42
+ return errors;
43
+ }
44
+ function validateFieldValue(name, field, val) {
45
+ const errors = [];
46
+ if (!typeMatches(field.type, val)) {
47
+ errors.push({
48
+ field: name,
49
+ reason: `expected type ${field.type}, got ${describeType(val)}`,
50
+ });
51
+ return errors; // bail early — bound/enum checks need correct type
52
+ }
53
+ if (field.enum && field.enum.length > 0 && !inEnum(val, field.enum)) {
54
+ errors.push({
55
+ field: name,
56
+ reason: `must be one of ${JSON.stringify(field.enum)}`,
57
+ });
58
+ }
59
+ if (field.type === "int" || field.type === "float") {
60
+ const n = numberValue(val);
61
+ if (n !== null) {
62
+ if (field.min !== undefined && n < field.min) {
63
+ errors.push({ field: name, reason: `must be >= ${field.min}` });
64
+ }
65
+ if (field.max !== undefined && n > field.max) {
66
+ errors.push({ field: name, reason: `must be <= ${field.max}` });
67
+ }
68
+ }
69
+ }
70
+ // Array bounds — apply to scalar array Types ("url[]", "string[]")
71
+ // AND to `repeatable` object groups whose value is a JSON array.
72
+ if (Array.isArray(val)) {
73
+ if (field.max_items !== undefined && val.length > field.max_items) {
74
+ errors.push({
75
+ field: name,
76
+ reason: `at most ${field.max_items} items`,
77
+ });
78
+ }
79
+ if (field.min_items !== undefined && val.length < field.min_items) {
80
+ errors.push({
81
+ field: name,
82
+ reason: `at least ${field.min_items} items`,
83
+ });
84
+ }
85
+ }
86
+ // Nested object recursion. `field.fields` declares a structured
87
+ // sub-object; with `repeatable: true` the wire value is an array of
88
+ // such objects. Errors carry a dotted path like
89
+ // "groups[1].prompt: required" so callers see the offending row.
90
+ // `ui.show_when` is deliberately NOT honoured at validation time —
91
+ // it's a UI hint only; conditionally-hidden fields are still
92
+ // subject to the same checks if a client sends them.
93
+ if (field.fields) {
94
+ if (field.repeatable) {
95
+ if (!Array.isArray(val)) {
96
+ errors.push({
97
+ field: name,
98
+ reason: `expected array of objects, got ${describeType(val)}`,
99
+ });
100
+ }
101
+ else {
102
+ val.forEach((item, i) => {
103
+ if (typeof item !== "object" || item === null || Array.isArray(item)) {
104
+ errors.push({
105
+ field: `${name}[${i}]`,
106
+ reason: `expected object, got ${describeType(item)}`,
107
+ });
108
+ return;
109
+ }
110
+ errors.push(...validateObject(`${name}[${i}]`, field.fields, item));
111
+ });
112
+ }
113
+ }
114
+ else {
115
+ if (typeof val !== "object" || val === null || Array.isArray(val)) {
116
+ errors.push({
117
+ field: name,
118
+ reason: `expected object, got ${describeType(val)}`,
119
+ });
120
+ }
121
+ else {
122
+ errors.push(...validateObject(name, field.fields, val));
123
+ }
124
+ }
125
+ }
126
+ return errors;
127
+ }
128
+ /** validateObject runs per-field validation against a sub-schema's
129
+ * `fields` map for one object value. Errors return with
130
+ * `<pathPrefix>.<innerName>` so the caller sees the full nested path. */
131
+ function validateObject(pathPrefix, fields, obj) {
132
+ const errors = [];
133
+ for (const [innerName, innerField] of Object.entries(fields)) {
134
+ const childPath = `${pathPrefix}.${innerName}`;
135
+ const val = obj[innerName];
136
+ const set = innerName in obj;
137
+ if (set && !isEmpty(val)) {
138
+ errors.push(...validateFieldValue(childPath, innerField, val));
139
+ }
140
+ errors.push(...validatePresence(childPath, innerField, val, set));
141
+ }
142
+ return errors;
143
+ }
144
+ function validatePresence(name, field, val, set) {
145
+ const presence = field.presence ?? "optional";
146
+ if (presence === "required" && (!set || isEmpty(val))) {
147
+ return [{ field: name, reason: "required" }];
148
+ }
149
+ if (presence === "forbidden" && set && !isEmpty(val)) {
150
+ return [{ field: name, reason: "must not be set for this model" }];
151
+ }
152
+ return [];
153
+ }
154
+ function validateConstraint(c, req) {
155
+ switch (c.kind) {
156
+ case "any_of_required": {
157
+ const fields = c.fields ?? [];
158
+ const anySet = fields.some((f) => f in req && !isEmpty(req[f]));
159
+ if (anySet)
160
+ return [];
161
+ return [
162
+ {
163
+ field: fields.join("/"),
164
+ reason: `at least one of ${fields.join(", ")} is required`,
165
+ },
166
+ ];
167
+ }
168
+ case "mutually_exclusive": {
169
+ const fields = c.fields ?? [];
170
+ const setFields = fields.filter((f) => f in req && !isEmpty(req[f]));
171
+ if (setFields.length > 1) {
172
+ return [
173
+ {
174
+ field: setFields.join("/"),
175
+ reason: `at most one of ${fields.join(", ")} may be set (got: ${setFields.join(", ")})`,
176
+ },
177
+ ];
178
+ }
179
+ return [];
180
+ }
181
+ case "group_mutex": {
182
+ // Best-effort: enforce only the anonymous "at most one group
183
+ // active" rule for both shapes. The strict discriminator-based
184
+ // check (validating `c.name`'s value + rejecting non-active
185
+ // group fields) lives in the gateway only — SDK validation
186
+ // stays a fast pre-flight hint, not a contract enforcer, so we
187
+ // avoid doubling the maintenance surface across SDKs.
188
+ const groups = normalizeGroups(c.groups);
189
+ const activeGroups = [];
190
+ const activeFields = [];
191
+ for (const g of groups) {
192
+ const setHere = g.fields.filter((f) => f in req && !isEmpty(req[f]));
193
+ if (setHere.length > 0) {
194
+ activeGroups.push(g);
195
+ activeFields.push(...setHere);
196
+ }
197
+ }
198
+ if (activeGroups.length > 1) {
199
+ const labels = groups.map((g) => `[${g.fields.join("+")}]`).join(" or ");
200
+ return [
201
+ {
202
+ field: activeFields.join("/"),
203
+ reason: `at most one of ${labels} may be used (got: ${activeFields.join(", ")})`,
204
+ },
205
+ ];
206
+ }
207
+ return [];
208
+ }
209
+ case "requires_all": {
210
+ const whenName = c.when;
211
+ if (!whenName)
212
+ return [];
213
+ const whenSet = whenName in req && !isEmpty(req[whenName]);
214
+ if (!whenSet)
215
+ return [];
216
+ const missing = (c.then ?? []).filter((f) => !(f in req) || isEmpty(req[f]));
217
+ if (missing.length === 0)
218
+ return [];
219
+ return [
220
+ {
221
+ field: missing.join("/"),
222
+ reason: `required when ${whenName} is set`,
223
+ },
224
+ ];
225
+ }
226
+ case "pixel_bounds": {
227
+ const fieldName = c.fields?.[0];
228
+ if (!fieldName)
229
+ return [];
230
+ const raw = req[fieldName];
231
+ if (typeof raw !== "string" || raw === "")
232
+ return [];
233
+ const dims = parsePixelDims(raw);
234
+ if (!dims) {
235
+ return [{ field: fieldName, reason: `expected WxH dimensions, got "${raw}"` }];
236
+ }
237
+ const [w, h] = dims;
238
+ const px = w * h;
239
+ const errs = [];
240
+ if (c.min !== undefined && px < c.min) {
241
+ errs.push({
242
+ field: fieldName,
243
+ reason: `image too small: ${w}x${h} = ${px} pixels, minimum ${c.min}`,
244
+ });
245
+ }
246
+ if (c.max !== undefined && px > c.max) {
247
+ errs.push({
248
+ field: fieldName,
249
+ reason: `image too large: ${w}x${h} = ${px} pixels, maximum ${c.max}`,
250
+ });
251
+ }
252
+ return errs;
253
+ }
254
+ }
255
+ // Unknown constraint kind — skip (forward-compat).
256
+ return [];
257
+ }
258
+ // ─── Type helpers ────────────────────────────────────────────────────
259
+ function typeMatches(typ, val) {
260
+ switch (typ) {
261
+ case "string":
262
+ return typeof val === "string";
263
+ case "int":
264
+ case "float":
265
+ return numberValue(val) !== null;
266
+ case "bool":
267
+ return typeof val === "boolean";
268
+ case "url":
269
+ return typeof val === "string" && isURLLike(val);
270
+ case "url[]":
271
+ return Array.isArray(val) && val.every((v) => typeof v === "string" && isURLLike(v));
272
+ case "string[]":
273
+ return Array.isArray(val) && val.every((v) => typeof v === "string");
274
+ case "file":
275
+ return true; // multipart — can't validate
276
+ default:
277
+ return true; // unknown type — forward-compat
278
+ }
279
+ }
280
+ function describeType(val) {
281
+ if (val === null)
282
+ return "null";
283
+ if (Array.isArray(val))
284
+ return "array";
285
+ return typeof val;
286
+ }
287
+ function numberValue(val) {
288
+ if (typeof val === "number" && Number.isFinite(val))
289
+ return val;
290
+ return null;
291
+ }
292
+ function isURLLike(s) {
293
+ return s.startsWith("http://") || s.startsWith("https://") || s.startsWith("data:");
294
+ }
295
+ function isEmpty(val) {
296
+ if (val === undefined || val === null)
297
+ return true;
298
+ if (typeof val === "string")
299
+ return val === "";
300
+ if (Array.isArray(val))
301
+ return val.length === 0;
302
+ return false;
303
+ }
304
+ function inEnum(val, enumVals) {
305
+ for (const e of enumVals) {
306
+ if (equalLoose(val, e))
307
+ return true;
308
+ }
309
+ return false;
310
+ }
311
+ function equalLoose(a, b) {
312
+ // Numbers compared as JS numbers (already float64-equivalent);
313
+ // strings/bools by ===.
314
+ return a === b;
315
+ }
316
+ function parsePixelDims(s) {
317
+ for (const sep of ["x", "X", "*", "×"]) {
318
+ const idx = s.indexOf(sep);
319
+ if (idx <= 0)
320
+ continue;
321
+ const w = parseInt(s.slice(0, idx).trim(), 10);
322
+ const h = parseInt(s.slice(idx + sep.length).trim(), 10);
323
+ if (Number.isFinite(w) && Number.isFinite(h) && w > 0 && h > 0) {
324
+ return [w, h];
325
+ }
326
+ }
327
+ return null;
328
+ }
329
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ import type { Transport } from "./transport.js";
2
+ import type { Usage } from "./types.js";
3
+ import type { SDKEvents } from "./events.js";
4
+ /**
5
+ * Video generation params. Most fields map 1:1 to the gateway's
6
+ * `/v1/videos/generations` body. Optional booleans (`generate_audio`,
7
+ * `watermark`, `camera_fixed`, `return_last_frame`, `draft`) are
8
+ * tri-state — omit to use the upstream default; explicit `false`
9
+ * forces off.
10
+ */
11
+ export interface VideoGenerateParams {
12
+ prompt: string;
13
+ aspect_ratio?: string;
14
+ duration?: number;
15
+ resolution?: string;
16
+ generate_audio?: boolean;
17
+ /**
18
+ * First / last frame keyframes (image-to-video). Each accepts:
19
+ * - hosted https:// URL
20
+ * - data:image/...;base64,<payload> URI (use `encodeImageUrl`)
21
+ *
22
+ * The previous `first_frame_b64` / `last_frame_b64` sibling fields
23
+ * were removed — wrap raw bytes in a data: URI client-side via
24
+ * `encodeImageUrl` and pass through `*_url` instead.
25
+ */
26
+ first_frame_url?: string;
27
+ last_frame_url?: string;
28
+ /**
29
+ * Multimodal reference inputs (Seedance 2.0). Each entry can be a
30
+ * hosted URL or a data: URI (use `encodeImageUrl` for raw bytes).
31
+ * `reference_images_b64` was removed — fold any raw-base64 entries
32
+ * into `reference_image_urls` as data: URIs.
33
+ */
34
+ reference_image_urls?: string[];
35
+ reference_video_urls?: string[];
36
+ reference_audio_urls?: string[];
37
+ /** Single-input drivers (video-edit / motion-transfer / lip-sync). */
38
+ source_video_url?: string;
39
+ source_image_url?: string;
40
+ source_audio_url?: string;
41
+ watermark?: boolean;
42
+ camera_fixed?: boolean;
43
+ return_last_frame?: boolean;
44
+ seed?: number;
45
+ /** Alternative to `duration` for Seedance 1.0 pro / lite. */
46
+ frames?: number;
47
+ /** Seedance 1.5 pro Draft Mode. */
48
+ draft?: boolean;
49
+ draft_task_id?: string;
50
+ /** "flex" = offline (~50% price); pair with execution_expires_after. */
51
+ service_tier?: string;
52
+ execution_expires_after?: number;
53
+ /** Webhook for state-transition notifications. */
54
+ callback_url?: string;
55
+ user?: string;
56
+ /** Pass-through for provider-specific knobs. */
57
+ [extra: string]: unknown;
58
+ }
59
+ export interface VideoTask {
60
+ id: string;
61
+ status: string;
62
+ usage: Usage;
63
+ }
64
+ export interface VideoUsageTokens {
65
+ completion_tokens?: number;
66
+ total_tokens?: number;
67
+ }
68
+ export interface VideoStatus {
69
+ id: string;
70
+ status: string;
71
+ progress: number;
72
+ video_url?: string;
73
+ error?: string;
74
+ /** Final frame as a separate image — populated when return_last_frame=true. */
75
+ last_frame_url?: string;
76
+ /** Seedance Draft Mode Step1 task id, exposed when the draft succeeds. */
77
+ draft_task_id?: string;
78
+ duration?: number;
79
+ fps?: number;
80
+ resolution?: string;
81
+ ratio?: string;
82
+ seed?: number;
83
+ service_tier?: string;
84
+ /** Upstream-reported tokens (Seedance bills per output token). */
85
+ usage_tokens?: VideoUsageTokens;
86
+ created_at?: number;
87
+ updated_at?: number;
88
+ /**
89
+ * Human-readable credit line that the client SHOULD display alongside
90
+ * the video. Populated by stock-library models (Pexels) whose terms
91
+ * of service require crediting the contributor; AI generators leave
92
+ * it empty. Render verbatim — don't try to parse the format. See
93
+ * ImageResult.attribution for the same convention.
94
+ */
95
+ attribution?: string;
96
+ }
97
+ export interface WaitOptions {
98
+ /** Defaults to 5000ms. */
99
+ pollIntervalMs?: number;
100
+ signal?: AbortSignal;
101
+ }
102
+ export declare class VideoService {
103
+ private readonly transport;
104
+ private readonly events;
105
+ constructor(transport: Transport, events: SDKEvents);
106
+ /** Submit a video generation task.
107
+ *
108
+ * Telemetry note: only the submit step fires start/end on
109
+ * `client.events` — the per-call latency reflects the gateway
110
+ * accepting the job, NOT how long upstream takes to render. The
111
+ * caller's poll loop sees status flips but the SDK doesn't emit
112
+ * end events for those (would otherwise leave the badge "active"
113
+ * for as long as the upstream renders, sometimes minutes). */
114
+ generate(model: string, params: VideoGenerateParams, init?: {
115
+ signal?: AbortSignal;
116
+ }): Promise<VideoTask>;
117
+ /** Fetch the current status of a task. */
118
+ getStatus(taskID: string, init?: {
119
+ signal?: AbortSignal;
120
+ }): Promise<VideoStatus>;
121
+ /**
122
+ * Poll `getStatus()` until the task reaches a terminal state
123
+ * (`succeeded` / `failed`). Default poll interval is 5s.
124
+ */
125
+ wait(taskID: string, opts?: WaitOptions): Promise<VideoStatus>;
126
+ /** Download the raw video bytes for a completed task. */
127
+ getContent(taskID: string, init?: {
128
+ signal?: AbortSignal;
129
+ }): Promise<{
130
+ data: Uint8Array;
131
+ contentType: string;
132
+ }>;
133
+ }
134
+ //# sourceMappingURL=video.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../src/video.ts"],"names":[],"mappings":"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"}
package/dist/video.js ADDED
@@ -0,0 +1,60 @@
1
+ import { wrapEvents } from "./event-wrap.js";
2
+ export class VideoService {
3
+ transport;
4
+ events;
5
+ constructor(transport, events) {
6
+ this.transport = transport;
7
+ this.events = events;
8
+ }
9
+ /** Submit a video generation task.
10
+ *
11
+ * Telemetry note: only the submit step fires start/end on
12
+ * `client.events` — the per-call latency reflects the gateway
13
+ * accepting the job, NOT how long upstream takes to render. The
14
+ * caller's poll loop sees status flips but the SDK doesn't emit
15
+ * end events for those (would otherwise leave the badge "active"
16
+ * for as long as the upstream renders, sometimes minutes). */
17
+ async generate(model, params, init) {
18
+ return wrapEvents(this.events, { model, capability: "video_generation" }, () => this.transport.postJSON("/v1/videos/generations", { model, ...params }, init));
19
+ }
20
+ /** Fetch the current status of a task. */
21
+ async getStatus(taskID, init) {
22
+ return this.transport.getJSON(`/v1/videos/generations/${encodeURIComponent(taskID)}`, init);
23
+ }
24
+ /**
25
+ * Poll `getStatus()` until the task reaches a terminal state
26
+ * (`succeeded` / `failed`). Default poll interval is 5s.
27
+ */
28
+ async wait(taskID, opts = {}) {
29
+ const interval = opts.pollIntervalMs ?? 5000;
30
+ while (true) {
31
+ const status = await this.getStatus(taskID, { signal: opts.signal });
32
+ if (status.status === "succeeded" || status.status === "failed") {
33
+ return status;
34
+ }
35
+ await sleep(interval, opts.signal);
36
+ }
37
+ }
38
+ /** Download the raw video bytes for a completed task. */
39
+ async getContent(taskID, init) {
40
+ return this.transport.getRaw(`/v1/videos/${encodeURIComponent(taskID)}/content`, init);
41
+ }
42
+ }
43
+ function sleep(ms, signal) {
44
+ return new Promise((resolve, reject) => {
45
+ if (signal?.aborted) {
46
+ reject(signal.reason ?? new Error("aborted"));
47
+ return;
48
+ }
49
+ const timer = setTimeout(() => {
50
+ signal?.removeEventListener("abort", onAbort);
51
+ resolve();
52
+ }, ms);
53
+ const onAbort = () => {
54
+ clearTimeout(timer);
55
+ reject(signal.reason ?? new Error("aborted"));
56
+ };
57
+ signal?.addEventListener("abort", onAbort, { once: true });
58
+ });
59
+ }
60
+ //# sourceMappingURL=video.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video.js","sourceRoot":"","sources":["../src/video.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AA8H7C,MAAM,OAAO,YAAY;IAEJ;IACA;IAFnB,YACmB,SAAoB,EACpB,MAAiB;QADjB,cAAS,GAAT,SAAS,CAAW;QACpB,WAAM,GAAN,MAAM,CAAW;IACjC,CAAC;IAEJ;;;;;;;kEAO8D;IAC9D,KAAK,CAAC,QAAQ,CACZ,KAAa,EACb,MAA2B,EAC3B,IAA+B;QAE/B,OAAO,UAAU,CACf,IAAI,CAAC,MAAM,EACX,EAAE,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,EACzC,GAAG,EAAE,CACH,IAAI,CAAC,SAAS,CAAC,QAAQ,CACrB,wBAAwB,EACxB,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,EACpB,IAAI,CACL,CACJ,CAAC;IACJ,CAAC;IAED,0CAA0C;IAC1C,KAAK,CAAC,SAAS,CACb,MAAc,EACd,IAA+B;QAE/B,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAC3B,0BAA0B,kBAAkB,CAAC,MAAM,CAAC,EAAE,EACtD,IAAI,CACL,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,OAAoB,EAAE;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC;QAC7C,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACrE,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAChE,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,MAAM,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,yDAAyD;IACzD,KAAK,CAAC,UAAU,CACd,MAAc,EACd,IAA+B;QAE/B,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAC1B,cAAc,kBAAkB,CAAC,MAAM,CAAC,UAAU,EAClD,IAAI,CACL,CAAC;IACJ,CAAC;CACF;AAED,SAAS,KAAK,CAAC,EAAU,EAAE,MAAoB;IAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9C,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,MAAO,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC;QACF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,56 @@
1
1
  {
2
2
  "name": "@runappsai/sdk",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.3.0",
4
+ "description": "JavaScript / TypeScript client for the RunApps AI Gateway",
5
+ "license": "MIT",
6
+ "author": "RunApps",
7
+ "homepage": "https://github.com/runjobsai/sdk-js",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/runjobsai/sdk-js.git"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/runjobsai/sdk-js/issues"
14
+ },
15
+ "keywords": [
16
+ "runapps",
17
+ "ai",
18
+ "llm",
19
+ "gateway",
20
+ "sdk",
21
+ "openai-compatible"
22
+ ],
23
+ "type": "module",
24
+ "engines": {
25
+ "node": ">=18"
26
+ },
27
+ "main": "./dist/index.js",
28
+ "types": "./dist/index.d.ts",
29
+ "unpkg": "./dist/sdk.umd.js",
30
+ "jsdelivr": "./dist/sdk.umd.js",
31
+ "exports": {
32
+ ".": {
33
+ "import": "./dist/index.js",
34
+ "types": "./dist/index.d.ts"
35
+ },
36
+ "./browser": "./dist/sdk.umd.js"
37
+ },
38
+ "files": [
39
+ "dist",
40
+ "src",
41
+ "README.md",
42
+ "LICENSE"
43
+ ],
44
+ "scripts": {
45
+ "build": "tsc -p tsconfig.json && tsup",
46
+ "clean": "rm -rf dist",
47
+ "prepare": "tsc -p tsconfig.json",
48
+ "prepublishOnly": "npm run clean && npm run build",
49
+ "test": "npm run build && node --test tests/*.test.mjs"
50
+ },
51
+ "devDependencies": {
52
+ "@types/node": "^20.0.0",
53
+ "tsup": "^8.5.1",
54
+ "typescript": "^5.5.0"
55
+ }
56
+ }