@quikturn/logos 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +498 -0
- package/dist/client/index.cjs +726 -0
- package/dist/client/index.d.cts +399 -0
- package/dist/client/index.d.ts +399 -0
- package/dist/client/index.mjs +721 -0
- package/dist/index.cjs +319 -0
- package/dist/index.d.cts +437 -0
- package/dist/index.d.ts +437 -0
- package/dist/index.mjs +294 -0
- package/dist/server/index.cjs +858 -0
- package/dist/server/index.d.cts +423 -0
- package/dist/server/index.d.ts +423 -0
- package/dist/server/index.mjs +854 -0
- package/package.json +89 -0
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
/** Theme adjusts the gamma curve applied during image transformation. */
|
|
2
|
+
type ThemeOption = "light" | "dark";
|
|
3
|
+
/** Full MIME-type output formats supported by the worker's image pipeline. */
|
|
4
|
+
type SupportedOutputFormat = "image/png" | "image/jpeg" | "image/webp" | "image/avif";
|
|
5
|
+
/** Shorthand aliases accepted in query parameters and SDK options. */
|
|
6
|
+
type FormatShorthand = "png" | "jpeg" | "webp" | "avif";
|
|
7
|
+
/**
|
|
8
|
+
* Structured metadata parsed from the worker's response headers.
|
|
9
|
+
*
|
|
10
|
+
* Every successful response includes cache, rate-limit, and quota information.
|
|
11
|
+
* Transformation metadata is present when the image pipeline processes the request.
|
|
12
|
+
*/
|
|
13
|
+
interface LogoMetadata {
|
|
14
|
+
cache: {
|
|
15
|
+
status: "HIT" | "MISS";
|
|
16
|
+
};
|
|
17
|
+
rateLimit: {
|
|
18
|
+
remaining: number;
|
|
19
|
+
reset: Date;
|
|
20
|
+
};
|
|
21
|
+
quota: {
|
|
22
|
+
remaining: number;
|
|
23
|
+
limit: number;
|
|
24
|
+
};
|
|
25
|
+
transformation: {
|
|
26
|
+
applied: boolean;
|
|
27
|
+
status?: "not-requested" | "unsupported-format" | "transformation-error";
|
|
28
|
+
method?: "images-binding";
|
|
29
|
+
width?: number;
|
|
30
|
+
greyscale?: boolean;
|
|
31
|
+
gamma?: number;
|
|
32
|
+
};
|
|
33
|
+
tokenPrefix?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Response shape returned by the browser client's `get()` method.
|
|
37
|
+
*
|
|
38
|
+
* - `url` — A `blob:` object URL suitable for `<img src>`.
|
|
39
|
+
* - `blob` — The raw image Blob for further processing.
|
|
40
|
+
* - `contentType` — MIME type of the image (e.g. "image/webp").
|
|
41
|
+
* - `metadata` — Parsed response headers (cache, rate-limit, quota, transformation).
|
|
42
|
+
*/
|
|
43
|
+
interface BrowserLogoResponse {
|
|
44
|
+
url: string;
|
|
45
|
+
blob: Blob;
|
|
46
|
+
contentType: string;
|
|
47
|
+
metadata: LogoMetadata;
|
|
48
|
+
}
|
|
49
|
+
/** Lifecycle status of a background scrape job. */
|
|
50
|
+
type ScrapeJobStatus = "pending" | "complete" | "failed";
|
|
51
|
+
/**
|
|
52
|
+
* Event emitted during scrape polling to report progress.
|
|
53
|
+
*
|
|
54
|
+
* - `status` — Current job status.
|
|
55
|
+
* - `progress` — Optional progress percentage (0-100).
|
|
56
|
+
* - `logo` — Present when status is "complete"; contains the scraped logo details.
|
|
57
|
+
* - `error` — Present when status is "failed"; contains the error message.
|
|
58
|
+
*/
|
|
59
|
+
interface ScrapeProgressEvent {
|
|
60
|
+
status: ScrapeJobStatus;
|
|
61
|
+
progress?: number;
|
|
62
|
+
logo?: {
|
|
63
|
+
id: number;
|
|
64
|
+
url: string;
|
|
65
|
+
companyId: number;
|
|
66
|
+
companyName: string;
|
|
67
|
+
};
|
|
68
|
+
error?: string;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Possible attribution verification states for free-tier consumers.
|
|
72
|
+
*
|
|
73
|
+
* - "verified" — Attribution confirmed and valid.
|
|
74
|
+
* - "pending" — Verification in progress; treated as valid.
|
|
75
|
+
* - "unverified" — Attribution not yet set up.
|
|
76
|
+
* - "failed" — Verification attempted but failed.
|
|
77
|
+
* - "grace-period" — Temporary grace; validity depends on graceDeadline.
|
|
78
|
+
* - "error" — An error occurred during verification.
|
|
79
|
+
*/
|
|
80
|
+
type AttributionStatus = "verified" | "pending" | "unverified" | "failed" | "grace-period" | "error";
|
|
81
|
+
/**
|
|
82
|
+
* Structured attribution information parsed from response headers.
|
|
83
|
+
*
|
|
84
|
+
* - `status` — Current attribution verification state.
|
|
85
|
+
* - `graceDeadline` — If in grace period, the deadline by which attribution must be verified.
|
|
86
|
+
* - `verifiedAt` — Timestamp of when attribution was last verified.
|
|
87
|
+
* - `isValid` — Derived boolean: true when status is "verified", "pending",
|
|
88
|
+
* or "grace-period" with a future graceDeadline.
|
|
89
|
+
*/
|
|
90
|
+
interface AttributionInfo {
|
|
91
|
+
status: AttributionStatus;
|
|
92
|
+
graceDeadline?: Date;
|
|
93
|
+
verifiedAt?: Date;
|
|
94
|
+
isValid: boolean;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* @quikturn/logos SDK — Browser Fetch Wrapper
|
|
99
|
+
*
|
|
100
|
+
* Low-level fetch wrapper for the browser client entry point. Handles HTTP
|
|
101
|
+
* error mapping, retry logic for rate-limited and server-error responses,
|
|
102
|
+
* AbortSignal propagation, and proactive warning callbacks when rate-limit
|
|
103
|
+
* or quota headroom drops below 10%.
|
|
104
|
+
*
|
|
105
|
+
* This module NEVER sets an Authorization header. Publishable keys are
|
|
106
|
+
* passed as query parameters by the URL builder, not as bearer tokens.
|
|
107
|
+
*/
|
|
108
|
+
/**
|
|
109
|
+
* Options accepted by {@link browserFetch}.
|
|
110
|
+
*
|
|
111
|
+
* - `maxRetries` — Maximum number of retry attempts for 429/500 responses. Default: 2.
|
|
112
|
+
* - `signal` — An `AbortSignal` to cancel the in-flight request.
|
|
113
|
+
* - `format` — MIME type string used as the `Accept` request header.
|
|
114
|
+
* - `onRateLimitWarning` — Called when `X-RateLimit-Remaining` drops below 10% of the limit.
|
|
115
|
+
* - `onQuotaWarning` — Called when `X-Quota-Remaining` drops below 10% of the limit.
|
|
116
|
+
*/
|
|
117
|
+
interface FetcherOptions {
|
|
118
|
+
maxRetries?: number;
|
|
119
|
+
signal?: AbortSignal;
|
|
120
|
+
format?: string;
|
|
121
|
+
onRateLimitWarning?: (remaining: number, limit: number) => void;
|
|
122
|
+
onQuotaWarning?: (remaining: number, limit: number) => void;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Performs a fetch request to the Logos API with error mapping and retry logic.
|
|
126
|
+
*
|
|
127
|
+
* **Error mapping:**
|
|
128
|
+
* | Status | Error Class | Notes |
|
|
129
|
+
* |--------|-----------------------|--------------------------------------------|
|
|
130
|
+
* | 401 | AuthenticationError | Invalid or missing API token |
|
|
131
|
+
* | 403 | ForbiddenError | Body text used as `reason` |
|
|
132
|
+
* | 404 | NotFoundError | Domain extracted from URL path |
|
|
133
|
+
* | 429 | QuotaExceededError | When `X-Quota-Limit` header is present |
|
|
134
|
+
* | 429 | RateLimitError | After retries are exhausted |
|
|
135
|
+
* | 500 | LogoError | After a single retry attempt |
|
|
136
|
+
*
|
|
137
|
+
* **Retry behavior:**
|
|
138
|
+
* - 429: Waits `Retry-After` seconds (default 60s), retries up to `maxRetries`.
|
|
139
|
+
* If `X-Quota-Limit` is present, throws `QuotaExceededError` immediately.
|
|
140
|
+
* - 500: Retries once after a 1-second delay, then throws.
|
|
141
|
+
* - AbortError: Never retried; throws immediately.
|
|
142
|
+
* - Network errors: Never retried; throws immediately.
|
|
143
|
+
*
|
|
144
|
+
* @param url - Fully-qualified Logos API URL (built by `logoUrl`).
|
|
145
|
+
* @param options - Optional fetch configuration.
|
|
146
|
+
* @returns The raw `Response` object on success (2xx).
|
|
147
|
+
*
|
|
148
|
+
* @throws {AuthenticationError} On 401.
|
|
149
|
+
* @throws {ForbiddenError} On 403.
|
|
150
|
+
* @throws {NotFoundError} On 404.
|
|
151
|
+
* @throws {RateLimitError} On 429 after retries exhausted (no quota header).
|
|
152
|
+
* @throws {QuotaExceededError} On 429 with `X-Quota-Limit` header.
|
|
153
|
+
* @throws {LogoError} On 500, network error, or abort.
|
|
154
|
+
*/
|
|
155
|
+
declare function browserFetch(url: string, options?: FetcherOptions): Promise<Response>;
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* @quikturn/logos SDK -- Scrape Poller
|
|
159
|
+
*
|
|
160
|
+
* Handles 202 (scrape_pending) responses from the Logos API. When the API
|
|
161
|
+
* returns a 202 with a {@link ScrapePendingResponse} body, this module polls
|
|
162
|
+
* the scrape job status URL with exponential backoff until the job completes,
|
|
163
|
+
* fails, or the configured timeout elapses.
|
|
164
|
+
*
|
|
165
|
+
* On completion, re-fetches the original logo URL (with optional token) and
|
|
166
|
+
* returns the final Response to the caller.
|
|
167
|
+
*/
|
|
168
|
+
|
|
169
|
+
/** A fetch function that takes a URL and returns a Response promise. */
|
|
170
|
+
type FetchFn = (url: string) => Promise<Response>;
|
|
171
|
+
/**
|
|
172
|
+
* Options accepted by {@link handleScrapeResponse}.
|
|
173
|
+
*
|
|
174
|
+
* - `scrapeTimeout` -- Maximum time (ms) to wait for the scrape to complete. Default: 30_000.
|
|
175
|
+
* - `onScrapeProgress` -- Called after each poll with the latest progress event.
|
|
176
|
+
* - `signal` -- An `AbortSignal` to cancel the polling loop.
|
|
177
|
+
* - `token` -- API token appended to the final logo re-fetch URL.
|
|
178
|
+
*/
|
|
179
|
+
interface ScrapePollerOptions {
|
|
180
|
+
scrapeTimeout?: number;
|
|
181
|
+
onScrapeProgress?: (event: ScrapeProgressEvent) => void;
|
|
182
|
+
signal?: AbortSignal;
|
|
183
|
+
token?: string;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Inspects a response from the Logos API and, if it is a 202 (scrape pending),
|
|
187
|
+
* polls the scrape job until completion and re-fetches the logo.
|
|
188
|
+
*
|
|
189
|
+
* **Non-202 responses** are returned immediately as a passthrough.
|
|
190
|
+
*
|
|
191
|
+
* **202 responses** trigger the following lifecycle:
|
|
192
|
+
* 1. Parse the {@link ScrapePendingResponse} JSON body to extract `scrapeJob`.
|
|
193
|
+
* 2. Wait `estimatedWaitMs` (the initial backoff interval).
|
|
194
|
+
* 3. Poll `scrapeJob.pollUrl` via `fetchFn`, parse the {@link ScrapeProgressEvent}.
|
|
195
|
+
* 4. Call `onScrapeProgress` with the event.
|
|
196
|
+
* 5. If `status === "complete"`, re-fetch `originalUrl` (with token if provided).
|
|
197
|
+
* 6. If `status === "failed"`, throw `LogoError` with code `SCRAPE_FAILED`.
|
|
198
|
+
* 7. If `status === "pending"`, double the backoff (capped at 5 s) and repeat.
|
|
199
|
+
* 8. If `scrapeTimeout` elapses, throw {@link ScrapeTimeoutError}.
|
|
200
|
+
* 9. If `signal` is aborted, throw `LogoError` with code `ABORT_ERROR`.
|
|
201
|
+
*
|
|
202
|
+
* @param response -- The raw Response from the initial logo fetch.
|
|
203
|
+
* @param originalUrl -- The original logo URL (re-fetched after scrape completes).
|
|
204
|
+
* @param fetchFn -- The fetch function (typically `browserFetch`).
|
|
205
|
+
* @param options -- Optional polling configuration.
|
|
206
|
+
* @returns The final logo Response on success.
|
|
207
|
+
*
|
|
208
|
+
* @throws {ScrapeTimeoutError} When polling exceeds `scrapeTimeout`.
|
|
209
|
+
* @throws {LogoError} When the scrape job fails, is aborted, or encounters a network error.
|
|
210
|
+
*/
|
|
211
|
+
declare function handleScrapeResponse(response: Response, originalUrl: string, fetchFn: FetchFn, options?: ScrapePollerOptions): Promise<Response>;
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* @quikturn/logos SDK — Attribution Header Parser
|
|
215
|
+
*
|
|
216
|
+
* Parses attribution-related response headers returned by the Cloudflare Worker
|
|
217
|
+
* for free-tier consumers. The worker attaches these headers to indicate whether
|
|
218
|
+
* the consumer has properly attributed Quikturn on their site.
|
|
219
|
+
*
|
|
220
|
+
* | Header | Field |
|
|
221
|
+
* |----------------------------------|-----------------|
|
|
222
|
+
* | `X-Attribution-Status` | `status` |
|
|
223
|
+
* | `X-Attribution-Grace-Deadline` | `graceDeadline` |
|
|
224
|
+
* | `X-Attribution-Verified-At` | `verifiedAt` |
|
|
225
|
+
*
|
|
226
|
+
* The derived `isValid` field is computed from the status:
|
|
227
|
+
* - "verified" -> true
|
|
228
|
+
* - "pending" -> true
|
|
229
|
+
* - "grace-period" -> true only if graceDeadline exists and is in the future
|
|
230
|
+
* - "unverified" -> false
|
|
231
|
+
* - "failed" -> false
|
|
232
|
+
* - "error" -> false
|
|
233
|
+
*/
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Parses attribution response headers into a typed `AttributionInfo` object.
|
|
237
|
+
*
|
|
238
|
+
* Returns `null` when the `X-Attribution-Status` header is absent, indicating
|
|
239
|
+
* that the response is not from a free-tier request (attribution does not apply).
|
|
240
|
+
*
|
|
241
|
+
* @param headers - The `Headers` object from a fetch `Response`.
|
|
242
|
+
* @returns An `AttributionInfo` object, or `null` if no attribution header is present.
|
|
243
|
+
*
|
|
244
|
+
* @example
|
|
245
|
+
* ```ts
|
|
246
|
+
* const attribution = parseAttributionStatus(response.headers);
|
|
247
|
+
* if (attribution && !attribution.isValid) {
|
|
248
|
+
* console.warn("Attribution required for free-tier usage");
|
|
249
|
+
* }
|
|
250
|
+
* ```
|
|
251
|
+
*/
|
|
252
|
+
declare function parseAttributionStatus(headers: Headers): AttributionInfo | null;
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* @quikturn/logos SDK — Browser Client Class
|
|
256
|
+
*
|
|
257
|
+
* High-level API for fetching logos in the browser. Integrates the URL builder,
|
|
258
|
+
* browser fetcher, scrape poller, and header parser into a single ergonomic
|
|
259
|
+
* class with lifecycle management and event emission.
|
|
260
|
+
*
|
|
261
|
+
* Usage:
|
|
262
|
+
* ```ts
|
|
263
|
+
* import { QuikturnLogos } from "@quikturn/logos/client";
|
|
264
|
+
*
|
|
265
|
+
* const client = new QuikturnLogos({ token: "qt_your_key" });
|
|
266
|
+
* const { url, blob, metadata } = await client.get("github.com", { size: 256 });
|
|
267
|
+
* document.querySelector("img").src = url;
|
|
268
|
+
*
|
|
269
|
+
* // Clean up when done
|
|
270
|
+
* client.destroy();
|
|
271
|
+
* ```
|
|
272
|
+
*/
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Configuration options for the browser client constructor.
|
|
276
|
+
*
|
|
277
|
+
* - `token` — Required publishable key (qt_/pk_ prefix). Server keys (sk_) are rejected.
|
|
278
|
+
* - `baseUrl` — Override the default API base URL. Useful for testing or proxied environments.
|
|
279
|
+
* - `maxRetries` — Maximum number of retry attempts for rate-limited/server-error responses. Default: 2.
|
|
280
|
+
*/
|
|
281
|
+
interface BrowserClientOptions {
|
|
282
|
+
token: string;
|
|
283
|
+
baseUrl?: string;
|
|
284
|
+
maxRetries?: number;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Options accepted by {@link QuikturnLogos.get}.
|
|
288
|
+
*
|
|
289
|
+
* - `size` — Output width in pixels.
|
|
290
|
+
* - `width` — Alias for `size`.
|
|
291
|
+
* - `greyscale` — When true, returns a greyscale image.
|
|
292
|
+
* - `theme` — "light" or "dark" gamma adjustment.
|
|
293
|
+
* - `format` — Output image format (MIME type or shorthand).
|
|
294
|
+
* - `autoScrape` — When true, triggers background scrape if logo is not found.
|
|
295
|
+
* - `scrapeTimeout` — Maximum time (ms) to wait for a scrape to complete.
|
|
296
|
+
* - `onScrapeProgress`— Callback fired on each scrape poll.
|
|
297
|
+
* - `signal` — AbortSignal to cancel the request.
|
|
298
|
+
*/
|
|
299
|
+
interface GetOptions {
|
|
300
|
+
size?: number;
|
|
301
|
+
width?: number;
|
|
302
|
+
greyscale?: boolean;
|
|
303
|
+
theme?: ThemeOption;
|
|
304
|
+
format?: SupportedOutputFormat | FormatShorthand;
|
|
305
|
+
autoScrape?: boolean;
|
|
306
|
+
scrapeTimeout?: number;
|
|
307
|
+
onScrapeProgress?: (event: ScrapeProgressEvent) => void;
|
|
308
|
+
signal?: AbortSignal;
|
|
309
|
+
}
|
|
310
|
+
/** Events emitted by the client via the on()/off() interface. */
|
|
311
|
+
type ClientEvent = "rateLimitWarning" | "quotaWarning";
|
|
312
|
+
/** Handler signature for client events. Receives the remaining count and tier limit. */
|
|
313
|
+
type EventHandler = (remaining: number, limit: number) => void;
|
|
314
|
+
/**
|
|
315
|
+
* Browser client for the Quikturn Logos API.
|
|
316
|
+
*
|
|
317
|
+
* Manages the full lifecycle of logo requests including URL construction,
|
|
318
|
+
* network fetching with retries, scrape polling, response parsing, and
|
|
319
|
+
* blob URL management.
|
|
320
|
+
*
|
|
321
|
+
* The client tracks all created `blob:` object URLs and revokes them on
|
|
322
|
+
* {@link destroy}, preventing memory leaks in long-lived browser sessions.
|
|
323
|
+
*/
|
|
324
|
+
declare class QuikturnLogos {
|
|
325
|
+
private readonly token;
|
|
326
|
+
private readonly baseUrl?;
|
|
327
|
+
private readonly maxRetries;
|
|
328
|
+
private readonly listeners;
|
|
329
|
+
private readonly objectUrls;
|
|
330
|
+
constructor(options: BrowserClientOptions);
|
|
331
|
+
/**
|
|
332
|
+
* Fetches a logo for the given domain and returns a {@link BrowserLogoResponse}.
|
|
333
|
+
*
|
|
334
|
+
* The returned `url` is a `blob:` object URL suitable for `<img src>`.
|
|
335
|
+
* The client tracks these URLs and revokes them on {@link destroy}.
|
|
336
|
+
*
|
|
337
|
+
* @param domain - The domain to fetch a logo for (e.g. "github.com").
|
|
338
|
+
* @param options - Optional request configuration.
|
|
339
|
+
* @returns A BrowserLogoResponse containing the blob URL, raw Blob, content type, and metadata.
|
|
340
|
+
*
|
|
341
|
+
* @example
|
|
342
|
+
* ```ts
|
|
343
|
+
* const client = new QuikturnLogos({ token: "qt_abc123" });
|
|
344
|
+
* const { url, metadata } = await client.get("github.com", { size: 256 });
|
|
345
|
+
* document.querySelector("img")!.src = url;
|
|
346
|
+
* ```
|
|
347
|
+
*/
|
|
348
|
+
get(domain: string, options?: GetOptions): Promise<BrowserLogoResponse>;
|
|
349
|
+
/**
|
|
350
|
+
* Returns a plain URL string for the given domain without making a network request.
|
|
351
|
+
*
|
|
352
|
+
* Useful for `<img>` tags, CSS `background-image`, or preloading hints where
|
|
353
|
+
* a direct URL is needed rather than a blob.
|
|
354
|
+
*
|
|
355
|
+
* @param domain - The domain to build a URL for.
|
|
356
|
+
* @param options - Optional request parameters (size, format, etc.).
|
|
357
|
+
* @returns A fully-qualified Logos API URL string.
|
|
358
|
+
*
|
|
359
|
+
* @example
|
|
360
|
+
* ```ts
|
|
361
|
+
* const client = new QuikturnLogos({ token: "qt_abc123" });
|
|
362
|
+
* const url = client.getUrl("github.com", { size: 128, format: "webp" });
|
|
363
|
+
* // => "https://logos.getquikturn.io/github.com?token=qt_abc123&format=webp"
|
|
364
|
+
* ```
|
|
365
|
+
*/
|
|
366
|
+
getUrl(domain: string, options?: Omit<GetOptions, "autoScrape" | "scrapeTimeout" | "onScrapeProgress" | "signal">): string;
|
|
367
|
+
/**
|
|
368
|
+
* Registers an event listener for a client event.
|
|
369
|
+
*
|
|
370
|
+
* @param event - The event name ("rateLimitWarning" or "quotaWarning").
|
|
371
|
+
* @param handler - Callback invoked with (remaining, limit) when the event fires.
|
|
372
|
+
*/
|
|
373
|
+
on(event: ClientEvent, handler: EventHandler): void;
|
|
374
|
+
/**
|
|
375
|
+
* Removes a previously registered event listener.
|
|
376
|
+
*
|
|
377
|
+
* @param event - The event name.
|
|
378
|
+
* @param handler - The handler to remove.
|
|
379
|
+
*/
|
|
380
|
+
off(event: ClientEvent, handler: EventHandler): void;
|
|
381
|
+
/**
|
|
382
|
+
* Cleans up client resources.
|
|
383
|
+
*
|
|
384
|
+
* Revokes all tracked `blob:` object URLs to free memory, and removes
|
|
385
|
+
* all registered event listeners. The client instance can still be used
|
|
386
|
+
* after destroy, but previously created blob URLs will no longer work.
|
|
387
|
+
*/
|
|
388
|
+
destroy(): void;
|
|
389
|
+
/**
|
|
390
|
+
* Emits an event to all registered listeners.
|
|
391
|
+
*
|
|
392
|
+
* @param event - The event name to emit.
|
|
393
|
+
* @param remaining - The remaining count.
|
|
394
|
+
* @param limit - The tier limit.
|
|
395
|
+
*/
|
|
396
|
+
private emit;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
export { type BrowserClientOptions, type ClientEvent, type EventHandler, type FetcherOptions, type GetOptions, QuikturnLogos, type ScrapePollerOptions, browserFetch, handleScrapeResponse, parseAttributionStatus };
|