@bowmark/web 1.12.1 → 1.12.2

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: 5207ea33354972da803d6974eed73abefc0ae46410767310486fd5116faa04c1
9
- // 34 capabilities, 257 providers, 674 typed functions, 20 refused.
8
+ // Manifest version: 4367aae3846695ff98e8537819e01ea3e2b841043d73690123b839fb07c2a19a
9
+ // 38 capabilities, 266 providers, 693 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
@@ -325,6 +325,46 @@ type CallOptions = {
325
325
  }
326
326
  }
327
327
 
328
+ declare namespace BowmarkCapability_delivery {
329
+ // ── Food-delivery fee comparison — the unit's own declarations, verbatim ──
330
+ type DeliveryFeeQuote = {
331
+ app: string // which app quoted this, e.g. "doordash"
332
+ name: string
333
+ deliveryFee: number | null // the app's own advertised delivery fee, before a cart is built
334
+ url: string
335
+ rating: number | null
336
+ }
337
+ type CompareDeliveryFeesResult = {
338
+ query: string
339
+ quotes: DeliveryFeeQuote[] // every store any queried app returned
340
+ warnings: string[] // always present; empty when nothing was dropped
341
+ }
342
+
343
+ type CallOptions = {
344
+ timeoutMs?: number // per-provider budget in ms, default 30000, clamped to 1000-55000.
345
+ // A provider slower than this is DROPPED from the results and
346
+ // NAMED in warnings — never silently absent
347
+ }
348
+
349
+ /**
350
+ * Runs a free-text restaurant search on DoorDash and returns each store's own advertised
351
+ * delivery fee, rating and ETA — the fee shown before a cart is built. Uber Eats is declared
352
+ * but not yet wired (its search stub isn't built); a full delivery+service+tax+tip checkout
353
+ * TOTAL needs a real cart and address and is separately not-yet-built on both apps.
354
+ */
355
+ interface Unit {
356
+ /**
357
+ * Runs a free-text search — `bowmark.delivery.compareDeliveryFees("pad thai austin tx")` —
358
+ * across the delivery apps this library covers (DoorDash today) and returns every matching
359
+ * store tagged with which app quoted it, that app's own advertised delivery fee, rating and
360
+ * listing URL. This is the fee shown on the app's OWN results card before a cart is built, not
361
+ * a full checkout total (delivery + service fee + tax + tip after a real cart and address) —
362
+ * see the capability blurb for what that needs.
363
+ */
364
+ compareDeliveryFees(query: string | { query: string; limit?: number }, options?: CallOptions): Promise<CompareDeliveryFeesResult>;
365
+ }
366
+ }
367
+
328
368
  declare namespace BowmarkCapability_developer_api_key_signup {
329
369
  // ── Developer API key signup — the unit's own declarations, verbatim ──
330
370
  interface DeveloperApiKeySignupDetails {
@@ -1258,6 +1298,87 @@ type CallOptions = {
1258
1298
  }
1259
1299
  }
1260
1300
 
1301
+ declare namespace BowmarkCapability_local_database_gui {
1302
+ // ── Browse a local database GUI's tables — the unit's own declarations, verbatim ──
1303
+ interface DbGuiTable {
1304
+ name: string | null // a <caption>, the nearest preceding heading, or an
1305
+ // aria-label/data-testid naming it — null if nothing does
1306
+ columns: string[] // "col_1", "col_2", … when the table has no header row
1307
+ rows: Record<string, string>[]
1308
+ rowCount: number // the real count, even when rows[] was cut
1309
+ truncated: boolean
1310
+ }
1311
+ interface DbGuiBrowseOptions {
1312
+ maxTables?: number // default 25
1313
+ maxRowsPerTable?: number // default 200
1314
+ }
1315
+ interface DbGuiBrowseResult {
1316
+ tables: DbGuiTable[]
1317
+ navLinks: string[] // candidate table/collection names from a sidebar-shaped nav
1318
+ warnings: string[]
1319
+ }
1320
+
1321
+ /**
1322
+ * Turns the HTML of a local database GUI (Adminer, phpMyAdmin, pgAdmin, Drizzle Studio,
1323
+ * mongo-express, or anything similar running on the caller's own localhost) into typed tables
1324
+ * and a candidate table list — Bowmark cannot navigate a caller-private address itself, so
1325
+ * this takes the page the caller's own agent already has and structures it. Read-only; nothing
1326
+ * here can submit or modify a row.
1327
+ */
1328
+ interface Unit {
1329
+ /**
1330
+ * Parses the HTML of a local database GUI page (e.g. the caller's own agent read it off
1331
+ * http://localhost:<port> — Bowmark cannot reach that address itself) and returns every
1332
+ * <table> on the page as structured rows keyed by column name, plus a `navLinks` list of
1333
+ * candidate table/collection names pulled from a sidebar-shaped nav. `options.maxTables`
1334
+ * (default 25) and `options.maxRowsPerTable` (default 200) cap how much is kept; a cut table
1335
+ * reports its real `rowCount` and `truncated: true`. Never throws on odd markup — an empty or
1336
+ * table-less page comes back with `tables: []` and a warning rather than an error.
1337
+ */
1338
+ browse(html: string, options?: DbGuiBrowseOptions): Promise<DbGuiBrowseResult>;
1339
+ }
1340
+ }
1341
+
1342
+ declare namespace BowmarkCapability_local_html_preview {
1343
+ // ── Preview local HTML (structure, text, links, forms — read-only) — the unit's own declarations, verbatim ──
1344
+
1345
+ interface PreviewHeading { level: number; text: string }
1346
+ interface PreviewLink { text: string; href: string | null }
1347
+ interface PreviewImage { src: string | null; alt: string | null }
1348
+ interface PreviewForm { action: string | null; method: string; fieldCount: number }
1349
+
1350
+ interface PreviewOptions {
1351
+ maxChars?: number // default 20000; over it, text is cut + truncated:true
1352
+ }
1353
+
1354
+ interface HtmlPreviewResult {
1355
+ title: string | null
1356
+ text: string // visible text, block structure kept as blank lines
1357
+ chars: number
1358
+ truncated: boolean
1359
+ headings: PreviewHeading[]
1360
+ links: PreviewLink[]
1361
+ images: PreviewImage[]
1362
+ forms: PreviewForm[] // inventory only — nothing here submits a form
1363
+ wordCount: number
1364
+ warnings: string[]
1365
+ }
1366
+
1367
+ /**
1368
+ * Render an HTML file or fragment the caller already has and get back its title, text,
1369
+ * headings, links, images and forms — no network, no browser, nothing executed or submitted.
1370
+ */
1371
+ interface Unit {
1372
+ /**
1373
+ * Parses supplied HTML (a local file's contents, or a fragment) and returns a structured
1374
+ * preview: title, readable text, headings, links, images and a read-only form inventory. Never
1375
+ * executes scripts, never fetches anything, never submits a form — it only reads the markup
1376
+ * you already have.
1377
+ */
1378
+ render(html: string, options?: PreviewOptions): Promise<HtmlPreviewResult>;
1379
+ }
1380
+ }
1381
+
1261
1382
  declare namespace BowmarkCapability_mcp_registry {
1262
1383
  // ── MCP Registry — the unit's own declarations, verbatim ──
1263
1384
  interface McpRegistryEntry {
@@ -1741,6 +1862,46 @@ type CallOptions = {
1741
1862
  }
1742
1863
  }
1743
1864
 
1865
+ declare namespace BowmarkCapability_retail {
1866
+ // ── Retail (general merchandise, multi-store) — the unit's own declarations, verbatim ──
1867
+ type RetailOffer = {
1868
+ store: "walmart" | "target" // where this offer is from
1869
+ title: string // the product as the store lists it
1870
+ price: number | null // USD; null if unpriced
1871
+ wasPrice: number | null // the pre-markdown price, when the store publishes one
1872
+ url: string | null // product page
1873
+ inStock: boolean // this store's OWN in-stock signal — not comparable
1874
+ // across stores as one normalized fact
1875
+ }
1876
+ type RetailSearchResult = {
1877
+ results: RetailOffer[] // ONE query across ALL stores, price-sorted (cheapest first)
1878
+ warnings: string[] // always present; names any store that did not answer. A
1879
+ // store named here priced NOTHING, so read this before
1880
+ // concluding a store has no stock or a worse price
1881
+ }
1882
+
1883
+ type CallOptions = {
1884
+ timeoutMs?: number // per-provider budget in ms, default 30000, clamped to 1000-55000.
1885
+ // A provider slower than this is DROPPED from the results and
1886
+ // NAMED in warnings — never silently absent
1887
+ }
1888
+
1889
+ /**
1890
+ * General-merchandise retail across Walmart and Target — one keyword search, fanned out in
1891
+ * parallel and returned price-sorted, so an agent can answer 'where can I actually buy this
1892
+ * and what does it cost' without querying each store by hand.
1893
+ */
1894
+ interface Unit {
1895
+ /**
1896
+ * Searches Walmart and Target in parallel for a keyword and returns one price-sorted list of
1897
+ * offers across both stores, each tagged with which store it's from. `warnings` names any
1898
+ * store that did not answer, so a caller can tell a genuinely cheaper/only offer from one
1899
+ * where a store simply timed out.
1900
+ */
1901
+ search(args: { query: string }): Promise<RetailSearchResult>;
1902
+ }
1903
+ }
1904
+
1744
1905
  declare namespace BowmarkCapability_school_shopping_basket {
1745
1906
  // ── Price a school-supply list across Target and Walmart — the unit's own declarations, verbatim ──
1746
1907
  interface BasketItemMatch {
@@ -1750,9 +1911,13 @@ interface BasketItemMatch {
1750
1911
  price: { amount: number; currency: string } // integer minor units
1751
1912
  }
1752
1913
  interface RetailerBasket {
1753
- total: { amount: number; currency: string } | null
1914
+ total: { amount: number; currency: string } | null // sums matched only — a partial
1915
+ // sum whenever incomplete is
1916
+ // non-empty
1754
1917
  matched: BasketItemMatch[]
1755
- unavailable: string[]
1918
+ unavailable: string[] // this retailer ANSWERED and has no in-stock priced match
1919
+ incomplete: string[] // this retailer's search never answered — NOT out of stock,
1920
+ // nothing was learned; retry with fewer items or more time
1756
1921
  }
1757
1922
  interface SchoolShoppingBasket {
1758
1923
  retailers: { target: RetailerBasket; walmart: RetailerBasket }
@@ -1771,10 +1936,15 @@ type CallOptions = {
1771
1936
  */
1772
1937
  interface Unit {
1773
1938
  /**
1774
- * Prices a multi-item shopping list at Target and Walmart, one basket total per retailer,
1775
- * naming which items had no in-stock match anywhere. Never throws on one retailer being
1776
- * unreachable that retailer's basket is dropped and named in `warnings` instead; throws only
1777
- * when BOTH retailers failed on every item.
1939
+ * Prices a multi-item shopping list at Target and Walmart, one basket total per retailer. An
1940
+ * item the retailer answered about and does not stock is in `unavailable`; an item whose
1941
+ * search never answered is in `incomplete` and is NOT a stockout nothing was learned about
1942
+ * it, and the retailer's total is then a partial sum. Every incomplete item is also named in
1943
+ * `warnings`. Never throws on one retailer being unreachable — that retailer's basket is
1944
+ * dropped and named in `warnings` instead; throws only when BOTH retailers failed on every
1945
+ * item. Walmart drives a real browser per item and every item is searched at once, so a long
1946
+ * list is what costs time: price fewer items per call before reaching for a larger
1947
+ * `timeoutMs`.
1778
1948
  */
1779
1949
  priceList(args: { items: string[] }): Promise<SchoolShoppingBasket>;
1780
1950
  }
@@ -3141,6 +3311,51 @@ interface AppleTradeInEstimate {
3141
3311
  }
3142
3312
  }
3143
3313
 
3314
+ declare namespace BowmarkProvider_aquaphoenixsci {
3315
+ // ── AquaPhoenix Scientific — the unit's own declarations, verbatim ──
3316
+ // aquaphoenixsci's OWN shapes — not a capability contract.
3317
+
3318
+ interface AquaphoenixsciListing {
3319
+ sku: string;
3320
+ name: string;
3321
+ path: string; // pass to getProduct()
3322
+ price: number | null; // dollars, or null when gated behind a business account
3323
+ requiresBusinessAccount: boolean;
3324
+ }
3325
+
3326
+ interface AquaphoenixsciProduct {
3327
+ sku: string;
3328
+ name: string;
3329
+ path: string;
3330
+ price: number | null; // dollars, or null when gated behind a business account
3331
+ requiresBusinessAccount: boolean;
3332
+ inStock: boolean;
3333
+ checkoutUrl: string; // the real product page — add-to-cart / checkout entry point
3334
+ }
3335
+
3336
+ /**
3337
+ * AquaPhoenix Scientific's real catalog storefront (water/chemical testing and feed-control
3338
+ * equipment) — browse a category for real SKUs and prices, and read one product's real price,
3339
+ * stock status and add-to-cart/checkout URL.
3340
+ */
3341
+ interface Unit {
3342
+ /**
3343
+ * Lists real products in one of AquaPhoenix's catalog categories, e.g.
3344
+ * "testing-supplies/test-kits" or "feed-and-control-equipment/pumps-accessories" — real SKU,
3345
+ * name, product path, and either a real anonymous price or a note that the SKU requires a
3346
+ * business account. THROWS naming the closed set of real category paths on an unknown one.
3347
+ */
3348
+ browseCategory(category: string): Promise<AquaphoenixsciListing[]>;
3349
+
3350
+ /**
3351
+ * Reads one product's real detail page — SKU, name, price (when anonymously priced), stock
3352
+ * status, and the real product URL to hand to the shopper as the add-to-cart / checkout entry
3353
+ * point. THROWS naming browseCategory() as the way to find a real path on an unknown one.
3354
+ */
3355
+ getProduct(path: string): Promise<AquaphoenixsciProduct>;
3356
+ }
3357
+ }
3358
+
3144
3359
  declare namespace BowmarkProvider_archipelago {
3145
3360
  // ── Archipelago — the unit's own declarations, verbatim ──
3146
3361
  interface ArchipelagoAsset {
@@ -6426,17 +6641,35 @@ interface ClubchampionFittingsMenu {
6426
6641
  activePromoTerms: string | null;
6427
6642
  }
6428
6643
 
6429
- interface ClubchampionAvailability {
6644
+ interface ClubchampionFitter {
6645
+ id: string; // the id checkAvailability takes
6646
+ name: string;
6647
+ locationId: string;
6648
+ locationName: string; // the studio name listStudios() and getFittings() use
6649
+ timezone: string;
6650
+ handedness: string[];
6651
+ specialties: string[];
6652
+ locationBayCount: number;
6653
+ }
6654
+
6655
+ interface ClubchampionSlot {
6656
+ start: string; // ISO instant, e.g. "2026-09-08T10:00:00.000Z"
6657
+ end: string;
6658
+ status: string; // the site's own word, e.g. "available"
6430
6659
  resourceId: string;
6660
+ }
6661
+
6662
+ interface ClubchampionAvailability {
6663
+ resourceId: string; // the fitter id, echoed back
6431
6664
  range: { start: string; end: string };
6432
- mode: string; // the site's own live/cached indicator
6433
- slots: unknown[]; // the site's own slot list, verbatim — empty is a real answer
6665
+ mode: string; // the site's own live/cached indicator
6666
+ slots: ClubchampionSlot[]; // verbatim — empty is a real answer
6434
6667
  }
6435
6668
 
6436
6669
  /**
6437
- * Club Champion's live studio directory, real per-store fitting pricing, and real open-slot
6438
- * availability checks — the same booking widget backend the site itself calls. Rung 10, no
6439
- * browser.
6670
+ * Club Champion's live studio directory, its fitters, real per-store fitting pricing, and real
6671
+ * open-slot availability on a named fitter's calendar — the same booking widget backend the
6672
+ * site itself calls. Rung 10, no browser.
6440
6673
  */
6441
6674
  interface Unit {
6442
6675
  /**
@@ -6453,12 +6686,22 @@ interface ClubchampionAvailability {
6453
6686
  getFittings(storeName: string): Promise<ClubchampionFittingsMenu>;
6454
6687
 
6455
6688
  /**
6456
- * Checks real, live open-slot availability for one fitting product (a `productId` from
6457
- * getFittings()) over a "YYYY-MM-DD"..."YYYY-MM-DD" date range the same live check the
6458
- * site's own booking widget makes. An empty `slots` array is the site's real answer, not an
6689
+ * Reads the live list of every Club Champion fitter (~396 across the chain) — the person a
6690
+ * fitting is booked with, and the only id checkAvailability accepts. Pass a studio name from
6691
+ * listStudios(), e.g. "Bellevue", to get just that studio's fitters.
6692
+ */
6693
+ listFitters(storeName?: string): Promise<ClubchampionFitter[]>;
6694
+
6695
+ /**
6696
+ * Checks real, live open-slot availability on one FITTER's calendar (an `id` from
6697
+ * listFitters()) over a "YYYY-MM-DD"..."YYYY-MM-DD" range — the same live check the site's own
6698
+ * booking widget makes. A fitting `productId` from getFittings() is a DIFFERENT id space and
6699
+ * the site answers it with an empty list, so pass a fitter id. Optional `durationMinutes` and
6700
+ * `fittingType` mirror what the widget sends. An empty `slots` array is the site's real answer
6701
+ * — a closed day, a booked-out fitter, or a date past the ~60-day booking horizon — not an
6459
6702
  * error.
6460
6703
  */
6461
- checkAvailability(resourceId: string, start: string, end: string): Promise<ClubchampionAvailability>;
6704
+ checkAvailability(fitterId: string, start: string, end: string, durationMinutes?: number, fittingType?: string): Promise<ClubchampionAvailability>;
6462
6705
  }
6463
6706
  }
6464
6707
 
@@ -7566,6 +7809,34 @@ interface DisneyTicketPrice {
7566
7809
  }
7567
7810
  }
7568
7811
 
7812
+ declare namespace BowmarkProvider_doordash {
7813
+ // ── DoorDash — the unit's own declarations, verbatim ──
7814
+ interface DoordashSearchArgs {
7815
+ query: string; // free text, e.g. "pad thai austin tx" — DoorDash resolves location itself
7816
+ limit?: number; // default 10, clamped to [1, 30]
7817
+ }
7818
+
7819
+ interface DoordashSearchResult {
7820
+ name: string;
7821
+ url: string;
7822
+ deliveryFee: number | null; // DoorDash's own advertised delivery fee, in dollars
7823
+ rating: number | null;
7824
+ etaMinutes: number | null;
7825
+ }
7826
+
7827
+ /**
7828
+ * DoorDash's own store search — returns real, currently-listed stores for a free-text query
7829
+ * with the delivery fee, rating and ETA DoorDash itself advertises on the results card.
7830
+ */
7831
+ interface Unit {
7832
+ /**
7833
+ * Runs DoorDash's own store search for a free-text query and returns real, currently-listed
7834
+ * stores with DoorDash's own advertised delivery fee, rating and ETA. Read-only.
7835
+ */
7836
+ search(args: DoordashSearchArgs): Promise<DoordashSearchResult[]>;
7837
+ }
7838
+ }
7839
+
7569
7840
  declare namespace BowmarkProvider_ebay {
7570
7841
  // ── eBay — the unit's own declarations, verbatim ──
7571
7842
  interface ebayItem {
@@ -9616,6 +9887,78 @@ interface GlassesusaProduct {
9616
9887
  }
9617
9888
  }
9618
9889
 
9890
+ declare namespace BowmarkProvider_goloadup {
9891
+ // ── LoadUp — the unit's own declarations, verbatim ──
9892
+ // LoadUp's OWN shapes — not a capability contract.
9893
+
9894
+ interface GoloadupItemType {
9895
+ id: string; // the key getQuote's items take
9896
+ name: string;
9897
+ category: string | null; // e.g. "COUCH", "MATTRESS"
9898
+ aliases: string[]; // alternate names the site matches this item on
9899
+ pickupAllowed: boolean;
9900
+ pickupPrice: number | null; // national base price — getQuote is the real, ZIP-priced number
9901
+ assemblyAllowed: boolean;
9902
+ assemblyPrice: number | null;
9903
+ disassemblyAllowed: boolean;
9904
+ disassemblyPrice: number | null;
9905
+ }
9906
+
9907
+ interface GoloadupQuoteItem { itemId: string; quantity: number }
9908
+
9909
+ interface GoloadupQuote {
9910
+ validServiceArea: boolean; // false = ZIP is outside LoadUp's service area, other fields are placeholders
9911
+ validZip: boolean; // false = ZIP itself is not recognized
9912
+ basePrice: number; // the area/trip fee added on top of the items
9913
+ total: number; // the guaranteed total for exactly these items at this ZIP
9914
+ totalFormatted: string; // "$124.00"
9915
+ taxAmount: number;
9916
+ minimumPrice: number; // the floor LoadUp charges regardless of what's selected
9917
+ minimumPriceApplied: boolean;
9918
+ sameDayAllowed: boolean;
9919
+ bookingUrl: string; // hand the shopper here to finish scheduling
9920
+ }
9921
+
9922
+ interface GoloadupServiceAvailability {
9923
+ validZip: boolean;
9924
+ inService: boolean;
9925
+ sameDayAllowed: boolean;
9926
+ estimationAllowed: boolean;
9927
+ retailAssembliesAllowed: boolean;
9928
+ }
9929
+
9930
+ /**
9931
+ * LoadUp's own item-selector and live pricing engine for junk removal, donation and furniture
9932
+ * pickup — the current catalog of items with base prices, a real ZIP-specific guaranteed quote
9933
+ * for an exact set of items, and whether/how a ZIP is served, all off the same GraphQL API the
9934
+ * site's own booking widget calls.
9935
+ */
9936
+ interface Unit {
9937
+ /**
9938
+ * Returns LoadUp's full current catalog of pickupable items (couches, mattresses, appliances,
9939
+ * and 400+ more), each with its category, alternate names, and national base
9940
+ * pickup/assembly/disassembly prices. The `id` on each row is what getQuote's items take —
9941
+ * this is the entry point every quote starts from.
9942
+ */
9943
+ getPricingCatalog(): Promise<GoloadupItemType[]>;
9944
+
9945
+ /**
9946
+ * Prices an EXACT set of items (e.g. [{ itemId: "7412", quantity: 1 }] for one Couch/Loveseat)
9947
+ * at a real ZIP code against LoadUp's live pricing engine — the same call its own booking
9948
+ * widget makes. Returns the guaranteed total, whether the ZIP falls under the site's
9949
+ * minimum-price floor, and same-day availability. `validServiceArea: false` means the ZIP is
9950
+ * real but outside LoadUp's coverage, not an error — check it before reading `total`.
9951
+ */
9952
+ getQuote(zip: string, items: GoloadupQuoteItem[]): Promise<GoloadupQuote>;
9953
+
9954
+ /**
9955
+ * Checks whether and how LoadUp serves one ZIP code, independent of any specific items — in
9956
+ * service, same-day pickup allowed, and whether retail assembly is offered there.
9957
+ */
9958
+ checkServiceAvailability(zip: string): Promise<GoloadupServiceAvailability>;
9959
+ }
9960
+ }
9961
+
9619
9962
  declare namespace BowmarkProvider_goodway {
9620
9963
  // ── Goodway Technologies — the unit's own declarations, verbatim ──
9621
9964
  interface GoodwayProductSummary {
@@ -11745,6 +12088,22 @@ interface IdentitygroupMountOptionResult {
11745
12088
  }
11746
12089
  }
11747
12090
 
12091
+ declare namespace BowmarkProvider_ihg {
12092
+ // ── IHG Hotels & Resorts — the unit's own declarations, verbatim ──
12093
+ interface ihgRow { id: string; brandCode: string; availabilityStatus: string; lowestCashOnlyCost: { baseAmount: string; ratePlanType: string | null } | null; highestCashOnlyCost: { baseAmount: string; ratePlanType: string | null } | null; propertyCurrency: string | null; distance: number | null; distanceKm: number | null; }
12094
+
12095
+ /** IHG live hotel availability search across its brand portfolio. */
12096
+ interface Unit {
12097
+ /**
12098
+ * Searches IHG's live cash availability for a destination and increasing ISO
12099
+ * check-in/check-out dates. Returns IHG's hotel mnemonic, brand code, availability status,
12100
+ * cash-price range, currency and distance; IHG's availability endpoint does not include
12101
+ * display names.
12102
+ */
12103
+ search(args: { destination: string; checkIn: string; checkOut: string; adults?: number; rooms?: number; radius?: number }): Promise<ihgRow[]>;
12104
+ }
12105
+ }
12106
+
11748
12107
  declare namespace BowmarkProvider_instagram {
11749
12108
  // ── Instagram — the unit's own declarations, verbatim ──
11750
12109
  interface InstagramProfile {
@@ -13433,6 +13792,24 @@ interface KayakCar {
13433
13792
  }
13434
13793
  }
13435
13794
 
13795
+ declare namespace BowmarkProvider_keepa {
13796
+ // ── Keepa — the unit's own declarations, verbatim ──
13797
+ interface KeepaProductResult { product: KeepaProduct; tokensLeft: number | null; tokensConsumed: number | null; refillRate: number | null; }
13798
+ interface KeepaProduct { asin: string; domainId: number; title: string; csv?: unknown[]; stats?: Record<string, unknown>; }
13799
+
13800
+ /**
13801
+ * Keepa's documented Amazon product API — reads a product's native price history and metadata
13802
+ * by ASIN. Requires a caller-provided Keepa API key.
13803
+ */
13804
+ interface Unit {
13805
+ /**
13806
+ * Reads Keepa's native Amazon product record and compact price-history series for one ASIN.
13807
+ * Requires a caller-provided Keepa API key.
13808
+ */
13809
+ getProduct(args: { asin: string; domain?: number; stats?: number }): Promise<KeepaProductResult>;
13810
+ }
13811
+ }
13812
+
13436
13813
  declare namespace BowmarkProvider_kingsdown {
13437
13814
  // ── Kingsdown — the unit's own declarations, verbatim ──
13438
13815
  interface kingsdownBedmatchResult {
@@ -16606,6 +16983,43 @@ interface MuzeVisitingHours {
16606
16983
  }
16607
16984
  }
16608
16985
 
16986
+ declare namespace BowmarkProvider_myollie {
16987
+ // ── Ollie — the unit's own declarations, verbatim ──
16988
+ interface OllieMealPlanOption {
16989
+ planType: string;
16990
+ planTypeName: string;
16991
+ startingPricePerWeek: number;
16992
+ availableCadences: number[];
16993
+ defaultCadence: number;
16994
+ }
16995
+
16996
+ interface GetMealPlanResult {
16997
+ weightLbs: number;
16998
+ activityLevel: "Low" | "Moderate" | "High";
16999
+ plans: OllieMealPlanOption[];
17000
+ checkoutUrl: string;
17001
+ }
17002
+
17003
+ /**
17004
+ * Fresh dog food subscription. getMealPlan is live — the same
17005
+ * weight/activity/neuter-status-driven meal plan and REAL per-plan weekly price the site's own
17006
+ * onboarding quiz computes, given a dog's weight, activity level and neuter status. Returns
17007
+ * all four plan tiers (Fresh, Baked, Mixed, Half Fresh) with this dog's own computed starting
17008
+ * price, plus a checkout link that carries the answers forward.
17009
+ */
17010
+ interface Unit {
17011
+ /**
17012
+ * Computes Ollie's personalized fresh-food meal plan and REAL weekly price for a dog, given
17013
+ * `weightLbs` (number, e.g. 45), `activityLevel` ("Low"|"Moderate"|"High"), `isNeutered`
17014
+ * (boolean) and optional `gender` ("Male"|"Female"). Returns all four plan tiers (Fresh,
17015
+ * Baked, Mixed, Half Fresh) each with this dog's own computed `startingPricePerWeek` — not a
17016
+ * marketing-page range — plus a `checkoutUrl` that carries the answers into the site's own
17017
+ * checkout. Recovered from the onboarding quiz's own API, not guessed at.
17018
+ */
17019
+ getMealPlan(args: object): Promise<GetMealPlanResult>;
17020
+ }
17021
+ }
17022
+
16609
17023
  declare namespace BowmarkProvider_naic {
16610
17024
  // ── NAIC — the unit's own declarations, verbatim ──
16611
17025
  interface naicCompanyQuery {
@@ -17105,6 +17519,43 @@ interface StoreStock {
17105
17519
  }
17106
17520
  }
17107
17521
 
17522
+ declare namespace BowmarkProvider_nutrafol {
17523
+ // ── Nutrafol — the unit's own declarations, verbatim ──
17524
+ interface RootCause {
17525
+ category: "Stress" | "Metabolism" | "Nutrition" | "Lifestyle" | "Hormone" | "Aging";
17526
+ severity: string; // the site's own label, e.g. "NEEDS SUPPORT", "MODERATE", "NORMAL"
17527
+ description: string | null;
17528
+ signs: string[];
17529
+ }
17530
+ interface HairWellnessAssessment {
17531
+ rootCauses: RootCause[];
17532
+ }
17533
+ interface QuizOverview {
17534
+ description: string;
17535
+ rootCauseCategories: string[];
17536
+ }
17537
+
17538
+ /**
17539
+ * Nutrafol's own Hair Wellness Quiz — assessHairWellness runs the real root-cause assessment
17540
+ * and returns its own computed per-category severities (Stress, Metabolism, Nutrition,
17541
+ * Lifestyle, Hormone, Aging), the personalized output the site's marketing pages only
17542
+ * describe.
17543
+ */
17544
+ interface Unit {
17545
+ /**
17546
+ * Runs Nutrafol's own Hair Wellness Quiz along its default answer path and returns the site's
17547
+ * real computed root-cause severities. Read-only — never adds to cart or checks out.
17548
+ */
17549
+ assessHairWellness(): Promise<HairWellnessAssessment>;
17550
+
17551
+ /**
17552
+ * Reads the Hair Wellness Quiz's own static intro page — its real description and the six
17553
+ * root-cause categories it screens for — with a plain browserless fetch.
17554
+ */
17555
+ getQuizOverview(): Promise<QuizOverview>;
17556
+ }
17557
+ }
17558
+
17108
17559
  declare namespace BowmarkProvider_nvisioncenters {
17109
17560
  // ── NVISION Eye Centers — the unit's own declarations, verbatim ──
17110
17561
  // NVISION's OWN shapes — not a capability contract.
@@ -17257,6 +17708,69 @@ interface OliverwineryShippingAvailability {
17257
17708
  }
17258
17709
  }
17259
17710
 
17711
+ declare namespace BowmarkProvider_othership {
17712
+ // ── Othership — the unit's own declarations, verbatim ──
17713
+ // Othership's OWN shapes — not a capability contract.
17714
+
17715
+ interface OthershipLocation {
17716
+ id: string; // the key getClassSchedule's locationId takes
17717
+ name: string; // e.g. "Adelaide", "Flatiron", "Williamsburg"
17718
+ city: string;
17719
+ stateProvince: string;
17720
+ formattedAddress: string;
17721
+ timezone: string;
17722
+ currencyCode: string;
17723
+ regionName: string | null; // e.g. "Toronto", "NYC"
17724
+ }
17725
+
17726
+ interface OthershipClass {
17727
+ id: string;
17728
+ name: string; // e.g. "Guided Up: Arctic Tundra - 60 min"
17729
+ description: string;
17730
+ durationMinutes: number;
17731
+ classroomName: string;
17732
+ instructorNames: string[];
17733
+ tags: string[]; // e.g. ["Guided", "Sun Pass"]
17734
+ startDateTime: string; // ISO 8601 with the location's own UTC offset
17735
+ bookingStartDateTime: string;
17736
+ availableSpotCount: number; // real, live — 0 means fully booked, not "not offered"
17737
+ capacity: number;
17738
+ spotCountIsPublic: boolean;
17739
+ isCancelled: boolean;
17740
+ }
17741
+
17742
+ interface OthershipClassSchedule {
17743
+ classes: OthershipClass[];
17744
+ totalCount: number; // may exceed classes.length if the range was too broad — see warnings
17745
+ scheduleUrl: string; // hand the visitor here to finish booking
17746
+ warnings: string[];
17747
+ }
17748
+
17749
+ /**
17750
+ * Othership's real, live class schedule and seat availability across its Toronto and NYC
17751
+ * sauna/ice-bath/breathwork studios — the same data its Mariana Tek booking widget shows, read
17752
+ * directly rather than through a JS embed nothing outside a real browser can render.
17753
+ */
17754
+ interface Unit {
17755
+ /**
17756
+ * Returns every Othership studio location (Toronto's Adelaide and Yorkville, NYC's Flatiron
17757
+ * and Williamsburg) with its site id, city, address and timezone. The `id` on each row is what
17758
+ * getClassSchedule's locationId takes — this is the entry point every schedule search starts
17759
+ * from.
17760
+ */
17761
+ getLocations(): Promise<OthershipLocation[]>;
17762
+
17763
+ /**
17764
+ * Searches one Othership location's real, live class schedule between two YYYY-MM-DD dates —
17765
+ * sauna, ice bath and breathwork sessions with instructor names, duration, tags and the actual
17766
+ * seats left right now, off the same Mariana Tek API the site's own booking widget calls.
17767
+ * `availableSpotCount: 0` means fully booked, not unavailable; `scheduleUrl` is where to send
17768
+ * someone to finish booking.
17769
+ */
17770
+ getClassSchedule(locationId: string, startDate: string, endDate: string): Promise<OthershipClassSchedule>;
17771
+ }
17772
+ }
17773
+
17260
17774
  declare namespace BowmarkProvider_otto {
17261
17775
  // ── OTTO — the unit's own declarations, verbatim ──
17262
17776
  interface ottoProduct {
@@ -21307,7 +21821,7 @@ interface SunHomeSaunasQuizOption {
21307
21821
  interface SunHomeSaunasQuizQuestion {
21308
21822
  id: string; // pass back as answers[].questionId
21309
21823
  title: string;
21310
- type: string; // the site's own node type, e.g. "SIMPLE_MULTI"
21824
+ type: string; // the site's own Digioh question type, e.g. "DIGIOH_PRQ"
21311
21825
  options: SunHomeSaunasQuizOption[]; // option.id -> answers[].optionIds
21312
21826
  }
21313
21827
 
@@ -21315,8 +21829,8 @@ interface SunHomeSaunasMatch {
21315
21829
  handle: string; // the key addSaunaToCart takes
21316
21830
  title: string;
21317
21831
  price: number; // dollars — real live Shopify price
21318
- matchScore: number; // e.g. 5
21319
- matchOutOf: number; // e.g. 5 -> the site's own "5/5 match"
21832
+ matchScore: number; // selected answers that positively weighted this product
21833
+ matchOutOf: number; // submitted answer selections
21320
21834
  }
21321
21835
 
21322
21836
  interface SunHomeSaunasCartResult {
@@ -21330,30 +21844,29 @@ interface SunHomeSaunasCartResult {
21330
21844
  }
21331
21845
 
21332
21846
  /**
21333
- * Sun Home Saunas' real Perfect Product Finder quiz — the site's own 5-question buyer quiz,
21334
- * its real server-computed ranked product matches with live prices, and a real Shopify cart
21335
- * write for the winning match — no login, no dealer routing.
21847
+ * Sun Home Saunas' live Digioh buyer quiz — its current questions, published product-ranking
21848
+ * rules, real Shopify prices, and a real cart write for a recommended product — no login or
21849
+ * dealer routing.
21336
21850
  */
21337
21851
  interface Unit {
21338
21852
  /**
21339
- * Reads Sun Home Saunas' real, live Perfect Product Finder quiz straight off its quiz vendor's
21340
- * own API the current 5 questions and every real option, with the real ids
21853
+ * Reads Sun Home Saunas' real, live Digioh buyer quiz from its published breakpoint
21854
+ * configurationevery current question and answer button, with the ids
21341
21855
  * getPersonalizedSaunaMatches() needs to answer them.
21342
21856
  */
21343
21857
  getSaunaFinderQuestions(): Promise<SunHomeSaunasQuizQuestion[]>;
21344
21858
 
21345
21859
  /**
21346
- * Submits real answers (from getSaunaFinderQuestions()) through the same quiz session flow the
21347
- * site's own UI uses, and returns the site's own SERVER-COMPUTED ranked product matches with
21348
- * real live prices and a real match score the exact personalized result a real buyer would
21349
- * see, never a guess from general knowledge.
21860
+ * Applies real answers (from getSaunaFinderQuestions()) to the live Digioh `prq_keywords`
21861
+ * rules the site's quiz publishes, then returns the site's own weighted ranking with real
21862
+ * current Shopify prices — never a general-knowledge guess.
21350
21863
  */
21351
21864
  getPersonalizedSaunaMatches(answers: {questionId: string, optionIds: string[]}[]): Promise<SunHomeSaunasMatch[]>;
21352
21865
 
21353
21866
  /**
21354
- * Adds one real matched sauna (a handle from getPersonalizedSaunaMatches()) to a real Shopify
21355
- * cart at Sun Home Saunas' own real live price, and reads the cart back to confirm the write
21356
- * landed. THROWS if the product is currently out of stock.
21867
+ * Adds one real matched product (a handle from getPersonalizedSaunaMatches()) to a real
21868
+ * Shopify cart at Sun Home Saunas' own real live price, and reads the cart back to confirm the
21869
+ * write landed. THROWS if the product is currently out of stock.
21357
21870
  */
21358
21871
  addSaunaToCart(handle: string, quantity?: number): Promise<SunHomeSaunasCartResult>;
21359
21872
  }
@@ -22534,6 +23047,54 @@ interface TitlenineBraSizeResult {
22534
23047
  }
22535
23048
  }
22536
23049
 
23050
+ declare namespace BowmarkProvider_tmobile {
23051
+ // ── T-Mobile — the unit's own declarations, verbatim ──
23052
+ interface TmobileSku {
23053
+ id: string;
23054
+ listPriceUsd: number;
23055
+ monthlyPaymentUsd: number | null;
23056
+ contractTermMonths: number | null;
23057
+ }
23058
+ interface TmobileTradeInCredit {
23059
+ deviceLabel: string;
23060
+ creditUsd: number;
23061
+ }
23062
+ interface TmobilePromotion {
23063
+ promoId: string;
23064
+ displayName: string;
23065
+ headlineCreditUsd: number;
23066
+ tradeInCredits: TmobileTradeInCredit[];
23067
+ }
23068
+ interface TmobileTradeInMatch {
23069
+ model: string;
23070
+ promoId: string;
23071
+ promoDisplayName: string;
23072
+ creditUsd: number;
23073
+ }
23074
+ interface TmobileUpgradeOffer {
23075
+ devicePath: string;
23076
+ sourceUrl: string;
23077
+ sku: TmobileSku;
23078
+ promotions: TmobilePromotion[];
23079
+ tradeInMatch: TmobileTradeInMatch | null;
23080
+ }
23081
+
23082
+ /**
23083
+ * t-mobile.com's own device-page pricing call — real list price, real monthly financing, and
23084
+ * the site's own per-trade-in-device credit tiers, read through a real browser session (the
23085
+ * site signs every pricing request).
23086
+ */
23087
+ interface Unit {
23088
+ /**
23089
+ * Reads one t-mobile.com device page's own pricing call (list price, monthly financing, and
23090
+ * every applicable promotion's per-trade-in-device credit tier) and, when `tradeInModel` is
23091
+ * given, resolves the BEST matching credit across all of them — e.g. "iPhone 13" against a
23092
+ * page carrying tiers like "Save $830: iPhone 13".
23093
+ */
23094
+ getUpgradeOffer(arg: { devicePath: string; tradeInModel?: string }): Promise<TmobileUpgradeOffer>;
23095
+ }
23096
+ }
23097
+
22537
23098
  declare namespace BowmarkProvider_topviewtix {
22538
23099
  // ── TopView Sightseeing — the unit's own declarations, verbatim ──
22539
23100
  interface topviewtixPackageDetails {
@@ -23629,6 +24190,7 @@ interface walmartSearchResult {
23629
24190
  price: number | null;
23630
24191
  wasPrice: number | null;
23631
24192
  priceRangeMin: number | null;
24193
+ conditionCode: number | null;
23632
24194
  inStock: boolean;
23633
24195
  rating: number | null;
23634
24196
  reviewCount: number;
@@ -24940,6 +25502,7 @@ interface BowmarkProviders {
24940
25502
  ancientnutrition: BowmarkProvider_ancientnutrition.Unit;
24941
25503
  andersenwindows: BowmarkProvider_andersenwindows.Unit;
24942
25504
  apple: BowmarkProvider_apple.Unit;
25505
+ aquaphoenixsci: BowmarkProvider_aquaphoenixsci.Unit;
24943
25506
  archipelago: BowmarkProvider_archipelago.Unit;
24944
25507
  ashleyfurniture: BowmarkProvider_ashleyfurniture.Unit;
24945
25508
  asppoolco: BowmarkProvider_asppoolco.Unit;
@@ -25001,6 +25564,7 @@ interface BowmarkProviders {
25001
25564
  dillards: BowmarkProvider_dillards.Unit;
25002
25565
  discounttire: BowmarkProvider_discounttire.Unit;
25003
25566
  disney: BowmarkProvider_disney.Unit;
25567
+ doordash: BowmarkProvider_doordash.Unit;
25004
25568
  ebay: BowmarkProvider_ebay.Unit;
25005
25569
  elevenlabs: BowmarkProvider_elevenlabs.Unit;
25006
25570
  embroker: BowmarkProvider_embroker.Unit;
@@ -25024,6 +25588,7 @@ interface BowmarkProviders {
25024
25588
  geico: BowmarkProvider_geico.Unit;
25025
25589
  github: BowmarkProvider_github.Unit;
25026
25590
  glassesusa: BowmarkProvider_glassesusa.Unit;
25591
+ goloadup: BowmarkProvider_goloadup.Unit;
25027
25592
  goodway: BowmarkProvider_goodway.Unit;
25028
25593
  google_flights: BowmarkProvider_google_flights.Unit;
25029
25594
  gotchacovered: BowmarkProvider_gotchacovered.Unit;
@@ -25046,6 +25611,7 @@ interface BowmarkProviders {
25046
25611
  hunter: BowmarkProvider_hunter.Unit;
25047
25612
  ibuypower: BowmarkProvider_ibuypower.Unit;
25048
25613
  identitygroup: BowmarkProvider_identitygroup.Unit;
25614
+ ihg: BowmarkProvider_ihg.Unit;
25049
25615
  instagram: BowmarkProvider_instagram.Unit;
25050
25616
  insurify: BowmarkProvider_insurify.Unit;
25051
25617
  interiordefine: BowmarkProvider_interiordefine.Unit;
@@ -25060,6 +25626,7 @@ interface BowmarkProviders {
25060
25626
  justinwine: BowmarkProvider_justinwine.Unit;
25061
25627
  kaleidescape: BowmarkProvider_kaleidescape.Unit;
25062
25628
  kayak: BowmarkProvider_kayak.Unit;
25629
+ keepa: BowmarkProvider_keepa.Unit;
25063
25630
  kingsdown: BowmarkProvider_kingsdown.Unit;
25064
25631
  kitchentuneup: BowmarkProvider_kitchentuneup.Unit;
25065
25632
  kompan: BowmarkProvider_kompan.Unit;
@@ -25093,14 +25660,17 @@ interface BowmarkProviders {
25093
25660
  momondo: BowmarkProvider_momondo.Unit;
25094
25661
  mossyoak: BowmarkProvider_mossyoak.Unit;
25095
25662
  muze_gov_tr: BowmarkProvider_muze_gov_tr.Unit;
25663
+ myollie: BowmarkProvider_myollie.Unit;
25096
25664
  naic: BowmarkProvider_naic.Unit;
25097
25665
  namecheap: BowmarkProvider_namecheap.Unit;
25098
25666
  nationalbusinessfurniture: BowmarkProvider_nationalbusinessfurniture.Unit;
25099
25667
  newageproducts: BowmarkProvider_newageproducts.Unit;
25100
25668
  newegg: BowmarkProvider_newegg.Unit;
25669
+ nutrafol: BowmarkProvider_nutrafol.Unit;
25101
25670
  nvisioncenters: BowmarkProvider_nvisioncenters.Unit;
25102
25671
  oanda: BowmarkProvider_oanda.Unit;
25103
25672
  oliverwinery: BowmarkProvider_oliverwinery.Unit;
25673
+ othership: BowmarkProvider_othership.Unit;
25104
25674
  otto: BowmarkProvider_otto.Unit;
25105
25675
  outdoorresearch: BowmarkProvider_outdoorresearch.Unit;
25106
25676
  pacificabeauty: BowmarkProvider_pacificabeauty.Unit;
@@ -25160,6 +25730,7 @@ interface BowmarkProviders {
25160
25730
  thibautdesign: BowmarkProvider_thibautdesign.Unit;
25161
25731
  tilsonhomes: BowmarkProvider_tilsonhomes.Unit;
25162
25732
  titlenine: BowmarkProvider_titlenine.Unit;
25733
+ tmobile: BowmarkProvider_tmobile.Unit;
25163
25734
  topviewtix: BowmarkProvider_topviewtix.Unit;
25164
25735
  travelinsured: BowmarkProvider_travelinsured.Unit;
25165
25736
  trawickinternational: BowmarkProvider_trawickinternational.Unit;
@@ -76913,6 +77484,7 @@ interface BowmarkLibrary {
76913
77484
  cars: BowmarkCapability_cars.Unit;
76914
77485
  coworking: BowmarkCapability_coworking.Unit;
76915
77486
  custom_sofa_configurator: BowmarkCapability_custom_sofa_configurator.Unit;
77487
+ delivery: BowmarkCapability_delivery.Unit;
76916
77488
  developer_api_key_signup: BowmarkCapability_developer_api_key_signup.Unit;
76917
77489
  domain: BowmarkCapability_domain.Unit;
76918
77490
  email: BowmarkCapability_email.Unit;
@@ -76924,6 +77496,8 @@ interface BowmarkLibrary {
76924
77496
  hvac: BowmarkCapability_hvac.Unit;
76925
77497
  insurance: BowmarkCapability_insurance.Unit;
76926
77498
  istanbul_schedules: BowmarkCapability_istanbul_schedules.Unit;
77499
+ local_database_gui: BowmarkCapability_local_database_gui.Unit;
77500
+ local_html_preview: BowmarkCapability_local_html_preview.Unit;
76927
77501
  mcp_registry: BowmarkCapability_mcp_registry.Unit;
76928
77502
  music: BowmarkCapability_music.Unit;
76929
77503
  pcparts: BowmarkCapability_pcparts.Unit;
@@ -76933,6 +77507,7 @@ interface BowmarkLibrary {
76933
77507
  promocodes: BowmarkCapability_promocodes.Unit;
76934
77508
  read: BowmarkCapability_read.Unit;
76935
77509
  restaurant_booking: BowmarkCapability_restaurant_booking.Unit;
77510
+ retail: BowmarkCapability_retail.Unit;
76936
77511
  school_shopping_basket: BowmarkCapability_school_shopping_basket.Unit;
76937
77512
  search: BowmarkCapability_search.Unit;
76938
77513
  sheds: BowmarkCapability_sheds.Unit;