tangled
alpha
login
or
join now
tokono.ma
/
diffuse-artifacts
Content-addressed version deploy system for Diffuse
elements.diffuse.sh
0
fork
atom
overview
issues
pulls
pipelines
fix: oauth redirect issue
Steven Vandevelde
13 hours ago
c8123971
31f84c34
+10
-6135
585 changed files
expand all
collapse all
unified
split
artifacts
artifacts.json
bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha
APEv2Parser-XSWP3VLW.js
APEv2Parser-XSWP3VLW.js.map
AiffParser-P2VIQSPW.js
AiffParser-P2VIQSPW.js.map
AsfParser-23UCSCFX.js
AsfParser-23UCSCFX.js.map
DsdiffParser-SNF4XUE4.js
DsdiffParser-SNF4XUE4.js.map
DsfParser-VKGYEZIA.js
DsfParser-VKGYEZIA.js.map
FlacParser-NCB7WTLK.js
FlacParser-NCB7WTLK.js.map
MP4Parser-YVOQVBGY.js
MP4Parser-YVOQVBGY.js.map
MatroskaParser-AYAGCKYO.js
MatroskaParser-AYAGCKYO.js.map
MpegParser-7H5JCCCU.js
MpegParser-7H5JCCCU.js.map
MusepackParser-O32VPQOY.js
MusepackParser-O32VPQOY.js.map
OggParser-3DWNAWIW.js
OggParser-3DWNAWIW.js.map
WavPackParser-7KWXBWCY.js
WavPackParser-7KWXBWCY.js.map
WaveParser-BYFTRQAV.js
WaveParser-BYFTRQAV.js.map
android-chrome-192x192.png
android-chrome-512x512.png
apple-touch-icon.png
browserconfig.xml
chunk-32QOJ2TM.js
chunk-32QOJ2TM.js.map
chunk-33EY7IZW.js
chunk-33EY7IZW.js.map
chunk-3CXPPL5Z.js
chunk-3CXPPL5Z.js.map
chunk-3W46CCB5.js
chunk-3W46CCB5.js.map
chunk-3WGC3A6G.js
chunk-3WGC3A6G.js.map
chunk-4UUOGUZ7.js
chunk-4UUOGUZ7.js.map
chunk-4YB6QUPN.js
chunk-4YB6QUPN.js.map
chunk-6DRHTH2U.js
chunk-6DRHTH2U.js.map
chunk-77DLAY6P.js
chunk-77DLAY6P.js.map
chunk-77ZY4GQV.js
chunk-77ZY4GQV.js.map
chunk-A7EWFKZ4.js
chunk-A7EWFKZ4.js.map
chunk-AC2OVIEU.js
chunk-AC2OVIEU.js.map
chunk-AGNDISJF.js
chunk-AGNDISJF.js.map
chunk-BP7OSAES.js
chunk-BP7OSAES.js.map
chunk-CMU4QLMC.js
chunk-CMU4QLMC.js.map
chunk-CNO46O5F.js
chunk-CNO46O5F.js.map
chunk-CPN2PPDQ.js
chunk-CPN2PPDQ.js.map
chunk-CPS76EE2.js
chunk-CPS76EE2.js.map
chunk-CXGVZUBI.js
chunk-CXGVZUBI.js.map
chunk-DUCTMCPX.js
chunk-DUCTMCPX.js.map
chunk-EEUCFWD4.js
chunk-EEUCFWD4.js.map
chunk-EEVL24MR.js
chunk-EEVL24MR.js.map
chunk-EJ2QF5QE.js
chunk-EJ2QF5QE.js.map
chunk-EMWRB7HX.js
chunk-EMWRB7HX.js.map
chunk-ERP4MUHU.js
chunk-ERP4MUHU.js.map
chunk-EY2MBHBU.js
chunk-EY2MBHBU.js.map
chunk-FAW4EB7G.js
chunk-FAW4EB7G.js.map
chunk-FIWHH4Y5.js
chunk-FIWHH4Y5.js.map
chunk-FVPZU4QY.js
chunk-FVPZU4QY.js.map
chunk-FVTTELAZ.js
chunk-FVTTELAZ.js.map
chunk-FZQXS3RE.js
chunk-FZQXS3RE.js.map
chunk-G2ZO6QIY.js
chunk-G2ZO6QIY.js.map
chunk-G56PUJUJ.js
chunk-G56PUJUJ.js.map
chunk-GMLGV4UU.js
chunk-GMLGV4UU.js.map
chunk-GSA3UBRU.js
chunk-GSA3UBRU.js.map
chunk-GX3WPNEX.js
chunk-GX3WPNEX.js.map
chunk-H3WG7GN4.js
chunk-H3WG7GN4.js.map
chunk-HDWTLLD6.js
chunk-HDWTLLD6.js.map
chunk-HLQZU6M2.js
chunk-HLQZU6M2.js.map
chunk-HN4F5JEZ.js
chunk-HN4F5JEZ.js.map
chunk-HNTKRGE7.js
chunk-HNTKRGE7.js.map
chunk-HRGYPYP6.js
chunk-HRGYPYP6.js.map
chunk-IPY3IZ42.js
chunk-IPY3IZ42.js.map
chunk-J34EA5F4.js
chunk-J34EA5F4.js.map
chunk-JEKGVPZ5.js
chunk-JEKGVPZ5.js.map
chunk-JQFGN3M7.js
chunk-JQFGN3M7.js.map
chunk-JS4TF33K.js
chunk-JS4TF33K.js.map
chunk-JSOX7OQB.js
chunk-JSOX7OQB.js.map
chunk-JUPK7PXD.js
chunk-JUPK7PXD.js.map
chunk-KGUWC6A2.js
chunk-KGUWC6A2.js.map
chunk-KIMDMO5U.js
chunk-KIMDMO5U.js.map
chunk-LGC5DXHT.js
chunk-LGC5DXHT.js.map
chunk-LPLLWF34.js
chunk-LPLLWF34.js.map
chunk-M7PCQLSV.js
chunk-M7PCQLSV.js.map
chunk-MVWHZJHR.js
chunk-MVWHZJHR.js.map
chunk-MXEJU4VJ.js
chunk-MXEJU4VJ.js.map
chunk-MZP4RURX.js
chunk-MZP4RURX.js.map
chunk-NCFHYTLD.js
chunk-NCFHYTLD.js.map
chunk-NGXRH664.js
chunk-NGXRH664.js.map
chunk-OEJDMRAO.js
chunk-OEJDMRAO.js.map
chunk-ONE5JH5Q.js
chunk-ONE5JH5Q.js.map
chunk-OXLVUFPU.js
chunk-OXLVUFPU.js.map
chunk-P3M4HQTD.js
chunk-P3M4HQTD.js.map
chunk-PE6SII6D.js
chunk-PE6SII6D.js.map
chunk-PJWFBDSG.js
chunk-PJWFBDSG.js.map
chunk-PUHBIZRM.js
chunk-PUHBIZRM.js.map
chunk-QJG4JBCO.js
chunk-QJG4JBCO.js.map
chunk-QQ2VIQZY.js
chunk-QQ2VIQZY.js.map
chunk-R65OZ4FV.js
chunk-R65OZ4FV.js.map
chunk-RG36R2PW.js
chunk-RG36R2PW.js.map
chunk-RPWC6IKI.js
chunk-RPWC6IKI.js.map
chunk-S4RHYXDI.js
chunk-S4RHYXDI.js.map
chunk-S6GAP4IS.js
chunk-S6GAP4IS.js.map
chunk-SSTS6DW7.js
chunk-SSTS6DW7.js.map
chunk-UGE3FKYA.js
chunk-UGE3FKYA.js.map
chunk-UMLUM7AR.js
chunk-UMLUM7AR.js.map
chunk-UXCYOXOC.js
chunk-UXCYOXOC.js.map
chunk-WM2QH5TD.js
chunk-WM2QH5TD.js.map
chunk-WSITZE2C.js
chunk-WSITZE2C.js.map
chunk-XXGFKU7I.js
chunk-XXGFKU7I.js.map
chunk-YVFCBSEJ.js
chunk-YVFCBSEJ.js.map
common
cid.js
cid.js.map
element.js
element.js.map
facets
foundation.js
foundation.js.map
utils.js
utils.js.map
playlist.js
playlist.js.map
signal.js
signal.js.map
themes
utils.js
utils.js.map
utils.js
utils.js.map
worker
rpc.js
rpc.js.map
worker.js
worker.js.map
components
configurator
input
element.js
element.js.map
worker.js
worker.js.map
output
element.js
element.js.map
engine
audio
element.js
element.js.map
queue
element.js
element.js.map
worker.js
worker.js.map
repeat-shuffle
element.js
element.js.map
scope
element.js
element.js.map
input
common.js
common.js.map
https
common.js
common.js.map
constants.js
constants.js.map
element.js
element.js.map
worker.js
worker.js.map
opensubsonic
class.js
class.js.map
common.js
common.js.map
constants.js
constants.js.map
element.js
element.js.map
worker.js
worker.js.map
s3
common.js
common.js.map
constants.js
constants.js.map
element.js
element.js.map
worker.js
worker.js.map
orchestrator
auto-queue
element.js
element.js.map
favourites
common.js
common.js.map
element.js
element.js.map
worker.js
worker.js.map
input
element.js
element.js.map
output
element.js
element.js.map
process-tracks
element.js
element.js.map
worker.js
worker.js.map
queue-audio
element.js
element.js.map
scoped-tracks
element.js
element.js.map
worker.js
worker.js.map
sources
element.js
element.js.map
output
bytes
automerge-repo-server
element.js
element.js.map
s3
constants.js
constants.js.map
element.js
element.js.map
worker.js
worker.js.map
common.js
common.js.map
polymorphic
indexed-db
constants.js
constants.js.map
element.js
element.js.map
worker.js
worker.js.map
raw
atproto
element.js
element.js.map
oauth.js
oauth.js.map
processor
artwork
constants.js
constants.js.map
element.js
element.js.map
worker.js
worker.js.map
metadata
common.js
common.js.map
element.js
element.js.map
worker.js
worker.js.map
search
constants.js
constants.js.map
element.js
element.js.map
worker.js
worker.js.map
transformer
output
base.js
base.js.map
bytes
automerge
constants.js
constants.js.map
element.js
element.js.map
utils.js
utils.js.map
json
element.js
element.js.map
refiner
default
element.js
element.js.map
string
json
element.js
element.js.map
definitions
index.ts
output
facet.json
playlist.json
theme.json
track.json
facets
examples
generate-playlist.html.txt
now-playing.html.txt
index.html
index.js
index.js.map
l
index.html
index.js
index.js.map
tools
auto-queue.html.txt
v3-import.html.txt
favicon-16x16.png
favicon-32x32.png
favicon.ico
fonts
CommitMonoVariable.woff2
InterVariable-Italic.woff2
InterVariable.woff2
ms_sans_serif.woff2
ms_sans_serif_bold.woff2
images
background
1.jpg
10.jpg
11.jpg
12.jpg
13.jpg
14.jpg
15.jpg
16.jpg
17.jpg
18.jpg
19.jpg
2.jpg
20.jpg
21.jpg
22.jpg
23.jpg
24.jpg
25.jpg
26.jpg
27.jpg
28.jpg
29.jpg
3.jpg
30.jpg
4.jpg
5.jpg
6.jpg
7.jpg
8.jpg
9.jpg
thumbnails
1.jpg
10.jpg
11.jpg
12.jpg
13.jpg
14.jpg
15.jpg
16.jpg
17.jpg
18.jpg
19.jpg
2.jpg
20.jpg
21.jpg
22.jpg
23.jpg
24.jpg
25.jpg
26.jpg
27.jpg
28.jpg
29.jpg
3.jpg
30.jpg
4.jpg
5.jpg
6.jpg
7.jpg
8.jpg
9.jpg
diffuse-current.svg
diffuse-dark.svg
diffuse-grey.svg
diffuse-light.svg
diffuse__icon-dark.svg
diffuse__icon-grey.svg
diffuse__icon-light.svg
icon-square-ws.png
icon-square.png
icon.png
icons
windows_98
catalog-1.png
cd_audio_cd_a-0.png
cd_audio_cd_a-2.png
cd_audio_cd_a-3.png
cd_audio_cd_a-4.png
cd_drive-0.png
cd_drive_purple-3.png
channels-2.png
check-0.png
computer_sound-0.png
computer_user_pencil-0.png
connected_world-0.png
directory_admin_tools-3.png
directory_admin_tools-5.png
directory_channels-2.png
directory_channels-3.png
directory_closed-3.png
directory_closed-4.png
directory_control_panel-2.png
directory_control_panel-3.png
directory_explorer-4.png
directory_explorer-5.png
directory_favorites-2.png
directory_favorites-4.png
directory_net_web-3.png
directory_net_web-4.png
directory_network_conn-3.png
directory_network_conn-5.png
directory_open_file_mydocs_2k-3.png
directory_open_file_mydocs_2k-4.png
gears-0.png
globe_map-0.png
help_book_big-0.png
installer-3.png
installer_generic_old-0.png
loudspeaker_wave-0.png
magnifying_glass-0.png
magnifying_glass_4-1.png
media_player-0.png
media_player_stream_no.png
ms_dos-1.png
msg_error-0.png
msg_information-0.png
msg_question-0.png
msg_warning-0.png
multimedia-4.png
network_drive_world-0.png
no-1.png
restrict-1.png
search_computer-0.png
search_server-1.png
search_web-0.png
settings_gear-0.png
settings_gear-2.png
tip.png
utopia_smiley.png
winamp2-32x32.png
windows-0.png
world-2.png
world-4.png
world_network_directories-3.png
index.html
index.js
index.js.map
mstile-150x150.png
node_crypto-QYMDOTAM.js
node_crypto-QYMDOTAM.js.map
oauth-client-metadata.json
safari-pinned-tab.svg
styles
animations.css
animations.css.map
base.css
base.css.map
diffuse
colors.css
colors.css.map
fonts.css
fonts.css.map
page.css
page.css.map
font-faces.css
font-faces.css.map
reset.css
reset.css.map
variables.css
variables.css.map
vendor
98.css
98.css.map
ms_sans_serif.woff2
ms_sans_serif_bold.woff2
phosphor
bold
Phosphor-Bold.svg
Phosphor-Bold.ttf
Phosphor-Bold.woff
Phosphor-Bold.woff2
style.css
style.css.map
fill
Phosphor-Fill.svg
Phosphor-Fill.ttf
Phosphor-Fill.woff
Phosphor-Fill.woff2
style.css
style.css.map
wireframe
ui.css
ui.css.map
testing
index.html
output
index.html
output.js
output.js.map
sample
tracks.js
tracks.js.map
themes
blur
artwork-controller
element.css
element.css.map
element.js
element.js.map
facet.html.txt
index.css
index.css.map
index.html
index.js
index.js.map
variables.css
variables.css.map
index.html
index.js
index.js.map
l
index.css
index.css.map
index.html
index.js
index.js.map
webamp
98-vars.css
98-vars.css.map
browser
element.js
element.js.map
facet.html.txt
common
ui.js
ui.js.map
configurators
input
element.js
element.js.map
facet.html.txt
output
element.js
element.js.map
facet.html.txt
facet.css
facet.css.map
fonts.css
fonts.css.map
index.css
index.css.map
index.html
index.js
index.js.map
webamp
element.js
element.js.map
window
element.js
element.js.map
window-manager
element.js
element.js.map
versions.json
tasks
generate-redirects.ts
+1
-6
artifacts/artifacts.json
···
103
"cid": "bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu",
104
"createdAt": "2026-02-15T17:54:33.360Z",
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
}
112
-
}
···
103
"cid": "bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu",
104
"createdAt": "2026-02-15T17:54:33.360Z",
105
"version": "4.0.0-alpha"
0
0
0
0
0
106
}
107
+
}
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/APEv2Parser-XSWP3VLW.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/APEv2Parser-XSWP3VLW.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/APEv2Parser-XSWP3VLW.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/APEv2Parser-XSWP3VLW.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/AiffParser-P2VIQSPW.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/AiffParser-P2VIQSPW.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/AiffParser-P2VIQSPW.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/AiffParser-P2VIQSPW.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/AsfParser-23UCSCFX.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/AsfParser-23UCSCFX.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/AsfParser-23UCSCFX.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/AsfParser-23UCSCFX.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/DsdiffParser-SNF4XUE4.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/DsdiffParser-SNF4XUE4.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/DsdiffParser-SNF4XUE4.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/DsdiffParser-SNF4XUE4.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/DsfParser-VKGYEZIA.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/DsfParser-VKGYEZIA.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/DsfParser-VKGYEZIA.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/DsfParser-VKGYEZIA.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/FlacParser-NCB7WTLK.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/FlacParser-NCB7WTLK.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/FlacParser-NCB7WTLK.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/FlacParser-NCB7WTLK.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MP4Parser-YVOQVBGY.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MP4Parser-YVOQVBGY.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MP4Parser-YVOQVBGY.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MP4Parser-YVOQVBGY.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MatroskaParser-AYAGCKYO.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MatroskaParser-AYAGCKYO.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MatroskaParser-AYAGCKYO.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MatroskaParser-AYAGCKYO.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MpegParser-7H5JCCCU.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MpegParser-7H5JCCCU.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MpegParser-7H5JCCCU.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MpegParser-7H5JCCCU.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MusepackParser-O32VPQOY.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MusepackParser-O32VPQOY.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MusepackParser-O32VPQOY.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MusepackParser-O32VPQOY.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/OggParser-3DWNAWIW.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/OggParser-3DWNAWIW.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/OggParser-3DWNAWIW.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/OggParser-3DWNAWIW.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/WavPackParser-7KWXBWCY.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/WavPackParser-7KWXBWCY.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/WavPackParser-7KWXBWCY.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/WavPackParser-7KWXBWCY.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/WaveParser-BYFTRQAV.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/WaveParser-BYFTRQAV.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/WaveParser-BYFTRQAV.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/WaveParser-BYFTRQAV.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/android-chrome-192x192.png
···
1
-
../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/android-chrome-192x192.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/android-chrome-512x512.png
···
1
-
../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/android-chrome-512x512.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/apple-touch-icon.png
···
1
-
../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/apple-touch-icon.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/browserconfig.xml
···
1
-
../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/browserconfig.xml
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-32QOJ2TM.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-32QOJ2TM.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-32QOJ2TM.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-32QOJ2TM.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-33EY7IZW.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-33EY7IZW.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-33EY7IZW.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-33EY7IZW.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-3CXPPL5Z.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-3CXPPL5Z.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-3CXPPL5Z.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-3CXPPL5Z.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-3W46CCB5.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-3W46CCB5.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-3W46CCB5.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-3W46CCB5.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-3WGC3A6G.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-3WGC3A6G.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-3WGC3A6G.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-3WGC3A6G.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-4UUOGUZ7.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-4UUOGUZ7.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-4UUOGUZ7.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-4UUOGUZ7.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-4YB6QUPN.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-4YB6QUPN.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-4YB6QUPN.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-4YB6QUPN.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-6DRHTH2U.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-6DRHTH2U.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-6DRHTH2U.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-6DRHTH2U.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-77DLAY6P.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-77DLAY6P.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-77DLAY6P.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-77DLAY6P.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-77ZY4GQV.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-77ZY4GQV.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-77ZY4GQV.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-77ZY4GQV.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-A7EWFKZ4.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-A7EWFKZ4.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-A7EWFKZ4.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-A7EWFKZ4.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-AC2OVIEU.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-AC2OVIEU.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-AC2OVIEU.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-AC2OVIEU.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-AGNDISJF.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-AGNDISJF.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-AGNDISJF.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-AGNDISJF.js.map
···
0
-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
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-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"}
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CMU4QLMC.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CMU4QLMC.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CMU4QLMC.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CMU4QLMC.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CNO46O5F.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CNO46O5F.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CNO46O5F.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CNO46O5F.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CPN2PPDQ.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CPN2PPDQ.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CPN2PPDQ.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CPN2PPDQ.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CPS76EE2.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CPS76EE2.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CPS76EE2.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CPS76EE2.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CXGVZUBI.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CXGVZUBI.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CXGVZUBI.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CXGVZUBI.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-DUCTMCPX.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-DUCTMCPX.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-DUCTMCPX.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-DUCTMCPX.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EEUCFWD4.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EEUCFWD4.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EEUCFWD4.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EEUCFWD4.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EEVL24MR.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EEVL24MR.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EEVL24MR.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EEVL24MR.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EJ2QF5QE.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EJ2QF5QE.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EJ2QF5QE.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EJ2QF5QE.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EMWRB7HX.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EMWRB7HX.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EMWRB7HX.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EMWRB7HX.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-ERP4MUHU.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-ERP4MUHU.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-ERP4MUHU.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-ERP4MUHU.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EY2MBHBU.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EY2MBHBU.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EY2MBHBU.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EY2MBHBU.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FAW4EB7G.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FAW4EB7G.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FAW4EB7G.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FAW4EB7G.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FIWHH4Y5.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FIWHH4Y5.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FIWHH4Y5.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FIWHH4Y5.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FVPZU4QY.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FVPZU4QY.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FVPZU4QY.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FVPZU4QY.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FVTTELAZ.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FVTTELAZ.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FVTTELAZ.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FVTTELAZ.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FZQXS3RE.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FZQXS3RE.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FZQXS3RE.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FZQXS3RE.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-G2ZO6QIY.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-G2ZO6QIY.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-G2ZO6QIY.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-G2ZO6QIY.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-G56PUJUJ.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-G56PUJUJ.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-G56PUJUJ.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-G56PUJUJ.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-GMLGV4UU.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-GMLGV4UU.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-GMLGV4UU.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-GMLGV4UU.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-GSA3UBRU.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-GSA3UBRU.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-GSA3UBRU.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-GSA3UBRU.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-GX3WPNEX.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-GX3WPNEX.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-GX3WPNEX.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-GX3WPNEX.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-H3WG7GN4.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-H3WG7GN4.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-H3WG7GN4.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-H3WG7GN4.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HDWTLLD6.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HDWTLLD6.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HDWTLLD6.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HDWTLLD6.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HLQZU6M2.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HLQZU6M2.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HLQZU6M2.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HLQZU6M2.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HN4F5JEZ.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HN4F5JEZ.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HN4F5JEZ.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HN4F5JEZ.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HNTKRGE7.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HNTKRGE7.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HNTKRGE7.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HNTKRGE7.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HRGYPYP6.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HRGYPYP6.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HRGYPYP6.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HRGYPYP6.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-IPY3IZ42.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-IPY3IZ42.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-IPY3IZ42.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-IPY3IZ42.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-J34EA5F4.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-J34EA5F4.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-J34EA5F4.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-J34EA5F4.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JEKGVPZ5.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JEKGVPZ5.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JEKGVPZ5.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JEKGVPZ5.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JQFGN3M7.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JQFGN3M7.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JQFGN3M7.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JQFGN3M7.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JS4TF33K.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JS4TF33K.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JS4TF33K.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JS4TF33K.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JSOX7OQB.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JSOX7OQB.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JSOX7OQB.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JSOX7OQB.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JUPK7PXD.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JUPK7PXD.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JUPK7PXD.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JUPK7PXD.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-KGUWC6A2.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-KGUWC6A2.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-KGUWC6A2.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-KGUWC6A2.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-KIMDMO5U.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-KIMDMO5U.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-KIMDMO5U.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-KIMDMO5U.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-LGC5DXHT.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-LGC5DXHT.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-LGC5DXHT.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-LGC5DXHT.js.map
···
0
-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
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-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];\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"}
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-M7PCQLSV.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-M7PCQLSV.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-M7PCQLSV.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-M7PCQLSV.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-MVWHZJHR.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-MVWHZJHR.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-MVWHZJHR.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-MVWHZJHR.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-MXEJU4VJ.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-MXEJU4VJ.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-MXEJU4VJ.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-MXEJU4VJ.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-MZP4RURX.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-MZP4RURX.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-MZP4RURX.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-MZP4RURX.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-NCFHYTLD.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-NCFHYTLD.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-NCFHYTLD.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-NCFHYTLD.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-NGXRH664.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-NGXRH664.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-NGXRH664.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-NGXRH664.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-OEJDMRAO.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-OEJDMRAO.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-OEJDMRAO.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-OEJDMRAO.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-ONE5JH5Q.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-ONE5JH5Q.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-ONE5JH5Q.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-ONE5JH5Q.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-OXLVUFPU.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-OXLVUFPU.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-OXLVUFPU.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-OXLVUFPU.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-P3M4HQTD.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-P3M4HQTD.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-P3M4HQTD.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-P3M4HQTD.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-PE6SII6D.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-PE6SII6D.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-PE6SII6D.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-PE6SII6D.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-PJWFBDSG.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-PJWFBDSG.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-PJWFBDSG.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-PJWFBDSG.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-PUHBIZRM.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-PUHBIZRM.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-PUHBIZRM.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-PUHBIZRM.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-QJG4JBCO.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-QJG4JBCO.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-QJG4JBCO.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-QJG4JBCO.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-QQ2VIQZY.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-QQ2VIQZY.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-QQ2VIQZY.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-QQ2VIQZY.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-R65OZ4FV.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-R65OZ4FV.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-R65OZ4FV.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-R65OZ4FV.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-RG36R2PW.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-RG36R2PW.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-RG36R2PW.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-RG36R2PW.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-RPWC6IKI.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-RPWC6IKI.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-RPWC6IKI.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-RPWC6IKI.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-S4RHYXDI.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-S4RHYXDI.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-S4RHYXDI.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-S4RHYXDI.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-S6GAP4IS.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-S6GAP4IS.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-S6GAP4IS.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-S6GAP4IS.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-SSTS6DW7.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-SSTS6DW7.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-SSTS6DW7.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-SSTS6DW7.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-UGE3FKYA.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-UGE3FKYA.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-UGE3FKYA.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-UGE3FKYA.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-UMLUM7AR.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-UMLUM7AR.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-UMLUM7AR.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-UMLUM7AR.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-UXCYOXOC.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-UXCYOXOC.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-UXCYOXOC.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-UXCYOXOC.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-WM2QH5TD.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-WM2QH5TD.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-WM2QH5TD.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-WM2QH5TD.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-WSITZE2C.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-WSITZE2C.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-WSITZE2C.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-WSITZE2C.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-XXGFKU7I.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-XXGFKU7I.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-XXGFKU7I.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-XXGFKU7I.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-YVFCBSEJ.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-YVFCBSEJ.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-YVFCBSEJ.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-YVFCBSEJ.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/cid.js
···
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/cid.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/cid.js.map
···
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/cid.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/element.js
···
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/element.js.map
···
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/common/element.js.map
···
0
-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
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/facets/foundation.js.map
···
1
-
../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/common/facets/foundation.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/facets/utils.js
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/facets/utils.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/facets/utils.js.map
···
1
-
../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/common/facets/utils.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/playlist.js
···
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/playlist.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/playlist.js.map
···
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/playlist.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/signal.js
···
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/signal.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/signal.js.map
···
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/common/signal.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/themes/utils.js
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/themes/utils.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/themes/utils.js.map
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/themes/utils.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/utils.js
···
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/utils.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/utils.js.map
···
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/common/utils.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/worker.js
···
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/worker.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/worker.js.map
···
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/common/worker.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/worker/rpc.js
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/worker/rpc.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/worker/rpc.js.map
···
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/common/worker/rpc.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/configurator/input/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/configurator/input/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/configurator/input/element.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/configurator/input/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/configurator/input/worker.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/configurator/input/worker.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/configurator/input/worker.js.map
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/configurator/input/worker.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/configurator/output/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/configurator/output/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/configurator/output/element.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/configurator/output/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/audio/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/engine/audio/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/audio/element.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/engine/audio/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/queue/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/engine/queue/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/queue/element.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/engine/queue/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/queue/worker.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/engine/queue/worker.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/queue/worker.js.map
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/engine/queue/worker.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/repeat-shuffle/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/engine/repeat-shuffle/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/repeat-shuffle/element.js.map
···
1
-
../../../../bafybeia4lo67fqia3emjf54vzbrvfyao6fwndoc4rnqpav4yezowfg4j6e/components/engine/repeat-shuffle/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/scope/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/engine/scope/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/scope/element.js.map
···
1
-
../../../../bafybeihr4brahqptxmxcdksktdfgs4hyl64odwx524vqmmitjvmn57sklq/components/engine/scope/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/common.js
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/common.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/common.js.map
···
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/common.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/common.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/common.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/common.js.map
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/common.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/constants.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/constants.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/constants.js.map
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/constants.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/element.js.map
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/worker.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/worker.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/worker.js.map
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/worker.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/class.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/opensubsonic/class.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/class.js.map
···
1
-
../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/components/input/opensubsonic/class.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/common.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/opensubsonic/common.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/common.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/opensubsonic/common.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/constants.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/opensubsonic/constants.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/constants.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/opensubsonic/constants.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/opensubsonic/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/element.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/opensubsonic/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/worker.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/opensubsonic/worker.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/worker.js.map
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/opensubsonic/worker.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/common.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/s3/common.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/common.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/s3/common.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/constants.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/s3/constants.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/constants.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/s3/constants.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/s3/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/element.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/s3/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/worker.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/s3/worker.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/worker.js.map
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/s3/worker.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/auto-queue/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/auto-queue/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/auto-queue/element.js.map
···
1
-
../../../../bafybeia4lo67fqia3emjf54vzbrvfyao6fwndoc4rnqpav4yezowfg4j6e/components/orchestrator/auto-queue/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/favourites/common.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/favourites/common.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/favourites/common.js.map
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/favourites/common.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/favourites/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/favourites/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/favourites/element.js.map
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/favourites/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/favourites/worker.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/favourites/worker.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/favourites/worker.js.map
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/favourites/worker.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/input/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/input/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/input/element.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/input/element.js.map
···
0
-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
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/output/element.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/output/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/process-tracks/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/process-tracks/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/process-tracks/element.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/process-tracks/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/process-tracks/worker.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/process-tracks/worker.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/process-tracks/worker.js.map
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/process-tracks/worker.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/queue-audio/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/queue-audio/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/queue-audio/element.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/queue-audio/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/scoped-tracks/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/scoped-tracks/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/scoped-tracks/element.js.map
···
1
-
../../../../bafybeihr4brahqptxmxcdksktdfgs4hyl64odwx524vqmmitjvmn57sklq/components/orchestrator/scoped-tracks/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/scoped-tracks/worker.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/scoped-tracks/worker.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/scoped-tracks/worker.js.map
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/scoped-tracks/worker.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/sources/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/sources/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/sources/element.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/sources/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/automerge-repo-server/element.js
···
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/automerge-repo-server/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/automerge-repo-server/element.js.map
···
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/automerge-repo-server/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/s3/constants.js
···
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/s3/constants.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/s3/constants.js.map
···
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/s3/constants.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/s3/element.js
···
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/s3/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/s3/element.js.map
···
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/s3/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/s3/worker.js
···
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/s3/worker.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/s3/worker.js.map
···
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/s3/worker.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/common.js
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/common.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/common.js.map
···
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/output/common.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/polymorphic/indexed-db/constants.js
···
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/polymorphic/indexed-db/constants.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/polymorphic/indexed-db/constants.js.map
···
1
-
../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/output/polymorphic/indexed-db/constants.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/polymorphic/indexed-db/element.js
···
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/polymorphic/indexed-db/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/polymorphic/indexed-db/element.js.map
···
1
-
../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/output/polymorphic/indexed-db/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/polymorphic/indexed-db/worker.js
···
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/polymorphic/indexed-db/worker.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/polymorphic/indexed-db/worker.js.map
···
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/polymorphic/indexed-db/worker.js.map
···
0
-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
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/raw/atproto/element.js.map
···
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/raw/atproto/element.js.map
···
0
-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
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/raw/atproto/oauth.js.map
···
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/raw/atproto/oauth.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/artwork/constants.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/artwork/constants.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/artwork/constants.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/artwork/constants.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/artwork/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/artwork/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/artwork/element.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/artwork/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/artwork/worker.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/artwork/worker.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/artwork/worker.js.map
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/artwork/worker.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/metadata/common.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/metadata/common.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/metadata/common.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/metadata/common.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/metadata/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/metadata/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/metadata/element.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/metadata/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/metadata/worker.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/metadata/worker.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/metadata/worker.js.map
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/metadata/worker.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/search/constants.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/search/constants.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/search/constants.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/search/constants.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/search/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/search/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/search/element.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/search/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/search/worker.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/search/worker.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/search/worker.js.map
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/search/worker.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/base.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/base.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/base.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/transformer/output/base.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/automerge/constants.js
···
1
-
../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/bytes/automerge/constants.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/automerge/constants.js.map
···
1
-
../../../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/transformer/output/bytes/automerge/constants.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/automerge/element.js
···
1
-
../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/bytes/automerge/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/automerge/element.js.map
···
1
-
../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/bytes/automerge/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/automerge/utils.js
···
1
-
../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/bytes/automerge/utils.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/automerge/utils.js.map
···
1
-
../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/bytes/automerge/utils.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/json/element.js
···
1
-
../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/bytes/json/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/json/element.js.map
···
1
-
../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/bytes/json/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/refiner/default/element.js
···
1
-
../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/refiner/default/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/refiner/default/element.js.map
···
1
-
../../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/transformer/output/refiner/default/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/string/json/element.js
···
1
-
../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/string/json/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/string/json/element.js.map
···
1
-
../../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/transformer/output/string/json/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/definitions/index.ts
···
1
-
../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/definitions/index.ts
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/definitions/output/facet.json
···
1
-
../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/definitions/output/facet.json
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/definitions/output/playlist.json
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/definitions/output/playlist.json
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/definitions/output/theme.json
···
1
-
../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/definitions/output/theme.json
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/definitions/output/track.json
···
1
-
../../../bafybeiftdd7dlfoayxlckoz7nnnoun5ggr2p2biwnbnfn3zflg2drlkmca/definitions/output/track.json
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/examples/generate-playlist.html.txt
···
1
-
../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/facets/examples/generate-playlist.html.txt
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/examples/now-playing.html.txt
···
1
-
../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/facets/examples/now-playing.html.txt
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/index.html
···
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/facets/index.html
···
0
-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 & 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
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/index.js.map
···
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/facets/index.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/l/index.html
···
1
-
../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/facets/l/index.html
···
0
-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
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/l/index.js.map
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/facets/l/index.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/tools/auto-queue.html.txt
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/facets/tools/auto-queue.html.txt
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/tools/v3-import.html.txt
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/facets/tools/v3-import.html.txt
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/favicon-16x16.png
···
1
-
../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/favicon-16x16.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/favicon-32x32.png
···
1
-
../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/favicon-32x32.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/favicon.ico
···
1
-
../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/favicon.ico
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/fonts/CommitMonoVariable.woff2
···
1
-
../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/fonts/CommitMonoVariable.woff2
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/fonts/InterVariable-Italic.woff2
···
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/fonts/InterVariable-Italic.woff2
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/fonts/InterVariable.woff2
···
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/fonts/InterVariable.woff2
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/fonts/ms_sans_serif.woff2
···
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/ms_sans_serif.woff2
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/fonts/ms_sans_serif_bold.woff2
···
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/ms_sans_serif_bold.woff2
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/1.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/1.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/10.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/10.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/11.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/11.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/12.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/12.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/13.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/13.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/14.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/14.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/15.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/15.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/16.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/16.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/17.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/17.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/18.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/18.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/19.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/19.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/2.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/2.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/20.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/20.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/21.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/21.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/22.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/22.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/23.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/23.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/24.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/24.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/25.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/25.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/26.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/26.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/27.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/27.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/28.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/28.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/29.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/29.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/3.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/3.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/30.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/30.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/4.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/4.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/5.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/5.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/6.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/6.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/7.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/7.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/8.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/8.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/9.jpg
···
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/9.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/1.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/1.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/10.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/10.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/11.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/11.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/12.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/12.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/13.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/13.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/14.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/14.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/15.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/15.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/16.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/16.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/17.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/17.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/18.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/18.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/19.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/19.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/2.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/2.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/20.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/20.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/21.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/21.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/22.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/22.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/23.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/23.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/24.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/24.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/25.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/25.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/26.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/26.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/27.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/27.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/28.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/28.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/29.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/29.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/3.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/3.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/30.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/30.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/4.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/4.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/5.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/5.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/6.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/6.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/7.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/7.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/8.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/8.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/9.jpg
···
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/9.jpg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/diffuse-current.svg
···
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/diffuse-current.svg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/diffuse-dark.svg
···
1
-
../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse-dark.svg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/diffuse-grey.svg
···
1
-
../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse-grey.svg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/diffuse-light.svg
···
1
-
../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse-light.svg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/diffuse__icon-dark.svg
···
1
-
../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse__icon-dark.svg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/diffuse__icon-grey.svg
···
1
-
../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse__icon-grey.svg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/diffuse__icon-light.svg
···
1
-
../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse__icon-light.svg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icon-square-ws.png
···
1
-
../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/icon-square-ws.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icon-square.png
···
1
-
../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/icon-square.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icon.png
···
1
-
../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/icon.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/catalog-1.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/catalog-1.png
···
0
-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
···
0
-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
···
0
-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
···
0
-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
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/cd_drive-0.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/cd_drive-0.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/cd_drive_purple-3.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/cd_drive_purple-3.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/channels-2.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/channels-2.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/check-0.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/check-0.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/computer_sound-0.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/computer_sound-0.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/computer_user_pencil-0.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/computer_user_pencil-0.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/connected_world-0.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/connected_world-0.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_admin_tools-3.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_admin_tools-3.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_admin_tools-5.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_admin_tools-5.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_channels-2.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_channels-2.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_channels-3.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_channels-3.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_closed-3.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_closed-3.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_closed-4.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_closed-4.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_control_panel-2.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_control_panel-2.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_control_panel-3.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_control_panel-3.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_explorer-4.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_explorer-4.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_explorer-5.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_explorer-5.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_favorites-2.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_favorites-2.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_favorites-4.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_favorites-4.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_net_web-3.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_net_web-3.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_net_web-4.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_net_web-4.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_network_conn-3.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_network_conn-3.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_network_conn-5.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_network_conn-5.png
···
0
-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
···
0
-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
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/gears-0.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/gears-0.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/globe_map-0.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/globe_map-0.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/help_book_big-0.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/help_book_big-0.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/installer-3.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/installer-3.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/installer_generic_old-0.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/installer_generic_old-0.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/loudspeaker_wave-0.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/loudspeaker_wave-0.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/magnifying_glass-0.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/magnifying_glass-0.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/magnifying_glass_4-1.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/magnifying_glass_4-1.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/media_player-0.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/media_player-0.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/media_player_stream_no.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/media_player_stream_no.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/ms_dos-1.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/ms_dos-1.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/msg_error-0.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/msg_error-0.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/msg_information-0.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/msg_information-0.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/msg_question-0.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/msg_question-0.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/msg_warning-0.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/msg_warning-0.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/multimedia-4.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/multimedia-4.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/network_drive_world-0.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/network_drive_world-0.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/no-1.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/no-1.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/restrict-1.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/restrict-1.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/search_computer-0.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/search_computer-0.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/search_server-1.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/search_server-1.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/search_web-0.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/search_web-0.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/settings_gear-0.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/settings_gear-0.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/settings_gear-2.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/settings_gear-2.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/tip.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/tip.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/utopia_smiley.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/utopia_smiley.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/winamp2-32x32.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/winamp2-32x32.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/windows-0.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/windows-0.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/world-2.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/world-2.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/world-4.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/world-4.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/world_network_directories-3.png
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/world_network_directories-3.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/index.html
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/index.html
···
0
-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
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/index.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/index.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/mstile-150x150.png
···
1
-
../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/mstile-150x150.png
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/node_crypto-QYMDOTAM.js
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/node_crypto-QYMDOTAM.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/node_crypto-QYMDOTAM.js.map
···
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/node_crypto-QYMDOTAM.js.map
···
0
-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
-
}
···
0
0
0
0
0
0
0
0
0
0
0
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/safari-pinned-tab.svg
···
1
-
../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/safari-pinned-tab.svg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/animations.css
···
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/animations.css
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/animations.css.map
···
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/animations.css.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/base.css
···
1
-
../../bafybeiftdd7dlfoayxlckoz7nnnoun5ggr2p2biwnbnfn3zflg2drlkmca/styles/base.css
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/base.css.map
···
1
-
../../bafybeiftdd7dlfoayxlckoz7nnnoun5ggr2p2biwnbnfn3zflg2drlkmca/styles/base.css.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/diffuse/colors.css
···
1
-
../../../bafybeiftdd7dlfoayxlckoz7nnnoun5ggr2p2biwnbnfn3zflg2drlkmca/styles/diffuse/colors.css
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/diffuse/colors.css.map
···
1
-
../../../bafybeiftdd7dlfoayxlckoz7nnnoun5ggr2p2biwnbnfn3zflg2drlkmca/styles/diffuse/colors.css.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/diffuse/fonts.css
···
1
-
../../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/diffuse/fonts.css
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/diffuse/fonts.css.map
···
1
-
../../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/diffuse/fonts.css.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/diffuse/page.css
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/styles/diffuse/page.css
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/diffuse/page.css.map
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/styles/diffuse/page.css.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/font-faces.css
···
1
-
../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/font-faces.css
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/font-faces.css.map
···
1
-
../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/font-faces.css.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/reset.css
···
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/reset.css
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/reset.css.map
···
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/reset.css.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/variables.css
···
1
-
../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/variables.css
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/variables.css.map
···
1
-
../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/variables.css.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/98.css
···
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/98.css
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/98.css.map
···
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/98.css.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/ms_sans_serif.woff2
···
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/ms_sans_serif.woff2
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/ms_sans_serif_bold.woff2
···
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/ms_sans_serif_bold.woff2
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/bold/Phosphor-Bold.svg
···
1
-
../../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/styles/vendor/phosphor/bold/Phosphor-Bold.svg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/bold/Phosphor-Bold.ttf
···
1
-
../../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/styles/vendor/phosphor/bold/Phosphor-Bold.ttf
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/bold/Phosphor-Bold.woff
···
1
-
../../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/styles/vendor/phosphor/bold/Phosphor-Bold.woff
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/bold/Phosphor-Bold.woff2
···
1
-
../../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/styles/vendor/phosphor/bold/Phosphor-Bold.woff2
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/bold/style.css
···
1
-
../../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/styles/vendor/phosphor/bold/style.css
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/bold/style.css.map
···
1
-
../../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/styles/vendor/phosphor/bold/style.css.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/fill/Phosphor-Fill.svg
···
1
-
../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/Phosphor-Fill.svg
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/fill/Phosphor-Fill.ttf
···
1
-
../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/Phosphor-Fill.ttf
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/fill/Phosphor-Fill.woff
···
1
-
../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/Phosphor-Fill.woff
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/fill/Phosphor-Fill.woff2
···
1
-
../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/Phosphor-Fill.woff2
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/fill/style.css
···
1
-
../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/style.css
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/fill/style.css.map
···
1
-
../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/style.css.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/wireframe/ui.css
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/styles/wireframe/ui.css
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/wireframe/ui.css.map
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/styles/wireframe/ui.css.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/testing/index.html
···
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/testing/index.html
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/testing/output.js
···
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/testing/output.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/testing/output.js.map
···
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/testing/output.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/testing/output/index.html
···
1
-
../../../bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/testing/output/index.html
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/testing/sample/tracks.js
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/testing/sample/tracks.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/testing/sample/tracks.js.map
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/testing/sample/tracks.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/artwork-controller/element.css
···
1
-
../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/themes/blur/artwork-controller/element.css
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/artwork-controller/element.css.map
···
1
-
../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/themes/blur/artwork-controller/element.css.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/artwork-controller/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/blur/artwork-controller/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/artwork-controller/element.js.map
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/blur/artwork-controller/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/artwork-controller/facet.html.txt
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/blur/artwork-controller/facet.html.txt
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/index.css
···
1
-
../../../bafybeihr4brahqptxmxcdksktdfgs4hyl64odwx524vqmmitjvmn57sklq/themes/blur/index.css
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/index.css.map
···
1
-
../../../bafybeihr4brahqptxmxcdksktdfgs4hyl64odwx524vqmmitjvmn57sklq/themes/blur/index.css.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/index.html
···
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/blur/index.html
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/index.js
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/blur/index.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/index.js.map
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/blur/index.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/variables.css
···
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/blur/variables.css
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/variables.css.map
···
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/blur/variables.css.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/index.html
···
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/index.html
···
0
-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
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/index.js.map
···
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/index.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/l/index.css
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/l/index.css
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/l/index.css.map
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/l/index.css.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/l/index.html
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/l/index.html
···
0
-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
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/l/index.js.map
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/l/index.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/98-vars.css
···
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/98-vars.css
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/98-vars.css.map
···
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/98-vars.css.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/browser/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/browser/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/browser/element.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/browser/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/browser/facet.html.txt
···
1
-
../../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/themes/webamp/browser/facet.html.txt
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/common/ui.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/common/ui.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/common/ui.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/common/ui.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/configurators/input/element.js
···
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/configurators/input/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/configurators/input/element.js.map
···
1
-
../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/configurators/input/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/configurators/input/facet.html.txt
···
1
-
../../../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/themes/webamp/configurators/input/facet.html.txt
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/configurators/output/element.js
···
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/configurators/output/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/configurators/output/element.js.map
···
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/configurators/output/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/configurators/output/facet.html.txt
···
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/configurators/output/facet.html.txt
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/facet.css
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/facet.css
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/facet.css.map
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/facet.css.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/fonts.css
···
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/fonts.css
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/fonts.css.map
···
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/fonts.css.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/index.css
···
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/index.css
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/index.css.map
···
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/index.css.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/index.html
···
1
-
../../../bafybeihr4brahqptxmxcdksktdfgs4hyl64odwx524vqmmitjvmn57sklq/themes/webamp/index.html
···
0
-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
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/index.js.map
···
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/index.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/webamp/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/webamp/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/webamp/element.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/webamp/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/window-manager/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/window-manager/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/window-manager/element.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/window-manager/element.js.map
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/window/element.js
···
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/window/element.js
···
0
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/window/element.js.map
···
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/window/element.js.map
···
0
+2
-2
artifacts/versions.json
···
5
"version": "3.5.0"
6
},
7
"4.0.0-alpha": {
8
-
"cid": "bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha",
9
"createdAt": "2026-02-15T18:06:05.676Z",
10
"version": "4.0.0-alpha"
11
}
12
-
}
···
5
"version": "3.5.0"
6
},
7
"4.0.0-alpha": {
8
+
"cid": "bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu",
9
"createdAt": "2026-02-15T18:06:05.676Z",
10
"version": "4.0.0-alpha"
11
}
12
+
}
+7
-1
tasks/generate-redirects.ts
···
180
status: 302,
181
};
182
0
0
0
0
0
0
183
const root: Rule = {
184
from: "/",
185
to: `/${latestRelease.version}/`,
186
status: 302,
187
};
188
189
-
rules = [root, latest, latestHash, latestSplat, ...rules];
190
191
////////////////////////////////////////////
192
// `_redirects` file
···
180
status: 302,
181
};
182
183
+
const oauth: Rule = {
184
+
from: "/oauth-client-metadata.json",
185
+
to: `/${latestRelease.cid}/oauth-client-metadata.json`,
186
+
status: 200,
187
+
};
188
+
189
const root: Rule = {
190
from: "/",
191
to: `/${latestRelease.version}/`,
192
status: 302,
193
};
194
195
+
rules = [root, latest, latestHash, latestSplat, oauth, ...rules];
196
197
////////////////////////////////////////////
198
// `_redirects` file