@bowmark/web 1.7.0 → 1.9.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/package.json +1 -1
- package/src/generated/library.d.ts +1910 -118
- package/src/generated/validators.ts +2147 -224
|
@@ -5,9 +5,9 @@
|
|
|
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
|
-
// 9 capabilities,
|
|
10
|
-
// 51,
|
|
8
|
+
// Manifest version: be4cdedcfa4c990cc2208fd7e5f33c2dd386c9c210168b9f2c02f259fbe8fbba
|
|
9
|
+
// 9 capabilities, 141 providers, 422 typed functions, 20 refused.
|
|
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
|
|
13
13
|
// carry no types, so no honest signature exists. Each one is commented in place
|
|
@@ -1646,6 +1646,80 @@ interface AshleyFurnitureStore {
|
|
|
1646
1646
|
}
|
|
1647
1647
|
}
|
|
1648
1648
|
|
|
1649
|
+
declare namespace BowmarkProvider_atlasoceanvoyages {
|
|
1650
|
+
// ── Atlas Ocean Voyages — the unit's own declarations, verbatim ──
|
|
1651
|
+
// Atlas Ocean Voyages' OWN shapes — not a capability contract.
|
|
1652
|
+
|
|
1653
|
+
interface AtlasVoyageSummary {
|
|
1654
|
+
code: string; // the site's own itinerary code, e.g. "WVO260815"
|
|
1655
|
+
slug: string; // the key getVoyage takes
|
|
1656
|
+
title: string;
|
|
1657
|
+
destinations: string[];
|
|
1658
|
+
ship: string;
|
|
1659
|
+
durationNights: number;
|
|
1660
|
+
departDate: string; // "2026-08-15"
|
|
1661
|
+
endDate: string;
|
|
1662
|
+
startingPrice: number | null; // null = call-for-fares, not a read failure
|
|
1663
|
+
startingPriceFormatted: string | null;
|
|
1664
|
+
detailUrl: string;
|
|
1665
|
+
}
|
|
1666
|
+
|
|
1667
|
+
interface AtlasVoyageSearchResult { voyages: AtlasVoyageSummary[]; totalMatched: number }
|
|
1668
|
+
|
|
1669
|
+
interface AtlasPortStop { name: string; code: string; arriving: string | null; departing: string | null; atSea: boolean }
|
|
1670
|
+
|
|
1671
|
+
interface AtlasCabinPrice { code: string; name: string; totalPrice: number; totalPriceFormatted: string }
|
|
1672
|
+
|
|
1673
|
+
interface AtlasVoyageDetail {
|
|
1674
|
+
code: string;
|
|
1675
|
+
slug: string;
|
|
1676
|
+
title: string;
|
|
1677
|
+
heroTitle: string | null;
|
|
1678
|
+
summary: string | null;
|
|
1679
|
+
ship: string;
|
|
1680
|
+
durationNights: number;
|
|
1681
|
+
departDate: string;
|
|
1682
|
+
endDate: string;
|
|
1683
|
+
ports: AtlasPortStop[];
|
|
1684
|
+
cabinPrices: AtlasCabinPrice[]; // only the categories THIS sailing has live pricing for
|
|
1685
|
+
startingPrice: number | null;
|
|
1686
|
+
startingPriceFormatted: string | null;
|
|
1687
|
+
bookingUrl: string; // bookings.atlasoceanvoyages.com — the real handoff
|
|
1688
|
+
detailUrl: string;
|
|
1689
|
+
}
|
|
1690
|
+
|
|
1691
|
+
/**
|
|
1692
|
+
* Luxury expedition cruise voyage search from Atlas Ocean Voyages — filter the site's own 180
|
|
1693
|
+
* live itineraries by destination, ship, duration and departure date with real starting
|
|
1694
|
+
* prices, then read one voyage's full port-by-port day itinerary, every cabin category the
|
|
1695
|
+
* site has actually priced for that sailing, and the itinerary-code-keyed handoff URL into the
|
|
1696
|
+
* real booking engine.
|
|
1697
|
+
*/
|
|
1698
|
+
interface Unit {
|
|
1699
|
+
/**
|
|
1700
|
+
* Runs the /search voyage finder over all 180 currently-published itineraries, filtered by
|
|
1701
|
+
* destination (substring, e.g. "Antarctica"), ship (substring, e.g. "World Voyager"), duration
|
|
1702
|
+
* bounds, departure-date bounds and a free-text title match, sorted by departure date. Takes
|
|
1703
|
+
* no argument for the full unfiltered list (capped at `limit`, default 20, max 50).
|
|
1704
|
+
* `totalMatched` is the count BEFORE the cap, so a caller can tell "20 of 20" from "20 of 61".
|
|
1705
|
+
* `startingPrice` is null on a genuine call-for-fares sailing, never omitted — filter on it
|
|
1706
|
+
* explicitly rather than assuming presence.
|
|
1707
|
+
*/
|
|
1708
|
+
searchVoyages(args?: { destination?: string; ship?: string; minDurationNights?: number; maxDurationNights?: number; departAfter?: string; departBefore?: string; query?: string; limit?: number }): Promise<AtlasVoyageSearchResult>;
|
|
1709
|
+
|
|
1710
|
+
/**
|
|
1711
|
+
* Reads one voyage's full detail page: the port-by-port day-by-day schedule (arrival/departure
|
|
1712
|
+
* times, or `atSea: true` for a scenic-cruising leg with no landing), every cabin category the
|
|
1713
|
+
* site has ACTUALLY priced for this specific sailing — never the ship's full rate card, since
|
|
1714
|
+
* a sailing sells out of most categories long before departure — and `bookingUrl`, the
|
|
1715
|
+
* itinerary-code-keyed handoff into bookings.atlasoceanvoyages.com where a caller actually
|
|
1716
|
+
* holds or pays for a cabin. `slug` comes from searchVoyages(). THROWS on an unknown slug,
|
|
1717
|
+
* naming searchVoyages() as the way to find current ones.
|
|
1718
|
+
*/
|
|
1719
|
+
getVoyage(slug: string): Promise<AtlasVoyageDetail>;
|
|
1720
|
+
}
|
|
1721
|
+
}
|
|
1722
|
+
|
|
1649
1723
|
declare namespace BowmarkProvider_atlasseniorliving {
|
|
1650
1724
|
// ── Atlas Senior Living — the unit's own declarations, verbatim ──
|
|
1651
1725
|
type AtlasCareType = "assisted_living" | "independent_living" | "memory_care" | "respite_care";
|
|
@@ -2029,6 +2103,58 @@ interface StoreStock {
|
|
|
2029
2103
|
}
|
|
2030
2104
|
}
|
|
2031
2105
|
|
|
2106
|
+
declare namespace BowmarkProvider_bigrentz {
|
|
2107
|
+
// ── BigRentz — the unit's own declarations, verbatim ──
|
|
2108
|
+
interface BigrentzEquipmentRow {
|
|
2109
|
+
id: number;
|
|
2110
|
+
name: string;
|
|
2111
|
+
slug: string;
|
|
2112
|
+
permalink: string;
|
|
2113
|
+
categories: { id: number; name: string; slug: string }[];
|
|
2114
|
+
images: { src: string; alt: string }[];
|
|
2115
|
+
inStock: boolean;
|
|
2116
|
+
priced: false;
|
|
2117
|
+
priceNote: string;
|
|
2118
|
+
}
|
|
2119
|
+
interface BigrentzEquipmentDetail extends BigrentzEquipmentRow {
|
|
2120
|
+
description: string;
|
|
2121
|
+
specSheetUrls: string[];
|
|
2122
|
+
}
|
|
2123
|
+
interface BigrentzCategoryRow {
|
|
2124
|
+
id: number;
|
|
2125
|
+
name: string;
|
|
2126
|
+
slug: string;
|
|
2127
|
+
count: number;
|
|
2128
|
+
permalink: string;
|
|
2129
|
+
}
|
|
2130
|
+
|
|
2131
|
+
/**
|
|
2132
|
+
* BigRentz's own equipment catalog — search, category browse and per-item detail, real data
|
|
2133
|
+
* from their WooCommerce Store API. Live rental pricing is not yet built (site gates it behind
|
|
2134
|
+
* a location + date picker); see getRentalPricing.
|
|
2135
|
+
*/
|
|
2136
|
+
interface Unit {
|
|
2137
|
+
/**
|
|
2138
|
+
* Searches BigRentz's equipment catalog by free text (e.g. "boom lift", "40 ft boom lift") and
|
|
2139
|
+
* returns matching rows. Real catalog data — id, name, slug, permalink, category, stock flag,
|
|
2140
|
+
* images — but NOT a real price (see `priceNote` on each row).
|
|
2141
|
+
*/
|
|
2142
|
+
search(query: string): Promise<BigrentzEquipmentRow[]>;
|
|
2143
|
+
|
|
2144
|
+
/**
|
|
2145
|
+
* Reads one piece of equipment in full by the slug `search` or `listCategories` returned —
|
|
2146
|
+
* description, spec-sheet PDF links, category and stock flag.
|
|
2147
|
+
*/
|
|
2148
|
+
getEquipment(slug: string): Promise<BigrentzEquipmentDetail>;
|
|
2149
|
+
|
|
2150
|
+
/**
|
|
2151
|
+
* Lists BigRentz's equipment categories — id, name, slug, live listing count, category page
|
|
2152
|
+
* URL. Pass `parentSlug` to list a category's children.
|
|
2153
|
+
*/
|
|
2154
|
+
listCategories(options?: { parentSlug?: string }): Promise<BigrentzCategoryRow[]>;
|
|
2155
|
+
}
|
|
2156
|
+
}
|
|
2157
|
+
|
|
2032
2158
|
declare namespace BowmarkProvider_blenderseyewear {
|
|
2033
2159
|
// ── Blenders Eyewear — the unit's own declarations, verbatim ──
|
|
2034
2160
|
// Blenders Eyewear's OWN shapes — not a capability contract.
|
|
@@ -2352,6 +2478,145 @@ interface BmwusaModelListing {
|
|
|
2352
2478
|
}
|
|
2353
2479
|
}
|
|
2354
2480
|
|
|
2481
|
+
declare namespace BowmarkProvider_boydsleep {
|
|
2482
|
+
// ── Boyd Sleep — the unit's own declarations, verbatim ──
|
|
2483
|
+
// Boyd Sleep's OWN shapes — not a capability contract.
|
|
2484
|
+
|
|
2485
|
+
type BoydsleepGender = "Male" | "Female" | "Non Binary";
|
|
2486
|
+
type BoydsleepSleepPosition = "Side" | "Back" | "Stomach" | "Multi";
|
|
2487
|
+
|
|
2488
|
+
interface BoydsleepCalibrationInput {
|
|
2489
|
+
gender: BoydsleepGender;
|
|
2490
|
+
heightInches: number; // snapped to the site's own height band
|
|
2491
|
+
weightLbs: number; // snapped to the site's own weight band
|
|
2492
|
+
sleepPosition: BoydsleepSleepPosition;
|
|
2493
|
+
}
|
|
2494
|
+
|
|
2495
|
+
interface Boydsleep2ZoneResult {
|
|
2496
|
+
supportIndex: number; // 0-100
|
|
2497
|
+
heightBandInches: number;
|
|
2498
|
+
weightBandLbs: number;
|
|
2499
|
+
setupGuideUrl: string; // the real next step — no checkout exists on this domain
|
|
2500
|
+
calibratorUrl: string;
|
|
2501
|
+
}
|
|
2502
|
+
|
|
2503
|
+
interface Boydsleep6ZoneResult {
|
|
2504
|
+
headFoot: number;
|
|
2505
|
+
center: number;
|
|
2506
|
+
heightBandInches: number;
|
|
2507
|
+
weightBandLbs: number;
|
|
2508
|
+
setupGuideUrl: string;
|
|
2509
|
+
calibratorUrl: string;
|
|
2510
|
+
}
|
|
2511
|
+
|
|
2512
|
+
/**
|
|
2513
|
+
* Boyd Sleep's own 'Smart Support Number' calibrator for a Nautica Home Smart Zone air bed —
|
|
2514
|
+
* the real personalized 0-100 Support Index (2-zone) or Head/Foot + Center numbers (6-zone),
|
|
2515
|
+
* computed exactly as the site computes them, plus the site's own setup guide as the real next
|
|
2516
|
+
* step (Boyd sells through retail/franchise partners, so there is no DTC checkout on this
|
|
2517
|
+
* domain to route to).
|
|
2518
|
+
*/
|
|
2519
|
+
interface Unit {
|
|
2520
|
+
/**
|
|
2521
|
+
* Runs Boyd's own 2-zone Smart Support Number calculation for a Nautica Home Smart Zone air
|
|
2522
|
+
* bed — a real, personalized 0-100 Support Index computed exactly as the site's own calculator
|
|
2523
|
+
* computes it, no estimate. `setupGuideUrl` is the real next step; Boyd sells through
|
|
2524
|
+
* retail/franchise partners, so there is no cart to route to on this domain.
|
|
2525
|
+
*/
|
|
2526
|
+
calibrateSupportNumber(input: BoydsleepCalibrationInput): Promise<Boydsleep2ZoneResult>;
|
|
2527
|
+
|
|
2528
|
+
/**
|
|
2529
|
+
* Runs Boyd's own 6-zone Smart Support Number calculation — same inputs as the 2-zone tool,
|
|
2530
|
+
* returns a separate Head/Foot number and a Center (lumbar) number for the 6-zone Nautica Home
|
|
2531
|
+
* Smart Zone bed.
|
|
2532
|
+
*/
|
|
2533
|
+
calibrateSixZoneSupportNumber(input: BoydsleepCalibrationInput): Promise<Boydsleep6ZoneResult>;
|
|
2534
|
+
}
|
|
2535
|
+
}
|
|
2536
|
+
|
|
2537
|
+
declare namespace BowmarkProvider_brixton {
|
|
2538
|
+
// ── Brixton — the unit's own declarations, verbatim ──
|
|
2539
|
+
interface BrixtonVariant {
|
|
2540
|
+
/** Shopify's numeric variant id as a string. */
|
|
2541
|
+
id: string;
|
|
2542
|
+
/** The variant's own label, e.g. "M" or "Black / M" on multi-option products. */
|
|
2543
|
+
title: string;
|
|
2544
|
+
/** String verbatim from the storefront — "30.00" (dollars) on /products.json, "10900" (cents) on /products/<h>.js. */
|
|
2545
|
+
price: string;
|
|
2546
|
+
/** Same scale as price. Null when the variant is not on sale. */
|
|
2547
|
+
compareAtPrice: string | null;
|
|
2548
|
+
/** The store's own SKU. Null on a variant without one. */
|
|
2549
|
+
sku: string | null;
|
|
2550
|
+
/** Whether the variant is purchasable right now. */
|
|
2551
|
+
available: boolean;
|
|
2552
|
+
/** e.g. ["M"] or ["Black", "M"]. */
|
|
2553
|
+
options: string[];
|
|
2554
|
+
}
|
|
2555
|
+
interface BrixtonProduct {
|
|
2556
|
+
/** The handle is the only stable identifier across the catalogue. */
|
|
2557
|
+
handle: string;
|
|
2558
|
+
title: string;
|
|
2559
|
+
vendor: string;
|
|
2560
|
+
productType: string;
|
|
2561
|
+
url: string;
|
|
2562
|
+
descriptionHtml: string | null;
|
|
2563
|
+
optionNames: string[];
|
|
2564
|
+
variants: BrixtonVariant[];
|
|
2565
|
+
/** Same scale as variants — see BrixtonVariant.price. */
|
|
2566
|
+
priceRange: { min: string; max: string } | null;
|
|
2567
|
+
/** True if ANY variant is purchasable. */
|
|
2568
|
+
inStock: boolean;
|
|
2569
|
+
tags: string[];
|
|
2570
|
+
/** Brixton's own images, in the order the storefront publishes them. */
|
|
2571
|
+
images: string[];
|
|
2572
|
+
}
|
|
2573
|
+
interface BrixtonCatalogue {
|
|
2574
|
+
/** All matching products, in-stock first, then by handle. */
|
|
2575
|
+
products: BrixtonProduct[];
|
|
2576
|
+
/** What the filter DROPPED, in the same register the rest of the library uses. */
|
|
2577
|
+
warnings: string[];
|
|
2578
|
+
}
|
|
2579
|
+
interface BrixtonCheckoutLink {
|
|
2580
|
+
/** Shopify's own cart-permalink URL — a GET that adds the line item and redirects into the cart. */
|
|
2581
|
+
url: string;
|
|
2582
|
+
/** The exact variant the link resolved to, read live off the storefront. */
|
|
2583
|
+
variant: BrixtonVariant;
|
|
2584
|
+
/** The product the variant belongs to. */
|
|
2585
|
+
product: BrixtonProduct;
|
|
2586
|
+
}
|
|
2587
|
+
|
|
2588
|
+
/**
|
|
2589
|
+
* Brixton apparel and headwear catalogue — every product, its size/color variants, real prices
|
|
2590
|
+
* and stock — read off the live Shopify storefront, plus a live-validated checkout handoff
|
|
2591
|
+
* link.
|
|
2592
|
+
*/
|
|
2593
|
+
interface Unit {
|
|
2594
|
+
/**
|
|
2595
|
+
* Reads the live Brixton catalogue as the storefront publishes it — every product, its handle,
|
|
2596
|
+
* title, vendor, description, tags, images and the per-variant price the storefront is quoting
|
|
2597
|
+
* right now. Returns [] on a transport failure. The catalog page is the line and the parse is
|
|
2598
|
+
* the unit of work.
|
|
2599
|
+
*/
|
|
2600
|
+
listBrixtonProducts(opts?: { limit?: number }): Promise<BrixtonProduct[]>;
|
|
2601
|
+
|
|
2602
|
+
/**
|
|
2603
|
+
* Reads one product by its handle — every size/color variant, its exact price and whether that
|
|
2604
|
+
* specific variant is purchasable right now. Takes the handle listBrixtonProducts returns.
|
|
2605
|
+
* THROWS on an unknown handle (the store answers a real 404).
|
|
2606
|
+
*/
|
|
2607
|
+
getBrixtonProduct(handle: string): Promise<BrixtonProduct>;
|
|
2608
|
+
|
|
2609
|
+
/**
|
|
2610
|
+
* Resolves a product handle + a variant match (either the exact variant title like "M", or a
|
|
2611
|
+
* substring of it) to a real Shopify cart-permalink URL, validated live against the
|
|
2612
|
+
* storefront. THROWS if the handle is unknown, if no variant matches, if the match is
|
|
2613
|
+
* ambiguous (matches more than one variant), or if the matched variant is not currently
|
|
2614
|
+
* available — the error names the candidate or in-stock options so the caller can retry.
|
|
2615
|
+
*/
|
|
2616
|
+
getBrixtonCheckoutLink(handle: string, variantTitleOrOptions: string, opts?: { quantity?: number }): Promise<BrixtonCheckoutLink>;
|
|
2617
|
+
}
|
|
2618
|
+
}
|
|
2619
|
+
|
|
2355
2620
|
declare namespace BowmarkProvider_bykoket {
|
|
2356
2621
|
// ── KOKET — the unit's own declarations, verbatim ──
|
|
2357
2622
|
interface KoketProductSummary {
|
|
@@ -2723,6 +2988,59 @@ interface carsVehicleValue {
|
|
|
2723
2988
|
}
|
|
2724
2989
|
}
|
|
2725
2990
|
|
|
2991
|
+
declare namespace BowmarkProvider_chantecaille {
|
|
2992
|
+
// ── Chantecaille — the unit's own declarations, verbatim ──
|
|
2993
|
+
// Chantecaille's OWN shapes — not a capability contract.
|
|
2994
|
+
|
|
2995
|
+
interface QuizQuestion {
|
|
2996
|
+
id: string;
|
|
2997
|
+
code: string; // e.g. "undertone", "tone", "look", "benefits", "coverage"
|
|
2998
|
+
name: string; // e.g. "Undertone"
|
|
2999
|
+
question: string; // the site's own prompt text
|
|
3000
|
+
answers: { id: string; code: string; name: string }[];
|
|
3001
|
+
}
|
|
3002
|
+
|
|
3003
|
+
interface FoundationSelections {
|
|
3004
|
+
undertone: string; // e.g. "Cool" — code or name, from getFoundationQuizTaxonomy()
|
|
3005
|
+
skinTone: string; // e.g. "Medium Deep"
|
|
3006
|
+
skinLook: string; // e.g. "Smooth and flawless"
|
|
3007
|
+
benefits: string[]; // e.g. ["Hydration"] — [] answers the site's own "Skip"
|
|
3008
|
+
coverage: string; // e.g. "Light" | "Medium" | "Full"
|
|
3009
|
+
}
|
|
3010
|
+
|
|
3011
|
+
interface FoundationMatch {
|
|
3012
|
+
name: string; // e.g. "Future Skin - Maple"
|
|
3013
|
+
score: number; // the site's own computed match score
|
|
3014
|
+
price: string;
|
|
3015
|
+
displayPrice: string; // e.g. "$95.00"
|
|
3016
|
+
productUrl: string; // real product page, this exact shade preselected
|
|
3017
|
+
productImageUrl: string;
|
|
3018
|
+
description: string;
|
|
3019
|
+
}
|
|
3020
|
+
|
|
3021
|
+
/**
|
|
3022
|
+
* Chantecaille's own Foundation Shade Match Quiz, reimplemented over its real Cartful
|
|
3023
|
+
* Solutions scoring engine: read the real live question taxonomy, and get real ranked
|
|
3024
|
+
* foundation matches — name, price, product page — computed by the site's own engine for a
|
|
3025
|
+
* stated undertone, skin tone, finish, skincare benefits and coverage.
|
|
3026
|
+
*/
|
|
3027
|
+
interface Unit {
|
|
3028
|
+
/**
|
|
3029
|
+
* Reads Chantecaille's real, live Foundation Shade Match Quiz question and answer taxonomy off
|
|
3030
|
+
* its own Cartful Solutions bundle — the real option names to pass to matchFoundation.
|
|
3031
|
+
*/
|
|
3032
|
+
getFoundationQuizTaxonomy(): Promise<QuizQuestion[]>;
|
|
3033
|
+
|
|
3034
|
+
/**
|
|
3035
|
+
* Chantecaille's own Foundation Shade Match Quiz, run for real: posts the caller's selections
|
|
3036
|
+
* to the site's own scoring engine and returns the real ranked foundation matches, highest
|
|
3037
|
+
* score first. THROWS naming the real options when a selection does not match the live
|
|
3038
|
+
* taxonomy.
|
|
3039
|
+
*/
|
|
3040
|
+
matchFoundation(selections: FoundationSelections): Promise<FoundationMatch[]>;
|
|
3041
|
+
}
|
|
3042
|
+
}
|
|
3043
|
+
|
|
2726
3044
|
declare namespace BowmarkProvider_cheapflights {
|
|
2727
3045
|
// ── Cheapflights — the unit's own declarations, verbatim ──
|
|
2728
3046
|
interface KayakQuery {
|
|
@@ -3401,6 +3719,120 @@ interface CyberpowerpcPriceResult {
|
|
|
3401
3719
|
}
|
|
3402
3720
|
}
|
|
3403
3721
|
|
|
3722
|
+
declare namespace BowmarkProvider_davidsonhomes {
|
|
3723
|
+
// ── Davidson Homes — the unit's own declarations, verbatim ──
|
|
3724
|
+
// Davidson Homes' OWN shapes — not a capability contract.
|
|
3725
|
+
|
|
3726
|
+
interface DavidsonhomesRange { lowest: number | null; highest: number | null }
|
|
3727
|
+
|
|
3728
|
+
interface DavidsonhomesRegionSummary {
|
|
3729
|
+
id: string;
|
|
3730
|
+
title: string;
|
|
3731
|
+
path: string; // the key getRegion takes
|
|
3732
|
+
state: string;
|
|
3733
|
+
homesCount: number;
|
|
3734
|
+
communitiesCount: number;
|
|
3735
|
+
priceRange: DavidsonhomesRange;
|
|
3736
|
+
}
|
|
3737
|
+
|
|
3738
|
+
interface DavidsonhomesCommunitySummary {
|
|
3739
|
+
id: string;
|
|
3740
|
+
title: string;
|
|
3741
|
+
path: string; // the key getCommunity takes
|
|
3742
|
+
city: string;
|
|
3743
|
+
state: string;
|
|
3744
|
+
status: string; // e.g. "Move-In Ready Homes", "Now Selling"
|
|
3745
|
+
bedRange: DavidsonhomesRange;
|
|
3746
|
+
priceRange: DavidsonhomesRange;
|
|
3747
|
+
sqftRange: DavidsonhomesRange;
|
|
3748
|
+
homesCount: number;
|
|
3749
|
+
plansCount: number;
|
|
3750
|
+
}
|
|
3751
|
+
|
|
3752
|
+
interface DavidsonhomesRegionDetail {
|
|
3753
|
+
title: string;
|
|
3754
|
+
path: string;
|
|
3755
|
+
state: string; // this region's URL grouping, per the site's own nav
|
|
3756
|
+
stateAbbreviation: string;
|
|
3757
|
+
communities: DavidsonhomesCommunitySummary[];
|
|
3758
|
+
}
|
|
3759
|
+
|
|
3760
|
+
interface DavidsonhomesHomeSummary {
|
|
3761
|
+
id: string;
|
|
3762
|
+
title: string; // real street address, e.g. "28 Aurora Circle"
|
|
3763
|
+
path: string; // the key getHome takes
|
|
3764
|
+
price: number;
|
|
3765
|
+
oldPrice: number | null;
|
|
3766
|
+
sqft: number;
|
|
3767
|
+
beds: number;
|
|
3768
|
+
baths: number;
|
|
3769
|
+
halfBaths: number;
|
|
3770
|
+
status: string; // e.g. "Active", "Pending"
|
|
3771
|
+
estCompletionMonth: string | null;
|
|
3772
|
+
floorPlanName: string | null;
|
|
3773
|
+
}
|
|
3774
|
+
|
|
3775
|
+
interface DavidsonhomesCommunityDetail {
|
|
3776
|
+
title: string;
|
|
3777
|
+
path: string;
|
|
3778
|
+
status: string;
|
|
3779
|
+
priceRange: DavidsonhomesRange;
|
|
3780
|
+
sqftRange: DavidsonhomesRange;
|
|
3781
|
+
phone: string | null;
|
|
3782
|
+
plansCount: number;
|
|
3783
|
+
availableHomes: DavidsonhomesHomeSummary[];
|
|
3784
|
+
}
|
|
3785
|
+
|
|
3786
|
+
interface DavidsonhomesHomeDetail extends DavidsonhomesHomeSummary {
|
|
3787
|
+
description: string | null;
|
|
3788
|
+
garage: number | null;
|
|
3789
|
+
coordinates: { lat: number; lng: number } | null;
|
|
3790
|
+
communityTitle: string;
|
|
3791
|
+
communityPath: string; // the key getCommunity takes
|
|
3792
|
+
}
|
|
3793
|
+
|
|
3794
|
+
/**
|
|
3795
|
+
* Reads Davidson Homes' own 'Find Your Home' search — all live market regions, one region's
|
|
3796
|
+
* communities with real price/bed/sqft ranges and availability status, one community's actual
|
|
3797
|
+
* move-in-ready homes with real street addresses and prices, and one home's full listing
|
|
3798
|
+
* detail — the way the live site's own search would show it.
|
|
3799
|
+
*/
|
|
3800
|
+
interface Unit {
|
|
3801
|
+
/**
|
|
3802
|
+
* Lists every market region Davidson Homes currently builds in (state/metro area), each with
|
|
3803
|
+
* its own live homes count, communities count and starting price. The entry point: every
|
|
3804
|
+
* region's `path` is what `getRegion` takes.
|
|
3805
|
+
*/
|
|
3806
|
+
listRegions(): Promise<DavidsonhomesRegionSummary[]>;
|
|
3807
|
+
|
|
3808
|
+
/**
|
|
3809
|
+
* Reads one region's own page: every community in it with a real live price/bed/sqft range and
|
|
3810
|
+
* status ("Move-In Ready Homes", "Now Selling", etc). `path` comes from `listRegions()`, e.g.
|
|
3811
|
+
* "states/alabama/huntsville-market-area". THROWS on an unknown path, naming `listRegions()`
|
|
3812
|
+
* as the way to find current ones.
|
|
3813
|
+
*/
|
|
3814
|
+
getRegion(path: string): Promise<DavidsonhomesRegionDetail>;
|
|
3815
|
+
|
|
3816
|
+
/**
|
|
3817
|
+
* Reads one community's own page: its ACTUAL available homes right now, each with a real
|
|
3818
|
+
* street address, real price, real sqft/bed/bath count and per-home status ("Active",
|
|
3819
|
+
* "Pending") — never a floor-plan brochure. `path` comes from `getRegion()`, e.g.
|
|
3820
|
+
* "states/alabama/huntsville-market-area/fayetteville/bailey-park". THROWS on an unknown path,
|
|
3821
|
+
* naming `getRegion()` as the way to find current ones.
|
|
3822
|
+
*/
|
|
3823
|
+
getCommunity(path: string): Promise<DavidsonhomesCommunityDetail>;
|
|
3824
|
+
|
|
3825
|
+
/**
|
|
3826
|
+
* Reads one specific home's own listing page: address, price, sqft, bed/bath count, status,
|
|
3827
|
+
* garage, coordinates and the site's own listing description. `path` comes from
|
|
3828
|
+
* `getCommunity()` or `getRegion()`'s community list, e.g.
|
|
3829
|
+
* "…/bailey-park/available-homes/28-aurora-circle". THROWS on an unknown path, naming
|
|
3830
|
+
* `getCommunity()` as the way to find current ones.
|
|
3831
|
+
*/
|
|
3832
|
+
getHome(path: string): Promise<DavidsonhomesHomeDetail>;
|
|
3833
|
+
}
|
|
3834
|
+
}
|
|
3835
|
+
|
|
3404
3836
|
declare namespace BowmarkProvider_decked {
|
|
3405
3837
|
// ── DECKED — the unit's own declarations, verbatim ──
|
|
3406
3838
|
// DECKED's OWN shapes — not a capability contract.
|
|
@@ -4122,6 +4554,100 @@ interface ErieAgent {
|
|
|
4122
4554
|
}
|
|
4123
4555
|
}
|
|
4124
4556
|
|
|
4557
|
+
declare namespace BowmarkProvider_eventsource {
|
|
4558
|
+
// ── Event Source — the unit's own declarations, verbatim ──
|
|
4559
|
+
interface EventSourceDesign {
|
|
4560
|
+
designId: number;
|
|
4561
|
+
visionBoardId: number;
|
|
4562
|
+
roomId: number;
|
|
4563
|
+
designName: string;
|
|
4564
|
+
roomName: string;
|
|
4565
|
+
venueName: string;
|
|
4566
|
+
hasLayouts: boolean;
|
|
4567
|
+
hasTemplates: boolean;
|
|
4568
|
+
}
|
|
4569
|
+
interface EventSourceShowroom {
|
|
4570
|
+
accessCode: string;
|
|
4571
|
+
showroomName: string;
|
|
4572
|
+
ownerName: string;
|
|
4573
|
+
branded: boolean;
|
|
4574
|
+
underConstruction: boolean;
|
|
4575
|
+
logoUrl: string;
|
|
4576
|
+
eventId: number;
|
|
4577
|
+
venueIds: number[];
|
|
4578
|
+
designs: EventSourceDesign[];
|
|
4579
|
+
}
|
|
4580
|
+
interface EventSourceVenue {
|
|
4581
|
+
venueId: number;
|
|
4582
|
+
businessName: string;
|
|
4583
|
+
city: string;
|
|
4584
|
+
state: string;
|
|
4585
|
+
zipCode: string;
|
|
4586
|
+
market: string;
|
|
4587
|
+
primaryImageUrl: string;
|
|
4588
|
+
rooms: Array<{ roomId: number; roomName: string; primaryImageUrl: string; active: boolean }>;
|
|
4589
|
+
}
|
|
4590
|
+
interface EventSourceInquiryContact {
|
|
4591
|
+
inquiryRequestEmail: string;
|
|
4592
|
+
ownerName: string;
|
|
4593
|
+
ownerLogoUrl: string;
|
|
4594
|
+
}
|
|
4595
|
+
|
|
4596
|
+
/**
|
|
4597
|
+
* Reads a public Event Source Virtual Design Center showroom (design, venue, inquiry contact)
|
|
4598
|
+
* by its access code — no login.
|
|
4599
|
+
*/
|
|
4600
|
+
interface Unit {
|
|
4601
|
+
/**
|
|
4602
|
+
* Reads a public Virtual Design Center showroom by its access code — its design(s), venue and
|
|
4603
|
+
* branding.
|
|
4604
|
+
*/
|
|
4605
|
+
getShowroom(code: string): Promise<EventSourceShowroom>;
|
|
4606
|
+
|
|
4607
|
+
/** Reads the real venue/room a showroom's design is staged in. */
|
|
4608
|
+
getShowroomVenue(eventId: number, venueId: number, code: string): Promise<EventSourceVenue>;
|
|
4609
|
+
|
|
4610
|
+
/** Reads who a showroom's Send Inquiry button emails, without submitting anything. */
|
|
4611
|
+
getShowroomInquiryContact(code: string): Promise<EventSourceInquiryContact>;
|
|
4612
|
+
}
|
|
4613
|
+
}
|
|
4614
|
+
|
|
4615
|
+
declare namespace BowmarkProvider_evolutionofsmooth {
|
|
4616
|
+
// ── eos Products — the unit's own declarations, verbatim ──
|
|
4617
|
+
interface ShadeQuizOption { optionId: string; text: string }
|
|
4618
|
+
interface ShadeQuizQuestion { questionPageId: string; questionId: string; title: string; options: ShadeQuizOption[] }
|
|
4619
|
+
interface ShadeResult {
|
|
4620
|
+
shadeName: string; price: number; priceFormatted: string;
|
|
4621
|
+
productUrl: string; productId: string; variantId: string; description: string;
|
|
4622
|
+
}
|
|
4623
|
+
type ShadeQuizAnswerResult =
|
|
4624
|
+
| { done: false; question: ShadeQuizQuestion }
|
|
4625
|
+
| { done: true; result: ShadeResult };
|
|
4626
|
+
|
|
4627
|
+
/**
|
|
4628
|
+
* eos's Dewy Lip Shine Shade Finder quiz (Octane AI) — walks the site's real 5-question quiz
|
|
4629
|
+
* and returns the personalized shade result: name, Shopify product/variant id, price and
|
|
4630
|
+
* product URL, ready for a cart handoff.
|
|
4631
|
+
*/
|
|
4632
|
+
interface Unit {
|
|
4633
|
+
/**
|
|
4634
|
+
* Starts eos's Dewy Lip Shine Shade Finder quiz (walking past the site's own unanswerable
|
|
4635
|
+
* intro page automatically) and returns the first real question, with the `quizResponseId`
|
|
4636
|
+
* every following `answerShadeQuizQuestion` call takes.
|
|
4637
|
+
*/
|
|
4638
|
+
startShadeQuiz(): Promise<{ quizResponseId: string; question: ShadeQuizQuestion }>;
|
|
4639
|
+
|
|
4640
|
+
/**
|
|
4641
|
+
* Submits one answer (the `questionPageId`/`questionId` from the question just answered, and
|
|
4642
|
+
* the `optionId` of the chosen option) and returns either the next question, or — once all 5
|
|
4643
|
+
* real questions are answered — `{ done: true, result }` with the personalized Dewy Lip Shine
|
|
4644
|
+
* shade: name, Shopify product/variant id, price and product URL. The site's own email-capture
|
|
4645
|
+
* page is skipped automatically.
|
|
4646
|
+
*/
|
|
4647
|
+
answerShadeQuizQuestion(quizResponseId: string, questionPageId: string, questionId: string, optionId: string): Promise<ShadeQuizAnswerResult>;
|
|
4648
|
+
}
|
|
4649
|
+
}
|
|
4650
|
+
|
|
4125
4651
|
declare namespace BowmarkProvider_extraspace {
|
|
4126
4652
|
// ── Extra Space Storage — the unit's own declarations, verbatim ──
|
|
4127
4653
|
interface ExtraspaceSearchResult {
|
|
@@ -4809,6 +5335,78 @@ interface fordVehicleRecalls {
|
|
|
4809
5335
|
}
|
|
4810
5336
|
}
|
|
4811
5337
|
|
|
5338
|
+
declare namespace BowmarkProvider_fourseasonsyachts {
|
|
5339
|
+
// ── Four Seasons Yachts — the unit's own declarations, verbatim ──
|
|
5340
|
+
interface FourseasonsyachtsVoyage {
|
|
5341
|
+
/** The site's own stable identifier for a sailing — what getVoyageSailing takes. */
|
|
5342
|
+
voyageCode: string;
|
|
5343
|
+
title: string;
|
|
5344
|
+
/** The path segment on fourseasonsyachts.com/voyages/<slug>. */
|
|
5345
|
+
slug: string;
|
|
5346
|
+
/** The site's own free-text category label, e.g. "Grand Mediterranean". */
|
|
5347
|
+
category: string;
|
|
5348
|
+
/** The resolved destination entry's title, when the link resolved; falls back to category. */
|
|
5349
|
+
destination: string;
|
|
5350
|
+
vessel: string;
|
|
5351
|
+
body: string;
|
|
5352
|
+
images: string[];
|
|
5353
|
+
url: string;
|
|
5354
|
+
}
|
|
5355
|
+
interface FourseasonsyachtsSuite {
|
|
5356
|
+
description: string;
|
|
5357
|
+
totalCabins: number;
|
|
5358
|
+
availableCabins: number;
|
|
5359
|
+
price: number;
|
|
5360
|
+
currency: string;
|
|
5361
|
+
}
|
|
5362
|
+
interface FourseasonsyachtsSailing {
|
|
5363
|
+
voyageCode: string;
|
|
5364
|
+
sailDays: number;
|
|
5365
|
+
fromPort: string;
|
|
5366
|
+
fromDateTime: string;
|
|
5367
|
+
toPort: string;
|
|
5368
|
+
toDateTime: string;
|
|
5369
|
+
ship: string;
|
|
5370
|
+
suites: FourseasonsyachtsSuite[];
|
|
5371
|
+
}
|
|
5372
|
+
interface FourseasonsyachtsSearchResult {
|
|
5373
|
+
voyages: FourseasonsyachtsVoyage[];
|
|
5374
|
+
/** What the filter DROPPED, in the same register the rest of the library uses. */
|
|
5375
|
+
warnings: string[];
|
|
5376
|
+
}
|
|
5377
|
+
|
|
5378
|
+
/**
|
|
5379
|
+
* Four Seasons Yachts' live Voyage Finder — every published sailing, its region and vessel,
|
|
5380
|
+
* plus the real scheduled departure with per-suite pricing and cabin availability, read off
|
|
5381
|
+
* the site's own booking-engine endpoints.
|
|
5382
|
+
*/
|
|
5383
|
+
interface Unit {
|
|
5384
|
+
/**
|
|
5385
|
+
* Reads the live Voyage Finder inventory (50 published itineraries) and filters locally by
|
|
5386
|
+
* region, vessel and/or a free-text keyword against the title/body. Returns real voyageCodes
|
|
5387
|
+
* and slugs — the entry point every other function takes its identifier from. The site
|
|
5388
|
+
* publishes no query/filter endpoint of its own, so the divide is what this function does with
|
|
5389
|
+
* the listing, not how it gets there.
|
|
5390
|
+
*/
|
|
5391
|
+
searchVoyages(filters?: { region?: string; vessel?: string; keyword?: string }): Promise<FourseasonsyachtsSearchResult>;
|
|
5392
|
+
|
|
5393
|
+
/**
|
|
5394
|
+
* Reads one voyage's itinerary — its day-by-day description, region, vessel and images — by
|
|
5395
|
+
* voyageCode (server-side filtered, cheap) or by slug (matched locally against the full
|
|
5396
|
+
* listing). THROWS when neither matches.
|
|
5397
|
+
*/
|
|
5398
|
+
getVoyage(voyageCodeOrSlug: string): Promise<FourseasonsyachtsVoyage>;
|
|
5399
|
+
|
|
5400
|
+
/**
|
|
5401
|
+
* Reads the REAL scheduled departure for one voyageCode — exact embark/disembark ports and
|
|
5402
|
+
* dates, the ship, and every suite category's live price and cabin availability, straight off
|
|
5403
|
+
* the site's own booking engine. Returns null when the site currently has no scheduled
|
|
5404
|
+
* departure for that voyageCode (an honest empty answer, not a failure).
|
|
5405
|
+
*/
|
|
5406
|
+
getVoyageSailing(voyageCode: string): Promise<FourseasonsyachtsSailing | null>;
|
|
5407
|
+
}
|
|
5408
|
+
}
|
|
5409
|
+
|
|
4812
5410
|
declare namespace BowmarkProvider_framebridge {
|
|
4813
5411
|
// ── Framebridge — the unit's own declarations, verbatim ──
|
|
4814
5412
|
// Framebridge's OWN shapes — not a capability contract.
|
|
@@ -5614,6 +6212,72 @@ interface graingerStockRow {
|
|
|
5614
6212
|
}
|
|
5615
6213
|
}
|
|
5616
6214
|
|
|
6215
|
+
declare namespace BowmarkProvider_grandwelcome {
|
|
6216
|
+
// ── Grand Welcome — the unit's own declarations, verbatim ──
|
|
6217
|
+
interface GrandwelcomeRentalRow {
|
|
6218
|
+
rentalId: string;
|
|
6219
|
+
name: string;
|
|
6220
|
+
url: string;
|
|
6221
|
+
location: string;
|
|
6222
|
+
propertyType: string;
|
|
6223
|
+
petFriendly: boolean;
|
|
6224
|
+
priceFromUsd: number | null;
|
|
6225
|
+
priceFromFormatted: string | null;
|
|
6226
|
+
bedrooms: number | null;
|
|
6227
|
+
bathrooms: number | null;
|
|
6228
|
+
guests: number | null;
|
|
6229
|
+
ratingValue: number | null;
|
|
6230
|
+
ratingCount: number | null;
|
|
6231
|
+
}
|
|
6232
|
+
interface GrandwelcomeRentalDetail {
|
|
6233
|
+
rentalId: string;
|
|
6234
|
+
propertyId: string;
|
|
6235
|
+
name: string;
|
|
6236
|
+
description: string;
|
|
6237
|
+
images: string[];
|
|
6238
|
+
url: string;
|
|
6239
|
+
}
|
|
6240
|
+
interface GrandwelcomeQuoteFee {
|
|
6241
|
+
label: string;
|
|
6242
|
+
amountUsd: number;
|
|
6243
|
+
}
|
|
6244
|
+
type GrandwelcomeQuote =
|
|
6245
|
+
| { available: true; propertyId: string; checkin: string; checkout: string; currency: "USD";
|
|
6246
|
+
rentUsd: number; fees: GrandwelcomeQuoteFee[]; feesTotalUsd: number; taxUsd: number;
|
|
6247
|
+
totalUsd: number; bookNowUrl: string }
|
|
6248
|
+
| { available: false; propertyId: string; checkin: string; checkout: string };
|
|
6249
|
+
|
|
6250
|
+
/**
|
|
6251
|
+
* Grand Welcome's own vacation rental search, listing detail, and real-time dated
|
|
6252
|
+
* pricing/booking-link engine — a national franchise's own inventory, live availability and
|
|
6253
|
+
* price, not a stale catalog.
|
|
6254
|
+
*/
|
|
6255
|
+
interface Unit {
|
|
6256
|
+
/**
|
|
6257
|
+
* Runs Grand Welcome's own destination search (a market slug like "california-sea-ranch", from
|
|
6258
|
+
* a rental's own page or the destination directory), optionally filtered to a bedroom count,
|
|
6259
|
+
* and returns the live matching listings — name, url, location, type, pet-friendly flag,
|
|
6260
|
+
* advertised "as low as" price, bed/bath/guest counts, rating.
|
|
6261
|
+
*/
|
|
6262
|
+
searchRentals(destinationSlug: string, options?: { bedrooms?: number }): Promise<GrandwelcomeRentalRow[]>;
|
|
6263
|
+
|
|
6264
|
+
/**
|
|
6265
|
+
* Reads one rental in full — name, description, photos, and the internal numeric propertyId
|
|
6266
|
+
* getRentalQuote needs — from the rentalId a search result or a grandwelcome.com/rentals/<id>
|
|
6267
|
+
* URL carries.
|
|
6268
|
+
*/
|
|
6269
|
+
getRentalDetail(rentalId: string): Promise<GrandwelcomeRentalDetail>;
|
|
6270
|
+
|
|
6271
|
+
/**
|
|
6272
|
+
* Runs the site's own real-time pricing engine for one property and a date range
|
|
6273
|
+
* ("YYYY-MM-DD") — rent, fees, tax, total — and returns the exact Book Now checkout URL for
|
|
6274
|
+
* those dates. `available: false` means the site checked and the property is not free for
|
|
6275
|
+
* those dates, an ordinary answer.
|
|
6276
|
+
*/
|
|
6277
|
+
getRentalQuote(propertyId: string, options: { checkin: string; checkout: string }): Promise<GrandwelcomeQuote>;
|
|
6278
|
+
}
|
|
6279
|
+
}
|
|
6280
|
+
|
|
5617
6281
|
declare namespace BowmarkProvider_handypro {
|
|
5618
6282
|
// ── HandyPro — the unit's own declarations, verbatim ──
|
|
5619
6283
|
// HandyPro's OWN shapes — not a capability contract.
|
|
@@ -5670,6 +6334,43 @@ interface HandyproCategorySearch {
|
|
|
5670
6334
|
}
|
|
5671
6335
|
}
|
|
5672
6336
|
|
|
6337
|
+
declare namespace BowmarkProvider_hansons {
|
|
6338
|
+
// ── Hansons — the unit's own declarations, verbatim ──
|
|
6339
|
+
interface HansonsSlot {
|
|
6340
|
+
timeSlotID: number;
|
|
6341
|
+
appointmentDate: string;
|
|
6342
|
+
timeSlot: string;
|
|
6343
|
+
virtual: boolean;
|
|
6344
|
+
}
|
|
6345
|
+
|
|
6346
|
+
interface CheckAvailabilityResult {
|
|
6347
|
+
inServiceArea: boolean;
|
|
6348
|
+
showInHomeFlow: boolean;
|
|
6349
|
+
showVirtualFlow: boolean;
|
|
6350
|
+
message: string;
|
|
6351
|
+
slots: HansonsSlot[];
|
|
6352
|
+
}
|
|
6353
|
+
|
|
6354
|
+
/**
|
|
6355
|
+
* Regional home-exterior remodeler (windows/roofing/siding/gutters/bath). checkAvailability is
|
|
6356
|
+
* live — checks a ZIP against Hansons' real Free Estimate scheduler and returns the actual
|
|
6357
|
+
* bookable at-home/virtual slots. bookEstimate (the final booking submit) is a stub — see its
|
|
6358
|
+
* notImplemented reason.
|
|
6359
|
+
*/
|
|
6360
|
+
interface Unit {
|
|
6361
|
+
/**
|
|
6362
|
+
* Checks a 5-digit US ZIP (`zipcode`, e.g. "48104") against Hansons' real Free Estimate
|
|
6363
|
+
* scheduler and returns the actual open appointment slots for an at-home or virtual
|
|
6364
|
+
* consultation — the same ZIP-gated availability check the site's own scheduler performs
|
|
6365
|
+
* before it will show a single bookable date. Pass `virtual: true`/`false` to filter to one
|
|
6366
|
+
* consultation type; omit it to get both. Returns whether the ZIP is even in Hansons' service
|
|
6367
|
+
* area, whether each consultation type is currently offered, the site's own status message,
|
|
6368
|
+
* and the slot list (date, display time, and the site's own slot id).
|
|
6369
|
+
*/
|
|
6370
|
+
checkAvailability(args: object): Promise<CheckAvailabilityResult>;
|
|
6371
|
+
}
|
|
6372
|
+
}
|
|
6373
|
+
|
|
5673
6374
|
declare namespace BowmarkProvider_harmar {
|
|
5674
6375
|
// ── Harmar Mobility — the unit's own declarations, verbatim ──
|
|
5675
6376
|
interface HarmarVehicleModel {
|
|
@@ -5814,6 +6515,67 @@ interface HauslabsShadeMatch {
|
|
|
5814
6515
|
}
|
|
5815
6516
|
}
|
|
5816
6517
|
|
|
6518
|
+
declare namespace BowmarkProvider_haydenhomes {
|
|
6519
|
+
// ── Hayden Homes — the unit's own declarations, verbatim ──
|
|
6520
|
+
// Hayden Homes' OWN shapes — not a capability contract.
|
|
6521
|
+
|
|
6522
|
+
interface HaydenhomesQuickMoveIn {
|
|
6523
|
+
id: number;
|
|
6524
|
+
planName: string;
|
|
6525
|
+
address: string;
|
|
6526
|
+
city: string;
|
|
6527
|
+
state: string;
|
|
6528
|
+
communityName: string;
|
|
6529
|
+
communityUrl: string;
|
|
6530
|
+
price: number;
|
|
6531
|
+
priceFormatted: string;
|
|
6532
|
+
monthlyPayment: string | null;
|
|
6533
|
+
beds: number | null;
|
|
6534
|
+
baths: number | null;
|
|
6535
|
+
sqft: number | null;
|
|
6536
|
+
stories: number | null;
|
|
6537
|
+
garage: string | null;
|
|
6538
|
+
lot: string | null;
|
|
6539
|
+
status: string; // "available" | "reserved", the site's own value
|
|
6540
|
+
availabilityLabel: string; // e.g. "Move-in Now", "Move-in Fall"
|
|
6541
|
+
availabilityDate: string | null;
|
|
6542
|
+
incentive: string | null;
|
|
6543
|
+
imageUrl: string | null;
|
|
6544
|
+
url: string; // the listing page — the real next step (tour / contact) lives here
|
|
6545
|
+
canScheduleAppointment: boolean;
|
|
6546
|
+
latitude: number | null;
|
|
6547
|
+
longitude: number | null;
|
|
6548
|
+
}
|
|
6549
|
+
|
|
6550
|
+
interface HaydenhomesSearchFilters {
|
|
6551
|
+
state?: string; // two-letter code, e.g. "OR"
|
|
6552
|
+
city?: string; // fuzzy substring match
|
|
6553
|
+
community?: string; // fuzzy substring match
|
|
6554
|
+
minBeds?: number;
|
|
6555
|
+
minBaths?: number;
|
|
6556
|
+
minSqft?: number;
|
|
6557
|
+
minPrice?: number;
|
|
6558
|
+
maxPrice?: number;
|
|
6559
|
+
availableOnly?: boolean; // default true
|
|
6560
|
+
}
|
|
6561
|
+
|
|
6562
|
+
/**
|
|
6563
|
+
* Hayden Homes' live quick move-in inventory search across Oregon, Washington, Idaho and
|
|
6564
|
+
* Montana — filterable by state, city, community, beds/baths/sqft and price, off the search
|
|
6565
|
+
* page's own server-rendered listing rather than a third-party aggregator's stale mirror.
|
|
6566
|
+
*/
|
|
6567
|
+
interface Unit {
|
|
6568
|
+
/**
|
|
6569
|
+
* Runs Hayden Homes' quick move-in search against the site's own live inventory — every home
|
|
6570
|
+
* currently listed across OR/WA/ID/MT, with real address, price, beds/baths/sqft, community
|
|
6571
|
+
* and a listing URL to schedule a tour or contact a sales team. `filters` (all optional):
|
|
6572
|
+
* `state` (e.g. "OR"), `city`, `community`, `minBeds`, `minBaths`, `minSqft`, `minPrice`,
|
|
6573
|
+
* `maxPrice`, `availableOnly` (default true — excludes homes the site has marked reserved).
|
|
6574
|
+
*/
|
|
6575
|
+
searchQuickMoveIns(filters?: HaydenhomesSearchFilters): Promise<HaydenhomesQuickMoveIn[]>;
|
|
6576
|
+
}
|
|
6577
|
+
}
|
|
6578
|
+
|
|
5817
6579
|
declare namespace BowmarkProvider_healthcare_gov {
|
|
5818
6580
|
// ── HealthCare.gov — the unit's own declarations, verbatim ──
|
|
5819
6581
|
interface healthcare_govPlan {
|
|
@@ -8032,6 +8794,64 @@ interface IsllcSearchCommunitiesResult {
|
|
|
8032
8794
|
}
|
|
8033
8795
|
}
|
|
8034
8796
|
|
|
8797
|
+
declare namespace BowmarkProvider_jennikayne {
|
|
8798
|
+
// ── Jenni Kayne — the unit's own declarations, verbatim ──
|
|
8799
|
+
interface GiftCardDenomination {
|
|
8800
|
+
variantId: string;
|
|
8801
|
+
amount: string;
|
|
8802
|
+
available: boolean;
|
|
8803
|
+
}
|
|
8804
|
+
interface GiftCardOptions {
|
|
8805
|
+
productUrl: string;
|
|
8806
|
+
denominations: GiftCardDenomination[];
|
|
8807
|
+
timezones: string[];
|
|
8808
|
+
}
|
|
8809
|
+
interface GiftCardConfig {
|
|
8810
|
+
amount: string;
|
|
8811
|
+
recipientName: string;
|
|
8812
|
+
recipientEmail: string;
|
|
8813
|
+
giftMessage?: string;
|
|
8814
|
+
deliveryDate: string;
|
|
8815
|
+
deliveryTimezone: string;
|
|
8816
|
+
}
|
|
8817
|
+
interface GiftCardLink {
|
|
8818
|
+
amount: string;
|
|
8819
|
+
variantId: string;
|
|
8820
|
+
recipientName: string;
|
|
8821
|
+
recipientEmail: string;
|
|
8822
|
+
giftMessage: string | null;
|
|
8823
|
+
deliveryDate: string;
|
|
8824
|
+
deliveryTimezone: string;
|
|
8825
|
+
available: boolean;
|
|
8826
|
+
cartUrl: string;
|
|
8827
|
+
checkoutUrl: string;
|
|
8828
|
+
deliveryTimeLeftToShopper: true;
|
|
8829
|
+
}
|
|
8830
|
+
|
|
8831
|
+
/**
|
|
8832
|
+
* Jenni Kayne's live gift-card product: read the real denominations and hand the shopper a
|
|
8833
|
+
* checkout link pre-filled with the recipient, message and scheduled delivery date/timezone.
|
|
8834
|
+
*/
|
|
8835
|
+
interface Unit {
|
|
8836
|
+
/**
|
|
8837
|
+
* Reads the live Jenni Kayne digital gift-card product — every denomination from $50 to $1,000
|
|
8838
|
+
* with its real variant id and current stock, plus the exact timezone strings the checkout
|
|
8839
|
+
* form accepts. Call this first to know what buildGiftCardLink will accept.
|
|
8840
|
+
*/
|
|
8841
|
+
getGiftCardOptions(): Promise<GiftCardOptions>;
|
|
8842
|
+
|
|
8843
|
+
/**
|
|
8844
|
+
* Configures a Jenni Kayne digital gift card — amount, recipient name/email, an optional
|
|
8845
|
+
* message, and a scheduled delivery date + timezone — and returns a checkout link with every
|
|
8846
|
+
* one of those fields already filled in, so the shopper only has to pick a delivery TIME and
|
|
8847
|
+
* pay. THROWS on an unknown amount, an invalid email, a malformed date, or a timezone the
|
|
8848
|
+
* store does not offer — call getGiftCardOptions first to see the live choices. Builds the
|
|
8849
|
+
* link only; nothing is purchased or charged here.
|
|
8850
|
+
*/
|
|
8851
|
+
buildGiftCardLink(config: GiftCardConfig): Promise<GiftCardLink>;
|
|
8852
|
+
}
|
|
8853
|
+
}
|
|
8854
|
+
|
|
8035
8855
|
declare namespace BowmarkProvider_joybird {
|
|
8036
8856
|
// ── Joybird — the unit's own declarations, verbatim ──
|
|
8037
8857
|
interface JoybirdConfigurator {
|
|
@@ -8125,6 +8945,75 @@ interface JoybirdPriceResult {
|
|
|
8125
8945
|
}
|
|
8126
8946
|
}
|
|
8127
8947
|
|
|
8948
|
+
declare namespace BowmarkProvider_joycefactorydirect {
|
|
8949
|
+
// ── Joyce Windows, Sunrooms & Baths — the unit's own declarations, verbatim ──
|
|
8950
|
+
interface JoyceCalculatorOption {
|
|
8951
|
+
label: string;
|
|
8952
|
+
answerId: string;
|
|
8953
|
+
}
|
|
8954
|
+
interface JoyceCalculatorQuestion {
|
|
8955
|
+
page: number;
|
|
8956
|
+
componentId: string;
|
|
8957
|
+
prompt: string;
|
|
8958
|
+
kind: "select" | "quantity";
|
|
8959
|
+
options: JoyceCalculatorOption[] | null;
|
|
8960
|
+
}
|
|
8961
|
+
interface JoyceWindowCalculatorOptions {
|
|
8962
|
+
calculatorUrl: string;
|
|
8963
|
+
questions: JoyceCalculatorQuestion[];
|
|
8964
|
+
}
|
|
8965
|
+
|
|
8966
|
+
/**
|
|
8967
|
+
* Reads the live question/option set behind Joyce Windows' own window-cost calculator (an
|
|
8968
|
+
* involve.me embed) with no browser and no interaction.
|
|
8969
|
+
*/
|
|
8970
|
+
interface Unit {
|
|
8971
|
+
/**
|
|
8972
|
+
* Reads the live window-cost calculator's real questions and answer options (styles,
|
|
8973
|
+
* quantities, grade, colors, glass, grids) straight off the page — no interaction needed.
|
|
8974
|
+
*/
|
|
8975
|
+
getWindowCalculatorOptions(): Promise<JoyceWindowCalculatorOptions>;
|
|
8976
|
+
|
|
8977
|
+
/**
|
|
8978
|
+
* Reads the live bath-remodel cost calculator's real questions and answer options straight off
|
|
8979
|
+
* the page — no interaction needed. Same involve.me platform and return shape as
|
|
8980
|
+
* getWindowCalculatorOptions.
|
|
8981
|
+
*/
|
|
8982
|
+
getBathCalculatorOptions(): Promise<JoyceWindowCalculatorOptions>;
|
|
8983
|
+
}
|
|
8984
|
+
}
|
|
8985
|
+
|
|
8986
|
+
declare namespace BowmarkProvider_justinwine {
|
|
8987
|
+
// ── JUSTIN Vineyards & Winery — the unit's own declarations, verbatim ──
|
|
8988
|
+
interface JustinwineClubPriceRange {
|
|
8989
|
+
quantityLabel: string;
|
|
8990
|
+
bottles: number;
|
|
8991
|
+
min: number;
|
|
8992
|
+
max: number;
|
|
8993
|
+
checkoutUrl: string;
|
|
8994
|
+
}
|
|
8995
|
+
|
|
8996
|
+
interface JustinwineClubTier {
|
|
8997
|
+
category: string;
|
|
8998
|
+
categorySlug: string;
|
|
8999
|
+
description: string;
|
|
9000
|
+
priceRanges: JustinwineClubPriceRange[];
|
|
9001
|
+
}
|
|
9002
|
+
|
|
9003
|
+
/**
|
|
9004
|
+
* JUSTIN Vineyards & Winery's Wine Society club — per-shipment price by tier and quantity,
|
|
9005
|
+
* with the exact join handoff URL, off the club page's own embedded data.
|
|
9006
|
+
*/
|
|
9007
|
+
interface Unit {
|
|
9008
|
+
/**
|
|
9009
|
+
* Lists the JUSTIN Wine Society club tiers, each with its per-shipment price range at 4/6/12
|
|
9010
|
+
* bottles and the exact join/checkout URL for that tier+quantity. Pass a category (e.g.
|
|
9011
|
+
* "Isosceles Only") to filter to one tier.
|
|
9012
|
+
*/
|
|
9013
|
+
listClubTiers(category?: string): Promise<JustinwineClubTier[]>;
|
|
9014
|
+
}
|
|
9015
|
+
}
|
|
9016
|
+
|
|
8128
9017
|
declare namespace BowmarkProvider_kayak {
|
|
8129
9018
|
// ── Kayak — the unit's own declarations, verbatim ──
|
|
8130
9019
|
interface KayakQuery {
|
|
@@ -8268,6 +9157,39 @@ interface KayakCar {
|
|
|
8268
9157
|
}
|
|
8269
9158
|
}
|
|
8270
9159
|
|
|
9160
|
+
declare namespace BowmarkProvider_kingsdown {
|
|
9161
|
+
// ── Kingsdown — the unit's own declarations, verbatim ──
|
|
9162
|
+
interface kingsdownBedmatchResult {
|
|
9163
|
+
zoneName: "Gold" | "Green" | "Blue" | "Red";
|
|
9164
|
+
zoneColor: string;
|
|
9165
|
+
scalar: number;
|
|
9166
|
+
findDealerUrl: string;
|
|
9167
|
+
buyUrl: string;
|
|
9168
|
+
}
|
|
9169
|
+
|
|
9170
|
+
/**
|
|
9171
|
+
* Kingsdown's own bedMATCH mattress-fit diagnostic (kingsdown.com/bedmatch/) —
|
|
9172
|
+
* getBedMatchResult runs the real questionnaire and returns the live computed support-color
|
|
9173
|
+
* classification (Gold/Green/Blue/Red) plus find-a-dealer and buy-direct handoff URLs.
|
|
9174
|
+
*/
|
|
9175
|
+
interface Unit {
|
|
9176
|
+
/**
|
|
9177
|
+
* Runs Kingsdown's live bedMATCH diagnostic for one sleeper profile and returns the real
|
|
9178
|
+
* computed support-color classification (`zoneName`: "Gold" | "Green" | "Blue" | "Red", with
|
|
9179
|
+
* the raw fit `scalar` behind it), plus Kingsdown's own `findDealerUrl` and `buyUrl` handoffs.
|
|
9180
|
+
* Pass `{ name, ageBand, gender, position, heightBand, weightBand, pantBand, shirtBand,
|
|
9181
|
+
* painAreas? }` — every numeric field is the SITE'S OWN bucket code (its radio-button values),
|
|
9182
|
+
* not a raw age/height/weight, because bedMATCH itself only ever rates a band. `ageBand` ∈
|
|
9183
|
+
* {20, 33, 48, 63, 85}; `gender` ∈ {"F","M","N"}; `position` ∈ {1 Back, 2 Side, 3 Stomach};
|
|
9184
|
+
* `heightBand` ∈ {50, 57.5, 63.5, 69, 75.5, 78}; `weightBand`/`pantBand`/`shirtBand` are small
|
|
9185
|
+
* integer bucket codes (1-8 / 1-6 / 1-6). Read-only and account-free — the site's own quiz
|
|
9186
|
+
* asks for nothing but this questionnaire, and this function submits nothing beyond it (no
|
|
9187
|
+
* email, no purchase).
|
|
9188
|
+
*/
|
|
9189
|
+
getBedMatchResult(profile: object): Promise<kingsdownBedmatchResult>;
|
|
9190
|
+
}
|
|
9191
|
+
}
|
|
9192
|
+
|
|
8271
9193
|
declare namespace BowmarkProvider_kitchentuneup {
|
|
8272
9194
|
// ── Kitchen Tune-Up — the unit's own declarations, verbatim ──
|
|
8273
9195
|
interface KitchentuneupCabinetStyle {
|
|
@@ -8702,9 +9624,9 @@ interface LiquiddeathCart {
|
|
|
8702
9624
|
interface LiquiddeathLiveCartLine {
|
|
8703
9625
|
lineId: string;
|
|
8704
9626
|
variantId: string;
|
|
8705
|
-
|
|
8706
|
-
productTitle: string;
|
|
9627
|
+
title: string;
|
|
8707
9628
|
quantity: number;
|
|
9629
|
+
unitPrice: string;
|
|
8708
9630
|
lineTotal: string;
|
|
8709
9631
|
}
|
|
8710
9632
|
interface LiquiddeathLiveCart {
|
|
@@ -8715,9 +9637,7 @@ interface LiquiddeathLiveCart {
|
|
|
8715
9637
|
total: string;
|
|
8716
9638
|
currency: string;
|
|
8717
9639
|
checkoutUrl: string;
|
|
8718
|
-
|
|
8719
|
-
createdAt: string | null;
|
|
8720
|
-
updatedAt: string | null;
|
|
9640
|
+
expiresAt: string | null;
|
|
8721
9641
|
}
|
|
8722
9642
|
|
|
8723
9643
|
/**
|
|
@@ -8753,15 +9673,19 @@ interface LiquiddeathLiveCart {
|
|
|
8753
9673
|
addToCart(items: LiquiddeathCartItem[]): Promise<LiquiddeathCart>;
|
|
8754
9674
|
|
|
8755
9675
|
/**
|
|
8756
|
-
* Reads a cart the shopper already has, by its id — line items, quantities, per-
|
|
8757
|
-
*
|
|
8758
|
-
*
|
|
8759
|
-
* (liquiddeath.com/cart/c/<token>?key=<key>), NOT the
|
|
8760
|
-
* — those are a separate Ajax id space this endpoint
|
|
8761
|
-
* is no way to list or search carts, so
|
|
8762
|
-
*
|
|
8763
|
-
*
|
|
8764
|
-
*
|
|
9676
|
+
* Reads a cart the shopper already has, by its id — line items, quantities, per-unit and
|
|
9677
|
+
* per-line prices, order subtotal and total, the cart's currency and expiry, and the real
|
|
9678
|
+
* checkout URL to hand back. The id is a bearer credential the SHOPPER holds, and it is the
|
|
9679
|
+
* one their cart or checkout LINK carries (liquiddeath.com/cart/c/<token>?key=<key>), NOT the
|
|
9680
|
+
* store's `cart` cookie or /cart.js token — those are a separate Ajax id space this endpoint
|
|
9681
|
+
* answers 'The requested cart does not exist' for. There is no way to list or search carts, so
|
|
9682
|
+
* a caller without an id cannot get one. THE WHOLE id IS REQUIRED, `?key=` included: the store
|
|
9683
|
+
* checks the key's value, so a bare token comes back as a cart that does not exist rather than
|
|
9684
|
+
* as a missing credential, and this refuses it here instead. THROWS when the cart does not
|
|
9685
|
+
* exist or has expired — Shopify drops an unused cart within 30 days and deletes it at
|
|
9686
|
+
* checkout — because an empty cart and a dead link are opposite answers. Each line carries the
|
|
9687
|
+
* store's own joined product-and-variant `title` ("Death Western Hat - Cream/Green"); this
|
|
9688
|
+
* door publishes no separate product title. Does not return shipping options or discounts:
|
|
8765
9689
|
* both require setting an address on the cart, which is a write this provider does not
|
|
8766
9690
|
* perform.
|
|
8767
9691
|
*/
|
|
@@ -8849,6 +9773,76 @@ interface FindLocalDealerResult {
|
|
|
8849
9773
|
}
|
|
8850
9774
|
}
|
|
8851
9775
|
|
|
9776
|
+
declare namespace BowmarkProvider_lovelybride {
|
|
9777
|
+
// ── Lovely Bride — the unit's own declarations, verbatim ──
|
|
9778
|
+
interface LovelybrideStore {
|
|
9779
|
+
slug: string; // e.g. "houston" — what the other two functions take
|
|
9780
|
+
name: string; // e.g. "Houston"
|
|
9781
|
+
url: string;
|
|
9782
|
+
}
|
|
9783
|
+
interface LovelybrideAppointmentType {
|
|
9784
|
+
id: number; // e.g. 66220 — what getAvailableSlots takes
|
|
9785
|
+
description: string; // e.g. "1. Lovely Bridal Gown Appointment - $50 Fee"
|
|
9786
|
+
durationMinutes: number; // e.g. 90
|
|
9787
|
+
priceUsd: number | null;
|
|
9788
|
+
priceFormatted: string | null; // e.g. "$50.00"
|
|
9789
|
+
requiresPaymentInfo: boolean;
|
|
9790
|
+
}
|
|
9791
|
+
interface LovelybrideStoreInfo {
|
|
9792
|
+
name: string;
|
|
9793
|
+
emailAddress: string | null;
|
|
9794
|
+
phoneNumber: string | null;
|
|
9795
|
+
address: string | null;
|
|
9796
|
+
schedulerUrl: string; // the BridalLive scheduler page — the write handoff
|
|
9797
|
+
}
|
|
9798
|
+
interface LovelybrideTimeSlot {
|
|
9799
|
+
startDateTime: string; // ISO 8601
|
|
9800
|
+
endDateTime: string; // ISO 8601
|
|
9801
|
+
startDateTimeForView: string; // e.g. "10:00AM", store-local time
|
|
9802
|
+
location: string | null; // e.g. "Room 2"
|
|
9803
|
+
}
|
|
9804
|
+
interface LovelybrideAvailability {
|
|
9805
|
+
storeSlug: string;
|
|
9806
|
+
date: string; // echoes the requested "YYYY-MM-DD"
|
|
9807
|
+
slots: LovelybrideTimeSlot[]; // [] is a genuine "fully booked" answer
|
|
9808
|
+
}
|
|
9809
|
+
|
|
9810
|
+
/**
|
|
9811
|
+
* Reads Lovely Bride's real per-store BridalLive appointment scheduler — every store, a
|
|
9812
|
+
* store's real bookable appointment types and prices, and real open time slots — straight off
|
|
9813
|
+
* lovelybride.com and app.bridallive.com's own private JSON API, no key, no browser.
|
|
9814
|
+
*/
|
|
9815
|
+
interface Unit {
|
|
9816
|
+
/**
|
|
9817
|
+
* Lists every Lovely Bride store the site's own store locator links — 19 across the US and one
|
|
9818
|
+
* in London, each with the slug the other two functions take. Takes nothing. The entry point:
|
|
9819
|
+
* a caller asking 'where can I book' has nowhere else to start.
|
|
9820
|
+
*/
|
|
9821
|
+
listStores(): Promise<LovelybrideStore[]>;
|
|
9822
|
+
|
|
9823
|
+
/**
|
|
9824
|
+
* Reads one store's real, currently-bookable BridalLive appointment types — each with its real
|
|
9825
|
+
* price and duration exactly as the store's own scheduler quotes it — plus the store's contact
|
|
9826
|
+
* info and the live scheduler URL to hand off to. Takes the slug listStores returns. THROWS
|
|
9827
|
+
* LovelybrideNoOnlineBooking (not caller-fixable — no slug fixes it) when the store's own page
|
|
9828
|
+
* carries no online-booking link at all, which is a real answer for some stores (Charlotte,
|
|
9829
|
+
* measured 2026-08-16), not a parse failure.
|
|
9830
|
+
*/
|
|
9831
|
+
getStoreAppointmentTypes(storeSlug: string): Promise<{ store: LovelybrideStoreInfo; appointmentTypes: LovelybrideAppointmentType[] }>;
|
|
9832
|
+
|
|
9833
|
+
/**
|
|
9834
|
+
* Reads the real open appointment slots for one store, one appointment type, and one date
|
|
9835
|
+
* ("YYYY-MM-DD") — the exact slots a shopper would see on the store's own scheduler page.
|
|
9836
|
+
* Takes the appointmentTypeId getStoreAppointmentTypes returns. Returns the requested date
|
|
9837
|
+
* alongside the slots; an empty `slots` array is a genuine answer (the date is fully booked),
|
|
9838
|
+
* never an error. This is a READ only: it does not hold or submit anything — a shopper follows
|
|
9839
|
+
* the store's schedulerUrl (from getStoreAppointmentTypes) to actually book the slot this
|
|
9840
|
+
* function found.
|
|
9841
|
+
*/
|
|
9842
|
+
getAvailableSlots(storeSlug: string, appointmentTypeId: number, date: string): Promise<LovelybrideAvailability>;
|
|
9843
|
+
}
|
|
9844
|
+
}
|
|
9845
|
+
|
|
8852
9846
|
declare namespace BowmarkProvider_lufthansa {
|
|
8853
9847
|
// ── Lufthansa — the unit's own declarations, verbatim ──
|
|
8854
9848
|
interface LufthansaFlightLeg {
|
|
@@ -9169,8 +10163,16 @@ interface LululemonRow {
|
|
|
9169
10163
|
interface LululemonSearch {
|
|
9170
10164
|
query: string;
|
|
9171
10165
|
products: LululemonRow[];
|
|
9172
|
-
/** How many entries matched before the row cap
|
|
10166
|
+
/** How many entries matched IN TOTAL, before the row cap — the size of the
|
|
10167
|
+
* thing you are paging through, not of this page. */
|
|
9173
10168
|
matched: number;
|
|
10169
|
+
/** Where in the ranked match list this page started. */
|
|
10170
|
+
offset: number;
|
|
10171
|
+
/** The offset that reads the NEXT page, or null at the end of the list. Pass
|
|
10172
|
+
* it back verbatim — it is NOT offset + products.length, because a row that
|
|
10173
|
+
* was reached for and lost is dropped from products and named in warnings, so
|
|
10174
|
+
* a page of 24 can hand back 22 rows. */
|
|
10175
|
+
nextOffset: number | null;
|
|
9174
10176
|
warnings: string[];
|
|
9175
10177
|
}
|
|
9176
10178
|
interface LululemonSimilarProducts {
|
|
@@ -9191,10 +10193,16 @@ interface LululemonSimilarProducts {
|
|
|
9191
10193
|
* first — id, title, URL, price range, how many colours the style comes in, and whether it is
|
|
9192
10194
|
* in stock. Ranks over the site's own published product index, then reads the price and colour
|
|
9193
10195
|
* count per row. A match the pricing catalogue does not carry still comes back, with `priced:
|
|
9194
|
-
* false` and null prices
|
|
9195
|
-
*
|
|
10196
|
+
* false` and null prices. PAGED: `matched` is the total match count and `nextOffset` is the
|
|
10197
|
+
* offset that reads the next page, or null at the end — pass it back verbatim rather than
|
|
10198
|
+
* adding `products.length`, since a lost row is dropped from `products` and named in
|
|
10199
|
+
* `warnings`. `limit` is rows per page (default 8, max 24, and each row costs one third-party
|
|
10200
|
+
* read), `offset` where the page starts (default 0). An offset past the end is an empty page,
|
|
10201
|
+
* not an error. A category is just a query — the site's own URL segments (`womens-leggings`,
|
|
10202
|
+
* `men-joggers`) are ranked over, so `{ query: "womens leggings", offset }` walks that
|
|
10203
|
+
* category.
|
|
9196
10204
|
*/
|
|
9197
|
-
search(query: { query: string; limit?: number }): Promise<LululemonSearch>;
|
|
10205
|
+
search(query: { query: string; limit?: number; offset?: number }): Promise<LululemonSearch>;
|
|
9198
10206
|
|
|
9199
10207
|
/**
|
|
9200
10208
|
* Reads one product's full configurator the way its product page presents it — every colourway
|
|
@@ -10691,6 +11699,89 @@ interface KayakCar {
|
|
|
10691
11699
|
}
|
|
10692
11700
|
}
|
|
10693
11701
|
|
|
11702
|
+
declare namespace BowmarkProvider_mossyoak {
|
|
11703
|
+
// ── Mossy Oak — the unit's own declarations, verbatim ──
|
|
11704
|
+
interface MossyoakVariant {
|
|
11705
|
+
/** Shopify's numeric variant id as a string. */
|
|
11706
|
+
id: string;
|
|
11707
|
+
/** The variant's own label, e.g. "Full Foliage / M/L". */
|
|
11708
|
+
title: string;
|
|
11709
|
+
/** String verbatim from the storefront — "149.99" (dollars) on /products.json, "14999" (cents) on /products/<h>.js. */
|
|
11710
|
+
price: string;
|
|
11711
|
+
/** Same scale as price. Null when the variant is not on sale. */
|
|
11712
|
+
compareAtPrice: string | null;
|
|
11713
|
+
/** The store's own SKU. Null on a variant without one. */
|
|
11714
|
+
sku: string | null;
|
|
11715
|
+
/** Whether the variant is purchasable right now. */
|
|
11716
|
+
available: boolean;
|
|
11717
|
+
/** e.g. ["Full Foliage", "M/L"] — camo pattern + combined size. */
|
|
11718
|
+
options: string[];
|
|
11719
|
+
}
|
|
11720
|
+
interface MossyoakProduct {
|
|
11721
|
+
/** The handle is the only stable identifier across the catalogue. */
|
|
11722
|
+
handle: string;
|
|
11723
|
+
title: string;
|
|
11724
|
+
vendor: string;
|
|
11725
|
+
productType: string;
|
|
11726
|
+
url: string;
|
|
11727
|
+
descriptionHtml: string | null;
|
|
11728
|
+
optionNames: string[];
|
|
11729
|
+
variants: MossyoakVariant[];
|
|
11730
|
+
/** Same scale as variants — see MossyoakVariant.price. */
|
|
11731
|
+
priceRange: { min: string; max: string } | null;
|
|
11732
|
+
/** True if ANY variant is purchasable. */
|
|
11733
|
+
inStock: boolean;
|
|
11734
|
+
tags: string[];
|
|
11735
|
+
/** Mossy Oak's own images, in the order the storefront publishes them. */
|
|
11736
|
+
images: string[];
|
|
11737
|
+
}
|
|
11738
|
+
interface MossyoakCatalogue {
|
|
11739
|
+
/** All matching products, in-stock first, then by handle. */
|
|
11740
|
+
products: MossyoakProduct[];
|
|
11741
|
+
/** What the filter DROPPED, in the same register the rest of the library uses. */
|
|
11742
|
+
warnings: string[];
|
|
11743
|
+
}
|
|
11744
|
+
interface MossyoakCheckoutLink {
|
|
11745
|
+
/** Shopify's own cart-permalink URL — a GET that adds the line item and redirects into the cart. */
|
|
11746
|
+
url: string;
|
|
11747
|
+
/** The exact variant the link resolved to, read live off the storefront. */
|
|
11748
|
+
variant: MossyoakVariant;
|
|
11749
|
+
/** The product the variant belongs to. */
|
|
11750
|
+
product: MossyoakProduct;
|
|
11751
|
+
}
|
|
11752
|
+
|
|
11753
|
+
/**
|
|
11754
|
+
* Mossy Oak camo-apparel and gear catalogue — every product, its camo-pattern and size
|
|
11755
|
+
* variants, real prices and stock — read off the live Shopify storefront, plus a
|
|
11756
|
+
* live-validated checkout handoff link.
|
|
11757
|
+
*/
|
|
11758
|
+
interface Unit {
|
|
11759
|
+
/**
|
|
11760
|
+
* Reads the live Mossy Oak catalogue as the storefront publishes it — every product, its
|
|
11761
|
+
* handle, title, vendor, description, tags, images and the per-variant price the storefront is
|
|
11762
|
+
* quoting right now. Returns [] on a transport failure. The catalog page is the line and the
|
|
11763
|
+
* parse is the unit of work.
|
|
11764
|
+
*/
|
|
11765
|
+
listMossyoakProducts(opts?: { limit?: number }): Promise<MossyoakProduct[]>;
|
|
11766
|
+
|
|
11767
|
+
/**
|
|
11768
|
+
* Reads one product by its handle — every camo-pattern/size variant, its exact price and
|
|
11769
|
+
* whether that specific variant is purchasable right now. Takes the handle
|
|
11770
|
+
* listMossyoakProducts returns. THROWS on an unknown handle (the store answers a real 404).
|
|
11771
|
+
*/
|
|
11772
|
+
getMossyoakProduct(handle: string): Promise<MossyoakProduct>;
|
|
11773
|
+
|
|
11774
|
+
/**
|
|
11775
|
+
* Resolves a product handle + a variant match (either the exact variant title like "Full
|
|
11776
|
+
* Foliage / M/L", or a substring of it) to a real Shopify cart-permalink URL, validated live
|
|
11777
|
+
* against the storefront. THROWS if the handle is unknown, if no variant matches, if the match
|
|
11778
|
+
* is ambiguous (matches more than one variant), or if the matched variant is not currently
|
|
11779
|
+
* available — the error names the candidate or in-stock options so the caller can retry.
|
|
11780
|
+
*/
|
|
11781
|
+
getMossyoakCheckoutLink(handle: string, variantTitleOrOptions: string, opts?: { quantity?: number }): Promise<MossyoakCheckoutLink>;
|
|
11782
|
+
}
|
|
11783
|
+
}
|
|
11784
|
+
|
|
10694
11785
|
declare namespace BowmarkProvider_naic {
|
|
10695
11786
|
// ── NAIC — the unit's own declarations, verbatim ──
|
|
10696
11787
|
interface naicCompanyQuery {
|
|
@@ -11159,6 +12250,56 @@ interface ottoSearchQuery {
|
|
|
11159
12250
|
}
|
|
11160
12251
|
}
|
|
11161
12252
|
|
|
12253
|
+
declare namespace BowmarkProvider_outdoorresearch {
|
|
12254
|
+
// ── Outdoor Research — the unit's own declarations, verbatim ──
|
|
12255
|
+
interface OutdoorResearchWarrantyPolicy {
|
|
12256
|
+
teamId: string;
|
|
12257
|
+
teamName: string; // "Outdoor Research"
|
|
12258
|
+
excludedTags: string[]; // e.g. ["Non-OR","warehouse_sale","POS_only","Nikwax"]
|
|
12259
|
+
thirdPartyPurchasesAccepted: boolean;
|
|
12260
|
+
purchaseLocations: string[]; // e.g. ["www.outdoorresearch.com","Other"]
|
|
12261
|
+
replacesFromFullCatalogWhenInStock: boolean;
|
|
12262
|
+
replacesFromFullCatalogWhenOutOfStock: boolean;
|
|
12263
|
+
receiptRequiredForThirdParty: boolean;
|
|
12264
|
+
productPhotoRequiredForThirdParty: boolean;
|
|
12265
|
+
supportEmail: string | null;
|
|
12266
|
+
notFoundMessage: string | null;
|
|
12267
|
+
expiredMessage: string | null;
|
|
12268
|
+
}
|
|
12269
|
+
interface OutdoorResearchClaimEligibility {
|
|
12270
|
+
eligible: boolean;
|
|
12271
|
+
status: "not_found" | "blocked" | "expired" | "eligible";
|
|
12272
|
+
message: string; // the site's own wording for this outcome
|
|
12273
|
+
continueUrl: string | null; // set only when eligible: true
|
|
12274
|
+
}
|
|
12275
|
+
|
|
12276
|
+
/**
|
|
12277
|
+
* Reads Outdoor Research's Infinite Guarantee warranty program straight from the ReturnLogic
|
|
12278
|
+
* claim portal's own API — the real program rules, and whether a given order/email can open a
|
|
12279
|
+
* claim right now — no key, no browser.
|
|
12280
|
+
*/
|
|
12281
|
+
interface Unit {
|
|
12282
|
+
/**
|
|
12283
|
+
* Reads Outdoor Research's Infinite Guarantee program config straight from the ReturnLogic
|
|
12284
|
+
* claim portal — exclusion tags, in-stock/out-of-stock replacement scenarios, third-party
|
|
12285
|
+
* purchase acceptance and its named purchase locations, receipt/photo requirements, and the
|
|
12286
|
+
* site's own not-found/expired copy. Takes nothing. THROWS rather than returning a placeholder
|
|
12287
|
+
* when the settings endpoint answers without teamId/teamName.
|
|
12288
|
+
*/
|
|
12289
|
+
getWarrantyPolicy(): Promise<OutdoorResearchWarrantyPolicy>;
|
|
12290
|
+
|
|
12291
|
+
/**
|
|
12292
|
+
* Starts an Infinite Guarantee claim by order number + email — the same lookup 'File a
|
|
12293
|
+
* Warranty Claim' performs. Returns `eligible: false` with a `status` of
|
|
12294
|
+
* not_found/blocked/expired and the site's own message when the pair does not qualify (a real,
|
|
12295
|
+
* expected answer, not an error) — never throws for those. On `eligible: true`, `continueUrl`
|
|
12296
|
+
* is where the customer would pick items and see per-item eligibility. THROWS only on a
|
|
12297
|
+
* transport failure or an unrecognized response.
|
|
12298
|
+
*/
|
|
12299
|
+
checkClaimEligibility(orderNumber: string, email: string): Promise<OutdoorResearchClaimEligibility>;
|
|
12300
|
+
}
|
|
12301
|
+
}
|
|
12302
|
+
|
|
11162
12303
|
declare namespace BowmarkProvider_paypal {
|
|
11163
12304
|
// ── PayPal — the unit's own declarations, verbatim ──
|
|
11164
12305
|
interface PaypalEstimateFeeArgs {
|
|
@@ -12636,6 +13777,67 @@ interface RedditThread {
|
|
|
12636
13777
|
}
|
|
12637
13778
|
}
|
|
12638
13779
|
|
|
13780
|
+
declare namespace BowmarkProvider_rishitea {
|
|
13781
|
+
// ── Rishi Tea & Botanicals — the unit's own declarations, verbatim ──
|
|
13782
|
+
interface TeaFinderQuestion {
|
|
13783
|
+
id: string;
|
|
13784
|
+
profileQuestionId: string;
|
|
13785
|
+
text: string;
|
|
13786
|
+
selectionType: "single" | "multi";
|
|
13787
|
+
options: string[];
|
|
13788
|
+
minSelections?: number;
|
|
13789
|
+
maxSelections?: number;
|
|
13790
|
+
}
|
|
13791
|
+
interface TeaFinderQuiz {
|
|
13792
|
+
quizId: string;
|
|
13793
|
+
channelQuizId: string;
|
|
13794
|
+
questions: TeaFinderQuestion[];
|
|
13795
|
+
}
|
|
13796
|
+
interface TeaFinderAnswerInput {
|
|
13797
|
+
questionId: string; // a TeaFinderQuestion.id
|
|
13798
|
+
answer: string | string[]; // string for selectionType "single", string[] for "multi"
|
|
13799
|
+
}
|
|
13800
|
+
interface TeaFinderProduct {
|
|
13801
|
+
name: string;
|
|
13802
|
+
url: string;
|
|
13803
|
+
description: string;
|
|
13804
|
+
imageUrl: string;
|
|
13805
|
+
averageRating: number | null;
|
|
13806
|
+
approvedReviewsCount: number;
|
|
13807
|
+
price: number | null;
|
|
13808
|
+
currencyCode: string | null;
|
|
13809
|
+
}
|
|
13810
|
+
interface TeaFinderResult {
|
|
13811
|
+
quizResponseId: string;
|
|
13812
|
+
title: string;
|
|
13813
|
+
subtitle: string | null;
|
|
13814
|
+
products: TeaFinderProduct[];
|
|
13815
|
+
runnerUpProducts: TeaFinderProduct[];
|
|
13816
|
+
}
|
|
13817
|
+
|
|
13818
|
+
/**
|
|
13819
|
+
* Rishi Tea's own "Tea Finder" quiz (Okendo Quizzes) — reads the real question set and submits
|
|
13820
|
+
* real answers to get back the site's own personalized tea recommendation.
|
|
13821
|
+
*/
|
|
13822
|
+
interface Unit {
|
|
13823
|
+
/**
|
|
13824
|
+
* Reads the live Tea Finder quiz's real question set straight from Okendo's quiz API — every
|
|
13825
|
+
* question's text, whether it takes one answer or several, and its exact option strings. Call
|
|
13826
|
+
* this first: `matchTeaFinderQuiz` needs the caller's answers keyed on each question's own
|
|
13827
|
+
* `id`.
|
|
13828
|
+
*/
|
|
13829
|
+
getTeaFinderQuiz(): Promise<TeaFinderQuiz>;
|
|
13830
|
+
|
|
13831
|
+
/**
|
|
13832
|
+
* Submits a full set of answers (one per question `getTeaFinderQuiz` returned) to Okendo's
|
|
13833
|
+
* quiz engine and returns the SAME personalized recommendation the live widget shows — a
|
|
13834
|
+
* title/subtitle and the real recommended products (name, buy link, description, rating,
|
|
13835
|
+
* price) pulled from Rishi's actual catalog, plus a runner-up list.
|
|
13836
|
+
*/
|
|
13837
|
+
matchTeaFinderQuiz(quiz: TeaFinderQuiz, answers: TeaFinderAnswerInput[]): Promise<TeaFinderResult>;
|
|
13838
|
+
}
|
|
13839
|
+
}
|
|
13840
|
+
|
|
12639
13841
|
declare namespace BowmarkProvider_ritani {
|
|
12640
13842
|
// ── Ritani — the unit's own declarations, verbatim ──
|
|
12641
13843
|
// Ritani's OWN shapes — not a capability contract.
|
|
@@ -12705,6 +13907,109 @@ interface RitaniPriceResult {
|
|
|
12705
13907
|
}
|
|
12706
13908
|
}
|
|
12707
13909
|
|
|
13910
|
+
declare namespace BowmarkProvider_roofmaxx {
|
|
13911
|
+
// ── Roof Maxx — the unit's own declarations, verbatim ──
|
|
13912
|
+
interface RoofmaxxCalculatorSettings {
|
|
13913
|
+
title: string;
|
|
13914
|
+
description: string;
|
|
13915
|
+
}
|
|
13916
|
+
|
|
13917
|
+
interface RoofmaxxCostEstimateArgs {
|
|
13918
|
+
squareFootage: number;
|
|
13919
|
+
region: "new-england" | "middle-atlantic" | "east-north-central" | "west-north-central" |
|
|
13920
|
+
"south-atlantic" | "east-south-central" | "west-south-central" | "mountain" | "pacific";
|
|
13921
|
+
roofType: "asphalt" | "metal" | "clay" | "wood";
|
|
13922
|
+
roofSlope: "walkable" | "semiWalkable" | "nonWalkable";
|
|
13923
|
+
numOfLevels: "1" | "2" | "3";
|
|
13924
|
+
garageType: "nogarage" | "1car" | "2car";
|
|
13925
|
+
}
|
|
13926
|
+
|
|
13927
|
+
interface RoofmaxxCostEstimate {
|
|
13928
|
+
low: number;
|
|
13929
|
+
mid: number;
|
|
13930
|
+
high: number;
|
|
13931
|
+
}
|
|
13932
|
+
|
|
13933
|
+
/**
|
|
13934
|
+
* Roof Maxx's own Roof Replacement Cost Calculator (roofmaxx.com/learning-hub) — given a
|
|
13935
|
+
* home's size, location and roof details, returns the site's real server-computed low/mid/high
|
|
13936
|
+
* full-replacement-cost estimate.
|
|
13937
|
+
*/
|
|
13938
|
+
interface Unit {
|
|
13939
|
+
/** The Roof Replacement Cost Calculator's own admin-configured title and description. */
|
|
13940
|
+
getCalculatorSettings(): Promise<RoofmaxxCalculatorSettings>;
|
|
13941
|
+
|
|
13942
|
+
/**
|
|
13943
|
+
* Runs the real calculator: given square footage, region, roof type, roof slope, garage size
|
|
13944
|
+
* and building levels, returns Roof Maxx's own server-computed low/mid/high
|
|
13945
|
+
* full-replacement-cost tiers.
|
|
13946
|
+
*/
|
|
13947
|
+
estimateRoofReplacementCost(arg: RoofmaxxCostEstimateArgs): Promise<RoofmaxxCostEstimate>;
|
|
13948
|
+
}
|
|
13949
|
+
}
|
|
13950
|
+
|
|
13951
|
+
declare namespace BowmarkProvider_saltandstone {
|
|
13952
|
+
// ── Salt & Stone — the unit's own declarations, verbatim ──
|
|
13953
|
+
// Salt & Stone's OWN shapes — not a capability contract.
|
|
13954
|
+
|
|
13955
|
+
interface ScentFamily {
|
|
13956
|
+
handle: string;
|
|
13957
|
+
name: string; // e.g. "Santal & Vetiver"
|
|
13958
|
+
description: string; // the site's own mood copy
|
|
13959
|
+
notes: { top: string[]; heart: string[]; base: string[] }; // real fragrance notes
|
|
13960
|
+
url: string;
|
|
13961
|
+
}
|
|
13962
|
+
|
|
13963
|
+
interface ScentMatch {
|
|
13964
|
+
handle: string;
|
|
13965
|
+
name: string;
|
|
13966
|
+
score: number; // 0-1 — how much of the caller's preference matched this family's real notes/copy
|
|
13967
|
+
matchedTerms: string[]; // which of the caller's own words matched, and why
|
|
13968
|
+
url: string;
|
|
13969
|
+
}
|
|
13970
|
+
|
|
13971
|
+
interface ScentProduct {
|
|
13972
|
+
handle: string; // "body-wash" | "body-mist" | "body-lotion" | "natural-deodorant" | "hand-cream" | "candle"
|
|
13973
|
+
title: string;
|
|
13974
|
+
productType: string;
|
|
13975
|
+
variantId: string;
|
|
13976
|
+
variantTitle: string;
|
|
13977
|
+
price: number; // dollars, real Shopify variant price
|
|
13978
|
+
compareAtPrice: number | null;
|
|
13979
|
+
available: boolean; // real live stock flag
|
|
13980
|
+
url: string; // real product page, this exact variant preselected
|
|
13981
|
+
}
|
|
13982
|
+
|
|
13983
|
+
/**
|
|
13984
|
+
* Salt & Stone's own Scent Quiz, reimplemented over its real six named scent families: list
|
|
13985
|
+
* every family's real fragrance notes, compute a real ranked match against a free-text
|
|
13986
|
+
* preference, and shop the real core products (body wash, mist, lotion, deodorant, hand cream,
|
|
13987
|
+
* candle) in the matched scent with real price and availability.
|
|
13988
|
+
*/
|
|
13989
|
+
interface Unit {
|
|
13990
|
+
/**
|
|
13991
|
+
* Lists Salt & Stone's real six named scent families, each with its own real top/heart/base
|
|
13992
|
+
* fragrance notes and mood description, read off the site's own collection pages.
|
|
13993
|
+
*/
|
|
13994
|
+
listScentFamilies(): Promise<ScentFamily[]>;
|
|
13995
|
+
|
|
13996
|
+
/**
|
|
13997
|
+
* Salt & Stone's own Scent Quiz, reimplemented: computes a real ranked match across all six
|
|
13998
|
+
* scent families by scoring the preference's terms against each family's own published
|
|
13999
|
+
* fragrance notes and description.
|
|
14000
|
+
*/
|
|
14001
|
+
matchScent(preferences: string): Promise<ScentMatch[]>;
|
|
14002
|
+
|
|
14003
|
+
/**
|
|
14004
|
+
* Lists the real core products (body wash, body mist, body lotion, deodorant, hand cream,
|
|
14005
|
+
* candle) available in one named scent family, with each one's real price, availability and
|
|
14006
|
+
* product page. THROWS on an unknown family name, naming listScentFamilies() as the way to
|
|
14007
|
+
* find current ones.
|
|
14008
|
+
*/
|
|
14009
|
+
getScentProducts(familyName: string): Promise<ScentProduct[]>;
|
|
14010
|
+
}
|
|
14011
|
+
}
|
|
14012
|
+
|
|
12708
14013
|
declare namespace BowmarkProvider_samsclub {
|
|
12709
14014
|
// ── Sam's Club — the unit's own declarations, verbatim ──
|
|
12710
14015
|
interface SamsclubInstantSavingsItem {
|
|
@@ -12897,6 +14202,50 @@ interface SamsclubMembershipPlan {
|
|
|
12897
14202
|
}
|
|
12898
14203
|
}
|
|
12899
14204
|
|
|
14205
|
+
declare namespace BowmarkProvider_seakeeper {
|
|
14206
|
+
// ── Seakeeper — the unit's own declarations, verbatim ──
|
|
14207
|
+
interface SeakeeperDealer {
|
|
14208
|
+
name: string;
|
|
14209
|
+
address: string;
|
|
14210
|
+
contactName: string;
|
|
14211
|
+
phone: string;
|
|
14212
|
+
email: string;
|
|
14213
|
+
website: string;
|
|
14214
|
+
latitude: number;
|
|
14215
|
+
longitude: number;
|
|
14216
|
+
tier: string;
|
|
14217
|
+
tierLabel: string;
|
|
14218
|
+
}
|
|
14219
|
+
interface SeakeeperNearbyDealer extends SeakeeperDealer {
|
|
14220
|
+
distanceMiles: number;
|
|
14221
|
+
}
|
|
14222
|
+
interface SeakeeperNearestDealersResult {
|
|
14223
|
+
zip: string;
|
|
14224
|
+
dealers: SeakeeperNearbyDealer[];
|
|
14225
|
+
}
|
|
14226
|
+
|
|
14227
|
+
/**
|
|
14228
|
+
* Reads Seakeeper's own real-time Dealer / Elite Dealer Locator directly (the same admin-ajax
|
|
14229
|
+
* endpoint the site's map runs) — every real gyro-stabilizer dealer worldwide, or the nearest
|
|
14230
|
+
* ones to a US zip ranked by distance with each dealer's real tier (Elite Dealer / Dealer /
|
|
14231
|
+
* Master Technician).
|
|
14232
|
+
*/
|
|
14233
|
+
interface Unit {
|
|
14234
|
+
/**
|
|
14235
|
+
* Every real Seakeeper dealer worldwide (name, address, contact, coordinates, tier), read
|
|
14236
|
+
* straight from the locator's own live data endpoint.
|
|
14237
|
+
*/
|
|
14238
|
+
listAllDealers(): Promise<SeakeeperDealer[]>;
|
|
14239
|
+
|
|
14240
|
+
/**
|
|
14241
|
+
* Ranks every real Seakeeper dealer by distance from a US zip and returns the nearest `limit`
|
|
14242
|
+
* (default 20, matching the site's own displayed count), each with its real tier and how far
|
|
14243
|
+
* it is.
|
|
14244
|
+
*/
|
|
14245
|
+
findNearestDealers(zip: string, limit?: number): Promise<SeakeeperNearestDealersResult>;
|
|
14246
|
+
}
|
|
14247
|
+
}
|
|
14248
|
+
|
|
12900
14249
|
declare namespace BowmarkProvider_sears {
|
|
12901
14250
|
// ── Sears — the unit's own declarations, verbatim ──
|
|
12902
14251
|
interface SearsSearchPrice {
|
|
@@ -13792,6 +15141,52 @@ interface SunHomeSaunasCartResult {
|
|
|
13792
15141
|
}
|
|
13793
15142
|
}
|
|
13794
15143
|
|
|
15144
|
+
declare namespace BowmarkProvider_tamarackidaho {
|
|
15145
|
+
// ── Tamarack Resort — the unit's own declarations, verbatim ──
|
|
15146
|
+
interface tamarackidahoSearchArgs {
|
|
15147
|
+
arrivalDate: string;
|
|
15148
|
+
departureDate: string;
|
|
15149
|
+
adultCount: number;
|
|
15150
|
+
childCount?: number;
|
|
15151
|
+
}
|
|
15152
|
+
|
|
15153
|
+
interface tamarackidahoSearchResult {
|
|
15154
|
+
arrivalDate: string;
|
|
15155
|
+
departureDate: string;
|
|
15156
|
+
adultCount: number;
|
|
15157
|
+
childCount: number;
|
|
15158
|
+
units: tamarackidahoUnit[];
|
|
15159
|
+
}
|
|
15160
|
+
|
|
15161
|
+
interface tamarackidahoUnit {
|
|
15162
|
+
supplierId: string;
|
|
15163
|
+
supplierName: string;
|
|
15164
|
+
productId: string;
|
|
15165
|
+
unitName: string;
|
|
15166
|
+
totalPrice: number;
|
|
15167
|
+
}
|
|
15168
|
+
|
|
15169
|
+
/**
|
|
15170
|
+
* Tamarack Resort's own direct-managed lodging booking engine (Inntopia RTP) — real
|
|
15171
|
+
* availability and price per unit type for a date range and party size, straight from the
|
|
15172
|
+
* site's own search widget, browserless.
|
|
15173
|
+
*/
|
|
15174
|
+
interface Unit {
|
|
15175
|
+
/**
|
|
15176
|
+
* Searches Tamarack Resort's own direct-managed lodging (the Lodge at Osprey Meadows, the
|
|
15177
|
+
* Village at Tamarack Resort, and Tamarack Homes and Cottages — not the golf tee-time flow, a
|
|
15178
|
+
* different vendor) for a stay and party size. `arrivalDate`/`departureDate` are "MM/DD/YYYY"
|
|
15179
|
+
* strings (the widget's own format), `adultCount` is required and positive, `childCount`
|
|
15180
|
+
* defaults to 0. Returns every unit type Tamarack's own booking engine (Inntopia RTP)
|
|
15181
|
+
* currently prices as AVAILABLE for that exact query — each with its supplier (property), unit
|
|
15182
|
+
* name, and `totalPrice` in USD for the whole queried stay (not nightly) — genuinely computed
|
|
15183
|
+
* per call, not a cached listing. An empty `units` array is a real answer: Tamarack has
|
|
15184
|
+
* nothing available for that stay, not a failure.
|
|
15185
|
+
*/
|
|
15186
|
+
searchLodging(args: tamarackidahoSearchArgs): Promise<tamarackidahoSearchResult>;
|
|
15187
|
+
}
|
|
15188
|
+
}
|
|
15189
|
+
|
|
13795
15190
|
declare namespace BowmarkProvider_target {
|
|
13796
15191
|
// ── Target — the unit's own declarations, verbatim ──
|
|
13797
15192
|
interface targetRow {
|
|
@@ -13846,6 +15241,55 @@ interface TargetStoreSearch {
|
|
|
13846
15241
|
}
|
|
13847
15242
|
}
|
|
13848
15243
|
|
|
15244
|
+
declare namespace BowmarkProvider_tatcha {
|
|
15245
|
+
// ── Tatcha — the unit's own declarations, verbatim ──
|
|
15246
|
+
interface TatchaQuizOption {
|
|
15247
|
+
value: string;
|
|
15248
|
+
label: string;
|
|
15249
|
+
}
|
|
15250
|
+
|
|
15251
|
+
interface TatchaRitualQuizOptions {
|
|
15252
|
+
skinTypes: TatchaQuizOption[];
|
|
15253
|
+
benefits: TatchaQuizOption[];
|
|
15254
|
+
eyeConcerns: TatchaQuizOption[];
|
|
15255
|
+
}
|
|
15256
|
+
|
|
15257
|
+
interface TatchaRitualProduct {
|
|
15258
|
+
step: string;
|
|
15259
|
+
sku: string;
|
|
15260
|
+
name: string;
|
|
15261
|
+
secondaryName: string;
|
|
15262
|
+
price: string;
|
|
15263
|
+
handle: string;
|
|
15264
|
+
url: string;
|
|
15265
|
+
image: string;
|
|
15266
|
+
usageTime: "AM" | "PM" | "both";
|
|
15267
|
+
description: string;
|
|
15268
|
+
inStock: boolean;
|
|
15269
|
+
}
|
|
15270
|
+
|
|
15271
|
+
interface TatchaRitual {
|
|
15272
|
+
summary: string;
|
|
15273
|
+
products: TatchaRitualProduct[];
|
|
15274
|
+
handoffUrl: string;
|
|
15275
|
+
}
|
|
15276
|
+
|
|
15277
|
+
/**
|
|
15278
|
+
* Runs Tatcha's real "Ritual Finder" skincare quiz — the site's own product-matching backend,
|
|
15279
|
+
* not a generic routine.
|
|
15280
|
+
*/
|
|
15281
|
+
interface Unit {
|
|
15282
|
+
/** Reads the live Ritual Finder quiz's real skin-type, benefit and eye-concern menus. */
|
|
15283
|
+
getRitualQuizOptions(): Promise<TatchaRitualQuizOptions>;
|
|
15284
|
+
|
|
15285
|
+
/**
|
|
15286
|
+
* Runs real quiz answers through Tatcha's own personalization backend and returns the real
|
|
15287
|
+
* AM/PM product ritual it recommends.
|
|
15288
|
+
*/
|
|
15289
|
+
getPersonalizedRitual(skinType: string, benefits: string[], eyeConcerns?: string[], sensitive?: boolean, owned?: string[]): Promise<TatchaRitual>;
|
|
15290
|
+
}
|
|
15291
|
+
}
|
|
15292
|
+
|
|
13849
15293
|
declare namespace BowmarkProvider_teladoc {
|
|
13850
15294
|
// ── Teladoc Health — the unit's own declarations, verbatim ──
|
|
13851
15295
|
interface teladocRow {
|
|
@@ -13900,98 +15344,6 @@ interface teladocInsuranceCoverage {
|
|
|
13900
15344
|
}
|
|
13901
15345
|
}
|
|
13902
15346
|
|
|
13903
|
-
declare namespace BowmarkProvider_tentree {
|
|
13904
|
-
// ── tentree — the unit's own declarations, verbatim ──
|
|
13905
|
-
interface TentreeVariant {
|
|
13906
|
-
/** Shopify's numeric variant id as a string. What addToCart takes. */
|
|
13907
|
-
id: string;
|
|
13908
|
-
/** The variant's own label, e.g. "ASHWOOD METEORITE BLACK / ONE". */
|
|
13909
|
-
title: string;
|
|
13910
|
-
/** Decimal string exactly as the store publishes it, e.g. "45.00". */
|
|
13911
|
-
price: string;
|
|
13912
|
-
compareAtPrice: string | null;
|
|
13913
|
-
sku: string | null;
|
|
13914
|
-
/** The store's own per-variant stock flag. */
|
|
13915
|
-
available: boolean;
|
|
13916
|
-
options: string[];
|
|
13917
|
-
}
|
|
13918
|
-
interface TentreeProduct {
|
|
13919
|
-
handle: string;
|
|
13920
|
-
title: string;
|
|
13921
|
-
productType: string;
|
|
13922
|
-
vendor: string;
|
|
13923
|
-
url: string;
|
|
13924
|
-
optionNames: string[];
|
|
13925
|
-
variants: TentreeVariant[];
|
|
13926
|
-
priceRange: { min: string; max: string } | null;
|
|
13927
|
-
inStock: boolean;
|
|
13928
|
-
tags: string[];
|
|
13929
|
-
descriptionHtml: string | null;
|
|
13930
|
-
}
|
|
13931
|
-
interface TentreeCartLine {
|
|
13932
|
-
/** Shopify's own line key, which its cart-change endpoints address a line by. */
|
|
13933
|
-
lineKey: string;
|
|
13934
|
-
variantId: string;
|
|
13935
|
-
productTitle: string;
|
|
13936
|
-
/** Null on a single-variant product. */
|
|
13937
|
-
variantTitle: string | null;
|
|
13938
|
-
quantity: number;
|
|
13939
|
-
price: string;
|
|
13940
|
-
lineTotal: string;
|
|
13941
|
-
url: string;
|
|
13942
|
-
}
|
|
13943
|
-
interface TentreeCart {
|
|
13944
|
-
/** The store's own cart token — a bearer credential, so treat it like one. */
|
|
13945
|
-
token: string;
|
|
13946
|
-
lines: TentreeCartLine[];
|
|
13947
|
-
/** Units, NOT lines: two of one variant is one line and two items. */
|
|
13948
|
-
itemCount: number;
|
|
13949
|
-
subtotal: string;
|
|
13950
|
-
currency: string;
|
|
13951
|
-
cartUrl: string;
|
|
13952
|
-
checkoutUrl: string;
|
|
13953
|
-
}
|
|
13954
|
-
|
|
13955
|
-
/**
|
|
13956
|
-
* Sustainable apparel storefront — hats, tees, hoodies and outerwear — with a real guest cart
|
|
13957
|
-
* a caller can fill across several calls.
|
|
13958
|
-
*/
|
|
13959
|
-
interface Unit {
|
|
13960
|
-
/**
|
|
13961
|
-
* Searches tentree's live catalogue and returns matching products with their real variants,
|
|
13962
|
-
* current prices and per-variant stock. Matches whole words, so 'tee' finds tees and not
|
|
13963
|
-
* 'steel'. Returns [] when nothing matches, which is an ordinary answer rather than an error.
|
|
13964
|
-
*/
|
|
13965
|
-
searchProducts(query: string, opts?: { productType?: string; inStockOnly?: boolean; limit?: number }): Promise<TentreeProduct[]>;
|
|
13966
|
-
|
|
13967
|
-
/**
|
|
13968
|
-
* Reads one product by its handle — every variant, its exact price and whether that specific
|
|
13969
|
-
* size or colour is purchasable right now. Takes the handle searchProducts returns, and its
|
|
13970
|
-
* variants[].id is what addToCart takes. THROWS on an unknown handle (the store answers a real
|
|
13971
|
-
* 404).
|
|
13972
|
-
*/
|
|
13973
|
-
getProduct(handle: string): Promise<TentreeProduct>;
|
|
13974
|
-
|
|
13975
|
-
/**
|
|
13976
|
-
* Puts variants into THIS run's own cart on the store and returns the cart as the store
|
|
13977
|
-
* reports it. Really writes — the cart exists on tentree.com from the first call, and it
|
|
13978
|
-
* belongs to this run's cookie jar. Call it several times inside one bowmark.session() and the
|
|
13979
|
-
* lines accumulate; call it across two separate runs and the second cart does not contain the
|
|
13980
|
-
* first's lines. Takes VARIANT ids (getProduct().variants[].id), never handles. Nothing is
|
|
13981
|
-
* bought: checkoutUrl is where a shopper would pay.
|
|
13982
|
-
*/
|
|
13983
|
-
addToCart(items: Array<{ variantId: string; quantity?: number }>): Promise<TentreeCart>;
|
|
13984
|
-
|
|
13985
|
-
/**
|
|
13986
|
-
* Reads THIS run's cart back from the store — lines, quantities, per-line and order totals,
|
|
13987
|
-
* and the real cart and checkout URLs. Takes no id: the cart is the one this run's cookie jar
|
|
13988
|
-
* holds, so a fresh run reads an empty cart rather than somebody else's. An empty cart is an
|
|
13989
|
-
* ordinary answer (itemCount 0), not an error.
|
|
13990
|
-
*/
|
|
13991
|
-
getCart(): Promise<TentreeCart>;
|
|
13992
|
-
}
|
|
13993
|
-
}
|
|
13994
|
-
|
|
13995
15347
|
declare namespace BowmarkProvider_therabody {
|
|
13996
15348
|
// ── Therabody — the unit's own declarations, verbatim ──
|
|
13997
15349
|
interface TherabodyVariant {
|
|
@@ -14577,6 +15929,108 @@ interface thezebraAutoQuotes {
|
|
|
14577
15929
|
}
|
|
14578
15930
|
}
|
|
14579
15931
|
|
|
15932
|
+
declare namespace BowmarkProvider_tilsonhomes {
|
|
15933
|
+
// ── Tilson Homes — the unit's own declarations, verbatim ──
|
|
15934
|
+
interface TilsonhomesPlan {
|
|
15935
|
+
id: number;
|
|
15936
|
+
name: string;
|
|
15937
|
+
displayName: string | null;
|
|
15938
|
+
bed: number | null;
|
|
15939
|
+
bath: number | null;
|
|
15940
|
+
size: number | null;
|
|
15941
|
+
cost: number | null;
|
|
15942
|
+
defaultElevationId: number | null;
|
|
15943
|
+
}
|
|
15944
|
+
|
|
15945
|
+
interface TilsonhomesElevationDetails {
|
|
15946
|
+
id: number;
|
|
15947
|
+
planName: string | null;
|
|
15948
|
+
caption: string | null;
|
|
15949
|
+
thumb: string | null;
|
|
15950
|
+
bed: number | null;
|
|
15951
|
+
bedMin: number | null;
|
|
15952
|
+
bedMax: number | null;
|
|
15953
|
+
bath: number | null;
|
|
15954
|
+
bathMin: number | null;
|
|
15955
|
+
bathMax: number | null;
|
|
15956
|
+
size: number | null;
|
|
15957
|
+
sizeMin: number | null;
|
|
15958
|
+
sizeMax: number | null;
|
|
15959
|
+
cost: number | null;
|
|
15960
|
+
costMin: number | null;
|
|
15961
|
+
costMax: number | null;
|
|
15962
|
+
description: string | null;
|
|
15963
|
+
finishes: TilsonhomesFinishOption[];
|
|
15964
|
+
}
|
|
15965
|
+
|
|
15966
|
+
interface TilsonhomesFinishOption {
|
|
15967
|
+
category: string | null;
|
|
15968
|
+
name: string | null;
|
|
15969
|
+
displayName: string | null;
|
|
15970
|
+
swatches: { id: number; name: string | null }[];
|
|
15971
|
+
}
|
|
15972
|
+
|
|
15973
|
+
/**
|
|
15974
|
+
* Reads Tilson Homes' Build-On-Your-Land floor plan catalog and each plan's Anewgo-powered
|
|
15975
|
+
* customizer — bed/bath/size range and exterior finish options — the way the live site's
|
|
15976
|
+
* interactive floorplan tool would show them.
|
|
15977
|
+
*/
|
|
15978
|
+
interface Unit {
|
|
15979
|
+
/**
|
|
15980
|
+
* Lists Tilson Homes' Build-On-Your-Land floor plans — model name, bed/bath/size and the
|
|
15981
|
+
* default elevation id `getElevationDetails` reads. The entry point: every plan links to a
|
|
15982
|
+
* customizer instance.
|
|
15983
|
+
*/
|
|
15984
|
+
listPlans(activeOnly?: boolean): Promise<TilsonhomesPlan[]>;
|
|
15985
|
+
|
|
15986
|
+
/**
|
|
15987
|
+
* Reads one plan's elevation — the exterior style's customization range (how far bed/bath/size
|
|
15988
|
+
* can be pushed by the site's own add-a-room options) and its exterior finish categories
|
|
15989
|
+
* (roof, trim, body, accent) with the swatch currently assigned to each. The read behind 'add
|
|
15990
|
+
* a covered porch and a 4th bedroom, show me the finishes'.
|
|
15991
|
+
*/
|
|
15992
|
+
getElevationDetails(elevationId: number | string): Promise<TilsonhomesElevationDetails>;
|
|
15993
|
+
}
|
|
15994
|
+
}
|
|
15995
|
+
|
|
15996
|
+
declare namespace BowmarkProvider_titlenine {
|
|
15997
|
+
// ── Title Nine — the unit's own declarations, verbatim ──
|
|
15998
|
+
// Title Nine's OWN shapes — not a capability contract.
|
|
15999
|
+
|
|
16000
|
+
interface TitlenineBraMeasurements {
|
|
16001
|
+
chestInches: number; // site's calculatable range: 30-46
|
|
16002
|
+
bustInches: number;
|
|
16003
|
+
belowBustInches: number; // site requires >= 24
|
|
16004
|
+
}
|
|
16005
|
+
|
|
16006
|
+
interface TitlenineBraSizeResult {
|
|
16007
|
+
bandSize: number;
|
|
16008
|
+
cupCode: string; // the site's own raw catalog query param, e.g. "DD%2B"
|
|
16009
|
+
cupLabel: string; // the label shown to the customer, e.g. "M (11D)"
|
|
16010
|
+
sizeLabel: string; // "<bandSize><cupLabel>", e.g. "40M (11D)"
|
|
16011
|
+
inStock: boolean; // false for the extended range (n2 >= 9)
|
|
16012
|
+
shopUrl: string | null; // pre-filtered catalog link, only when inStock
|
|
16013
|
+
unavailableMessage: string | null;
|
|
16014
|
+
calculatorUrl: string;
|
|
16015
|
+
}
|
|
16016
|
+
|
|
16017
|
+
/**
|
|
16018
|
+
* Title Nine's own bra-size calculator — real band + cup math off three measurements, computed
|
|
16019
|
+
* exactly as the site computes it, including the extended cup range (up to "M (11D)") that
|
|
16020
|
+
* generic AI knowledge gets wrong — plus the exact 'Shop <size>' catalog link when the size is
|
|
16021
|
+
* in stock.
|
|
16022
|
+
*/
|
|
16023
|
+
interface Unit {
|
|
16024
|
+
/**
|
|
16025
|
+
* Runs Title Nine's own bra-size calculator — chest/bust/under-bust in, a real band + cup size
|
|
16026
|
+
* out computed exactly as the site computes it, including Title Nine's own extended cup
|
|
16027
|
+
* labeling past DDD (up to "M (11D)") that generic AI knowledge gets wrong. Returns the exact
|
|
16028
|
+
* 'Shop <size>' catalog link when the size is currently carried online.
|
|
16029
|
+
*/
|
|
16030
|
+
calculateBraSize(input: TitlenineBraMeasurements): Promise<TitlenineBraSizeResult>;
|
|
16031
|
+
}
|
|
16032
|
+
}
|
|
16033
|
+
|
|
14580
16034
|
declare namespace BowmarkProvider_topviewtix {
|
|
14581
16035
|
// ── TopView Sightseeing — the unit's own declarations, verbatim ──
|
|
14582
16036
|
interface topviewtixPackageDetails {
|
|
@@ -14687,6 +16141,72 @@ interface TrekTravelSearchFilters {
|
|
|
14687
16141
|
}
|
|
14688
16142
|
}
|
|
14689
16143
|
|
|
16144
|
+
declare namespace BowmarkProvider_twiddy {
|
|
16145
|
+
// ── Twiddy & Company Realtors — the unit's own declarations, verbatim ──
|
|
16146
|
+
interface TwiddyRentalRow {
|
|
16147
|
+
propertyId: number;
|
|
16148
|
+
propertyNumber: string;
|
|
16149
|
+
name: string;
|
|
16150
|
+
url: string;
|
|
16151
|
+
town: string;
|
|
16152
|
+
distanceToBeach: string;
|
|
16153
|
+
bedrooms: number | null;
|
|
16154
|
+
priceFromUsd: number | null;
|
|
16155
|
+
priceFromFormatted: string | null;
|
|
16156
|
+
ratingValue: number | null;
|
|
16157
|
+
isAvailable: boolean;
|
|
16158
|
+
}
|
|
16159
|
+
interface TwiddyRentalDetail {
|
|
16160
|
+
propertyId: number;
|
|
16161
|
+
name: string;
|
|
16162
|
+
identifier: string;
|
|
16163
|
+
description: string;
|
|
16164
|
+
streetAddress: string;
|
|
16165
|
+
town: string;
|
|
16166
|
+
petsAllowed: boolean;
|
|
16167
|
+
amenities: string[];
|
|
16168
|
+
numberOfBedrooms: number | null;
|
|
16169
|
+
numberOfBathrooms: number | null;
|
|
16170
|
+
images: string[];
|
|
16171
|
+
url: string;
|
|
16172
|
+
}
|
|
16173
|
+
type TwiddyQuote =
|
|
16174
|
+
| { available: true; propertyId: number; checkin: string; nights: number; currency: "USD";
|
|
16175
|
+
rentalFeeUsd: number; discountUsd: number; taxUsd: number; totalUsd: number; checkoutUrl: string }
|
|
16176
|
+
| { available: false; propertyId: number; checkin: string; nights: number };
|
|
16177
|
+
|
|
16178
|
+
/**
|
|
16179
|
+
* Twiddy & Company's own Outer Banks vacation rental search and real-time weekly
|
|
16180
|
+
* pricing/booking-handoff engine — a regional owner-operator's own 1,000+ property inventory,
|
|
16181
|
+
* live availability and price, not a stale catalog.
|
|
16182
|
+
*/
|
|
16183
|
+
interface Unit {
|
|
16184
|
+
/**
|
|
16185
|
+
* Runs Twiddy's own portfolio-wide search (all 1,000+ managed Outer Banks properties in one
|
|
16186
|
+
* call), optionally filtered to one of the six towns ("Corolla", "Duck", "4x4", "Southern
|
|
16187
|
+
* Shores", "Kitty Hawk", "Kill Devil Hills", "Nags Head") and/or a minimum bedroom count, and
|
|
16188
|
+
* returns the live matching listings — name, url, town, distance to beach, bed count, an "as
|
|
16189
|
+
* low as" headline price, rating.
|
|
16190
|
+
*/
|
|
16191
|
+
searchRentals(options?: { town?: string; minBedrooms?: number }): Promise<TwiddyRentalRow[]>;
|
|
16192
|
+
|
|
16193
|
+
/**
|
|
16194
|
+
* Reads one rental in full — description, address, pets-allowed flag, amenities, bed/bath
|
|
16195
|
+
* counts, photos, and the internal numeric propertyId getRentalQuote needs — from the
|
|
16196
|
+
* propertyUrl a search result carries (a twiddy.com/outer-banks/... path or full URL).
|
|
16197
|
+
*/
|
|
16198
|
+
getRentalDetail(propertyUrl: string): Promise<TwiddyRentalDetail>;
|
|
16199
|
+
|
|
16200
|
+
/**
|
|
16201
|
+
* Runs the site's own real-time weekly pricing engine for one property and a check-in date
|
|
16202
|
+
* ("YYYY-MM-DD", default 7 nights) — rental fee, discount, tax, total — and returns the exact
|
|
16203
|
+
* booking/checkout URL for that week. `available: false` means the site checked and the
|
|
16204
|
+
* property has no live rate for that week, an ordinary answer.
|
|
16205
|
+
*/
|
|
16206
|
+
getRentalQuote(propertyId: number, options: { checkin: string; nights?: number }): Promise<TwiddyQuote>;
|
|
16207
|
+
}
|
|
16208
|
+
}
|
|
16209
|
+
|
|
14690
16210
|
declare namespace BowmarkProvider_ulrichlifestyle {
|
|
14691
16211
|
// ── Ulrich Lifestyle Structures — the unit's own declarations, verbatim ──
|
|
14692
16212
|
// Ulrich Lifestyle Structures' OWN shapes — not a capability contract.
|
|
@@ -14758,6 +16278,58 @@ interface UlrichPriceResult {
|
|
|
14758
16278
|
}
|
|
14759
16279
|
}
|
|
14760
16280
|
|
|
16281
|
+
declare namespace BowmarkProvider_vervecoffee {
|
|
16282
|
+
// ── Verve Coffee Roasters — the unit's own declarations, verbatim ──
|
|
16283
|
+
interface VervecoffeeSubscription {
|
|
16284
|
+
id: string;
|
|
16285
|
+
handle: string;
|
|
16286
|
+
title: string;
|
|
16287
|
+
priceFormatted: string;
|
|
16288
|
+
url: string;
|
|
16289
|
+
}
|
|
16290
|
+
interface VervecoffeeCoffeeMatch {
|
|
16291
|
+
id: string;
|
|
16292
|
+
title: string;
|
|
16293
|
+
descriptionHtml: string;
|
|
16294
|
+
startingPriceFormatted: string;
|
|
16295
|
+
url: string;
|
|
16296
|
+
subscriptionPlans: Array<{ name: string; deliveryInterval: string; priceWithDiscount: string }>;
|
|
16297
|
+
}
|
|
16298
|
+
interface VervecoffeeCoffeeMatchResult {
|
|
16299
|
+
recommendedProducts: VervecoffeeCoffeeMatch[];
|
|
16300
|
+
}
|
|
16301
|
+
interface CoffeeQuizAnswers {
|
|
16302
|
+
journeyStage: "coffee_curious" | "casual_coffee_lover" | "coffee_connoisseur" | "barista";
|
|
16303
|
+
brewMethod: "pourover" | "coffee_maker" | "espresso" | "french_press" | "aeropress";
|
|
16304
|
+
coffeeStyle: "black" | "milk_or_cream" | "sugar_or_sweetener";
|
|
16305
|
+
roastPreference: "light" | "medium" | "dark" | "not_sure";
|
|
16306
|
+
tastingNote: "chocolate" | "citrus" | "fruits" | "sweet" | "floral" | "nuts";
|
|
16307
|
+
}
|
|
16308
|
+
|
|
16309
|
+
/**
|
|
16310
|
+
* Verve Coffee Roasters' Roaster's Choice subscription catalog and its real 'Find Your Coffee
|
|
16311
|
+
* Match' quiz (Octane AI-powered) — drives the same 5 questions the live site asks and returns
|
|
16312
|
+
* the actual subscription it recommends, priced, with a buy link.
|
|
16313
|
+
*/
|
|
16314
|
+
interface Unit {
|
|
16315
|
+
/**
|
|
16316
|
+
* Lists Verve's five real Roaster's Choice coffee subscription products (single origin, blend,
|
|
16317
|
+
* espresso, Africa, Latin America) with their live USD price, read off the storefront's own
|
|
16318
|
+
* /products.json catalog.
|
|
16319
|
+
*/
|
|
16320
|
+
listRoastersChoiceSubscriptions(): Promise<VervecoffeeSubscription[]>;
|
|
16321
|
+
|
|
16322
|
+
/**
|
|
16323
|
+
* Runs Verve's real 'Find Your Coffee Match' quiz end to end — the same 5 questions the live
|
|
16324
|
+
* Octane AI-powered quiz at /pages/quiz asks every visitor — and returns the actual Roaster's
|
|
16325
|
+
* Choice subscription(s) it recommends, with real USD price and a buy-page link. THROWS if
|
|
16326
|
+
* Verve's quiz has been reconfigured and one of the 5 answer labels no longer matches (see the
|
|
16327
|
+
* error for the live option set).
|
|
16328
|
+
*/
|
|
16329
|
+
matchCoffeeSubscription(answers: CoffeeQuizAnswers): Promise<VervecoffeeCoffeeMatchResult>;
|
|
16330
|
+
}
|
|
16331
|
+
}
|
|
16332
|
+
|
|
14761
16333
|
declare namespace BowmarkProvider_viewrail {
|
|
14762
16334
|
// ── Viewrail — the unit's own declarations, verbatim ──
|
|
14763
16335
|
interface ViewrailMaterial {
|
|
@@ -14798,6 +16370,62 @@ interface ViewrailMountingStyle {
|
|
|
14798
16370
|
}
|
|
14799
16371
|
}
|
|
14800
16372
|
|
|
16373
|
+
declare namespace BowmarkProvider_villagerealtyobx {
|
|
16374
|
+
// ── Village Realty — the unit's own declarations, verbatim ──
|
|
16375
|
+
interface VillagerealtyobxListing {
|
|
16376
|
+
propertyID: string;
|
|
16377
|
+
seoName: string;
|
|
16378
|
+
name: string;
|
|
16379
|
+
town: string;
|
|
16380
|
+
address: string | null;
|
|
16381
|
+
bedrooms: number | null;
|
|
16382
|
+
maxGuests: number | null;
|
|
16383
|
+
photoUrl: string | null;
|
|
16384
|
+
url: string;
|
|
16385
|
+
}
|
|
16386
|
+
|
|
16387
|
+
interface VillagerealtyobxQuote {
|
|
16388
|
+
propertyID: string;
|
|
16389
|
+
checkin: string;
|
|
16390
|
+
checkout: string;
|
|
16391
|
+
available: boolean;
|
|
16392
|
+
rent: number | null;
|
|
16393
|
+
taxes: number | null;
|
|
16394
|
+
total: number | null;
|
|
16395
|
+
currency: string;
|
|
16396
|
+
bookNowURL: string | null;
|
|
16397
|
+
message: string | null;
|
|
16398
|
+
}
|
|
16399
|
+
|
|
16400
|
+
/**
|
|
16401
|
+
* Village Realty's own Outer Banks vacation-rental search and real-time property quote (rent,
|
|
16402
|
+
* taxes, total, book-now link) — the same live pricing their own site computes, no login
|
|
16403
|
+
* required.
|
|
16404
|
+
*/
|
|
16405
|
+
interface Unit {
|
|
16406
|
+
/**
|
|
16407
|
+
* Searches Village Realty's own 900+ Outer Banks rental listings the way
|
|
16408
|
+
* villagerealtyobx.com/outer-banks-vacation-rentals does — filter by town (e.g. "Corolla",
|
|
16409
|
+
* "Nags Head"), exact bedroom count, amenities (e.g. "Private Pool", "Elevator"), and
|
|
16410
|
+
* optionally a date range — returning each matching property's id, name, town, address,
|
|
16411
|
+
* bedroom count, max guests and detail-page URL. Call getQuote with a result's propertyID for
|
|
16412
|
+
* a real priced quote.
|
|
16413
|
+
*/
|
|
16414
|
+
searchRentals(args?: { town?: string, bedrooms?: number, amenities?: string[], checkin?: string, checkout?: string, page?: number }): Promise<VillagerealtyobxListing[]>;
|
|
16415
|
+
|
|
16416
|
+
/**
|
|
16417
|
+
* Gets a real-time price quote for one Village Realty property and date range — the exact
|
|
16418
|
+
* server-computed rent, taxes and total the rental detail page shows after picking dates, plus
|
|
16419
|
+
* the book-now URL. `checkin`/`checkout` are `MM/DD/YYYY`. `available: false` is a genuine
|
|
16420
|
+
* site answer (e.g. the dates fail the property's minimum-night-stay rule), not an error —
|
|
16421
|
+
* this is the flow ChatGPT itself cannot operate today: asked to price a Village Realty stay
|
|
16422
|
+
* it answers "I can't complete the booking or take payment for you" and recommends competitor
|
|
16423
|
+
* sites instead of quoting Village Realty's own live price.
|
|
16424
|
+
*/
|
|
16425
|
+
getQuote(args: { propertyID: string, checkin: string, checkout: string }): Promise<VillagerealtyobxQuote>;
|
|
16426
|
+
}
|
|
16427
|
+
}
|
|
16428
|
+
|
|
14801
16429
|
declare namespace BowmarkProvider_visible {
|
|
14802
16430
|
// ── Visible — the unit's own declarations, verbatim ──
|
|
14803
16431
|
interface VisibleDealOffer {
|
|
@@ -15057,6 +16685,33 @@ interface VisibleGetPlansResult {
|
|
|
15057
16685
|
}
|
|
15058
16686
|
}
|
|
15059
16687
|
|
|
16688
|
+
declare namespace BowmarkProvider_voluspa {
|
|
16689
|
+
// ── Voluspa — the unit's own declarations, verbatim ──
|
|
16690
|
+
interface VoluspaQuizButton {
|
|
16691
|
+
text: string;
|
|
16692
|
+
action: string;
|
|
16693
|
+
url?: string;
|
|
16694
|
+
selectedValue?: string;
|
|
16695
|
+
}
|
|
16696
|
+
interface VoluspaQuizIntro {
|
|
16697
|
+
paths: VoluspaQuizButton[];
|
|
16698
|
+
firstQuestionOptions: VoluspaQuizButton[];
|
|
16699
|
+
}
|
|
16700
|
+
|
|
16701
|
+
/**
|
|
16702
|
+
* Voluspa's own "Find Your Fragrance" quiz suite — reads the branching quiz's entry paths and
|
|
16703
|
+
* first-question scent-family options straight from the quiz vendor's config.
|
|
16704
|
+
*/
|
|
16705
|
+
interface Unit {
|
|
16706
|
+
/**
|
|
16707
|
+
* Reads the fragrance quiz's entry screen — its two branching paths and the FIRST question's
|
|
16708
|
+
* scent-family options for one of them (0 = home fragrance, 1 = personal fragrance/EDP, as the
|
|
16709
|
+
* splash screen lists them; default 0) — decoded from Digioh's own campaign config.
|
|
16710
|
+
*/
|
|
16711
|
+
getFragranceQuizIntro(pathIndex?: number): Promise<VoluspaQuizIntro>;
|
|
16712
|
+
}
|
|
16713
|
+
}
|
|
16714
|
+
|
|
15060
16715
|
declare namespace BowmarkProvider_walmart {
|
|
15061
16716
|
// ── Walmart — the unit's own declarations, verbatim ──
|
|
15062
16717
|
interface walmartStore {
|
|
@@ -15124,6 +16779,64 @@ interface walmartSearchResult {
|
|
|
15124
16779
|
}
|
|
15125
16780
|
}
|
|
15126
16781
|
|
|
16782
|
+
declare namespace BowmarkProvider_waterfurnace {
|
|
16783
|
+
// ── WaterFurnace — the unit's own declarations, verbatim ──
|
|
16784
|
+
type WaterfurnaceFuelSource = "gas" | "propane" | "heatpump" | "resistance" | "oil";
|
|
16785
|
+
type WaterfurnaceSecondaryFuelSource = "gas" | "propane" | "resistance" | "oil" | "none";
|
|
16786
|
+
interface WaterfurnaceHomeDetails {
|
|
16787
|
+
address: string;
|
|
16788
|
+
postalCode: string;
|
|
16789
|
+
homeAgeYears: number;
|
|
16790
|
+
livingSqft: number;
|
|
16791
|
+
basementSqft: number;
|
|
16792
|
+
lotAcreage: number;
|
|
16793
|
+
}
|
|
16794
|
+
interface WaterfurnaceRecommendedSystem {
|
|
16795
|
+
tier: "good" | "better" | "best";
|
|
16796
|
+
title: string;
|
|
16797
|
+
description: string;
|
|
16798
|
+
highlights: string[];
|
|
16799
|
+
}
|
|
16800
|
+
interface WaterfurnaceSavingsEstimate {
|
|
16801
|
+
zipCode: string;
|
|
16802
|
+
lat: number;
|
|
16803
|
+
lng: number;
|
|
16804
|
+
currentAnnualCostUsd: number;
|
|
16805
|
+
geothermalAnnualCostUsd: number;
|
|
16806
|
+
annualSavingsUsd: number;
|
|
16807
|
+
savingsBreakdownUsd: { heating: number; cooling: number; hotWater: number };
|
|
16808
|
+
carbonFootprintLbsPerYear: { current: number; geothermal: number; reduction: number };
|
|
16809
|
+
fuelRates: { gas: number; electric: number; oil: number; propane: number };
|
|
16810
|
+
recommendedSystems: WaterfurnaceRecommendedSystem[];
|
|
16811
|
+
warnings: string[];
|
|
16812
|
+
}
|
|
16813
|
+
|
|
16814
|
+
/**
|
|
16815
|
+
* WaterFurnace's Savings Calculator, run for real — the site's own computed Free Savings
|
|
16816
|
+
* Report (annual dollar savings, energy comparison, carbon footprint, recommended geothermal
|
|
16817
|
+
* systems) for a real address and fuel source, off its undocumented backend API.
|
|
16818
|
+
*/
|
|
16819
|
+
interface Unit {
|
|
16820
|
+
/**
|
|
16821
|
+
* Runs the Savings Calculator's own home-details lookup for an address/zip. Returns the site's
|
|
16822
|
+
* real public-data estimate of home age, living sqft and basement sqft — a fixed fallback
|
|
16823
|
+
* estimate (not an error) when the address isn't in its data source, matching what the
|
|
16824
|
+
* wizard's own UI does.
|
|
16825
|
+
*/
|
|
16826
|
+
lookupHomeDetails(input: { address: string; city?: string; state?: string; zipCode: string }): Promise<WaterfurnaceHomeDetails>;
|
|
16827
|
+
|
|
16828
|
+
/**
|
|
16829
|
+
* Runs the Savings Calculator's real backend computation for a home and current fuel source
|
|
16830
|
+
* (gas/propane/electric heat pump/electric resistance/oil) and returns the site's own computed
|
|
16831
|
+
* Free Savings Report: current vs. geothermal annual cost, dollar savings, carbon footprint
|
|
16832
|
+
* reduction, and WaterFurnace's recommended systems. Missing home details are filled from
|
|
16833
|
+
* lookupHomeDetails; a missing lat/lng is resolved from the zip via a keyless geocode. THROWS
|
|
16834
|
+
* if the API's response shape has changed.
|
|
16835
|
+
*/
|
|
16836
|
+
estimateGeothermalSavings(input: { zipCode: string; state: string; address?: string; city?: string; fuelSource: WaterfurnaceFuelSource; secondaryFuelSource?: WaterfurnaceSecondaryFuelSource; homeAgeYears?: number; livingSqft?: number; basementSqft?: number; numResidents?: number; winterSetpointF?: number; summerSetpointF?: number; lat?: number; lng?: number }): Promise<WaterfurnaceSavingsEstimate>;
|
|
16837
|
+
}
|
|
16838
|
+
}
|
|
16839
|
+
|
|
15127
16840
|
declare namespace BowmarkProvider_wellfound {
|
|
15128
16841
|
// ── Wellfound — the unit's own declarations, verbatim ──
|
|
15129
16842
|
interface wellfoundRow {
|
|
@@ -15236,6 +16949,52 @@ interface wellfoundCompanyDetail {
|
|
|
15236
16949
|
}
|
|
15237
16950
|
}
|
|
15238
16951
|
|
|
16952
|
+
declare namespace BowmarkProvider_xpresswellnessurgentcare {
|
|
16953
|
+
// ── Xpress Wellness Urgent Care — the unit's own declarations, verbatim ──
|
|
16954
|
+
interface XpressFacility {
|
|
16955
|
+
facilityId: string; // healow facility_id — what checkWaitTime takes
|
|
16956
|
+
name: string; // e.g. "Manhattan, KS"
|
|
16957
|
+
address: string | null;
|
|
16958
|
+
phone: string | null;
|
|
16959
|
+
detailsUrl: string | null; // the clinic's own page on the marketing site
|
|
16960
|
+
checkinUrl: string; // the healow openaccess widget URL
|
|
16961
|
+
}
|
|
16962
|
+
interface XpressWaitTime {
|
|
16963
|
+
facilityId: string;
|
|
16964
|
+
facilityName: string; // confirmed by the widget's own dataLayer, not assumed
|
|
16965
|
+
address: string | null;
|
|
16966
|
+
phone: string | null;
|
|
16967
|
+
waitTimeText: string; // the site's own bucketed phrase, e.g. "Under 30 mins"
|
|
16968
|
+
hoursText: string | null; // e.g. "OPEN - Until 8 PM"
|
|
16969
|
+
url: string;
|
|
16970
|
+
}
|
|
16971
|
+
|
|
16972
|
+
/**
|
|
16973
|
+
* Reads Xpress Wellness Urgent Care's clinic roster and each clinic's live healow wait-time /
|
|
16974
|
+
* check-in widget — no key, no browser.
|
|
16975
|
+
*/
|
|
16976
|
+
interface Unit {
|
|
16977
|
+
/**
|
|
16978
|
+
* Lists every Xpress Wellness Urgent Care clinic — 40 locations across Oklahoma, Kansas and
|
|
16979
|
+
* one Texas site — with name, address, phone, the clinic's own detail page and the healow
|
|
16980
|
+
* check-in widget URL + facility_id. Takes nothing. The facilityId it returns is what
|
|
16981
|
+
* checkWaitTime takes. THROWS rather than returning [] when the roster page answers with no
|
|
16982
|
+
* clinics — the roster is never honestly empty.
|
|
16983
|
+
*/
|
|
16984
|
+
listFacilities(): Promise<XpressFacility[]>;
|
|
16985
|
+
|
|
16986
|
+
/**
|
|
16987
|
+
* Reads one clinic's live estimated wait time, hours-today status and confirmed identity
|
|
16988
|
+
* straight off its healow openaccess widget. facilityId is the numeric id listFacilities
|
|
16989
|
+
* returns (e.g. "10"). Confirms the facility resolved by cross-checking the widget's own
|
|
16990
|
+
* embedded facility name before returning a reading; THROWS with the caller-facing facility_id
|
|
16991
|
+
* named if the widget carries no name (an unknown id) or no wait-time reading (the widget's
|
|
16992
|
+
* markup changed).
|
|
16993
|
+
*/
|
|
16994
|
+
checkWaitTime(facilityId: string): Promise<XpressWaitTime>;
|
|
16995
|
+
}
|
|
16996
|
+
}
|
|
16997
|
+
|
|
15239
16998
|
declare namespace BowmarkProvider_yourarborhome {
|
|
15240
16999
|
// ── Arbor Homes — the unit's own declarations, verbatim ──
|
|
15241
17000
|
interface ArborHome {
|
|
@@ -15606,8 +17365,8 @@ interface ShopifyCart {
|
|
|
15606
17365
|
|
|
15607
17366
|
/**
|
|
15608
17367
|
* OSMUND OLSEN — Every Shopify storefront, reached by its own name. One engine over the
|
|
15609
|
-
* platform's two published surfaces — the store's own MCP server at /api/mcp for
|
|
15610
|
-
* the keyless Ajax storefront JSON for products and the cart.
|
|
17368
|
+
* platform's two published surfaces — the store's own UCP MCP server at /api/ucp/mcp for
|
|
17369
|
+
* search, and the keyless Ajax storefront JSON for products and the cart.
|
|
15611
17370
|
*/
|
|
15612
17371
|
interface Unit {
|
|
15613
17372
|
/**
|
|
@@ -16019,8 +17778,8 @@ interface ShopifyCart {
|
|
|
16019
17778
|
|
|
16020
17779
|
/**
|
|
16021
17780
|
* friedrikdev — Every Shopify storefront, reached by its own name. One engine over the
|
|
16022
|
-
* platform's two published surfaces — the store's own MCP server at /api/mcp for
|
|
16023
|
-
* the keyless Ajax storefront JSON for products and the cart.
|
|
17781
|
+
* platform's two published surfaces — the store's own UCP MCP server at /api/ucp/mcp for
|
|
17782
|
+
* search, and the keyless Ajax storefront JSON for products and the cart.
|
|
16024
17783
|
*/
|
|
16025
17784
|
interface Unit {
|
|
16026
17785
|
/**
|
|
@@ -16109,24 +17868,30 @@ interface BowmarkProviders {
|
|
|
16109
17868
|
aiper: BowmarkProvider_aiper.Unit;
|
|
16110
17869
|
ajmadison: BowmarkProvider_ajmadison.Unit;
|
|
16111
17870
|
ashleyfurniture: BowmarkProvider_ashleyfurniture.Unit;
|
|
17871
|
+
atlasoceanvoyages: BowmarkProvider_atlasoceanvoyages.Unit;
|
|
16112
17872
|
atlasseniorliving: BowmarkProvider_atlasseniorliving.Unit;
|
|
16113
17873
|
avis: BowmarkProvider_avis.Unit;
|
|
16114
17874
|
azure: BowmarkProvider_azure.Unit;
|
|
16115
17875
|
barletta: BowmarkProvider_barletta.Unit;
|
|
16116
17876
|
bhphoto: BowmarkProvider_bhphoto.Unit;
|
|
17877
|
+
bigrentz: BowmarkProvider_bigrentz.Unit;
|
|
16117
17878
|
blenderseyewear: BowmarkProvider_blenderseyewear.Unit;
|
|
16118
17879
|
bluehaven: BowmarkProvider_bluehaven.Unit;
|
|
16119
17880
|
bmwusa: BowmarkProvider_bmwusa.Unit;
|
|
17881
|
+
boydsleep: BowmarkProvider_boydsleep.Unit;
|
|
17882
|
+
brixton: BowmarkProvider_brixton.Unit;
|
|
16120
17883
|
bykoket: BowmarkProvider_bykoket.Unit;
|
|
16121
17884
|
cancer: BowmarkProvider_cancer.Unit;
|
|
16122
17885
|
caraway: BowmarkProvider_caraway.Unit;
|
|
16123
17886
|
cars: BowmarkProvider_cars.Unit;
|
|
17887
|
+
chantecaille: BowmarkProvider_chantecaille.Unit;
|
|
16124
17888
|
cheapflights: BowmarkProvider_cheapflights.Unit;
|
|
16125
17889
|
chriscraft: BowmarkProvider_chriscraft.Unit;
|
|
16126
17890
|
classichome: BowmarkProvider_classichome.Unit;
|
|
16127
17891
|
classpass: BowmarkProvider_classpass.Unit;
|
|
16128
17892
|
cloudflare: BowmarkProvider_cloudflare.Unit;
|
|
16129
17893
|
cyberpowerpc: BowmarkProvider_cyberpowerpc.Unit;
|
|
17894
|
+
davidsonhomes: BowmarkProvider_davidsonhomes.Unit;
|
|
16130
17895
|
decked: BowmarkProvider_decked.Unit;
|
|
16131
17896
|
dice: BowmarkProvider_dice.Unit;
|
|
16132
17897
|
dickssportinggoods: BowmarkProvider_dickssportinggoods.Unit;
|
|
@@ -16134,19 +17899,25 @@ interface BowmarkProviders {
|
|
|
16134
17899
|
discounttire: BowmarkProvider_discounttire.Unit;
|
|
16135
17900
|
embroker: BowmarkProvider_embroker.Unit;
|
|
16136
17901
|
erieinsurance: BowmarkProvider_erieinsurance.Unit;
|
|
17902
|
+
eventsource: BowmarkProvider_eventsource.Unit;
|
|
17903
|
+
evolutionofsmooth: BowmarkProvider_evolutionofsmooth.Unit;
|
|
16137
17904
|
extraspace: BowmarkProvider_extraspace.Unit;
|
|
16138
17905
|
firstdibs: BowmarkProvider_firstdibs.Unit;
|
|
16139
17906
|
flightradar24: BowmarkProvider_flightradar24.Unit;
|
|
16140
17907
|
ford: BowmarkProvider_ford.Unit;
|
|
17908
|
+
fourseasonsyachts: BowmarkProvider_fourseasonsyachts.Unit;
|
|
16141
17909
|
framebridge: BowmarkProvider_framebridge.Unit;
|
|
16142
17910
|
fred: BowmarkProvider_fred.Unit;
|
|
16143
17911
|
geico: BowmarkProvider_geico.Unit;
|
|
16144
17912
|
google_flights: BowmarkProvider_google_flights.Unit;
|
|
16145
17913
|
gotchacovered: BowmarkProvider_gotchacovered.Unit;
|
|
16146
17914
|
grainger: BowmarkProvider_grainger.Unit;
|
|
17915
|
+
grandwelcome: BowmarkProvider_grandwelcome.Unit;
|
|
16147
17916
|
handypro: BowmarkProvider_handypro.Unit;
|
|
17917
|
+
hansons: BowmarkProvider_hansons.Unit;
|
|
16148
17918
|
harmar: BowmarkProvider_harmar.Unit;
|
|
16149
17919
|
hauslabs: BowmarkProvider_hauslabs.Unit;
|
|
17920
|
+
haydenhomes: BowmarkProvider_haydenhomes.Unit;
|
|
16150
17921
|
healthcare_gov: BowmarkProvider_healthcare_gov.Unit;
|
|
16151
17922
|
hellofresh: BowmarkProvider_hellofresh.Unit;
|
|
16152
17923
|
hellotend: BowmarkProvider_hellotend.Unit;
|
|
@@ -16157,8 +17928,12 @@ interface BowmarkProviders {
|
|
|
16157
17928
|
insurify: BowmarkProvider_insurify.Unit;
|
|
16158
17929
|
interiordefine: BowmarkProvider_interiordefine.Unit;
|
|
16159
17930
|
islllc: BowmarkProvider_islllc.Unit;
|
|
17931
|
+
jennikayne: BowmarkProvider_jennikayne.Unit;
|
|
16160
17932
|
joybird: BowmarkProvider_joybird.Unit;
|
|
17933
|
+
joycefactorydirect: BowmarkProvider_joycefactorydirect.Unit;
|
|
17934
|
+
justinwine: BowmarkProvider_justinwine.Unit;
|
|
16161
17935
|
kayak: BowmarkProvider_kayak.Unit;
|
|
17936
|
+
kingsdown: BowmarkProvider_kingsdown.Unit;
|
|
16162
17937
|
kitchentuneup: BowmarkProvider_kitchentuneup.Unit;
|
|
16163
17938
|
kompan: BowmarkProvider_kompan.Unit;
|
|
16164
17939
|
labcorp: BowmarkProvider_labcorp.Unit;
|
|
@@ -16166,6 +17941,7 @@ interface BowmarkProviders {
|
|
|
16166
17941
|
liquiddeath: BowmarkProvider_liquiddeath.Unit;
|
|
16167
17942
|
lonelyplanet: BowmarkProvider_lonelyplanet.Unit;
|
|
16168
17943
|
louvershop: BowmarkProvider_louvershop.Unit;
|
|
17944
|
+
lovelybride: BowmarkProvider_lovelybride.Unit;
|
|
16169
17945
|
lufthansa: BowmarkProvider_lufthansa.Unit;
|
|
16170
17946
|
lululemon: BowmarkProvider_lululemon.Unit;
|
|
16171
17947
|
maidenhome: BowmarkProvider_maidenhome.Unit;
|
|
@@ -16178,11 +17954,13 @@ interface BowmarkProviders {
|
|
|
16178
17954
|
mixbook: BowmarkProvider_mixbook.Unit;
|
|
16179
17955
|
modularclosets: BowmarkProvider_modularclosets.Unit;
|
|
16180
17956
|
momondo: BowmarkProvider_momondo.Unit;
|
|
17957
|
+
mossyoak: BowmarkProvider_mossyoak.Unit;
|
|
16181
17958
|
naic: BowmarkProvider_naic.Unit;
|
|
16182
17959
|
namecheap: BowmarkProvider_namecheap.Unit;
|
|
16183
17960
|
newegg: BowmarkProvider_newegg.Unit;
|
|
16184
17961
|
oanda: BowmarkProvider_oanda.Unit;
|
|
16185
17962
|
otto: BowmarkProvider_otto.Unit;
|
|
17963
|
+
outdoorresearch: BowmarkProvider_outdoorresearch.Unit;
|
|
16186
17964
|
paypal: BowmarkProvider_paypal.Unit;
|
|
16187
17965
|
pirateship: BowmarkProvider_pirateship.Unit;
|
|
16188
17966
|
pizzahut: BowmarkProvider_pizzahut.Unit;
|
|
@@ -16190,8 +17968,12 @@ interface BowmarkProviders {
|
|
|
16190
17968
|
progressive: BowmarkProvider_progressive.Unit;
|
|
16191
17969
|
prose: BowmarkProvider_prose.Unit;
|
|
16192
17970
|
reddit: BowmarkProvider_reddit.Unit;
|
|
17971
|
+
rishitea: BowmarkProvider_rishitea.Unit;
|
|
16193
17972
|
ritani: BowmarkProvider_ritani.Unit;
|
|
17973
|
+
roofmaxx: BowmarkProvider_roofmaxx.Unit;
|
|
17974
|
+
saltandstone: BowmarkProvider_saltandstone.Unit;
|
|
16194
17975
|
samsclub: BowmarkProvider_samsclub.Unit;
|
|
17976
|
+
seakeeper: BowmarkProvider_seakeeper.Unit;
|
|
16195
17977
|
sears: BowmarkProvider_sears.Unit;
|
|
16196
17978
|
seegarsfence: BowmarkProvider_seegarsfence.Unit;
|
|
16197
17979
|
selectblinds: BowmarkProvider_selectblinds.Unit;
|
|
@@ -16200,18 +17982,27 @@ interface BowmarkProviders {
|
|
|
16200
17982
|
statefarm: BowmarkProvider_statefarm.Unit;
|
|
16201
17983
|
stickergiant: BowmarkProvider_stickergiant.Unit;
|
|
16202
17984
|
sunhomesaunas: BowmarkProvider_sunhomesaunas.Unit;
|
|
17985
|
+
tamarackidaho: BowmarkProvider_tamarackidaho.Unit;
|
|
16203
17986
|
target: BowmarkProvider_target.Unit;
|
|
17987
|
+
tatcha: BowmarkProvider_tatcha.Unit;
|
|
16204
17988
|
teladoc: BowmarkProvider_teladoc.Unit;
|
|
16205
|
-
tentree: BowmarkProvider_tentree.Unit;
|
|
16206
17989
|
therabody: BowmarkProvider_therabody.Unit;
|
|
16207
17990
|
thezebra: BowmarkProvider_thezebra.Unit;
|
|
17991
|
+
tilsonhomes: BowmarkProvider_tilsonhomes.Unit;
|
|
17992
|
+
titlenine: BowmarkProvider_titlenine.Unit;
|
|
16208
17993
|
topviewtix: BowmarkProvider_topviewtix.Unit;
|
|
16209
17994
|
trektravel: BowmarkProvider_trektravel.Unit;
|
|
17995
|
+
twiddy: BowmarkProvider_twiddy.Unit;
|
|
16210
17996
|
ulrichlifestyle: BowmarkProvider_ulrichlifestyle.Unit;
|
|
17997
|
+
vervecoffee: BowmarkProvider_vervecoffee.Unit;
|
|
16211
17998
|
viewrail: BowmarkProvider_viewrail.Unit;
|
|
17999
|
+
villagerealtyobx: BowmarkProvider_villagerealtyobx.Unit;
|
|
16212
18000
|
visible: BowmarkProvider_visible.Unit;
|
|
18001
|
+
voluspa: BowmarkProvider_voluspa.Unit;
|
|
16213
18002
|
walmart: BowmarkProvider_walmart.Unit;
|
|
18003
|
+
waterfurnace: BowmarkProvider_waterfurnace.Unit;
|
|
16214
18004
|
wellfound: BowmarkProvider_wellfound.Unit;
|
|
18005
|
+
xpresswellnessurgentcare: BowmarkProvider_xpresswellnessurgentcare.Unit;
|
|
16215
18006
|
yourarborhome: BowmarkProvider_yourarborhome.Unit;
|
|
16216
18007
|
"000de82": BowmarkFamily_shopify_store.Unit;
|
|
16217
18008
|
"001r3iv0": BowmarkFamily_shopify_store.Unit;
|
|
@@ -58133,6 +59924,7 @@ interface BowmarkProviders {
|
|
|
58133
59924
|
tentarte: BowmarkFamily_shopify_store.Unit;
|
|
58134
59925
|
tenthavenuenorthshop: BowmarkFamily_shopify_store.Unit;
|
|
58135
59926
|
tenthpine: BowmarkFamily_shopify_store.Unit;
|
|
59927
|
+
tentree: BowmarkFamily_shopify_store.Unit;
|
|
58136
59928
|
teoapparel: BowmarkFamily_shopify_store.Unit;
|
|
58137
59929
|
teopanzolcobarcelonnette: BowmarkFamily_shopify_store.Unit;
|
|
58138
59930
|
tepawines: BowmarkFamily_shopify_store.Unit;
|