@x12i/content-fetcher 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/README.md +133 -0
- package/dist/adapters/default-http-client.d.ts +17 -0
- package/dist/adapters/default-http-client.d.ts.map +1 -0
- package/dist/adapters/default-http-client.js +74 -0
- package/dist/adapters/default-http-client.js.map +1 -0
- package/dist/channels.d.ts +34 -0
- package/dist/channels.d.ts.map +1 -0
- package/dist/channels.js +164 -0
- package/dist/channels.js.map +1 -0
- package/dist/classify.d.ts +13 -0
- package/dist/classify.d.ts.map +1 -0
- package/dist/classify.js +122 -0
- package/dist/classify.js.map +1 -0
- package/dist/config.d.ts +7 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +197 -0
- package/dist/config.js.map +1 -0
- package/dist/create-content-fetcher.d.ts +9 -0
- package/dist/create-content-fetcher.d.ts.map +1 -0
- package/dist/create-content-fetcher.js +836 -0
- package/dist/create-content-fetcher.js.map +1 -0
- package/dist/errors.d.ts +42 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +73 -0
- package/dist/errors.js.map +1 -0
- package/dist/handoff.d.ts +8 -0
- package/dist/handoff.d.ts.map +1 -0
- package/dist/handoff.js +20 -0
- package/dist/handoff.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/ratelimit.d.ts +27 -0
- package/dist/ratelimit.d.ts.map +1 -0
- package/dist/ratelimit.js +43 -0
- package/dist/ratelimit.js.map +1 -0
- package/dist/robots/robots-service.d.ts +40 -0
- package/dist/robots/robots-service.d.ts.map +1 -0
- package/dist/robots/robots-service.js +131 -0
- package/dist/robots/robots-service.js.map +1 -0
- package/dist/robots/robots-txt.d.ts +24 -0
- package/dist/robots/robots-txt.d.ts.map +1 -0
- package/dist/robots/robots-txt.js +91 -0
- package/dist/robots/robots-txt.js.map +1 -0
- package/dist/runtime-utils.d.ts +11 -0
- package/dist/runtime-utils.d.ts.map +1 -0
- package/dist/runtime-utils.js +32 -0
- package/dist/runtime-utils.js.map +1 -0
- package/dist/security/dns.d.ts +33 -0
- package/dist/security/dns.d.ts.map +1 -0
- package/dist/security/dns.js +60 -0
- package/dist/security/dns.js.map +1 -0
- package/dist/security/headers.d.ts +16 -0
- package/dist/security/headers.d.ts.map +1 -0
- package/dist/security/headers.js +54 -0
- package/dist/security/headers.js.map +1 -0
- package/dist/security/net-guards.d.ts +9 -0
- package/dist/security/net-guards.d.ts.map +1 -0
- package/dist/security/net-guards.js +102 -0
- package/dist/security/net-guards.js.map +1 -0
- package/dist/security/url.d.ts +32 -0
- package/dist/security/url.d.ts.map +1 -0
- package/dist/security/url.js +82 -0
- package/dist/security/url.js.map +1 -0
- package/dist/storage.d.ts +38 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +109 -0
- package/dist/storage.js.map +1 -0
- package/dist/types.d.ts +232 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/util/bytes.d.ts +21 -0
- package/dist/util/bytes.d.ts.map +1 -0
- package/dist/util/bytes.js +44 -0
- package/dist/util/bytes.js.map +1 -0
- package/dist/util/hash.d.ts +5 -0
- package/dist/util/hash.d.ts.map +1 -0
- package/dist/util/hash.js +11 -0
- package/dist/util/hash.js.map +1 -0
- package/dist/util/ids.d.ts +3 -0
- package/dist/util/ids.d.ts.map +1 -0
- package/dist/util/ids.js +8 -0
- package/dist/util/ids.js.map +1 -0
- package/dist/validate-request.d.ts +9 -0
- package/dist/validate-request.d.ts.map +1 -0
- package/dist/validate-request.js +137 -0
- package/dist/validate-request.js.map +1 -0
- package/package.json +34 -0
package/dist/config.js
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { ConfigurationError, SourcePolicyViolationError } from "./errors.js";
|
|
2
|
+
import { isNonEmptyString, isNonNegativeInteger, isPositiveInteger, isRecord, isStringArray, isValidHostnamePattern, } from "./runtime-utils.js";
|
|
3
|
+
const ACQUISITION_CHANNELS = [
|
|
4
|
+
"direct_http",
|
|
5
|
+
"official_api",
|
|
6
|
+
"rss_or_atom",
|
|
7
|
+
"permitted_browser",
|
|
8
|
+
"approved_archive",
|
|
9
|
+
"licensed_provider",
|
|
10
|
+
"manual_file",
|
|
11
|
+
];
|
|
12
|
+
const NETWORK_CHANNELS = [
|
|
13
|
+
"direct_http",
|
|
14
|
+
"official_api",
|
|
15
|
+
"rss_or_atom",
|
|
16
|
+
"permitted_browser",
|
|
17
|
+
"approved_archive",
|
|
18
|
+
"licensed_provider",
|
|
19
|
+
];
|
|
20
|
+
export function isAcquisitionChannel(value) {
|
|
21
|
+
return typeof value === "string" && ACQUISITION_CHANNELS.includes(value);
|
|
22
|
+
}
|
|
23
|
+
function channelList(value, field, sourceId) {
|
|
24
|
+
if (!Array.isArray(value) || value.length === 0) {
|
|
25
|
+
throw new SourcePolicyViolationError(`${field} must be a non-empty array.`, sourceId);
|
|
26
|
+
}
|
|
27
|
+
for (const item of value) {
|
|
28
|
+
if (!isAcquisitionChannel(item)) {
|
|
29
|
+
throw new SourcePolicyViolationError(`${field} contains an unknown channel: ${String(item)}.`, sourceId);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (new Set(value).size !== value.length) {
|
|
33
|
+
throw new SourcePolicyViolationError(`${field} must not contain duplicates.`, sourceId);
|
|
34
|
+
}
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
function validateEnum(value, allowed, field, sourceId) {
|
|
38
|
+
if (typeof value !== "string" || !allowed.includes(value)) {
|
|
39
|
+
throw new SourcePolicyViolationError(`${field} must be one of: ${allowed.join(", ")}.`, sourceId);
|
|
40
|
+
}
|
|
41
|
+
return value;
|
|
42
|
+
}
|
|
43
|
+
/** Deep runtime validation of one source policy. Throws SourcePolicyViolationError. */
|
|
44
|
+
export function validateSourcePolicy(policy) {
|
|
45
|
+
if (!isRecord(policy)) {
|
|
46
|
+
throw new SourcePolicyViolationError("Source policy must be an object.", "(unknown)");
|
|
47
|
+
}
|
|
48
|
+
const sourceId = isNonEmptyString(policy.sourceId) ? policy.sourceId : "(unknown)";
|
|
49
|
+
const requireString = (field) => {
|
|
50
|
+
const value = policy[field];
|
|
51
|
+
if (!isNonEmptyString(value)) {
|
|
52
|
+
throw new SourcePolicyViolationError(`${field} must be a non-empty string.`, sourceId);
|
|
53
|
+
}
|
|
54
|
+
return value;
|
|
55
|
+
};
|
|
56
|
+
requireString("sourceId");
|
|
57
|
+
requireString("publisher");
|
|
58
|
+
const allowedDomains = policy.allowedDomains;
|
|
59
|
+
if (!isStringArray(allowedDomains) || allowedDomains.length === 0) {
|
|
60
|
+
throw new SourcePolicyViolationError("allowedDomains must be a non-empty string array.", sourceId);
|
|
61
|
+
}
|
|
62
|
+
for (const domain of allowedDomains) {
|
|
63
|
+
if (!isValidHostnamePattern(domain)) {
|
|
64
|
+
throw new SourcePolicyViolationError(`allowedDomains contains an invalid hostname pattern: ${domain}.`, sourceId);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const allowedProtocols = policy.allowedProtocols;
|
|
68
|
+
if (!Array.isArray(allowedProtocols) ||
|
|
69
|
+
allowedProtocols.length === 0 ||
|
|
70
|
+
!allowedProtocols.every((p) => p === "https" || p === "http")) {
|
|
71
|
+
throw new SourcePolicyViolationError("allowedProtocols must be a non-empty array of 'https' and/or 'http'.", sourceId);
|
|
72
|
+
}
|
|
73
|
+
const allowedChannels = channelList(policy.allowedChannels, "allowedChannels", sourceId);
|
|
74
|
+
const channelOrder = channelList(policy.channelOrder, "channelOrder", sourceId);
|
|
75
|
+
for (const channel of channelOrder) {
|
|
76
|
+
if (!allowedChannels.includes(channel)) {
|
|
77
|
+
throw new SourcePolicyViolationError(`channelOrder contains '${channel}' which is not in allowedChannels.`, sourceId);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const robotsPolicy = validateEnum(policy.robotsPolicy, ["required", "not_applicable"], "robotsPolicy", sourceId);
|
|
81
|
+
const browserAccess = validateEnum(policy.browserAccess, ["disabled", "permitted"], "browserAccess", sourceId);
|
|
82
|
+
const archiveAccess = validateEnum(policy.archiveAccess, ["disabled", "permitted"], "archiveAccess", sourceId);
|
|
83
|
+
const licensedProviderAccess = validateEnum(policy.licensedProviderAccess, ["disabled", "permitted"], "licensedProviderAccess", sourceId);
|
|
84
|
+
if (allowedChannels.includes("permitted_browser") && browserAccess !== "permitted") {
|
|
85
|
+
throw new SourcePolicyViolationError("allowedChannels includes 'permitted_browser' but browserAccess is not 'permitted'.", sourceId);
|
|
86
|
+
}
|
|
87
|
+
if (allowedChannels.includes("approved_archive") && archiveAccess !== "permitted") {
|
|
88
|
+
throw new SourcePolicyViolationError("allowedChannels includes 'approved_archive' but archiveAccess is not 'permitted'.", sourceId);
|
|
89
|
+
}
|
|
90
|
+
if (allowedChannels.includes("licensed_provider") &&
|
|
91
|
+
licensedProviderAccess !== "permitted") {
|
|
92
|
+
throw new SourcePolicyViolationError("allowedChannels includes 'licensed_provider' but licensedProviderAccess is not 'permitted'.", sourceId);
|
|
93
|
+
}
|
|
94
|
+
if (policy.authProfileId !== undefined && !isNonEmptyString(policy.authProfileId)) {
|
|
95
|
+
throw new SourcePolicyViolationError("authProfileId must be a non-empty string when present.", sourceId);
|
|
96
|
+
}
|
|
97
|
+
const rateLimit = policy.rateLimit;
|
|
98
|
+
if (!isRecord(rateLimit) ||
|
|
99
|
+
!isPositiveInteger(rateLimit.maxRequestsPerMinute) ||
|
|
100
|
+
!isPositiveInteger(rateLimit.maxConcurrentRequests)) {
|
|
101
|
+
throw new SourcePolicyViolationError("rateLimit must specify positive integer maxRequestsPerMinute and maxConcurrentRequests.", sourceId);
|
|
102
|
+
}
|
|
103
|
+
const limits = policy.limits;
|
|
104
|
+
if (!isRecord(limits) ||
|
|
105
|
+
!isNonNegativeInteger(limits.maxRedirects) ||
|
|
106
|
+
!isPositiveInteger(limits.maxResponseBytes)) {
|
|
107
|
+
throw new SourcePolicyViolationError("limits must specify non-negative integer maxRedirects and positive integer maxResponseBytes.", sourceId);
|
|
108
|
+
}
|
|
109
|
+
const rights = policy.rights;
|
|
110
|
+
if (!isRecord(rights) ||
|
|
111
|
+
!isNonEmptyString(rights.profileId) ||
|
|
112
|
+
!isNonEmptyString(rights.retentionClass) ||
|
|
113
|
+
typeof rights.allowRawRetention !== "boolean" ||
|
|
114
|
+
typeof rights.allowExtraction !== "boolean" ||
|
|
115
|
+
typeof rights.allowDisplay !== "boolean" ||
|
|
116
|
+
typeof rights.allowTraining !== "boolean") {
|
|
117
|
+
throw new SourcePolicyViolationError("rights must be a complete RightsProfile (profileId, retentionClass, four boolean permissions).", sourceId);
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
sourceId: policy.sourceId,
|
|
121
|
+
publisher: policy.publisher,
|
|
122
|
+
allowedDomains,
|
|
123
|
+
allowedProtocols,
|
|
124
|
+
allowedChannels,
|
|
125
|
+
channelOrder,
|
|
126
|
+
robotsPolicy,
|
|
127
|
+
browserAccess,
|
|
128
|
+
...(policy.authProfileId !== undefined ? { authProfileId: policy.authProfileId } : {}),
|
|
129
|
+
archiveAccess,
|
|
130
|
+
licensedProviderAccess,
|
|
131
|
+
rateLimit: {
|
|
132
|
+
maxRequestsPerMinute: rateLimit.maxRequestsPerMinute,
|
|
133
|
+
maxConcurrentRequests: rateLimit.maxConcurrentRequests,
|
|
134
|
+
},
|
|
135
|
+
limits: {
|
|
136
|
+
maxRedirects: limits.maxRedirects,
|
|
137
|
+
maxResponseBytes: limits.maxResponseBytes,
|
|
138
|
+
},
|
|
139
|
+
rights: {
|
|
140
|
+
profileId: rights.profileId,
|
|
141
|
+
allowRawRetention: rights.allowRawRetention,
|
|
142
|
+
allowExtraction: rights.allowExtraction,
|
|
143
|
+
allowDisplay: rights.allowDisplay,
|
|
144
|
+
allowTraining: rights.allowTraining,
|
|
145
|
+
retentionClass: rights.retentionClass,
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/** Validate the whole fetcher configuration. Throws ConfigurationError / SourcePolicyViolationError. */
|
|
150
|
+
export function validateConfiguration(options) {
|
|
151
|
+
if (!isRecord(options)) {
|
|
152
|
+
throw new ConfigurationError("Fetcher options must be an object.", "options_not_object");
|
|
153
|
+
}
|
|
154
|
+
if (!Array.isArray(options.sourcePolicies) || options.sourcePolicies.length === 0) {
|
|
155
|
+
throw new ConfigurationError("sourcePolicies must be a non-empty array.", "source_policies_missing");
|
|
156
|
+
}
|
|
157
|
+
const seen = new Set();
|
|
158
|
+
const policies = [];
|
|
159
|
+
for (const raw of options.sourcePolicies) {
|
|
160
|
+
const policy = validateSourcePolicy(raw);
|
|
161
|
+
if (seen.has(policy.sourceId)) {
|
|
162
|
+
throw new ConfigurationError(`Duplicate sourceId in sourcePolicies: ${policy.sourceId}.`, "duplicate_source_id");
|
|
163
|
+
}
|
|
164
|
+
seen.add(policy.sourceId);
|
|
165
|
+
policies.push(policy);
|
|
166
|
+
}
|
|
167
|
+
const store = options.artifactStore;
|
|
168
|
+
if (!isRecord(store) ||
|
|
169
|
+
typeof store.putOriginal !== "function" ||
|
|
170
|
+
typeof store.putMetadata !== "function" ||
|
|
171
|
+
typeof store.findByContentHash !== "function") {
|
|
172
|
+
throw new ConfigurationError("artifactStore must implement putOriginal, putMetadata, and findByContentHash.", "artifact_store_invalid");
|
|
173
|
+
}
|
|
174
|
+
const needsNetwork = policies.some((p) => p.allowedChannels.some((c) => NETWORK_CHANNELS.includes(c)));
|
|
175
|
+
if (needsNetwork && !isRecord(options.httpClient)) {
|
|
176
|
+
throw new ConfigurationError("httpClient is required when any source policy enables a network acquisition channel.", "http_client_missing");
|
|
177
|
+
}
|
|
178
|
+
for (const optional of ["browserAdapter", "authProvider", "dnsResolver"]) {
|
|
179
|
+
const value = options[optional];
|
|
180
|
+
if (value !== undefined && !isRecord(value)) {
|
|
181
|
+
throw new ConfigurationError(`${optional} must be an object when provided.`, `${optional}_invalid`);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
if (options.userAgent !== undefined && !isNonEmptyString(options.userAgent)) {
|
|
185
|
+
throw new ConfigurationError("userAgent must be a non-empty string when provided.", "user_agent_invalid");
|
|
186
|
+
}
|
|
187
|
+
if (options.robotsCacheTtlMs !== undefined && !isPositiveInteger(options.robotsCacheTtlMs)) {
|
|
188
|
+
throw new ConfigurationError("robotsCacheTtlMs must be a positive integer when provided.", "robots_ttl_invalid");
|
|
189
|
+
}
|
|
190
|
+
if (options.requestTimeoutMs !== undefined && !isPositiveInteger(options.requestTimeoutMs)) {
|
|
191
|
+
throw new ConfigurationError("requestTimeoutMs must be a positive integer when provided.", "timeout_invalid");
|
|
192
|
+
}
|
|
193
|
+
if (options.now !== undefined && typeof options.now !== "function") {
|
|
194
|
+
throw new ConfigurationError("now must be a function when provided.", "now_invalid");
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ContentFetcher, ContentFetcherOptions } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Create a policy-aware content fetcher.
|
|
4
|
+
*
|
|
5
|
+
* @throws ConfigurationError / SourcePolicyViolationError when options or any
|
|
6
|
+
* source policy is invalid.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createContentFetcher(options: ContentFetcherOptions): ContentFetcher;
|
|
9
|
+
//# sourceMappingURL=create-content-fetcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-content-fetcher.d.ts","sourceRoot":"","sources":["../src/create-content-fetcher.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAKV,cAAc,EACd,qBAAqB,EAKtB,MAAM,YAAY,CAAC;AAwgCpB;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CAEnF"}
|