@bowmark/web 1.8.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 +1202 -6
- package/src/generated/validators.ts +1138 -65
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
// rather than imported. An `import` or `export` at the top level of this file would
|
|
6
6
|
// turn it into a module and every declaration below would stop being global.
|
|
7
7
|
//
|
|
8
|
-
// Manifest version:
|
|
9
|
-
// 9 capabilities,
|
|
8
|
+
// Manifest version: be4cdedcfa4c990cc2208fd7e5f33c2dd386c9c210168b9f2c02f259fbe8fbba
|
|
9
|
+
// 9 capabilities, 141 providers, 422 typed functions, 20 refused.
|
|
10
10
|
// 51,715 family members, sharing 2 interface(s) — declared once and pointed at, never repeated per member.
|
|
11
11
|
//
|
|
12
12
|
// REFUSED — these functions are real and callable, and their declared arguments
|
|
@@ -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";
|
|
@@ -2460,6 +2534,89 @@ interface Boydsleep6ZoneResult {
|
|
|
2460
2534
|
}
|
|
2461
2535
|
}
|
|
2462
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
|
+
|
|
2463
2620
|
declare namespace BowmarkProvider_bykoket {
|
|
2464
2621
|
// ── KOKET — the unit's own declarations, verbatim ──
|
|
2465
2622
|
interface KoketProductSummary {
|
|
@@ -2831,6 +2988,59 @@ interface carsVehicleValue {
|
|
|
2831
2988
|
}
|
|
2832
2989
|
}
|
|
2833
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
|
+
|
|
2834
3044
|
declare namespace BowmarkProvider_cheapflights {
|
|
2835
3045
|
// ── Cheapflights — the unit's own declarations, verbatim ──
|
|
2836
3046
|
interface KayakQuery {
|
|
@@ -3509,6 +3719,120 @@ interface CyberpowerpcPriceResult {
|
|
|
3509
3719
|
}
|
|
3510
3720
|
}
|
|
3511
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
|
+
|
|
3512
3836
|
declare namespace BowmarkProvider_decked {
|
|
3513
3837
|
// ── DECKED — the unit's own declarations, verbatim ──
|
|
3514
3838
|
// DECKED's OWN shapes — not a capability contract.
|
|
@@ -4288,6 +4612,42 @@ interface EventSourceInquiryContact {
|
|
|
4288
4612
|
}
|
|
4289
4613
|
}
|
|
4290
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
|
+
|
|
4291
4651
|
declare namespace BowmarkProvider_extraspace {
|
|
4292
4652
|
// ── Extra Space Storage — the unit's own declarations, verbatim ──
|
|
4293
4653
|
interface ExtraspaceSearchResult {
|
|
@@ -4975,6 +5335,78 @@ interface fordVehicleRecalls {
|
|
|
4975
5335
|
}
|
|
4976
5336
|
}
|
|
4977
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
|
+
|
|
4978
5410
|
declare namespace BowmarkProvider_framebridge {
|
|
4979
5411
|
// ── Framebridge — the unit's own declarations, verbatim ──
|
|
4980
5412
|
// Framebridge's OWN shapes — not a capability contract.
|
|
@@ -5902,6 +6334,43 @@ interface HandyproCategorySearch {
|
|
|
5902
6334
|
}
|
|
5903
6335
|
}
|
|
5904
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
|
+
|
|
5905
6374
|
declare namespace BowmarkProvider_harmar {
|
|
5906
6375
|
// ── Harmar Mobility — the unit's own declarations, verbatim ──
|
|
5907
6376
|
interface HarmarVehicleModel {
|
|
@@ -6046,6 +6515,67 @@ interface HauslabsShadeMatch {
|
|
|
6046
6515
|
}
|
|
6047
6516
|
}
|
|
6048
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
|
+
|
|
6049
6579
|
declare namespace BowmarkProvider_healthcare_gov {
|
|
6050
6580
|
// ── HealthCare.gov — the unit's own declarations, verbatim ──
|
|
6051
6581
|
interface healthcare_govPlan {
|
|
@@ -8415,6 +8945,75 @@ interface JoybirdPriceResult {
|
|
|
8415
8945
|
}
|
|
8416
8946
|
}
|
|
8417
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
|
+
|
|
8418
9017
|
declare namespace BowmarkProvider_kayak {
|
|
8419
9018
|
// ── Kayak — the unit's own declarations, verbatim ──
|
|
8420
9019
|
interface KayakQuery {
|
|
@@ -8558,6 +9157,39 @@ interface KayakCar {
|
|
|
8558
9157
|
}
|
|
8559
9158
|
}
|
|
8560
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
|
+
|
|
8561
9193
|
declare namespace BowmarkProvider_kitchentuneup {
|
|
8562
9194
|
// ── Kitchen Tune-Up — the unit's own declarations, verbatim ──
|
|
8563
9195
|
interface KitchentuneupCabinetStyle {
|
|
@@ -9141,6 +9773,76 @@ interface FindLocalDealerResult {
|
|
|
9141
9773
|
}
|
|
9142
9774
|
}
|
|
9143
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
|
+
|
|
9144
9846
|
declare namespace BowmarkProvider_lufthansa {
|
|
9145
9847
|
// ── Lufthansa — the unit's own declarations, verbatim ──
|
|
9146
9848
|
interface LufthansaFlightLeg {
|
|
@@ -9461,8 +10163,16 @@ interface LululemonRow {
|
|
|
9461
10163
|
interface LululemonSearch {
|
|
9462
10164
|
query: string;
|
|
9463
10165
|
products: LululemonRow[];
|
|
9464
|
-
/** 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. */
|
|
9465
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;
|
|
9466
10176
|
warnings: string[];
|
|
9467
10177
|
}
|
|
9468
10178
|
interface LululemonSimilarProducts {
|
|
@@ -9483,10 +10193,16 @@ interface LululemonSimilarProducts {
|
|
|
9483
10193
|
* first — id, title, URL, price range, how many colours the style comes in, and whether it is
|
|
9484
10194
|
* in stock. Ranks over the site's own published product index, then reads the price and colour
|
|
9485
10195
|
* count per row. A match the pricing catalogue does not carry still comes back, with `priced:
|
|
9486
|
-
* false` and null prices
|
|
9487
|
-
*
|
|
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.
|
|
9488
10204
|
*/
|
|
9489
|
-
search(query: { query: string; limit?: number }): Promise<LululemonSearch>;
|
|
10205
|
+
search(query: { query: string; limit?: number; offset?: number }): Promise<LululemonSearch>;
|
|
9490
10206
|
|
|
9491
10207
|
/**
|
|
9492
10208
|
* Reads one product's full configurator the way its product page presents it — every colourway
|
|
@@ -10983,6 +11699,89 @@ interface KayakCar {
|
|
|
10983
11699
|
}
|
|
10984
11700
|
}
|
|
10985
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
|
+
|
|
10986
11785
|
declare namespace BowmarkProvider_naic {
|
|
10987
11786
|
// ── NAIC — the unit's own declarations, verbatim ──
|
|
10988
11787
|
interface naicCompanyQuery {
|
|
@@ -11451,6 +12250,56 @@ interface ottoSearchQuery {
|
|
|
11451
12250
|
}
|
|
11452
12251
|
}
|
|
11453
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
|
+
|
|
11454
12303
|
declare namespace BowmarkProvider_paypal {
|
|
11455
12304
|
// ── PayPal — the unit's own declarations, verbatim ──
|
|
11456
12305
|
interface PaypalEstimateFeeArgs {
|
|
@@ -12928,6 +13777,67 @@ interface RedditThread {
|
|
|
12928
13777
|
}
|
|
12929
13778
|
}
|
|
12930
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
|
+
|
|
12931
13841
|
declare namespace BowmarkProvider_ritani {
|
|
12932
13842
|
// ── Ritani — the unit's own declarations, verbatim ──
|
|
12933
13843
|
// Ritani's OWN shapes — not a capability contract.
|
|
@@ -13038,6 +13948,68 @@ interface RoofmaxxCostEstimate {
|
|
|
13038
13948
|
}
|
|
13039
13949
|
}
|
|
13040
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
|
+
|
|
13041
14013
|
declare namespace BowmarkProvider_samsclub {
|
|
13042
14014
|
// ── Sam's Club — the unit's own declarations, verbatim ──
|
|
13043
14015
|
interface SamsclubInstantSavingsItem {
|
|
@@ -13230,6 +14202,50 @@ interface SamsclubMembershipPlan {
|
|
|
13230
14202
|
}
|
|
13231
14203
|
}
|
|
13232
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
|
+
|
|
13233
14249
|
declare namespace BowmarkProvider_sears {
|
|
13234
14250
|
// ── Sears — the unit's own declarations, verbatim ──
|
|
13235
14251
|
interface SearsSearchPrice {
|
|
@@ -14913,6 +15929,108 @@ interface thezebraAutoQuotes {
|
|
|
14913
15929
|
}
|
|
14914
15930
|
}
|
|
14915
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
|
+
|
|
14916
16034
|
declare namespace BowmarkProvider_topviewtix {
|
|
14917
16035
|
// ── TopView Sightseeing — the unit's own declarations, verbatim ──
|
|
14918
16036
|
interface topviewtixPackageDetails {
|
|
@@ -15661,6 +16779,64 @@ interface walmartSearchResult {
|
|
|
15661
16779
|
}
|
|
15662
16780
|
}
|
|
15663
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
|
+
|
|
15664
16840
|
declare namespace BowmarkProvider_wellfound {
|
|
15665
16841
|
// ── Wellfound — the unit's own declarations, verbatim ──
|
|
15666
16842
|
interface wellfoundRow {
|
|
@@ -16692,6 +17868,7 @@ interface BowmarkProviders {
|
|
|
16692
17868
|
aiper: BowmarkProvider_aiper.Unit;
|
|
16693
17869
|
ajmadison: BowmarkProvider_ajmadison.Unit;
|
|
16694
17870
|
ashleyfurniture: BowmarkProvider_ashleyfurniture.Unit;
|
|
17871
|
+
atlasoceanvoyages: BowmarkProvider_atlasoceanvoyages.Unit;
|
|
16695
17872
|
atlasseniorliving: BowmarkProvider_atlasseniorliving.Unit;
|
|
16696
17873
|
avis: BowmarkProvider_avis.Unit;
|
|
16697
17874
|
azure: BowmarkProvider_azure.Unit;
|
|
@@ -16702,16 +17879,19 @@ interface BowmarkProviders {
|
|
|
16702
17879
|
bluehaven: BowmarkProvider_bluehaven.Unit;
|
|
16703
17880
|
bmwusa: BowmarkProvider_bmwusa.Unit;
|
|
16704
17881
|
boydsleep: BowmarkProvider_boydsleep.Unit;
|
|
17882
|
+
brixton: BowmarkProvider_brixton.Unit;
|
|
16705
17883
|
bykoket: BowmarkProvider_bykoket.Unit;
|
|
16706
17884
|
cancer: BowmarkProvider_cancer.Unit;
|
|
16707
17885
|
caraway: BowmarkProvider_caraway.Unit;
|
|
16708
17886
|
cars: BowmarkProvider_cars.Unit;
|
|
17887
|
+
chantecaille: BowmarkProvider_chantecaille.Unit;
|
|
16709
17888
|
cheapflights: BowmarkProvider_cheapflights.Unit;
|
|
16710
17889
|
chriscraft: BowmarkProvider_chriscraft.Unit;
|
|
16711
17890
|
classichome: BowmarkProvider_classichome.Unit;
|
|
16712
17891
|
classpass: BowmarkProvider_classpass.Unit;
|
|
16713
17892
|
cloudflare: BowmarkProvider_cloudflare.Unit;
|
|
16714
17893
|
cyberpowerpc: BowmarkProvider_cyberpowerpc.Unit;
|
|
17894
|
+
davidsonhomes: BowmarkProvider_davidsonhomes.Unit;
|
|
16715
17895
|
decked: BowmarkProvider_decked.Unit;
|
|
16716
17896
|
dice: BowmarkProvider_dice.Unit;
|
|
16717
17897
|
dickssportinggoods: BowmarkProvider_dickssportinggoods.Unit;
|
|
@@ -16720,10 +17900,12 @@ interface BowmarkProviders {
|
|
|
16720
17900
|
embroker: BowmarkProvider_embroker.Unit;
|
|
16721
17901
|
erieinsurance: BowmarkProvider_erieinsurance.Unit;
|
|
16722
17902
|
eventsource: BowmarkProvider_eventsource.Unit;
|
|
17903
|
+
evolutionofsmooth: BowmarkProvider_evolutionofsmooth.Unit;
|
|
16723
17904
|
extraspace: BowmarkProvider_extraspace.Unit;
|
|
16724
17905
|
firstdibs: BowmarkProvider_firstdibs.Unit;
|
|
16725
17906
|
flightradar24: BowmarkProvider_flightradar24.Unit;
|
|
16726
17907
|
ford: BowmarkProvider_ford.Unit;
|
|
17908
|
+
fourseasonsyachts: BowmarkProvider_fourseasonsyachts.Unit;
|
|
16727
17909
|
framebridge: BowmarkProvider_framebridge.Unit;
|
|
16728
17910
|
fred: BowmarkProvider_fred.Unit;
|
|
16729
17911
|
geico: BowmarkProvider_geico.Unit;
|
|
@@ -16732,8 +17914,10 @@ interface BowmarkProviders {
|
|
|
16732
17914
|
grainger: BowmarkProvider_grainger.Unit;
|
|
16733
17915
|
grandwelcome: BowmarkProvider_grandwelcome.Unit;
|
|
16734
17916
|
handypro: BowmarkProvider_handypro.Unit;
|
|
17917
|
+
hansons: BowmarkProvider_hansons.Unit;
|
|
16735
17918
|
harmar: BowmarkProvider_harmar.Unit;
|
|
16736
17919
|
hauslabs: BowmarkProvider_hauslabs.Unit;
|
|
17920
|
+
haydenhomes: BowmarkProvider_haydenhomes.Unit;
|
|
16737
17921
|
healthcare_gov: BowmarkProvider_healthcare_gov.Unit;
|
|
16738
17922
|
hellofresh: BowmarkProvider_hellofresh.Unit;
|
|
16739
17923
|
hellotend: BowmarkProvider_hellotend.Unit;
|
|
@@ -16746,7 +17930,10 @@ interface BowmarkProviders {
|
|
|
16746
17930
|
islllc: BowmarkProvider_islllc.Unit;
|
|
16747
17931
|
jennikayne: BowmarkProvider_jennikayne.Unit;
|
|
16748
17932
|
joybird: BowmarkProvider_joybird.Unit;
|
|
17933
|
+
joycefactorydirect: BowmarkProvider_joycefactorydirect.Unit;
|
|
17934
|
+
justinwine: BowmarkProvider_justinwine.Unit;
|
|
16749
17935
|
kayak: BowmarkProvider_kayak.Unit;
|
|
17936
|
+
kingsdown: BowmarkProvider_kingsdown.Unit;
|
|
16750
17937
|
kitchentuneup: BowmarkProvider_kitchentuneup.Unit;
|
|
16751
17938
|
kompan: BowmarkProvider_kompan.Unit;
|
|
16752
17939
|
labcorp: BowmarkProvider_labcorp.Unit;
|
|
@@ -16754,6 +17941,7 @@ interface BowmarkProviders {
|
|
|
16754
17941
|
liquiddeath: BowmarkProvider_liquiddeath.Unit;
|
|
16755
17942
|
lonelyplanet: BowmarkProvider_lonelyplanet.Unit;
|
|
16756
17943
|
louvershop: BowmarkProvider_louvershop.Unit;
|
|
17944
|
+
lovelybride: BowmarkProvider_lovelybride.Unit;
|
|
16757
17945
|
lufthansa: BowmarkProvider_lufthansa.Unit;
|
|
16758
17946
|
lululemon: BowmarkProvider_lululemon.Unit;
|
|
16759
17947
|
maidenhome: BowmarkProvider_maidenhome.Unit;
|
|
@@ -16766,11 +17954,13 @@ interface BowmarkProviders {
|
|
|
16766
17954
|
mixbook: BowmarkProvider_mixbook.Unit;
|
|
16767
17955
|
modularclosets: BowmarkProvider_modularclosets.Unit;
|
|
16768
17956
|
momondo: BowmarkProvider_momondo.Unit;
|
|
17957
|
+
mossyoak: BowmarkProvider_mossyoak.Unit;
|
|
16769
17958
|
naic: BowmarkProvider_naic.Unit;
|
|
16770
17959
|
namecheap: BowmarkProvider_namecheap.Unit;
|
|
16771
17960
|
newegg: BowmarkProvider_newegg.Unit;
|
|
16772
17961
|
oanda: BowmarkProvider_oanda.Unit;
|
|
16773
17962
|
otto: BowmarkProvider_otto.Unit;
|
|
17963
|
+
outdoorresearch: BowmarkProvider_outdoorresearch.Unit;
|
|
16774
17964
|
paypal: BowmarkProvider_paypal.Unit;
|
|
16775
17965
|
pirateship: BowmarkProvider_pirateship.Unit;
|
|
16776
17966
|
pizzahut: BowmarkProvider_pizzahut.Unit;
|
|
@@ -16778,9 +17968,12 @@ interface BowmarkProviders {
|
|
|
16778
17968
|
progressive: BowmarkProvider_progressive.Unit;
|
|
16779
17969
|
prose: BowmarkProvider_prose.Unit;
|
|
16780
17970
|
reddit: BowmarkProvider_reddit.Unit;
|
|
17971
|
+
rishitea: BowmarkProvider_rishitea.Unit;
|
|
16781
17972
|
ritani: BowmarkProvider_ritani.Unit;
|
|
16782
17973
|
roofmaxx: BowmarkProvider_roofmaxx.Unit;
|
|
17974
|
+
saltandstone: BowmarkProvider_saltandstone.Unit;
|
|
16783
17975
|
samsclub: BowmarkProvider_samsclub.Unit;
|
|
17976
|
+
seakeeper: BowmarkProvider_seakeeper.Unit;
|
|
16784
17977
|
sears: BowmarkProvider_sears.Unit;
|
|
16785
17978
|
seegarsfence: BowmarkProvider_seegarsfence.Unit;
|
|
16786
17979
|
selectblinds: BowmarkProvider_selectblinds.Unit;
|
|
@@ -16795,6 +17988,8 @@ interface BowmarkProviders {
|
|
|
16795
17988
|
teladoc: BowmarkProvider_teladoc.Unit;
|
|
16796
17989
|
therabody: BowmarkProvider_therabody.Unit;
|
|
16797
17990
|
thezebra: BowmarkProvider_thezebra.Unit;
|
|
17991
|
+
tilsonhomes: BowmarkProvider_tilsonhomes.Unit;
|
|
17992
|
+
titlenine: BowmarkProvider_titlenine.Unit;
|
|
16798
17993
|
topviewtix: BowmarkProvider_topviewtix.Unit;
|
|
16799
17994
|
trektravel: BowmarkProvider_trektravel.Unit;
|
|
16800
17995
|
twiddy: BowmarkProvider_twiddy.Unit;
|
|
@@ -16805,6 +18000,7 @@ interface BowmarkProviders {
|
|
|
16805
18000
|
visible: BowmarkProvider_visible.Unit;
|
|
16806
18001
|
voluspa: BowmarkProvider_voluspa.Unit;
|
|
16807
18002
|
walmart: BowmarkProvider_walmart.Unit;
|
|
18003
|
+
waterfurnace: BowmarkProvider_waterfurnace.Unit;
|
|
16808
18004
|
wellfound: BowmarkProvider_wellfound.Unit;
|
|
16809
18005
|
xpresswellnessurgentcare: BowmarkProvider_xpresswellnessurgentcare.Unit;
|
|
16810
18006
|
yourarborhome: BowmarkProvider_yourarborhome.Unit;
|