Back to upload-lab
SOURCE / PINNED RELEASE

Made of little things.

upload-lab

Release
7c3a74a2eda6…
Author-recorded commit
Not provided
License
Check the original source

The hash-verified playable HTML, which may contain bundled or minified code. This view does not execute it.

index.html
<!doctype html>
<html lang="en"><head><meta name="description" content="Per-file upload review and exact-byte fixture."><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Upload Lab</title>  <script type="module" crossorigin>function requireNapplet() {
  const w = window;
  if (!w.napplet) {
    throw new Error("window.napplet is unavailable -- runtime did not inject the napplet namespace");
  }
  return w.napplet;
}
function requireDomain(domain) {
  const napplet = requireNapplet();
  const value = napplet[domain];
  if (!value) {
    throw new Error(
      `window.napplet.${String(domain)} is unavailable -- runtime did not inject this domain`
    );
  }
  return value;
}
var upload = {
  /**
   * Inspect upload rails and coarse runtime policy limits.
   * @returns Promise resolving to advisory upload info.
   */
  info() {
    return requireDomain("upload").info();
  },
  /**
   * Upload bytes through the shell's storage pipeline.
   * @param request  The upload request (Blob/ArrayBuffer bytes + intent)
   * @returns Promise resolving to the initial upload result
   */
  upload(request2) {
    return requireDomain("upload").upload(request2);
  },
  /**
   * Get the latest known status for a prior upload.
   * @param uploadId  The shell-generated upload id
   * @returns Promise resolving to the latest status
   */
  status(uploadId2) {
    return requireDomain("upload").status(uploadId2);
  },
  /**
   * Register for shell-pushed upload status updates.
   * @param handler  Called with each new UploadStatus
   * @returns A Subscription with `close()` to stop listening
   */
  onStatus(handler) {
    return requireDomain("upload").onStatus(handler);
  }
};
const originalJpeg = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4QDURXhpZgAATU0AKgAAAAgABAEPAAIAAAATAAAAPgESAAMAAAABAAEAAAEyAAIAAAAUAAAAUoglAAQAAAABAAAAZgAAAABQdWJsaWMgdGVzdCBjYW1lcmEAADIwMjY6MDE6MDIgMDM6MDQ6MDUAAAQAAQACAAAAAk4AAAAAAgAFAAAAAwAAAJwAAwACAAAAAkUAAAAABAAFAAAAAwAAALQAAAAAAAAAAQAAAAEAAAACAAAAAQAAAAMAAAABAAAABAAAAAEAAAAFAAAAAQAAAAYAAAAB/9sAQwACAQEBAQECAQEBAgICAgIEAwICAgIFBAQDBAYFBgYGBQYGBgcJCAYHCQcGBggLCAkKCgoKCgYICwwLCgwJCgoK/9sAQwECAgICAgIFAwMFCgcGBwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK/8AAEQgAIABAAwERAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A+V6/ms/24CgAoAKAPuivw8/44woAKACgD4Xr9wP+xwKACgAoA+6K/Dz/AI4woAKACgD8o6/6oD+/AoAKACgD+iyv+Nc/tgKACgAoA/nTr/soP4nCgAoAKAP6LK/41z+2AoAKACgD/9k=";
const originalHeic = "data:image/heic;base64,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";
function element(id) {
  const value = document.getElementById(id);
  if (!value) throw Error("Missing upload control");
  return value;
}
const request = element("request"), inspect = element("inspect"), status = element("status"), receipt = element("receipt");
let uploadId = null, busy = false;
const encoded = "iVBORw0KGgoAAAANSUhEUgAAAAIAAAABCAYAAAD0In+KAAAADklEQVR4nGP4z8DwHwQBEPgD/U6VwW8AAAAASUVORK5CYII=";
const bytes = Uint8Array.from(atob(encoded), (character) => character.charCodeAt(0));
element("preview").src = "data:image/png;base64," + encoded;
function render(value) {
  receipt.textContent = JSON.stringify(value, null, 2);
}
request.addEventListener("click", () => {
  if (busy) return;
  busy = true;
  request.disabled = true;
  status.textContent = "Waiting for trusted review…";
  void upload.upload({ data: new Blob([bytes], { type: "image/png" }), filename: "two-pixels.png", caption: "Generated red and green PNG", noTransform: true, metadata: { fixture: "upload-lab" } }).then((value) => {
    uploadId = value.uploadId;
    render(value);
    status.textContent = "Upload pending approval.";
  }).catch((error) => {
    status.textContent = error instanceof Error ? error.message : "Upload request failed.";
  }).finally(() => {
    busy = false;
    request.disabled = false;
  });
});
inspect.addEventListener("click", () => {
  if (uploadId) void upload.status(uploadId).then(render).catch(() => {
    status.textContent = "Upload status unavailable.";
  });
});
let subscription = null;
try {
  subscription = upload.onStatus((value) => {
    render(value);
    status.textContent = "Upload " + value.status + ".";
  });
} catch {
  status.textContent = "Upload status notifications are unavailable in this host.";
}
window.addEventListener("pagehide", () => {
  subscription?.close();
  bytes.fill(0);
}, { once: true });
status.textContent = "Ready to request a PNG upload.";
const selection = element("selection"), selectedRequest = element("selected-request"), selectedRead = element("selected-read"), selectedStatus = element("selected-status");
let selected = null;
async function readSelected() {
  if (!selected) return;
  const data = await selected.arrayBuffer();
  const hash = Array.from(new Uint8Array(await crypto.subtle.digest("SHA-256", data)), (byte) => byte.toString(16).padStart(2, "0")).join("");
  selectedStatus.textContent = "Selected bytes: " + data.byteLength + "; SHA-256: " + hash + "; type: " + selected.type + "; name: " + selected.name + "; relative path: " + selected.webkitRelativePath;
}
selection.addEventListener("change", () => {
  selected = selection.files?.length === 1 ? selection.files[0] : null;
  selectedRequest.disabled = selected === null;
  selectedRead.disabled = selected === null;
  if (selected) void readSelected().catch(() => {
    selectedStatus.textContent = "Selected file unavailable.";
  });
});
selectedRead.addEventListener("click", () => {
  void readSelected().catch(() => {
    selectedStatus.textContent = "Selected file unavailable.";
  });
});
selectedRequest.addEventListener("click", () => {
  if (busy || !selected) return;
  busy = true;
  selectedRequest.disabled = true;
  status.textContent = "Waiting for trusted review…";
  void upload.upload({ data: selected, filename: selected.name, caption: "Selected file", noTransform: true }).then((value) => {
    uploadId = value.uploadId;
    render(value);
    status.textContent = "Upload pending approval.";
  }).catch((error) => {
    status.textContent = error instanceof Error ? error.message : "Upload request failed.";
  }).finally(() => {
    busy = false;
    selectedRequest.disabled = selected === null;
  });
});
for (const photo of [{ kind: "JPEG", mime: "image/jpeg", asset: originalJpeg }, { kind: "HEIC", mime: "image/heic", asset: originalHeic }]) {
  const button = element("original-" + photo.kind.toLowerCase());
  button.addEventListener("click", () => {
    if (busy) return;
    busy = true;
    button.disabled = true;
    status.textContent = "Waiting for trusted original-photo review…";
    const data = Uint8Array.from(atob(photo.asset.slice(photo.asset.indexOf(",") + 1)), (character) => character.charCodeAt(0));
    void (async () => {
      const hash = Array.from(new Uint8Array(await crypto.subtle.digest("SHA-256", data)), (byte) => byte.toString(16).padStart(2, "0")).join("");
      element("original-status").textContent = "Original " + photo.kind + " input: " + data.byteLength + " bytes; SHA-256: " + hash;
      const value = await upload.upload({ data: new Blob([data], { type: photo.mime }), filename: "generated-original." + photo.kind.toLowerCase(), caption: "Generated original " + photo.kind, noTransform: true });
      uploadId = value.uploadId;
      render(value);
      status.textContent = "Upload pending approval.";
    })().catch((error) => {
      status.textContent = error instanceof Error ? error.message : "Original photo request failed.";
    }).finally(() => {
      data.fill(0);
      busy = false;
      button.disabled = false;
    });
  });
}
const largeRequest = element("large-request");
largeRequest.addEventListener("click", () => {
  if (busy) return;
  busy = true;
  largeRequest.disabled = true;
  status.textContent = "Waiting for trusted attachment review…";
  const data = new Uint8Array(4 * 1024 * 1024);
  data.fill(97);
  const header = new DataView(data.buffer);
  const ascii = (offset, value) => {
    for (let index = 0; index < value.length; index++) data[offset + index] = value.charCodeAt(index);
  };
  ascii(0, "RIFF");
  header.setUint32(4, data.length - 8, true);
  ascii(8, "WAVE");
  ascii(12, "fmt ");
  header.setUint32(16, 16, true);
  header.setUint16(20, 1, true);
  header.setUint16(22, 1, true);
  header.setUint32(24, 8e3, true);
  header.setUint32(28, 8e3, true);
  header.setUint16(32, 1, true);
  header.setUint16(34, 8, true);
  ascii(36, "data");
  header.setUint32(40, data.length - 44, true);
  void upload.upload({ data: new Blob([data], { type: "audio/wav" }), filename: "generated-four-megabytes.wav", caption: "Generated public WAV fixture", noTransform: true }).then((value) => {
    uploadId = value.uploadId;
    render(value);
    status.textContent = "Upload pending approval.";
  }).catch((error) => {
    status.textContent = error instanceof Error ? error.message : "Attachment request failed.";
  }).finally(() => {
    data.fill(0);
    busy = false;
    largeRequest.disabled = false;
  });
});
if (document.body.dataset.uploadQueue === "true") {
  const attachment = new Blob(["Generated public queue fixture.\n"], { type: "text/plain" });
  const queued = () => upload.upload({ data: attachment, filename: "generated-queue.txt", noTransform: true });
  setTimeout(() => {
    void queued().then((value) => {
      uploadId = value.uploadId;
      render(value);
      return queued().then(() => {
        status.textContent = "Unexpected second queue admission.";
      }).catch((error) => {
        status.textContent = "Queue pending; second request rejected: " + (error instanceof Error ? error.message : "unknown");
      });
    }).catch((error) => {
      status.textContent = "Queue request rejected: " + (error instanceof Error ? error.message : "unknown");
    });
  }, 500);
}
element("scheduled-request").addEventListener("click", () => {
  status.textContent = "PNG request scheduled in fifteen seconds.";
  setTimeout(() => request.click(), 15e3);
});
element("info-request").addEventListener("click", () => {
  void upload.info().then((value) => {
    element("upload-info").textContent = JSON.stringify(value, null, 2);
  }).catch(() => {
    element("upload-info").textContent = "Upload limits unavailable.";
  });
});
</script>
  <style>html { color-scheme: dark; background: #140f0b; color: #f3efeb; font: 16px system-ui, sans-serif; }
body { margin: 0; } main { padding: 24px; display: grid; gap: 16px; } h1, p { margin: 0; } p { line-height: 1.5; }
img { max-width: 100%; image-rendering: pixelated; } button { min-height: 48px; padding: 12px 18px; border: 1px solid #654637; border-radius: 12px; background: #34251d; color: #e8805d; font: inherit; } button:disabled { opacity: .5; } button:focus-visible { outline: 3px solid #e8805d; outline-offset: 3px; } pre { white-space: pre-wrap; overflow-wrap: anywhere; font-size: 12px; }

p {overflow-wrap: anywhere;}
</style>
</head>
<body><main><h1>Upload Lab</h1><p>A generated photo with two pixels. Each request opens a separate trusted review.</p><img id="preview" alt="Generated red and green pixels" width="240" height="120"><button id="request" type="button">Request PNG upload</button><button id="scheduled-request" type="button">Schedule PNG request in fifteen seconds</button><label>Select a file<input id="selection" type="file"></label><button id="selected-request" type="button" disabled>Request selected upload</button><button id="selected-read" type="button" disabled>Read selected file</button><p id="selected-status" role="status">No selected file.</p><button id="original-jpeg" type="button">Request original JPEG</button><button id="original-heic" type="button">Request original HEIC</button><p id="original-status" role="status">No original photo requested.</p><button id="large-request" type="button">Request large WAV upload</button><button id="inspect" type="button">Read upload status</button><p id="status" role="status"></p><pre id="receipt"></pre><button id="info-request" type="button">Read upload limits</button><pre id="upload-info"></pre></main></body></html>