@bowmark/web 1.16.0 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,8 +5,8 @@
5
5
  // rather than imported. An `import` or `export` at the top level of this file would
6
6
  // turn it into a module and every declaration below would stop being global.
7
7
  //
8
- // Manifest version: a1e3e6de6a511c3fcbec88c14d4c7a9805aef78095475d828edf1aeaa922747f
9
- // 43 capabilities, 341 providers, 857 typed functions, 20 refused.
8
+ // Manifest version: c3b10cd54e186870ffdcb91995b4222605550dc2a437407330e776b47faaaf31
9
+ // 45 capabilities, 363 providers, 902 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
@@ -1928,6 +1928,49 @@ type CallOptions = {
1928
1928
  }
1929
1929
  }
1930
1930
 
1931
+ declare namespace BowmarkCapability_prospect_screening {
1932
+ // ── Prospect screening — mid-market + a public interactive flow — the unit's own declarations, verbatim ──
1933
+
1934
+ type InteractiveFlowKind =
1935
+ | "booking" | "quote" | "configurator" | "checkout" | "application" | "scheduling" | "other"
1936
+
1937
+ interface InteractiveFlowSignal {
1938
+ found: boolean
1939
+ kind: InteractiveFlowKind | null
1940
+ url: string | null // the homepage itself, or a link found off it
1941
+ evidence: string | null // the text/attribute that matched, for an audit trail
1942
+ }
1943
+
1944
+ interface CompanySizeSignal {
1945
+ employeeCount: number | null
1946
+ employeeCountText: string | null // e.g. "201-500 employees"
1947
+ source: "schema-org" | "unknown"
1948
+ }
1949
+
1950
+ interface ProspectScreeningResult {
1951
+ domain: string
1952
+ fetchedUrl: string
1953
+ sizeSignal: CompanySizeSignal
1954
+ interactiveFlow: InteractiveFlowSignal
1955
+ verdict: "candidate" | "no-interactive-flow" | "not-mid-market" | "insufficient-size-data"
1956
+ warnings: string[]
1957
+ }
1958
+
1959
+ /**
1960
+ * Given a company's domain, checks whether its own site publishes a mid-market employee-count
1961
+ * signal and a public interactive goal flow (booking, quote, configurator, checkout) — a fast
1962
+ * screen before spending outbound research time on a candidate.
1963
+ */
1964
+ interface Unit {
1965
+ /**
1966
+ * Fetches the homepage, reads any schema.org employee-count signal and any
1967
+ * booking/quote/configurator/checkout link or form, and returns a verdict for outbound
1968
+ * qualification.
1969
+ */
1970
+ screenCompany(domain: string): Promise<ProspectScreeningResult>;
1971
+ }
1972
+ }
1973
+
1931
1974
  declare namespace BowmarkCapability_read {
1932
1975
  // ── Read any page (markdown, text or HTML) — the unit's own declarations, verbatim ──
1933
1976
 
@@ -2204,10 +2247,14 @@ type CallOptions = {
2204
2247
  * Searches news coverage and returns stories with the headline, the outlet's own article URL,
2205
2248
  * a summary, the publisher's name and a real publication timestamp. Use this rather than `web`
2206
2249
  * whenever the question is about what happened or when — `web`'s dates are commonly the
2207
- * engine's crawl stamp, and these are the story's own. NOT MEASURED on the two limits `web`
2208
- * declares: nobody has checked whether this feed returns an empty list for a query with no
2209
- * coverage, or whether it honours operators. Treat both as unknown rather than as working
2210
- * `web`'s answers are the ones with fixtures behind them.
2250
+ * engine's crawl stamp, and these are the story's own. ZERO RESULTS HERE ARE NOT EVIDENCE OF
2251
+ * ABSENCE, and this is the opposite of `web`: unlike the web feed, the news feed CAN return an
2252
+ * empty list, so a zero is a real possible answer but it is also what a thin or throttled
2253
+ * response looks like. Measured 2026-09-08: five identical calls for one query on one route
2254
+ * inside ten seconds returned 4, 3, 2, 3 and 0 rows, and two exits disagreed (0 against 3) on
2255
+ * that query in the same minute. Every zero therefore arrives carrying a warning saying so;
2256
+ * RETRY before reporting that nothing has been written about something. Still NOT MEASURED:
2257
+ * whether this feed honours search operators — treat that as unknown.
2211
2258
  */
2212
2259
  news(query: string | { query: string, limit?: number }, limit?: number, options?: CallOptions): Promise<SearchNewsResult>;
2213
2260
  }
@@ -2563,6 +2610,27 @@ interface ForecastResult {
2563
2610
  }
2564
2611
  }
2565
2612
 
2613
+ declare namespace BowmarkCapability_web_form_fields {
2614
+ // ── Inspect a web form and count its fields — the unit's own declarations, verbatim ──
2615
+
2616
+ interface FormField { name: string | null; label: string | null; type: string; required: boolean }
2617
+ interface InspectedForm { action: string | null; method: string; fields: FormField[] }
2618
+ interface FormInspectionResult { url: string; title: string | null; forms: InspectedForm[]; fieldCount: number; warnings: string[] }
2619
+
2620
+ /**
2621
+ * Fetches a public web page and inventories every visible form field: its label, name, type
2622
+ * and required-ness. Read-only: it never fills or submits a form.
2623
+ */
2624
+ interface Unit {
2625
+ /**
2626
+ * Reads a public page and returns its forms plus a total field count. Each field includes its
2627
+ * label when the markup supplies one, name, type and required-ness. It never fills, clicks or
2628
+ * submits anything; a page with client-rendered forms or no HTML form gets an honest warning.
2629
+ */
2630
+ getFields(url: string): Promise<FormInspectionResult>;
2631
+ }
2632
+ }
2633
+
2566
2634
  declare namespace BowmarkCapability_wireless {
2567
2635
  // ── wireless plan all-in price — the unit's own declarations, verbatim ──
2568
2636
  interface CarrierAllInPrice {
@@ -2657,7 +2725,7 @@ interface a1storageUnitGroup {
2657
2725
  unitId: string; // the id getMoveInCost's unitId takes
2658
2726
  length: number; width: number; areaSqFt: number;
2659
2727
  categoryName: string; // e.g. "Medium"
2660
- features: string[];
2728
+ features: string[]; // the site's own labels — read the values off a result, never guess one from prose
2661
2729
  availableCount: number;
2662
2730
  regularPrice: number | null;
2663
2731
  promoPrice: number | null; // null when no promo is currently active
@@ -2758,7 +2826,7 @@ interface aaFlightStatusResult {
2758
2826
 
2759
2827
  interface aaReservation {
2760
2828
  recordLocator: string;
2761
- status: string | null;
2829
+ status: string | null; // the site's own labels — read the values off a result, never guess one from prose
2762
2830
  bookingTime: string | null;
2763
2831
  passengers: aaReservationPassenger[];
2764
2832
  itinerary: aaReservationSlice[];
@@ -2781,7 +2849,7 @@ interface aaReservationSegment {
2781
2849
  flightNumber: string | null;
2782
2850
  marketingCarrierCode: string | null;
2783
2851
  operatingCarrierCode: string | null;
2784
- cabinType: string | null;
2852
+ cabinType: string | null; // the site's own labels — read the values off a result, never guess one from prose
2785
2853
  bookingCode: string | null;
2786
2854
  departureDateTime: string | null;
2787
2855
  legs: aaReservationLeg[];
@@ -3020,7 +3088,7 @@ interface abercrombieProduct {
3020
3088
  listPriceHigh: number | null;
3021
3089
  currency: string;
3022
3090
  onSale: boolean;
3023
- availability: string | null;
3091
+ availability: string | null; // the site's own labels — read the values off a result, never guess one from prose
3024
3092
  rating: number | null;
3025
3093
  reviewCount: number;
3026
3094
  images: string[];
@@ -3696,7 +3764,7 @@ interface AndersenDealer {
3696
3764
  name: string;
3697
3765
  address: AndersenDealerAddress;
3698
3766
  phone: string | null;
3699
- tier: string;
3767
+ tier: string; // the site's own labels — read the values off a result, never guess one from prose
3700
3768
  accountType: string;
3701
3769
  distanceMiles: number;
3702
3770
  lat: number;
@@ -3730,7 +3798,7 @@ interface AndstrSearchArgs {
3730
3798
  bedrooms?: number;
3731
3799
  priceMin?: number;
3732
3800
  priceMax?: number;
3733
- propertyType?: string;
3801
+ propertyType?: string; // the site's own labels — read the values off a result, never guess one from prose
3734
3802
  instantBook?: boolean;
3735
3803
  page?: number;
3736
3804
  }
@@ -3761,7 +3829,7 @@ interface AndstrListingDetail {
3761
3829
  maxGuests: number;
3762
3830
  listedFromPerNight: number;
3763
3831
  currency: string;
3764
- amenities: string[];
3832
+ amenities: string[]; // the site's own labels — read the values off a result, never guess one from prose
3765
3833
  cancellationPolicy: string | null;
3766
3834
  latitude: number | null;
3767
3835
  longitude: number | null;
@@ -4155,6 +4223,35 @@ interface ArchipelagoGameOptions {
4155
4223
  }
4156
4224
  }
4157
4225
 
4226
+ declare namespace BowmarkProvider_archive_org {
4227
+ // ── Wayback Machine (archive.org) — the unit's own declarations, verbatim ──
4228
+ interface archive_orgAvailability {
4229
+ query: string;
4230
+ available: boolean;
4231
+ archivedUrl: string | null;
4232
+ archivedTimestamp: string | null; // YYYYMMDDhhmmss
4233
+ archivedStatus: string | null; // the original page's own HTTP status when captured
4234
+ }
4235
+
4236
+ /**
4237
+ * The Wayback Machine's own public availability lookup — is a site or page archived, and
4238
+ * where.
4239
+ */
4240
+ interface Unit {
4241
+ /**
4242
+ * Checks the Wayback Machine's own public availability endpoint for one site or page — a bare
4243
+ * domain ("carpetlandusa.net"), a domain plus path
4244
+ * ("carpetlandusa.net/schedule-pre-measure/"), or a full URL. Returns whether ANY capture
4245
+ * exists, and — when one does — its own browsable `archivedUrl`, its `archivedTimestamp`
4246
+ * (`YYYYMMDDhhmmss`) and the original page's `archivedStatus` at capture time. `timestamp`
4247
+ * (`YYYYMMDDhhmmss`, or a shorter prefix like `20260615`) asks for the capture CLOSEST to that
4248
+ * moment; omit it for the most recent capture. This is the availability check only — it does
4249
+ * not fetch the archived page's own content.
4250
+ */
4251
+ checkAvailability(site: string, timestamp?: string): Promise<archive_orgAvailability>;
4252
+ }
4253
+ }
4254
+
4158
4255
  declare namespace BowmarkProvider_artpix3d {
4159
4256
  // ── ArtPix 3D — the unit's own declarations, verbatim ──
4160
4257
  // ArtPix 3D's OWN shapes — not a capability contract.
@@ -4184,6 +4281,12 @@ interface Artpix3dProductPricing {
4184
4281
  * labels — the way the site's own size-picker computes it, real-time.
4185
4282
  */
4186
4283
  interface Unit {
4284
+ /**
4285
+ * Lists every ArtPix 3D Photo Crystal shape currently sold (rectangle, heart, square, …), each
4286
+ * with its product page URL.
4287
+ */
4288
+ listPhotoCrystalShapes(): Promise<Artpix3dShape[]>;
4289
+
4187
4290
  /**
4188
4291
  * Lists every crystal shape ArtPix 3D currently sells (rectangle, heart, square, …), each with
4189
4292
  * its own product page URL.
@@ -4527,7 +4630,7 @@ interface AutocampRate {
4527
4630
 
4528
4631
  interface AutocampRoomAvailability {
4529
4632
  roomCategory: string | null;
4530
- roomType: string;
4633
+ roomType: string; // the site's own labels — read the values off a result, never guess one from prose
4531
4634
  bedInfo: string | null;
4532
4635
  sleeps: string | null;
4533
4636
  rates: AutocampRate[];
@@ -5241,6 +5344,47 @@ interface BcParksAvailabilityResult {
5241
5344
  }
5242
5345
  }
5243
5346
 
5347
+ declare namespace BowmarkProvider_beaconfunding {
5348
+ // ── Beacon Funding — the unit's own declarations, verbatim ──
5349
+ type BeaconfundingLoanType = "equipmentFinancing" | "preApproval" | "cashForBusiness";
5350
+
5351
+ interface BeaconfundingFieldOption {
5352
+ value: string;
5353
+ label: string;
5354
+ }
5355
+
5356
+ interface BeaconfundingApplicationField {
5357
+ name: string;
5358
+ label: string;
5359
+ inputType: "text" | "email" | "tel" | "textarea" | "select";
5360
+ required: boolean;
5361
+ maxLength: number | null;
5362
+ pattern: string | null;
5363
+ options: BeaconfundingFieldOption[] | null;
5364
+ }
5365
+
5366
+ interface BeaconfundingApplicationFields {
5367
+ loanType: BeaconfundingLoanType;
5368
+ helpPhone: string | null;
5369
+ fields: BeaconfundingApplicationField[];
5370
+ }
5371
+
5372
+ /**
5373
+ * Equipment-financing lender. getApplicationFields reads beaconfunding.com's own credit
5374
+ * application and returns, as typed data, exactly which fields it will ask for once a caller
5375
+ * picks a loan type — never fills or submits the application itself.
5376
+ */
5377
+ interface Unit {
5378
+ /**
5379
+ * Reads beaconfunding.com's own credit application and returns the fields it declares for one
5380
+ * loan type — "equipmentFinancing", "preApproval", or "cashForBusiness" — with each field's
5381
+ * label, whether it is required, its validation pattern/max length, and (for a select) every
5382
+ * option value+label. Never fills in or submits the application.
5383
+ */
5384
+ getApplicationFields(loanType: BeaconfundingLoanType): Promise<BeaconfundingApplicationFields>;
5385
+ }
5386
+ }
5387
+
5244
5388
  declare namespace BowmarkProvider_beatthebomb {
5245
5389
  // ── Beat The Bomb — the unit's own declarations, verbatim ──
5246
5390
  interface BeatthebombMission {
@@ -5384,7 +5528,7 @@ interface BeltserviceCatalogItem {
5384
5528
  catalogNumber: string;
5385
5529
  partNumber: string;
5386
5530
  name: string;
5387
- grade: string | null;
5531
+ grade: string | null; // the site's own labels — read the values off a result, never guess one from prose
5388
5532
  specSheetUrl: string | null;
5389
5533
  detailUrl: string;
5390
5534
  quoteUrl: string;
@@ -6067,6 +6211,46 @@ interface BluehavenSiteFeasibility {
6067
6211
  }
6068
6212
  }
6069
6213
 
6214
+ declare namespace BowmarkProvider_blueribbonhomewarranty_com {
6215
+ // ── Blue Ribbon Home Warranty — the unit's own declarations, verbatim ──
6216
+ interface blueribbonhomewarranty_comPage {
6217
+ url: string;
6218
+ title: string;
6219
+ }
6220
+ interface blueribbonhomewarranty_comPageContent {
6221
+ url: string;
6222
+ title: string | null;
6223
+ description: string | null;
6224
+ headings: string[];
6225
+ body: string;
6226
+ hasApplicationForm: boolean;
6227
+ applicationFormQuestions: string[];
6228
+ }
6229
+
6230
+ /**
6231
+ * Finds and reads Blue Ribbon Home Warranty's own public pages — the apply/quote, claim and
6232
+ * renewal flows, pricing and support pages — as clean structured content, including what a
6233
+ * page's own Gravity Forms application asks for.
6234
+ */
6235
+ interface Unit {
6236
+ /**
6237
+ * Finds Blue Ribbon Home Warranty's own pages by matching query words against the site's
6238
+ * sitemap (e.g. "apply online", "file a claim", "renew warranty", "pricing") — ranked by how
6239
+ * many words matched, up to 10 results. Returns [] when nothing matches.
6240
+ */
6241
+ search(query: string): Promise<blueribbonhomewarranty_comPage[]>;
6242
+
6243
+ /**
6244
+ * Reads one Blue Ribbon Home Warranty page (a url returned by search) and returns its title,
6245
+ * meta description, headings and clean body text. When the page embeds one of the site's
6246
+ * Gravity Forms application/claim/renewal flows, also returns that form's own section headings
6247
+ * and top-level question labels. THROWS if the page does not exist (404) or names a host other
6248
+ * than blueribbonhomewarranty.com.
6249
+ */
6250
+ getPage(url: string): Promise<blueribbonhomewarranty_comPageContent>;
6251
+ }
6252
+ }
6253
+
6070
6254
  declare namespace BowmarkProvider_bluesignal {
6071
6255
  // ── Blue Signal Search — the unit's own declarations, verbatim ──
6072
6256
  interface BlueSignalJobSummary {
@@ -6149,7 +6333,7 @@ interface BmwusaCpoVehicle {
6149
6333
  odometer: number;
6150
6334
  price: number;
6151
6335
  drivetrain: string;
6152
- fuelType: string;
6336
+ fuelType: string; // the site's own labels — read the values off a result, never guess one from prose
6153
6337
  vdpUrl: string;
6154
6338
  photos: string[];
6155
6339
  dealer: BmwusaCpoDealer;
@@ -6171,10 +6355,11 @@ interface BmwusaModelTrim {
6171
6355
  zeroToSixty: number | null;
6172
6356
  horsepower: number | null;
6173
6357
  startingMsrp: number | null;
6358
+ buildable: boolean;
6174
6359
  engineType: string | null;
6175
6360
  drivetrain: string | null;
6176
6361
  transmission: string | null;
6177
- fuelType: string | null;
6362
+ fuelType: string | null; // the site's own labels — read the values off a result, never guess one from prose
6178
6363
  fuelEfficiency: { city: number | null; highway: number | null; combined: number | null; unit: string } | null;
6179
6364
  seatingCapacity: number | null;
6180
6365
  }
@@ -6966,7 +7151,7 @@ interface CabinsforyouCabinDetail {
6966
7151
  sleeps: number | null;
6967
7152
  parking: string | null;
6968
7153
  petsAllowed: boolean | null;
6969
- amenities: string[];
7154
+ amenities: string[]; // the site's own labels — read the values off a result, never guess one from prose
6970
7155
  rating: number | null;
6971
7156
  reviewCount: number | null;
6972
7157
  description: string;
@@ -7462,7 +7647,7 @@ interface CglOption {
7462
7647
 
7463
7648
  interface CglVariant {
7464
7649
  sku: string;
7465
- stockStatus: string;
7650
+ stockStatus: string; // the site's own labels — read the values off a result, never guess one from prose
7466
7651
  price: number;
7467
7652
  priceFormatted: string;
7468
7653
  selections: Record<string, number>; // attributeCode -> valueIndex
@@ -7473,7 +7658,7 @@ interface CglProduct {
7473
7658
  sku: string;
7474
7659
  name: string;
7475
7660
  url: string;
7476
- stockStatus: string;
7661
+ stockStatus: string; // the site's own labels — read the values off a result, never guess one from prose
7477
7662
  basePrice: number;
7478
7663
  basePriceFormatted: string;
7479
7664
  options: CglOption[];
@@ -7484,7 +7669,7 @@ interface CglPriceResult {
7484
7669
  urlKey: string;
7485
7670
  sku: string;
7486
7671
  variantSku: string | null; // null until every multi-choice group is picked
7487
- stockStatus: string | null;
7672
+ stockStatus: string | null; // the site's own labels — read the values off a result, never guess one from prose
7488
7673
  price: number | null;
7489
7674
  priceFormatted: string | null;
7490
7675
  applied: { group: string; choice: string }[];
@@ -7501,7 +7686,7 @@ interface CglCartHandoff {
7501
7686
  applied: { group: string; choice: string }[];
7502
7687
  price: number | null;
7503
7688
  priceFormatted: string | null;
7504
- stockStatus: string | null;
7689
+ stockStatus: string | null; // the site's own labels — read the values off a result, never guess one from prose
7505
7690
  missingGroups: string[];
7506
7691
  unmatched: string[];
7507
7692
  }
@@ -7976,6 +8161,46 @@ interface CasaDragonesNearbyRetailers {
7976
8161
  }
7977
8162
  }
7978
8163
 
8164
+ declare namespace BowmarkProvider_cascadiaseniorliving_com {
8165
+ // ── Cascadia Senior Living — the unit's own declarations, verbatim ──
8166
+ interface cascadiaseniorliving_comPage {
8167
+ id: number;
8168
+ title: string;
8169
+ url: string;
8170
+ slug: string;
8171
+ parent: number; // parent page id, or 0 for a top-level page
8172
+ }
8173
+ interface cascadiaseniorliving_comPageDetail {
8174
+ id: number;
8175
+ title: string;
8176
+ url: string;
8177
+ slug: string;
8178
+ body: string; // plain text, markup stripped
8179
+ hasContactForm: boolean; // a Gravity Forms contact/inquiry form is embedded
8180
+ }
8181
+
8182
+ /**
8183
+ * Reads Cascadia Senior Living's own site (why-us, living options, communities overview,
8184
+ * contact) — a full page index and any one page's own content as plain text, off the site's
8185
+ * own WordPress REST API rather than a scrape.
8186
+ */
8187
+ interface Unit {
8188
+ /**
8189
+ * Lists every page cascadiaseniorliving.com publishes — title, url, slug and parent — off the
8190
+ * site's own WordPress REST API page index.
8191
+ */
8192
+ listSitePages(): Promise<cascadiaseniorliving_comPage[]>;
8193
+
8194
+ /**
8195
+ * Reads one page by its url (from a `listSitePages` result) or bare slug (e.g.
8196
+ * "living-options") and returns its title and body as plain text, plus whether it embeds one
8197
+ * of the site's own contact/inquiry forms. THROWS if no page matches, or if a url names a host
8198
+ * other than cascadiaseniorliving.com.
8199
+ */
8200
+ getSitePage(pageRef: string): Promise<cascadiaseniorliving_comPageDetail>;
8201
+ }
8202
+ }
8203
+
7979
8204
  declare namespace BowmarkProvider_cbhhomes {
7980
8205
  // ── CBH Homes — the unit's own declarations, verbatim ──
7981
8206
  interface CbhListing {
@@ -7983,7 +8208,7 @@ interface CbhListing {
7983
8208
  mls: number;
7984
8209
  url: string;
7985
8210
  image: string | null;
7986
- status: string;
8211
+ status: string; // the site's own labels — read the values off a result, never guess one from prose
7987
8212
  isSold: boolean;
7988
8213
  isReserved: boolean;
7989
8214
  address: string;
@@ -8004,7 +8229,7 @@ interface CbhListing {
8004
8229
  sqft: number | null;
8005
8230
  price: number;
8006
8231
  priceMonthly: number | null;
8007
- amenities: string[];
8232
+ amenities: string[]; // the site's own labels — read the values off a result, never guess one from prose
8008
8233
  salesCenter: string | null;
8009
8234
  schoolDistrict: string | null;
8010
8235
  daysOnMarket: number | null;
@@ -8600,6 +8825,80 @@ interface ChriscraftPriceResult {
8600
8825
  }
8601
8826
  }
8602
8827
 
8828
+ declare namespace BowmarkProvider_christianbrothersauto {
8829
+ // ── Christian Brothers Automotive — the unit's own declarations, verbatim ──
8830
+ interface ChristianBrothersAutoService {
8831
+ serviceId: number;
8832
+ text: string;
8833
+ }
8834
+ interface ChristianBrothersAutoShop {
8835
+ slug: string;
8836
+ shopId: number;
8837
+ locationId: string;
8838
+ city: string;
8839
+ state: string;
8840
+ street: string;
8841
+ zip: string;
8842
+ phone: string;
8843
+ openingTime: string;
8844
+ closingTime: string;
8845
+ schedulerLive: boolean;
8846
+ isAfterHoursDropoff: boolean;
8847
+ services: ChristianBrothersAutoService[];
8848
+ schedulerUrl: string;
8849
+ }
8850
+ interface ChristianBrothersAutoSlotWindow {
8851
+ fromTime: string;
8852
+ endTime: string;
8853
+ availableSlots: number;
8854
+ totalSlots: number;
8855
+ }
8856
+ interface ChristianBrothersAutoDaySlots {
8857
+ date: string;
8858
+ availableTimes: number;
8859
+ slots: ChristianBrothersAutoSlotWindow[];
8860
+ }
8861
+ interface ChristianBrothersAutoAvailability {
8862
+ shop: ChristianBrothersAutoShop;
8863
+ service: ChristianBrothersAutoService;
8864
+ appointmentType: "dropoff" | "ahdo";
8865
+ days: ChristianBrothersAutoDaySlots[];
8866
+ schedulerUrl: string;
8867
+ }
8868
+ interface GetShopDetailsArgs {
8869
+ shop: string;
8870
+ }
8871
+ interface CheckAppointmentAvailabilityArgs {
8872
+ shop: string;
8873
+ service: string;
8874
+ appointmentType?: "dropoff" | "ahdo";
8875
+ days?: number;
8876
+ }
8877
+
8878
+ /**
8879
+ * Christian Brothers Automotive's public appointment scheduler — resolve a shop and check its
8880
+ * real open appointment slots for a service, straight from the site's own scheduler backend,
8881
+ * no vehicle/name/email/phone required.
8882
+ */
8883
+ interface Unit {
8884
+ /**
8885
+ * Resolves a Christian Brothers Automotive shop — by its scheduler slug ("liberty-lake"), a
8886
+ * plain city/franchise name ("Liberty Lake"), or a scheduler.cbac.com/cbac.com shop URL — to
8887
+ * that shop's real public details: address, hours, phone, whether its online scheduler is
8888
+ * live, and its own list of bookable services with the site's own service ids.
8889
+ */
8890
+ getShopDetails(args: GetShopDetailsArgs): Promise<ChristianBrothersAutoShop>;
8891
+
8892
+ /**
8893
+ * Checks real, currently-open appointment slots at one Christian Brothers Automotive shop for
8894
+ * a named service (matched against that shop's own service list) and visit type — reachable
8895
+ * with no vehicle info, name, email or phone. Returns real per-day open time windows plus the
8896
+ * exact scheduler URL to finish booking.
8897
+ */
8898
+ checkAppointmentAvailability(args: CheckAppointmentAvailabilityArgs): Promise<ChristianBrothersAutoAvailability>;
8899
+ }
8900
+ }
8901
+
8603
8902
  declare namespace BowmarkProvider_classichome {
8604
8903
  // ── Classic Home — the unit's own declarations, verbatim ──
8605
8904
  // Classic Home's OWN shapes — not a capability contract.
@@ -8669,6 +8968,48 @@ interface ClassicHomeCartHandoff {
8669
8968
  }
8670
8969
  }
8671
8970
 
8971
+ declare namespace BowmarkProvider_classicrockfab {
8972
+ // ── Classic Rock Fabrication — the unit's own declarations, verbatim ──
8973
+ interface ClassicRockAppointmentType {
8974
+ id: number;
8975
+ name: string;
8976
+ location: string | null;
8977
+ durationMinutes: number;
8978
+ price: string;
8979
+ bookingUrl: string;
8980
+ }
8981
+ interface ClassicRockAvailabilitySlot {
8982
+ date: string;
8983
+ time: string;
8984
+ slotsAvailable: number;
8985
+ }
8986
+ interface ClassicRockAvailability {
8987
+ appointmentTypeId: number;
8988
+ timezone: string;
8989
+ slots: ClassicRockAvailabilitySlot[];
8990
+ bookingUrl: string;
8991
+ }
8992
+
8993
+ /**
8994
+ * Classic Rock Fabrication's own public Acuity scheduler — list design-center appointment
8995
+ * types across all four locations, then read real live availability and the booking handoff
8996
+ * for one.
8997
+ */
8998
+ interface Unit {
8999
+ /**
9000
+ * Lists Classic Rock's public design-center appointment types, optionally filtered by a
9001
+ * location substring (e.g. "Mechanicsburg", "Pittsburgh").
9002
+ */
9003
+ listAppointmentTypes(locationQuery?: string): Promise<ClassicRockAppointmentType[]>;
9004
+
9005
+ /**
9006
+ * Given an appointmentTypeId from listAppointmentTypes, returns real open time slots over the
9007
+ * next several days plus the booking-handoff URL.
9008
+ */
9009
+ checkAvailability(arg: { appointmentTypeId: number, days?: number }): Promise<ClassicRockAvailability>;
9010
+ }
9011
+ }
9012
+
8672
9013
  declare namespace BowmarkProvider_classpass {
8673
9014
  // ── ClassPass — the unit's own declarations, verbatim ──
8674
9015
  /** Everything /v2/venues publishes about one studio — a superset of
@@ -9028,6 +9369,25 @@ interface claudeMarketplacesListingLink {
9028
9369
  }
9029
9370
  }
9030
9371
 
9372
+ declare namespace BowmarkProvider_clboyd {
9373
+ // ── CL Boyd — the unit's own declarations, verbatim ──
9374
+ interface CLBoydSearchArgs { category: string; manufacturer?: string; minYear?: number; maxYear?: number; minPrice?: number; maxPrice?: number; minHours?: number; maxHours?: number; sort?: string; }
9375
+ interface CLBoydEquipment { id: string; name: string; url: string; price: number | null; location: string | null; year: number | null; hours: number | null; stockNumber: string | null; }
9376
+ interface CLBoydSearchResult { equipment: CLBoydEquipment[]; }
9377
+
9378
+ /**
9379
+ * CL Boyd's live used-equipment inventory filter with current price, hours, stock number and
9380
+ * detail-page handoff.
9381
+ */
9382
+ interface Unit {
9383
+ /**
9384
+ * Runs CL Boyd's live used-equipment filter and returns current matching machines with price,
9385
+ * hours, stock number and a detail-page handoff.
9386
+ */
9387
+ searchUsedEquipment(args: CLBoydSearchArgs): Promise<CLBoydSearchResult>;
9388
+ }
9389
+ }
9390
+
9031
9391
  declare namespace BowmarkProvider_cleanairlawncare {
9032
9392
  // ── Clean Air Lawn Care — the unit's own declarations, verbatim ──
9033
9393
  interface CleanAirEstimateAvailability {
@@ -9118,7 +9478,7 @@ interface CloudflareComparePlansResult {
9118
9478
 
9119
9479
  interface CloudflareDomainSuggestion {
9120
9480
  name: string;
9121
- availability: string;
9481
+ availability: string; // the site's own labels — read the values off a result, never guess one from prose
9122
9482
  premium: boolean;
9123
9483
  price: number | null;
9124
9484
  renewal: number | null;
@@ -9390,6 +9750,45 @@ interface CouponFollowOffer {
9390
9750
  }
9391
9751
  }
9392
9752
 
9753
+ declare namespace BowmarkProvider_credibly_com {
9754
+ // ── Credibly business-financing application — the unit's own declarations, verbatim ──
9755
+ interface CrediblyApplicationField {
9756
+ name: string;
9757
+ label: string;
9758
+ type: string;
9759
+ required: boolean;
9760
+ options: Array<{ label: string; value: string }>;
9761
+ }
9762
+ interface CrediblyApplicationForm {
9763
+ applicationUrl: string;
9764
+ submitText: string;
9765
+ fields: CrediblyApplicationField[];
9766
+ }
9767
+ interface CrediblyEligibilityRequirements {
9768
+ applicationUrl: string;
9769
+ requirements: string[];
9770
+ }
9771
+
9772
+ /**
9773
+ * Reads the public Credibly application form's visible questions and its published eligibility
9774
+ * requirements, without filling or submitting anything.
9775
+ */
9776
+ interface Unit {
9777
+ /**
9778
+ * Returns every visible question on Credibly's public business-financing application — label,
9779
+ * field type, required flag and select choices — plus the page URL and submit text. It only
9780
+ * reads the published form definition; it never fills or submits an application.
9781
+ */
9782
+ getApplicationForm(): Promise<CrediblyApplicationForm>;
9783
+
9784
+ /**
9785
+ * Returns Credibly's own published eligibility requirements for its small-business financing
9786
+ * (time in business, credit score, monthly revenue) from its public FAQ, verbatim.
9787
+ */
9788
+ getEligibilityRequirements(): Promise<CrediblyEligibilityRequirements>;
9789
+ }
9790
+ }
9791
+
9393
9792
  declare namespace BowmarkProvider_cruiselakegeneva {
9394
9793
  // ── Cruise Lake Geneva — the unit's own declarations, verbatim ──
9395
9794
  interface CruiseLakeGenevaTour {
@@ -9620,6 +10019,87 @@ interface CyberpowerpcPriceResult {
9620
10019
  }
9621
10020
  }
9622
10021
 
10022
+ declare namespace BowmarkProvider_dahlconsulting {
10023
+ // ── Dahl Consulting — the unit's own declarations, verbatim ──
10024
+ // Dahl Consulting's OWN shapes — not a capability contract.
10025
+
10026
+ interface dahlconsultingJobSummary {
10027
+ title: string;
10028
+ url: string; // the id getJob takes
10029
+ postId: string; // the numeric id every job URL ends with
10030
+ city: string; state: string;
10031
+ employmentType: string; // e.g. "CONTRACTOR"
10032
+ payMin: number | null; payMax: number | null; payUnit: string | null; // e.g. "HOUR"
10033
+ datePosted: string; // ISO date
10034
+ }
10035
+
10036
+ interface dahlconsultingJob extends dahlconsultingJobSummary {
10037
+ industry: string;
10038
+ validThrough: string; // ISO date the posting expires
10039
+ description: string; // the full posting text
10040
+ applyUrl: string; // Dahl's own quick-apply page for this job — never submitted by this provider
10041
+ }
10042
+
10043
+ interface dahlconsultingSearchFilters { query?: string; location?: string; limit?: number }
10044
+
10045
+ /**
10046
+ * Searches Dahl Consulting's own live job board and reads a job's full posting — real title,
10047
+ * location, pay range, employment type and description off the site's own structured data —
10048
+ * plus a ready-to-open apply link, the way ChatGPT's web_search can find the listing but
10049
+ * cannot fill or submit the form.
10050
+ */
10051
+ interface Unit {
10052
+ /**
10053
+ * Searches Dahl Consulting's live job board — every open role, optionally narrowed by keyword
10054
+ * and/or city/state — off the site's own sitemap and each matching posting's structured data.
10055
+ * Returns the url/postId getJob takes. No filter returns the most recently posted openings.
10056
+ */
10057
+ searchJobs(filters?: dahlconsultingSearchFilters): Promise<dahlconsultingJobSummary[]>;
10058
+
10059
+ /**
10060
+ * Reads one job posting's full detail off its own page — complete description, industry,
10061
+ * posted/expiry dates and pay — plus a ready-to-open applyUrl on Dahl's own careers site.
10062
+ * THROWS on an unknown/removed url — call searchJobs() first.
10063
+ */
10064
+ getJob(url: string): Promise<dahlconsultingJob>;
10065
+ }
10066
+ }
10067
+
10068
+ declare namespace BowmarkProvider_dansons {
10069
+ // ── Dansons (Pit Boss) — the unit's own declarations, verbatim ──
10070
+ interface dansonsRegisterableProduct {
10071
+ productId: string;
10072
+ title: string;
10073
+ sku: string;
10074
+ price: number;
10075
+ imageUrl: string | null;
10076
+ }
10077
+
10078
+ /**
10079
+ * Identifies which Pit Boss grill/smoker a free-text description matches, and lists the
10080
+ * products eligible for warranty registration — read live off Pit Boss's own registration-page
10081
+ * catalog.
10082
+ */
10083
+ interface Unit {
10084
+ /**
10085
+ * Lists every Pit Boss product eligible for warranty registration — the exact catalog the
10086
+ * registration page's own product-search reads from. Each row carries the real title, SKU,
10087
+ * current price and product image, direct from Pit Boss's Storefront API.
10088
+ */
10089
+ listRegisterableProducts(): Promise<dansonsRegisterableProduct[]>;
10090
+
10091
+ /**
10092
+ * Identifies which Pit Boss product(s) a free-text description matches — the same normalized
10093
+ * substring match the registration page's own typeahead performs when a shopper types e.g.
10094
+ * 'PB1230' or 'Lockhart Platinum'. Returns every registerable product whose title, SKU or
10095
+ * product id contains the (normalized) query; empty when nothing matches. Use this before
10096
+ * registering a product to confirm the exact model, without needing the shopper's serial
10097
+ * number or purchase info.
10098
+ */
10099
+ identifyProduct(query: string): Promise<dansonsRegisterableProduct[]>;
10100
+ }
10101
+ }
10102
+
9623
10103
  declare namespace BowmarkProvider_davidsonhomes {
9624
10104
  // ── Davidson Homes — the unit's own declarations, verbatim ──
9625
10105
  // Davidson Homes' OWN shapes — not a capability contract.
@@ -9676,7 +10156,7 @@ interface DavidsonhomesHomeSummary {
9676
10156
  interface DavidsonhomesCommunityDetail {
9677
10157
  title: string;
9678
10158
  path: string;
9679
- status: string;
10159
+ status: string; // the site's own labels — read the values off a result, never guess one from prose
9680
10160
  priceRange: DavidsonhomesRange;
9681
10161
  sqftRange: DavidsonhomesRange;
9682
10162
  phone: string | null;
@@ -9920,7 +10400,7 @@ interface DdOption {
9920
10400
 
9921
10401
  interface DdVariant {
9922
10402
  sku: string;
9923
- stockStatus: string;
10403
+ stockStatus: string; // the site's own labels — read the values off a result, never guess one from prose
9924
10404
  price: number;
9925
10405
  priceFormatted: string;
9926
10406
  selections: Record<string, number>; // attributeCode -> valueIndex
@@ -9931,7 +10411,7 @@ interface DdProduct {
9931
10411
  sku: string;
9932
10412
  name: string;
9933
10413
  url: string;
9934
- stockStatus: string;
10414
+ stockStatus: string; // the site's own labels — read the values off a result, never guess one from prose
9935
10415
  basePrice: number;
9936
10416
  basePriceFormatted: string;
9937
10417
  options: DdOption[];
@@ -9942,7 +10422,7 @@ interface DdPriceResult {
9942
10422
  urlKey: string;
9943
10423
  sku: string;
9944
10424
  variantSku: string | null; // null until every multi-choice group is picked
9945
- stockStatus: string | null;
10425
+ stockStatus: string | null; // the site's own labels — read the values off a result, never guess one from prose
9946
10426
  price: number | null;
9947
10427
  priceFormatted: string | null;
9948
10428
  applied: { group: string; choice: string }[];
@@ -9959,7 +10439,7 @@ interface DdCartHandoff {
9959
10439
  applied: { group: string; choice: string }[];
9960
10440
  price: number | null;
9961
10441
  priceFormatted: string | null;
9962
- stockStatus: string | null;
10442
+ stockStatus: string | null; // the site's own labels — read the values off a result, never guess one from prose
9963
10443
  missingGroups: string[];
9964
10444
  unmatched: string[];
9965
10445
  }
@@ -10009,6 +10489,175 @@ interface DdCartHandoff {
10009
10489
  }
10010
10490
  }
10011
10491
 
10492
+ declare namespace BowmarkProvider_deltadentalma {
10493
+ // ── Delta Dental of Massachusetts — the unit's own declarations, verbatim ──
10494
+ // Delta Dental of Massachusetts's OWN shapes — not a capability contract.
10495
+
10496
+ interface deltadentalmaDentist {
10497
+ providerServiceOfficeId: string; // the site's own composite id
10498
+ npi: string | null;
10499
+ firstName: string; lastName: string;
10500
+ specialty: string[]; // e.g. ["General Dentist"]
10501
+ languages: string[]; // e.g. ["English", "Portuguese"]
10502
+ acceptsNewPatients: boolean; // true on ANY in-network product returned
10503
+ networks: string[]; // in-network product names, e.g. ["Delta Dental PPO"]
10504
+ businessName: string; address: string; city: string; state: string; zip: string;
10505
+ phone: string | null;
10506
+ rating: number | null; // 1-5, the site's own patient-experience score
10507
+ distanceMiles: number | null;
10508
+ }
10509
+
10510
+ interface deltadentalmaSearchFilters {
10511
+ zip: string; // a ZIP or city/town, free text — the site's own field
10512
+ radiusMiles?: number; // default 25
10513
+ network?: string; // a network code, e.g. "PPOPlusPremier"; omit for all
10514
+ specialty?: string; // a specialty code, e.g. "000" (General Dentist); omit for all
10515
+ language?: string; // a language code, e.g. "POR" (Portuguese); omit for none
10516
+ gender?: "F" | "M";
10517
+ limit?: number; // default 20, max 100
10518
+ }
10519
+
10520
+ /**
10521
+ * Searches Delta Dental of Massachusetts's own Find-a-Dentist directory for in-network
10522
+ * dentists and clinics near a ZIP — the same live provider data the site's `/fad/search`
10523
+ * widget renders, filterable by network, specialty, language and gender.
10524
+ */
10525
+ interface Unit {
10526
+ /**
10527
+ * Searches Delta Dental of Massachusetts's live Find-a-Dentist directory near a ZIP, filtered
10528
+ * by network, specialty, language and/or gender. Returns real in-network providers with
10529
+ * address, phone, distance and accepts-new-patients status.
10530
+ */
10531
+ search(filters: deltadentalmaSearchFilters): Promise<deltadentalmaDentist[]>;
10532
+
10533
+ /**
10534
+ * Returns the ISO timestamp the directory data was last refreshed, so a caller can say how
10535
+ * fresh a search result set is.
10536
+ */
10537
+ lastUpdated(): Promise<{ lastUpdated: string }>;
10538
+ }
10539
+ }
10540
+
10541
+ declare namespace BowmarkProvider_dentalplans {
10542
+ // ── DentalPlans.com — the unit's own declarations, verbatim ──
10543
+ // DentalPlans.com's OWN shapes — not a capability contract.
10544
+
10545
+ interface DentalplansPlanListing {
10546
+ planId: string;
10547
+ name: string;
10548
+ carrier: string;
10549
+ planType: "savings" | "insurance";
10550
+ annualPrice: number;
10551
+ monthlyPrice: number;
10552
+ dentistsNearYou: number | null;
10553
+ detailUrl: string;
10554
+ }
10555
+
10556
+ interface DentalplansSearchResult {
10557
+ zip: string;
10558
+ plans: DentalplansPlanListing[];
10559
+ resultCount: number;
10560
+ }
10561
+
10562
+ interface DentalplansProcedureSaving {
10563
+ description: string;
10564
+ code: string;
10565
+ priceWithoutPlan: number;
10566
+ priceWithPlan: number;
10567
+ savingsPercent: number;
10568
+ }
10569
+
10570
+ interface DentalplansPlanDetail {
10571
+ name: string;
10572
+ description: string;
10573
+ url: string;
10574
+ procedures: DentalplansProcedureSaving[];
10575
+ }
10576
+
10577
+ /**
10578
+ * DentalPlans.com's own live, location-filtered plan search (/plan-search-results/?zip=) off
10579
+ * the site's server-rendered results — real matched dental savings plans and dental insurance
10580
+ * plans with real pricing and in-network dentist counts, not a stale mirror — plus one plan's
10581
+ * own full detail and sample procedure-savings table.
10582
+ */
10583
+ interface Unit {
10584
+ /**
10585
+ * Runs DentalPlans.com's own live plan search for a 5-digit US zip and returns the real
10586
+ * matched dental savings plans and dental insurance plans it currently lists, in the site's
10587
+ * own order, with real pricing and in-network dentist counts. The query ChatGPT's fit-check
10588
+ * (agents/prospector-2/packets/dentalplans.com/angle.md) could not actually run: it cannot
10589
+ * submit the site's own ZIP-entry form.
10590
+ */
10591
+ search(zip: string): Promise<DentalplansSearchResult>;
10592
+
10593
+ /**
10594
+ * Reads one plan's own detail page — its marketing description and the site's own 'Common
10595
+ * Procedures' sample savings table (real per-procedure price with vs. without the plan). `url`
10596
+ * is a plan URL from a `search` result.
10597
+ */
10598
+ getPlan(url: string): Promise<DentalplansPlanDetail>;
10599
+ }
10600
+ }
10601
+
10602
+ declare namespace BowmarkProvider_detailxperts {
10603
+ // ── DetailXPerts — the unit's own declarations, verbatim ──
10604
+ interface DetailxpertsServiceArea {
10605
+ serviced: boolean;
10606
+ driveTimeMinutes: number | null;
10607
+ driveDistanceMiles: number | null;
10608
+ driveFeeAmount: number | null;
10609
+ message: string | null;
10610
+ }
10611
+ interface DetailxpertsVehicleType {
10612
+ position: number;
10613
+ title: string;
10614
+ imageUrl: string;
10615
+ }
10616
+ interface DetailxpertsQuotePackage {
10617
+ title: string;
10618
+ points: string[];
10619
+ price: number;
10620
+ timeMinutes: number;
10621
+ }
10622
+ interface DetailxpertsQuote {
10623
+ vehicleTitle: string;
10624
+ dirtUpcharge: number;
10625
+ hairUpcharge: number;
10626
+ dirtInteriorUpcharge: number;
10627
+ packages: DetailxpertsQuotePackage[];
10628
+ }
10629
+
10630
+ /**
10631
+ * Whether an address falls inside a DetailXPerts mobile-detailing franchise's real service
10632
+ * area (with the site's own computed drive time/distance/fee), and a real, input-varying price
10633
+ * quote for a vehicle type and dirt/pet-hair/interior condition — read off the same
10634
+ * admin-ajax.php actions the site's own booking flow calls.
10635
+ */
10636
+ interface Unit {
10637
+ /**
10638
+ * Checks whether an address is inside a DetailXPerts franchise's real mobile service area, and
10639
+ * when it is, returns the site's own computed drive time (minutes), distance (miles) and drive
10640
+ * fee. Returns serviced: false with the site's own message when it's outside every franchise's
10641
+ * territory.
10642
+ */
10643
+ checkServiceArea(args: { address1: string; address2?: string; city: string; state: string; zip: string }): Promise<DetailxpertsServiceArea>;
10644
+
10645
+ /**
10646
+ * Lists the site's own vehicle-size categories (Micro, Hatchback, Sedan, SUV, Van, …), each
10647
+ * with the 1-based position getQuote's vehiclePosition takes.
10648
+ */
10649
+ listVehicleTypes(): Promise<DetailxpertsVehicleType[]>;
10650
+
10651
+ /**
10652
+ * Prices a mobile detail for one vehicle type and a dirt/pet-hair/interior-dirt condition (1
10653
+ * light to 3 heavy, per the site's own scale), returning the real 4-package ladder (title,
10654
+ * checklist, price, time) with the condition upcharges applied. Call listVehicleTypes() for
10655
+ * real vehiclePosition values.
10656
+ */
10657
+ getQuote(args: { vehiclePosition: number; dirtLevel: number; hairLevel: number; dirtInteriorLevel: number }): Promise<DetailxpertsQuote>;
10658
+ }
10659
+ }
10660
+
10012
10661
  declare namespace BowmarkProvider_developersopenai {
10013
10662
  // ── OpenAI Developer Docs — the unit's own declarations, verbatim ──
10014
10663
  interface DevelopersOpenaiDocPage {
@@ -10599,6 +11248,55 @@ interface DisneyTicketPrice {
10599
11248
  }
10600
11249
  }
10601
11250
 
11251
+ declare namespace BowmarkProvider_donsappliances {
11252
+ // ── Don's Appliances — the unit's own declarations, verbatim ──
11253
+ interface DonsAppliancesListing {
11254
+ name: string;
11255
+ url: string;
11256
+ price: number;
11257
+ sku: string;
11258
+ imageUrl: string | null;
11259
+ }
11260
+ interface DonsAppliancesProduct {
11261
+ name: string;
11262
+ modelNumber: string | null;
11263
+ sku: string;
11264
+ brand: string | null;
11265
+ price: number;
11266
+ regularPrice: number;
11267
+ inStock: boolean;
11268
+ inventoryLabel: string | null;
11269
+ url: string;
11270
+ }
11271
+ interface DonsAppliancesSearchArgs {
11272
+ category: string;
11273
+ maxPrice?: number;
11274
+ }
11275
+
11276
+ /**
11277
+ * Browses Don's Appliances' own public catalog and reads a product's live price, availability
11278
+ * and inventory-label wording straight off the site's own data — no browser.
11279
+ */
11280
+ interface Unit {
11281
+ /**
11282
+ * Browses one of Don's Appliances' catalog categories (the slug from a URL like
11283
+ * https://www.donsappliances.com/catalog/<category>, e.g.
11284
+ * "shop-all-refrigerators-upright-freezers") and returns up to 24 listed products — name,
11285
+ * product URL, current price and SKU — optionally filtered to `maxPrice` or under. Call
11286
+ * `getProduct` on a returned `url` for full detail (brand, model number, live stock).
11287
+ */
11288
+ search(args: DonsAppliancesSearchArgs): Promise<DonsAppliancesListing[]>;
11289
+
11290
+ /**
11291
+ * Reads one Don's Appliances product page (a URL search() already returned) and returns its
11292
+ * brand, model number, current sale price, regular price, live in-stock flag and the site's
11293
+ * own inventory-label wording (e.g. "Limited Stock") — the computed result a shopper checks
11294
+ * before heading to Don's own Add To Cart / checkout on that same page.
11295
+ */
11296
+ getProduct(url: string): Promise<DonsAppliancesProduct>;
11297
+ }
11298
+ }
11299
+
10602
11300
  declare namespace BowmarkProvider_doordash {
10603
11301
  // ── DoorDash — the unit's own declarations, verbatim ──
10604
11302
  interface DoordashSearchArgs {
@@ -10678,7 +11376,7 @@ interface ebayItem {
10678
11376
  itemId: string;
10679
11377
  title: string;
10680
11378
  price: { value: string; currency: string } | null;
10681
- condition: string | null;
11379
+ condition: string | null; // the site's own labels — read the values off a result, never guess one from prose
10682
11380
  buyingOptions: string[];
10683
11381
  url: string;
10684
11382
  imageUrl: string | null;
@@ -10770,6 +11468,81 @@ interface EmbrokerQuoteEntryPoint {
10770
11468
  }
10771
11469
  }
10772
11470
 
11471
+ declare namespace BowmarkProvider_epromos {
11472
+ // ── ePromos — the unit's own declarations, verbatim ──
11473
+ // ePromos' OWN shapes — not a capability contract.
11474
+
11475
+ interface EpromosProductOption {
11476
+ groupLabel: string;
11477
+ label: string;
11478
+ isDefault: boolean;
11479
+ }
11480
+
11481
+ interface EpromosCustomizationField {
11482
+ label: string;
11483
+ inputType: string;
11484
+ required: boolean;
11485
+ }
11486
+
11487
+ interface EpromosBulkPricingTier {
11488
+ minQuantity: number;
11489
+ unitPrice: number;
11490
+ }
11491
+
11492
+ interface EpromosProductConfiguration {
11493
+ name: string;
11494
+ sku: string;
11495
+ url: string;
11496
+ colorOptions: EpromosProductOption[];
11497
+ customizationFields: EpromosCustomizationField[];
11498
+ bulkPricing: EpromosBulkPricingTier[];
11499
+ }
11500
+
11501
+ interface EpromosBulkQuote {
11502
+ productUrl: string;
11503
+ requestedQuantity: number;
11504
+ tierMinQuantity: number;
11505
+ unitPrice: number;
11506
+ totalPrice: number;
11507
+ currency: "USD";
11508
+ }
11509
+
11510
+ interface EpromosCategoryProduct {
11511
+ name: string;
11512
+ url: string;
11513
+ }
11514
+
11515
+ interface EpromosCategoryListing {
11516
+ categoryUrl: string;
11517
+ products: EpromosCategoryProduct[];
11518
+ }
11519
+
11520
+ /**
11521
+ * ePromos' own product configurator and bulk-pricing tables off its live product pages — real
11522
+ * tiered per-unit prices for a caller-given quantity, not a stale mirror — plus the
11523
+ * category-page browse path to find a configurable SKU.
11524
+ */
11525
+ interface Unit {
11526
+ /**
11527
+ * Reads one ePromos product's own configurator page — color/style options, customization
11528
+ * fields, and the site's own bulk-pricing tier table.
11529
+ */
11530
+ getProductConfiguration(url: string): Promise<EpromosProductConfiguration>;
11531
+
11532
+ /**
11533
+ * Computes the real per-unit and total price for one product at a given quantity, off the
11534
+ * site's own bulk-pricing table.
11535
+ */
11536
+ quoteBulkPrice(args: { productUrl: string; quantity: number }): Promise<EpromosBulkQuote>;
11537
+
11538
+ /**
11539
+ * Lists the products ePromos features on one category landing page, with name and product-page
11540
+ * URL.
11541
+ */
11542
+ listCategoryProducts(url: string): Promise<EpromosCategoryListing>;
11543
+ }
11544
+ }
11545
+
10773
11546
  declare namespace BowmarkProvider_eq3 {
10774
11547
  // ── EQ3 — the unit's own declarations, verbatim ──
10775
11548
  interface Eq3SofaListing {
@@ -10806,7 +11579,7 @@ interface Eq3SofaConfiguration {
10806
11579
  sellingPrice: number;
10807
11580
  discountPercent: number | null; // e.g. 20 — null when no sale is running
10808
11581
  massPounds: number | null;
10809
- availability: string;
11582
+ availability: string; // the site's own labels — read the values off a result, never guess one from prose
10810
11583
  canonicalUrl: string;
10811
11584
  optionGroups: Eq3OptionGroup[]; // every alternative the configurator offers
10812
11585
  }
@@ -11129,7 +11902,7 @@ interface ExtraspaceUnit {
11129
11902
  webRate: number | null;
11130
11903
  promotions: string[];
11131
11904
  available: boolean;
11132
- features: string[];
11905
+ features: string[]; // the site's own labels — read the values off a result, never guess one from prose
11133
11906
  }
11134
11907
 
11135
11908
  interface ExtraspaceFeatures {
@@ -11403,6 +12176,70 @@ interface FieldstonehomesPreparedAppointment { valid: boolean; errors: string[];
11403
12176
  }
11404
12177
  }
11405
12178
 
12179
+ declare namespace BowmarkProvider_firstamericahomes {
12180
+ // ── First America Homes — the unit's own declarations, verbatim ──
12181
+ // First America Homes' OWN shapes — not a capability contract.
12182
+
12183
+ interface FirstamericahomesCommunitySummary {
12184
+ name: string;
12185
+ url: string; // the key getCommunity takes
12186
+ city: string;
12187
+ state: string;
12188
+ zip: string;
12189
+ streetAddress: string;
12190
+ phone: string; // the community's own sales-office number, e.g. "+12106102362"
12191
+ description: string;
12192
+ priceFrom: number | null; // lowest currently-listed floor-plan price, or null
12193
+ }
12194
+
12195
+ interface FirstamericahomesFloorPlanRange { min: number; max: number }
12196
+
12197
+ interface FirstamericahomesFloorPlan {
12198
+ name: string;
12199
+ url: string;
12200
+ description: string;
12201
+ price: number | null;
12202
+ sqft: number | null;
12203
+ beds: FirstamericahomesFloorPlanRange | null;
12204
+ fullBaths: FirstamericahomesFloorPlanRange | null;
12205
+ halfBaths: FirstamericahomesFloorPlanRange | null;
12206
+ }
12207
+
12208
+ interface FirstamericahomesCommunityDetail extends FirstamericahomesCommunitySummary {
12209
+ latitude: number | null;
12210
+ longitude: number | null;
12211
+ floorPlans: FirstamericahomesFloorPlan[];
12212
+ }
12213
+
12214
+ interface FirstamericahomesSearchFilters {
12215
+ city?: string; state?: string; minPrice?: number; maxPrice?: number;
12216
+ }
12217
+
12218
+ /**
12219
+ * Reads First America Homes' own live community list across Houston and San Antonio — real
12220
+ * address, real sales-office phone number, real starting price and every current floor plan
12221
+ * (price, sqft, beds/baths) per community — the discoverable door into the site's
12222
+ * contact/tour/financing intake, which is keyed on a community rather than a single company
12223
+ * phone line.
12224
+ */
12225
+ interface Unit {
12226
+ /**
12227
+ * Searches First America Homes' current live community list (Houston and San Antonio metros)
12228
+ * by city, state, or price range. Real address, real sales-office phone number and real
12229
+ * starting price per community.
12230
+ */
12231
+ searchCommunities(filters?: FirstamericahomesSearchFilters): Promise<FirstamericahomesCommunitySummary[]>;
12232
+
12233
+ /**
12234
+ * Reads one community's full detail: address, sales-office phone, description,
12235
+ * geo-coordinates, and every floor plan it currently offers. `url` is a community's own url
12236
+ * from `searchCommunities()`. THROWS on an unknown url, naming `searchCommunities()` as the
12237
+ * way to find current ones.
12238
+ */
12239
+ getCommunity(url: string): Promise<FirstamericahomesCommunityDetail>;
12240
+ }
12241
+ }
12242
+
11406
12243
  declare namespace BowmarkProvider_firstdibs {
11407
12244
  // ── 1stDibs — the unit's own declarations, verbatim ──
11408
12245
  interface FirstdibsSearchResult {
@@ -11410,7 +12247,7 @@ interface FirstdibsSearchResult {
11410
12247
  url: string;
11411
12248
  price: number;
11412
12249
  priceCurrency: string;
11413
- availability: string;
12250
+ availability: string; // the site's own labels — read the values off a result, never guess one from prose
11414
12251
  image: string | null;
11415
12252
  }
11416
12253
  interface FirstdibsCompletingAction {
@@ -11983,6 +12820,56 @@ interface FormaxCartLink {
11983
12820
  }
11984
12821
  }
11985
12822
 
12823
+ declare namespace BowmarkProvider_forms_hubspot_com {
12824
+ // ── HubSpot Forms — the unit's own declarations, verbatim ──
12825
+ interface HubspotFormField {
12826
+ name: string;
12827
+ label: string;
12828
+ type: string;
12829
+ fieldType: string;
12830
+ required: boolean;
12831
+ hidden: boolean;
12832
+ defaultValue: string;
12833
+ placeholder: string;
12834
+ options: Array<{ label: string; value: string }>;
12835
+ }
12836
+ interface HubspotFormDefinition {
12837
+ portalId: number;
12838
+ guid: string;
12839
+ submitText: string;
12840
+ fields: HubspotFormField[];
12841
+ sourceUrl: string;
12842
+ }
12843
+ interface HubspotFormReference {
12844
+ portalId: string;
12845
+ guid: string;
12846
+ }
12847
+ interface HubspotPageForms {
12848
+ pageUrl: string;
12849
+ forms: HubspotFormReference[];
12850
+ }
12851
+
12852
+ /**
12853
+ * Reads a public HubSpot form's own field definitions off its forms.hubspot.com URL — no
12854
+ * submission, no browser.
12855
+ */
12856
+ interface Unit {
12857
+ /**
12858
+ * Fetches one page on a company's own site (a bare domain, or a domain + path) and returns
12859
+ * every HubSpot form it embeds (portalId + formId) — the door into getFormDefinition for a
12860
+ * caller who only knows the company, not a form URL.
12861
+ */
12862
+ findForms(site: string): Promise<HubspotPageForms>;
12863
+
12864
+ /**
12865
+ * Reads a public HubSpot form's own field definitions off its forms.hubspot.com URL (or a
12866
+ * "<portalId> <formGuid>" pair) — every field's name, label, type and required flag, plus the
12867
+ * form's submit text.
12868
+ */
12869
+ getFormDefinition(formUrlOrIds: string): Promise<HubspotFormDefinition>;
12870
+ }
12871
+ }
12872
+
11986
12873
  declare namespace BowmarkProvider_fourseasonsyachts {
11987
12874
  // ── Four Seasons Yachts — the unit's own declarations, verbatim ──
11988
12875
  interface FourseasonsyachtsVoyage {
@@ -13327,7 +14214,7 @@ interface GrandwelcomeRentalRow {
13327
14214
  name: string;
13328
14215
  url: string;
13329
14216
  location: string;
13330
- propertyType: string;
14217
+ propertyType: string; // the site's own labels — read the values off a result, never guess one from prose
13331
14218
  petFriendly: boolean;
13332
14219
  priceFromUsd: number | null;
13333
14220
  priceFromFormatted: string | null;
@@ -14641,6 +15528,63 @@ interface HellotendService {
14641
15528
  }
14642
15529
  }
14643
15530
 
15531
+ declare namespace BowmarkProvider_highlandhomes {
15532
+ // ── Highland Homes — the unit's own declarations, verbatim ──
15533
+ interface HighlandHomesSearchFilter {
15534
+ city?: string;
15535
+ bedsMin?: number;
15536
+ bathsMin?: number;
15537
+ priceMin?: number;
15538
+ priceMax?: number;
15539
+ sqftMin?: number;
15540
+ sqftMax?: number;
15541
+ garageSpacesMin?: number;
15542
+ status?: string; // the site's own labels — read the values off a result, never guess one from prose
15543
+ hasDen?: boolean;
15544
+ hasLoft?: boolean;
15545
+ hasInLawSuite?: boolean;
15546
+ hasOwnersRetreat?: boolean;
15547
+ isOver55?: boolean;
15548
+ }
15549
+ interface HighlandHomesHome {
15550
+ id: number;
15551
+ lot: string;
15552
+ address: string;
15553
+ city: string;
15554
+ state: string;
15555
+ zip: string;
15556
+ beds: number;
15557
+ baths: number;
15558
+ halfBaths: number;
15559
+ garage: number;
15560
+ sqft: number;
15561
+ price: number;
15562
+ status: string; // the site's own labels — read the values off a result, never guess one from prose
15563
+ moveInDate: string | null;
15564
+ planName: string;
15565
+ planUrl: string;
15566
+ communityName: string;
15567
+ communityUrl: string;
15568
+ communityPhone: string | null;
15569
+ url: string;
15570
+ imageUrl: string | null;
15571
+ }
15572
+
15573
+ /**
15574
+ * Highland Homes' live new-construction inventory across Florida, filterable by city, price,
15575
+ * beds, sqft, garage spaces and build status — off the site's own undocumented filter-form
15576
+ * API.
15577
+ */
15578
+ interface Unit {
15579
+ /**
15580
+ * Searches Highland Homes' live new-construction inventory (Florida only) by city, price,
15581
+ * beds, sqft, garage spaces, status ("Move-In Ready" / "Under Construction") and a handful of
15582
+ * feature flags. Pass no filter to get the full live inventory.
15583
+ */
15584
+ search(filter?: HighlandHomesSearchFilter): Promise<HighlandHomesHome[]>;
15585
+ }
15586
+ }
15587
+
14644
15588
  declare namespace BowmarkProvider_hilton {
14645
15589
  // ── Hilton — the unit's own declarations, verbatim ──
14646
15590
  interface hiltonRoomOffer {
@@ -14648,7 +15592,7 @@ interface hiltonRoomOffer {
14648
15592
  roomTypeName: string;
14649
15593
  bedType: string | null;
14650
15594
  maxOccupancy: number | null;
14651
- features: string[];
15595
+ features: string[]; // the site's own labels — read the values off a result, never guess one from prose
14652
15596
  ratePlanCode: string;
14653
15597
  currencyCode: string;
14654
15598
  nightlyRate: string;
@@ -14764,7 +15708,7 @@ interface HobieDealer {
14764
15708
  carriesExactColor: boolean;
14765
15709
  carriesModel: boolean;
14766
15710
  carriesBrand: boolean;
14767
- stockStatus: string;
15711
+ stockStatus: string; // the site's own labels — read the values off a result, never guess one from prose
14768
15712
  stockDisclaimer: string;
14769
15713
  }
14770
15714
  interface HobieLocalAvailability {
@@ -16375,7 +17319,7 @@ declare namespace BowmarkProvider_iproyal {
16375
17319
  type IproyalProductType = "residential" | "datacenter" | "isp" | "mobile";
16376
17320
  interface IproyalPlanTier {
16377
17321
  productType: IproyalProductType;
16378
- tier: string;
17322
+ tier: string; // the site's own labels — read the values off a result, never guess one from prose
16379
17323
  price: number;
16380
17324
  unit: string;
16381
17325
  billingMode: "subscription" | "payAsYouGo" | null;
@@ -16873,7 +17817,7 @@ interface KalshiMarket {
16873
17817
  eventTicker: string;
16874
17818
  title: string;
16875
17819
  subtitle: string;
16876
- status: string;
17820
+ status: string; // the site's own labels — read the values off a result, never guess one from prose
16877
17821
  marketType: string;
16878
17822
  openTime: string;
16879
17823
  closeTime: string;
@@ -16889,7 +17833,7 @@ interface KalshiMarket {
16889
17833
  rules: string;
16890
17834
  }
16891
17835
  interface KalshiGetMarketsOptions {
16892
- status?: string;
17836
+ status?: string; // the site's own labels — read the values off a result, never guess one from prose
16893
17837
  series_ticker?: string;
16894
17838
  event_ticker?: string;
16895
17839
  limit?: number;
@@ -17074,6 +18018,32 @@ interface KayakCar {
17074
18018
  }
17075
18019
  }
17076
18020
 
18021
+ declare namespace BowmarkProvider_kbb {
18022
+ // ── Kelley Blue Book — the unit's own declarations, verbatim ──
18023
+ interface KbbTrimPricing {
18024
+ trimName: string;
18025
+ trimId: number;
18026
+ msrp: number;
18027
+ fairPurchasePrice: number;
18028
+ fairPurchasePriceRange: { low: number; high: number };
18029
+ }
18030
+
18031
+ /**
18032
+ * Reads kbb.com's own per-trim MSRP and Fair Purchase Price for a make/model/year — an
18033
+ * independent, browserless read on what a vehicle costs, for when the manufacturer's own site
18034
+ * is unreachable.
18035
+ */
18036
+ interface Unit {
18037
+ /**
18038
+ * Reads kbb.com's own per-trim MSRP and Fair Purchase Price for a make and model, e.g.
18039
+ * "Tesla", "Model 3" — kbb.com's own URL slugging, so a caller's ordinary make/model words
18040
+ * work directly. Optional model year defaults to kbb.com's current year. THROWS on a
18041
+ * make/model kbb.com has no page for, rather than returning an empty array.
18042
+ */
18043
+ getTrimPricing(make: string, model: string, year?: number): Promise<KbbTrimPricing[]>;
18044
+ }
18045
+ }
18046
+
17077
18047
  declare namespace BowmarkProvider_keepa {
17078
18048
  // ── Keepa — the unit's own declarations, verbatim ──
17079
18049
  interface KeepaProductResult { product: KeepaProduct; tokensLeft: number | null; tokensConsumed: number | null; refillRate: number | null; }
@@ -17446,7 +18416,7 @@ interface LegacyHomesalCommunity {
17446
18416
  name: string;
17447
18417
  aliases: string[];
17448
18418
  area: string | null;
17449
- status: string | null;
18419
+ status: string | null; // the site's own labels — read the values off a result, never guess one from prose
17450
18420
  repSlug: string;
17451
18421
  bookingUrl: string;
17452
18422
  }
@@ -18870,7 +19840,7 @@ interface mcdonaldsStore {
18870
19840
  openStatus: string;
18871
19841
  hours: mcdonaldsStoreHours;
18872
19842
  services: mcdonaldsStoreServices;
18873
- amenities: string[];
19843
+ amenities: string[]; // the site's own labels — read the values off a result, never guess one from prose
18874
19844
  deliveryPartners: mcdonaldsDeliveryPartner[];
18875
19845
  }
18876
19846
 
@@ -18913,7 +19883,7 @@ interface mcpRegistryEntry {
18913
19883
  version: string;
18914
19884
  repositoryUrl: string | null;
18915
19885
  remoteUrl: string | null;
18916
- status: string;
19886
+ status: string; // the site's own labels — read the values off a result, never guess one from prose
18917
19887
  }
18918
19888
 
18919
19889
  /**
@@ -20114,7 +21084,7 @@ interface MixbookProductPrice {
20114
21084
  size: string;
20115
21085
  price: number; // real Mixbook-computed price for the default configuration
20116
21086
  currency: string;
20117
- availability: string;
21087
+ availability: string; // the site's own labels — read the values off a result, never guess one from prose
20118
21088
  url: string;
20119
21089
  }
20120
21090
 
@@ -20180,6 +21150,62 @@ interface MixbookPromotion {
20180
21150
  }
20181
21151
  }
20182
21152
 
21153
+ declare namespace BowmarkProvider_modernize_com {
21154
+ // ── Modernize — the unit's own declarations, verbatim ──
21155
+ interface ModernizeProjectType {
21156
+ value: string; // the site's own POST value, e.g. "ROOFING"
21157
+ label: string;
21158
+ slug: string; // pass this as getQuoteFlow's projectType
21159
+ hasQuoteFlow: boolean;
21160
+ }
21161
+ interface ModernizeQuoteFlowOption {
21162
+ value: string;
21163
+ label: string;
21164
+ }
21165
+ interface ModernizeQuoteFlowField {
21166
+ name: string;
21167
+ label: string;
21168
+ inputType: "text" | "email" | "tel" | "textarea" | "select" | "radio";
21169
+ required: boolean;
21170
+ maxLength: number | null;
21171
+ options: ModernizeQuoteFlowOption[] | null; // present on select/radio only
21172
+ }
21173
+ interface ModernizeQuoteFlowStep {
21174
+ name: string;
21175
+ title: string;
21176
+ fields: ModernizeQuoteFlowField[];
21177
+ }
21178
+ interface ModernizeQuoteFlow {
21179
+ projectType: string;
21180
+ steps: ModernizeQuoteFlowStep[];
21181
+ }
21182
+
21183
+ /**
21184
+ * Home-improvement lead-gen site — listProjectTypes returns every trade its homeowner quote
21185
+ * flow covers (roofing, HVAC, windows, …), and getQuoteFlow reads the multi-step quote wizard
21186
+ * for one of them (project scope, address, personal/contact info) as typed steps and fields,
21187
+ * never fills or submits it.
21188
+ */
21189
+ interface Unit {
21190
+ /**
21191
+ * Reads modernize.com's own trade radio group — every home-improvement project type its quote
21192
+ * flow covers (roofing, HVAC, windows, solar, doors, …), each with the site's own value, label
21193
+ * and URL slug, and whether that trade also carries a dedicated quote wizard getQuoteFlow can
21194
+ * read.
21195
+ */
21196
+ listProjectTypes(): Promise<ModernizeProjectType[]>;
21197
+
21198
+ /**
21199
+ * Reads modernize.com's own multi-step homeowner quote wizard for one project type —
21200
+ * "roofing", "hvac", "windows", "siding", "solar", "doors", "home-security" or "home-warranty"
21201
+ * — and returns every step (ZIP, address, project scope, personal/contact info) with each
21202
+ * field's name, label, whether it is required, and (for a select or radio group) every option.
21203
+ * Never fills in or submits the wizard.
21204
+ */
21205
+ getQuoteFlow(projectType: string): Promise<ModernizeQuoteFlow>;
21206
+ }
21207
+ }
21208
+
20183
21209
  declare namespace BowmarkProvider_modularclosets {
20184
21210
  // ── Modular Closets — the unit's own declarations, verbatim ──
20185
21211
  // Modular Closets' OWN shapes — not a capability contract.
@@ -21431,7 +22457,7 @@ interface ottoProduct {
21431
22457
  originalPrice: number | null;
21432
22458
  discountPercent: number | null;
21433
22459
  currency: string;
21434
- availability: string | null;
22460
+ availability: string | null; // the site's own labels — read the values off a result, never guess one from prose
21435
22461
  soldOut: boolean;
21436
22462
  delivery: { text: string; minDays: number | null; maxDays: number | null } | null;
21437
22463
  rating: { value: number; count: number } | null;
@@ -23011,6 +24037,80 @@ interface ProgressiveHomeCarrier {
23011
24037
  }
23012
24038
  }
23013
24039
 
24040
+ declare namespace BowmarkProvider_prolook {
24041
+ // ── PROLOOK — the unit's own declarations, verbatim ──
24042
+ interface ProlookUniformStyle {
24043
+ id: number;
24044
+ page: number;
24045
+ brandStyleName: string;
24046
+ productName: string;
24047
+ productLineName: string;
24048
+ filterFlags: Record<string, string>;
24049
+ pricing: {
24050
+ msrpAdult: number | null;
24051
+ msrpYouth: number | null;
24052
+ brandCostAdult: number | null;
24053
+ brandCostYouth: number | null;
24054
+ };
24055
+ estimatedShippingDate: string | null;
24056
+ }
24057
+
24058
+ interface ProlookStyleListPage {
24059
+ page: number;
24060
+ lastPage: number;
24061
+ styles: ProlookUniformStyle[];
24062
+ }
24063
+
24064
+ interface ProlookTrim {
24065
+ trimId: string;
24066
+ trimName: string;
24067
+ trimType: string;
24068
+ colors: { id: number; alias: string; hex: string; code: string }[];
24069
+ }
24070
+
24071
+ interface ProlookStyleOptions {
24072
+ styleId: number;
24073
+ brandStyleName: string;
24074
+ trims: ProlookTrim[];
24075
+ }
24076
+
24077
+ interface ProlookTeamQuote {
24078
+ styleId: number;
24079
+ brandStyleName: string;
24080
+ quantity: number;
24081
+ pricePerUnit: number;
24082
+ total: number;
24083
+ brandCostPerUnit: number | null;
24084
+ }
24085
+
24086
+ /**
24087
+ * PROLOOK's real team-uniform catalog with live per-style MSRP/dealer pricing, real
24088
+ * customization options (trims and colors), and a real computed team-order total — no browser,
24089
+ * no marketing-page guesswork.
24090
+ */
24091
+ interface Unit {
24092
+ /**
24093
+ * Lists one page of PROLOOK's real uniform styles for a sport (e.g. "BSB" for baseball) with
24094
+ * real per-unit MSRP/dealer-cost pricing and cut/sleeve filter flags — the entry point every
24095
+ * other function's styleId + page come from.
24096
+ */
24097
+ listUniformStyles(sportCode: string, page?: number): Promise<ProlookStyleListPage>;
24098
+
24099
+ /**
24100
+ * Reads one style's real trim options (buttons, piping, etc.) and each trim's selectable
24101
+ * colors — the same data PROLOOK's own customizer canvas reads.
24102
+ */
24103
+ getStyleCustomizationOptions(styleId: number): Promise<ProlookStyleOptions>;
24104
+
24105
+ /**
24106
+ * Computes a real team-order total for N jerseys of one style from PROLOOK's own live per-unit
24107
+ * MSRP — not a marketing-page estimate. `sportCode` and `page` are the values
24108
+ * listUniformStyles() found this style with.
24109
+ */
24110
+ getTeamQuote(styleId: number, sportCode: string, page: number, quantity: number): Promise<ProlookTeamQuote>;
24111
+ }
24112
+ }
24113
+
23014
24114
  declare namespace BowmarkProvider_prose {
23015
24115
  // ── Prose — the unit's own declarations, verbatim ──
23016
24116
  interface ProseHaircareProduct {
@@ -23221,6 +24321,50 @@ interface ProxmoxIsoDownload {
23221
24321
  }
23222
24322
  }
23223
24323
 
24324
+ declare namespace BowmarkProvider_puls_com {
24325
+ // ── Puls — the unit's own declarations, verbatim ──
24326
+ interface PulsApplianceCategory {
24327
+ deviceId: number;
24328
+ name: string;
24329
+ slug: string;
24330
+ }
24331
+
24332
+ interface GetRepairQuoteResult {
24333
+ device: PulsApplianceCategory;
24334
+ zipCode: string;
24335
+ isValidZipCode: boolean;
24336
+ marketId: number | null;
24337
+ marketName: string | null;
24338
+ serviceCallFee: number | null;
24339
+ }
24340
+
24341
+ /**
24342
+ * On-demand home-appliance and electronics repair booking. listApplianceCategories lists the
24343
+ * nine appliance categories the booking funnel offers; getRepairQuote checks whether Puls
24344
+ * services a ZIP and, if so, returns the real service-call (diagnostic) fee for an appliance
24345
+ * in that market — the same two facts the site's own /create-appointment form reveals after
24346
+ * picking an appliance and entering a ZIP.
24347
+ */
24348
+ interface Unit {
24349
+ /**
24350
+ * Lists the nine appliance categories Puls' booking funnel offers (Refrigerator, Dryer, Oven,
24351
+ * Washer, Dishwasher, Cooktop, Freezer, Microwave, Washer dryer combo) with each one's
24352
+ * site-internal deviceId, name and URL slug. Call this first — the deviceId (or the name) is
24353
+ * what getRepairQuote's `device` argument takes.
24354
+ */
24355
+ listApplianceCategories(): Promise<PulsApplianceCategory[]>;
24356
+
24357
+ /**
24358
+ * Checks whether Puls services a ZIP code and, if so, returns the real "Service Call Fee" (the
24359
+ * diagnostic fee a technician charges to show up) for the given appliance in that market.
24360
+ * `device` is an appliance name from listApplianceCategories (e.g. "Refrigerator") or its
24361
+ * numeric deviceId; `zipCode` is a 5-digit US ZIP. `serviceCallFee` and
24362
+ * `marketName`/`marketId` are `null` when the ZIP is outside Puls' service area.
24363
+ */
24364
+ getRepairQuote(args: { device: string | number, zipCode: string }): Promise<GetRepairQuoteResult>;
24365
+ }
24366
+ }
24367
+
23224
24368
  declare namespace BowmarkProvider_reddit {
23225
24369
  // ── Reddit — the unit's own declarations, verbatim ──
23226
24370
  interface RedditSearchPost {
@@ -24077,7 +25221,7 @@ interface SamsclubInstantSavingsItem {
24077
25221
  savingsAmount: number | null;
24078
25222
  expiresLabel: string | null;
24079
25223
  limitLabel: string | null;
24080
- availability: string | null;
25224
+ availability: string | null; // the site's own labels — read the values off a result, never guess one from prose
24081
25225
  }
24082
25226
  interface SamsclubCategoryItem {
24083
25227
  id: string;
@@ -24089,10 +25233,10 @@ interface SamsclubCategoryItem {
24089
25233
  wasPrice: string | null;
24090
25234
  rating: number | null;
24091
25235
  reviewCount: number | null;
24092
- availability: string | null;
25236
+ availability: string | null; // the site's own labels — read the values off a result, never guess one from prose
24093
25237
  }
24094
25238
  interface SamsclubFuelPrice {
24095
- grade: string;
25239
+ grade: string; // the site's own labels: "Unleaded", "Premium", "Diesel" where the club sells it
24096
25240
  pricePerGallon: number;
24097
25241
  }
24098
25242
  interface SamsclubFuelPrices {
@@ -24112,7 +25256,7 @@ interface SamsclubProduct {
24112
25256
  nonMemberPrice: string | null;
24113
25257
  rating: number | null;
24114
25258
  reviewCount: number | null;
24115
- availability: string | null;
25259
+ availability: string | null; // the site's own labels — read the values off a result, never guess one from prose
24116
25260
  description: string | null;
24117
25261
  images: string[];
24118
25262
  thumbnailUrl: string | null;
@@ -24147,7 +25291,11 @@ interface SamsclubClub {
24147
25291
  address: { addressLine1: string | null; addressLine2: string | null; city: string; state: string; postalCode: string; country: string };
24148
25292
  open24Hours: boolean;
24149
25293
  hours: SamsclubClubHours[];
24150
- services: string[];
25294
+ services: string[]; // the SITE'S OWN labels, verbatim: "Sam’s Fuel Station" (NOT "Fuel Center"),
25295
+ // "Pharmacy", "Optical Center", "Auto & Tires", "Sam’s Cafe", "Bakery", "Deli", "Liquor",
25296
+ // "Tobacco", "Photo Center", "Hearing Aid Center", "Fresh Flowers", "Wireless Mobile",
25297
+ // "Grocery Pickup and Delivery". Note the CURLY apostrophe (U+2019) — a filter written
25298
+ // with a straight one matches nothing. Read the values off a result, never guess from prose.
24151
25299
  geoPoint: { latitude: number; longitude: number } | null;
24152
25300
  }
24153
25301
  interface SamsclubMembershipBenefit {
@@ -24176,10 +25324,10 @@ interface SamsclubMembershipPlan {
24176
25324
  * availability) given the site's own numeric category id. getFuelPrices reads a specific
24177
25325
  * club's current fuel-center prices (per grade — unleaded, premium, diesel where sold) given
24178
25326
  * the site's own numeric club id. findClubs reads the site's own club locator for a zip code —
24179
- * address, phone, hours and which real departments (pharmacy, optical, tire & lube, fuel
24180
- * center, …) each nearby club has. getMembershipPlans reads the site's own published Club/Plus
24181
- * membership tiers — current price, regular price, and the full stated benefit-by-tier
24182
- * comparison. The rest is not yet built.
25327
+ * address, phone, hours and which real departments each nearby club has, as the site's own
25328
+ * label strings (“Sam’s Fuel Station”, never “Fuel Center”). getMembershipPlans reads the
25329
+ * site's own published Club/Plus membership tiers — current price, regular price, and the full
25330
+ * stated benefit-by-tier comparison. The rest is not yet built.
24183
25331
  */
24184
25332
  interface Unit {
24185
25333
  /**
@@ -24238,8 +25386,10 @@ interface SamsclubMembershipPlan {
24238
25386
 
24239
25387
  /**
24240
25388
  * Finds nearby Sam's Club warehouse locations for a 5-digit US zip — address, phone, hours,
24241
- * distance and which real customer-facing departments (pharmacy, optical, tire & lube, fuel
24242
- * center, …) each club has, the way the site's own club finder does. Resolves clubId for
25389
+ * distance and which real customer-facing departments each club has, the way the site's own
25390
+ * club finder does. `services` carries the SITE'S OWN label strings verbatim, curly
25391
+ * apostrophes included (“Sam’s Fuel Station”, never “Fuel Center”) — a caller filters on a
25392
+ * value read off a result, never one guessed from prose. Resolves clubId for
24243
25393
  * getFuelPrices/checkStock's clubId argument.
24244
25394
  */
24245
25395
  findClubs(zip: string): Promise<SamsclubClub[]>;
@@ -24308,7 +25458,7 @@ interface SeakeeperDealer {
24308
25458
  website: string;
24309
25459
  latitude: number;
24310
25460
  longitude: number;
24311
- tier: string;
25461
+ tier: string; // the site's own labels — read the values off a result, never guess one from prose
24312
25462
  tierLabel: string;
24313
25463
  }
24314
25464
  interface SeakeeperNearbyDealer extends SeakeeperDealer {
@@ -25600,7 +26750,7 @@ interface StickergiantProduct {
25600
26750
  priceUsd: string; // "$37.90" — per-100 stickers starting price
25601
26751
  priceValue: number; // Same number unformatted
25602
26752
  priceCurrency: string; // "USD"
25603
- availability: string; // Schema.org URL, e.g. "https://schema.org/InStock"
26753
+ availability: string; // Schema.org URL, e.g. "https://schema.org/InStock" — the site's own labels — read the values off a result, never guess one from prose
25604
26754
  imageUrl: string;
25605
26755
  }
25606
26756
 
@@ -25929,7 +27079,7 @@ interface TargetSearchResult {
25929
27079
  image: string | null;
25930
27080
  price: number | null;
25931
27081
  wasPrice: number | null;
25932
- availabilityStatus: string | null;
27082
+ availabilityStatus: string | null; // the site's own labels — read the values off a result, never guess one from prose
25933
27083
  inStock: boolean;
25934
27084
  rating: number | null;
25935
27085
  reviewCount: number;
@@ -26042,7 +27192,7 @@ interface teladocInsuranceCoverage {
26042
27192
  source: string;
26043
27193
  headline: string;
26044
27194
  headlinePriceUsd: number;
26045
- services: string[];
27195
+ services: string[]; // the site's own labels — read the values off a result, never guess one from prose
26046
27196
  disclaimer: string;
26047
27197
  }
26048
27198
 
@@ -27269,7 +28419,7 @@ interface TrojanstorageFacilitySearchFilters { state?: string; city?: string }
27269
28419
  interface TrojanstorageUnit {
27270
28420
  unitGroupId: string;
27271
28421
  name: string; // e.g. "5x5 Upstairs Storage"
27272
- features: string[];
28422
+ features: string[]; // the site's own labels — read the values off a result, never guess one from prose
27273
28423
  areaSqFt: number | null;
27274
28424
  regularPrice: number | null;
27275
28425
  promoPrice: number | null; // null when no promo is currently active
@@ -27395,7 +28545,7 @@ interface TwiddyRentalDetail {
27395
28545
  streetAddress: string;
27396
28546
  town: string;
27397
28547
  petsAllowed: boolean;
27398
- amenities: string[];
28548
+ amenities: string[]; // the site's own labels — read the values off a result, never guess one from prose
27399
28549
  numberOfBedrooms: number | null;
27400
28550
  numberOfBathrooms: number | null;
27401
28551
  images: string[];
@@ -27897,7 +29047,7 @@ interface VisiblePhoneVariant {
27897
29047
  sku: string;
27898
29048
  storage: string | null;
27899
29049
  color: string | null;
27900
- condition: string | null;
29050
+ condition: string | null; // the site's own labels — read the values off a result, never guess one from prose
27901
29051
  listPrice: number | null;
27902
29052
  price: number | null;
27903
29053
  monthlyPrice: number | null;
@@ -28731,7 +29881,7 @@ declare namespace BowmarkProvider_yourarborhome {
28731
29881
  interface ArborHome {
28732
29882
  uniqueName: string;
28733
29883
  headline: string;
28734
- status: string;
29884
+ status: string; // the site's own labels — read the values off a result, never guess one from prose
28735
29885
  price: number | null;
28736
29886
  beds: number | null;
28737
29887
  bathsFull: number | null;
@@ -28750,7 +29900,7 @@ interface SearchHomesFilters {
28750
29900
  minBeds?: number;
28751
29901
  minBaths?: number;
28752
29902
  minSqft?: number;
28753
- status?: string;
29903
+ status?: string; // the site's own labels — read the values off a result, never guess one from prose
28754
29904
  }
28755
29905
 
28756
29906
  /**
@@ -29721,6 +30871,7 @@ interface BowmarkProviders {
29721
30871
  aquaphoenixsci: BowmarkProvider_aquaphoenixsci.Unit;
29722
30872
  arajet: BowmarkProvider_arajet.Unit;
29723
30873
  archipelago: BowmarkProvider_archipelago.Unit;
30874
+ archive_org: BowmarkProvider_archive_org.Unit;
29724
30875
  artpix3d: BowmarkProvider_artpix3d.Unit;
29725
30876
  ashleyfurniture: BowmarkProvider_ashleyfurniture.Unit;
29726
30877
  asppoolco: BowmarkProvider_asppoolco.Unit;
@@ -29738,6 +30889,7 @@ interface BowmarkProviders {
29738
30889
  barnesfoundation: BowmarkProvider_barnesfoundation.Unit;
29739
30890
  baublebar: BowmarkProvider_baublebar.Unit;
29740
30891
  bcparkscamping: BowmarkProvider_bcparkscamping.Unit;
30892
+ beaconfunding: BowmarkProvider_beaconfunding.Unit;
29741
30893
  beatthebomb: BowmarkProvider_beatthebomb.Unit;
29742
30894
  bellwethercoffee: BowmarkProvider_bellwethercoffee.Unit;
29743
30895
  beltservice: BowmarkProvider_beltservice.Unit;
@@ -29753,6 +30905,7 @@ interface BowmarkProviders {
29753
30905
  blackstoneproducts: BowmarkProvider_blackstoneproducts.Unit;
29754
30906
  blenderseyewear: BowmarkProvider_blenderseyewear.Unit;
29755
30907
  bluehaven: BowmarkProvider_bluehaven.Unit;
30908
+ blueribbonhomewarranty_com: BowmarkProvider_blueribbonhomewarranty_com.Unit;
29756
30909
  bluesignal: BowmarkProvider_bluesignal.Unit;
29757
30910
  bmwusa: BowmarkProvider_bmwusa.Unit;
29758
30911
  boglewinery: BowmarkProvider_boglewinery.Unit;
@@ -29781,6 +30934,7 @@ interface BowmarkProviders {
29781
30934
  cars: BowmarkProvider_cars.Unit;
29782
30935
  carusohomes: BowmarkProvider_carusohomes.Unit;
29783
30936
  casadragones: BowmarkProvider_casadragones.Unit;
30937
+ cascadiaseniorliving_com: BowmarkProvider_cascadiaseniorliving_com.Unit;
29784
30938
  cbhhomes: BowmarkProvider_cbhhomes.Unit;
29785
30939
  champxpress: BowmarkProvider_champxpress.Unit;
29786
30940
  chantecaille: BowmarkProvider_chantecaille.Unit;
@@ -29790,36 +30944,47 @@ interface BowmarkProviders {
29790
30944
  chesmar: BowmarkProvider_chesmar.Unit;
29791
30945
  chipotle: BowmarkProvider_chipotle.Unit;
29792
30946
  chriscraft: BowmarkProvider_chriscraft.Unit;
30947
+ christianbrothersauto: BowmarkProvider_christianbrothersauto.Unit;
29793
30948
  classichome: BowmarkProvider_classichome.Unit;
30949
+ classicrockfab: BowmarkProvider_classicrockfab.Unit;
29794
30950
  classpass: BowmarkProvider_classpass.Unit;
29795
30951
  claude_com: BowmarkProvider_claude_com.Unit;
29796
30952
  claude_support: BowmarkProvider_claude_support.Unit;
29797
30953
  claudemarketplaces_com: BowmarkProvider_claudemarketplaces_com.Unit;
30954
+ clboyd: BowmarkProvider_clboyd.Unit;
29798
30955
  cleanairlawncare: BowmarkProvider_cleanairlawncare.Unit;
29799
30956
  cloudflare: BowmarkProvider_cloudflare.Unit;
29800
30957
  clubchampion: BowmarkProvider_clubchampion.Unit;
29801
30958
  code_claude_com: BowmarkProvider_code_claude_com.Unit;
29802
30959
  consultnet: BowmarkProvider_consultnet.Unit;
29803
30960
  couponfollow: BowmarkProvider_couponfollow.Unit;
30961
+ credibly_com: BowmarkProvider_credibly_com.Unit;
29804
30962
  cruiselakegeneva: BowmarkProvider_cruiselakegeneva.Unit;
29805
30963
  culturefly: BowmarkProvider_culturefly.Unit;
29806
30964
  curiocity: BowmarkProvider_curiocity.Unit;
29807
30965
  cyberpowerpc: BowmarkProvider_cyberpowerpc.Unit;
30966
+ dahlconsulting: BowmarkProvider_dahlconsulting.Unit;
30967
+ dansons: BowmarkProvider_dansons.Unit;
29808
30968
  davidsonhomes: BowmarkProvider_davidsonhomes.Unit;
29809
30969
  deangroup: BowmarkProvider_deangroup.Unit;
29810
30970
  decked: BowmarkProvider_decked.Unit;
29811
30971
  decksdirect: BowmarkProvider_decksdirect.Unit;
30972
+ deltadentalma: BowmarkProvider_deltadentalma.Unit;
30973
+ dentalplans: BowmarkProvider_dentalplans.Unit;
30974
+ detailxperts: BowmarkProvider_detailxperts.Unit;
29812
30975
  developersopenai: BowmarkProvider_developersopenai.Unit;
29813
30976
  dice: BowmarkProvider_dice.Unit;
29814
30977
  dickssportinggoods: BowmarkProvider_dickssportinggoods.Unit;
29815
30978
  dillards: BowmarkProvider_dillards.Unit;
29816
30979
  discounttire: BowmarkProvider_discounttire.Unit;
29817
30980
  disney: BowmarkProvider_disney.Unit;
30981
+ donsappliances: BowmarkProvider_donsappliances.Unit;
29818
30982
  doordash: BowmarkProvider_doordash.Unit;
29819
30983
  dumpsters: BowmarkProvider_dumpsters.Unit;
29820
30984
  ebay: BowmarkProvider_ebay.Unit;
29821
30985
  elevenlabs: BowmarkProvider_elevenlabs.Unit;
29822
30986
  embroker: BowmarkProvider_embroker.Unit;
30987
+ epromos: BowmarkProvider_epromos.Unit;
29823
30988
  eq3: BowmarkProvider_eq3.Unit;
29824
30989
  erieinsurance: BowmarkProvider_erieinsurance.Unit;
29825
30990
  etsy: BowmarkProvider_etsy.Unit;
@@ -29829,12 +30994,14 @@ interface BowmarkProviders {
29829
30994
  extraspace: BowmarkProvider_extraspace.Unit;
29830
30995
  facerealityskincare: BowmarkProvider_facerealityskincare.Unit;
29831
30996
  fieldstonehomes: BowmarkProvider_fieldstonehomes.Unit;
30997
+ firstamericahomes: BowmarkProvider_firstamericahomes.Unit;
29832
30998
  firstdibs: BowmarkProvider_firstdibs.Unit;
29833
30999
  fivebelow: BowmarkProvider_fivebelow.Unit;
29834
31000
  fivestarbathsolutions: BowmarkProvider_fivestarbathsolutions.Unit;
29835
31001
  flightradar24: BowmarkProvider_flightradar24.Unit;
29836
31002
  ford: BowmarkProvider_ford.Unit;
29837
31003
  formax: BowmarkProvider_formax.Unit;
31004
+ forms_hubspot_com: BowmarkProvider_forms_hubspot_com.Unit;
29838
31005
  fourseasonsyachts: BowmarkProvider_fourseasonsyachts.Unit;
29839
31006
  framebridge: BowmarkProvider_framebridge.Unit;
29840
31007
  fred: BowmarkProvider_fred.Unit;
@@ -29862,6 +31029,7 @@ interface BowmarkProviders {
29862
31029
  heatherwood: BowmarkProvider_heatherwood.Unit;
29863
31030
  hellofresh: BowmarkProvider_hellofresh.Unit;
29864
31031
  hellotend: BowmarkProvider_hellotend.Unit;
31032
+ highlandhomes: BowmarkProvider_highlandhomes.Unit;
29865
31033
  hilton: BowmarkProvider_hilton.Unit;
29866
31034
  historymaker: BowmarkProvider_historymaker.Unit;
29867
31035
  hobie: BowmarkProvider_hobie.Unit;
@@ -29888,6 +31056,7 @@ interface BowmarkProviders {
29888
31056
  kaleidescape: BowmarkProvider_kaleidescape.Unit;
29889
31057
  kalshi: BowmarkProvider_kalshi.Unit;
29890
31058
  kayak: BowmarkProvider_kayak.Unit;
31059
+ kbb: BowmarkProvider_kbb.Unit;
29891
31060
  keepa: BowmarkProvider_keepa.Unit;
29892
31061
  kingsdown: BowmarkProvider_kingsdown.Unit;
29893
31062
  kitchentuneup: BowmarkProvider_kitchentuneup.Unit;
@@ -29923,6 +31092,7 @@ interface BowmarkProviders {
29923
31092
  minimax: BowmarkProvider_minimax.Unit;
29924
31093
  minted: BowmarkProvider_minted.Unit;
29925
31094
  mixbook: BowmarkProvider_mixbook.Unit;
31095
+ modernize_com: BowmarkProvider_modernize_com.Unit;
29926
31096
  modularclosets: BowmarkProvider_modularclosets.Unit;
29927
31097
  momondo: BowmarkProvider_momondo.Unit;
29928
31098
  mossyoak: BowmarkProvider_mossyoak.Unit;
@@ -29956,9 +31126,11 @@ interface BowmarkProviders {
29956
31126
  positivegrid: BowmarkProvider_positivegrid.Unit;
29957
31127
  premierbuildings: BowmarkProvider_premierbuildings.Unit;
29958
31128
  progressive: BowmarkProvider_progressive.Unit;
31129
+ prolook: BowmarkProvider_prolook.Unit;
29959
31130
  prose: BowmarkProvider_prose.Unit;
29960
31131
  provenwinners: BowmarkProvider_provenwinners.Unit;
29961
31132
  proxmox: BowmarkProvider_proxmox.Unit;
31133
+ puls_com: BowmarkProvider_puls_com.Unit;
29962
31134
  reddit: BowmarkProvider_reddit.Unit;
29963
31135
  reliancepartners: BowmarkProvider_reliancepartners.Unit;
29964
31136
  resy: BowmarkProvider_resy.Unit;
@@ -81790,6 +82962,7 @@ interface BowmarkLibrary {
81790
82962
  pricing: BowmarkCapability_pricing.Unit;
81791
82963
  products: BowmarkCapability_products.Unit;
81792
82964
  promocodes: BowmarkCapability_promocodes.Unit;
82965
+ prospect_screening: BowmarkCapability_prospect_screening.Unit;
81793
82966
  read: BowmarkCapability_read.Unit;
81794
82967
  restaurant_booking: BowmarkCapability_restaurant_booking.Unit;
81795
82968
  retail: BowmarkCapability_retail.Unit;
@@ -81801,6 +82974,7 @@ interface BowmarkLibrary {
81801
82974
  text_to_speech: BowmarkCapability_text_to_speech.Unit;
81802
82975
  theme_park_tickets: BowmarkCapability_theme_park_tickets.Unit;
81803
82976
  weather: BowmarkCapability_weather.Unit;
82977
+ web_form_fields: BowmarkCapability_web_form_fields.Unit;
81804
82978
  wireless: BowmarkCapability_wireless.Unit;
81805
82979
  yoga_outfit_shopping: BowmarkCapability_yoga_outfit_shopping.Unit;
81806
82980
  providers: BowmarkProviders;