Registration of job #328481 read at #5100406
E·68b28f19be
Artifact retrieval for job #328481. An immutable observation by ✦peer-eaf760 at 28 Oct 02:08 UTC: chain data, retrieval provenance and exact source spans are retained without executing source.
{
"evidence": {
"artifact_bytes": 13518,
"artifact_sha256": "5ea81c7cc22019e50728155bc3dbca253f6c2499aaf302354b969e4f562988f8",
"cid_verified": false,
"files": [
{
"bytes": 43292,
"name": "bundle.js",
"sha256": "a12e6c7dbc44b8a940d6aa633cc9d849fa8494ec725d0e0f946a507605b202e1",
"text": "var __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\n\n// cert-fields.js\nvar COMPONENT_OIDS = {\n sct: \"1.3.6.1.4.1.11129.2.4.2\",\n ski: \"2.5.29.14\",\n aki: \"2.5.29.35\"\n};\nvar ALIASES = { spki: \"publicKey\", pubkey: \"publicKey\", publickey: \"publicKey\" };\nvar DEFAULT_DROP = [\"publicKey\", \"sct\", \"ski\", \"aki\"];\nfunction parseDropSpec(spec = DEFAULT_DROP) {\n const tokens = Array.isArray(spec) ? spec : String(spec).split(\",\");\n const drop = { serial: false, publicKey: false, oids: /* @__PURE__ */ new Set() };\n for (const raw of tokens) {\n const token = raw.trim();\n if (!token) continue;\n const name = ALIASES[token.toLowerCase()] ?? token;\n if (name === \"serial\") drop.serial = true;\n else if (name === \"publicKey\") drop.publicKey = true;\n else if (COMPONENT_OIDS[name.toLowerCase()]) drop.oids.add(COMPONENT_OIDS[name.toLowerCase()]);\n else if (/^\\d+(\\.\\d+)+$/.test(name)) drop.oids.add(name);\n else {\n throw new Error(\n `cert-fields: unknown component \"${token}\" (names: serial, publicKey, ${Object.keys(COMPONENT_OIDS).join(\", \")}, or a dotted OID)`\n );\n }\n }\n return drop;\n}\n\n// scraper/config.js\nvar env = (name) => typeof process !== \"undefined\" ? process.env?.[name] : void 0;\nvar str = (baked, name, dflt) => baked ?? env(name) ?? dflt;\nvar num = (baked, name, dflt) => Number(baked ?? env(name) ?? dflt);\nvar ORCH_URL = str(\n true ? \"https://crtl.papers.tech/\" : void 0,\n \"ORCH_URL\",\n \"http://127.0.0.1:8080\"\n);\nvar FLEET_ID = str(\n typeof SCRAPER_FLEET_ID !== \"undefined\" ? SCRAPER_FLEET_ID : void 0,\n \"FLEET_ID\",\n \"dev-fleet\"\n);\nvar JOB_TAG = str(\n typeof SCRAPER_JOB_TAG !== \"undefined\" ? SCRAPER_JOB_TAG : void 0,\n \"JOB_TAG\",\n \"dev\"\n);\nvar CHUNK_ENTRIES = Math.min(\n num(typeof SCRAPER_CHUNK_ENTRIES !== \"undefined\" ? SCRAPER_CHUNK_ENTRIES : void 0, \"CHUNK_ENTRIES\", 1e4),\n 5e4\n);\nvar FETCH_INITIAL_WINDOW = num(\n typeof SCRAPER_FETCH_INITIAL_WINDOW !== \"undefined\" ? SCRAPER_FETCH_INITIAL_WINDOW : void 0,\n \"FETCH_INITIAL_WINDOW\",\n 256\n);\nvar FETCH_MAX_ATTEMPTS = num(\n true ? 30 : void 0,\n \"FETCH_MAX_ATTEMPTS\",\n 8\n);\nvar FETCH_TIMEOUT_MS = num(\n true ? 6e4 : void 0,\n \"FETCH_TIMEOUT_MS\",\n 3e4\n);\nvar STOP_MARGIN_MS = num(\n true ? 18e4 : void 0,\n \"STOP_MARGIN_MS\",\n 45e3\n);\nvar FETCH_CONCURRENCY = num(\n true ? 8 : void 0,\n \"FETCH_CONCURRENCY\",\n 8\n);\nvar CHUNK_CONCURRENCY = num(\n true ? 6 : void 0,\n \"CHUNK_CONCURRENCY\",\n 4\n);\nvar HOST_RATE_LIMITS = str(\n typeof SCRAPER_HOST_RATE_LIMITS !== \"undefined\" ? SCRAPER_HOST_RATE_LIMITS : void 0,\n \"HOST_RATE_LIMITS\",\n \"ct.cloudflare.com=3,skylight.geomys.org=0.5\"\n);\nvar EXECUTION_TIME_MS = num(\n true ? 36e6 : void 0,\n \"EXECUTION_TIME_MS\",\n 9e5\n);\nvar CERT_DROP = str(\n typeof SCRAPER_CERT_DROP !== \"undefined\" ? SCRAPER_CERT_DROP : void 0,\n \"CERT_DROP\",\n DEFAULT_DROP.join(\",\")\n);\n\n// scraper/fetcher.js\nvar import_node_zlib = require(\"node:zlib\");\n\n// scraper/transport.js\nvar import_node_http = __toESM(require(\"node:http\"), 1);\nvar import_node_https = __toESM(require(\"node:https\"), 1);\nvar agents = {\n \"http:\": new import_node_http.default.Agent({ keepAlive: true, maxSockets: 128 }),\n \"https:\": new import_node_https.default.Agent({ keepAlive: true, maxSockets: 128 })\n};\nvar transportStats = { statuses: /* @__PURE__ */ new Map() };\nfunction httpRequest(url, { method = \"GET\", headers = {}, body, timeoutMs = 3e4 } = {}) {\n return new Promise((resolve, reject) => {\n const u = new URL(url);\n const mod = u.protocol === \"http:\" ? import_node_http.default : import_node_https.default;\n const req = mod.request(\n u,\n { method, headers, agent: agents[u.protocol], timeout: timeoutMs },\n (res) => {\n transportStats.statuses.set(res.statusCode, (transportStats.statuses.get(res.statusCode) ?? 0) + 1);\n const chunks = [];\n res.on(\"data\", (c) => chunks.push(c));\n res.on(\n \"end\",\n () => resolve({ status: res.statusCode, headers: res.headers, body: Buffer.concat(chunks) })\n );\n res.on(\"error\", reject);\n }\n );\n req.on(\"timeout\", () => req.destroy(new Error(`request to ${u.host} timed out after ${timeoutMs}ms`)));\n req.on(\"error\", reject);\n if (body !== void 0) req.write(body);\n req.end();\n });\n}\n\n// scraper/fetcher.js\nasync function httpsTransport(url, timeoutMs) {\n const res = await httpRequest(url, { timeoutMs });\n return {\n status: res.status,\n retryAfter: res.headers[\"retry-after\"] ?? null,\n encoding: res.headers[\"content-encoding\"] ?? null,\n body: res.body\n };\n}\nvar newFetchStats = () => ({ requests: 0, retries: 0, status429: 0, netMs: 0, pacedMs: 0, backoffMs: 0 });\nvar DEFAULTS = {\n initialWindow: 256,\n minWindow: 1,\n maxAttempts: 8,\n baseDelayMs: 500,\n maxDelayMs: 3e4,\n timeoutMs: 3e4,\n transport: httpsTransport,\n tileSize: 256,\n // requests never cross a tile boundary; 0 disables\n regrowAfter: 8,\n // full responses in a row before the window doubles back\n hostRateLimits: {}\n // { 'ct.cloudflare.com': 3 } — requests/s per host suffix, device-wide\n};\nvar HostLimiter = class {\n constructor(rps) {\n this.intervalMs = 1e3 / rps;\n this.nextAt = 0;\n }\n async acquire() {\n const now = Date.now();\n const at = Math.max(now, this.nextAt);\n this.nextAt = at + this.intervalMs;\n if (at > now) await sleep(at - now);\n }\n defer(ms) {\n this.nextAt = Math.max(this.nextAt, Date.now() + ms);\n }\n};\nvar limiters = /* @__PURE__ */ new Map();\nfunction limiterFor(host, limits) {\n for (const [suffix, rps] of Object.entries(limits ?? {})) {\n if (!(rps > 0)) continue;\n if (host === suffix || host.endsWith(`.${suffix}`)) {\n const key = `${suffix}@${rps}`;\n if (!limiters.has(key)) limiters.set(key, new HostLimiter(rps));\n return limiters.get(key);\n }\n }\n return null;\n}\nfunction parseHostRateLimits(spec) {\n const out = {};\n for (const part of String(spec ?? \"\").split(\",\")) {\n const [host, rps] = part.split(\"=\").map((x) => x.trim());\n if (host && Number(rps) > 0) out[host.toLowerCase()] = Number(rps);\n }\n return out;\n}\nvar FetchExhaustedError = class extends Error {\n constructor(message, opts) {\n super(message, opts);\n this.name = \"FetchExhaustedError\";\n }\n};\nvar HttpError = class extends Error {\n constructor(status, url) {\n super(`HTTP ${status} for ${url}`);\n this.name = \"HttpError\";\n this.status = status;\n }\n};\nfunction parseRetryAfter(header) {\n if (!header) return null;\n const secs = Number(header);\n if (Number.isFinite(secs)) return Math.max(0, secs);\n const at = Date.parse(header);\n return Number.isNaN(at) ? null : Math.max(0, Math.ceil((at - Date.now()) / 1e3));\n}\nvar RetryableHttpError = class extends HttpError {\n constructor(status, url, retryAfter) {\n super(status, url);\n this.name = \"RetryableHttpError\";\n this.retryAfter = parseRetryAfter(retryAfter);\n }\n};\nvar AdaptiveFetcher = class {\n #window;\n #opts;\n #ceiling;\n // largest window the server has not rejected with 400\n #fullRun = 0;\n // consecutive full responses at the current window\n #limiter;",
"truncated": true
},
{
"bytes": 86,
"name": "manifest.json",
"sha256": "346de335a6301b627fca8c492c58599822962f981bf5f64cf5705c43a390626f",
"text": "",
"truncated": true
}
],
"image_url": null,
"job": {
"job_id": "acurast:5EPLiVzfdYu2NsJzpJQdsb85eRiaaKYuvB8QzWBcKEVyovLB:328481",
"observed_block": "0xa64094b96ec6c5d21fcc329e6e2fdbbfcf71aa4bbd6363847bcb8be7f4054f26",
"script_uri": "ipfs://QmU49Bcg9UxPyE1SN6Cpzdfokufa6CQNXTvkaErcJwmZUW"
},
"kind": "cargo_zip"
},
"identity": {
"address": "5EPLiVzfdYu2NsJzpJQdsb85eRiaaKYuvB8QzWBcKEVyovLB",
"address_hex": "0x66aef695697aa1bcebc08f4327885013d643ebfded83cf354baca8cd2108e720",
"id": "acurast:5EPLiVzfdYu2NsJzpJQdsb85eRiaaKYuvB8QzWBcKEVyovLB:328481",
"origin_variant": "Acurast",
"sequence": "328481"
},
"outcome": "retrieved",
"registration_id": "r:o:68b28f19be5bd5b57d4587fec5e00a0bd838b5139f2a8af103e822866f68caa9",
"retrieval": {
"cid_verified": false,
"downloaded_bytes": 13518,
"downloaded_sha256": "5ea81c7cc22019e50728155bc3dbca253f6c2499aaf302354b969e4f562988f8",
"failures": [],
"gateway_index": 0,
"inspection_error": null,
"retrieved_at_ms": 1793153318840,
"state": "retrieved",
"trust": "trusted gateway; UnixFS root not independently verified"
},
"type": "artifact"
}Configured RPC responses are not independently storage-proof verified. Reported outcomes retain their reported semantics. Only successfully covered history ranges support absence claims.
Registration of job #328481 read at #5100406
E·68b28f19be
43292 bytes · SHA-256 a12e6c7dbc44b8a940d6aa633cc9d849fa8494ec725d0e0f946a507605b202e1
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
// cert-fields.js
var COMPONENT_OIDS = {
sct: "1.3.6.1.4.1.11129.2.4.2",
ski: "2.5.29.14",
aki: "2.5.29.35"
};
var ALIASES = { spki: "publicKey", pubkey: "publicKey", publickey: "publicKey" };
var DEFAULT_DROP = ["publicKey", "sct", "ski", "aki"];
function parseDropSpec(spec = DEFAULT_DROP) {
const tokens = Array.isArray(spec) ? spec : String(spec).split(",");
const drop = { serial: false, publicKey: false, oids: /* @__PURE__ */ new Set() };
for (const raw of tokens) {
const token = raw.trim();
if (!token) continue;
const name = ALIASES[token.toLowerCase()] ?? token;
if (name === "serial") drop.serial = true;
else if (name === "publicKey") drop.publicKey = true;
else if (COMPONENT_OIDS[name.toLowerCase()]) drop.oids.add(COMPONENT_OIDS[name.toLowerCase()]);
else if (/^\d+(\.\d+)+$/.test(name)) drop.oids.add(name);
else {
throw new Error(
`cert-fields: unknown component "${token}" (names: serial, publicKey, ${Object.keys(COMPONENT_OIDS).join(", ")}, or a dotted OID)`
);
}
}
return drop;
}
// scraper/config.js
var env = (name) => typeof process !== "undefined" ? process.env?.[name] : void 0;
var str = (baked, name, dflt) => baked ?? env(name) ?? dflt;
var num = (baked, name, dflt) => Number(baked ?? env(name) ?? dflt);
var ORCH_URL = str(
true ? "https://crtl.papers.tech/" : void 0,
"ORCH_URL",
"http://127.0.0.1:8080"
);
var FLEET_ID = str(
typeof SCRAPER_FLEET_ID !== "undefined" ? SCRAPER_FLEET_ID : void 0,
"FLEET_ID",
"dev-fleet"
);
var JOB_TAG = str(
typeof SCRAPER_JOB_TAG !== "undefined" ? SCRAPER_JOB_TAG : void 0,
"JOB_TAG",
"dev"
);
var CHUNK_ENTRIES = Math.min(
num(typeof SCRAPER_CHUNK_ENTRIES !== "undefined" ? SCRAPER_CHUNK_ENTRIES : void 0, "CHUNK_ENTRIES", 1e4),
5e4
);
var FETCH_INITIAL_WINDOW = num(
typeof SCRAPER_FETCH_INITIAL_WINDOW !== "undefined" ? SCRAPER_FETCH_INITIAL_WINDOW : void 0,
"FETCH_INITIAL_WINDOW",
256
);
var FETCH_MAX_ATTEMPTS = num(
true ? 30 : void 0,
"FETCH_MAX_ATTEMPTS",
8
);
var FETCH_TIMEOUT_MS = num(
true ? 6e4 : void 0,
"FETCH_TIMEOUT_MS",
3e4
);
var STOP_MARGIN_MS = num(
true ? 18e4 : void 0,
"STOP_MARGIN_MS",
45e3
);
var FETCH_CONCURRENCY = num(
true ? 8 : void 0,
"FETCH_CONCURRENCY",
8
);
var CHUNK_CONCURRENCY = num(
true ? 6 : void 0,
"CHUNK_CONCURRENCY",
4
);
var HOST_RATE_LIMITS = str(
typeof SCRAPER_HOST_RATE_LIMITS !== "undefined" ? SCRAPER_HOST_RATE_LIMITS : void 0,
"HOST_RATE_LIMITS",
"ct.cloudflare.com=3,skylight.geomys.org=0.5"
);
var EXECUTION_TIME_MS = num(
true ? 36e6 : void 0,
"EXECUTION_TIME_MS",
9e5
);
var CERT_DROP = str(
typeof SCRAPER_CERT_DROP !== "undefined" ? SCRAPER_CERT_DROP : void 0,
"CERT_DROP",
DEFAULT_DROP.join(",")
);
// scraper/fetcher.js
var import_node_zlib = require("node:zlib");
// scraper/transport.js
var import_node_http = __toESM(require("node:http"), 1);
var import_node_https = __toESM(require("node:https"), 1);
var agents = {
"http:": new import_node_http.default.Agent({ keepAlive: true, maxSockets: 128 }),
"https:": new import_node_https.default.Agent({ keepAlive: true, maxSockets: 128 })
};
var transportStats = { statuses: /* @__PURE__ */ new Map() };
function httpRequest(url, { method = "GET", headers = {}, body, timeoutMs = 3e4 } = {}) {
return new Promise((resolve, reject) => {
const u = new URL(url);
const mod = u.protocol === "http:" ? import_node_http.default : import_node_https.default;
const req = mod.request(
u,
{ method, headers, agent: agents[u.protocol], timeout: timeoutMs },
(res) => {
transportStats.statuses.set(res.statusCode, (transportStats.statuses.get(res.statusCode) ?? 0) + 1);
const chunks = [];
res.on("data", (c) => chunks.push(c));
res.on(
"end",
() => resolve({ status: res.statusCode, headers: res.headers, body: Buffer.concat(chunks) })
);
res.on("error", reject);
}
);
req.on("timeout", () => req.destroy(new Error(`request to ${u.host} timed out after ${timeoutMs}ms`)));
req.on("error", reject);
if (body !== void 0) req.write(body);
req.end();
});
}
// scraper/fetcher.js
async function httpsTransport(url, timeoutMs) {
const res = await httpRequest(url, { timeoutMs });
return {
status: res.status,
retryAfter: res.headers["retry-after"] ?? null,
encoding: res.headers["content-encoding"] ?? null,
body: res.body
};
}
var newFetchStats = () => ({ requests: 0, retries: 0, status429: 0, netMs: 0, pacedMs: 0, backoffMs: 0 });
var DEFAULTS = {
initialWindow: 256,
minWindow: 1,
maxAttempts: 8,
baseDelayMs: 500,
maxDelayMs: 3e4,
timeoutMs: 3e4,
transport: httpsTransport,
tileSize: 256,
// requests never cross a tile boundary; 0 disables
regrowAfter: 8,
// full responses in a row before the window doubles back
hostRateLimits: {}
// { 'ct.cloudflare.com': 3 } — requests/s per host suffix, device-wide
};
var HostLimiter = class {
constructor(rps) {
this.intervalMs = 1e3 / rps;
this.nextAt = 0;
}
async acquire() {
const now = Date.now();
const at = Math.max(now, this.nextAt);
this.nextAt = at + this.intervalMs;
if (at > now) await sleep(at - now);
}
defer(ms) {
this.nextAt = Math.max(this.nextAt, Date.now() + ms);
}
};
var limiters = /* @__PURE__ */ new Map();
function limiterFor(host, limits) {
for (const [suffix, rps] of Object.entries(limits ?? {})) {
if (!(rps > 0)) continue;
if (host === suffix || host.endsWith(`.${suffix}`)) {
const key = `${suffix}@${rps}`;
if (!limiters.has(key)) limiters.set(key, new HostLimiter(rps));
return limiters.get(key);
}
}
return null;
}
function parseHostRateLimits(spec) {
const out = {};
for (const part of String(spec ?? "").split(",")) {
const [host, rps] = part.split("=").map((x) => x.trim());
if (host && Number(rps) > 0) out[host.toLowerCase()] = Number(rps);
}
return out;
}
var FetchExhaustedError = class extends Error {
constructor(message, opts) {
super(message, opts);
this.name = "FetchExhaustedError";
}
};
var HttpError = class extends Error {
constructor(status, url) {
super(`HTTP ${status} for ${url}`);
this.name = "HttpError";
this.status = status;
}
};
function parseRetryAfter(header) {
if (!header) return null;
const secs = Number(header);
if (Number.isFinite(secs)) return Math.max(0, secs);
const at = Date.parse(header);
return Number.isNaN(at) ? null : Math.max(0, Math.ceil((at - Date.now()) / 1e3));
}
var RetryableHttpError = class extends HttpError {
constructor(status, url, retryAfter) {
super(status, url);
this.name = "RetryableHttpError";
this.retryAfter = parseRetryAfter(retryAfter);
}
};
var AdaptiveFetcher = class {
#window;
#opts;
#ceiling;
// largest window the server has not rejected with 400
#fullRun = 0;
// consecutive full responses at the current window
#limiter;
Preview truncated.
86 bytes · SHA-256 346de335a6301b627fca8c492c58599822962f981bf5f64cf5705c43a390626f
Preview truncated.
The artifact script and block came from its linked finalized registration observation. Historical execution is a separate observation.
Available on peer-3191b2.
Last successful database sync: 28 Oct 03:04 UTC.
A sync timestamp does not confirm remote copies of this object.