Content-addressed version deploy system for Diffuse elements.diffuse.sh

fix: oauth redirect issue

+10 -6135
+1 -6
artifacts/artifacts.json
··· 103 103 "cid": "bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu", 104 104 "createdAt": "2026-02-15T17:54:33.360Z", 105 105 "version": "4.0.0-alpha" 106 - }, 107 - "bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha": { 108 - "cid": "bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha", 109 - "createdAt": "2026-02-15T18:06:05.676Z", 110 - "version": "4.0.0-alpha" 111 106 } 112 - } 107 + }
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/APEv2Parser-XSWP3VLW.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/APEv2Parser-XSWP3VLW.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/APEv2Parser-XSWP3VLW.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/APEv2Parser-XSWP3VLW.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/AiffParser-P2VIQSPW.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/AiffParser-P2VIQSPW.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/AiffParser-P2VIQSPW.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/AiffParser-P2VIQSPW.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/AsfParser-23UCSCFX.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/AsfParser-23UCSCFX.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/AsfParser-23UCSCFX.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/AsfParser-23UCSCFX.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/DsdiffParser-SNF4XUE4.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/DsdiffParser-SNF4XUE4.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/DsdiffParser-SNF4XUE4.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/DsdiffParser-SNF4XUE4.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/DsfParser-VKGYEZIA.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/DsfParser-VKGYEZIA.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/DsfParser-VKGYEZIA.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/DsfParser-VKGYEZIA.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/FlacParser-NCB7WTLK.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/FlacParser-NCB7WTLK.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/FlacParser-NCB7WTLK.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/FlacParser-NCB7WTLK.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MP4Parser-YVOQVBGY.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MP4Parser-YVOQVBGY.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MP4Parser-YVOQVBGY.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MP4Parser-YVOQVBGY.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MatroskaParser-AYAGCKYO.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MatroskaParser-AYAGCKYO.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MatroskaParser-AYAGCKYO.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MatroskaParser-AYAGCKYO.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MpegParser-7H5JCCCU.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MpegParser-7H5JCCCU.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MpegParser-7H5JCCCU.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MpegParser-7H5JCCCU.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MusepackParser-O32VPQOY.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MusepackParser-O32VPQOY.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MusepackParser-O32VPQOY.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MusepackParser-O32VPQOY.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/OggParser-3DWNAWIW.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/OggParser-3DWNAWIW.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/OggParser-3DWNAWIW.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/OggParser-3DWNAWIW.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/WavPackParser-7KWXBWCY.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/WavPackParser-7KWXBWCY.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/WavPackParser-7KWXBWCY.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/WavPackParser-7KWXBWCY.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/WaveParser-BYFTRQAV.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/WaveParser-BYFTRQAV.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/WaveParser-BYFTRQAV.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/WaveParser-BYFTRQAV.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/android-chrome-192x192.png
··· 1 - ../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/android-chrome-192x192.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/android-chrome-512x512.png
··· 1 - ../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/android-chrome-512x512.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/apple-touch-icon.png
··· 1 - ../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/apple-touch-icon.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/browserconfig.xml
··· 1 - ../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/browserconfig.xml
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-32QOJ2TM.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-32QOJ2TM.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-32QOJ2TM.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-32QOJ2TM.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-33EY7IZW.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-33EY7IZW.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-33EY7IZW.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-33EY7IZW.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-3CXPPL5Z.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-3CXPPL5Z.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-3CXPPL5Z.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-3CXPPL5Z.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-3W46CCB5.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-3W46CCB5.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-3W46CCB5.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-3W46CCB5.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-3WGC3A6G.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-3WGC3A6G.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-3WGC3A6G.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-3WGC3A6G.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-4UUOGUZ7.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-4UUOGUZ7.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-4UUOGUZ7.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-4UUOGUZ7.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-4YB6QUPN.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-4YB6QUPN.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-4YB6QUPN.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-4YB6QUPN.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-6DRHTH2U.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-6DRHTH2U.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-6DRHTH2U.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-6DRHTH2U.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-77DLAY6P.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-77DLAY6P.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-77DLAY6P.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-77DLAY6P.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-77ZY4GQV.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-77ZY4GQV.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-77ZY4GQV.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-77ZY4GQV.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-A7EWFKZ4.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-A7EWFKZ4.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-A7EWFKZ4.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-A7EWFKZ4.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-AC2OVIEU.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-AC2OVIEU.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-AC2OVIEU.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-AC2OVIEU.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-AGNDISJF.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-AGNDISJF.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-AGNDISJF.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-AGNDISJF.js.map
-3591
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-BP7OSAES.js
··· 1 - import { 2 - webcrypto 3 - } from "./chunk-77ZY4GQV.js"; 4 - import { 5 - Buffer, 6 - __commonJS, 7 - __export, 8 - __name, 9 - __reExport, 10 - __toESM, 11 - init_Buffer, 12 - init_process 13 - } from "./chunk-FZQXS3RE.js"; 14 - 15 - // ../node_modules/.deno/@badrap+valita@0.4.6/node_modules/@badrap/valita/dist/node-cjs/index.js 16 - var require_node_cjs = __commonJS({ 17 - "../node_modules/.deno/@badrap+valita@0.4.6/node_modules/@badrap/valita/dist/node-cjs/index.js"(exports) { 18 - "use strict"; 19 - init_Buffer(); 20 - init_process(); 21 - Object.defineProperty(exports, "__esModule", { value: true }); 22 - exports.lazy = exports.union = exports.tuple = exports.array = exports.record = exports.object = exports.literal = exports.undefined = exports.null = exports.boolean = exports.bigint = exports.number = exports.string = exports.never = exports.unknown = exports.ValitaError = void 0; 23 - exports.ok = ok3; 24 - exports.err = err2; 25 - function expectedType(expected) { 26 - return { 27 - ok: false, 28 - code: "invalid_type", 29 - expected 30 - }; 31 - } 32 - __name(expectedType, "expectedType"); 33 - var ISSUE_EXPECTED_NOTHING = expectedType([]); 34 - var ISSUE_EXPECTED_STRING = expectedType(["string"]); 35 - var ISSUE_EXPECTED_NUMBER = expectedType(["number"]); 36 - var ISSUE_EXPECTED_BIGINT = expectedType(["bigint"]); 37 - var ISSUE_EXPECTED_BOOLEAN = expectedType(["boolean"]); 38 - var ISSUE_EXPECTED_UNDEFINED = expectedType(["undefined"]); 39 - var ISSUE_EXPECTED_NULL = expectedType(["null"]); 40 - var ISSUE_EXPECTED_OBJECT = expectedType(["object"]); 41 - var ISSUE_EXPECTED_ARRAY = expectedType(["array"]); 42 - var ISSUE_MISSING_VALUE = { 43 - ok: false, 44 - code: "missing_value" 45 - }; 46 - function joinIssues(left, right) { 47 - return left ? { ok: false, code: "join", left, right } : right; 48 - } 49 - __name(joinIssues, "joinIssues"); 50 - function prependPath(key, tree) { 51 - return { ok: false, code: "prepend", key, tree }; 52 - } 53 - __name(prependPath, "prependPath"); 54 - function cloneIssueWithPath(tree, path) { 55 - const code = tree.code; 56 - switch (code) { 57 - case "invalid_type": 58 - return { code, path, expected: tree.expected }; 59 - case "invalid_literal": 60 - return { code, path, expected: tree.expected }; 61 - case "missing_value": 62 - return { code, path }; 63 - case "invalid_length": 64 - return { 65 - code, 66 - path, 67 - minLength: tree.minLength, 68 - maxLength: tree.maxLength 69 - }; 70 - case "unrecognized_keys": 71 - return { code, path, keys: tree.keys }; 72 - case "invalid_union": 73 - return { code, path, tree: tree.tree, issues: collectIssues(tree.tree) }; 74 - case "custom_error": 75 - if (typeof tree.error === "object" && tree.error.path !== void 0) { 76 - path.push(...tree.error.path); 77 - } 78 - return { 79 - code, 80 - path, 81 - message: typeof tree.error === "string" ? tree.error : tree.error?.message, 82 - error: tree.error 83 - }; 84 - } 85 - } 86 - __name(cloneIssueWithPath, "cloneIssueWithPath"); 87 - function collectIssues(tree, path = [], issues = []) { 88 - for (; ; ) { 89 - if (tree.code === "join") { 90 - collectIssues(tree.left, path.slice(), issues); 91 - tree = tree.right; 92 - } else if (tree.code === "prepend") { 93 - path.push(tree.key); 94 - tree = tree.tree; 95 - } else { 96 - issues.push(cloneIssueWithPath(tree, path)); 97 - return issues; 98 - } 99 - } 100 - } 101 - __name(collectIssues, "collectIssues"); 102 - function separatedList(list, sep) { 103 - if (list.length === 0) { 104 - return "nothing"; 105 - } else if (list.length === 1) { 106 - return list[0]; 107 - } else { 108 - return `${list.slice(0, -1).join(", ")} ${sep} ${list[list.length - 1]}`; 109 - } 110 - } 111 - __name(separatedList, "separatedList"); 112 - function formatLiteral(value) { 113 - return typeof value === "bigint" ? `${value}n` : JSON.stringify(value); 114 - } 115 - __name(formatLiteral, "formatLiteral"); 116 - function countIssues(tree) { 117 - let count = 0; 118 - for (; ; ) { 119 - if (tree.code === "join") { 120 - count += countIssues(tree.left); 121 - tree = tree.right; 122 - } else if (tree.code === "prepend") { 123 - tree = tree.tree; 124 - } else { 125 - return count + 1; 126 - } 127 - } 128 - } 129 - __name(countIssues, "countIssues"); 130 - function formatIssueTree(tree) { 131 - let path = ""; 132 - let count = 0; 133 - for (; ; ) { 134 - if (tree.code === "join") { 135 - count += countIssues(tree.right); 136 - tree = tree.left; 137 - } else if (tree.code === "prepend") { 138 - path += `.${tree.key}`; 139 - tree = tree.tree; 140 - } else { 141 - break; 142 - } 143 - } 144 - let message = "validation failed"; 145 - if (tree.code === "invalid_type") { 146 - message = `expected ${separatedList(tree.expected, "or")}`; 147 - } else if (tree.code === "invalid_literal") { 148 - message = `expected ${separatedList(tree.expected.map(formatLiteral), "or")}`; 149 - } else if (tree.code === "missing_value") { 150 - message = `missing value`; 151 - } else if (tree.code === "unrecognized_keys") { 152 - const keys = tree.keys; 153 - message = `unrecognized ${keys.length === 1 ? "key" : "keys"} ${separatedList(keys.map(formatLiteral), "and")}`; 154 - } else if (tree.code === "invalid_length") { 155 - const min = tree.minLength; 156 - const max = tree.maxLength; 157 - message = `expected an array with `; 158 - if (min > 0) { 159 - if (max === min) { 160 - message += `${min}`; 161 - } else if (max !== void 0) { 162 - message += `between ${min} and ${max}`; 163 - } else { 164 - message += `at least ${min}`; 165 - } 166 - } else { 167 - message += `at most ${max ?? "\u221E"}`; 168 - } 169 - message += ` item(s)`; 170 - } else if (tree.code === "custom_error") { 171 - const error = tree.error; 172 - if (typeof error === "string") { 173 - message = error; 174 - } else if (error !== void 0) { 175 - if (error.message !== void 0) { 176 - message = error.message; 177 - } 178 - if (error.path !== void 0) { 179 - path += "." + error.path.join("."); 180 - } 181 - } 182 - } 183 - let msg = `${tree.code} at .${path.slice(1)} (${message})`; 184 - if (count === 1) { 185 - msg += ` (+ 1 other issue)`; 186 - } else if (count > 1) { 187 - msg += ` (+ ${count} other issues)`; 188 - } 189 - return msg; 190 - } 191 - __name(formatIssueTree, "formatIssueTree"); 192 - function lazyProperty(obj, prop, value, enumerable) { 193 - Object.defineProperty(obj, prop, { 194 - value, 195 - enumerable, 196 - writable: false 197 - }); 198 - return value; 199 - } 200 - __name(lazyProperty, "lazyProperty"); 201 - var ValitaError2 = class extends Error { 202 - static { 203 - __name(this, "ValitaError"); 204 - } 205 - constructor(issueTree) { 206 - super(formatIssueTree(issueTree)); 207 - Object.setPrototypeOf(this, new.target.prototype); 208 - this.name = new.target.name; 209 - this._issueTree = issueTree; 210 - } 211 - get issues() { 212 - return lazyProperty(this, "issues", collectIssues(this._issueTree), true); 213 - } 214 - }; 215 - exports.ValitaError = ValitaError2; 216 - var ErrImpl = class { 217 - static { 218 - __name(this, "ErrImpl"); 219 - } 220 - constructor(issueTree) { 221 - this.ok = false; 222 - this._issueTree = issueTree; 223 - } 224 - get issues() { 225 - return lazyProperty(this, "issues", collectIssues(this._issueTree), true); 226 - } 227 - get message() { 228 - return lazyProperty(this, "message", formatIssueTree(this._issueTree), true); 229 - } 230 - throw() { 231 - throw new ValitaError2(this._issueTree); 232 - } 233 - }; 234 - function ok3(value) { 235 - return { ok: true, value }; 236 - } 237 - __name(ok3, "ok"); 238 - function err2(error) { 239 - return new ErrImpl({ ok: false, code: "custom_error", error }); 240 - } 241 - __name(err2, "err"); 242 - function isObject(v) { 243 - return typeof v === "object" && v !== null && !Array.isArray(v); 244 - } 245 - __name(isObject, "isObject"); 246 - var FLAG_FORBID_EXTRA_KEYS = 1 << 0; 247 - var FLAG_STRIP_EXTRA_KEYS = 1 << 1; 248 - var FLAG_MISSING_VALUE = 1 << 2; 249 - var TAG_UNKNOWN = 0; 250 - var TAG_NEVER = 1; 251 - var TAG_STRING = 2; 252 - var TAG_NUMBER = 3; 253 - var TAG_BIGINT = 4; 254 - var TAG_BOOLEAN = 5; 255 - var TAG_NULL = 6; 256 - var TAG_UNDEFINED = 7; 257 - var TAG_LITERAL = 8; 258 - var TAG_OPTIONAL = 9; 259 - var TAG_OBJECT = 10; 260 - var TAG_ARRAY = 11; 261 - var TAG_UNION = 12; 262 - var TAG_SIMPLE_UNION = 13; 263 - var TAG_TRANSFORM = 14; 264 - var TAG_OTHER = 15; 265 - var taggedMatcher = /* @__PURE__ */ __name((tag, match) => { 266 - return { tag, match }; 267 - }, "taggedMatcher"); 268 - function callMatcher(matcher, value, flags) { 269 - switch (matcher.tag) { 270 - case TAG_UNKNOWN: 271 - return void 0; 272 - case TAG_NEVER: 273 - return ISSUE_EXPECTED_NOTHING; 274 - case TAG_STRING: 275 - return typeof value === "string" ? void 0 : ISSUE_EXPECTED_STRING; 276 - case TAG_NUMBER: 277 - return typeof value === "number" ? void 0 : ISSUE_EXPECTED_NUMBER; 278 - case TAG_BIGINT: 279 - return typeof value === "bigint" ? void 0 : ISSUE_EXPECTED_BIGINT; 280 - case TAG_BOOLEAN: 281 - return typeof value === "boolean" ? void 0 : ISSUE_EXPECTED_BOOLEAN; 282 - case TAG_NULL: 283 - return value === null ? void 0 : ISSUE_EXPECTED_NULL; 284 - case TAG_UNDEFINED: 285 - return value === void 0 ? void 0 : ISSUE_EXPECTED_UNDEFINED; 286 - case TAG_LITERAL: 287 - return matcher.match(value, flags); 288 - case TAG_OPTIONAL: 289 - return matcher.match(value, flags); 290 - case TAG_OBJECT: 291 - return matcher.match(value, flags); 292 - case TAG_ARRAY: 293 - return matcher.match(value, flags); 294 - case TAG_UNION: 295 - return matcher.match(value, flags); 296 - case TAG_SIMPLE_UNION: 297 - return matcher.match(value, flags); 298 - case TAG_TRANSFORM: 299 - return matcher.match(value, flags); 300 - default: 301 - return matcher.match(value, flags); 302 - } 303 - } 304 - __name(callMatcher, "callMatcher"); 305 - var MATCHER_SYMBOL = /* @__PURE__ */ Symbol.for("@valita/internal"); 306 - var AbstractType = class { 307 - static { 308 - __name(this, "AbstractType"); 309 - } 310 - default(defaultValue) { 311 - const defaultResult = ok3(defaultValue); 312 - return new TransformType(this.optional(), (v) => { 313 - return v === void 0 ? defaultResult : void 0; 314 - }); 315 - } 316 - /** 317 - * Derive a new validator that uses the provided predicate function to 318 - * perform custom validation for the source validator's output values. 319 - * 320 - * The predicate function should return `true` when the source 321 - * type's output value is valid, `false` otherwise. The checked value 322 - * itself won't get modified or replaced, and is returned as-is on 323 - * validation success. 324 - * 325 - * @example A validator that accepts only numeric strings. 326 - * ```ts 327 - * const numericString = v.string().assert((s) => /^\d+$/.test(s)) 328 - * numericString.parse("1"); 329 - * // "1" 330 - * numericString.parse("foo"); 331 - * // ValitaError: custom_error at . (validation failed) 332 - * ``` 333 - * 334 - * You can also _refine_ the output type by passing in a 335 - * [type predicate](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates). 336 - * Note that the type predicate must have a compatible input type. 337 - * 338 - * @example A validator with its output type refined to `Date`. 339 - * ```ts 340 - * const dateType = v.unknown().assert((v): v is Date => v instanceof Date); 341 - * ``` 342 - * 343 - * You can also pass in a custom failure messages. 344 - * 345 - * @example A validator that rejects non-integers with a custom error. 346 - * ```ts 347 - * const integer = v.number().assert((n) => Number.isInteger(n), "not an integer"); 348 - * integer.parse(1); 349 - * // 1 350 - * integer.parse(1.5); 351 - * // ValitaError: custom_error at . (not an integer) 352 - * ``` 353 - * 354 - * @param func - The assertion predicate function. 355 - * @param [error] - A custom error for situations when the assertion 356 - * predicate returns `false`. 357 - */ 358 - assert(func, error) { 359 - const err3 = { ok: false, code: "custom_error", error }; 360 - return new TransformType(this, (v, flags) => func(v, flagsToOptions(flags)) ? void 0 : err3); 361 - } 362 - map(func) { 363 - return new TransformType(this, (v, flags) => ({ 364 - ok: true, 365 - value: func(v, flagsToOptions(flags)) 366 - })); 367 - } 368 - chain(input) { 369 - if (typeof input === "function") { 370 - return new TransformType(this, (v, flags) => { 371 - const r = input(v, flagsToOptions(flags)); 372 - return r.ok ? r : r._issueTree; 373 - }); 374 - } 375 - return new TransformType(this, (v, flags) => callMatcher(input[MATCHER_SYMBOL], v, flags)); 376 - } 377 - }; 378 - var Type = class extends AbstractType { 379 - static { 380 - __name(this, "Type"); 381 - } 382 - optional(defaultFn) { 383 - const optional = new Optional(this); 384 - if (!defaultFn) { 385 - return optional; 386 - } 387 - return new TransformType(optional, (v) => { 388 - return v === void 0 ? { ok: true, value: defaultFn() } : void 0; 389 - }); 390 - } 391 - nullable(defaultFn) { 392 - const nullable = new SimpleUnion([null_(), this]); 393 - if (!defaultFn) { 394 - return nullable; 395 - } 396 - return new TransformType(nullable, (v) => { 397 - return v === null ? { ok: true, value: defaultFn() } : void 0; 398 - }); 399 - } 400 - _toTerminals(func) { 401 - func(this); 402 - } 403 - /** 404 - * Parse a value without throwing. 405 - */ 406 - try(v, options) { 407 - const r = callMatcher(this[MATCHER_SYMBOL], v, options === void 0 ? FLAG_FORBID_EXTRA_KEYS : options.mode === "strip" ? FLAG_STRIP_EXTRA_KEYS : options.mode === "passthrough" ? 0 : FLAG_FORBID_EXTRA_KEYS); 408 - return r === void 0 || r.ok ? { ok: true, value: r === void 0 ? v : r.value } : new ErrImpl(r); 409 - } 410 - /** 411 - * Parse a value. Throw a ValitaError on failure. 412 - */ 413 - parse(v, options) { 414 - const r = callMatcher(this[MATCHER_SYMBOL], v, options === void 0 ? FLAG_FORBID_EXTRA_KEYS : options.mode === "strip" ? FLAG_STRIP_EXTRA_KEYS : options.mode === "passthrough" ? 0 : FLAG_FORBID_EXTRA_KEYS); 415 - if (r === void 0 || r.ok) { 416 - return r === void 0 ? v : r.value; 417 - } 418 - throw new ValitaError2(r); 419 - } 420 - }; 421 - var SimpleUnion = class extends Type { 422 - static { 423 - __name(this, "SimpleUnion"); 424 - } 425 - constructor(options) { 426 - super(); 427 - this.name = "union"; 428 - this.options = options; 429 - } 430 - get [MATCHER_SYMBOL]() { 431 - const options = this.options.map((o) => o[MATCHER_SYMBOL]); 432 - return lazyProperty(this, MATCHER_SYMBOL, taggedMatcher(TAG_SIMPLE_UNION, (v, flags) => { 433 - let issue = ISSUE_EXPECTED_NOTHING; 434 - for (const option of options) { 435 - const result = callMatcher(option, v, flags); 436 - if (result === void 0 || result.ok) { 437 - return result; 438 - } 439 - issue = result; 440 - } 441 - return issue; 442 - }), false); 443 - } 444 - _toTerminals(func) { 445 - for (const option of this.options) { 446 - option._toTerminals(func); 447 - } 448 - } 449 - }; 450 - var Optional = class extends AbstractType { 451 - static { 452 - __name(this, "Optional"); 453 - } 454 - constructor(type) { 455 - super(); 456 - this.name = "optional"; 457 - this.type = type; 458 - } 459 - optional(defaultFn) { 460 - if (!defaultFn) { 461 - return this; 462 - } 463 - return new TransformType(this, (v) => { 464 - return v === void 0 ? { ok: true, value: defaultFn() } : void 0; 465 - }); 466 - } 467 - get [MATCHER_SYMBOL]() { 468 - const matcher = this.type[MATCHER_SYMBOL]; 469 - return lazyProperty(this, MATCHER_SYMBOL, taggedMatcher(TAG_OPTIONAL, (v, flags) => v === void 0 || flags & FLAG_MISSING_VALUE ? void 0 : callMatcher(matcher, v, flags)), false); 470 - } 471 - _toTerminals(func) { 472 - func(this); 473 - func(undefined_()); 474 - this.type._toTerminals(func); 475 - } 476 - }; 477 - function setBit(bits, index) { 478 - if (typeof bits !== "number") { 479 - const idx = index >> 5; 480 - for (let i = bits.length; i <= idx; i++) { 481 - bits.push(0); 482 - } 483 - bits[idx] |= 1 << index % 32; 484 - return bits; 485 - } else if (index < 32) { 486 - return bits | 1 << index; 487 - } else { 488 - return setBit([bits, 0], index); 489 - } 490 - } 491 - __name(setBit, "setBit"); 492 - function getBit(bits, index) { 493 - if (typeof bits === "number") { 494 - return index < 32 ? bits >>> index & 1 : 0; 495 - } else { 496 - return bits[index >> 5] >>> index % 32 & 1; 497 - } 498 - } 499 - __name(getBit, "getBit"); 500 - var ObjectType = class _ObjectType extends Type { 501 - static { 502 - __name(this, "ObjectType"); 503 - } 504 - constructor(shape, restType, checks) { 505 - super(); 506 - this.name = "object"; 507 - this.shape = shape; 508 - this._restType = restType; 509 - this._checks = checks; 510 - } 511 - get [MATCHER_SYMBOL]() { 512 - const func = createObjectMatcher(this.shape, this._restType, this._checks); 513 - return lazyProperty(this, MATCHER_SYMBOL, taggedMatcher(TAG_OBJECT, (v, flags) => isObject(v) ? func(v, flags) : ISSUE_EXPECTED_OBJECT), false); 514 - } 515 - check(func, error) { 516 - const issue = { ok: false, code: "custom_error", error }; 517 - return new _ObjectType(this.shape, this._restType, [ 518 - ...this._checks ?? [], 519 - { 520 - func, 521 - issue 522 - } 523 - ]); 524 - } 525 - rest(restType) { 526 - return new _ObjectType(this.shape, restType); 527 - } 528 - extend(shape) { 529 - return new _ObjectType({ ...this.shape, ...shape }, this._restType); 530 - } 531 - pick(...keys) { 532 - const shape = {}; 533 - for (const key of keys) { 534 - set(shape, key, this.shape[key]); 535 - } 536 - return new _ObjectType(shape, void 0); 537 - } 538 - omit(...keys) { 539 - const shape = { ...this.shape }; 540 - for (const key of keys) { 541 - delete shape[key]; 542 - } 543 - return new _ObjectType(shape, this._restType); 544 - } 545 - partial() { 546 - const shape = {}; 547 - for (const key of Object.keys(this.shape)) { 548 - set(shape, key, this.shape[key].optional()); 549 - } 550 - const rest = this._restType?.optional(); 551 - return new _ObjectType(shape, rest); 552 - } 553 - }; 554 - function set(obj, key, value) { 555 - if (key === "__proto__") { 556 - Object.defineProperty(obj, key, { 557 - value, 558 - writable: true, 559 - enumerable: true, 560 - configurable: true 561 - }); 562 - } else { 563 - obj[key] = value; 564 - } 565 - } 566 - __name(set, "set"); 567 - function createObjectMatcher(shape, rest, checks) { 568 - const indexedEntries = Object.keys(shape).map((key, index) => { 569 - const type = shape[key]; 570 - let optional = false; 571 - type._toTerminals((t) => { 572 - optional ||= t.name === "optional"; 573 - }); 574 - return { 575 - key, 576 - index, 577 - matcher: type[MATCHER_SYMBOL], 578 - optional, 579 - missing: prependPath(key, ISSUE_MISSING_VALUE) 580 - }; 581 - }); 582 - const keyedEntries = /* @__PURE__ */ Object.create(null); 583 - for (const entry of indexedEntries) { 584 - keyedEntries[entry.key] = entry; 585 - } 586 - const restMatcher = rest?.[MATCHER_SYMBOL]; 587 - const fastPath = indexedEntries.length === 0 && rest?.name === "unknown" && checks === void 0; 588 - return (obj, flags) => { 589 - if (fastPath) { 590 - return void 0; 591 - } 592 - let output = void 0; 593 - let issues = void 0; 594 - let unrecognized = void 0; 595 - let seenBits = 0; 596 - let seenCount = 0; 597 - if (flags & (FLAG_FORBID_EXTRA_KEYS | FLAG_STRIP_EXTRA_KEYS) || restMatcher !== void 0) { 598 - for (const key in obj) { 599 - const value = obj[key]; 600 - const entry = keyedEntries[key]; 601 - if (entry === void 0 && restMatcher === void 0) { 602 - if (flags & FLAG_FORBID_EXTRA_KEYS) { 603 - if (unrecognized === void 0) { 604 - unrecognized = [key]; 605 - issues = joinIssues(issues, { 606 - ok: false, 607 - code: "unrecognized_keys", 608 - keys: unrecognized 609 - }); 610 - } else { 611 - unrecognized.push(key); 612 - } 613 - } else if (flags & FLAG_STRIP_EXTRA_KEYS && issues === void 0 && output === void 0) { 614 - output = {}; 615 - for (let m = 0; m < indexedEntries.length; m++) { 616 - if (getBit(seenBits, m)) { 617 - const k = indexedEntries[m].key; 618 - set(output, k, obj[k]); 619 - } 620 - } 621 - } 622 - continue; 623 - } 624 - const r = entry === void 0 ? callMatcher(restMatcher, value, flags) : callMatcher(entry.matcher, value, flags); 625 - if (r === void 0) { 626 - if (output !== void 0 && issues === void 0) { 627 - set(output, key, value); 628 - } 629 - } else if (!r.ok) { 630 - issues = joinIssues(issues, prependPath(key, r)); 631 - } else if (issues === void 0) { 632 - if (output === void 0) { 633 - output = {}; 634 - if (restMatcher === void 0) { 635 - for (let m = 0; m < indexedEntries.length; m++) { 636 - if (getBit(seenBits, m)) { 637 - const k = indexedEntries[m].key; 638 - set(output, k, obj[k]); 639 - } 640 - } 641 - } else { 642 - for (const k in obj) { 643 - set(output, k, obj[k]); 644 - } 645 - } 646 - } 647 - set(output, key, r.value); 648 - } 649 - if (entry !== void 0) { 650 - seenCount++; 651 - seenBits = setBit(seenBits, entry.index); 652 - } 653 - } 654 - } 655 - if (seenCount < indexedEntries.length) { 656 - for (let i = 0; i < indexedEntries.length; i++) { 657 - if (getBit(seenBits, i)) { 658 - continue; 659 - } 660 - const entry = indexedEntries[i]; 661 - const value = obj[entry.key]; 662 - let extraFlags = 0; 663 - if (value === void 0 && !(entry.key in obj)) { 664 - if (!entry.optional) { 665 - issues = joinIssues(issues, entry.missing); 666 - continue; 667 - } 668 - extraFlags = FLAG_MISSING_VALUE; 669 - } 670 - const r = callMatcher(entry.matcher, value, flags | extraFlags); 671 - if (r === void 0) { 672 - if (output !== void 0 && issues === void 0 && !extraFlags) { 673 - set(output, entry.key, value); 674 - } 675 - } else if (!r.ok) { 676 - issues = joinIssues(issues, prependPath(entry.key, r)); 677 - } else if (issues === void 0) { 678 - if (output === void 0) { 679 - output = {}; 680 - if (restMatcher === void 0) { 681 - for (let m = 0; m < indexedEntries.length; m++) { 682 - if (m < i || getBit(seenBits, m)) { 683 - const k = indexedEntries[m].key; 684 - set(output, k, obj[k]); 685 - } 686 - } 687 - } else { 688 - for (const k in obj) { 689 - set(output, k, obj[k]); 690 - } 691 - for (let m = 0; m < i; m++) { 692 - if (!getBit(seenBits, m)) { 693 - const k = indexedEntries[m].key; 694 - set(output, k, obj[k]); 695 - } 696 - } 697 - } 698 - } 699 - set(output, entry.key, r.value); 700 - } 701 - } 702 - } 703 - if (issues !== void 0) { 704 - return issues; 705 - } 706 - if (checks !== void 0) { 707 - for (const { func, issue } of checks) { 708 - if (!func(output ?? obj)) { 709 - return issue; 710 - } 711 - } 712 - } 713 - return output && { ok: true, value: output }; 714 - }; 715 - } 716 - __name(createObjectMatcher, "createObjectMatcher"); 717 - var ArrayOrTupleType = class _ArrayOrTupleType extends Type { 718 - static { 719 - __name(this, "ArrayOrTupleType"); 720 - } 721 - constructor(prefix, rest, suffix) { 722 - super(); 723 - this.name = "array"; 724 - this._prefix = prefix; 725 - this._rest = rest; 726 - this._suffix = suffix; 727 - } 728 - get [MATCHER_SYMBOL]() { 729 - const prefix = this._prefix.map((t) => t[MATCHER_SYMBOL]); 730 - const suffix = this._suffix.map((t) => t[MATCHER_SYMBOL]); 731 - const rest = this._rest?.[MATCHER_SYMBOL] ?? taggedMatcher(1, () => ISSUE_MISSING_VALUE); 732 - const minLength = prefix.length + suffix.length; 733 - const maxLength = this._rest ? Infinity : minLength; 734 - const invalidLength = { 735 - ok: false, 736 - code: "invalid_length", 737 - minLength, 738 - maxLength: maxLength === Infinity ? void 0 : maxLength 739 - }; 740 - return lazyProperty(this, MATCHER_SYMBOL, taggedMatcher(TAG_ARRAY, (arr, flags) => { 741 - if (!Array.isArray(arr)) { 742 - return ISSUE_EXPECTED_ARRAY; 743 - } 744 - const length = arr.length; 745 - if (length < minLength || length > maxLength) { 746 - return invalidLength; 747 - } 748 - const headEnd = prefix.length; 749 - const tailStart = arr.length - suffix.length; 750 - let issueTree = void 0; 751 - let output = arr; 752 - for (let i = 0; i < arr.length; i++) { 753 - const entry = i < headEnd ? prefix[i] : i >= tailStart ? suffix[i - tailStart] : rest; 754 - const r = callMatcher(entry, arr[i], flags); 755 - if (r !== void 0) { 756 - if (r.ok) { 757 - if (output === arr) { 758 - output = arr.slice(); 759 - } 760 - output[i] = r.value; 761 - } else { 762 - issueTree = joinIssues(issueTree, prependPath(i, r)); 763 - } 764 - } 765 - } 766 - if (issueTree) { 767 - return issueTree; 768 - } else if (arr === output) { 769 - return void 0; 770 - } else { 771 - return { ok: true, value: output }; 772 - } 773 - }), false); 774 - } 775 - concat(type) { 776 - if (this._rest) { 777 - if (type._rest) { 778 - throw new TypeError("can not concatenate two variadic types"); 779 - } 780 - return new _ArrayOrTupleType(this._prefix, this._rest, [ 781 - ...this._suffix, 782 - ...type._prefix, 783 - ...type._suffix 784 - ]); 785 - } else if (type._rest) { 786 - return new _ArrayOrTupleType([...this._prefix, ...this._suffix, ...type._prefix], type._rest, type._suffix); 787 - } else { 788 - return new _ArrayOrTupleType([...this._prefix, ...this._suffix, ...type._prefix, ...type._suffix], type._rest, type._suffix); 789 - } 790 - } 791 - }; 792 - function toInputType(v) { 793 - const type = typeof v; 794 - if (type !== "object") { 795 - return type; 796 - } else if (v === null) { 797 - return "null"; 798 - } else if (Array.isArray(v)) { 799 - return "array"; 800 - } else { 801 - return type; 802 - } 803 - } 804 - __name(toInputType, "toInputType"); 805 - function dedup(arr) { 806 - return [...new Set(arr)]; 807 - } 808 - __name(dedup, "dedup"); 809 - function groupTerminals(terminals) { 810 - const order = /* @__PURE__ */ new Map(); 811 - const literals = /* @__PURE__ */ new Map(); 812 - const types = /* @__PURE__ */ new Map(); 813 - const unknowns = []; 814 - const optionals = []; 815 - const expectedTypes = []; 816 - for (const { root, terminal } of terminals) { 817 - order.set(root, order.get(root) ?? order.size); 818 - if (terminal.name === "never") { 819 - } else if (terminal.name === "optional") { 820 - optionals.push(root); 821 - } else if (terminal.name === "unknown") { 822 - unknowns.push(root); 823 - } else if (terminal.name === "literal") { 824 - const roots = literals.get(terminal.value) ?? []; 825 - roots.push(root); 826 - literals.set(terminal.value, roots); 827 - expectedTypes.push(toInputType(terminal.value)); 828 - } else { 829 - const roots = types.get(terminal.name) ?? []; 830 - roots.push(root); 831 - types.set(terminal.name, roots); 832 - expectedTypes.push(terminal.name); 833 - } 834 - } 835 - const byOrder = /* @__PURE__ */ __name((a, b) => { 836 - return (order.get(a) ?? 0) - (order.get(b) ?? 0); 837 - }, "byOrder"); 838 - for (const [value, roots] of literals) { 839 - const options = types.get(toInputType(value)); 840 - if (options) { 841 - options.push(...roots); 842 - literals.delete(value); 843 - } else { 844 - literals.set(value, dedup(roots.concat(unknowns)).sort(byOrder)); 845 - } 846 - } 847 - for (const [type, roots] of types) { 848 - types.set(type, dedup(roots.concat(unknowns)).sort(byOrder)); 849 - } 850 - return { 851 - types, 852 - literals, 853 - unknowns: dedup(unknowns).sort(byOrder), 854 - optionals: dedup(optionals).sort(byOrder), 855 - expectedTypes: dedup(expectedTypes) 856 - }; 857 - } 858 - __name(groupTerminals, "groupTerminals"); 859 - function createObjectKeyMatcher(objects, key) { 860 - const list = []; 861 - for (const { root, terminal } of objects) { 862 - terminal.shape[key]._toTerminals((t) => list.push({ root, terminal: t })); 863 - } 864 - const { types, literals, optionals, unknowns, expectedTypes } = groupTerminals(list); 865 - if (unknowns.length > 0 || optionals.length > 1) { 866 - return void 0; 867 - } 868 - for (const roots of literals.values()) { 869 - if (roots.length > 1) { 870 - return void 0; 871 - } 872 - } 873 - for (const roots of types.values()) { 874 - if (roots.length > 1) { 875 - return void 0; 876 - } 877 - } 878 - const missingValue = prependPath(key, ISSUE_MISSING_VALUE); 879 - const issue = prependPath(key, types.size === 0 ? { 880 - ok: false, 881 - code: "invalid_literal", 882 - expected: [...literals.keys()] 883 - } : { 884 - ok: false, 885 - code: "invalid_type", 886 - expected: expectedTypes 887 - }); 888 - const byLiteral = literals.size > 0 ? /* @__PURE__ */ new Map() : void 0; 889 - if (byLiteral) { 890 - for (const [literal4, options] of literals) { 891 - byLiteral.set(literal4, options[0][MATCHER_SYMBOL]); 892 - } 893 - } 894 - const byType = types.size > 0 ? {} : void 0; 895 - if (byType) { 896 - for (const [type, options] of types) { 897 - byType[type] = options[0][MATCHER_SYMBOL]; 898 - } 899 - } 900 - const optional = optionals[0]?.[MATCHER_SYMBOL]; 901 - return (obj, flags) => { 902 - const value = obj[key]; 903 - if (value === void 0 && !(key in obj)) { 904 - return optional === void 0 ? missingValue : callMatcher(optional, obj, flags); 905 - } 906 - const option = byType?.[toInputType(value)] ?? byLiteral?.get(value); 907 - return option ? callMatcher(option, obj, flags) : issue; 908 - }; 909 - } 910 - __name(createObjectKeyMatcher, "createObjectKeyMatcher"); 911 - function createUnionObjectMatcher(terminals) { 912 - const objects = []; 913 - const keyCounts = /* @__PURE__ */ new Map(); 914 - for (const { root, terminal } of terminals) { 915 - if (terminal.name === "unknown") { 916 - return void 0; 917 - } 918 - if (terminal.name === "object") { 919 - for (const key in terminal.shape) { 920 - keyCounts.set(key, (keyCounts.get(key) ?? 0) + 1); 921 - } 922 - objects.push({ root, terminal }); 923 - } 924 - } 925 - if (objects.length < 2) { 926 - return void 0; 927 - } 928 - for (const [key, count] of keyCounts) { 929 - if (count === objects.length) { 930 - const matcher = createObjectKeyMatcher(objects, key); 931 - if (matcher) { 932 - return matcher; 933 - } 934 - } 935 - } 936 - return void 0; 937 - } 938 - __name(createUnionObjectMatcher, "createUnionObjectMatcher"); 939 - function createUnionBaseMatcher(terminals) { 940 - const { expectedTypes, literals, types, unknowns, optionals } = groupTerminals(terminals); 941 - const issue = types.size === 0 && unknowns.length === 0 ? { 942 - ok: false, 943 - code: "invalid_literal", 944 - expected: [...literals.keys()] 945 - } : { 946 - ok: false, 947 - code: "invalid_type", 948 - expected: expectedTypes 949 - }; 950 - const byLiteral = literals.size > 0 ? /* @__PURE__ */ new Map() : void 0; 951 - if (byLiteral) { 952 - for (const [literal4, options] of literals) { 953 - byLiteral.set(literal4, options.map((t) => t[MATCHER_SYMBOL])); 954 - } 955 - } 956 - const byType = types.size > 0 ? {} : void 0; 957 - if (byType) { 958 - for (const [type, options] of types) { 959 - byType[type] = options.map((t) => t[MATCHER_SYMBOL]); 960 - } 961 - } 962 - const optionalMatchers = optionals.map((t) => t[MATCHER_SYMBOL]); 963 - const unknownMatchers = unknowns.map((t) => t[MATCHER_SYMBOL]); 964 - return (value, flags) => { 965 - const options = flags & FLAG_MISSING_VALUE ? optionalMatchers : byType?.[toInputType(value)] ?? byLiteral?.get(value) ?? unknownMatchers; 966 - let count = 0; 967 - let issueTree = issue; 968 - for (let i = 0; i < options.length; i++) { 969 - const r = callMatcher(options[i], value, flags); 970 - if (r === void 0 || r.ok) { 971 - return r; 972 - } 973 - issueTree = count > 0 ? joinIssues(issueTree, r) : r; 974 - count++; 975 - } 976 - if (count > 1) { 977 - return { ok: false, code: "invalid_union", tree: issueTree }; 978 - } 979 - return issueTree; 980 - }; 981 - } 982 - __name(createUnionBaseMatcher, "createUnionBaseMatcher"); 983 - var UnionType = class extends Type { 984 - static { 985 - __name(this, "UnionType"); 986 - } 987 - constructor(options) { 988 - super(); 989 - this.name = "union"; 990 - this.options = options; 991 - } 992 - _toTerminals(func) { 993 - for (const option of this.options) { 994 - option._toTerminals(func); 995 - } 996 - } 997 - get [MATCHER_SYMBOL]() { 998 - const flattened = []; 999 - for (const option of this.options) { 1000 - option._toTerminals((terminal) => { 1001 - flattened.push({ root: option, terminal }); 1002 - }); 1003 - } 1004 - const base = createUnionBaseMatcher(flattened); 1005 - const object7 = createUnionObjectMatcher(flattened); 1006 - return lazyProperty(this, MATCHER_SYMBOL, taggedMatcher(TAG_UNION, (v, f) => object7 !== void 0 && isObject(v) ? object7(v, f) : base(v, f)), false); 1007 - } 1008 - }; 1009 - var STRICT = Object.freeze({ mode: "strict" }); 1010 - var STRIP = Object.freeze({ mode: "strip" }); 1011 - var PASSTHROUGH = Object.freeze({ mode: "passthrough" }); 1012 - function flagsToOptions(flags) { 1013 - return flags & FLAG_FORBID_EXTRA_KEYS ? STRICT : flags & FLAG_STRIP_EXTRA_KEYS ? STRIP : PASSTHROUGH; 1014 - } 1015 - __name(flagsToOptions, "flagsToOptions"); 1016 - var TransformType = class _TransformType extends Type { 1017 - static { 1018 - __name(this, "TransformType"); 1019 - } 1020 - constructor(transformed, transform) { 1021 - super(); 1022 - this.name = "transform"; 1023 - this._transformed = transformed; 1024 - this._transform = transform; 1025 - } 1026 - get [MATCHER_SYMBOL]() { 1027 - const chain = []; 1028 - let next = this; 1029 - while (next instanceof _TransformType) { 1030 - chain.push(next._transform); 1031 - next = next._transformed; 1032 - } 1033 - chain.reverse(); 1034 - const matcher = next[MATCHER_SYMBOL]; 1035 - const undef = ok3(void 0); 1036 - return lazyProperty(this, MATCHER_SYMBOL, taggedMatcher(TAG_TRANSFORM, (v, flags) => { 1037 - let result = callMatcher(matcher, v, flags); 1038 - if (result !== void 0 && !result.ok) { 1039 - return result; 1040 - } 1041 - let current; 1042 - if (result !== void 0) { 1043 - current = result.value; 1044 - } else if (flags & FLAG_MISSING_VALUE) { 1045 - current = void 0; 1046 - result = undef; 1047 - } else { 1048 - current = v; 1049 - } 1050 - for (let i = 0; i < chain.length; i++) { 1051 - const r = chain[i](current, flags); 1052 - if (r !== void 0) { 1053 - if (!r.ok) { 1054 - return r; 1055 - } 1056 - current = r.value; 1057 - result = r; 1058 - } 1059 - } 1060 - return result; 1061 - }), false); 1062 - } 1063 - _toTerminals(func) { 1064 - this._transformed._toTerminals(func); 1065 - } 1066 - }; 1067 - var LazyType = class extends Type { 1068 - static { 1069 - __name(this, "LazyType"); 1070 - } 1071 - constructor(definer) { 1072 - super(); 1073 - this.name = "lazy"; 1074 - this._recursing = false; 1075 - this._definer = definer; 1076 - } 1077 - get type() { 1078 - return lazyProperty(this, "type", this._definer(), true); 1079 - } 1080 - get [MATCHER_SYMBOL]() { 1081 - const matcher = taggedMatcher(TAG_OTHER, (value, flags) => { 1082 - const typeMatcher = this.type[MATCHER_SYMBOL]; 1083 - matcher.tag = typeMatcher.tag; 1084 - matcher.match = typeMatcher.match; 1085 - lazyProperty(this, MATCHER_SYMBOL, typeMatcher, false); 1086 - return callMatcher(typeMatcher, value, flags); 1087 - }); 1088 - return matcher; 1089 - } 1090 - _toTerminals(func) { 1091 - if (!this._recursing) { 1092 - this._recursing = true; 1093 - try { 1094 - this.type._toTerminals(func); 1095 - } finally { 1096 - this._recursing = false; 1097 - } 1098 - } 1099 - } 1100 - }; 1101 - function singleton(name, tag, match) { 1102 - const value = taggedMatcher(tag, match); 1103 - class SimpleType extends Type { 1104 - static { 1105 - __name(this, "SimpleType"); 1106 - } 1107 - constructor() { 1108 - super(); 1109 - this.name = name; 1110 - this[MATCHER_SYMBOL] = value; 1111 - } 1112 - } 1113 - const instance = new SimpleType(); 1114 - return /* @__NO_SIDE_EFFECTS__ */ () => instance; 1115 - } 1116 - __name(singleton, "singleton"); 1117 - exports.unknown = singleton("unknown", TAG_UNKNOWN, () => void 0); 1118 - exports.never = singleton("never", TAG_NEVER, () => ISSUE_EXPECTED_NOTHING); 1119 - exports.string = singleton("string", TAG_STRING, (v) => typeof v === "string" ? void 0 : ISSUE_EXPECTED_STRING); 1120 - exports.number = singleton("number", TAG_NUMBER, (v) => typeof v === "number" ? void 0 : ISSUE_EXPECTED_NUMBER); 1121 - exports.bigint = singleton("bigint", TAG_BIGINT, (v) => typeof v === "bigint" ? void 0 : ISSUE_EXPECTED_BIGINT); 1122 - exports.boolean = singleton("boolean", TAG_BOOLEAN, (v) => typeof v === "boolean" ? void 0 : ISSUE_EXPECTED_BOOLEAN); 1123 - var null_ = /* @__PURE__ */ singleton("null", TAG_NULL, (v) => v === null ? void 0 : ISSUE_EXPECTED_NULL); 1124 - exports.null = null_; 1125 - var undefined_ = /* @__PURE__ */ singleton("undefined", TAG_UNDEFINED, (v) => v === void 0 ? void 0 : ISSUE_EXPECTED_UNDEFINED); 1126 - exports.undefined = undefined_; 1127 - var LiteralType = class extends Type { 1128 - static { 1129 - __name(this, "LiteralType"); 1130 - } 1131 - constructor(value) { 1132 - super(); 1133 - this.name = "literal"; 1134 - const issue = { 1135 - ok: false, 1136 - code: "invalid_literal", 1137 - expected: [value] 1138 - }; 1139 - this[MATCHER_SYMBOL] = taggedMatcher(TAG_LITERAL, (v) => v === value ? void 0 : issue); 1140 - this.value = value; 1141 - } 1142 - }; 1143 - var literal3 = /* @__PURE__ */ __name((value) => { 1144 - return /* @__PURE__ */ new LiteralType(value); 1145 - }, "literal"); 1146 - exports.literal = literal3; 1147 - var object6 = /* @__PURE__ */ __name((obj) => { 1148 - return /* @__PURE__ */ new ObjectType(obj, void 0); 1149 - }, "object"); 1150 - exports.object = object6; 1151 - var record2 = /* @__PURE__ */ __name((valueType) => { 1152 - return /* @__PURE__ */ new ObjectType({}, valueType ?? (0, exports.unknown)()); 1153 - }, "record"); 1154 - exports.record = record2; 1155 - var array3 = /* @__PURE__ */ __name((item) => { 1156 - return /* @__PURE__ */ new ArrayOrTupleType([], item ?? (0, exports.unknown)(), []); 1157 - }, "array"); 1158 - exports.array = array3; 1159 - var tuple2 = /* @__PURE__ */ __name((items) => { 1160 - return /* @__PURE__ */ new ArrayOrTupleType(items, void 0, []); 1161 - }, "tuple"); 1162 - exports.tuple = tuple2; 1163 - var union4 = /* @__PURE__ */ __name((...options) => { 1164 - return /* @__PURE__ */ new UnionType(options); 1165 - }, "union"); 1166 - exports.union = union4; 1167 - var lazy = /* @__PURE__ */ __name((definer) => { 1168 - return new LazyType(definer); 1169 - }, "lazy"); 1170 - exports.lazy = lazy; 1171 - } 1172 - }); 1173 - 1174 - // components/output/raw/atproto/oauth.js 1175 - init_Buffer(); 1176 - init_process(); 1177 - 1178 - // ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/index.js 1179 - init_Buffer(); 1180 - init_process(); 1181 - 1182 - // ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/environment.js 1183 - init_Buffer(); 1184 - init_process(); 1185 - 1186 - // ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/store/db.js 1187 - init_Buffer(); 1188 - init_process(); 1189 - 1190 - // ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/utils/runtime.js 1191 - init_Buffer(); 1192 - init_process(); 1193 - var locks = typeof navigator !== "undefined" ? navigator.locks : void 0; 1194 - 1195 - // ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/store/db.js 1196 - var parse = /* @__PURE__ */ __name((raw) => { 1197 - if (raw != null) { 1198 - const parsed = JSON.parse(raw); 1199 - if (parsed != null) { 1200 - return parsed; 1201 - } 1202 - } 1203 - return {}; 1204 - }, "parse"); 1205 - var createOAuthDatabase = /* @__PURE__ */ __name(({ name }) => { 1206 - const controller = new AbortController(); 1207 - const signal = controller.signal; 1208 - const createStore = /* @__PURE__ */ __name((subname, expiresAt, persistUpdatedAt = false) => { 1209 - let store; 1210 - const storageKey = `${name}:${subname}`; 1211 - const persist = /* @__PURE__ */ __name(() => store && localStorage.setItem(storageKey, JSON.stringify(store)), "persist"); 1212 - const read = /* @__PURE__ */ __name(() => { 1213 - if (signal.aborted) { 1214 - throw new Error(`store closed`); 1215 - } 1216 - return store ??= parse(localStorage.getItem(storageKey)); 1217 - }, "read"); 1218 - { 1219 - const listener = /* @__PURE__ */ __name((ev) => { 1220 - if (ev.key === storageKey) { 1221 - store = void 0; 1222 - } 1223 - }, "listener"); 1224 - globalThis.addEventListener("storage", listener, { signal }); 1225 - } 1226 - { 1227 - const cleanup = /* @__PURE__ */ __name(async (lock) => { 1228 - if (!lock || signal.aborted) { 1229 - return; 1230 - } 1231 - await new Promise((resolve) => setTimeout(resolve, 1e4)); 1232 - if (signal.aborted) { 1233 - return; 1234 - } 1235 - let now = Date.now(); 1236 - let changed = false; 1237 - read(); 1238 - for (const key in store) { 1239 - const item = store[key]; 1240 - const expiresAt2 = item.expiresAt; 1241 - if (expiresAt2 !== null && now > expiresAt2) { 1242 - changed = true; 1243 - delete store[key]; 1244 - } 1245 - } 1246 - if (changed) { 1247 - persist(); 1248 - } 1249 - }, "cleanup"); 1250 - if (locks) { 1251 - locks.request(`${storageKey}:cleanup`, { ifAvailable: true }, cleanup); 1252 - } else { 1253 - cleanup(true); 1254 - } 1255 - } 1256 - return { 1257 - get(key) { 1258 - read(); 1259 - const item = store[key]; 1260 - if (!item) { 1261 - return; 1262 - } 1263 - const expiresAt2 = item.expiresAt; 1264 - if (expiresAt2 !== null && Date.now() > expiresAt2) { 1265 - delete store[key]; 1266 - persist(); 1267 - return; 1268 - } 1269 - return item.value; 1270 - }, 1271 - getWithLapsed(key) { 1272 - read(); 1273 - const item = store[key]; 1274 - const now = Date.now(); 1275 - if (!item) { 1276 - return [void 0, Infinity]; 1277 - } 1278 - const updatedAt = item.updatedAt; 1279 - if (updatedAt === void 0) { 1280 - return [item.value, Infinity]; 1281 - } 1282 - return [item.value, now - updatedAt]; 1283 - }, 1284 - set(key, value) { 1285 - read(); 1286 - const item = { 1287 - value, 1288 - expiresAt: expiresAt(value), 1289 - updatedAt: persistUpdatedAt ? Date.now() : void 0 1290 - }; 1291 - store[key] = item; 1292 - persist(); 1293 - }, 1294 - delete(key) { 1295 - read(); 1296 - if (store[key] !== void 0) { 1297 - delete store[key]; 1298 - persist(); 1299 - } 1300 - }, 1301 - keys() { 1302 - read(); 1303 - return Object.keys(store); 1304 - } 1305 - }; 1306 - }, "createStore"); 1307 - return { 1308 - dispose: /* @__PURE__ */ __name(() => { 1309 - controller.abort(); 1310 - }, "dispose"), 1311 - sessions: createStore("sessions", ({ token }) => { 1312 - if (token.refresh) { 1313 - return null; 1314 - } 1315 - return token.expires_at ?? null; 1316 - }), 1317 - states: createStore("states", (_item) => Date.now() + 10 * 60 * 1e3), 1318 - // 10 minutes 1319 - // The reference PDS have nonces that expire after 3 minutes, while other 1320 - // implementations can have varying expiration times. 1321 - // Stored for 24 hours. 1322 - dpopNonces: createStore("dpopNonces", (_item) => Date.now() + 24 * 60 * 60 * 1e3, true), 1323 - inflightDpop: /* @__PURE__ */ new Map() 1324 - }; 1325 - }, "createOAuthDatabase"); 1326 - 1327 - // ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/environment.js 1328 - var CLIENT_ID; 1329 - var REDIRECT_URI; 1330 - var fetchClientAssertion; 1331 - var database; 1332 - var identityResolver; 1333 - var configureOAuth = /* @__PURE__ */ __name((options) => { 1334 - ({ identityResolver, fetchClientAssertion } = options); 1335 - ({ client_id: CLIENT_ID, redirect_uri: REDIRECT_URI } = options.metadata); 1336 - database = createOAuthDatabase({ name: options.storageName ?? "atcute-oauth" }); 1337 - }, "configureOAuth"); 1338 - 1339 - // ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/errors.js 1340 - init_Buffer(); 1341 - init_process(); 1342 - var LoginError = class extends Error { 1343 - static { 1344 - __name(this, "LoginError"); 1345 - } 1346 - name = "LoginError"; 1347 - }; 1348 - var AuthorizationError = class extends Error { 1349 - static { 1350 - __name(this, "AuthorizationError"); 1351 - } 1352 - name = "AuthorizationError"; 1353 - }; 1354 - var ResolverError = class extends Error { 1355 - static { 1356 - __name(this, "ResolverError"); 1357 - } 1358 - name = "ResolverError"; 1359 - }; 1360 - var TokenRefreshError = class extends Error { 1361 - static { 1362 - __name(this, "TokenRefreshError"); 1363 - } 1364 - sub; 1365 - name = "TokenRefreshError"; 1366 - constructor(sub, message, options) { 1367 - super(message, options); 1368 - this.sub = sub; 1369 - } 1370 - }; 1371 - var OAuthResponseError = class extends Error { 1372 - static { 1373 - __name(this, "OAuthResponseError"); 1374 - } 1375 - response; 1376 - data; 1377 - name = "OAuthResponseError"; 1378 - error; 1379 - description; 1380 - constructor(response2, data) { 1381 - const error = ifString(ifObject(data)?.["error"]); 1382 - const errorDescription = ifString(ifObject(data)?.["error_description"]); 1383 - const messageError = error ? `"${error}"` : "unknown"; 1384 - const messageDesc = errorDescription ? `: ${errorDescription}` : ""; 1385 - const message = `OAuth ${messageError} error${messageDesc}`; 1386 - super(message); 1387 - this.response = response2; 1388 - this.data = data; 1389 - this.error = error; 1390 - this.description = errorDescription; 1391 - } 1392 - get status() { 1393 - return this.response.status; 1394 - } 1395 - get headers() { 1396 - return this.response.headers; 1397 - } 1398 - }; 1399 - var FetchResponseError = class extends Error { 1400 - static { 1401 - __name(this, "FetchResponseError"); 1402 - } 1403 - response; 1404 - status; 1405 - name = "FetchResponseError"; 1406 - constructor(response2, status, message) { 1407 - super(message); 1408 - this.response = response2; 1409 - this.status = status; 1410 - } 1411 - }; 1412 - var ifString = /* @__PURE__ */ __name((v) => { 1413 - return typeof v === "string" ? v : void 0; 1414 - }, "ifString"); 1415 - var ifObject = /* @__PURE__ */ __name((v) => { 1416 - return typeof v === "object" && v !== null && !Array.isArray(v) ? v : void 0; 1417 - }, "ifObject"); 1418 - 1419 - // ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/agents/exchange.js 1420 - init_Buffer(); 1421 - init_process(); 1422 - 1423 - // ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/index.js 1424 - init_Buffer(); 1425 - init_process(); 1426 - 1427 - // ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/client-assertion/index.js 1428 - init_Buffer(); 1429 - init_process(); 1430 - 1431 - // ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/client-assertion/create-client-assertion.js 1432 - init_Buffer(); 1433 - init_process(); 1434 - 1435 - // ../node_modules/.deno/nanoid@5.1.6/node_modules/nanoid/index.js 1436 - init_Buffer(); 1437 - init_process(); 1438 - 1439 - // ../node_modules/.deno/nanoid@5.1.6/node_modules/nanoid/url-alphabet/index.js 1440 - init_Buffer(); 1441 - init_process(); 1442 - var urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"; 1443 - 1444 - // ../node_modules/.deno/nanoid@5.1.6/node_modules/nanoid/index.js 1445 - var POOL_SIZE_MULTIPLIER = 128; 1446 - var pool; 1447 - var poolOffset; 1448 - function fillPool(bytes) { 1449 - if (!pool || pool.length < bytes) { 1450 - pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER); 1451 - webcrypto.getRandomValues(pool); 1452 - poolOffset = 0; 1453 - } else if (poolOffset + bytes > pool.length) { 1454 - webcrypto.getRandomValues(pool); 1455 - poolOffset = 0; 1456 - } 1457 - poolOffset += bytes; 1458 - } 1459 - __name(fillPool, "fillPool"); 1460 - function nanoid(size = 21) { 1461 - fillPool(size |= 0); 1462 - let id = ""; 1463 - for (let i = poolOffset - size; i < poolOffset; i++) { 1464 - id += urlAlphabet[pool[i] & 63]; 1465 - } 1466 - return id; 1467 - } 1468 - __name(nanoid, "nanoid"); 1469 - 1470 - // ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/internal/key-cache.js 1471 - init_Buffer(); 1472 - init_process(); 1473 - 1474 - // ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/internal/jwk.js 1475 - init_Buffer(); 1476 - init_process(); 1477 - 1478 - // ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/index.js 1479 - init_Buffer(); 1480 - init_process(); 1481 - 1482 - // ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base16-node.js 1483 - init_Buffer(); 1484 - init_process(); 1485 - 1486 - // ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base16-web-native.js 1487 - init_Buffer(); 1488 - init_process(); 1489 - 1490 - // ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base16-web-polyfill.js 1491 - init_Buffer(); 1492 - init_process(); 1493 - 1494 - // ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/utils.js 1495 - init_Buffer(); 1496 - init_process(); 1497 - 1498 - // ../node_modules/.deno/@atcute+uint8array@1.1.1/node_modules/@atcute/uint8array/dist/index.node.js 1499 - init_Buffer(); 1500 - init_process(); 1501 - var textEncoder = new TextEncoder(); 1502 - var textDecoder = new TextDecoder(); 1503 - var subtle = crypto.subtle; 1504 - var alloc = /* @__PURE__ */ __name((size) => { 1505 - return new Uint8Array(size); 1506 - }, "alloc"); 1507 - var allocUnsafe = alloc; 1508 - var encodeUtf8 = /* @__PURE__ */ __name((str) => { 1509 - return textEncoder.encode(str); 1510 - }, "encodeUtf8"); 1511 - var _fromCharCode = String.fromCharCode; 1512 - var toSha256 = /* @__PURE__ */ __name(async (buffer) => { 1513 - return new Uint8Array(await subtle.digest("SHA-256", buffer)); 1514 - }, "toSha256"); 1515 - 1516 - // ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/utils.js 1517 - var createRfc4648Encode = /* @__PURE__ */ __name((alphabet, bitsPerChar, pad) => { 1518 - return (bytes) => { 1519 - const mask = (1 << bitsPerChar) - 1; 1520 - let str = ""; 1521 - let bits = 0; 1522 - let buffer = 0; 1523 - for (let i = 0; i < bytes.length; ++i) { 1524 - buffer = buffer << 8 | bytes[i]; 1525 - bits += 8; 1526 - while (bits > bitsPerChar) { 1527 - bits -= bitsPerChar; 1528 - str += alphabet[mask & buffer >> bits]; 1529 - } 1530 - } 1531 - if (bits !== 0) { 1532 - str += alphabet[mask & buffer << bitsPerChar - bits]; 1533 - } 1534 - if (pad) { 1535 - while ((str.length * bitsPerChar & 7) !== 0) { 1536 - str += "="; 1537 - } 1538 - } 1539 - return str; 1540 - }; 1541 - }, "createRfc4648Encode"); 1542 - var createRfc4648Decode = /* @__PURE__ */ __name((alphabet, bitsPerChar, pad) => { 1543 - const codes = {}; 1544 - for (let i = 0; i < alphabet.length; ++i) { 1545 - codes[alphabet[i]] = i; 1546 - } 1547 - return (str) => { 1548 - let end = str.length; 1549 - while (pad && str[end - 1] === "=") { 1550 - --end; 1551 - } 1552 - const bytes = allocUnsafe(end * bitsPerChar / 8 | 0); 1553 - let bits = 0; 1554 - let buffer = 0; 1555 - let written = 0; 1556 - for (let i = 0; i < end; ++i) { 1557 - const value = codes[str[i]]; 1558 - if (value === void 0) { 1559 - throw new SyntaxError(`invalid base string`); 1560 - } 1561 - buffer = buffer << bitsPerChar | value; 1562 - bits += bitsPerChar; 1563 - if (bits >= 8) { 1564 - bits -= 8; 1565 - bytes[written++] = 255 & buffer >> bits; 1566 - } 1567 - } 1568 - if (bits >= bitsPerChar || (255 & buffer << 8 - bits) !== 0) { 1569 - throw new SyntaxError("unexpected end of data"); 1570 - } 1571 - return bytes; 1572 - }; 1573 - }, "createRfc4648Decode"); 1574 - 1575 - // ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base16-node.js 1576 - var HAS_NATIVE_SUPPORT = "fromHex" in Uint8Array; 1577 - 1578 - // ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base64-node.js 1579 - init_Buffer(); 1580 - init_process(); 1581 - 1582 - // ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base64-web-native.js 1583 - init_Buffer(); 1584 - init_process(); 1585 - var fromBase64Url = /* @__PURE__ */ __name((str) => { 1586 - return Uint8Array.fromBase64(str, { 1587 - alphabet: "base64url", 1588 - lastChunkHandling: "loose" 1589 - }); 1590 - }, "fromBase64Url"); 1591 - var toBase64Url = /* @__PURE__ */ __name((bytes) => { 1592 - return bytes.toBase64({ alphabet: "base64url", omitPadding: true }); 1593 - }, "toBase64Url"); 1594 - 1595 - // ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base64-web-polyfill.js 1596 - init_Buffer(); 1597 - init_process(); 1598 - var BASE64URL_CHARSET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; 1599 - var fromBase64Url2 = /* @__PURE__ */ createRfc4648Decode(BASE64URL_CHARSET, 6, false); 1600 - var toBase64Url2 = /* @__PURE__ */ createRfc4648Encode(BASE64URL_CHARSET, 6, false); 1601 - 1602 - // ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base64-node.js 1603 - var HAS_NATIVE_SUPPORT2 = "fromBase64" in Uint8Array; 1604 - var fromBase64Url3 = !HAS_NATIVE_SUPPORT2 ? fromBase64Url2 : fromBase64Url; 1605 - var toBase64Url3 = !HAS_NATIVE_SUPPORT2 ? toBase64Url2 : toBase64Url; 1606 - 1607 - // ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base32.js 1608 - init_Buffer(); 1609 - init_process(); 1610 - 1611 - // ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base32-encode.js 1612 - init_Buffer(); 1613 - init_process(); 1614 - var ALPHABET = "abcdefghijklmnopqrstuvwxyz234567"; 1615 - var _cc = (() => { 1616 - const t = new Uint8Array(32); 1617 - for (let i = 0; i < 32; i++) { 1618 - t[i] = ALPHABET.charCodeAt(i); 1619 - } 1620 - return t; 1621 - })(); 1622 - var _fromCharCode2 = String.fromCharCode; 1623 - 1624 - // ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base32.js 1625 - var ALPHABET2 = "abcdefghijklmnopqrstuvwxyz234567"; 1626 - var _decodeLut = (() => { 1627 - const t = new Uint8Array(128).fill(255); 1628 - for (let i = 0; i < 32; i++) { 1629 - t[ALPHABET2.charCodeAt(i)] = i; 1630 - } 1631 - return t; 1632 - })(); 1633 - 1634 - // ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base58.js 1635 - init_Buffer(); 1636 - init_process(); 1637 - 1638 - // ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/internal/crypto.js 1639 - init_Buffer(); 1640 - init_process(); 1641 - var HASH_BY_ALG = { 1642 - ES256: "SHA-256", 1643 - ES384: "SHA-384", 1644 - ES512: "SHA-512", 1645 - PS256: "SHA-256", 1646 - PS384: "SHA-384", 1647 - PS512: "SHA-512", 1648 - RS256: "SHA-256", 1649 - RS384: "SHA-384", 1650 - RS512: "SHA-512" 1651 - }; 1652 - var CURVE_BY_ALG = { 1653 - ES256: "P-256", 1654 - ES384: "P-384", 1655 - ES512: "P-521", 1656 - PS256: null, 1657 - PS384: null, 1658 - PS512: null, 1659 - RS256: null, 1660 - RS384: null, 1661 - RS512: null 1662 - }; 1663 - var getHashName = /* @__PURE__ */ __name((alg) => { 1664 - return HASH_BY_ALG[alg]; 1665 - }, "getHashName"); 1666 - var getNamedCurve = /* @__PURE__ */ __name((alg) => { 1667 - return CURVE_BY_ALG[alg]; 1668 - }, "getNamedCurve"); 1669 - var getSignAlgorithm = /* @__PURE__ */ __name((alg) => { 1670 - if (alg.startsWith("ES")) { 1671 - return { name: "ECDSA", hash: { name: getHashName(alg) } }; 1672 - } 1673 - if (alg.startsWith("PS")) { 1674 - return { 1675 - name: "RSA-PSS", 1676 - hash: { name: getHashName(alg) }, 1677 - saltLength: getHashLength(getHashName(alg)) 1678 - }; 1679 - } 1680 - return { name: "RSASSA-PKCS1-v1_5" }; 1681 - }, "getSignAlgorithm"); 1682 - var getImportAlgorithm = /* @__PURE__ */ __name((alg, curve) => { 1683 - if (alg.startsWith("ES")) { 1684 - const namedCurve = curve ?? getNamedCurve(alg); 1685 - if (!namedCurve) { 1686 - throw new Error(`unable to determine curve for ${alg}`); 1687 - } 1688 - return { name: "ECDSA", namedCurve }; 1689 - } 1690 - if (alg.startsWith("PS")) { 1691 - return { name: "RSA-PSS", hash: { name: getHashName(alg) } }; 1692 - } 1693 - return { name: "RSASSA-PKCS1-v1_5", hash: { name: getHashName(alg) } }; 1694 - }, "getImportAlgorithm"); 1695 - var getGenerateAlgorithm = /* @__PURE__ */ __name((alg) => { 1696 - const curve = getNamedCurve(alg); 1697 - if (curve) { 1698 - return { name: "ECDSA", namedCurve: curve }; 1699 - } 1700 - const hash = { name: getHashName(alg) }; 1701 - return { 1702 - name: alg.startsWith("PS") ? "RSA-PSS" : "RSASSA-PKCS1-v1_5", 1703 - hash, 1704 - modulusLength: 2048, 1705 - publicExponent: new Uint8Array([1, 0, 1]) 1706 - }; 1707 - }, "getGenerateAlgorithm"); 1708 - var getHashLength = /* @__PURE__ */ __name((hash) => { 1709 - switch (hash) { 1710 - case "SHA-256": 1711 - return 32; 1712 - case "SHA-384": 1713 - return 48; 1714 - case "SHA-512": 1715 - return 64; 1716 - } 1717 - }, "getHashLength"); 1718 - 1719 - // ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/internal/jwk.js 1720 - var SIGNING_ALGORITHMS = [ 1721 - "ES256", 1722 - "ES384", 1723 - "ES512", 1724 - "PS256", 1725 - "PS384", 1726 - "PS512", 1727 - "RS256", 1728 - "RS384", 1729 - "RS512" 1730 - ]; 1731 - var isSigningAlgorithm = /* @__PURE__ */ __name((alg) => { 1732 - return SIGNING_ALGORITHMS.includes(alg); 1733 - }, "isSigningAlgorithm"); 1734 - var derivePublicJwk = /* @__PURE__ */ __name((privateJwk, kid, alg) => { 1735 - if (privateJwk.kty === "EC") { 1736 - const { crv, x, y } = privateJwk; 1737 - return { kty: "EC", crv, x, y, kid, alg, use: "sig" }; 1738 - } 1739 - if (privateJwk.kty === "RSA") { 1740 - const { n, e } = privateJwk; 1741 - return { kty: "RSA", n, e, kid, alg, use: "sig" }; 1742 - } 1743 - throw new Error(`unsupported key type`); 1744 - }, "derivePublicJwk"); 1745 - var importPrivateKeyFromJwk = /* @__PURE__ */ __name(async (jwk, alg) => { 1746 - if (!("d" in jwk) || !jwk.d) { 1747 - throw new Error(`expected a private key (missing 'd' parameter)`); 1748 - } 1749 - if (jwk.kty === "EC" && !alg.startsWith("ES")) { 1750 - throw new Error(`algorithm ${alg} does not match ec key`); 1751 - } 1752 - if (jwk.kty === "RSA" && alg.startsWith("ES")) { 1753 - throw new Error(`algorithm ${alg} does not match rsa key`); 1754 - } 1755 - const algorithm = getImportAlgorithm(alg, jwk.kty === "EC" ? jwk.crv : void 0); 1756 - const key = await crypto.subtle.importKey("jwk", jwk, algorithm, true, ["sign"]); 1757 - if (!(key instanceof CryptoKey)) { 1758 - throw new Error(`expected asymmetric key, got symmetric`); 1759 - } 1760 - return key; 1761 - }, "importPrivateKeyFromJwk"); 1762 - var exportPrivateJwkFromKey = /* @__PURE__ */ __name(async (key, alg, kid) => { 1763 - const jwk = await crypto.subtle.exportKey("jwk", key); 1764 - jwk.alg = alg; 1765 - if (kid) { 1766 - jwk.kid = kid; 1767 - } 1768 - return jwk; 1769 - }, "exportPrivateJwkFromKey"); 1770 - 1771 - // ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/internal/key-cache.js 1772 - var keyCache = /* @__PURE__ */ new WeakMap(); 1773 - var getCachedKeyMaterial = /* @__PURE__ */ __name(async (jwk) => { 1774 - const cached = keyCache.get(jwk); 1775 - if (cached) { 1776 - return cached; 1777 - } 1778 - const { alg } = jwk; 1779 - const cryptoKey = await importPrivateKeyFromJwk(jwk, alg); 1780 - const publicJwk = derivePublicJwk(jwk, jwk.kid, alg); 1781 - const material = { cryptoKey, publicJwk }; 1782 - keyCache.set(jwk, material); 1783 - return material; 1784 - }, "getCachedKeyMaterial"); 1785 - var setCachedKeyMaterial = /* @__PURE__ */ __name((jwk, cryptoKey) => { 1786 - const publicJwk = derivePublicJwk(jwk, jwk.kid, jwk.alg); 1787 - keyCache.set(jwk, { cryptoKey, publicJwk }); 1788 - }, "setCachedKeyMaterial"); 1789 - 1790 - // ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/jwt/index.js 1791 - init_Buffer(); 1792 - init_process(); 1793 - var signJwt = /* @__PURE__ */ __name(async (params) => { 1794 - const { header, payload, key, alg } = params; 1795 - const fullHeader = { ...header, alg }; 1796 - const headerSegment = encodeSegment(fullHeader); 1797 - const payloadSegment = encodeSegment(payload); 1798 - const signingInput = `${headerSegment}.${payloadSegment}`; 1799 - const signature = await crypto.subtle.sign(getSignAlgorithm(alg), key, encodeUtf8(signingInput)); 1800 - const signatureSegment = toBase64Url3(new Uint8Array(signature)); 1801 - return `${signingInput}.${signatureSegment}`; 1802 - }, "signJwt"); 1803 - var encodeSegment = /* @__PURE__ */ __name((value) => { 1804 - return toBase64Url3(encodeUtf8(JSON.stringify(value))); 1805 - }, "encodeSegment"); 1806 - 1807 - // ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/client-assertion/generate-key.js 1808 - init_Buffer(); 1809 - init_process(); 1810 - 1811 - // ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/client-assertion/keys.js 1812 - init_Buffer(); 1813 - init_process(); 1814 - 1815 - // ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/dpop/index.js 1816 - init_Buffer(); 1817 - init_process(); 1818 - 1819 - // ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/dpop/fetch.js 1820 - init_Buffer(); 1821 - init_process(); 1822 - 1823 - // ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/hash/sha256.js 1824 - init_Buffer(); 1825 - init_process(); 1826 - var sha256Base64Url = /* @__PURE__ */ __name(async (input) => { 1827 - const bytes = encodeUtf8(input); 1828 - const digest = await toSha256(bytes); 1829 - return toBase64Url3(digest); 1830 - }, "sha256Base64Url"); 1831 - 1832 - // ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/dpop/proof.js 1833 - init_Buffer(); 1834 - init_process(); 1835 - var createDpopProofSigner = /* @__PURE__ */ __name((jwk) => { 1836 - const alg = jwk.alg; 1837 - let materialPromise; 1838 - return async (htm, htu, nonce, ath) => { 1839 - materialPromise ||= getCachedKeyMaterial(jwk); 1840 - const { cryptoKey, publicJwk } = await materialPromise; 1841 - const now = Math.floor(Date.now() / 1e3); 1842 - return signJwt({ 1843 - header: { 1844 - typ: "dpop+jwt", 1845 - jwk: publicJwk 1846 - }, 1847 - payload: { 1848 - htm, 1849 - htu, 1850 - iat: now, 1851 - jti: nanoid(24), 1852 - nonce, 1853 - ath 1854 - }, 1855 - key: cryptoKey, 1856 - alg 1857 - }); 1858 - }; 1859 - }, "createDpopProofSigner"); 1860 - 1861 - // ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/dpop/generate-key.js 1862 - init_Buffer(); 1863 - init_process(); 1864 - var PREFERRED_ALGORITHMS = [ 1865 - "ES256", 1866 - "ES384", 1867 - "ES512", 1868 - "PS256", 1869 - "PS384", 1870 - "PS512", 1871 - "RS256", 1872 - "RS384", 1873 - "RS512" 1874 - ]; 1875 - var sortAlgorithms = /* @__PURE__ */ __name((algs) => { 1876 - return [...algs].sort((a, b) => { 1877 - const aIdx = PREFERRED_ALGORITHMS.indexOf(a); 1878 - const bIdx = PREFERRED_ALGORITHMS.indexOf(b); 1879 - if (aIdx === -1 && bIdx === -1) { 1880 - return 0; 1881 - } 1882 - if (aIdx === -1) { 1883 - return 1; 1884 - } 1885 - if (bIdx === -1) { 1886 - return -1; 1887 - } 1888 - return aIdx - bIdx; 1889 - }); 1890 - }, "sortAlgorithms"); 1891 - var generateDpopKey = /* @__PURE__ */ __name(async (supportedAlgs) => { 1892 - const normalized = supportedAlgs?.filter(isSigningAlgorithm) ?? []; 1893 - if (supportedAlgs?.length && normalized.length === 0) { 1894 - throw new Error(`no supported algorithms provided`); 1895 - } 1896 - const algs = normalized.length ? sortAlgorithms(normalized) : ["ES256"]; 1897 - const errors = []; 1898 - for (const alg of algs) { 1899 - try { 1900 - const pair = await crypto.subtle.generateKey(getGenerateAlgorithm(alg), true, ["sign", "verify"]); 1901 - const jwk = await exportPrivateJwkFromKey(pair.privateKey, alg); 1902 - setCachedKeyMaterial(jwk, pair.privateKey); 1903 - return jwk; 1904 - } catch (err2) { 1905 - errors.push(err2); 1906 - } 1907 - } 1908 - throw new AggregateError(errors, `failed to generate DPoP key for any of: ${algs.join(", ")}`); 1909 - }, "generateDpopKey"); 1910 - 1911 - // ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/dpop/verify.js 1912 - init_Buffer(); 1913 - init_process(); 1914 - 1915 - // ../node_modules/.deno/@badrap+valita@0.4.6/node_modules/@badrap/valita/dist/node-cjs/index.esm.mjs 1916 - var index_esm_exports = {}; 1917 - init_Buffer(); 1918 - init_process(); 1919 - __reExport(index_esm_exports, __toESM(require_node_cjs(), 1)); 1920 - 1921 - // ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/jwk/compute-jkt.js 1922 - init_Buffer(); 1923 - init_process(); 1924 - 1925 - // ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/dpop/verify.js 1926 - var dpopJwkSchema = index_esm_exports.union(index_esm_exports.object({ 1927 - kty: index_esm_exports.literal("EC"), 1928 - crv: index_esm_exports.union(index_esm_exports.literal("P-256"), index_esm_exports.literal("P-384"), index_esm_exports.literal("P-521")), 1929 - x: index_esm_exports.string(), 1930 - y: index_esm_exports.string() 1931 - }), index_esm_exports.object({ 1932 - kty: index_esm_exports.literal("RSA"), 1933 - e: index_esm_exports.string(), 1934 - n: index_esm_exports.string() 1935 - })); 1936 - var dpopHeaderSchema = index_esm_exports.object({ 1937 - typ: index_esm_exports.literal("dpop+jwt"), 1938 - alg: index_esm_exports.string().assert((alg) => alg !== "none", 'alg must not be "none"'), 1939 - jwk: dpopJwkSchema 1940 - }); 1941 - var dpopPayloadSchema = index_esm_exports.object({ 1942 - htm: index_esm_exports.string(), 1943 - htu: index_esm_exports.string(), 1944 - iat: index_esm_exports.number(), 1945 - jti: index_esm_exports.string(), 1946 - nonce: index_esm_exports.string().optional() 1947 - }); 1948 - 1949 - // ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/hash/index.js 1950 - init_Buffer(); 1951 - init_process(); 1952 - 1953 - // ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/hash/pkce.js 1954 - init_Buffer(); 1955 - init_process(); 1956 - var generatePkce = /* @__PURE__ */ __name(async (length = 64) => { 1957 - const verifier = nanoid(length); 1958 - const challenge = await sha256Base64Url(verifier); 1959 - return { verifier, challenge, method: "S256" }; 1960 - }, "generatePkce"); 1961 - 1962 - // ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/jwk/index.js 1963 - init_Buffer(); 1964 - init_process(); 1965 - 1966 - // ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/jwk/keys.js 1967 - init_Buffer(); 1968 - init_process(); 1969 - 1970 - // ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/resolvers.js 1971 - init_Buffer(); 1972 - init_process(); 1973 - 1974 - // ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/utils/response.js 1975 - init_Buffer(); 1976 - init_process(); 1977 - var extractContentType = /* @__PURE__ */ __name((headers) => { 1978 - return headers.get("content-type")?.split(";")[0]; 1979 - }, "extractContentType"); 1980 - 1981 - // ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/utils/strings.js 1982 - init_Buffer(); 1983 - init_process(); 1984 - var isUrlParseSupported = "parse" in URL; 1985 - var isValidUrl = /* @__PURE__ */ __name((urlString) => { 1986 - let url = null; 1987 - if (isUrlParseSupported) { 1988 - url = URL.parse(urlString); 1989 - } else { 1990 - try { 1991 - url = new URL(urlString); 1992 - } catch { 1993 - } 1994 - } 1995 - if (url !== null) { 1996 - return url.protocol === "https:" || url.protocol === "http:"; 1997 - } 1998 - return false; 1999 - }, "isValidUrl"); 2000 - 2001 - // ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/resolvers.js 2002 - var resolveFromIdentifier = /* @__PURE__ */ __name(async (ident) => { 2003 - const identity = await identityResolver.resolve(ident); 2004 - return { 2005 - identity, 2006 - metadata: await getMetadataFromResourceServer(identity.pds) 2007 - }; 2008 - }, "resolveFromIdentifier"); 2009 - var resolveFromService = /* @__PURE__ */ __name(async (host) => { 2010 - try { 2011 - const metadata = await getMetadataFromResourceServer(host); 2012 - return { metadata }; 2013 - } catch (err2) { 2014 - if (err2 instanceof ResolverError) { 2015 - try { 2016 - const metadata = await getOAuthAuthorizationServerMetadata(host); 2017 - return { metadata }; 2018 - } catch { 2019 - } 2020 - } 2021 - throw err2; 2022 - } 2023 - }, "resolveFromService"); 2024 - var getOAuthProtectedResourceMetadata = /* @__PURE__ */ __name(async (host) => { 2025 - const url = new URL(`/.well-known/oauth-protected-resource`, host); 2026 - const response2 = await fetch(url.href, { 2027 - redirect: "manual", 2028 - headers: { 2029 - accept: "application/json" 2030 - } 2031 - }); 2032 - if (response2.status !== 200 || extractContentType(response2.headers) !== "application/json") { 2033 - throw new ResolverError(`unexpected response`); 2034 - } 2035 - const metadata = await response2.json(); 2036 - if (metadata.resource !== url.origin) { 2037 - throw new ResolverError(`unexpected issuer`); 2038 - } 2039 - return metadata; 2040 - }, "getOAuthProtectedResourceMetadata"); 2041 - var getOAuthAuthorizationServerMetadata = /* @__PURE__ */ __name(async (host) => { 2042 - const url = new URL(`/.well-known/oauth-authorization-server`, host); 2043 - const response2 = await fetch(url.href, { 2044 - redirect: "manual", 2045 - headers: { 2046 - accept: "application/json" 2047 - } 2048 - }); 2049 - if (response2.status !== 200 || extractContentType(response2.headers) !== "application/json") { 2050 - throw new ResolverError(`unexpected response`); 2051 - } 2052 - const metadata = await response2.json(); 2053 - if (metadata.issuer !== url.origin) { 2054 - throw new ResolverError(`unexpected issuer`); 2055 - } 2056 - if (!isValidUrl(metadata.authorization_endpoint)) { 2057 - throw new ResolverError(`authorization server provided incorrect authorization endpoint`); 2058 - } 2059 - if (!metadata.client_id_metadata_document_supported) { 2060 - throw new ResolverError(`authorization server does not support 'client_id_metadata_document'`); 2061 - } 2062 - if (!metadata.pushed_authorization_request_endpoint) { 2063 - throw new ResolverError(`authorization server does not support 'pushed_authorization request'`); 2064 - } 2065 - if (metadata.response_types_supported) { 2066 - if (!metadata.response_types_supported.includes("code")) { 2067 - throw new ResolverError(`authorization server does not support 'code' response type`); 2068 - } 2069 - } 2070 - return metadata; 2071 - }, "getOAuthAuthorizationServerMetadata"); 2072 - var getMetadataFromResourceServer = /* @__PURE__ */ __name(async (input) => { 2073 - const rs_metadata = await getOAuthProtectedResourceMetadata(input); 2074 - if (rs_metadata.authorization_servers?.length !== 1) { 2075 - throw new ResolverError(`expected exactly one authorization server in the listing`); 2076 - } 2077 - const issuer = rs_metadata.authorization_servers[0]; 2078 - const as_metadata = await getOAuthAuthorizationServerMetadata(issuer); 2079 - if (as_metadata.protected_resources) { 2080 - if (!as_metadata.protected_resources.includes(rs_metadata.resource)) { 2081 - throw new ResolverError(`server is not in authorization server's jurisdiction`); 2082 - } 2083 - } 2084 - return as_metadata; 2085 - }, "getMetadataFromResourceServer"); 2086 - 2087 - // ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/agents/server-agent.js 2088 - init_Buffer(); 2089 - init_process(); 2090 - 2091 - // ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/dpop.js 2092 - init_Buffer(); 2093 - init_process(); 2094 - var createDPoPFetch = /* @__PURE__ */ __name((dpopKey, isAuthServer) => { 2095 - const nonces = database.dpopNonces; 2096 - const pending2 = database.inflightDpop; 2097 - const sign = createDpopProofSigner(dpopKey); 2098 - return async (input, init) => { 2099 - const request = new Request(input, init); 2100 - const authorizationHeader = request.headers.get("authorization"); 2101 - const ath = authorizationHeader?.startsWith("DPoP ") ? await sha256Base64Url(authorizationHeader.slice(5)) : void 0; 2102 - const { method, url } = request; 2103 - const { origin, pathname } = new URL(url); 2104 - const htu = origin + pathname; 2105 - let deferred = pending2.get(origin); 2106 - if (deferred) { 2107 - await deferred.promise; 2108 - deferred = void 0; 2109 - } 2110 - let initNonce; 2111 - let expiredOrMissing = false; 2112 - try { 2113 - const [nonce, lapsed] = nonces.getWithLapsed(origin); 2114 - initNonce = nonce; 2115 - expiredOrMissing = lapsed > 3 * 60 * 1e3; 2116 - } catch { 2117 - } 2118 - if (expiredOrMissing) { 2119 - pending2.set(origin, deferred = Promise.withResolvers()); 2120 - } 2121 - let nextNonce; 2122 - try { 2123 - const initProof = await sign(method, htu, initNonce, ath); 2124 - request.headers.set("dpop", initProof); 2125 - const initResponse = await fetch(request); 2126 - nextNonce = initResponse.headers.get("dpop-nonce"); 2127 - if (nextNonce === null || nextNonce === initNonce) { 2128 - return initResponse; 2129 - } 2130 - try { 2131 - nonces.set(origin, nextNonce); 2132 - } catch { 2133 - } 2134 - const shouldRetry = await isUseDpopNonceError(initResponse, isAuthServer); 2135 - if (!shouldRetry) { 2136 - return initResponse; 2137 - } 2138 - if (input === request || init?.body instanceof ReadableStream) { 2139 - return initResponse; 2140 - } 2141 - } finally { 2142 - if (deferred) { 2143 - pending2.delete(origin); 2144 - deferred.resolve(); 2145 - } 2146 - } 2147 - { 2148 - const nextProof = await sign(method, htu, nextNonce, ath); 2149 - const nextRequest = new Request(input, init); 2150 - nextRequest.headers.set("dpop", nextProof); 2151 - const retryResponse = await fetch(nextRequest); 2152 - const retryNonce = retryResponse.headers.get("dpop-nonce"); 2153 - if (retryNonce !== null && retryNonce !== nextNonce) { 2154 - try { 2155 - nonces.set(origin, retryNonce); 2156 - } catch { 2157 - } 2158 - } 2159 - return retryResponse; 2160 - } 2161 - }; 2162 - }, "createDPoPFetch"); 2163 - var isUseDpopNonceError = /* @__PURE__ */ __name(async (response2, isAuthServer) => { 2164 - if (isAuthServer === void 0 || isAuthServer === false) { 2165 - if (response2.status === 401) { 2166 - const wwwAuth = response2.headers.get("www-authenticate"); 2167 - if (wwwAuth?.startsWith("DPoP")) { 2168 - return wwwAuth.includes('error="use_dpop_nonce"'); 2169 - } 2170 - } 2171 - } 2172 - if (isAuthServer === void 0 || isAuthServer === true) { 2173 - if (response2.status === 400 && extractContentType(response2.headers) === "application/json") { 2174 - try { 2175 - const json = await response2.clone().json(); 2176 - return typeof json === "object" && json?.["error"] === "use_dpop_nonce"; 2177 - } catch { 2178 - return false; 2179 - } 2180 - } 2181 - } 2182 - return false; 2183 - }, "isUseDpopNonceError"); 2184 - 2185 - // ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/utils/misc.js 2186 - init_Buffer(); 2187 - init_process(); 2188 - var pick = /* @__PURE__ */ __name((obj, keys) => { 2189 - const cloned = {}; 2190 - for (let idx = 0, len = keys.length; idx < len; idx++) { 2191 - const key = keys[idx]; 2192 - cloned[key] = obj[key]; 2193 - } 2194 - return cloned; 2195 - }, "pick"); 2196 - 2197 - // ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/agents/server-agent.js 2198 - var OAuthServerAgent = class { 2199 - static { 2200 - __name(this, "OAuthServerAgent"); 2201 - } 2202 - #fetch; 2203 - #metadata; 2204 - #dpopKey; 2205 - constructor(metadata, dpopKey) { 2206 - this.#metadata = metadata; 2207 - this.#dpopKey = dpopKey; 2208 - this.#fetch = createDPoPFetch(dpopKey, true); 2209 - } 2210 - async request(endpoint, payload) { 2211 - const url = this.#metadata[`${endpoint}_endpoint`]; 2212 - if (!url) { 2213 - throw new Error(`no endpoint for ${endpoint}`); 2214 - } 2215 - if ((endpoint === "token" || endpoint === "pushed_authorization_request") && fetchClientAssertion !== void 0) { 2216 - const sign = createDpopProofSigner(this.#dpopKey); 2217 - const assertion = await fetchClientAssertion({ 2218 - aud: this.#metadata.issuer, 2219 - createDpopProof: /* @__PURE__ */ __name(async (url2, nonce) => { 2220 - return await sign("POST", url2, nonce, void 0); 2221 - }, "createDpopProof") 2222 - }); 2223 - payload = { ...payload, ...assertion }; 2224 - } 2225 - const response2 = await this.#fetch(url, { 2226 - method: "post", 2227 - headers: { "content-type": "application/json" }, 2228 - body: JSON.stringify({ ...payload, client_id: CLIENT_ID }) 2229 - }); 2230 - if (extractContentType(response2.headers) !== "application/json") { 2231 - throw new FetchResponseError(response2, 2, `unexpected content-type`); 2232 - } 2233 - const json = await response2.json(); 2234 - if (response2.ok) { 2235 - return json; 2236 - } else { 2237 - throw new OAuthResponseError(response2, json); 2238 - } 2239 - } 2240 - async revoke(token) { 2241 - try { 2242 - await this.request("revocation", { token }); 2243 - } catch { 2244 - } 2245 - } 2246 - async exchangeCode(code, verifier) { 2247 - const response2 = await this.request("token", { 2248 - grant_type: "authorization_code", 2249 - redirect_uri: REDIRECT_URI, 2250 - code, 2251 - code_verifier: verifier 2252 - }); 2253 - try { 2254 - return await this.#processExchangeResponse(response2); 2255 - } catch (err2) { 2256 - await this.revoke(response2.access_token); 2257 - throw err2; 2258 - } 2259 - } 2260 - async refresh({ sub, token }) { 2261 - if (!token.refresh) { 2262 - throw new TokenRefreshError(sub, "no refresh token available"); 2263 - } 2264 - const response2 = await this.request("token", { 2265 - grant_type: "refresh_token", 2266 - refresh_token: token.refresh 2267 - }); 2268 - try { 2269 - if (sub !== response2.sub) { 2270 - throw new TokenRefreshError(sub, `sub mismatch in token response; got ${response2.sub}`); 2271 - } 2272 - return this.#processTokenResponse(response2); 2273 - } catch (err2) { 2274 - await this.revoke(response2.access_token); 2275 - throw err2; 2276 - } 2277 - } 2278 - #processTokenResponse(res) { 2279 - if (!res.sub) { 2280 - throw new TypeError(`missing sub field in token response`); 2281 - } 2282 - if (!res.scope) { 2283 - throw new TypeError(`missing scope field in token response`); 2284 - } 2285 - if (res.token_type !== "DPoP") { 2286 - throw new TypeError(`token response returned a non-dpop token`); 2287 - } 2288 - return { 2289 - scope: res.scope, 2290 - refresh: res.refresh_token, 2291 - access: res.access_token, 2292 - type: res.token_type, 2293 - expires_at: typeof res.expires_in === "number" ? Date.now() + res.expires_in * 1e3 : void 0 2294 - }; 2295 - } 2296 - async #processExchangeResponse(res) { 2297 - const sub = res.sub; 2298 - if (!sub) { 2299 - throw new TypeError(`missing sub field in token response`); 2300 - } 2301 - const token = this.#processTokenResponse(res); 2302 - const resolved = await resolveFromIdentifier(sub); 2303 - if (resolved.metadata.issuer !== this.#metadata.issuer) { 2304 - throw new TypeError(`issuer mismatch; got ${resolved.metadata.issuer}`); 2305 - } 2306 - return { 2307 - token, 2308 - info: { 2309 - sub, 2310 - aud: resolved.identity.pds, 2311 - server: pick(resolved.metadata, [ 2312 - "issuer", 2313 - "authorization_endpoint", 2314 - "introspection_endpoint", 2315 - "pushed_authorization_request_endpoint", 2316 - "revocation_endpoint", 2317 - "token_endpoint" 2318 - ]) 2319 - } 2320 - }; 2321 - } 2322 - }; 2323 - 2324 - // ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/agents/sessions.js 2325 - init_Buffer(); 2326 - init_process(); 2327 - 2328 - // ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/utils/dpop-key.js 2329 - init_Buffer(); 2330 - init_process(); 2331 - var ES256_ALG = { name: "ECDSA", namedCurve: "P-256" }; 2332 - var isLegacyDpopKey = /* @__PURE__ */ __name((key) => { 2333 - return typeof key.key === "string" && typeof key.jwt === "string"; 2334 - }, "isLegacyDpopKey"); 2335 - var migrateLegacyDpopKey = /* @__PURE__ */ __name(async (key) => { 2336 - const pkcs8 = fromBase64Url3(key.key); 2337 - const cryptoKey = await crypto.subtle.importKey("pkcs8", pkcs8, ES256_ALG, true, ["sign"]); 2338 - const jwk = await crypto.subtle.exportKey("jwk", cryptoKey); 2339 - jwk.alg = "ES256"; 2340 - return jwk; 2341 - }, "migrateLegacyDpopKey"); 2342 - 2343 - // ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/agents/sessions.js 2344 - var pending = /* @__PURE__ */ new Map(); 2345 - var getSession = /* @__PURE__ */ __name(async (sub, options) => { 2346 - options?.signal?.throwIfAborted(); 2347 - let allowStored = isTokenUsable; 2348 - if (options?.noCache) { 2349 - allowStored = returnFalse; 2350 - } else if (options?.allowStale) { 2351 - allowStored = returnTrue; 2352 - } 2353 - let previousExecutionFlow; 2354 - while (previousExecutionFlow = pending.get(sub)) { 2355 - try { 2356 - const { isFresh, value: value2 } = await previousExecutionFlow; 2357 - if (isFresh || allowStored(value2)) { 2358 - return value2; 2359 - } 2360 - } catch { 2361 - } 2362 - options?.signal?.throwIfAborted(); 2363 - } 2364 - const run = /* @__PURE__ */ __name(async () => { 2365 - const storedSession = await migrateSessionIfNeeded(sub, database.sessions.get(sub)); 2366 - if (storedSession && allowStored(storedSession)) { 2367 - return { isFresh: false, value: storedSession }; 2368 - } 2369 - const newSession = await refreshToken(sub, storedSession); 2370 - await storeSession(sub, newSession); 2371 - return { isFresh: true, value: newSession }; 2372 - }, "run"); 2373 - let promise; 2374 - if (locks) { 2375 - promise = locks.request(`atcute-oauth:${sub}`, run); 2376 - } else { 2377 - promise = run(); 2378 - } 2379 - promise = promise.finally(() => pending.delete(sub)); 2380 - if (pending.has(sub)) { 2381 - throw new Error("concurrent request for the same key"); 2382 - } 2383 - pending.set(sub, promise); 2384 - const { value } = await promise; 2385 - return value; 2386 - }, "getSession"); 2387 - var storeSession = /* @__PURE__ */ __name(async (sub, newSession) => { 2388 - try { 2389 - database.sessions.set(sub, newSession); 2390 - } catch (err2) { 2391 - await onRefreshError(newSession); 2392 - throw err2; 2393 - } 2394 - }, "storeSession"); 2395 - var deleteStoredSession = /* @__PURE__ */ __name((sub) => { 2396 - database.sessions.delete(sub); 2397 - }, "deleteStoredSession"); 2398 - var returnTrue = /* @__PURE__ */ __name(() => true, "returnTrue"); 2399 - var returnFalse = /* @__PURE__ */ __name(() => false, "returnFalse"); 2400 - var refreshToken = /* @__PURE__ */ __name(async (sub, storedSession) => { 2401 - if (storedSession === void 0) { 2402 - throw new TokenRefreshError(sub, `session deleted by another tab`); 2403 - } 2404 - const { dpopKey, info, token } = storedSession; 2405 - const server = new OAuthServerAgent(info.server, dpopKey); 2406 - try { 2407 - const newToken = await server.refresh({ sub: info.sub, token }); 2408 - return { dpopKey, info, token: newToken }; 2409 - } catch (cause) { 2410 - if (cause instanceof OAuthResponseError && cause.status === 400 && cause.error === "invalid_grant") { 2411 - throw new TokenRefreshError(sub, `session was revoked`, { cause }); 2412 - } 2413 - throw cause; 2414 - } 2415 - }, "refreshToken"); 2416 - var onRefreshError = /* @__PURE__ */ __name(async ({ dpopKey, info, token }) => { 2417 - const server = new OAuthServerAgent(info.server, dpopKey); 2418 - await server.revoke(token.refresh ?? token.access); 2419 - }, "onRefreshError"); 2420 - var isTokenUsable = /* @__PURE__ */ __name(({ token }) => { 2421 - const expires = token.expires_at; 2422 - return expires == null || Date.now() + 6e4 <= expires; 2423 - }, "isTokenUsable"); 2424 - var migrateSessionIfNeeded = /* @__PURE__ */ __name(async (sub, session) => { 2425 - if (!session || !isLegacyDpopKey(session.dpopKey)) { 2426 - return session; 2427 - } 2428 - const dpopKey = await migrateLegacyDpopKey(session.dpopKey); 2429 - const migrated = { ...session, dpopKey }; 2430 - try { 2431 - database.sessions.set(sub, migrated); 2432 - } catch { 2433 - } 2434 - return migrated; 2435 - }, "migrateSessionIfNeeded"); 2436 - 2437 - // ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/agents/exchange.js 2438 - var createAuthorizationUrl = /* @__PURE__ */ __name(async (options) => { 2439 - const { target, scope, state = null, ...reqs } = options; 2440 - let resolved; 2441 - switch (target.type) { 2442 - case "account": { 2443 - resolved = await resolveFromIdentifier(target.identifier); 2444 - break; 2445 - } 2446 - case "pds": { 2447 - resolved = await resolveFromService(target.serviceUrl); 2448 - } 2449 - } 2450 - const { identity, metadata } = resolved; 2451 - const loginHint = identity ? identity.handle !== "handle.invalid" ? identity.handle : identity.did : void 0; 2452 - const sid = nanoid(24); 2453 - const pkce = await generatePkce(); 2454 - const dpopKey = await generateDpopKey(["ES256"]); 2455 - const params = { 2456 - display: reqs.display, 2457 - ui_locales: reqs.locale, 2458 - prompt: reqs.prompt, 2459 - redirect_uri: REDIRECT_URI, 2460 - code_challenge: pkce.challenge, 2461 - code_challenge_method: pkce.method, 2462 - state: sid, 2463 - login_hint: loginHint, 2464 - response_mode: "fragment", 2465 - response_type: "code", 2466 - scope 2467 - }; 2468 - database.states.set(sid, { 2469 - dpopKey, 2470 - metadata, 2471 - verifier: pkce.verifier, 2472 - state 2473 - }); 2474 - const server = new OAuthServerAgent(metadata, dpopKey); 2475 - const response2 = await server.request("pushed_authorization_request", params); 2476 - const authUrl = new URL(metadata.authorization_endpoint); 2477 - authUrl.searchParams.set("client_id", CLIENT_ID); 2478 - authUrl.searchParams.set("request_uri", response2.request_uri); 2479 - return authUrl; 2480 - }, "createAuthorizationUrl"); 2481 - var finalizeAuthorization = /* @__PURE__ */ __name(async (params) => { 2482 - const issuer = params.get("iss"); 2483 - const sid = params.get("state"); 2484 - const code = params.get("code"); 2485 - const error = params.get("error"); 2486 - if (!sid || !(code || error)) { 2487 - throw new LoginError(`missing parameters`); 2488 - } 2489 - const stored = database.states.get(sid); 2490 - if (stored) { 2491 - database.states.delete(sid); 2492 - } else { 2493 - throw new LoginError(`unknown state provided`); 2494 - } 2495 - if (error) { 2496 - throw new AuthorizationError(params.get("error_description") || error); 2497 - } 2498 - if (!code) { 2499 - throw new LoginError(`missing code parameter`); 2500 - } 2501 - const dpopKey = stored.dpopKey; 2502 - const metadata = stored.metadata; 2503 - const state = stored.state ?? null; 2504 - if (issuer === null) { 2505 - throw new LoginError(`missing issuer parameter`); 2506 - } else if (issuer !== metadata.issuer) { 2507 - throw new LoginError(`issuer mismatch`); 2508 - } 2509 - const server = new OAuthServerAgent(metadata, dpopKey); 2510 - const { info, token } = await server.exchangeCode(code, stored.verifier); 2511 - const sub = info.sub; 2512 - const session = { dpopKey, info, token }; 2513 - await storeSession(sub, session); 2514 - return { session, state }; 2515 - }, "finalizeAuthorization"); 2516 - 2517 - // ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/agents/user-agent.js 2518 - init_Buffer(); 2519 - init_process(); 2520 - var OAuthUserAgent = class { 2521 - static { 2522 - __name(this, "OAuthUserAgent"); 2523 - } 2524 - session; 2525 - #fetch; 2526 - #getSessionPromise; 2527 - constructor(session) { 2528 - this.session = session; 2529 - this.#fetch = createDPoPFetch(session.dpopKey, false); 2530 - } 2531 - get sub() { 2532 - return this.session.info.sub; 2533 - } 2534 - getSession(options) { 2535 - const promise = getSession(this.session.info.sub, options); 2536 - promise.then((session) => { 2537 - this.session = session; 2538 - }).finally(() => { 2539 - this.#getSessionPromise = void 0; 2540 - }); 2541 - return this.#getSessionPromise = promise; 2542 - } 2543 - async signOut() { 2544 - const sub = this.session.info.sub; 2545 - try { 2546 - const { dpopKey, info, token } = await getSession(sub, { allowStale: true }); 2547 - const server = new OAuthServerAgent(info.server, dpopKey); 2548 - await server.revoke(token.refresh ?? token.access); 2549 - } finally { 2550 - deleteStoredSession(sub); 2551 - } 2552 - } 2553 - async handle(pathname, init) { 2554 - await this.#getSessionPromise; 2555 - const headers = new Headers(init?.headers); 2556 - let session = this.session; 2557 - let url = new URL(pathname, session.info.aud); 2558 - headers.set("authorization", `${session.token.type} ${session.token.access}`); 2559 - let response2 = await this.#fetch(url.href, { ...init, headers }); 2560 - if (!isInvalidTokenResponse(response2)) { 2561 - return response2; 2562 - } 2563 - try { 2564 - if (this.#getSessionPromise) { 2565 - session = await this.#getSessionPromise; 2566 - } else { 2567 - session = await this.getSession(); 2568 - } 2569 - } catch { 2570 - return response2; 2571 - } 2572 - if (init?.body instanceof ReadableStream) { 2573 - return response2; 2574 - } 2575 - url = new URL(pathname, session.info.aud); 2576 - headers.set("authorization", `${session.token.type} ${session.token.access}`); 2577 - return await this.#fetch(url.href, { ...init, headers }); 2578 - } 2579 - }; 2580 - var isInvalidTokenResponse = /* @__PURE__ */ __name((response2) => { 2581 - if (response2.status !== 401) { 2582 - return false; 2583 - } 2584 - const auth = response2.headers.get("www-authenticate"); 2585 - return auth != null && (auth.startsWith("Bearer ") || auth.startsWith("DPoP ")) && auth.includes('error="invalid_token"'); 2586 - }, "isInvalidTokenResponse"); 2587 - 2588 - // ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/index.js 2589 - init_Buffer(); 2590 - init_process(); 2591 - 2592 - // ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/actor/local.js 2593 - init_Buffer(); 2594 - init_process(); 2595 - 2596 - // ../node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/dist/index.js 2597 - init_Buffer(); 2598 - init_process(); 2599 - 2600 - // ../node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/dist/typedefs.js 2601 - var typedefs_exports = {}; 2602 - __export(typedefs_exports, { 2603 - FRAGMENT_RE: () => FRAGMENT_RE, 2604 - MULTIBASE_RE: () => MULTIBASE_RE, 2605 - didDocument: () => didDocument, 2606 - didRelativeUri: () => didRelativeUri, 2607 - didString: () => didString, 2608 - multibaseString: () => multibaseString, 2609 - rfc3968UriSchema: () => rfc3968UriSchema, 2610 - service: () => service, 2611 - verificationMethod: () => verificationMethod 2612 - }); 2613 - init_Buffer(); 2614 - init_process(); 2615 - 2616 - // ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/index.js 2617 - init_Buffer(); 2618 - init_process(); 2619 - 2620 - // ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/at-identifier.js 2621 - init_Buffer(); 2622 - init_process(); 2623 - 2624 - // ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/did.js 2625 - init_Buffer(); 2626 - init_process(); 2627 - var DID_RE = /^did:([a-z]+):([a-zA-Z0-9._:%-]*[a-zA-Z0-9._-])$/; 2628 - var isDid = /* @__PURE__ */ __name(/* @__NO_SIDE_EFFECTS__ */ (input) => { 2629 - return typeof input === "string" && input.length >= 7 && input.length <= 2048 && DID_RE.test(input); 2630 - }, "isDid"); 2631 - 2632 - // ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/handle.js 2633 - init_Buffer(); 2634 - init_process(); 2635 - 2636 - // ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/utils/ascii.js 2637 - init_Buffer(); 2638 - init_process(); 2639 - var isAsciiAlpha = /* @__PURE__ */ __name(/* @__NO_SIDE_EFFECTS__ */ (c) => { 2640 - return c >= 65 && c <= 90 || c >= 97 && c <= 122; 2641 - }, "isAsciiAlpha"); 2642 - var isAsciiAlphaNum = /* @__PURE__ */ __name(/* @__NO_SIDE_EFFECTS__ */ (c) => { 2643 - return /* @__PURE__ */ isAsciiAlpha(c) || c >= 48 && c <= 57; 2644 - }, "isAsciiAlphaNum"); 2645 - 2646 - // ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/handle.js 2647 - var isValidLabel = /* @__PURE__ */ __name((input, start, end) => { 2648 - const len = end - start; 2649 - if (len === 0 || len > 63) { 2650 - return false; 2651 - } 2652 - const first = input.charCodeAt(start); 2653 - if (!isAsciiAlphaNum(first)) { 2654 - return false; 2655 - } 2656 - if (len > 1) { 2657 - if (!isAsciiAlphaNum(input.charCodeAt(end - 1))) 2658 - return false; 2659 - for (let j = start + 1; j < end - 1; j++) { 2660 - const c = input.charCodeAt(j); 2661 - if (!isAsciiAlphaNum(c) && c !== 45) { 2662 - return false; 2663 - } 2664 - } 2665 - } 2666 - return true; 2667 - }, "isValidLabel"); 2668 - var isHandle = /* @__PURE__ */ __name(/* @__NO_SIDE_EFFECTS__ */ (input) => { 2669 - if (typeof input !== "string") { 2670 - return false; 2671 - } 2672 - const len = input.length; 2673 - if (len < 3 || len > 253) { 2674 - return false; 2675 - } 2676 - let labelStart = 0; 2677 - let labelCount = 0; 2678 - let lastLabelStart = 0; 2679 - for (let i = 0; i <= len; i++) { 2680 - if (i === len || input.charCodeAt(i) === 46) { 2681 - if (!isValidLabel(input, labelStart, i)) { 2682 - return false; 2683 - } 2684 - lastLabelStart = labelStart; 2685 - labelStart = i + 1; 2686 - labelCount++; 2687 - } 2688 - } 2689 - if (labelCount < 2) { 2690 - return false; 2691 - } 2692 - return isAsciiAlpha(input.charCodeAt(lastLabelStart)); 2693 - }, "isHandle"); 2694 - 2695 - // ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/at-uri.js 2696 - init_Buffer(); 2697 - init_process(); 2698 - 2699 - // ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/utils.js 2700 - init_Buffer(); 2701 - init_process(); 2702 - 2703 - // ../node_modules/.deno/esm-env@1.2.2/node_modules/esm-env/index.js 2704 - init_Buffer(); 2705 - init_process(); 2706 - 2707 - // ../node_modules/.deno/esm-env@1.2.2/node_modules/esm-env/browser-fallback.js 2708 - init_Buffer(); 2709 - init_process(); 2710 - 2711 - // ../node_modules/.deno/esm-env@1.2.2/node_modules/esm-env/dev-fallback.js 2712 - init_Buffer(); 2713 - init_process(); 2714 - var node_env = globalThis.process?.env?.NODE_ENV; 2715 - var dev_fallback_default = node_env && !node_env.toLowerCase().startsWith("prod"); 2716 - 2717 - // ../node_modules/.deno/esm-env@1.2.2/node_modules/esm-env/true.js 2718 - init_Buffer(); 2719 - init_process(); 2720 - 2721 - // ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/nsid.js 2722 - init_Buffer(); 2723 - init_process(); 2724 - 2725 - // ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/record-key.js 2726 - init_Buffer(); 2727 - init_process(); 2728 - 2729 - // ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/at-uri.js 2730 - var CANONICAL_AT_URI_MIN_LENGTH = 5 + 7 + 1 + 5 + 1 + 1; 2731 - var AT_URI_MAX_LENGTH = 5 + 2048 + 1 + 317 + 1 + 512; 2732 - 2733 - // ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/cid.js 2734 - init_Buffer(); 2735 - init_process(); 2736 - 2737 - // ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/datetime.js 2738 - init_Buffer(); 2739 - init_process(); 2740 - 2741 - // ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/language.js 2742 - init_Buffer(); 2743 - init_process(); 2744 - 2745 - // ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/tid.js 2746 - init_Buffer(); 2747 - init_process(); 2748 - 2749 - // ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/uri.js 2750 - init_Buffer(); 2751 - init_process(); 2752 - 2753 - // ../node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/dist/types.js 2754 - init_Buffer(); 2755 - init_process(); 2756 - 2757 - // ../node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/dist/typedefs.js 2758 - var FRAGMENT_RE = /^#[^#]+$/; 2759 - var MULTIBASE_RE = /^z[a-km-zA-HJ-NP-Z1-9]+$/; 2760 - var rfc3968UriSchema = index_esm_exports.string().assert((input) => { 2761 - return URL.canParse(input); 2762 - }, `must be a url`); 2763 - var didRelativeUri = index_esm_exports.string().assert((input) => { 2764 - return FRAGMENT_RE.test(input) || URL.canParse(input); 2765 - }, `must be a did relative uri`); 2766 - var multibaseString = index_esm_exports.string().assert((input) => { 2767 - return MULTIBASE_RE.test(input); 2768 - }, `must be a base58 multibase`); 2769 - var didString = index_esm_exports.string().assert(isDid, `must be a did`); 2770 - var verificationMethod = index_esm_exports.object({ 2771 - id: didRelativeUri, 2772 - type: index_esm_exports.string(), 2773 - controller: didString, 2774 - publicKeyMultibase: multibaseString.optional(), 2775 - publicKeyJwk: index_esm_exports.record().optional() 2776 - }).chain((input) => { 2777 - switch (input.type) { 2778 - case "Multikey": { 2779 - if (input.publicKeyMultibase === void 0) { 2780 - return index_esm_exports.err({ message: `missing multikey`, path: ["publicKeyMultibase"] }); 2781 - } 2782 - break; 2783 - } 2784 - case "EcdsaSecp256k1VerificationKey2019": 2785 - case "EcdsaSecp256r1VerificationKey2019": { 2786 - if (input.publicKeyMultibase === void 0) { 2787 - return index_esm_exports.err({ message: `missing multibase key`, path: ["publicKeyMultibase"] }); 2788 - } 2789 - break; 2790 - } 2791 - } 2792 - return index_esm_exports.ok(input); 2793 - }); 2794 - var service = index_esm_exports.object({ 2795 - // should've only been RFC3968, but did:plc uses relative URIs. 2796 - id: didRelativeUri, 2797 - type: index_esm_exports.union(index_esm_exports.string(), index_esm_exports.array(index_esm_exports.string())), 2798 - serviceEndpoint: index_esm_exports.union(rfc3968UriSchema, index_esm_exports.record(rfc3968UriSchema), index_esm_exports.array(index_esm_exports.union(rfc3968UriSchema, index_esm_exports.record(rfc3968UriSchema)))) 2799 - }); 2800 - var didDocument = index_esm_exports.object({ 2801 - "@context": index_esm_exports.array(rfc3968UriSchema), 2802 - id: didString, 2803 - alsoKnownAs: index_esm_exports.array(rfc3968UriSchema).chain((input) => { 2804 - for (let i = 0, len = input.length; i < len; i++) { 2805 - const aka = input[i]; 2806 - for (let j = 0; j < i; j++) { 2807 - if (aka === input[j]) { 2808 - return index_esm_exports.err({ 2809 - message: `duplicate "${aka}" aka entry`, 2810 - path: [i] 2811 - }); 2812 - } 2813 - } 2814 - } 2815 - return index_esm_exports.ok(input); 2816 - }).optional(), 2817 - verificationMethod: index_esm_exports.array(verificationMethod).chain((input) => { 2818 - for (let i = 0, len = input.length; i < len; i++) { 2819 - const method = input[i]; 2820 - const methodId = method.id; 2821 - for (let j = 0; j < i; j++) { 2822 - if (methodId === input[j].id) { 2823 - return index_esm_exports.err({ 2824 - message: `duplicate "${methodId}" verification method`, 2825 - path: [i, "id"] 2826 - }); 2827 - } 2828 - } 2829 - } 2830 - return index_esm_exports.ok(input); 2831 - }).optional(), 2832 - service: index_esm_exports.array(service).optional(), 2833 - controller: index_esm_exports.union(didString, index_esm_exports.array(didString)).optional(), 2834 - authentication: index_esm_exports.array(index_esm_exports.union(didRelativeUri, verificationMethod)).optional() 2835 - }).chain((input) => { 2836 - const { id: did, service: services } = input; 2837 - if (services?.length) { 2838 - const len = services.length; 2839 - const identifiers = new Array(len); 2840 - for (let i = 0; i < len; i++) { 2841 - const service2 = services[i]; 2842 - let id = service2.id; 2843 - if (id[0] === "#") { 2844 - id = did + id; 2845 - } 2846 - identifiers[i] = id; 2847 - } 2848 - for (let i = 0; i < len; i++) { 2849 - const id = identifiers[i]; 2850 - for (let j = 0; j < i; j++) { 2851 - if (id === identifiers[j]) { 2852 - return index_esm_exports.err({ 2853 - message: `duplicate "${id}" service`, 2854 - path: ["service", i, "id"] 2855 - }); 2856 - } 2857 - } 2858 - } 2859 - } 2860 - return index_esm_exports.ok(input); 2861 - }); 2862 - 2863 - // ../node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/dist/utils.js 2864 - init_Buffer(); 2865 - init_process(); 2866 - var isUrlParseSupported2 = "parse" in URL; 2867 - var isAtprotoServiceEndpoint = /* @__PURE__ */ __name((input) => { 2868 - let url = null; 2869 - if (isUrlParseSupported2) { 2870 - url = URL.parse(input); 2871 - } else { 2872 - try { 2873 - url = new URL(input); 2874 - } catch { 2875 - } 2876 - } 2877 - return url !== null && (url.protocol === "https:" || url.protocol === "http:") && url.pathname === "/" && url.search === "" && url.hash === ""; 2878 - }, "isAtprotoServiceEndpoint"); 2879 - var getAtprotoHandle = /* @__PURE__ */ __name((doc) => { 2880 - const alsoKnownAs = doc.alsoKnownAs; 2881 - if (!alsoKnownAs) { 2882 - return null; 2883 - } 2884 - const PREFIX = "at://"; 2885 - for (let idx = 0, len = alsoKnownAs.length; idx < len; idx++) { 2886 - const aka = alsoKnownAs[idx]; 2887 - if (!aka.startsWith(PREFIX)) { 2888 - continue; 2889 - } 2890 - const raw = aka.slice(PREFIX.length); 2891 - if (!isHandle(raw)) { 2892 - return void 0; 2893 - } 2894 - return raw; 2895 - } 2896 - return null; 2897 - }, "getAtprotoHandle"); 2898 - var getAtprotoServiceEndpoint = /* @__PURE__ */ __name((doc, predicate) => { 2899 - const services = doc.service; 2900 - if (!services) { 2901 - return; 2902 - } 2903 - for (let idx = 0, len = services.length; idx < len; idx++) { 2904 - const { id, type, serviceEndpoint } = services[idx]; 2905 - if (id !== predicate.id && id !== doc.id + predicate.id) { 2906 - continue; 2907 - } 2908 - if (predicate.type !== void 0) { 2909 - if (Array.isArray(type)) { 2910 - if (!type.includes(predicate.type)) { 2911 - continue; 2912 - } 2913 - } else { 2914 - if (type !== predicate.type) { 2915 - continue; 2916 - } 2917 - } 2918 - } 2919 - if (typeof serviceEndpoint !== "string" || !isAtprotoServiceEndpoint(serviceEndpoint)) { 2920 - continue; 2921 - } 2922 - return serviceEndpoint; 2923 - } 2924 - }, "getAtprotoServiceEndpoint"); 2925 - var getPdsEndpoint = /* @__PURE__ */ __name((doc) => { 2926 - return getAtprotoServiceEndpoint(doc, { 2927 - id: "#atproto_pds", 2928 - type: "AtprotoPersonalDataServer" 2929 - }); 2930 - }, "getPdsEndpoint"); 2931 - 2932 - // ../node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/dist/did.js 2933 - init_Buffer(); 2934 - init_process(); 2935 - 2936 - // ../node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/dist/methods/plc.js 2937 - init_Buffer(); 2938 - init_process(); 2939 - var PLC_DID_RE = /^did:plc:([a-z2-7]{24})$/; 2940 - var isPlcDid = /* @__PURE__ */ __name((input) => { 2941 - return input.length === 32 && PLC_DID_RE.test(input); 2942 - }, "isPlcDid"); 2943 - 2944 - // ../node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/dist/methods/web.js 2945 - init_Buffer(); 2946 - init_process(); 2947 - var ATPROTO_WEB_DID_RE = /^did:web:([a-zA-Z0-9\-]+(?:\.[a-zA-Z0-9\-]+)*(?:\.[a-zA-Z]{2,})|localhost(?:%3[aA]\d+)?)$/; 2948 - var isAtprotoWebDid = /* @__PURE__ */ __name((input) => { 2949 - return input.length >= 12 && ATPROTO_WEB_DID_RE.test(input); 2950 - }, "isAtprotoWebDid"); 2951 - var webDidToDocumentUrl = /* @__PURE__ */ __name((did) => { 2952 - const [host, ...paths] = did.slice(8).split(":").map(decodeURIComponent); 2953 - let pathname = "/" + paths.join("/"); 2954 - if (pathname === "/") { 2955 - pathname = `/.well-known/did.json`; 2956 - } else { 2957 - pathname += `/did.json`; 2958 - } 2959 - const url = new URL(`https://${host}${pathname}`); 2960 - if (url.hostname === "localhost") { 2961 - url.protocol = "http:"; 2962 - } 2963 - return url; 2964 - }, "webDidToDocumentUrl"); 2965 - 2966 - // ../node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/dist/did.js 2967 - var isAtprotoDid = /* @__PURE__ */ __name((input) => { 2968 - return isPlcDid(input) || isAtprotoWebDid(input); 2969 - }, "isAtprotoDid"); 2970 - var extractDidMethod = /* @__PURE__ */ __name((did) => { 2971 - const isep = did.indexOf(":", 4); 2972 - const method = did.slice(4, isep); 2973 - return method; 2974 - }, "extractDidMethod"); 2975 - 2976 - // ../node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/dist/methods/key.js 2977 - init_Buffer(); 2978 - init_process(); 2979 - 2980 - // ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/errors.js 2981 - init_Buffer(); 2982 - init_process(); 2983 - var DidDocumentResolutionError = class extends Error { 2984 - static { 2985 - __name(this, "DidDocumentResolutionError"); 2986 - } 2987 - name = "DidResolutionError"; 2988 - }; 2989 - var UnsupportedDidMethodError = class extends DidDocumentResolutionError { 2990 - static { 2991 - __name(this, "UnsupportedDidMethodError"); 2992 - } 2993 - did; 2994 - name = "UnsupportedDidMethodError"; 2995 - constructor(did) { 2996 - super(`unsupported did method; did=${did}`); 2997 - this.did = did; 2998 - } 2999 - }; 3000 - var DocumentNotFoundError = class extends DidDocumentResolutionError { 3001 - static { 3002 - __name(this, "DocumentNotFoundError"); 3003 - } 3004 - did; 3005 - name = "DocumentNotFoundError"; 3006 - constructor(did) { 3007 - super(`did document not found; did=${did}`); 3008 - this.did = did; 3009 - } 3010 - }; 3011 - var FailedDocumentResolutionError = class extends DidDocumentResolutionError { 3012 - static { 3013 - __name(this, "FailedDocumentResolutionError"); 3014 - } 3015 - did; 3016 - name = "FailedDocumentResolutionError"; 3017 - constructor(did, options) { 3018 - super(`failed to resolve did document; did=${did}`, options); 3019 - this.did = did; 3020 - } 3021 - }; 3022 - var HandleResolutionError = class extends Error { 3023 - static { 3024 - __name(this, "HandleResolutionError"); 3025 - } 3026 - name = "HandleResolutionError"; 3027 - }; 3028 - var DidNotFoundError = class extends HandleResolutionError { 3029 - static { 3030 - __name(this, "DidNotFoundError"); 3031 - } 3032 - handle; 3033 - name = "DidNotFoundError"; 3034 - constructor(handle) { 3035 - super(`handle returned no did; handle=${handle}`); 3036 - this.handle = handle; 3037 - } 3038 - }; 3039 - var FailedHandleResolutionError = class extends HandleResolutionError { 3040 - static { 3041 - __name(this, "FailedHandleResolutionError"); 3042 - } 3043 - handle; 3044 - name = "FailedHandleResolutionError"; 3045 - constructor(handle, options) { 3046 - super(`failed to resolve handle; handle=${handle}`, options); 3047 - this.handle = handle; 3048 - } 3049 - }; 3050 - var ActorResolutionError = class extends Error { 3051 - static { 3052 - __name(this, "ActorResolutionError"); 3053 - } 3054 - name = "ActorResolutionError"; 3055 - }; 3056 - 3057 - // ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/actor/local.js 3058 - var LocalActorResolver = class { 3059 - static { 3060 - __name(this, "LocalActorResolver"); 3061 - } 3062 - handleResolver; 3063 - didDocumentResolver; 3064 - constructor(options) { 3065 - this.handleResolver = options.handleResolver; 3066 - this.didDocumentResolver = options.didDocumentResolver; 3067 - } 3068 - async resolve(actor, options) { 3069 - const identifierIsDid = isDid(actor); 3070 - let did; 3071 - if (identifierIsDid) { 3072 - did = actor; 3073 - } else { 3074 - try { 3075 - did = await this.handleResolver.resolve(actor, options); 3076 - } catch (err2) { 3077 - throw new ActorResolutionError(`failed to resolve handle`, { cause: err2 }); 3078 - } 3079 - } 3080 - let doc; 3081 - try { 3082 - doc = await this.didDocumentResolver.resolve(did, options); 3083 - } catch (err2) { 3084 - throw new ActorResolutionError(`failed to resolve did document`, { cause: err2 }); 3085 - } 3086 - const pds = getPdsEndpoint(doc); 3087 - if (!pds) { 3088 - throw new ActorResolutionError(`missing pds endpoint`); 3089 - } 3090 - let handle = "handle.invalid"; 3091 - if (identifierIsDid) { 3092 - const writtenHandle = getAtprotoHandle(doc); 3093 - if (writtenHandle) { 3094 - try { 3095 - const resolved = await this.handleResolver.resolve(writtenHandle, options); 3096 - if (resolved === did) { 3097 - handle = writtenHandle; 3098 - } 3099 - } catch { 3100 - } 3101 - } 3102 - } else if (getAtprotoHandle(doc) === actor) { 3103 - handle = actor; 3104 - } 3105 - return { 3106 - did, 3107 - handle, 3108 - pds: new URL(pds).href 3109 - }; 3110 - } 3111 - }; 3112 - 3113 - // ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/did/composite.js 3114 - init_Buffer(); 3115 - init_process(); 3116 - var CompositeDidDocumentResolver = class { 3117 - static { 3118 - __name(this, "CompositeDidDocumentResolver"); 3119 - } 3120 - #methods; 3121 - constructor({ methods }) { 3122 - this.#methods = new Map(Object.entries(methods)); 3123 - } 3124 - async resolve(did, options) { 3125 - const method = extractDidMethod(did); 3126 - const resolver = this.#methods.get(method); 3127 - if (resolver === void 0) { 3128 - throw new UnsupportedDidMethodError(did); 3129 - } 3130 - return await resolver.resolve(did, options); 3131 - } 3132 - }; 3133 - 3134 - // ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/did/methods/plc.js 3135 - init_Buffer(); 3136 - init_process(); 3137 - 3138 - // ../node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/dist/index.js 3139 - init_Buffer(); 3140 - init_process(); 3141 - 3142 - // ../node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/dist/doh-json.js 3143 - init_Buffer(); 3144 - init_process(); 3145 - 3146 - // ../node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/dist/pipeline.js 3147 - init_Buffer(); 3148 - init_process(); 3149 - function pipe(...pipeline) { 3150 - return pipeline.reduce(pipeTwo); 3151 - } 3152 - __name(pipe, "pipe"); 3153 - var pipeTwo = /* @__PURE__ */ __name((first, second) => { 3154 - return (input) => first(input).then(second); 3155 - }, "pipeTwo"); 3156 - 3157 - // ../node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/dist/transformers.js 3158 - init_Buffer(); 3159 - init_process(); 3160 - 3161 - // ../node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/dist/errors.js 3162 - init_Buffer(); 3163 - init_process(); 3164 - var FetchResponseError2 = class extends Error { 3165 - static { 3166 - __name(this, "FetchResponseError"); 3167 - } 3168 - name = "FetchResponseError"; 3169 - }; 3170 - var FailedResponseError = class extends FetchResponseError2 { 3171 - static { 3172 - __name(this, "FailedResponseError"); 3173 - } 3174 - response; 3175 - name = "FailedResponseError"; 3176 - constructor(response2) { 3177 - super(`got http ${response2.status}`); 3178 - this.response = response2; 3179 - } 3180 - get status() { 3181 - return this.response.status; 3182 - } 3183 - }; 3184 - var ImproperContentTypeError = class extends FetchResponseError2 { 3185 - static { 3186 - __name(this, "ImproperContentTypeError"); 3187 - } 3188 - contentType; 3189 - name = "ImproperContentTypeError"; 3190 - constructor(contentType, reason) { 3191 - super(reason); 3192 - this.contentType = contentType; 3193 - } 3194 - }; 3195 - var ImproperContentLengthError = class extends FetchResponseError2 { 3196 - static { 3197 - __name(this, "ImproperContentLengthError"); 3198 - } 3199 - expectedSize; 3200 - actualSize; 3201 - name = "ImproperContentLengthError"; 3202 - constructor(expectedSize, actualSize, reason) { 3203 - super(reason); 3204 - this.expectedSize = expectedSize; 3205 - this.actualSize = actualSize; 3206 - } 3207 - }; 3208 - var ImproperResponseError = class extends FetchResponseError2 { 3209 - static { 3210 - __name(this, "ImproperResponseError"); 3211 - } 3212 - name = "ImproperResponseError"; 3213 - constructor(reason, options) { 3214 - super(reason, options); 3215 - } 3216 - }; 3217 - 3218 - // ../node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/dist/streams/size-limit.js 3219 - init_Buffer(); 3220 - init_process(); 3221 - var SizeLimitStream = class extends TransformStream { 3222 - static { 3223 - __name(this, "SizeLimitStream"); 3224 - } 3225 - constructor(maxSize) { 3226 - let bytesRead = 0; 3227 - super({ 3228 - transform(chunk, controller) { 3229 - bytesRead += chunk.length; 3230 - if (bytesRead > maxSize) { 3231 - controller.error(new ImproperContentLengthError(maxSize, bytesRead, `response content-length too large`)); 3232 - return; 3233 - } 3234 - controller.enqueue(chunk); 3235 - } 3236 - }); 3237 - } 3238 - }; 3239 - 3240 - // ../node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/dist/transformers.js 3241 - var isResponseOk = /* @__PURE__ */ __name(async (response2) => { 3242 - if (response2.ok) { 3243 - return response2; 3244 - } 3245 - throw new FailedResponseError(response2); 3246 - }, "isResponseOk"); 3247 - var readResponseAsText = /* @__PURE__ */ __name((maxSize) => async (response2) => { 3248 - const text = await readResponse(response2, maxSize); 3249 - return { response: response2, text }; 3250 - }, "readResponseAsText"); 3251 - var parseResponseAsJson = /* @__PURE__ */ __name((typeRegex, maxSize) => async (response2) => { 3252 - await assertContentType(response2, typeRegex); 3253 - const text = await readResponse(response2, maxSize); 3254 - try { 3255 - const json = JSON.parse(text); 3256 - return { response: response2, json }; 3257 - } catch (error) { 3258 - throw new ImproperResponseError(`unexpected json data`, { cause: error }); 3259 - } 3260 - }, "parseResponseAsJson"); 3261 - var validateJsonWith = /* @__PURE__ */ __name((schema, options) => async (parsed) => { 3262 - const json = schema.parse(parsed.json, options); 3263 - return { response: parsed.response, json }; 3264 - }, "validateJsonWith"); 3265 - var assertContentType = /* @__PURE__ */ __name(async (response2, typeRegex) => { 3266 - const type = response2.headers.get("content-type")?.split(";", 1)[0].trim(); 3267 - if (type === void 0) { 3268 - if (response2.body) { 3269 - await response2.body.cancel(); 3270 - } 3271 - throw new ImproperContentTypeError(null, `missing response content-type`); 3272 - } 3273 - if (!typeRegex.test(type)) { 3274 - if (response2.body) { 3275 - await response2.body.cancel(); 3276 - } 3277 - throw new ImproperContentTypeError(type, `unexpected response content-type`); 3278 - } 3279 - }, "assertContentType"); 3280 - var readResponse = /* @__PURE__ */ __name(async (response2, maxSize) => { 3281 - const rawSize = response2.headers.get("content-length"); 3282 - if (rawSize !== null) { 3283 - const size = Number(rawSize); 3284 - if (!Number.isSafeInteger(size) || size <= 0) { 3285 - response2.body?.cancel(); 3286 - throw new ImproperContentLengthError(maxSize, null, `invalid response content-length`); 3287 - } 3288 - if (size > maxSize) { 3289 - response2.body?.cancel(); 3290 - throw new ImproperContentLengthError(maxSize, size, `response content-length too large`); 3291 - } 3292 - } 3293 - const stream = response2.body.pipeThrough(new SizeLimitStream(maxSize)).pipeThrough(new TextDecoderStream()); 3294 - let text = ""; 3295 - for await (const chunk of createStreamIterator(stream)) { 3296 - text += chunk; 3297 - } 3298 - return text; 3299 - }, "readResponse"); 3300 - var createStreamIterator = Symbol.asyncIterator in ReadableStream.prototype ? (stream) => stream[Symbol.asyncIterator]() : (stream) => { 3301 - const reader = stream.getReader(); 3302 - return { 3303 - [Symbol.asyncIterator]() { 3304 - return this; 3305 - }, 3306 - next() { 3307 - return reader.read(); 3308 - }, 3309 - async return() { 3310 - await reader.cancel(); 3311 - return { done: true, value: void 0 }; 3312 - }, 3313 - async throw(error) { 3314 - await reader.cancel(error); 3315 - return { done: true, value: void 0 }; 3316 - } 3317 - }; 3318 - }; 3319 - 3320 - // ../node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/dist/doh-json.js 3321 - var uint32 = index_esm_exports.number().assert((input) => Number.isInteger(input) && input >= 0 && input <= 2 ** 32 - 1); 3322 - var question = index_esm_exports.object({ 3323 - name: index_esm_exports.string(), 3324 - type: index_esm_exports.literal(16) 3325 - // TXT 3326 - }); 3327 - var answer = index_esm_exports.object({ 3328 - name: index_esm_exports.string(), 3329 - type: index_esm_exports.literal(16), 3330 - // TXT 3331 - TTL: uint32, 3332 - data: index_esm_exports.string().chain((input) => { 3333 - return index_esm_exports.ok(input.replace(/^"|"$/g, "").replace(/\\"/g, '"')); 3334 - }) 3335 - }); 3336 - var authority = index_esm_exports.object({ 3337 - name: index_esm_exports.string(), 3338 - type: uint32, 3339 - TTL: uint32, 3340 - data: index_esm_exports.string() 3341 - }); 3342 - var dohJsonTxtResult = index_esm_exports.object({ 3343 - /** DNS response code */ 3344 - Status: uint32, 3345 - /** whether response is truncated */ 3346 - TC: index_esm_exports.boolean(), 3347 - /** whether recursive desired bit is set, always true for Google and Cloudflare DoH */ 3348 - RD: index_esm_exports.boolean(), 3349 - /** whether recursive available bit is set, always true for Google and Cloudflare DoH */ 3350 - RA: index_esm_exports.boolean(), 3351 - /** whether response data was validated with DNSSEC */ 3352 - AD: index_esm_exports.boolean(), 3353 - /** whether client asked to disable DNSSEC validation */ 3354 - CD: index_esm_exports.boolean(), 3355 - /** requested records */ 3356 - Question: index_esm_exports.tuple([question]), 3357 - /** answers */ 3358 - Answer: index_esm_exports.array(answer).optional(() => []), 3359 - /** authority */ 3360 - Authority: index_esm_exports.array(authority).optional(), 3361 - /** comment from the DNS server */ 3362 - Comment: index_esm_exports.union(index_esm_exports.string(), index_esm_exports.array(index_esm_exports.string())).optional() 3363 - }); 3364 - var fetchDohJsonTxt = pipe(isResponseOk, parseResponseAsJson(/^application\/(dns-)?json$/, 16 * 1024), validateJsonWith(dohJsonTxtResult, { mode: "passthrough" })); 3365 - 3366 - // ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/did/utils.js 3367 - init_Buffer(); 3368 - init_process(); 3369 - var fetchDocHandler = pipe(isResponseOk, parseResponseAsJson(/^application\/(did\+ld\+)?json$/, 20 * 1024), validateJsonWith(typedefs_exports.didDocument, { mode: "passthrough" })); 3370 - 3371 - // ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/did/methods/plc.js 3372 - var PlcDidDocumentResolver = class { 3373 - static { 3374 - __name(this, "PlcDidDocumentResolver"); 3375 - } 3376 - apiUrl; 3377 - #fetch; 3378 - constructor({ apiUrl = "https://plc.directory", fetch: fetchThis = fetch } = {}) { 3379 - this.apiUrl = apiUrl; 3380 - this.#fetch = fetchThis; 3381 - } 3382 - async resolve(did, options) { 3383 - if (!did.startsWith("did:plc:")) { 3384 - throw new UnsupportedDidMethodError(did); 3385 - } 3386 - let json; 3387 - try { 3388 - const url = new URL(`/${encodeURIComponent(did)}`, this.apiUrl); 3389 - const response2 = await (0, this.#fetch)(url, { 3390 - signal: options?.signal, 3391 - cache: options?.noCache ? "no-cache" : void 0, 3392 - redirect: "manual", 3393 - headers: { accept: "application/did+ld+json,application/json" } 3394 - }); 3395 - if (response2.status >= 300 && response2.status < 400) { 3396 - throw new TypeError(`unexpected redirect`); 3397 - } 3398 - const handled = await fetchDocHandler(response2); 3399 - json = handled.json; 3400 - } catch (cause) { 3401 - if (cause instanceof FailedResponseError && cause.status === 404) { 3402 - throw new DocumentNotFoundError(did); 3403 - } 3404 - throw new FailedDocumentResolutionError(did, { cause }); 3405 - } 3406 - return json; 3407 - } 3408 - }; 3409 - 3410 - // ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/did/methods/web.js 3411 - init_Buffer(); 3412 - init_process(); 3413 - var WebDidDocumentResolver = class { 3414 - static { 3415 - __name(this, "WebDidDocumentResolver"); 3416 - } 3417 - #fetch; 3418 - constructor({ fetch: fetchThis = fetch } = {}) { 3419 - this.#fetch = fetchThis; 3420 - } 3421 - async resolve(did, options) { 3422 - if (!did.startsWith("did:web:")) { 3423 - throw new UnsupportedDidMethodError(did); 3424 - } 3425 - let json; 3426 - try { 3427 - const url = webDidToDocumentUrl(did); 3428 - const response2 = await (0, this.#fetch)(url, { 3429 - signal: options?.signal, 3430 - cache: options?.noCache ? "no-cache" : void 0, 3431 - redirect: "manual", 3432 - headers: { accept: "application/did+ld+json,application/json" } 3433 - }); 3434 - if (response2.status >= 300 && response2.status < 400) { 3435 - throw new TypeError(`unexpected redirect`); 3436 - } 3437 - const handled = await fetchDocHandler(response2); 3438 - json = handled.json; 3439 - } catch (cause) { 3440 - if (cause instanceof FailedResponseError && cause.status === 404) { 3441 - throw new DocumentNotFoundError(did); 3442 - } 3443 - throw new FailedDocumentResolutionError(did, { cause }); 3444 - } 3445 - return json; 3446 - } 3447 - }; 3448 - 3449 - // ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/did/methods/xrpc.js 3450 - init_Buffer(); 3451 - init_process(); 3452 - var fetchXrpcHandler = pipe(isResponseOk, parseResponseAsJson(/^application\/json$/, 20 * 1024 + 16), validateJsonWith(index_esm_exports.object({ didDoc: typedefs_exports.didDocument }), { mode: "passthrough" })); 3453 - 3454 - // ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/handle/composite.js 3455 - init_Buffer(); 3456 - init_process(); 3457 - 3458 - // ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/handle/methods/doh-json.js 3459 - init_Buffer(); 3460 - init_process(); 3461 - 3462 - // ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/handle/methods/well-known.js 3463 - init_Buffer(); 3464 - init_process(); 3465 - var fetchWellKnownHandler = pipe(isResponseOk, readResponseAsText(2048 + 16)); 3466 - 3467 - // ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/handle/methods/xrpc.js 3468 - init_Buffer(); 3469 - init_process(); 3470 - var response = index_esm_exports.object({ 3471 - did: index_esm_exports.string().assert((input) => isAtprotoDid(input)) 3472 - }); 3473 - var fetchXrpcHandler2 = pipe(isResponseOk, parseResponseAsJson(/^application\/json$/, 4 * 1024), validateJsonWith(response, { mode: "passthrough" })); 3474 - var XrpcHandleResolver = class { 3475 - static { 3476 - __name(this, "XrpcHandleResolver"); 3477 - } 3478 - serviceUrl; 3479 - #fetch; 3480 - constructor({ serviceUrl, fetch: fetchThis = fetch }) { 3481 - this.serviceUrl = serviceUrl; 3482 - this.#fetch = fetchThis; 3483 - } 3484 - async resolve(handle, options) { 3485 - let json; 3486 - try { 3487 - const url = new URL(`/xrpc/com.atproto.identity.resolveHandle`, this.serviceUrl); 3488 - url.searchParams.set("handle", handle); 3489 - const response2 = await (0, this.#fetch)(url, { 3490 - signal: options?.signal, 3491 - cache: options?.noCache ? "no-cache" : void 0, 3492 - headers: { accept: "application/json" } 3493 - }); 3494 - const handled = await fetchXrpcHandler2(response2); 3495 - json = handled.json; 3496 - } catch (cause) { 3497 - if (cause instanceof FailedResponseError && cause.status === 400) { 3498 - throw new DidNotFoundError(handle); 3499 - } 3500 - throw new FailedHandleResolutionError(handle, { cause }); 3501 - } 3502 - return json.did; 3503 - } 3504 - }; 3505 - 3506 - // ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/types.js 3507 - init_Buffer(); 3508 - init_process(); 3509 - 3510 - // components/output/raw/atproto/oauth.js 3511 - var STORAGE_KEY = "dor-atproto:did"; 3512 - configureOAuth({ 3513 - metadata: { 3514 - client_id: import.meta.env?.VITE_ATPROTO_CLIENT_ID ?? "https://elements.diffuse.sh/bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/oauth-client-metadata.json", 3515 - redirect_uri: window.location.origin.replace("://localhost", "://127.0.0.1") + window.location.pathname 3516 - }, 3517 - identityResolver: new LocalActorResolver({ 3518 - handleResolver: new XrpcHandleResolver({ 3519 - serviceUrl: "https://public.api.bsky.app" 3520 - }), 3521 - didDocumentResolver: new CompositeDidDocumentResolver({ 3522 - methods: { 3523 - plc: new PlcDidDocumentResolver(), 3524 - web: new WebDidDocumentResolver() 3525 - } 3526 - }) 3527 - }) 3528 - }); 3529 - async function login(handle) { 3530 - const authUrl = await createAuthorizationUrl({ 3531 - target: { type: "account", identifier: ( 3532 - /** @type {any} */ 3533 - handle 3534 - ) }, 3535 - scope: "atproto transition:generic" 3536 - }); 3537 - window.location.assign(authUrl.toString()); 3538 - } 3539 - __name(login, "login"); 3540 - async function restoreOrFinalize() { 3541 - const params = new URLSearchParams(window.location.hash.slice(1)); 3542 - if (params.has("code")) { 3543 - const result = await finalizeAuthorization(params); 3544 - history.replaceState( 3545 - null, 3546 - "", 3547 - window.location.pathname + window.location.search 3548 - ); 3549 - localStorage.setItem(STORAGE_KEY, result.session.info.sub); 3550 - return result.session; 3551 - } 3552 - const did = localStorage.getItem(STORAGE_KEY); 3553 - if (did) { 3554 - try { 3555 - return await getSession( 3556 - /** @type {`did:${string}:${string}`} */ 3557 - did, 3558 - { allowStale: true } 3559 - ); 3560 - } catch { 3561 - localStorage.removeItem(STORAGE_KEY); 3562 - return null; 3563 - } 3564 - } 3565 - return null; 3566 - } 3567 - __name(restoreOrFinalize, "restoreOrFinalize"); 3568 - async function logout(agent) { 3569 - const did = localStorage.getItem(STORAGE_KEY); 3570 - try { 3571 - await agent.signOut(); 3572 - } catch { 3573 - if (did) { 3574 - deleteStoredSession( 3575 - /** @type {`did:${string}:${string}`} */ 3576 - did 3577 - ); 3578 - } 3579 - } 3580 - localStorage.removeItem(STORAGE_KEY); 3581 - } 3582 - __name(logout, "logout"); 3583 - 3584 - export { 3585 - OAuthUserAgent, 3586 - login, 3587 - restoreOrFinalize, 3588 - logout 3589 - }; 3590 - 3591 - //# sourceMappingURL=./chunk-BP7OSAES.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-BP7OSAES.js.map
··· 1 - {"version":3,"sources":["/node_modules/.deno/@badrap+valita@0.4.6/node_modules/@badrap/valita/src/index.ts","/components/output/raw/atproto/oauth.js","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/index.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/environment.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/store/db.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/utils/runtime.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/errors.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/agents/exchange.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/index.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/client-assertion/index.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/client-assertion/create-client-assertion.ts","/node_modules/.deno/nanoid@5.1.6/node_modules/nanoid/index.js","/node_modules/.deno/nanoid@5.1.6/node_modules/nanoid/url-alphabet/index.js","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/internal/key-cache.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/internal/jwk.ts","/node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/lib/index.ts","/node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/lib/bases/base16-web.ts","/node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/lib/bases/base16-web-native.ts","/node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/lib/bases/base16-web-polyfill.ts","/node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/lib/utils.ts","/node_modules/.deno/@atcute+uint8array@1.1.1/node_modules/@atcute/uint8array/lib/index.ts","/node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/lib/bases/base64-web.ts","/node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/lib/bases/base64-web-native.ts","/node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/lib/bases/base64-web-polyfill.ts","/node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/lib/bases/base32.ts","/node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/lib/bases/base32-encode.ts","/node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/lib/bases/base58.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/internal/crypto.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/jwt/index.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/client-assertion/generate-key.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/client-assertion/keys.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/dpop/index.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/dpop/fetch.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/hash/sha256.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/dpop/proof.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/dpop/generate-key.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/dpop/verify.ts","/node_modules/.deno/@badrap+valita@0.4.6/node_modules/@badrap/valita/src/index.esm.mts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/jwk/compute-jkt.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/hash/index.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/hash/pkce.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/jwk/index.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/jwk/keys.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/resolvers.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/utils/response.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/utils/strings.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/agents/server-agent.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/dpop.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/utils/misc.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/agents/sessions.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/utils/dpop-key.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/agents/user-agent.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/index.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/actor/local.ts","/node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/lib/index.ts","/node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/lib/typedefs.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/index.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/at-identifier.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/did.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/handle.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/utils/ascii.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/at-uri.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/utils.ts","/node_modules/.deno/esm-env@1.2.2/node_modules/esm-env/index.js","/node_modules/.deno/esm-env@1.2.2/node_modules/esm-env/browser-fallback.js","/node_modules/.deno/esm-env@1.2.2/node_modules/esm-env/dev-fallback.js","/node_modules/.deno/esm-env@1.2.2/node_modules/esm-env/true.js","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/nsid.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/record-key.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/cid.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/datetime.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/language.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/tid.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/uri.ts","/node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/dist/types.js","/node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/lib/utils.ts","/node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/lib/did.ts","/node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/lib/methods/plc.ts","/node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/lib/methods/web.ts","/node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/lib/methods/key.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/errors.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/did/composite.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/did/methods/plc.ts","/node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/lib/index.ts","/node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/lib/doh-json.ts","/node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/lib/pipeline.ts","/node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/lib/transformers.ts","/node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/lib/errors.ts","/node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/lib/streams/size-limit.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/did/utils.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/did/methods/web.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/did/methods/xrpc.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/handle/composite.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/handle/methods/doh-json.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/handle/methods/well-known.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/handle/methods/xrpc.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/types.js"],"sourcesContent":["/**\n * @module\n * A typesafe validation & parsing library for TypeScript.\n *\n * @example\n * ```ts\n * import * as v from \"@badrap/valita\";\n *\n * const vehicle = v.union(\n * v.object({ type: v.literal(\"plane\"), airline: v.string() }),\n * v.object({ type: v.literal(\"train\") }),\n * v.object({ type: v.literal(\"automobile\"), make: v.string() })\n * );\n * vehicle.parse({ type: \"bike\" });\n * // ValitaError: invalid_literal at .type (expected \"plane\", \"train\" or \"automobile\")\n * ```\n */\n\n// This is magic that turns object intersections to nicer-looking types.\ntype PrettyIntersection<V> = Extract<{ [K in keyof V]: V[K] }, unknown>;\n\ntype Literal = string | number | bigint | boolean;\ntype Key = string | number;\ntype InputType =\n | \"object\"\n | \"array\"\n | \"null\"\n | \"undefined\"\n | \"string\"\n | \"number\"\n | \"bigint\"\n | \"boolean\";\n\ntype CustomError =\n | undefined\n | string\n | {\n message?: string;\n path?: Key[];\n };\n\ntype IssueLeaf = Readonly<\n | { ok: false; code: \"custom_error\"; error: CustomError }\n | { ok: false; code: \"invalid_type\"; expected: InputType[] }\n | { ok: false; code: \"missing_value\" }\n | { ok: false; code: \"invalid_literal\"; expected: Literal[] }\n | { ok: false; code: \"unrecognized_keys\"; keys: Key[] }\n | { ok: false; code: \"invalid_union\"; tree: IssueTree }\n | {\n ok: false;\n code: \"invalid_length\";\n minLength: number;\n maxLength: number | undefined;\n }\n>;\n\nfunction expectedType(expected: InputType[]): IssueLeaf {\n return {\n ok: false,\n code: \"invalid_type\",\n expected,\n };\n}\n\nconst ISSUE_EXPECTED_NOTHING = expectedType([]);\nconst ISSUE_EXPECTED_STRING = expectedType([\"string\"]);\nconst ISSUE_EXPECTED_NUMBER = expectedType([\"number\"]);\nconst ISSUE_EXPECTED_BIGINT = expectedType([\"bigint\"]);\nconst ISSUE_EXPECTED_BOOLEAN = expectedType([\"boolean\"]);\nconst ISSUE_EXPECTED_UNDEFINED = expectedType([\"undefined\"]);\nconst ISSUE_EXPECTED_NULL = expectedType([\"null\"]);\nconst ISSUE_EXPECTED_OBJECT = expectedType([\"object\"]);\nconst ISSUE_EXPECTED_ARRAY = expectedType([\"array\"]);\nconst ISSUE_MISSING_VALUE: IssueLeaf = {\n ok: false,\n code: \"missing_value\",\n};\n\ntype IssueTree =\n | Readonly<{ ok: false; code: \"prepend\"; key: Key; tree: IssueTree }>\n | Readonly<{ ok: false; code: \"join\"; left: IssueTree; right: IssueTree }>\n | IssueLeaf;\n\ntype Issue = Readonly<\n | {\n code: \"custom_error\";\n path: Key[];\n message?: string | undefined;\n /** @deprecated Instead of `.error` use `.message`. */\n error: CustomError;\n }\n | { code: \"invalid_type\"; path: Key[]; expected: InputType[] }\n | { code: \"missing_value\"; path: Key[] }\n | { code: \"invalid_literal\"; path: Key[]; expected: Literal[] }\n | { code: \"unrecognized_keys\"; path: Key[]; keys: Key[] }\n | {\n code: \"invalid_union\";\n path: Key[];\n issues: Issue[];\n /** @deprecated Instead of `.tree` use `.issues`. */\n tree: IssueTree;\n }\n | {\n code: \"invalid_length\";\n path: Key[];\n minLength: number;\n maxLength: number | undefined;\n }\n>;\n\nfunction joinIssues(left: IssueTree | undefined, right: IssueTree): IssueTree {\n return left ? { ok: false, code: \"join\", left, right } : right;\n}\n\nfunction prependPath(key: Key, tree: IssueTree): IssueTree {\n return { ok: false, code: \"prepend\", key, tree };\n}\n\nfunction cloneIssueWithPath(tree: IssueLeaf, path: Key[]): Issue {\n const code = tree.code;\n switch (code) {\n case \"invalid_type\":\n return { code, path, expected: tree.expected };\n case \"invalid_literal\":\n return { code, path, expected: tree.expected };\n case \"missing_value\":\n return { code, path };\n case \"invalid_length\":\n return {\n code,\n path,\n minLength: tree.minLength,\n maxLength: tree.maxLength,\n };\n case \"unrecognized_keys\":\n return { code, path, keys: tree.keys };\n case \"invalid_union\":\n return { code, path, tree: tree.tree, issues: collectIssues(tree.tree) };\n case \"custom_error\":\n if (typeof tree.error === \"object\" && tree.error.path !== undefined) {\n path.push(...tree.error.path);\n }\n return {\n code,\n path,\n message:\n typeof tree.error === \"string\" ? tree.error : tree.error?.message,\n error: tree.error,\n };\n }\n}\n\nfunction collectIssues(\n tree: IssueTree,\n path: Key[] = [],\n issues: Issue[] = [],\n): Issue[] {\n for (;;) {\n if (tree.code === \"join\") {\n collectIssues(tree.left, path.slice(), issues);\n tree = tree.right;\n } else if (tree.code === \"prepend\") {\n path.push(tree.key);\n tree = tree.tree;\n } else {\n issues.push(cloneIssueWithPath(tree, path));\n return issues;\n }\n }\n}\n\nfunction separatedList(list: string[], sep: \"or\" | \"and\"): string {\n if (list.length === 0) {\n return \"nothing\";\n } else if (list.length === 1) {\n return list[0];\n } else {\n return `${list.slice(0, -1).join(\", \")} ${sep} ${list[list.length - 1]}`;\n }\n}\n\nfunction formatLiteral(value: Literal): string {\n return typeof value === \"bigint\" ? `${value}n` : JSON.stringify(value);\n}\n\nfunction countIssues(tree: IssueTree): number {\n let count = 0;\n for (;;) {\n if (tree.code === \"join\") {\n count += countIssues(tree.left);\n tree = tree.right;\n } else if (tree.code === \"prepend\") {\n tree = tree.tree;\n } else {\n return count + 1;\n }\n }\n}\n\nfunction formatIssueTree(tree: IssueTree): string {\n let path = \"\";\n let count = 0;\n for (;;) {\n if (tree.code === \"join\") {\n count += countIssues(tree.right);\n tree = tree.left;\n } else if (tree.code === \"prepend\") {\n path += `.${tree.key}`;\n tree = tree.tree;\n } else {\n break;\n }\n }\n\n let message = \"validation failed\";\n if (tree.code === \"invalid_type\") {\n message = `expected ${separatedList(tree.expected, \"or\")}`;\n } else if (tree.code === \"invalid_literal\") {\n message = `expected ${separatedList(\n tree.expected.map(formatLiteral),\n \"or\",\n )}`;\n } else if (tree.code === \"missing_value\") {\n message = `missing value`;\n } else if (tree.code === \"unrecognized_keys\") {\n const keys = tree.keys;\n message = `unrecognized ${\n keys.length === 1 ? \"key\" : \"keys\"\n } ${separatedList(keys.map(formatLiteral), \"and\")}`;\n } else if (tree.code === \"invalid_length\") {\n const min = tree.minLength;\n const max = tree.maxLength;\n message = `expected an array with `;\n if (min > 0) {\n if (max === min) {\n message += `${min}`;\n } else if (max !== undefined) {\n message += `between ${min} and ${max}`;\n } else {\n message += `at least ${min}`;\n }\n } else {\n message += `at most ${max ?? \"∞\"}`;\n }\n message += ` item(s)`;\n } else if (tree.code === \"custom_error\") {\n const error = tree.error;\n if (typeof error === \"string\") {\n message = error;\n } else if (error !== undefined) {\n if (error.message !== undefined) {\n message = error.message;\n }\n if (error.path !== undefined) {\n path += \".\" + error.path.join(\".\");\n }\n }\n }\n\n let msg = `${tree.code} at .${path.slice(1)} (${message})`;\n if (count === 1) {\n msg += ` (+ 1 other issue)`;\n } else if (count > 1) {\n msg += ` (+ ${count} other issues)`;\n }\n return msg;\n}\n\nfunction lazyProperty<T>(\n obj: object,\n prop: string | number | symbol,\n value: T,\n enumerable: boolean,\n): T {\n Object.defineProperty(obj, prop, {\n value,\n enumerable,\n writable: false,\n });\n return value;\n}\n\n/**\n * An error type representing one or more validation/parsing errors.\n *\n * The `.message` property gives a short overview of the encountered issues,\n * while the `.issue` property can be used to get a more detailed list.\n *\n * @example\n * ```ts\n * const t = v.object({ a: v.null(), b: v.null() });\n *\n * try {\n * t.parse({ a: 1 });\n * } catch (err) {\n * err.message;\n * // \"invalid_type at .a (expected null) (+ 1 other issue)\"\n *\n * err.issues;\n * // [\n * // { code: 'invalid_type', path: [ 'a' ], expected: [ 'null' ] },\n * // { code: 'missing_value', path: [ 'b' ] }\n * // ]\n * }\n * ```\n */\nexport class ValitaError extends Error {\n /** @internal */\n private readonly _issueTree: IssueTree;\n\n constructor(issueTree: IssueTree) {\n super(formatIssueTree(issueTree));\n\n Object.setPrototypeOf(this, new.target.prototype);\n\n this.name = new.target.name;\n this._issueTree = issueTree;\n }\n\n get issues(): readonly Issue[] {\n return lazyProperty(this, \"issues\", collectIssues(this._issueTree), true);\n }\n}\n\n/**\n * A successful validation/parsing result.\n *\n * Used in situations where both the parsing success and failure\n * cases are returned as values.\n */\nexport type Ok<T> = {\n readonly ok: true;\n\n /**\n * The successfully parsed value.\n */\n readonly value: T;\n};\n\n/**\n * A validation/parsing failure.\n *\n * Used in situations where both the parsing success and failure\n * cases are returned as values.\n */\nexport type Err = {\n readonly ok: false;\n\n /**\n * A condensed overview of the parsing issues.\n */\n readonly message: string;\n\n /**\n * A detailed list of the parsing issues.\n */\n readonly issues: readonly Issue[];\n\n /**\n * Throw a new ValitaError representing the parsing issues.\n */\n throw(): never;\n};\n\n/**\n * A validation/parsing success or failure.\n *\n * Used by parsing-related methods where and both success and failure\n * cases are returned as values (instead of raising an exception on failure).\n * The most notable example is the `Type.try(...)` method.\n *\n * The `.ok` property can to assert whether the value represents a success or\n * failure and access further information in a typesafe way.\n *\n * @example\n * ```ts\n * const t = v.string();\n *\n * // Make parsing fail or succeed about equally.\n * const result = t.try(Math.random() < 0.5 ? \"hello\" : null);\n *\n * if (result.ok) {\n * // TypeScript allows accessing .value within this code block.\n * console.log(`Success: ${result.value}`);\n * } else {\n * // TypeScript allows accessing .message within this code block.\n * console.log(`Failed: ${result.message}`);\n * }\n * ```\n */\nexport type ValitaResult<V> = Ok<V> | Err;\n\nclass ErrImpl implements Err {\n readonly ok = false;\n\n /** @internal */\n private readonly _issueTree: IssueTree;\n\n constructor(issueTree: IssueTree) {\n this._issueTree = issueTree;\n }\n\n get issues(): readonly Issue[] {\n return lazyProperty(this, \"issues\", collectIssues(this._issueTree), true);\n }\n\n get message(): string {\n return lazyProperty(\n this,\n \"message\",\n formatIssueTree(this._issueTree),\n true,\n );\n }\n\n throw(): never {\n throw new ValitaError(this._issueTree);\n }\n}\n\n/**\n * Create a value for returning a successful parsing result from chain().\n *\n * @example\n * ```ts\n * const t = v.string().chain((s) => v.ok(s + \", world!\"));\n *\n * t.parse(\"Hello\");\n * // \"Hello, world!\"\n * ```\n */\nexport function ok<T extends Literal>(value: T): Ok<T>;\nexport function ok<T>(value: T): Ok<T>;\nexport function ok<T>(value: T): Ok<T> {\n return { ok: true, value };\n}\n\n/**\n * Create a value for returning a parsing error from chain().\n *\n * An optional error message can be provided.\n *\n * @example\n * ```ts\n * const t = v.string().chain(() => v.err(\"bad value\"));\n *\n * t.parse(\"hello\");\n * // ValitaError: custom_error at . (bad value)\n * ```\n */\nexport function err(error?: CustomError): Err {\n return new ErrImpl({ ok: false, code: \"custom_error\", error });\n}\n\nfunction isObject(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nconst FLAG_FORBID_EXTRA_KEYS = 1 << 0;\nconst FLAG_STRIP_EXTRA_KEYS = 1 << 1;\nconst FLAG_MISSING_VALUE = 1 << 2;\n\n/**\n * Return the inferred output type of a validator.\n *\n * @example\n * ```ts\n * const t = v.union(v.literal(1), v.string());\n *\n * type T = v.Infer<typeof t>;\n * // type T = 1 | string;\n * ```\n */\nexport type Infer<T extends AbstractType> =\n T extends AbstractType<infer I> ? I : never;\n\nexport type ParseOptions = {\n mode?: \"passthrough\" | \"strict\" | \"strip\";\n};\n\nconst TAG_UNKNOWN = 0;\nconst TAG_NEVER = 1;\nconst TAG_STRING = 2;\nconst TAG_NUMBER = 3;\nconst TAG_BIGINT = 4;\nconst TAG_BOOLEAN = 5;\nconst TAG_NULL = 6;\nconst TAG_UNDEFINED = 7;\nconst TAG_LITERAL = 8;\nconst TAG_OPTIONAL = 9;\nconst TAG_OBJECT = 10;\nconst TAG_ARRAY = 11;\nconst TAG_UNION = 12;\nconst TAG_SIMPLE_UNION = 13;\nconst TAG_TRANSFORM = 14;\nconst TAG_OTHER = 15;\n\ntype MatcherResult = undefined | Ok<unknown> | IssueTree;\n\ntype Matcher<Input = unknown> = (value: Input, flags: number) => MatcherResult;\n\ntype TaggedMatcher = { tag: number; match: Matcher };\n\nconst taggedMatcher = (tag: number, match: Matcher): TaggedMatcher => {\n return { tag, match };\n};\n\nfunction callMatcher(\n matcher: TaggedMatcher,\n value: unknown,\n flags: number,\n): MatcherResult {\n switch (matcher.tag) {\n case TAG_UNKNOWN:\n return undefined;\n case TAG_NEVER:\n return ISSUE_EXPECTED_NOTHING;\n case TAG_STRING:\n return typeof value === \"string\" ? undefined : ISSUE_EXPECTED_STRING;\n case TAG_NUMBER:\n return typeof value === \"number\" ? undefined : ISSUE_EXPECTED_NUMBER;\n case TAG_BIGINT:\n return typeof value === \"bigint\" ? undefined : ISSUE_EXPECTED_BIGINT;\n case TAG_BOOLEAN:\n return typeof value === \"boolean\" ? undefined : ISSUE_EXPECTED_BOOLEAN;\n case TAG_NULL:\n return value === null ? undefined : ISSUE_EXPECTED_NULL;\n case TAG_UNDEFINED:\n return value === undefined ? undefined : ISSUE_EXPECTED_UNDEFINED;\n case TAG_LITERAL:\n return matcher.match(value, flags);\n case TAG_OPTIONAL:\n return matcher.match(value, flags);\n case TAG_OBJECT:\n return matcher.match(value, flags);\n case TAG_ARRAY:\n return matcher.match(value, flags);\n case TAG_UNION:\n return matcher.match(value, flags);\n case TAG_SIMPLE_UNION:\n return matcher.match(value, flags);\n case TAG_TRANSFORM:\n return matcher.match(value, flags);\n default:\n return matcher.match(value, flags);\n }\n}\n\nconst MATCHER_SYMBOL: unique symbol = Symbol.for(\"@valita/internal\");\n\nabstract class AbstractType<Output = unknown> {\n abstract readonly name: string;\n\n /** @internal */\n abstract _toTerminals(func: (t: TerminalType) => void): void;\n\n /** @internal */\n abstract readonly [MATCHER_SYMBOL]: TaggedMatcher;\n\n /**\n * Return new optional type that can not be used as a standalone\n * validator. Rather, it's meant to be used as a with object validators,\n * to mark one of the object's properties as _optional_. Optional property\n * types accept both the original type, `undefined` and missing properties.\n *\n * The optional `defaultFn` function, if provided, will be called each\n * time a value that is missing or `undefined` is parsed.\n *\n * @param [defaultFn] - An optional function returning the default value.\n */\n // Use `<X extends T>() => X` instead of `() => T` to make literal\n // inference work when an optionals with defaultFn is used as a\n // ObjectType property.\n // The same could be accomplished by replacing the `| T` in the\n // output type with `NoInfer<T>`, but it's supported only from\n // TypeScript 5.4 onwards.\n abstract optional<T extends Literal>(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n defaultFn: <X extends T>() => X,\n ): Type<Exclude<Output, undefined> | T>;\n // Support parsers like `v.array(t).optional(() => [])`\n // so that the output type is `Infer<typeof t>[]` instead of\n // `Infer<typeof t>[] | never[]`.\n abstract optional(\n defaultFn: () => Exclude<Output, undefined>,\n ): Type<Exclude<Output, undefined>>;\n abstract optional<T>(\n defaultFn: () => T,\n ): Type<Exclude<Output, undefined> | T>;\n abstract optional(): Optional<Output>;\n\n /**\n * @deprecated Instead of `.default(x)` use `.optional(() => x)`.\n */\n default<T extends Literal>(\n defaultValue: T,\n ): Type<Exclude<Output, undefined> | T>;\n default<T>(defaultValue: T): Type<Exclude<Output, undefined> | T>;\n default<T>(defaultValue: T): Type<Exclude<Output, undefined> | T> {\n const defaultResult = ok(defaultValue);\n return new TransformType(this.optional(), (v) => {\n return v === undefined ? defaultResult : undefined;\n });\n }\n\n /**\n * Derive a new validator that uses the provided predicate function to\n * perform custom validation for the source validator's output values.\n *\n * The predicate function should return `true` when the source\n * type's output value is valid, `false` otherwise. The checked value\n * itself won't get modified or replaced, and is returned as-is on\n * validation success.\n *\n * @example A validator that accepts only numeric strings.\n * ```ts\n * const numericString = v.string().assert((s) => /^\\d+$/.test(s))\n * numericString.parse(\"1\");\n * // \"1\"\n * numericString.parse(\"foo\");\n * // ValitaError: custom_error at . (validation failed)\n * ```\n *\n * You can also _refine_ the output type by passing in a\n * [type predicate](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates).\n * Note that the type predicate must have a compatible input type.\n *\n * @example A validator with its output type refined to `Date`.\n * ```ts\n * const dateType = v.unknown().assert((v): v is Date => v instanceof Date);\n * ```\n *\n * You can also pass in a custom failure messages.\n *\n * @example A validator that rejects non-integers with a custom error.\n * ```ts\n * const integer = v.number().assert((n) => Number.isInteger(n), \"not an integer\");\n * integer.parse(1);\n * // 1\n * integer.parse(1.5);\n * // ValitaError: custom_error at . (not an integer)\n * ```\n *\n * @param func - The assertion predicate function.\n * @param [error] - A custom error for situations when the assertion\n * predicate returns `false`.\n */\n assert<T extends Output>(\n func:\n | ((v: Output, options: ParseOptions) => v is T)\n | ((v: Output, options: ParseOptions) => boolean),\n error?: CustomError,\n ): Type<T> {\n const err: IssueLeaf = { ok: false, code: \"custom_error\", error };\n return new TransformType(this, (v, flags) =>\n func(v as Output, flagsToOptions(flags)) ? undefined : err,\n );\n }\n\n /**\n * Derive a new validator that uses the provided mapping function to\n * perform custom mapping for the source validator's output values.\n *\n * The mapped value's type doesn't have to stay same, but mapping must\n * always succeed (i.e. not throw) for all values that the source validator\n * outputs.\n *\n * @example\n * ```ts\n * const stringLength = v.string().assert((s) => s.length);\n * stringLength.parse(\"Hello, World!\");\n * // 13\n * stringLength.parse(1);\n * // ValitaError: invalid_type at . (expected string)\n * ```\n *\n * @param func - The mapping function.\n */\n map<T extends Literal>(\n func: (v: Output, options: ParseOptions) => T,\n ): Type<T>;\n map<T>(func: (v: Output, options: ParseOptions) => T): Type<T>;\n map<T>(func: (v: Output, options: ParseOptions) => T): Type<T> {\n return new TransformType(this, (v, flags) => ({\n ok: true,\n value: func(v as Output, flagsToOptions(flags)),\n }));\n }\n\n /**\n * Derive a new validator that uses the provided mapping function to\n * perform custom parsing for the source validator's output values.\n *\n * Unlike `.map`, `.chain` can also be used for cases where the\n * transformation might fail. If the transformation fails, return an error\n * with an optional message with `err(...)`. If not, then return the\n * transformed value with `ok(...)`.\n *\n * @example A parser for date strings, returns `Date` objects on success.\n * ```ts\n * const DateType = v.string().chain((s) => {\n * const date = new Date(s);\n * if (isNaN(+date)) {\n * return v.err(\"invalid date\");\n * }\n * return v.ok(date);\n * });\n *\n * Date.parse(\"2022-01-01\");\n * // 2022-01-01T00:00:00.000Z\n * Date.parse(\"foo\");\n * // ValitaError: custom_error at . (invalid date)\n * ```\n *\n * @param func - The parsing function.\n */\n chain<T extends Literal>(\n func: (v: Output, options: ParseOptions) => ValitaResult<T>,\n ): Type<T>;\n chain<T>(\n func: (v: Output, options: ParseOptions) => ValitaResult<T>,\n ): Type<T>;\n chain<T>(type: Type<T>): Type<T>;\n chain(\n input: Type | ((v: Output, options: ParseOptions) => ValitaResult<unknown>),\n ): Type {\n if (typeof input === \"function\") {\n return new TransformType(this, (v, flags) => {\n const r = input(v as Output, flagsToOptions(flags));\n return r.ok\n ? r\n : (r as unknown as { _issueTree: IssueTree })._issueTree;\n });\n }\n return new TransformType(this, (v, flags) =>\n callMatcher(input[MATCHER_SYMBOL], v, flags),\n );\n }\n}\n\ntype TypeName =\n | \"unknown\"\n | \"never\"\n | \"string\"\n | \"number\"\n | \"bigint\"\n | \"boolean\"\n | \"null\"\n | \"undefined\"\n | \"literal\"\n | \"object\"\n | \"array\"\n | \"union\"\n | \"lazy\"\n | \"transform\";\n\n/**\n * A base class for all concrete validators/parsers.\n */\nabstract class Type<Output = unknown> extends AbstractType<Output> {\n abstract name: TypeName;\n\n optional<T extends Literal>(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n defaultFn: <X extends T>() => X,\n ): Type<Exclude<Output, undefined> | T>;\n optional(\n defaultFn: () => Exclude<Output, undefined>,\n ): Type<Exclude<Output, undefined>>;\n optional<T>(defaultFn: () => T): Type<Exclude<Output, undefined> | T>;\n optional(): Optional<Output>;\n optional(defaultFn?: () => unknown): unknown {\n // If this type is already Optional there's no need to wrap it inside\n // a new Optional instance.\n const optional = new Optional(this);\n if (!defaultFn) {\n return optional;\n }\n return new TransformType(optional, (v) => {\n return v === undefined ? { ok: true, value: defaultFn() } : undefined;\n });\n }\n\n /**\n * Return new validator that accepts both the original type and `null`.\n *\n * The optional `defaultFn` function, if provided, will be called each\n * time a `null` is parsed.\n *\n * @param [defaultFn] - An optional function returning the default value.\n */\n nullable<T extends Literal>(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n defaultFn: <X extends T>() => X,\n ): Type<Exclude<Output, null> | T>;\n nullable(defaultFn: () => Exclude<Output, null>): Type<Exclude<Output, null>>;\n nullable<T>(defaultFn: () => T): Type<Exclude<Output, null> | T>;\n nullable(): UnionType<[Type<null>, this]>;\n nullable(defaultFn?: () => unknown): unknown {\n const nullable = new SimpleUnion([null_(), this]);\n if (!defaultFn) {\n return nullable;\n }\n return new TransformType(nullable, (v) => {\n return v === null ? { ok: true, value: defaultFn() } : undefined;\n });\n }\n\n _toTerminals(func: (t: TerminalType) => void): void {\n func(this as TerminalType);\n }\n\n /**\n * Parse a value without throwing.\n */\n try(v: unknown, options?: ParseOptions): ValitaResult<Infer<this>> {\n const r = callMatcher(\n this[MATCHER_SYMBOL],\n v,\n options === undefined\n ? FLAG_FORBID_EXTRA_KEYS\n : options.mode === \"strip\"\n ? FLAG_STRIP_EXTRA_KEYS\n : options.mode === \"passthrough\"\n ? 0\n : FLAG_FORBID_EXTRA_KEYS,\n );\n return r === undefined || r.ok\n ? { ok: true, value: (r === undefined ? v : r.value) as Infer<this> }\n : new ErrImpl(r);\n }\n\n /**\n * Parse a value. Throw a ValitaError on failure.\n */\n parse(v: unknown, options?: ParseOptions): Infer<this> {\n const r = callMatcher(\n this[MATCHER_SYMBOL],\n v,\n options === undefined\n ? FLAG_FORBID_EXTRA_KEYS\n : options.mode === \"strip\"\n ? FLAG_STRIP_EXTRA_KEYS\n : options.mode === \"passthrough\"\n ? 0\n : FLAG_FORBID_EXTRA_KEYS,\n );\n if (r === undefined || r.ok) {\n return (r === undefined ? v : r.value) as Infer<this>;\n }\n throw new ValitaError(r);\n }\n}\n\nclass SimpleUnion<Options extends Type[]> extends Type<Infer<Options[number]>> {\n readonly name = \"union\";\n readonly options: Readonly<Options>;\n\n constructor(options: Readonly<Options>) {\n super();\n this.options = options;\n }\n\n get [MATCHER_SYMBOL](): TaggedMatcher {\n const options = this.options.map((o) => o[MATCHER_SYMBOL]);\n return lazyProperty(\n this,\n MATCHER_SYMBOL,\n taggedMatcher(TAG_SIMPLE_UNION, (v, flags) => {\n let issue: IssueTree = ISSUE_EXPECTED_NOTHING;\n for (const option of options) {\n const result = callMatcher(option, v, flags);\n if (result === undefined || result.ok) {\n return result;\n }\n issue = result;\n }\n return issue;\n }),\n false,\n );\n }\n\n _toTerminals(func: (t: TerminalType) => void): void {\n for (const option of this.options) {\n option._toTerminals(func);\n }\n }\n}\n\n/**\n * A validator/parser marked as \"optional\", signifying that their value can\n * be missing from the parsed object.\n *\n * As such optionals can only be used as property validators within\n * object validators.\n */\nclass Optional<Output = unknown> extends AbstractType<Output | undefined> {\n readonly name = \"optional\";\n readonly type: Type<Output>;\n\n constructor(type: Type<Output>) {\n super();\n this.type = type;\n }\n\n optional<T extends Literal>(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n defaultFn: <X extends T>() => X,\n ): Type<Exclude<Output, undefined> | T>;\n optional(\n defaultFn: () => Exclude<Output, undefined>,\n ): Type<Exclude<Output, undefined>>;\n optional<T>(defaultFn: () => T): Type<Exclude<Output, undefined> | T>;\n optional(): Optional<Output>;\n optional(defaultFn?: () => unknown): unknown {\n if (!defaultFn) {\n return this;\n }\n return new TransformType(this, (v) => {\n return v === undefined ? { ok: true, value: defaultFn() } : undefined;\n });\n }\n\n get [MATCHER_SYMBOL](): TaggedMatcher {\n const matcher = this.type[MATCHER_SYMBOL];\n return lazyProperty(\n this,\n MATCHER_SYMBOL,\n taggedMatcher(TAG_OPTIONAL, (v, flags) =>\n v === undefined || flags & FLAG_MISSING_VALUE\n ? undefined\n : callMatcher(matcher, v, flags),\n ),\n false,\n );\n }\n\n _toTerminals(func: (t: TerminalType) => void): void {\n func(this);\n func(undefined_() as TerminalType);\n this.type._toTerminals(func);\n }\n}\n\ntype ObjectShape = Record<string, AbstractType>;\n\ntype ObjectOutput<\n T extends ObjectShape,\n R extends AbstractType | undefined,\n> = PrettyIntersection<\n {\n [K in keyof T]?: T[K] extends Optional ? Infer<T[K]> : unknown;\n } & {\n [K in keyof T as T[K] extends Optional ? never : K]: Infer<T[K]>;\n } & (R extends Type<infer I>\n ? Record<string, I>\n : R extends Optional<infer J>\n ? Partial<Record<string, J>>\n : unknown)\n>;\n\n// A bitset type, used for keeping track which known (required & optional) keys\n// the object validator has seen. Basically, when key `knownKey` is encountered,\n// the corresponding bit at index `keys.indexOf(knownKey)` gets flipped to 1.\n//\n// BitSet values initially start as a number (to avoid garbage collector churn),\n// and an empty BitSet is initialized like this:\n// let bitSet: BitSet = 0;\n//\n// As JavaScript bit arithmetic for numbers can only deal with 32-bit numbers,\n// BitSet values are upgraded to number arrays if a bits other than 0-31 need\n// to be flipped.\ntype BitSet = number | number[];\n\n// Set a bit in position `index` to one and return the updated bitset.\n// This function may or may not mutate `bits` in-place.\nfunction setBit(bits: BitSet, index: number): BitSet {\n if (typeof bits !== \"number\") {\n const idx = index >> 5;\n for (let i = bits.length; i <= idx; i++) {\n bits.push(0);\n }\n bits[idx] |= 1 << index % 32;\n return bits;\n } else if (index < 32) {\n return bits | (1 << index);\n } else {\n return setBit([bits, 0], index);\n }\n}\n\n// Get the bit at position `index`.\nfunction getBit(bits: BitSet, index: number): number {\n if (typeof bits === \"number\") {\n return index < 32 ? (bits >>> index) & 1 : 0;\n } else {\n return (bits[index >> 5] >>> index % 32) & 1;\n }\n}\n\nclass ObjectType<\n Shape extends ObjectShape = ObjectShape,\n Rest extends AbstractType | undefined = AbstractType | undefined,\n> extends Type<ObjectOutput<Shape, Rest>> {\n readonly name = \"object\";\n readonly shape: Shape;\n\n /** @internal */\n private readonly _restType: Rest;\n\n /** @internal */\n private readonly _checks?: {\n func: (v: unknown) => boolean;\n issue: IssueLeaf;\n }[];\n\n constructor(\n shape: Shape,\n restType: Rest,\n checks?: {\n func: (v: unknown) => boolean;\n issue: IssueLeaf;\n }[],\n ) {\n super();\n this.shape = shape;\n this._restType = restType;\n this._checks = checks;\n }\n\n get [MATCHER_SYMBOL](): TaggedMatcher {\n const func = createObjectMatcher(this.shape, this._restType, this._checks);\n return lazyProperty(\n this,\n MATCHER_SYMBOL,\n taggedMatcher(TAG_OBJECT, (v, flags) =>\n isObject(v) ? func(v, flags) : ISSUE_EXPECTED_OBJECT,\n ),\n false,\n );\n }\n\n check(\n func: (v: ObjectOutput<Shape, Rest>) => boolean,\n error?: CustomError,\n ): ObjectType<Shape, Rest> {\n const issue: IssueLeaf = { ok: false, code: \"custom_error\", error };\n return new ObjectType(this.shape, this._restType, [\n ...(this._checks ?? []),\n {\n func: func as (v: unknown) => boolean,\n issue,\n },\n ]);\n }\n\n rest<R extends Type>(restType: R): ObjectType<Shape, R> {\n return new ObjectType(this.shape, restType);\n }\n\n extend<S extends ObjectShape>(\n shape: S,\n ): ObjectType<Omit<Shape, keyof S> & S, Rest> {\n return new ObjectType(\n { ...this.shape, ...shape } as Omit<Shape, keyof S> & S,\n this._restType,\n );\n }\n\n pick<K extends (string & keyof Shape)[]>(\n ...keys: K\n ): ObjectType<Pick<Shape, K[number]>, undefined> {\n const shape = {} as Pick<Shape, K[number]>;\n for (const key of keys) {\n set(shape, key, this.shape[key]);\n }\n return new ObjectType(shape, undefined);\n }\n\n omit<K extends (string & keyof Shape)[]>(\n ...keys: K\n ): ObjectType<Omit<Shape, K[number]>, Rest> {\n const shape = { ...this.shape };\n for (const key of keys) {\n delete shape[key];\n }\n return new ObjectType(shape as Omit<Shape, K[number]>, this._restType);\n }\n\n partial(): ObjectType<\n { [K in keyof Shape]: Optional<Infer<Shape[K]>> },\n Rest extends AbstractType<infer I> ? Optional<I> : undefined\n > {\n const shape = {} as Record<string, unknown>;\n for (const key of Object.keys(this.shape)) {\n set(shape, key, this.shape[key].optional());\n }\n const rest = this._restType?.optional();\n return new ObjectType(\n shape as { [K in keyof Shape]: Optional<Infer<Shape[K]>> },\n rest as Rest extends AbstractType<infer I> ? Optional<I> : undefined,\n );\n }\n}\n\nfunction set(obj: Record<string, unknown>, key: string, value: unknown): void {\n if (key === \"__proto__\") {\n Object.defineProperty(obj, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n } else {\n obj[key] = value;\n }\n}\n\nfunction createObjectMatcher(\n shape: ObjectShape,\n rest?: AbstractType,\n checks?: {\n func: (v: unknown) => boolean;\n issue: IssueLeaf;\n }[],\n): Matcher<Record<string, unknown>> {\n type Entry = {\n key: string;\n index: number;\n matcher: TaggedMatcher;\n optional: boolean;\n missing: IssueTree;\n };\n\n const indexedEntries = Object.keys(shape).map((key, index) => {\n const type = shape[key];\n\n let optional = false as boolean;\n type._toTerminals((t) => {\n optional ||= t.name === \"optional\";\n });\n\n return {\n key,\n index,\n matcher: type[MATCHER_SYMBOL],\n optional,\n missing: prependPath(key, ISSUE_MISSING_VALUE),\n } satisfies Entry;\n });\n\n const keyedEntries = Object.create(null) as { [K in string]?: Entry };\n for (const entry of indexedEntries) {\n keyedEntries[entry.key] = entry;\n }\n\n const restMatcher = rest?.[MATCHER_SYMBOL];\n\n // A fast path for record(unknown()) without checks\n const fastPath =\n indexedEntries.length === 0 &&\n rest?.name === \"unknown\" &&\n checks === undefined;\n\n return (obj, flags) => {\n if (fastPath) {\n return undefined;\n }\n\n let output: Record<string, unknown> | undefined = undefined;\n let issues: IssueTree | undefined = undefined;\n let unrecognized: Key[] | undefined = undefined;\n let seenBits: BitSet = 0;\n let seenCount = 0;\n\n if (\n flags & (FLAG_FORBID_EXTRA_KEYS | FLAG_STRIP_EXTRA_KEYS) ||\n restMatcher !== undefined\n ) {\n for (const key in obj) {\n const value = obj[key];\n\n const entry = keyedEntries[key];\n if (entry === undefined && restMatcher === undefined) {\n if (flags & FLAG_FORBID_EXTRA_KEYS) {\n if (unrecognized === undefined) {\n unrecognized = [key];\n issues = joinIssues(issues, {\n ok: false,\n code: \"unrecognized_keys\",\n keys: unrecognized,\n });\n } else {\n unrecognized.push(key);\n }\n } else if (\n flags & FLAG_STRIP_EXTRA_KEYS &&\n issues === undefined &&\n output === undefined\n ) {\n output = {};\n for (let m = 0; m < indexedEntries.length; m++) {\n if (getBit(seenBits, m)) {\n const k = indexedEntries[m].key;\n set(output, k, obj[k]);\n }\n }\n }\n continue;\n }\n\n const r =\n entry === undefined\n ? callMatcher(restMatcher!, value, flags)\n : callMatcher(entry.matcher, value, flags);\n if (r === undefined) {\n if (output !== undefined && issues === undefined) {\n set(output, key, value);\n }\n } else if (!r.ok) {\n issues = joinIssues(issues, prependPath(key, r));\n } else if (issues === undefined) {\n if (output === undefined) {\n output = {};\n if (restMatcher === undefined) {\n for (let m = 0; m < indexedEntries.length; m++) {\n if (getBit(seenBits, m)) {\n const k = indexedEntries[m].key;\n set(output, k, obj[k]);\n }\n }\n } else {\n for (const k in obj) {\n set(output, k, obj[k]);\n }\n }\n }\n set(output, key, r.value);\n }\n\n if (entry !== undefined) {\n seenCount++;\n seenBits = setBit(seenBits, entry.index);\n }\n }\n }\n\n if (seenCount < indexedEntries.length) {\n for (let i = 0; i < indexedEntries.length; i++) {\n if (getBit(seenBits, i)) {\n continue;\n }\n const entry = indexedEntries[i];\n const value = obj[entry.key];\n\n let extraFlags = 0;\n if (value === undefined && !(entry.key in obj)) {\n if (!entry.optional) {\n issues = joinIssues(issues, entry.missing);\n continue;\n }\n extraFlags = FLAG_MISSING_VALUE;\n }\n\n const r = callMatcher(entry.matcher, value, flags | extraFlags);\n if (r === undefined) {\n if (output !== undefined && issues === undefined && !extraFlags) {\n set(output, entry.key, value);\n }\n } else if (!r.ok) {\n issues = joinIssues(issues, prependPath(entry.key, r));\n } else if (issues === undefined) {\n if (output === undefined) {\n output = {};\n if (restMatcher === undefined) {\n for (let m = 0; m < indexedEntries.length; m++) {\n if (m < i || getBit(seenBits, m)) {\n const k = indexedEntries[m].key;\n set(output, k, obj[k]);\n }\n }\n } else {\n for (const k in obj) {\n set(output, k, obj[k]);\n }\n for (let m = 0; m < i; m++) {\n if (!getBit(seenBits, m)) {\n const k = indexedEntries[m].key;\n set(output, k, obj[k]);\n }\n }\n }\n }\n set(output, entry.key, r.value);\n }\n }\n }\n\n if (issues !== undefined) {\n return issues;\n }\n\n if (checks !== undefined) {\n for (const { func, issue } of checks) {\n if (!func(output ?? obj)) {\n return issue;\n }\n }\n }\n return output && { ok: true, value: output };\n };\n}\n\ntype TupleOutput<T extends Type[]> = {\n [K in keyof T]: T[K] extends Type<infer U> ? U : never;\n};\n\ntype ArrayOutput<\n Head extends Type[],\n Rest extends Type | undefined,\n Tail extends Type[],\n> = [\n ...TupleOutput<Head>,\n ...(Rest extends Type ? Infer<Rest>[] : []),\n ...TupleOutput<Tail>,\n];\n\nclass ArrayOrTupleType<\n Head extends Type[] = Type[],\n Rest extends Type | undefined = Type | undefined,\n Tail extends Type[] = Type[],\n> extends Type<ArrayOutput<Head, Rest, Tail>> {\n readonly name = \"array\";\n readonly _prefix: Head;\n readonly _rest: Rest | undefined;\n readonly _suffix: Tail;\n\n constructor(prefix: Head, rest: Rest | undefined, suffix: Tail) {\n super();\n this._prefix = prefix;\n this._rest = rest;\n this._suffix = suffix;\n }\n\n get [MATCHER_SYMBOL](): TaggedMatcher {\n const prefix = this._prefix.map((t) => t[MATCHER_SYMBOL]);\n const suffix = this._suffix.map((t) => t[MATCHER_SYMBOL]);\n const rest =\n this._rest?.[MATCHER_SYMBOL] ??\n taggedMatcher(1, () => ISSUE_MISSING_VALUE);\n\n const minLength = prefix.length + suffix.length;\n const maxLength = this._rest ? Infinity : minLength;\n const invalidLength: IssueLeaf = {\n ok: false,\n code: \"invalid_length\",\n minLength,\n maxLength: maxLength === Infinity ? undefined : maxLength,\n };\n\n return lazyProperty(\n this,\n MATCHER_SYMBOL,\n taggedMatcher(TAG_ARRAY, (arr, flags) => {\n if (!Array.isArray(arr)) {\n return ISSUE_EXPECTED_ARRAY;\n }\n\n const length = arr.length;\n if (length < minLength || length > maxLength) {\n return invalidLength;\n }\n\n const headEnd = prefix.length;\n const tailStart = arr.length - suffix.length;\n\n let issueTree: IssueTree | undefined = undefined;\n let output: unknown[] = arr;\n for (let i = 0; i < arr.length; i++) {\n const entry =\n i < headEnd\n ? prefix[i]\n : i >= tailStart\n ? suffix[i - tailStart]\n : rest;\n const r = callMatcher(entry, arr[i], flags);\n if (r !== undefined) {\n if (r.ok) {\n if (output === arr) {\n output = arr.slice();\n }\n output[i] = r.value;\n } else {\n issueTree = joinIssues(issueTree, prependPath(i, r));\n }\n }\n }\n if (issueTree) {\n return issueTree;\n } else if (arr === output) {\n return undefined;\n } else {\n return { ok: true, value: output };\n }\n }),\n false,\n );\n }\n\n concat(type: ArrayType | TupleType | VariadicTupleType): ArrayOrTupleType {\n if (this._rest) {\n if (type._rest) {\n throw new TypeError(\"can not concatenate two variadic types\");\n }\n return new ArrayOrTupleType(this._prefix, this._rest, [\n ...this._suffix,\n ...type._prefix,\n ...type._suffix,\n ]);\n } else if (type._rest) {\n return new ArrayOrTupleType(\n [...this._prefix, ...this._suffix, ...type._prefix],\n type._rest,\n type._suffix,\n );\n } else {\n return new ArrayOrTupleType(\n [...this._prefix, ...this._suffix, ...type._prefix, ...type._suffix],\n type._rest,\n type._suffix,\n );\n }\n }\n}\n\n/**\n * A validator for arbitrary-length array types like `T[]`.\n */\ninterface ArrayType<Element extends Type = Type>\n extends Type<Infer<Element>[]> {\n readonly name: \"array\";\n\n /** @internal */\n readonly _prefix: Type[];\n\n /** @internal */\n readonly _rest: Element;\n\n /** @internal */\n readonly _suffix: Type[];\n\n concat<Suffix extends Type[]>(\n type: TupleType<Suffix>,\n ): VariadicTupleType<[], Element, Suffix>;\n}\n\n/**\n * A validator for a fixed-length tuple type like `[]`, `[T1, T2]`\n * or `[T1, T2, ..., Tn]`.\n */\ninterface TupleType<Elements extends Type[] = Type[]>\n extends Type<TupleOutput<Elements>> {\n readonly name: \"array\";\n\n /** @internal */\n readonly _prefix: Elements;\n\n /** @internal */\n readonly _rest: undefined;\n\n /** @internal */\n readonly _suffix: Type[];\n\n concat<ConcatPrefix extends Type[]>(\n type: TupleType<ConcatPrefix>,\n ): TupleType<[...Elements, ...ConcatPrefix]>;\n concat<\n ConcatPrefix extends Type[],\n Rest extends Type | undefined,\n Suffix extends Type[],\n >(\n type: VariadicTupleType<ConcatPrefix, Rest, Suffix>,\n ): VariadicTupleType<[...Elements, ...ConcatPrefix], Rest, Suffix>;\n concat<Element extends Type>(\n type: ArrayType<Element>,\n ): VariadicTupleType<Elements, Element, []>;\n}\n\n/**\n * A validator for a variadic tuple type like `[T1, ...T[], Tn]`,\n * `[...T[], Tn-1, Tn]` or `[T1, T2, ...T[]]`.\n */\ninterface VariadicTupleType<\n Prefix extends Type[] = Type[],\n Rest extends Type | undefined = undefined,\n Suffix extends Type[] = Type[],\n> extends Type<ArrayOutput<Prefix, Rest, Suffix>> {\n readonly name: \"array\";\n\n /** @internal */\n readonly _prefix: Prefix;\n\n /** @internal */\n readonly _rest: Rest;\n\n /** @internal */\n readonly _suffix: Suffix;\n\n concat<OtherPrefix extends Type[]>(\n type: TupleType<OtherPrefix>,\n ): VariadicTupleType<Prefix, Rest, [...Suffix, ...OtherPrefix]>;\n}\n\nfunction toInputType(v: unknown): InputType {\n const type = typeof v;\n if (type !== \"object\") {\n return type as InputType;\n } else if (v === null) {\n return \"null\";\n } else if (Array.isArray(v)) {\n return \"array\";\n } else {\n return type;\n }\n}\n\nfunction dedup<T>(arr: T[]): T[] {\n return [...new Set(arr)];\n}\n\nfunction groupTerminals(\n terminals: { root: AbstractType; terminal: TerminalType }[],\n): {\n types: Map<InputType, AbstractType[]>;\n literals: Map<unknown, AbstractType[]>;\n unknowns: AbstractType[];\n optionals: AbstractType[];\n expectedTypes: InputType[];\n} {\n const order = new Map<AbstractType, number>();\n const literals = new Map<unknown, AbstractType[]>();\n const types = new Map<InputType, AbstractType[]>();\n const unknowns = [] as AbstractType[];\n const optionals = [] as AbstractType[];\n const expectedTypes = [] as InputType[];\n for (const { root, terminal } of terminals) {\n order.set(root, order.get(root) ?? order.size);\n\n if (terminal.name === \"never\") {\n // skip\n } else if (terminal.name === \"optional\") {\n optionals.push(root);\n } else if (terminal.name === \"unknown\") {\n unknowns.push(root);\n } else if (terminal.name === \"literal\") {\n const roots = literals.get(terminal.value) ?? [];\n roots.push(root);\n literals.set(terminal.value, roots);\n expectedTypes.push(toInputType(terminal.value));\n } else {\n const roots = types.get(terminal.name) ?? [];\n roots.push(root);\n types.set(terminal.name, roots);\n expectedTypes.push(terminal.name);\n }\n }\n\n const byOrder = (a: AbstractType, b: AbstractType): number => {\n return (order.get(a) ?? 0) - (order.get(b) ?? 0);\n };\n\n for (const [value, roots] of literals) {\n const options = types.get(toInputType(value));\n if (options) {\n options.push(...roots);\n literals.delete(value);\n } else {\n literals.set(value, dedup(roots.concat(unknowns)).sort(byOrder));\n }\n }\n\n for (const [type, roots] of types) {\n types.set(type, dedup(roots.concat(unknowns)).sort(byOrder));\n }\n\n return {\n types,\n literals,\n unknowns: dedup(unknowns).sort(byOrder),\n optionals: dedup(optionals).sort(byOrder),\n expectedTypes: dedup(expectedTypes),\n };\n}\n\nfunction createObjectKeyMatcher(\n objects: { root: AbstractType; terminal: ObjectType }[],\n key: string,\n): Matcher<Record<string, unknown>> | undefined {\n const list: { root: AbstractType; terminal: TerminalType }[] = [];\n for (const { root, terminal } of objects) {\n terminal.shape[key]._toTerminals((t) => list.push({ root, terminal: t }));\n }\n\n const { types, literals, optionals, unknowns, expectedTypes } =\n groupTerminals(list);\n if (unknowns.length > 0 || optionals.length > 1) {\n return undefined;\n }\n for (const roots of literals.values()) {\n if (roots.length > 1) {\n return undefined;\n }\n }\n for (const roots of types.values()) {\n if (roots.length > 1) {\n return undefined;\n }\n }\n\n const missingValue = prependPath(key, ISSUE_MISSING_VALUE);\n const issue = prependPath(\n key,\n types.size === 0\n ? {\n ok: false,\n code: \"invalid_literal\",\n expected: [...literals.keys()] as Literal[],\n }\n : {\n ok: false,\n code: \"invalid_type\",\n expected: expectedTypes,\n },\n );\n\n const byLiteral =\n literals.size > 0 ? new Map<unknown, TaggedMatcher>() : undefined;\n if (byLiteral) {\n for (const [literal, options] of literals) {\n byLiteral.set(literal, options[0][MATCHER_SYMBOL]);\n }\n }\n\n const byType =\n types.size > 0 ? ({} as Record<string, TaggedMatcher>) : undefined;\n if (byType) {\n for (const [type, options] of types) {\n byType[type] = options[0][MATCHER_SYMBOL];\n }\n }\n\n const optional = optionals[0]?.[MATCHER_SYMBOL] as TaggedMatcher | undefined;\n return (obj, flags) => {\n const value = obj[key];\n if (value === undefined && !(key in obj)) {\n return optional === undefined\n ? missingValue\n : callMatcher(optional, obj, flags);\n }\n const option = byType?.[toInputType(value)] ?? byLiteral?.get(value);\n return option ? callMatcher(option, obj, flags) : issue;\n };\n}\n\nfunction createUnionObjectMatcher(\n terminals: { root: AbstractType; terminal: TerminalType }[],\n): Matcher<Record<string, unknown>> | undefined {\n const objects: { root: AbstractType; terminal: ObjectType }[] = [];\n const keyCounts = new Map<string, number>();\n\n for (const { root, terminal } of terminals) {\n if (terminal.name === \"unknown\") {\n return undefined;\n }\n\n if (terminal.name === \"object\") {\n for (const key in terminal.shape) {\n keyCounts.set(key, (keyCounts.get(key) ?? 0) + 1);\n }\n objects.push({ root, terminal });\n }\n }\n\n if (objects.length < 2) {\n return undefined;\n }\n\n for (const [key, count] of keyCounts) {\n if (count === objects.length) {\n const matcher = createObjectKeyMatcher(objects, key);\n if (matcher) {\n return matcher;\n }\n }\n }\n return undefined;\n}\n\nfunction createUnionBaseMatcher(\n terminals: { root: AbstractType; terminal: TerminalType }[],\n): Matcher {\n const { expectedTypes, literals, types, unknowns, optionals } =\n groupTerminals(terminals);\n\n const issue: IssueLeaf =\n types.size === 0 && unknowns.length === 0\n ? {\n ok: false,\n code: \"invalid_literal\",\n expected: [...literals.keys()] as Literal[],\n }\n : {\n ok: false,\n code: \"invalid_type\",\n expected: expectedTypes,\n };\n\n const byLiteral =\n literals.size > 0 ? new Map<unknown, TaggedMatcher[]>() : undefined;\n if (byLiteral) {\n for (const [literal, options] of literals) {\n byLiteral.set(\n literal,\n options.map((t) => t[MATCHER_SYMBOL]),\n );\n }\n }\n\n const byType =\n types.size > 0 ? ({} as Record<string, TaggedMatcher[]>) : undefined;\n if (byType) {\n for (const [type, options] of types) {\n byType[type] = options.map((t) => t[MATCHER_SYMBOL]);\n }\n }\n\n const optionalMatchers = optionals.map((t) => t[MATCHER_SYMBOL]);\n const unknownMatchers = unknowns.map((t) => t[MATCHER_SYMBOL]);\n return (value: unknown, flags: number) => {\n const options =\n flags & FLAG_MISSING_VALUE\n ? optionalMatchers\n : (byType?.[toInputType(value)] ??\n byLiteral?.get(value) ??\n unknownMatchers);\n\n let count = 0;\n let issueTree: IssueTree = issue;\n for (let i = 0; i < options.length; i++) {\n const r = callMatcher(options[i], value, flags);\n if (r === undefined || r.ok) {\n return r;\n }\n issueTree = count > 0 ? joinIssues(issueTree, r) : r;\n count++;\n }\n if (count > 1) {\n return { ok: false, code: \"invalid_union\", tree: issueTree };\n }\n return issueTree;\n };\n}\n\nclass UnionType<T extends Type[] = Type[]> extends Type<Infer<T[number]>> {\n readonly name = \"union\";\n readonly options: Readonly<T>;\n\n constructor(options: Readonly<T>) {\n super();\n this.options = options;\n }\n\n _toTerminals(func: (t: TerminalType) => void): void {\n for (const option of this.options) {\n option._toTerminals(func);\n }\n }\n\n get [MATCHER_SYMBOL](): TaggedMatcher {\n const flattened: { root: AbstractType; terminal: TerminalType }[] = [];\n for (const option of this.options) {\n option._toTerminals((terminal) => {\n flattened.push({ root: option, terminal });\n });\n }\n const base = createUnionBaseMatcher(flattened);\n const object = createUnionObjectMatcher(flattened);\n return lazyProperty(\n this,\n MATCHER_SYMBOL,\n taggedMatcher(TAG_UNION, (v, f) =>\n object !== undefined && isObject(v) ? object(v, f) : base(v, f),\n ),\n false,\n );\n }\n}\n\ntype TransformFunc = (value: unknown, flags: number) => MatcherResult;\n\nconst STRICT = Object.freeze({ mode: \"strict\" }) as ParseOptions;\nconst STRIP = Object.freeze({ mode: \"strip\" }) as ParseOptions;\nconst PASSTHROUGH = Object.freeze({ mode: \"passthrough\" }) as ParseOptions;\n\nfunction flagsToOptions(flags: number): ParseOptions {\n return flags & FLAG_FORBID_EXTRA_KEYS\n ? STRICT\n : flags & FLAG_STRIP_EXTRA_KEYS\n ? STRIP\n : PASSTHROUGH;\n}\n\nclass TransformType<Output> extends Type<Output> {\n readonly name = \"transform\";\n\n /** @internal */\n protected readonly _transformed: AbstractType;\n\n /** @internal */\n protected readonly _transform: TransformFunc;\n\n constructor(transformed: AbstractType, transform: TransformFunc) {\n super();\n this._transformed = transformed;\n this._transform = transform;\n }\n\n get [MATCHER_SYMBOL](): TaggedMatcher {\n const chain: TransformFunc[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let next: AbstractType = this;\n while (next instanceof TransformType) {\n chain.push(next._transform);\n next = next._transformed;\n }\n chain.reverse();\n\n const matcher = next[MATCHER_SYMBOL];\n const undef = ok(undefined);\n\n return lazyProperty(\n this,\n MATCHER_SYMBOL,\n taggedMatcher(TAG_TRANSFORM, (v, flags) => {\n let result = callMatcher(matcher, v, flags);\n if (result !== undefined && !result.ok) {\n return result;\n }\n\n let current: unknown;\n if (result !== undefined) {\n current = result.value;\n } else if (flags & FLAG_MISSING_VALUE) {\n current = undefined;\n result = undef;\n } else {\n current = v;\n }\n\n for (let i = 0; i < chain.length; i++) {\n const r = chain[i](current, flags);\n if (r !== undefined) {\n if (!r.ok) {\n return r;\n }\n current = r.value;\n result = r;\n }\n }\n return result;\n }),\n false,\n );\n }\n\n _toTerminals(func: (t: TerminalType) => void): void {\n this._transformed._toTerminals(func);\n }\n}\n\nclass LazyType<T> extends Type<T> {\n readonly name = \"lazy\";\n\n /** @internal */\n private _recursing = false;\n\n /** @internal */\n private readonly _definer: () => Type<T>;\n\n constructor(definer: () => Type<T>) {\n super();\n this._definer = definer;\n }\n\n get type() {\n return lazyProperty(this, \"type\", this._definer(), true);\n }\n\n get [MATCHER_SYMBOL]() {\n const matcher = taggedMatcher(TAG_OTHER, (value, flags) => {\n const typeMatcher = this.type[MATCHER_SYMBOL];\n matcher.tag = typeMatcher.tag;\n matcher.match = typeMatcher.match;\n lazyProperty(this, MATCHER_SYMBOL, typeMatcher, false);\n return callMatcher(typeMatcher, value, flags);\n });\n return matcher;\n }\n\n _toTerminals(func: (t: TerminalType) => void): void {\n if (!this._recursing) {\n this._recursing = true;\n try {\n this.type._toTerminals(func);\n } finally {\n this._recursing = false;\n }\n }\n }\n}\n\nfunction singleton<Output>(\n name: TypeName,\n tag: number,\n match: (value: unknown, flags: number) => MatcherResult,\n): () => Type<Output> {\n const value = taggedMatcher(tag, match);\n\n class SimpleType extends Type<Output> {\n readonly name: TypeName;\n readonly [MATCHER_SYMBOL]: TaggedMatcher;\n\n constructor() {\n super();\n this.name = name;\n this[MATCHER_SYMBOL] = value;\n }\n }\n\n const instance = new SimpleType();\n return /*#__NO_SIDE_EFFECTS__*/ () => instance;\n}\n\n/**\n * Create a validator that matches any value,\n * analogous to the TypeScript type `unknown`.\n */\nexport const unknown: () => Type = /*#__PURE__*/ singleton<unknown>(\n \"unknown\",\n TAG_UNKNOWN,\n () => undefined,\n);\n\n/**\n * Create a validator that never matches any value,\n * analogous to the TypeScript type `never`.\n */\nexport const never: () => Type<never> = /*#__PURE__*/ singleton<never>(\n \"never\",\n TAG_NEVER,\n () => ISSUE_EXPECTED_NOTHING,\n);\n\n/**\n * Create a validator that matches any string value.\n */\nexport const string: () => Type<string> = /*#__PURE__*/ singleton<string>(\n \"string\",\n TAG_STRING,\n (v) => (typeof v === \"string\" ? undefined : ISSUE_EXPECTED_STRING),\n);\n\n/**\n * Create a validator that matches any number value.\n */\nexport const number: () => Type<number> = /*#__PURE__*/ singleton<number>(\n \"number\",\n TAG_NUMBER,\n (v) => (typeof v === \"number\" ? undefined : ISSUE_EXPECTED_NUMBER),\n);\n\n/**\n * Create a validator that matches any bigint value.\n */\nexport const bigint: () => Type<bigint> = /*#__PURE__*/ singleton<bigint>(\n \"bigint\",\n TAG_BIGINT,\n (v) => (typeof v === \"bigint\" ? undefined : ISSUE_EXPECTED_BIGINT),\n);\n\n/**\n * Create a validator that matches any boolean value.\n */\nexport const boolean: () => Type<boolean> = /*#__PURE__*/ singleton<boolean>(\n \"boolean\",\n TAG_BOOLEAN,\n (v) => (typeof v === \"boolean\" ? undefined : ISSUE_EXPECTED_BOOLEAN),\n);\n\n/**\n * Create a validator that matches `null`.\n */\nconst null_: () => Type<null> = /*#__PURE__*/ singleton<null>(\n \"null\",\n TAG_NULL,\n (v) => (v === null ? undefined : ISSUE_EXPECTED_NULL),\n);\nexport { null_ as null };\n\n/**\n * Create a validator that matches `undefined`.\n */\nconst undefined_: () => Type<undefined> = /*#__PURE__*/ singleton<undefined>(\n \"undefined\",\n TAG_UNDEFINED,\n (v) => (v === undefined ? undefined : ISSUE_EXPECTED_UNDEFINED),\n);\nexport { undefined_ as undefined };\n\nclass LiteralType<Out extends Literal = Literal> extends Type<Out> {\n readonly name = \"literal\";\n readonly [MATCHER_SYMBOL]: TaggedMatcher;\n readonly value: Out;\n\n constructor(value: Out) {\n super();\n\n const issue: IssueLeaf = {\n ok: false,\n code: \"invalid_literal\",\n expected: [value],\n };\n this[MATCHER_SYMBOL] = taggedMatcher(TAG_LITERAL, (v) =>\n v === value ? undefined : issue,\n );\n this.value = value;\n }\n}\n\n/**\n * Create a validator for a specific string, number, bigint or boolean value.\n */\nexport const literal = <T extends Literal>(value: T): Type<T> => {\n return /*#__PURE__*/ new LiteralType(value);\n};\n\n/**\n * Create a validator for an object type.\n */\nexport const object = <T extends Record<string, AbstractType>>(\n obj: T,\n): ObjectType<T, undefined> => {\n return /*#__PURE__*/ new ObjectType(obj, undefined);\n};\n\n/**\n * Create a validator for a record type `Record<string, T>`,\n * where `T` is the output type of the given subvalidator.\n */\nexport const record = <T extends Type>(\n valueType?: T,\n): Type<Record<string, Infer<T>>> => {\n return /*#__PURE__*/ new ObjectType({}, valueType ?? unknown()) as Type<\n Record<string, Infer<T>>\n >;\n};\n\n/**\n * Create a validator for an array type `T[]`,\n * where `T` is the output type of the given subvalidator.\n */\nexport const array = <T extends Type>(item?: T): ArrayType<T> => {\n return /*#__PURE__*/ new ArrayOrTupleType(\n [],\n item ?? unknown(),\n [],\n ) as unknown as ArrayType<T>;\n};\n\n/**\n * Create a validator for an array type `[T1, T2, ..., Tn]`,\n * where `T1`, `T2`, ..., `Tn` are the output types of the given subvalidators.\n */\nexport const tuple = <T extends [] | [Type, ...Type[]]>(\n items: T,\n): TupleType<T> => {\n return /*#__PURE__*/ new ArrayOrTupleType(\n items,\n undefined,\n [],\n ) as unknown as TupleType<T>;\n};\n\n/**\n * Create a validator that matches any type `T1 | T2 | ... | Tn`,\n * where `T1`, `T2`, ..., `Tn` are the output types of the given subvalidators.\n *\n * This is analogous to how TypeScript's union types are constructed.\n */\nexport const union = <T extends Type[]>(...options: T): UnionType<T> => {\n return /*#__PURE__*/ new UnionType(options) as UnionType<T>;\n};\n\n/**\n * Create a validator that can reference itself, directly or indirectly.\n *\n * In most cases an explicit type annotation is also needed, as TypeScript\n * cannot infer return types of recursive functions.\n *\n * @example\n * ```ts\n * import * as v from \"@badrap/valita\";\n *\n * type T = string | T[];\n * const type: v.Type<T> = v.lazy(() => v.union(v.string(), v.array(type)));\n * ```\n */\nexport const lazy = <T>(definer: () => Type<T>): Type<T> => {\n return new LazyType(definer);\n};\n\ntype TerminalType =\n | (Type & {\n name:\n | \"unknown\"\n | \"never\"\n | \"string\"\n | \"number\"\n | \"bigint\"\n | \"boolean\"\n | \"null\"\n | \"undefined\";\n })\n | LiteralType\n | ObjectType\n | ArrayOrTupleType\n | Optional;\n\nexport type { Type, Optional };\nexport type { ObjectType, ArrayType, TupleType, VariadicTupleType, UnionType };\n","import { configureOAuth } from \"@atcute/oauth-browser-client\";\n\nimport {\n CompositeDidDocumentResolver,\n LocalActorResolver,\n PlcDidDocumentResolver,\n WebDidDocumentResolver,\n XrpcHandleResolver,\n} from \"@atcute/identity-resolver\";\n\nimport {\n createAuthorizationUrl,\n deleteStoredSession,\n finalizeAuthorization,\n getSession,\n OAuthUserAgent,\n} from \"@atcute/oauth-browser-client\";\n\nexport { OAuthUserAgent };\n\n/**\n * @import {Session} from \"@atcute/oauth-browser-client\"\n */\n\nconst STORAGE_KEY = \"dor-atproto:did\";\n\n// CONFIGURE\n// =========\n\nconfigureOAuth({\n metadata: {\n client_id: import.meta.env?.VITE_ATPROTO_CLIENT_ID ??\n \"https://elements.diffuse.sh/bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/oauth-client-metadata.json\",\n redirect_uri:\n window.location.origin.replace(\"://localhost\", \"://127.0.0.1\") +\n window.location.pathname,\n },\n identityResolver: new LocalActorResolver({\n handleResolver: new XrpcHandleResolver({\n serviceUrl: \"https://public.api.bsky.app\",\n }),\n didDocumentResolver: new CompositeDidDocumentResolver({\n methods: {\n plc: new PlcDidDocumentResolver(),\n web: new WebDidDocumentResolver(),\n },\n }),\n }),\n});\n\n// LOGIN\n// =====\n\n/**\n * Initiate the OAuth authorization flow for a given handle.\n * Navigates the browser away to the authorization server.\n *\n * @param {string} handle\n */\nexport async function login(handle) {\n const authUrl = await createAuthorizationUrl({\n target: { type: \"account\", identifier: /** @type {any} */ (handle) },\n scope: \"atproto transition:generic\",\n });\n\n window.location.assign(authUrl.toString());\n}\n\n// SESSION RESTORE / CALLBACK\n// ==========================\n\n/**\n * Attempt to restore an existing session or finalize an OAuth callback.\n * Returns the session if successful, or null if no session is available.\n *\n * @returns {Promise<Session | null>}\n */\nexport async function restoreOrFinalize() {\n // Check for OAuth callback parameters (the library uses response_mode=fragment,\n // so params arrive in the URL hash, not the query string)\n const params = new URLSearchParams(window.location.hash.slice(1));\n\n if (params.has(\"code\")) {\n const result = await finalizeAuthorization(params);\n\n // Clean up URL (remove fragment containing OAuth params)\n history.replaceState(\n null,\n \"\",\n window.location.pathname + window.location.search,\n );\n\n // Persist the DID for future session restoration\n localStorage.setItem(STORAGE_KEY, result.session.info.sub);\n\n return result.session;\n }\n\n // Try to restore a previously stored session\n const did = localStorage.getItem(STORAGE_KEY);\n\n if (did) {\n try {\n return await getSession(\n /** @type {`did:${string}:${string}`} */ (did),\n { allowStale: true },\n );\n } catch {\n localStorage.removeItem(STORAGE_KEY);\n return null;\n }\n }\n\n return null;\n}\n\n// LOGOUT\n// ======\n\n/**\n * Sign out and revoke the current session.\n *\n * @param {OAuthUserAgent} agent\n */\nexport async function logout(agent) {\n const did = localStorage.getItem(STORAGE_KEY);\n\n try {\n await agent.signOut();\n } catch {\n if (did) {\n deleteStoredSession(\n /** @type {`did:${string}:${string}`} */ (did),\n );\n }\n }\n\n localStorage.removeItem(STORAGE_KEY);\n}\n","export { configureOAuth, type ConfigureOAuthOptions } from './environment.js';\n\nexport * from './errors.js';\n\nexport * from './agents/exchange.js';\nexport {\n\tgetSession,\n\tdeleteStoredSession,\n\tlistStoredSessions,\n\ttype SessionGetOptions,\n} from './agents/sessions.js';\nexport * from './agents/user-agent.js';\n\nexport type {\n\tClientAssertionCredentials,\n\tClientAssertionFetcher,\n\tFetchClientAssertionParams,\n} from './types/client-assertion.js';\nexport type { TokenInfo, ExchangeInfo, Session } from './types/token.js';\n","import type { ActorResolver } from '@atcute/identity-resolver';\n\nimport { createOAuthDatabase, type OAuthDatabase } from './store/db.js';\nimport type { ClientAssertionFetcher } from './types/client-assertion.js';\n\nexport let CLIENT_ID: string;\nexport let REDIRECT_URI: string;\n\nexport let fetchClientAssertion: ClientAssertionFetcher | undefined;\n\nexport let database: OAuthDatabase;\n\nexport let identityResolver: ActorResolver;\n\nexport interface ConfigureOAuthOptions {\n\t/**\n\t * client metadata, necessary to drive the whole request\n\t */\n\tmetadata: {\n\t\tclient_id: string;\n\t\tredirect_uri: string;\n\t};\n\n\t/** resolves actor identifiers into identity metadata */\n\tidentityResolver: ActorResolver;\n\n\t/**\n\t * optional function to fetch DPoP-bound client assertions from your backend.\n\t */\n\tfetchClientAssertion?: ClientAssertionFetcher;\n\n\t/**\n\t * name that will be used as prefix for storage keys needed to persist authentication.\n\t * @default \"atcute-oauth\"\n\t */\n\tstorageName?: string;\n}\n\nexport const configureOAuth = (options: ConfigureOAuthOptions) => {\n\t({ identityResolver, fetchClientAssertion } = options);\n\t({ client_id: CLIENT_ID, redirect_uri: REDIRECT_URI } = options.metadata);\n\n\tdatabase = createOAuthDatabase({ name: options.storageName ?? 'atcute-oauth' });\n};\n","import type { Did } from '@atcute/lexicons';\nimport type { DpopPrivateJwk } from '@atcute/oauth-crypto';\nimport type { OAuthAuthorizationServerMetadata } from '@atcute/oauth-types';\n\nimport type { SimpleStore } from '../types/store.js';\nimport type { RawSession } from '../types/token.js';\nimport { locks } from '../utils/runtime.js';\n\nexport interface OAuthDatabaseOptions {\n\tname: string;\n}\n\ninterface SchemaItem<T> {\n\tvalue: T;\n\texpiresAt: number | null;\n\tupdatedAt?: number;\n}\n\ninterface Schema {\n\tsessions: {\n\t\tkey: Did;\n\t\tvalue: RawSession;\n\t\tindexes: {\n\t\t\texpiresAt: number;\n\t\t};\n\t};\n\tstates: {\n\t\tkey: string;\n\t\tvalue: {\n\t\t\tdpopKey: DpopPrivateJwk;\n\t\t\tmetadata: OAuthAuthorizationServerMetadata;\n\t\t\tverifier?: string;\n\t\t\tstate?: unknown;\n\t\t};\n\t};\n\n\tdpopNonces: {\n\t\tkey: string;\n\t\tvalue: string;\n\t};\n}\n\nconst parse = (raw: string | null) => {\n\tif (raw != null) {\n\t\tconst parsed = JSON.parse(raw);\n\t\tif (parsed != null) {\n\t\t\treturn parsed;\n\t\t}\n\t}\n\n\treturn {};\n};\n\nexport type OAuthDatabase = ReturnType<typeof createOAuthDatabase>;\n\nexport const createOAuthDatabase = ({ name }: OAuthDatabaseOptions) => {\n\tconst controller = new AbortController();\n\tconst signal = controller.signal;\n\n\tconst createStore = <N extends keyof Schema>(\n\t\tsubname: N,\n\t\texpiresAt: (item: Schema[N]['value']) => null | number,\n\t\tpersistUpdatedAt = false,\n\t): SimpleStore<Schema[N]['key'], Schema[N]['value']> => {\n\t\tlet store: any;\n\n\t\tconst storageKey = `${name}:${subname}`;\n\n\t\tconst persist = () => store && localStorage.setItem(storageKey, JSON.stringify(store));\n\t\tconst read = () => {\n\t\t\tif (signal.aborted) {\n\t\t\t\tthrow new Error(`store closed`);\n\t\t\t}\n\n\t\t\treturn (store ??= parse(localStorage.getItem(storageKey)));\n\t\t};\n\n\t\t{\n\t\t\tconst listener = (ev: StorageEvent) => {\n\t\t\t\tif (ev.key === storageKey) {\n\t\t\t\t\tstore = undefined;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tglobalThis.addEventListener('storage', listener, { signal });\n\t\t}\n\n\t\t{\n\t\t\tconst cleanup = async (lock: Lock | true | null) => {\n\t\t\t\tif (!lock || signal.aborted) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 10_000));\n\t\t\t\tif (signal.aborted) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet now = Date.now();\n\t\t\t\tlet changed = false;\n\n\t\t\t\tread();\n\n\t\t\t\tfor (const key in store) {\n\t\t\t\t\tconst item = store[key];\n\t\t\t\t\tconst expiresAt = item.expiresAt;\n\n\t\t\t\t\tif (expiresAt !== null && now > expiresAt) {\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\tdelete store[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (changed) {\n\t\t\t\t\tpersist();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (locks) {\n\t\t\t\tlocks.request(`${storageKey}:cleanup`, { ifAvailable: true }, cleanup);\n\t\t\t} else {\n\t\t\t\tcleanup(true);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tget(key) {\n\t\t\t\tread();\n\n\t\t\t\tconst item: SchemaItem<Schema[N]['value']> = store[key];\n\t\t\t\tif (!item) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst expiresAt = item.expiresAt;\n\t\t\t\tif (expiresAt !== null && Date.now() > expiresAt) {\n\t\t\t\t\tdelete store[key];\n\t\t\t\t\tpersist();\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\treturn item.value;\n\t\t\t},\n\t\t\tgetWithLapsed(key) {\n\t\t\t\tread();\n\n\t\t\t\tconst item: SchemaItem<Schema[N]['value']> = store[key];\n\t\t\t\tconst now = Date.now();\n\t\t\t\tif (!item) {\n\t\t\t\t\treturn [undefined, Infinity];\n\t\t\t\t}\n\n\t\t\t\tconst updatedAt = item.updatedAt;\n\t\t\t\tif (updatedAt === undefined) {\n\t\t\t\t\treturn [item.value, Infinity];\n\t\t\t\t}\n\n\t\t\t\treturn [item.value, now - updatedAt];\n\t\t\t},\n\t\t\tset(key, value) {\n\t\t\t\tread();\n\n\t\t\t\tconst item: SchemaItem<Schema[N]['value']> = {\n\t\t\t\t\tvalue: value,\n\t\t\t\t\texpiresAt: expiresAt(value),\n\t\t\t\t\tupdatedAt: persistUpdatedAt ? Date.now() : undefined,\n\t\t\t\t};\n\n\t\t\t\tstore[key] = item;\n\t\t\t\tpersist();\n\t\t\t},\n\t\t\tdelete(key) {\n\t\t\t\tread();\n\n\t\t\t\tif (store[key] !== undefined) {\n\t\t\t\t\tdelete store[key];\n\t\t\t\t\tpersist();\n\t\t\t\t}\n\t\t\t},\n\t\t\tkeys() {\n\t\t\t\tread();\n\n\t\t\t\treturn Object.keys(store);\n\t\t\t},\n\t\t};\n\t};\n\n\treturn {\n\t\tdispose: () => {\n\t\t\tcontroller.abort();\n\t\t},\n\n\t\tsessions: createStore('sessions', ({ token }) => {\n\t\t\tif (token.refresh) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn token.expires_at ?? null;\n\t\t}),\n\t\tstates: createStore('states', (_item) => Date.now() + 10 * 60 * 1_000), // 10 minutes\n\n\t\t// The reference PDS have nonces that expire after 3 minutes, while other\n\t\t// implementations can have varying expiration times.\n\t\t// Stored for 24 hours.\n\t\tdpopNonces: createStore('dpopNonces', (_item) => Date.now() + 24 * 60 * 60 * 1_000, true),\n\t\tinflightDpop: new Map<string, PromiseWithResolvers<void>>(),\n\t};\n};\n","export const locks: LockManager | undefined = typeof navigator !== 'undefined' ? navigator.locks : undefined;\n","import type { Did } from '@atcute/lexicons';\n\nexport class LoginError extends Error {\n\toverride name = 'LoginError';\n}\n\nexport class AuthorizationError extends Error {\n\toverride name = 'AuthorizationError';\n}\n\nexport class ResolverError extends Error {\n\toverride name = 'ResolverError';\n}\n\nexport class TokenRefreshError extends Error {\n\toverride name = 'TokenRefreshError';\n\n\tconstructor(\n\t\tpublic readonly sub: Did,\n\t\tmessage: string,\n\t\toptions?: ErrorOptions,\n\t) {\n\t\tsuper(message, options);\n\t}\n}\n\nexport class OAuthResponseError extends Error {\n\toverride name = 'OAuthResponseError';\n\n\treadonly error: string | undefined;\n\treadonly description: string | undefined;\n\n\tconstructor(\n\t\tpublic readonly response: Response,\n\t\tpublic readonly data: any,\n\t) {\n\t\tconst error = ifString(ifObject(data)?.['error']);\n\t\tconst errorDescription = ifString(ifObject(data)?.['error_description']);\n\n\t\tconst messageError = error ? `\"${error}\"` : 'unknown';\n\t\tconst messageDesc = errorDescription ? `: ${errorDescription}` : '';\n\t\tconst message = `OAuth ${messageError} error${messageDesc}`;\n\n\t\tsuper(message);\n\n\t\tthis.error = error;\n\t\tthis.description = errorDescription;\n\t}\n\n\tget status() {\n\t\treturn this.response.status;\n\t}\n\n\tget headers() {\n\t\treturn this.response.headers;\n\t}\n}\n\nexport class FetchResponseError extends Error {\n\toverride name = 'FetchResponseError';\n\n\tconstructor(\n\t\tpublic readonly response: Response,\n\t\tpublic status: number,\n\t\tmessage: string,\n\t) {\n\t\tsuper(message);\n\t}\n}\n\nconst ifString = (v: unknown): string | undefined => {\n\treturn typeof v === 'string' ? v : undefined;\n};\nconst ifObject = (v: unknown): Record<string, unknown> | undefined => {\n\treturn typeof v === 'object' && v !== null && !Array.isArray(v) ? (v as any) : undefined;\n};\n","import type { ResolvedActor } from '@atcute/identity-resolver';\nimport type { ActorIdentifier } from '@atcute/lexicons';\nimport { generateDpopKey, generatePkce } from '@atcute/oauth-crypto';\nimport type { OAuthAuthorizationServerMetadata, OAuthPrompt } from '@atcute/oauth-types';\n\nimport { nanoid } from 'nanoid';\n\nimport { CLIENT_ID, database, REDIRECT_URI } from '../environment.js';\nimport { AuthorizationError, LoginError } from '../errors.js';\nimport { resolveFromIdentifier, resolveFromService } from '../resolvers.js';\nimport type { Session } from '../types/token.js';\n\nimport { OAuthServerAgent } from './server-agent.js';\nimport { storeSession } from './sessions.js';\n\nexport type AuthorizeTargetOptions =\n\t| { type: 'account'; identifier: ActorIdentifier }\n\t| { type: 'pds'; serviceUrl: string };\n\nexport interface AuthorizeOptions {\n\ttarget: AuthorizeTargetOptions;\n\tscope: string;\n\tstate?: unknown;\n\tprompt?: OAuthPrompt | (string & {});\n\tdisplay?: 'page' | 'popup' | 'touch' | 'wap';\n\tlocale?: string;\n}\n\n/**\n * Create authentication URL for authorization\n * @param options\n * @returns URL to redirect the user for authorization\n */\nexport const createAuthorizationUrl = async (options: AuthorizeOptions): Promise<URL> => {\n\tconst { target, scope, state = null, ...reqs } = options;\n\n\tlet resolved: { identity?: ResolvedActor; metadata: OAuthAuthorizationServerMetadata };\n\tswitch (target.type) {\n\t\tcase 'account': {\n\t\t\tresolved = await resolveFromIdentifier(target.identifier);\n\t\t\tbreak;\n\t\t}\n\t\tcase 'pds': {\n\t\t\tresolved = await resolveFromService(target.serviceUrl);\n\t\t}\n\t}\n\n\tconst { identity, metadata } = resolved;\n\tconst loginHint = identity\n\t\t? identity.handle !== 'handle.invalid'\n\t\t\t? identity.handle\n\t\t\t: identity.did\n\t\t: undefined;\n\n\tconst sid = nanoid(24);\n\n\tconst pkce = await generatePkce();\n\tconst dpopKey = await generateDpopKey(['ES256']);\n\n\tconst params = {\n\t\tdisplay: reqs.display,\n\t\tui_locales: reqs.locale,\n\t\tprompt: reqs.prompt,\n\n\t\tredirect_uri: REDIRECT_URI,\n\t\tcode_challenge: pkce.challenge,\n\t\tcode_challenge_method: pkce.method,\n\t\tstate: sid,\n\t\tlogin_hint: loginHint,\n\t\tresponse_mode: 'fragment',\n\t\tresponse_type: 'code',\n\t\tscope: scope,\n\t} satisfies Record<string, string | undefined>;\n\n\tdatabase.states.set(sid, {\n\t\tdpopKey: dpopKey,\n\t\tmetadata: metadata,\n\t\tverifier: pkce.verifier,\n\t\tstate: state,\n\t});\n\n\tconst server = new OAuthServerAgent(metadata, dpopKey);\n\tconst response = await server.request('pushed_authorization_request', params);\n\n\tconst authUrl = new URL(metadata.authorization_endpoint);\n\tauthUrl.searchParams.set('client_id', CLIENT_ID);\n\tauthUrl.searchParams.set('request_uri', response.request_uri);\n\n\treturn authUrl;\n};\n\n/**\n * Finalize authorization\n * @param params Search params\n * @returns Session object, which you can use to instantiate user agents\n */\nexport const finalizeAuthorization = async (params: URLSearchParams) => {\n\tconst issuer = params.get('iss');\n\tconst sid = params.get('state');\n\tconst code = params.get('code');\n\tconst error = params.get('error');\n\n\tif (!sid || !(code || error)) {\n\t\tthrow new LoginError(`missing parameters`);\n\t}\n\n\tconst stored = database.states.get(sid);\n\tif (stored) {\n\t\t// Delete now that we've caught it\n\t\tdatabase.states.delete(sid);\n\t} else {\n\t\tthrow new LoginError(`unknown state provided`);\n\t}\n\n\tif (error) {\n\t\tthrow new AuthorizationError(params.get('error_description') || error);\n\t}\n\tif (!code) {\n\t\tthrow new LoginError(`missing code parameter`);\n\t}\n\n\tconst dpopKey = stored.dpopKey;\n\tconst metadata = stored.metadata;\n\tconst state = stored.state ?? null;\n\n\tif (issuer === null) {\n\t\tthrow new LoginError(`missing issuer parameter`);\n\t} else if (issuer !== metadata.issuer) {\n\t\tthrow new LoginError(`issuer mismatch`);\n\t}\n\n\t// Retrieve authentication tokens\n\tconst server = new OAuthServerAgent(metadata, dpopKey);\n\tconst { info, token } = await server.exchangeCode(code, stored.verifier);\n\n\t// We're finished!\n\tconst sub = info.sub;\n\tconst session: Session = { dpopKey, info, token };\n\n\tawait storeSession(sub, session);\n\n\treturn { session, state };\n};\n","export * from './client-assertion/index.js';\nexport * from './dpop/index.js';\nexport * from './hash/index.js';\nexport * from './jwk/index.js';\nexport * from './jwt/index.js';\n","export { createClientAssertion } from './create-client-assertion.js';\nexport { generateClientAssertionKey } from './generate-key.js';\nexport { importClientAssertionPkcs8 } from './keys.js';\nexport type { ClientAssertionPrivateJwk } from './types.js';\n","import { nanoid } from 'nanoid';\n\nimport { getCachedKeyMaterial } from '../internal/key-cache.js';\nimport { signJwt } from '../jwt/index.js';\n\nimport type { ClientAssertionPrivateJwk } from './types.js';\n\nexport interface CreateClientAssertionOptions {\n\t/** client id */\n\tclient_id: string;\n\t/** authorization server issuer */\n\taud: string;\n\t/** JWK thumbprint of the DPoP key to bind to (for CAB pattern) */\n\tjkt?: string;\n\t/** client assertion signing key */\n\tkey: ClientAssertionPrivateJwk;\n}\n\n/**\n * creates a DPoP-bound client assertion per RFC 7523.\n *\n * @param options creation options\n * @returns signed client assertion JWT\n */\nexport const createClientAssertion = async (options: CreateClientAssertionOptions): Promise<string> => {\n\tconst { client_id, aud, jkt, key } = options;\n\tconst { kid, alg } = key;\n\tconst { cryptoKey } = await getCachedKeyMaterial(key);\n\n\tconst now = Math.floor(Date.now() / 1000);\n\tconst cnf = jkt ? { jkt } : undefined;\n\n\treturn signJwt({\n\t\theader: {\n\t\t\talg,\n\t\t\tkid,\n\t\t},\n\t\tpayload: {\n\t\t\tiss: client_id,\n\t\t\tsub: client_id,\n\t\t\taud: aud,\n\t\t\tjti: nanoid(24),\n\t\t\tiat: now,\n\t\t\texp: now + 60,\n\t\t\tcnf,\n\t\t},\n\t\tkey: cryptoKey,\n\t\talg,\n\t});\n};\n","import { webcrypto as crypto } from 'node:crypto'\nimport { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nconst POOL_SIZE_MULTIPLIER = 128\nlet pool, poolOffset\nfunction fillPool(bytes) {\n if (!pool || pool.length < bytes) {\n pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER)\n crypto.getRandomValues(pool)\n poolOffset = 0\n } else if (poolOffset + bytes > pool.length) {\n crypto.getRandomValues(pool)\n poolOffset = 0\n }\n poolOffset += bytes\n}\nexport function random(bytes) {\n fillPool((bytes |= 0))\n return pool.subarray(poolOffset - bytes, poolOffset)\n}\nexport function customRandom(alphabet, defaultSize, getRandom) {\n let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1\n let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n if (!size) return ''\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let i = step\n while (i--) {\n id += alphabet[bytes[i] & mask] || ''\n if (id.length >= size) return id\n }\n }\n }\n}\nexport function customAlphabet(alphabet, size = 21) {\n return customRandom(alphabet, size, random)\n}\nexport function nanoid(size = 21) {\n fillPool((size |= 0))\n let id = ''\n for (let i = poolOffset - size; i < poolOffset; i++) {\n id += scopedUrlAlphabet[pool[i] & 63]\n }\n return id\n}\n","export const urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n","import type { PrivateJwk, PublicJwk } from '../jwk/types.js';\n\nimport { derivePublicJwk, importPrivateKeyFromJwk } from './jwk.js';\n\n/**\n * cached key material for a JWK.\n */\nexport interface CachedKeyMaterial {\n\tcryptoKey: CryptoKey;\n\tpublicJwk: PublicJwk;\n}\n\n/**\n * cache for imported keys.\n * uses WeakMap so entries are garbage collected when JWK objects are no longer referenced.\n */\nconst keyCache = new WeakMap<PrivateJwk, CachedKeyMaterial>();\n\n/**\n * retrieves or creates cached key material for a JWK.\n *\n * @param jwk private JWK to get material for\n * @returns cached key material (CryptoKey and derived public JWK)\n */\nexport const getCachedKeyMaterial = async (jwk: PrivateJwk): Promise<CachedKeyMaterial> => {\n\tconst cached = keyCache.get(jwk);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\tconst { alg } = jwk;\n\tconst cryptoKey = await importPrivateKeyFromJwk(jwk, alg);\n\tconst publicJwk = derivePublicJwk(jwk, jwk.kid, alg);\n\tconst material: CachedKeyMaterial = { cryptoKey, publicJwk };\n\n\tkeyCache.set(jwk, material);\n\n\treturn material;\n};\n\n/**\n * pre-populates the cache with already-imported key material.\n * useful for PKCS8 imports where we already have the CryptoKey.\n *\n * @param jwk private JWK to cache for\n * @param cryptoKey already-imported CryptoKey\n */\nexport const setCachedKeyMaterial = (jwk: PrivateJwk, cryptoKey: CryptoKey): void => {\n\tconst publicJwk = derivePublicJwk(jwk, jwk.kid, jwk.alg);\n\tkeyCache.set(jwk, { cryptoKey, publicJwk });\n};\n","import { fromBase64Pad, toBase64Pad } from '@atcute/multibase';\n\nimport type { PrivateJwk, PublicJwk, SigningAlgorithm } from '../jwk/types.js';\n\nimport { getImportAlgorithm } from './crypto.js';\n\nconst SIGNING_ALGORITHMS: readonly SigningAlgorithm[] = [\n\t'ES256',\n\t'ES384',\n\t'ES512',\n\t'PS256',\n\t'PS384',\n\t'PS512',\n\t'RS256',\n\t'RS384',\n\t'RS512',\n];\n\nconst CURVE_TO_ALG: Record<string, SigningAlgorithm> = {\n\t'P-256': 'ES256',\n\t'P-384': 'ES384',\n\t'P-521': 'ES512',\n};\n\nexport const isSigningAlgorithm = (alg: string): alg is SigningAlgorithm => {\n\treturn (SIGNING_ALGORITHMS as readonly string[]).includes(alg);\n};\n\nexport const parsePrivateJwkInput = (input: PrivateJwk | string): PrivateJwk => {\n\tif (typeof input === 'string') {\n\t\ttry {\n\t\t\tconst jwk = JSON.parse(input) as PrivateJwk;\n\t\t\treturn jwk;\n\t\t} catch {\n\t\t\tthrow new Error(`invalid JSON string`);\n\t\t}\n\t}\n\n\tif (typeof input === 'object' && input !== null && 'kty' in input) {\n\t\treturn input;\n\t}\n\n\tthrow new Error(`invalid input: expected JWK object or JSON string`);\n};\n\nexport const resolveSigningAlgorithm = (\n\tjwk: PrivateJwk,\n\toverride?: SigningAlgorithm,\n): SigningAlgorithm | undefined => {\n\tif (override) {\n\t\treturn override;\n\t}\n\n\tconst alg = jwk.alg;\n\tif (alg && isSigningAlgorithm(alg)) {\n\t\treturn alg;\n\t}\n\n\tif (jwk.kty === 'EC') {\n\t\tconst inferred = CURVE_TO_ALG[jwk.crv];\n\t\tif (inferred) {\n\t\t\treturn inferred;\n\t\t}\n\t}\n\n\treturn undefined;\n};\n\nexport const derivePublicJwk = (privateJwk: PrivateJwk, kid?: string, alg?: SigningAlgorithm): PublicJwk => {\n\tif (privateJwk.kty === 'EC') {\n\t\tconst { crv, x, y } = privateJwk;\n\t\treturn { kty: 'EC', crv, x, y, kid, alg, use: 'sig' };\n\t}\n\n\tif (privateJwk.kty === 'RSA') {\n\t\tconst { n, e } = privateJwk;\n\t\treturn { kty: 'RSA', n, e, kid, alg, use: 'sig' };\n\t}\n\n\tthrow new Error(`unsupported key type`);\n};\n\nexport const importPrivateKeyFromJwk = async (jwk: PrivateJwk, alg: SigningAlgorithm): Promise<CryptoKey> => {\n\tif (!('d' in jwk) || !jwk.d) {\n\t\tthrow new Error(`expected a private key (missing 'd' parameter)`);\n\t}\n\n\tif (jwk.kty === 'EC' && !alg.startsWith('ES')) {\n\t\tthrow new Error(`algorithm ${alg} does not match ec key`);\n\t}\n\tif (jwk.kty === 'RSA' && alg.startsWith('ES')) {\n\t\tthrow new Error(`algorithm ${alg} does not match rsa key`);\n\t}\n\n\tconst algorithm = getImportAlgorithm(alg, jwk.kty === 'EC' ? jwk.crv : undefined);\n\tconst key = await crypto.subtle.importKey('jwk', jwk, algorithm, true, ['sign']);\n\n\tif (!(key instanceof CryptoKey)) {\n\t\tthrow new Error(`expected asymmetric key, got symmetric`);\n\t}\n\n\treturn key;\n};\n\nexport const exportPrivateJwkFromKey = async (\n\tkey: CryptoKey,\n\talg: SigningAlgorithm,\n\tkid?: string,\n): Promise<PrivateJwk> => {\n\tconst jwk = (await crypto.subtle.exportKey('jwk', key)) as PrivateJwk;\n\tjwk.alg = alg;\n\tif (kid) {\n\t\tjwk.kid = kid;\n\t}\n\treturn jwk;\n};\n\nexport const importPkcs8PrivateKey = async (pem: string, alg: SigningAlgorithm): Promise<CryptoKey> => {\n\tconst bytes = parsePkcs8Pem(pem);\n\tconst algorithm = getImportAlgorithm(alg);\n\n\tconst key = await crypto.subtle.importKey('pkcs8', bytes, algorithm, true, ['sign']);\n\n\tif (!(key instanceof CryptoKey)) {\n\t\tthrow new Error(`expected asymmetric key, got symmetric`);\n\t}\n\n\treturn key;\n};\n\nexport const exportPkcs8PrivateKey = async (key: CryptoKey): Promise<string> => {\n\tconst pkcs8 = await crypto.subtle.exportKey('pkcs8', key);\n\tconst bytes = new Uint8Array(pkcs8);\n\tconst base64 = toBase64Pad(bytes);\n\n\treturn ['-----BEGIN PRIVATE KEY-----', ...chunk64(base64), '-----END PRIVATE KEY-----', ''].join('\\n');\n};\n\nconst parsePkcs8Pem = (pem: string): ArrayBuffer => {\n\tconst match = pem.match(/-----BEGIN PRIVATE KEY-----([\\s\\S]*?)-----END PRIVATE KEY-----/);\n\tif (!match) {\n\t\tthrow new Error(`invalid pkcs8 pem`);\n\t}\n\n\tconst base64 = match[1].replace(/\\s+/g, '');\n\tconst bytes = fromBase64Pad(base64);\n\tconst buffer = bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);\n\treturn buffer;\n};\n\nconst chunk64 = (input: string): string[] => {\n\tconst chunks: string[] = [];\n\tfor (let i = 0; i < input.length; i += 64) {\n\t\tchunks.push(input.slice(i, i + 64));\n\t}\n\treturn chunks;\n};\n","export { fromBase16, toBase16 } from '#bases/base16';\nexport {\n\tfromBase64,\n\tfromBase64Pad,\n\tfromBase64Url,\n\tfromBase64UrlPad,\n\ttoBase64,\n\ttoBase64Pad,\n\ttoBase64Url,\n\ttoBase64UrlPad,\n} from '#bases/base64';\n\nexport { fromBase32, toBase32 } from './bases/base32.ts';\nexport { fromBase58Btc, toBase58Btc } from './bases/base58.ts';\n","import { fromBase16 as fromBase16Native, toBase16 as toBase16Native } from './base16-web-native.ts';\nimport { fromBase16 as fromBase16Polyfill, toBase16 as toBase16Polyfill } from './base16-web-polyfill.ts';\n\nconst HAS_NATIVE_SUPPORT = 'fromHex' in Uint8Array;\n\nexport const fromBase16 = !HAS_NATIVE_SUPPORT ? fromBase16Polyfill : fromBase16Native;\nexport const toBase16 = !HAS_NATIVE_SUPPORT ? toBase16Polyfill : toBase16Native;\n","export const fromBase16 = (str: string): Uint8Array<ArrayBuffer> => {\n\treturn Uint8Array.fromHex(str) as Uint8Array<ArrayBuffer>;\n};\n\nexport const toBase16 = (bytes: Uint8Array): string => {\n\treturn bytes.toHex();\n};\n","// remove after September 2027\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array/toHex\n\nimport { createRfc4648Decode, createRfc4648Encode } from '../utils.ts';\n\nconst BASE16_CHARSET = '0123456789abcdef';\n\nexport const fromBase16: (str: string) => Uint8Array<ArrayBuffer> =\n\t/*#__PURE__*/ createRfc4648Decode(BASE16_CHARSET, 4, false);\nexport const toBase16: (bytes: Uint8Array) => string =\n\t/*#__PURE__*/ createRfc4648Encode(BASE16_CHARSET, 4, false);\n","import { alloc, allocUnsafe } from '@atcute/uint8array';\n\nexport const createRfc4648Encode = (alphabet: string, bitsPerChar: number, pad: boolean) => {\n\treturn (bytes: Uint8Array): string => {\n\t\tconst mask = (1 << bitsPerChar) - 1;\n\t\tlet str = '';\n\n\t\tlet bits = 0; // Number of bits currently in the buffer\n\t\tlet buffer = 0; // Bits waiting to be written out, MSB first\n\t\tfor (let i = 0; i < bytes.length; ++i) {\n\t\t\t// Slurp data into the buffer:\n\t\t\tbuffer = (buffer << 8) | bytes[i];\n\t\t\tbits += 8;\n\n\t\t\t// Write out as much as we can:\n\t\t\twhile (bits > bitsPerChar) {\n\t\t\t\tbits -= bitsPerChar;\n\t\t\t\tstr += alphabet[mask & (buffer >> bits)];\n\t\t\t}\n\t\t}\n\n\t\t// Partial character:\n\t\tif (bits !== 0) {\n\t\t\tstr += alphabet[mask & (buffer << (bitsPerChar - bits))];\n\t\t}\n\n\t\t// Add padding characters until we hit a byte boundary:\n\t\tif (pad) {\n\t\t\twhile (((str.length * bitsPerChar) & 7) !== 0) {\n\t\t\t\tstr += '=';\n\t\t\t}\n\t\t}\n\n\t\treturn str;\n\t};\n};\n\nexport const createRfc4648Decode = (alphabet: string, bitsPerChar: number, pad: boolean) => {\n\t// Build the character lookup table:\n\tconst codes: Record<string, number> = {};\n\tfor (let i = 0; i < alphabet.length; ++i) {\n\t\tcodes[alphabet[i]] = i;\n\t}\n\n\treturn (str: string): Uint8Array<ArrayBuffer> => {\n\t\t// Count the padding bytes:\n\t\tlet end = str.length;\n\t\twhile (pad && str[end - 1] === '=') {\n\t\t\t--end;\n\t\t}\n\n\t\t// Allocate the output:\n\t\tconst bytes = allocUnsafe(((end * bitsPerChar) / 8) | 0);\n\n\t\t// Parse the data:\n\t\tlet bits = 0; // Number of bits currently in the buffer\n\t\tlet buffer = 0; // Bits waiting to be written out, MSB first\n\t\tlet written = 0; // Next byte to write\n\t\tfor (let i = 0; i < end; ++i) {\n\t\t\t// Read one character from the string:\n\t\t\tconst value = codes[str[i]];\n\t\t\tif (value === undefined) {\n\t\t\t\tthrow new SyntaxError(`invalid base string`);\n\t\t\t}\n\n\t\t\t// Append the bits to the buffer:\n\t\t\tbuffer = (buffer << bitsPerChar) | value;\n\t\t\tbits += bitsPerChar;\n\n\t\t\t// Write out some bits if the buffer has a byte's worth:\n\t\t\tif (bits >= 8) {\n\t\t\t\tbits -= 8;\n\t\t\t\tbytes[written++] = 0xff & (buffer >> bits);\n\t\t\t}\n\t\t}\n\n\t\t// Verify that we have received just enough bits:\n\t\tif (bits >= bitsPerChar || (0xff & (buffer << (8 - bits))) !== 0) {\n\t\t\tthrow new SyntaxError('unexpected end of data');\n\t\t}\n\n\t\treturn bytes;\n\t};\n};\n\nexport const createBtcBaseEncode = (alphabet: string) => {\n\tif (alphabet.length >= 255) {\n\t\tthrow new RangeError(`alphabet too long`);\n\t}\n\n\tconst BASE = alphabet.length;\n\tconst LEADER = alphabet.charAt(0);\n\tconst iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n\n\treturn (source: Uint8Array): string => {\n\t\tif (source.length === 0) {\n\t\t\treturn '';\n\t\t}\n\n\t\t// Skip & count leading zeroes.\n\t\tlet zeroes = 0;\n\t\tlet length = 0;\n\t\tlet pbegin = 0;\n\t\tconst pend = source.length;\n\t\twhile (pbegin !== pend && source[pbegin] === 0) {\n\t\t\tpbegin++;\n\t\t\tzeroes++;\n\t\t}\n\n\t\t// Allocate enough space in big-endian base-N representation.\n\t\tconst dataLen = pend - pbegin;\n\t\tconst size = (dataLen * iFACTOR + 1) >>> 0;\n\t\tconst bN = alloc(size);\n\n\t\t// Process 3 source bytes at a time where possible.\n\t\t// multiplier: 256^3 = 16777216. max carry: 16777216 * (BASE-1) + (BASE-1).\n\t\t// for BASE=58: 16777216 * 57 = 956301312, well within 2^32 - 1.\n\t\t{\n\t\t\tconst rem = dataLen % 3;\n\t\t\tconst tripleEnd = pend - rem;\n\n\t\t\twhile (pbegin < tripleEnd) {\n\t\t\t\tlet carry = (source[pbegin] << 16) | (source[pbegin + 1] << 8) | source[pbegin + 2];\n\n\t\t\t\tlet i = 0;\n\t\t\t\tfor (let it1 = size - 1; (carry !== 0 || i < length) && it1 !== -1; it1--, i++) {\n\t\t\t\t\tcarry = carry + 16777216 * bN[it1];\n\t\t\t\t\tbN[it1] = (carry % BASE) | 0;\n\t\t\t\t\tcarry = (carry / BASE) | 0;\n\t\t\t\t}\n\n\t\t\t\tlength = i;\n\t\t\t\tpbegin += 3;\n\t\t\t}\n\t\t}\n\n\t\t// Process remaining 0-2 bytes one at a time.\n\t\twhile (pbegin !== pend) {\n\t\t\tlet carry = source[pbegin];\n\n\t\t\tlet i = 0;\n\t\t\tfor (let it1 = size - 1; (carry !== 0 || i < length) && it1 !== -1; it1--, i++) {\n\t\t\t\tcarry = carry + 256 * bN[it1];\n\t\t\t\tbN[it1] = (carry % BASE) | 0;\n\t\t\t\tcarry = (carry / BASE) | 0;\n\t\t\t}\n\n\t\t\tlength = i;\n\t\t\tpbegin++;\n\t\t}\n\n\t\t// Skip leading zeroes in base-N result.\n\t\tlet it2 = size - length;\n\t\twhile (it2 !== size && bN[it2] === 0) {\n\t\t\tit2++;\n\t\t}\n\n\t\t// Translate the result into a string.\n\t\tlet str = LEADER.repeat(zeroes);\n\t\tfor (; it2 < size; ++it2) {\n\t\t\tstr += alphabet.charAt(bN[it2]);\n\t\t}\n\n\t\treturn str;\n\t};\n};\n\nexport const createBtcBaseDecode = (alphabet: string) => {\n\tif (alphabet.length >= 255) {\n\t\tthrow new RangeError(`alphabet too long`);\n\t}\n\n\tconst BASE_MAP = new Uint8Array(128).fill(255);\n\tfor (let i = 0; i < alphabet.length; i++) {\n\t\tconst xc = alphabet.charCodeAt(i);\n\n\t\tif (xc >= 128) {\n\t\t\tthrow new RangeError(`non-ASCII character in alphabet`);\n\t\t}\n\t\tif (BASE_MAP[xc] !== 255) {\n\t\t\tthrow new RangeError(`${alphabet[i]} is ambiguous`);\n\t\t}\n\n\t\tBASE_MAP[xc] = i;\n\t}\n\n\tconst BASE = alphabet.length;\n\tconst BASE2 = BASE * BASE;\n\tconst LEADER = alphabet.charAt(0);\n\tconst FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n\n\treturn (source: string): Uint8Array<ArrayBuffer> => {\n\t\tif (source.length === 0) {\n\t\t\treturn allocUnsafe(0);\n\t\t}\n\n\t\t// Skip and count leading leader characters.\n\t\tlet psz = 0;\n\t\tlet zeroes = 0;\n\t\tlet length = 0;\n\n\t\twhile (source[psz] === LEADER) {\n\t\t\tzeroes++;\n\t\t\tpsz++;\n\t\t}\n\n\t\t// Allocate enough space in big-endian base256 representation.\n\t\tconst remaining = source.length - psz;\n\t\tconst size = (remaining * FACTOR + 1) >>> 0;\n\t\tconst b256 = alloc(size);\n\n\t\t// Process 2 source characters at a time where possible.\n\t\t// combined value: c0 * BASE + c1, multiplier: BASE^2.\n\t\t// max carry: BASE^2 * 255 + (BASE^2 - 1).\n\t\t// for BASE=58: 3364 * 255 + 3363 = 861183, well within safe integer range.\n\t\t{\n\t\t\tconst rem = remaining & 1;\n\t\t\tconst pairEnd = source.length - rem;\n\n\t\t\twhile (psz < pairEnd) {\n\t\t\t\tconst c0 = BASE_MAP[source.charCodeAt(psz)];\n\t\t\t\tconst c1 = BASE_MAP[source.charCodeAt(psz + 1)];\n\n\t\t\t\tif (c0 === 255 || c1 === 255) {\n\t\t\t\t\tthrow new Error(`invalid string`);\n\t\t\t\t}\n\n\t\t\t\tlet carry = c0 * BASE + c1;\n\n\t\t\t\tlet i = 0;\n\t\t\t\tfor (let it3 = size - 1; (carry !== 0 || i < length) && it3 !== -1; it3--, i++) {\n\t\t\t\t\tcarry += BASE2 * b256[it3];\n\t\t\t\t\tb256[it3] = carry & 0xff;\n\t\t\t\t\tcarry = (carry - (carry & 0xff)) / 256;\n\t\t\t\t}\n\t\t\t\tif (carry !== 0) {\n\t\t\t\t\tthrow new Error('non-zero carry');\n\t\t\t\t}\n\t\t\t\tlength = i;\n\t\t\t\tpsz += 2;\n\t\t\t}\n\t\t}\n\n\t\t// Process remaining character if odd count.\n\t\tif (psz < source.length) {\n\t\t\tlet carry = BASE_MAP[source.charCodeAt(psz)];\n\n\t\t\tif (carry === 255) {\n\t\t\t\tthrow new Error(`invalid string`);\n\t\t\t}\n\n\t\t\tlet i = 0;\n\t\t\tfor (let it3 = size - 1; (carry !== 0 || i < length) && it3 !== -1; it3--, i++) {\n\t\t\t\tcarry += BASE * b256[it3];\n\t\t\t\tb256[it3] = carry & 0xff;\n\t\t\t\tcarry = carry >>> 8;\n\t\t\t}\n\t\t\tif (carry !== 0) {\n\t\t\t\tthrow new Error('non-zero carry');\n\t\t\t}\n\t\t\tlength = i;\n\t\t}\n\n\t\t// Skip leading zeroes in b256.\n\t\tlet it4 = size - length;\n\t\twhile (it4 !== size && b256[it4] === 0) {\n\t\t\tit4++;\n\t\t}\n\n\t\tif (it4 === zeroes) {\n\t\t\treturn b256;\n\t\t}\n\n\t\tconst vch = allocUnsafe(zeroes + (size - it4));\n\t\tvch.fill(0, 0, zeroes);\n\t\tvch.set(b256.subarray(it4), zeroes);\n\n\t\treturn vch;\n\t};\n};\n","const textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\nconst subtle = crypto.subtle;\n\n/**\n * creates an Uint8Array of the requested size, with the contents zeroed\n */\nexport const alloc = (size: number): Uint8Array<ArrayBuffer> => {\n\treturn new Uint8Array(size);\n};\n\n/**\n * creates an Uint8Array of the requested size, where the contents may not be\n * zeroed out. only use if you're certain that the contents will be overwritten\n */\nexport const allocUnsafe = alloc;\n\n/**\n * compares two Uint8Array buffers\n */\nexport const compare = (a: Uint8Array, b: Uint8Array): number => {\n\tconst alen = a.length;\n\tconst blen = b.length;\n\n\tif (alen > blen) {\n\t\treturn 1;\n\t}\n\tif (alen < blen) {\n\t\treturn -1;\n\t}\n\n\tfor (let i = 0; i < alen; i++) {\n\t\tconst ax = a[i];\n\t\tconst bx = b[i];\n\n\t\tif (ax < bx) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tif (ax > bx) {\n\t\t\treturn 1;\n\t\t}\n\t}\n\n\treturn 0;\n};\n\n/**\n * checks if the two Uint8Array buffers are equal\n */\nexport const equals = (a: Uint8Array, b: Uint8Array): boolean => {\n\tif (a === b) {\n\t\treturn true;\n\t}\n\n\tlet len: number;\n\tif ((len = a.length) === b.length) {\n\t\twhile (len--) {\n\t\t\tif (a[len] !== b[len]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn len === -1;\n};\n\n/**\n * checks if the two Uint8Array buffers are equal, timing-safe version\n */\nexport const timingSafeEquals = (a: Uint8Array, b: Uint8Array): boolean => {\n\tlet len: number;\n\tlet out = 0;\n\tif ((len = a.length) === b.length) {\n\t\twhile (len--) {\n\t\t\tout |= a[len] ^ b[len];\n\t\t}\n\t}\n\n\treturn len === -1 && out === 0;\n};\n\n/**\n * concatenates multiple Uint8Array buffers into one\n */\nexport const concat = (arrays: Uint8Array[], size?: number): Uint8Array<ArrayBuffer> => {\n\tlet written = 0;\n\n\tlet len = arrays.length;\n\tlet idx: number;\n\n\tif (size === undefined) {\n\t\tfor (idx = size = 0; idx < len; idx++) {\n\t\t\tconst chunk = arrays[idx];\n\t\t\tsize += chunk.length;\n\t\t}\n\t}\n\n\tconst buffer = new Uint8Array(size);\n\n\tfor (idx = 0; idx < len; idx++) {\n\t\tconst chunk = arrays[idx];\n\n\t\tbuffer.set(chunk, written);\n\t\twritten += chunk.length;\n\t}\n\n\treturn buffer;\n};\n\n/**\n * encodes a UTF-8 string\n */\nexport const encodeUtf8 = (str: string): Uint8Array<ArrayBuffer> => {\n\treturn textEncoder.encode(str);\n};\n\n/**\n * encodes a UTF-8 string into a given buffer\n */\nexport const encodeUtf8Into = (to: Uint8Array, str: string, offset?: number, length?: number): number => {\n\tlet buffer: Uint8Array;\n\n\tif (offset === undefined) {\n\t\tbuffer = to;\n\t} else if (length === undefined) {\n\t\tbuffer = to.subarray(offset);\n\t} else {\n\t\tbuffer = to.subarray(offset, offset + length);\n\t}\n\n\tconst result = textEncoder.encodeInto(str, buffer);\n\n\treturn result.written;\n};\n\nconst _fromCharCode = String.fromCharCode;\n\n// fully unrolled short string decoder, inspired by cbor-x\n// returns null if non-ASCII byte encountered, signaling fallback to TextDecoder\nconst _shortString = (from: Uint8Array, p: number, length: number): string | null => {\n\tif (length < 4) {\n\t\tif (length < 2) {\n\t\t\tif (length === 0) return '';\n\t\t\tconst a = from[p];\n\t\t\tif (a & 0x80) return null;\n\t\t\treturn _fromCharCode(a);\n\t\t}\n\t\tconst a = from[p];\n\t\tconst b = from[p + 1];\n\t\tif ((a | b) & 0x80) return null;\n\t\tif (length === 2) return _fromCharCode(a, b);\n\t\tconst c = from[p + 2];\n\t\tif (c & 0x80) return null;\n\t\treturn _fromCharCode(a, b, c);\n\t}\n\tconst a = from[p];\n\tconst b = from[p + 1];\n\tconst c = from[p + 2];\n\tconst d = from[p + 3];\n\tif ((a | b | c | d) & 0x80) return null;\n\tif (length < 8) {\n\t\tif (length === 4) return _fromCharCode(a, b, c, d);\n\t\tconst e = from[p + 4];\n\t\tif (e & 0x80) return null;\n\t\tif (length === 5) return _fromCharCode(a, b, c, d, e);\n\t\tconst f = from[p + 5];\n\t\tif (f & 0x80) return null;\n\t\tif (length === 6) return _fromCharCode(a, b, c, d, e, f);\n\t\tconst g = from[p + 6];\n\t\tif (g & 0x80) return null;\n\t\treturn _fromCharCode(a, b, c, d, e, f, g);\n\t}\n\tconst e = from[p + 4];\n\tconst f = from[p + 5];\n\tconst g = from[p + 6];\n\tconst h = from[p + 7];\n\tif ((e | f | g | h) & 0x80) return null;\n\tif (length < 12) {\n\t\tif (length === 8) return _fromCharCode(a, b, c, d, e, f, g, h);\n\t\tconst i = from[p + 8];\n\t\tif (i & 0x80) return null;\n\t\tif (length === 9) return _fromCharCode(a, b, c, d, e, f, g, h, i);\n\t\tconst j = from[p + 9];\n\t\tif (j & 0x80) return null;\n\t\tif (length === 10) return _fromCharCode(a, b, c, d, e, f, g, h, i, j);\n\t\tconst k = from[p + 10];\n\t\tif (k & 0x80) return null;\n\t\treturn _fromCharCode(a, b, c, d, e, f, g, h, i, j, k);\n\t}\n\tconst i = from[p + 8];\n\tconst j = from[p + 9];\n\tconst k = from[p + 10];\n\tconst l = from[p + 11];\n\tif ((i | j | k | l) & 0x80) return null;\n\tif (length === 12) return _fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l);\n\tconst m = from[p + 12];\n\tif (m & 0x80) return null;\n\tif (length === 13) return _fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m);\n\tconst n = from[p + 13];\n\tif (n & 0x80) return null;\n\tif (length === 14) return _fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m, n);\n\tconst o = from[p + 14];\n\tif (o & 0x80) return null;\n\treturn _fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);\n};\n\n/**\n * decodes a UTF-8 string from a given buffer\n * @param from source buffer\n * @param offset byte offset to start reading from\n * @param length number of bytes to read\n * @returns decoded string\n */\nexport const decodeUtf8From = (\n\tfrom: Uint8Array,\n\toffset: number = 0,\n\tlength: number = from.length,\n): string => {\n\tif (length <= 15) {\n\t\tconst result = _shortString(from, offset, length);\n\t\tif (result !== null) return result;\n\t}\n\tif (offset === 0 && length === from.length) {\n\t\treturn textDecoder.decode(from);\n\t}\n\treturn textDecoder.decode(from.subarray(offset, offset + length));\n};\n\n/**\n * calculates the UTF-8 byte length of a string\n * @param str string to measure\n * @returns byte length when encoded as UTF-8\n */\nexport const getUtf8Length = (str: string): number => {\n\tconst len = str.length;\n\n\tlet u16pos = 0;\n\tlet u8pos = 0;\n\n\t// ASCII fast-path: batch process 4 chars at a time\n\twhile (u16pos + 3 < len) {\n\t\tconst a = str.charCodeAt(u16pos);\n\t\tconst b = str.charCodeAt(u16pos + 1);\n\t\tconst c = str.charCodeAt(u16pos + 2);\n\t\tconst d = str.charCodeAt(u16pos + 3);\n\n\t\tif ((a | b | c | d) >= 0x80) {\n\t\t\tbreak;\n\t\t}\n\n\t\tu16pos += 4;\n\t\tu8pos += 4;\n\t}\n\n\t// handle remaining chars\n\twhile (u16pos < len) {\n\t\tconst code = str.charCodeAt(u16pos);\n\n\t\tif (code < 0x80) {\n\t\t\tu16pos += 1;\n\t\t\tu8pos += 1;\n\t\t} else if (code < 0x800) {\n\t\t\tu16pos += 1;\n\t\t\tu8pos += 2;\n\t\t} else if (code < 0xd800 || code > 0xdbff) {\n\t\t\tu16pos += 1;\n\t\t\tu8pos += 3;\n\t\t} else {\n\t\t\tu16pos += 2;\n\t\t\tu8pos += 4;\n\t\t}\n\t}\n\n\treturn u8pos;\n};\n\n/**\n * checks if a string's UTF-8 byte length is within a given range.\n * includes early-exit optimization when exceeding max length.\n * @param str string to measure\n * @param min minimum byte length (inclusive)\n * @param max maximum byte length (inclusive)\n * @returns true if byte length is within [min, max]\n */\nexport const isUtf8LengthInRange = (str: string, min: number, max: number): boolean => {\n\tconst len = str.length;\n\n\t// fast path: if max possible UTF-8 length is below min, fail\n\tif (len * 3 < min) {\n\t\treturn false;\n\t}\n\n\t// fast path: if UTF-16 length satisfies min and max possible satisfies max\n\tif (len >= min && len * 3 <= max) {\n\t\treturn true;\n\t}\n\n\tlet u16pos = 0;\n\tlet u8pos = 0;\n\n\twhile (u16pos < len) {\n\t\tconst code = str.charCodeAt(u16pos);\n\n\t\tif (code < 0x80) {\n\t\t\tu16pos += 1;\n\t\t\tu8pos += 1;\n\t\t} else if (code < 0x800) {\n\t\t\tu16pos += 1;\n\t\t\tu8pos += 2;\n\t\t} else if (code < 0xd800 || code > 0xdbff) {\n\t\t\tu16pos += 1;\n\t\t\tu8pos += 3;\n\t\t} else {\n\t\t\tu16pos += 2;\n\t\t\tu8pos += 4;\n\t\t}\n\n\t\t// early exit once we exceed max\n\t\tif (u8pos > max) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn u8pos >= min;\n};\n\n/**\n * get a SHA-256 digest of this buffer\n */\nexport const toSha256 = async (buffer: Uint8Array<ArrayBuffer>): Promise<Uint8Array<ArrayBuffer>> => {\n\treturn new Uint8Array(await subtle.digest('SHA-256', buffer));\n};\n\n/**\n * generates cryptographically secure random bytes\n * @param size number of bytes to generate\n * @returns buffer filled with random bytes\n */\nexport const randomBytes = (size: number): Uint8Array<ArrayBuffer> => {\n\treturn crypto.getRandomValues(new Uint8Array(size));\n};\n","import {\n\tfromBase64 as fromBase64Native,\n\tfromBase64Pad as fromBase64PadNative,\n\tfromBase64Url as fromBase64UrlNative,\n\tfromBase64UrlPad as fromBase64UrlPadNative,\n\ttoBase64 as toBase64Native,\n\ttoBase64Pad as toBase64PadNative,\n\ttoBase64Url as toBase64UrlNative,\n\ttoBase64UrlPad as toBase64UrlPadNative,\n} from './base64-web-native.ts';\nimport {\n\tfromBase64Pad as fromBase64PadPolyfill,\n\tfromBase64 as fromBase64Polyfill,\n\tfromBase64UrlPad as fromBase64UrlPadPolyfill,\n\tfromBase64Url as fromBase64UrlPolyfill,\n\ttoBase64Pad as toBase64PadPolyfill,\n\ttoBase64 as toBase64Polyfill,\n\ttoBase64UrlPad as toBase64UrlPadPolyfill,\n\ttoBase64Url as toBase64UrlPolyfill,\n} from './base64-web-polyfill.ts';\n\nconst HAS_NATIVE_SUPPORT = 'fromBase64' in Uint8Array;\n\n// #region base64\nexport const fromBase64 = !HAS_NATIVE_SUPPORT ? fromBase64Polyfill : fromBase64Native;\nexport const toBase64 = !HAS_NATIVE_SUPPORT ? toBase64Polyfill : toBase64Native;\n// #endregion\n\n// #region base64pad\nexport const fromBase64Pad = !HAS_NATIVE_SUPPORT ? fromBase64PadPolyfill : fromBase64PadNative;\nexport const toBase64Pad = !HAS_NATIVE_SUPPORT ? toBase64PadPolyfill : toBase64PadNative;\n// #endregion\n\n// #region base64url\nexport const fromBase64Url = !HAS_NATIVE_SUPPORT ? fromBase64UrlPolyfill : fromBase64UrlNative;\nexport const toBase64Url = !HAS_NATIVE_SUPPORT ? toBase64UrlPolyfill : toBase64UrlNative;\n// #endregion\n\n// #region base64urlpad\nexport const fromBase64UrlPad = !HAS_NATIVE_SUPPORT ? fromBase64UrlPadPolyfill : fromBase64UrlPadNative;\nexport const toBase64UrlPad = !HAS_NATIVE_SUPPORT ? toBase64UrlPadPolyfill : toBase64UrlPadNative;\n// #endregion\n","// #region base64\nexport const fromBase64 = (str: string): Uint8Array<ArrayBuffer> => {\n\treturn Uint8Array.fromBase64(str, {\n\t\talphabet: 'base64',\n\t\tlastChunkHandling: 'loose',\n\t}) as Uint8Array<ArrayBuffer>;\n};\n\nexport const toBase64 = (bytes: Uint8Array): string => {\n\treturn bytes.toBase64({ alphabet: 'base64', omitPadding: true });\n};\n// #endregion\n\n// #region base64pad\nexport const fromBase64Pad = (str: string): Uint8Array<ArrayBuffer> => {\n\treturn Uint8Array.fromBase64(str, {\n\t\talphabet: 'base64',\n\t\tlastChunkHandling: 'strict',\n\t}) as Uint8Array<ArrayBuffer>;\n};\n\nexport const toBase64Pad = (bytes: Uint8Array): string => {\n\treturn bytes.toBase64({ alphabet: 'base64', omitPadding: false });\n};\n// #endregion\n\n// #region base64url\nexport const fromBase64Url = (str: string): Uint8Array<ArrayBuffer> => {\n\treturn Uint8Array.fromBase64(str, {\n\t\talphabet: 'base64url',\n\t\tlastChunkHandling: 'loose',\n\t}) as Uint8Array<ArrayBuffer>;\n};\n\nexport const toBase64Url = (bytes: Uint8Array): string => {\n\treturn bytes.toBase64({ alphabet: 'base64url', omitPadding: true });\n};\n// #endregion\n\n// #region base64urlpad\nexport const fromBase64UrlPad = (str: string): Uint8Array<ArrayBuffer> => {\n\treturn Uint8Array.fromBase64(str, {\n\t\talphabet: 'base64url',\n\t\tlastChunkHandling: 'strict',\n\t}) as Uint8Array<ArrayBuffer>;\n};\n\nexport const toBase64UrlPad = (bytes: Uint8Array): string => {\n\treturn bytes.toBase64({ alphabet: 'base64url', omitPadding: false });\n};\n// #endregion\n","// remove after September 2027\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array/toBase64\n\nimport { createRfc4648Decode, createRfc4648Encode } from '../utils.ts';\n\nconst BASE64_CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nconst BASE64URL_CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\n// #region base64\nexport const fromBase64: (str: string) => Uint8Array<ArrayBuffer> =\n\t/*#__PURE__*/ createRfc4648Decode(BASE64_CHARSET, 6, false);\nexport const toBase64: (bytes: Uint8Array) => string =\n\t/*#__PURE__*/ createRfc4648Encode(BASE64_CHARSET, 6, false);\n// #endregion\n\n// #region base64pad\nexport const fromBase64Pad: (str: string) => Uint8Array<ArrayBuffer> =\n\t/*#__PURE__*/ createRfc4648Decode(BASE64_CHARSET, 6, true);\nexport const toBase64Pad: (bytes: Uint8Array) => string =\n\t/*#__PURE__*/ createRfc4648Encode(BASE64_CHARSET, 6, true);\n// #endregion\n\n// #region base64url\nexport const fromBase64Url: (str: string) => Uint8Array<ArrayBuffer> =\n\t/*#__PURE__*/ createRfc4648Decode(BASE64URL_CHARSET, 6, false);\nexport const toBase64Url: (bytes: Uint8Array) => string =\n\t/*#__PURE__*/ createRfc4648Encode(BASE64URL_CHARSET, 6, false);\n// #endregion\n\n// #region base64urlpad\nexport const fromBase64UrlPad: (str: string) => Uint8Array<ArrayBuffer> =\n\t/*#__PURE__*/ createRfc4648Decode(BASE64URL_CHARSET, 6, true);\nexport const toBase64UrlPad: (bytes: Uint8Array) => string =\n\t/*#__PURE__*/ createRfc4648Encode(BASE64URL_CHARSET, 6, true);\n// #endregion\n","import { allocUnsafe } from '@atcute/uint8array';\n\nexport { toBase32 } from '#bases/base32-encode';\n\nconst ALPHABET = 'abcdefghijklmnopqrstuvwxyz234567';\n\n// #region decode\n\n// charCode -> 5-bit value lookup table, 0xff for invalid characters.\n// valid base32 chars: a-z (97-122) map to 0-25, 2-7 (50-55) map to 26-31.\nconst _decodeLut: Uint8Array = /*#__PURE__*/ (() => {\n\tconst t = new Uint8Array(128).fill(0xff);\n\tfor (let i = 0; i < 32; i++) {\n\t\tt[ALPHABET.charCodeAt(i)] = i;\n\t}\n\treturn t;\n})();\n\n/**\n * decodes an unpadded RFC 4648 base32 (lowercase) string to a Uint8Array\n * @param str base32 encoded string\n * @returns decoded buffer\n * @throws {SyntaxError} on invalid characters or malformed trailing bits\n */\nexport const fromBase32 = (str: string): Uint8Array<ArrayBuffer> => {\n\tconst end = str.length;\n\tconst bytes = allocUnsafe(((end * 5) / 8) | 0);\n\n\tlet written = 0;\n\tlet i = 0;\n\n\t// process 8-character groups (= 40 bits = 5 bytes each)\n\tconst fullGroups = end - (end % 8);\n\tfor (; i < fullGroups; i += 8) {\n\t\tconst c0 = _decodeLut[str.charCodeAt(i)];\n\t\tconst c1 = _decodeLut[str.charCodeAt(i + 1)];\n\t\tconst c2 = _decodeLut[str.charCodeAt(i + 2)];\n\t\tconst c3 = _decodeLut[str.charCodeAt(i + 3)];\n\t\tconst c4 = _decodeLut[str.charCodeAt(i + 4)];\n\t\tconst c5 = _decodeLut[str.charCodeAt(i + 5)];\n\t\tconst c6 = _decodeLut[str.charCodeAt(i + 6)];\n\t\tconst c7 = _decodeLut[str.charCodeAt(i + 7)];\n\n\t\t// valid base32 values are 0-31 (5 bits), so any value with bits\n\t\t// outside the low 5 means 0xff was in the mix\n\t\tif ((c0 | c1 | c2 | c3 | c4 | c5 | c6 | c7) & 0xe0) {\n\t\t\tthrow new SyntaxError(`invalid base string`);\n\t\t}\n\n\t\tbytes[written] = (c0 << 3) | (c1 >>> 2);\n\t\tbytes[written + 1] = ((c1 << 6) | (c2 << 1) | (c3 >>> 4)) & 0xff;\n\t\tbytes[written + 2] = ((c3 << 4) | (c4 >>> 1)) & 0xff;\n\t\tbytes[written + 3] = ((c4 << 7) | (c5 << 2) | (c6 >>> 3)) & 0xff;\n\t\tbytes[written + 4] = ((c6 << 5) | c7) & 0xff;\n\t\twritten += 5;\n\t}\n\n\t// handle remaining 1-7 characters\n\tif (i < end) {\n\t\tlet bits = 0;\n\t\tlet buffer = 0;\n\t\tfor (; i < end; ++i) {\n\t\t\tconst value = _decodeLut[str.charCodeAt(i)];\n\t\t\tif (value & 0xe0) {\n\t\t\t\tthrow new SyntaxError(`invalid base string`);\n\t\t\t}\n\t\t\tbuffer = (buffer << 5) | value;\n\t\t\tbits += 5;\n\t\t\tif (bits >= 8) {\n\t\t\t\tbits -= 8;\n\t\t\t\tbytes[written++] = 0xff & (buffer >> bits);\n\t\t\t}\n\t\t}\n\n\t\tif (bits >= 5 || (0xff & (buffer << (8 - bits))) !== 0) {\n\t\t\tthrow new SyntaxError(`unexpected end of data`);\n\t\t}\n\t}\n\n\treturn bytes;\n};\n\n// #endregion\n","const ALPHABET = 'abcdefghijklmnopqrstuvwxyz234567';\n\n// charCode lookup table: cc[i] = ALPHABET.charCodeAt(i) for i in 0..31\nconst _cc: Uint8Array = /*#__PURE__*/ (() => {\n\tconst t = new Uint8Array(32);\n\tfor (let i = 0; i < 32; i++) {\n\t\tt[i] = ALPHABET.charCodeAt(i);\n\t}\n\treturn t;\n})();\n\nconst _fromCharCode = String.fromCharCode;\n\n/**\n * encodes a Uint8Array to an unpadded RFC 4648 base32 (lowercase) string\n * @param bytes source buffer\n * @returns base32 encoded string\n */\nexport const toBase32 = (bytes: Uint8Array): string => {\n\tconst len = bytes.length;\n\tconst full = (len / 5) | 0;\n\tconst rem = len - full * 5;\n\tconst cc = _cc;\n\n\tlet str = '';\n\tlet ip = 0;\n\n\t// process pairs of 5-byte groups (10 bytes → 16 base32 chars) at a time,\n\t// batching into a single String.fromCharCode call for fewer string concats\n\tconst pairs = (full / 2) | 0;\n\tfor (let g = 0; g < pairs; g++) {\n\t\tconst a0 = bytes[ip],\n\t\t\ta1 = bytes[ip + 1],\n\t\t\ta2 = bytes[ip + 2],\n\t\t\ta3 = bytes[ip + 3],\n\t\t\ta4 = bytes[ip + 4];\n\t\tconst b0 = bytes[ip + 5],\n\t\t\tb1 = bytes[ip + 6],\n\t\t\tb2 = bytes[ip + 7],\n\t\t\tb3 = bytes[ip + 8],\n\t\t\tb4 = bytes[ip + 9];\n\n\t\tstr += _fromCharCode(\n\t\t\tcc[a0 >>> 3],\n\t\t\tcc[((a0 << 2) | (a1 >>> 6)) & 0x1f],\n\t\t\tcc[(a1 >>> 1) & 0x1f],\n\t\t\tcc[((a1 << 4) | (a2 >>> 4)) & 0x1f],\n\t\t\tcc[((a2 << 1) | (a3 >>> 7)) & 0x1f],\n\t\t\tcc[(a3 >>> 2) & 0x1f],\n\t\t\tcc[((a3 << 3) | (a4 >>> 5)) & 0x1f],\n\t\t\tcc[a4 & 0x1f],\n\t\t\tcc[b0 >>> 3],\n\t\t\tcc[((b0 << 2) | (b1 >>> 6)) & 0x1f],\n\t\t\tcc[(b1 >>> 1) & 0x1f],\n\t\t\tcc[((b1 << 4) | (b2 >>> 4)) & 0x1f],\n\t\t\tcc[((b2 << 1) | (b3 >>> 7)) & 0x1f],\n\t\t\tcc[(b3 >>> 2) & 0x1f],\n\t\t\tcc[((b3 << 3) | (b4 >>> 5)) & 0x1f],\n\t\t\tcc[b4 & 0x1f],\n\t\t);\n\t\tip += 10;\n\t}\n\n\t// remaining full group if odd count\n\tif (full & 1) {\n\t\tconst b0 = bytes[ip],\n\t\t\tb1 = bytes[ip + 1],\n\t\t\tb2 = bytes[ip + 2],\n\t\t\tb3 = bytes[ip + 3],\n\t\t\tb4 = bytes[ip + 4];\n\n\t\tstr += _fromCharCode(\n\t\t\tcc[b0 >>> 3],\n\t\t\tcc[((b0 << 2) | (b1 >>> 6)) & 0x1f],\n\t\t\tcc[(b1 >>> 1) & 0x1f],\n\t\t\tcc[((b1 << 4) | (b2 >>> 4)) & 0x1f],\n\t\t\tcc[((b2 << 1) | (b3 >>> 7)) & 0x1f],\n\t\t\tcc[(b3 >>> 2) & 0x1f],\n\t\t\tcc[((b3 << 3) | (b4 >>> 5)) & 0x1f],\n\t\t\tcc[b4 & 0x1f],\n\t\t);\n\t\tip += 5;\n\t}\n\n\t// handle remaining 1-4 bytes\n\tif (rem > 0) {\n\t\tlet buffer = 0;\n\t\tlet bits = 0;\n\t\tfor (let i = ip; i < len; i++) {\n\t\t\tbuffer = (buffer << 8) | bytes[i];\n\t\t\tbits += 8;\n\t\t}\n\t\twhile (bits >= 5) {\n\t\t\tbits -= 5;\n\t\t\tstr += _fromCharCode(cc[(buffer >>> bits) & 0x1f]);\n\t\t}\n\t\tif (bits > 0) {\n\t\t\tstr += _fromCharCode(cc[(buffer << (5 - bits)) & 0x1f]);\n\t\t}\n\t}\n\n\treturn str;\n};\n","import { createBtcBaseDecode, createBtcBaseEncode } from '../utils.ts';\n\nconst BASE58BTC_CHARSET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\n\nexport const fromBase58Btc: (source: string) => Uint8Array<ArrayBuffer> =\n\t/*#__PURE__*/ createBtcBaseDecode(BASE58BTC_CHARSET);\n\nexport const toBase58Btc: (source: Uint8Array) => string =\n\t/*#__PURE__*/ createBtcBaseEncode(BASE58BTC_CHARSET);\n","import type { SigningAlgorithm } from '../jwk/types.js';\n\nconst HASH_BY_ALG: Record<SigningAlgorithm, 'SHA-256' | 'SHA-384' | 'SHA-512'> = {\n\tES256: 'SHA-256',\n\tES384: 'SHA-384',\n\tES512: 'SHA-512',\n\tPS256: 'SHA-256',\n\tPS384: 'SHA-384',\n\tPS512: 'SHA-512',\n\tRS256: 'SHA-256',\n\tRS384: 'SHA-384',\n\tRS512: 'SHA-512',\n};\n\nconst CURVE_BY_ALG: Record<SigningAlgorithm, 'P-256' | 'P-384' | 'P-521' | null> = {\n\tES256: 'P-256',\n\tES384: 'P-384',\n\tES512: 'P-521',\n\tPS256: null,\n\tPS384: null,\n\tPS512: null,\n\tRS256: null,\n\tRS384: null,\n\tRS512: null,\n};\n\nexport const getHashName = (alg: SigningAlgorithm): 'SHA-256' | 'SHA-384' | 'SHA-512' => {\n\treturn HASH_BY_ALG[alg];\n};\n\nexport const getNamedCurve = (alg: SigningAlgorithm): 'P-256' | 'P-384' | 'P-521' | null => {\n\treturn CURVE_BY_ALG[alg];\n};\n\nexport const getSignAlgorithm = (alg: SigningAlgorithm): AlgorithmIdentifier | EcdsaParams | RsaPssParams => {\n\tif (alg.startsWith('ES')) {\n\t\treturn { name: 'ECDSA', hash: { name: getHashName(alg) } };\n\t}\n\tif (alg.startsWith('PS')) {\n\t\treturn {\n\t\t\tname: 'RSA-PSS',\n\t\t\thash: { name: getHashName(alg) },\n\t\t\tsaltLength: getHashLength(getHashName(alg)),\n\t\t};\n\t}\n\treturn { name: 'RSASSA-PKCS1-v1_5' };\n};\n\nexport const getImportAlgorithm = (\n\talg: SigningAlgorithm,\n\tcurve?: 'P-256' | 'P-384' | 'P-521',\n): EcKeyImportParams | RsaHashedImportParams => {\n\tif (alg.startsWith('ES')) {\n\t\tconst namedCurve = curve ?? getNamedCurve(alg);\n\t\tif (!namedCurve) {\n\t\t\tthrow new Error(`unable to determine curve for ${alg}`);\n\t\t}\n\t\treturn { name: 'ECDSA', namedCurve };\n\t}\n\n\tif (alg.startsWith('PS')) {\n\t\treturn { name: 'RSA-PSS', hash: { name: getHashName(alg) } };\n\t}\n\n\treturn { name: 'RSASSA-PKCS1-v1_5', hash: { name: getHashName(alg) } };\n};\n\nexport const getGenerateAlgorithm = (alg: SigningAlgorithm): EcKeyGenParams | RsaHashedKeyGenParams => {\n\tconst curve = getNamedCurve(alg);\n\tif (curve) {\n\t\treturn { name: 'ECDSA', namedCurve: curve };\n\t}\n\n\tconst hash = { name: getHashName(alg) };\n\treturn {\n\t\tname: alg.startsWith('PS') ? 'RSA-PSS' : 'RSASSA-PKCS1-v1_5',\n\t\thash,\n\t\tmodulusLength: 2048,\n\t\tpublicExponent: new Uint8Array([0x01, 0x00, 0x01]),\n\t};\n};\n\nconst getHashLength = (hash: 'SHA-256' | 'SHA-384' | 'SHA-512'): number => {\n\tswitch (hash) {\n\t\tcase 'SHA-256':\n\t\t\treturn 32;\n\t\tcase 'SHA-384':\n\t\t\treturn 48;\n\t\tcase 'SHA-512':\n\t\t\treturn 64;\n\t}\n};\n","import { fromBase64Url, toBase64Url } from '@atcute/multibase';\nimport { decodeUtf8From, encodeUtf8 } from '@atcute/uint8array';\n\nimport { getSignAlgorithm } from '../internal/crypto.js';\nimport type { SigningAlgorithm } from '../jwk/types.js';\n\n/**\n * signs a jwt using webcrypto.\n *\n * @param params signing parameters\n * @returns signed jwt\n */\nexport const signJwt = async (params: {\n\theader: Record<string, unknown>;\n\tpayload: Record<string, unknown>;\n\tkey: CryptoKey;\n\talg: SigningAlgorithm;\n}): Promise<string> => {\n\tconst { header, payload, key, alg } = params;\n\tconst fullHeader = { ...header, alg };\n\tconst headerSegment = encodeSegment(fullHeader);\n\tconst payloadSegment = encodeSegment(payload);\n\tconst signingInput = `${headerSegment}.${payloadSegment}`;\n\n\tconst signature = await crypto.subtle.sign(\n\t\tgetSignAlgorithm(alg),\n\t\tkey,\n\t\tencodeUtf8(signingInput) as Uint8Array<ArrayBuffer>,\n\t);\n\n\tconst signatureSegment = toBase64Url(new Uint8Array(signature));\n\n\treturn `${signingInput}.${signatureSegment}`;\n};\n\n/**\n * verifies a jwt and returns its payload.\n *\n * @param jwt jwt string\n * @param options verification options\n * @returns decoded payload\n */\nexport const verifyJwt = async (\n\tjwt: string,\n\toptions: { key: CryptoKey; alg: SigningAlgorithm; typ?: string },\n): Promise<Record<string, unknown>> => {\n\tconst { key, alg, typ } = options;\n\tconst parts = jwt.split('.');\n\tif (parts.length !== 3) {\n\t\tthrow new Error(`invalid jwt format`);\n\t}\n\n\tconst header = decodeSegment<Record<string, unknown>>(parts[0]);\n\tif (header.alg !== alg) {\n\t\tthrow new Error(`invalid jwt alg`);\n\t}\n\tif (typ && header.typ !== typ) {\n\t\tthrow new Error(`invalid jwt typ`);\n\t}\n\n\tconst payload = decodeSegment<Record<string, unknown>>(parts[1]);\n\tconst signature = fromBase64Url(parts[2]);\n\tconst signingInput = `${parts[0]}.${parts[1]}`;\n\n\tconst ok = await crypto.subtle.verify(\n\t\tgetSignAlgorithm(alg),\n\t\tkey,\n\t\tsignature,\n\t\tencodeUtf8(signingInput) as Uint8Array<ArrayBuffer>,\n\t);\n\n\tif (!ok) {\n\t\tthrow new Error(`invalid jwt signature`);\n\t}\n\n\treturn payload;\n};\n\nconst encodeSegment = (value: unknown): string => {\n\treturn toBase64Url(encodeUtf8(JSON.stringify(value)));\n};\n\nconst decodeSegment = <T>(value: string): T => {\n\tconst bytes = fromBase64Url(value);\n\treturn JSON.parse(decodeUtf8From(bytes)) as T;\n};\n","import { getGenerateAlgorithm } from '../internal/crypto.js';\nimport { exportPrivateJwkFromKey } from '../internal/jwk.js';\nimport { setCachedKeyMaterial } from '../internal/key-cache.js';\nimport type { SigningAlgorithm } from '../jwk/types.js';\n\nimport type { ClientAssertionPrivateJwk } from './types.js';\n\n/**\n * generates a new client assertion private key.\n *\n * @param kid key id to assign\n * @param alg signing algorithm (defaults to es256)\n * @returns client assertion private JWK (with cache pre-warmed)\n */\nexport const generateClientAssertionKey = async (\n\tkid: string,\n\talg: SigningAlgorithm = 'ES256',\n): Promise<ClientAssertionPrivateJwk> => {\n\tconst pair = await crypto.subtle.generateKey(getGenerateAlgorithm(alg), true, ['sign', 'verify']);\n\tconst jwk = (await exportPrivateJwkFromKey(pair.privateKey, alg, kid)) as ClientAssertionPrivateJwk;\n\n\t// pre-populate cache so we don't re-import\n\tsetCachedKeyMaterial(jwk, pair.privateKey);\n\n\treturn jwk;\n};\n","import { exportPrivateJwkFromKey, importPkcs8PrivateKey } from '../internal/jwk.js';\nimport { setCachedKeyMaterial } from '../internal/key-cache.js';\nimport type { SigningAlgorithm } from '../jwk/types.js';\n\nimport type { ClientAssertionPrivateJwk } from './types.js';\n\n/**\n * imports a client assertion private key from a pkcs8 pem string.\n *\n * @param pem pkcs8 pem string\n * @param options import options (kid + alg)\n * @returns client assertion private JWK (with cache pre-warmed)\n */\nexport const importClientAssertionPkcs8 = async (\n\tpem: string,\n\toptions: { kid: string; alg: SigningAlgorithm },\n): Promise<ClientAssertionPrivateJwk> => {\n\tconst { kid, alg } = options;\n\tconst cryptoKey = await importPkcs8PrivateKey(pem, alg);\n\tconst jwk = (await exportPrivateJwkFromKey(cryptoKey, alg, kid)) as ClientAssertionPrivateJwk;\n\n\t// pre-populate cache so we don't re-import\n\tsetCachedKeyMaterial(jwk, cryptoKey);\n\n\treturn jwk;\n};\n","export { createDpopFetch } from './fetch.js';\nexport { generateDpopKey } from './generate-key.js';\nexport { createDpopProofSigner } from './proof.js';\nexport type { DpopNonceCache, DpopPrivateJwk } from './types.js';\nexport {\n\tDpopVerifyError,\n\tverifyDpopProof,\n\ttype DpopClaims,\n\ttype DpopVerifyOptions,\n\ttype DpopVerifyResult,\n} from './verify.js';\n","import { sha256Base64Url } from '../hash/sha256.js';\n\nimport { createDpopProofSigner } from './proof.js';\nimport type { DpopPrivateJwk, DpopNonceCache } from './types.js';\n\nexport interface CreateDpopFetchOptions {\n\t/** DPoP private key (JWK with `alg` set) */\n\tkey: DpopPrivateJwk;\n\t/** nonce store, keyed by origin */\n\tnonces: DpopNonceCache;\n\t/** server's supported DPoP signing algorithms */\n\tsupportedAlgs?: readonly string[];\n\t/**\n\t * is the target an authorization server (true) or resource server (false)?\n\t * affects how `use_dpop_nonce` errors are detected.\n\t */\n\tisAuthServer?: boolean;\n\t/** custom fetch implementation */\n\tfetch?: typeof globalThis.fetch;\n}\n\n/**\n * creates a fetch wrapper that adds DPoP proofs to requests.\n *\n * @param options DPoP configuration\n * @returns fetch function with DPoP support\n */\nexport const createDpopFetch = (options: CreateDpopFetchOptions): typeof globalThis.fetch => {\n\tconst { key, nonces, supportedAlgs, isAuthServer, fetch = globalThis.fetch } = options;\n\n\tnegotiateAlg(key, supportedAlgs);\n\tconst sign = createDpopProofSigner(key);\n\n\treturn async (input, init) => {\n\t\tconst request: Request = init == null && input instanceof Request ? input : new Request(input, init);\n\n\t\tconst authHeader = request.headers.get('Authorization');\n\t\tconst ath = authHeader?.startsWith('DPoP ') ? await sha256Base64Url(authHeader.slice(5)) : undefined;\n\n\t\tconst { origin } = new URL(request.url);\n\t\tconst htm = request.method;\n\t\tconst htu = buildHtu(request.url);\n\n\t\tlet initNonce: string | undefined;\n\t\ttry {\n\t\t\tinitNonce = await nonces.get(origin);\n\t\t} catch {\n\t\t\t// ignore get errors\n\t\t}\n\n\t\tconst initProof = await sign(htm, htu, initNonce, ath);\n\t\trequest.headers.set('DPoP', initProof);\n\n\t\tconst initResponse = await fetch(request);\n\n\t\tconst nextNonce = initResponse.headers.get('DPoP-Nonce');\n\t\tif (!nextNonce || nextNonce === initNonce) {\n\t\t\treturn initResponse;\n\t\t}\n\n\t\ttry {\n\t\t\tawait nonces.set(origin, nextNonce);\n\t\t} catch {\n\t\t\t// ignore set errors\n\t\t}\n\n\t\tconst shouldRetry = await isUseDpopNonceError(initResponse, isAuthServer);\n\t\tif (!shouldRetry) {\n\t\t\treturn initResponse;\n\t\t}\n\n\t\tif (input === request || init?.body instanceof ReadableStream) {\n\t\t\treturn initResponse;\n\t\t}\n\n\t\tawait initResponse.body?.cancel();\n\n\t\tconst nextProof = await sign(htm, htu, nextNonce, ath);\n\t\tconst nextRequest = new Request(input, init);\n\t\tnextRequest.headers.set('DPoP', nextProof);\n\n\t\tconst retryResponse = await fetch(nextRequest);\n\n\t\tconst retryNonce = retryResponse.headers.get('DPoP-Nonce');\n\t\tif (retryNonce && retryNonce !== nextNonce) {\n\t\t\ttry {\n\t\t\t\tawait nonces.set(origin, retryNonce);\n\t\t\t} catch {\n\t\t\t\t// ignore set errors\n\t\t\t}\n\t\t}\n\n\t\treturn retryResponse;\n\t};\n};\n\nconst buildHtu = (url: string): string => {\n\tconst fragmentIdx = url.indexOf('#');\n\tconst queryIdx = url.indexOf('?');\n\tconst end = fragmentIdx === -1 ? queryIdx : queryIdx === -1 ? fragmentIdx : Math.min(fragmentIdx, queryIdx);\n\n\treturn end === -1 ? url : url.slice(0, end);\n};\n\nconst negotiateAlg = (key: DpopPrivateJwk, supportedAlgs?: readonly string[]): string => {\n\tconst keyAlg = key.alg;\n\n\tif (supportedAlgs?.length) {\n\t\tif (supportedAlgs.includes(keyAlg)) {\n\t\t\treturn keyAlg;\n\t\t}\n\t\tthrow new Error(`DPoP key algorithm ${keyAlg} not supported by server: ${supportedAlgs.join(', ')}`);\n\t}\n\n\treturn keyAlg;\n};\n\nconst isUseDpopNonceError = async (response: Response, isAuthServer?: boolean): Promise<boolean> => {\n\tif (isAuthServer === undefined || isAuthServer === false) {\n\t\tif (response.status === 401) {\n\t\t\tconst wwwAuth = response.headers.get('WWW-Authenticate');\n\t\t\tif (wwwAuth?.startsWith('DPoP')) {\n\t\t\t\treturn wwwAuth.includes('error=\"use_dpop_nonce\"');\n\t\t\t}\n\t\t}\n\t}\n\n\tif (isAuthServer === undefined || isAuthServer === true) {\n\t\tif (response.status === 400) {\n\t\t\ttry {\n\t\t\t\tconst json = await response.clone().json();\n\t\t\t\treturn typeof json === 'object' && json?.error === 'use_dpop_nonce';\n\t\t\t} catch {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false;\n};\n","import { toBase64Url } from '@atcute/multibase';\nimport { encodeUtf8, toSha256 } from '@atcute/uint8array';\n\n/**\n * computes sha-256 hash and returns base64url-encoded result.\n *\n * @param input string to hash\n * @returns base64url-encoded sha-256 hash\n */\nexport const sha256Base64Url = async (input: string): Promise<string> => {\n\tconst bytes = encodeUtf8(input);\n\tconst digest = await toSha256(bytes);\n\treturn toBase64Url(digest);\n};\n","import { nanoid } from 'nanoid';\n\nimport type { CachedKeyMaterial } from '../internal/key-cache.js';\nimport { getCachedKeyMaterial } from '../internal/key-cache.js';\nimport { signJwt } from '../jwt/index.js';\n\nimport type { DpopPrivateJwk } from './types.js';\n\n/**\n * creates a DPoP proof signer.\n *\n * @param jwk DPoP private JWK (with `alg` set)\n * @returns signing function for DPoP proofs\n */\nexport const createDpopProofSigner = (\n\tjwk: DpopPrivateJwk,\n): ((htm: string, htu: string, nonce?: string, ath?: string) => Promise<string>) => {\n\tconst alg = jwk.alg;\n\n\t// lazily resolve key material on first sign\n\tlet materialPromise: Promise<CachedKeyMaterial> | undefined;\n\n\treturn async (htm: string, htu: string, nonce?: string, ath?: string) => {\n\t\tmaterialPromise ||= getCachedKeyMaterial(jwk);\n\t\tconst { cryptoKey, publicJwk } = await materialPromise;\n\n\t\tconst now = Math.floor(Date.now() / 1_000);\n\n\t\treturn signJwt({\n\t\t\theader: {\n\t\t\t\ttyp: 'dpop+jwt',\n\t\t\t\tjwk: publicJwk,\n\t\t\t},\n\t\t\tpayload: {\n\t\t\t\thtm,\n\t\t\t\thtu,\n\t\t\t\tiat: now,\n\t\t\t\tjti: nanoid(24),\n\t\t\t\tnonce,\n\t\t\t\tath,\n\t\t\t},\n\t\t\tkey: cryptoKey,\n\t\t\talg,\n\t\t});\n\t};\n};\n","import { getGenerateAlgorithm } from '../internal/crypto.js';\nimport { exportPrivateJwkFromKey, isSigningAlgorithm } from '../internal/jwk.js';\nimport { setCachedKeyMaterial } from '../internal/key-cache.js';\nimport type { SigningAlgorithm } from '../jwk/types.js';\n\nimport type { DpopPrivateJwk } from './types.js';\n\n/**\n * preferred algorithm order for DPoP key generation.\n */\nconst PREFERRED_ALGORITHMS: readonly SigningAlgorithm[] = [\n\t'ES256',\n\t'ES384',\n\t'ES512',\n\t'PS256',\n\t'PS384',\n\t'PS512',\n\t'RS256',\n\t'RS384',\n\t'RS512',\n];\n\nconst sortAlgorithms = (algs: readonly SigningAlgorithm[]): SigningAlgorithm[] => {\n\treturn [...algs].sort((a, b) => {\n\t\tconst aIdx = PREFERRED_ALGORITHMS.indexOf(a);\n\t\tconst bIdx = PREFERRED_ALGORITHMS.indexOf(b);\n\n\t\tif (aIdx === -1 && bIdx === -1) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (aIdx === -1) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (bIdx === -1) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn aIdx - bIdx;\n\t});\n};\n\n/**\n * generates a new DPoP private JWK with `alg` set.\n *\n * @param supportedAlgs server supported algorithms (optional)\n * @returns private JWK (with cache pre-warmed)\n */\nexport const generateDpopKey = async (supportedAlgs?: readonly string[]): Promise<DpopPrivateJwk> => {\n\tconst normalized = supportedAlgs?.filter(isSigningAlgorithm) ?? [];\n\tif (supportedAlgs?.length && normalized.length === 0) {\n\t\tthrow new Error(`no supported algorithms provided`);\n\t}\n\n\tconst algs: SigningAlgorithm[] = normalized.length ? sortAlgorithms(normalized) : ['ES256'];\n\tconst errors: unknown[] = [];\n\n\tfor (const alg of algs) {\n\t\ttry {\n\t\t\tconst pair = await crypto.subtle.generateKey(getGenerateAlgorithm(alg), true, ['sign', 'verify']);\n\t\t\tconst jwk = (await exportPrivateJwkFromKey(pair.privateKey, alg)) as DpopPrivateJwk;\n\n\t\t\t// pre-populate cache so we don't re-import\n\t\t\tsetCachedKeyMaterial(jwk, pair.privateKey);\n\n\t\t\treturn jwk;\n\t\t} catch (err) {\n\t\t\terrors.push(err);\n\t\t}\n\t}\n\n\tthrow new AggregateError(errors, `failed to generate DPoP key for any of: ${algs.join(', ')}`);\n};\n","import { fromBase64Url } from '@atcute/multibase';\nimport { decodeUtf8From } from '@atcute/uint8array';\n\nimport * as v from '@badrap/valita';\n\nimport { getImportAlgorithm } from '../internal/crypto.js';\nimport { computeJktFromJwk } from '../jwk/compute-jkt.js';\nimport type { PublicJwk, SigningAlgorithm } from '../jwk/types.js';\nimport { verifyJwt } from '../jwt/index.js';\n\nimport type { Awaitable } from './types.js';\n\nconst dpopJwkSchema = v.union(\n\tv.object({\n\t\tkty: v.literal('EC'),\n\t\tcrv: v.union(v.literal('P-256'), v.literal('P-384'), v.literal('P-521')),\n\t\tx: v.string(),\n\t\ty: v.string(),\n\t}),\n\tv.object({\n\t\tkty: v.literal('RSA'),\n\t\te: v.string(),\n\t\tn: v.string(),\n\t}),\n);\n\nconst dpopHeaderSchema = v.object({\n\ttyp: v.literal('dpop+jwt'),\n\talg: v.string().assert((alg) => alg !== 'none', 'alg must not be \"none\"'),\n\tjwk: dpopJwkSchema,\n});\n\nconst dpopPayloadSchema = v.object({\n\thtm: v.string(),\n\thtu: v.string(),\n\tiat: v.number(),\n\tjti: v.string(),\n\tnonce: v.string().optional(),\n});\n\nexport type DpopClaims = v.Infer<typeof dpopPayloadSchema>;\ntype DpopJwk = v.Infer<typeof dpopJwkSchema>;\n\nexport interface DpopVerifyResult {\n\tclaims: DpopClaims;\n\tjkt: string;\n\tjwk: PublicJwk;\n}\n\nexport interface DpopVerifyOptions {\n\tmethod: string;\n\turl: string;\n\tnonce?: { check(nonce: string): Awaitable<boolean> };\n\tmaxClockSkew?: number;\n}\n\n/**\n * error thrown when dpop verification fails.\n */\nexport class DpopVerifyError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic code: 'missing' | 'invalid' | 'expired' | 'nonce_required',\n\t) {\n\t\tsuper(message);\n\t\tthis.name = 'DpopVerifyError';\n\t}\n}\n\n/**\n * verifies a dpop proof from a request header.\n *\n * @param dpopHeader dpop header value\n * @param options verification options\n * @returns verification result with claims and jwk thumbprint\n * @throws {DpopVerifyError} if verification fails\n */\nexport const verifyDpopProof = async (\n\tdpopHeader: string | null | undefined,\n\toptions: DpopVerifyOptions,\n): Promise<DpopVerifyResult> => {\n\tif (!dpopHeader) {\n\t\tthrow new DpopVerifyError(`missing dpop header`, 'missing');\n\t}\n\n\tconst { method, url, nonce: dpopNonce, maxClockSkew = 60 } = options;\n\tconst parts = dpopHeader.split('.');\n\tif (parts.length !== 3) {\n\t\tthrow new DpopVerifyError(`invalid dpop proof format`, 'invalid');\n\t}\n\n\tlet header: v.Infer<typeof dpopHeaderSchema>;\n\ttry {\n\t\theader = dpopHeaderSchema.parse(decodeSegment(parts[0]), { mode: 'passthrough' });\n\t} catch {\n\t\tthrow new DpopVerifyError(`invalid dpop header`, 'invalid');\n\t}\n\n\tconst { jwk, alg } = header;\n\tif (!isSigningAlgorithm(alg)) {\n\t\tthrow new DpopVerifyError(`unsupported dpop alg`, 'invalid');\n\t}\n\n\tlet payload: DpopClaims;\n\ttry {\n\t\tconst key = await importPublicKey(jwk, alg);\n\t\tconst raw = await verifyJwt(dpopHeader, { key, alg, typ: 'dpop+jwt' });\n\t\tpayload = dpopPayloadSchema.parse(raw, { mode: 'passthrough' });\n\t} catch (err) {\n\t\tif (err instanceof v.ValitaError) {\n\t\t\tthrow new DpopVerifyError(`invalid dpop payload`, 'invalid');\n\t\t}\n\t\tthrow new DpopVerifyError(`dpop signature verification failed`, 'invalid');\n\t}\n\n\tif (payload.htm !== method) {\n\t\tthrow new DpopVerifyError(`dpop htm mismatch: expected ${method}, got ${payload.htm}`, 'invalid');\n\t}\n\tif (payload.htu !== url) {\n\t\tthrow new DpopVerifyError(`dpop htu mismatch: expected ${url}, got ${payload.htu}`, 'invalid');\n\t}\n\n\tconst now = Math.floor(Date.now() / 1000);\n\tif (payload.iat > now + maxClockSkew) {\n\t\tthrow new DpopVerifyError(`dpop proof issued in the future`, 'invalid');\n\t}\n\tif (payload.iat < now - maxClockSkew) {\n\t\tthrow new DpopVerifyError(`dpop proof expired`, 'expired');\n\t}\n\n\tif (dpopNonce) {\n\t\tif (!payload.nonce || !(await dpopNonce.check(payload.nonce))) {\n\t\t\tthrow new DpopVerifyError(`invalid or missing dpop nonce`, 'nonce_required');\n\t\t}\n\t}\n\n\tconst jkt = await computeJktFromJwk(jwk as PublicJwk);\n\n\treturn { claims: payload, jwk: jwk as DpopJwk, jkt };\n};\n\nconst importPublicKey = async (jwk: PublicJwk, alg: SigningAlgorithm): Promise<CryptoKey> => {\n\tconst algorithm = getImportAlgorithm(alg, jwk.kty === 'EC' ? jwk.crv : undefined);\n\tconst key = await crypto.subtle.importKey('jwk', jwk, algorithm, true, ['verify']);\n\tif (!(key instanceof CryptoKey)) {\n\t\tthrow new Error(`expected asymmetric key, got symmetric`);\n\t}\n\n\treturn key;\n};\n\nconst isSigningAlgorithm = (alg: string): alg is SigningAlgorithm => {\n\treturn (\n\t\talg === 'ES256' ||\n\t\talg === 'ES384' ||\n\t\talg === 'ES512' ||\n\t\talg === 'PS256' ||\n\t\talg === 'PS384' ||\n\t\talg === 'PS512' ||\n\t\talg === 'RS256' ||\n\t\talg === 'RS384' ||\n\t\talg === 'RS512'\n\t);\n};\n\nconst decodeSegment = (segment: string): unknown => {\n\tconst bytes = fromBase64Url(segment);\n\treturn JSON.parse(decodeUtf8From(bytes));\n};\n","export * from \"./index.js\";\n","import { toBase64Url } from '@atcute/multibase';\nimport { encodeUtf8, toSha256 } from '@atcute/uint8array';\n\nimport type { PublicJwk } from './types.js';\n\n/**\n * computes the jwk thumbprint (rfc 7638) for a public key.\n *\n * @param jwk public jwk\n * @returns base64url-encoded sha-256 thumbprint\n */\nexport const computeJktFromJwk = async (jwk: PublicJwk): Promise<string> => {\n\tlet canonical: Record<string, string>;\n\n\tif (jwk.kty === 'EC') {\n\t\tconst { crv, x, y } = jwk;\n\t\tcanonical = { crv, kty: jwk.kty, x, y };\n\t} else {\n\t\tconst { e, n } = jwk;\n\t\tcanonical = { e, kty: jwk.kty, n };\n\t}\n\n\tconst serialized = JSON.stringify(canonical);\n\tconst hash = await toSha256(encodeUtf8(serialized));\n\n\treturn toBase64Url(hash);\n};\n","export { generatePkce } from './pkce.js';\nexport { sha256Base64Url } from './sha256.js';\n","import { nanoid } from 'nanoid';\n\nimport { sha256Base64Url } from './sha256.js';\n\n/**\n * generates pkce verifier and challenge (s256).\n *\n * @param length verifier length (43-128 per rfc 7636)\n * @returns pkce values\n */\nexport const generatePkce = async (\n\tlength = 64,\n): Promise<{ verifier: string; challenge: string; method: 'S256' }> => {\n\tconst verifier = nanoid(length);\n\tconst challenge = await sha256Base64Url(verifier);\n\n\treturn { verifier, challenge, method: 'S256' };\n};\n","export { computeJktFromJwk } from './compute-jkt.js';\nexport { derivePublicJwk } from '../internal/jwk.js';\nexport { exportPkcs8PrivateKey } from './keys.js';\nexport type {\n\tEcPrivateJwk,\n\tEcPublicJwk,\n\tPrivateJwk,\n\tPublicJwk,\n\tRsaPrivateJwk,\n\tRsaPublicJwk,\n\tSigningAlgorithm,\n} from './types.js';\n","import { exportPkcs8PrivateKey as exportPkcs8 } from '../internal/jwk.js';\nimport { getCachedKeyMaterial } from '../internal/key-cache.js';\n\nimport type { PrivateJwk } from './types.js';\n\n/**\n * exports a private JWK to PKCS8 PEM format.\n *\n * @param jwk private JWK to export\n * @returns PKCS8 PEM string\n */\nexport const exportPkcs8PrivateKey = async (jwk: PrivateJwk): Promise<string> => {\n\tconst { cryptoKey } = await getCachedKeyMaterial(jwk);\n\treturn exportPkcs8(cryptoKey);\n};\n","import type { ResolvedActor } from '@atcute/identity-resolver';\nimport type { ActorIdentifier } from '@atcute/lexicons';\nimport type { OAuthAuthorizationServerMetadata, OAuthProtectedResourceMetadata } from '@atcute/oauth-types';\n\nimport { identityResolver } from './environment.js';\nimport { ResolverError } from './errors.js';\nimport { extractContentType } from './utils/response.js';\nimport { isValidUrl } from './utils/strings.js';\n\nexport const resolveFromIdentifier = async (\n\tident: ActorIdentifier,\n): Promise<{ identity: ResolvedActor; metadata: OAuthAuthorizationServerMetadata }> => {\n\tconst identity = await identityResolver.resolve(ident);\n\n\treturn {\n\t\tidentity: identity,\n\t\tmetadata: await getMetadataFromResourceServer(identity.pds),\n\t};\n};\n\nexport const resolveFromService = async (\n\thost: string,\n): Promise<{ metadata: OAuthAuthorizationServerMetadata }> => {\n\ttry {\n\t\tconst metadata = await getMetadataFromResourceServer(host);\n\t\treturn { metadata };\n\t} catch (err) {\n\t\tif (err instanceof ResolverError) {\n\t\t\ttry {\n\t\t\t\tconst metadata = await getOAuthAuthorizationServerMetadata(host);\n\t\t\t\treturn { metadata };\n\t\t\t} catch {}\n\t\t}\n\n\t\tthrow err;\n\t}\n};\n\nconst getOAuthProtectedResourceMetadata = async (host: string): Promise<OAuthProtectedResourceMetadata> => {\n\tconst url = new URL(`/.well-known/oauth-protected-resource`, host);\n\tconst response = await fetch(url.href, {\n\t\tredirect: 'manual',\n\t\theaders: {\n\t\t\taccept: 'application/json',\n\t\t},\n\t});\n\n\tif (response.status !== 200 || extractContentType(response.headers) !== 'application/json') {\n\t\tthrow new ResolverError(`unexpected response`);\n\t}\n\n\tconst metadata = (await response.json()) as OAuthProtectedResourceMetadata;\n\tif (metadata.resource !== url.origin) {\n\t\tthrow new ResolverError(`unexpected issuer`);\n\t}\n\n\treturn metadata;\n};\n\nconst getOAuthAuthorizationServerMetadata = async (\n\thost: string,\n): Promise<OAuthAuthorizationServerMetadata> => {\n\tconst url = new URL(`/.well-known/oauth-authorization-server`, host);\n\tconst response = await fetch(url.href, {\n\t\tredirect: 'manual',\n\t\theaders: {\n\t\t\taccept: 'application/json',\n\t\t},\n\t});\n\n\tif (response.status !== 200 || extractContentType(response.headers) !== 'application/json') {\n\t\tthrow new ResolverError(`unexpected response`);\n\t}\n\n\tconst metadata = (await response.json()) as OAuthAuthorizationServerMetadata;\n\tif (metadata.issuer !== url.origin) {\n\t\tthrow new ResolverError(`unexpected issuer`);\n\t}\n\tif (!isValidUrl(metadata.authorization_endpoint)) {\n\t\tthrow new ResolverError(`authorization server provided incorrect authorization endpoint`);\n\t}\n\tif (!metadata.client_id_metadata_document_supported) {\n\t\tthrow new ResolverError(`authorization server does not support 'client_id_metadata_document'`);\n\t}\n\tif (!metadata.pushed_authorization_request_endpoint) {\n\t\tthrow new ResolverError(`authorization server does not support 'pushed_authorization request'`);\n\t}\n\tif (metadata.response_types_supported) {\n\t\tif (!metadata.response_types_supported.includes('code')) {\n\t\t\tthrow new ResolverError(`authorization server does not support 'code' response type`);\n\t\t}\n\t}\n\n\treturn metadata;\n};\n\nconst getMetadataFromResourceServer = async (input: string) => {\n\tconst rs_metadata = await getOAuthProtectedResourceMetadata(input);\n\n\tif (rs_metadata.authorization_servers?.length !== 1) {\n\t\tthrow new ResolverError(`expected exactly one authorization server in the listing`);\n\t}\n\n\tconst issuer = rs_metadata.authorization_servers[0];\n\n\tconst as_metadata = await getOAuthAuthorizationServerMetadata(issuer);\n\n\tif (as_metadata.protected_resources) {\n\t\tif (!as_metadata.protected_resources.includes(rs_metadata.resource)) {\n\t\t\tthrow new ResolverError(`server is not in authorization server's jurisdiction`);\n\t\t}\n\t}\n\n\treturn as_metadata;\n};\n","export const extractContentType = (headers: Headers): string | undefined => {\n\treturn headers.get('content-type')?.split(';')[0];\n};\n","const isUrlParseSupported = 'parse' in URL;\n\nexport const isValidUrl = (urlString: string): boolean => {\n\tlet url: URL | null = null;\n\tif (isUrlParseSupported) {\n\t\turl = URL.parse(urlString);\n\t} else {\n\t\ttry {\n\t\t\turl = new URL(urlString);\n\t\t} catch {}\n\t}\n\n\tif (url !== null) {\n\t\treturn url.protocol === 'https:' || url.protocol === 'http:';\n\t}\n\n\treturn false;\n};\n","import type { Did } from '@atcute/lexicons';\nimport { createDpopProofSigner, type DpopPrivateJwk } from '@atcute/oauth-crypto';\nimport type { AtprotoOAuthTokenResponse, OAuthParResponse } from '@atcute/oauth-types';\n\nimport { createDPoPFetch } from '../dpop.js';\nimport { CLIENT_ID, fetchClientAssertion, REDIRECT_URI } from '../environment.js';\nimport { FetchResponseError, OAuthResponseError, TokenRefreshError } from '../errors.js';\nimport { resolveFromIdentifier } from '../resolvers.js';\nimport type { PersistedAuthorizationServerMetadata } from '../types/server.js';\nimport type { ExchangeInfo, TokenInfo } from '../types/token.js';\nimport { pick } from '../utils/misc.js';\nimport { extractContentType } from '../utils/response.js';\n\nexport class OAuthServerAgent {\n\t#fetch: typeof fetch;\n\t#metadata: PersistedAuthorizationServerMetadata;\n\t#dpopKey: DpopPrivateJwk;\n\n\tconstructor(metadata: PersistedAuthorizationServerMetadata, dpopKey: DpopPrivateJwk) {\n\t\tthis.#metadata = metadata;\n\t\tthis.#dpopKey = dpopKey;\n\t\tthis.#fetch = createDPoPFetch(dpopKey, true);\n\t}\n\n\tasync request(\n\t\tendpoint: 'pushed_authorization_request',\n\t\tpayload: Record<string, unknown>,\n\t): Promise<OAuthParResponse>;\n\tasync request(endpoint: 'token', payload: Record<string, unknown>): Promise<AtprotoOAuthTokenResponse>;\n\tasync request(endpoint: 'revocation', payload: Record<string, unknown>): Promise<any>;\n\tasync request(endpoint: 'introspection', payload: Record<string, unknown>): Promise<any>;\n\tasync request(endpoint: string, payload: Record<string, unknown>): Promise<any> {\n\t\tconst url: string | undefined = (this.#metadata as any)[`${endpoint}_endpoint`];\n\t\tif (!url) {\n\t\t\tthrow new Error(`no endpoint for ${endpoint}`);\n\t\t}\n\n\t\tif (\n\t\t\t(endpoint === 'token' || endpoint === 'pushed_authorization_request') &&\n\t\t\tfetchClientAssertion !== undefined\n\t\t) {\n\t\t\tconst sign = createDpopProofSigner(this.#dpopKey);\n\n\t\t\tconst assertion = await fetchClientAssertion({\n\t\t\t\taud: this.#metadata.issuer,\n\t\t\t\tcreateDpopProof: async (url, nonce) => {\n\t\t\t\t\treturn await sign('POST', url, nonce, undefined);\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tpayload = { ...payload, ...assertion };\n\t\t}\n\n\t\tconst response = await this.#fetch(url, {\n\t\t\tmethod: 'post',\n\t\t\theaders: { 'content-type': 'application/json' },\n\t\t\tbody: JSON.stringify({ ...payload, client_id: CLIENT_ID }),\n\t\t});\n\n\t\tif (extractContentType(response.headers) !== 'application/json') {\n\t\t\tthrow new FetchResponseError(response, 2, `unexpected content-type`);\n\t\t}\n\n\t\tconst json = await response.json();\n\n\t\tif (response.ok) {\n\t\t\treturn json;\n\t\t} else {\n\t\t\tthrow new OAuthResponseError(response, json);\n\t\t}\n\t}\n\n\tasync revoke(token: string): Promise<void> {\n\t\ttry {\n\t\t\tawait this.request('revocation', { token: token });\n\t\t} catch {}\n\t}\n\n\tasync exchangeCode(code: string, verifier?: string): Promise<{ info: ExchangeInfo; token: TokenInfo }> {\n\t\tconst response = await this.request('token', {\n\t\t\tgrant_type: 'authorization_code',\n\t\t\tredirect_uri: REDIRECT_URI,\n\t\t\tcode: code,\n\t\t\tcode_verifier: verifier,\n\t\t});\n\n\t\ttry {\n\t\t\treturn await this.#processExchangeResponse(response);\n\t\t} catch (err) {\n\t\t\tawait this.revoke(response.access_token);\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync refresh({ sub, token }: { sub: Did; token: TokenInfo }): Promise<TokenInfo> {\n\t\tif (!token.refresh) {\n\t\t\tthrow new TokenRefreshError(sub, 'no refresh token available');\n\t\t}\n\n\t\tconst response = await this.request('token', {\n\t\t\tgrant_type: 'refresh_token',\n\t\t\trefresh_token: token.refresh,\n\t\t});\n\n\t\ttry {\n\t\t\tif (sub !== response.sub) {\n\t\t\t\tthrow new TokenRefreshError(sub, `sub mismatch in token response; got ${response.sub}`);\n\t\t\t}\n\n\t\t\treturn this.#processTokenResponse(response);\n\t\t} catch (err) {\n\t\t\tawait this.revoke(response.access_token);\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\t#processTokenResponse(res: AtprotoOAuthTokenResponse): TokenInfo {\n\t\tif (!res.sub) {\n\t\t\tthrow new TypeError(`missing sub field in token response`);\n\t\t}\n\t\tif (!res.scope) {\n\t\t\tthrow new TypeError(`missing scope field in token response`);\n\t\t}\n\t\tif (res.token_type !== 'DPoP') {\n\t\t\tthrow new TypeError(`token response returned a non-dpop token`);\n\t\t}\n\n\t\treturn {\n\t\t\tscope: res.scope,\n\t\t\trefresh: res.refresh_token,\n\t\t\taccess: res.access_token,\n\t\t\ttype: res.token_type,\n\t\t\texpires_at: typeof res.expires_in === 'number' ? Date.now() + res.expires_in * 1_000 : undefined,\n\t\t};\n\t}\n\n\tasync #processExchangeResponse(\n\t\tres: AtprotoOAuthTokenResponse,\n\t): Promise<{ info: ExchangeInfo; token: TokenInfo }> {\n\t\tconst sub = res.sub;\n\t\tif (!sub) {\n\t\t\tthrow new TypeError(`missing sub field in token response`);\n\t\t}\n\n\t\tconst token = this.#processTokenResponse(res);\n\t\tconst resolved = await resolveFromIdentifier(sub as Did);\n\n\t\tif (resolved.metadata.issuer !== this.#metadata.issuer) {\n\t\t\tthrow new TypeError(`issuer mismatch; got ${resolved.metadata.issuer}`);\n\t\t}\n\n\t\treturn {\n\t\t\ttoken: token,\n\t\t\tinfo: {\n\t\t\t\tsub: sub as Did,\n\t\t\t\taud: resolved.identity.pds,\n\t\t\t\tserver: pick(resolved.metadata, [\n\t\t\t\t\t'issuer',\n\t\t\t\t\t'authorization_endpoint',\n\t\t\t\t\t'introspection_endpoint',\n\t\t\t\t\t'pushed_authorization_request_endpoint',\n\t\t\t\t\t'revocation_endpoint',\n\t\t\t\t\t'token_endpoint',\n\t\t\t\t]),\n\t\t\t},\n\t\t};\n\t}\n}\n","import { createDpopProofSigner, sha256Base64Url, type DpopPrivateJwk } from '@atcute/oauth-crypto';\n\nimport { database } from './environment.js';\nimport { extractContentType } from './utils/response.js';\n\nexport const createDPoPFetch = (dpopKey: DpopPrivateJwk, isAuthServer?: boolean): typeof fetch => {\n\tconst nonces = database.dpopNonces;\n\tconst pending = database.inflightDpop;\n\n\tconst sign = createDpopProofSigner(dpopKey);\n\n\treturn async (input, init) => {\n\t\tconst request = new Request(input, init);\n\n\t\tconst authorizationHeader = request.headers.get('authorization');\n\t\tconst ath = authorizationHeader?.startsWith('DPoP ')\n\t\t\t? await sha256Base64Url(authorizationHeader.slice(5))\n\t\t\t: undefined;\n\n\t\tconst { method, url } = request;\n\t\tconst { origin, pathname } = new URL(url);\n\n\t\tconst htu = origin + pathname;\n\n\t\tlet deferred = pending.get(origin);\n\t\tif (deferred) {\n\t\t\tawait deferred.promise;\n\t\t\tdeferred = undefined;\n\t\t}\n\n\t\tlet initNonce: string | undefined;\n\t\tlet expiredOrMissing = false;\n\t\ttry {\n\t\t\tconst [nonce, lapsed] = nonces.getWithLapsed(origin);\n\n\t\t\tinitNonce = nonce;\n\t\t\texpiredOrMissing = lapsed > 3 * 60 * 1_000;\n\t\t} catch {\n\t\t\t// ignore read errors\n\t\t}\n\n\t\tif (expiredOrMissing) {\n\t\t\tpending.set(origin, (deferred = Promise.withResolvers()));\n\t\t}\n\n\t\tlet nextNonce: string | null;\n\t\ttry {\n\t\t\tconst initProof = await sign(method, htu, initNonce, ath);\n\t\t\trequest.headers.set('dpop', initProof);\n\n\t\t\tconst initResponse = await fetch(request);\n\n\t\t\tnextNonce = initResponse.headers.get('dpop-nonce');\n\t\t\tif (nextNonce === null || nextNonce === initNonce) {\n\t\t\t\treturn initResponse;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tnonces.set(origin, nextNonce);\n\t\t\t} catch {\n\t\t\t\t// ignore write errors\n\t\t\t}\n\n\t\t\tconst shouldRetry = await isUseDpopNonceError(initResponse, isAuthServer);\n\t\t\tif (!shouldRetry) {\n\t\t\t\treturn initResponse;\n\t\t\t}\n\n\t\t\tif (input === request || init?.body instanceof ReadableStream) {\n\t\t\t\treturn initResponse;\n\t\t\t}\n\t\t} finally {\n\t\t\tif (deferred) {\n\t\t\t\tpending.delete(origin);\n\t\t\t\tdeferred.resolve();\n\t\t\t}\n\t\t}\n\n\t\t{\n\t\t\tconst nextProof = await sign(method, htu, nextNonce, ath);\n\t\t\tconst nextRequest = new Request(input, init);\n\t\t\tnextRequest.headers.set('dpop', nextProof);\n\n\t\t\tconst retryResponse = await fetch(nextRequest);\n\n\t\t\tconst retryNonce = retryResponse.headers.get('dpop-nonce');\n\t\t\tif (retryNonce !== null && retryNonce !== nextNonce) {\n\t\t\t\ttry {\n\t\t\t\t\tnonces.set(origin, retryNonce);\n\t\t\t\t} catch {\n\t\t\t\t\t// ignore write errors\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn retryResponse;\n\t\t}\n\t};\n};\n\nconst isUseDpopNonceError = async (response: Response, isAuthServer?: boolean): Promise<boolean> => {\n\tif (isAuthServer === undefined || isAuthServer === false) {\n\t\tif (response.status === 401) {\n\t\t\tconst wwwAuth = response.headers.get('www-authenticate');\n\t\t\tif (wwwAuth?.startsWith('DPoP')) {\n\t\t\t\treturn wwwAuth.includes('error=\"use_dpop_nonce\"');\n\t\t\t}\n\t\t}\n\t}\n\n\tif (isAuthServer === undefined || isAuthServer === true) {\n\t\tif (response.status === 400 && extractContentType(response.headers) === 'application/json') {\n\t\t\ttry {\n\t\t\t\tconst json = await response.clone().json();\n\t\t\t\treturn typeof json === 'object' && json?.['error'] === 'use_dpop_nonce';\n\t\t\t} catch {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false;\n};\n","type UnwrapArray<T> = T extends (infer V)[] ? V : never;\n\nexport const pick = <T, K extends (keyof T)[]>(obj: T, keys: K): Pick<T, UnwrapArray<K>> => {\n\tconst cloned = {};\n\n\tfor (let idx = 0, len = keys.length; idx < len; idx++) {\n\t\tconst key = keys[idx];\n\n\t\t// @ts-expect-error\n\t\tcloned[key] = obj[key];\n\t}\n\n\treturn cloned as Pick<T, UnwrapArray<K>>;\n};\n","import type { Did } from '@atcute/lexicons';\n\nimport { database } from '../environment.js';\nimport { OAuthResponseError, TokenRefreshError } from '../errors.js';\nimport type { RawSession, Session } from '../types/token.js';\nimport { isLegacyDpopKey, migrateLegacyDpopKey } from '../utils/dpop-key.js';\nimport { locks } from '../utils/runtime.js';\n\nimport { OAuthServerAgent } from './server-agent.js';\n\nexport interface SessionGetOptions {\n\tsignal?: AbortSignal;\n\tnoCache?: boolean;\n\tallowStale?: boolean;\n}\n\ntype PendingItem<V> = Promise<{ value: V; isFresh: boolean }>;\nconst pending = new Map<Did, Promise<PendingItem<Session>>>();\n\nexport const getSession = async (sub: Did, options?: SessionGetOptions): Promise<Session> => {\n\toptions?.signal?.throwIfAborted();\n\n\tlet allowStored = isTokenUsable;\n\tif (options?.noCache) {\n\t\tallowStored = returnFalse;\n\t} else if (options?.allowStale) {\n\t\tallowStored = returnTrue;\n\t}\n\n\t// As long as concurrent requests are made for the same key, only one\n\t// request will be made to the cache & getter function at a time. This works\n\t// because there is no async operation between the while() loop and the\n\t// pending.set() call. Because of the \"single threaded\" nature of\n\t// JavaScript, the pending item will be set before the next iteration of the\n\t// while loop.\n\tlet previousExecutionFlow: Promise<PendingItem<Session>> | undefined;\n\twhile ((previousExecutionFlow = pending.get(sub))) {\n\t\ttry {\n\t\t\tconst { isFresh, value } = await previousExecutionFlow;\n\n\t\t\tif (isFresh || allowStored(value)) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Ignore errors from previous execution flows (they will have been\n\t\t\t// propagated by that flow).\n\t\t}\n\n\t\toptions?.signal?.throwIfAborted();\n\t}\n\n\tconst run = async (): Promise<PendingItem<Session>> => {\n\t\tconst storedSession = await migrateSessionIfNeeded(sub, database.sessions.get(sub));\n\n\t\tif (storedSession && allowStored(storedSession)) {\n\t\t\t// Use the stored value as return value for the current execution\n\t\t\t// flow. Notify other concurrent execution flows (that should be\n\t\t\t// \"stuck\" in the loop before until this promise resolves) that we got\n\t\t\t// a value, but that it came from the store (isFresh = false).\n\t\t\treturn { isFresh: false, value: storedSession };\n\t\t}\n\n\t\tconst newSession = await refreshToken(sub, storedSession);\n\n\t\tawait storeSession(sub, newSession);\n\t\treturn { isFresh: true, value: newSession };\n\t};\n\n\tlet promise: Promise<PendingItem<Session>>;\n\n\tif (locks) {\n\t\tpromise = locks.request<PendingItem<Session>>(`atcute-oauth:${sub}`, run as any);\n\t} else {\n\t\tpromise = run();\n\t}\n\n\tpromise = promise.finally(() => pending.delete(sub));\n\n\tif (pending.has(sub)) {\n\t\t// This should never happen. Indeed, there must not be any 'await'\n\t\t// statement between this and the loop iteration check meaning that\n\t\t// this.pending.get returned undefined. It is there to catch bugs that\n\t\t// would occur in future changes to the code.\n\t\tthrow new Error('concurrent request for the same key');\n\t}\n\n\tpending.set(sub, promise);\n\n\tconst { value } = await promise;\n\treturn value;\n};\n\nexport const storeSession = async (sub: Did, newSession: Session): Promise<void> => {\n\ttry {\n\t\tdatabase.sessions.set(sub, newSession);\n\t} catch (err) {\n\t\tawait onRefreshError(newSession);\n\t\tthrow err;\n\t}\n};\n\nexport const deleteStoredSession = (sub: Did): void => {\n\tdatabase.sessions.delete(sub);\n};\n\nexport const listStoredSessions = (): Did[] => {\n\treturn database.sessions.keys();\n};\n\nconst returnTrue = () => true;\nconst returnFalse = () => false;\n\nconst refreshToken = async (sub: Did, storedSession: Session | undefined): Promise<Session> => {\n\tif (storedSession === undefined) {\n\t\tthrow new TokenRefreshError(sub, `session deleted by another tab`);\n\t}\n\n\tconst { dpopKey, info, token } = storedSession;\n\tconst server = new OAuthServerAgent(info.server, dpopKey);\n\n\ttry {\n\t\tconst newToken = await server.refresh({ sub: info.sub, token });\n\n\t\treturn { dpopKey, info, token: newToken };\n\t} catch (cause) {\n\t\tif (cause instanceof OAuthResponseError && cause.status === 400 && cause.error === 'invalid_grant') {\n\t\t\tthrow new TokenRefreshError(sub, `session was revoked`, { cause });\n\t\t}\n\n\t\tthrow cause;\n\t}\n};\n\nconst onRefreshError = async ({ dpopKey, info, token }: Session) => {\n\t// If the token data cannot be stored, let's revoke it\n\tconst server = new OAuthServerAgent(info.server, dpopKey);\n\tawait server.revoke(token.refresh ?? token.access);\n};\n\nconst isTokenUsable = ({ token }: Session): boolean => {\n\tconst expires = token.expires_at;\n\treturn expires == null || Date.now() + 60_000 <= expires;\n};\n\nconst migrateSessionIfNeeded = async (\n\tsub: Did,\n\tsession: RawSession | undefined,\n): Promise<Session | undefined> => {\n\tif (!session || !isLegacyDpopKey(session.dpopKey)) {\n\t\treturn session as Session | undefined;\n\t}\n\n\tconst dpopKey = await migrateLegacyDpopKey(session.dpopKey);\n\tconst migrated = { ...session, dpopKey };\n\n\ttry {\n\t\tdatabase.sessions.set(sub, migrated);\n\t} catch {\n\t\t// ignore persistence errors\n\t}\n\n\treturn migrated;\n};\n","import { fromBase64Url } from '@atcute/multibase';\nimport type { DpopPrivateJwk } from '@atcute/oauth-crypto';\n\nexport interface LegacyDpopKey {\n\ttyp: 'ES256';\n\tkey: string;\n\tjwt: string;\n\tjkt?: string;\n}\n\nconst ES256_ALG = { name: 'ECDSA', namedCurve: 'P-256' } as const;\n\nexport const isLegacyDpopKey = (key: DpopPrivateJwk | LegacyDpopKey): key is LegacyDpopKey => {\n\treturn typeof (key as LegacyDpopKey).key === 'string' && typeof (key as LegacyDpopKey).jwt === 'string';\n};\n\nexport const migrateLegacyDpopKey = async (key: LegacyDpopKey): Promise<DpopPrivateJwk> => {\n\tconst pkcs8 = fromBase64Url(key.key);\n\tconst cryptoKey = await crypto.subtle.importKey('pkcs8', pkcs8, ES256_ALG, true, ['sign']);\n\tconst jwk = (await crypto.subtle.exportKey('jwk', cryptoKey)) as DpopPrivateJwk;\n\tjwk.alg = 'ES256';\n\n\treturn jwk;\n};\n","import type { FetchHandlerObject } from '@atcute/client';\nimport type { Did } from '@atcute/lexicons';\n\nimport { createDPoPFetch } from '../dpop.js';\nimport type { Session } from '../types/token.js';\n\nimport { OAuthServerAgent } from './server-agent.js';\nimport { type SessionGetOptions, deleteStoredSession, getSession } from './sessions.js';\n\nexport class OAuthUserAgent implements FetchHandlerObject {\n\t#fetch: typeof fetch;\n\t#getSessionPromise: Promise<Session> | undefined;\n\n\tconstructor(public session: Session) {\n\t\tthis.#fetch = createDPoPFetch(session.dpopKey, false);\n\t}\n\n\tget sub(): Did {\n\t\treturn this.session.info.sub;\n\t}\n\n\tgetSession(options?: SessionGetOptions): Promise<Session> {\n\t\tconst promise = getSession(this.session.info.sub, options);\n\n\t\tpromise\n\t\t\t.then((session) => {\n\t\t\t\tthis.session = session;\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tthis.#getSessionPromise = undefined;\n\t\t\t});\n\n\t\treturn (this.#getSessionPromise = promise);\n\t}\n\n\tasync signOut(): Promise<void> {\n\t\tconst sub = this.session.info.sub;\n\n\t\ttry {\n\t\t\tconst { dpopKey, info, token } = await getSession(sub, { allowStale: true });\n\t\t\tconst server = new OAuthServerAgent(info.server, dpopKey);\n\n\t\t\tawait server.revoke(token.refresh ?? token.access);\n\t\t} finally {\n\t\t\tdeleteStoredSession(sub);\n\t\t}\n\t}\n\n\tasync handle(pathname: string, init?: RequestInit): Promise<Response> {\n\t\tawait this.#getSessionPromise;\n\n\t\tconst headers = new Headers(init?.headers);\n\n\t\tlet session = this.session;\n\t\tlet url = new URL(pathname, session.info.aud);\n\n\t\theaders.set('authorization', `${session.token.type} ${session.token.access}`);\n\n\t\tlet response = await this.#fetch(url.href, { ...init, headers });\n\t\tif (!isInvalidTokenResponse(response)) {\n\t\t\treturn response;\n\t\t}\n\n\t\ttry {\n\t\t\tif (this.#getSessionPromise) {\n\t\t\t\tsession = await this.#getSessionPromise;\n\t\t\t} else {\n\t\t\t\tsession = await this.getSession();\n\t\t\t}\n\t\t} catch {\n\t\t\treturn response;\n\t\t}\n\n\t\t// Stream already consumed, can't retry.\n\t\tif (init?.body instanceof ReadableStream) {\n\t\t\treturn response;\n\t\t}\n\n\t\turl = new URL(pathname, session.info.aud);\n\t\theaders.set('authorization', `${session.token.type} ${session.token.access}`);\n\n\t\treturn await this.#fetch(url.href, { ...init, headers });\n\t}\n}\n\nconst isInvalidTokenResponse = (response: Response) => {\n\tif (response.status !== 401) {\n\t\treturn false;\n\t}\n\n\tconst auth = response.headers.get('www-authenticate');\n\n\treturn (\n\t\tauth != null &&\n\t\t(auth.startsWith('Bearer ') || auth.startsWith('DPoP ')) &&\n\t\tauth.includes('error=\"invalid_token\"')\n\t);\n};\n","export * from './actor/local.js';\n\nexport * from './did/composite.js';\nexport * from './did/methods/plc.js';\nexport * from './did/methods/web.js';\nexport * from './did/methods/xrpc.js';\n\nexport * from './handle/composite.js';\nexport * from './handle/methods/doh-json.js';\nexport * from './handle/methods/well-known.js';\nexport * from './handle/methods/xrpc.js';\n\nexport * from './errors.js';\nexport * from './types.js';\n","import { getAtprotoHandle, getPdsEndpoint } from '@atcute/identity';\nimport { isDid, type ActorIdentifier, type Did, type Handle } from '@atcute/lexicons/syntax';\n\nimport { ActorResolutionError } from '../errors.js';\nimport type {\n\tActorResolver,\n\tDidDocumentResolver,\n\tHandleResolver,\n\tResolveActorOptions,\n\tResolvedActor,\n} from '../types.js';\n\nexport interface LocalActorResolverOptions {\n\thandleResolver: HandleResolver;\n\tdidDocumentResolver: DidDocumentResolver;\n}\n\nexport class LocalActorResolver implements ActorResolver {\n\thandleResolver: HandleResolver;\n\tdidDocumentResolver: DidDocumentResolver;\n\n\tconstructor(options: LocalActorResolverOptions) {\n\t\tthis.handleResolver = options.handleResolver;\n\t\tthis.didDocumentResolver = options.didDocumentResolver;\n\t}\n\n\tasync resolve(actor: ActorIdentifier, options?: ResolveActorOptions): Promise<ResolvedActor> {\n\t\tconst identifierIsDid = isDid(actor);\n\n\t\tlet did: Did;\n\t\tif (identifierIsDid) {\n\t\t\tdid = actor as Did;\n\t\t} else {\n\t\t\ttry {\n\t\t\t\tdid = await this.handleResolver.resolve(actor as Handle, options);\n\t\t\t} catch (err) {\n\t\t\t\tthrow new ActorResolutionError(`failed to resolve handle`, { cause: err });\n\t\t\t}\n\t\t}\n\n\t\tlet doc;\n\t\ttry {\n\t\t\tdoc = await this.didDocumentResolver.resolve(did, options);\n\t\t} catch (err) {\n\t\t\tthrow new ActorResolutionError(`failed to resolve did document`, { cause: err });\n\t\t}\n\n\t\tconst pds = getPdsEndpoint(doc);\n\t\tif (!pds) {\n\t\t\tthrow new ActorResolutionError(`missing pds endpoint`);\n\t\t}\n\n\t\tlet handle: Handle = 'handle.invalid';\n\t\tif (identifierIsDid) {\n\t\t\tconst writtenHandle = getAtprotoHandle(doc);\n\t\t\tif (writtenHandle) {\n\t\t\t\ttry {\n\t\t\t\t\tconst resolved = await this.handleResolver.resolve(writtenHandle, options);\n\n\t\t\t\t\tif (resolved === did) {\n\t\t\t\t\t\thandle = writtenHandle;\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t} else if (getAtprotoHandle(doc) === actor) {\n\t\t\thandle = actor as Handle;\n\t\t}\n\n\t\treturn {\n\t\t\tdid: did,\n\t\t\thandle: handle,\n\t\t\tpds: new URL(pds).href,\n\t\t};\n\t}\n}\n","export * as defs from './typedefs.js';\nexport * from './types.js';\n\nexport * from './utils.js';\n\nexport * from './did.js';\nexport * from './methods/key.js';\nexport * from './methods/plc.js';\nexport * from './methods/web.js';\n","import * as v from '@badrap/valita';\n\nimport { isDid } from '@atcute/lexicons/syntax';\n\nimport * as t from './types.js';\n\n/** @deprecated */\nexport const FRAGMENT_RE = /^#[^#]+$/;\n/** @deprecated */\nexport const MULTIBASE_RE = /^z[a-km-zA-HJ-NP-Z1-9]+$/;\n\nexport const rfc3968UriSchema = v.string().assert((input) => {\n\treturn URL.canParse(input);\n}, `must be a url`);\n\nexport const didRelativeUri = v.string().assert((input) => {\n\treturn FRAGMENT_RE.test(input) || URL.canParse(input);\n}, `must be a did relative uri`);\n\nexport const multibaseString = v.string().assert((input) => {\n\treturn MULTIBASE_RE.test(input);\n}, `must be a base58 multibase`);\n\nexport const didString = v.string().assert(isDid, `must be a did`);\n\nexport const verificationMethod: v.Type<t.VerificationMethod> = v\n\t.object({\n\t\tid: didRelativeUri,\n\t\ttype: v.string(),\n\t\tcontroller: didString,\n\t\tpublicKeyMultibase: multibaseString.optional(),\n\t\tpublicKeyJwk: v.record().optional(),\n\t})\n\t.chain((input) => {\n\t\tswitch (input.type) {\n\t\t\tcase 'Multikey': {\n\t\t\t\tif (input.publicKeyMultibase === undefined) {\n\t\t\t\t\treturn v.err({ message: `missing multikey`, path: ['publicKeyMultibase'] });\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'EcdsaSecp256k1VerificationKey2019':\n\t\t\tcase 'EcdsaSecp256r1VerificationKey2019': {\n\t\t\t\tif (input.publicKeyMultibase === undefined) {\n\t\t\t\t\treturn v.err({ message: `missing multibase key`, path: ['publicKeyMultibase'] });\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn v.ok(input);\n\t});\n\nexport const service: v.Type<t.Service> = v.object({\n\t// should've only been RFC3968, but did:plc uses relative URIs.\n\tid: didRelativeUri,\n\ttype: v.union(v.string(), v.array(v.string())),\n\tserviceEndpoint: v.union(\n\t\trfc3968UriSchema,\n\t\tv.record(rfc3968UriSchema),\n\t\tv.array(v.union(rfc3968UriSchema, v.record(rfc3968UriSchema))),\n\t),\n});\n\nexport const didDocument: v.Type<t.DidDocument> = v\n\t.object({\n\t\t'@context': v.array(rfc3968UriSchema),\n\n\t\tid: didString,\n\n\t\talsoKnownAs: v\n\t\t\t.array(rfc3968UriSchema)\n\t\t\t.chain((input) => {\n\t\t\t\tfor (let i = 0, len = input.length; i < len; i++) {\n\t\t\t\t\tconst aka = input[i];\n\n\t\t\t\t\tfor (let j = 0; j < i; j++) {\n\t\t\t\t\t\tif (aka === input[j]) {\n\t\t\t\t\t\t\treturn v.err({\n\t\t\t\t\t\t\t\tmessage: `duplicate \"${aka}\" aka entry`,\n\t\t\t\t\t\t\t\tpath: [i],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn v.ok(input);\n\t\t\t})\n\t\t\t.optional(),\n\t\tverificationMethod: v\n\t\t\t.array(verificationMethod)\n\t\t\t.chain((input) => {\n\t\t\t\tfor (let i = 0, len = input.length; i < len; i++) {\n\t\t\t\t\tconst method = input[i];\n\t\t\t\t\tconst methodId = method.id;\n\n\t\t\t\t\tfor (let j = 0; j < i; j++) {\n\t\t\t\t\t\tif (methodId === input[j].id) {\n\t\t\t\t\t\t\treturn v.err({\n\t\t\t\t\t\t\t\tmessage: `duplicate \"${methodId}\" verification method`,\n\t\t\t\t\t\t\t\tpath: [i, 'id'],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn v.ok(input);\n\t\t\t})\n\t\t\t.optional(),\n\t\tservice: v.array(service).optional(),\n\n\t\tcontroller: v.union(didString, v.array(didString)).optional(),\n\t\tauthentication: v.array(v.union(didRelativeUri, verificationMethod)).optional(),\n\t})\n\t.chain((input) => {\n\t\tconst { id: did, service: services } = input;\n\n\t\tif (services?.length) {\n\t\t\tconst len = services.length;\n\t\t\tconst identifiers = new Array(len);\n\n\t\t\tfor (let i = 0; i < len; i++) {\n\t\t\t\tconst service = services[i];\n\n\t\t\t\tlet id = service.id;\n\t\t\t\tif (id[0] === '#') {\n\t\t\t\t\tid = did + id;\n\t\t\t\t}\n\n\t\t\t\tidentifiers[i] = id;\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < len; i++) {\n\t\t\t\tconst id = identifiers[i];\n\n\t\t\t\tfor (let j = 0; j < i; j++) {\n\t\t\t\t\tif (id === identifiers[j]) {\n\t\t\t\t\t\treturn v.err({\n\t\t\t\t\t\t\tmessage: `duplicate \"${id}\" service`,\n\t\t\t\t\t\t\tpath: ['service', i, 'id'],\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn v.ok(input);\n\t});\n","export * from './at-identifier.ts';\nexport * from './at-uri.ts';\nexport * from './cid.ts';\nexport * from './datetime.ts';\nexport * from './did.ts';\nexport * from './handle.ts';\nexport * from './language.ts';\nexport * from './nsid.ts';\nexport * from './record-key.ts';\nexport * from './tid.ts';\nexport * from './uri.ts';\n","import { isDid, type Did } from './did.ts';\nimport { isHandle, type Handle } from './handle.ts';\n\n/**\n * represents an account's identifier, either a {@link Did} or a\n * {@link Handle}\n */\nexport type ActorIdentifier = Did | Handle;\n\n// #__NO_SIDE_EFFECTS__\nexport const isActorIdentifier = (input: unknown): input is ActorIdentifier => {\n\treturn isDid(input) || isHandle(input);\n};\n","/**\n * represents a decentralized identifier (DID).\n */\nexport type Did<Method extends string = string> = `did:${Method}:${string}`;\n\n/**\n * represents a decentralized identifier with methods supported in atproto\n */\nexport type AtprotoDid = Did<'plc' | 'web'>;\n\nexport type AtprotoAudience = `${AtprotoDid}#${string}`;\n\nconst DID_RE = /^did:([a-z]+):([a-zA-Z0-9._:%-]*[a-zA-Z0-9._-])$/;\n\n// #__NO_SIDE_EFFECTS__\nexport const isDid = (input: unknown): input is Did => {\n\treturn typeof input === 'string' && input.length >= 7 && input.length <= 2048 && DID_RE.test(input);\n};\n","import { isAsciiAlpha, isAsciiAlphaNum } from './utils/ascii.ts';\n\n/**\n * represents an account's handle, using domains as a human-friendly\n * identifier.\n */\nexport type Handle = `${string}.${string}`;\n\n// validates a domain label: starts/ends with alphanumeric, middle allows hyphens, max 63 chars\nconst isValidLabel = (input: string, start: number, end: number): boolean => {\n\tconst len = end - start;\n\tif (len === 0 || len > 63) {\n\t\treturn false;\n\t}\n\n\tconst first = input.charCodeAt(start);\n\tif (!isAsciiAlphaNum(first)) {\n\t\treturn false;\n\t}\n\n\tif (len > 1) {\n\t\tif (!isAsciiAlphaNum(input.charCodeAt(end - 1))) return false;\n\t\tfor (let j = start + 1; j < end - 1; j++) {\n\t\t\tconst c = input.charCodeAt(j);\n\t\t\tif (!isAsciiAlphaNum(c) && c !== 0x2d) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true;\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const isHandle = (input: unknown): input is Handle => {\n\tif (typeof input !== 'string') {\n\t\treturn false;\n\t}\n\n\tconst len = input.length;\n\tif (len < 3 || len > 253) {\n\t\treturn false;\n\t}\n\n\tlet labelStart = 0;\n\tlet labelCount = 0;\n\tlet lastLabelStart = 0;\n\n\tfor (let i = 0; i <= len; i++) {\n\t\tif (i === len || input.charCodeAt(i) === 0x2e) {\n\t\t\tif (!isValidLabel(input, labelStart, i)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tlastLabelStart = labelStart;\n\t\t\tlabelStart = i + 1;\n\t\t\tlabelCount++;\n\t\t}\n\t}\n\n\t// need at least 2 labels (one dot)\n\tif (labelCount < 2) {\n\t\treturn false;\n\t}\n\n\t// TLD must start with a letter\n\treturn isAsciiAlpha(input.charCodeAt(lastLabelStart));\n};\n","// #__NO_SIDE_EFFECTS__\nexport const isAsciiAlpha = (c: number): boolean => {\n\treturn (c >= 0x41 && c <= 0x5a) || (c >= 0x61 && c <= 0x7a);\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const isAsciiAlphaNum = (c: number): boolean => {\n\treturn isAsciiAlpha(c) || (c >= 0x30 && c <= 0x39);\n};\n","import { type Result } from '../utils.ts';\n\nimport { isActorIdentifier, type ActorIdentifier } from './at-identifier.ts';\nimport { isDid, type Did } from './did.ts';\nimport { isNsid, type Nsid } from './nsid.ts';\nimport { isRecordKey, type RecordKey } from './record-key.ts';\nimport { isAsciiAlphaNum } from './utils/ascii.ts';\n\n/**\n * represents a general AT Protocol URI, representing either an entire\n * repository, a specific collection within a repository, or a record.\n *\n * it allows using handles over DIDs, but this means that it won't be stable.\n */\nexport type ResourceUri =\n\t| `at://${ActorIdentifier}`\n\t| `at://${ActorIdentifier}/${Nsid}`\n\t| `at://${ActorIdentifier}/${Nsid}/${RecordKey}`;\n\nexport type ParsedResourceUri =\n\t| { repo: ActorIdentifier; collection: undefined; rkey: undefined; fragment: string | undefined }\n\t| { repo: ActorIdentifier; collection: Nsid; rkey: undefined; fragment: string | undefined }\n\t| { repo: ActorIdentifier; collection: Nsid; rkey: RecordKey; fragment: string | undefined };\n\n// minimum valid non-canonical at-uri is `at://a.a` (8 chars)\nconst AT_URI_MIN_LENGTH = 8;\n// minimum canonical at-uri is `at://did:m:v/a.b.c/x` (20 chars)\nconst CANONICAL_AT_URI_MIN_LENGTH = 5 + 7 + 1 + 5 + 1 + 1;\n// maximum structural length:\n// `at://` + DID (2048) + `/` + NSID (317) + `/` + rkey (512)\nconst AT_URI_MAX_LENGTH = 5 + 2048 + 1 + 317 + 1 + 512;\n\n// repo: [a-zA-Z0-9._:%-]\n// collection: [a-zA-Z0-9.-]\n// rkey: [a-zA-Z0-9._~:@!$&%')(*+,;=-]\n// fragment: /[a-zA-Z0-9._~:@!$&%')(*+,;=\\-[\\]/\\\\]*\nconst ATURI_RE =\n\t/^at:\\/\\/([a-zA-Z0-9._:%-]+)(?:\\/([a-zA-Z0-9-.]+)(?:\\/([a-zA-Z0-9._~:@!$&%')(*+,;=-]+))?)?(?:#(\\/[a-zA-Z0-9._~:@!$&%')(*+,;=\\-[\\]/\\\\]*))?$/;\n\nconst isFragmentChar = (c: number): boolean => {\n\treturn (\n\t\tisAsciiAlphaNum(c) ||\n\t\tc === 0x2e || // .\n\t\tc === 0x5f || // _\n\t\tc === 0x7e || // ~\n\t\tc === 0x3a || // :\n\t\tc === 0x40 || // @\n\t\tc === 0x21 || // !\n\t\tc === 0x24 || // $\n\t\tc === 0x26 || // &\n\t\tc === 0x25 || // %\n\t\tc === 0x27 || // '\n\t\tc === 0x29 || // )\n\t\tc === 0x28 || // (\n\t\tc === 0x2a || // *\n\t\tc === 0x2b || // +\n\t\tc === 0x2c || // ,\n\t\tc === 0x3b || // ;\n\t\tc === 0x3d || // =\n\t\tc === 0x2d || // -\n\t\tc === 0x5b || // [\n\t\tc === 0x5d || // ]\n\t\tc === 0x2f || // /\n\t\tc === 0x5c // \\\n\t);\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const isResourceUri = (input: unknown): input is ResourceUri => {\n\tif (typeof input !== 'string') {\n\t\treturn false;\n\t}\n\n\tconst len = input.length;\n\tif (len < AT_URI_MIN_LENGTH || len > AT_URI_MAX_LENGTH) {\n\t\treturn false;\n\t}\n\n\tif (\n\t\tinput.charCodeAt(0) !== 0x61 ||\n\t\tinput.charCodeAt(1) !== 0x74 ||\n\t\tinput.charCodeAt(2) !== 0x3a ||\n\t\tinput.charCodeAt(3) !== 0x2f ||\n\t\tinput.charCodeAt(4) !== 0x2f\n\t) {\n\t\treturn false;\n\t}\n\n\tconst hash = input.indexOf('#', 5);\n\tconst stop = hash === -1 ? len : hash;\n\n\tif (hash !== -1) {\n\t\tconst fragmentStart = hash + 1;\n\t\tif (fragmentStart >= len || input.charCodeAt(fragmentStart) !== 0x2f) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (let idx = fragmentStart; idx < len; idx++) {\n\t\t\tif (!isFragmentChar(input.charCodeAt(idx))) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst firstSlash = input.indexOf('/', 5);\n\tlet repoEnd = stop;\n\tlet collection: string | undefined;\n\tlet rkey: string | undefined;\n\n\tif (firstSlash !== -1 && firstSlash < stop) {\n\t\trepoEnd = firstSlash;\n\n\t\tconst collectionStart = firstSlash + 1;\n\t\tif (collectionStart >= stop) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst secondSlash = input.indexOf('/', collectionStart);\n\t\tif (secondSlash !== -1 && secondSlash < stop) {\n\t\t\tif (secondSlash === collectionStart || secondSlash + 1 >= stop) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst thirdSlash = input.indexOf('/', secondSlash + 1);\n\t\t\tif (thirdSlash !== -1 && thirdSlash < stop) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tcollection = input.substring(collectionStart, secondSlash);\n\t\t\trkey = input.substring(secondSlash + 1, stop);\n\t\t} else {\n\t\t\tcollection = input.substring(collectionStart, stop);\n\t\t}\n\t}\n\n\tif (repoEnd <= 5) {\n\t\treturn false;\n\t}\n\n\tconst repo = input.substring(5, repoEnd);\n\n\treturn (\n\t\tisActorIdentifier(repo) &&\n\t\t(collection === undefined || isNsid(collection)) &&\n\t\t(rkey === undefined || isRecordKey(rkey))\n\t);\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const parseResourceUri = (input: string): Result<ParsedResourceUri, string> => {\n\tconst len = input.length;\n\tif (len < AT_URI_MIN_LENGTH || len > AT_URI_MAX_LENGTH) {\n\t\treturn { ok: false, error: `invalid at-uri: ${input}` };\n\t}\n\n\tconst match = ATURI_RE.exec(input);\n\tif (match === null) {\n\t\treturn { ok: false, error: `invalid at-uri: ${input}` };\n\t}\n\n\tconst [, r, c, k, f] = match;\n\n\tif (!isActorIdentifier(r)) {\n\t\treturn { ok: false, error: `invalid repo in at-uri: ${r}` };\n\t}\n\n\tif (c !== undefined && !isNsid(c)) {\n\t\treturn { ok: false, error: `invalid collection in at-uri: ${c}` };\n\t}\n\n\tif (k !== undefined && !isRecordKey(k)) {\n\t\treturn { ok: false, error: `invalid rkey in at-uri: ${k}` };\n\t}\n\n\treturn { ok: true, value: { repo: r, collection: c, rkey: k, fragment: f } };\n};\n\n/**\n * represents a canonical AT Protocol URI for a specific record.\n *\n * this URI format uses the account's DID as the authority, ensuring that\n * the URI remains valid even as the account changes handles, uniquely\n * identifying a specific piece of record within AT Protocol.\n */\nexport type CanonicalResourceUri = `at://${Did}/${Nsid}/${RecordKey}`;\n\nexport type ParsedCanonicalResourceUri = {\n\trepo: Did;\n\tcollection: Nsid;\n\trkey: RecordKey;\n\tfragment: string | undefined;\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const isCanonicalResourceUri = (input: unknown): input is CanonicalResourceUri => {\n\tif (typeof input !== 'string') {\n\t\treturn false;\n\t}\n\n\tconst len = input.length;\n\tif (len < CANONICAL_AT_URI_MIN_LENGTH || len > AT_URI_MAX_LENGTH) {\n\t\treturn false;\n\t}\n\n\t// must start with \"at://\"\n\tif (\n\t\tinput.charCodeAt(0) !== 0x61 ||\n\t\tinput.charCodeAt(1) !== 0x74 ||\n\t\tinput.charCodeAt(2) !== 0x3a ||\n\t\tinput.charCodeAt(3) !== 0x2f ||\n\t\tinput.charCodeAt(4) !== 0x2f\n\t) {\n\t\treturn false;\n\t}\n\n\tconst firstSlash = input.indexOf('/', 5);\n\tif (firstSlash === -1) {\n\t\treturn false;\n\t}\n\n\tconst secondSlash = input.indexOf('/', firstSlash + 1);\n\tif (secondSlash === -1) {\n\t\treturn false;\n\t}\n\n\t// check for fragment\n\tconst hashPos = input.indexOf('#', secondSlash + 1);\n\n\tconst repo = input.substring(5, firstSlash);\n\tconst collection = input.substring(firstSlash + 1, secondSlash);\n\tconst rkey = hashPos === -1 ? input.substring(secondSlash + 1) : input.substring(secondSlash + 1, hashPos);\n\n\treturn isDid(repo) && isNsid(collection) && isRecordKey(rkey);\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const parseCanonicalResourceUri = (input: string): Result<ParsedCanonicalResourceUri, string> => {\n\tconst len = input.length;\n\tif (len < CANONICAL_AT_URI_MIN_LENGTH || len > AT_URI_MAX_LENGTH) {\n\t\treturn { ok: false, error: `invalid canonical-at-uri: ${input}` };\n\t}\n\n\tconst match = ATURI_RE.exec(input);\n\tif (match === null) {\n\t\treturn { ok: false, error: `invalid canonical-at-uri: ${input}` };\n\t}\n\n\tconst [, r, c, k, f] = match;\n\n\tif (!isDid(r)) {\n\t\treturn { ok: false, error: `invalid repo in canonical-at-uri: ${r}` };\n\t}\n\n\tif (!isNsid(c)) {\n\t\treturn { ok: false, error: `invalid collection in canonical-at-uri: ${c}` };\n\t}\n\n\tif (!isRecordKey(k)) {\n\t\treturn { ok: false, error: `invalid rkey in canonical-at-uri: ${k}` };\n\t}\n\n\treturn { ok: true, value: { repo: r, collection: c, rkey: k, fragment: f } };\n};\n","import { DEV } from 'esm-env';\n\nexport type Result<T, E> = { ok: true; value: T } | { ok: false; error: E };\n\nexport const assert: { (condition: any, message?: string): asserts condition } = (condition, message) => {\n\tif (!condition) {\n\t\tif (DEV) {\n\t\t\tthrow new Error(`Assertion failed` + (message ? `: ${message}` : ``));\n\t\t}\n\n\t\tthrow new Error(`Assertion failed`);\n\t}\n};\n\nexport const assertNever = (_: never, message?: string): never => {\n\tassert(false, message);\n};\n","export { default as BROWSER } from 'esm-env/browser';\nexport { default as DEV } from 'esm-env/development';\nexport { default as NODE } from 'esm-env/node';\n","export default typeof window !== 'undefined';\n","const node_env = globalThis.process?.env?.NODE_ENV;\nexport default node_env && !node_env.toLowerCase().startsWith('prod');\n","export default true;\n","import { isAsciiAlpha, isAsciiAlphaNum } from './utils/ascii.ts';\n\n/**\n * represents a namespace identifier (NSID)\n */\nexport type Nsid = `${string}.${string}.${string}`;\n\n// #__NO_SIDE_EFFECTS__\nexport const isNsid = (input: unknown): input is Nsid => {\n\tif (typeof input !== 'string') {\n\t\treturn false;\n\t}\n\n\tconst len = input.length;\n\tif (len < 5 || len > 317) {\n\t\treturn false;\n\t}\n\n\t// find the last dot to separate domain labels from the name segment\n\tlet lastDot = -1;\n\tfor (let j = len - 1; j >= 0; j--) {\n\t\tif (input.charCodeAt(j) === 0x2e) {\n\t\t\tlastDot = j;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (lastDot === -1) {\n\t\treturn false;\n\t}\n\n\t// validate domain segments (before lastDot)\n\tlet segStart = 0;\n\tlet segIdx = 0;\n\tfor (let i = 0; i <= lastDot; i++) {\n\t\tif (i === lastDot || input.charCodeAt(i) === 0x2e) {\n\t\t\tconst segLen = i - segStart;\n\t\t\tif (segLen === 0 || segLen > 63) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst first = input.charCodeAt(segStart);\n\t\t\tif (segIdx === 0) {\n\t\t\t\t// first domain label must start with a letter\n\t\t\t\tif (!isAsciiAlpha(first)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// subsequent domain labels start with alphanumeric\n\t\t\t\tif (!isAsciiAlphaNum(first)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (segLen > 1) {\n\t\t\t\tif (!isAsciiAlphaNum(input.charCodeAt(i - 1))) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tfor (let j = segStart + 1; j < i - 1; j++) {\n\t\t\t\t\tconst c = input.charCodeAt(j);\n\t\t\t\t\tif (!isAsciiAlphaNum(c) && c !== 0x2d) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsegStart = i + 1;\n\t\t\tsegIdx++;\n\t\t}\n\t}\n\n\t// need at least 2 domain segments\n\tif (segIdx < 2) {\n\t\treturn false;\n\t}\n\n\t// name segment (after lastDot): starts with letter, rest alphanumeric, max 63\n\tconst nameStart = lastDot + 1;\n\tconst nameLen = len - nameStart;\n\tif (nameLen === 0 || nameLen > 63) {\n\t\treturn false;\n\t}\n\n\tif (!isAsciiAlpha(input.charCodeAt(nameStart))) {\n\t\treturn false;\n\t}\n\tfor (let j = nameStart + 1; j < len; j++) {\n\t\tif (!isAsciiAlphaNum(input.charCodeAt(j))) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n};\n","import { isAsciiAlphaNum } from './utils/ascii.ts';\n\n/**\n * represents a record key\n */\nexport type RecordKey = string;\n\n// #__NO_SIDE_EFFECTS__\nexport const isRecordKey = (input: unknown): input is RecordKey => {\n\tif (typeof input !== 'string') {\n\t\treturn false;\n\t}\n\n\tconst len = input.length;\n\tif (len < 1 || len > 512) {\n\t\treturn false;\n\t}\n\n\t// reject \".\" and \"..\"\n\tif (len <= 2 && input.charCodeAt(0) === 0x2e && (len === 1 || input.charCodeAt(1) === 0x2e)) {\n\t\treturn false;\n\t}\n\n\tfor (let i = 0; i < len; i++) {\n\t\tconst c = input.charCodeAt(i);\n\t\t// [a-zA-Z0-9_~.:-]\n\t\tif (\n\t\t\t!isAsciiAlphaNum(c) &&\n\t\t\tc !== 0x5f && // _\n\t\t\tc !== 0x7e && // ~\n\t\t\tc !== 0x2e && // .\n\t\t\tc !== 0x3a && // :\n\t\t\tc !== 0x2d // -\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n};\n","/**\n * represents a content identifier (CID)\n */\nexport type Cid = string;\n\nconst DASL_CID_RE = /^baf[ky]rei[a-z2-7]{52}$/;\n\n// #__NO_SIDE_EFFECTS__\nexport const isCid = (input: unknown): input is Cid => {\n\treturn typeof input === 'string' && input.length === 59 && DASL_CID_RE.test(input);\n};\n","export type Datetime = string;\n\nconst DATE_TIME_RE =\n\t/^((?!0{3})\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01]))T((?:[01]\\d|2[0-3]):(?:[0-5]\\d):(?:[0-5]\\d))(\\.\\d+)?(Z|(?!-00:00)[+-](?:[01]\\d|2[0-3]):(?:[0-5]\\d))$/;\n\n// #__NO_SIDE_EFFECTS__\nexport const isDatetime = (input: unknown): input is Datetime => {\n\treturn typeof input === 'string' && input.length >= 20 && input.length <= 64 && DATE_TIME_RE.test(input);\n};\n","export type LanguageCode = string;\n\nconst LANGUAGE_CODE_RE =\n\t/^((?<grandfathered>(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)|(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang))|((?<language>([A-Za-z]{2,3}(-(?<extlang>[A-Za-z]{3}(-[A-Za-z]{3}){0,2}))?)|[A-Za-z]{4}|[A-Za-z]{5,8})(-(?<script>[A-Za-z]{4}))?(-(?<region>[A-Za-z]{2}|[0-9]{3}))?(-(?<variant>[A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3}))*(-(?<extension>[0-9A-WY-Za-wy-z](-[A-Za-z0-9]{2,8})+))*(-(?<privateUseA>x(-[A-Za-z0-9]{1,8})+))?)|(?<privateUseB>x(-[A-Za-z0-9]{1,8})+))$/;\n\n// #__NO_SIDE_EFFECTS__\nexport const isLanguageCode = (input: unknown): input is LanguageCode => {\n\treturn typeof input === 'string' && input.length >= 2 && LANGUAGE_CODE_RE.test(input);\n};\n","/**\n * represents a timestamp identifier (TID)\n */\nexport type Tid = string;\n\nconst TID_RE = /^[234567abcdefghij][234567abcdefghijklmnopqrstuvwxyz]{12}$/;\n\n// #__NO_SIDE_EFFECTS__\nexport const isTid = (input: unknown): input is Tid => {\n\treturn typeof input === 'string' && input.length === 13 && TID_RE.test(input);\n};\n","import { isUtf8LengthInRange } from '@atcute/uint8array';\n\n/**\n * represents a generic URI\n */\nexport type GenericUri = `${string}:${string}`;\n\nconst URI_RE = /^\\w+:(?:\\/\\/)?[^\\s/][^\\s]*$/;\n\n// #__NO_SIDE_EFFECTS__\nexport const isGenericUri = (input: unknown): input is GenericUri => {\n\tif (typeof input !== 'string') {\n\t\treturn false;\n\t}\n\n\tif (!isUtf8LengthInRange(input, 3, 8192)) {\n\t\treturn false;\n\t}\n\n\treturn URI_RE.test(input);\n};\n","export {};\n//# sourceMappingURL=types.js.map","import type { Handle } from '@atcute/lexicons';\nimport { isHandle } from '@atcute/lexicons/syntax';\n\nimport * as t from './types.js';\n\nexport interface VerificationMaterial {\n\ttype: string;\n\tpublicKeyMultibase: string;\n}\n\nconst isUrlParseSupported = 'parse' in URL;\n\nexport const isAtprotoServiceEndpoint = (input: string): boolean => {\n\tlet url: URL | null = null;\n\tif (isUrlParseSupported) {\n\t\turl = URL.parse(input);\n\t} else {\n\t\ttry {\n\t\t\turl = new URL(input);\n\t\t} catch {}\n\t}\n\n\treturn (\n\t\turl !== null &&\n\t\t(url.protocol === 'https:' || url.protocol === 'http:') &&\n\t\turl.pathname === '/' &&\n\t\turl.search === '' &&\n\t\turl.hash === ''\n\t);\n};\n\nexport const getVerificationMaterial = (\n\tdoc: t.DidDocument,\n\tid: `#${string}`,\n): VerificationMaterial | undefined => {\n\tconst verificationMethods = doc.verificationMethod;\n\tif (!verificationMethods) {\n\t\treturn;\n\t}\n\n\tconst expectedId = `${doc.id}${id}`;\n\n\tfor (let idx = 0, len = verificationMethods.length; idx < len; idx++) {\n\t\tconst { id, type, publicKeyMultibase } = verificationMethods[idx];\n\n\t\tif (id !== expectedId) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (publicKeyMultibase === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn { type, publicKeyMultibase };\n\t}\n};\n\nexport const getAtprotoVerificationMaterial = (doc: t.DidDocument): VerificationMaterial | undefined => {\n\treturn getVerificationMaterial(doc, '#atproto');\n};\n\nexport const getAtprotoLabelerVerificationMaterial = (\n\tdoc: t.DidDocument,\n): VerificationMaterial | undefined => {\n\treturn getVerificationMaterial(doc, '#atproto_label');\n};\n\nexport const getAtprotoHandle = (doc: t.DidDocument): Handle | null | undefined => {\n\tconst alsoKnownAs = doc.alsoKnownAs;\n\tif (!alsoKnownAs) {\n\t\treturn null;\n\t}\n\n\tconst PREFIX = 'at://';\n\n\tfor (let idx = 0, len = alsoKnownAs.length; idx < len; idx++) {\n\t\tconst aka = alsoKnownAs[idx];\n\n\t\tif (!aka.startsWith(PREFIX)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst raw = aka.slice(PREFIX.length);\n\n\t\tif (!isHandle(raw)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn raw;\n\t}\n\n\treturn null;\n};\n\nexport const getAtprotoServiceEndpoint = (\n\tdoc: t.DidDocument,\n\tpredicate: { id: `#${string}`; type?: string },\n): string | undefined => {\n\tconst services = doc.service;\n\tif (!services) {\n\t\treturn;\n\t}\n\n\tfor (let idx = 0, len = services.length; idx < len; idx++) {\n\t\tconst { id, type, serviceEndpoint } = services[idx];\n\n\t\tif (id !== predicate.id && id !== doc.id + predicate.id) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (predicate.type !== undefined) {\n\t\t\tif (Array.isArray(type)) {\n\t\t\t\tif (!type.includes(predicate.type)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (type !== predicate.type) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (typeof serviceEndpoint !== 'string' || !isAtprotoServiceEndpoint(serviceEndpoint)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn serviceEndpoint;\n\t}\n};\n\nexport const getPdsEndpoint = (doc: t.DidDocument): string | undefined => {\n\treturn getAtprotoServiceEndpoint(doc, {\n\t\tid: '#atproto_pds',\n\t\ttype: 'AtprotoPersonalDataServer',\n\t});\n};\n\nexport const getLabelerEndpoint = (doc: t.DidDocument): string | undefined => {\n\treturn getAtprotoServiceEndpoint(doc, {\n\t\tid: '#atproto_labeler',\n\t\ttype: 'AtprotoLabeler',\n\t});\n};\n\nexport const getBlueskyChatEndpoint = (doc: t.DidDocument): string | undefined => {\n\treturn getAtprotoServiceEndpoint(doc, {\n\t\tid: '#bsky_chat',\n\t\ttype: 'BskyChatService',\n\t});\n};\n\nexport const getBlueskyFeedgenEndpoint = (doc: t.DidDocument): string | undefined => {\n\treturn getAtprotoServiceEndpoint(doc, {\n\t\tid: '#bsky_fg',\n\t\ttype: 'BskyFeedGenerator',\n\t});\n};\n\nexport const getBlueskyNotificationEndpoint = (doc: t.DidDocument): string | undefined => {\n\treturn getAtprotoServiceEndpoint(doc, {\n\t\tid: '#bsky_notif',\n\t\ttype: 'BskyNotificationService',\n\t});\n};\n","import type { AtprotoAudience, AtprotoDid, Did } from '@atcute/lexicons/syntax';\n\nimport { isPlcDid } from './methods/plc.js';\nimport { isAtprotoWebDid } from './methods/web.js';\n\nconst FRAGMENT_RE = /^(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@\\/?]|%[0-9A-Fa-f]{2})*$/;\n\n/**\n * checks if it's a DID identifier that is supported by atproto\n */\nexport const isAtprotoDid = (input: string): input is AtprotoDid => {\n\treturn isPlcDid(input) || isAtprotoWebDid(input);\n};\n\nexport const isAtprotoAudience = (input: string): input is AtprotoAudience => {\n\t// 'did:web:a.co#f'\n\tif (input.length < 14) {\n\t\treturn false;\n\t}\n\n\tconst isep = input.indexOf('#', 12);\n\tif (isep === -1) {\n\t\treturn false;\n\t}\n\n\treturn FRAGMENT_RE.test(input.slice(isep + 1)) && isAtprotoDid(input.slice(0, isep));\n};\n\n/**\n * returns the DID's method\n */\nexport const extractDidMethod = <M extends string>(did: Did<M>): M => {\n\tconst isep = did.indexOf(':', 4);\n\tconst method = did.slice(4, isep);\n\treturn method as M;\n};\n","import type { Did } from '@atcute/lexicons/syntax';\n\n/** @deprecated use `isPlcDid` instead */\nexport const PLC_DID_RE = /^did:plc:([a-z2-7]{24})$/;\n\n/**\n * checks if input is a did:plc identifier\n */\nexport const isPlcDid = (input: string): input is Did<'plc'> => {\n\treturn input.length === 32 && PLC_DID_RE.test(input);\n};\n","import type { Did } from '@atcute/lexicons/syntax';\n\n/** @deprecated use `isWebDid` instead */\nexport const WEB_DID_RE =\n\t/^did:web:([a-zA-Z0-9%\\-]+(?:(?:\\.[a-zA-Z0-9%\\-]+)*(?:\\.[a-zA-Z]{2,}))?)?((?::[a-zA-Z0-9\\-%.]+)+)?$/;\n\n/** @deprecated use `isAtprotoWebDid` instead */\nexport const ATPROTO_WEB_DID_RE =\n\t/^did:web:([a-zA-Z0-9\\-]+(?:\\.[a-zA-Z0-9\\-]+)*(?:\\.[a-zA-Z]{2,})|localhost(?:%3[aA]\\d+)?)$/;\n\n/**\n * checks if input is a did:web identifier, note that you should probably use\n * `isAtprotoDidWeb` for atproto-related cases as atproto only supports a subset\n * of the did:web specification (namely, no custom paths)\n */\nexport const isWebDid = (input: string): input is Did<'web'> => {\n\treturn input.length >= 9 && WEB_DID_RE.test(input);\n};\n\n/**\n * checks if input is a did:web identifier that is supported by atproto\n */\nexport const isAtprotoWebDid = (input: string): input is Did<'web'> => {\n\treturn input.length >= 12 && ATPROTO_WEB_DID_RE.test(input);\n};\n\n/**\n * normalize a did:web identifier\n */\nexport const normalizeWebDid = (did: Did<'web'>): Did<'web'> => {\n\tconst [host, ...paths] = did.slice(8).split(':').map(decodeURIComponent);\n\n\tlet normalized = `did:web:${encodeURIComponent(host.toLowerCase())}`;\n\tif (paths.length > 0) {\n\t\tnormalized += `:${paths.join(':')}`;\n\t}\n\n\treturn normalized as Did<'web'>;\n};\n\n/**\n * converts did:web identifier into the DID document's URL\n */\nexport const webDidToDocumentUrl = (did: Did<'web'>): URL => {\n\tconst [host, ...paths] = did.slice(8).split(':').map(decodeURIComponent);\n\n\tlet pathname = '/' + paths.join('/');\n\tif (pathname === '/') {\n\t\tpathname = `/.well-known/did.json`;\n\t} else {\n\t\tpathname += `/did.json`;\n\t}\n\n\tconst url = new URL(`https://${host}${pathname}`);\n\tif (url.hostname === 'localhost') {\n\t\turl.protocol = 'http:';\n\t}\n\n\treturn url;\n};\n","import type { Did } from '@atcute/lexicons';\n\nconst KEY_DID_RE = /^did:key:z[a-km-zA-HJ-NP-Z1-9]+$/;\n\n/**\n * checks if input is a did:key identifier\n */\nexport const isKeyDid = (input: string): input is Did<'key'> => {\n\treturn input.length >= 10 && KEY_DID_RE.test(input);\n};\n","import type { Did } from '@atcute/lexicons/syntax';\n\n// #region DID document resolution errors\nexport class DidDocumentResolutionError extends Error {\n\toverride name = 'DidResolutionError';\n}\n\nexport class UnsupportedDidMethodError extends DidDocumentResolutionError {\n\toverride name = 'UnsupportedDidMethodError';\n\n\tconstructor(public did: Did) {\n\t\tsuper(`unsupported did method; did=${did}`);\n\t}\n}\n\nexport class ImproperDidError extends DidDocumentResolutionError {\n\toverride name = 'ImproperDidError';\n\n\tconstructor(public did: Did) {\n\t\tsuper(`improper did; did=${did}`);\n\t}\n}\n\nexport class DocumentNotFoundError extends DidDocumentResolutionError {\n\toverride name = 'DocumentNotFoundError';\n\n\tconstructor(public did: Did) {\n\t\tsuper(`did document not found; did=${did}`);\n\t}\n}\n\nexport class FailedDocumentResolutionError extends DidDocumentResolutionError {\n\toverride name = 'FailedDocumentResolutionError';\n\n\tconstructor(\n\t\tpublic did: Did,\n\t\toptions?: ErrorOptions,\n\t) {\n\t\tsuper(`failed to resolve did document; did=${did}`, options);\n\t}\n}\n// #endregion\n\n// #region Handle resolution errors\nexport class HandleResolutionError extends Error {\n\toverride name = 'HandleResolutionError';\n}\n\nexport class DidNotFoundError extends HandleResolutionError {\n\toverride name = 'DidNotFoundError';\n\n\tconstructor(public handle: string) {\n\t\tsuper(`handle returned no did; handle=${handle}`);\n\t}\n}\n\nexport class FailedHandleResolutionError extends HandleResolutionError {\n\toverride name = 'FailedHandleResolutionError';\n\n\tconstructor(\n\t\tpublic handle: string,\n\t\toptions?: ErrorOptions,\n\t) {\n\t\tsuper(`failed to resolve handle; handle=${handle}`, options);\n\t}\n}\n\nexport class InvalidResolvedHandleError extends HandleResolutionError {\n\toverride name = 'InvalidResolvedHandleError';\n\n\tconstructor(\n\t\tpublic handle: string,\n\t\tpublic did: string,\n\t) {\n\t\tsuper(`handle returned invalid did; handle=${handle}; did=${did}`);\n\t}\n}\n\nexport class AmbiguousHandleError extends HandleResolutionError {\n\toverride name = 'AmbiguousHandleError';\n\n\tconstructor(handle: string) {\n\t\tsuper(`handle returned multiple did values; handle=${handle}`);\n\t}\n}\n// #endregion\n\n// #region Actor resolution errors\nexport class ActorResolutionError extends Error {\n\toverride name = 'ActorResolutionError';\n}\n// #endregion\n","import { extractDidMethod, type DidDocument } from '@atcute/identity';\nimport type { Did } from '@atcute/lexicons/syntax';\n\nimport * as err from '../errors.js';\nimport type { DidDocumentResolver, ResolveDidDocumentOptions } from '../types.js';\n\nexport interface CompositeDidDocumentResolverOptions<M extends string> {\n\tmethods: { [K in M]: DidDocumentResolver<K> };\n}\n\nexport class CompositeDidDocumentResolver<M extends string> implements DidDocumentResolver<M> {\n\t#methods: Map<string, DidDocumentResolver<M>>;\n\n\tconstructor({ methods }: CompositeDidDocumentResolverOptions<M>) {\n\t\tthis.#methods = new Map(Object.entries(methods));\n\t}\n\n\tasync resolve(did: Did<M>, options?: ResolveDidDocumentOptions): Promise<DidDocument> {\n\t\tconst method = extractDidMethod(did);\n\n\t\tconst resolver = this.#methods.get(method);\n\t\tif (resolver === undefined) {\n\t\t\tthrow new err.UnsupportedDidMethodError(did);\n\t\t}\n\n\t\treturn await resolver.resolve(did, options);\n\t}\n}\n","import type { DidDocument } from '@atcute/identity';\nimport type { Did } from '@atcute/lexicons/syntax';\nimport { FailedResponseError } from '@atcute/util-fetch';\n\nimport * as err from '../../errors.js';\nimport type { DidDocumentResolver, ResolveDidDocumentOptions } from '../../types.js';\nimport { fetchDocHandler } from '../utils.js';\n\nexport interface PlcDidDocumentResolverOptions {\n\tapiUrl?: string;\n\tfetch?: typeof fetch;\n}\n\nexport class PlcDidDocumentResolver implements DidDocumentResolver<'plc'> {\n\treadonly apiUrl: string;\n\t#fetch: typeof fetch;\n\n\tconstructor({\n\t\tapiUrl = 'https://plc.directory',\n\t\tfetch: fetchThis = fetch,\n\t}: PlcDidDocumentResolverOptions = {}) {\n\t\tthis.apiUrl = apiUrl;\n\t\tthis.#fetch = fetchThis;\n\t}\n\n\tasync resolve(did: Did<'plc'>, options?: ResolveDidDocumentOptions): Promise<DidDocument> {\n\t\t// quick sanity check\n\t\tif (!did.startsWith('did:plc:')) {\n\t\t\tthrow new err.UnsupportedDidMethodError(did);\n\t\t}\n\n\t\tlet json: DidDocument;\n\n\t\ttry {\n\t\t\tconst url = new URL(`/${encodeURIComponent(did)}`, this.apiUrl);\n\n\t\t\tconst response = await (0, this.#fetch)(url, {\n\t\t\t\tsignal: options?.signal,\n\t\t\t\tcache: options?.noCache ? 'no-cache' : undefined,\n\t\t\t\tredirect: 'manual',\n\t\t\t\theaders: { accept: 'application/did+ld+json,application/json' },\n\t\t\t});\n\n\t\t\tif (response.status >= 300 && response.status < 400) {\n\t\t\t\tthrow new TypeError(`unexpected redirect`);\n\t\t\t}\n\n\t\t\tconst handled = await fetchDocHandler(response);\n\n\t\t\tjson = handled.json;\n\t\t} catch (cause) {\n\t\t\tif (cause instanceof FailedResponseError && cause.status === 404) {\n\t\t\t\tthrow new err.DocumentNotFoundError(did);\n\t\t\t}\n\n\t\t\tthrow new err.FailedDocumentResolutionError(did, { cause });\n\t\t}\n\n\t\treturn json;\n\t}\n}\n","export * from './doh-json.js';\nexport * from './errors.js';\nexport * from './pipeline.js';\nexport * from './transformers.js';\n","import * as v from '@badrap/valita';\n\nimport { pipe } from './pipeline.js';\nimport { isResponseOk, parseResponseAsJson, validateJsonWith } from './transformers.js';\n\nconst uint32 = v.number().assert((input) => Number.isInteger(input) && input >= 0 && input <= 2 ** 32 - 1);\n\nconst question = v.object({\n\tname: v.string(),\n\ttype: v.literal(16), // TXT\n});\n\nconst answer = v.object({\n\tname: v.string(),\n\ttype: v.literal(16), // TXT\n\tTTL: uint32,\n\tdata: v.string().chain((input) => {\n\t\treturn v.ok(input.replace(/^\"|\"$/g, '').replace(/\\\\\"/g, '\"'));\n\t}),\n});\n\nconst authority = v.object({\n\tname: v.string(),\n\ttype: uint32,\n\tTTL: uint32,\n\tdata: v.string(),\n});\n\n/** DoH JSON response schema for TXT record queries */\nexport const dohJsonTxtResult = v.object({\n\t/** DNS response code */\n\tStatus: uint32,\n\t/** whether response is truncated */\n\tTC: v.boolean(),\n\t/** whether recursive desired bit is set, always true for Google and Cloudflare DoH */\n\tRD: v.boolean(),\n\t/** whether recursive available bit is set, always true for Google and Cloudflare DoH */\n\tRA: v.boolean(),\n\t/** whether response data was validated with DNSSEC */\n\tAD: v.boolean(),\n\t/** whether client asked to disable DNSSEC validation */\n\tCD: v.boolean(),\n\t/** requested records */\n\tQuestion: v.tuple([question]),\n\t/** answers */\n\tAnswer: v.array(answer).optional(() => []),\n\t/** authority */\n\tAuthority: v.array(authority).optional(),\n\t/** comment from the DNS server */\n\tComment: v.union(v.string(), v.array(v.string())).optional(),\n});\n\nexport type DohJsonTxtResult = v.Infer<typeof dohJsonTxtResult>;\n\n/** fetch handler pipeline for DoH JSON TXT record responses */\nexport const fetchDohJsonTxt = pipe(\n\tisResponseOk,\n\tparseResponseAsJson(/^application\\/(dns-)?json$/, 16 * 1024),\n\tvalidateJsonWith(dohJsonTxtResult, { mode: 'passthrough' }),\n);\n","type Transformer<I, O = I> = (input: I) => Promise<O>;\n\ntype PipelineInput<T extends readonly Transformer<any>[]> = T extends [Transformer<infer I, any>, ...any[]]\n\t? I\n\t: T extends Transformer<infer I, any>[]\n\t\t? I\n\t\t: never;\n\ntype PipelineOutput<T extends readonly Transformer<any>[]> = T extends [...any[], Transformer<any, infer O>]\n\t? O\n\t: T extends Transformer<any, infer O>[]\n\t\t? O\n\t\t: never;\n\ntype Pipeline<\n\tF extends readonly Transformer<any>[],\n\tAcc extends readonly Transformer<any>[] = [],\n> = F extends [Transformer<infer I, infer O>]\n\t? [...Acc, Transformer<I, O>]\n\t: F extends [Transformer<infer A, any>, ...infer Tail]\n\t\t? Tail extends [Transformer<infer B, any>, ...any[]]\n\t\t\t? Pipeline<Tail, [...Acc, Transformer<A, B>]>\n\t\t\t: Acc\n\t\t: Acc;\n\nexport function pipe(): never;\nexport function pipe<T extends readonly Transformer<any>[]>(\n\t...pipeline: Pipeline<T> extends T ? T : Pipeline<T>\n): (input: PipelineInput<T>) => Promise<PipelineOutput<T>>;\nexport function pipe<T extends readonly Transformer<any>[]>(\n\t...pipeline: Pipeline<T> extends T ? T : Pipeline<T>\n): (input: PipelineInput<T>) => Promise<PipelineOutput<T>> {\n\treturn pipeline.reduce(pipeTwo);\n}\n\nconst pipeTwo = <I, O, X = unknown>(\n\tfirst: Transformer<I, X>,\n\tsecond: Transformer<X, O>,\n): ((input: I) => Promise<O>) => {\n\treturn (input) => first(input).then(second);\n};\n","import * as v from '@badrap/valita';\n\nimport * as err from './errors.js';\nimport { SizeLimitStream } from './streams/size-limit.js';\n\nexport type TextResponse = {\n\tresponse: Response;\n\ttext: string;\n};\n\nexport type ParsedJsonResponse<T = unknown> = {\n\tresponse: Response;\n\tjson: T;\n};\n\nexport const isResponseOk = async (response: Response): Promise<Response> => {\n\tif (response.ok) {\n\t\treturn response;\n\t}\n\n\tthrow new err.FailedResponseError(response);\n};\n\nexport const readResponseAsText =\n\t(maxSize: number) =>\n\tasync (response: Response): Promise<TextResponse> => {\n\t\tconst text = await readResponse(response, maxSize);\n\t\treturn { response, text };\n\t};\n\nexport const parseResponseAsJson =\n\t(typeRegex: RegExp, maxSize: number) =>\n\tasync (response: Response): Promise<ParsedJsonResponse> => {\n\t\tawait assertContentType(response, typeRegex);\n\n\t\tconst text = await readResponse(response, maxSize);\n\n\t\ttry {\n\t\t\tconst json = JSON.parse(text);\n\t\t\treturn { response, json };\n\t\t} catch (error) {\n\t\t\tthrow new err.ImproperResponseError(`unexpected json data`, { cause: error });\n\t\t}\n\t};\n\ntype ParseOptions = NonNullable<Parameters<v.Type['parse']>[1]>;\n\nexport const validateJsonWith =\n\t<T>(schema: v.Type<T>, options?: ParseOptions) =>\n\tasync (parsed: ParsedJsonResponse): Promise<ParsedJsonResponse<T>> => {\n\t\tconst json = schema.parse(parsed.json, options);\n\t\treturn { response: parsed.response, json };\n\t};\n\nconst assertContentType = async (response: Response, typeRegex: RegExp): Promise<void> => {\n\tconst type = response.headers.get('content-type')?.split(';', 1)[0].trim();\n\n\tif (type === undefined) {\n\t\tif (response.body) {\n\t\t\tawait response.body.cancel();\n\t\t}\n\n\t\tthrow new err.ImproperContentTypeError(null, `missing response content-type`);\n\t}\n\n\tif (!typeRegex.test(type)) {\n\t\tif (response.body) {\n\t\t\tawait response.body.cancel();\n\t\t}\n\n\t\tthrow new err.ImproperContentTypeError(type, `unexpected response content-type`);\n\t}\n};\n\nconst readResponse = async (response: Response, maxSize: number): Promise<string> => {\n\tconst rawSize = response.headers.get('content-length');\n\tif (rawSize !== null) {\n\t\tconst size = Number(rawSize);\n\n\t\tif (!Number.isSafeInteger(size) || size <= 0) {\n\t\t\tresponse.body?.cancel();\n\t\t\tthrow new err.ImproperContentLengthError(maxSize, null, `invalid response content-length`);\n\t\t}\n\n\t\tif (size > maxSize) {\n\t\t\tresponse.body?.cancel();\n\t\t\tthrow new err.ImproperContentLengthError(maxSize, size, `response content-length too large`);\n\t\t}\n\t}\n\n\tconst stream = response\n\t\t.body!.pipeThrough(new SizeLimitStream(maxSize))\n\t\t.pipeThrough(new TextDecoderStream());\n\n\tlet text = '';\n\tfor await (const chunk of createStreamIterator(stream)) {\n\t\ttext += chunk;\n\t}\n\n\treturn text;\n};\n\nconst createStreamIterator: <T>(stream: ReadableStream<T>) => AsyncIterableIterator<T> =\n\tSymbol.asyncIterator in ReadableStream.prototype\n\t\t? (stream) => stream[Symbol.asyncIterator]()\n\t\t: (stream) => {\n\t\t\t\tconst reader = stream.getReader();\n\n\t\t\t\treturn {\n\t\t\t\t\t[Symbol.asyncIterator]() {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\tnext() {\n\t\t\t\t\t\treturn reader.read() as Promise<IteratorResult<any>>;\n\t\t\t\t\t},\n\t\t\t\t\tasync return() {\n\t\t\t\t\t\tawait reader.cancel();\n\t\t\t\t\t\treturn { done: true, value: undefined };\n\t\t\t\t\t},\n\t\t\t\t\tasync throw(error: unknown) {\n\t\t\t\t\t\tawait reader.cancel(error);\n\t\t\t\t\t\treturn { done: true, value: undefined };\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t};\n","export class FetchResponseError extends Error {\n\toverride name = 'FetchResponseError';\n}\n\nexport class FailedResponseError extends FetchResponseError {\n\toverride name = 'FailedResponseError';\n\n\tconstructor(public response: Response) {\n\t\tsuper(`got http ${response.status}`);\n\t}\n\n\tget status(): number {\n\t\treturn this.response.status;\n\t}\n}\n\nexport class ImproperContentTypeError extends FetchResponseError {\n\toverride name = 'ImproperContentTypeError';\n\n\tconstructor(\n\t\tpublic contentType: string | null,\n\t\treason: string,\n\t) {\n\t\tsuper(reason);\n\t}\n}\n\nexport class ImproperContentLengthError extends FetchResponseError {\n\toverride name = 'ImproperContentLengthError';\n\n\tconstructor(\n\t\tpublic expectedSize: number,\n\t\tpublic actualSize: number | null,\n\t\treason: string,\n\t) {\n\t\tsuper(reason);\n\t}\n}\n\nexport class ImproperResponseError extends FetchResponseError {\n\toverride name = 'ImproperResponseError';\n\n\tconstructor(reason: string, options?: ErrorOptions) {\n\t\tsuper(reason, options);\n\t}\n}\n","import * as err from '../errors.js';\n\nexport class SizeLimitStream extends TransformStream<Uint8Array<ArrayBuffer>, Uint8Array<ArrayBuffer>> {\n\tconstructor(maxSize: number) {\n\t\tlet bytesRead = 0;\n\n\t\tsuper({\n\t\t\ttransform(chunk, controller) {\n\t\t\t\tbytesRead += chunk.length;\n\n\t\t\t\tif (bytesRead > maxSize) {\n\t\t\t\t\tcontroller.error(\n\t\t\t\t\t\tnew err.ImproperContentLengthError(maxSize, bytesRead, `response content-length too large`),\n\t\t\t\t\t);\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcontroller.enqueue(chunk);\n\t\t\t},\n\t\t});\n\t}\n}\n","import { defs } from '@atcute/identity';\nimport { isResponseOk, parseResponseAsJson, pipe, validateJsonWith } from '@atcute/util-fetch';\n\nexport const fetchDocHandler = pipe(\n\tisResponseOk,\n\tparseResponseAsJson(/^application\\/(did\\+ld\\+)?json$/, 20 * 1024),\n\tvalidateJsonWith(defs.didDocument, { mode: 'passthrough' }),\n);\n","import { webDidToDocumentUrl, type DidDocument } from '@atcute/identity';\nimport type { Did } from '@atcute/lexicons/syntax';\nimport { FailedResponseError } from '@atcute/util-fetch';\n\nimport * as err from '../../errors.js';\nimport type { DidDocumentResolver, ResolveDidDocumentOptions } from '../../types.js';\nimport { fetchDocHandler } from '../utils.js';\n\nexport interface WebDidDocumentResolverOptions {\n\tfetch?: typeof fetch;\n}\n\nexport class WebDidDocumentResolver implements DidDocumentResolver<'web'> {\n\t#fetch: typeof fetch;\n\n\tconstructor({ fetch: fetchThis = fetch }: WebDidDocumentResolverOptions = {}) {\n\t\tthis.#fetch = fetchThis;\n\t}\n\n\tasync resolve(did: Did<'web'>, options?: ResolveDidDocumentOptions): Promise<DidDocument> {\n\t\t// quick sanity check\n\t\tif (!did.startsWith('did:web:')) {\n\t\t\tthrow new err.UnsupportedDidMethodError(did);\n\t\t}\n\n\t\tlet json: DidDocument;\n\n\t\ttry {\n\t\t\tconst url = webDidToDocumentUrl(did);\n\n\t\t\tconst response = await (0, this.#fetch)(url, {\n\t\t\t\tsignal: options?.signal,\n\t\t\t\tcache: options?.noCache ? 'no-cache' : undefined,\n\t\t\t\tredirect: 'manual',\n\t\t\t\theaders: { accept: 'application/did+ld+json,application/json' },\n\t\t\t});\n\n\t\t\tif (response.status >= 300 && response.status < 400) {\n\t\t\t\tthrow new TypeError(`unexpected redirect`);\n\t\t\t}\n\n\t\t\tconst handled = await fetchDocHandler(response);\n\n\t\t\tjson = handled.json;\n\t\t} catch (cause) {\n\t\t\tif (cause instanceof FailedResponseError && cause.status === 404) {\n\t\t\t\tthrow new err.DocumentNotFoundError(did);\n\t\t\t}\n\n\t\t\tthrow new err.FailedDocumentResolutionError(did, { cause });\n\t\t}\n\n\t\treturn json;\n\t}\n}\n\nexport class AtprotoWebDidDocumentResolver implements DidDocumentResolver<'web'> {\n\t#fetch: typeof fetch;\n\n\tconstructor({ fetch: fetchThis = fetch }: WebDidDocumentResolverOptions = {}) {\n\t\tthis.#fetch = fetchThis;\n\t}\n\n\tasync resolve(did: Did<'web'>, options?: ResolveDidDocumentOptions): Promise<DidDocument> {\n\t\t// quick sanity check\n\t\tif (!did.startsWith('did:web:')) {\n\t\t\tthrow new err.UnsupportedDidMethodError(did);\n\t\t}\n\n\t\tconst [host, ...paths] = did.slice(8).split(':').map(decodeURIComponent);\n\t\tconst url = new URL(`https://${host}/.well-known/did.json`);\n\n\t\tif (paths.length > 0) {\n\t\t\tthrow new err.ImproperDidError(did);\n\t\t}\n\n\t\tlet json: DidDocument;\n\n\t\ttry {\n\t\t\tconst response = await (0, this.#fetch)(url, {\n\t\t\t\tsignal: options?.signal,\n\t\t\t\tcache: options?.noCache ? 'no-cache' : undefined,\n\t\t\t\tredirect: 'manual',\n\t\t\t\theaders: { accept: 'application/did+ld+json,application/json' },\n\t\t\t});\n\n\t\t\tif (response.status >= 300 && response.status < 400) {\n\t\t\t\tthrow new TypeError(`unexpected redirect`);\n\t\t\t}\n\n\t\t\tconst handled = await fetchDocHandler(response);\n\n\t\t\tjson = handled.json;\n\t\t} catch (cause) {\n\t\t\tif (cause instanceof FailedResponseError && cause.status === 404) {\n\t\t\t\tthrow new err.DocumentNotFoundError(did);\n\t\t\t}\n\n\t\t\tthrow new err.FailedDocumentResolutionError(did, { cause });\n\t\t}\n\n\t\treturn json;\n\t}\n}\n","import { defs, type DidDocument } from '@atcute/identity';\nimport type { Did } from '@atcute/lexicons/syntax';\nimport {\n\tFailedResponseError,\n\tisResponseOk,\n\tparseResponseAsJson,\n\tpipe,\n\tvalidateJsonWith,\n} from '@atcute/util-fetch';\n\nimport * as v from '@badrap/valita';\n\nimport * as err from '../../errors.js';\nimport type { DidDocumentResolver, ResolveDidDocumentOptions } from '../../types.js';\n\nconst fetchXrpcHandler = pipe(\n\tisResponseOk,\n\tparseResponseAsJson(/^application\\/json$/, 20 * 1024 + 16),\n\tvalidateJsonWith(v.object({ didDoc: defs.didDocument }), { mode: 'passthrough' }),\n);\n\nexport interface XrpcDidDocumentResolverOptions {\n\tserviceUrl: string;\n\tfetch?: typeof fetch;\n}\n\nexport class XrpcDidDocumentResolver implements DidDocumentResolver<string> {\n\treadonly serviceUrl: string;\n\t#fetch: typeof fetch;\n\n\tconstructor({ serviceUrl, fetch: fetchThis = fetch }: XrpcDidDocumentResolverOptions) {\n\t\tthis.serviceUrl = serviceUrl;\n\t\tthis.#fetch = fetchThis;\n\t}\n\n\tasync resolve(did: Did, options?: ResolveDidDocumentOptions): Promise<DidDocument> {\n\t\tlet json: DidDocument;\n\n\t\ttry {\n\t\t\tconst url = new URL(`/xrpc/com.atproto.identity.resolveDid`, this.serviceUrl);\n\t\t\turl.searchParams.set('did', did);\n\n\t\t\tconst response = await (0, this.#fetch)(url, {\n\t\t\t\tsignal: options?.signal,\n\t\t\t\tcache: options?.noCache ? 'no-cache' : undefined,\n\t\t\t\theaders: { accept: 'application/json' },\n\t\t\t});\n\n\t\t\tconst handled = await fetchXrpcHandler(response);\n\n\t\t\tjson = handled.json.didDoc;\n\t\t} catch (cause) {\n\t\t\tif (cause instanceof FailedResponseError && cause.status === 404) {\n\t\t\t\tthrow new err.DocumentNotFoundError(did);\n\t\t\t}\n\n\t\t\tthrow new err.FailedDocumentResolutionError(did, { cause });\n\t\t}\n\n\t\treturn json;\n\t}\n}\n","import type { AtprotoDid, Handle } from '@atcute/lexicons/syntax';\n\nimport * as err from '../errors.js';\nimport type { HandleResolver, ResolveHandleOptions } from '../types.js';\n\nexport type CompositeStrategy = 'http-first' | 'dns-first' | 'race' | 'both';\n\nexport interface CompositeHandleResolverOptions {\n\t/** controls how the resolution is done, defaults to 'race' */\n\tstrategy?: CompositeStrategy;\n\t/** the methods to use for resolving the handle. */\n\tmethods: Record<'http' | 'dns', HandleResolver>;\n}\n\nexport class CompositeHandleResolver implements HandleResolver {\n\t#methods: Record<'http' | 'dns', HandleResolver>;\n\tstrategy: CompositeStrategy;\n\n\tconstructor({ methods, strategy = 'race' }: CompositeHandleResolverOptions) {\n\t\tthis.#methods = methods;\n\t\tthis.strategy = strategy;\n\t}\n\n\tasync resolve(handle: Handle, options?: ResolveHandleOptions): Promise<AtprotoDid> {\n\t\tconst { http, dns } = this.#methods;\n\n\t\tconst parentSignal = options?.signal;\n\t\tconst controller = new AbortController();\n\t\tif (parentSignal) {\n\t\t\tparentSignal.addEventListener('abort', () => controller.abort(), { signal: controller.signal });\n\t\t}\n\n\t\tconst dnsPromise = dns.resolve(handle, { ...options, signal: controller.signal });\n\t\tconst httpPromise = http.resolve(handle, { ...options, signal: controller.signal });\n\n\t\tswitch (this.strategy) {\n\t\t\tcase 'race': {\n\t\t\t\treturn new Promise((resolve) => {\n\t\t\t\t\tdnsPromise.then(\n\t\t\t\t\t\t(did) => {\n\t\t\t\t\t\t\tcontroller.abort();\n\t\t\t\t\t\t\tresolve(did);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t() => resolve(httpPromise),\n\t\t\t\t\t);\n\n\t\t\t\t\thttpPromise.then(\n\t\t\t\t\t\t(did) => {\n\t\t\t\t\t\t\tcontroller.abort();\n\t\t\t\t\t\t\tresolve(did);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t() => resolve(dnsPromise),\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t\tcase 'dns-first': {\n\t\t\t\thttpPromise.catch(noop);\n\n\t\t\t\tconst resolved = await dnsPromise.catch(noop);\n\t\t\t\tif (resolved) {\n\t\t\t\t\tcontroller.abort();\n\t\t\t\t\treturn resolved;\n\t\t\t\t}\n\n\t\t\t\treturn httpPromise;\n\t\t\t}\n\t\t\tcase 'http-first': {\n\t\t\t\tdnsPromise.catch(noop);\n\n\t\t\t\tconst resolved = await httpPromise.catch(noop);\n\t\t\t\tif (resolved) {\n\t\t\t\t\tcontroller.abort();\n\t\t\t\t\treturn resolved;\n\t\t\t\t}\n\n\t\t\t\treturn dnsPromise;\n\t\t\t}\n\t\t\tcase 'both': {\n\t\t\t\tconst [dnsResponse, httpResponse] = await Promise.allSettled([dnsPromise, httpPromise]);\n\n\t\t\t\tconst dnsDid = dnsResponse.status === 'fulfilled' ? dnsResponse.value : undefined;\n\t\t\t\tconst httpDid = httpResponse.status === 'fulfilled' ? httpResponse.value : undefined;\n\n\t\t\t\tif (dnsDid && httpDid && dnsDid !== httpDid) {\n\t\t\t\t\tthrow new err.AmbiguousHandleError(handle);\n\t\t\t\t}\n\n\t\t\t\treturn dnsDid || httpDid || dnsPromise;\n\t\t\t}\n\t\t}\n\t}\n}\n\nconst noop = () => {};\n","import { isAtprotoDid } from '@atcute/identity';\nimport type { AtprotoDid, Handle } from '@atcute/lexicons/syntax';\nimport { type DohJsonTxtResult, fetchDohJsonTxt } from '@atcute/util-fetch';\n\nimport * as err from '../../errors.js';\nimport type { HandleResolver, ResolveHandleOptions } from '../../types.js';\n\nconst SUBDOMAIN = '_atproto';\nconst PREFIX = 'did=';\n\nexport interface DohJsonHandleResolverOptions {\n\tdohUrl: string;\n\tfetch?: typeof fetch;\n}\n\nexport class DohJsonHandleResolver implements HandleResolver {\n\treadonly dohUrl: string;\n\t#fetch: typeof fetch;\n\n\tconstructor({ dohUrl, fetch: fetchThis = fetch }: DohJsonHandleResolverOptions) {\n\t\tthis.dohUrl = dohUrl;\n\t\tthis.#fetch = fetchThis;\n\t}\n\n\tasync resolve(handle: Handle, options?: ResolveHandleOptions): Promise<AtprotoDid> {\n\t\tlet json: DohJsonTxtResult;\n\n\t\ttry {\n\t\t\tconst url = new URL(this.dohUrl);\n\t\t\turl.searchParams.set('name', `${SUBDOMAIN}.${handle}`);\n\t\t\turl.searchParams.set('type', 'TXT');\n\n\t\t\tconst response = await (0, this.#fetch)(url, {\n\t\t\t\tsignal: options?.signal,\n\t\t\t\tcache: options?.noCache ? 'no-cache' : undefined,\n\t\t\t\theaders: { accept: 'application/dns-json' },\n\t\t\t});\n\n\t\t\tconst handled = await fetchDohJsonTxt(response);\n\n\t\t\tjson = handled.json;\n\t\t} catch (cause) {\n\t\t\tthrow new err.FailedHandleResolutionError(handle, { cause });\n\t\t}\n\n\t\tconst status = json.Status;\n\t\tconst answers = json.Answer;\n\n\t\tif (status !== 0 /* NOERROR */) {\n\t\t\tif (status === 3 /* NXDOMAIN */) {\n\t\t\t\tthrow new err.DidNotFoundError(handle);\n\t\t\t}\n\n\t\t\tthrow new err.FailedHandleResolutionError(handle, {\n\t\t\t\tcause: new TypeError(`dns returned ${status}`),\n\t\t\t});\n\t\t}\n\n\t\tfor (let i = 0, il = answers.length; i < il; i++) {\n\t\t\tconst answer = answers[i];\n\t\t\tconst data = answer.data;\n\n\t\t\tif (!data.startsWith(PREFIX)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tfor (let j = i + 1; j < il; j++) {\n\t\t\t\tconst data = answers[j].data;\n\t\t\t\tif (data.startsWith(PREFIX)) {\n\t\t\t\t\tthrow new err.AmbiguousHandleError(handle);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst did = data.slice(PREFIX.length);\n\t\t\tif (!isAtprotoDid(did)) {\n\t\t\t\tthrow new err.InvalidResolvedHandleError(handle, did);\n\t\t\t}\n\n\t\t\treturn did;\n\t\t}\n\n\t\t// theoretically this shouldn't happen, it should've returned NXDOMAIN\n\t\tthrow new err.DidNotFoundError(handle);\n\t}\n}\n","import { isAtprotoDid } from '@atcute/identity';\nimport type { AtprotoDid, Handle } from '@atcute/lexicons/syntax';\nimport { FailedResponseError, isResponseOk, pipe, readResponseAsText } from '@atcute/util-fetch';\n\nimport * as err from '../../errors.js';\nimport type { HandleResolver, ResolveHandleOptions } from '../../types.js';\n\nexport interface WellKnownHandleResolverOptions {\n\tfetch?: typeof fetch;\n}\n\nconst fetchWellKnownHandler = pipe(isResponseOk, readResponseAsText(2048 + 16));\n\nexport class WellKnownHandleResolver implements HandleResolver {\n\t#fetch: typeof fetch;\n\n\tconstructor({ fetch: fetchThis = fetch }: WellKnownHandleResolverOptions = {}) {\n\t\tthis.#fetch = fetchThis;\n\t}\n\n\tasync resolve(handle: Handle, options?: ResolveHandleOptions): Promise<AtprotoDid> {\n\t\tlet text: string;\n\n\t\ttry {\n\t\t\tconst url = new URL('/.well-known/atproto-did', `https://${handle}`);\n\n\t\t\tconst response = await (0, this.#fetch)(url, {\n\t\t\t\tsignal: options?.signal,\n\t\t\t\tcache: options?.noCache ? 'no-cache' : undefined,\n\t\t\t\tredirect: 'manual',\n\t\t\t});\n\n\t\t\tif (response.status >= 300 && response.status < 400) {\n\t\t\t\tthrow new TypeError(`unexpected redirect`);\n\t\t\t}\n\n\t\t\tconst handled = await fetchWellKnownHandler(response);\n\n\t\t\ttext = handled.text;\n\t\t} catch (cause) {\n\t\t\tif (cause instanceof FailedResponseError && cause.status === 404) {\n\t\t\t\tthrow new err.DidNotFoundError(handle);\n\t\t\t}\n\n\t\t\tthrow new err.FailedHandleResolutionError(handle, { cause });\n\t\t}\n\n\t\tconst did = text.split('\\n')[0]!.trim();\n\t\tif (!isAtprotoDid(did)) {\n\t\t\tthrow new err.InvalidResolvedHandleError(handle, did);\n\t\t}\n\n\t\treturn did;\n\t}\n}\n","import * as v from '@badrap/valita';\n\nimport { isAtprotoDid } from '@atcute/identity';\nimport type { AtprotoDid, Handle } from '@atcute/lexicons/syntax';\nimport {\n\tFailedResponseError,\n\tisResponseOk,\n\tparseResponseAsJson,\n\tpipe,\n\tvalidateJsonWith,\n} from '@atcute/util-fetch';\n\nimport * as err from '../../errors.js';\nimport type { HandleResolver, ResolveHandleOptions } from '../../types.js';\n\nconst response = v.object({\n\tdid: v.string().assert((input) => isAtprotoDid(input)),\n});\n\nconst fetchXrpcHandler = pipe(\n\tisResponseOk,\n\tparseResponseAsJson(/^application\\/json$/, 4 * 1024),\n\tvalidateJsonWith(response, { mode: 'passthrough' }),\n);\n\nexport interface XrpcHandleResolverOptions {\n\tserviceUrl: string;\n\tfetch?: typeof fetch;\n}\n\nexport class XrpcHandleResolver implements HandleResolver {\n\treadonly serviceUrl: string;\n\t#fetch: typeof fetch;\n\n\tconstructor({ serviceUrl, fetch: fetchThis = fetch }: XrpcHandleResolverOptions) {\n\t\tthis.serviceUrl = serviceUrl;\n\t\tthis.#fetch = fetchThis;\n\t}\n\n\tasync resolve(handle: Handle, options?: ResolveHandleOptions): Promise<AtprotoDid> {\n\t\tlet json: v.Infer<typeof response>;\n\n\t\ttry {\n\t\t\tconst url = new URL(`/xrpc/com.atproto.identity.resolveHandle`, this.serviceUrl);\n\t\t\turl.searchParams.set('handle', handle);\n\n\t\t\tconst response = await (0, this.#fetch)(url, {\n\t\t\t\tsignal: options?.signal,\n\t\t\t\tcache: options?.noCache ? 'no-cache' : undefined,\n\t\t\t\theaders: { accept: 'application/json' },\n\t\t\t});\n\n\t\t\tconst handled = await fetchXrpcHandler(response);\n\n\t\t\tjson = handled.json;\n\t\t} catch (cause) {\n\t\t\tif (cause instanceof FailedResponseError && cause.status === 400) {\n\t\t\t\tthrow new err.DidNotFoundError(handle);\n\t\t\t}\n\n\t\t\tthrow new err.FailedHandleResolutionError(handle, { cause });\n\t\t}\n\n\t\treturn json.did;\n\t}\n}\n","export {};\n//# sourceMappingURL=types.js.map"],"mappings":"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","names":["ok","err","ValitaError","literal","object","record","array","tuple","union","expiresAt","response","fromBase64Url","toBase64Url","HAS_NATIVE_SUPPORT","fromBase64Url","HAS_NATIVE_SUPPORT","toBase64Url","_fromCharCode","ALPHABET","toBase64Url","toBase64Url","toBase64Url","err","err","response","pending","response","url","response","err","fromBase64Url","value","err","response","response","service","isUrlParseSupported","err","FetchResponseError","response","response","response","response","fetchXrpcHandler","response"],"sourceRoot":"file:///var/home/toko/Code/tokono.ma/diffuse-artifacts/diffuse","file":"/chunk-BP7OSAES.js.map"}
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CMU4QLMC.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CMU4QLMC.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CMU4QLMC.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CMU4QLMC.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CNO46O5F.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CNO46O5F.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CNO46O5F.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CNO46O5F.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CPN2PPDQ.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CPN2PPDQ.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CPN2PPDQ.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CPN2PPDQ.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CPS76EE2.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CPS76EE2.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CPS76EE2.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CPS76EE2.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CXGVZUBI.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CXGVZUBI.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CXGVZUBI.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CXGVZUBI.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-DUCTMCPX.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-DUCTMCPX.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-DUCTMCPX.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-DUCTMCPX.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EEUCFWD4.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EEUCFWD4.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EEUCFWD4.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EEUCFWD4.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EEVL24MR.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EEVL24MR.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EEVL24MR.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EEVL24MR.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EJ2QF5QE.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EJ2QF5QE.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EJ2QF5QE.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EJ2QF5QE.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EMWRB7HX.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EMWRB7HX.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EMWRB7HX.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EMWRB7HX.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-ERP4MUHU.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-ERP4MUHU.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-ERP4MUHU.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-ERP4MUHU.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EY2MBHBU.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EY2MBHBU.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EY2MBHBU.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EY2MBHBU.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FAW4EB7G.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FAW4EB7G.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FAW4EB7G.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FAW4EB7G.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FIWHH4Y5.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FIWHH4Y5.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FIWHH4Y5.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FIWHH4Y5.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FVPZU4QY.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FVPZU4QY.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FVPZU4QY.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FVPZU4QY.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FVTTELAZ.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FVTTELAZ.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FVTTELAZ.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FVTTELAZ.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FZQXS3RE.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FZQXS3RE.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FZQXS3RE.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FZQXS3RE.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-G2ZO6QIY.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-G2ZO6QIY.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-G2ZO6QIY.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-G2ZO6QIY.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-G56PUJUJ.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-G56PUJUJ.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-G56PUJUJ.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-G56PUJUJ.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-GMLGV4UU.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-GMLGV4UU.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-GMLGV4UU.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-GMLGV4UU.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-GSA3UBRU.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-GSA3UBRU.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-GSA3UBRU.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-GSA3UBRU.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-GX3WPNEX.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-GX3WPNEX.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-GX3WPNEX.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-GX3WPNEX.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-H3WG7GN4.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-H3WG7GN4.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-H3WG7GN4.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-H3WG7GN4.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HDWTLLD6.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HDWTLLD6.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HDWTLLD6.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HDWTLLD6.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HLQZU6M2.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HLQZU6M2.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HLQZU6M2.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HLQZU6M2.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HN4F5JEZ.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HN4F5JEZ.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HN4F5JEZ.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HN4F5JEZ.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HNTKRGE7.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HNTKRGE7.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HNTKRGE7.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HNTKRGE7.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HRGYPYP6.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HRGYPYP6.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HRGYPYP6.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HRGYPYP6.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-IPY3IZ42.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-IPY3IZ42.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-IPY3IZ42.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-IPY3IZ42.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-J34EA5F4.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-J34EA5F4.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-J34EA5F4.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-J34EA5F4.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JEKGVPZ5.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JEKGVPZ5.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JEKGVPZ5.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JEKGVPZ5.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JQFGN3M7.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JQFGN3M7.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JQFGN3M7.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JQFGN3M7.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JS4TF33K.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JS4TF33K.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JS4TF33K.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JS4TF33K.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JSOX7OQB.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JSOX7OQB.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JSOX7OQB.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JSOX7OQB.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JUPK7PXD.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JUPK7PXD.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JUPK7PXD.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JUPK7PXD.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-KGUWC6A2.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-KGUWC6A2.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-KGUWC6A2.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-KGUWC6A2.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-KIMDMO5U.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-KIMDMO5U.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-KIMDMO5U.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-KIMDMO5U.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-LGC5DXHT.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-LGC5DXHT.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-LGC5DXHT.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-LGC5DXHT.js.map
-683
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-LPLLWF34.js
··· 1 - import { 2 - OAuthUserAgent, 3 - login, 4 - logout, 5 - restoreOrFinalize 6 - } from "./chunk-BP7OSAES.js"; 7 - import { 8 - outputManager 9 - } from "./chunk-S4RHYXDI.js"; 10 - import { 11 - BroadcastableDiffuseElement 12 - } from "./chunk-FIWHH4Y5.js"; 13 - import { 14 - signal 15 - } from "./chunk-KIMDMO5U.js"; 16 - import { 17 - __name, 18 - init_Buffer, 19 - init_process 20 - } from "./chunk-FZQXS3RE.js"; 21 - 22 - // components/output/raw/atproto/element.js 23 - init_Buffer(); 24 - init_process(); 25 - 26 - // ../node_modules/.deno/@atcute+client@4.2.1/node_modules/@atcute/client/dist/index.js 27 - init_Buffer(); 28 - init_process(); 29 - 30 - // ../node_modules/.deno/@atcute+client@4.2.1/node_modules/@atcute/client/dist/client.js 31 - init_Buffer(); 32 - init_process(); 33 - 34 - // ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/validations/index.js 35 - init_Buffer(); 36 - init_process(); 37 - 38 - // ../node_modules/.deno/@atcute+util-text@1.1.1/node_modules/@atcute/util-text/dist/index.js 39 - init_Buffer(); 40 - init_process(); 41 - var segmenter = new Intl.Segmenter(); 42 - 43 - // ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/interfaces/bytes.js 44 - init_Buffer(); 45 - init_process(); 46 - 47 - // ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/interfaces/index.js 48 - init_Buffer(); 49 - init_process(); 50 - 51 - // ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/interfaces/blob.js 52 - init_Buffer(); 53 - init_process(); 54 - 55 - // ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/interfaces/cid-link.js 56 - init_Buffer(); 57 - init_process(); 58 - 59 - // ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/validations/utils.js 60 - init_Buffer(); 61 - init_process(); 62 - 63 - // ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/validations/index.js 64 - var xrpcSchemaGenerated = false; 65 - var ok = /* @__PURE__ */ __name(/* @__NO_SIDE_EFFECTS__ */ (value) => { 66 - return { ok: true, value }; 67 - }, "ok"); 68 - var FLAG_EMPTY = 0; 69 - var FLAG_ABORT_EARLY = 1 << 0; 70 - var cloneIssueWithPath = /* @__PURE__ */ __name((issue, path) => { 71 - const { ok: _ok, msg: _fmt, ...clone } = issue; 72 - return { ...clone, path }; 73 - }, "cloneIssueWithPath"); 74 - var collectIssues = /* @__PURE__ */ __name((tree, path = [], issues = []) => { 75 - for (; ; ) { 76 - switch (tree.code) { 77 - case "join": { 78 - collectIssues(tree.left, path.slice(), issues); 79 - tree = tree.right; 80 - continue; 81 - } 82 - case "prepend": { 83 - path.push(tree.key); 84 - tree = tree.tree; 85 - continue; 86 - } 87 - default: { 88 - issues.push(cloneIssueWithPath(tree, path)); 89 - return issues; 90 - } 91 - } 92 - } 93 - }, "collectIssues"); 94 - var countIssues = /* @__PURE__ */ __name((tree) => { 95 - let count = 0; 96 - for (; ; ) { 97 - switch (tree.code) { 98 - case "join": { 99 - count += countIssues(tree.left); 100 - tree = tree.right; 101 - continue; 102 - } 103 - case "prepend": { 104 - tree = tree.tree; 105 - continue; 106 - } 107 - default: { 108 - return count + 1; 109 - } 110 - } 111 - } 112 - }, "countIssues"); 113 - var formatIssueTree = /* @__PURE__ */ __name((tree) => { 114 - let path = ""; 115 - let count = 0; 116 - for (; ; ) { 117 - switch (tree.code) { 118 - case "join": { 119 - count += countIssues(tree.right); 120 - tree = tree.left; 121 - continue; 122 - } 123 - case "prepend": { 124 - path += `.${tree.key}`; 125 - tree = tree.tree; 126 - continue; 127 - } 128 - } 129 - break; 130 - } 131 - const message = tree.msg(); 132 - let msg = `${tree.code} at ${path || "."} (${message})`; 133 - if (count > 0) { 134 - msg += ` (+${count} other issue(s))`; 135 - } 136 - return msg; 137 - }, "formatIssueTree"); 138 - var ValidationError = class extends Error { 139 - static { 140 - __name(this, "ValidationError"); 141 - } 142 - name = "ValidationError"; 143 - #issueTree; 144 - constructor(issueTree) { 145 - super(); 146 - this.#issueTree = issueTree; 147 - } 148 - get message() { 149 - return formatIssueTree(this.#issueTree); 150 - } 151 - get issues() { 152 - return collectIssues(this.#issueTree); 153 - } 154 - }; 155 - var ErrImpl = class { 156 - static { 157 - __name(this, "ErrImpl"); 158 - } 159 - ok = false; 160 - #issueTree; 161 - constructor(issueTree) { 162 - this.#issueTree = issueTree; 163 - } 164 - get message() { 165 - return formatIssueTree(this.#issueTree); 166 - } 167 - get issues() { 168 - return collectIssues(this.#issueTree); 169 - } 170 - throw() { 171 - throw new ValidationError(this.#issueTree); 172 - } 173 - }; 174 - var safeParse = /* @__PURE__ */ __name(/* @__NO_SIDE_EFFECTS__ */ (schema, input) => { 175 - const r = schema["~run"](input, FLAG_EMPTY); 176 - if (r === void 0) { 177 - return /* @__PURE__ */ ok(input); 178 - } 179 - if (r.ok) { 180 - return r; 181 - } 182 - return new ErrImpl(r); 183 - }, "safeParse"); 184 - 185 - // ../node_modules/.deno/@atcute+client@4.2.1/node_modules/@atcute/client/dist/fetch-handler.js 186 - init_Buffer(); 187 - init_process(); 188 - var buildFetchHandler = /* @__PURE__ */ __name((handler) => { 189 - if (typeof handler === "object") { 190 - return handler.handle.bind(handler); 191 - } 192 - return handler; 193 - }, "buildFetchHandler"); 194 - 195 - // ../node_modules/.deno/@atcute+client@4.2.1/node_modules/@atcute/client/dist/client.js 196 - var JSON_CONTENT_TYPE_RE = /\bapplication\/json\b/; 197 - var Client = class _Client { 198 - static { 199 - __name(this, "Client"); 200 - } 201 - handler; 202 - proxy; 203 - constructor({ handler, proxy = null }) { 204 - this.handler = buildFetchHandler(handler); 205 - this.proxy = proxy; 206 - } 207 - /** 208 - * clones this XRPC client 209 - * @param opts options to merge with 210 - * @returns the cloned XRPC client 211 - */ 212 - clone({ handler = this.handler, proxy = this.proxy } = {}) { 213 - return new _Client({ handler, proxy }); 214 - } 215 - get(name, options = {}) { 216 - return this.#perform("get", name, options); 217 - } 218 - post(name, options = {}) { 219 - return this.#perform("post", name, options); 220 - } 221 - async call(schema, options = {}) { 222 - if (!xrpcSchemaGenerated) { 223 - return; 224 - } 225 - if ("mainSchema" in schema) { 226 - schema = schema.mainSchema; 227 - } 228 - if (schema.params !== null) { 229 - const paramsResult = safeParse(schema.params, options.params); 230 - if (!paramsResult.ok) { 231 - throw new ClientValidationError("params", paramsResult); 232 - } 233 - } 234 - if (schema.type === "xrpc_procedure" && schema.input?.type === "lex") { 235 - const inputResult = safeParse(schema.input.schema, options.input); 236 - if (!inputResult.ok) { 237 - throw new ClientValidationError("input", inputResult); 238 - } 239 - } 240 - const isQuery = schema.type === "xrpc_query"; 241 - const method = isQuery ? "get" : "post"; 242 - if (options.as === void 0 && schema.output?.type === "blob") { 243 - throw new TypeError(`\`as\` option is required for endpoints returning blobs`); 244 - } 245 - const format = options.as !== void 0 ? options.as : schema.output?.type === "lex" ? "json" : null; 246 - const response = await this.#perform(method, schema.nsid, { 247 - params: options.params, 248 - input: isQuery ? void 0 : options.input, 249 - as: format, 250 - signal: options.signal, 251 - headers: options.headers 252 - }); 253 - if (format === "json" && response.ok && schema.output?.type === "lex") { 254 - const outputResult = safeParse(schema.output.schema, response.data); 255 - if (!outputResult.ok) { 256 - throw new ClientValidationError("output", outputResult); 257 - } 258 - return { 259 - ok: true, 260 - status: response.status, 261 - headers: response.headers, 262 - data: outputResult.value 263 - }; 264 - } 265 - return response; 266 - } 267 - async #perform(method, name, { signal: signal2, as: format = "json", headers, input, params }) { 268 - const isWebInput = input && (input instanceof Blob || ArrayBuffer.isView(input) || input instanceof ArrayBuffer || input instanceof ReadableStream); 269 - const url = `/xrpc/${name}` + _constructSearchParams(params); 270 - const response = await this.handler(url, { 271 - method, 272 - signal: signal2, 273 - body: input && !isWebInput ? JSON.stringify(input) : input, 274 - headers: _mergeHeaders(headers, { 275 - "content-type": input && !isWebInput ? "application/json" : null, 276 - "atproto-proxy": _constructProxyHeader(this.proxy) 277 - }), 278 - duplex: input instanceof ReadableStream ? "half" : void 0 279 - }); 280 - { 281 - const status = response.status; 282 - const headers2 = response.headers; 283 - const type = headers2.get("content-type"); 284 - if (status !== 200) { 285 - let json; 286 - if (type != null && JSON_CONTENT_TYPE_RE.test(type)) { 287 - try { 288 - const parsed = await response.json(); 289 - if (isXRPCErrorPayload(parsed)) { 290 - json = parsed; 291 - } 292 - } catch { 293 - } 294 - } else { 295 - await response.body?.cancel(); 296 - } 297 - return { 298 - ok: false, 299 - status, 300 - headers: headers2, 301 - data: json ?? { 302 - error: `UnknownXRPCError`, 303 - message: `Request failed with status code ${status}` 304 - } 305 - }; 306 - } 307 - { 308 - let data; 309 - switch (format) { 310 - case "json": { 311 - if (type != null && JSON_CONTENT_TYPE_RE.test(type)) { 312 - data = await response.json(); 313 - } else { 314 - await response.body?.cancel(); 315 - throw new TypeError(`Invalid response content-type (got ${type})`); 316 - } 317 - break; 318 - } 319 - case null: { 320 - data = null; 321 - await response.body?.cancel(); 322 - break; 323 - } 324 - case "blob": { 325 - data = await response.blob(); 326 - break; 327 - } 328 - case "bytes": { 329 - data = new Uint8Array(await response.arrayBuffer()); 330 - break; 331 - } 332 - case "stream": { 333 - data = response.body; 334 - break; 335 - } 336 - } 337 - return { 338 - ok: true, 339 - status, 340 - headers: headers2, 341 - data 342 - }; 343 - } 344 - } 345 - } 346 - }; 347 - var _constructSearchParams = /* @__PURE__ */ __name((params) => { 348 - let searchParams; 349 - for (const key in params) { 350 - const value = params[key]; 351 - if (value !== void 0) { 352 - searchParams ??= new URLSearchParams(); 353 - if (Array.isArray(value)) { 354 - for (let idx = 0, len = value.length; idx < len; idx++) { 355 - const val = value[idx]; 356 - searchParams.append(key, "" + val); 357 - } 358 - } else { 359 - searchParams.set(key, "" + value); 360 - } 361 - } 362 - } 363 - return searchParams ? `?` + searchParams.toString() : ""; 364 - }, "_constructSearchParams"); 365 - var _constructProxyHeader = /* @__PURE__ */ __name((proxy) => { 366 - if (proxy != null) { 367 - return `${proxy.did}${proxy.serviceId}`; 368 - } 369 - return null; 370 - }, "_constructProxyHeader"); 371 - var _mergeHeaders = /* @__PURE__ */ __name((init, defaults) => { 372 - let headers; 373 - for (const name in defaults) { 374 - const value = defaults[name]; 375 - if (value !== null) { 376 - headers ??= new Headers(init); 377 - if (!headers.has(name)) { 378 - headers.set(name, value); 379 - } 380 - } 381 - } 382 - return headers ?? init; 383 - }, "_mergeHeaders"); 384 - var isXRPCErrorPayload = /* @__PURE__ */ __name((input) => { 385 - if (typeof input !== "object" || input == null) { 386 - return false; 387 - } 388 - const kindType = typeof input.error; 389 - const messageType = typeof input.message; 390 - return kindType === "string" && (messageType === "undefined" || messageType === "string"); 391 - }, "isXRPCErrorPayload"); 392 - var ok2 = /* @__PURE__ */ __name((input) => { 393 - if (input instanceof Promise) { 394 - return input.then(ok2); 395 - } 396 - if (input.ok) { 397 - return input.data; 398 - } 399 - throw new ClientResponseError(input); 400 - }, "ok"); 401 - var ClientResponseError = class extends Error { 402 - static { 403 - __name(this, "ClientResponseError"); 404 - } 405 - /** error name returned by service */ 406 - error; 407 - /** error message returned by service */ 408 - description; 409 - /** response status */ 410 - status; 411 - /** response headers */ 412 - headers; 413 - constructor({ status, headers = new Headers(), data }) { 414 - super(`${data.error} > ${data.message ?? "(unspecified description)"}`); 415 - this.name = "ClientResponseError"; 416 - this.error = data.error; 417 - this.description = data.message; 418 - this.status = status; 419 - this.headers = headers; 420 - } 421 - }; 422 - var ClientValidationError = class extends Error { 423 - static { 424 - __name(this, "ClientValidationError"); 425 - } 426 - /** validation target (params, input, or output) */ 427 - target; 428 - /** validation result */ 429 - result; 430 - constructor(target, result) { 431 - super(`validation failed for ${target}: ${result.message}`); 432 - this.name = "ClientValidationError"; 433 - this.target = target; 434 - this.result = result; 435 - } 436 - }; 437 - 438 - // ../node_modules/.deno/@atcute+client@4.2.1/node_modules/@atcute/client/dist/credential-manager.js 439 - init_Buffer(); 440 - init_process(); 441 - 442 - // ../node_modules/.deno/@atcute+client@4.2.1/node_modules/@atcute/client/dist/utils/jwt.js 443 - init_Buffer(); 444 - init_process(); 445 - 446 - // components/output/raw/atproto/element.js 447 - var ATProtoOutput = class extends BroadcastableDiffuseElement { 448 - static { 449 - __name(this, "ATProtoOutput"); 450 - } 451 - static NAME = "diffuse/output/raw/atproto"; 452 - /** @type {Client | null} */ 453 - #rpc = null; 454 - /** @type {OAuthUserAgent | null} */ 455 - #agent = null; 456 - /** @type {string | null} */ 457 - #did = null; 458 - /** Public signal exposing the authenticated DID (null when not logged in). */ 459 - $did = signal( 460 - /** @type {string | null} */ 461 - null 462 - ); 463 - #manager; 464 - /** @type {PromiseWithResolvers<void>} */ 465 - #authenticated = Promise.withResolvers(); 466 - constructor() { 467 - super(); 468 - this.#manager = outputManager({ 469 - init: /* @__PURE__ */ __name(async () => { 470 - await this.#ensureAuthenticated(); 471 - return true; 472 - }, "init"), 473 - facets: { 474 - empty: /* @__PURE__ */ __name(() => [], "empty"), 475 - get: /* @__PURE__ */ __name(() => this.#listRecords("sh.diffuse.output.facet"), "get"), 476 - put: /* @__PURE__ */ __name((data) => this.#putRecords("sh.diffuse.output.facet", data), "put") 477 - }, 478 - playlists: { 479 - empty: /* @__PURE__ */ __name(() => [], "empty"), 480 - get: /* @__PURE__ */ __name(() => this.#listRecords("sh.diffuse.output.playlist"), "get"), 481 - put: /* @__PURE__ */ __name((data) => this.#putRecords("sh.diffuse.output.playlist", data), "put") 482 - }, 483 - themes: { 484 - empty: /* @__PURE__ */ __name(() => [], "empty"), 485 - get: /* @__PURE__ */ __name(() => this.#listRecords("sh.diffuse.output.theme"), "get"), 486 - put: /* @__PURE__ */ __name((data) => this.#putRecords("sh.diffuse.output.theme", data), "put") 487 - }, 488 - tracks: { 489 - empty: /* @__PURE__ */ __name(() => [], "empty"), 490 - get: /* @__PURE__ */ __name(() => this.#listRecords("sh.diffuse.output.track"), "get"), 491 - put: /* @__PURE__ */ __name((data) => this.#putRecords("sh.diffuse.output.track", data), "put") 492 - } 493 - }); 494 - this.facets = this.#manager.facets; 495 - this.playlists = this.#manager.playlists; 496 - this.themes = this.#manager.themes; 497 - this.tracks = this.#manager.tracks; 498 - } 499 - // LIFECYCLE 500 - /** @override */ 501 - connectedCallback() { 502 - if (this.hasAttribute("group")) { 503 - const actions = this.broadcast(this.nameWithGroup, { 504 - put: { strategy: "replicate", fn: this.#putIncoming } 505 - }); 506 - if (actions) { 507 - this.#put = this.#putOutgoing(actions.put); 508 - } 509 - } 510 - super.connectedCallback(); 511 - this.#tryRestore(); 512 - } 513 - // AUTH 514 - async #tryRestore() { 515 - await this.whenConnected(); 516 - const session = await restoreOrFinalize(); 517 - if (session) { 518 - this.#setSession(session); 519 - } 520 - } 521 - /** 522 - * @param {import("@atcute/oauth-browser-client").Session} session 523 - */ 524 - #setSession(session) { 525 - this.#agent = new OAuthUserAgent(session); 526 - this.#rpc = new Client({ handler: this.#agent }); 527 - this.#did = session.info.sub; 528 - this.$did.value = session.info.sub; 529 - this.#authenticated.resolve(); 530 - } 531 - async #ensureAuthenticated() { 532 - await this.whenConnected(); 533 - return this.#authenticated.promise; 534 - } 535 - /** 536 - * Initiate the OAuth flow. 537 - * Navigates the browser to the authorization server. 538 - * 539 - * @param {string} handle 540 - */ 541 - async login(handle) { 542 - await login(handle); 543 - } 544 - /** 545 - * Sign out and revoke the current session. 546 - */ 547 - async logout() { 548 - if (this.#agent) { 549 - await logout(this.#agent); 550 - this.#agent = null; 551 - this.#rpc = null; 552 - this.#did = null; 553 - this.$did.value = null; 554 - this.#authenticated = Promise.withResolvers(); 555 - } 556 - } 557 - // RECORDS 558 - /** 559 - * @template T 560 - * @param {string} collection 561 - * @returns {Promise<T[]>} 562 - */ 563 - async #listRecords(collection) { 564 - if (!this.#rpc || !this.#did) return []; 565 - const records = []; 566 - let cursor; 567 - do { 568 - const page = await ok2(this.#rpc.get( 569 - "com.atproto.repo.listRecords", 570 - { params: { repo: this.#did, collection, limit: 100, cursor } } 571 - )); 572 - for (const record of page.records) { 573 - records.push(record.value); 574 - } 575 - cursor = page.cursor; 576 - } while (cursor); 577 - return records; 578 - } 579 - /** 580 - * @param {string} collection 581 - * @param {Array<{ id: string }>} data 582 - */ 583 - async #putRecordsSync(collection, data) { 584 - if (!this.#rpc || !this.#did) return; 585 - const existing = /* @__PURE__ */ new Map(); 586 - let cursor; 587 - do { 588 - const page = await ok2(this.#rpc.get( 589 - "com.atproto.repo.listRecords", 590 - { params: { repo: this.#did, collection, limit: 100, cursor } } 591 - )); 592 - for (const record of page.records) { 593 - const rkey = record.uri.split("/").pop(); 594 - existing.set(record.value.id, { rkey, value: record.value }); 595 - } 596 - cursor = page.cursor; 597 - } while (cursor); 598 - const desired = new Map(data.map((record) => [record.id, record])); 599 - const writes = []; 600 - for (const [id, { rkey }] of existing) { 601 - if (!desired.has(id)) { 602 - writes.push({ 603 - $type: "com.atproto.repo.applyWrites#delete", 604 - collection, 605 - rkey 606 - }); 607 - } 608 - } 609 - for (const [id, record] of desired) { 610 - const entry = existing.get(id); 611 - if (!entry) { 612 - writes.push({ 613 - $type: "com.atproto.repo.applyWrites#create", 614 - collection, 615 - rkey: id, 616 - value: record 617 - }); 618 - } else if (JSON.stringify(entry.value) !== JSON.stringify(record)) { 619 - writes.push({ 620 - $type: "com.atproto.repo.applyWrites#update", 621 - collection, 622 - rkey: entry.rkey, 623 - value: record 624 - }); 625 - } 626 - } 627 - if (writes.length > 0) { 628 - await this.#rpc.post("com.atproto.repo.applyWrites", { 629 - input: { repo: this.#did, writes } 630 - }); 631 - } 632 - } 633 - // GET & PUT (broadcasting layer) 634 - /** 635 - * @param {string} collection 636 - * @param {Array<{ id: string }>} data 637 - */ 638 - #putProxy = /* @__PURE__ */ __name((collection, data) => this.#putRecordsSync(collection, data), "#putProxy"); 639 - #put = this.#putProxy; 640 - /** 641 - * @param {string} collection 642 - * @param {Array<{ id: string }>} data 643 - */ 644 - #putRecords = /* @__PURE__ */ __name((collection, data) => this.#put(collection, data), "#putRecords"); 645 - /** 646 - * @param {(uuidSender: ReturnType<typeof crypto.randomUUID>, collection: string, data: Array<{ id: string }>) => Promise<void>} action 647 - * @returns {(collection: string, data: Array<{ id: string }>) => Promise<void>} 648 - */ 649 - #putOutgoing = /* @__PURE__ */ __name((action) => async (collection, data) => { 650 - return await action(this.uuid, collection, data); 651 - }, "#putOutgoing"); 652 - /** 653 - * @param {ReturnType<typeof crypto.randomUUID>} uuidSender 654 - * @param {string} collection 655 - * @param {Array<{ id: string }>} data 656 - */ 657 - #putIncoming(uuidSender, collection, data) { 658 - if (uuidSender === this.uuid) { 659 - this.#putProxy(collection, data); 660 - } else { 661 - const collectionMap = { 662 - "sh.diffuse.output.facet": this.#manager.signals.facets, 663 - "sh.diffuse.output.playlist": this.#manager.signals.playlists, 664 - "sh.diffuse.output.theme": this.#manager.signals.themes, 665 - "sh.diffuse.output.track": this.#manager.signals.tracks 666 - }; 667 - const sig = collectionMap[collection]; 668 - if (sig) sig.value = data; 669 - } 670 - } 671 - }; 672 - var element_default = ATProtoOutput; 673 - var CLASS = ATProtoOutput; 674 - var NAME = "dor-atproto"; 675 - customElements.define(NAME, ATProtoOutput); 676 - 677 - export { 678 - element_default, 679 - CLASS, 680 - NAME 681 - }; 682 - 683 - //# sourceMappingURL=./chunk-LPLLWF34.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-LPLLWF34.js.map
··· 1 - {"version":3,"sources":["/components/output/raw/atproto/element.js","/node_modules/.deno/@atcute+client@4.2.1/node_modules/@atcute/client/lib/index.ts","/node_modules/.deno/@atcute+client@4.2.1/node_modules/@atcute/client/lib/client.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/validations/index.ts","/node_modules/.deno/@atcute+util-text@1.1.1/node_modules/@atcute/util-text/lib/index.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/interfaces/bytes.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/interfaces/index.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/interfaces/blob.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/interfaces/cid-link.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/validations/utils.ts","/node_modules/.deno/@atcute+client@4.2.1/node_modules/@atcute/client/lib/fetch-handler.ts","/node_modules/.deno/@atcute+client@4.2.1/node_modules/@atcute/client/lib/credential-manager.ts","/node_modules/.deno/@atcute+client@4.2.1/node_modules/@atcute/client/lib/utils/jwt.ts"],"sourcesContent":["import { Client, ok } from \"@atcute/client\";\nimport { BroadcastableDiffuseElement } from \"@common/element.js\";\nimport { signal } from \"@common/signal.js\";\nimport { outputManager } from \"../../common.js\";\nimport { login, logout, OAuthUserAgent, restoreOrFinalize } from \"./oauth.js\";\n\n/**\n * @import {Signal} from \"@common/signal.d.ts\"\n * @import {OutputElement, OutputManager} from \"../../types.d.ts\"\n * @import {ATProtoOutputElement} from \"./types.d.ts\"\n */\n\n////////////////////////////////////////////\n// ELEMENT\n////////////////////////////////////////////\n\n/**\n * @implements {ATProtoOutputElement}\n */\nclass ATProtoOutput extends BroadcastableDiffuseElement {\n static NAME = \"diffuse/output/raw/atproto\";\n\n /** @type {Client | null} */\n #rpc = null;\n\n /** @type {OAuthUserAgent | null} */\n #agent = null;\n\n /** @type {string | null} */\n #did = null;\n\n /** Public signal exposing the authenticated DID (null when not logged in). */\n $did = signal(/** @type {string | null} */ (null));\n\n #manager;\n\n /** @type {PromiseWithResolvers<void>} */\n #authenticated = Promise.withResolvers();\n\n constructor() {\n super();\n\n /** @type {OutputManager} */\n this.#manager = outputManager({\n init: async () => {\n await this.#ensureAuthenticated();\n return true;\n },\n facets: {\n empty: () => [],\n get: () => this.#listRecords(\"sh.diffuse.output.facet\"),\n put: (data) => this.#putRecords(\"sh.diffuse.output.facet\", data),\n },\n playlists: {\n empty: () => [],\n get: () => this.#listRecords(\"sh.diffuse.output.playlist\"),\n put: (data) => this.#putRecords(\"sh.diffuse.output.playlist\", data),\n },\n themes: {\n empty: () => [],\n get: () => this.#listRecords(\"sh.diffuse.output.theme\"),\n put: (data) => this.#putRecords(\"sh.diffuse.output.theme\", data),\n },\n tracks: {\n empty: () => [],\n get: () => this.#listRecords(\"sh.diffuse.output.track\"),\n put: (data) => this.#putRecords(\"sh.diffuse.output.track\", data),\n },\n });\n\n this.facets = this.#manager.facets;\n this.playlists = this.#manager.playlists;\n this.themes = this.#manager.themes;\n this.tracks = this.#manager.tracks;\n }\n\n // LIFECYCLE\n\n /** @override */\n connectedCallback() {\n if (this.hasAttribute(\"group\")) {\n const actions = this.broadcast(this.nameWithGroup, {\n put: { strategy: \"replicate\", fn: this.#putIncoming },\n });\n\n if (actions) {\n this.#put = this.#putOutgoing(actions.put);\n }\n }\n\n super.connectedCallback();\n\n this.#tryRestore();\n }\n\n // AUTH\n\n async #tryRestore() {\n await this.whenConnected();\n\n const session = await restoreOrFinalize();\n\n if (session) {\n this.#setSession(session);\n }\n }\n\n /**\n * @param {import(\"@atcute/oauth-browser-client\").Session} session\n */\n #setSession(session) {\n this.#agent = new OAuthUserAgent(session);\n this.#rpc = new Client({ handler: this.#agent });\n this.#did = session.info.sub;\n this.$did.value = session.info.sub;\n this.#authenticated.resolve();\n }\n\n async #ensureAuthenticated() {\n await this.whenConnected();\n return this.#authenticated.promise;\n }\n\n /**\n * Initiate the OAuth flow.\n * Navigates the browser to the authorization server.\n *\n * @param {string} handle\n */\n async login(handle) {\n await login(handle);\n }\n\n /**\n * Sign out and revoke the current session.\n */\n async logout() {\n if (this.#agent) {\n await logout(this.#agent);\n this.#agent = null;\n this.#rpc = null;\n this.#did = null;\n this.$did.value = null;\n this.#authenticated = Promise.withResolvers();\n }\n }\n\n // RECORDS\n\n /**\n * @template T\n * @param {string} collection\n * @returns {Promise<T[]>}\n */\n async #listRecords(collection) {\n if (!this.#rpc || !this.#did) return [];\n\n const records = [];\n let cursor;\n\n do {\n /** @type {any} */\n const page = await ok(this.#rpc.get(\n \"com.atproto.repo.listRecords\",\n { params: { repo: this.#did, collection, limit: 100, cursor } },\n ));\n\n for (const record of page.records) {\n records.push(record.value);\n }\n\n cursor = page.cursor;\n } while (cursor);\n\n return records;\n }\n\n /**\n * @param {string} collection\n * @param {Array<{ id: string }>} data\n */\n async #putRecordsSync(collection, data) {\n if (!this.#rpc || !this.#did) return;\n\n // 1. Fetch current state\n /** @type {Map<string, { rkey: string, value: unknown }>} */\n const existing = new Map();\n let cursor;\n\n do {\n /** @type {any} */\n const page = await ok(this.#rpc.get(\n \"com.atproto.repo.listRecords\",\n { params: { repo: this.#did, collection, limit: 100, cursor } },\n ));\n\n for (const record of page.records) {\n const rkey = record.uri.split(\"/\").pop();\n existing.set(record.value.id, { rkey, value: record.value });\n }\n\n cursor = page.cursor;\n } while (cursor);\n\n // 2. Build desired state\n const desired = new Map(data.map((record) => [record.id, record]));\n\n // 3. Compute diff\n /** @type {unknown[]} */\n const writes = [];\n\n for (const [id, { rkey }] of existing) {\n if (!desired.has(id)) {\n writes.push({\n $type: \"com.atproto.repo.applyWrites#delete\",\n collection,\n rkey,\n });\n }\n }\n\n for (const [id, record] of desired) {\n const entry = existing.get(id);\n\n if (!entry) {\n writes.push({\n $type: \"com.atproto.repo.applyWrites#create\",\n collection,\n rkey: id,\n value: record,\n });\n } else if (JSON.stringify(entry.value) !== JSON.stringify(record)) {\n writes.push({\n $type: \"com.atproto.repo.applyWrites#update\",\n collection,\n rkey: entry.rkey,\n value: record,\n });\n }\n }\n\n // 4. Apply\n if (writes.length > 0) {\n await this.#rpc.post(\"com.atproto.repo.applyWrites\", {\n input: { repo: this.#did, writes },\n });\n }\n }\n\n // GET & PUT (broadcasting layer)\n\n /**\n * @param {string} collection\n * @param {Array<{ id: string }>} data\n */\n #putProxy = (collection, data) => this.#putRecordsSync(collection, data);\n #put = this.#putProxy;\n\n /**\n * @param {string} collection\n * @param {Array<{ id: string }>} data\n */\n #putRecords = (collection, data) => this.#put(collection, data);\n\n /**\n * @param {(uuidSender: ReturnType<typeof crypto.randomUUID>, collection: string, data: Array<{ id: string }>) => Promise<void>} action\n * @returns {(collection: string, data: Array<{ id: string }>) => Promise<void>}\n */\n #putOutgoing = (action) => async (collection, data) => {\n return await action(this.uuid, collection, data);\n };\n\n /**\n * @param {ReturnType<typeof crypto.randomUUID>} uuidSender\n * @param {string} collection\n * @param {Array<{ id: string }>} data\n */\n #putIncoming(uuidSender, collection, data) {\n if (uuidSender === this.uuid) {\n this.#putProxy(collection, data);\n } else {\n /** @type {Record<string, Signal<unknown[]>>} */\n const collectionMap = {\n \"sh.diffuse.output.facet\": this.#manager.signals.facets,\n \"sh.diffuse.output.playlist\": this.#manager.signals.playlists,\n \"sh.diffuse.output.theme\": this.#manager.signals.themes,\n \"sh.diffuse.output.track\": this.#manager.signals.tracks,\n };\n\n const sig = collectionMap[collection];\n if (sig) sig.value = data;\n }\n }\n}\n\nexport default ATProtoOutput;\n\n////////////////////////////////////////////\n// REGISTER\n////////////////////////////////////////////\n\nexport const CLASS = ATProtoOutput;\nexport const NAME = \"dor-atproto\";\n\ncustomElements.define(NAME, ATProtoOutput);\n","export * from './client.js';\nexport * from './fetch-handler.js';\nexport * from './credential-manager.js';\n","import type { Did } from '@atcute/lexicons';\nimport type { XRPCProcedures, XRPCQueries } from '@atcute/lexicons/ambient';\nimport * as v from '@atcute/lexicons/validations';\nimport type {\n\tInferInput,\n\tInferOutput,\n\tObjectSchema,\n\tXRPCBlobBodyParam,\n\tXRPCLexBodyParam,\n\tXRPCProcedureMetadata,\n\tXRPCQueryMetadata,\n} from '@atcute/lexicons/validations';\n\nimport { buildFetchHandler, type FetchHandler, type FetchHandlerObject } from './fetch-handler.js';\n\n// #region Type utilities\ntype RequiredKeysOf<TType extends object> = TType extends any\n\t? Exclude<\n\t\t\t{\n\t\t\t\t[Key in keyof TType]: TType extends Record<Key, TType[Key]> ? Key : never;\n\t\t\t}[keyof TType],\n\t\t\tundefined\n\t\t>\n\t: never;\n\ntype HasRequiredKeys<TType extends object> = RequiredKeysOf<TType> extends never ? false : true;\n\n// #endregion\n\n// #region Type definitions for response formats\ntype ResponseFormat = 'json' | 'blob' | 'bytes' | 'stream';\n\ntype FormattedResponse<TDef> = {\n\tjson: TDef extends XRPCQueryMetadata<any, infer Body extends XRPCLexBodyParam, any>\n\t\t? InferOutput<Body['schema']>\n\t\t: TDef extends XRPCProcedureMetadata<any, any, infer Body extends XRPCLexBodyParam, any>\n\t\t\t? InferOutput<Body['schema']>\n\t\t\t: unknown;\n\tblob: Blob;\n\tbytes: Uint8Array;\n\tstream: ReadableStream<Uint8Array>;\n};\n\n// #endregion\n\n// #region Type definitions for request options\ntype BaseRequestOptions = {\n\tsignal?: AbortSignal;\n\theaders?: HeadersInit;\n};\n\nexport type QueryRequestOptions<TDef> = BaseRequestOptions &\n\t(TDef extends XRPCQueryMetadata<infer Params, infer Output, any>\n\t\t? (Params extends ObjectSchema\n\t\t\t\t? // query has parameters\n\t\t\t\t\t{ params: InferInput<Params> }\n\t\t\t\t: // query has no parameters\n\t\t\t\t\t{ params?: Record<string, unknown> }) &\n\t\t\t\t(Output extends XRPCLexBodyParam // query has JSON response, format is optionally specified\n\t\t\t\t\t? { as?: ResponseFormat | null }\n\t\t\t\t\t: // query doesn't have JSON response, format needs to be specified\n\t\t\t\t\t\t{ as: ResponseFormat | null })\n\t\t: {\n\t\t\t\tas: ResponseFormat | null;\n\t\t\t\tparams?: Record<string, unknown>;\n\t\t\t});\n\nexport type ProcedureRequestOptions<TDef> = BaseRequestOptions &\n\t(TDef extends XRPCProcedureMetadata<infer Params, infer Input, infer Output, any>\n\t\t? (Params extends ObjectSchema\n\t\t\t\t? // procedure has parameters\n\t\t\t\t\t{ params: InferInput<Params> }\n\t\t\t\t: // procedure has no parameters\n\t\t\t\t\t{ params?: Record<string, unknown> }) &\n\t\t\t\t(Input extends XRPCLexBodyParam\n\t\t\t\t\t? // procedure requires JSON input\n\t\t\t\t\t\t{ input: InferInput<Input['schema']> }\n\t\t\t\t\t: Input extends XRPCBlobBodyParam\n\t\t\t\t\t\t? // procedure requires blob\n\t\t\t\t\t\t\t{ input: Blob | ArrayBuffer | ArrayBufferView | ReadableStream }\n\t\t\t\t\t\t: // procedure doesn't specify input\n\t\t\t\t\t\t\t{ input?: Record<string, unknown> | Blob | ArrayBuffer | ArrayBufferView | ReadableStream }) &\n\t\t\t\t(Output extends XRPCLexBodyParam\n\t\t\t\t\t? // procedure has JSON response, format is optionally specified\n\t\t\t\t\t\t{ as?: ResponseFormat | null }\n\t\t\t\t\t: // procedure doesn't have JSON response, format needs to be specified\n\t\t\t\t\t\t{ as: ResponseFormat | null })\n\t\t: {\n\t\t\t\tas: ResponseFormat | null;\n\t\t\t\tinput?: Record<string, unknown> | Blob | ArrayBuffer | ArrayBufferView | ReadableStream;\n\t\t\t\tparams?: Record<string, unknown>;\n\t\t\t});\n\nexport type CallRequestOptions<TMeta> = BaseRequestOptions &\n\t// as is required if the endpoint returns blob, optional otherwise\n\t(TMeta extends XRPCQueryMetadata<any, infer Output, any>\n\t\t? Output extends XRPCBlobBodyParam\n\t\t\t? { as: ResponseFormat | null }\n\t\t\t: { as?: ResponseFormat | null }\n\t\t: TMeta extends XRPCProcedureMetadata<any, any, infer Output, any>\n\t\t\t? Output extends XRPCBlobBodyParam\n\t\t\t\t? { as: ResponseFormat | null }\n\t\t\t\t: { as?: ResponseFormat | null }\n\t\t\t: { as?: ResponseFormat | null }) &\n\t(TMeta extends XRPCQueryMetadata<infer Params, any, any>\n\t\t? // query\n\t\t\tParams extends ObjectSchema\n\t\t\t? { params: InferInput<Params> }\n\t\t\t: { params?: Record<string, unknown> }\n\t\t: TMeta extends XRPCProcedureMetadata<infer Params, infer Input, any, any>\n\t\t\t? // procedure\n\t\t\t\t(Params extends ObjectSchema\n\t\t\t\t\t? { params: InferInput<Params> }\n\t\t\t\t\t: { params?: Record<string, unknown> }) &\n\t\t\t\t\t(Input extends XRPCLexBodyParam\n\t\t\t\t\t\t? { input: InferInput<Input['schema']> }\n\t\t\t\t\t\t: Input extends XRPCBlobBodyParam\n\t\t\t\t\t\t\t? { input: Blob | ArrayBuffer | ArrayBufferView | ReadableStream }\n\t\t\t\t\t\t\t: { input?: Record<string, unknown> | Blob | ArrayBuffer | ArrayBufferView | ReadableStream })\n\t\t\t: never);\n\ntype InternalRequestOptions = BaseRequestOptions & {\n\tas?: ResponseFormat | null;\n\tparams?: Record<string, unknown>;\n\tinput?: Record<string, unknown> | Blob | BufferSource | ReadableStream;\n};\n\n// #endregion\n\n// #region Type definitions for client response\n/** standard XRPC error payload structure */\nexport type XRPCErrorPayload = {\n\t/** error name */\n\terror: string;\n\t/** error description */\n\tmessage?: string;\n};\n\ntype BaseClientResponse = {\n\t/** response status */\n\tstatus: number;\n\t/** response headers */\n\theaders: Headers;\n};\n\n/** represents a successful response returned by the client */\nexport type SuccessClientResponse<TDef, TInit> = BaseClientResponse & {\n\tok: true;\n\t/** response data */\n\tdata: TInit extends { as: infer TFormat }\n\t\t? TFormat extends ResponseFormat\n\t\t\t? FormattedResponse<TDef>[TFormat]\n\t\t\t: TFormat extends null\n\t\t\t\t? null\n\t\t\t\t: never\n\t\t: TDef extends XRPCQueryMetadata<any, infer Body, any>\n\t\t\t? Body extends XRPCLexBodyParam\n\t\t\t\t? InferOutput<Body['schema']>\n\t\t\t\t: null\n\t\t\t: TDef extends XRPCProcedureMetadata<any, any, infer Body, any>\n\t\t\t\t? Body extends XRPCLexBodyParam\n\t\t\t\t\t? InferOutput<Body['schema']>\n\t\t\t\t\t: null\n\t\t\t\t: never;\n};\n\n/** represents a failed response returned by the client */\nexport type FailedClientResponse = BaseClientResponse & {\n\tok: false;\n\t/** response data */\n\tdata: XRPCErrorPayload;\n};\n\n/** represents a response returned by the client */\nexport type ClientResponse<TDef, TInit> = SuccessClientResponse<TDef, TInit> | FailedClientResponse;\n\ntype UnknownClientResponse = { status: number; headers: Headers } & (\n\t| { ok: true; data: unknown }\n\t| { ok: false; data: XRPCErrorPayload }\n);\n\n// #endregion\n\n// #region Type definitions for call method\ntype Namespaced<T> = { mainSchema: T };\n\n// #endregion\n\n// #region Client\n/** options for configuring service proxying */\nexport type ServiceProxyOptions = {\n\t/** DID identifier that the upstream service should look up */\n\tdid: Did;\n\t/**\n\t * the specific service ID within the resolved DID document's `service` array\n\t * that the upstream service should forward requests to.\n\t *\n\t * must start with `#`\n\t *\n\t * common values include:\n\t * - `#atproto_pds` (personal data server)\n\t * - `#atproto_labeler` (labeler service)\n\t * - `#bsky_chat` (Bluesky chat service)\n\t */\n\tserviceId: `#${string}`;\n};\n\n/** options for configuring the client */\nexport type ClientOptions = {\n\t/** the underlying fetch handler it should make requests with */\n\thandler: FetchHandler | FetchHandlerObject;\n\t/** service proxy configuration */\n\tproxy?: ServiceProxyOptions | null;\n};\n\nconst JSON_CONTENT_TYPE_RE = /\\bapplication\\/json\\b/;\n\n/** XRPC API client */\nexport class Client<TQueries = XRPCQueries, TProcedures = XRPCProcedures> {\n\thandler: FetchHandler;\n\tproxy: ServiceProxyOptions | null;\n\n\tconstructor({ handler, proxy = null }: ClientOptions) {\n\t\tthis.handler = buildFetchHandler(handler);\n\t\tthis.proxy = proxy;\n\t}\n\n\t/**\n\t * clones this XRPC client\n\t * @param opts options to merge with\n\t * @returns the cloned XRPC client\n\t */\n\tclone({ handler = this.handler, proxy = this.proxy }: Partial<ClientOptions> = {}): Client<\n\t\tTQueries,\n\t\tTProcedures\n\t> {\n\t\treturn new Client({ handler, proxy });\n\t}\n\n\t/**\n\t * performs an XRPC query request (HTTP GET)\n\t * @param name NSID of the query\n\t * @param options query options\n\t */\n\tget<TName extends keyof TQueries, TInit extends QueryRequestOptions<TQueries[TName]>>(\n\t\tname: TName,\n\t\t...options: HasRequiredKeys<TInit> extends true ? [init: TInit] : [init?: TInit]\n\t): Promise<ClientResponse<TQueries[TName], TInit>>;\n\n\tget(name: string, options: InternalRequestOptions = {}) {\n\t\treturn this.#perform('get', name, options);\n\t}\n\n\t/**\n\t * performs an XRPC procedure request (HTTP POST)\n\t * @param name NSID of the procedure\n\t * @param options procedure options\n\t */\n\tpost<TName extends keyof TProcedures, TInit extends ProcedureRequestOptions<TProcedures[TName]>>(\n\t\tname: TName,\n\t\t...options: HasRequiredKeys<TInit> extends true ? [init: TInit] : [init?: TInit]\n\t): Promise<ClientResponse<TProcedures[TName], TInit>>;\n\n\tpost(name: string, options: InternalRequestOptions = {}) {\n\t\treturn this.#perform('post', name, options);\n\t}\n\n\t/**\n\t * performs an XRPC call with schema validation\n\t * @param schema the lexicon schema for the endpoint, or a namespace containing mainSchema\n\t * @param options call options\n\t */\n\tcall<TMeta extends XRPCQueryMetadata | XRPCProcedureMetadata, TInit extends CallRequestOptions<TMeta>>(\n\t\tschema: TMeta | Namespaced<TMeta>,\n\t\t...options: HasRequiredKeys<TInit> extends true ? [init: TInit] : [init?: TInit]\n\t): Promise<ClientResponse<TMeta, TInit>>;\n\n\tasync call(schema: any, options: any = {}): Promise<any> {\n\t\t// early bailout for tree-shaking when schemas aren't used\n\t\tif (!v.xrpcSchemaGenerated) {\n\t\t\treturn;\n\t\t}\n\n\t\t// extract mainSchema if namespace was passed\n\t\tif ('mainSchema' in schema) {\n\t\t\tschema = schema.mainSchema;\n\t\t}\n\n\t\tif (schema.params !== null) {\n\t\t\tconst paramsResult = v.safeParse(schema.params, options.params);\n\t\t\tif (!paramsResult.ok) {\n\t\t\t\tthrow new ClientValidationError('params', paramsResult);\n\t\t\t}\n\t\t}\n\n\t\tif (schema.type === 'xrpc_procedure' && schema.input?.type === 'lex') {\n\t\t\tconst inputResult = v.safeParse(schema.input.schema, options.input);\n\t\t\tif (!inputResult.ok) {\n\t\t\t\tthrow new ClientValidationError('input', inputResult);\n\t\t\t}\n\t\t}\n\n\t\tconst isQuery = schema.type === 'xrpc_query';\n\t\tconst method = isQuery ? 'get' : 'post';\n\n\t\tif (options.as === undefined && schema.output?.type === 'blob') {\n\t\t\tthrow new TypeError(`\\`as\\` option is required for endpoints returning blobs`);\n\t\t}\n\n\t\tconst format = options.as !== undefined ? options.as : schema.output?.type === 'lex' ? 'json' : null;\n\n\t\tconst response = await this.#perform(method, schema.nsid, {\n\t\t\tparams: options.params,\n\t\t\tinput: isQuery ? undefined : options.input,\n\t\t\tas: format,\n\t\t\tsignal: options.signal,\n\t\t\theaders: options.headers,\n\t\t});\n\n\t\tif (format === 'json' && response.ok && schema.output?.type === 'lex') {\n\t\t\tconst outputResult = v.safeParse(schema.output.schema, response.data);\n\t\t\tif (!outputResult.ok) {\n\t\t\t\tthrow new ClientValidationError('output', outputResult);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tok: true,\n\t\t\t\tstatus: response.status,\n\t\t\t\theaders: response.headers,\n\t\t\t\tdata: outputResult.value,\n\t\t\t};\n\t\t}\n\n\t\treturn response;\n\t}\n\n\tasync #perform(\n\t\tmethod: 'get' | 'post',\n\t\tname: string,\n\t\t{ signal, as: format = 'json', headers, input, params }: InternalRequestOptions,\n\t) {\n\t\tconst isWebInput =\n\t\t\tinput &&\n\t\t\t(input instanceof Blob ||\n\t\t\t\tArrayBuffer.isView(input) ||\n\t\t\t\tinput instanceof ArrayBuffer ||\n\t\t\t\tinput instanceof ReadableStream);\n\n\t\tconst url = `/xrpc/${name}` + _constructSearchParams(params);\n\n\t\tconst response = await this.handler(url, {\n\t\t\tmethod,\n\t\t\tsignal,\n\t\t\tbody: input && !isWebInput ? JSON.stringify(input) : input,\n\t\t\theaders: _mergeHeaders(headers, {\n\t\t\t\t'content-type': input && !isWebInput ? 'application/json' : null,\n\t\t\t\t'atproto-proxy': _constructProxyHeader(this.proxy),\n\t\t\t}),\n\t\t\tduplex: input instanceof ReadableStream ? 'half' : undefined,\n\t\t});\n\n\t\t{\n\t\t\tconst status = response.status;\n\t\t\tconst headers = response.headers;\n\n\t\t\tconst type = headers.get('content-type');\n\n\t\t\tif (status !== 200) {\n\t\t\t\tlet json: any;\n\n\t\t\t\tif (type != null && JSON_CONTENT_TYPE_RE.test(type)) {\n\t\t\t\t\t// it should be okay to swallow the parsing error here\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst parsed = await response.json();\n\t\t\t\t\t\tif (isXRPCErrorPayload(parsed)) {\n\t\t\t\t\t\t\tjson = parsed;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {}\n\t\t\t\t} else {\n\t\t\t\t\tawait response.body?.cancel();\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tok: false,\n\t\t\t\t\tstatus: status,\n\t\t\t\t\theaders: headers,\n\t\t\t\t\tdata: json ?? {\n\t\t\t\t\t\terror: `UnknownXRPCError`,\n\t\t\t\t\t\tmessage: `Request failed with status code ${status}`,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t{\n\t\t\t\tlet data: any;\n\t\t\t\tswitch (format) {\n\t\t\t\t\tcase 'json': {\n\t\t\t\t\t\tif (type != null && JSON_CONTENT_TYPE_RE.test(type)) {\n\t\t\t\t\t\t\t// we shouldn't be handling parsing errors\n\t\t\t\t\t\t\tdata = await response.json();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawait response.body?.cancel();\n\n\t\t\t\t\t\t\tthrow new TypeError(`Invalid response content-type (got ${type})`);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase null: {\n\t\t\t\t\t\tdata = null;\n\n\t\t\t\t\t\tawait response.body?.cancel();\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'blob': {\n\t\t\t\t\t\tdata = await response.blob();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'bytes': {\n\t\t\t\t\t\tdata = new Uint8Array(await response.arrayBuffer());\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'stream': {\n\t\t\t\t\t\tdata = response.body!;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tok: true,\n\t\t\t\t\tstatus: status,\n\t\t\t\t\theaders: headers,\n\t\t\t\t\tdata: data,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n}\n\n// #endregion\n\n// #region Utility functions\nconst _constructSearchParams = (params: Record<string, unknown> | undefined): string => {\n\tlet searchParams: URLSearchParams | undefined;\n\n\tfor (const key in params) {\n\t\tconst value = params[key];\n\n\t\tif (value !== undefined) {\n\t\t\tsearchParams ??= new URLSearchParams();\n\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tfor (let idx = 0, len = value.length; idx < len; idx++) {\n\t\t\t\t\tconst val = value[idx];\n\t\t\t\t\tsearchParams.append(key, '' + val);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsearchParams.set(key, '' + value);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn searchParams ? `?` + searchParams.toString() : '';\n};\n\nconst _constructProxyHeader = (proxy: ServiceProxyOptions | null | undefined): string | null => {\n\tif (proxy != null) {\n\t\treturn `${proxy.did}${proxy.serviceId}`;\n\t}\n\n\treturn null;\n};\n\nconst _mergeHeaders = (\n\tinit: HeadersInit | undefined,\n\tdefaults: Record<string, string | null>,\n): HeadersInit | undefined => {\n\tlet headers: Headers | undefined;\n\n\tfor (const name in defaults) {\n\t\tconst value = defaults[name];\n\n\t\tif (value !== null) {\n\t\t\theaders ??= new Headers(init);\n\n\t\t\tif (!headers.has(name)) {\n\t\t\t\theaders.set(name, value);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn headers ?? init;\n};\n\nexport const isXRPCErrorPayload = (input: any): input is XRPCErrorPayload => {\n\tif (typeof input !== 'object' || input == null) {\n\t\treturn false;\n\t}\n\n\tconst kindType = typeof input.error;\n\tconst messageType = typeof input.message;\n\n\treturn kindType === 'string' && (messageType === 'undefined' || messageType === 'string');\n};\n// #endregion\n\n// #region Optimistic response helper\ntype ExtractSuccessData<R> = R extends { ok: true; data: infer D } ? D : never;\n\n/**\n * takes in the response returned by the client, and either returns the data if\n * it is a successful response, or throws if it's a failed response.\n * @param input either a ClientResponse, or a promise that resolves to a ClientResponse\n * @returns the data from a successful response\n *\n * @example\n * const data = await ok(client.get('com.atproto.server.describeServer'));\n * // ^? ComAtprotoServerDescribeServer.Output\n */\nexport const ok: {\n\t<T extends UnknownClientResponse>(promise: Promise<T>): Promise<ExtractSuccessData<T>>;\n\t<T extends UnknownClientResponse>(response: T): ExtractSuccessData<T>;\n} = (input: Promise<UnknownClientResponse> | UnknownClientResponse): any => {\n\tif (input instanceof Promise) {\n\t\treturn input.then(ok);\n\t}\n\n\tif (input.ok) {\n\t\treturn input.data;\n\t}\n\n\tthrow new ClientResponseError(input);\n};\n\n/** options when constructing a ClientResponseError */\nexport type ClientResponseErrorOptions = {\n\tstatus: number;\n\theaders?: Headers;\n\tdata: XRPCErrorPayload;\n};\n\n/** represents an error response returned by the client */\nexport class ClientResponseError extends Error {\n\t/** error name returned by service */\n\treadonly error: string;\n\t/** error message returned by service */\n\treadonly description?: string;\n\n\t/** response status */\n\treadonly status: number;\n\t/** response headers */\n\treadonly headers: Headers;\n\n\tconstructor({ status, headers = new Headers(), data }: ClientResponseErrorOptions) {\n\t\tsuper(`${data.error} > ${data.message ?? '(unspecified description)'}`);\n\n\t\tthis.name = 'ClientResponseError';\n\n\t\tthis.error = data.error;\n\t\tthis.description = data.message;\n\n\t\tthis.status = status;\n\t\tthis.headers = headers;\n\t}\n}\n\n/** represents a validation error during typed calls */\nexport class ClientValidationError extends Error {\n\t/** validation target (params, input, or output) */\n\treadonly target: 'params' | 'input' | 'output';\n\t/** validation result */\n\treadonly result: v.Err;\n\n\tconstructor(target: 'params' | 'input' | 'output', result: v.Err) {\n\t\tsuper(`validation failed for ${target}: ${result.message}`);\n\n\t\tthis.name = 'ClientValidationError';\n\t\tthis.target = target;\n\t\tthis.result = result;\n\t}\n}\n\n// #endregion\n","import { isUtf8LengthInRange } from '@atcute/uint8array';\nimport { isGraphemeLengthInRange } from '@atcute/util-text';\n\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\n\nimport { _isBytesWrapper } from '../interfaces/bytes.ts';\nimport * as interfaces from '../interfaces/index.ts';\nimport * as syntax from '../syntax/index.ts';\nimport type { $type } from '../types/brand.ts';\nimport { assert } from '../utils.ts';\n\nimport { allowsEval, isArray, isObject, lazy, lazyProperty } from './utils.ts';\n\n/**\n * flag indicating whether xrpc schema generation helpers are used. set to true\n * when query() or procedure() is called. this enables conditional tree-shaking\n * of validation code when schemas are not used.\n * @deprecated internal flag for tree-shaking, do not use directly\n */\nexport let xrpcSchemaGenerated = false;\n\ntype Identity<T> = T;\ntype Flatten<T> = Identity<{ [K in keyof T]: T[K] }>;\n\ntype InputType =\n\t| 'unknown'\n\t| 'null'\n\t| 'undefined'\n\t| 'string'\n\t| 'integer'\n\t| 'boolean'\n\t| 'blob'\n\t| 'bytes'\n\t| 'cid-link'\n\t| 'object'\n\t| 'array';\n\ntype StringFormatMap = {\n\t'at-identifier': syntax.ActorIdentifier;\n\t'at-uri': syntax.ResourceUri;\n\tcid: syntax.Cid;\n\tdatetime: syntax.Datetime;\n\tdid: syntax.Did;\n\thandle: syntax.Handle;\n\tlanguage: syntax.LanguageCode;\n\tnsid: syntax.Nsid;\n\t'record-key': syntax.RecordKey;\n\ttid: syntax.Tid;\n\turi: syntax.GenericUri;\n};\n\nexport type StringFormat = keyof StringFormatMap;\n\ntype Literal = string | number | boolean;\ntype Key = string | number;\n\ntype IssueFormatter = () => string;\n\n// #region Schema issue types\nexport type IssueLeaf = { ok: false; msg: IssueFormatter } & (\n\t| { code: 'missing_value' }\n\t| { code: 'invalid_literal'; expected: readonly Literal[] }\n\t| { code: 'invalid_type'; expected: InputType }\n\t| { code: 'invalid_variant'; expected: string[] }\n\t| { code: 'invalid_integer_range'; min: number; max: number }\n\t| { code: 'invalid_string_format'; expected: StringFormat }\n\t| { code: 'invalid_string_graphemes'; minGraphemes: number; maxGraphemes: number }\n\t| { code: 'invalid_string_length'; minLength: number; maxLength: number }\n\t| { code: 'invalid_array_length'; minLength: number; maxLength: number }\n\t| { code: 'invalid_bytes_size'; minSize: number; maxSize: number }\n);\n\nexport type IssueTree =\n\t| IssueLeaf\n\t| { ok: false; code: 'prepend'; key: Key; tree: IssueTree }\n\t| { ok: false; code: 'join'; left: IssueTree; right: IssueTree };\n\nexport type Issue =\n\t| { code: 'missing_value'; path: Key[] }\n\t| { code: 'invalid_literal'; path: Key[]; expected: readonly Literal[] }\n\t| { code: 'invalid_type'; path: Key[]; expected: InputType }\n\t| { code: 'invalid_variant'; path: Key[]; expected: string[] }\n\t| { code: 'invalid_integer_range'; path: Key[]; min: number; max: number }\n\t| { code: 'invalid_string_format'; path: Key[]; expected: StringFormat }\n\t| { code: 'invalid_string_graphemes'; path: Key[]; minGraphemes: number; maxGraphemes: number }\n\t| { code: 'invalid_string_length'; path: Key[]; minLength: number; maxLength: number }\n\t| { code: 'invalid_array_length'; path: Key[]; minLength: number; maxLength: number }\n\t| { code: 'invalid_bytes_size'; path: Key[]; minSize: number; maxSize: number };\n\n// #__NO_SIDE_EFFECTS__\nconst joinIssues = (left: IssueTree | undefined, right: IssueTree): IssueTree => {\n\treturn left ? { ok: false, code: 'join', left, right } : right;\n};\n\n// #__NO_SIDE_EFFECTS__\nconst prependPath = (key: Key, tree: IssueTree): IssueTree => {\n\treturn { ok: false, code: 'prepend', key, tree };\n};\n\n// #region Schema result types\n\nexport type Ok<T> = {\n\tok: true;\n\tvalue: T;\n};\nexport type Err = {\n\tok: false;\n\treadonly message: string;\n\treadonly issues: readonly Issue[];\n\tthrow(): never;\n};\n\nexport type ValidationResult<T> = Ok<T> | Err;\n\n// #__NO_SIDE_EFFECTS__\nexport const ok = <T>(value: T): Ok<T> => {\n\treturn { ok: true, value };\n};\n\n// #region Base schema\n\n// Private symbols meant to hold types\ndeclare const kType: unique symbol;\ntype kType = typeof kType;\n\n// None set\nexport const FLAG_EMPTY = 0;\n// Don't continue validation if an error is encountered\nexport const FLAG_ABORT_EARLY = 1 << 0;\n\ntype MatcherResult = undefined | Ok<unknown> | IssueTree;\ntype Matcher = (input: unknown, flags: number) => MatcherResult;\n\ntype LexStandardSchemaResult<T extends BaseSchema> = StandardSchemaV1.Result<InferOutput<T>>;\n\ninterface LexStandardSchema<T extends BaseSchema> extends StandardSchemaV1.Props<unknown> {\n\treadonly validate: (value: unknown) => LexStandardSchemaResult<T> | Promise<LexStandardSchemaResult<T>>;\n\treadonly types?: StandardSchemaV1.Types<InferInput<T>, InferOutput<T>>;\n}\n\nexport interface BaseSchema<TInput = unknown, TOutput = TInput> {\n\treadonly kind: 'schema';\n\treadonly type: string;\n\treadonly '~run': Matcher;\n\treadonly '~standard': LexStandardSchema<this>;\n\n\treadonly [kType]?: { in: TInput; out: TOutput };\n}\n\nexport type InferInput<T extends BaseSchema> = NonNullable<T[kType]>['in'];\n\nexport type InferOutput<T extends BaseSchema> = NonNullable<T[kType]>['out'];\n\n// #region Schema runner\nconst cloneIssueWithPath = (issue: IssueLeaf, path: Key[]): Issue => {\n\tconst { ok: _ok, msg: _fmt, ...clone } = issue;\n\n\treturn { ...clone, path };\n};\n\nconst collectIssues = (tree: IssueTree, path: Key[] = [], issues: Issue[] = []): Issue[] => {\n\tfor (;;) {\n\t\tswitch (tree.code) {\n\t\t\tcase 'join': {\n\t\t\t\tcollectIssues(tree.left, path.slice(), issues);\n\t\t\t\ttree = tree.right;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase 'prepend': {\n\t\t\t\tpath.push(tree.key);\n\t\t\t\ttree = tree.tree;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tissues.push(cloneIssueWithPath(tree, path));\n\t\t\t\treturn issues;\n\t\t\t}\n\t\t}\n\t}\n};\n\nconst countIssues = (tree: IssueTree): number => {\n\tlet count = 0;\n\tfor (;;) {\n\t\tswitch (tree.code) {\n\t\t\tcase 'join': {\n\t\t\t\tcount += countIssues(tree.left);\n\t\t\t\ttree = tree.right;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase 'prepend': {\n\t\t\t\ttree = tree.tree;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\treturn count + 1;\n\t\t\t}\n\t\t}\n\t}\n};\n\nconst separatedList = (list: string[], sep: 'or' | 'and'): string => {\n\tswitch (list.length) {\n\t\tcase 0: {\n\t\t\treturn `nothing`;\n\t\t}\n\t\tcase 1: {\n\t\t\treturn list[0];\n\t\t}\n\t\tdefault: {\n\t\t\treturn `${list.slice(0, -1).join(', ')} ${sep} ${list[list.length - 1]}`;\n\t\t}\n\t}\n};\n\nconst formatLiteral = (value: Literal): string => {\n\treturn JSON.stringify(value);\n};\n\nconst formatRangeMessage = (\n\ttype: 'a string' | 'an array' | 'a byte array',\n\tunit: 'character' | 'grapheme' | 'item' | 'byte',\n\tmin: number,\n\tmax: number,\n): string => {\n\tlet message = `expected ${type} `;\n\n\tif (min > 0) {\n\t\tif (max === min) {\n\t\t\tmessage += `${min}`;\n\t\t} else if (max !== Infinity) {\n\t\t\tmessage += `between ${min} and ${max}`;\n\t\t} else {\n\t\t\tmessage += `at least ${min}`;\n\t\t}\n\t} else {\n\t\tmessage += `at most ${max}`;\n\t}\n\n\tmessage += ` ${unit}(s)`;\n\treturn message;\n};\n\nconst formatIssueTree = (tree: IssueTree): string => {\n\tlet path = '';\n\tlet count = 0;\n\tfor (;;) {\n\t\tswitch (tree.code) {\n\t\t\tcase 'join': {\n\t\t\t\tcount += countIssues(tree.right);\n\t\t\t\ttree = tree.left;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase 'prepend': {\n\t\t\t\tpath += `.${tree.key}`;\n\t\t\t\ttree = tree.tree;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tbreak;\n\t}\n\n\tconst message = tree.msg();\n\n\tlet msg = `${tree.code} at ${path || '.'} (${message})`;\n\tif (count > 0) {\n\t\tmsg += ` (+${count} other issue(s))`;\n\t}\n\n\treturn msg;\n};\n\nexport class ValidationError extends Error {\n\toverride readonly name = 'ValidationError';\n\n\t#issueTree: IssueTree;\n\n\tconstructor(issueTree: IssueTree) {\n\t\tsuper();\n\n\t\tthis.#issueTree = issueTree;\n\t}\n\n\toverride get message(): string {\n\t\treturn formatIssueTree(this.#issueTree);\n\t}\n\n\tget issues(): readonly Issue[] {\n\t\treturn collectIssues(this.#issueTree);\n\t}\n}\n\nclass ErrImpl implements Err {\n\treadonly ok = false;\n\n\t#issueTree: IssueTree;\n\n\tconstructor(issueTree: IssueTree) {\n\t\tthis.#issueTree = issueTree;\n\t}\n\n\tget message(): string {\n\t\treturn formatIssueTree(this.#issueTree);\n\t}\n\n\tget issues(): readonly Issue[] {\n\t\treturn collectIssues(this.#issueTree);\n\t}\n\n\tthrow(): never {\n\t\tthrow new ValidationError(this.#issueTree);\n\t}\n}\n\n// #__NO_SIDE_EFFECTS__\nexport const is = <const TSchema extends BaseSchema>(\n\tschema: TSchema,\n\tinput: unknown,\n): input is InferInput<TSchema> => {\n\tconst r = schema['~run'](input, FLAG_ABORT_EARLY);\n\treturn r === undefined || r.ok;\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const safeParse = <const TSchema extends BaseSchema>(\n\tschema: TSchema,\n\tinput: unknown,\n): ValidationResult<InferOutput<TSchema>> => {\n\tconst r = schema['~run'](input, FLAG_EMPTY);\n\n\tif (r === undefined) {\n\t\treturn ok(input as InferOutput<TSchema>);\n\t}\n\n\tif (r.ok) {\n\t\treturn r as Ok<InferOutput<TSchema>>;\n\t}\n\n\treturn new ErrImpl(r);\n};\n\nexport const parse = <const TSchema extends BaseSchema>(\n\tschema: TSchema,\n\tinput: unknown,\n): InferOutput<TSchema> => {\n\tconst r = schema['~run'](input, FLAG_EMPTY);\n\n\tif (r === undefined) {\n\t\treturn input as InferOutput<TSchema>;\n\t}\n\n\tif (r.ok) {\n\t\treturn r.value as InferOutput<TSchema>;\n\t}\n\n\tthrow new ValidationError(r);\n};\n\n// #region Standard Schema support\n\nconst collectStandardIssues = (\n\ttree: IssueTree,\n\tpath: Key[] = [],\n\tissues: StandardSchemaV1.Issue[] = [],\n): StandardSchemaV1.Issue[] => {\n\tfor (;;) {\n\t\tswitch (tree.code) {\n\t\t\tcase 'join': {\n\t\t\t\tcollectStandardIssues(tree.left, path.slice(), issues);\n\t\t\t\ttree = tree.right;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase 'prepend': {\n\t\t\t\tpath.push(tree.key);\n\t\t\t\ttree = tree.tree;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tissues.push({ message: tree.msg(), path: path.length > 0 ? path : undefined });\n\t\t\t\treturn issues;\n\t\t\t}\n\t\t}\n\t}\n};\n\nconst toStandardSchema = <TSchema extends BaseSchema>(schema: TSchema): LexStandardSchema<TSchema> => {\n\treturn {\n\t\tversion: 1,\n\t\tvendor: '@atcute/lexicons',\n\t\tvalidate(value) {\n\t\t\tconst r = schema['~run'](value, FLAG_EMPTY);\n\n\t\t\tif (r === undefined) {\n\t\t\t\treturn { value: value as InferOutput<TSchema> };\n\t\t\t}\n\n\t\t\tif (r.ok) {\n\t\t\t\treturn { value: r.value as InferOutput<TSchema> };\n\t\t\t}\n\n\t\t\treturn { issues: collectStandardIssues(r) };\n\t\t},\n\t};\n};\n\n// #region Base constraint\n\nexport interface BaseConstraint<TType = unknown> {\n\treadonly kind: 'constraint';\n\treadonly type: string;\n\treadonly '~run': (input: TType, flags: number) => MatcherResult;\n}\n\ntype ConstraintTuple<T> = readonly [BaseConstraint<T>, ...BaseConstraint<T>[]];\n\nexport type SchemaWithConstraint<\n\tTItem extends BaseSchema,\n\tTConstraints extends ConstraintTuple<InferOutput<TItem>>,\n> = TItem & {\n\treadonly constraints: TConstraints;\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const constrain = <\n\tTItem extends BaseSchema,\n\tconst TConstraints extends ConstraintTuple<InferOutput<TItem>>,\n>(\n\tbase: TItem,\n\tconstraints: TConstraints,\n): SchemaWithConstraint<TItem, TConstraints> => {\n\tconst len = constraints.length;\n\n\treturn {\n\t\t...base,\n\t\tconstraints: constraints,\n\t\t'~run'(input, flags) {\n\t\t\tlet result = base['~run'](input, flags);\n\t\t\tlet current: any;\n\n\t\t\tif (result === undefined) {\n\t\t\t\tcurrent = input;\n\t\t\t} else if (result.ok) {\n\t\t\t\tcurrent = result.value;\n\t\t\t} else {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tfor (let idx = 0; idx < len; idx++) {\n\t\t\t\tconst r = constraints[idx]['~run'](current, flags);\n\n\t\t\t\tif (r !== undefined) {\n\t\t\t\t\tif (r.ok) {\n\t\t\t\t\t\tcurrent = r.value;\n\n\t\t\t\t\t\tif (result === undefined || result.ok) {\n\t\t\t\t\t\t\tresult = r;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (flags & FLAG_ABORT_EARLY) {\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t} else if (result === undefined || result.ok) {\n\t\t\t\t\t\t\tresult = r;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult = joinIssues(result, r);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\t};\n};\n\n// #region Base metadata\n\nexport interface BaseMetadata {\n\treadonly kind: 'metadata';\n\treadonly type: string;\n}\n\n// #region Literal schema\n\nexport interface LiteralSchema<T extends Literal = Literal> extends BaseSchema<T> {\n\treadonly type: 'literal';\n\treadonly expected: T;\n}\n\n// #__NO_SIDE_EFFECTS__\nexport const literal = <T extends Literal>(value: T): LiteralSchema<T> => {\n\tconst issue: IssueLeaf = {\n\t\tok: false,\n\t\tcode: 'invalid_literal',\n\t\texpected: [value],\n\t\tmsg() {\n\t\t\treturn `expected ${formatLiteral(value)}`;\n\t\t},\n\t};\n\n\treturn {\n\t\tkind: 'schema',\n\t\ttype: 'literal',\n\t\texpected: value,\n\t\t'~run'(input, _flags) {\n\t\t\tif (input !== value) {\n\t\t\t\treturn issue;\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t},\n\t\tget '~standard'() {\n\t\t\treturn lazyProperty(this, '~standard', toStandardSchema(this));\n\t\t},\n\t};\n};\n\nexport interface LiteralEnumSchema<TEnums extends readonly Literal[] = []> extends BaseSchema<\n\tTEnums[number]\n> {\n\treadonly type: 'literal_enum';\n\treadonly expected: TEnums;\n}\n\n// #__NO_SIDE_EFFECTS__\nexport const literalEnum = <const TEnums extends readonly Literal[]>(\n\tvalues: TEnums,\n): LiteralEnumSchema<TEnums> => {\n\tconst issue: IssueLeaf = {\n\t\tok: false,\n\t\tcode: 'invalid_literal',\n\t\texpected: values,\n\t\tmsg() {\n\t\t\treturn `expected ${separatedList(values.map(formatLiteral), 'or')}`;\n\t\t},\n\t};\n\n\treturn {\n\t\tkind: 'schema',\n\t\ttype: 'literal_enum',\n\t\texpected: values,\n\t\t'~run'(input, _flags) {\n\t\t\tif (!values.includes(input as any)) {\n\t\t\t\treturn issue;\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t},\n\t\tget '~standard'() {\n\t\t\treturn lazyProperty(this, '~standard', toStandardSchema(this));\n\t\t},\n\t};\n};\n\n// #region Boolean schema\n\nexport interface BooleanSchema extends BaseSchema<boolean> {\n\treadonly type: 'boolean';\n}\n\nconst ISSUE_TYPE_BOOLEAN: IssueLeaf = {\n\tok: false,\n\tcode: 'invalid_type',\n\texpected: 'boolean',\n\tmsg() {\n\t\treturn `expected boolean`;\n\t},\n};\n\nconst BOOLEAN_SCHEMA: BooleanSchema = {\n\tkind: 'schema',\n\ttype: 'boolean',\n\t'~run'(input, _flags) {\n\t\tif (typeof input !== 'boolean') {\n\t\t\treturn ISSUE_TYPE_BOOLEAN;\n\t\t}\n\n\t\treturn undefined;\n\t},\n\tget '~standard'() {\n\t\treturn lazyProperty(this, '~standard', toStandardSchema(this));\n\t},\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const boolean = (): BooleanSchema => {\n\treturn BOOLEAN_SCHEMA;\n};\n\n// #region Integer schema\n\nexport interface IntegerSchema extends BaseSchema<number> {\n\treadonly type: 'integer';\n}\n\nconst ISSUE_TYPE_INTEGER: IssueLeaf = {\n\tok: false,\n\tcode: 'invalid_type',\n\texpected: 'integer',\n\tmsg() {\n\t\treturn `expected integer`;\n\t},\n};\n\nconst INTEGER_SCHEMA: IntegerSchema = {\n\tkind: 'schema',\n\ttype: 'integer',\n\t'~run'(input, _flags) {\n\t\tif (typeof input !== 'number') {\n\t\t\treturn ISSUE_TYPE_INTEGER;\n\t\t}\n\n\t\tif (input < 0 || !Number.isSafeInteger(input)) {\n\t\t\treturn ISSUE_TYPE_INTEGER;\n\t\t}\n\n\t\treturn undefined;\n\t},\n\tget '~standard'() {\n\t\treturn lazyProperty(this, '~standard', toStandardSchema(this));\n\t},\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const integer = (): IntegerSchema => {\n\treturn INTEGER_SCHEMA;\n};\n\n// #region Integer constraints\n\nexport interface IntegerRangeConstraint<\n\tTMin extends number = number,\n\tTMax extends number = number,\n> extends BaseConstraint<number> {\n\treadonly type: 'integer_range';\n\treadonly min: TMin;\n\treadonly max: TMax;\n}\n\n// #__NO_SIDE_EFFECTS__\nexport const integerRange: {\n\t<const TMin extends number>(min: TMin): IntegerRangeConstraint<TMin>;\n\t<const TMin extends number, const TMax extends number>(\n\t\tmin: TMin,\n\t\tmax: TMax,\n\t): IntegerRangeConstraint<TMin, TMax>;\n} = (min: number, max: number = Infinity): IntegerRangeConstraint => {\n\tconst issue: IssueLeaf = {\n\t\tok: false,\n\t\tcode: 'invalid_integer_range',\n\t\tmin: min,\n\t\tmax: max,\n\t\tmsg() {\n\t\t\tlet message = `expected an integer `;\n\n\t\t\tif (min > 0) {\n\t\t\t\tif (max === min) {\n\t\t\t\t\tmessage += `of exactly ${min}`;\n\t\t\t\t} else if (max !== Infinity) {\n\t\t\t\t\tmessage += `between ${min} and ${max}`;\n\t\t\t\t} else {\n\t\t\t\t\tmessage += `of at least ${min}`;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmessage += `of at most ${max}`;\n\t\t\t}\n\n\t\t\treturn message;\n\t\t},\n\t};\n\n\treturn {\n\t\tkind: 'constraint',\n\t\ttype: 'integer_range',\n\t\tmin: min,\n\t\tmax: max,\n\t\t'~run'(input, _flags) {\n\t\t\tif (input < min) {\n\t\t\t\treturn issue;\n\t\t\t}\n\n\t\t\tif (input > max) {\n\t\t\t\treturn issue;\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t},\n\t};\n};\n\n// #region String schema\n\nexport interface StringSchema<T extends string = string> extends BaseSchema<T> {\n\treadonly type: 'string';\n\treadonly format: null;\n}\n\nexport interface FormattedStringSchema<\n\tTFormat extends keyof StringFormatMap = keyof StringFormatMap,\n> extends BaseSchema<StringFormatMap[TFormat]> {\n\treadonly type: 'string';\n\treadonly format: TFormat;\n}\n\nconst ISSUE_TYPE_STRING: IssueLeaf = {\n\tok: false,\n\tcode: 'invalid_type',\n\texpected: 'string',\n\tmsg() {\n\t\treturn `expected string`;\n\t},\n};\n\nconst STRING_SINGLETON: StringSchema = {\n\tkind: 'schema',\n\ttype: 'string',\n\tformat: null,\n\t'~run'(input, _flags) {\n\t\tif (typeof input !== 'string') {\n\t\t\treturn ISSUE_TYPE_STRING;\n\t\t}\n\n\t\treturn undefined;\n\t},\n\tget '~standard'() {\n\t\treturn lazyProperty(this, '~standard', toStandardSchema(this));\n\t},\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const string = <T extends string = string>(): StringSchema<T> => {\n\treturn STRING_SINGLETON as StringSchema<T>;\n};\n\n// #__NO_SIDE_EFFECTS__\nconst _formattedString = <TFormat extends keyof StringFormatMap>(\n\tformat: TFormat,\n\tvalidate: (input: string) => boolean,\n) => {\n\tconst issue: IssueLeaf = {\n\t\tok: false,\n\t\tcode: 'invalid_string_format',\n\t\texpected: format,\n\t\tmsg() {\n\t\t\treturn `expected a ${format} formatted string`;\n\t\t},\n\t};\n\n\tconst schema: FormattedStringSchema<TFormat> = {\n\t\tkind: 'schema',\n\t\ttype: 'string',\n\t\tformat: format,\n\t\t'~run'(input, _flags) {\n\t\t\tif (typeof input !== 'string') {\n\t\t\t\treturn ISSUE_TYPE_STRING;\n\t\t\t}\n\n\t\t\tif (!validate(input)) {\n\t\t\t\treturn issue;\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t},\n\t\tget '~standard'() {\n\t\t\treturn lazyProperty(this, '~standard', toStandardSchema(this));\n\t\t},\n\t};\n\n\treturn () => schema;\n};\n\n// prettier-ignore\nexport const actorIdentifierString = /*#__PURE__*/ _formattedString('at-identifier', syntax.isActorIdentifier);\nexport const resourceUriString = /*#__PURE__*/ _formattedString('at-uri', syntax.isResourceUri);\nexport const cidString = /*#__PURE__*/ _formattedString('cid', syntax.isCid);\nexport const datetimeString = /*#__PURE__*/ _formattedString('datetime', syntax.isDatetime);\nexport const didString = /*#__PURE__*/ _formattedString('did', syntax.isDid);\nexport const handleString = /*#__PURE__*/ _formattedString('handle', syntax.isHandle);\nexport const languageCodeString = /*#__PURE__*/ _formattedString('language', syntax.isLanguageCode);\nexport const nsidString = /*#__PURE__*/ _formattedString('nsid', syntax.isNsid);\nexport const recordKeyString = /*#__PURE__*/ _formattedString('record-key', syntax.isRecordKey);\nexport const tidString = /*#__PURE__*/ _formattedString('tid', syntax.isTid);\nexport const genericUriString = /*#__PURE__*/ _formattedString('uri', syntax.isGenericUri);\n\n// #region String constraints\n\nexport interface StringLengthConstraint<\n\tTMinLength extends number = number,\n\tTMaxLength extends number = number,\n> extends BaseConstraint<string> {\n\treadonly type: 'string_length';\n\treadonly minLength: TMinLength;\n\treadonly maxLength: TMaxLength;\n}\n\n// #__NO_SIDE_EFFECTS__\nexport const stringLength: {\n\t<const TMinLength extends number>(min: TMinLength): StringLengthConstraint<TMinLength>;\n\t<const TMinLength extends number, const TMaxLength extends number>(\n\t\tmin: TMinLength,\n\t\tmax: TMaxLength,\n\t): StringLengthConstraint<TMinLength, TMaxLength>;\n} = (minLength: number, maxLength: number = Infinity): StringLengthConstraint => {\n\tconst issue: IssueLeaf = {\n\t\tok: false,\n\t\tcode: 'invalid_string_length',\n\t\tminLength: minLength,\n\t\tmaxLength: maxLength,\n\t\tmsg() {\n\t\t\treturn formatRangeMessage('a string', 'character', minLength, maxLength);\n\t\t},\n\t};\n\n\treturn {\n\t\tkind: 'constraint',\n\t\ttype: 'string_length',\n\t\tminLength: minLength,\n\t\tmaxLength: maxLength,\n\t\t'~run'(input, _flags) {\n\t\t\tif (!isUtf8LengthInRange(input, minLength, maxLength)) {\n\t\t\t\treturn issue;\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t},\n\t};\n};\n\nexport interface StringGraphemesConstraint<\n\tTMinGraphemes extends number = number,\n\tTMaxGraphemes extends number = number,\n> extends BaseConstraint<string> {\n\treadonly type: 'string_graphemes';\n\treadonly minGraphemes: TMinGraphemes;\n\treadonly maxGraphemes: TMaxGraphemes;\n}\n\n// #__NO_SIDE_EFFECTS__\nexport const stringGraphemes: {\n\t<const TMinGraphemes extends number>(min: TMinGraphemes): StringGraphemesConstraint<TMinGraphemes>;\n\t<const TMinGraphemes extends number, const TMaxGraphemes extends number>(\n\t\tmin: TMinGraphemes,\n\t\tmax: TMaxGraphemes,\n\t): StringGraphemesConstraint<TMinGraphemes, TMaxGraphemes>;\n} = (minGraphemes: number, maxGraphemes: number = Infinity): StringGraphemesConstraint => {\n\tconst issue: IssueLeaf = {\n\t\tok: false,\n\t\tcode: 'invalid_string_graphemes',\n\t\tminGraphemes: minGraphemes,\n\t\tmaxGraphemes: maxGraphemes,\n\t\tmsg() {\n\t\t\treturn formatRangeMessage('a string', 'grapheme', minGraphemes, maxGraphemes);\n\t\t},\n\t};\n\n\treturn {\n\t\tkind: 'constraint',\n\t\ttype: 'string_graphemes',\n\t\tminGraphemes: minGraphemes,\n\t\tmaxGraphemes: maxGraphemes,\n\t\t'~run'(input, _flags) {\n\t\t\tif (!isGraphemeLengthInRange(input, minGraphemes, maxGraphemes)) {\n\t\t\t\treturn issue;\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t},\n\t};\n};\n\n// #region Blob schema\n\nexport interface BlobSchema extends BaseSchema<interfaces.Blob | interfaces.LegacyBlob, interfaces.Blob> {\n\treadonly type: 'blob';\n}\n\nconst ISSUE_EXPECTED_BLOB: IssueLeaf = {\n\tok: false,\n\tcode: 'invalid_type',\n\texpected: 'blob',\n\tmsg() {\n\t\treturn `expected blob`;\n\t},\n};\n\nconst BLOB_SCHEMA: BlobSchema = {\n\tkind: 'schema',\n\ttype: 'blob',\n\t'~run'(input, _flags) {\n\t\tif (typeof input !== 'object' || input === null) {\n\t\t\treturn ISSUE_EXPECTED_BLOB;\n\t\t}\n\n\t\tif (interfaces.isBlob(input)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (interfaces.isLegacyBlob(input)) {\n\t\t\tconst blob: interfaces.Blob = {\n\t\t\t\t$type: 'blob',\n\t\t\t\tmimeType: input.mimeType,\n\t\t\t\tref: { $link: input.cid },\n\t\t\t\tsize: -1,\n\t\t\t};\n\n\t\t\treturn ok(blob);\n\t\t}\n\n\t\treturn ISSUE_EXPECTED_BLOB;\n\t},\n\tget '~standard'() {\n\t\treturn lazyProperty(this, '~standard', toStandardSchema(this));\n\t},\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const blob = (): BlobSchema => {\n\treturn BLOB_SCHEMA;\n};\n\n// #region IPLD bytes schema\n\nexport interface BytesSchema extends BaseSchema<interfaces.Bytes, interfaces.Bytes> {\n\treadonly type: 'bytes';\n}\n\nconst ISSUE_EXPECTED_BYTES: IssueLeaf = {\n\tok: false,\n\tcode: 'invalid_type',\n\texpected: 'bytes',\n\tmsg() {\n\t\treturn `expected bytes`;\n\t},\n};\n\nconst BYTES_SCHEMA: BytesSchema = {\n\tkind: 'schema',\n\ttype: 'bytes',\n\t'~run'(input, _flags) {\n\t\tif (!interfaces.isBytes(input)) {\n\t\t\treturn ISSUE_EXPECTED_BYTES;\n\t\t}\n\n\t\treturn undefined;\n\t},\n\tget '~standard'() {\n\t\treturn lazyProperty(this, '~standard', toStandardSchema(this));\n\t},\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const bytes = (): BytesSchema => {\n\treturn BYTES_SCHEMA;\n};\n\n// #region IPLD bytes constraint\nexport interface BytesSizeConstraint<\n\tTMinLength extends number = number,\n\tTMaxLength extends number = number,\n> extends BaseConstraint<interfaces.Bytes> {\n\treadonly type: 'bytes_size';\n\treadonly minSize: TMinLength;\n\treadonly maxSize: TMaxLength;\n}\n\n// #__NO_SIDE_EFFECTS__\nexport const bytesSize: {\n\t<const TMinLength extends number>(min: TMinLength): BytesSizeConstraint<TMinLength>;\n\t<const TMinLength extends number, const TMaxLength extends number>(\n\t\tmin: TMinLength,\n\t\tmax: TMaxLength,\n\t): BytesSizeConstraint<TMinLength, TMaxLength>;\n} = (minSize: number, maxSize: number = Infinity): BytesSizeConstraint => {\n\tconst issue: IssueLeaf = {\n\t\tok: false,\n\t\tcode: 'invalid_bytes_size',\n\t\tminSize: minSize,\n\t\tmaxSize: maxSize,\n\t\tmsg() {\n\t\t\treturn formatRangeMessage('a byte array', 'byte', minSize, maxSize);\n\t\t},\n\t};\n\n\treturn {\n\t\tkind: 'constraint',\n\t\ttype: 'bytes_size',\n\t\tminSize: minSize,\n\t\tmaxSize: maxSize,\n\t\t'~run'(input, _flags) {\n\t\t\tlet size: number;\n\n\t\t\tif (_isBytesWrapper(input)) {\n\t\t\t\tsize = input.buf.length;\n\t\t\t} else {\n\t\t\t\tconst str = input.$bytes;\n\t\t\t\tlet bytes = str.length;\n\n\t\t\t\tif (str.charCodeAt(bytes - 1) === 0x3d) {\n\t\t\t\t\tbytes--;\n\t\t\t\t}\n\t\t\t\tif (bytes > 1 && str.charCodeAt(bytes - 1) === 0x3d) {\n\t\t\t\t\tbytes--;\n\t\t\t\t}\n\n\t\t\t\tsize = (bytes * 3) >>> 2;\n\t\t\t}\n\n\t\t\tif (size < minSize) {\n\t\t\t\treturn issue;\n\t\t\t}\n\n\t\t\tif (size > maxSize) {\n\t\t\t\treturn issue;\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t},\n\t};\n};\n\n// #region IPLD CID type schema\n\nexport interface CidLinkSchema extends BaseSchema<interfaces.CidLink, interfaces.CidLink> {\n\treadonly type: 'cid_link';\n}\n\nconst ISSUE_EXPECTED_CID_LINK: IssueLeaf = {\n\tok: false,\n\tcode: 'invalid_type',\n\texpected: 'cid-link',\n\tmsg() {\n\t\treturn `expected cid-link`;\n\t},\n};\n\nconst CID_LINK_SCHEMA: CidLinkSchema = {\n\tkind: 'schema',\n\ttype: 'cid_link',\n\t'~run'(input, _flags) {\n\t\tif (!interfaces.isCidLink(input)) {\n\t\t\treturn ISSUE_EXPECTED_CID_LINK;\n\t\t}\n\n\t\treturn undefined;\n\t},\n\tget '~standard'() {\n\t\treturn lazyProperty(this, '~standard', toStandardSchema(this));\n\t},\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const cidLink = (): CidLinkSchema => {\n\treturn CID_LINK_SCHEMA;\n};\n\n// #region Nullable schema\n\nexport interface NullableSchema<TItem extends BaseSchema = BaseSchema> extends BaseSchema<\n\tInferInput<TItem> | null,\n\tInferOutput<TItem> | null\n> {\n\treadonly type: 'nullable';\n\treadonly wrapped: TItem;\n}\n\n// #__NO_SIDE_EFFECTS__\nexport const nullable = <TItem extends BaseSchema>(wrapped: TItem): NullableSchema<TItem> => {\n\treturn {\n\t\tkind: 'schema',\n\t\ttype: 'nullable',\n\t\twrapped: wrapped,\n\t\t'~run'(input, flags) {\n\t\t\tif (input === null) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn wrapped['~run'](input, flags);\n\t\t},\n\t\tget '~standard'() {\n\t\t\treturn lazyProperty(this, '~standard', toStandardSchema(this));\n\t\t},\n\t};\n};\n\n// #region Optional schema\n\nexport type DefaultValue<TItem extends BaseSchema> =\n\t| InferOutput<TItem>\n\t| (() => InferOutput<TItem>)\n\t| undefined;\n\nexport type InferOptionalOutput<\n\tTItem extends BaseSchema,\n\tTDefault extends DefaultValue<TItem>,\n> = undefined extends TDefault ? InferOutput<TItem> | undefined : InferOutput<TItem>;\n\nexport interface OptionalSchema<\n\tTItem extends BaseSchema = BaseSchema,\n\tTDefault extends DefaultValue<TItem> = DefaultValue<TItem>,\n> extends BaseSchema<InferInput<TItem> | undefined, InferOptionalOutput<TItem, TDefault>> {\n\treadonly type: 'optional';\n\treadonly wrapped: TItem;\n\treadonly default: TDefault;\n}\n\ntype MaybeOptional<TItem extends BaseSchema> = TItem | OptionalSchema<TItem, undefined>;\n\n// #__NO_SIDE_EFFECTS__\nexport const optional: {\n\t<TItem extends BaseSchema>(wrapped: TItem): OptionalSchema<TItem, undefined>;\n\t<TItem extends BaseSchema, TDefault extends DefaultValue<TItem>>(\n\t\twrapped: TItem,\n\t\tdefaultValue: TDefault,\n\t): OptionalSchema<TItem, TDefault>;\n} = (wrapped: BaseSchema, defaultValue?: any): OptionalSchema<any, any> => {\n\treturn {\n\t\tkind: 'schema',\n\t\ttype: 'optional',\n\t\twrapped: wrapped,\n\t\tdefault: defaultValue,\n\t\t'~run'(input, flags) {\n\t\t\tif (input === undefined) {\n\t\t\t\tif (defaultValue === undefined) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\tconst value = typeof defaultValue === 'function' ? defaultValue() : defaultValue;\n\n\t\t\t\treturn ok(value);\n\t\t\t}\n\n\t\t\treturn wrapped['~run'](input, flags);\n\t\t},\n\t\tget '~standard'() {\n\t\t\treturn lazyProperty(this, '~standard', toStandardSchema(this));\n\t\t},\n\t};\n};\n\nconst isOptionalSchema = (schema: BaseSchema): schema is OptionalSchema<any, unknown> => {\n\treturn schema.type === 'optional';\n};\n\n// #region Array schema\n\nexport interface ArraySchema<TItem extends BaseSchema = BaseSchema> extends BaseSchema<unknown[], unknown[]> {\n\treadonly type: 'array';\n\treadonly item: TItem;\n\n\treadonly [kType]?: { in: InferInput<TItem>[]; out: InferOutput<TItem>[] };\n}\n\nconst ISSUE_TYPE_ARRAY: IssueLeaf = {\n\tok: false,\n\tcode: 'invalid_type',\n\texpected: 'array',\n\tmsg() {\n\t\treturn `expected array`;\n\t},\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const array = <TItem extends BaseSchema>(item: TItem | (() => TItem)): ArraySchema<TItem> => {\n\tconst resolvedShape = lazy(() => {\n\t\treturn typeof item === 'function' ? item() : item;\n\t});\n\n\treturn {\n\t\tkind: 'schema',\n\t\ttype: 'array',\n\t\tget item() {\n\t\t\treturn lazyProperty(this, 'item', resolvedShape.value);\n\t\t},\n\t\tget '~run'() {\n\t\t\tconst shape = resolvedShape.value;\n\n\t\t\tconst matcher: Matcher = (input, flags) => {\n\t\t\t\tif (!isArray(input)) {\n\t\t\t\t\treturn ISSUE_TYPE_ARRAY;\n\t\t\t\t}\n\n\t\t\t\tlet issues: IssueTree | undefined;\n\t\t\t\tlet output: any[] | undefined;\n\n\t\t\t\tfor (let idx = 0, len = input.length; idx < len; idx++) {\n\t\t\t\t\tconst val = input[idx];\n\t\t\t\t\tconst r = shape['~run'](val, flags);\n\n\t\t\t\t\tif (r !== undefined) {\n\t\t\t\t\t\tif (r.ok) {\n\t\t\t\t\t\t\tif (output === undefined) {\n\t\t\t\t\t\t\t\toutput = input.slice();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\toutput[idx] = r.value;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tissues = joinIssues(issues, prependPath(idx, r));\n\n\t\t\t\t\t\t\tif (flags & FLAG_ABORT_EARLY) {\n\t\t\t\t\t\t\t\treturn issues;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (issues !== undefined) {\n\t\t\t\t\treturn issues;\n\t\t\t\t}\n\n\t\t\t\tif (output !== undefined) {\n\t\t\t\t\treturn ok(output);\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t};\n\n\t\t\treturn lazyProperty(this, '~run', matcher);\n\t\t},\n\t\tget '~standard'() {\n\t\t\treturn lazyProperty(this, '~standard', toStandardSchema(this));\n\t\t},\n\t};\n};\n\n// #region Array constraints\n\nexport interface ArrayLengthConstraint<\n\tTMinLength extends number = number,\n\tTMaxLength extends number = number,\n> extends BaseConstraint<unknown[]> {\n\treadonly type: 'array_length';\n\treadonly minLength: TMinLength;\n\treadonly maxLength: TMaxLength;\n}\n\n// #__NO_SIDE_EFFECTS__\nexport const arrayLength: {\n\t<const TMinLength extends number>(min: TMinLength): ArrayLengthConstraint<TMinLength>;\n\t<const TMinLength extends number, const TMaxLength extends number>(\n\t\tmin: TMinLength,\n\t\tmax: TMaxLength,\n\t): ArrayLengthConstraint<TMinLength, TMaxLength>;\n} = (minLength: number, maxLength: number = Infinity): ArrayLengthConstraint => {\n\tconst issue: IssueLeaf = {\n\t\tok: false,\n\t\tcode: 'invalid_array_length',\n\t\tminLength: minLength,\n\t\tmaxLength: maxLength,\n\t\tmsg() {\n\t\t\treturn formatRangeMessage('an array', 'item', minLength, maxLength);\n\t\t},\n\t};\n\n\treturn {\n\t\tkind: 'constraint',\n\t\ttype: 'array_length',\n\t\tminLength: minLength,\n\t\tmaxLength: maxLength,\n\t\t'~run'(input, _flags) {\n\t\t\tconst length = input.length;\n\n\t\t\tif (length < minLength) {\n\t\t\t\treturn issue;\n\t\t\t}\n\n\t\t\tif (length > maxLength) {\n\t\t\t\treturn issue;\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t},\n\t};\n};\n\n// #region Object schema\n\n// `ObjectSchema` accepts a `LooseObjectShape` instead of `ObjectShape` to allow\n// for circular references, and this means preventing TypeScript from attempting\n// to eagerly evaluate the shape, unfortunate that this means we can't throw a\n// type issue if you add a non-schema value into the shape though\n\nexport type LooseObjectShape = Record<string, any>;\nexport type ObjectShape = Record<string, BaseSchema>;\n\nexport type OptionalObjectInputKeys<TShape extends ObjectShape> = {\n\t[Key in keyof TShape]: TShape[Key] extends OptionalSchema<any, any> ? Key : never;\n}[keyof TShape];\n\nexport type OptionalObjectOutputKeys<TShape extends ObjectShape> = {\n\t[Key in keyof TShape]: TShape[Key] extends OptionalSchema<any, infer Default>\n\t\t? undefined extends Default\n\t\t\t? Key\n\t\t\t: never\n\t\t: never;\n}[keyof TShape];\n\ntype InferObjectInput<TShape extends ObjectShape> = Flatten<\n\t{\n\t\t-readonly [Key in keyof TShape as Key extends OptionalObjectInputKeys<TShape> ? never : Key]: InferInput<\n\t\t\tTShape[Key]\n\t\t>;\n\t} & {\n\t\t-readonly [Key in keyof TShape as Key extends OptionalObjectInputKeys<TShape> ? Key : never]?: InferInput<\n\t\t\tTShape[Key]\n\t\t>;\n\t}\n>;\n\ntype InferObjectOutput<TShape extends ObjectShape> = Flatten<\n\t{\n\t\t-readonly [Key in keyof TShape as Key extends OptionalObjectOutputKeys<TShape>\n\t\t\t? never\n\t\t\t: Key]: InferOutput<TShape[Key]>;\n\t} & {\n\t\t-readonly [Key in keyof TShape as Key extends OptionalObjectOutputKeys<TShape>\n\t\t\t? Key\n\t\t\t: never]?: InferOutput<TShape[Key]>;\n\t}\n>;\n\nexport interface ObjectSchema<TShape extends LooseObjectShape = LooseObjectShape> extends BaseSchema<\n\tRecord<string, unknown>\n> {\n\treadonly type: 'object';\n\treadonly shape: Readonly<TShape>;\n\n\t// passing `InferObjectX` into `extends BaseSchema<...>` eagerly evaluates the\n\t// shape, however, passing it as a property means that it's only evaluated if\n\t// you attempt to grab the value.\n\treadonly [kType]?: { in: InferObjectInput<TShape>; out: InferObjectOutput<TShape> };\n}\n\ninterface ObjectEntry {\n\tkey: string;\n\tschema: BaseSchema;\n\toptional: boolean;\n\tmissing: IssueTree;\n}\n\nconst ISSUE_TYPE_OBJECT: IssueLeaf = {\n\tok: false,\n\tcode: 'invalid_type',\n\texpected: 'object',\n\tmsg() {\n\t\treturn `expected object`;\n\t},\n};\n\nconst ISSUE_MISSING: IssueLeaf = {\n\tok: false,\n\tcode: 'missing_value',\n\tmsg() {\n\t\treturn `missing value`;\n\t},\n};\n\nconst set = (obj: Record<string, unknown>, key: string, value: unknown): void => {\n\tif (key === '__proto__') {\n\t\tObject.defineProperty(obj, key, { value });\n\t} else {\n\t\tobj[key] = value;\n\t}\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const object = <TShape extends LooseObjectShape>(shape: TShape): ObjectSchema<TShape> => {\n\tconst resolvedEntries = lazy(() => {\n\t\tconst resolved: ObjectEntry[] = [];\n\n\t\tfor (const key in shape) {\n\t\t\tconst schema = shape[key];\n\n\t\t\tresolved.push({\n\t\t\t\tkey: key,\n\t\t\t\tschema: schema,\n\t\t\t\toptional: isOptionalSchema(schema),\n\t\t\t\tmissing: prependPath(key, ISSUE_MISSING),\n\t\t\t});\n\t\t}\n\n\t\treturn resolved;\n\t});\n\n\treturn {\n\t\tkind: 'schema',\n\t\ttype: 'object',\n\t\tget shape() {\n\t\t\t// if we just return the shape as is then it wouldn't be the same exact\n\t\t\t// shape when getters are present.\n\t\t\tconst resolved = resolvedEntries.value;\n\t\t\tconst obj: any = {};\n\n\t\t\tfor (const entry of resolved) {\n\t\t\t\tobj[entry.key] = entry.schema;\n\t\t\t}\n\n\t\t\treturn lazyProperty(this, 'shape', obj as TShape);\n\t\t},\n\t\tget '~run'() {\n\t\t\tconst shape = resolvedEntries.value;\n\t\t\tconst len = shape.length;\n\n\t\t\tconst generateFastpass = (): Matcher => {\n\t\t\t\tconst fields: [string, any][] = [\n\t\t\t\t\t['$ok', ok],\n\t\t\t\t\t['$joinIssues', joinIssues],\n\t\t\t\t\t['$prependPath', prependPath],\n\t\t\t\t];\n\n\t\t\t\tlet doc = `let $iss,$out;`;\n\n\t\t\t\tfor (let idx = 0; idx < len; idx++) {\n\t\t\t\t\tconst entry = shape[idx];\n\n\t\t\t\t\tconst key = entry.key;\n\t\t\t\t\tconst esckey = JSON.stringify(key);\n\n\t\t\t\t\tconst id = `_${idx}`;\n\n\t\t\t\t\tdoc += `{const $val=$in[${esckey}];`;\n\n\t\t\t\t\tif (entry.optional) {\n\t\t\t\t\t\tdoc += `if($val!==undefined){`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc += `if($val!==undefined||${esckey} in $in){`;\n\t\t\t\t\t}\n\n\t\t\t\t\tdoc += `const $res=${id}$schema[\"~run\"]($val,$flags);if($res!==undefined)if($res.ok)${key !== '__proto__' ? `($out??={...$in})[${esckey}]=$res.value` : `Object.defineProperty($out??={...$in},${esckey},{value:$res.value})`};else if((($iss=$joinIssues($iss,$prependPath(${esckey},$res))),$flags&${FLAG_ABORT_EARLY}))return $iss;}`;\n\n\t\t\t\t\tif (entry.optional) {\n\t\t\t\t\t\tconst schema = entry.schema as OptionalSchema;\n\t\t\t\t\t\tconst innerSchema = schema.wrapped;\n\t\t\t\t\t\tconst defaultValue = schema.default;\n\n\t\t\t\t\t\tfields.push([`${id}$schema`, innerSchema]);\n\n\t\t\t\t\t\tif (defaultValue !== undefined) {\n\t\t\t\t\t\t\tconst calls = typeof defaultValue === 'function' ? `${id}$default()` : `${id}$default`;\n\n\t\t\t\t\t\t\tfields.push([`${id}$default`, defaultValue]);\n\n\t\t\t\t\t\t\tdoc +=\n\t\t\t\t\t\t\t\tkey !== '__proto__'\n\t\t\t\t\t\t\t\t\t? `else($out??={...$in})[${esckey}]=${calls};`\n\t\t\t\t\t\t\t\t\t: `else Object.defineProperty($out??={...$in},${esckey},{value:${calls}});`;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfields.push([`${id}$schema`, entry.schema]);\n\t\t\t\t\t\tfields.push([`${id}$missing`, entry.missing]);\n\n\t\t\t\t\t\tdoc += `else if((($iss=$joinIssues($iss,${id}$missing)),$flags&${FLAG_ABORT_EARLY}))return $iss;`;\n\t\t\t\t\t}\n\n\t\t\t\t\tdoc += `}`;\n\t\t\t\t}\n\n\t\t\t\tdoc += `if($iss!==undefined)return $iss;if($out!==undefined)return $ok($out);`;\n\n\t\t\t\tconst fn = new Function(\n\t\t\t\t\t`[${fields.map(([id]) => id).join(',')}]`,\n\t\t\t\t\t`return function matcher($in,$flags){${doc}}`,\n\t\t\t\t);\n\n\t\t\t\treturn fn(fields.map(([, field]) => field));\n\t\t\t};\n\n\t\t\tif (allowsEval.value) {\n\t\t\t\tconst fastpass = generateFastpass();\n\n\t\t\t\tconst matcher: Matcher = (input, flags) => {\n\t\t\t\t\tif (!isObject(input)) {\n\t\t\t\t\t\treturn ISSUE_TYPE_OBJECT;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fastpass(input, flags);\n\t\t\t\t};\n\n\t\t\t\treturn lazyProperty(this, '~run', matcher);\n\t\t\t}\n\n\t\t\tconst matcher: Matcher = (input, flags) => {\n\t\t\t\tif (!isObject(input)) {\n\t\t\t\t\treturn ISSUE_TYPE_OBJECT;\n\t\t\t\t}\n\n\t\t\t\tlet issues: IssueTree | undefined;\n\t\t\t\tlet output: Record<string, unknown> | undefined;\n\n\t\t\t\tfor (let idx = 0; idx < len; idx++) {\n\t\t\t\t\tconst entry = shape[idx];\n\n\t\t\t\t\tconst key = entry.key;\n\t\t\t\t\tconst value = input[key];\n\n\t\t\t\t\tif (!entry.optional && value === undefined && !(key in input)) {\n\t\t\t\t\t\tissues = joinIssues(issues, entry.missing);\n\n\t\t\t\t\t\tif (flags & FLAG_ABORT_EARLY) {\n\t\t\t\t\t\t\treturn issues;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst r = entry.schema['~run'](value, flags);\n\n\t\t\t\t\tif (r !== undefined) {\n\t\t\t\t\t\tif (r.ok) {\n\t\t\t\t\t\t\tif (output === undefined) {\n\t\t\t\t\t\t\t\toutput = { ...input };\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t/*#__INLINE__*/ set(output, key, r.value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tissues = joinIssues(issues, prependPath(key, r));\n\n\t\t\t\t\t\t\tif (flags & FLAG_ABORT_EARLY) {\n\t\t\t\t\t\t\t\treturn issues;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (issues !== undefined) {\n\t\t\t\t\treturn issues;\n\t\t\t\t}\n\n\t\t\t\tif (output !== undefined) {\n\t\t\t\t\treturn ok(output);\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t};\n\n\t\t\treturn lazyProperty(this, '~run', matcher);\n\t\t},\n\t\tget '~standard'() {\n\t\t\treturn lazyProperty(this, '~standard', toStandardSchema(this));\n\t\t},\n\t};\n};\n\n// #region Record schema\n//\n// unfortunately, adapting for circular references has meant that we can't have\n// TypeScript check the object against a particular shape ($type field required)\n\nexport type RecordObjectShape = {\n\t$type: LiteralSchema<syntax.Nsid>;\n\t[key: string]: BaseSchema;\n};\n\nexport type RecordKeySchema = StringSchema | FormattedStringSchema | LiteralSchema<string>;\nexport type RecordObjectSchema = ObjectSchema<RecordObjectShape>;\n\nexport interface RecordSchema<TObject extends ObjectSchema, TKey extends RecordKeySchema> extends BaseSchema<\n\tRecord<string, unknown>\n> {\n\treadonly type: 'record';\n\treadonly key: TKey;\n\treadonly object: TObject;\n\n\treadonly [kType]?: { in: InferInput<TObject>; out: InferOutput<TObject> };\n}\n\n// #__NO_SIDE_EFFECTS__\nexport const record = <TKey extends RecordKeySchema, TObject extends ObjectSchema>(\n\tkey: TKey,\n\tobject: TObject,\n): RecordSchema<TObject, TKey> => {\n\tconst validatedObject = lazy((): TObject => {\n\t\tconst shape = object.shape;\n\n\t\tlet t = shape.$type as MaybeOptional<LiteralSchema<syntax.Nsid>> | undefined;\n\n\t\tassert(t !== undefined, `expected $type in record to be defined`);\n\t\tif (t.type === 'optional') {\n\t\t\tt = t.wrapped;\n\t\t}\n\n\t\tassert(t.type === 'literal' && typeof t.expected === 'string', `expected $type to be a string literal`);\n\n\t\treturn object;\n\t});\n\n\treturn {\n\t\tkind: 'schema',\n\t\ttype: 'record',\n\t\tkey: key,\n\t\tget object() {\n\t\t\treturn lazyProperty(this, 'object', validatedObject.value);\n\t\t},\n\t\t'~run'(input, flags) {\n\t\t\treturn lazyProperty(this, '~run', validatedObject.value['~run'])(input, flags);\n\t\t},\n\t\tget '~standard'() {\n\t\t\treturn lazyProperty(this, '~standard', toStandardSchema(this));\n\t\t},\n\t};\n};\n\n// #region Variant schema\n\ntype VariantTuple = readonly ObjectSchema<any>[];\n\ntype InferVariantInput<TMembers extends VariantTuple> = $type.enforce<InferInput<TMembers[number]>>;\n\ntype InferVariantOutput<TMembers extends VariantTuple> = $type.enforce<InferOutput<TMembers[number]>>;\n\nexport interface VariantSchema<\n\tTMembers extends VariantTuple = VariantTuple,\n\tTClosed extends boolean = boolean,\n> extends BaseSchema<Record<string, unknown>> {\n\treadonly type: 'variant';\n\treadonly members: TMembers;\n\treadonly closed: TClosed;\n\n\treadonly [kType]?: { in: InferVariantInput<TMembers>; out: InferVariantOutput<TMembers> };\n}\n\nconst ISSUE_VARIANT_MISSING = /*#__PURE__*/ prependPath('$type', ISSUE_MISSING);\n\nconst ISSUE_VARIANT_TYPE = /*#__PURE__*/ prependPath('$type', ISSUE_TYPE_STRING);\n\n// #__NO_SIDE_EFFECTS__\nexport const variant: {\n\t<const TMembers extends VariantTuple>(members: TMembers): VariantSchema<TMembers>;\n\t<const TMembers extends VariantTuple, TClosed extends boolean>(\n\t\tmembers: TMembers,\n\t\tclosed: TClosed,\n\t): VariantSchema<TMembers, TClosed>;\n} = (members: ObjectSchema[], closed: boolean = false): VariantSchema<any, any> => {\n\treturn {\n\t\tkind: 'schema',\n\t\ttype: 'variant',\n\t\tmembers: members,\n\t\tclosed: closed,\n\t\tget '~run'() {\n\t\t\tconst types: string[] = [];\n\t\t\tconst schemas: ObjectSchema[] = [];\n\n\t\t\tfor (let idx = 0, len = members.length; idx < len; idx++) {\n\t\t\t\tconst member = members[idx]!;\n\t\t\t\tconst shape = member.shape;\n\n\t\t\t\tlet t = shape.$type as MaybeOptional<LiteralSchema<syntax.Nsid>> | undefined;\n\n\t\t\t\tassert(t !== undefined, `expected $type in variant member #${idx} to be defined`);\n\t\t\t\tif (t.type === 'optional') {\n\t\t\t\t\tt = t.wrapped;\n\t\t\t\t}\n\n\t\t\t\tassert(\n\t\t\t\t\tt.type === 'literal' && typeof t.expected === 'string',\n\t\t\t\t\t`expected $type in variant member #${idx} to be a string literal`,\n\t\t\t\t);\n\n\t\t\t\ttypes.push(t.expected);\n\t\t\t\tschemas.push(member);\n\t\t\t}\n\n\t\t\tconst issue: IssueLeaf = {\n\t\t\t\tok: false,\n\t\t\t\tcode: 'invalid_variant',\n\t\t\t\texpected: types,\n\t\t\t\tmsg() {\n\t\t\t\t\treturn `expected ${separatedList(types, 'or')}`;\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst matcher: Matcher = (input, flags) => {\n\t\t\t\tif (!isObject(input)) {\n\t\t\t\t\treturn ISSUE_TYPE_OBJECT;\n\t\t\t\t}\n\n\t\t\t\tconst type = input.$type;\n\n\t\t\t\tif (type === undefined && !('$type' in input)) {\n\t\t\t\t\treturn ISSUE_VARIANT_MISSING;\n\t\t\t\t}\n\n\t\t\t\tif (typeof type !== 'string') {\n\t\t\t\t\treturn closed ? issue : ISSUE_VARIANT_TYPE;\n\t\t\t\t}\n\n\t\t\t\tfor (let idx = 0, len = types.length; idx < len; idx++) {\n\t\t\t\t\tif (types[idx] === type) {\n\t\t\t\t\t\treturn schemas[idx]!['~run'](input, flags);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (closed) {\n\t\t\t\t\treturn issue;\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t};\n\n\t\t\treturn lazyProperty(this, '~run', matcher);\n\t\t},\n\t\tget '~standard'() {\n\t\t\treturn lazyProperty(this, '~standard', toStandardSchema(this));\n\t\t},\n\t};\n};\n\n// #region Unknown schema\n\nexport interface UnknownSchema extends BaseSchema<Record<string, unknown>> {\n\treadonly type: 'unknown';\n}\n\nconst ISSUE_TYPE_UNKNOWN: IssueLeaf = {\n\tok: false,\n\tcode: 'invalid_type',\n\texpected: 'unknown',\n\tmsg() {\n\t\treturn `expected unknown`;\n\t},\n};\n\nconst UNKNOWN_SCHEMA: UnknownSchema = {\n\tkind: 'schema',\n\ttype: 'unknown',\n\t'~run'(input, _flags) {\n\t\tif (typeof input !== 'object' || input === null) {\n\t\t\treturn ISSUE_TYPE_UNKNOWN;\n\t\t}\n\n\t\treturn undefined;\n\t},\n\tget '~standard'() {\n\t\treturn lazyProperty(this, '~standard', toStandardSchema(this));\n\t},\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const unknown = (): UnknownSchema => {\n\treturn UNKNOWN_SCHEMA;\n};\n\n// #region XRPC types\n\nexport interface XRPCLexBodyParam<\n\tTSchema extends ObjectSchema | VariantSchema = ObjectSchema | VariantSchema,\n> {\n\treadonly type: 'lex';\n\treadonly schema: TSchema;\n}\n\nexport interface XRPCBlobBodyParam {\n\treadonly type: 'blob';\n\treadonly encoding?: string[];\n}\n\nexport type XRPCBodyParam = XRPCLexBodyParam | XRPCBlobBodyParam | null;\n\nexport type InferXRPCBodyInput<T extends XRPCBodyParam> =\n\tT extends XRPCLexBodyParam<infer Schema>\n\t\t? InferInput<Schema>\n\t\t: T extends XRPCBlobBodyParam\n\t\t\t? Blob\n\t\t\t: T extends null\n\t\t\t\t? void\n\t\t\t\t: never;\n\nexport type InferXRPCBodyOutput<T extends XRPCBodyParam> =\n\tT extends XRPCLexBodyParam<infer Schema>\n\t\t? InferOutput<Schema>\n\t\t: T extends XRPCBlobBodyParam\n\t\t\t? Blob\n\t\t\t: T extends null\n\t\t\t\t? void\n\t\t\t\t: never;\n\n// #region XRPC procedure metadata\n\nexport interface XRPCProcedureMetadata<\n\tTParams extends ObjectSchema | null = ObjectSchema | null,\n\tTInput extends XRPCBodyParam = XRPCBodyParam,\n\tTOutput extends XRPCBodyParam = XRPCBodyParam,\n\tTNsid extends syntax.Nsid = syntax.Nsid,\n> extends BaseMetadata {\n\treadonly type: 'xrpc_procedure';\n\treadonly nsid: TNsid;\n\treadonly params: TParams;\n\treadonly input: TInput;\n\treadonly output: TOutput;\n}\n\n// #__NO_SIDE_EFFECTS__\nexport const procedure = <\n\tTNsid extends syntax.Nsid,\n\tTParams extends ObjectSchema | null,\n\tTInput extends XRPCBodyParam,\n\tTOutput extends XRPCBodyParam,\n>(\n\tnsid: TNsid,\n\toptions: {\n\t\tparams: TParams;\n\t\tinput: TInput;\n\t\toutput: TOutput;\n\t},\n): XRPCProcedureMetadata<TParams, TInput, TOutput, TNsid> => {\n\t// `schema` can be a getter, and we'd have to resolve that getter.\n\n\txrpcSchemaGenerated = true;\n\n\treturn {\n\t\tkind: 'metadata',\n\t\ttype: 'xrpc_procedure',\n\t\tnsid: nsid,\n\t\tparams: options.params,\n\t\tget input() {\n\t\t\tlet val = options.input;\n\n\t\t\tswitch (val?.type) {\n\t\t\t\tcase 'lex': {\n\t\t\t\t\tval = {\n\t\t\t\t\t\ttype: 'lex',\n\t\t\t\t\t\tschema: val.schema,\n\t\t\t\t\t} as TInput;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn lazyProperty(this, 'input', val);\n\t\t},\n\t\tget output() {\n\t\t\tlet val = options.output;\n\n\t\t\tswitch (val?.type) {\n\t\t\t\tcase 'lex': {\n\t\t\t\t\tval = {\n\t\t\t\t\t\ttype: 'lex',\n\t\t\t\t\t\tschema: val.schema,\n\t\t\t\t\t} as TOutput;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn lazyProperty(this, 'output', val);\n\t\t},\n\t};\n};\n\n// #region XRPC query metadata\n\nexport interface XRPCQueryMetadata<\n\tTParams extends ObjectSchema | null = ObjectSchema | null,\n\tTOutput extends XRPCBodyParam = XRPCBodyParam,\n\tTNsid extends syntax.Nsid = syntax.Nsid,\n> extends BaseMetadata {\n\treadonly type: 'xrpc_query';\n\treadonly nsid: TNsid;\n\treadonly params: TParams;\n\treadonly output: TOutput;\n}\n\n// #__NO_SIDE_EFFECTS__\nexport const query = <\n\tTNsid extends syntax.Nsid,\n\tTParams extends ObjectSchema | null,\n\tTOutput extends XRPCBodyParam,\n>(\n\tnsid: TNsid,\n\toptions: {\n\t\tparams: TParams;\n\t\toutput: TOutput;\n\t},\n): XRPCQueryMetadata<TParams, TOutput, TNsid> => {\n\t// `schema` can be a getter, and we'd have to resolve that getter.\n\n\txrpcSchemaGenerated = true;\n\n\treturn {\n\t\tkind: 'metadata',\n\t\ttype: 'xrpc_query',\n\t\tnsid: nsid,\n\t\tparams: options.params,\n\t\tget output() {\n\t\t\tlet val = options.output;\n\n\t\t\tswitch (val?.type) {\n\t\t\t\tcase 'lex': {\n\t\t\t\t\tval = {\n\t\t\t\t\t\ttype: 'lex',\n\t\t\t\t\t\tschema: val.schema,\n\t\t\t\t\t} as TOutput;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn lazyProperty(this, 'output', val);\n\t\t},\n\t};\n};\n\n// #region XRPC subscription metadata\n\nexport interface XRPCSubscriptionMetadata<\n\tTParams extends ObjectSchema | null = ObjectSchema | null,\n\tTMessage extends ObjectSchema<any> | VariantSchema<any, any> | null =\n\t\t| ObjectSchema<any>\n\t\t| VariantSchema<any, any>\n\t\t| null,\n\tTNsid extends syntax.Nsid = syntax.Nsid,\n> extends BaseMetadata {\n\treadonly type: 'xrpc_subscription';\n\treadonly nsid: TNsid;\n\treadonly params: TParams;\n\treadonly message: TMessage;\n}\n\n// #__NO_SIDE_EFFECTS__\nexport const subscription = <\n\tTNsid extends syntax.Nsid,\n\tTParams extends ObjectSchema | null,\n\tTMessage extends ObjectSchema<any> | VariantSchema<any, any> | null,\n>(\n\tnsid: TNsid,\n\toptions: {\n\t\tparams: TParams;\n\t\treadonly message: TMessage;\n\t},\n): XRPCSubscriptionMetadata<TParams, TMessage, TNsid> => {\n\t// `message` can be a getter, and we'd have to resolve that getter.\n\n\treturn {\n\t\tkind: 'metadata',\n\t\ttype: 'xrpc_subscription',\n\t\tnsid: nsid,\n\t\tparams: options.params,\n\t\tget message() {\n\t\t\treturn lazyProperty(this, 'message', options.message);\n\t\t},\n\t};\n};\n","const segmenter = new Intl.Segmenter();\n\nconst isAsciiWithoutCr = (text: string): boolean => {\n\tconst len = text.length;\n\tlet idx = 0;\n\n\twhile (idx + 3 < len) {\n\t\tconst a = text.charCodeAt(idx);\n\t\tconst b = text.charCodeAt(idx + 1);\n\t\tconst c = text.charCodeAt(idx + 2);\n\t\tconst d = text.charCodeAt(idx + 3);\n\n\t\tif ((a | b | c | d) > 0x7f || a === 0x0d || b === 0x0d || c === 0x0d || d === 0x0d) {\n\t\t\treturn false;\n\t\t}\n\n\t\tidx += 4;\n\t}\n\n\twhile (idx < len) {\n\t\tconst code = text.charCodeAt(idx);\n\t\tif (code > 0x7f || code === 0x0d) {\n\t\t\treturn false;\n\t\t}\n\n\t\tidx++;\n\t}\n\n\treturn true;\n};\n\n/**\n * returns the grapheme length of a string\n * @param text string to count graphemes in\n * @returns grapheme count\n */\nexport const getGraphemeLength = (text: string): number => {\n\tif (isAsciiWithoutCr(text)) {\n\t\treturn text.length;\n\t}\n\n\tconst iterator = segmenter.segment(text)[Symbol.iterator]();\n\tlet count = 0;\n\n\twhile (!iterator.next().done) {\n\t\tcount++;\n\t}\n\n\treturn count;\n};\n\n/**\n * checks if the grapheme length of a string is within the specified range\n * @param text string to check\n * @param min minimum grapheme length (inclusive)\n * @param max maximum grapheme length (inclusive)\n * @returns true if the grapheme length is within range\n */\nexport const isGraphemeLengthInRange = (text: string, min: number, max: number): boolean => {\n\tconst utf16Len = text.length;\n\n\t// UTF-16 length < min means grapheme count < min\n\tif (utf16Len < min) {\n\t\treturn false;\n\t}\n\n\t// if there's no minimum constraint and UTF-16 length is within max,\n\t// grapheme count is definitely within max\n\tif (min === 0 && utf16Len <= max) {\n\t\treturn true;\n\t}\n\n\tif (isAsciiWithoutCr(text)) {\n\t\treturn utf16Len <= max;\n\t}\n\n\t// count graphemes with early termination\n\tconst iterator = segmenter.segment(text)[Symbol.iterator]();\n\tlet count = 0;\n\n\twhile (!iterator.next().done) {\n\t\tcount++;\n\t\tif (count > max) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn count >= min;\n};\n","/**\n * represents an object containing raw binary data encoded as a base64 string\n */\nexport interface Bytes {\n\t$bytes: string;\n}\n\nconst BYTES_SYMBOL = Symbol.for('@atcute/bytes-wrapper');\n\n/**\n * this should match with {@link file://./../../../../utilities/cbor/lib/bytes.ts}\n * @internal\n */\nexport interface _BytesWrapper {\n\treadonly [BYTES_SYMBOL]: true;\n\n\treadonly buf: Uint8Array;\n\treadonly $bytes: string;\n\n\ttoJSON(): Bytes;\n}\n\n/**\n * @internal\n */\n// #__NO_SIDE_EFFECTS__\nexport const _isBytesWrapper = (input: unknown): input is _BytesWrapper => {\n\treturn typeof input === 'object' && input !== null && BYTES_SYMBOL in input;\n};\n\nconst BASE64_RE = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}(?:==)?|[A-Za-z0-9+/]{3}=?)?$/;\nconst isBase64 = (input: unknown): input is string => {\n\tif (typeof input !== 'string') {\n\t\treturn false;\n\t}\n\n\treturn BASE64_RE.test(input);\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const isBytes = (input: unknown): input is Bytes => {\n\tconst v = input as any;\n\n\treturn (\n\t\ttypeof v === 'object' &&\n\t\tv !== null &&\n\t\t(BYTES_SYMBOL in v || (isBase64(v.$bytes) && Object.keys(v).length === 1))\n\t);\n};\n","export { isBlob, isLegacyBlob, type Blob, type LegacyBlob } from './blob.ts';\nexport { isBytes, type Bytes } from './bytes.ts';\nexport { isCidLink, type CidLink } from './cid-link.ts';\n","import type { Cid } from '../syntax/cid.ts';\n\nimport { isCidLink, type CidLink } from './cid-link.ts';\n\n/**\n * represents a reference to a data blob\n */\nexport interface Blob<TMime extends string = string> {\n\t$type: 'blob';\n\tmimeType: TMime;\n\tref: CidLink;\n\tsize: number;\n}\n\nexport const isBlob = (input: unknown): input is Blob => {\n\tconst v = input as any;\n\n\treturn (\n\t\ttypeof v === 'object' &&\n\t\tv !== null &&\n\t\tv.$type === 'blob' &&\n\t\ttypeof v.mimeType === 'string' &&\n\t\tNumber.isSafeInteger(v.size) &&\n\t\tisCidLink(v.ref) &&\n\t\tObject.keys(v).length === 4\n\t);\n};\n\n/**\n * deprecated interface representing an interface to a data blob\n */\nexport interface LegacyBlob<TMime extends string = string> {\n\tcid: Cid;\n\tmimeType: TMime;\n}\n\nexport const isLegacyBlob = (input: unknown): input is LegacyBlob => {\n\tconst v = input as any;\n\n\treturn (\n\t\ttypeof v === 'object' &&\n\t\tv !== null &&\n\t\ttypeof v.cid === 'string' &&\n\t\ttypeof v.mimeType === 'string' &&\n\t\tObject.keys(v).length === 2\n\t);\n};\n","import { isCid, type Cid } from '../syntax/cid.ts';\n\n/**\n * represents a content identifier (CID) reference\n */\nexport interface CidLink {\n\t$link: Cid;\n}\n\nconst CID_LINK_SYMBOL = Symbol.for('@atcute/cid-link-wrapper');\n\n/**\n * this should match with {@link file://./../../../../utilities/cid/lib/cid-link.ts}\n * @internal\n */\nexport interface _CidLinkWrapper {\n\treadonly [CID_LINK_SYMBOL]: true;\n\n\treadonly bytes: Uint8Array;\n\treadonly $link: string;\n\n\ttoJSON(): CidLink;\n}\n\n/**\n * @internal\n */\nexport const _isCidLinkWrapper = (input: unknown): input is _CidLinkWrapper => {\n\treturn typeof input === 'object' && input !== null && CID_LINK_SYMBOL in input;\n};\n\nexport const isCidLink = (input: unknown): input is CidLink => {\n\tconst v = input as any;\n\n\treturn typeof v === 'object' && v !== null && (CID_LINK_SYMBOL in v || isCid(v.$link));\n};\n","// #__NO_SIDE_EFFECTS__\nexport const lazyProperty = <T>(obj: object, prop: string | number | symbol, value: T): T => {\n\tObject.defineProperty(obj, prop, { value });\n\treturn value;\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const lazy = <T>(getter: () => T): { readonly value: T } => {\n\treturn {\n\t\tget value() {\n\t\t\tconst value = getter();\n\t\t\treturn lazyProperty(this, 'value', value);\n\t\t},\n\t};\n};\n\nexport const isArray = Array.isArray;\n\n// #__NO_SIDE_EFFECTS__\nexport const isObject = (input: unknown): input is Record<string, unknown> => {\n\treturn typeof input === 'object' && input !== null && !isArray(input);\n};\n\nexport const allowsEval = /*#__PURE__*/ lazy((): boolean => {\n\tif (typeof navigator !== 'undefined' && navigator?.userAgent?.includes('Cloudflare')) {\n\t\treturn false;\n\t}\n\n\ttry {\n\t\tconst F = Function;\n\t\t// oxlint-disable-next-line no-new -- intentional check for Function constructor availability\n\t\tnew F('');\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n});\n","/** fetch handler function */\nexport type FetchHandler = (pathname: string, init: RequestInit) => Promise<Response>;\n\n/** fetch handler in an object */\nexport interface FetchHandlerObject {\n\thandle(this: FetchHandlerObject, pathname: string, init: RequestInit): Promise<Response>;\n}\n\nexport const buildFetchHandler = (handler: FetchHandler | FetchHandlerObject): FetchHandler => {\n\tif (typeof handler === 'object') {\n\t\treturn handler.handle.bind(handler);\n\t}\n\n\treturn handler;\n};\n\nexport interface SimpleFetchHandlerOptions {\n\tservice: string | URL;\n\tfetch?: typeof globalThis.fetch;\n}\n\nexport const simpleFetchHandler = ({\n\tservice,\n\tfetch: _fetch = fetch,\n}: SimpleFetchHandlerOptions): FetchHandler => {\n\treturn async (pathname, init) => {\n\t\tconst url = new URL(pathname, service);\n\t\treturn await _fetch(url.href, init);\n\t};\n};\n","import { getPdsEndpoint, type DidDocument } from '@atcute/identity';\nimport type { Did } from '@atcute/lexicons';\n\nimport type { ComAtprotoServerCreateSession } from '@atcute/atproto';\n\nimport { Client, ClientResponseError, isXRPCErrorPayload, ok } from './client.js';\nimport { simpleFetchHandler, type FetchHandlerObject } from './fetch-handler.js';\n\nimport { decodeJwt } from './utils/jwt.js';\n\n/**\n * represents the decoded access token, for convenience\n * @deprecated\n */\nexport interface AtpAccessJwt {\n\t/** access token scope */\n\tscope:\n\t\t| 'com.atproto.access'\n\t\t| 'com.atproto.appPass'\n\t\t| 'com.atproto.appPassPrivileged'\n\t\t| 'com.atproto.signupQueued'\n\t\t| 'com.atproto.takendown';\n\t/** account DID */\n\tsub: Did;\n\t/** expiration time in Unix seconds */\n\texp: number;\n\t/** token issued time in Unix seconds */\n\tiat: number;\n}\n\n/**\n * represents the the decoded refresh token, for convenience\n * @deprecated\n */\nexport interface AtpRefreshJwt {\n\t/** refresh token scope */\n\tscope: 'com.atproto.refresh';\n\t/** unique identifier for this session */\n\tjti: string;\n\t/** account DID */\n\tsub: Did;\n\t/** intended audience of this refresh token, in DID */\n\taud: Did;\n\t/** token expiration time in seconds */\n\texp: number;\n\t/** token issued time in seconds */\n\tiat: number;\n}\n\n/** session data, can be persisted and reused */\nexport interface AtpSessionData {\n\t/** refresh token */\n\trefreshJwt: string;\n\t/** access token */\n\taccessJwt: string;\n\t/** account handle */\n\thandle: string;\n\t/** account DID */\n\tdid: Did;\n\t/** PDS endpoint found in the DID document, this will be used as the service URI if provided */\n\tpdsUri?: string;\n\t/** email address of the account, might not be available if on app password */\n\temail?: string;\n\t/** whether the email address has been confirmed or not */\n\temailConfirmed?: boolean;\n\t/** whether the account has email-based two-factor authentication enabled */\n\temailAuthFactor?: boolean;\n\t/** whether the account is active (not deactivated, taken down, or suspended) */\n\tactive: boolean;\n\t/** possible reason for why the account is inactive */\n\tinactiveStatus?: string;\n}\n\nexport interface CredentialManagerOptions {\n\t/** PDS server URL */\n\tservice: string;\n\n\t/** custom fetch function */\n\tfetch?: typeof fetch;\n\n\t/** function called when the session expires and can't be refreshed */\n\tonExpired?: (session: AtpSessionData) => void;\n\t/** function called after a successful session refresh */\n\tonRefresh?: (session: AtpSessionData) => void;\n\t/** function called whenever the session object is updated (login, resume, refresh) */\n\tonSessionUpdate?: (session: AtpSessionData) => void;\n}\n\nexport class CredentialManager implements FetchHandlerObject {\n\t/** service URL to make authentication requests with */\n\treadonly serviceUrl: string;\n\t/** fetch implementation */\n\tfetch: typeof fetch;\n\n\t/** internal client instance for making authentication requests */\n\t#server: Client;\n\t/** holds a promise for the current refresh operation, used for debouncing */\n\t#refreshSessionPromise: Promise<void> | undefined;\n\n\t/** callback for session expiration */\n\t#onExpired: CredentialManagerOptions['onExpired'];\n\t/** callback for successful session refresh */\n\t#onRefresh: CredentialManagerOptions['onRefresh'];\n\t/** callback for session updates */\n\t#onSessionUpdate: CredentialManagerOptions['onSessionUpdate'];\n\n\t/** current active session, undefined if not authenticated */\n\tsession?: AtpSessionData;\n\n\tconstructor({\n\t\tservice,\n\t\tonExpired,\n\t\tonRefresh,\n\t\tonSessionUpdate,\n\t\tfetch: _fetch = fetch,\n\t}: CredentialManagerOptions) {\n\t\tthis.serviceUrl = service;\n\t\tthis.fetch = _fetch;\n\n\t\tthis.#server = new Client({ handler: simpleFetchHandler({ service, fetch: _fetch }) });\n\n\t\tthis.#onRefresh = onRefresh;\n\t\tthis.#onExpired = onExpired;\n\t\tthis.#onSessionUpdate = onSessionUpdate;\n\t}\n\n\t/** service URL to make actual API requests with */\n\tget dispatchUrl() {\n\t\treturn this.session?.pdsUri ?? this.serviceUrl;\n\t}\n\n\tasync handle(pathname: string, init: RequestInit): Promise<Response> {\n\t\tawait this.#refreshSessionPromise;\n\n\t\tconst url = new URL(pathname, this.dispatchUrl);\n\t\tconst headers = new Headers(init.headers);\n\n\t\tif (!this.session || headers.has('authorization')) {\n\t\t\treturn (0, this.fetch)(url, init);\n\t\t}\n\n\t\tconst initialToken = this.session.accessJwt;\n\t\theaders.set('authorization', `Bearer ${initialToken}`);\n\n\t\tconst initialResponse = await (0, this.fetch)(url, { ...init, headers });\n\n\t\tif (initialResponse.status !== 401 && !(await isExpiredTokenResponse(initialResponse))) {\n\t\t\treturn initialResponse;\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.#refreshSession();\n\t\t} catch {\n\t\t\treturn initialResponse;\n\t\t}\n\n\t\t// return initial response if:\n\t\t// - request was aborted\n\t\t// - refresh failed and cleared the session\n\t\t// - token didn't actually change (refresh failed silently)\n\t\t// - request body was a stream (can't be resent)\n\t\tconst updatedToken = this.session?.accessJwt;\n\t\tif (\n\t\t\tinit.signal?.aborted ||\n\t\t\t!updatedToken ||\n\t\t\tupdatedToken === initialToken ||\n\t\t\tinit.body instanceof ReadableStream\n\t\t) {\n\t\t\treturn initialResponse;\n\t\t}\n\n\t\t// cancel initial response to avoid resource leaks (Node.js)\n\t\tawait initialResponse.body?.cancel();\n\n\t\theaders.set('authorization', `Bearer ${updatedToken}`);\n\t\treturn await (0, this.fetch)(url, { ...init, headers });\n\t}\n\n\t#refreshSession() {\n\t\treturn (this.#refreshSessionPromise ||= this.#refreshSessionInner().finally(\n\t\t\t() => (this.#refreshSessionPromise = undefined),\n\t\t));\n\t}\n\n\tasync #refreshSessionInner(): Promise<void> {\n\t\tconst currentSession = this.session;\n\t\tif (!currentSession) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst response = await this.#server.post('com.atproto.server.refreshSession', {\n\t\t\theaders: {\n\t\t\t\tauthorization: `Bearer ${currentSession.refreshJwt}`,\n\t\t\t},\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tconst isExpired =\n\t\t\t\tresponse.status === 401 ||\n\t\t\t\tresponse.data.error === 'ExpiredToken' ||\n\t\t\t\tresponse.data.error === 'InvalidToken';\n\n\t\t\tif (isExpired) {\n\t\t\t\tthis.session = undefined;\n\t\t\t\tthis.#onExpired?.(currentSession);\n\t\t\t}\n\n\t\t\tthrow new ClientResponseError(response);\n\t\t}\n\n\t\t// DID must not change during refresh\n\t\tif (response.data.did !== currentSession.did) {\n\t\t\tthis.session = undefined;\n\t\t\tthis.#onExpired?.(currentSession);\n\t\t\tthrow new ClientResponseError({ status: 401, data: { error: 'InvalidDID' } });\n\t\t}\n\n\t\t// protect against concurrent session updates\n\t\tif (this.session !== currentSession) {\n\t\t\tthrow new Error('concurrent session update detected');\n\t\t}\n\n\t\tthis.#updateSession({ ...currentSession, ...response.data });\n\t\tthis.#onRefresh?.(this.session!);\n\t}\n\n\t#updateSession(raw: ComAtprotoServerCreateSession.$output): AtpSessionData {\n\t\tconst didDoc = raw.didDoc as DidDocument | undefined;\n\n\t\tlet pdsUri: string | undefined;\n\t\tif (didDoc) {\n\t\t\tpdsUri = getPdsEndpoint(didDoc);\n\t\t}\n\n\t\tconst newSession: AtpSessionData = {\n\t\t\taccessJwt: raw.accessJwt,\n\t\t\trefreshJwt: raw.refreshJwt,\n\t\t\thandle: raw.handle,\n\t\t\tdid: raw.did,\n\t\t\tpdsUri: pdsUri,\n\t\t\temail: raw.email,\n\t\t\temailConfirmed: raw.emailConfirmed,\n\t\t\temailAuthFactor: raw.emailAuthFactor,\n\t\t\tactive: raw.active ?? true,\n\t\t\tinactiveStatus: raw.status,\n\t\t};\n\n\t\tthis.session = newSession;\n\t\tthis.#onSessionUpdate?.(newSession);\n\n\t\treturn newSession;\n\t}\n\n\t/**\n\t * resume from a persisted session\n\t * @param session session data, taken from `AtpAuth#session` after login\n\t */\n\tasync resume(session: AtpSessionData): Promise<AtpSessionData> {\n\t\t// protect against concurrent resume of the same session\n\t\tif (session.refreshJwt === this.session?.refreshJwt) {\n\t\t\tawait this.#refreshSessionPromise;\n\t\t\tif (!this.session || session.did !== this.session.did) {\n\t\t\t\tthrow new ClientResponseError({ status: 401, data: { error: 'InvalidToken' } });\n\t\t\t}\n\t\t\treturn this.session;\n\t\t}\n\n\t\tconst now = Date.now() / 1_000 + 60 * 5;\n\n\t\tconst refreshToken = decodeJwt(session.refreshJwt) as AtpRefreshJwt;\n\t\tif (now >= refreshToken.exp || refreshToken.sub !== session.did) {\n\t\t\tthrow new ClientResponseError({ status: 401, data: { error: 'InvalidToken' } });\n\t\t}\n\n\t\tconst accessToken = decodeJwt(session.accessJwt) as AtpAccessJwt;\n\t\tif (accessToken.sub !== session.did) {\n\t\t\tthrow new ClientResponseError({ status: 401, data: { error: 'InvalidToken' } });\n\t\t}\n\n\t\t// set the session and clear any stale refresh promise\n\t\tthis.session = session;\n\t\tthis.#refreshSessionPromise = undefined;\n\n\t\tif (now >= accessToken.exp) {\n\t\t\t// access token expired, need to refresh\n\t\t\tawait this.#refreshSession();\n\t\t} else {\n\t\t\t// access token still valid, fetch session info in background\n\t\t\tconst promise = ok(\n\t\t\t\tthis.#server.get('com.atproto.server.getSession', {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tauthorization: `Bearer ${session.accessJwt}`,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\tpromise.then(\n\t\t\t\t(next) => {\n\t\t\t\t\tconst existing = this.session;\n\t\t\t\t\tif (!existing || existing.did !== next.did) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.#updateSession({ ...existing, ...next });\n\t\t\t\t},\n\t\t\t\t(_err) => {\n\t\t\t\t\t// ignore error\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\tif (!this.session) {\n\t\t\tthrow new ClientResponseError({ status: 401, data: { error: 'InvalidToken' } });\n\t\t}\n\n\t\treturn this.session;\n\t}\n\n\t/**\n\t * sign in to an account\n\t * @param options credential options\n\t * @returns session data\n\t */\n\tasync login(options: AuthLoginOptions): Promise<AtpSessionData> {\n\t\t// reset the session\n\t\tthis.session = undefined;\n\t\tthis.#refreshSessionPromise = undefined;\n\n\t\tconst session = await ok(\n\t\t\tthis.#server.post('com.atproto.server.createSession', {\n\t\t\t\tinput: {\n\t\t\t\t\tidentifier: options.identifier,\n\t\t\t\t\tpassword: options.password,\n\t\t\t\t\tauthFactorToken: options.code,\n\t\t\t\t\tallowTakendown: options.allowTakendown,\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\n\t\treturn this.#updateSession(session);\n\t}\n\n\t/**\n\t * sign out of the current session, invalidating it server-side\n\t */\n\tasync logout(): Promise<void> {\n\t\tconst currentSession = this.session;\n\t\tif (!currentSession) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.session = undefined;\n\t\tthis.#refreshSessionPromise = undefined;\n\n\t\ttry {\n\t\t\tawait this.#server.post('com.atproto.server.deleteSession', {\n\t\t\t\tas: null,\n\t\t\t\theaders: {\n\t\t\t\t\tauthorization: `Bearer ${currentSession.refreshJwt}`,\n\t\t\t\t},\n\t\t\t});\n\t\t} catch {\n\t\t\t// ignore errors - session is already cleared locally\n\t\t}\n\t}\n}\n\n/** credentials */\nexport interface AuthLoginOptions {\n\t/** what account to login as, this could be domain handle, DID, or email address */\n\tidentifier: string;\n\t/** account password */\n\tpassword: string;\n\t/** two-factor authentication code, if email TOTP is enabled */\n\tcode?: string;\n\t/** allow signing in even if the account has been taken down */\n\tallowTakendown?: boolean;\n}\n\nconst isExpiredTokenResponse = async (response: Response): Promise<boolean> => {\n\tif (response.status !== 400) {\n\t\treturn false;\n\t}\n\n\tif (extractContentType(response.headers) !== 'application/json') {\n\t\treturn false;\n\t}\n\n\t// this is nasty as it relies heavily on what the PDS returns, but avoiding\n\t// cloning and reading the request as much as possible is better.\n\n\t// {\"error\":\"ExpiredToken\",\"message\":\"Token has expired\"}\n\t// {\"error\":\"ExpiredToken\",\"message\":\"Token is expired\"}\n\tif (extractContentLength(response.headers) > 54 * 1.5) {\n\t\treturn false;\n\t}\n\n\ttry {\n\t\tconst data = await response.clone().json();\n\t\tif (isXRPCErrorPayload(data)) {\n\t\t\treturn data.error === 'ExpiredToken';\n\t\t}\n\t} catch {}\n\n\treturn false;\n};\n\nconst extractContentType = (headers: Headers) => {\n\treturn headers.get('content-type')?.split(';')[0]?.trim();\n};\nconst extractContentLength = (headers: Headers) => {\n\treturn Number(headers.get('content-length') ?? ';');\n};\n","/**\n * @module\n * JWT decoding utilities for session resumption checks.\n * This module is exported for convenience and is no way part of public API,\n * it can be removed at any time.\n */\n\n/**\n * Decodes a JWT token\n * @param token The token string\n * @returns JSON object from the token\n */\nexport const decodeJwt = (token: string): unknown => {\n\tconst pos = 1;\n\tconst part = token.split('.')[1];\n\n\tlet decoded: string;\n\n\tif (typeof part !== 'string') {\n\t\tthrow new Error('invalid token: missing part ' + (pos + 1));\n\t}\n\n\ttry {\n\t\tdecoded = base64UrlDecode(part);\n\t} catch (e) {\n\t\tthrow new Error('invalid token: invalid b64 for part ' + (pos + 1) + ' (' + (e as Error).message + ')');\n\t}\n\n\ttry {\n\t\treturn JSON.parse(decoded);\n\t} catch (e) {\n\t\tthrow new Error('invalid token: invalid json for part ' + (pos + 1) + ' (' + (e as Error).message + ')');\n\t}\n};\n\n/**\n * Decodes a URL-safe Base64 string\n * @param str URL-safe Base64 that needed to be decoded\n * @returns The actual string\n */\nexport const base64UrlDecode = (str: string): string => {\n\tlet output = str.replace(/-/g, '+').replace(/_/g, '/');\n\n\tswitch (output.length % 4) {\n\t\tcase 0:\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\toutput += '==';\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\toutput += '=';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error('base64 string is not of the correct length');\n\t}\n\n\ttry {\n\t\treturn b64DecodeUnicode(output);\n\t} catch {\n\t\treturn atob(output);\n\t}\n};\n\nconst b64DecodeUnicode = (str: string): string => {\n\treturn decodeURIComponent(\n\t\tatob(str).replace(/(.)/g, (_m, p) => {\n\t\t\tlet code = p.charCodeAt(0).toString(16).toUpperCase();\n\n\t\t\tif (code.length < 2) {\n\t\t\t\tcode = '0' + code;\n\t\t\t}\n\n\t\t\treturn '%' + code;\n\t\t}),\n\t);\n};\n"],"mappings":"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","names":["signal","headers","ok","ok"],"sourceRoot":"file:///var/home/toko/Code/tokono.ma/diffuse-artifacts/diffuse","file":"/chunk-LPLLWF34.js.map"}
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-M7PCQLSV.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-M7PCQLSV.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-M7PCQLSV.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-M7PCQLSV.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-MVWHZJHR.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-MVWHZJHR.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-MVWHZJHR.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-MVWHZJHR.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-MXEJU4VJ.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-MXEJU4VJ.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-MXEJU4VJ.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-MXEJU4VJ.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-MZP4RURX.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-MZP4RURX.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-MZP4RURX.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-MZP4RURX.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-NCFHYTLD.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-NCFHYTLD.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-NCFHYTLD.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-NCFHYTLD.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-NGXRH664.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-NGXRH664.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-NGXRH664.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-NGXRH664.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-OEJDMRAO.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-OEJDMRAO.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-OEJDMRAO.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-OEJDMRAO.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-ONE5JH5Q.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-ONE5JH5Q.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-ONE5JH5Q.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-ONE5JH5Q.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-OXLVUFPU.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-OXLVUFPU.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-OXLVUFPU.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-OXLVUFPU.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-P3M4HQTD.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-P3M4HQTD.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-P3M4HQTD.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-P3M4HQTD.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-PE6SII6D.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-PE6SII6D.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-PE6SII6D.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-PE6SII6D.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-PJWFBDSG.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-PJWFBDSG.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-PJWFBDSG.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-PJWFBDSG.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-PUHBIZRM.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-PUHBIZRM.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-PUHBIZRM.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-PUHBIZRM.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-QJG4JBCO.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-QJG4JBCO.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-QJG4JBCO.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-QJG4JBCO.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-QQ2VIQZY.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-QQ2VIQZY.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-QQ2VIQZY.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-QQ2VIQZY.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-R65OZ4FV.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-R65OZ4FV.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-R65OZ4FV.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-R65OZ4FV.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-RG36R2PW.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-RG36R2PW.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-RG36R2PW.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-RG36R2PW.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-RPWC6IKI.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-RPWC6IKI.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-RPWC6IKI.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-RPWC6IKI.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-S4RHYXDI.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-S4RHYXDI.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-S4RHYXDI.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-S4RHYXDI.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-S6GAP4IS.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-S6GAP4IS.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-S6GAP4IS.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-S6GAP4IS.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-SSTS6DW7.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-SSTS6DW7.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-SSTS6DW7.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-SSTS6DW7.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-UGE3FKYA.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-UGE3FKYA.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-UGE3FKYA.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-UGE3FKYA.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-UMLUM7AR.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-UMLUM7AR.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-UMLUM7AR.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-UMLUM7AR.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-UXCYOXOC.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-UXCYOXOC.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-UXCYOXOC.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-UXCYOXOC.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-WM2QH5TD.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-WM2QH5TD.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-WM2QH5TD.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-WM2QH5TD.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-WSITZE2C.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-WSITZE2C.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-WSITZE2C.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-WSITZE2C.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-XXGFKU7I.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-XXGFKU7I.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-XXGFKU7I.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-XXGFKU7I.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-YVFCBSEJ.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-YVFCBSEJ.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-YVFCBSEJ.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-YVFCBSEJ.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/cid.js
··· 1 - ../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/cid.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/cid.js.map
··· 1 - ../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/cid.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/element.js
··· 1 - ../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/element.js.map
··· 1 - ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/common/element.js.map
-63
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/facets/foundation.js
··· 1 - import { 2 - GROUP, 3 - config, 4 - findExistingOrAdd, 5 - foundation_default 6 - } from "../../chunk-JUPK7PXD.js"; 7 - import "../../chunk-HRGYPYP6.js"; 8 - import "../../chunk-YVFCBSEJ.js"; 9 - import "../../chunk-OXLVUFPU.js"; 10 - import "../../chunk-JQFGN3M7.js"; 11 - import "../../chunk-GMLGV4UU.js"; 12 - import "../../chunk-CPS76EE2.js"; 13 - import "../../chunk-IPY3IZ42.js"; 14 - import "../../chunk-A7EWFKZ4.js"; 15 - import "../../chunk-CNO46O5F.js"; 16 - import "../../chunk-77DLAY6P.js"; 17 - import "../../chunk-OEJDMRAO.js"; 18 - import "../../chunk-LPLLWF34.js"; 19 - import "../../chunk-BP7OSAES.js"; 20 - import "../../chunk-77ZY4GQV.js"; 21 - import "../../chunk-MVWHZJHR.js"; 22 - import "../../chunk-S4RHYXDI.js"; 23 - import "../../chunk-FVTTELAZ.js"; 24 - import "../../chunk-33EY7IZW.js"; 25 - import "../../chunk-3W46CCB5.js"; 26 - import "../../chunk-32QOJ2TM.js"; 27 - import "../../chunk-HDWTLLD6.js"; 28 - import "../../chunk-M7PCQLSV.js"; 29 - import "../../chunk-UXCYOXOC.js"; 30 - import "../../chunk-GX3WPNEX.js"; 31 - import "../../chunk-RPWC6IKI.js"; 32 - import "../../chunk-SSTS6DW7.js"; 33 - import "../../chunk-HN4F5JEZ.js"; 34 - import "../../chunk-NGXRH664.js"; 35 - import "../../chunk-CXGVZUBI.js"; 36 - import "../../chunk-GSA3UBRU.js"; 37 - import "../../chunk-AGNDISJF.js"; 38 - import "../../chunk-EEUCFWD4.js"; 39 - import "../../chunk-6DRHTH2U.js"; 40 - import "../../chunk-JS4TF33K.js"; 41 - import "../../chunk-UMLUM7AR.js"; 42 - import "../../chunk-EEVL24MR.js"; 43 - import "../../chunk-4UUOGUZ7.js"; 44 - import "../../chunk-3WGC3A6G.js"; 45 - import "../../chunk-S6GAP4IS.js"; 46 - import "../../chunk-PE6SII6D.js"; 47 - import "../../chunk-DUCTMCPX.js"; 48 - import "../../chunk-UGE3FKYA.js"; 49 - import "../../chunk-FIWHH4Y5.js"; 50 - import "../../chunk-G56PUJUJ.js"; 51 - import "../../chunk-KIMDMO5U.js"; 52 - import "../../chunk-H3WG7GN4.js"; 53 - import "../../chunk-EJ2QF5QE.js"; 54 - import "../../chunk-NCFHYTLD.js"; 55 - import "../../chunk-FZQXS3RE.js"; 56 - export { 57 - GROUP, 58 - config, 59 - foundation_default as default, 60 - findExistingOrAdd 61 - }; 62 - 63 - //# sourceMappingURL=./foundation.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/facets/foundation.js.map
··· 1 - ../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/common/facets/foundation.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/facets/utils.js
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/facets/utils.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/facets/utils.js.map
··· 1 - ../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/common/facets/utils.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/playlist.js
··· 1 - ../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/playlist.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/playlist.js.map
··· 1 - ../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/playlist.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/signal.js
··· 1 - ../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/signal.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/signal.js.map
··· 1 - ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/common/signal.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/themes/utils.js
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/themes/utils.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/themes/utils.js.map
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/themes/utils.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/utils.js
··· 1 - ../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/utils.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/utils.js.map
··· 1 - ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/common/utils.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/worker.js
··· 1 - ../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/worker.js.map
··· 1 - ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/common/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/worker/rpc.js
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/worker/rpc.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/worker/rpc.js.map
··· 1 - ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/common/worker/rpc.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/configurator/input/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/configurator/input/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/configurator/input/element.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/configurator/input/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/configurator/input/worker.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/configurator/input/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/configurator/input/worker.js.map
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/configurator/input/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/configurator/output/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/configurator/output/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/configurator/output/element.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/configurator/output/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/audio/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/engine/audio/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/audio/element.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/engine/audio/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/queue/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/engine/queue/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/queue/element.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/engine/queue/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/queue/worker.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/engine/queue/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/queue/worker.js.map
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/engine/queue/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/repeat-shuffle/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/engine/repeat-shuffle/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/repeat-shuffle/element.js.map
··· 1 - ../../../../bafybeia4lo67fqia3emjf54vzbrvfyao6fwndoc4rnqpav4yezowfg4j6e/components/engine/repeat-shuffle/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/scope/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/engine/scope/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/scope/element.js.map
··· 1 - ../../../../bafybeihr4brahqptxmxcdksktdfgs4hyl64odwx524vqmmitjvmn57sklq/components/engine/scope/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/common.js
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/common.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/common.js.map
··· 1 - ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/common.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/common.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/common.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/common.js.map
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/common.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/constants.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/constants.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/constants.js.map
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/constants.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/element.js.map
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/worker.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/worker.js.map
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/class.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/opensubsonic/class.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/class.js.map
··· 1 - ../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/components/input/opensubsonic/class.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/common.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/opensubsonic/common.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/common.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/opensubsonic/common.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/constants.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/opensubsonic/constants.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/constants.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/opensubsonic/constants.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/opensubsonic/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/element.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/opensubsonic/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/worker.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/opensubsonic/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/worker.js.map
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/opensubsonic/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/common.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/s3/common.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/common.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/s3/common.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/constants.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/s3/constants.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/constants.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/s3/constants.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/s3/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/element.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/s3/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/worker.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/s3/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/worker.js.map
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/s3/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/auto-queue/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/auto-queue/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/auto-queue/element.js.map
··· 1 - ../../../../bafybeia4lo67fqia3emjf54vzbrvfyao6fwndoc4rnqpav4yezowfg4j6e/components/orchestrator/auto-queue/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/favourites/common.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/favourites/common.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/favourites/common.js.map
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/favourites/common.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/favourites/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/favourites/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/favourites/element.js.map
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/favourites/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/favourites/worker.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/favourites/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/favourites/worker.js.map
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/favourites/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/input/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/input/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/input/element.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/input/element.js.map
-28
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/output/element.js
··· 1 - import { 2 - CLASS, 3 - NAME, 4 - element_default 5 - } from "../../../chunk-A7EWFKZ4.js"; 6 - import "../../../chunk-CNO46O5F.js"; 7 - import "../../../chunk-77DLAY6P.js"; 8 - import "../../../chunk-OEJDMRAO.js"; 9 - import "../../../chunk-LPLLWF34.js"; 10 - import "../../../chunk-BP7OSAES.js"; 11 - import "../../../chunk-77ZY4GQV.js"; 12 - import "../../../chunk-MVWHZJHR.js"; 13 - import "../../../chunk-S4RHYXDI.js"; 14 - import "../../../chunk-4UUOGUZ7.js"; 15 - import "../../../chunk-FIWHH4Y5.js"; 16 - import "../../../chunk-G56PUJUJ.js"; 17 - import "../../../chunk-KIMDMO5U.js"; 18 - import "../../../chunk-H3WG7GN4.js"; 19 - import "../../../chunk-EJ2QF5QE.js"; 20 - import "../../../chunk-NCFHYTLD.js"; 21 - import "../../../chunk-FZQXS3RE.js"; 22 - export { 23 - CLASS, 24 - NAME, 25 - element_default as default 26 - }; 27 - 28 - //# sourceMappingURL=./element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/output/element.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/output/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/process-tracks/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/process-tracks/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/process-tracks/element.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/process-tracks/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/process-tracks/worker.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/process-tracks/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/process-tracks/worker.js.map
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/process-tracks/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/queue-audio/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/queue-audio/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/queue-audio/element.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/queue-audio/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/scoped-tracks/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/scoped-tracks/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/scoped-tracks/element.js.map
··· 1 - ../../../../bafybeihr4brahqptxmxcdksktdfgs4hyl64odwx524vqmmitjvmn57sklq/components/orchestrator/scoped-tracks/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/scoped-tracks/worker.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/scoped-tracks/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/scoped-tracks/worker.js.map
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/scoped-tracks/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/sources/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/sources/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/sources/element.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/sources/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/automerge-repo-server/element.js
··· 1 - ../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/automerge-repo-server/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/automerge-repo-server/element.js.map
··· 1 - ../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/automerge-repo-server/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/s3/constants.js
··· 1 - ../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/s3/constants.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/s3/constants.js.map
··· 1 - ../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/s3/constants.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/s3/element.js
··· 1 - ../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/s3/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/s3/element.js.map
··· 1 - ../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/s3/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/s3/worker.js
··· 1 - ../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/s3/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/s3/worker.js.map
··· 1 - ../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/s3/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/common.js
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/common.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/common.js.map
··· 1 - ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/output/common.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/polymorphic/indexed-db/constants.js
··· 1 - ../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/polymorphic/indexed-db/constants.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/polymorphic/indexed-db/constants.js.map
··· 1 - ../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/output/polymorphic/indexed-db/constants.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/polymorphic/indexed-db/element.js
··· 1 - ../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/polymorphic/indexed-db/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/polymorphic/indexed-db/element.js.map
··· 1 - ../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/output/polymorphic/indexed-db/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/polymorphic/indexed-db/worker.js
··· 1 - ../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/polymorphic/indexed-db/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/polymorphic/indexed-db/worker.js.map
··· 1 - ../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/polymorphic/indexed-db/worker.js.map
-22
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/raw/atproto/element.js
··· 1 - import { 2 - CLASS, 3 - NAME, 4 - element_default 5 - } from "../../../../chunk-LPLLWF34.js"; 6 - import "../../../../chunk-BP7OSAES.js"; 7 - import "../../../../chunk-77ZY4GQV.js"; 8 - import "../../../../chunk-S4RHYXDI.js"; 9 - import "../../../../chunk-FIWHH4Y5.js"; 10 - import "../../../../chunk-G56PUJUJ.js"; 11 - import "../../../../chunk-KIMDMO5U.js"; 12 - import "../../../../chunk-H3WG7GN4.js"; 13 - import "../../../../chunk-EJ2QF5QE.js"; 14 - import "../../../../chunk-NCFHYTLD.js"; 15 - import "../../../../chunk-FZQXS3RE.js"; 16 - export { 17 - CLASS, 18 - NAME, 19 - element_default as default 20 - }; 21 - 22 - //# sourceMappingURL=./element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/raw/atproto/element.js.map
··· 1 - ../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/raw/atproto/element.js.map
-16
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/raw/atproto/oauth.js
··· 1 - import { 2 - OAuthUserAgent, 3 - login, 4 - logout, 5 - restoreOrFinalize 6 - } from "../../../../chunk-BP7OSAES.js"; 7 - import "../../../../chunk-77ZY4GQV.js"; 8 - import "../../../../chunk-FZQXS3RE.js"; 9 - export { 10 - OAuthUserAgent, 11 - login, 12 - logout, 13 - restoreOrFinalize 14 - }; 15 - 16 - //# sourceMappingURL=./oauth.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/raw/atproto/oauth.js.map
··· 1 - ../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/raw/atproto/oauth.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/artwork/constants.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/artwork/constants.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/artwork/constants.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/artwork/constants.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/artwork/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/artwork/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/artwork/element.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/artwork/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/artwork/worker.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/artwork/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/artwork/worker.js.map
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/artwork/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/metadata/common.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/metadata/common.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/metadata/common.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/metadata/common.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/metadata/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/metadata/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/metadata/element.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/metadata/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/metadata/worker.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/metadata/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/metadata/worker.js.map
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/metadata/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/search/constants.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/search/constants.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/search/constants.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/search/constants.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/search/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/search/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/search/element.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/search/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/search/worker.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/search/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/search/worker.js.map
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/search/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/base.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/base.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/base.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/transformer/output/base.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/automerge/constants.js
··· 1 - ../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/bytes/automerge/constants.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/automerge/constants.js.map
··· 1 - ../../../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/transformer/output/bytes/automerge/constants.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/automerge/element.js
··· 1 - ../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/bytes/automerge/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/automerge/element.js.map
··· 1 - ../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/bytes/automerge/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/automerge/utils.js
··· 1 - ../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/bytes/automerge/utils.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/automerge/utils.js.map
··· 1 - ../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/bytes/automerge/utils.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/json/element.js
··· 1 - ../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/bytes/json/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/json/element.js.map
··· 1 - ../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/bytes/json/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/refiner/default/element.js
··· 1 - ../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/refiner/default/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/refiner/default/element.js.map
··· 1 - ../../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/transformer/output/refiner/default/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/string/json/element.js
··· 1 - ../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/string/json/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/string/json/element.js.map
··· 1 - ../../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/transformer/output/string/json/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/definitions/index.ts
··· 1 - ../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/definitions/index.ts
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/definitions/output/facet.json
··· 1 - ../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/definitions/output/facet.json
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/definitions/output/playlist.json
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/definitions/output/playlist.json
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/definitions/output/theme.json
··· 1 - ../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/definitions/output/theme.json
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/definitions/output/track.json
··· 1 - ../../../bafybeiftdd7dlfoayxlckoz7nnnoun5ggr2p2biwnbnfn3zflg2drlkmca/definitions/output/track.json
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/examples/generate-playlist.html.txt
··· 1 - ../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/facets/examples/generate-playlist.html.txt
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/examples/now-playing.html.txt
··· 1 - ../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/facets/examples/now-playing.html.txt
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/index.html
··· 1 - ../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/facets/index.html
-314
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/index.js
··· 1 - import { 2 - EditorView, 3 - autocompletion, 4 - basicSetup, 5 - css, 6 - html, 7 - javascript 8 - } from "../chunk-WM2QH5TD.js"; 9 - import { 10 - foundation_default 11 - } from "../chunk-JUPK7PXD.js"; 12 - import "../chunk-HRGYPYP6.js"; 13 - import "../chunk-YVFCBSEJ.js"; 14 - import "../chunk-OXLVUFPU.js"; 15 - import "../chunk-JQFGN3M7.js"; 16 - import "../chunk-GMLGV4UU.js"; 17 - import "../chunk-CPS76EE2.js"; 18 - import "../chunk-IPY3IZ42.js"; 19 - import "../chunk-A7EWFKZ4.js"; 20 - import "../chunk-CNO46O5F.js"; 21 - import "../chunk-77DLAY6P.js"; 22 - import "../chunk-OEJDMRAO.js"; 23 - import "../chunk-LPLLWF34.js"; 24 - import "../chunk-BP7OSAES.js"; 25 - import "../chunk-77ZY4GQV.js"; 26 - import "../chunk-MVWHZJHR.js"; 27 - import "../chunk-S4RHYXDI.js"; 28 - import "../chunk-FVTTELAZ.js"; 29 - import "../chunk-33EY7IZW.js"; 30 - import "../chunk-3W46CCB5.js"; 31 - import "../chunk-32QOJ2TM.js"; 32 - import "../chunk-HDWTLLD6.js"; 33 - import "../chunk-M7PCQLSV.js"; 34 - import "../chunk-UXCYOXOC.js"; 35 - import "../chunk-GX3WPNEX.js"; 36 - import "../chunk-RPWC6IKI.js"; 37 - import "../chunk-SSTS6DW7.js"; 38 - import "../chunk-HN4F5JEZ.js"; 39 - import "../chunk-NGXRH664.js"; 40 - import "../chunk-CXGVZUBI.js"; 41 - import "../chunk-GSA3UBRU.js"; 42 - import "../chunk-AGNDISJF.js"; 43 - import "../chunk-EEUCFWD4.js"; 44 - import "../chunk-6DRHTH2U.js"; 45 - import "../chunk-JS4TF33K.js"; 46 - import "../chunk-UMLUM7AR.js"; 47 - import "../chunk-EEVL24MR.js"; 48 - import "../chunk-4UUOGUZ7.js"; 49 - import "../chunk-3WGC3A6G.js"; 50 - import "../chunk-S6GAP4IS.js"; 51 - import "../chunk-PE6SII6D.js"; 52 - import "../chunk-DUCTMCPX.js"; 53 - import "../chunk-UGE3FKYA.js"; 54 - import { 55 - B, 56 - T 57 - } from "../chunk-FIWHH4Y5.js"; 58 - import "../chunk-G56PUJUJ.js"; 59 - import { 60 - effect, 61 - signal 62 - } from "../chunk-KIMDMO5U.js"; 63 - import "../chunk-H3WG7GN4.js"; 64 - import "../chunk-EJ2QF5QE.js"; 65 - import "../chunk-NCFHYTLD.js"; 66 - import { 67 - facetFromUrl 68 - } from "../chunk-QQ2VIQZY.js"; 69 - import { 70 - qi 71 - } from "../chunk-PUHBIZRM.js"; 72 - import { 73 - create 74 - } from "../chunk-4YB6QUPN.js"; 75 - import { 76 - __name, 77 - init_Buffer, 78 - init_process 79 - } from "../chunk-FZQXS3RE.js"; 80 - 81 - // facets/index.js 82 - init_Buffer(); 83 - init_process(); 84 - document.body.addEventListener( 85 - "click", 86 - /** 87 - * @param {MouseEvent} event 88 - */ 89 - async (event) => { 90 - const target = ( 91 - /** @type {HTMLElement} */ 92 - event.target 93 - ); 94 - const rel = target.getAttribute("rel"); 95 - if (!rel) return; 96 - const url = target.closest("li")?.getAttribute("data-url"); 97 - if (!url) return; 98 - const name = target.closest("li")?.getAttribute("data-name"); 99 - if (!name) return; 100 - switch (rel) { 101 - case "fork": { 102 - const facet = await facetFromUrl({ name, url }, { fetchHTML: true }); 103 - editFacet(facet); 104 - document.querySelector("#build")?.scrollIntoView(); 105 - break; 106 - } 107 - case "save": { 108 - const facet = await facetFromUrl({ name, url }, { fetchHTML: false }); 109 - const out = foundation_default.orchestrator.output(); 110 - out.facets.save([ 111 - ...out.facets.collection(), 112 - facet 113 - ]); 114 - break; 115 - } 116 - } 117 - } 118 - ); 119 - var listEl = document.querySelector("#list"); 120 - if (!listEl) throw new Error("List element not found"); 121 - var output = foundation_default.orchestrator.output(); 122 - effect(() => { 123 - const col = output.facets.collection().sort((a, b) => { 124 - return a.name.toLocaleLowerCase().localeCompare(b.name.toLocaleLowerCase()); 125 - }); 126 - const h = col.length ? T` 127 - <ul> 128 - ${col.map( 129 - (c) => T` 130 - <li style="margin-bottom: var(--space-2xs)"> 131 - <span>${c.name}</span> 132 - <div class="list-description"> 133 - <div style="margin-bottom: var(--space-2xs)"> 134 - ${c.url && !c.html ? T` 135 - <span class="with-icon"> 136 - <i class="ph-fill ph-binoculars"></i> 137 - <span>Tracking the original <a href="${c.url}">URL</a></span> 138 - </span> 139 - ` : T` 140 - <span class="with-icon"> 141 - <i class="ph-fill ph-code"></i> 142 - <span>Custom code</span> 143 - </span> 144 - `} 145 - </div> 146 - <div class="button-row"> 147 - <a href="facets/l/?id=${c.id}" class="button button--bg-twist-1"> 148 - <span class="with-icon"> 149 - <i class="ph-fill ph-globe"></i> Open 150 - </span> 151 - </a> 152 - <button 153 - class="button--bg-twist-1 button--subtle" 154 - @click="${() => editFacet(c)}" 155 - > 156 - <span class="with-icon"> 157 - <i class="ph-fill ph-cursor-text"></i> Edit 158 - </span> 159 - </button> 160 - <button 161 - class="button--bg-twist-2 button--subtle" 162 - @click="${deleteFacet({ 163 - id: c.id 164 - })}" 165 - > 166 - <span class="with-icon"> 167 - <i class="ph-fill ph-eraser"></i> Delete 168 - </span> 169 - </button> 170 - </div> 171 - </div> 172 - </li> 173 - ` 174 - )} 175 - </ul> 176 - ` : output.facets.state() === "loaded" ? emptyFacetsList : T` 177 - <i class="ph-bold ph-spinner-gap"></i> 178 - `; 179 - B(h, listEl); 180 - }); 181 - var emptyFacetsList = T` 182 - <p style="margin-bottom: 0;"> 183 - <i class="ph-fill ph-info"></i> You have not saved any facets yet. 184 - </p> 185 - `; 186 - function deleteFacet({ id }) { 187 - return () => { 188 - const c = confirm("Are you sure you want to delete this facet?"); 189 - if (!c) return; 190 - output.facets.save( 191 - output.facets.collection().filter((c2) => !(c2.id === id)) 192 - ); 193 - }; 194 - } 195 - __name(deleteFacet, "deleteFacet"); 196 - var $editingFacet = signal( 197 - /** @type {Facet | null} */ 198 - null 199 - ); 200 - var editorContainer = document.body.querySelector("#html-input-container"); 201 - if (!editorContainer) throw new Error("Editor container not found"); 202 - var editor = new EditorView({ 203 - parent: editorContainer, 204 - doc: ` 205 - <main> 206 - <h1 id="now-playing"> 207 - Waiting on tracks &amp; queue to load ... 208 - </h1> 209 - </main> 210 - 211 - <style> 212 - @import "./styles/base.css"; 213 - @import "./styles/diffuse/page.css"; 214 - </style> 215 - 216 - <script type="module"> 217 - import foundation from "./common/facets/foundation.js"; 218 - import { effect } from "./common/signal.js"; 219 - 220 - const components = foundation.features.fillQueueAutomatically(); 221 - const myHtmlElement = document.querySelector("#now-playing"); 222 - 223 - effect(() => { 224 - const currentlyPlaying = components.engine.queue.now(); 225 - if (currentlyPlaying && myHtmlElement) { 226 - myHtmlElement.innerText = \`\${currentlyPlaying.tags.artist} - \${currentlyPlaying.tags.title}\`; 227 - } 228 - }) 229 - <\/script> 230 - `.trim(), 231 - extensions: [ 232 - basicSetup, 233 - html(), 234 - css(), 235 - javascript(), 236 - autocompletion() 237 - ] 238 - }); 239 - document.querySelector("#build-form")?.addEventListener( 240 - "submit", 241 - onBuildSubmit 242 - ); 243 - async function onBuildSubmit(event) { 244 - event.preventDefault(); 245 - const nameEl = ( 246 - /** @type {HTMLInputElement | null} */ 247 - document.querySelector( 248 - "#name-input" 249 - ) 250 - ); 251 - const html2 = editor.state.doc.toString(); 252 - const cid = await create(85, new TextEncoder().encode(html2)); 253 - const name = nameEl?.value ?? "nameless"; 254 - const facet = $editingFacet.value ? { 255 - ...$editingFacet.value, 256 - cid, 257 - html: html2, 258 - name 259 - } : { 260 - $type: "sh.diffuse.output.facet", 261 - id: crypto.randomUUID(), 262 - cid, 263 - html: html2, 264 - name 265 - }; 266 - switch ( 267 - /** @type {any} */ 268 - event.submitter.name 269 - ) { 270 - case "save": 271 - await saveFacet(facet); 272 - break; 273 - case "save+open": 274 - await saveFacet(facet); 275 - globalThis.open(`./facets/l/?id=${facet.id}`, "blank"); 276 - break; 277 - } 278 - } 279 - __name(onBuildSubmit, "onBuildSubmit"); 280 - async function editFacet(ogFacet) { 281 - const facet = { ...ogFacet }; 282 - const nameEl = ( 283 - /** @type {HTMLInputElement | null} */ 284 - document.querySelector( 285 - "#name-input" 286 - ) 287 - ); 288 - if (!nameEl) return; 289 - document.querySelector("#build")?.scrollIntoView(); 290 - if (!facet.html && facet.url) { 291 - const html2 = await fetch(facet.url).then((res) => res.text()); 292 - const cid = await create(85, new TextEncoder().encode(html2)); 293 - facet.html = html2; 294 - facet.cid = cid; 295 - } 296 - $editingFacet.value = facet; 297 - nameEl.value = facet.name; 298 - editor.dispatch({ 299 - changes: { from: 0, to: editor.state.doc.length, insert: facet.html } 300 - }); 301 - } 302 - __name(editFacet, "editFacet"); 303 - async function saveFacet(facet) { 304 - const col = output.facets.collection(); 305 - const colWithoutId = col.filter((c) => c.id !== facet.id); 306 - const timestamp = qi.Now.zonedDateTimeISO().toString(); 307 - await output.facets.save([...colWithoutId, { 308 - ...facet, 309 - updatedAt: timestamp 310 - }]); 311 - } 312 - __name(saveFacet, "saveFacet"); 313 - 314 - //# sourceMappingURL=./index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/index.js.map
··· 1 - ../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/facets/index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/l/index.html
··· 1 - ../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/facets/l/index.html
-115
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/l/index.js
··· 1 - import { 2 - foundation_default 3 - } from "../../chunk-JUPK7PXD.js"; 4 - import "../../chunk-HRGYPYP6.js"; 5 - import "../../chunk-YVFCBSEJ.js"; 6 - import "../../chunk-OXLVUFPU.js"; 7 - import "../../chunk-JQFGN3M7.js"; 8 - import "../../chunk-GMLGV4UU.js"; 9 - import "../../chunk-CPS76EE2.js"; 10 - import "../../chunk-IPY3IZ42.js"; 11 - import "../../chunk-A7EWFKZ4.js"; 12 - import "../../chunk-CNO46O5F.js"; 13 - import "../../chunk-77DLAY6P.js"; 14 - import "../../chunk-OEJDMRAO.js"; 15 - import "../../chunk-LPLLWF34.js"; 16 - import "../../chunk-BP7OSAES.js"; 17 - import "../../chunk-77ZY4GQV.js"; 18 - import "../../chunk-MVWHZJHR.js"; 19 - import "../../chunk-S4RHYXDI.js"; 20 - import "../../chunk-FVTTELAZ.js"; 21 - import "../../chunk-33EY7IZW.js"; 22 - import "../../chunk-3W46CCB5.js"; 23 - import "../../chunk-32QOJ2TM.js"; 24 - import "../../chunk-HDWTLLD6.js"; 25 - import "../../chunk-M7PCQLSV.js"; 26 - import "../../chunk-UXCYOXOC.js"; 27 - import "../../chunk-GX3WPNEX.js"; 28 - import "../../chunk-RPWC6IKI.js"; 29 - import "../../chunk-SSTS6DW7.js"; 30 - import "../../chunk-HN4F5JEZ.js"; 31 - import "../../chunk-NGXRH664.js"; 32 - import "../../chunk-CXGVZUBI.js"; 33 - import "../../chunk-GSA3UBRU.js"; 34 - import "../../chunk-AGNDISJF.js"; 35 - import "../../chunk-EEUCFWD4.js"; 36 - import "../../chunk-6DRHTH2U.js"; 37 - import "../../chunk-JS4TF33K.js"; 38 - import "../../chunk-UMLUM7AR.js"; 39 - import "../../chunk-EEVL24MR.js"; 40 - import "../../chunk-4UUOGUZ7.js"; 41 - import "../../chunk-3WGC3A6G.js"; 42 - import "../../chunk-S6GAP4IS.js"; 43 - import "../../chunk-PE6SII6D.js"; 44 - import "../../chunk-DUCTMCPX.js"; 45 - import "../../chunk-UGE3FKYA.js"; 46 - import "../../chunk-FIWHH4Y5.js"; 47 - import "../../chunk-G56PUJUJ.js"; 48 - import { 49 - effect 50 - } from "../../chunk-KIMDMO5U.js"; 51 - import "../../chunk-H3WG7GN4.js"; 52 - import "../../chunk-EJ2QF5QE.js"; 53 - import "../../chunk-NCFHYTLD.js"; 54 - import { 55 - create 56 - } from "../../chunk-4YB6QUPN.js"; 57 - import { 58 - __name, 59 - init_Buffer, 60 - init_process 61 - } from "../../chunk-FZQXS3RE.js"; 62 - 63 - // facets/l/index.js 64 - init_Buffer(); 65 - init_process(); 66 - var output = foundation_default.orchestrator.output(); 67 - var docUrl = new URL(document.location.href); 68 - var id = docUrl.searchParams.get("id"); 69 - var cid = docUrl.searchParams.get("cid"); 70 - var name = docUrl.searchParams.get("name"); 71 - var url = docUrl.searchParams.get("url"); 72 - var containerNull = document.querySelector("#container"); 73 - if (!containerNull) throw new Error("Container not found"); 74 - var container = ( 75 - /** @type {HTMLDivElement} */ 76 - containerNull 77 - ); 78 - effect(async () => { 79 - const collection = output.facets.collection(); 80 - if (output.facets.state() !== "loaded") return; 81 - let facet; 82 - if (id) { 83 - facet = collection.find((c) => c.id === id); 84 - } else if (cid) { 85 - facet = collection.find((c) => c.cid === cid); 86 - } else if (name) { 87 - facet = collection.find((c) => c.name === name); 88 - } else if (url) { 89 - const c = { 90 - $type: "sh.diffuse.output.facet", 91 - id: crypto.randomUUID(), 92 - name: "tryout", 93 - url 94 - }; 95 - facet = c; 96 - } 97 - if (!facet) return; 98 - if (!facet.html && facet.url) { 99 - const html = await fetch(facet.url).then((res) => res.text()); 100 - const cid2 = await create(85, new TextEncoder().encode(html)); 101 - facet.html = html; 102 - facet.cid = cid2; 103 - } 104 - loadIntoContainer(facet); 105 - }); 106 - function loadIntoContainer(facet) { 107 - const range = document.createRange(); 108 - range.selectNode(container); 109 - const documentFragment = range.createContextualFragment(facet.html ?? ""); 110 - container.innerHTML = ""; 111 - container.append(documentFragment); 112 - } 113 - __name(loadIntoContainer, "loadIntoContainer"); 114 - 115 - //# sourceMappingURL=./index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/l/index.js.map
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/facets/l/index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/tools/auto-queue.html.txt
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/facets/tools/auto-queue.html.txt
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/tools/v3-import.html.txt
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/facets/tools/v3-import.html.txt
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/favicon-16x16.png
··· 1 - ../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/favicon-16x16.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/favicon-32x32.png
··· 1 - ../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/favicon-32x32.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/favicon.ico
··· 1 - ../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/favicon.ico
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/fonts/CommitMonoVariable.woff2
··· 1 - ../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/fonts/CommitMonoVariable.woff2
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/fonts/InterVariable-Italic.woff2
··· 1 - ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/fonts/InterVariable-Italic.woff2
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/fonts/InterVariable.woff2
··· 1 - ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/fonts/InterVariable.woff2
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/fonts/ms_sans_serif.woff2
··· 1 - ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/ms_sans_serif.woff2
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/fonts/ms_sans_serif_bold.woff2
··· 1 - ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/ms_sans_serif_bold.woff2
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/1.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/1.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/10.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/10.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/11.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/11.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/12.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/12.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/13.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/13.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/14.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/14.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/15.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/15.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/16.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/16.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/17.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/17.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/18.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/18.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/19.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/19.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/2.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/2.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/20.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/20.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/21.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/21.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/22.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/22.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/23.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/23.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/24.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/24.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/25.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/25.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/26.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/26.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/27.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/27.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/28.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/28.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/29.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/29.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/3.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/3.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/30.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/30.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/4.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/4.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/5.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/5.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/6.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/6.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/7.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/7.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/8.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/8.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/9.jpg
··· 1 - ../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/9.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/1.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/1.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/10.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/10.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/11.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/11.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/12.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/12.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/13.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/13.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/14.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/14.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/15.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/15.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/16.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/16.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/17.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/17.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/18.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/18.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/19.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/19.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/2.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/2.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/20.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/20.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/21.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/21.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/22.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/22.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/23.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/23.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/24.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/24.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/25.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/25.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/26.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/26.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/27.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/27.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/28.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/28.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/29.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/29.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/3.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/3.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/30.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/30.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/4.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/4.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/5.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/5.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/6.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/6.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/7.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/7.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/8.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/8.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/9.jpg
··· 1 - ../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/9.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/diffuse-current.svg
··· 1 - ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/diffuse-current.svg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/diffuse-dark.svg
··· 1 - ../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse-dark.svg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/diffuse-grey.svg
··· 1 - ../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse-grey.svg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/diffuse-light.svg
··· 1 - ../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse-light.svg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/diffuse__icon-dark.svg
··· 1 - ../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse__icon-dark.svg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/diffuse__icon-grey.svg
··· 1 - ../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse__icon-grey.svg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/diffuse__icon-light.svg
··· 1 - ../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse__icon-light.svg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icon-square-ws.png
··· 1 - ../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/icon-square-ws.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icon-square.png
··· 1 - ../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/icon-square.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icon.png
··· 1 - ../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/icon.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/catalog-1.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/catalog-1.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/cd_audio_cd_a-0.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/cd_audio_cd_a-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/cd_audio_cd_a-2.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/cd_audio_cd_a-2.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/cd_audio_cd_a-3.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/cd_audio_cd_a-3.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/cd_audio_cd_a-4.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/cd_audio_cd_a-4.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/cd_drive-0.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/cd_drive-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/cd_drive_purple-3.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/cd_drive_purple-3.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/channels-2.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/channels-2.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/check-0.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/check-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/computer_sound-0.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/computer_sound-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/computer_user_pencil-0.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/computer_user_pencil-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/connected_world-0.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/connected_world-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_admin_tools-3.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_admin_tools-3.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_admin_tools-5.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_admin_tools-5.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_channels-2.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_channels-2.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_channels-3.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_channels-3.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_closed-3.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_closed-3.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_closed-4.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_closed-4.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_control_panel-2.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_control_panel-2.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_control_panel-3.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_control_panel-3.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_explorer-4.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_explorer-4.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_explorer-5.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_explorer-5.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_favorites-2.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_favorites-2.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_favorites-4.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_favorites-4.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_net_web-3.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_net_web-3.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_net_web-4.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_net_web-4.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_network_conn-3.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_network_conn-3.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_network_conn-5.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_network_conn-5.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_open_file_mydocs_2k-3.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_open_file_mydocs_2k-3.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_open_file_mydocs_2k-4.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_open_file_mydocs_2k-4.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/gears-0.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/gears-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/globe_map-0.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/globe_map-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/help_book_big-0.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/help_book_big-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/installer-3.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/installer-3.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/installer_generic_old-0.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/installer_generic_old-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/loudspeaker_wave-0.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/loudspeaker_wave-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/magnifying_glass-0.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/magnifying_glass-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/magnifying_glass_4-1.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/magnifying_glass_4-1.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/media_player-0.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/media_player-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/media_player_stream_no.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/media_player_stream_no.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/ms_dos-1.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/ms_dos-1.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/msg_error-0.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/msg_error-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/msg_information-0.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/msg_information-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/msg_question-0.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/msg_question-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/msg_warning-0.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/msg_warning-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/multimedia-4.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/multimedia-4.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/network_drive_world-0.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/network_drive_world-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/no-1.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/no-1.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/restrict-1.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/restrict-1.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/search_computer-0.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/search_computer-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/search_server-1.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/search_server-1.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/search_web-0.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/search_web-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/settings_gear-0.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/settings_gear-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/settings_gear-2.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/settings_gear-2.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/tip.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/tip.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/utopia_smiley.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/utopia_smiley.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/winamp2-32x32.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/winamp2-32x32.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/windows-0.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/windows-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/world-2.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/world-2.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/world-4.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/world-4.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/world_network_directories-3.png
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/world_network_directories-3.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/index.html
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/index.html
-138
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/index.js
··· 1 - import { 2 - GROUP 3 - } from "./chunk-JUPK7PXD.js"; 4 - import { 5 - element_default as element_default4 6 - } from "./chunk-HRGYPYP6.js"; 7 - import "./chunk-YVFCBSEJ.js"; 8 - import "./chunk-OXLVUFPU.js"; 9 - import "./chunk-JQFGN3M7.js"; 10 - import "./chunk-GMLGV4UU.js"; 11 - import "./chunk-CPS76EE2.js"; 12 - import "./chunk-IPY3IZ42.js"; 13 - import { 14 - element_default as element_default3 15 - } from "./chunk-A7EWFKZ4.js"; 16 - import "./chunk-CNO46O5F.js"; 17 - import "./chunk-77DLAY6P.js"; 18 - import "./chunk-OEJDMRAO.js"; 19 - import "./chunk-LPLLWF34.js"; 20 - import "./chunk-BP7OSAES.js"; 21 - import "./chunk-77ZY4GQV.js"; 22 - import "./chunk-MVWHZJHR.js"; 23 - import "./chunk-S4RHYXDI.js"; 24 - import { 25 - element_default as element_default5 26 - } from "./chunk-FVTTELAZ.js"; 27 - import "./chunk-33EY7IZW.js"; 28 - import "./chunk-3W46CCB5.js"; 29 - import "./chunk-32QOJ2TM.js"; 30 - import { 31 - element_default as element_default2 32 - } from "./chunk-HDWTLLD6.js"; 33 - import "./chunk-M7PCQLSV.js"; 34 - import "./chunk-UXCYOXOC.js"; 35 - import "./chunk-GX3WPNEX.js"; 36 - import "./chunk-RPWC6IKI.js"; 37 - import "./chunk-SSTS6DW7.js"; 38 - import "./chunk-HN4F5JEZ.js"; 39 - import "./chunk-NGXRH664.js"; 40 - import "./chunk-CXGVZUBI.js"; 41 - import "./chunk-GSA3UBRU.js"; 42 - import "./chunk-AGNDISJF.js"; 43 - import "./chunk-EEUCFWD4.js"; 44 - import "./chunk-6DRHTH2U.js"; 45 - import "./chunk-JS4TF33K.js"; 46 - import { 47 - element_default 48 - } from "./chunk-UMLUM7AR.js"; 49 - import "./chunk-EEVL24MR.js"; 50 - import "./chunk-4UUOGUZ7.js"; 51 - import "./chunk-3WGC3A6G.js"; 52 - import "./chunk-S6GAP4IS.js"; 53 - import "./chunk-PE6SII6D.js"; 54 - import "./chunk-DUCTMCPX.js"; 55 - import "./chunk-UGE3FKYA.js"; 56 - import "./chunk-FIWHH4Y5.js"; 57 - import "./chunk-G56PUJUJ.js"; 58 - import "./chunk-KIMDMO5U.js"; 59 - import "./chunk-H3WG7GN4.js"; 60 - import "./chunk-EJ2QF5QE.js"; 61 - import "./chunk-NCFHYTLD.js"; 62 - import { 63 - __name, 64 - init_Buffer, 65 - init_process 66 - } from "./chunk-FZQXS3RE.js"; 67 - 68 - // index.js 69 - init_Buffer(); 70 - init_process(); 71 - var s3 = new element_default2(); 72 - var input = new element_default(); 73 - input.setAttribute("group", GROUP); 74 - input.append(s3); 75 - var output = new element_default3(); 76 - output.setAttribute("group", GROUP); 77 - var metadataProcessor = new element_default4(); 78 - metadataProcessor.setAttribute("group", GROUP); 79 - document.body.append(input, output, metadataProcessor); 80 - var pto = new element_default5(); 81 - pto.setAttribute("group", GROUP); 82 - pto.setAttribute("input-selector", input.selector); 83 - pto.setAttribute("output-selector", output.selector); 84 - pto.setAttribute("metadata-processor-selector", metadataProcessor.selector); 85 - document.body.append(pto); 86 - var addDemoBtn = document.querySelector("#add-sample-content"); 87 - async function addSampleContent() { 88 - if (!addDemoBtn) return; 89 - addDemoBtn.setAttribute("disabled", ""); 90 - addDemoBtn.innerHTML = `<span> 91 - <i class="ph-fill ph-hourglass-medium"></i> 92 - Adding source 93 - </span>`; 94 - const demo = await s3.demo(); 95 - const tracks = output.tracks.collection(); 96 - await output.tracks.save([...tracks, demo.track]); 97 - addDemoBtn.innerHTML = `<span> 98 - <i class="ph-fill ph-hourglass-medium"></i> 99 - Processing source 100 - </span>`; 101 - await pto.process(); 102 - addDemoBtn.innerHTML = `<span> 103 - <i class="ph-fill ph-check-fat"></i> Added 104 - </span>`; 105 - } 106 - __name(addSampleContent, "addSampleContent"); 107 - addDemoBtn?.addEventListener("click", addSampleContent); 108 - if (document.location.hostname.endsWith("diffuse.sh")) { 109 - document.querySelectorAll("#status").forEach(async (status) => { 110 - const versionOrCid = document.location.pathname.slice(1).split("/")[0]?.toLowerCase() ?? ""; 111 - const usesCid = versionOrCid.startsWith("bafy"); 112 - const { default: artifacts } = await import(`${document.location.origin}/artifacts.json`, { with: { type: "json" } }); 113 - const lastArtifact = Object.values(artifacts).reverse()[0]; 114 - const isLatest = usesCid ? versionOrCid === lastArtifact.cid : versionOrCid === lastArtifact.version; 115 - status.querySelectorAll(".ph-spinner").forEach((icon) => { 116 - icon.parentElement?.classList.add("hidden"); 117 - setTimeout(() => { 118 - icon.parentElement?.classList.remove("animate-spin"); 119 - icon.classList.remove("ph-spinner"); 120 - icon.classList.add("ph-arrow-fat-lines-up"); 121 - }, 500); 122 - }); 123 - status.querySelectorAll(`[href="/latest/"]`).forEach((a) => { 124 - if (usesCid) a.setAttribute("href", "/latest/hash/"); 125 - if (!isLatest) { 126 - setTimeout(() => { 127 - a.classList.remove("hidden"); 128 - }, 750); 129 - } 130 - }); 131 - }); 132 - } else { 133 - document.querySelectorAll("#status").forEach((status) => { 134 - status.remove(); 135 - }); 136 - } 137 - 138 - //# sourceMappingURL=./index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/index.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/mstile-150x150.png
··· 1 - ../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/mstile-150x150.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/node_crypto-QYMDOTAM.js
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/node_crypto-QYMDOTAM.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/node_crypto-QYMDOTAM.js.map
··· 1 - ../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/node_crypto-QYMDOTAM.js.map
-12
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/oauth-client-metadata.json
··· 1 - { 2 - "client_id": "https://elements.diffuse.sh/bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/oauth-client-metadata.json", 3 - "client_name": "Diffuse", 4 - "client_uri": "https://elements.diffuse.sh", 5 - "redirect_uris": ["https://elements.diffuse.sh/"], 6 - "scope": "atproto transition:generic", 7 - "grant_types": ["authorization_code", "refresh_token"], 8 - "response_types": ["code"], 9 - "token_endpoint_auth_method": "none", 10 - "application_type": "web", 11 - "dpop_bound_access_tokens": true 12 - }
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/safari-pinned-tab.svg
··· 1 - ../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/safari-pinned-tab.svg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/animations.css
··· 1 - ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/animations.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/animations.css.map
··· 1 - ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/animations.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/base.css
··· 1 - ../../bafybeiftdd7dlfoayxlckoz7nnnoun5ggr2p2biwnbnfn3zflg2drlkmca/styles/base.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/base.css.map
··· 1 - ../../bafybeiftdd7dlfoayxlckoz7nnnoun5ggr2p2biwnbnfn3zflg2drlkmca/styles/base.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/diffuse/colors.css
··· 1 - ../../../bafybeiftdd7dlfoayxlckoz7nnnoun5ggr2p2biwnbnfn3zflg2drlkmca/styles/diffuse/colors.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/diffuse/colors.css.map
··· 1 - ../../../bafybeiftdd7dlfoayxlckoz7nnnoun5ggr2p2biwnbnfn3zflg2drlkmca/styles/diffuse/colors.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/diffuse/fonts.css
··· 1 - ../../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/diffuse/fonts.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/diffuse/fonts.css.map
··· 1 - ../../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/diffuse/fonts.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/diffuse/page.css
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/styles/diffuse/page.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/diffuse/page.css.map
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/styles/diffuse/page.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/font-faces.css
··· 1 - ../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/font-faces.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/font-faces.css.map
··· 1 - ../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/font-faces.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/reset.css
··· 1 - ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/reset.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/reset.css.map
··· 1 - ../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/reset.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/variables.css
··· 1 - ../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/variables.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/variables.css.map
··· 1 - ../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/variables.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/98.css
··· 1 - ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/98.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/98.css.map
··· 1 - ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/98.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/ms_sans_serif.woff2
··· 1 - ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/ms_sans_serif.woff2
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/ms_sans_serif_bold.woff2
··· 1 - ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/ms_sans_serif_bold.woff2
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/bold/Phosphor-Bold.svg
··· 1 - ../../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/styles/vendor/phosphor/bold/Phosphor-Bold.svg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/bold/Phosphor-Bold.ttf
··· 1 - ../../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/styles/vendor/phosphor/bold/Phosphor-Bold.ttf
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/bold/Phosphor-Bold.woff
··· 1 - ../../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/styles/vendor/phosphor/bold/Phosphor-Bold.woff
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/bold/Phosphor-Bold.woff2
··· 1 - ../../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/styles/vendor/phosphor/bold/Phosphor-Bold.woff2
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/bold/style.css
··· 1 - ../../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/styles/vendor/phosphor/bold/style.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/bold/style.css.map
··· 1 - ../../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/styles/vendor/phosphor/bold/style.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/fill/Phosphor-Fill.svg
··· 1 - ../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/Phosphor-Fill.svg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/fill/Phosphor-Fill.ttf
··· 1 - ../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/Phosphor-Fill.ttf
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/fill/Phosphor-Fill.woff
··· 1 - ../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/Phosphor-Fill.woff
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/fill/Phosphor-Fill.woff2
··· 1 - ../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/Phosphor-Fill.woff2
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/fill/style.css
··· 1 - ../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/style.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/fill/style.css.map
··· 1 - ../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/style.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/wireframe/ui.css
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/styles/wireframe/ui.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/wireframe/ui.css.map
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/styles/wireframe/ui.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/testing/index.html
··· 1 - ../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/testing/index.html
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/testing/output.js
··· 1 - ../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/testing/output.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/testing/output.js.map
··· 1 - ../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/testing/output.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/testing/output/index.html
··· 1 - ../../../bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/testing/output/index.html
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/testing/sample/tracks.js
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/testing/sample/tracks.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/testing/sample/tracks.js.map
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/testing/sample/tracks.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/artwork-controller/element.css
··· 1 - ../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/themes/blur/artwork-controller/element.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/artwork-controller/element.css.map
··· 1 - ../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/themes/blur/artwork-controller/element.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/artwork-controller/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/blur/artwork-controller/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/artwork-controller/element.js.map
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/blur/artwork-controller/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/artwork-controller/facet.html.txt
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/blur/artwork-controller/facet.html.txt
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/index.css
··· 1 - ../../../bafybeihr4brahqptxmxcdksktdfgs4hyl64odwx524vqmmitjvmn57sklq/themes/blur/index.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/index.css.map
··· 1 - ../../../bafybeihr4brahqptxmxcdksktdfgs4hyl64odwx524vqmmitjvmn57sklq/themes/blur/index.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/index.html
··· 1 - ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/blur/index.html
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/index.js
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/blur/index.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/index.js.map
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/blur/index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/variables.css
··· 1 - ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/blur/variables.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/variables.css.map
··· 1 - ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/blur/variables.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/index.html
··· 1 - ../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/index.html
-287
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/index.js
··· 1 - import { 2 - EditorView, 3 - autocompletion, 4 - basicSetup, 5 - css, 6 - html, 7 - javascript 8 - } from "../chunk-WM2QH5TD.js"; 9 - import { 10 - themeFromUrl 11 - } from "../chunk-G2ZO6QIY.js"; 12 - import { 13 - foundation_default 14 - } from "../chunk-JUPK7PXD.js"; 15 - import "../chunk-HRGYPYP6.js"; 16 - import "../chunk-YVFCBSEJ.js"; 17 - import "../chunk-OXLVUFPU.js"; 18 - import "../chunk-JQFGN3M7.js"; 19 - import "../chunk-GMLGV4UU.js"; 20 - import "../chunk-CPS76EE2.js"; 21 - import "../chunk-IPY3IZ42.js"; 22 - import "../chunk-A7EWFKZ4.js"; 23 - import "../chunk-CNO46O5F.js"; 24 - import "../chunk-77DLAY6P.js"; 25 - import "../chunk-OEJDMRAO.js"; 26 - import "../chunk-LPLLWF34.js"; 27 - import "../chunk-BP7OSAES.js"; 28 - import "../chunk-77ZY4GQV.js"; 29 - import "../chunk-MVWHZJHR.js"; 30 - import "../chunk-S4RHYXDI.js"; 31 - import "../chunk-FVTTELAZ.js"; 32 - import "../chunk-33EY7IZW.js"; 33 - import "../chunk-3W46CCB5.js"; 34 - import "../chunk-32QOJ2TM.js"; 35 - import "../chunk-HDWTLLD6.js"; 36 - import "../chunk-M7PCQLSV.js"; 37 - import "../chunk-UXCYOXOC.js"; 38 - import "../chunk-GX3WPNEX.js"; 39 - import "../chunk-RPWC6IKI.js"; 40 - import "../chunk-SSTS6DW7.js"; 41 - import "../chunk-HN4F5JEZ.js"; 42 - import "../chunk-NGXRH664.js"; 43 - import "../chunk-CXGVZUBI.js"; 44 - import "../chunk-GSA3UBRU.js"; 45 - import "../chunk-AGNDISJF.js"; 46 - import "../chunk-EEUCFWD4.js"; 47 - import "../chunk-6DRHTH2U.js"; 48 - import "../chunk-JS4TF33K.js"; 49 - import "../chunk-UMLUM7AR.js"; 50 - import "../chunk-EEVL24MR.js"; 51 - import "../chunk-4UUOGUZ7.js"; 52 - import "../chunk-3WGC3A6G.js"; 53 - import "../chunk-S6GAP4IS.js"; 54 - import "../chunk-PE6SII6D.js"; 55 - import "../chunk-DUCTMCPX.js"; 56 - import "../chunk-UGE3FKYA.js"; 57 - import { 58 - B, 59 - T 60 - } from "../chunk-FIWHH4Y5.js"; 61 - import "../chunk-G56PUJUJ.js"; 62 - import { 63 - effect, 64 - signal 65 - } from "../chunk-KIMDMO5U.js"; 66 - import "../chunk-H3WG7GN4.js"; 67 - import "../chunk-EJ2QF5QE.js"; 68 - import "../chunk-NCFHYTLD.js"; 69 - import { 70 - qi 71 - } from "../chunk-PUHBIZRM.js"; 72 - import { 73 - create 74 - } from "../chunk-4YB6QUPN.js"; 75 - import { 76 - __name, 77 - init_Buffer, 78 - init_process 79 - } from "../chunk-FZQXS3RE.js"; 80 - 81 - // themes/index.js 82 - init_Buffer(); 83 - init_process(); 84 - document.body.addEventListener( 85 - "click", 86 - /** 87 - * @param {MouseEvent} event 88 - */ 89 - async (event) => { 90 - const target = ( 91 - /** @type {HTMLElement} */ 92 - event.target 93 - ); 94 - const rel = target.getAttribute("rel"); 95 - if (!rel) return; 96 - const url = target.closest("li")?.getAttribute("data-url"); 97 - if (!url) return; 98 - const name = target.closest("li")?.getAttribute("data-name"); 99 - if (!name) return; 100 - switch (rel) { 101 - case "fork": { 102 - const theme = await themeFromUrl({ name, url }, { fetchHTML: true }); 103 - editTheme(theme); 104 - document.querySelector("#build")?.scrollIntoView(); 105 - break; 106 - } 107 - case "save": { 108 - const theme = await themeFromUrl({ name, url }, { fetchHTML: false }); 109 - const out = foundation_default.orchestrator.output(); 110 - out.themes.save([ 111 - ...out.themes.collection(), 112 - theme 113 - ]); 114 - break; 115 - } 116 - } 117 - } 118 - ); 119 - var listEl = document.querySelector("#list"); 120 - if (!listEl) throw new Error("List element not found"); 121 - var output = foundation_default.orchestrator.output(); 122 - effect(() => { 123 - const col = output.themes.collection().sort((a, b) => { 124 - return a.name.toLocaleLowerCase().localeCompare(b.name.toLocaleLowerCase()); 125 - }); 126 - const h = col.length ? T` 127 - <ul> 128 - ${col.map( 129 - (c) => T` 130 - <li style="margin-bottom: var(--space-2xs)"> 131 - <span>${c.name}</span> 132 - <div class="list-description"> 133 - <div style="margin-bottom: var(--space-2xs)"> 134 - ${c.url && !c.html ? T` 135 - <span class="with-icon"> 136 - <i class="ph-fill ph-binoculars"></i> 137 - <span>Tracking the original <a href="${c.url}">URL</a></span> 138 - </span> 139 - ` : T` 140 - <span class="with-icon"> 141 - <i class="ph-fill ph-code"></i> 142 - <span>Custom code</span> 143 - </span> 144 - `} 145 - </div> 146 - <div class="button-row"> 147 - <a href="themes/l/?id=${c.id}" class="button button--bg-twist-1"> 148 - <span class="with-icon"> 149 - <i class="ph-fill ph-globe"></i> Open 150 - </span> 151 - </a> 152 - <button 153 - class="button--bg-twist-1 button--subtle" 154 - @click="${() => editTheme(c)}" 155 - > 156 - <span class="with-icon"> 157 - <i class="ph-fill ph-cursor-text"></i> Edit 158 - </span> 159 - </button> 160 - <button 161 - class="button--bg-twist-2 button--subtle" 162 - @click="${deleteTheme({ 163 - id: c.id 164 - })}" 165 - > 166 - <span class="with-icon"> 167 - <i class="ph-fill ph-eraser"></i> Delete 168 - </span> 169 - </button> 170 - </div> 171 - </div> 172 - </li> 173 - ` 174 - )} 175 - </ul> 176 - ` : output.themes.state() === "loaded" ? emptyThemesList : T` 177 - <i class="ph-bold ph-spinner-gap"></i> 178 - `; 179 - B(h, listEl); 180 - }); 181 - var emptyThemesList = T` 182 - <p style="margin-bottom: 0;"> 183 - <i class="ph-fill ph-info"></i> You have not saved any themes yet. 184 - </p> 185 - `; 186 - function deleteTheme({ id }) { 187 - return () => { 188 - const c = confirm("Are you sure you want to delete this theme?"); 189 - if (!c) return; 190 - output.themes.save( 191 - output.themes.collection().filter((c2) => !(c2.id === id)) 192 - ); 193 - }; 194 - } 195 - __name(deleteTheme, "deleteTheme"); 196 - var $editingTheme = signal( 197 - /** @type {Theme | null} */ 198 - null 199 - ); 200 - var editorContainer = document.body.querySelector("#html-input-container"); 201 - if (!editorContainer) throw new Error("Editor container not found"); 202 - var editor = new EditorView({ 203 - parent: editorContainer, 204 - doc: ``.trim(), 205 - extensions: [ 206 - basicSetup, 207 - html(), 208 - css(), 209 - javascript(), 210 - autocompletion() 211 - ] 212 - }); 213 - document.querySelector("#build-form")?.addEventListener( 214 - "submit", 215 - onBuildSubmit 216 - ); 217 - async function onBuildSubmit(event) { 218 - event.preventDefault(); 219 - const nameEl = ( 220 - /** @type {HTMLInputElement | null} */ 221 - document.querySelector( 222 - "#name-input" 223 - ) 224 - ); 225 - const html2 = editor.state.doc.toString(); 226 - const cid = await create(85, new TextEncoder().encode(html2)); 227 - const name = nameEl?.value ?? "nameless"; 228 - const theme = $editingTheme.value ? { 229 - ...$editingTheme.value, 230 - cid, 231 - html: html2, 232 - name 233 - } : { 234 - $type: "sh.diffuse.output.theme", 235 - id: crypto.randomUUID(), 236 - cid, 237 - html: html2, 238 - name 239 - }; 240 - switch ( 241 - /** @type {any} */ 242 - event.submitter.name 243 - ) { 244 - case "save": 245 - await saveTheme(theme); 246 - break; 247 - case "save+open": 248 - await saveTheme(theme); 249 - globalThis.open(`./themes/l/?id=${theme.id}`, "blank"); 250 - break; 251 - } 252 - } 253 - __name(onBuildSubmit, "onBuildSubmit"); 254 - async function editTheme(ogTheme) { 255 - const theme = { ...ogTheme }; 256 - const nameEl = ( 257 - /** @type {HTMLInputElement | null} */ 258 - document.querySelector( 259 - "#name-input" 260 - ) 261 - ); 262 - if (!nameEl) return; 263 - if (!theme.html && theme.url) { 264 - const html2 = await fetch(theme.url).then((res) => res.text()); 265 - const cid = await create(85, new TextEncoder().encode(html2)); 266 - theme.html = html2; 267 - theme.cid = cid; 268 - } 269 - $editingTheme.value = theme; 270 - nameEl.value = theme.name; 271 - editor.dispatch({ 272 - changes: { from: 0, to: editor.state.doc.length, insert: theme.html } 273 - }); 274 - } 275 - __name(editTheme, "editTheme"); 276 - async function saveTheme(theme) { 277 - const col = output.themes.collection(); 278 - const colWithoutId = col.filter((c) => c.id !== theme.id); 279 - const timestamp = qi.Now.zonedDateTimeISO().toString(); 280 - await output.themes.save([...colWithoutId, { 281 - ...theme, 282 - updatedAt: timestamp 283 - }]); 284 - } 285 - __name(saveTheme, "saveTheme"); 286 - 287 - //# sourceMappingURL=./index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/index.js.map
··· 1 - ../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/l/index.css
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/l/index.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/l/index.css.map
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/l/index.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/l/index.html
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/l/index.html
-108
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/l/index.js
··· 1 - import { 2 - foundation_default 3 - } from "../../chunk-JUPK7PXD.js"; 4 - import "../../chunk-HRGYPYP6.js"; 5 - import "../../chunk-YVFCBSEJ.js"; 6 - import "../../chunk-OXLVUFPU.js"; 7 - import "../../chunk-JQFGN3M7.js"; 8 - import "../../chunk-GMLGV4UU.js"; 9 - import "../../chunk-CPS76EE2.js"; 10 - import "../../chunk-IPY3IZ42.js"; 11 - import "../../chunk-A7EWFKZ4.js"; 12 - import "../../chunk-CNO46O5F.js"; 13 - import "../../chunk-77DLAY6P.js"; 14 - import "../../chunk-OEJDMRAO.js"; 15 - import "../../chunk-LPLLWF34.js"; 16 - import "../../chunk-BP7OSAES.js"; 17 - import "../../chunk-77ZY4GQV.js"; 18 - import "../../chunk-MVWHZJHR.js"; 19 - import "../../chunk-S4RHYXDI.js"; 20 - import "../../chunk-FVTTELAZ.js"; 21 - import "../../chunk-33EY7IZW.js"; 22 - import "../../chunk-3W46CCB5.js"; 23 - import "../../chunk-32QOJ2TM.js"; 24 - import "../../chunk-HDWTLLD6.js"; 25 - import "../../chunk-M7PCQLSV.js"; 26 - import "../../chunk-UXCYOXOC.js"; 27 - import "../../chunk-GX3WPNEX.js"; 28 - import "../../chunk-RPWC6IKI.js"; 29 - import "../../chunk-SSTS6DW7.js"; 30 - import "../../chunk-HN4F5JEZ.js"; 31 - import "../../chunk-NGXRH664.js"; 32 - import "../../chunk-CXGVZUBI.js"; 33 - import "../../chunk-GSA3UBRU.js"; 34 - import "../../chunk-AGNDISJF.js"; 35 - import "../../chunk-EEUCFWD4.js"; 36 - import "../../chunk-6DRHTH2U.js"; 37 - import "../../chunk-JS4TF33K.js"; 38 - import "../../chunk-UMLUM7AR.js"; 39 - import "../../chunk-EEVL24MR.js"; 40 - import "../../chunk-4UUOGUZ7.js"; 41 - import "../../chunk-3WGC3A6G.js"; 42 - import "../../chunk-S6GAP4IS.js"; 43 - import "../../chunk-PE6SII6D.js"; 44 - import "../../chunk-DUCTMCPX.js"; 45 - import "../../chunk-UGE3FKYA.js"; 46 - import "../../chunk-FIWHH4Y5.js"; 47 - import "../../chunk-G56PUJUJ.js"; 48 - import { 49 - effect 50 - } from "../../chunk-KIMDMO5U.js"; 51 - import "../../chunk-H3WG7GN4.js"; 52 - import "../../chunk-EJ2QF5QE.js"; 53 - import "../../chunk-NCFHYTLD.js"; 54 - import { 55 - create 56 - } from "../../chunk-4YB6QUPN.js"; 57 - import { 58 - __name, 59 - init_Buffer, 60 - init_process 61 - } from "../../chunk-FZQXS3RE.js"; 62 - 63 - // themes/l/index.js 64 - init_Buffer(); 65 - init_process(); 66 - var output = foundation_default.orchestrator.output(); 67 - var docUrl = new URL(document.location.href); 68 - var id = docUrl.searchParams.get("id"); 69 - var cid = docUrl.searchParams.get("cid"); 70 - var name = docUrl.searchParams.get("name"); 71 - var url = docUrl.searchParams.get("url"); 72 - effect(async () => { 73 - const collection = output.themes.collection(); 74 - if (output.themes.state() !== "loaded") return; 75 - let theme; 76 - if (id) { 77 - theme = collection.find((t) => t.id === id); 78 - } else if (cid) { 79 - theme = collection.find((t) => t.cid === cid); 80 - } else if (name) { 81 - theme = collection.find((t) => t.name === name); 82 - } else if (url) { 83 - const t = { 84 - $type: "sh.diffuse.output.theme", 85 - id: crypto.randomUUID(), 86 - name: "tryout", 87 - url 88 - }; 89 - theme = t; 90 - } 91 - if (!theme) return; 92 - if (!theme.html && theme.url) { 93 - const html = await fetch(theme.url).then((res) => res.text()); 94 - const cid2 = await create(85, new TextEncoder().encode(html)); 95 - theme.html = html; 96 - theme.cid = cid2; 97 - } 98 - loadIntoContainer(theme); 99 - }); 100 - function loadIntoContainer(theme) { 101 - const iframe = document.createElement("iframe"); 102 - iframe.srcdoc = theme.html ?? ""; 103 - document.body.innerHTML = ""; 104 - document.body.append(iframe); 105 - } 106 - __name(loadIntoContainer, "loadIntoContainer"); 107 - 108 - //# sourceMappingURL=./index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/l/index.js.map
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/l/index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/98-vars.css
··· 1 - ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/98-vars.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/98-vars.css.map
··· 1 - ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/98-vars.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/browser/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/browser/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/browser/element.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/browser/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/browser/facet.html.txt
··· 1 - ../../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/themes/webamp/browser/facet.html.txt
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/common/ui.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/common/ui.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/common/ui.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/common/ui.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/configurators/input/element.js
··· 1 - ../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/configurators/input/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/configurators/input/element.js.map
··· 1 - ../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/configurators/input/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/configurators/input/facet.html.txt
··· 1 - ../../../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/themes/webamp/configurators/input/facet.html.txt
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/configurators/output/element.js
··· 1 - ../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/configurators/output/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/configurators/output/element.js.map
··· 1 - ../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/configurators/output/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/configurators/output/facet.html.txt
··· 1 - ../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/configurators/output/facet.html.txt
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/facet.css
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/facet.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/facet.css.map
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/facet.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/fonts.css
··· 1 - ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/fonts.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/fonts.css.map
··· 1 - ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/fonts.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/index.css
··· 1 - ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/index.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/index.css.map
··· 1 - ../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/index.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/index.html
··· 1 - ../../../bafybeihr4brahqptxmxcdksktdfgs4hyl64odwx524vqmmitjvmn57sklq/themes/webamp/index.html
-180
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/index.js
··· 1 - import "../../chunk-ONE5JH5Q.js"; 2 - import "../../chunk-EMWRB7HX.js"; 3 - import "../../chunk-3CXPPL5Z.js"; 4 - import "../../chunk-EY2MBHBU.js"; 5 - import { 6 - element_default 7 - } from "../../chunk-HNTKRGE7.js"; 8 - import { 9 - element_default as element_default2 10 - } from "../../chunk-KGUWC6A2.js"; 11 - import "../../chunk-QJG4JBCO.js"; 12 - import "../../chunk-HRGYPYP6.js"; 13 - import { 14 - element_exports as element_exports3 15 - } from "../../chunk-YVFCBSEJ.js"; 16 - import { 17 - element_exports as element_exports4 18 - } from "../../chunk-JQFGN3M7.js"; 19 - import "../../chunk-IPY3IZ42.js"; 20 - import "../../chunk-A7EWFKZ4.js"; 21 - import "../../chunk-CNO46O5F.js"; 22 - import "../../chunk-77DLAY6P.js"; 23 - import "../../chunk-OEJDMRAO.js"; 24 - import "../../chunk-LPLLWF34.js"; 25 - import "../../chunk-BP7OSAES.js"; 26 - import "../../chunk-77ZY4GQV.js"; 27 - import "../../chunk-MVWHZJHR.js"; 28 - import "../../chunk-S4RHYXDI.js"; 29 - import "../../chunk-FVTTELAZ.js"; 30 - import "../../chunk-3W46CCB5.js"; 31 - import "../../chunk-HDWTLLD6.js"; 32 - import "../../chunk-M7PCQLSV.js"; 33 - import "../../chunk-UXCYOXOC.js"; 34 - import "../../chunk-GX3WPNEX.js"; 35 - import "../../chunk-RPWC6IKI.js"; 36 - import "../../chunk-SSTS6DW7.js"; 37 - import "../../chunk-HN4F5JEZ.js"; 38 - import "../../chunk-GSA3UBRU.js"; 39 - import "../../chunk-AGNDISJF.js"; 40 - import "../../chunk-EEUCFWD4.js"; 41 - import "../../chunk-6DRHTH2U.js"; 42 - import "../../chunk-JS4TF33K.js"; 43 - import { 44 - element_exports as element_exports2 45 - } from "../../chunk-UMLUM7AR.js"; 46 - import "../../chunk-EEVL24MR.js"; 47 - import "../../chunk-4UUOGUZ7.js"; 48 - import { 49 - element_exports 50 - } from "../../chunk-PE6SII6D.js"; 51 - import "../../chunk-DUCTMCPX.js"; 52 - import "../../chunk-UGE3FKYA.js"; 53 - import { 54 - component 55 - } from "../../chunk-FIWHH4Y5.js"; 56 - import "../../chunk-G56PUJUJ.js"; 57 - import { 58 - effect, 59 - untracked 60 - } from "../../chunk-KIMDMO5U.js"; 61 - import "../../chunk-H3WG7GN4.js"; 62 - import "../../chunk-EJ2QF5QE.js"; 63 - import "../../chunk-NCFHYTLD.js"; 64 - import { 65 - __name, 66 - init_Buffer, 67 - init_process 68 - } from "../../chunk-FZQXS3RE.js"; 69 - 70 - // themes/webamp/index.js 71 - init_Buffer(); 72 - init_process(); 73 - var input = component(element_exports2); 74 - var queue = component(element_exports); 75 - var search = component(element_exports3); 76 - var scopedTracks = component(element_exports4); 77 - var output = document.querySelector("#output"); 78 - if (!output) throw new Error("Missing output element"); 79 - globalThis.queue = queue; 80 - globalThis.output = output; 81 - var index = {}; 82 - var initiatedPlaylist = false; 83 - var ampElement = document.querySelector("dtw-webamp"); 84 - if (ampElement instanceof element_default === false) { 85 - throw new Error("Missing webamp element"); 86 - } 87 - var amp = ampElement.amp; 88 - var loadFromUrl = amp.media.loadFromUrl.bind(amp.media); 89 - async function loadOverride(uri, autoPlay) { 90 - if (uri.startsWith("blob:")) { 91 - return await loadFromUrl(uri, autoPlay); 92 - } 93 - const resp = await input.resolve({ method: "GET", uri }); 94 - if (!resp) throw new Error("Failed to resolve URI"); 95 - if (resp && "stream" in resp) { 96 - throw new Error("Webamp does not support playing streams."); 97 - } 98 - return await loadFromUrl(resp.url, autoPlay); 99 - } 100 - __name(loadOverride, "loadOverride"); 101 - amp.media.loadFromUrl = loadOverride.bind(amp.media); 102 - effect(() => { 103 - const past = untracked(() => queue.past()); 104 - const now = untracked(() => queue.now()); 105 - const future = queue.future(); 106 - const list = [...past, ...now ? [now] : [], ...future]; 107 - const newIdx = {}; 108 - const idMap = {}; 109 - list.forEach((item) => { 110 - newIdx[item.id] = (newIdx[item.id] ?? 0) + 1; 111 - idMap[item.id] = item; 112 - }); 113 - const tracksToAdd = []; 114 - Object.entries(newIdx).forEach(([id, n]) => { 115 - const x = index[id] ?? 0; 116 - if (n > x) { 117 - tracksToAdd.push(idMap[id]); 118 - index[id] = x + 1; 119 - } 120 - }); 121 - tracksToAdd.forEach((t) => ampElement.addTrack(t)); 122 - if (!initiatedPlaylist && tracksToAdd.length) { 123 - initiatedPlaylist = true; 124 - amp.store.dispatch({ type: "BUFFER_TRACK", id: 0 }); 125 - } 126 - }); 127 - effect(() => { 128 - queue.supply({ tracks: scopedTracks.tracks() }); 129 - }); 130 - var tracksPromise = Promise.withResolvers(); 131 - effect(() => { 132 - const state = output.tracks.state(); 133 - if (state !== "loaded") return; 134 - const fingerprintSearch = search.supplyFingerprint(); 135 - if (fingerprintSearch === void 0) return; 136 - const fingerprintQueue = queue.supplyFingerprint(); 137 - if (fingerprintQueue === void 0) return; 138 - tracksPromise.resolve("loaded"); 139 - }); 140 - document.body.querySelectorAll(".desktop__item").forEach((element) => { 141 - if (element instanceof HTMLElement) { 142 - element.addEventListener("dblclick", () => { 143 - const f = element.querySelector("label")?.getAttribute("for"); 144 - if (f) return windowManager()?.toggleWindow(f); 145 - }); 146 - } 147 - }); 148 - document.body.querySelector("#desktop-batch")?.addEventListener( 149 - "dblclick", 150 - () => { 151 - tracksPromise.promise.then(() => { 152 - addBatch(); 153 - }); 154 - } 155 - ); 156 - var winampIsShown = true; 157 - document.body.querySelector("#desktop-winamp")?.addEventListener( 158 - "dblclick", 159 - () => { 160 - if (winampIsShown) { 161 - amp.close(); 162 - } else { 163 - amp.reopen(); 164 - winampIsShown = true; 165 - } 166 - } 167 - ); 168 - amp.onClose(() => winampIsShown = false); 169 - async function addBatch() { 170 - await queue.fill({ augment: true, amount: 50, shuffled: true }); 171 - } 172 - __name(addBatch, "addBatch"); 173 - function windowManager() { 174 - const w = document.body.querySelector("dtw-window-manager"); 175 - if (w instanceof element_default2) return w; 176 - return null; 177 - } 178 - __name(windowManager, "windowManager"); 179 - 180 - //# sourceMappingURL=./index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/index.js.map
··· 1 - ../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/webamp/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/webamp/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/webamp/element.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/webamp/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/window-manager/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/window-manager/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/window-manager/element.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/window-manager/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/window/element.js
··· 1 - ../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/window/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/window/element.js.map
··· 1 - ../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/window/element.js.map
+2 -2
artifacts/versions.json
··· 5 5 "version": "3.5.0" 6 6 }, 7 7 "4.0.0-alpha": { 8 - "cid": "bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha", 8 + "cid": "bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu", 9 9 "createdAt": "2026-02-15T18:06:05.676Z", 10 10 "version": "4.0.0-alpha" 11 11 } 12 - } 12 + }
+7 -1
tasks/generate-redirects.ts
··· 180 180 status: 302, 181 181 }; 182 182 183 + const oauth: Rule = { 184 + from: "/oauth-client-metadata.json", 185 + to: `/${latestRelease.cid}/oauth-client-metadata.json`, 186 + status: 200, 187 + }; 188 + 183 189 const root: Rule = { 184 190 from: "/", 185 191 to: `/${latestRelease.version}/`, 186 192 status: 302, 187 193 }; 188 194 189 - rules = [root, latest, latestHash, latestSplat, ...rules]; 195 + rules = [root, latest, latestHash, latestSplat, oauth, ...rules]; 190 196 191 197 //////////////////////////////////////////// 192 198 // `_redirects` file