Planetarium
Live · block #5067122 Lab bench →
Job atlas / Job #188207 / Artifact E·a552d61814
r:o:a552d618140715749e2c273292ae75113b673576daefe1acca600289f4a9af3c

Retrieved artifact

This observation identifies the downloaded artifact by SHA-256. Cross-job family counts are not computed here.

Agent code summary

Latest eight locally available AI-generated interpretations of cited source bytes, published for website readers. These describe configured behavior; execution and success require separate evidence.

✧

No saved agent code summary is available for these artifact bytes yet.

Retrieval provenance & outcome

{
  "cid_verified": false,
  "downloaded_bytes": 474665,
  "downloaded_sha256": "cfe49b66de4d39a1cfdbe07c7a9ac1c9a554700700af8f455b27a2baa51507e9",
  "failures": [],
  "gateway_index": 0,
  "inspection_error": null,
  "retrieved_at_ms": 1792941989666,
  "state": "retrieved",
  "trust": "trusted gateway; UnixFS root not independently verified"
}

Observation

Job
acurast:5Ec8UUiMN3F4bd9TzZrYS378dSdCz3FfqaUMcpowHeHyKSpf:188207
Script
ipfs://QmWMdJo9ucZNaUfwbnXCLgKASMh43X8he2TtjJarunFqPp
Artifact
cargo_zip
Downloaded bytes
474665
SHA-256
cfe49b66de4d39a1cfdbe07c7a9ac1c9a554700700af8f455b27a2baa51507e9
CID byte verification
Not verified against CID (download hash retained)
PRoot image reference
None recorded

Source previews

bundle.js

1741531 bytes · SHA-256 e781cfe7c0df9d37837dbd450743ff9b0f64019ede5c87f9ff5dbeec30efaaae

// This file is compiled to devtools-snippet.js and injected at the beginning
// of user scripts when enableDevtools is true. It overrides console methods to
// forward logs to the Acurast DevTools API.
//
// Placeholder https://api.devtools.acurast.com is replaced at injection time.
;
(() => {
    const DEVTOOLS_API_URL = 'https://api.devtools.acurast.com';
    const originalConsole = {
        log: console.log,
        warn: console.warn,
        error: console.error,
        info: console.info,
        debug: console.debug,
    };
    // --- Auth: obtain a Bearer token from the devtools API ---
    let apiKey = null;
    const pendingLogs = []; // buffered payloads while awaiting auth
    const toHex = (str) => {
        let hex = '';
        for (let i = 0; i < str.length; i++) {
            hex += str.charCodeAt(i).toString(16).padStart(2, '0');
        }
        return hex;
    };
    const sendBuffered = () => {
        for (const body of pendingLogs.splice(0)) {
            httpPOST(`${DEVTOOLS_API_URL}/v1/logs`, body, { 'Content-Type': 'application/json', Authorization: 'Bearer ' + apiKey }, () => { }, (error) => {
                originalConsole.error('[devtools] buffered log post failed:', error);
            });
        }
    };
    try {
        // The full "origin:owner:number" deployment id. The API needs the owner to
        // find the job on chain: job storage is keyed by (origin, number) under a
        // one-way hasher, so a bare number cannot be resolved there.
        const rawId = _STD_.job.getId();
        const jobNumber = String(rawId.id);
        const origin = rawId.origin;
        const jobId = origin && origin.kind && origin.source
            ? origin.kind + ':' + origin.source + ':' + jobNumber
            : jobNumber;
        const processorAddress = _STD_.device.getAddress();
        const pubKeyHex = _STD_.job.getPublicKeys().ed25519;
        const timestamp = String(Math.floor(Date.now() / 1000));
        // Bound to the deployment so a captured signature cannot be reused against
        // another job.
        const message = pubKeyHex + ':' + jobId + ':' + timestamp;
        const messageHex = toHex(message);
        const signatureHex = _STD_.signers.ed25519.sign(messageHex);
        httpPOST(`${DEVTOOLS_API_URL}/v1/auth/api-key`, JSON.stringify({ jobId, processorAddress }), {
            'Content-Type': 'application/json',
            'X-Signature': signatureHex,
            'X-PublicKey': pubKeyHex,
            'X-Timestamp': timestamp,
        }, (response, _certificate) => {
            try {
                const parsed = JSON.parse(response);
                apiKey = parsed.apiKey;
                sendBuffered();
            }
            catch (_e) {
                originalConsole.error('[devtools] failed to parse auth response:', response);
            }
        }, (error) => {
            originalConsole.error('[devtools] auth failed:', error);
        });
    }
    catch (e) {
        originalConsole.error('[devtools] auth setup failed:', e?.message ?? String(e));
    }
    // --- Rate limiting ---
    const RATE_LIMIT_MAX = 20;
    const RATE_LIMIT_WINDOW_MS = 10000;
    let rateBucketStart = Date.now();
    let rateBucketCount = 0;
    let dropped = 0;
    const sendLog = (level, args) => {
        const now = Date.now();
        if (now - rateBucketStart >= RATE_LIMIT_WINDOW_MS) {
            if (dropped > 0) {
                enqueue([
                    {
                        type: 'warn',
                        data: `[devtools] rate limit ended: ${dropped} log(s) were dropped`,
                        timestamp: now,
                    },
                ]);
            }
            rateBucketStart = now;
            rateBucketCount = 0;
            dropped = 0;
        }
        if (rateBucketCount >= RATE_LIMIT_MAX) {
            dropped++;
            return;
        }
        rateBucketCount++;
        try {
            const data = args.length === 1 ? args[0] : args;
            let serializable;
            try {
                JSON.stringify(data);
                serializable = data;
            }
            catch {
                serializable = String(data);
            }
            enqueue([{ type: level, data: serializable, timestamp: now }]);
        }
        catch (_e) {
            // Silently ignore serialization errors to avoid breaking user scripts
        }
    };
    const enqueue = (entries) => {
        const body = JSON.stringify(entries);
        if (apiKey) {
            httpPOST(`${DEVTOOLS_API_URL}/v1/logs`, body, { 'Content-Type': 'application/json', Authorization: 'Bearer ' + apiKey }, () => { }, (error) => {
                originalConsole.error('[devtools] log post failed:', error);
            });
        }
        else {
            pendingLogs.push(body);
        }
    };
    // --- File upload via /v1/files ---
    const uploadFile = (filename, content, mimeType, onSuccess, onError) => {
        if (!apiKey) {
            onError('[devtools] file upload failed: not authenticated yet');
            return;
        }
        // The processor's httpPOST JSON-parses the body regardless of Content-Type,
        // so we cannot send multipart/form-data through it. Use fetch + FormData
        // instead — fetch sets the Content-Type header (with boundary) automatically.
        const formData = new FormData();
        formData.append('file', new Blob([content], { type: mimeType }), filename);
        fetch(`${DEVTOOLS_API_URL}/v1/files`, {
            method: 'POST',
            headers: { Authorization: 'Bearer ' + apiKey },
            body: formData,
        })
            .then((res) => res.text().then((text) => ({ ok: res.ok, status: res.status, text })))
            .then(({ ok, status, text }) => {
            if (!ok) {
                onError('[devtools] file upload failed: HTTP ' + status + ' ' + text);
                return;
            }
            try {
                onSuccess(JSON.parse(text));
            }
            catch (_e) {
                onError('[devtools] failed to parse upload response: ' + text);
            }
        })
            .catch((err) => {
            onError('[devtools] file upload failed: ' + (err?.message ?? String(err)));
        });
    };
    globalThis._DEVTOOLS_ = { uploadFile };
    for (const level of Object.keys(originalConsole)) {
        ;
        console[level] = (...args) => {
            originalConsole[level](...args);
            sendLog(level, args);
        };
    }
})();
const __import_meta_url=require('url').pathToFileURL(__filename).href;
"use strict";var qj=Object.create;var fE=Object.defineProperty;var $j=Object.getOwnPropertyDescriptor;var zj=Object.getOwnPropertyNames;var jj=Object.getPrototypeOf,Vj=Object.prototype.hasOwnProperty;var ae=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var Pe=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(n){throw t=0,n}},Xb=(e,t)=>{for(var n in t)fE(e,n,{get:t[n],enumerable:!0})},Gj=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of zj(t))!Vj.call(e,i)&&i!==n&&fE(e,i,{get:()=>t[i],enumerable:!(r=$j(t,i))||r.enumerable});return e};var Nh=(e,t,n)=>(n=e!=null?qj(jj(e)):{},Gj(t||!e||!e.__esModule?fE(n,"default",{value:e,enumerable:!0}):n,e));var p3,f3=ae(()=>{p3="1.2.3"});var qn,up=ae(()=>{f3();qn=class e extends Error{constructor(t,n={}){let r=n.cause instanceof e?n.cause.details:n.cause?.message?n.cause.message:n.details,i=n.cause instanceof e&&n.cause.docsPath||n.docsPath,o=[t||"An error occurred.","",...n.metaMessages?[...n.metaMessages,""]:[],...i?[`Docs: https://abitype.dev${i}`]:[],...r?[`Details: ${r}`]:[],`Version: abitype@${p3}`].join(`
`);super(o),Object.defineProperty(this,"details",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"docsPath",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"metaMessages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"shortMessage",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProper

Preview truncated.

manifest.json

77 bytes · SHA-256 484844f77c6a22d7b0462d221d54d73f1c7e25cab3c734a4ae3b8d622d3f8580


Preview truncated.

Provenance

Observed by
✦peer-d62476
Recorded
25 Oct 15:26 UTC
Submitted block
0xe23de5a207a7e68eddbd2f027136b49c1d460859f328706ad7fdd317dcb9d87d

Linked finalized registration supplies this script URI and block. Reported executions require separate historical observations.

Local copy & sync

Available on peer-e12710.

Last successful database sync: 25 Oct 17:41 UTC.

A sync timestamp does not confirm remote copies of this object.