@bowmark/web 1.20.0 → 1.22.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: f9bdccf83883a14360d78c1b4f364bcb1ed422bd4bc56bd1b722b7a00105291c
9
- // 46 capabilities, 401 providers, 978 typed functions, 20 refused.
8
+ // Manifest version: 629f1aeb04463086ca99af95377a310bbd807733f6a06b36d16890fbc8e3314d
9
+ // 48 capabilities, 410 providers, 1008 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
@@ -36,6 +36,125 @@
36
36
 
37
37
 
38
38
 
39
+ declare namespace BowmarkCapability_booking_links {
40
+ // ── Booking links — find a person's Calendly or Cal.com link and read its form — the unit's own declarations, verbatim ──
41
+ type BookingPlatform = "calendly" | "cal.com" | "savvycal" | "tidycal" | "zcal" | "hubspot"
42
+ | "acuity" | "chilipiper" | "google-calendar" | "microsoft-bookings"
43
+
44
+ // published: READ off a page (foundOn is the citation). archived: read off an old
45
+ // Wayback capture of a page (archivedAt dates it). indexed: Google's site:cal.com search for
46
+ // the name returned it (context quotes the result). name_match: built from the name and
47
+ // it exists — nothing shows the person published it, and a namesake can own it.
48
+ type BookingLinkMethod = "published" | "archived" | "indexed" | "name_match"
49
+
50
+ interface BookingLinkFinding {
51
+ url: string
52
+ platform: BookingPlatform
53
+ method: BookingLinkMethod // the strongest way it was found
54
+ foundBy: BookingLinkMethod[] // every way it was found
55
+ foundOn: string | null // the page it was written on
56
+ archivedAt: string | null // YYYY-MM-DD capture date, for "archived"
57
+ archiveUrl: string | null
58
+ context: string | null // the link's anchor text or the words around it
59
+ ownerName: string | null // the name the booking page itself shows (name_match)
60
+ nameConfirmed: boolean // name_match: page owner carries both names; published/archived: the name is on that page
61
+ }
62
+
63
+ interface FindBookingLinksInput {
64
+ name: string // full name, first and last
65
+ company?: string // name or domain — adds "first-company" slugs
66
+ domain?: string // their company site: about/team/contact/services pages + homepage scanned
67
+ github?: string // a handle READ off a page that names them, never guessed
68
+ urls?: string[] // personal site, speaker bio, blog post — any page of theirs
69
+ }
70
+
71
+ interface FindBookingLinksOptions {
72
+ archive?: boolean // read Wayback captures of the domain's about/team/contact pages; default true with a domain
73
+ search?: boolean // Google site:cal.com "<name>" via Serper; default true; each search is charged to your account, or send your own key as the x-bowmark-vendor-key-serper header
74
+ timeoutMs?: number
75
+ }
76
+
77
+ interface BookingLinkSearch {
78
+ name: string
79
+ links: BookingLinkFinding[] // published first, then archived, then name_match
80
+ checked: { pagesScanned: number; pagesUnreachable: string[]; archivedPagesRead: number; slugsChecked: string[] }
81
+ warnings: string[]
82
+ }
83
+
84
+ interface PublishedBookingLink { url: string; platform: BookingPlatform; context: string; nearbyText: string }
85
+ interface PageScan { url: string; finalUrl: string; status: number; links: PublishedBookingLink[]; warnings: string[] }
86
+
87
+ interface BookingQuestion { label: string; kind: string; required: boolean; choices: string[] }
88
+ interface BookingEvent { name: string; url: string; description: string | null; durationMinutes: number | null }
89
+
90
+ interface BookingPage {
91
+ url: string
92
+ platform: "calendly" | "cal.com"
93
+ ownerName: string | null
94
+ organization: string | null // the org/team the platform files the account under (Cal.com)
95
+ avatarUrl: string | null
96
+ events: BookingEvent[] // every event a profile lists
97
+ event: BookingEvent | null // the event whose form was read; null if several and none named
98
+ questions: BookingQuestion[] // everything the form asks
99
+ qualifyingQuestions: string[] // the questions beyond name/email/notes — "company", "team size": a sales funnel asks these, a personal chat does not
100
+ bookable: "open" | "fully_booked" | "closed" | "unknown" // Cal.com is always "unknown" here; use cal_com.getAvailability
101
+ nextAvailability: string | null
102
+ unavailableReason: string | null // the platform's own words when it cannot be booked
103
+ warnings: string[]
104
+ }
105
+
106
+ interface ReadBookingPageOptions { event?: string; timeoutMs?: number }
107
+
108
+ type CallOptions = {
109
+ timeoutMs?: number // per-provider budget in ms, default 30000, clamped to 1000-55000.
110
+ // A provider slower than this is DROPPED from the results and
111
+ // NAMED in warnings — never silently absent
112
+ }
113
+
114
+ /**
115
+ * Finds the public booking link (Calendly, Cal.com, SavvyCal, HubSpot…) a named person
116
+ * publishes — on their company's pages, their GitHub, an old archived copy of their site, or
117
+ * under their own name on Calendly and Cal.com — and reads what the booking form asks and
118
+ * whether the calendar is open, without booking anything.
119
+ */
120
+ interface Unit {
121
+ /**
122
+ * Finds a person's public booking links from their name. Runs four searches at once and merges
123
+ * them, strongest evidence first: links PUBLISHED on their company's
124
+ * about/team/contact/services pages and homepage, their GitHub profile README, the website
125
+ * that profile lists and any `urls` of theirs (each with the page it was on and the words
126
+ * around it); links on ARCHIVED Wayback Machine captures of the company's about/team/contact
127
+ * pages, dated (catches a link since removed); Cal.com pages Google has INDEXED under their
128
+ * name (a `site:cal.com "<name>"` Google search through Serper — each search is charged to
129
+ * your account on Bowmark's key, or send your own as the `x-bowmark-vendor-key-serper` header;
130
+ * if no key can serve it, it is skipped and named in `warnings`); and their name as a slug on
131
+ * Calendly and Cal.com, including "first-company" shapes (NAME_MATCH — exists, but a namesake
132
+ * can own it, so check `ownerName` and tie it to the company). Pass `company` and `domain`
133
+ * whenever known. Google does not index Calendly pages, so the slug check is the only way to
134
+ * find those. Never books.
135
+ */
136
+ find(person: FindBookingLinksInput, options?: FindBookingLinksOptions): Promise<BookingLinkSearch>;
137
+
138
+ /**
139
+ * Lists every booking link written on one page — hrefs, Cal.com embed buttons
140
+ * (`data-cal-link`) and plain-text links — with each link's anchor text and the words around
141
+ * it, ignoring the platforms' own pricing/login/blog pages. Use it on a personal site, a
142
+ * speaker bio or a newsletter footer.
143
+ */
144
+ scanPage(url: string, options?: CallOptions): Promise<PageScan>;
145
+
146
+ /**
147
+ * Reads a Calendly or Cal.com booking page without booking: who owns it, the events it offers,
148
+ * every question its form asks, `qualifyingQuestions` (anything beyond name/email/notes — a
149
+ * sales funnel asks for your company, a personal chat does not), and whether it can be booked
150
+ * (Calendly: open, fully booked, or closed with the platform's own reason). Works on a
151
+ * fully-booked calendar. A profile with several events returns `event: null` and the list
152
+ * unless `options.event` names one (slug or part of the name).
153
+ */
154
+ read(url: string, options?: ReadBookingPageOptions): Promise<BookingPage>;
155
+ }
156
+ }
157
+
39
158
  declare namespace BowmarkCapability_bundles {
40
159
  // ── Check whether a set of products can be built and bought right now — the unit's own declarations, verbatim ──
41
160
  interface BundleItemAvailability {
@@ -291,6 +410,25 @@ type CallOptions = {
291
410
  }
292
411
  }
293
412
 
413
+ declare namespace BowmarkCapability_currency_exchange {
414
+ // ── Currency exchange — the unit's own declarations, verbatim ──
415
+ interface currency_exchangeResult {
416
+ rate: number;
417
+ warnings: string[];
418
+ }
419
+ type CallOptions = {
420
+ timeoutMs?: number // per-provider budget in ms, default 30000, clamped to 1000-55000.
421
+ // A provider slower than this is DROPPED from the results and
422
+ // NAMED in warnings — never silently absent
423
+ }
424
+
425
+ /** Get real-time exchange rates between currencies */
426
+ interface Unit {
427
+ /** Returns the current exchange rate between two currencies */
428
+ getRate(from: string, to: string, options?: CallOptions): Promise<currency_exchangeResult>;
429
+ }
430
+ }
431
+
294
432
  declare namespace BowmarkCapability_custom_sofa_configurator {
295
433
  // ── Custom sofa configurator (fabric selection, live pricing) — the unit's own declarations, verbatim ──
296
434
  type CustomSofa = {
@@ -4402,11 +4540,59 @@ interface archive_orgAvailability {
4402
4540
  archivedStatus: string | null; // the original page's own HTTP status when captured
4403
4541
  }
4404
4542
 
4543
+ interface archive_orgSnapshotOptions {
4544
+ scope?: "exact" | "prefix"; // default: "prefix" for a bare domain (every page under it), "exact" for a url with a path
4545
+ limit?: number; // 1-500, default 50 — newest first
4546
+ pathContains?: string[]; // keep only urls whose path contains one of these, e.g. ["about", "team", "contact"]
4547
+ }
4548
+
4549
+ interface archive_orgSnapshot {
4550
+ timestamp: string; // YYYYMMDDhhmmss
4551
+ originalUrl: string;
4552
+ archivedUrl: string; // the browsable capture, web.archive.org/web/<ts>/<url>
4553
+ statusCode: string;
4554
+ mimeType: string;
4555
+ }
4556
+
4557
+ interface archive_orgSnapshotList {
4558
+ query: string;
4559
+ scope: "exact" | "prefix";
4560
+ snapshots: archive_orgSnapshot[]; // prefix: newest capture of each distinct url; exact: each distinct VERSION of the page
4561
+ warnings: string[];
4562
+ }
4563
+
4564
+ interface archive_orgSnapshotPage {
4565
+ originalUrl: string;
4566
+ timestamp: string;
4567
+ archivedUrl: string;
4568
+ html: string; // the ORIGINAL bytes as captured, without the archive's toolbar or rewritten links
4569
+ warnings: string[];
4570
+ }
4571
+
4405
4572
  /**
4406
- * The Wayback Machine's own public availability lookup — is a site or page archived, and
4407
- * where.
4573
+ * The Wayback Machine — is a site or page archived, every capture it holds, and the page
4574
+ * itself as it was captured, so a caller can see what a site published before it was changed
4575
+ * or removed.
4408
4576
  */
4409
4577
  interface Unit {
4578
+ /**
4579
+ * Lists what the Wayback Machine has captured, newest first. A bare domain ("humanlayer.dev")
4580
+ * returns the newest capture of every distinct page under it — narrow it with `pathContains:
4581
+ * ["about", "team", "contact"]`. A url with a path returns every distinct VERSION of that one
4582
+ * page, which is the axis that answers "was this ever on the page". Each row carries the
4583
+ * capture timestamp, the original url and its browsable archive url. Use getSnapshot to read
4584
+ * one.
4585
+ */
4586
+ listSnapshots(site: string, opts?: archive_orgSnapshotOptions): Promise<archive_orgSnapshotList>;
4587
+
4588
+ /**
4589
+ * Reads one archived page as it was captured — the original HTML, without the archive's
4590
+ * toolbar or rewritten links — for a url and a `YYYYMMDDhhmmss` timestamp from listSnapshots
4591
+ * (a nearby timestamp is redirected to the closest capture). Use it to find something a page
4592
+ * carried in the past and has since removed.
4593
+ */
4594
+ getSnapshot(url: string, timestamp: string): Promise<archive_orgSnapshotPage>;
4595
+
4410
4596
  /**
4411
4597
  * Checks the Wayback Machine's own public availability endpoint for one site or page — a bare
4412
4598
  * domain ("carpetlandusa.net"), a domain plus path
@@ -5896,15 +6082,17 @@ interface bestbuyProduct {
5896
6082
  * Runs a Best Buy product search the way bestbuy.com's own search box does, via Best Buy's
5897
6083
  * documented Products API, and returns the matching products — name, sale/regular price,
5898
6084
  * online and in-store availability, manufacturer, model number, UPC and review stats.
5899
- * `pageSize` caps the row count (default 10, Best Buy's own ceiling 100). Requires a Best Buy
5900
- * developer API key see this provider's `auth`.
6085
+ * `pageSize` caps the row count (default 10, Best Buy's own ceiling 100). Uses Bowmark's Best
6086
+ * Buy key and charges each request to your account; send your own key as the
6087
+ * `x-bowmark-vendor-key-bestbuy` header instead.
5901
6088
  */
5902
6089
  search(args: string | { query: string; pageSize?: number }): Promise<bestbuyProduct[]>;
5903
6090
 
5904
6091
  /**
5905
6092
  * Looks up one product by Best Buy's own numeric SKU (the id `search`'s rows carry) and
5906
- * returns its full detail — the same fields as `search`. Requires a Best Buy developer API key
5907
- * see this provider's `auth`.
6093
+ * returns its full detail — the same fields as `search`. Uses Bowmark's Best Buy key and
6094
+ * charges each request to your account; send your own key as the
6095
+ * `x-bowmark-vendor-key-bestbuy` header instead.
5908
6096
  */
5909
6097
  getProduct(sku: string | number): Promise<bestbuyProduct>;
5910
6098
  }
@@ -7562,9 +7750,58 @@ interface CalComAvailabilityResult {
7562
7750
  otherEventTypes: CalComEventType[];
7563
7751
  }
7564
7752
 
7753
+ interface CalComFormQuestion {
7754
+ label: string; // what a booker reads
7755
+ name: string; // Cal.com's own field name ("name", "email", or a custom slug)
7756
+ type: string; // Cal.com's own type: "name" | "email" | "phone" | "text" | "textarea" | "select" | "radio" | …
7757
+ required: boolean;
7758
+ choices: string[];
7759
+ }
7760
+
7761
+ interface CalComBookingEvent {
7762
+ title: string;
7763
+ slug: string;
7764
+ url: string;
7765
+ description: string | null;
7766
+ lengthInMinutes: number | null;
7767
+ }
7768
+
7769
+ interface CalComBookingFormOptions {
7770
+ event?: string; // which event on a multi-event profile — its slug or part of its title
7771
+ }
7772
+
7773
+ interface CalComBookingForm {
7774
+ url: string;
7775
+ username: string;
7776
+ eventTypes: CalComEventType[]; // a profile's list; empty when the url already named an event
7777
+ event: CalComBookingEvent | null; // null when several events exist and none was named
7778
+ ownerName: string | null;
7779
+ organization: string | null; // the org/team Cal.com itself files the account under
7780
+ avatarUrl: string | null;
7781
+ questions: CalComFormQuestion[]; // only what a booker is shown — hidden and reschedule-only fields dropped
7782
+ warnings: string[];
7783
+ }
7784
+
7785
+ interface CalComProfileCandidate {
7786
+ slug: string;
7787
+ url: string; // where the page landed; a one-event profile redirects to that event
7788
+ title: string; // the page's own <title>
7789
+ ownerName: string | null; // read off the title
7790
+ nameMatches: boolean; // ownerName carries BOTH names asked for — a hint, a namesake passes too
7791
+ }
7792
+
7793
+ interface CalComFindProfilesResult {
7794
+ name: string;
7795
+ company: string | null;
7796
+ slugsChecked: string[];
7797
+ candidates: CalComProfileCandidate[];
7798
+ warnings: string[];
7799
+ }
7800
+
7565
7801
  /**
7566
- * Cal.com's own documented, keyless public APIthe event types a booking page offers and the
7567
- * real, currently-open time slots for one of them no browser, no key.
7802
+ * Cal.com's own public surfacesfind a person's Cal.com page from their name, read the event
7803
+ * types it offers, the questions its booking form asks and who owns it, and the real,
7804
+ * currently-open time slots — no browser, no key.
7568
7805
  */
7569
7806
  interface Unit {
7570
7807
  /**
@@ -7581,6 +7818,28 @@ interface CalComAvailabilityResult {
7581
7818
  * event type and reports the rest in `otherEventTypes`.
7582
7819
  */
7583
7820
  getAvailability(username: string, opts?: CalComAvailabilityOptions): Promise<CalComAvailabilityResult>;
7821
+
7822
+ /**
7823
+ * Reads what a Cal.com booking page will ask before anyone books: the event's
7824
+ * title/description/length, every question on its booking form (only the ones a booker is
7825
+ * actually shown, with choices and whether each is required), the owner's name and avatar, and
7826
+ * the organization or team Cal.com files the account under. Needs no open slot. Takes an event
7827
+ * url ("https://cal.com/alexatallah/15min"), a team or org-subdomain event url, or a profile
7828
+ * url — a profile with several events returns `event: null` and the list unless `opts.event`
7829
+ * names one. Never books anything.
7830
+ */
7831
+ getBookingForm(url: string, opts?: CalComBookingFormOptions): Promise<CalComBookingForm>;
7832
+
7833
+ /**
7834
+ * Finds a person's own Cal.com page from their full name, and optionally their company (pass
7835
+ * it). Checks the slug shapes that measured reliable (first-last, firstlast, lastfirst,
7836
+ * first-company, firstcompany, last-company, and the bare company slug — which often belongs
7837
+ * to a stranger, so read `ownerName`) and returns each page that exists with its own title,
7838
+ * the owner name the title states, and `nameMatches`. A match is a GUESS: a namesake passes,
7839
+ * so tie the page to the company before relying on it. Works on pages no search engine has
7840
+ * indexed.
7841
+ */
7842
+ findProfiles(name: string, company?: string): Promise<CalComFindProfilesResult>;
7584
7843
  }
7585
7844
  }
7586
7845
 
@@ -7629,10 +7888,58 @@ interface CalendlyAvailabilityResult {
7629
7888
  otherEventTypes: CalendlyEventType[];
7630
7889
  }
7631
7890
 
7891
+ interface CalendlyFormQuestion {
7892
+ label: string;
7893
+ format: string; // Calendly's own: "string" | "text" | "phone_number" | "select" | "multi_select" | "radios" | "checkboxes"
7894
+ required: boolean;
7895
+ choices: string[];
7896
+ }
7897
+
7898
+ interface CalendlyBookingEvent {
7899
+ name: string;
7900
+ slug: string | null;
7901
+ url: string;
7902
+ description: string | null;
7903
+ durationMinutes: number | null;
7904
+ }
7905
+
7906
+ interface CalendlyBookingFormOptions {
7907
+ event?: string; // which event on a multi-event profile — its slug or part of its name
7908
+ }
7909
+
7910
+ interface CalendlyBookingForm {
7911
+ url: string;
7912
+ profileSlug: string | null; // null for a calendly.com/d/<hash> share link
7913
+ ownerName: string | null;
7914
+ eventTypes: CalendlyEventType[];
7915
+ event: CalendlyBookingEvent | null; // null when several events exist and none was named
7916
+ questions: CalendlyFormQuestion[]; // CUSTOM questions; name + email are always asked on top
7917
+ nextAvailability: string | null; // null + unavailableReason null = fully booked, not unread
7918
+ unavailableReason: string | null; // non-null = Calendly says this cannot be booked
7919
+ warnings: string[];
7920
+ }
7921
+
7922
+ interface CalendlyProfileCandidate {
7923
+ slug: string;
7924
+ url: string;
7925
+ ownerName: string; // the name the profile itself shows
7926
+ nameMatches: boolean; // ownerName carries BOTH names asked for — a hint, a namesake passes too
7927
+ timezone: string;
7928
+ }
7929
+
7930
+ interface CalendlyFindProfilesResult {
7931
+ name: string;
7932
+ company: string | null;
7933
+ slugsChecked: string[];
7934
+ candidates: CalendlyProfileCandidate[];
7935
+ warnings: string[];
7936
+ }
7937
+
7632
7938
  /**
7633
- * Calendly's own public booking-widget data — the event types a scheduling page offers and the
7634
- * real, currently-open time slots for one of them read straight off the widget's
7635
- * undocumented JSON endpoints, no browser, no key.
7939
+ * Calendly's own public booking-widget data — find a person's Calendly page from their name,
7940
+ * read the event types it offers, the questions its booking form asks, and the real,
7941
+ * currently-open time slots — read straight off the widget's undocumented JSON endpoints, no
7942
+ * browser, no key.
7636
7943
  */
7637
7944
  interface Unit {
7638
7945
  /**
@@ -7650,6 +7957,29 @@ interface CalendlyAvailabilityResult {
7650
7957
  * first event type and reports the rest in `otherEventTypes`.
7651
7958
  */
7652
7959
  getAvailability(profile: string, opts?: CalendlyAvailabilityOptions): Promise<CalendlyAvailabilityResult>;
7960
+
7961
+ /**
7962
+ * Reads what a Calendly booking page will ask before anyone books: the owner's name, the
7963
+ * event's name/description/duration, every custom form question (with its choices and whether
7964
+ * it is required), the next open time, and Calendly's own reason when the calendar cannot be
7965
+ * booked. Needs no open slot, so it reads a fully-booked calendar too. Takes a profile url
7966
+ * ("https://calendly.com/eric-ciarla"), an event url, or a one-off share link
7967
+ * ("https://calendly.com/d/ctbt-d45-rgb/simbie-ai-demo"). A profile with several events
7968
+ * returns `event: null` and the list unless `opts.event` names one. Never books anything.
7969
+ */
7970
+ getBookingForm(url: string, opts?: CalendlyBookingFormOptions): Promise<CalendlyBookingForm>;
7971
+
7972
+ /**
7973
+ * Finds a person's own Calendly page from their full name, and optionally their company (pass
7974
+ * it — "caleb-firecrawl" is found only by the company shape). Checks the slug shapes that
7975
+ * measured reliable (first-last, firstlast, lastfirst, first-company, firstcompany,
7976
+ * last-company, and the bare company slug — which often belongs to a stranger, so read
7977
+ * `ownerName`) and returns every one that exists with the name the page itself shows and
7978
+ * `nameMatches`. A match is a GUESS: a namesake with the same first and last name passes, so
7979
+ * tie the page to the company before relying on it. Search engines do not index Calendly
7980
+ * pages, so this is the way to find one.
7981
+ */
7982
+ findProfiles(name: string, company?: string): Promise<CalendlyFindProfilesResult>;
7653
7983
  }
7654
7984
  }
7655
7985
 
@@ -10485,6 +10815,19 @@ interface CuriocityListEventsQuery {
10485
10815
  }
10486
10816
  }
10487
10817
 
10818
+ declare namespace BowmarkProvider_currency_exchange {
10819
+ // ── ExchangeRate-API — the unit's own declarations, verbatim ──
10820
+ interface currency_exchangeRow {
10821
+ rate: number;
10822
+ }
10823
+
10824
+ /** Get real-time exchange rates from ExchangeRate-API */
10825
+ interface Unit {
10826
+ /** Returns the current exchange rate between two currencies */
10827
+ getRate(from: string, to: string): Promise<currency_exchangeRow>;
10828
+ }
10829
+ }
10830
+
10488
10831
  declare namespace BowmarkProvider_cyberpowerpc {
10489
10832
  // ── CyberPowerPC — the unit's own declarations, verbatim ──
10490
10833
  interface CyberpowerpcConfigurator {
@@ -11025,6 +11368,29 @@ interface DdCartHandoff {
11025
11368
  }
11026
11369
  }
11027
11370
 
11371
+ declare namespace BowmarkProvider_dell {
11372
+ // ── Dell — the unit's own declarations, verbatim ──
11373
+ interface SearchForumThreadsArgs {
11374
+ query: string;
11375
+ }
11376
+
11377
+ interface DellForumThread {
11378
+ title: string;
11379
+ url: string;
11380
+ postCount: number;
11381
+ }
11382
+
11383
+ /** Search Dell's community forum for discussion threads. */
11384
+ interface Unit {
11385
+ /**
11386
+ * Search Dell community forums for threads matching a query — needs a topic or keywords (e.g.
11387
+ * "storage issues", "laptop battery"), never a bare "search the forum" with nothing to search
11388
+ * for.
11389
+ */
11390
+ searchForumThreads(args: SearchForumThreadsArgs): Promise<DellForumThread[]>;
11391
+ }
11392
+ }
11393
+
11028
11394
  declare namespace BowmarkProvider_deltadentalma {
11029
11395
  // ── Delta Dental of Massachusetts — the unit's own declarations, verbatim ──
11030
11396
  // Delta Dental of Massachusetts's OWN shapes — not a capability contract.
@@ -12354,7 +12720,8 @@ interface etsyListing {
12354
12720
  * Searches Etsy's live catalog of active listings by keyword, via Etsy's documented Open API
12355
12721
  * v3, and returns the matching listings — id, title, price, currency, quantity available, tags
12356
12722
  * and the listing's own etsy.com URL. `limit` caps the row count (default 10, Etsy's own
12357
- * ceiling 100). Requires an Etsy developer API key see this provider's `auth`.
12723
+ * ceiling 100). Uses Bowmark's Etsy key and charges each request to your account; send your
12724
+ * own key as the `x-bowmark-vendor-key-etsy` header instead.
12358
12725
  */
12359
12726
  search(args: string | { query: string; limit?: number }): Promise<etsyListing[]>;
12360
12727
  }
@@ -14608,6 +14975,19 @@ interface GithubListReleasesResult {
14608
14975
  warnings: string[];
14609
14976
  }
14610
14977
 
14978
+ interface GithubProfileReadme {
14979
+ login: string;
14980
+ name: string | null;
14981
+ company: string | null;
14982
+ blog: string | null; // the website they list on their profile
14983
+ bio: string | null;
14984
+ twitterUsername: string | null;
14985
+ profileUrl: string;
14986
+ readme: string | null; // the profile README's raw markdown; null when they have none
14987
+ readmeUrl: string | null;
14988
+ warnings: string[];
14989
+ }
14990
+
14611
14991
  /**
14612
14992
  * GitHub's own REST API, keyless. Built: a public repo's commit log (sha, author, date,
14613
14993
  * message), paged and windowed; a public repo's release history (tag, name, dates, release
@@ -14639,6 +15019,16 @@ interface GithubListReleasesResult {
14639
15019
  * `releases: []`, not a throw.
14640
15020
  */
14641
15021
  listReleases(owner: string, repo: string, options?: GithubListReleasesOptions): Promise<GithubListReleasesResult>;
15022
+
15023
+ /**
15024
+ * Reads a person's own GitHub profile — display name, company, the website they list, bio, X
15025
+ * handle — and the raw markdown of their profile README (the `<handle>/<handle>` repo GitHub
15026
+ * shows on the profile page), which is where people put a personal site, a booking link or
15027
+ * contact details. Takes a username, `@handle` or github.com url. `readme` is null when they
15028
+ * have no profile README. Unauthenticated calls share GitHub's 60 requests/hour per IP; this
15029
+ * spends two. THROWS on an unknown user or a rate limit.
15030
+ */
15031
+ getProfileReadme(handle: string): Promise<GithubProfileReadme>;
14642
15032
  }
14643
15033
  }
14644
15034
 
@@ -14971,6 +15361,189 @@ interface GooglePriceGraph {
14971
15361
  }
14972
15362
  }
14973
15363
 
15364
+ declare namespace BowmarkProvider_google_maps {
15365
+ // ── Google Maps — the unit's own declarations, verbatim ──
15366
+ interface GoogleMapsPlace {
15367
+ featureId: string;
15368
+ name: string;
15369
+ }
15370
+ interface SuggestPlacesArgs {
15371
+ query: string;
15372
+ }
15373
+ interface SearchPlacesArgs {
15374
+ query: string;
15375
+ }
15376
+ interface SearchPlacesResult {
15377
+ featureId: string;
15378
+ name: string;
15379
+ address: string;
15380
+ coordinates: { lat: number; lng: number } | null;
15381
+ categories: string[];
15382
+ rating?: number;
15383
+ reviewCount?: number;
15384
+ }
15385
+ interface GeocodeAddressArgs {
15386
+ address: string;
15387
+ }
15388
+ interface GeocodeAddressResult {
15389
+ featureId: string;
15390
+ name: string;
15391
+ formattedAddress: string;
15392
+ coordinates: { lat: number; lng: number } | null;
15393
+ }
15394
+ interface GetPlaceArgs {
15395
+ query: string;
15396
+ }
15397
+ interface GetPlaceResult {
15398
+ featureId: string;
15399
+ name: string;
15400
+ address: string;
15401
+ coordinates: { lat: number; lng: number } | null;
15402
+ categories: string[];
15403
+ neighborhood?: string;
15404
+ phone?: string;
15405
+ website?: string;
15406
+ rating?: number;
15407
+ reviewCount?: number;
15408
+ hours?: { day: string; hours: string[] }[];
15409
+ }
15410
+ interface ListReviewsArgs {
15411
+ query: string;
15412
+ }
15413
+ interface Review {
15414
+ author: string;
15415
+ authorId?: string;
15416
+ rating: number;
15417
+ text: string;
15418
+ relativeDate?: string;
15419
+ }
15420
+
15421
+ /**
15422
+ * Local business search on Google Maps — find places by what a person would say, then read the
15423
+ * address, hours, rating, reviews and route. suggestPlaces (autocomplete), searchPlaces (the
15424
+ * door), geocodeAddress, getPlace and listReviews are built; everything else is still a
15425
+ * declared stub.
15426
+ */
15427
+ interface Unit {
15428
+ /**
15429
+ * Google Maps' own autocomplete for a half-typed query — what the search box offers while
15430
+ * somebody types. Returns the completed queries, ready to hand to searchPlaces once it lands.
15431
+ */
15432
+ suggestPlaces(args: SuggestPlacesArgs): Promise<string[]>;
15433
+
15434
+ /**
15435
+ * The door every other Maps function chains off. Takes what a person would say — "coffee shops
15436
+ * in Seattle WA", "pizza near Austin TX" — and returns the ranked places Google shows for it:
15437
+ * feature id, name, address, coordinates and categories, plus rating and review count when the
15438
+ * site's response carries them. The location lives in the query text; Google resolves it from
15439
+ * there rather than from a separate coordinate.
15440
+ */
15441
+ searchPlaces(args: SearchPlacesArgs): Promise<SearchPlacesResult[]>;
15442
+
15443
+ /**
15444
+ * A street address, a city, or a business name in — the matching Google Maps place, its
15445
+ * feature id and its coordinates out. Rides the same door as searchPlaces (a second reading of
15446
+ * the same response), so it only resolves a query that names ONE place; a category or
15447
+ * list-style query throws.
15448
+ */
15449
+ geocodeAddress(args: GeocodeAddressArgs): Promise<GeocodeAddressResult>;
15450
+
15451
+ /**
15452
+ * Everything Google Maps shows on one business's panel — name, full address, coordinates,
15453
+ * category, neighborhood, phone, website, rating, review count and weekly hours, each present
15454
+ * only when the site's own response carried it. A THIRD reading of searchPlaces' door: takes
15455
+ * the same resolving query geocodeAddress does (typically a name plus address, since this does
15456
+ * not take a feature id — measured live, neither the raw id nor a cid string resolves through
15457
+ * this door), and throws when the query names a category or list rather than one business.
15458
+ */
15459
+ getPlace(args: GetPlaceArgs): Promise<GetPlaceResult>;
15460
+
15461
+ /**
15462
+ * The reviews Google Maps shows on a business's own panel — up to 5, each with author, star
15463
+ * rating, review text and the site's own relative date. A FOURTH reading of searchPlaces' door
15464
+ * (the same record getPlace reads, one section further in), not the listugcposts route the
15465
+ * survey planned: that route needed a session token minted by a place-page bootstrap that was
15466
+ * never cracked, but the same reviews the token would have fetched are already sitting in the
15467
+ * panel response. Takes the same resolving query getPlace does. Returns [] for a place with no
15468
+ * reviews rather than throwing; throws only when the query itself does not resolve to one
15469
+ * place.
15470
+ */
15471
+ listReviews(args: ListReviewsArgs): Promise<Review[]>;
15472
+ }
15473
+ }
15474
+
15475
+ declare namespace BowmarkProvider_google_news {
15476
+ // ── Google News — the unit's own declarations, verbatim ──
15477
+ interface GoogleNewsClusterEntry {
15478
+ title: string;
15479
+ link: string;
15480
+ publisher: string;
15481
+ }
15482
+ interface GoogleNewsArticle {
15483
+ articleId: string;
15484
+ title: string;
15485
+ link: string;
15486
+ publisher: string;
15487
+ publisherUrl: string | null;
15488
+ publishedAt: string | null;
15489
+ cluster: GoogleNewsClusterEntry[];
15490
+ }
15491
+ interface GoogleNewsSearchResult {
15492
+ query: string;
15493
+ articles: GoogleNewsArticle[];
15494
+ }
15495
+ interface GoogleNewsTopStories {
15496
+ title: string;
15497
+ clusters: GoogleNewsArticle[];
15498
+ }
15499
+ interface GoogleNewsTopicHeadlines {
15500
+ section: "World" | "Nation" | "Business" | "Technology" | "Entertainment" | "Sports" | "Science" | "Health";
15501
+ title: string;
15502
+ articles: GoogleNewsArticle[];
15503
+ }
15504
+
15505
+ /**
15506
+ * Headlines from every publisher at once — today's top stories as clusters, a section or a
15507
+ * city's local news, and everything indexed about a subject with Google's own when: and site:
15508
+ * operators. searchNews (the door) and topStories are built; everything else is still a
15509
+ * declared stub.
15510
+ */
15511
+ interface Unit {
15512
+ /**
15513
+ * Everything Google News has indexed about a subject, across every publisher at once —
15514
+ * headline, publisher, publication time and the Google News link, newest first. `query` is
15515
+ * exactly what a person would type into Google News' own search box, and Google's own
15516
+ * operators work inside it: `when:1h`/`when:1d`/`when:7d` narrows the window,
15517
+ * `site:reuters.com` pins one publisher, quotes pin a phrase and `(a OR b)` unions two
15518
+ * subjects — measured 2026-09-15: `site:reuters.com tesla` returned 100 items of which 100
15519
+ * carried `<source>Reuters</source>`. This is the provider's main door: a caller holding only
15520
+ * words gets in here. A query that matches nothing returns an empty `articles` array rather
15521
+ * than throwing.
15522
+ */
15523
+ searchNews(query: string): Promise<GoogleNewsSearchResult>;
15524
+
15525
+ /**
15526
+ * What Google News is leading with right now — the front page, as ranked story CLUSTERS rather
15527
+ * than a flat list. Each entry carries the lead headline and publisher plus every other outlet
15528
+ * covering the same story, which is the one thing a single publisher's own feed can never give
15529
+ * a caller asking "what is everyone saying about this today". No arguments: the front page is
15530
+ * the whole ask.
15531
+ */
15532
+ topStories(): Promise<GoogleNewsTopStories>;
15533
+
15534
+ /**
15535
+ * The latest headlines in one of Google News' own eight sections — World, Nation, Business,
15536
+ * Technology, Entertainment, Sports, Science or Health — by section NAME, so a caller who has
15537
+ * only the word "technology" never has to hold an opaque topic id. The name is matched
15538
+ * case-insensitively against the closed list of eight; anything else throws before any request
15539
+ * is made, because an unrecognized section answers 200 with Google News' own app-shell HTML
15540
+ * rather than a 404 (measured 2026-09-15) — reading that as an empty section would be silently
15541
+ * wrong rather than refused.
15542
+ */
15543
+ listTopicHeadlines(section: string): Promise<GoogleNewsTopicHeadlines>;
15544
+ }
15545
+ }
15546
+
14974
15547
  declare namespace BowmarkProvider_gostoreit {
14975
15548
  // ── Go Store It — the unit's own declarations, verbatim ──
14976
15549
  interface GetFacilityUnitsArgs { facilityUrl: string; }
@@ -15570,6 +16143,90 @@ interface HauslabsShadeMatch {
15570
16143
  }
15571
16144
  }
15572
16145
 
16146
+ declare namespace BowmarkProvider_havenenergy {
16147
+ // ── Haven Energy — the unit's own declarations, verbatim ──
16148
+ // Haven Energy's OWN shapes — not a capability contract.
16149
+
16150
+ interface HavenPropertyDetails {
16151
+ homeSize: string | null; // e.g. "SIZE_1500_2499"
16152
+ livingSquareFeet: number | null;
16153
+ latitude: number | null;
16154
+ longitude: number | null;
16155
+ county: string | null;
16156
+ highFireThreatZone: string | null;
16157
+ isInEnergyCommunity: boolean | null;
16158
+ }
16159
+
16160
+ interface HavenPricingTier {
16161
+ batteryModel: string; // e.g. "TESLA_POWERWALL_3"
16162
+ quantity: number;
16163
+ baseMonthlyPayment: number;
16164
+ basePrepaidPayment: number;
16165
+ installationCost: number;
16166
+ billSavings: string; // e.g. "$300-$600"
16167
+ }
16168
+
16169
+ interface HavenPricingProgram {
16170
+ id: string;
16171
+ label: string; // e.g. "PG&E Permanent Battery Storage Rebate"
16172
+ offerType: string;
16173
+ pricingType: string;
16174
+ states: string[];
16175
+ utilities: string[];
16176
+ dwellingsAllowed: string[];
16177
+ requiresIncomeOrMedical: boolean;
16178
+ requiresHomeOwnership: boolean;
16179
+ tiers: HavenPricingTier[];
16180
+ }
16181
+
16182
+ interface HavenPricingProgramsResult { programs: HavenPricingProgram[] }
16183
+
16184
+ interface HavenListPricingProgramsResult {
16185
+ property: HavenPropertyDetails;
16186
+ state: string | null; // read off the caller's own address, e.g. "CA"
16187
+ programs: HavenPricingProgram[]; // filtered to what `state` qualifies for
16188
+ }
16189
+
16190
+ interface HavenListPricingProgramsArgs { address: string }
16191
+
16192
+ /**
16193
+ * Haven Energy home battery quoting — read a US address's own property attributes (home size,
16194
+ * county, energy-community status) the way Haven's /quote flow does, and read the site's own
16195
+ * live incentive/pricing program table (real monthly payment, prepaid payment, installation
16196
+ * cost and bill-savings tiers per program), with no name/email/phone collected anywhere in
16197
+ * this path.
16198
+ */
16199
+ interface Unit {
16200
+ /**
16201
+ * Reads Haven's own property-attributes lookup for a US street address — the same call /quote
16202
+ * makes on step 1 before any pricing is shown. Returns home-size band, county, lat/lng and
16203
+ * energy-community/fire-zone flags used to match pricing programs. THROWS on a malformed
16204
+ * address; Haven's endpoint itself answers a real but unrecognized address with nulled fields
16205
+ * rather than an error.
16206
+ */
16207
+ getPropertyDetails(address: string): Promise<HavenPropertyDetails>;
16208
+
16209
+ /**
16210
+ * Returns every currently active incentive/pricing program Haven prices against — eligible
16211
+ * states, utilities and dwelling types, plus real per-tier monthly payment, prepaid payment,
16212
+ * installation cost and typical bill savings for a Tesla Powerwall 3 (with or without an
16213
+ * expansion unit). This is the site's own live table; combine with getPropertyDetails'
16214
+ * county/utility context to narrow to the programs a specific home actually qualifies for.
16215
+ */
16216
+ getPricingPrograms(): Promise<HavenPricingProgramsResult>;
16217
+
16218
+ /**
16219
+ * One call for the question getPropertyDetails + getPricingPrograms need composing to answer:
16220
+ * which of Haven's active programs does THIS address actually qualify for. Reads the property
16221
+ * attributes and the full program table (the same two live calls the two other functions make)
16222
+ * and filters to the state parsed out of the address string. `state` is null and `programs` is
16223
+ * the full unfiltered table when no 2-letter state code could be read from the address —
16224
+ * Haven's own property-details response never returns one to fall back on.
16225
+ */
16226
+ listPricingPrograms(arg0: HavenListPricingProgramsArgs): Promise<HavenListPricingProgramsResult>;
16227
+ }
16228
+ }
16229
+
15573
16230
  declare namespace BowmarkProvider_haydenhomes {
15574
16231
  // ── Hayden Homes — the unit's own declarations, verbatim ──
15575
16232
  // Hayden Homes' OWN shapes — not a capability contract.
@@ -15631,6 +16288,32 @@ interface HaydenhomesSearchFilters {
15631
16288
  }
15632
16289
  }
15633
16290
 
16291
+ declare namespace BowmarkProvider_hccts {
16292
+ // ── hccts.org Online Application Appointment Booking — the unit's own declarations, verbatim ──
16293
+ interface ApplicationStatus {
16294
+ available: boolean;
16295
+ formUrl: string;
16296
+ message: string;
16297
+ lastChecked: string;
16298
+ }
16299
+
16300
+ interface CheckApplicationAvailabilityArgs {
16301
+ refresh?: boolean;
16302
+ }
16303
+
16304
+ /**
16305
+ * Checks application availability and appointment scheduling for Highlands' adult education
16306
+ * programs.
16307
+ */
16308
+ interface Unit {
16309
+ /**
16310
+ * Checks if the HCCTS online application form is currently accessible and returns the
16311
+ * application status.
16312
+ */
16313
+ checkApplicationAvailability(args: CheckApplicationAvailabilityArgs): Promise<ApplicationStatus>;
16314
+ }
16315
+ }
16316
+
15634
16317
  declare namespace BowmarkProvider_healthcare_gov {
15635
16318
  // ── HealthCare.gov — the unit's own declarations, verbatim ──
15636
16319
  interface healthcare_govPlan {
@@ -18475,6 +19158,71 @@ interface IvoryHomesSearchFilters {
18475
19158
  }
18476
19159
  }
18477
19160
 
19161
+ declare namespace BowmarkProvider_iyc {
19162
+ // ── IYC — the unit's own declarations, verbatim ──
19163
+ interface IycCharterSearchFilters {
19164
+ destination?: string;
19165
+ guestsMin?: number;
19166
+ lengthFeetMin?: number;
19167
+ lengthFeetMax?: number;
19168
+ budgetMaxUsd?: number;
19169
+ sort?: string;
19170
+ page?: number;
19171
+ }
19172
+ interface IycCharterYacht {
19173
+ yachtId: string;
19174
+ slug: string;
19175
+ name: string;
19176
+ url: string;
19177
+ builder: string | null;
19178
+ lengthInFeet: string | null;
19179
+ lengthInMeters: string | null;
19180
+ guests: number | null;
19181
+ cabins: number | null;
19182
+ crew: number | null;
19183
+ priceToDisplay: string | null;
19184
+ priceUsd: string | null;
19185
+ priceEur: string | null;
19186
+ isPriceOnApplication: boolean;
19187
+ image: string | null;
19188
+ availabilityUrl: string | null;
19189
+ }
19190
+ interface IycCharterSearchResult {
19191
+ total: number;
19192
+ page: number;
19193
+ pages: number;
19194
+ filters: IycCharterSearchFilters;
19195
+ yachts: IycCharterYacht[];
19196
+ }
19197
+ interface IycCharterAvailability {
19198
+ yachtId: string;
19199
+ isAvailable: boolean;
19200
+ unavailableDates: string[];
19201
+ maxDateWithPrice: string | null;
19202
+ }
19203
+
19204
+ /**
19205
+ * IYC's superyacht charter search, run for real — filtered inventory with live USD/EUR pricing
19206
+ * and each yacht's own booked-date calendar, off the site's own undocumented filter API.
19207
+ */
19208
+ interface Unit {
19209
+ /**
19210
+ * Runs IYC's live charter search — destination, minimum guests, length range and max budget —
19211
+ * and returns real matching yachts with USD/EUR pricing, specs and a charter-detail URL. The
19212
+ * entry point: call with {} for the site's own default window, or narrow it.
19213
+ * checkCharterAvailability takes the yachtId this returns.
19214
+ */
19215
+ searchCharterYachts(filters?: IycCharterSearchFilters): Promise<IycCharterSearchResult>;
19216
+
19217
+ /**
19218
+ * Reads one yacht's real charter calendar for a yachtId from searchCharterYachts — whether
19219
+ * it's marked available at all, and the exact list of dates the site's own calendar has
19220
+ * booked. THROWS if the endpoint's shape changes underneath it.
19221
+ */
19222
+ checkCharterAvailability(yachtId: string): Promise<IycCharterAvailability>;
19223
+ }
19224
+ }
19225
+
18478
19226
  declare namespace BowmarkProvider_jasmine_dilucci {
18479
19227
  // ── Jasmine DiLucci Life Coaching — the unit's own declarations, verbatim ──
18480
19228
  interface FormField {
@@ -19098,12 +19846,14 @@ interface KeepaProduct { asin: string; domainId: number; title: string; csv?: un
19098
19846
 
19099
19847
  /**
19100
19848
  * Keepa's documented Amazon product API — reads a product's native price history and metadata
19101
- * by ASIN. Requires a caller-provided Keepa API key.
19849
+ * by ASIN. Uses Bowmark's Keepa key and charges each request to your account; send your own
19850
+ * key as the `x-bowmark-vendor-key-keepa` header to spend your own Keepa tokens instead.
19102
19851
  */
19103
19852
  interface Unit {
19104
19853
  /**
19105
19854
  * Reads Keepa's native Amazon product record and compact price-history series for one ASIN.
19106
- * Requires a caller-provided Keepa API key.
19855
+ * Uses Bowmark's Keepa key and charges each request to your account; send your own key as the
19856
+ * `x-bowmark-vendor-key-keepa` header to spend your own Keepa tokens instead.
19107
19857
  */
19108
19858
  getProduct(args: { asin: string; domain?: number; stats?: number }): Promise<KeepaProductResult>;
19109
19859
  }
@@ -24656,6 +25406,43 @@ interface positivegridRetailerSearch {
24656
25406
  }
24657
25407
  }
24658
25408
 
25409
+ declare namespace BowmarkProvider_postiz {
25410
+ // ── Postiz — the unit's own declarations, verbatim ──
25411
+ interface PostizPost {
25412
+ id: string;
25413
+ content: string;
25414
+ state?: string;
25415
+ publishDate?: string;
25416
+ integration?: string;
25417
+ group?: string;
25418
+ }
25419
+
25420
+ interface ListPostsArgs {
25421
+ /** ISO 8601 — Postiz's own list endpoint requires both bounds. */
25422
+ startDate: string;
25423
+ endDate: string;
25424
+ customer?: string;
25425
+ }
25426
+
25427
+ interface CreatePostArgs {
25428
+ integrationId: string;
25429
+ content: string;
25430
+ type?: "draft" | "schedule" | "now";
25431
+ date?: string;
25432
+ settings?: Record<string, unknown>;
25433
+ shortLink?: boolean;
25434
+ }
25435
+
25436
+ /** Schedule and publish posts across multiple social media platforms */
25437
+ interface Unit {
25438
+ /** List scheduled and published posts for a workspace within a date range. */
25439
+ listPosts(args: ListPostsArgs): Promise<PostizPost[]>;
25440
+
25441
+ /** Create and schedule a new post across a connected social media account. */
25442
+ createPost(args: CreatePostArgs): Promise<PostizPost>;
25443
+ }
25444
+ }
25445
+
24659
25446
  declare namespace BowmarkProvider_premierbuildings {
24660
25447
  // ── Premier Portable Buildings — the unit's own declarations, verbatim ──
24661
25448
  interface PremierbuildingsStyle {
@@ -27188,6 +27975,47 @@ interface SemihandmadePriceResult {
27188
27975
  }
27189
27976
  }
27190
27977
 
27978
+ declare namespace BowmarkProvider_serper {
27979
+ // ── Serper — the unit's own declarations, verbatim ──
27980
+ interface SerperOrganicResult {
27981
+ position: number;
27982
+ title: string;
27983
+ link: string; // the destination url
27984
+ snippet: string | null;
27985
+ date: string | null;
27986
+ }
27987
+
27988
+ interface SerperSearchOptions {
27989
+ num?: number; // 1-100, default 10
27990
+ gl?: string; // country, e.g. "us"
27991
+ hl?: string; // language, e.g. "en"
27992
+ }
27993
+
27994
+ interface SerperSearchResult {
27995
+ query: string;
27996
+ results: SerperOrganicResult[]; // empty only when Google matched nothing
27997
+ credits: number | null; // Serper credits this search spent
27998
+ warnings: string[];
27999
+ }
28000
+
28001
+ /**
28002
+ * Google's own search results as JSON through Serper's API — honours site:, quoted phrases and
28003
+ * every other Google operator, in about a second. Uses Bowmark's Serper key and charges each
28004
+ * search to your account, or your own key sent as the `x-bowmark-vendor-key-serper` header.
28005
+ */
28006
+ interface Unit {
28007
+ /**
28008
+ * Runs a Google search and returns Google's organic results — position, title, destination
28009
+ * url, snippet — with every Google operator honoured. `site:cal.com "Chris Field"` returns
28010
+ * only cal.com pages naming him (cal.com/analytics/quick-chat among them), which is how to
28011
+ * find a page on one site by any words printed on it. An empty `results` is Google matching
28012
+ * nothing. Uses Bowmark's Serper key and charges each search to your account; send your own
28013
+ * key as the `x-bowmark-vendor-key-serper` header to spend your own credits instead.
28014
+ */
28015
+ searchGoogle(query: string, opts?: SerperSearchOptions): Promise<SerperSearchResult>;
28016
+ }
28017
+ }
28018
+
27191
28019
  declare namespace BowmarkProvider_sitmeanssit {
27192
28020
  // ── Sit Means Sit — the unit's own declarations, verbatim ──
27193
28021
  interface SitmeanssitLocation {
@@ -32522,6 +33350,7 @@ interface BowmarkProviders {
32522
33350
  cruiselakegeneva: BowmarkProvider_cruiselakegeneva.Unit;
32523
33351
  culturefly: BowmarkProvider_culturefly.Unit;
32524
33352
  curiocity: BowmarkProvider_curiocity.Unit;
33353
+ currency_exchange: BowmarkProvider_currency_exchange.Unit;
32525
33354
  cyberpowerpc: BowmarkProvider_cyberpowerpc.Unit;
32526
33355
  dahlconsulting: BowmarkProvider_dahlconsulting.Unit;
32527
33356
  dansons: BowmarkProvider_dansons.Unit;
@@ -32529,6 +33358,7 @@ interface BowmarkProviders {
32529
33358
  deangroup: BowmarkProvider_deangroup.Unit;
32530
33359
  decked: BowmarkProvider_decked.Unit;
32531
33360
  decksdirect: BowmarkProvider_decksdirect.Unit;
33361
+ dell: BowmarkProvider_dell.Unit;
32532
33362
  deltadentalma: BowmarkProvider_deltadentalma.Unit;
32533
33363
  dentalplans: BowmarkProvider_dentalplans.Unit;
32534
33364
  detailxperts: BowmarkProvider_detailxperts.Unit;
@@ -32586,6 +33416,8 @@ interface BowmarkProviders {
32586
33416
  goloadup: BowmarkProvider_goloadup.Unit;
32587
33417
  goodway: BowmarkProvider_goodway.Unit;
32588
33418
  google_flights: BowmarkProvider_google_flights.Unit;
33419
+ google_maps: BowmarkProvider_google_maps.Unit;
33420
+ google_news: BowmarkProvider_google_news.Unit;
32589
33421
  gostoreit: BowmarkProvider_gostoreit.Unit;
32590
33422
  gotchacovered: BowmarkProvider_gotchacovered.Unit;
32591
33423
  grainger: BowmarkProvider_grainger.Unit;
@@ -32597,7 +33429,9 @@ interface BowmarkProviders {
32597
33429
  hansons: BowmarkProvider_hansons.Unit;
32598
33430
  harmar: BowmarkProvider_harmar.Unit;
32599
33431
  hauslabs: BowmarkProvider_hauslabs.Unit;
33432
+ havenenergy: BowmarkProvider_havenenergy.Unit;
32600
33433
  haydenhomes: BowmarkProvider_haydenhomes.Unit;
33434
+ hccts: BowmarkProvider_hccts.Unit;
32601
33435
  healthcare_gov: BowmarkProvider_healthcare_gov.Unit;
32602
33436
  heatherwood: BowmarkProvider_heatherwood.Unit;
32603
33437
  hellofresh: BowmarkProvider_hellofresh.Unit;
@@ -32621,6 +33455,7 @@ interface BowmarkProviders {
32621
33455
  islllc: BowmarkProvider_islllc.Unit;
32622
33456
  istanbulkart: BowmarkProvider_istanbulkart.Unit;
32623
33457
  ivoryhomes: BowmarkProvider_ivoryhomes.Unit;
33458
+ iyc: BowmarkProvider_iyc.Unit;
32624
33459
  jasmine_dilucci: BowmarkProvider_jasmine_dilucci.Unit;
32625
33460
  jennikayne: BowmarkProvider_jennikayne.Unit;
32626
33461
  joybird: BowmarkProvider_joybird.Unit;
@@ -32703,6 +33538,7 @@ interface BowmarkProviders {
32703
33538
  polytex: BowmarkProvider_polytex.Unit;
32704
33539
  poshmark: BowmarkProvider_poshmark.Unit;
32705
33540
  positivegrid: BowmarkProvider_positivegrid.Unit;
33541
+ postiz: BowmarkProvider_postiz.Unit;
32706
33542
  premierbuildings: BowmarkProvider_premierbuildings.Unit;
32707
33543
  progressive: BowmarkProvider_progressive.Unit;
32708
33544
  prolook: BowmarkProvider_prolook.Unit;
@@ -32732,6 +33568,7 @@ interface BowmarkProviders {
32732
33568
  selectblinds: BowmarkProvider_selectblinds.Unit;
32733
33569
  sellcell: BowmarkProvider_sellcell.Unit;
32734
33570
  semihandmade: BowmarkProvider_semihandmade.Unit;
33571
+ serper: BowmarkProvider_serper.Unit;
32735
33572
  sitmeanssit: BowmarkProvider_sitmeanssit.Unit;
32736
33573
  sixflags: BowmarkProvider_sixflags.Unit;
32737
33574
  smartsign: BowmarkProvider_smartsign.Unit;
@@ -84519,11 +85356,13 @@ interface BowmarkProviders {
84519
85356
  * `run()` script, and the Proxy over HTTP in a caller's own process. They are
84520
85357
  * generated once precisely so those two cannot drift. */
84521
85358
  interface BowmarkLibrary {
85359
+ booking_links: BowmarkCapability_booking_links.Unit;
84522
85360
  bundles: BowmarkCapability_bundles.Unit;
84523
85361
  cable_railing_quote: BowmarkCapability_cable_railing_quote.Unit;
84524
85362
  cars: BowmarkCapability_cars.Unit;
84525
85363
  costume_size_check: BowmarkCapability_costume_size_check.Unit;
84526
85364
  coworking: BowmarkCapability_coworking.Unit;
85365
+ currency_exchange: BowmarkCapability_currency_exchange.Unit;
84527
85366
  custom_sofa_configurator: BowmarkCapability_custom_sofa_configurator.Unit;
84528
85367
  delivery: BowmarkCapability_delivery.Unit;
84529
85368
  developer_api_key_signup: BowmarkCapability_developer_api_key_signup.Unit;