litescrape-sdk 0.1.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 +283 -0
- package/dist/cjs/batch.d.ts +12 -0
- package/dist/cjs/batch.d.ts.map +1 -0
- package/dist/cjs/batch.js +131 -0
- package/dist/cjs/batch.js.map +1 -0
- package/dist/cjs/cache.d.ts +21 -0
- package/dist/cjs/cache.d.ts.map +1 -0
- package/dist/cjs/cache.js +112 -0
- package/dist/cjs/cache.js.map +1 -0
- package/dist/cjs/client.d.ts +38 -0
- package/dist/cjs/client.d.ts.map +1 -0
- package/dist/cjs/client.js +143 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/errors.d.ts +53 -0
- package/dist/cjs/errors.d.ts.map +1 -0
- package/dist/cjs/errors.js +121 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/index.d.ts +8 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +40 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/models.d.ts +1735 -0
- package/dist/cjs/models.d.ts.map +1 -0
- package/dist/cjs/models.js +389 -0
- package/dist/cjs/models.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/result.d.ts +23 -0
- package/dist/cjs/result.d.ts.map +1 -0
- package/dist/cjs/result.js +49 -0
- package/dist/cjs/result.js.map +1 -0
- package/dist/cjs/runtime.d.ts +53 -0
- package/dist/cjs/runtime.d.ts.map +1 -0
- package/dist/cjs/runtime.js +237 -0
- package/dist/cjs/runtime.js.map +1 -0
- package/dist/cjs/stores.d.ts +143 -0
- package/dist/cjs/stores.d.ts.map +1 -0
- package/dist/cjs/stores.js +194 -0
- package/dist/cjs/stores.js.map +1 -0
- package/dist/cjs/validation.d.ts +65 -0
- package/dist/cjs/validation.d.ts.map +1 -0
- package/dist/cjs/validation.js +122 -0
- package/dist/cjs/validation.js.map +1 -0
- package/dist/cjs/version.d.ts +2 -0
- package/dist/cjs/version.d.ts.map +1 -0
- package/dist/cjs/version.js +5 -0
- package/dist/cjs/version.js.map +1 -0
- package/dist/esm/batch.d.ts +12 -0
- package/dist/esm/batch.d.ts.map +1 -0
- package/dist/esm/batch.js +128 -0
- package/dist/esm/batch.js.map +1 -0
- package/dist/esm/cache.d.ts +21 -0
- package/dist/esm/cache.d.ts.map +1 -0
- package/dist/esm/cache.js +106 -0
- package/dist/esm/cache.js.map +1 -0
- package/dist/esm/client.d.ts +38 -0
- package/dist/esm/client.d.ts.map +1 -0
- package/dist/esm/client.js +138 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/errors.d.ts +53 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +106 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/models.d.ts +1735 -0
- package/dist/esm/models.d.ts.map +1 -0
- package/dist/esm/models.js +384 -0
- package/dist/esm/models.js.map +1 -0
- package/dist/esm/result.d.ts +23 -0
- package/dist/esm/result.d.ts.map +1 -0
- package/dist/esm/result.js +45 -0
- package/dist/esm/result.js.map +1 -0
- package/dist/esm/runtime.d.ts +53 -0
- package/dist/esm/runtime.d.ts.map +1 -0
- package/dist/esm/runtime.js +226 -0
- package/dist/esm/runtime.js.map +1 -0
- package/dist/esm/stores.d.ts +143 -0
- package/dist/esm/stores.d.ts.map +1 -0
- package/dist/esm/stores.js +190 -0
- package/dist/esm/stores.js.map +1 -0
- package/dist/esm/validation.d.ts +65 -0
- package/dist/esm/validation.d.ts.map +1 -0
- package/dist/esm/validation.js +109 -0
- package/dist/esm/validation.js.map +1 -0
- package/dist/esm/version.d.ts +2 -0
- package/dist/esm/version.d.ts.map +1 -0
- package/dist/esm/version.js +2 -0
- package/dist/esm/version.js.map +1 -0
- package/package.json +74 -0
- package/src/batch.ts +158 -0
- package/src/cache.ts +123 -0
- package/src/client.ts +199 -0
- package/src/errors.ts +120 -0
- package/src/index.ts +17 -0
- package/src/models.ts +570 -0
- package/src/package.json +3 -0
- package/src/result.ts +49 -0
- package/src/runtime.ts +255 -0
- package/src/stores.ts +206 -0
- package/src/validation.ts +140 -0
- package/src/version.ts +1 -0
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Semaphore = exports.emptyOutcome = exports.CLIENT_HEADER_VALUE = exports.USER_AGENT = exports.DEFAULT_BASE_URL = void 0;
|
|
4
|
+
exports.keySemaphore = keySemaphore;
|
|
5
|
+
exports.shouldRetry = shouldRetry;
|
|
6
|
+
exports.backoff = backoff;
|
|
7
|
+
exports.sleep = sleep;
|
|
8
|
+
exports.requestWithRetries = requestWithRetries;
|
|
9
|
+
exports.each = each;
|
|
10
|
+
const node_crypto_1 = require("node:crypto");
|
|
11
|
+
const promises_1 = require("node:timers/promises");
|
|
12
|
+
const errors_js_1 = require("./errors.js");
|
|
13
|
+
const version_js_1 = require("./version.js");
|
|
14
|
+
exports.DEFAULT_BASE_URL = "https://api.litescrape.com";
|
|
15
|
+
exports.USER_AGENT = `litescrape-sdk/${version_js_1.VERSION} (Node/${process.versions.node}; ${process.platform}; TypeScript)`;
|
|
16
|
+
exports.CLIENT_HEADER_VALUE = `typescript-sdk/${version_js_1.VERSION}`;
|
|
17
|
+
const emptyOutcome = () => ({
|
|
18
|
+
data: null,
|
|
19
|
+
error: null,
|
|
20
|
+
statusCode: null,
|
|
21
|
+
requestId: "",
|
|
22
|
+
attempts: 0,
|
|
23
|
+
});
|
|
24
|
+
exports.emptyOutcome = emptyOutcome;
|
|
25
|
+
/** FIFO gate. Waiting and backoff do not hold a network slot. */
|
|
26
|
+
class Semaphore {
|
|
27
|
+
limit;
|
|
28
|
+
active = 0;
|
|
29
|
+
queue = [];
|
|
30
|
+
constructor(limit) {
|
|
31
|
+
this.limit = limit;
|
|
32
|
+
}
|
|
33
|
+
async acquire(signal) {
|
|
34
|
+
signal?.throwIfAborted();
|
|
35
|
+
return new Promise((resolve, reject) => {
|
|
36
|
+
const waiter = {
|
|
37
|
+
start: () => {
|
|
38
|
+
signal?.removeEventListener("abort", waiter.cancel);
|
|
39
|
+
this.active++;
|
|
40
|
+
let released = false;
|
|
41
|
+
resolve(() => {
|
|
42
|
+
if (released)
|
|
43
|
+
return;
|
|
44
|
+
released = true;
|
|
45
|
+
this.active--;
|
|
46
|
+
this.drain();
|
|
47
|
+
});
|
|
48
|
+
},
|
|
49
|
+
cancel: () => {
|
|
50
|
+
const index = this.queue.indexOf(waiter);
|
|
51
|
+
if (index !== -1)
|
|
52
|
+
this.queue.splice(index, 1);
|
|
53
|
+
reject(signal?.reason);
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
if (this.active < this.limit)
|
|
57
|
+
waiter.start();
|
|
58
|
+
else {
|
|
59
|
+
this.queue.push(waiter);
|
|
60
|
+
signal?.addEventListener("abort", waiter.cancel, { once: true });
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
resize(limit) {
|
|
65
|
+
this.limit = limit;
|
|
66
|
+
this.drain();
|
|
67
|
+
}
|
|
68
|
+
drain() {
|
|
69
|
+
while (this.active < this.limit && this.queue.length)
|
|
70
|
+
this.queue.shift().start();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.Semaphore = Semaphore;
|
|
74
|
+
// One key-wide cap shared by overlapping scrape calls. Per-call limits are separate,
|
|
75
|
+
// so two callers with different overrides cannot accidentally multiply the key limit.
|
|
76
|
+
const sharedLimits = new Map();
|
|
77
|
+
function keySemaphore(key, baseUrl, limit) {
|
|
78
|
+
const identity = (0, node_crypto_1.createHash)("sha256")
|
|
79
|
+
.update(JSON.stringify([key, baseUrl]))
|
|
80
|
+
.digest("hex");
|
|
81
|
+
let entry = sharedLimits.get(identity);
|
|
82
|
+
if (!entry) {
|
|
83
|
+
entry = { semaphore: new Semaphore(limit), users: 0 };
|
|
84
|
+
sharedLimits.set(identity, entry);
|
|
85
|
+
}
|
|
86
|
+
else
|
|
87
|
+
entry.semaphore.resize(limit);
|
|
88
|
+
entry.users++;
|
|
89
|
+
const held = entry;
|
|
90
|
+
return {
|
|
91
|
+
semaphore: held.semaphore,
|
|
92
|
+
release: () => {
|
|
93
|
+
held.users--;
|
|
94
|
+
if (held.users === 0)
|
|
95
|
+
sharedLimits.delete(identity);
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function shouldRetry(error) {
|
|
100
|
+
if (error instanceof errors_js_1.TransportError)
|
|
101
|
+
return error.retryable;
|
|
102
|
+
return (error instanceof errors_js_1.APIError &&
|
|
103
|
+
(error.retryable ||
|
|
104
|
+
error.statusCode === 429 ||
|
|
105
|
+
(error.statusCode ?? 0) >= 500 ||
|
|
106
|
+
["proxy_capacity_unavailable", "upstream_session_unavailable", "service_unavailable"].includes(error.errorCode)));
|
|
107
|
+
}
|
|
108
|
+
function backoff(attempt, retryAfter = null) {
|
|
109
|
+
if (retryAfter !== null)
|
|
110
|
+
return Math.min(Math.max(retryAfter, 0), 30);
|
|
111
|
+
const ceiling = Math.min(30, 2 ** Math.min(Math.max(attempt - 1, 0), 6));
|
|
112
|
+
return ceiling * (0.5 + Math.random() / 2);
|
|
113
|
+
}
|
|
114
|
+
async function sleep(seconds, signal) {
|
|
115
|
+
signal?.throwIfAborted();
|
|
116
|
+
try {
|
|
117
|
+
await (0, promises_1.setTimeout)(seconds * 1000, undefined, { signal });
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
signal?.throwIfAborted();
|
|
121
|
+
throw error;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async function requestWithRetries(path, options) {
|
|
125
|
+
const { signal } = options;
|
|
126
|
+
const outcome = (0, exports.emptyOutcome)();
|
|
127
|
+
for (let attempt = 1; attempt <= options.attempts; attempt++) {
|
|
128
|
+
signal?.throwIfAborted();
|
|
129
|
+
const release = [];
|
|
130
|
+
try {
|
|
131
|
+
for (const semaphore of options.semaphores ?? [])
|
|
132
|
+
release.push(await semaphore.acquire(signal));
|
|
133
|
+
signal?.throwIfAborted();
|
|
134
|
+
const blocked = options.gate?.();
|
|
135
|
+
if (blocked) {
|
|
136
|
+
outcome.error = blocked;
|
|
137
|
+
outcome.statusCode = blocked.statusCode;
|
|
138
|
+
outcome.requestId = blocked.requestId;
|
|
139
|
+
return outcome;
|
|
140
|
+
}
|
|
141
|
+
Object.assign(outcome, (0, exports.emptyOutcome)(), { attempts: attempt });
|
|
142
|
+
const controller = new AbortController();
|
|
143
|
+
const timeout = setTimeout(() => controller.abort(new DOMException("HTTP transport timed out", "TimeoutError")), options.timeout * 1000);
|
|
144
|
+
const combined = signal ? AbortSignal.any([signal, controller.signal]) : controller.signal;
|
|
145
|
+
try {
|
|
146
|
+
const url = new URL(options.baseUrl + path);
|
|
147
|
+
for (const [key, value] of Object.entries(options.params ?? {}))
|
|
148
|
+
url.searchParams.set(key, value);
|
|
149
|
+
const response = await options.fetch(url, {
|
|
150
|
+
method: options.method ?? "GET",
|
|
151
|
+
redirect: "manual",
|
|
152
|
+
signal: combined,
|
|
153
|
+
headers: {
|
|
154
|
+
Accept: "application/json",
|
|
155
|
+
"User-Agent": exports.USER_AGENT,
|
|
156
|
+
"X-Litescrape-Client": exports.CLIENT_HEADER_VALUE,
|
|
157
|
+
Authorization: `Bearer ${options.apiKey}`,
|
|
158
|
+
...(options.body ? { "Content-Type": "application/json" } : {}),
|
|
159
|
+
...options.headers,
|
|
160
|
+
},
|
|
161
|
+
...(options.body ? { body: JSON.stringify(options.body) } : {}),
|
|
162
|
+
});
|
|
163
|
+
outcome.statusCode = response.status;
|
|
164
|
+
outcome.requestId = response.headers.get("x-request-id") ?? "";
|
|
165
|
+
let data;
|
|
166
|
+
let bodyError;
|
|
167
|
+
try {
|
|
168
|
+
data = await response.json();
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
bodyError = error;
|
|
172
|
+
}
|
|
173
|
+
signal?.throwIfAborted();
|
|
174
|
+
if (!(options.acceptedStatuses ?? [200]).includes(response.status)) {
|
|
175
|
+
outcome.error = (0, errors_js_1.apiError)(response.status, data, response.headers);
|
|
176
|
+
outcome.requestId = outcome.error instanceof errors_js_1.APIError ? outcome.error.requestId : outcome.requestId;
|
|
177
|
+
}
|
|
178
|
+
else if (bodyError) {
|
|
179
|
+
outcome.error = new errors_js_1.TransportError("Response body was not JSON", {
|
|
180
|
+
retryable: true,
|
|
181
|
+
cause: bodyError,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
else if (!(0, errors_js_1.isObject)(data)) {
|
|
185
|
+
outcome.error = new errors_js_1.TransportError("Response body was not a JSON object", { retryable: true });
|
|
186
|
+
}
|
|
187
|
+
else
|
|
188
|
+
outcome.data = data;
|
|
189
|
+
}
|
|
190
|
+
catch (cause) {
|
|
191
|
+
signal?.throwIfAborted();
|
|
192
|
+
const retryable = controller.signal.aborted ||
|
|
193
|
+
cause instanceof TypeError ||
|
|
194
|
+
(cause instanceof DOMException && ["AbortError", "TimeoutError"].includes(cause.name));
|
|
195
|
+
outcome.error = new errors_js_1.TransportError(cause instanceof Error ? cause.message : String(cause), {
|
|
196
|
+
retryable,
|
|
197
|
+
cause,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
finally {
|
|
201
|
+
clearTimeout(timeout);
|
|
202
|
+
}
|
|
203
|
+
// Set the fatal gate while the slot is held, before queued requests can start.
|
|
204
|
+
options.onOutcome?.(outcome);
|
|
205
|
+
}
|
|
206
|
+
finally {
|
|
207
|
+
for (const unlock of release.reverse())
|
|
208
|
+
unlock();
|
|
209
|
+
}
|
|
210
|
+
if (!outcome.error || attempt === options.attempts || !shouldRetry(outcome.error))
|
|
211
|
+
return outcome;
|
|
212
|
+
await sleep(backoff(attempt, outcome.error instanceof errors_js_1.APIError ? outcome.error.retryAfter : null), signal);
|
|
213
|
+
}
|
|
214
|
+
return outcome;
|
|
215
|
+
}
|
|
216
|
+
/** A bounded worker pool; errors stop new work and settle all workers before returning. */
|
|
217
|
+
async function each(items, limit, operation) {
|
|
218
|
+
let next = 0;
|
|
219
|
+
let failed = false;
|
|
220
|
+
const worker = async () => {
|
|
221
|
+
while (!failed && next < items.length) {
|
|
222
|
+
const item = items[next++];
|
|
223
|
+
try {
|
|
224
|
+
await operation(item);
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
failed = true;
|
|
228
|
+
throw error;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
const settled = await Promise.allSettled(Array.from({ length: Math.min(limit, items.length) }, worker));
|
|
233
|
+
const failure = settled.find((result) => result.status === "rejected");
|
|
234
|
+
if (failure?.status === "rejected")
|
|
235
|
+
throw failure.reason;
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type Rule } from "./validation.js";
|
|
3
|
+
export declare const playApps: {
|
|
4
|
+
hl: z.ZodDefault<z.ZodString>;
|
|
5
|
+
gl: z.ZodDefault<z.ZodString>;
|
|
6
|
+
q: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
7
|
+
chart: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
8
|
+
next_page_token: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
9
|
+
section_page_token: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
10
|
+
see_more_token: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
11
|
+
apps_category: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
12
|
+
age: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
13
|
+
AGE_RANGE1: "AGE_RANGE1";
|
|
14
|
+
AGE_RANGE2: "AGE_RANGE2";
|
|
15
|
+
AGE_RANGE3: "AGE_RANGE3";
|
|
16
|
+
}>>>;
|
|
17
|
+
store_device: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
18
|
+
car: "car";
|
|
19
|
+
chromebook: "chromebook";
|
|
20
|
+
phone: "phone";
|
|
21
|
+
tablet: "tablet";
|
|
22
|
+
tv: "tv";
|
|
23
|
+
watch: "watch";
|
|
24
|
+
}>>>;
|
|
25
|
+
};
|
|
26
|
+
export declare const playGames: {
|
|
27
|
+
hl: z.ZodDefault<z.ZodString>;
|
|
28
|
+
gl: z.ZodDefault<z.ZodString>;
|
|
29
|
+
q: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
30
|
+
chart: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
31
|
+
next_page_token: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
32
|
+
section_page_token: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
33
|
+
see_more_token: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
34
|
+
games_category: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
35
|
+
store_device: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
36
|
+
chromebook: "chromebook";
|
|
37
|
+
phone: "phone";
|
|
38
|
+
tablet: "tablet";
|
|
39
|
+
tv: "tv";
|
|
40
|
+
watch: "watch";
|
|
41
|
+
windows: "windows";
|
|
42
|
+
}>>>;
|
|
43
|
+
};
|
|
44
|
+
export declare const playBooks: {
|
|
45
|
+
hl: z.ZodDefault<z.ZodString>;
|
|
46
|
+
gl: z.ZodDefault<z.ZodString>;
|
|
47
|
+
q: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
48
|
+
chart: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
49
|
+
next_page_token: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
50
|
+
section_page_token: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
51
|
+
see_more_token: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
52
|
+
books_category: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
53
|
+
age: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
54
|
+
AGE_RANGE1: "AGE_RANGE1";
|
|
55
|
+
AGE_RANGE2: "AGE_RANGE2";
|
|
56
|
+
AGE_RANGE3: "AGE_RANGE3";
|
|
57
|
+
}>>>;
|
|
58
|
+
price: z.ZodOptional<z.ZodNullable<z.ZodPipe<z.ZodPipe<z.ZodUnion<readonly [z.ZodNumber, z.ZodPipe<z.ZodString, z.ZodTransform<number, string>>]>, z.ZodNumber>, z.ZodNumber>>>;
|
|
59
|
+
};
|
|
60
|
+
export declare const playMovies: {
|
|
61
|
+
hl: z.ZodDefault<z.ZodString>;
|
|
62
|
+
gl: z.ZodDefault<z.ZodString>;
|
|
63
|
+
q: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
64
|
+
chart: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
65
|
+
next_page_token: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
66
|
+
section_page_token: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
67
|
+
see_more_token: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
68
|
+
movies_category: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
69
|
+
age: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
70
|
+
AGE_RANGE1: "AGE_RANGE1";
|
|
71
|
+
AGE_RANGE2: "AGE_RANGE2";
|
|
72
|
+
AGE_RANGE3: "AGE_RANGE3";
|
|
73
|
+
}>>>;
|
|
74
|
+
};
|
|
75
|
+
export declare const playProduct: {
|
|
76
|
+
hl: z.ZodDefault<z.ZodString>;
|
|
77
|
+
gl: z.ZodDefault<z.ZodString>;
|
|
78
|
+
product_id: z.ZodString;
|
|
79
|
+
store: z.ZodDefault<z.ZodEnum<{
|
|
80
|
+
apps: "apps";
|
|
81
|
+
audiobooks: "audiobooks";
|
|
82
|
+
books: "books";
|
|
83
|
+
movies: "movies";
|
|
84
|
+
tv: "tv";
|
|
85
|
+
}>>;
|
|
86
|
+
season_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
87
|
+
};
|
|
88
|
+
export declare const playReviews: {
|
|
89
|
+
hl: z.ZodDefault<z.ZodString>;
|
|
90
|
+
gl: z.ZodDefault<z.ZodString>;
|
|
91
|
+
product_id: z.ZodString;
|
|
92
|
+
store: z.ZodDefault<z.ZodEnum<{
|
|
93
|
+
apps: "apps";
|
|
94
|
+
audiobooks: "audiobooks";
|
|
95
|
+
books: "books";
|
|
96
|
+
movies: "movies";
|
|
97
|
+
tv: "tv";
|
|
98
|
+
}>>;
|
|
99
|
+
platform: z.ZodDefault<z.ZodEnum<{
|
|
100
|
+
chromebook: "chromebook";
|
|
101
|
+
phone: "phone";
|
|
102
|
+
tablet: "tablet";
|
|
103
|
+
tv: "tv";
|
|
104
|
+
watch: "watch";
|
|
105
|
+
}>>;
|
|
106
|
+
rating: z.ZodOptional<z.ZodNullable<z.ZodPipe<z.ZodPipe<z.ZodUnion<readonly [z.ZodNumber, z.ZodPipe<z.ZodString, z.ZodTransform<number, string>>]>, z.ZodNumber>, z.ZodNumber>>>;
|
|
107
|
+
sort_by: z.ZodDefault<z.ZodPipe<z.ZodPipe<z.ZodUnion<readonly [z.ZodNumber, z.ZodPipe<z.ZodString, z.ZodTransform<number, string>>]>, z.ZodNumber>, z.ZodNumber>>;
|
|
108
|
+
num: z.ZodDefault<z.ZodPipe<z.ZodPipe<z.ZodUnion<readonly [z.ZodNumber, z.ZodPipe<z.ZodString, z.ZodTransform<number, string>>]>, z.ZodNumber>, z.ZodNumber>>;
|
|
109
|
+
next_page_token: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
110
|
+
};
|
|
111
|
+
export declare const playRules: (operation: string) => Rule[];
|
|
112
|
+
export declare const appleSearch: {
|
|
113
|
+
country: z.ZodDefault<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
|
|
114
|
+
term: z.ZodString;
|
|
115
|
+
lang: z.ZodDefault<z.ZodString>;
|
|
116
|
+
num: z.ZodDefault<z.ZodPipe<z.ZodPipe<z.ZodUnion<readonly [z.ZodNumber, z.ZodPipe<z.ZodString, z.ZodTransform<number, string>>]>, z.ZodNumber>, z.ZodNumber>>;
|
|
117
|
+
disallow_explicit: z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodBoolean, z.ZodEnum<{
|
|
118
|
+
false: "false";
|
|
119
|
+
true: "true";
|
|
120
|
+
}>]>, z.ZodTransform<boolean, "false" | "true" | boolean>>>;
|
|
121
|
+
property: z.ZodOptional<z.ZodNullable<z.ZodLiteral<"developer">>>;
|
|
122
|
+
category_id: z.ZodOptional<z.ZodNullable<z.ZodPipe<z.ZodPipe<z.ZodUnion<readonly [z.ZodNumber, z.ZodPipe<z.ZodString, z.ZodTransform<number, string>>]>, z.ZodNumber>, z.ZodNumber>>>;
|
|
123
|
+
device: z.ZodDefault<z.ZodEnum<{
|
|
124
|
+
desktop: "desktop";
|
|
125
|
+
mobile: "mobile";
|
|
126
|
+
tablet: "tablet";
|
|
127
|
+
}>>;
|
|
128
|
+
};
|
|
129
|
+
export declare const appleProduct: {
|
|
130
|
+
country: z.ZodDefault<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
|
|
131
|
+
product_id: z.ZodString;
|
|
132
|
+
type: z.ZodDefault<z.ZodLiteral<"app">>;
|
|
133
|
+
};
|
|
134
|
+
export declare const appleReviews: {
|
|
135
|
+
country: z.ZodDefault<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
|
|
136
|
+
product_id: z.ZodString;
|
|
137
|
+
sort: z.ZodDefault<z.ZodEnum<{
|
|
138
|
+
mosthelpful: "mosthelpful";
|
|
139
|
+
mostrecent: "mostrecent";
|
|
140
|
+
}>>;
|
|
141
|
+
page: z.ZodDefault<z.ZodPipe<z.ZodPipe<z.ZodUnion<readonly [z.ZodNumber, z.ZodPipe<z.ZodString, z.ZodTransform<number, string>>]>, z.ZodNumber>, z.ZodNumber>>;
|
|
142
|
+
};
|
|
143
|
+
//# sourceMappingURL=stores.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stores.d.ts","sourceRoot":"","sources":["../../src/stores.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAA+B,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAuDzE,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;CAKpB,CAAC;AACF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;CAIrB,CAAC;AACF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;CAKrB,CAAC;AACF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;CAAgE,CAAC;AACxF,eAAO,MAAM,WAAW;;;;;;;;;;;;CAA+E,CAAC;AACxG,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;CASvB,CAAC;AAGF,eAAO,MAAM,SAAS,cAAe,MAAM,KAAG,IAAI,EAsDjD,CAAC;AAoBF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;CA4BvB,CAAC;AACF,eAAO,MAAM,YAAY;;;;CAAmF,CAAC;AAC7G,eAAO,MAAM,YAAY;;;;;;;;CAYxB,CAAC"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.appleReviews = exports.appleProduct = exports.appleSearch = exports.playRules = exports.playReviews = exports.playProduct = exports.playMovies = exports.playBooks = exports.playGames = exports.playApps = void 0;
|
|
4
|
+
const node_util_1 = require("node:util");
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const errors_js_1 = require("./errors.js");
|
|
7
|
+
const validation_js_1 = require("./validation.js");
|
|
8
|
+
const cleanText = zod_1.z
|
|
9
|
+
.string()
|
|
10
|
+
.refine((value) => !/[\x00-\x1f\x7f]/.test(value), "Control characters are not allowed")
|
|
11
|
+
.refine((value) => !Array.from(value).some((c) => c.length === 1 && /[\ud800-\udfff]/.test(c)), "Use valid Unicode text");
|
|
12
|
+
const query = cleanText
|
|
13
|
+
.refine((value) => Buffer.byteLength(value.trim(), "utf8") <= 2048, "Use at most 2,048 UTF-8 bytes")
|
|
14
|
+
.trim()
|
|
15
|
+
.min(1)
|
|
16
|
+
.max(2048);
|
|
17
|
+
const whole = zod_1.z
|
|
18
|
+
.union([
|
|
19
|
+
zod_1.z.number().int(),
|
|
20
|
+
cleanText
|
|
21
|
+
.trim()
|
|
22
|
+
.regex(/^[+-]?\d+$/)
|
|
23
|
+
.transform(Number),
|
|
24
|
+
])
|
|
25
|
+
.pipe(zod_1.z.number().int());
|
|
26
|
+
const category = cleanText
|
|
27
|
+
.min(1)
|
|
28
|
+
.max(128)
|
|
29
|
+
.regex(/^[a-zA-Z0-9_-]+$/);
|
|
30
|
+
const identifier = cleanText
|
|
31
|
+
.min(1)
|
|
32
|
+
.max(512)
|
|
33
|
+
.regex(/^[a-zA-Z0-9_.-]+$/);
|
|
34
|
+
const token = cleanText
|
|
35
|
+
.min(1)
|
|
36
|
+
.max(65536)
|
|
37
|
+
.regex(/^[a-zA-Z0-9_=+/:.-]+$/);
|
|
38
|
+
const age = zod_1.z.enum(["AGE_RANGE1", "AGE_RANGE2", "AGE_RANGE3"]);
|
|
39
|
+
const store = zod_1.z.enum(["apps", "books", "audiobooks", "movies", "tv"]).default("apps");
|
|
40
|
+
const playLocale = {
|
|
41
|
+
hl: cleanText
|
|
42
|
+
.max(32)
|
|
43
|
+
.regex(/^[a-zA-Z]{2,3}(?:[-_][a-zA-Z0-9]{2,8}){0,3}$/)
|
|
44
|
+
.default("en"),
|
|
45
|
+
gl: cleanText
|
|
46
|
+
.regex(/^[a-zA-Z]{2}$/)
|
|
47
|
+
.toLowerCase()
|
|
48
|
+
.default("us"),
|
|
49
|
+
};
|
|
50
|
+
const listing = {
|
|
51
|
+
...playLocale,
|
|
52
|
+
q: (0, validation_js_1.optional)(query),
|
|
53
|
+
chart: (0, validation_js_1.optional)(category),
|
|
54
|
+
next_page_token: (0, validation_js_1.optional)(token),
|
|
55
|
+
section_page_token: (0, validation_js_1.optional)(token),
|
|
56
|
+
see_more_token: (0, validation_js_1.optional)(token),
|
|
57
|
+
};
|
|
58
|
+
exports.playApps = {
|
|
59
|
+
...listing,
|
|
60
|
+
apps_category: (0, validation_js_1.optional)(category),
|
|
61
|
+
age: (0, validation_js_1.optional)(age),
|
|
62
|
+
store_device: (0, validation_js_1.optional)(zod_1.z.enum(["phone", "tablet", "tv", "chromebook", "watch", "car"])),
|
|
63
|
+
};
|
|
64
|
+
exports.playGames = {
|
|
65
|
+
...listing,
|
|
66
|
+
games_category: (0, validation_js_1.optional)(category),
|
|
67
|
+
store_device: (0, validation_js_1.optional)(zod_1.z.enum(["phone", "tablet", "tv", "chromebook", "watch", "windows"])),
|
|
68
|
+
};
|
|
69
|
+
exports.playBooks = {
|
|
70
|
+
...listing,
|
|
71
|
+
books_category: (0, validation_js_1.optional)(category),
|
|
72
|
+
age: (0, validation_js_1.optional)(age),
|
|
73
|
+
price: (0, validation_js_1.optional)(whole.pipe(zod_1.z.number().min(1).max(2))),
|
|
74
|
+
};
|
|
75
|
+
exports.playMovies = { ...listing, movies_category: (0, validation_js_1.optional)(category), age: (0, validation_js_1.optional)(age) };
|
|
76
|
+
exports.playProduct = { ...playLocale, product_id: identifier, store, season_id: (0, validation_js_1.optional)(identifier) };
|
|
77
|
+
exports.playReviews = {
|
|
78
|
+
...playLocale,
|
|
79
|
+
product_id: identifier,
|
|
80
|
+
store,
|
|
81
|
+
platform: zod_1.z.enum(["phone", "tablet", "watch", "chromebook", "tv"]).default("phone"),
|
|
82
|
+
rating: (0, validation_js_1.optional)(whole.pipe(zod_1.z.number().min(1).max(5))),
|
|
83
|
+
sort_by: whole.pipe(zod_1.z.number().min(1).max(3)).default(1),
|
|
84
|
+
num: whole.pipe(zod_1.z.number().min(1).max(199)).default(40),
|
|
85
|
+
next_page_token: (0, validation_js_1.optional)(token),
|
|
86
|
+
};
|
|
87
|
+
const tokenFields = ["next_page_token", "section_page_token", "see_more_token"];
|
|
88
|
+
const playRules = (operation) => [
|
|
89
|
+
(p, c) => {
|
|
90
|
+
if (["apps", "games", "books", "movies"].includes(operation)) {
|
|
91
|
+
if ([...tokenFields, "chart"].filter((f) => p[f]).length > 1)
|
|
92
|
+
(0, validation_js_1.issue)(c, "chart and pagination selectors are mutually exclusive");
|
|
93
|
+
if (p.chart && p.q)
|
|
94
|
+
(0, validation_js_1.issue)(c, "chart and q are mutually exclusive");
|
|
95
|
+
if (p.chart && (0, validation_js_1.has)(p, "store_device") && p.store_device !== "phone")
|
|
96
|
+
(0, validation_js_1.issue)(c, "Device-specific storefronts do not support charts; omit chart or use phone");
|
|
97
|
+
const categoryValue = p[`${operation}_category`];
|
|
98
|
+
if (p.q && categoryValue)
|
|
99
|
+
(0, validation_js_1.issue)(c, "q and category are mutually exclusive");
|
|
100
|
+
if ((0, validation_js_1.has)(p, "store_device") && (p.q || categoryValue))
|
|
101
|
+
(0, validation_js_1.issue)(c, "store_device excludes q and category");
|
|
102
|
+
if (p.age && categoryValue !== (operation === "books" ? "coll_1689" : "FAMILY"))
|
|
103
|
+
(0, validation_js_1.issue)(c, "age requires the children's category");
|
|
104
|
+
if ((0, validation_js_1.has)(p, "price") && !p.q)
|
|
105
|
+
(0, validation_js_1.issue)(c, "price requires q");
|
|
106
|
+
}
|
|
107
|
+
if (p.season_id && p.store !== "tv")
|
|
108
|
+
(0, validation_js_1.issue)(c, "season_id requires store=tv");
|
|
109
|
+
const context = Object.fromEntries(Object.entries(p).filter(([key, value]) => value != null && ![...tokenFields, "chart"].includes(key)));
|
|
110
|
+
if (["apps", "games"].includes(operation) && !p.q && !p[`${operation}_category`])
|
|
111
|
+
context.store_device ??= "phone";
|
|
112
|
+
for (const field of tokenFields) {
|
|
113
|
+
const encoded = p[field];
|
|
114
|
+
if (typeof encoded !== "string")
|
|
115
|
+
continue;
|
|
116
|
+
const kind = field === "next_page_token"
|
|
117
|
+
? operation === "reviews"
|
|
118
|
+
? "reviews"
|
|
119
|
+
: "page"
|
|
120
|
+
: field === "section_page_token"
|
|
121
|
+
? "section"
|
|
122
|
+
: "collection";
|
|
123
|
+
try {
|
|
124
|
+
if (!/^[a-zA-Z0-9+/_-]*={0,2}$/.test(encoded) || encoded.replace(/=+$/, "").length % 4 === 1)
|
|
125
|
+
throw new Error();
|
|
126
|
+
const decoded = JSON.parse(new TextDecoder("utf8", { fatal: true }).decode(Buffer.from(encoded, "base64url")));
|
|
127
|
+
if (!(0, errors_js_1.isObject)(decoded) ||
|
|
128
|
+
decoded.v !== 1 ||
|
|
129
|
+
decoded.operation !== operation ||
|
|
130
|
+
decoded.kind !== kind ||
|
|
131
|
+
!(0, node_util_1.isDeepStrictEqual)(decoded.context, context) ||
|
|
132
|
+
typeof decoded.token !== "string" ||
|
|
133
|
+
!/^[a-zA-Z0-9_=+/:.-]{1,12000}$/.test(decoded.token))
|
|
134
|
+
throw new Error();
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
(0, validation_js_1.issue)(c, "Use a returned token with the same operation and search parameters", [field]);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
];
|
|
142
|
+
exports.playRules = playRules;
|
|
143
|
+
const storefronts = new Set("ae af ag ai al am ao ar at au az ba bb be bf bg bh bj bm bn bo br bs bt bw by bz ca cd cg ch ci cl cm cn co cr cv cy cz de dk dm do dz ec ee eg es fi fj fm fr ga gb gd ge gh gm gr gt gw gy hk hn hr hu id ie il in iq is it jm jo jp ke kg kh kn kr kw ky kz la lb lc lk lr lt lu lv ly ma md me mg mk ml mm mn mo mr ms mt mu mv mw mx my mz na ne ng ni nl no np nr nz om pa pe pg ph pk pl pt pw py qa ro rs ru rw sa sb sc se sg si sk sl sn sr st sv sz tc td th tj tm tn to tr tt tw tz ua ug us uy uz vc ve vg vn vu xk ye za zm zw".split(" "));
|
|
144
|
+
const appleLocale = {
|
|
145
|
+
country: cleanText
|
|
146
|
+
.regex(/^[a-zA-Z]{2}$/)
|
|
147
|
+
.toLowerCase()
|
|
148
|
+
.transform((value) => (value === "uk" ? "gb" : value))
|
|
149
|
+
.refine((value) => storefronts.has(value), "Choose a supported Apple storefront country")
|
|
150
|
+
.default("us"),
|
|
151
|
+
};
|
|
152
|
+
const productId = cleanText.regex(/^[1-9][0-9]{0,19}$/);
|
|
153
|
+
const quotePlus = (value) => encodeURIComponent(value)
|
|
154
|
+
.replace(/[!'()*]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`)
|
|
155
|
+
.replace(/%20/g, "+");
|
|
156
|
+
exports.appleSearch = {
|
|
157
|
+
...appleLocale,
|
|
158
|
+
term: query.refine((value) => {
|
|
159
|
+
try {
|
|
160
|
+
return quotePlus(value).length <= 4096;
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
}, "Use at most 4,096 URL-encoded bytes"),
|
|
166
|
+
lang: cleanText
|
|
167
|
+
.regex(/^[a-zA-Z]{2,3}-[a-zA-Z]{2}$/)
|
|
168
|
+
.toLowerCase()
|
|
169
|
+
.default("en-us"),
|
|
170
|
+
num: whole.pipe(zod_1.z.number().min(1).max(200)).default(10),
|
|
171
|
+
disallow_explicit: zod_1.z
|
|
172
|
+
.union([zod_1.z.boolean(), zod_1.z.enum(["true", "false"])])
|
|
173
|
+
.transform((value) => value === true || value === "true")
|
|
174
|
+
.default(false),
|
|
175
|
+
property: (0, validation_js_1.optional)(zod_1.z.literal("developer")),
|
|
176
|
+
category_id: (0, validation_js_1.optional)(whole.pipe(zod_1.z
|
|
177
|
+
.number()
|
|
178
|
+
.min(1)
|
|
179
|
+
.max(2 ** 31 - 1))),
|
|
180
|
+
device: zod_1.z.enum(["mobile", "tablet", "desktop"]).default("mobile"),
|
|
181
|
+
};
|
|
182
|
+
exports.appleProduct = { ...appleLocale, product_id: productId, type: zod_1.z.literal("app").default("app") };
|
|
183
|
+
exports.appleReviews = {
|
|
184
|
+
...appleLocale,
|
|
185
|
+
product_id: productId,
|
|
186
|
+
sort: zod_1.z.enum(["mostrecent", "mosthelpful"]).default("mostrecent"),
|
|
187
|
+
page: whole
|
|
188
|
+
.pipe(zod_1.z
|
|
189
|
+
.number()
|
|
190
|
+
.min(1)
|
|
191
|
+
.max(2 ** 31 - 1))
|
|
192
|
+
.default(1),
|
|
193
|
+
};
|
|
194
|
+
//# sourceMappingURL=stores.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stores.js","sourceRoot":"","sources":["../../src/stores.ts"],"names":[],"mappings":"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"}
|