@bowmark/web 1.22.1 → 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.
- package/dist/generated/library.d.ts +883 -60
- package/dist/generated/validators.js +1115 -43
- package/package.json +1 -1
|
@@ -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:
|
|
9
|
-
//
|
|
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
|
|
@@ -155,6 +155,121 @@ type CallOptions = {
|
|
|
155
155
|
}
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
+
declare namespace BowmarkCapability_browser_agent {
|
|
159
|
+
// ── Browser agent — the unit's own declarations, verbatim ──
|
|
160
|
+
type BrowserAgentStatus = "running" | "needs_input" | "idle" | "failed" | "stopped" | "closed";
|
|
161
|
+
interface BrowserAgentQuestion {
|
|
162
|
+
kind: "question" | "takeover"; // takeover = a person must act in watchUrl (login, captcha)
|
|
163
|
+
question: string;
|
|
164
|
+
}
|
|
165
|
+
interface StartBrowserAgentOptions {
|
|
166
|
+
task: string; // plain language, name the site
|
|
167
|
+
backend?: string; // default "browser_use"
|
|
168
|
+
model?: string; // e.g. "claude-sonnet-5"; default "gpt-5.6-luna"
|
|
169
|
+
maxCostUsd?: number; // vendor spend ceiling per turn, default 2, max 25
|
|
170
|
+
proxyCountry?: string; // e.g. "us"
|
|
171
|
+
timeoutMs?: number;
|
|
172
|
+
}
|
|
173
|
+
interface StartBrowserAgentResult {
|
|
174
|
+
id: string; // keep this: status/send/stop take it
|
|
175
|
+
status: BrowserAgentStatus;
|
|
176
|
+
watchUrl: string; // private link to WATCH AND CONTROL the live browser — show it to your user only
|
|
177
|
+
backend: string;
|
|
178
|
+
model: string;
|
|
179
|
+
warnings: string[];
|
|
180
|
+
}
|
|
181
|
+
interface BrowserAgentStep { at: string; kind: "thinking" | "action" | "message"; text: string }
|
|
182
|
+
interface BrowserAgentStatusOptions {
|
|
183
|
+
cursor?: string; // from the previous status() — only newer steps return
|
|
184
|
+
waitMs?: number; // wait up to this long (max 60000) for the status to change
|
|
185
|
+
timeoutMs?: number;
|
|
186
|
+
}
|
|
187
|
+
interface BrowserAgentStatusResult {
|
|
188
|
+
id: string;
|
|
189
|
+
status: BrowserAgentStatus;
|
|
190
|
+
question: BrowserAgentQuestion | null; // set when status is "needs_input"
|
|
191
|
+
result: string | null; // the agent's answer for its last finished turn
|
|
192
|
+
error: string | null;
|
|
193
|
+
steps: BrowserAgentStep[];
|
|
194
|
+
cursor: string;
|
|
195
|
+
task: string;
|
|
196
|
+
backend: string;
|
|
197
|
+
model: string;
|
|
198
|
+
closed: boolean;
|
|
199
|
+
warnings: string[];
|
|
200
|
+
}
|
|
201
|
+
interface SendBrowserAgentOptions { interrupt?: boolean; timeoutMs?: number }
|
|
202
|
+
interface SendBrowserAgentResult { id: string; status: BrowserAgentStatus; warnings: string[] }
|
|
203
|
+
interface StopBrowserAgentResult { id: string; status: BrowserAgentStatus; warnings: string[] }
|
|
204
|
+
interface BrowserAgentSummary {
|
|
205
|
+
id: string; status: BrowserAgentStatus; task: string; backend: string; model: string;
|
|
206
|
+
question: BrowserAgentQuestion | null; createdAt: string; closedAt: string | null;
|
|
207
|
+
}
|
|
208
|
+
interface ListBrowserAgentsOptions { open?: boolean } // default true
|
|
209
|
+
interface ListBrowserAgentsResult { sessions: BrowserAgentSummary[]; warnings: string[] }
|
|
210
|
+
interface WatchLinkResult { id: string; watchUrl: string; warnings: string[] }
|
|
211
|
+
|
|
212
|
+
type CallOptions = {
|
|
213
|
+
timeoutMs?: number // per-provider budget in ms, default 30000, clamped to 1000-55000.
|
|
214
|
+
// A provider slower than this is DROPPED from the results and
|
|
215
|
+
// NAMED in warnings — never silently absent
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* LAST RESORT, and it costs money: hands a plain-language task to a hosted AI browser agent
|
|
220
|
+
* (Browser Use) when no Bowmark function covers the site or a script against one failed.
|
|
221
|
+
* Returns a session id and a private link your user can open to watch and take over the live
|
|
222
|
+
* browser; later scripts poll it, answer its questions and stop it.
|
|
223
|
+
*/
|
|
224
|
+
interface Unit {
|
|
225
|
+
/**
|
|
226
|
+
* Starts a hosted browser agent on `task` and returns at once with its session `id` and a
|
|
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. 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.
|
|
232
|
+
*/
|
|
233
|
+
start(options: StartBrowserAgentOptions): Promise<StartBrowserAgentResult>;
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Reads a session: `running`, `needs_input` (relay `question` to your user, answer with
|
|
237
|
+
* `send`), `idle` (done — read `result`), `failed`, `stopped` or `closed`. Pass the previous
|
|
238
|
+
* `cursor` for only new steps, and `waitMs` (≤ 60000) to wait for a change instead of polling
|
|
239
|
+
* tightly.
|
|
240
|
+
*/
|
|
241
|
+
status(id: string, options?: BrowserAgentStatusOptions): Promise<BrowserAgentStatusResult>;
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Sends the agent a follow-up in the same browser: an answer to its question, the go-ahead
|
|
245
|
+
* after your user took over, or a new instruction. Runs when its current turn ends, or at once
|
|
246
|
+
* with `interrupt: true`. Each turn is billed.
|
|
247
|
+
*/
|
|
248
|
+
send(id: string, message: string, options?: SendBrowserAgentOptions): Promise<SendBrowserAgentResult>;
|
|
249
|
+
|
|
250
|
+
/**
|
|
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.
|
|
255
|
+
*/
|
|
256
|
+
stop(id: string): Promise<StopBrowserAgentResult>;
|
|
257
|
+
|
|
258
|
+
/**
|
|
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.
|
|
262
|
+
*/
|
|
263
|
+
list(options?: ListBrowserAgentsOptions): Promise<ListBrowserAgentsResult>;
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Makes a NEW watch link for an open session, for when the one from `start` was lost. The
|
|
267
|
+
* previous link stops working.
|
|
268
|
+
*/
|
|
269
|
+
watchLink(id: string): Promise<WatchLinkResult>;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
158
273
|
declare namespace BowmarkCapability_bundles {
|
|
159
274
|
// ── Check whether a set of products can be built and bought right now — the unit's own declarations, verbatim ──
|
|
160
275
|
interface BundleItemAvailability {
|
|
@@ -571,23 +686,19 @@ type CallOptions = {
|
|
|
571
686
|
}
|
|
572
687
|
|
|
573
688
|
/**
|
|
574
|
-
* Actually RUNS a developer dashboard's signup flow and hands back a real, usable API key
|
|
575
|
-
*
|
|
576
|
-
*
|
|
577
|
-
*
|
|
578
|
-
*
|
|
579
|
-
* permission for. MAKE THE EMAIL UNIQUE PER CALL (see the worked example) — the dashboard
|
|
580
|
-
* dedupes by address, so a copied literal example email gets "Redundant origin" on the second
|
|
581
|
-
* and every later run.
|
|
689
|
+
* Actually RUNS a developer dashboard's signup flow and hands back a real, usable API key.
|
|
690
|
+
* Supports: Alpha Vantage (instant, no verification). Call it directly; don't just describe
|
|
691
|
+
* the steps. For Alpha Vantage with a placeholder identity: MAKE THE EMAIL UNIQUE PER CALL
|
|
692
|
+
* (see the worked example) — the dashboard dedupes by address, so a copied literal example
|
|
693
|
+
* email gets "Redundant origin" on the second and every later run.
|
|
582
694
|
*/
|
|
583
695
|
interface Unit {
|
|
584
696
|
/**
|
|
585
697
|
* Signs up for a real developer API key on a dashboard. `service` selects which dashboard:
|
|
586
|
-
* "alphavantage" for stock data.
|
|
587
|
-
*
|
|
588
|
-
*
|
|
589
|
-
*
|
|
590
|
-
* `options.timeoutMs` sets call budget (default 30000).
|
|
698
|
+
* "alphavantage" for stock data. For alphavantage: `details.organization` and `details.email`
|
|
699
|
+
* required (MAKE EMAIL UNIQUE PER CALL, e.g. `qa-${Date.now()}@example.com`);
|
|
700
|
+
* `details.occupation` optional. Returns real key plus confirmation. `options.timeoutMs` sets
|
|
701
|
+
* call budget (default 30000).
|
|
591
702
|
*/
|
|
592
703
|
signUp(service: string, details: object, options?: CallOptions): Promise<DeveloperApiKeySignupResult>;
|
|
593
704
|
}
|
|
@@ -724,6 +835,27 @@ type CallOptions = {
|
|
|
724
835
|
|
|
725
836
|
declare namespace BowmarkCapability_flights {
|
|
726
837
|
// ── Flights — the unit's own declarations, verbatim ──
|
|
838
|
+
// ── "Which day is cheapest?" ── NOT a flights.* function: it is ONE provider call,
|
|
839
|
+
// bowmark.providers.google_flights.getPriceGraph(query: FlightQuery): Promise<PriceGraph>,
|
|
840
|
+
// typed here so no second lookup is needed. Only from/to/depart/return are read.
|
|
841
|
+
// The window is Google's own: about depart-7 days to depart+52 days, not selectable,
|
|
842
|
+
// so to cover a whole month from its 1st pass depart = the 8th.
|
|
843
|
+
type PricePoint = {
|
|
844
|
+
date: string // departure date, "2026-11-08"
|
|
845
|
+
returnDate: string | null // the return priced with it; null for one-way
|
|
846
|
+
price: number | null // cheapest total that day; null where none was priced
|
|
847
|
+
currency: string
|
|
848
|
+
}
|
|
849
|
+
type PriceGraph = {
|
|
850
|
+
from: string
|
|
851
|
+
to: string
|
|
852
|
+
tripType: "round trip" | "one way"
|
|
853
|
+
rangeStart: string // the window Google actually returned
|
|
854
|
+
rangeEnd: string
|
|
855
|
+
points: PricePoint[] // ascending by date
|
|
856
|
+
cheapest: PricePoint | null // ties go to the earliest date
|
|
857
|
+
url: string
|
|
858
|
+
}
|
|
727
859
|
type FlightQuery = {
|
|
728
860
|
from: string // IATA ("SFO") — best for cross-provider matching
|
|
729
861
|
to: string
|
|
@@ -876,7 +1008,10 @@ type FlightStatusResult = {
|
|
|
876
1008
|
* returning `flights: []`, since an empty list would otherwise be indistinguishable from a
|
|
877
1009
|
* route nobody flies. `options.timeoutMs` sets the per-site budget (default 30000) — a site
|
|
878
1010
|
* slower than that is dropped and named, so the answer arrives inside the calling client's own
|
|
879
|
-
* tool-call limit rather than not at all.
|
|
1011
|
+
* tool-call limit rather than not at all. **For 'which day is cheapest' over a range of dates,
|
|
1012
|
+
* do not call this once per date**: `bowmark.providers.google_flights.getPriceGraph(query:
|
|
1013
|
+
* FlightQuery): Promise<PriceGraph>` (both typed above) prices every departure date from about
|
|
1014
|
+
* depart-7 to depart+52 in one call.
|
|
880
1015
|
*/
|
|
881
1016
|
search(query: FlightQuery, options?: CallOptions): Promise<FlightSearchResult>;
|
|
882
1017
|
|
|
@@ -2591,11 +2726,12 @@ type ShippingQuery = {
|
|
|
2591
2726
|
// One normalized shipping-rate quote. Same shape no matter which carrier
|
|
2592
2727
|
// quoted it.
|
|
2593
2728
|
type ShippingRate = {
|
|
2594
|
-
source: string // "usps" | "ups"
|
|
2729
|
+
source: string // "usps" | "ups" | "pirateship"
|
|
2595
2730
|
serviceCode: string // the carrier's own code, verbatim
|
|
2596
2731
|
serviceName: string // the carrier's own name, e.g. "UPS Ground"
|
|
2597
2732
|
price: { amount: number; currency: string } // integer minor units (cents)
|
|
2598
2733
|
transitDays: number | null // null when the carrier didn't state one
|
|
2734
|
+
deliveryEstimate?: string | null // the carrier's own delivery-date text, when stated
|
|
2599
2735
|
}
|
|
2600
2736
|
|
|
2601
2737
|
type ShippingEstimateResult = {
|
|
@@ -2613,20 +2749,23 @@ type CallOptions = {
|
|
|
2613
2749
|
* Prices a domestic package across USPS and UPS for a ZIP-to-ZIP move, weight and optional
|
|
2614
2750
|
* dimensions, and returns normalized quotes cheapest first — service name, price and transit
|
|
2615
2751
|
* days where the carrier states one. Direct JSON, no browser. USPS needs no key and always
|
|
2616
|
-
* quotes
|
|
2617
|
-
*
|
|
2752
|
+
* quotes. Pirate Ship (source `pirateship`) also quotes USPS AND UPS with no key, at its
|
|
2753
|
+
* discounted label prices, with a delivery date. UPS direct is BYOK; without a UPS developer
|
|
2754
|
+
* key that one leg is dropped and named in `warnings`.
|
|
2618
2755
|
*/
|
|
2619
2756
|
interface Unit {
|
|
2620
2757
|
/**
|
|
2621
2758
|
* Prices a domestic package — `{ fromZip: "20024", toZip: "10001", weightOz: 16 }` — across
|
|
2622
2759
|
* every USPS and UPS service that quotes it, and returns `rates` cheapest first.
|
|
2623
2760
|
* `length`/`width`/`height` (inches) must be given together or omitted entirely. USPS needs no
|
|
2624
|
-
* API key.
|
|
2625
|
-
*
|
|
2626
|
-
*
|
|
2627
|
-
*
|
|
2628
|
-
*
|
|
2629
|
-
*
|
|
2761
|
+
* API key. Pirate Ship (`source: "pirateship"`) needs none either and quotes BOTH USPS and UPS
|
|
2762
|
+
* at its discounted label prices, with the carrier named in `serviceName` and a
|
|
2763
|
+
* `deliveryEstimate` date; given no dimensions, it prices a 10x8x4 inch box. UPS direct is
|
|
2764
|
+
* BYOK: bring your own UPS developer key or that leg is dropped and named in `warnings` (it is
|
|
2765
|
+
* never served off a fleet credential). `warnings` also names any carrier dropped for a
|
|
2766
|
+
* timeout or an error. THROWS `AllProvidersFailedError` when NEITHER carrier answered, because
|
|
2767
|
+
* that is a different fact from "no service quotes this shipment" and only one of them means
|
|
2768
|
+
* there truly is no rate. `options.timeoutMs` sets the per-carrier budget (default 30000).
|
|
2630
2769
|
*/
|
|
2631
2770
|
estimate(query: ShippingQuery, options?: CallOptions): Promise<ShippingEstimateResult>;
|
|
2632
2771
|
}
|
|
@@ -4691,6 +4830,7 @@ interface GetAppsResult {
|
|
|
4691
4830
|
}
|
|
4692
4831
|
interface GetAppDetailsArgs {
|
|
4693
4832
|
app: string | number;
|
|
4833
|
+
country?: string;
|
|
4694
4834
|
}
|
|
4695
4835
|
interface AppStoreRatingHistogram {
|
|
4696
4836
|
average: number;
|
|
@@ -4725,6 +4865,7 @@ interface AppStoreFeaturedStory {
|
|
|
4725
4865
|
}
|
|
4726
4866
|
interface AppStoreAppDetails {
|
|
4727
4867
|
id: string;
|
|
4868
|
+
country: string;
|
|
4728
4869
|
url: string;
|
|
4729
4870
|
ratings: AppStoreRatingHistogram | null;
|
|
4730
4871
|
chartPosition: AppStoreChartPosition | null;
|
|
@@ -4751,6 +4892,7 @@ interface ListTopChartsArgs {
|
|
|
4751
4892
|
device?: AppStoreChartDevice;
|
|
4752
4893
|
chart?: AppStoreChartKind;
|
|
4753
4894
|
genreId?: string | number;
|
|
4895
|
+
country?: string;
|
|
4754
4896
|
limit?: number;
|
|
4755
4897
|
}
|
|
4756
4898
|
interface AppStoreChartApp {
|
|
@@ -4769,6 +4911,7 @@ interface ListTopChartsResult {
|
|
|
4769
4911
|
device: AppStoreChartDevice;
|
|
4770
4912
|
chart: AppStoreChartKind;
|
|
4771
4913
|
genreId: string;
|
|
4914
|
+
country: string;
|
|
4772
4915
|
source: "page" | "feed";
|
|
4773
4916
|
apps: AppStoreChartApp[];
|
|
4774
4917
|
}
|
|
@@ -4784,6 +4927,7 @@ interface ListDeveloperAppsResult {
|
|
|
4784
4927
|
}
|
|
4785
4928
|
interface ListSimilarAppsArgs {
|
|
4786
4929
|
app: string | number;
|
|
4930
|
+
country?: string;
|
|
4787
4931
|
}
|
|
4788
4932
|
interface AppStoreSimilarApp {
|
|
4789
4933
|
id: string;
|
|
@@ -4797,11 +4941,13 @@ interface AppStoreSimilarApp {
|
|
|
4797
4941
|
}
|
|
4798
4942
|
interface AppStoreSimilarAppsResult {
|
|
4799
4943
|
id: string;
|
|
4944
|
+
country: string;
|
|
4800
4945
|
apps: AppStoreSimilarApp[];
|
|
4801
4946
|
}
|
|
4802
4947
|
interface GetStoryArgs {
|
|
4803
4948
|
story: string | number;
|
|
4804
4949
|
platform?: AppStoreChartDevice;
|
|
4950
|
+
country?: string;
|
|
4805
4951
|
}
|
|
4806
4952
|
interface AppStoreStoryApp {
|
|
4807
4953
|
id: string;
|
|
@@ -4816,6 +4962,7 @@ interface AppStoreStoryApp {
|
|
|
4816
4962
|
}
|
|
4817
4963
|
interface AppStoreStory {
|
|
4818
4964
|
id: string;
|
|
4965
|
+
country: string;
|
|
4819
4966
|
url: string;
|
|
4820
4967
|
heading: string;
|
|
4821
4968
|
title: string;
|
|
@@ -4823,6 +4970,20 @@ interface AppStoreStory {
|
|
|
4823
4970
|
body: string;
|
|
4824
4971
|
apps: AppStoreStoryApp[];
|
|
4825
4972
|
}
|
|
4973
|
+
interface ListTodayStoriesArgs {
|
|
4974
|
+
device?: AppStoreChartDevice;
|
|
4975
|
+
country?: string;
|
|
4976
|
+
}
|
|
4977
|
+
interface AppStoreTodayStory {
|
|
4978
|
+
id: string;
|
|
4979
|
+
title: string;
|
|
4980
|
+
url: string;
|
|
4981
|
+
}
|
|
4982
|
+
interface ListTodayStoriesResult {
|
|
4983
|
+
device: AppStoreChartDevice;
|
|
4984
|
+
country: string;
|
|
4985
|
+
stories: AppStoreTodayStory[];
|
|
4986
|
+
}
|
|
4826
4987
|
type AppStoreReviewSort = "mostRecent" | "mostHelpful";
|
|
4827
4988
|
interface ListReviewsArgs {
|
|
4828
4989
|
app: string | number;
|
|
@@ -4941,6 +5102,13 @@ interface ListReviewsResult {
|
|
|
4941
5102
|
* into a reason.
|
|
4942
5103
|
*/
|
|
4943
5104
|
listReviews(args: ListReviewsArgs): Promise<ListReviewsResult>;
|
|
5105
|
+
|
|
5106
|
+
/**
|
|
5107
|
+
* List the editorial stories Apple is featuring on the Today tab right now — the page a person
|
|
5108
|
+
* actually sees when they open the App Store — each with the id and URL getStory takes. The
|
|
5109
|
+
* door into getStory for an agent that holds no app yet, rather than one that already does.
|
|
5110
|
+
*/
|
|
5111
|
+
listTodayStories(args?: ListTodayStoriesArgs): Promise<ListTodayStoriesResult>;
|
|
4944
5112
|
}
|
|
4945
5113
|
}
|
|
4946
5114
|
|
|
@@ -5000,6 +5168,24 @@ interface AppleConfigurationOptions {
|
|
|
5000
5168
|
configDimensions: AppleConfigDimension[];
|
|
5001
5169
|
configurations: AppleConfiguration[];
|
|
5002
5170
|
}
|
|
5171
|
+
interface ApplePurchaseOptionTerm {
|
|
5172
|
+
id: string;
|
|
5173
|
+
name: string;
|
|
5174
|
+
sectionHeader: string;
|
|
5175
|
+
sectionFooter: string;
|
|
5176
|
+
}
|
|
5177
|
+
interface ApplePurchaseOption {
|
|
5178
|
+
id: string;
|
|
5179
|
+
formValue: string;
|
|
5180
|
+
sectionHeader: string;
|
|
5181
|
+
sectionFooter: string;
|
|
5182
|
+
hideCarrier: boolean;
|
|
5183
|
+
terms: ApplePurchaseOptionTerm[];
|
|
5184
|
+
}
|
|
5185
|
+
interface ApplePurchaseOptions {
|
|
5186
|
+
url: string;
|
|
5187
|
+
options: ApplePurchaseOption[];
|
|
5188
|
+
}
|
|
5003
5189
|
interface AppleFamilyModel {
|
|
5004
5190
|
name: string;
|
|
5005
5191
|
startingPrice: number | null;
|
|
@@ -5021,6 +5207,36 @@ interface AppleRefurbishedCatalog {
|
|
|
5021
5207
|
category: "mac" | "ipad" | "iphone" | "watch" | "appletv" | "homepod" | "airpods" | "accessories";
|
|
5022
5208
|
listings: AppleRefurbishedListing[];
|
|
5023
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
|
+
}
|
|
5024
5240
|
interface AppleTradeInEstimate {
|
|
5025
5241
|
device: string;
|
|
5026
5242
|
upToUsd: number;
|
|
@@ -5130,6 +5346,34 @@ interface AppleStore {
|
|
|
5130
5346
|
longitude: number | null;
|
|
5131
5347
|
hours: AppleStoreHours[];
|
|
5132
5348
|
}
|
|
5349
|
+
interface AppleNewsroomPost {
|
|
5350
|
+
title: string;
|
|
5351
|
+
category: string;
|
|
5352
|
+
date: string;
|
|
5353
|
+
url: string;
|
|
5354
|
+
summary: string;
|
|
5355
|
+
}
|
|
5356
|
+
interface AppleNewsroomPostList {
|
|
5357
|
+
posts: AppleNewsroomPost[];
|
|
5358
|
+
}
|
|
5359
|
+
interface AppleNewsroomArticle {
|
|
5360
|
+
title: string;
|
|
5361
|
+
summary: string;
|
|
5362
|
+
date: string;
|
|
5363
|
+
url: string;
|
|
5364
|
+
body: string;
|
|
5365
|
+
}
|
|
5366
|
+
interface AppleCompareSpec {
|
|
5367
|
+
label: string;
|
|
5368
|
+
value: string;
|
|
5369
|
+
}
|
|
5370
|
+
interface AppleCompareModel {
|
|
5371
|
+
name: string;
|
|
5372
|
+
specs: AppleCompareSpec[];
|
|
5373
|
+
}
|
|
5374
|
+
interface AppleCompareModels {
|
|
5375
|
+
models: AppleCompareModel[];
|
|
5376
|
+
}
|
|
5133
5377
|
|
|
5134
5378
|
/** apple.com's own site search and product pages — no API, no login, no browser. */
|
|
5135
5379
|
interface Unit {
|
|
@@ -5175,6 +5419,32 @@ interface AppleStore {
|
|
|
5175
5419
|
*/
|
|
5176
5420
|
getConfigurationOptions(urlOrPath: string): Promise<AppleConfigurationOptions>;
|
|
5177
5421
|
|
|
5422
|
+
/**
|
|
5423
|
+
* Reads the ways apple.com will let you pay for the product a buy page has settled on — buy
|
|
5424
|
+
* outright, Apple Card Monthly Installments, or the Apple Upgrade Program lease (with its 24-
|
|
5425
|
+
* vs 36-month term choice) — with apple.com's own copy for each, straight off the buy page's
|
|
5426
|
+
* own window.PURCHASE_OPTIONS_BOOTSTRAP. Only a page that has resolved to ONE product exposes
|
|
5427
|
+
* this: every Mac family buy page has (e.g. "/shop/buy-mac/macbook-air"), an iPhone/iPad
|
|
5428
|
+
* chooser page has not even at one specific part number, and this throws a caller-fixable
|
|
5429
|
+
* error naming that rather than guessing. Carries no dollar figure — apple.com computes a
|
|
5430
|
+
* monthly amount only after a term and trade-in are picked on the buy page itself; read a
|
|
5431
|
+
* configuration's own price off getConfigurationOptions.
|
|
5432
|
+
*/
|
|
5433
|
+
getPurchaseOptions(urlOrPath: string): Promise<ApplePurchaseOptions>;
|
|
5434
|
+
|
|
5435
|
+
/**
|
|
5436
|
+
* Puts two or more iPhone models side by side on the specs apple.com itself compares them on —
|
|
5437
|
+
* screen size, chip, camera system, battery, capacity, finish, durability rating, connectivity
|
|
5438
|
+
* — straight off apple.com's own /iphone/compare/ grid. Model names must match the page's own
|
|
5439
|
+
* naming exactly (e.g. "iPhone 17 Pro", not "17 Pro" or "iphone17pro"); an unmatched name
|
|
5440
|
+
* throws naming the page's own list. Carries no price: apple.com's own compare page renders
|
|
5441
|
+
* its Price row as an unfilled client-side template with no number in the static HTML, so this
|
|
5442
|
+
* omits it rather than guess — read a price off getConfigurationOptions or getPurchaseOptions
|
|
5443
|
+
* instead. A spec absent for one model (an older phone with no Dynamic Island) is simply
|
|
5444
|
+
* missing from that model's own list, never a false "no".
|
|
5445
|
+
*/
|
|
5446
|
+
compareModels(models: string[]): Promise<AppleCompareModels>;
|
|
5447
|
+
|
|
5178
5448
|
/**
|
|
5179
5449
|
* Lists every model apple.com currently sells in one product family — the chooser page's own
|
|
5180
5450
|
* cards (e.g. "MacBook Air", "iPad mini"), each with its starting price and the buy page that
|
|
@@ -5192,6 +5462,15 @@ interface AppleStore {
|
|
|
5192
5462
|
*/
|
|
5193
5463
|
listRefurbished(category: "mac" | "ipad" | "iphone" | "watch" | "appletv" | "homepod" | "airpods" | "accessories"): Promise<AppleRefurbishedCatalog>;
|
|
5194
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
|
+
|
|
5195
5474
|
/**
|
|
5196
5475
|
* Reads apple.com's own trade-in value table and returns the CEILING ("up to $X")
|
|
5197
5476
|
* cash-or-credit estimate it publishes for one device — a human name ("iPhone 14 Pro") or the
|
|
@@ -5276,6 +5555,19 @@ interface AppleStore {
|
|
|
5276
5555
|
* Takes a URL or /retail/ path, e.g. one of listStores()'s own rows.
|
|
5277
5556
|
*/
|
|
5278
5557
|
getStore(urlOrPath: string): Promise<AppleStore>;
|
|
5558
|
+
|
|
5559
|
+
/**
|
|
5560
|
+
* Apple's official announcements, newest first, off its own published RSS feed — every product
|
|
5561
|
+
* launch, financial result and press release, with its headline, category, publish date and
|
|
5562
|
+
* link. The primary source for "what did Apple just announce", with no publisher in between.
|
|
5563
|
+
*/
|
|
5564
|
+
listNewsroomPosts(): Promise<AppleNewsroomPostList>;
|
|
5565
|
+
|
|
5566
|
+
/**
|
|
5567
|
+
* Read one Apple press release or announcement in full from its URL — the article text itself,
|
|
5568
|
+
* not the feed's one-line summary. Takes a URL straight off listNewsroomPosts()'s own rows.
|
|
5569
|
+
*/
|
|
5570
|
+
getNewsroomPost(url: string): Promise<AppleNewsroomArticle>;
|
|
5279
5571
|
}
|
|
5280
5572
|
}
|
|
5281
5573
|
|
|
@@ -6979,18 +7271,18 @@ interface bestbuyProduct {
|
|
|
6979
7271
|
}
|
|
6980
7272
|
|
|
6981
7273
|
/**
|
|
6982
|
-
*
|
|
6983
|
-
*
|
|
6984
|
-
* by Best Buy's own SKU
|
|
7274
|
+
* Searches the live bestbuy.com catalog by query and returns price, availability and review
|
|
7275
|
+
* data — off bestbuy.com's own search page with no key, or Best Buy's documented Products API
|
|
7276
|
+
* when a key is available — and looks up one product by Best Buy's own SKU (key required).
|
|
6985
7277
|
*/
|
|
6986
7278
|
interface Unit {
|
|
6987
7279
|
/**
|
|
6988
|
-
* Runs a Best Buy product search the way bestbuy.com's own search box does
|
|
6989
|
-
*
|
|
6990
|
-
*
|
|
6991
|
-
* `
|
|
6992
|
-
*
|
|
6993
|
-
* `
|
|
7280
|
+
* Runs a Best Buy product search the way bestbuy.com's own search box does and returns the
|
|
7281
|
+
* matching products — name, sale/regular price, online and in-store availability and review
|
|
7282
|
+
* stats. With a Best Buy developer key (Bowmark's, charged to your account, or your own on the
|
|
7283
|
+
* `x-bowmark-vendor-key-bestbuy` header) it reads the documented Products API and also fills
|
|
7284
|
+
* manufacturer, model number and UPC. With no key it reads bestbuy.com's own search results
|
|
7285
|
+
* page, where those three fields are null. `pageSize` caps the row count (default 10).
|
|
6994
7286
|
*/
|
|
6995
7287
|
search(args: string | { query: string; pageSize?: number }): Promise<bestbuyProduct[]>;
|
|
6996
7288
|
|
|
@@ -7357,8 +7649,11 @@ interface FormField {
|
|
|
7357
7649
|
/** List BionicPO inquiry and service categories from the inquiry-services page. */
|
|
7358
7650
|
listInquiryServices(): Promise<{ services: InquiryService[]; warnings: string[] }>;
|
|
7359
7651
|
|
|
7360
|
-
/**
|
|
7361
|
-
|
|
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>;
|
|
7362
7657
|
}
|
|
7363
7658
|
}
|
|
7364
7659
|
|
|
@@ -8251,6 +8546,107 @@ interface BrixtonCheckoutLink {
|
|
|
8251
8546
|
}
|
|
8252
8547
|
}
|
|
8253
8548
|
|
|
8549
|
+
declare namespace BowmarkProvider_browser_use {
|
|
8550
|
+
// ── Browser Use — the unit's own declarations, verbatim ──
|
|
8551
|
+
type BrowserUseRunStatus = "queued" | "dispatching" | "running" | "completed" | "failed" | "cancelled";
|
|
8552
|
+
|
|
8553
|
+
interface BrowserUseCreateRunArgs {
|
|
8554
|
+
task: string;
|
|
8555
|
+
model?: string; // e.g. "claude-sonnet-5"; absent = vendor default
|
|
8556
|
+
sessionId?: string; // continue a session
|
|
8557
|
+
maxCostUsd?: number;
|
|
8558
|
+
proxyCountryCode?: string; // e.g. "us"
|
|
8559
|
+
}
|
|
8560
|
+
|
|
8561
|
+
interface BrowserUseRunStatusReading { runId: string; status: BrowserUseRunStatus }
|
|
8562
|
+
interface BrowserUseCreatedRun { id: string; status: BrowserUseRunStatus; model: string; sessionId: string; workspaceId: string }
|
|
8563
|
+
|
|
8564
|
+
interface BrowserUseRun {
|
|
8565
|
+
id: string; sessionId: string; task: string; title: string | null; model: string;
|
|
8566
|
+
status: BrowserUseRunStatus; result: string | null; error: string | null;
|
|
8567
|
+
inputTokens: number; outputTokens: number;
|
|
8568
|
+
costUsd: number; // LLM cost only
|
|
8569
|
+
createdAt: string; updatedAt: string;
|
|
8570
|
+
}
|
|
8571
|
+
|
|
8572
|
+
interface BrowserUseRunList { runs: BrowserUseRun[]; hasMore: boolean }
|
|
8573
|
+
interface BrowserUseEvent { id: number; ts: string; type: string; data: Record<string, unknown> }
|
|
8574
|
+
interface BrowserUseEventsPage { events: BrowserUseEvent[]; nextAfter: number | null; hasMore: boolean }
|
|
8575
|
+
interface BrowserUseEventsArgs { runId: string; after?: number; limit?: number }
|
|
8576
|
+
|
|
8577
|
+
interface BrowserUseSession { sessionId: string; latestRunId: string; status: string; title: string | null; createdAt: string; updatedAt: string }
|
|
8578
|
+
|
|
8579
|
+
interface BrowserUseQueueArgs { sessionId: string; text: string; interrupt?: boolean }
|
|
8580
|
+
interface BrowserUseQueuedMessage { id: number; sessionId: string; status: string; mode: string }
|
|
8581
|
+
|
|
8582
|
+
interface BrowserUseBrowser {
|
|
8583
|
+
id: string; status: string;
|
|
8584
|
+
liveUrl: string | null; // interactive; whoever holds it drives the browser
|
|
8585
|
+
agentSessionId: string | null;
|
|
8586
|
+
timeoutAt: string; startedAt: string; finishedAt: string | null;
|
|
8587
|
+
browserCostUsd: number; proxyCostUsd: number; proxyUsedMb: number;
|
|
8588
|
+
}
|
|
8589
|
+
|
|
8590
|
+
/**
|
|
8591
|
+
* Browser Use Cloud's hosted browser agent. Not callable directly: use
|
|
8592
|
+
* `bowmark.browser_agent`, which runs it for you with a private watch link and bills the
|
|
8593
|
+
* session to your account.
|
|
8594
|
+
*/
|
|
8595
|
+
interface Unit {
|
|
8596
|
+
/**
|
|
8597
|
+
* Starts a Browser Use agent run on a natural-language task, optionally continuing an existing
|
|
8598
|
+
* session. Returns immediately; the run executes on Browser Use's cloud for seconds to
|
|
8599
|
+
* minutes. Spends money.
|
|
8600
|
+
*/
|
|
8601
|
+
createRun(args: BrowserUseCreateRunArgs): Promise<BrowserUseCreatedRun>;
|
|
8602
|
+
|
|
8603
|
+
/** Reads one run: status, final result or error, token totals and LLM cost. */
|
|
8604
|
+
getRun(runId: string): Promise<BrowserUseRun>;
|
|
8605
|
+
|
|
8606
|
+
/** The cheap status poll for one run. */
|
|
8607
|
+
getRunStatus(runId: string): Promise<BrowserUseRunStatusReading>;
|
|
8608
|
+
|
|
8609
|
+
/**
|
|
8610
|
+
* A run's step-by-step event stream after a cursor — the agent's reasoning, tool calls, and
|
|
8611
|
+
* the `browser.ready` event carrying the live view url.
|
|
8612
|
+
*/
|
|
8613
|
+
listRunEvents(args: BrowserUseEventsArgs): Promise<BrowserUseEventsPage>;
|
|
8614
|
+
|
|
8615
|
+
/**
|
|
8616
|
+
* Lists every run (agent turn) in a session, newest first, each with its status and LLM cost —
|
|
8617
|
+
* how a session's whole spend is read.
|
|
8618
|
+
*/
|
|
8619
|
+
listSessionRuns(sessionId: string): Promise<BrowserUseRunList>;
|
|
8620
|
+
|
|
8621
|
+
/**
|
|
8622
|
+
* Cancels an in-flight run; idempotent on a finished one. The browser keeps running — stop it
|
|
8623
|
+
* separately.
|
|
8624
|
+
*/
|
|
8625
|
+
cancelRun(runId: string): Promise<BrowserUseRun>;
|
|
8626
|
+
|
|
8627
|
+
/** Reads a session, including the id of its latest run (a queued message becomes a new run). */
|
|
8628
|
+
getSession(sessionId: string): Promise<BrowserUseSession>;
|
|
8629
|
+
|
|
8630
|
+
/**
|
|
8631
|
+
* Sends a follow-up instruction into a session: it runs as the next turn when the current one
|
|
8632
|
+
* ends, or at once with `interrupt: true`.
|
|
8633
|
+
*/
|
|
8634
|
+
queueMessage(args: BrowserUseQueueArgs): Promise<BrowserUseQueuedMessage>;
|
|
8635
|
+
|
|
8636
|
+
/** The cloud browser attached to a session, with its live view url and running cost, or null. */
|
|
8637
|
+
findSessionBrowser(sessionId: string): Promise<BrowserUseBrowser | null>;
|
|
8638
|
+
|
|
8639
|
+
/** Reads one cloud browser: status, live view url, browser and proxy cost. */
|
|
8640
|
+
getBrowser(browserId: string): Promise<BrowserUseBrowser>;
|
|
8641
|
+
|
|
8642
|
+
/**
|
|
8643
|
+
* Stops a cloud browser (cannot be undone). Its cost is then settled down to the time actually
|
|
8644
|
+
* used.
|
|
8645
|
+
*/
|
|
8646
|
+
stopBrowser(browserId: string): Promise<BrowserUseBrowser>;
|
|
8647
|
+
}
|
|
8648
|
+
}
|
|
8649
|
+
|
|
8254
8650
|
declare namespace BowmarkProvider_builder_strucsure_com {
|
|
8255
8651
|
// ── StrucSure Home Warranty — the unit's own declarations, verbatim ──
|
|
8256
8652
|
interface StrucsureRegistrationState {
|
|
@@ -9038,7 +9434,10 @@ interface CamelPriceHistory {
|
|
|
9038
9434
|
/**
|
|
9039
9435
|
* Runs camelcamelcamel's own Amazon-product search and returns each hit's ASIN, title and
|
|
9040
9436
|
* current price — the locator this provider was missing: `getPriceHistory` takes an ASIN, and
|
|
9041
|
-
* this is how a caller holding only a shopper's words finds one.
|
|
9437
|
+
* this is how a caller holding only a shopper's words finds one. Pass the product's name; if
|
|
9438
|
+
* the full wording matches nothing it retries on its own with measurements ("24000mAh",
|
|
9439
|
+
* "140W") dropped, so there is no need to re-run it with shorter queries, and no need to
|
|
9440
|
+
* search Amazon as well to find the ASIN.
|
|
9042
9441
|
*/
|
|
9043
9442
|
search(query: string): Promise<CamelSearchResult[]>;
|
|
9044
9443
|
|
|
@@ -9046,6 +9445,11 @@ interface CamelPriceHistory {
|
|
|
9046
9445
|
* Reads camelcamelcamel's independently-tracked Amazon price history for one ASIN — the site's
|
|
9047
9446
|
* own lowest-ever/highest-ever/current/average figures, each dated, for the Amazon,
|
|
9048
9447
|
* 3rd-party-new and 3rd-party-used price types, plus the full-history chart image URL.
|
|
9448
|
+
* `amazon.current.price` is Amazon's own price today and is null when Amazon itself is not
|
|
9449
|
+
* selling it, which is an answer rather than a gap. These summary figures are ALL the history
|
|
9450
|
+
* the library has: there is no month-by-month series anywhere (the chart is an image), so
|
|
9451
|
+
* answer 'how has the price moved' from lowest/highest/average/current and do not look for
|
|
9452
|
+
* another source.
|
|
9049
9453
|
*/
|
|
9050
9454
|
getPriceHistory(asinOrUrl: string): Promise<CamelPriceHistory>;
|
|
9051
9455
|
}
|
|
@@ -16617,14 +17021,19 @@ interface GoogleNewsFullCoverage {
|
|
|
16617
17021
|
|
|
16618
17022
|
/**
|
|
16619
17023
|
* Everything Google News has indexed from one publisher — `publisher` is a domain like
|
|
16620
|
-
* "reuters.com" or "
|
|
16621
|
-
* `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
|
|
16622
17026
|
* (`/rss/search?q=site:<publisher> <query>`), NOT on the route that looks like its own:
|
|
16623
17027
|
* `/rss/headlines/section/publication/<NAME>` answers 200 with the Top stories feed
|
|
16624
17028
|
* byte-for-byte for a name it cannot resolve, so it would look like it worked and be wrong for
|
|
16625
|
-
* every publisher.
|
|
16626
|
-
*
|
|
16627
|
-
*
|
|
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.
|
|
16628
17037
|
*/
|
|
16629
17038
|
listPublisherHeadlines(publisher: string, query?: string, locale?: GoogleNewsLocaleArg): Promise<GoogleNewsPublisherHeadlines>;
|
|
16630
17039
|
|
|
@@ -16868,12 +17277,52 @@ interface GoogleTranslateSpeech {
|
|
|
16868
17277
|
contentType: string;
|
|
16869
17278
|
chunkCount: number;
|
|
16870
17279
|
}
|
|
17280
|
+
interface TranslateWebPageArgs {
|
|
17281
|
+
url: string;
|
|
17282
|
+
to: string;
|
|
17283
|
+
from?: string;
|
|
17284
|
+
}
|
|
17285
|
+
interface GoogleTranslateWebPageSegment {
|
|
17286
|
+
original: string;
|
|
17287
|
+
translated: string;
|
|
17288
|
+
}
|
|
17289
|
+
interface GoogleTranslateWebPage {
|
|
17290
|
+
url: string;
|
|
17291
|
+
title: string;
|
|
17292
|
+
translatedTitle: string;
|
|
17293
|
+
targetLanguage: string;
|
|
17294
|
+
sourceLanguage: string;
|
|
17295
|
+
detected: boolean;
|
|
17296
|
+
segments: GoogleTranslateWebPageSegment[];
|
|
17297
|
+
}
|
|
17298
|
+
interface TranslateDocumentArgs {
|
|
17299
|
+
fileBase64: string;
|
|
17300
|
+
mimeType: string;
|
|
17301
|
+
to: string;
|
|
17302
|
+
from?: string;
|
|
17303
|
+
}
|
|
17304
|
+
interface GoogleTranslateDocumentResult {
|
|
17305
|
+
translatedBase64: string;
|
|
17306
|
+
mimeType: string;
|
|
17307
|
+
}
|
|
17308
|
+
interface TranslateImageArgs {
|
|
17309
|
+
imageBase64: string;
|
|
17310
|
+
mimeType: string;
|
|
17311
|
+
to: string;
|
|
17312
|
+
from?: string;
|
|
17313
|
+
}
|
|
17314
|
+
interface GoogleTranslateImageResult {
|
|
17315
|
+
translatedImageBase64: string;
|
|
17316
|
+
mimeType: string;
|
|
17317
|
+
sourceText: string;
|
|
17318
|
+
translatedText: string;
|
|
17319
|
+
}
|
|
16871
17320
|
|
|
16872
17321
|
/**
|
|
16873
17322
|
* Translate text into any of 249 languages, in a batch if you have a list, and find out what
|
|
16874
17323
|
* language something already is — plus the dictionary underneath: senses, definitions,
|
|
16875
|
-
* synonyms, alternative wordings, the romanization and the spoken audio.
|
|
16876
|
-
*
|
|
17324
|
+
* synonyms, alternative wordings, the romanization and the spoken audio. Thirteen functions
|
|
17325
|
+
* are built; the four account-gated ones (saved phrases, history) are still declared stubs.
|
|
16877
17326
|
*/
|
|
16878
17327
|
interface Unit {
|
|
16879
17328
|
/**
|
|
@@ -16976,6 +17425,41 @@ interface GoogleTranslateSpeech {
|
|
|
16976
17425
|
* function must not do.
|
|
16977
17426
|
*/
|
|
16978
17427
|
speak(args: SpeakArgs): Promise<GoogleTranslateSpeech>;
|
|
17428
|
+
|
|
17429
|
+
/**
|
|
17430
|
+
* Read `args.url` in `args.to` — fetches the page with a plain GET (no browser; a page that
|
|
17431
|
+
* renders its text client-side is out of reach), walks its rendered text nodes in reading
|
|
17432
|
+
* order, and translates them through this provider's own `translate` door. Measured 2026-09-16
|
|
17433
|
+
* that `<host>.translate.goog` (the site's own page-translation product) serves the ORIGINAL
|
|
17434
|
+
* page plus a client-side translator script and never returns translated text browserless,
|
|
17435
|
+
* which is why this fetches the caller's url directly instead. `args.from` is optional and,
|
|
17436
|
+
* left out, the source is detected off the page's title. `segments` preserves the page's own
|
|
17437
|
+
* reading order.
|
|
17438
|
+
*/
|
|
17439
|
+
translateWebPage(args: TranslateWebPageArgs): Promise<GoogleTranslateWebPage>;
|
|
17440
|
+
|
|
17441
|
+
/**
|
|
17442
|
+
* Translate a whole PDF, Word or PowerPoint file — the Documents tab. Takes `fileBase64` (the
|
|
17443
|
+
* document, base64-encoded), `mimeType`, `to`, and optional `from` (left out, auto-detects),
|
|
17444
|
+
* and returns `translatedBase64` + `mimeType` for the SAME document translated. Built on a
|
|
17445
|
+
* real browser (rung 15): the RPC answers 200 to a bare browserless replay too, but silently
|
|
17446
|
+
* returns the document UNTRANSLATED without a BotGuard token (`x-goog-batchexecute-bgr`) only
|
|
17447
|
+
* a real browser produces — measured 2026-09-16, two earlier browserless-adjacent attempts
|
|
17448
|
+
* read that 200 as success.
|
|
17449
|
+
*/
|
|
17450
|
+
translateDocument(args: TranslateDocumentArgs): Promise<GoogleTranslateDocumentResult>;
|
|
17451
|
+
|
|
17452
|
+
/**
|
|
17453
|
+
* Read the text in a picture and translate it — the Images tab. Takes `imageBase64` (the
|
|
17454
|
+
* image, base64-encoded), `mimeType`, `to`, and optional `from` (left out, auto-detects), and
|
|
17455
|
+
* returns `translatedImageBase64` + `mimeType` (a copy of the image with the detected text
|
|
17456
|
+
* replaced in place) plus the plain `sourceText`/`translatedText` strings Google's OCR found.
|
|
17457
|
+
* Shares `translateDocument`'s RPC channel and BotGuard gate (rung 15, real browser) but its
|
|
17458
|
+
* own rpcid (`WqWDPb`) and upload shape — measured 2026-09-16 uploading a real PNG with
|
|
17459
|
+
* rendered glyphs, verified "Hola mundo" → "Bonjour le monde" (tl=fr) and → "Hello world"
|
|
17460
|
+
* (tl=en).
|
|
17461
|
+
*/
|
|
17462
|
+
translateImage(args: TranslateImageArgs): Promise<GoogleTranslateImageResult>;
|
|
16979
17463
|
}
|
|
16980
17464
|
}
|
|
16981
17465
|
|
|
@@ -18664,6 +19148,124 @@ interface HellotendService {
|
|
|
18664
19148
|
}
|
|
18665
19149
|
}
|
|
18666
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
|
+
|
|
18667
19269
|
declare namespace BowmarkProvider_highlandhomes {
|
|
18668
19270
|
// ── Highland Homes — the unit's own declarations, verbatim ──
|
|
18669
19271
|
interface HighlandHomesSearchFilter {
|
|
@@ -22634,7 +23236,7 @@ interface LululemonColorway {
|
|
|
22634
23236
|
imageAssets: ProductImage[];
|
|
22635
23237
|
sale: SaleEvidence;
|
|
22636
23238
|
coordination: CoordinationMetadata;
|
|
22637
|
-
/** ISO 4217, or null
|
|
23239
|
+
/** ISO 4217 from the colourway url's own locale, or null for an unknown one. */
|
|
22638
23240
|
currency: string | null;
|
|
22639
23241
|
inStock: boolean;
|
|
22640
23242
|
optionGroups: LululemonOptionGroup[];
|
|
@@ -27006,6 +27608,7 @@ interface PrimeVideoTitleDetail {
|
|
|
27006
27608
|
releaseYear: number | null;
|
|
27007
27609
|
releaseDate: string | null;
|
|
27008
27610
|
runtime: string | null;
|
|
27611
|
+
durationSeconds: number | null;
|
|
27009
27612
|
genres: string[];
|
|
27010
27613
|
maturityRating: string | null;
|
|
27011
27614
|
cast: PrimeVideoCredit[];
|
|
@@ -27046,6 +27649,25 @@ interface PrimeVideoEpisode {
|
|
|
27046
27649
|
isPrime: boolean;
|
|
27047
27650
|
isAd: boolean;
|
|
27048
27651
|
}
|
|
27652
|
+
interface PrimeVideoPersonCredit {
|
|
27653
|
+
titleId: string | null;
|
|
27654
|
+
catalogId: string;
|
|
27655
|
+
title: string;
|
|
27656
|
+
releaseYear: number | null;
|
|
27657
|
+
runtime: string | null;
|
|
27658
|
+
synopsis: string | null;
|
|
27659
|
+
maturityRating: string | null;
|
|
27660
|
+
}
|
|
27661
|
+
interface PrimeVideoPerson {
|
|
27662
|
+
personId: string;
|
|
27663
|
+
name: string;
|
|
27664
|
+
roles: string[];
|
|
27665
|
+
birthPlace: string | null;
|
|
27666
|
+
dateOfBirth: string | null;
|
|
27667
|
+
bio: string | null;
|
|
27668
|
+
imdbUrl: string | null;
|
|
27669
|
+
filmography: PrimeVideoPersonCredit[];
|
|
27670
|
+
}
|
|
27049
27671
|
interface PrimeVideoCategory {
|
|
27050
27672
|
name: string;
|
|
27051
27673
|
slug: string;
|
|
@@ -27084,6 +27706,26 @@ interface PrimeVideoLiveStation {
|
|
|
27084
27706
|
group: string;
|
|
27085
27707
|
nowPlaying: PrimeVideoLiveProgram | null;
|
|
27086
27708
|
}
|
|
27709
|
+
interface PrimeVideoLiveScheduleEntry {
|
|
27710
|
+
title: string;
|
|
27711
|
+
seriesTitle: string | null;
|
|
27712
|
+
seasonNumber: number | null;
|
|
27713
|
+
episodeNumber: number | null;
|
|
27714
|
+
synopsis: string | null;
|
|
27715
|
+
maturityRating: string | null;
|
|
27716
|
+
start: number;
|
|
27717
|
+
end: number;
|
|
27718
|
+
}
|
|
27719
|
+
interface PrimeVideoLiveSportsEvent {
|
|
27720
|
+
titleId: string;
|
|
27721
|
+
title: string;
|
|
27722
|
+
group: string;
|
|
27723
|
+
status: "LIVE" | "UPCOMING" | null;
|
|
27724
|
+
timeBadge: string | null;
|
|
27725
|
+
venue: string | null;
|
|
27726
|
+
entitled: boolean;
|
|
27727
|
+
watchMessage: string | null;
|
|
27728
|
+
}
|
|
27087
27729
|
|
|
27088
27730
|
/**
|
|
27089
27731
|
* Search Prime Video's catalogue and read a film or series the way a viewer does — synopsis,
|
|
@@ -27091,8 +27733,8 @@ interface PrimeVideoLiveStation {
|
|
|
27091
27733
|
* included with Prime, free with ads, on a named add-on channel, or rentable and buyable with
|
|
27092
27734
|
* the real price. Plus the browse surfaces (genres, collections, the top ten, this week's
|
|
27093
27735
|
* deals), the add-on channels, and the free live TV, news and sports schedules. searchTitles,
|
|
27094
|
-
* suggestTitles, getTitle, getWatchOptions, listSeasons, listEpisodes and
|
|
27095
|
-
* built; everything else is still a declared stub.
|
|
27736
|
+
* suggestTitles, getTitle, getWatchOptions, listSeasons, listEpisodes, getPerson and
|
|
27737
|
+
* listCategories are built; everything else is still a declared stub.
|
|
27096
27738
|
*/
|
|
27097
27739
|
interface Unit {
|
|
27098
27740
|
/**
|
|
@@ -27101,13 +27743,21 @@ interface PrimeVideoLiveStation {
|
|
|
27101
27743
|
* function here takes, whether it is a film or a series, the year, the maturity rating, and
|
|
27102
27744
|
* the site's own sentence for how to watch it. THE provider's door: every titleId-taking
|
|
27103
27745
|
* function below is fed by this one. Returns the FIRST page only — Prime Video's search page
|
|
27104
|
-
* carries no pagination markers at all (measured 2026-09-15)
|
|
27105
|
-
*
|
|
27106
|
-
*
|
|
27107
|
-
*
|
|
27108
|
-
*
|
|
27109
|
-
|
|
27110
|
-
|
|
27746
|
+
* carries no pagination markers at all (measured 2026-09-15). `options.waysToWatch` narrows by
|
|
27747
|
+
* how you can watch it — "prime" (included with a Prime membership), "channels" (an add-on
|
|
27748
|
+
* subscription) or "rentOrBuy" — the commonest thing a viewer does after typing a query and
|
|
27749
|
+
* the one refinement built so far. The site's other five refinement dimensions (which channel,
|
|
27750
|
+
* HD/UHD, theme, subtitle language, film-or-series) are still not built here: every one of
|
|
27751
|
+
* them rides the same opaque per-page `serviceToken` mechanism (rung 11 — an undocumented
|
|
27752
|
+
* endpoint reached by harvesting the token off the page a search already returned), never a
|
|
27753
|
+
* query parameter, and a hand-constructed query parameter silently returns the unfiltered set
|
|
27754
|
+
* rather than erroring. A query that matches nothing returns an empty array rather than
|
|
27755
|
+
* throwing. A filtered call whose real matches are too few can carry the site's own generic
|
|
27756
|
+
* recommendations under a heading still labelled "Top results" — measured 2026-09-16, not a
|
|
27757
|
+
* defect in this parser: the site does this identically on the unfiltered page's own "More to
|
|
27758
|
+
* explore" row.
|
|
27759
|
+
*/
|
|
27760
|
+
searchTitles(query: string, options?: { waysToWatch?: "prime" | "channels" | "rentOrBuy" }): Promise<PrimeVideoTitle[]>;
|
|
27111
27761
|
|
|
27112
27762
|
/**
|
|
27113
27763
|
* Ask Prime Video's own search box what it would autocomplete a prefix to — "the boy" comes
|
|
@@ -27119,12 +27769,13 @@ interface PrimeVideoLiveStation {
|
|
|
27119
27769
|
|
|
27120
27770
|
/**
|
|
27121
27771
|
* Read one film, series-season or episode the way a viewer reads its page: title, synopsis,
|
|
27122
|
-
* year, release date, runtime
|
|
27123
|
-
* customer rating and its five-star histogram, the
|
|
27124
|
-
* subtitles it ships, and whether it is in UHD, HDR,
|
|
27125
|
-
* the whole provider. Takes a titleId or a title URL,
|
|
27126
|
-
* REVIEW TEXT IS NOT HERE — the aggregate rating and
|
|
27127
|
-
* review bodies are amazon.com's own surface behind
|
|
27772
|
+
* year, release date, runtime (both the display string and durationSeconds), genres, maturity
|
|
27773
|
+
* rating, cast, directors, studio, the Amazon customer rating and its five-star histogram, the
|
|
27774
|
+
* IMDb score, which audio languages and subtitles it ships, and whether it is in UHD, HDR,
|
|
27775
|
+
* Dolby Atmos or X-Ray. The core read of the whole provider. Takes a titleId or a title URL,
|
|
27776
|
+
* e.g. one read off searchTitles(). THE REVIEW TEXT IS NOT HERE — the aggregate rating and
|
|
27777
|
+
* histogram are real and logged out, but review bodies are amazon.com's own surface behind
|
|
27778
|
+
* amazon.com's sign-in wall.
|
|
27128
27779
|
*/
|
|
27129
27780
|
getTitle(titleId: string): Promise<PrimeVideoTitleDetail>;
|
|
27130
27781
|
|
|
@@ -27163,6 +27814,16 @@ interface PrimeVideoLiveStation {
|
|
|
27163
27814
|
*/
|
|
27164
27815
|
listEpisodes(titleId: string): Promise<PrimeVideoEpisode[]>;
|
|
27165
27816
|
|
|
27817
|
+
/**
|
|
27818
|
+
* Read a cast member's own Prime Video page: their name, what they are credited as, when and
|
|
27819
|
+
* where they were born, their biography, and the titles of theirs the catalogue carries — with
|
|
27820
|
+
* each credit's own synopsis, runtime and maturity rating, not just its title. How an agent
|
|
27821
|
+
* answers "what else is she in" without leaving the site. Takes a personId or a person URL —
|
|
27822
|
+
* read one off getTitle().cast[].searchLink, never .directors[].searchLink, which points at a
|
|
27823
|
+
* search instead: a director gets no page of their own here, only a searchTitles() fallback.
|
|
27824
|
+
*/
|
|
27825
|
+
getPerson(personId: string): Promise<PrimeVideoPerson>;
|
|
27826
|
+
|
|
27166
27827
|
/**
|
|
27167
27828
|
* List the ways Prime Video lets you browse — its genres (action, comedy, horror, anime,
|
|
27168
27829
|
* documentary and more, plus kids), its editorial collections (new and upcoming, award
|
|
@@ -27297,6 +27958,25 @@ interface PrimeVideoLiveStation {
|
|
|
27297
27958
|
* when the page carries no station with that id.
|
|
27298
27959
|
*/
|
|
27299
27960
|
getLiveSchedule(section: "livetv" | "news", stationId: string): Promise<PrimeVideoLiveProgram[]>;
|
|
27961
|
+
|
|
27962
|
+
/**
|
|
27963
|
+
* What sport is on Prime Video now and what is coming — live and upcoming EVENTS, off
|
|
27964
|
+
* `/sports`, never a station (that is `listLiveChannels`'s own shape, a `LinearStationCard`,
|
|
27965
|
+
* which this function ignores) and never an on-demand documentary sharing the same page. No
|
|
27966
|
+
* arguments. `group` names the row the event is listed under: "Sports with a subscription" is
|
|
27967
|
+
* entitlement a Prime member already carries some of, "Apple TV: Live and upcoming events" is
|
|
27968
|
+
* a different provider's events entirely, and `entitled`/`watchMessage` carry the site's own
|
|
27969
|
+
* per-event verdict — measured 2026-09-16, a Prime-entitled poker event on the "Sports with a
|
|
27970
|
+
* subscription" row reads `entitled: true, watchMessage: "Watch for free"` beside an
|
|
27971
|
+
* Unentitled squash event on the SAME row reading `entitled: false, watchMessage: "Free trial
|
|
27972
|
+
* of SquashTV"`, so the row heading alone never says whether a given event is free. `status`
|
|
27973
|
+
* and `timeBadge` are the site's own words ("LIVE", "Live at 7 PM EDT", "Fri, Sep 18 6:30 PM
|
|
27974
|
+
* EDT") — no epoch timestamp exists on an event card the way one does on a station's
|
|
27975
|
+
* `schedule[]`, so none is invented. `venue` is `null` for an event with no physical location
|
|
27976
|
+
* (an online poker series, a studio broadcast) — a real and common answer, never a parse
|
|
27977
|
+
* failure.
|
|
27978
|
+
*/
|
|
27979
|
+
listLiveSports(): Promise<PrimeVideoLiveSportsEvent[]>;
|
|
27300
27980
|
}
|
|
27301
27981
|
}
|
|
27302
27982
|
|
|
@@ -32729,6 +33409,25 @@ interface TwitchHighlight {
|
|
|
32729
33409
|
channel: string;
|
|
32730
33410
|
dashboardUrl: string;
|
|
32731
33411
|
}
|
|
33412
|
+
interface SetChannelArgs {
|
|
33413
|
+
/** The channel title shown on the stream page. Twitch's own input field for
|
|
33414
|
+
* this is called "status"; this provider takes the name the UI shows. */
|
|
33415
|
+
title?: string;
|
|
33416
|
+
/** ISO 639-1 language code, e.g. "en". */
|
|
33417
|
+
language?: string;
|
|
33418
|
+
/** Category NAME, e.g. "Wetrix" — not a category id. */
|
|
33419
|
+
game?: string;
|
|
33420
|
+
}
|
|
33421
|
+
interface TwitchChannelSettings {
|
|
33422
|
+
id: string;
|
|
33423
|
+
/** The channel title shown on the stream page. */
|
|
33424
|
+
title: string;
|
|
33425
|
+
/** ISO 639-1 language code, e.g. "en". */
|
|
33426
|
+
language: string;
|
|
33427
|
+
/** The category. Empty strings when the channel has never set one. */
|
|
33428
|
+
gameId: string;
|
|
33429
|
+
gameName: string;
|
|
33430
|
+
}
|
|
32732
33431
|
interface RegisterDeveloperAppArgs {
|
|
32733
33432
|
/** Application name */
|
|
32734
33433
|
name: string;
|
|
@@ -32770,6 +33469,21 @@ interface TwitchDeveloperApp {
|
|
|
32770
33469
|
* live archive has recorded so far (retry shortly in that case).
|
|
32771
33470
|
*/
|
|
32772
33471
|
createHighlight(args: CreateHighlightArgs): Promise<TwitchHighlight>;
|
|
33472
|
+
|
|
33473
|
+
/**
|
|
33474
|
+
* Reads the signed-in streamer's channel settings: title, language and current game/category.
|
|
33475
|
+
* Takes no arguments. NEEDS the streamer's Twitch sign-in, which only a capability can hold:
|
|
33476
|
+
* call it as bowmark.stream_channel.get.
|
|
33477
|
+
*/
|
|
33478
|
+
getChannel(): Promise<TwitchChannelSettings>;
|
|
33479
|
+
|
|
33480
|
+
/**
|
|
33481
|
+
* Updates the signed-in streamer's channel settings: title, language and game/category.
|
|
33482
|
+
* Returns the updated settings. It cannot set tags — `tags` is not a field of Twitch's own
|
|
33483
|
+
* UpdateBroadcastSettingsInput. NEEDS the streamer's Twitch sign-in, which only a capability
|
|
33484
|
+
* can hold: call it as bowmark.stream_channel.set.
|
|
33485
|
+
*/
|
|
33486
|
+
setChannel(args: SetChannelArgs): Promise<TwitchChannelSettings>;
|
|
32773
33487
|
}
|
|
32774
33488
|
}
|
|
32775
33489
|
|
|
@@ -33561,6 +34275,41 @@ interface VisibleGetPlansResult {
|
|
|
33561
34275
|
}
|
|
33562
34276
|
}
|
|
33563
34277
|
|
|
34278
|
+
declare namespace BowmarkProvider_vistaprint {
|
|
34279
|
+
// ── Vistaprint — the unit's own declarations, verbatim ──
|
|
34280
|
+
type ShippingBoxSize = "11x8.5x5.5" | "12x12x5.5" | "13x13x10";
|
|
34281
|
+
type ShippingBoxPrintArea = "inside-and-outside" | "outside-only";
|
|
34282
|
+
|
|
34283
|
+
interface GetShippingBoxPriceArgs {
|
|
34284
|
+
size: ShippingBoxSize;
|
|
34285
|
+
printArea: ShippingBoxPrintArea;
|
|
34286
|
+
quantity: number;
|
|
34287
|
+
}
|
|
34288
|
+
|
|
34289
|
+
interface ShippingBoxPrice {
|
|
34290
|
+
size: ShippingBoxSize;
|
|
34291
|
+
printArea: ShippingBoxPrintArea;
|
|
34292
|
+
quantity: number;
|
|
34293
|
+
price: { amount: number; currency: string }; // real total for `quantity` units
|
|
34294
|
+
unitPrice: { amount: number; currency: string };
|
|
34295
|
+
}
|
|
34296
|
+
|
|
34297
|
+
/**
|
|
34298
|
+
* Prices Vistaprint's Full-Print Shipping Boxes for a real size, print area and quantity — the
|
|
34299
|
+
* live, quantity-tiered price the site's own PDP configurator computes, with no browser,
|
|
34300
|
+
* account or cart. Custom printed boxes, mailer boxes and packaging boxes.
|
|
34301
|
+
*/
|
|
34302
|
+
interface Unit {
|
|
34303
|
+
/**
|
|
34304
|
+
* Reads Vistaprint's own live pricing service for its Full-Print Shipping Boxes — the real,
|
|
34305
|
+
* quantity-tiered total and per-unit price for a chosen box size, print area and quantity, the
|
|
34306
|
+
* same figure the site's PDP configurator computes as a buyer changes those inputs. THROWS a
|
|
34307
|
+
* caller-fixable error for a size/printArea/quantity combination Vistaprint has no price for.
|
|
34308
|
+
*/
|
|
34309
|
+
getShippingBoxPrice(args: GetShippingBoxPriceArgs): Promise<ShippingBoxPrice>;
|
|
34310
|
+
}
|
|
34311
|
+
}
|
|
34312
|
+
|
|
33564
34313
|
declare namespace BowmarkProvider_voluspa {
|
|
33565
34314
|
// ── Voluspa — the unit's own declarations, verbatim ──
|
|
33566
34315
|
interface VoluspaQuizButton {
|
|
@@ -34279,18 +35028,88 @@ interface YoutubeTranscript {
|
|
|
34279
35028
|
fullText: string;
|
|
34280
35029
|
}
|
|
34281
35030
|
|
|
35031
|
+
interface YoutubeSearchVideo {
|
|
35032
|
+
videoId: string;
|
|
35033
|
+
url: string;
|
|
35034
|
+
title: string;
|
|
35035
|
+
channel: string | null;
|
|
35036
|
+
channelId: string | null;
|
|
35037
|
+
published: string | null; // YouTube's own phrase, e.g. "4 weeks ago"
|
|
35038
|
+
publishedAgeSeconds: number | null; // that phrase in seconds, to order newest-first
|
|
35039
|
+
length: string | null; // e.g. "22:28"; null for a live stream
|
|
35040
|
+
views: number | null;
|
|
35041
|
+
thumbnail: string | null;
|
|
35042
|
+
}
|
|
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
|
+
|
|
34282
35072
|
/**
|
|
34283
35073
|
* A YouTube video's own caption transcript, read off the site's own Transcript panel —
|
|
34284
35074
|
* timestamped lines plus the full text as one string. Language selection is not offered yet;
|
|
34285
35075
|
* this reads whichever track the panel shows by default.
|
|
34286
35076
|
*/
|
|
34287
35077
|
interface Unit {
|
|
35078
|
+
/**
|
|
35079
|
+
* Searches YouTube the way its search box does and returns the videos on the results page —
|
|
35080
|
+
* id, url, title, channel, upload age, length and views. `uploadedWithin` applies YouTube's
|
|
35081
|
+
* own upload-date filter. Rows come back in YouTube's own order either way, which is NOT
|
|
35082
|
+
* newest first, so sort on `publishedAgeSeconds` (smaller is newer) to find the most recent.
|
|
35083
|
+
* Pass a video's `url` or `videoId` straight to `getTranscript`.
|
|
35084
|
+
*/
|
|
35085
|
+
search(input: { query: string; uploadedWithin?: "today" | "week" | "month" | "year" }): Promise<YoutubeSearchVideo[]>;
|
|
35086
|
+
|
|
34288
35087
|
/**
|
|
34289
35088
|
* Returns a YouTube video's own caption transcript. `video` is a bare 11-character video id or
|
|
34290
35089
|
* any watch/shorts/embed/live/youtu.be URL. `segments` is [] — a real, honest answer — when
|
|
34291
35090
|
* the video has no caption track at all.
|
|
34292
35091
|
*/
|
|
34293
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>;
|
|
34294
35113
|
}
|
|
34295
35114
|
}
|
|
34296
35115
|
|
|
@@ -35260,6 +36079,7 @@ interface BowmarkProviders {
|
|
|
35260
36079
|
boydsleep: BowmarkProvider_boydsleep.Unit;
|
|
35261
36080
|
brius: BowmarkProvider_brius.Unit;
|
|
35262
36081
|
brixton: BowmarkProvider_brixton.Unit;
|
|
36082
|
+
browser_use: BowmarkProvider_browser_use.Unit;
|
|
35263
36083
|
builder_strucsure_com: BowmarkProvider_builder_strucsure_com.Unit;
|
|
35264
36084
|
bulletproof: BowmarkProvider_bulletproof.Unit;
|
|
35265
36085
|
bungalow: BowmarkProvider_bungalow.Unit;
|
|
@@ -35400,6 +36220,7 @@ interface BowmarkProviders {
|
|
|
35400
36220
|
heatherwood: BowmarkProvider_heatherwood.Unit;
|
|
35401
36221
|
hellofresh: BowmarkProvider_hellofresh.Unit;
|
|
35402
36222
|
hellotend: BowmarkProvider_hellotend.Unit;
|
|
36223
|
+
higgsfield: BowmarkProvider_higgsfield.Unit;
|
|
35403
36224
|
highlandhomes: BowmarkProvider_highlandhomes.Unit;
|
|
35404
36225
|
hilton: BowmarkProvider_hilton.Unit;
|
|
35405
36226
|
historymaker: BowmarkProvider_historymaker.Unit;
|
|
@@ -35585,6 +36406,7 @@ interface BowmarkProviders {
|
|
|
35585
36406
|
viewrail: BowmarkProvider_viewrail.Unit;
|
|
35586
36407
|
villagerealtyobx: BowmarkProvider_villagerealtyobx.Unit;
|
|
35587
36408
|
visible: BowmarkProvider_visible.Unit;
|
|
36409
|
+
vistaprint: BowmarkProvider_vistaprint.Unit;
|
|
35588
36410
|
voluspa: BowmarkProvider_voluspa.Unit;
|
|
35589
36411
|
vscode: BowmarkProvider_vscode.Unit;
|
|
35590
36412
|
walkerhughes: BowmarkProvider_walkerhughes.Unit;
|
|
@@ -87324,6 +88146,7 @@ interface BowmarkProviders {
|
|
|
87324
88146
|
* generated once precisely so those two cannot drift. */
|
|
87325
88147
|
interface BowmarkLibrary {
|
|
87326
88148
|
booking_links: BowmarkCapability_booking_links.Unit;
|
|
88149
|
+
browser_agent: BowmarkCapability_browser_agent.Unit;
|
|
87327
88150
|
bundles: BowmarkCapability_bundles.Unit;
|
|
87328
88151
|
cable_railing_quote: BowmarkCapability_cable_railing_quote.Unit;
|
|
87329
88152
|
cars: BowmarkCapability_cars.Unit;
|