@bowmark/web 1.23.0 → 1.24.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.
@@ -5,8 +5,8 @@
5
5
  // rather than imported. An `import` or `export` at the top level of this file would
6
6
  // turn it into a module and every declaration below would stop being global.
7
7
  //
8
- // Manifest version: 33a70781b68188bc68feb315e91e0c61cb56ecb49e10d82f223e4feb9d6b3399
9
- // 50 capabilities, 418 providers, 1121 typed functions, 20 refused.
8
+ // Manifest version: 0d8827f7a99d497bd9259feb3f5bd13b057c5a6793454c543b7ac1b7c784b9e2
9
+ // 50 capabilities, 419 providers, 1129 typed functions, 20 refused.
10
10
  // 51,715 family members, sharing 2 interface(s) — declared once and pointed at, never repeated per member.
11
11
  //
12
12
  // REFUSED — these functions are real and callable, and their declared arguments
@@ -225,9 +225,10 @@ type CallOptions = {
225
225
  /**
226
226
  * Starts a hosted browser agent on `task` and returns at once with its session `id` and a
227
227
  * `watchUrl`. Use ONLY after the library had nothing for this site or a function failed — each
228
- * turn spends real vendor money, charged to the account. Show `watchUrl` to your user: it lets
229
- * them watch the agent and take over the browser (log in, solve a captcha). Then poll with
230
- * `status`.
228
+ * turn spends real vendor money, charged to the account. Your account may hold up to 3
229
+ * concurrent sessions; call `list()` before starting if looping over multiple tasks. Show
230
+ * `watchUrl` to your user: it lets them watch the agent and take over the browser (log in,
231
+ * solve a captcha). Then poll with `status`. Always `stop()` a session when done.
231
232
  */
232
233
  start(options: StartBrowserAgentOptions): Promise<StartBrowserAgentResult>;
233
234
 
@@ -247,15 +248,17 @@ type CallOptions = {
247
248
  send(id: string, message: string, options?: SendBrowserAgentOptions): Promise<SendBrowserAgentResult>;
248
249
 
249
250
  /**
250
- * Stops the agent and shuts its browser; the watch link stops working. Always stop a session
251
- * you are done with — an open browser keeps costing money until Bowmark closes it after 20
252
- * idle minutes.
251
+ * Stops the agent and shuts its browser; the watch link stops working. Always `stop()` a
252
+ * session when you are done with it — an open browser keeps costing money until Bowmark closes
253
+ * it after 20 idle minutes, and the session counts against your 3-session concurrent limit
254
+ * even while idle.
253
255
  */
254
256
  stop(id: string): Promise<StopBrowserAgentResult>;
255
257
 
256
258
  /**
257
- * Lists this account's browser agent sessions, open ones by default — how to recover an id you
258
- * lost.
259
+ * Lists this account's browser agent sessions (open ones by default)check how many you're
260
+ * holding before starting a new one, especially when looping. Idle sessions count against the
261
+ * 3-session concurrent limit until you `stop()` them.
259
262
  */
260
263
  list(options?: ListBrowserAgentsOptions): Promise<ListBrowserAgentsResult>;
261
264
 
@@ -5204,6 +5207,36 @@ interface AppleRefurbishedCatalog {
5204
5207
  category: "mac" | "ipad" | "iphone" | "watch" | "appletv" | "homepod" | "airpods" | "accessories";
5205
5208
  listings: AppleRefurbishedListing[];
5206
5209
  }
5210
+ interface AppleAccessoryListing {
5211
+ partNumber: string;
5212
+ name: string;
5213
+ price: number | null;
5214
+ priceCurrency: string | null;
5215
+ url: string;
5216
+ image: string | null;
5217
+ }
5218
+ interface AppleAccessoryCatalog {
5219
+ category:
5220
+ | "cases-protection"
5221
+ | "chargers-adapters"
5222
+ | "headphones-speakers"
5223
+ | "drives-storage"
5224
+ | "mice-keyboards"
5225
+ | "gaming"
5226
+ | "office"
5227
+ | "travel-essentials"
5228
+ | "college-essentials"
5229
+ | "software"
5230
+ | "homekit"
5231
+ | "content-creation"
5232
+ | "health-fitness"
5233
+ | "new-arrivals"
5234
+ | "made-by-apple"
5235
+ | "accessibility";
5236
+ page: number;
5237
+ hasMore: boolean;
5238
+ listings: AppleAccessoryListing[];
5239
+ }
5207
5240
  interface AppleTradeInEstimate {
5208
5241
  device: string;
5209
5242
  upToUsd: number;
@@ -5429,6 +5462,15 @@ interface AppleCompareModels {
5429
5462
  */
5430
5463
  listRefurbished(category: "mac" | "ipad" | "iphone" | "watch" | "appletv" | "homepod" | "airpods" | "accessories"): Promise<AppleRefurbishedCatalog>;
5431
5464
 
5465
+ /**
5466
+ * Everything Apple sells that is not a device, browsable by the sixteen categories apple.com's
5467
+ * own accessories store uses — cases, chargers, headphones, drives, keyboards and the rest —
5468
+ * each listing with its real name, current price and the part number that resolves it straight
5469
+ * through getProductByPartNumber. Apple paginates this store server-side (up to 30 listings a
5470
+ * page); `hasMore` says whether another page exists, since apple.com publishes no total count.
5471
+ */
5472
+ listAccessories(category: "cases-protection" | "chargers-adapters" | "headphones-speakers" | "drives-storage" | "mice-keyboards" | "gaming" | "office" | "travel-essentials" | "college-essentials" | "software" | "homekit" | "content-creation" | "health-fitness" | "new-arrivals" | "made-by-apple" | "accessibility", page?: number): Promise<AppleAccessoryCatalog>;
5473
+
5432
5474
  /**
5433
5475
  * Reads apple.com's own trade-in value table and returns the CEILING ("up to $X")
5434
5476
  * cash-or-credit estimate it publishes for one device — a human name ("iPhone 14 Pro") or the
@@ -7607,8 +7649,11 @@ interface FormField {
7607
7649
  /** List BionicPO inquiry and service categories from the inquiry-services page. */
7608
7650
  listInquiryServices(): Promise<{ services: InquiryService[]; warnings: string[] }>;
7609
7651
 
7610
- /** Get a BionicPO inquiry service's form fields and details. */
7611
- getInquiryServiceDetails(serviceName: string): Promise<ServiceDetails>;
7652
+ /**
7653
+ * Look up one BionicPO inquiry service by name or id and return the site's own description for
7654
+ * it.
7655
+ */
7656
+ getInquiryServiceDetails(service: string): Promise<ServiceDetails>;
7612
7657
  }
7613
7658
  }
7614
7659
 
@@ -16976,14 +17021,19 @@ interface GoogleNewsFullCoverage {
16976
17021
 
16977
17022
  /**
16978
17023
  * Everything Google News has indexed from one publisher — `publisher` is a domain like
16979
- * "reuters.com" or "apnews.com" — newest first, optionally narrowed with `query` the same way
16980
- * `searchNews` takes one. Built on the search door with a `site:` filter
17024
+ * "reuters.com" or a name like "Reuters" — newest first, optionally narrowed with `query` the
17025
+ * same way `searchNews` takes one. Built on the search door with a `site:` filter
16981
17026
  * (`/rss/search?q=site:<publisher> <query>`), NOT on the route that looks like its own:
16982
17027
  * `/rss/headlines/section/publication/<NAME>` answers 200 with the Top stories feed
16983
17028
  * byte-for-byte for a name it cannot resolve, so it would look like it worked and be wrong for
16984
- * every publisher. Measured 2026-09-15: `site:reuters.com tesla` returned 100 items of which
16985
- * 100 carried a `<source>` domain on `reuters.com`. `locale` `{ hl, gl, ceid }` — asks for
16986
- * another country/language edition; omitted, the US English one.
17029
+ * every publisher. `site:` takes a DOMAIN, so a NAME is resolved to one through the search
17030
+ * door first (the host dominating that name's own search results) rather than passed straight
17031
+ * to `site:`, where it is mis-parsed as a TLD plus a keyword (measured 2026-09-17: "Al
17032
+ * Jazeera" returned 100 rows, all from the .al ccTLD) — a name the door cannot resolve is
17033
+ * refused rather than answered with the wrong newsroom. Measured 2026-09-15: `site:reuters.com
17034
+ * tesla` returned 100 items of which 100 carried a `<source>` domain on `reuters.com`.
17035
+ * `locale` — `{ hl, gl, ceid }` — asks for another country/language edition; omitted, the US
17036
+ * English one.
16987
17037
  */
16988
17038
  listPublisherHeadlines(publisher: string, query?: string, locale?: GoogleNewsLocaleArg): Promise<GoogleNewsPublisherHeadlines>;
16989
17039
 
@@ -19098,6 +19148,124 @@ interface HellotendService {
19098
19148
  }
19099
19149
  }
19100
19150
 
19151
+ declare namespace BowmarkProvider_higgsfield {
19152
+ // ── Higgsfield — the unit's own declarations, verbatim ──
19153
+ interface higgsfieldModel {
19154
+ id: string;
19155
+ path: string;
19156
+ kind: "image" | "video";
19157
+ needsInputImage: boolean;
19158
+ family: string;
19159
+ measuredUsd: number;
19160
+ }
19161
+
19162
+ interface higgsfieldEstimate {
19163
+ model: string;
19164
+ credits: number;
19165
+ usd: number;
19166
+ discountUsd: number | null;
19167
+ }
19168
+
19169
+ interface higgsfieldRequest {
19170
+ requestId: string;
19171
+ status: "queued" | "in_progress" | "completed" | "failed" | "nsfw" | "canceled";
19172
+ imageUrls: string[];
19173
+ videoUrl: string | null;
19174
+ error: string | null;
19175
+ statusUrl: string | null;
19176
+ cancelUrl: string | null;
19177
+ }
19178
+
19179
+ interface higgsfieldGeneration extends higgsfieldRequest {
19180
+ model: string;
19181
+ estimate: higgsfieldEstimate;
19182
+ settled: boolean;
19183
+ files: higgsfieldSavedFile[]; // the same media, kept in YOUR account — Higgsfield's own links expire
19184
+ warnings: string[];
19185
+ }
19186
+
19187
+ // Bowmark's own saved-file handle (`SavedFile`), spelled out here because the
19188
+ // published surface has to stand alone. Manage these with `bowmark.files.*`;
19189
+ // `url` is presigned and `bowmark.files.url(id)` mints a fresh one.
19190
+ interface higgsfieldSavedFile {
19191
+ id: string;
19192
+ name: string;
19193
+ contentType: string;
19194
+ bytes: number;
19195
+ url: string;
19196
+ expiresAt: string;
19197
+ }
19198
+
19199
+ /**
19200
+ * Higgsfield's own documented generation API — turns a text prompt (or a prompt plus an input
19201
+ * image) into images or video across 25 models live on this account, including Kling 2.5
19202
+ * Turbo, MiniMax Hailuo 02/2.3, WAN 2.5 and Higgsfield's own Soul and DoP. Every call is
19203
+ * quoted by Higgsfield before it is submitted, and only a generation watched to completion is
19204
+ * charged.
19205
+ */
19206
+ interface Unit {
19207
+ /**
19208
+ * Lists every generation model Bowmark's Higgsfield account can actually call, with what each
19209
+ * one produces, whether it needs an input image, and what one call was measured to cost.
19210
+ * Measured against the live API on 2026-09-16 by estimating all 48 endpoints Higgsfield's
19211
+ * OpenAPI document publishes: 25 answered, and the rest refused as model_not_found,
19212
+ * model_blocked or model_disabled — so this is the callable set, not the documented one. Takes
19213
+ * no arguments and makes no request.
19214
+ */
19215
+ listModels(): Promise<higgsfieldModel[]>;
19216
+
19217
+ /**
19218
+ * Asks Higgsfield what one generation will cost, for exactly the parameters you would submit,
19219
+ * before submitting it — the vendor's own credit and US-dollar figure for this account, with
19220
+ * any discount already applied. Generates nothing, produces no media and costs nothing.
19221
+ * `model` defaults to `soul`. This is the same quote the generate functions take internally
19222
+ * and charge from, so it is the honest answer to "what am I about to spend".
19223
+ */
19224
+ estimateCost(args: { prompt: string; model?: string; [param: string]: unknown }): Promise<higgsfieldEstimate>;
19225
+
19226
+ /**
19227
+ * Generates one or more images from a text prompt and waits for them, returning the finished
19228
+ * image URLs together with what Higgsfield quoted. `model` defaults to `soul` ($0.094
19229
+ * measured); `listModels()` has the rest. Any other key — `aspect_ratio`, `num_images`,
19230
+ * `input_images`, `output_format` — is passed to Higgsfield untouched, since each model takes
19231
+ * its own. Waits up to `waitMs` (default 120000) for a terminal state; pass 0 to submit and
19232
+ * return the handle immediately. **The finished images are copied into your Bowmark account
19233
+ * automatically and come back on `files` — use those URLs, not `imageUrls`.** Higgsfield
19234
+ * deletes its own copy after about seven days; a file in your account is yours until you
19235
+ * delete it, and costs storage while you keep it. Pass `save: false` to skip the copy and take
19236
+ * the expiring links. Uses Bowmark's Higgsfield key and charges the generation to your
19237
+ * account; send your own key as the `x-bowmark-vendor-key-higgsfield` header instead.
19238
+ */
19239
+ generateImage(args: string | { prompt: string; model?: string; waitMs?: number; save?: boolean; [param: string]: unknown }): Promise<higgsfieldGeneration>;
19240
+
19241
+ /**
19242
+ * Generates a video from a text prompt — or from a prompt plus an input image on the
19243
+ * image-to-video models — and waits for it, returning the finished video URL together with
19244
+ * what Higgsfield quoted. `model` defaults to `hailuo-02-standard` ($0.090 measured, the
19245
+ * cheapest live video model); Kling 2.1 Master is $1.400, so check `listModels()` or
19246
+ * `estimateCost` before reaching for a big one. Any other key (`duration`, `resolution`,
19247
+ * `input_images`) is passed to Higgsfield untouched. Waits up to `waitMs` (default 240000);
19248
+ * pass 0 to submit and poll with `getRequestStatus` yourself. **A call that waits copies the
19249
+ * finished video into your Bowmark account and returns it on `files` — use that URL, not
19250
+ * `videoUrl`**, because Higgsfield deletes its own copy after about seven days. Pass `save:
19251
+ * false` to skip the copy. A call with `waitMs: 0` saves nothing, since nothing has rendered
19252
+ * yet.
19253
+ */
19254
+ generateVideo(args: string | { prompt: string; model?: string; waitMs?: number; save?: boolean; [param: string]: unknown }): Promise<higgsfieldGeneration>;
19255
+
19256
+ /**
19257
+ * Checks one submitted generation by its `requestId` and returns its current state plus any
19258
+ * finished media. Use it after a generate call that returned `settled: false`, which means the
19259
+ * wait ran out while the generation was still running. `status` is Higgsfield's own: `queued`,
19260
+ * `in_progress`, `completed`, `failed`, `nsfw` (refused by moderation — reword the prompt) or
19261
+ * `canceled`. This is a free read and it never charges you, even for a generation it finds
19262
+ * completed — and for the same reason it never copies the media into your account either, so
19263
+ * the URLs it returns are Higgsfield's own and expire after about seven days.
19264
+ */
19265
+ getRequestStatus(args: string | { requestId: string }): Promise<higgsfieldRequest>;
19266
+ }
19267
+ }
19268
+
19101
19269
  declare namespace BowmarkProvider_highlandhomes {
19102
19270
  // ── Highland Homes — the unit's own declarations, verbatim ──
19103
19271
  interface HighlandHomesSearchFilter {
@@ -34873,6 +35041,34 @@ interface YoutubeSearchVideo {
34873
35041
  thumbnail: string | null;
34874
35042
  }
34875
35043
 
35044
+ interface YoutubeChannelRef {
35045
+ channelId: string;
35046
+ url: string;
35047
+ handle: string | null; // only set when the source we found it through carries one
35048
+ title: string | null; // only set coming off search; resolve_url gives no title
35049
+ subscriberCountText: string | null;
35050
+ thumbnail: string | null;
35051
+ }
35052
+
35053
+ interface YoutubeVideo {
35054
+ videoId: string;
35055
+ title: string;
35056
+ channel: string;
35057
+ channelId: string;
35058
+ description: string; // the full watch-page description, not a truncated snippet
35059
+ viewCount: number;
35060
+ likeCount: number | null; // null when the site itself hides it on this video
35061
+ lengthSeconds: number;
35062
+ publishDate: string | null; // ISO 8601
35063
+ uploadDate: string | null; // ISO 8601
35064
+ category: string | null;
35065
+ keywords: string[];
35066
+ isLiveNow: boolean; // live RIGHT NOW
35067
+ isLiveContent: boolean; // live now, or ever was (stays true for a finished stream's VOD)
35068
+ isUnlisted: boolean;
35069
+ thumbnails: { url: string; width: number; height: number }[];
35070
+ }
35071
+
34876
35072
  /**
34877
35073
  * A YouTube video's own caption transcript, read off the site's own Transcript panel —
34878
35074
  * timestamped lines plus the full text as one string. Language selection is not offered yet;
@@ -34894,6 +35090,26 @@ interface YoutubeSearchVideo {
34894
35090
  * the video has no caption track at all.
34895
35091
  */
34896
35092
  getTranscript(input: { video: string }): Promise<YoutubeTranscript>;
35093
+
35094
+ /**
35095
+ * Resolves a channel `@handle`, a channel/handle URL, or a plain channel name to its canonical
35096
+ * id — the door every other channel function here takes a channelId through. An `@handle` or
35097
+ * URL goes through YouTube's own `navigation/resolve_url` and returns just the id and
35098
+ * canonical URL (no title — that costs a second call, which `getChannel` makes). A plain name
35099
+ * runs a channel-filtered search and returns the first, best-matching channel with its title,
35100
+ * subscriber count and thumbnail. Returns null when nothing resolves — not a real answer to
35101
+ * build a `getChannel` call on.
35102
+ */
35103
+ findChannel(input: { query: string }): Promise<YoutubeChannelRef | null>;
35104
+
35105
+ /**
35106
+ * Everything the watch page says about one video without playing it: title, channel name and
35107
+ * id, full description, view count, like count, length in seconds, publish and upload dates,
35108
+ * category, the uploader's own keywords, every thumbnail size, and whether it is live now, was
35109
+ * ever live, or is unlisted. `video` is a bare 11-character video id or any
35110
+ * watch/shorts/embed/live/youtu.be URL, exactly as `getTranscript` takes it.
35111
+ */
35112
+ getVideo(input: { video: string }): Promise<YoutubeVideo>;
34897
35113
  }
34898
35114
  }
34899
35115
 
@@ -36004,6 +36220,7 @@ interface BowmarkProviders {
36004
36220
  heatherwood: BowmarkProvider_heatherwood.Unit;
36005
36221
  hellofresh: BowmarkProvider_hellofresh.Unit;
36006
36222
  hellotend: BowmarkProvider_hellotend.Unit;
36223
+ higgsfield: BowmarkProvider_higgsfield.Unit;
36007
36224
  highlandhomes: BowmarkProvider_highlandhomes.Unit;
36008
36225
  hilton: BowmarkProvider_hilton.Unit;
36009
36226
  historymaker: BowmarkProvider_historymaker.Unit;
@@ -5,10 +5,10 @@
5
5
  // declares no readable argument shape — not an absent one, which is what the
6
6
  // guard fails closed on.
7
7
  //
8
- // Manifest version: 33a70781b68188bc68feb315e91e0c61cb56ecb49e10d82f223e4feb9d6b3399
9
- // 1103 checked, 20 unchecked.
8
+ // Manifest version: 0d8827f7a99d497bd9259feb3f5bd13b057c5a6793454c543b7ac1b7c784b9e2
9
+ // 1111 checked, 20 unchecked.
10
10
  export const VALIDATORS = {
11
- "version": "33a70781b68188bc68feb315e91e0c61cb56ecb49e10d82f223e4feb9d6b3399",
11
+ "version": "0d8827f7a99d497bd9259feb3f5bd13b057c5a6793454c543b7ac1b7c784b9e2",
12
12
  "units": {
13
13
  "booking_links": {
14
14
  "defs": {
@@ -5462,6 +5462,88 @@ export const VALIDATORS = {
5462
5462
  "optional": false
5463
5463
  }
5464
5464
  ],
5465
+ "listAccessories": [
5466
+ {
5467
+ "name": "category",
5468
+ "schema": {
5469
+ "k": "union",
5470
+ "of": [
5471
+ {
5472
+ "k": "literal",
5473
+ "v": "cases-protection"
5474
+ },
5475
+ {
5476
+ "k": "literal",
5477
+ "v": "chargers-adapters"
5478
+ },
5479
+ {
5480
+ "k": "literal",
5481
+ "v": "headphones-speakers"
5482
+ },
5483
+ {
5484
+ "k": "literal",
5485
+ "v": "drives-storage"
5486
+ },
5487
+ {
5488
+ "k": "literal",
5489
+ "v": "mice-keyboards"
5490
+ },
5491
+ {
5492
+ "k": "literal",
5493
+ "v": "gaming"
5494
+ },
5495
+ {
5496
+ "k": "literal",
5497
+ "v": "office"
5498
+ },
5499
+ {
5500
+ "k": "literal",
5501
+ "v": "travel-essentials"
5502
+ },
5503
+ {
5504
+ "k": "literal",
5505
+ "v": "college-essentials"
5506
+ },
5507
+ {
5508
+ "k": "literal",
5509
+ "v": "software"
5510
+ },
5511
+ {
5512
+ "k": "literal",
5513
+ "v": "homekit"
5514
+ },
5515
+ {
5516
+ "k": "literal",
5517
+ "v": "content-creation"
5518
+ },
5519
+ {
5520
+ "k": "literal",
5521
+ "v": "health-fitness"
5522
+ },
5523
+ {
5524
+ "k": "literal",
5525
+ "v": "new-arrivals"
5526
+ },
5527
+ {
5528
+ "k": "literal",
5529
+ "v": "made-by-apple"
5530
+ },
5531
+ {
5532
+ "k": "literal",
5533
+ "v": "accessibility"
5534
+ }
5535
+ ]
5536
+ },
5537
+ "optional": false
5538
+ },
5539
+ {
5540
+ "name": "page",
5541
+ "schema": {
5542
+ "k": "number"
5543
+ },
5544
+ "optional": true
5545
+ }
5546
+ ],
5465
5547
  "getTradeInEstimate": [
5466
5548
  {
5467
5549
  "name": "model",
@@ -7325,7 +7407,7 @@ export const VALIDATORS = {
7325
7407
  "listInquiryServices": [],
7326
7408
  "getInquiryServiceDetails": [
7327
7409
  {
7328
- "name": "serviceName",
7410
+ "name": "service",
7329
7411
  "schema": {
7330
7412
  "k": "string"
7331
7413
  },
@@ -16837,6 +16919,166 @@ export const VALIDATORS = {
16837
16919
  ]
16838
16920
  }
16839
16921
  },
16922
+ "providers.higgsfield": {
16923
+ "defs": {},
16924
+ "functions": {
16925
+ "listModels": [],
16926
+ "estimateCost": [
16927
+ {
16928
+ "name": "args",
16929
+ "schema": {
16930
+ "k": "object",
16931
+ "props": [
16932
+ {
16933
+ "name": "prompt",
16934
+ "schema": {
16935
+ "k": "string"
16936
+ },
16937
+ "optional": false
16938
+ },
16939
+ {
16940
+ "name": "model",
16941
+ "schema": {
16942
+ "k": "string"
16943
+ },
16944
+ "optional": true
16945
+ }
16946
+ ],
16947
+ "index": {
16948
+ "k": "any"
16949
+ }
16950
+ },
16951
+ "optional": false
16952
+ }
16953
+ ],
16954
+ "generateImage": [
16955
+ {
16956
+ "name": "args",
16957
+ "schema": {
16958
+ "k": "union",
16959
+ "of": [
16960
+ {
16961
+ "k": "string"
16962
+ },
16963
+ {
16964
+ "k": "object",
16965
+ "props": [
16966
+ {
16967
+ "name": "prompt",
16968
+ "schema": {
16969
+ "k": "string"
16970
+ },
16971
+ "optional": false
16972
+ },
16973
+ {
16974
+ "name": "model",
16975
+ "schema": {
16976
+ "k": "string"
16977
+ },
16978
+ "optional": true
16979
+ },
16980
+ {
16981
+ "name": "waitMs",
16982
+ "schema": {
16983
+ "k": "number"
16984
+ },
16985
+ "optional": true
16986
+ },
16987
+ {
16988
+ "name": "save",
16989
+ "schema": {
16990
+ "k": "boolean"
16991
+ },
16992
+ "optional": true
16993
+ }
16994
+ ],
16995
+ "index": {
16996
+ "k": "any"
16997
+ }
16998
+ }
16999
+ ]
17000
+ },
17001
+ "optional": false
17002
+ }
17003
+ ],
17004
+ "generateVideo": [
17005
+ {
17006
+ "name": "args",
17007
+ "schema": {
17008
+ "k": "union",
17009
+ "of": [
17010
+ {
17011
+ "k": "string"
17012
+ },
17013
+ {
17014
+ "k": "object",
17015
+ "props": [
17016
+ {
17017
+ "name": "prompt",
17018
+ "schema": {
17019
+ "k": "string"
17020
+ },
17021
+ "optional": false
17022
+ },
17023
+ {
17024
+ "name": "model",
17025
+ "schema": {
17026
+ "k": "string"
17027
+ },
17028
+ "optional": true
17029
+ },
17030
+ {
17031
+ "name": "waitMs",
17032
+ "schema": {
17033
+ "k": "number"
17034
+ },
17035
+ "optional": true
17036
+ },
17037
+ {
17038
+ "name": "save",
17039
+ "schema": {
17040
+ "k": "boolean"
17041
+ },
17042
+ "optional": true
17043
+ }
17044
+ ],
17045
+ "index": {
17046
+ "k": "any"
17047
+ }
17048
+ }
17049
+ ]
17050
+ },
17051
+ "optional": false
17052
+ }
17053
+ ],
17054
+ "getRequestStatus": [
17055
+ {
17056
+ "name": "args",
17057
+ "schema": {
17058
+ "k": "union",
17059
+ "of": [
17060
+ {
17061
+ "k": "string"
17062
+ },
17063
+ {
17064
+ "k": "object",
17065
+ "props": [
17066
+ {
17067
+ "name": "requestId",
17068
+ "schema": {
17069
+ "k": "string"
17070
+ },
17071
+ "optional": false
17072
+ }
17073
+ ]
17074
+ }
17075
+ ]
17076
+ },
17077
+ "optional": false
17078
+ }
17079
+ ]
17080
+ }
17081
+ },
16840
17082
  "providers.highlandhomes": {
16841
17083
  "defs": {
16842
17084
  "HighlandHomesSearchFilter": {
@@ -32994,6 +33236,42 @@ export const VALIDATORS = {
32994
33236
  },
32995
33237
  "optional": false
32996
33238
  }
33239
+ ],
33240
+ "findChannel": [
33241
+ {
33242
+ "name": "input",
33243
+ "schema": {
33244
+ "k": "object",
33245
+ "props": [
33246
+ {
33247
+ "name": "query",
33248
+ "schema": {
33249
+ "k": "string"
33250
+ },
33251
+ "optional": false
33252
+ }
33253
+ ]
33254
+ },
33255
+ "optional": false
33256
+ }
33257
+ ],
33258
+ "getVideo": [
33259
+ {
33260
+ "name": "input",
33261
+ "schema": {
33262
+ "k": "object",
33263
+ "props": [
33264
+ {
33265
+ "name": "video",
33266
+ "schema": {
33267
+ "k": "string"
33268
+ },
33269
+ "optional": false
33270
+ }
33271
+ ]
33272
+ },
33273
+ "optional": false
33274
+ }
32997
33275
  ]
32998
33276
  }
32999
33277
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bowmark/web",
3
- "version": "1.23.0",
3
+ "version": "1.24.0",
4
4
  "type": "module",
5
5
  "description": "The public client for the Bowmark capability library — real TypeScript for the whole bowmark.* surface, with no Bowmark source on the caller's disk. ZERO runtime dependencies, deliberately and permanently.",
6
6
  "license": "MIT",