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
11 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
103
"cid": "bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu",
104
104
"createdAt": "2026-02-15T17:54:33.360Z",
105
105
"version": "4.0.0-alpha"
106
106
-
},
107
107
-
"bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha": {
108
108
-
"cid": "bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha",
109
109
-
"createdAt": "2026-02-15T18:06:05.676Z",
110
110
-
"version": "4.0.0-alpha"
111
106
}
112
112
-
}
107
107
+
}
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/APEv2Parser-XSWP3VLW.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/APEv2Parser-XSWP3VLW.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/APEv2Parser-XSWP3VLW.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/APEv2Parser-XSWP3VLW.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/AiffParser-P2VIQSPW.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/AiffParser-P2VIQSPW.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/AiffParser-P2VIQSPW.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/AiffParser-P2VIQSPW.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/AsfParser-23UCSCFX.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/AsfParser-23UCSCFX.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/AsfParser-23UCSCFX.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/AsfParser-23UCSCFX.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/DsdiffParser-SNF4XUE4.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/DsdiffParser-SNF4XUE4.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/DsdiffParser-SNF4XUE4.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/DsdiffParser-SNF4XUE4.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/DsfParser-VKGYEZIA.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/DsfParser-VKGYEZIA.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/DsfParser-VKGYEZIA.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/DsfParser-VKGYEZIA.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/FlacParser-NCB7WTLK.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/FlacParser-NCB7WTLK.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/FlacParser-NCB7WTLK.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/FlacParser-NCB7WTLK.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MP4Parser-YVOQVBGY.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MP4Parser-YVOQVBGY.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MP4Parser-YVOQVBGY.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MP4Parser-YVOQVBGY.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MatroskaParser-AYAGCKYO.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MatroskaParser-AYAGCKYO.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MatroskaParser-AYAGCKYO.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MatroskaParser-AYAGCKYO.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MpegParser-7H5JCCCU.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MpegParser-7H5JCCCU.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MpegParser-7H5JCCCU.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MpegParser-7H5JCCCU.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MusepackParser-O32VPQOY.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MusepackParser-O32VPQOY.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/MusepackParser-O32VPQOY.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/MusepackParser-O32VPQOY.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/OggParser-3DWNAWIW.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/OggParser-3DWNAWIW.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/OggParser-3DWNAWIW.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/OggParser-3DWNAWIW.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/WavPackParser-7KWXBWCY.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/WavPackParser-7KWXBWCY.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/WavPackParser-7KWXBWCY.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/WavPackParser-7KWXBWCY.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/WaveParser-BYFTRQAV.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/WaveParser-BYFTRQAV.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/WaveParser-BYFTRQAV.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/WaveParser-BYFTRQAV.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/android-chrome-192x192.png
···
1
1
-
../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/android-chrome-192x192.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/android-chrome-512x512.png
···
1
1
-
../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/android-chrome-512x512.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/apple-touch-icon.png
···
1
1
-
../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/apple-touch-icon.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/browserconfig.xml
···
1
1
-
../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/browserconfig.xml
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-32QOJ2TM.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-32QOJ2TM.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-32QOJ2TM.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-32QOJ2TM.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-33EY7IZW.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-33EY7IZW.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-33EY7IZW.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-33EY7IZW.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-3CXPPL5Z.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-3CXPPL5Z.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-3CXPPL5Z.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-3CXPPL5Z.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-3W46CCB5.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-3W46CCB5.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-3W46CCB5.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-3W46CCB5.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-3WGC3A6G.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-3WGC3A6G.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-3WGC3A6G.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-3WGC3A6G.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-4UUOGUZ7.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-4UUOGUZ7.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-4UUOGUZ7.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-4UUOGUZ7.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-4YB6QUPN.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-4YB6QUPN.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-4YB6QUPN.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-4YB6QUPN.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-6DRHTH2U.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-6DRHTH2U.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-6DRHTH2U.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-6DRHTH2U.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-77DLAY6P.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-77DLAY6P.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-77DLAY6P.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-77DLAY6P.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-77ZY4GQV.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-77ZY4GQV.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-77ZY4GQV.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-77ZY4GQV.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-A7EWFKZ4.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-A7EWFKZ4.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-A7EWFKZ4.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-A7EWFKZ4.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-AC2OVIEU.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-AC2OVIEU.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-AC2OVIEU.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-AC2OVIEU.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-AGNDISJF.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-AGNDISJF.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-AGNDISJF.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-AGNDISJF.js.map
-3591
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-BP7OSAES.js
···
1
1
-
import {
2
2
-
webcrypto
3
3
-
} from "./chunk-77ZY4GQV.js";
4
4
-
import {
5
5
-
Buffer,
6
6
-
__commonJS,
7
7
-
__export,
8
8
-
__name,
9
9
-
__reExport,
10
10
-
__toESM,
11
11
-
init_Buffer,
12
12
-
init_process
13
13
-
} from "./chunk-FZQXS3RE.js";
14
14
-
15
15
-
// ../node_modules/.deno/@badrap+valita@0.4.6/node_modules/@badrap/valita/dist/node-cjs/index.js
16
16
-
var require_node_cjs = __commonJS({
17
17
-
"../node_modules/.deno/@badrap+valita@0.4.6/node_modules/@badrap/valita/dist/node-cjs/index.js"(exports) {
18
18
-
"use strict";
19
19
-
init_Buffer();
20
20
-
init_process();
21
21
-
Object.defineProperty(exports, "__esModule", { value: true });
22
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
23
-
exports.ok = ok3;
24
24
-
exports.err = err2;
25
25
-
function expectedType(expected) {
26
26
-
return {
27
27
-
ok: false,
28
28
-
code: "invalid_type",
29
29
-
expected
30
30
-
};
31
31
-
}
32
32
-
__name(expectedType, "expectedType");
33
33
-
var ISSUE_EXPECTED_NOTHING = expectedType([]);
34
34
-
var ISSUE_EXPECTED_STRING = expectedType(["string"]);
35
35
-
var ISSUE_EXPECTED_NUMBER = expectedType(["number"]);
36
36
-
var ISSUE_EXPECTED_BIGINT = expectedType(["bigint"]);
37
37
-
var ISSUE_EXPECTED_BOOLEAN = expectedType(["boolean"]);
38
38
-
var ISSUE_EXPECTED_UNDEFINED = expectedType(["undefined"]);
39
39
-
var ISSUE_EXPECTED_NULL = expectedType(["null"]);
40
40
-
var ISSUE_EXPECTED_OBJECT = expectedType(["object"]);
41
41
-
var ISSUE_EXPECTED_ARRAY = expectedType(["array"]);
42
42
-
var ISSUE_MISSING_VALUE = {
43
43
-
ok: false,
44
44
-
code: "missing_value"
45
45
-
};
46
46
-
function joinIssues(left, right) {
47
47
-
return left ? { ok: false, code: "join", left, right } : right;
48
48
-
}
49
49
-
__name(joinIssues, "joinIssues");
50
50
-
function prependPath(key, tree) {
51
51
-
return { ok: false, code: "prepend", key, tree };
52
52
-
}
53
53
-
__name(prependPath, "prependPath");
54
54
-
function cloneIssueWithPath(tree, path) {
55
55
-
const code = tree.code;
56
56
-
switch (code) {
57
57
-
case "invalid_type":
58
58
-
return { code, path, expected: tree.expected };
59
59
-
case "invalid_literal":
60
60
-
return { code, path, expected: tree.expected };
61
61
-
case "missing_value":
62
62
-
return { code, path };
63
63
-
case "invalid_length":
64
64
-
return {
65
65
-
code,
66
66
-
path,
67
67
-
minLength: tree.minLength,
68
68
-
maxLength: tree.maxLength
69
69
-
};
70
70
-
case "unrecognized_keys":
71
71
-
return { code, path, keys: tree.keys };
72
72
-
case "invalid_union":
73
73
-
return { code, path, tree: tree.tree, issues: collectIssues(tree.tree) };
74
74
-
case "custom_error":
75
75
-
if (typeof tree.error === "object" && tree.error.path !== void 0) {
76
76
-
path.push(...tree.error.path);
77
77
-
}
78
78
-
return {
79
79
-
code,
80
80
-
path,
81
81
-
message: typeof tree.error === "string" ? tree.error : tree.error?.message,
82
82
-
error: tree.error
83
83
-
};
84
84
-
}
85
85
-
}
86
86
-
__name(cloneIssueWithPath, "cloneIssueWithPath");
87
87
-
function collectIssues(tree, path = [], issues = []) {
88
88
-
for (; ; ) {
89
89
-
if (tree.code === "join") {
90
90
-
collectIssues(tree.left, path.slice(), issues);
91
91
-
tree = tree.right;
92
92
-
} else if (tree.code === "prepend") {
93
93
-
path.push(tree.key);
94
94
-
tree = tree.tree;
95
95
-
} else {
96
96
-
issues.push(cloneIssueWithPath(tree, path));
97
97
-
return issues;
98
98
-
}
99
99
-
}
100
100
-
}
101
101
-
__name(collectIssues, "collectIssues");
102
102
-
function separatedList(list, sep) {
103
103
-
if (list.length === 0) {
104
104
-
return "nothing";
105
105
-
} else if (list.length === 1) {
106
106
-
return list[0];
107
107
-
} else {
108
108
-
return `${list.slice(0, -1).join(", ")} ${sep} ${list[list.length - 1]}`;
109
109
-
}
110
110
-
}
111
111
-
__name(separatedList, "separatedList");
112
112
-
function formatLiteral(value) {
113
113
-
return typeof value === "bigint" ? `${value}n` : JSON.stringify(value);
114
114
-
}
115
115
-
__name(formatLiteral, "formatLiteral");
116
116
-
function countIssues(tree) {
117
117
-
let count = 0;
118
118
-
for (; ; ) {
119
119
-
if (tree.code === "join") {
120
120
-
count += countIssues(tree.left);
121
121
-
tree = tree.right;
122
122
-
} else if (tree.code === "prepend") {
123
123
-
tree = tree.tree;
124
124
-
} else {
125
125
-
return count + 1;
126
126
-
}
127
127
-
}
128
128
-
}
129
129
-
__name(countIssues, "countIssues");
130
130
-
function formatIssueTree(tree) {
131
131
-
let path = "";
132
132
-
let count = 0;
133
133
-
for (; ; ) {
134
134
-
if (tree.code === "join") {
135
135
-
count += countIssues(tree.right);
136
136
-
tree = tree.left;
137
137
-
} else if (tree.code === "prepend") {
138
138
-
path += `.${tree.key}`;
139
139
-
tree = tree.tree;
140
140
-
} else {
141
141
-
break;
142
142
-
}
143
143
-
}
144
144
-
let message = "validation failed";
145
145
-
if (tree.code === "invalid_type") {
146
146
-
message = `expected ${separatedList(tree.expected, "or")}`;
147
147
-
} else if (tree.code === "invalid_literal") {
148
148
-
message = `expected ${separatedList(tree.expected.map(formatLiteral), "or")}`;
149
149
-
} else if (tree.code === "missing_value") {
150
150
-
message = `missing value`;
151
151
-
} else if (tree.code === "unrecognized_keys") {
152
152
-
const keys = tree.keys;
153
153
-
message = `unrecognized ${keys.length === 1 ? "key" : "keys"} ${separatedList(keys.map(formatLiteral), "and")}`;
154
154
-
} else if (tree.code === "invalid_length") {
155
155
-
const min = tree.minLength;
156
156
-
const max = tree.maxLength;
157
157
-
message = `expected an array with `;
158
158
-
if (min > 0) {
159
159
-
if (max === min) {
160
160
-
message += `${min}`;
161
161
-
} else if (max !== void 0) {
162
162
-
message += `between ${min} and ${max}`;
163
163
-
} else {
164
164
-
message += `at least ${min}`;
165
165
-
}
166
166
-
} else {
167
167
-
message += `at most ${max ?? "\u221E"}`;
168
168
-
}
169
169
-
message += ` item(s)`;
170
170
-
} else if (tree.code === "custom_error") {
171
171
-
const error = tree.error;
172
172
-
if (typeof error === "string") {
173
173
-
message = error;
174
174
-
} else if (error !== void 0) {
175
175
-
if (error.message !== void 0) {
176
176
-
message = error.message;
177
177
-
}
178
178
-
if (error.path !== void 0) {
179
179
-
path += "." + error.path.join(".");
180
180
-
}
181
181
-
}
182
182
-
}
183
183
-
let msg = `${tree.code} at .${path.slice(1)} (${message})`;
184
184
-
if (count === 1) {
185
185
-
msg += ` (+ 1 other issue)`;
186
186
-
} else if (count > 1) {
187
187
-
msg += ` (+ ${count} other issues)`;
188
188
-
}
189
189
-
return msg;
190
190
-
}
191
191
-
__name(formatIssueTree, "formatIssueTree");
192
192
-
function lazyProperty(obj, prop, value, enumerable) {
193
193
-
Object.defineProperty(obj, prop, {
194
194
-
value,
195
195
-
enumerable,
196
196
-
writable: false
197
197
-
});
198
198
-
return value;
199
199
-
}
200
200
-
__name(lazyProperty, "lazyProperty");
201
201
-
var ValitaError2 = class extends Error {
202
202
-
static {
203
203
-
__name(this, "ValitaError");
204
204
-
}
205
205
-
constructor(issueTree) {
206
206
-
super(formatIssueTree(issueTree));
207
207
-
Object.setPrototypeOf(this, new.target.prototype);
208
208
-
this.name = new.target.name;
209
209
-
this._issueTree = issueTree;
210
210
-
}
211
211
-
get issues() {
212
212
-
return lazyProperty(this, "issues", collectIssues(this._issueTree), true);
213
213
-
}
214
214
-
};
215
215
-
exports.ValitaError = ValitaError2;
216
216
-
var ErrImpl = class {
217
217
-
static {
218
218
-
__name(this, "ErrImpl");
219
219
-
}
220
220
-
constructor(issueTree) {
221
221
-
this.ok = false;
222
222
-
this._issueTree = issueTree;
223
223
-
}
224
224
-
get issues() {
225
225
-
return lazyProperty(this, "issues", collectIssues(this._issueTree), true);
226
226
-
}
227
227
-
get message() {
228
228
-
return lazyProperty(this, "message", formatIssueTree(this._issueTree), true);
229
229
-
}
230
230
-
throw() {
231
231
-
throw new ValitaError2(this._issueTree);
232
232
-
}
233
233
-
};
234
234
-
function ok3(value) {
235
235
-
return { ok: true, value };
236
236
-
}
237
237
-
__name(ok3, "ok");
238
238
-
function err2(error) {
239
239
-
return new ErrImpl({ ok: false, code: "custom_error", error });
240
240
-
}
241
241
-
__name(err2, "err");
242
242
-
function isObject(v) {
243
243
-
return typeof v === "object" && v !== null && !Array.isArray(v);
244
244
-
}
245
245
-
__name(isObject, "isObject");
246
246
-
var FLAG_FORBID_EXTRA_KEYS = 1 << 0;
247
247
-
var FLAG_STRIP_EXTRA_KEYS = 1 << 1;
248
248
-
var FLAG_MISSING_VALUE = 1 << 2;
249
249
-
var TAG_UNKNOWN = 0;
250
250
-
var TAG_NEVER = 1;
251
251
-
var TAG_STRING = 2;
252
252
-
var TAG_NUMBER = 3;
253
253
-
var TAG_BIGINT = 4;
254
254
-
var TAG_BOOLEAN = 5;
255
255
-
var TAG_NULL = 6;
256
256
-
var TAG_UNDEFINED = 7;
257
257
-
var TAG_LITERAL = 8;
258
258
-
var TAG_OPTIONAL = 9;
259
259
-
var TAG_OBJECT = 10;
260
260
-
var TAG_ARRAY = 11;
261
261
-
var TAG_UNION = 12;
262
262
-
var TAG_SIMPLE_UNION = 13;
263
263
-
var TAG_TRANSFORM = 14;
264
264
-
var TAG_OTHER = 15;
265
265
-
var taggedMatcher = /* @__PURE__ */ __name((tag, match) => {
266
266
-
return { tag, match };
267
267
-
}, "taggedMatcher");
268
268
-
function callMatcher(matcher, value, flags) {
269
269
-
switch (matcher.tag) {
270
270
-
case TAG_UNKNOWN:
271
271
-
return void 0;
272
272
-
case TAG_NEVER:
273
273
-
return ISSUE_EXPECTED_NOTHING;
274
274
-
case TAG_STRING:
275
275
-
return typeof value === "string" ? void 0 : ISSUE_EXPECTED_STRING;
276
276
-
case TAG_NUMBER:
277
277
-
return typeof value === "number" ? void 0 : ISSUE_EXPECTED_NUMBER;
278
278
-
case TAG_BIGINT:
279
279
-
return typeof value === "bigint" ? void 0 : ISSUE_EXPECTED_BIGINT;
280
280
-
case TAG_BOOLEAN:
281
281
-
return typeof value === "boolean" ? void 0 : ISSUE_EXPECTED_BOOLEAN;
282
282
-
case TAG_NULL:
283
283
-
return value === null ? void 0 : ISSUE_EXPECTED_NULL;
284
284
-
case TAG_UNDEFINED:
285
285
-
return value === void 0 ? void 0 : ISSUE_EXPECTED_UNDEFINED;
286
286
-
case TAG_LITERAL:
287
287
-
return matcher.match(value, flags);
288
288
-
case TAG_OPTIONAL:
289
289
-
return matcher.match(value, flags);
290
290
-
case TAG_OBJECT:
291
291
-
return matcher.match(value, flags);
292
292
-
case TAG_ARRAY:
293
293
-
return matcher.match(value, flags);
294
294
-
case TAG_UNION:
295
295
-
return matcher.match(value, flags);
296
296
-
case TAG_SIMPLE_UNION:
297
297
-
return matcher.match(value, flags);
298
298
-
case TAG_TRANSFORM:
299
299
-
return matcher.match(value, flags);
300
300
-
default:
301
301
-
return matcher.match(value, flags);
302
302
-
}
303
303
-
}
304
304
-
__name(callMatcher, "callMatcher");
305
305
-
var MATCHER_SYMBOL = /* @__PURE__ */ Symbol.for("@valita/internal");
306
306
-
var AbstractType = class {
307
307
-
static {
308
308
-
__name(this, "AbstractType");
309
309
-
}
310
310
-
default(defaultValue) {
311
311
-
const defaultResult = ok3(defaultValue);
312
312
-
return new TransformType(this.optional(), (v) => {
313
313
-
return v === void 0 ? defaultResult : void 0;
314
314
-
});
315
315
-
}
316
316
-
/**
317
317
-
* Derive a new validator that uses the provided predicate function to
318
318
-
* perform custom validation for the source validator's output values.
319
319
-
*
320
320
-
* The predicate function should return `true` when the source
321
321
-
* type's output value is valid, `false` otherwise. The checked value
322
322
-
* itself won't get modified or replaced, and is returned as-is on
323
323
-
* validation success.
324
324
-
*
325
325
-
* @example A validator that accepts only numeric strings.
326
326
-
* ```ts
327
327
-
* const numericString = v.string().assert((s) => /^\d+$/.test(s))
328
328
-
* numericString.parse("1");
329
329
-
* // "1"
330
330
-
* numericString.parse("foo");
331
331
-
* // ValitaError: custom_error at . (validation failed)
332
332
-
* ```
333
333
-
*
334
334
-
* You can also _refine_ the output type by passing in a
335
335
-
* [type predicate](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates).
336
336
-
* Note that the type predicate must have a compatible input type.
337
337
-
*
338
338
-
* @example A validator with its output type refined to `Date`.
339
339
-
* ```ts
340
340
-
* const dateType = v.unknown().assert((v): v is Date => v instanceof Date);
341
341
-
* ```
342
342
-
*
343
343
-
* You can also pass in a custom failure messages.
344
344
-
*
345
345
-
* @example A validator that rejects non-integers with a custom error.
346
346
-
* ```ts
347
347
-
* const integer = v.number().assert((n) => Number.isInteger(n), "not an integer");
348
348
-
* integer.parse(1);
349
349
-
* // 1
350
350
-
* integer.parse(1.5);
351
351
-
* // ValitaError: custom_error at . (not an integer)
352
352
-
* ```
353
353
-
*
354
354
-
* @param func - The assertion predicate function.
355
355
-
* @param [error] - A custom error for situations when the assertion
356
356
-
* predicate returns `false`.
357
357
-
*/
358
358
-
assert(func, error) {
359
359
-
const err3 = { ok: false, code: "custom_error", error };
360
360
-
return new TransformType(this, (v, flags) => func(v, flagsToOptions(flags)) ? void 0 : err3);
361
361
-
}
362
362
-
map(func) {
363
363
-
return new TransformType(this, (v, flags) => ({
364
364
-
ok: true,
365
365
-
value: func(v, flagsToOptions(flags))
366
366
-
}));
367
367
-
}
368
368
-
chain(input) {
369
369
-
if (typeof input === "function") {
370
370
-
return new TransformType(this, (v, flags) => {
371
371
-
const r = input(v, flagsToOptions(flags));
372
372
-
return r.ok ? r : r._issueTree;
373
373
-
});
374
374
-
}
375
375
-
return new TransformType(this, (v, flags) => callMatcher(input[MATCHER_SYMBOL], v, flags));
376
376
-
}
377
377
-
};
378
378
-
var Type = class extends AbstractType {
379
379
-
static {
380
380
-
__name(this, "Type");
381
381
-
}
382
382
-
optional(defaultFn) {
383
383
-
const optional = new Optional(this);
384
384
-
if (!defaultFn) {
385
385
-
return optional;
386
386
-
}
387
387
-
return new TransformType(optional, (v) => {
388
388
-
return v === void 0 ? { ok: true, value: defaultFn() } : void 0;
389
389
-
});
390
390
-
}
391
391
-
nullable(defaultFn) {
392
392
-
const nullable = new SimpleUnion([null_(), this]);
393
393
-
if (!defaultFn) {
394
394
-
return nullable;
395
395
-
}
396
396
-
return new TransformType(nullable, (v) => {
397
397
-
return v === null ? { ok: true, value: defaultFn() } : void 0;
398
398
-
});
399
399
-
}
400
400
-
_toTerminals(func) {
401
401
-
func(this);
402
402
-
}
403
403
-
/**
404
404
-
* Parse a value without throwing.
405
405
-
*/
406
406
-
try(v, options) {
407
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
408
-
return r === void 0 || r.ok ? { ok: true, value: r === void 0 ? v : r.value } : new ErrImpl(r);
409
409
-
}
410
410
-
/**
411
411
-
* Parse a value. Throw a ValitaError on failure.
412
412
-
*/
413
413
-
parse(v, options) {
414
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
415
-
if (r === void 0 || r.ok) {
416
416
-
return r === void 0 ? v : r.value;
417
417
-
}
418
418
-
throw new ValitaError2(r);
419
419
-
}
420
420
-
};
421
421
-
var SimpleUnion = class extends Type {
422
422
-
static {
423
423
-
__name(this, "SimpleUnion");
424
424
-
}
425
425
-
constructor(options) {
426
426
-
super();
427
427
-
this.name = "union";
428
428
-
this.options = options;
429
429
-
}
430
430
-
get [MATCHER_SYMBOL]() {
431
431
-
const options = this.options.map((o) => o[MATCHER_SYMBOL]);
432
432
-
return lazyProperty(this, MATCHER_SYMBOL, taggedMatcher(TAG_SIMPLE_UNION, (v, flags) => {
433
433
-
let issue = ISSUE_EXPECTED_NOTHING;
434
434
-
for (const option of options) {
435
435
-
const result = callMatcher(option, v, flags);
436
436
-
if (result === void 0 || result.ok) {
437
437
-
return result;
438
438
-
}
439
439
-
issue = result;
440
440
-
}
441
441
-
return issue;
442
442
-
}), false);
443
443
-
}
444
444
-
_toTerminals(func) {
445
445
-
for (const option of this.options) {
446
446
-
option._toTerminals(func);
447
447
-
}
448
448
-
}
449
449
-
};
450
450
-
var Optional = class extends AbstractType {
451
451
-
static {
452
452
-
__name(this, "Optional");
453
453
-
}
454
454
-
constructor(type) {
455
455
-
super();
456
456
-
this.name = "optional";
457
457
-
this.type = type;
458
458
-
}
459
459
-
optional(defaultFn) {
460
460
-
if (!defaultFn) {
461
461
-
return this;
462
462
-
}
463
463
-
return new TransformType(this, (v) => {
464
464
-
return v === void 0 ? { ok: true, value: defaultFn() } : void 0;
465
465
-
});
466
466
-
}
467
467
-
get [MATCHER_SYMBOL]() {
468
468
-
const matcher = this.type[MATCHER_SYMBOL];
469
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
470
-
}
471
471
-
_toTerminals(func) {
472
472
-
func(this);
473
473
-
func(undefined_());
474
474
-
this.type._toTerminals(func);
475
475
-
}
476
476
-
};
477
477
-
function setBit(bits, index) {
478
478
-
if (typeof bits !== "number") {
479
479
-
const idx = index >> 5;
480
480
-
for (let i = bits.length; i <= idx; i++) {
481
481
-
bits.push(0);
482
482
-
}
483
483
-
bits[idx] |= 1 << index % 32;
484
484
-
return bits;
485
485
-
} else if (index < 32) {
486
486
-
return bits | 1 << index;
487
487
-
} else {
488
488
-
return setBit([bits, 0], index);
489
489
-
}
490
490
-
}
491
491
-
__name(setBit, "setBit");
492
492
-
function getBit(bits, index) {
493
493
-
if (typeof bits === "number") {
494
494
-
return index < 32 ? bits >>> index & 1 : 0;
495
495
-
} else {
496
496
-
return bits[index >> 5] >>> index % 32 & 1;
497
497
-
}
498
498
-
}
499
499
-
__name(getBit, "getBit");
500
500
-
var ObjectType = class _ObjectType extends Type {
501
501
-
static {
502
502
-
__name(this, "ObjectType");
503
503
-
}
504
504
-
constructor(shape, restType, checks) {
505
505
-
super();
506
506
-
this.name = "object";
507
507
-
this.shape = shape;
508
508
-
this._restType = restType;
509
509
-
this._checks = checks;
510
510
-
}
511
511
-
get [MATCHER_SYMBOL]() {
512
512
-
const func = createObjectMatcher(this.shape, this._restType, this._checks);
513
513
-
return lazyProperty(this, MATCHER_SYMBOL, taggedMatcher(TAG_OBJECT, (v, flags) => isObject(v) ? func(v, flags) : ISSUE_EXPECTED_OBJECT), false);
514
514
-
}
515
515
-
check(func, error) {
516
516
-
const issue = { ok: false, code: "custom_error", error };
517
517
-
return new _ObjectType(this.shape, this._restType, [
518
518
-
...this._checks ?? [],
519
519
-
{
520
520
-
func,
521
521
-
issue
522
522
-
}
523
523
-
]);
524
524
-
}
525
525
-
rest(restType) {
526
526
-
return new _ObjectType(this.shape, restType);
527
527
-
}
528
528
-
extend(shape) {
529
529
-
return new _ObjectType({ ...this.shape, ...shape }, this._restType);
530
530
-
}
531
531
-
pick(...keys) {
532
532
-
const shape = {};
533
533
-
for (const key of keys) {
534
534
-
set(shape, key, this.shape[key]);
535
535
-
}
536
536
-
return new _ObjectType(shape, void 0);
537
537
-
}
538
538
-
omit(...keys) {
539
539
-
const shape = { ...this.shape };
540
540
-
for (const key of keys) {
541
541
-
delete shape[key];
542
542
-
}
543
543
-
return new _ObjectType(shape, this._restType);
544
544
-
}
545
545
-
partial() {
546
546
-
const shape = {};
547
547
-
for (const key of Object.keys(this.shape)) {
548
548
-
set(shape, key, this.shape[key].optional());
549
549
-
}
550
550
-
const rest = this._restType?.optional();
551
551
-
return new _ObjectType(shape, rest);
552
552
-
}
553
553
-
};
554
554
-
function set(obj, key, value) {
555
555
-
if (key === "__proto__") {
556
556
-
Object.defineProperty(obj, key, {
557
557
-
value,
558
558
-
writable: true,
559
559
-
enumerable: true,
560
560
-
configurable: true
561
561
-
});
562
562
-
} else {
563
563
-
obj[key] = value;
564
564
-
}
565
565
-
}
566
566
-
__name(set, "set");
567
567
-
function createObjectMatcher(shape, rest, checks) {
568
568
-
const indexedEntries = Object.keys(shape).map((key, index) => {
569
569
-
const type = shape[key];
570
570
-
let optional = false;
571
571
-
type._toTerminals((t) => {
572
572
-
optional ||= t.name === "optional";
573
573
-
});
574
574
-
return {
575
575
-
key,
576
576
-
index,
577
577
-
matcher: type[MATCHER_SYMBOL],
578
578
-
optional,
579
579
-
missing: prependPath(key, ISSUE_MISSING_VALUE)
580
580
-
};
581
581
-
});
582
582
-
const keyedEntries = /* @__PURE__ */ Object.create(null);
583
583
-
for (const entry of indexedEntries) {
584
584
-
keyedEntries[entry.key] = entry;
585
585
-
}
586
586
-
const restMatcher = rest?.[MATCHER_SYMBOL];
587
587
-
const fastPath = indexedEntries.length === 0 && rest?.name === "unknown" && checks === void 0;
588
588
-
return (obj, flags) => {
589
589
-
if (fastPath) {
590
590
-
return void 0;
591
591
-
}
592
592
-
let output = void 0;
593
593
-
let issues = void 0;
594
594
-
let unrecognized = void 0;
595
595
-
let seenBits = 0;
596
596
-
let seenCount = 0;
597
597
-
if (flags & (FLAG_FORBID_EXTRA_KEYS | FLAG_STRIP_EXTRA_KEYS) || restMatcher !== void 0) {
598
598
-
for (const key in obj) {
599
599
-
const value = obj[key];
600
600
-
const entry = keyedEntries[key];
601
601
-
if (entry === void 0 && restMatcher === void 0) {
602
602
-
if (flags & FLAG_FORBID_EXTRA_KEYS) {
603
603
-
if (unrecognized === void 0) {
604
604
-
unrecognized = [key];
605
605
-
issues = joinIssues(issues, {
606
606
-
ok: false,
607
607
-
code: "unrecognized_keys",
608
608
-
keys: unrecognized
609
609
-
});
610
610
-
} else {
611
611
-
unrecognized.push(key);
612
612
-
}
613
613
-
} else if (flags & FLAG_STRIP_EXTRA_KEYS && issues === void 0 && output === void 0) {
614
614
-
output = {};
615
615
-
for (let m = 0; m < indexedEntries.length; m++) {
616
616
-
if (getBit(seenBits, m)) {
617
617
-
const k = indexedEntries[m].key;
618
618
-
set(output, k, obj[k]);
619
619
-
}
620
620
-
}
621
621
-
}
622
622
-
continue;
623
623
-
}
624
624
-
const r = entry === void 0 ? callMatcher(restMatcher, value, flags) : callMatcher(entry.matcher, value, flags);
625
625
-
if (r === void 0) {
626
626
-
if (output !== void 0 && issues === void 0) {
627
627
-
set(output, key, value);
628
628
-
}
629
629
-
} else if (!r.ok) {
630
630
-
issues = joinIssues(issues, prependPath(key, r));
631
631
-
} else if (issues === void 0) {
632
632
-
if (output === void 0) {
633
633
-
output = {};
634
634
-
if (restMatcher === void 0) {
635
635
-
for (let m = 0; m < indexedEntries.length; m++) {
636
636
-
if (getBit(seenBits, m)) {
637
637
-
const k = indexedEntries[m].key;
638
638
-
set(output, k, obj[k]);
639
639
-
}
640
640
-
}
641
641
-
} else {
642
642
-
for (const k in obj) {
643
643
-
set(output, k, obj[k]);
644
644
-
}
645
645
-
}
646
646
-
}
647
647
-
set(output, key, r.value);
648
648
-
}
649
649
-
if (entry !== void 0) {
650
650
-
seenCount++;
651
651
-
seenBits = setBit(seenBits, entry.index);
652
652
-
}
653
653
-
}
654
654
-
}
655
655
-
if (seenCount < indexedEntries.length) {
656
656
-
for (let i = 0; i < indexedEntries.length; i++) {
657
657
-
if (getBit(seenBits, i)) {
658
658
-
continue;
659
659
-
}
660
660
-
const entry = indexedEntries[i];
661
661
-
const value = obj[entry.key];
662
662
-
let extraFlags = 0;
663
663
-
if (value === void 0 && !(entry.key in obj)) {
664
664
-
if (!entry.optional) {
665
665
-
issues = joinIssues(issues, entry.missing);
666
666
-
continue;
667
667
-
}
668
668
-
extraFlags = FLAG_MISSING_VALUE;
669
669
-
}
670
670
-
const r = callMatcher(entry.matcher, value, flags | extraFlags);
671
671
-
if (r === void 0) {
672
672
-
if (output !== void 0 && issues === void 0 && !extraFlags) {
673
673
-
set(output, entry.key, value);
674
674
-
}
675
675
-
} else if (!r.ok) {
676
676
-
issues = joinIssues(issues, prependPath(entry.key, r));
677
677
-
} else if (issues === void 0) {
678
678
-
if (output === void 0) {
679
679
-
output = {};
680
680
-
if (restMatcher === void 0) {
681
681
-
for (let m = 0; m < indexedEntries.length; m++) {
682
682
-
if (m < i || getBit(seenBits, m)) {
683
683
-
const k = indexedEntries[m].key;
684
684
-
set(output, k, obj[k]);
685
685
-
}
686
686
-
}
687
687
-
} else {
688
688
-
for (const k in obj) {
689
689
-
set(output, k, obj[k]);
690
690
-
}
691
691
-
for (let m = 0; m < i; m++) {
692
692
-
if (!getBit(seenBits, m)) {
693
693
-
const k = indexedEntries[m].key;
694
694
-
set(output, k, obj[k]);
695
695
-
}
696
696
-
}
697
697
-
}
698
698
-
}
699
699
-
set(output, entry.key, r.value);
700
700
-
}
701
701
-
}
702
702
-
}
703
703
-
if (issues !== void 0) {
704
704
-
return issues;
705
705
-
}
706
706
-
if (checks !== void 0) {
707
707
-
for (const { func, issue } of checks) {
708
708
-
if (!func(output ?? obj)) {
709
709
-
return issue;
710
710
-
}
711
711
-
}
712
712
-
}
713
713
-
return output && { ok: true, value: output };
714
714
-
};
715
715
-
}
716
716
-
__name(createObjectMatcher, "createObjectMatcher");
717
717
-
var ArrayOrTupleType = class _ArrayOrTupleType extends Type {
718
718
-
static {
719
719
-
__name(this, "ArrayOrTupleType");
720
720
-
}
721
721
-
constructor(prefix, rest, suffix) {
722
722
-
super();
723
723
-
this.name = "array";
724
724
-
this._prefix = prefix;
725
725
-
this._rest = rest;
726
726
-
this._suffix = suffix;
727
727
-
}
728
728
-
get [MATCHER_SYMBOL]() {
729
729
-
const prefix = this._prefix.map((t) => t[MATCHER_SYMBOL]);
730
730
-
const suffix = this._suffix.map((t) => t[MATCHER_SYMBOL]);
731
731
-
const rest = this._rest?.[MATCHER_SYMBOL] ?? taggedMatcher(1, () => ISSUE_MISSING_VALUE);
732
732
-
const minLength = prefix.length + suffix.length;
733
733
-
const maxLength = this._rest ? Infinity : minLength;
734
734
-
const invalidLength = {
735
735
-
ok: false,
736
736
-
code: "invalid_length",
737
737
-
minLength,
738
738
-
maxLength: maxLength === Infinity ? void 0 : maxLength
739
739
-
};
740
740
-
return lazyProperty(this, MATCHER_SYMBOL, taggedMatcher(TAG_ARRAY, (arr, flags) => {
741
741
-
if (!Array.isArray(arr)) {
742
742
-
return ISSUE_EXPECTED_ARRAY;
743
743
-
}
744
744
-
const length = arr.length;
745
745
-
if (length < minLength || length > maxLength) {
746
746
-
return invalidLength;
747
747
-
}
748
748
-
const headEnd = prefix.length;
749
749
-
const tailStart = arr.length - suffix.length;
750
750
-
let issueTree = void 0;
751
751
-
let output = arr;
752
752
-
for (let i = 0; i < arr.length; i++) {
753
753
-
const entry = i < headEnd ? prefix[i] : i >= tailStart ? suffix[i - tailStart] : rest;
754
754
-
const r = callMatcher(entry, arr[i], flags);
755
755
-
if (r !== void 0) {
756
756
-
if (r.ok) {
757
757
-
if (output === arr) {
758
758
-
output = arr.slice();
759
759
-
}
760
760
-
output[i] = r.value;
761
761
-
} else {
762
762
-
issueTree = joinIssues(issueTree, prependPath(i, r));
763
763
-
}
764
764
-
}
765
765
-
}
766
766
-
if (issueTree) {
767
767
-
return issueTree;
768
768
-
} else if (arr === output) {
769
769
-
return void 0;
770
770
-
} else {
771
771
-
return { ok: true, value: output };
772
772
-
}
773
773
-
}), false);
774
774
-
}
775
775
-
concat(type) {
776
776
-
if (this._rest) {
777
777
-
if (type._rest) {
778
778
-
throw new TypeError("can not concatenate two variadic types");
779
779
-
}
780
780
-
return new _ArrayOrTupleType(this._prefix, this._rest, [
781
781
-
...this._suffix,
782
782
-
...type._prefix,
783
783
-
...type._suffix
784
784
-
]);
785
785
-
} else if (type._rest) {
786
786
-
return new _ArrayOrTupleType([...this._prefix, ...this._suffix, ...type._prefix], type._rest, type._suffix);
787
787
-
} else {
788
788
-
return new _ArrayOrTupleType([...this._prefix, ...this._suffix, ...type._prefix, ...type._suffix], type._rest, type._suffix);
789
789
-
}
790
790
-
}
791
791
-
};
792
792
-
function toInputType(v) {
793
793
-
const type = typeof v;
794
794
-
if (type !== "object") {
795
795
-
return type;
796
796
-
} else if (v === null) {
797
797
-
return "null";
798
798
-
} else if (Array.isArray(v)) {
799
799
-
return "array";
800
800
-
} else {
801
801
-
return type;
802
802
-
}
803
803
-
}
804
804
-
__name(toInputType, "toInputType");
805
805
-
function dedup(arr) {
806
806
-
return [...new Set(arr)];
807
807
-
}
808
808
-
__name(dedup, "dedup");
809
809
-
function groupTerminals(terminals) {
810
810
-
const order = /* @__PURE__ */ new Map();
811
811
-
const literals = /* @__PURE__ */ new Map();
812
812
-
const types = /* @__PURE__ */ new Map();
813
813
-
const unknowns = [];
814
814
-
const optionals = [];
815
815
-
const expectedTypes = [];
816
816
-
for (const { root, terminal } of terminals) {
817
817
-
order.set(root, order.get(root) ?? order.size);
818
818
-
if (terminal.name === "never") {
819
819
-
} else if (terminal.name === "optional") {
820
820
-
optionals.push(root);
821
821
-
} else if (terminal.name === "unknown") {
822
822
-
unknowns.push(root);
823
823
-
} else if (terminal.name === "literal") {
824
824
-
const roots = literals.get(terminal.value) ?? [];
825
825
-
roots.push(root);
826
826
-
literals.set(terminal.value, roots);
827
827
-
expectedTypes.push(toInputType(terminal.value));
828
828
-
} else {
829
829
-
const roots = types.get(terminal.name) ?? [];
830
830
-
roots.push(root);
831
831
-
types.set(terminal.name, roots);
832
832
-
expectedTypes.push(terminal.name);
833
833
-
}
834
834
-
}
835
835
-
const byOrder = /* @__PURE__ */ __name((a, b) => {
836
836
-
return (order.get(a) ?? 0) - (order.get(b) ?? 0);
837
837
-
}, "byOrder");
838
838
-
for (const [value, roots] of literals) {
839
839
-
const options = types.get(toInputType(value));
840
840
-
if (options) {
841
841
-
options.push(...roots);
842
842
-
literals.delete(value);
843
843
-
} else {
844
844
-
literals.set(value, dedup(roots.concat(unknowns)).sort(byOrder));
845
845
-
}
846
846
-
}
847
847
-
for (const [type, roots] of types) {
848
848
-
types.set(type, dedup(roots.concat(unknowns)).sort(byOrder));
849
849
-
}
850
850
-
return {
851
851
-
types,
852
852
-
literals,
853
853
-
unknowns: dedup(unknowns).sort(byOrder),
854
854
-
optionals: dedup(optionals).sort(byOrder),
855
855
-
expectedTypes: dedup(expectedTypes)
856
856
-
};
857
857
-
}
858
858
-
__name(groupTerminals, "groupTerminals");
859
859
-
function createObjectKeyMatcher(objects, key) {
860
860
-
const list = [];
861
861
-
for (const { root, terminal } of objects) {
862
862
-
terminal.shape[key]._toTerminals((t) => list.push({ root, terminal: t }));
863
863
-
}
864
864
-
const { types, literals, optionals, unknowns, expectedTypes } = groupTerminals(list);
865
865
-
if (unknowns.length > 0 || optionals.length > 1) {
866
866
-
return void 0;
867
867
-
}
868
868
-
for (const roots of literals.values()) {
869
869
-
if (roots.length > 1) {
870
870
-
return void 0;
871
871
-
}
872
872
-
}
873
873
-
for (const roots of types.values()) {
874
874
-
if (roots.length > 1) {
875
875
-
return void 0;
876
876
-
}
877
877
-
}
878
878
-
const missingValue = prependPath(key, ISSUE_MISSING_VALUE);
879
879
-
const issue = prependPath(key, types.size === 0 ? {
880
880
-
ok: false,
881
881
-
code: "invalid_literal",
882
882
-
expected: [...literals.keys()]
883
883
-
} : {
884
884
-
ok: false,
885
885
-
code: "invalid_type",
886
886
-
expected: expectedTypes
887
887
-
});
888
888
-
const byLiteral = literals.size > 0 ? /* @__PURE__ */ new Map() : void 0;
889
889
-
if (byLiteral) {
890
890
-
for (const [literal4, options] of literals) {
891
891
-
byLiteral.set(literal4, options[0][MATCHER_SYMBOL]);
892
892
-
}
893
893
-
}
894
894
-
const byType = types.size > 0 ? {} : void 0;
895
895
-
if (byType) {
896
896
-
for (const [type, options] of types) {
897
897
-
byType[type] = options[0][MATCHER_SYMBOL];
898
898
-
}
899
899
-
}
900
900
-
const optional = optionals[0]?.[MATCHER_SYMBOL];
901
901
-
return (obj, flags) => {
902
902
-
const value = obj[key];
903
903
-
if (value === void 0 && !(key in obj)) {
904
904
-
return optional === void 0 ? missingValue : callMatcher(optional, obj, flags);
905
905
-
}
906
906
-
const option = byType?.[toInputType(value)] ?? byLiteral?.get(value);
907
907
-
return option ? callMatcher(option, obj, flags) : issue;
908
908
-
};
909
909
-
}
910
910
-
__name(createObjectKeyMatcher, "createObjectKeyMatcher");
911
911
-
function createUnionObjectMatcher(terminals) {
912
912
-
const objects = [];
913
913
-
const keyCounts = /* @__PURE__ */ new Map();
914
914
-
for (const { root, terminal } of terminals) {
915
915
-
if (terminal.name === "unknown") {
916
916
-
return void 0;
917
917
-
}
918
918
-
if (terminal.name === "object") {
919
919
-
for (const key in terminal.shape) {
920
920
-
keyCounts.set(key, (keyCounts.get(key) ?? 0) + 1);
921
921
-
}
922
922
-
objects.push({ root, terminal });
923
923
-
}
924
924
-
}
925
925
-
if (objects.length < 2) {
926
926
-
return void 0;
927
927
-
}
928
928
-
for (const [key, count] of keyCounts) {
929
929
-
if (count === objects.length) {
930
930
-
const matcher = createObjectKeyMatcher(objects, key);
931
931
-
if (matcher) {
932
932
-
return matcher;
933
933
-
}
934
934
-
}
935
935
-
}
936
936
-
return void 0;
937
937
-
}
938
938
-
__name(createUnionObjectMatcher, "createUnionObjectMatcher");
939
939
-
function createUnionBaseMatcher(terminals) {
940
940
-
const { expectedTypes, literals, types, unknowns, optionals } = groupTerminals(terminals);
941
941
-
const issue = types.size === 0 && unknowns.length === 0 ? {
942
942
-
ok: false,
943
943
-
code: "invalid_literal",
944
944
-
expected: [...literals.keys()]
945
945
-
} : {
946
946
-
ok: false,
947
947
-
code: "invalid_type",
948
948
-
expected: expectedTypes
949
949
-
};
950
950
-
const byLiteral = literals.size > 0 ? /* @__PURE__ */ new Map() : void 0;
951
951
-
if (byLiteral) {
952
952
-
for (const [literal4, options] of literals) {
953
953
-
byLiteral.set(literal4, options.map((t) => t[MATCHER_SYMBOL]));
954
954
-
}
955
955
-
}
956
956
-
const byType = types.size > 0 ? {} : void 0;
957
957
-
if (byType) {
958
958
-
for (const [type, options] of types) {
959
959
-
byType[type] = options.map((t) => t[MATCHER_SYMBOL]);
960
960
-
}
961
961
-
}
962
962
-
const optionalMatchers = optionals.map((t) => t[MATCHER_SYMBOL]);
963
963
-
const unknownMatchers = unknowns.map((t) => t[MATCHER_SYMBOL]);
964
964
-
return (value, flags) => {
965
965
-
const options = flags & FLAG_MISSING_VALUE ? optionalMatchers : byType?.[toInputType(value)] ?? byLiteral?.get(value) ?? unknownMatchers;
966
966
-
let count = 0;
967
967
-
let issueTree = issue;
968
968
-
for (let i = 0; i < options.length; i++) {
969
969
-
const r = callMatcher(options[i], value, flags);
970
970
-
if (r === void 0 || r.ok) {
971
971
-
return r;
972
972
-
}
973
973
-
issueTree = count > 0 ? joinIssues(issueTree, r) : r;
974
974
-
count++;
975
975
-
}
976
976
-
if (count > 1) {
977
977
-
return { ok: false, code: "invalid_union", tree: issueTree };
978
978
-
}
979
979
-
return issueTree;
980
980
-
};
981
981
-
}
982
982
-
__name(createUnionBaseMatcher, "createUnionBaseMatcher");
983
983
-
var UnionType = class extends Type {
984
984
-
static {
985
985
-
__name(this, "UnionType");
986
986
-
}
987
987
-
constructor(options) {
988
988
-
super();
989
989
-
this.name = "union";
990
990
-
this.options = options;
991
991
-
}
992
992
-
_toTerminals(func) {
993
993
-
for (const option of this.options) {
994
994
-
option._toTerminals(func);
995
995
-
}
996
996
-
}
997
997
-
get [MATCHER_SYMBOL]() {
998
998
-
const flattened = [];
999
999
-
for (const option of this.options) {
1000
1000
-
option._toTerminals((terminal) => {
1001
1001
-
flattened.push({ root: option, terminal });
1002
1002
-
});
1003
1003
-
}
1004
1004
-
const base = createUnionBaseMatcher(flattened);
1005
1005
-
const object7 = createUnionObjectMatcher(flattened);
1006
1006
-
return lazyProperty(this, MATCHER_SYMBOL, taggedMatcher(TAG_UNION, (v, f) => object7 !== void 0 && isObject(v) ? object7(v, f) : base(v, f)), false);
1007
1007
-
}
1008
1008
-
};
1009
1009
-
var STRICT = Object.freeze({ mode: "strict" });
1010
1010
-
var STRIP = Object.freeze({ mode: "strip" });
1011
1011
-
var PASSTHROUGH = Object.freeze({ mode: "passthrough" });
1012
1012
-
function flagsToOptions(flags) {
1013
1013
-
return flags & FLAG_FORBID_EXTRA_KEYS ? STRICT : flags & FLAG_STRIP_EXTRA_KEYS ? STRIP : PASSTHROUGH;
1014
1014
-
}
1015
1015
-
__name(flagsToOptions, "flagsToOptions");
1016
1016
-
var TransformType = class _TransformType extends Type {
1017
1017
-
static {
1018
1018
-
__name(this, "TransformType");
1019
1019
-
}
1020
1020
-
constructor(transformed, transform) {
1021
1021
-
super();
1022
1022
-
this.name = "transform";
1023
1023
-
this._transformed = transformed;
1024
1024
-
this._transform = transform;
1025
1025
-
}
1026
1026
-
get [MATCHER_SYMBOL]() {
1027
1027
-
const chain = [];
1028
1028
-
let next = this;
1029
1029
-
while (next instanceof _TransformType) {
1030
1030
-
chain.push(next._transform);
1031
1031
-
next = next._transformed;
1032
1032
-
}
1033
1033
-
chain.reverse();
1034
1034
-
const matcher = next[MATCHER_SYMBOL];
1035
1035
-
const undef = ok3(void 0);
1036
1036
-
return lazyProperty(this, MATCHER_SYMBOL, taggedMatcher(TAG_TRANSFORM, (v, flags) => {
1037
1037
-
let result = callMatcher(matcher, v, flags);
1038
1038
-
if (result !== void 0 && !result.ok) {
1039
1039
-
return result;
1040
1040
-
}
1041
1041
-
let current;
1042
1042
-
if (result !== void 0) {
1043
1043
-
current = result.value;
1044
1044
-
} else if (flags & FLAG_MISSING_VALUE) {
1045
1045
-
current = void 0;
1046
1046
-
result = undef;
1047
1047
-
} else {
1048
1048
-
current = v;
1049
1049
-
}
1050
1050
-
for (let i = 0; i < chain.length; i++) {
1051
1051
-
const r = chain[i](current, flags);
1052
1052
-
if (r !== void 0) {
1053
1053
-
if (!r.ok) {
1054
1054
-
return r;
1055
1055
-
}
1056
1056
-
current = r.value;
1057
1057
-
result = r;
1058
1058
-
}
1059
1059
-
}
1060
1060
-
return result;
1061
1061
-
}), false);
1062
1062
-
}
1063
1063
-
_toTerminals(func) {
1064
1064
-
this._transformed._toTerminals(func);
1065
1065
-
}
1066
1066
-
};
1067
1067
-
var LazyType = class extends Type {
1068
1068
-
static {
1069
1069
-
__name(this, "LazyType");
1070
1070
-
}
1071
1071
-
constructor(definer) {
1072
1072
-
super();
1073
1073
-
this.name = "lazy";
1074
1074
-
this._recursing = false;
1075
1075
-
this._definer = definer;
1076
1076
-
}
1077
1077
-
get type() {
1078
1078
-
return lazyProperty(this, "type", this._definer(), true);
1079
1079
-
}
1080
1080
-
get [MATCHER_SYMBOL]() {
1081
1081
-
const matcher = taggedMatcher(TAG_OTHER, (value, flags) => {
1082
1082
-
const typeMatcher = this.type[MATCHER_SYMBOL];
1083
1083
-
matcher.tag = typeMatcher.tag;
1084
1084
-
matcher.match = typeMatcher.match;
1085
1085
-
lazyProperty(this, MATCHER_SYMBOL, typeMatcher, false);
1086
1086
-
return callMatcher(typeMatcher, value, flags);
1087
1087
-
});
1088
1088
-
return matcher;
1089
1089
-
}
1090
1090
-
_toTerminals(func) {
1091
1091
-
if (!this._recursing) {
1092
1092
-
this._recursing = true;
1093
1093
-
try {
1094
1094
-
this.type._toTerminals(func);
1095
1095
-
} finally {
1096
1096
-
this._recursing = false;
1097
1097
-
}
1098
1098
-
}
1099
1099
-
}
1100
1100
-
};
1101
1101
-
function singleton(name, tag, match) {
1102
1102
-
const value = taggedMatcher(tag, match);
1103
1103
-
class SimpleType extends Type {
1104
1104
-
static {
1105
1105
-
__name(this, "SimpleType");
1106
1106
-
}
1107
1107
-
constructor() {
1108
1108
-
super();
1109
1109
-
this.name = name;
1110
1110
-
this[MATCHER_SYMBOL] = value;
1111
1111
-
}
1112
1112
-
}
1113
1113
-
const instance = new SimpleType();
1114
1114
-
return /* @__NO_SIDE_EFFECTS__ */ () => instance;
1115
1115
-
}
1116
1116
-
__name(singleton, "singleton");
1117
1117
-
exports.unknown = singleton("unknown", TAG_UNKNOWN, () => void 0);
1118
1118
-
exports.never = singleton("never", TAG_NEVER, () => ISSUE_EXPECTED_NOTHING);
1119
1119
-
exports.string = singleton("string", TAG_STRING, (v) => typeof v === "string" ? void 0 : ISSUE_EXPECTED_STRING);
1120
1120
-
exports.number = singleton("number", TAG_NUMBER, (v) => typeof v === "number" ? void 0 : ISSUE_EXPECTED_NUMBER);
1121
1121
-
exports.bigint = singleton("bigint", TAG_BIGINT, (v) => typeof v === "bigint" ? void 0 : ISSUE_EXPECTED_BIGINT);
1122
1122
-
exports.boolean = singleton("boolean", TAG_BOOLEAN, (v) => typeof v === "boolean" ? void 0 : ISSUE_EXPECTED_BOOLEAN);
1123
1123
-
var null_ = /* @__PURE__ */ singleton("null", TAG_NULL, (v) => v === null ? void 0 : ISSUE_EXPECTED_NULL);
1124
1124
-
exports.null = null_;
1125
1125
-
var undefined_ = /* @__PURE__ */ singleton("undefined", TAG_UNDEFINED, (v) => v === void 0 ? void 0 : ISSUE_EXPECTED_UNDEFINED);
1126
1126
-
exports.undefined = undefined_;
1127
1127
-
var LiteralType = class extends Type {
1128
1128
-
static {
1129
1129
-
__name(this, "LiteralType");
1130
1130
-
}
1131
1131
-
constructor(value) {
1132
1132
-
super();
1133
1133
-
this.name = "literal";
1134
1134
-
const issue = {
1135
1135
-
ok: false,
1136
1136
-
code: "invalid_literal",
1137
1137
-
expected: [value]
1138
1138
-
};
1139
1139
-
this[MATCHER_SYMBOL] = taggedMatcher(TAG_LITERAL, (v) => v === value ? void 0 : issue);
1140
1140
-
this.value = value;
1141
1141
-
}
1142
1142
-
};
1143
1143
-
var literal3 = /* @__PURE__ */ __name((value) => {
1144
1144
-
return /* @__PURE__ */ new LiteralType(value);
1145
1145
-
}, "literal");
1146
1146
-
exports.literal = literal3;
1147
1147
-
var object6 = /* @__PURE__ */ __name((obj) => {
1148
1148
-
return /* @__PURE__ */ new ObjectType(obj, void 0);
1149
1149
-
}, "object");
1150
1150
-
exports.object = object6;
1151
1151
-
var record2 = /* @__PURE__ */ __name((valueType) => {
1152
1152
-
return /* @__PURE__ */ new ObjectType({}, valueType ?? (0, exports.unknown)());
1153
1153
-
}, "record");
1154
1154
-
exports.record = record2;
1155
1155
-
var array3 = /* @__PURE__ */ __name((item) => {
1156
1156
-
return /* @__PURE__ */ new ArrayOrTupleType([], item ?? (0, exports.unknown)(), []);
1157
1157
-
}, "array");
1158
1158
-
exports.array = array3;
1159
1159
-
var tuple2 = /* @__PURE__ */ __name((items) => {
1160
1160
-
return /* @__PURE__ */ new ArrayOrTupleType(items, void 0, []);
1161
1161
-
}, "tuple");
1162
1162
-
exports.tuple = tuple2;
1163
1163
-
var union4 = /* @__PURE__ */ __name((...options) => {
1164
1164
-
return /* @__PURE__ */ new UnionType(options);
1165
1165
-
}, "union");
1166
1166
-
exports.union = union4;
1167
1167
-
var lazy = /* @__PURE__ */ __name((definer) => {
1168
1168
-
return new LazyType(definer);
1169
1169
-
}, "lazy");
1170
1170
-
exports.lazy = lazy;
1171
1171
-
}
1172
1172
-
});
1173
1173
-
1174
1174
-
// components/output/raw/atproto/oauth.js
1175
1175
-
init_Buffer();
1176
1176
-
init_process();
1177
1177
-
1178
1178
-
// ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/index.js
1179
1179
-
init_Buffer();
1180
1180
-
init_process();
1181
1181
-
1182
1182
-
// ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/environment.js
1183
1183
-
init_Buffer();
1184
1184
-
init_process();
1185
1185
-
1186
1186
-
// ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/store/db.js
1187
1187
-
init_Buffer();
1188
1188
-
init_process();
1189
1189
-
1190
1190
-
// ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/utils/runtime.js
1191
1191
-
init_Buffer();
1192
1192
-
init_process();
1193
1193
-
var locks = typeof navigator !== "undefined" ? navigator.locks : void 0;
1194
1194
-
1195
1195
-
// ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/store/db.js
1196
1196
-
var parse = /* @__PURE__ */ __name((raw) => {
1197
1197
-
if (raw != null) {
1198
1198
-
const parsed = JSON.parse(raw);
1199
1199
-
if (parsed != null) {
1200
1200
-
return parsed;
1201
1201
-
}
1202
1202
-
}
1203
1203
-
return {};
1204
1204
-
}, "parse");
1205
1205
-
var createOAuthDatabase = /* @__PURE__ */ __name(({ name }) => {
1206
1206
-
const controller = new AbortController();
1207
1207
-
const signal = controller.signal;
1208
1208
-
const createStore = /* @__PURE__ */ __name((subname, expiresAt, persistUpdatedAt = false) => {
1209
1209
-
let store;
1210
1210
-
const storageKey = `${name}:${subname}`;
1211
1211
-
const persist = /* @__PURE__ */ __name(() => store && localStorage.setItem(storageKey, JSON.stringify(store)), "persist");
1212
1212
-
const read = /* @__PURE__ */ __name(() => {
1213
1213
-
if (signal.aborted) {
1214
1214
-
throw new Error(`store closed`);
1215
1215
-
}
1216
1216
-
return store ??= parse(localStorage.getItem(storageKey));
1217
1217
-
}, "read");
1218
1218
-
{
1219
1219
-
const listener = /* @__PURE__ */ __name((ev) => {
1220
1220
-
if (ev.key === storageKey) {
1221
1221
-
store = void 0;
1222
1222
-
}
1223
1223
-
}, "listener");
1224
1224
-
globalThis.addEventListener("storage", listener, { signal });
1225
1225
-
}
1226
1226
-
{
1227
1227
-
const cleanup = /* @__PURE__ */ __name(async (lock) => {
1228
1228
-
if (!lock || signal.aborted) {
1229
1229
-
return;
1230
1230
-
}
1231
1231
-
await new Promise((resolve) => setTimeout(resolve, 1e4));
1232
1232
-
if (signal.aborted) {
1233
1233
-
return;
1234
1234
-
}
1235
1235
-
let now = Date.now();
1236
1236
-
let changed = false;
1237
1237
-
read();
1238
1238
-
for (const key in store) {
1239
1239
-
const item = store[key];
1240
1240
-
const expiresAt2 = item.expiresAt;
1241
1241
-
if (expiresAt2 !== null && now > expiresAt2) {
1242
1242
-
changed = true;
1243
1243
-
delete store[key];
1244
1244
-
}
1245
1245
-
}
1246
1246
-
if (changed) {
1247
1247
-
persist();
1248
1248
-
}
1249
1249
-
}, "cleanup");
1250
1250
-
if (locks) {
1251
1251
-
locks.request(`${storageKey}:cleanup`, { ifAvailable: true }, cleanup);
1252
1252
-
} else {
1253
1253
-
cleanup(true);
1254
1254
-
}
1255
1255
-
}
1256
1256
-
return {
1257
1257
-
get(key) {
1258
1258
-
read();
1259
1259
-
const item = store[key];
1260
1260
-
if (!item) {
1261
1261
-
return;
1262
1262
-
}
1263
1263
-
const expiresAt2 = item.expiresAt;
1264
1264
-
if (expiresAt2 !== null && Date.now() > expiresAt2) {
1265
1265
-
delete store[key];
1266
1266
-
persist();
1267
1267
-
return;
1268
1268
-
}
1269
1269
-
return item.value;
1270
1270
-
},
1271
1271
-
getWithLapsed(key) {
1272
1272
-
read();
1273
1273
-
const item = store[key];
1274
1274
-
const now = Date.now();
1275
1275
-
if (!item) {
1276
1276
-
return [void 0, Infinity];
1277
1277
-
}
1278
1278
-
const updatedAt = item.updatedAt;
1279
1279
-
if (updatedAt === void 0) {
1280
1280
-
return [item.value, Infinity];
1281
1281
-
}
1282
1282
-
return [item.value, now - updatedAt];
1283
1283
-
},
1284
1284
-
set(key, value) {
1285
1285
-
read();
1286
1286
-
const item = {
1287
1287
-
value,
1288
1288
-
expiresAt: expiresAt(value),
1289
1289
-
updatedAt: persistUpdatedAt ? Date.now() : void 0
1290
1290
-
};
1291
1291
-
store[key] = item;
1292
1292
-
persist();
1293
1293
-
},
1294
1294
-
delete(key) {
1295
1295
-
read();
1296
1296
-
if (store[key] !== void 0) {
1297
1297
-
delete store[key];
1298
1298
-
persist();
1299
1299
-
}
1300
1300
-
},
1301
1301
-
keys() {
1302
1302
-
read();
1303
1303
-
return Object.keys(store);
1304
1304
-
}
1305
1305
-
};
1306
1306
-
}, "createStore");
1307
1307
-
return {
1308
1308
-
dispose: /* @__PURE__ */ __name(() => {
1309
1309
-
controller.abort();
1310
1310
-
}, "dispose"),
1311
1311
-
sessions: createStore("sessions", ({ token }) => {
1312
1312
-
if (token.refresh) {
1313
1313
-
return null;
1314
1314
-
}
1315
1315
-
return token.expires_at ?? null;
1316
1316
-
}),
1317
1317
-
states: createStore("states", (_item) => Date.now() + 10 * 60 * 1e3),
1318
1318
-
// 10 minutes
1319
1319
-
// The reference PDS have nonces that expire after 3 minutes, while other
1320
1320
-
// implementations can have varying expiration times.
1321
1321
-
// Stored for 24 hours.
1322
1322
-
dpopNonces: createStore("dpopNonces", (_item) => Date.now() + 24 * 60 * 60 * 1e3, true),
1323
1323
-
inflightDpop: /* @__PURE__ */ new Map()
1324
1324
-
};
1325
1325
-
}, "createOAuthDatabase");
1326
1326
-
1327
1327
-
// ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/environment.js
1328
1328
-
var CLIENT_ID;
1329
1329
-
var REDIRECT_URI;
1330
1330
-
var fetchClientAssertion;
1331
1331
-
var database;
1332
1332
-
var identityResolver;
1333
1333
-
var configureOAuth = /* @__PURE__ */ __name((options) => {
1334
1334
-
({ identityResolver, fetchClientAssertion } = options);
1335
1335
-
({ client_id: CLIENT_ID, redirect_uri: REDIRECT_URI } = options.metadata);
1336
1336
-
database = createOAuthDatabase({ name: options.storageName ?? "atcute-oauth" });
1337
1337
-
}, "configureOAuth");
1338
1338
-
1339
1339
-
// ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/errors.js
1340
1340
-
init_Buffer();
1341
1341
-
init_process();
1342
1342
-
var LoginError = class extends Error {
1343
1343
-
static {
1344
1344
-
__name(this, "LoginError");
1345
1345
-
}
1346
1346
-
name = "LoginError";
1347
1347
-
};
1348
1348
-
var AuthorizationError = class extends Error {
1349
1349
-
static {
1350
1350
-
__name(this, "AuthorizationError");
1351
1351
-
}
1352
1352
-
name = "AuthorizationError";
1353
1353
-
};
1354
1354
-
var ResolverError = class extends Error {
1355
1355
-
static {
1356
1356
-
__name(this, "ResolverError");
1357
1357
-
}
1358
1358
-
name = "ResolverError";
1359
1359
-
};
1360
1360
-
var TokenRefreshError = class extends Error {
1361
1361
-
static {
1362
1362
-
__name(this, "TokenRefreshError");
1363
1363
-
}
1364
1364
-
sub;
1365
1365
-
name = "TokenRefreshError";
1366
1366
-
constructor(sub, message, options) {
1367
1367
-
super(message, options);
1368
1368
-
this.sub = sub;
1369
1369
-
}
1370
1370
-
};
1371
1371
-
var OAuthResponseError = class extends Error {
1372
1372
-
static {
1373
1373
-
__name(this, "OAuthResponseError");
1374
1374
-
}
1375
1375
-
response;
1376
1376
-
data;
1377
1377
-
name = "OAuthResponseError";
1378
1378
-
error;
1379
1379
-
description;
1380
1380
-
constructor(response2, data) {
1381
1381
-
const error = ifString(ifObject(data)?.["error"]);
1382
1382
-
const errorDescription = ifString(ifObject(data)?.["error_description"]);
1383
1383
-
const messageError = error ? `"${error}"` : "unknown";
1384
1384
-
const messageDesc = errorDescription ? `: ${errorDescription}` : "";
1385
1385
-
const message = `OAuth ${messageError} error${messageDesc}`;
1386
1386
-
super(message);
1387
1387
-
this.response = response2;
1388
1388
-
this.data = data;
1389
1389
-
this.error = error;
1390
1390
-
this.description = errorDescription;
1391
1391
-
}
1392
1392
-
get status() {
1393
1393
-
return this.response.status;
1394
1394
-
}
1395
1395
-
get headers() {
1396
1396
-
return this.response.headers;
1397
1397
-
}
1398
1398
-
};
1399
1399
-
var FetchResponseError = class extends Error {
1400
1400
-
static {
1401
1401
-
__name(this, "FetchResponseError");
1402
1402
-
}
1403
1403
-
response;
1404
1404
-
status;
1405
1405
-
name = "FetchResponseError";
1406
1406
-
constructor(response2, status, message) {
1407
1407
-
super(message);
1408
1408
-
this.response = response2;
1409
1409
-
this.status = status;
1410
1410
-
}
1411
1411
-
};
1412
1412
-
var ifString = /* @__PURE__ */ __name((v) => {
1413
1413
-
return typeof v === "string" ? v : void 0;
1414
1414
-
}, "ifString");
1415
1415
-
var ifObject = /* @__PURE__ */ __name((v) => {
1416
1416
-
return typeof v === "object" && v !== null && !Array.isArray(v) ? v : void 0;
1417
1417
-
}, "ifObject");
1418
1418
-
1419
1419
-
// ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/agents/exchange.js
1420
1420
-
init_Buffer();
1421
1421
-
init_process();
1422
1422
-
1423
1423
-
// ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/index.js
1424
1424
-
init_Buffer();
1425
1425
-
init_process();
1426
1426
-
1427
1427
-
// ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/client-assertion/index.js
1428
1428
-
init_Buffer();
1429
1429
-
init_process();
1430
1430
-
1431
1431
-
// ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/client-assertion/create-client-assertion.js
1432
1432
-
init_Buffer();
1433
1433
-
init_process();
1434
1434
-
1435
1435
-
// ../node_modules/.deno/nanoid@5.1.6/node_modules/nanoid/index.js
1436
1436
-
init_Buffer();
1437
1437
-
init_process();
1438
1438
-
1439
1439
-
// ../node_modules/.deno/nanoid@5.1.6/node_modules/nanoid/url-alphabet/index.js
1440
1440
-
init_Buffer();
1441
1441
-
init_process();
1442
1442
-
var urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
1443
1443
-
1444
1444
-
// ../node_modules/.deno/nanoid@5.1.6/node_modules/nanoid/index.js
1445
1445
-
var POOL_SIZE_MULTIPLIER = 128;
1446
1446
-
var pool;
1447
1447
-
var poolOffset;
1448
1448
-
function fillPool(bytes) {
1449
1449
-
if (!pool || pool.length < bytes) {
1450
1450
-
pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER);
1451
1451
-
webcrypto.getRandomValues(pool);
1452
1452
-
poolOffset = 0;
1453
1453
-
} else if (poolOffset + bytes > pool.length) {
1454
1454
-
webcrypto.getRandomValues(pool);
1455
1455
-
poolOffset = 0;
1456
1456
-
}
1457
1457
-
poolOffset += bytes;
1458
1458
-
}
1459
1459
-
__name(fillPool, "fillPool");
1460
1460
-
function nanoid(size = 21) {
1461
1461
-
fillPool(size |= 0);
1462
1462
-
let id = "";
1463
1463
-
for (let i = poolOffset - size; i < poolOffset; i++) {
1464
1464
-
id += urlAlphabet[pool[i] & 63];
1465
1465
-
}
1466
1466
-
return id;
1467
1467
-
}
1468
1468
-
__name(nanoid, "nanoid");
1469
1469
-
1470
1470
-
// ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/internal/key-cache.js
1471
1471
-
init_Buffer();
1472
1472
-
init_process();
1473
1473
-
1474
1474
-
// ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/internal/jwk.js
1475
1475
-
init_Buffer();
1476
1476
-
init_process();
1477
1477
-
1478
1478
-
// ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/index.js
1479
1479
-
init_Buffer();
1480
1480
-
init_process();
1481
1481
-
1482
1482
-
// ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base16-node.js
1483
1483
-
init_Buffer();
1484
1484
-
init_process();
1485
1485
-
1486
1486
-
// ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base16-web-native.js
1487
1487
-
init_Buffer();
1488
1488
-
init_process();
1489
1489
-
1490
1490
-
// ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base16-web-polyfill.js
1491
1491
-
init_Buffer();
1492
1492
-
init_process();
1493
1493
-
1494
1494
-
// ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/utils.js
1495
1495
-
init_Buffer();
1496
1496
-
init_process();
1497
1497
-
1498
1498
-
// ../node_modules/.deno/@atcute+uint8array@1.1.1/node_modules/@atcute/uint8array/dist/index.node.js
1499
1499
-
init_Buffer();
1500
1500
-
init_process();
1501
1501
-
var textEncoder = new TextEncoder();
1502
1502
-
var textDecoder = new TextDecoder();
1503
1503
-
var subtle = crypto.subtle;
1504
1504
-
var alloc = /* @__PURE__ */ __name((size) => {
1505
1505
-
return new Uint8Array(size);
1506
1506
-
}, "alloc");
1507
1507
-
var allocUnsafe = alloc;
1508
1508
-
var encodeUtf8 = /* @__PURE__ */ __name((str) => {
1509
1509
-
return textEncoder.encode(str);
1510
1510
-
}, "encodeUtf8");
1511
1511
-
var _fromCharCode = String.fromCharCode;
1512
1512
-
var toSha256 = /* @__PURE__ */ __name(async (buffer) => {
1513
1513
-
return new Uint8Array(await subtle.digest("SHA-256", buffer));
1514
1514
-
}, "toSha256");
1515
1515
-
1516
1516
-
// ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/utils.js
1517
1517
-
var createRfc4648Encode = /* @__PURE__ */ __name((alphabet, bitsPerChar, pad) => {
1518
1518
-
return (bytes) => {
1519
1519
-
const mask = (1 << bitsPerChar) - 1;
1520
1520
-
let str = "";
1521
1521
-
let bits = 0;
1522
1522
-
let buffer = 0;
1523
1523
-
for (let i = 0; i < bytes.length; ++i) {
1524
1524
-
buffer = buffer << 8 | bytes[i];
1525
1525
-
bits += 8;
1526
1526
-
while (bits > bitsPerChar) {
1527
1527
-
bits -= bitsPerChar;
1528
1528
-
str += alphabet[mask & buffer >> bits];
1529
1529
-
}
1530
1530
-
}
1531
1531
-
if (bits !== 0) {
1532
1532
-
str += alphabet[mask & buffer << bitsPerChar - bits];
1533
1533
-
}
1534
1534
-
if (pad) {
1535
1535
-
while ((str.length * bitsPerChar & 7) !== 0) {
1536
1536
-
str += "=";
1537
1537
-
}
1538
1538
-
}
1539
1539
-
return str;
1540
1540
-
};
1541
1541
-
}, "createRfc4648Encode");
1542
1542
-
var createRfc4648Decode = /* @__PURE__ */ __name((alphabet, bitsPerChar, pad) => {
1543
1543
-
const codes = {};
1544
1544
-
for (let i = 0; i < alphabet.length; ++i) {
1545
1545
-
codes[alphabet[i]] = i;
1546
1546
-
}
1547
1547
-
return (str) => {
1548
1548
-
let end = str.length;
1549
1549
-
while (pad && str[end - 1] === "=") {
1550
1550
-
--end;
1551
1551
-
}
1552
1552
-
const bytes = allocUnsafe(end * bitsPerChar / 8 | 0);
1553
1553
-
let bits = 0;
1554
1554
-
let buffer = 0;
1555
1555
-
let written = 0;
1556
1556
-
for (let i = 0; i < end; ++i) {
1557
1557
-
const value = codes[str[i]];
1558
1558
-
if (value === void 0) {
1559
1559
-
throw new SyntaxError(`invalid base string`);
1560
1560
-
}
1561
1561
-
buffer = buffer << bitsPerChar | value;
1562
1562
-
bits += bitsPerChar;
1563
1563
-
if (bits >= 8) {
1564
1564
-
bits -= 8;
1565
1565
-
bytes[written++] = 255 & buffer >> bits;
1566
1566
-
}
1567
1567
-
}
1568
1568
-
if (bits >= bitsPerChar || (255 & buffer << 8 - bits) !== 0) {
1569
1569
-
throw new SyntaxError("unexpected end of data");
1570
1570
-
}
1571
1571
-
return bytes;
1572
1572
-
};
1573
1573
-
}, "createRfc4648Decode");
1574
1574
-
1575
1575
-
// ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base16-node.js
1576
1576
-
var HAS_NATIVE_SUPPORT = "fromHex" in Uint8Array;
1577
1577
-
1578
1578
-
// ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base64-node.js
1579
1579
-
init_Buffer();
1580
1580
-
init_process();
1581
1581
-
1582
1582
-
// ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base64-web-native.js
1583
1583
-
init_Buffer();
1584
1584
-
init_process();
1585
1585
-
var fromBase64Url = /* @__PURE__ */ __name((str) => {
1586
1586
-
return Uint8Array.fromBase64(str, {
1587
1587
-
alphabet: "base64url",
1588
1588
-
lastChunkHandling: "loose"
1589
1589
-
});
1590
1590
-
}, "fromBase64Url");
1591
1591
-
var toBase64Url = /* @__PURE__ */ __name((bytes) => {
1592
1592
-
return bytes.toBase64({ alphabet: "base64url", omitPadding: true });
1593
1593
-
}, "toBase64Url");
1594
1594
-
1595
1595
-
// ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base64-web-polyfill.js
1596
1596
-
init_Buffer();
1597
1597
-
init_process();
1598
1598
-
var BASE64URL_CHARSET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
1599
1599
-
var fromBase64Url2 = /* @__PURE__ */ createRfc4648Decode(BASE64URL_CHARSET, 6, false);
1600
1600
-
var toBase64Url2 = /* @__PURE__ */ createRfc4648Encode(BASE64URL_CHARSET, 6, false);
1601
1601
-
1602
1602
-
// ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base64-node.js
1603
1603
-
var HAS_NATIVE_SUPPORT2 = "fromBase64" in Uint8Array;
1604
1604
-
var fromBase64Url3 = !HAS_NATIVE_SUPPORT2 ? fromBase64Url2 : fromBase64Url;
1605
1605
-
var toBase64Url3 = !HAS_NATIVE_SUPPORT2 ? toBase64Url2 : toBase64Url;
1606
1606
-
1607
1607
-
// ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base32.js
1608
1608
-
init_Buffer();
1609
1609
-
init_process();
1610
1610
-
1611
1611
-
// ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base32-encode.js
1612
1612
-
init_Buffer();
1613
1613
-
init_process();
1614
1614
-
var ALPHABET = "abcdefghijklmnopqrstuvwxyz234567";
1615
1615
-
var _cc = (() => {
1616
1616
-
const t = new Uint8Array(32);
1617
1617
-
for (let i = 0; i < 32; i++) {
1618
1618
-
t[i] = ALPHABET.charCodeAt(i);
1619
1619
-
}
1620
1620
-
return t;
1621
1621
-
})();
1622
1622
-
var _fromCharCode2 = String.fromCharCode;
1623
1623
-
1624
1624
-
// ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base32.js
1625
1625
-
var ALPHABET2 = "abcdefghijklmnopqrstuvwxyz234567";
1626
1626
-
var _decodeLut = (() => {
1627
1627
-
const t = new Uint8Array(128).fill(255);
1628
1628
-
for (let i = 0; i < 32; i++) {
1629
1629
-
t[ALPHABET2.charCodeAt(i)] = i;
1630
1630
-
}
1631
1631
-
return t;
1632
1632
-
})();
1633
1633
-
1634
1634
-
// ../node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/dist/bases/base58.js
1635
1635
-
init_Buffer();
1636
1636
-
init_process();
1637
1637
-
1638
1638
-
// ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/internal/crypto.js
1639
1639
-
init_Buffer();
1640
1640
-
init_process();
1641
1641
-
var HASH_BY_ALG = {
1642
1642
-
ES256: "SHA-256",
1643
1643
-
ES384: "SHA-384",
1644
1644
-
ES512: "SHA-512",
1645
1645
-
PS256: "SHA-256",
1646
1646
-
PS384: "SHA-384",
1647
1647
-
PS512: "SHA-512",
1648
1648
-
RS256: "SHA-256",
1649
1649
-
RS384: "SHA-384",
1650
1650
-
RS512: "SHA-512"
1651
1651
-
};
1652
1652
-
var CURVE_BY_ALG = {
1653
1653
-
ES256: "P-256",
1654
1654
-
ES384: "P-384",
1655
1655
-
ES512: "P-521",
1656
1656
-
PS256: null,
1657
1657
-
PS384: null,
1658
1658
-
PS512: null,
1659
1659
-
RS256: null,
1660
1660
-
RS384: null,
1661
1661
-
RS512: null
1662
1662
-
};
1663
1663
-
var getHashName = /* @__PURE__ */ __name((alg) => {
1664
1664
-
return HASH_BY_ALG[alg];
1665
1665
-
}, "getHashName");
1666
1666
-
var getNamedCurve = /* @__PURE__ */ __name((alg) => {
1667
1667
-
return CURVE_BY_ALG[alg];
1668
1668
-
}, "getNamedCurve");
1669
1669
-
var getSignAlgorithm = /* @__PURE__ */ __name((alg) => {
1670
1670
-
if (alg.startsWith("ES")) {
1671
1671
-
return { name: "ECDSA", hash: { name: getHashName(alg) } };
1672
1672
-
}
1673
1673
-
if (alg.startsWith("PS")) {
1674
1674
-
return {
1675
1675
-
name: "RSA-PSS",
1676
1676
-
hash: { name: getHashName(alg) },
1677
1677
-
saltLength: getHashLength(getHashName(alg))
1678
1678
-
};
1679
1679
-
}
1680
1680
-
return { name: "RSASSA-PKCS1-v1_5" };
1681
1681
-
}, "getSignAlgorithm");
1682
1682
-
var getImportAlgorithm = /* @__PURE__ */ __name((alg, curve) => {
1683
1683
-
if (alg.startsWith("ES")) {
1684
1684
-
const namedCurve = curve ?? getNamedCurve(alg);
1685
1685
-
if (!namedCurve) {
1686
1686
-
throw new Error(`unable to determine curve for ${alg}`);
1687
1687
-
}
1688
1688
-
return { name: "ECDSA", namedCurve };
1689
1689
-
}
1690
1690
-
if (alg.startsWith("PS")) {
1691
1691
-
return { name: "RSA-PSS", hash: { name: getHashName(alg) } };
1692
1692
-
}
1693
1693
-
return { name: "RSASSA-PKCS1-v1_5", hash: { name: getHashName(alg) } };
1694
1694
-
}, "getImportAlgorithm");
1695
1695
-
var getGenerateAlgorithm = /* @__PURE__ */ __name((alg) => {
1696
1696
-
const curve = getNamedCurve(alg);
1697
1697
-
if (curve) {
1698
1698
-
return { name: "ECDSA", namedCurve: curve };
1699
1699
-
}
1700
1700
-
const hash = { name: getHashName(alg) };
1701
1701
-
return {
1702
1702
-
name: alg.startsWith("PS") ? "RSA-PSS" : "RSASSA-PKCS1-v1_5",
1703
1703
-
hash,
1704
1704
-
modulusLength: 2048,
1705
1705
-
publicExponent: new Uint8Array([1, 0, 1])
1706
1706
-
};
1707
1707
-
}, "getGenerateAlgorithm");
1708
1708
-
var getHashLength = /* @__PURE__ */ __name((hash) => {
1709
1709
-
switch (hash) {
1710
1710
-
case "SHA-256":
1711
1711
-
return 32;
1712
1712
-
case "SHA-384":
1713
1713
-
return 48;
1714
1714
-
case "SHA-512":
1715
1715
-
return 64;
1716
1716
-
}
1717
1717
-
}, "getHashLength");
1718
1718
-
1719
1719
-
// ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/internal/jwk.js
1720
1720
-
var SIGNING_ALGORITHMS = [
1721
1721
-
"ES256",
1722
1722
-
"ES384",
1723
1723
-
"ES512",
1724
1724
-
"PS256",
1725
1725
-
"PS384",
1726
1726
-
"PS512",
1727
1727
-
"RS256",
1728
1728
-
"RS384",
1729
1729
-
"RS512"
1730
1730
-
];
1731
1731
-
var isSigningAlgorithm = /* @__PURE__ */ __name((alg) => {
1732
1732
-
return SIGNING_ALGORITHMS.includes(alg);
1733
1733
-
}, "isSigningAlgorithm");
1734
1734
-
var derivePublicJwk = /* @__PURE__ */ __name((privateJwk, kid, alg) => {
1735
1735
-
if (privateJwk.kty === "EC") {
1736
1736
-
const { crv, x, y } = privateJwk;
1737
1737
-
return { kty: "EC", crv, x, y, kid, alg, use: "sig" };
1738
1738
-
}
1739
1739
-
if (privateJwk.kty === "RSA") {
1740
1740
-
const { n, e } = privateJwk;
1741
1741
-
return { kty: "RSA", n, e, kid, alg, use: "sig" };
1742
1742
-
}
1743
1743
-
throw new Error(`unsupported key type`);
1744
1744
-
}, "derivePublicJwk");
1745
1745
-
var importPrivateKeyFromJwk = /* @__PURE__ */ __name(async (jwk, alg) => {
1746
1746
-
if (!("d" in jwk) || !jwk.d) {
1747
1747
-
throw new Error(`expected a private key (missing 'd' parameter)`);
1748
1748
-
}
1749
1749
-
if (jwk.kty === "EC" && !alg.startsWith("ES")) {
1750
1750
-
throw new Error(`algorithm ${alg} does not match ec key`);
1751
1751
-
}
1752
1752
-
if (jwk.kty === "RSA" && alg.startsWith("ES")) {
1753
1753
-
throw new Error(`algorithm ${alg} does not match rsa key`);
1754
1754
-
}
1755
1755
-
const algorithm = getImportAlgorithm(alg, jwk.kty === "EC" ? jwk.crv : void 0);
1756
1756
-
const key = await crypto.subtle.importKey("jwk", jwk, algorithm, true, ["sign"]);
1757
1757
-
if (!(key instanceof CryptoKey)) {
1758
1758
-
throw new Error(`expected asymmetric key, got symmetric`);
1759
1759
-
}
1760
1760
-
return key;
1761
1761
-
}, "importPrivateKeyFromJwk");
1762
1762
-
var exportPrivateJwkFromKey = /* @__PURE__ */ __name(async (key, alg, kid) => {
1763
1763
-
const jwk = await crypto.subtle.exportKey("jwk", key);
1764
1764
-
jwk.alg = alg;
1765
1765
-
if (kid) {
1766
1766
-
jwk.kid = kid;
1767
1767
-
}
1768
1768
-
return jwk;
1769
1769
-
}, "exportPrivateJwkFromKey");
1770
1770
-
1771
1771
-
// ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/internal/key-cache.js
1772
1772
-
var keyCache = /* @__PURE__ */ new WeakMap();
1773
1773
-
var getCachedKeyMaterial = /* @__PURE__ */ __name(async (jwk) => {
1774
1774
-
const cached = keyCache.get(jwk);
1775
1775
-
if (cached) {
1776
1776
-
return cached;
1777
1777
-
}
1778
1778
-
const { alg } = jwk;
1779
1779
-
const cryptoKey = await importPrivateKeyFromJwk(jwk, alg);
1780
1780
-
const publicJwk = derivePublicJwk(jwk, jwk.kid, alg);
1781
1781
-
const material = { cryptoKey, publicJwk };
1782
1782
-
keyCache.set(jwk, material);
1783
1783
-
return material;
1784
1784
-
}, "getCachedKeyMaterial");
1785
1785
-
var setCachedKeyMaterial = /* @__PURE__ */ __name((jwk, cryptoKey) => {
1786
1786
-
const publicJwk = derivePublicJwk(jwk, jwk.kid, jwk.alg);
1787
1787
-
keyCache.set(jwk, { cryptoKey, publicJwk });
1788
1788
-
}, "setCachedKeyMaterial");
1789
1789
-
1790
1790
-
// ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/jwt/index.js
1791
1791
-
init_Buffer();
1792
1792
-
init_process();
1793
1793
-
var signJwt = /* @__PURE__ */ __name(async (params) => {
1794
1794
-
const { header, payload, key, alg } = params;
1795
1795
-
const fullHeader = { ...header, alg };
1796
1796
-
const headerSegment = encodeSegment(fullHeader);
1797
1797
-
const payloadSegment = encodeSegment(payload);
1798
1798
-
const signingInput = `${headerSegment}.${payloadSegment}`;
1799
1799
-
const signature = await crypto.subtle.sign(getSignAlgorithm(alg), key, encodeUtf8(signingInput));
1800
1800
-
const signatureSegment = toBase64Url3(new Uint8Array(signature));
1801
1801
-
return `${signingInput}.${signatureSegment}`;
1802
1802
-
}, "signJwt");
1803
1803
-
var encodeSegment = /* @__PURE__ */ __name((value) => {
1804
1804
-
return toBase64Url3(encodeUtf8(JSON.stringify(value)));
1805
1805
-
}, "encodeSegment");
1806
1806
-
1807
1807
-
// ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/client-assertion/generate-key.js
1808
1808
-
init_Buffer();
1809
1809
-
init_process();
1810
1810
-
1811
1811
-
// ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/client-assertion/keys.js
1812
1812
-
init_Buffer();
1813
1813
-
init_process();
1814
1814
-
1815
1815
-
// ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/dpop/index.js
1816
1816
-
init_Buffer();
1817
1817
-
init_process();
1818
1818
-
1819
1819
-
// ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/dpop/fetch.js
1820
1820
-
init_Buffer();
1821
1821
-
init_process();
1822
1822
-
1823
1823
-
// ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/hash/sha256.js
1824
1824
-
init_Buffer();
1825
1825
-
init_process();
1826
1826
-
var sha256Base64Url = /* @__PURE__ */ __name(async (input) => {
1827
1827
-
const bytes = encodeUtf8(input);
1828
1828
-
const digest = await toSha256(bytes);
1829
1829
-
return toBase64Url3(digest);
1830
1830
-
}, "sha256Base64Url");
1831
1831
-
1832
1832
-
// ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/dpop/proof.js
1833
1833
-
init_Buffer();
1834
1834
-
init_process();
1835
1835
-
var createDpopProofSigner = /* @__PURE__ */ __name((jwk) => {
1836
1836
-
const alg = jwk.alg;
1837
1837
-
let materialPromise;
1838
1838
-
return async (htm, htu, nonce, ath) => {
1839
1839
-
materialPromise ||= getCachedKeyMaterial(jwk);
1840
1840
-
const { cryptoKey, publicJwk } = await materialPromise;
1841
1841
-
const now = Math.floor(Date.now() / 1e3);
1842
1842
-
return signJwt({
1843
1843
-
header: {
1844
1844
-
typ: "dpop+jwt",
1845
1845
-
jwk: publicJwk
1846
1846
-
},
1847
1847
-
payload: {
1848
1848
-
htm,
1849
1849
-
htu,
1850
1850
-
iat: now,
1851
1851
-
jti: nanoid(24),
1852
1852
-
nonce,
1853
1853
-
ath
1854
1854
-
},
1855
1855
-
key: cryptoKey,
1856
1856
-
alg
1857
1857
-
});
1858
1858
-
};
1859
1859
-
}, "createDpopProofSigner");
1860
1860
-
1861
1861
-
// ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/dpop/generate-key.js
1862
1862
-
init_Buffer();
1863
1863
-
init_process();
1864
1864
-
var PREFERRED_ALGORITHMS = [
1865
1865
-
"ES256",
1866
1866
-
"ES384",
1867
1867
-
"ES512",
1868
1868
-
"PS256",
1869
1869
-
"PS384",
1870
1870
-
"PS512",
1871
1871
-
"RS256",
1872
1872
-
"RS384",
1873
1873
-
"RS512"
1874
1874
-
];
1875
1875
-
var sortAlgorithms = /* @__PURE__ */ __name((algs) => {
1876
1876
-
return [...algs].sort((a, b) => {
1877
1877
-
const aIdx = PREFERRED_ALGORITHMS.indexOf(a);
1878
1878
-
const bIdx = PREFERRED_ALGORITHMS.indexOf(b);
1879
1879
-
if (aIdx === -1 && bIdx === -1) {
1880
1880
-
return 0;
1881
1881
-
}
1882
1882
-
if (aIdx === -1) {
1883
1883
-
return 1;
1884
1884
-
}
1885
1885
-
if (bIdx === -1) {
1886
1886
-
return -1;
1887
1887
-
}
1888
1888
-
return aIdx - bIdx;
1889
1889
-
});
1890
1890
-
}, "sortAlgorithms");
1891
1891
-
var generateDpopKey = /* @__PURE__ */ __name(async (supportedAlgs) => {
1892
1892
-
const normalized = supportedAlgs?.filter(isSigningAlgorithm) ?? [];
1893
1893
-
if (supportedAlgs?.length && normalized.length === 0) {
1894
1894
-
throw new Error(`no supported algorithms provided`);
1895
1895
-
}
1896
1896
-
const algs = normalized.length ? sortAlgorithms(normalized) : ["ES256"];
1897
1897
-
const errors = [];
1898
1898
-
for (const alg of algs) {
1899
1899
-
try {
1900
1900
-
const pair = await crypto.subtle.generateKey(getGenerateAlgorithm(alg), true, ["sign", "verify"]);
1901
1901
-
const jwk = await exportPrivateJwkFromKey(pair.privateKey, alg);
1902
1902
-
setCachedKeyMaterial(jwk, pair.privateKey);
1903
1903
-
return jwk;
1904
1904
-
} catch (err2) {
1905
1905
-
errors.push(err2);
1906
1906
-
}
1907
1907
-
}
1908
1908
-
throw new AggregateError(errors, `failed to generate DPoP key for any of: ${algs.join(", ")}`);
1909
1909
-
}, "generateDpopKey");
1910
1910
-
1911
1911
-
// ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/dpop/verify.js
1912
1912
-
init_Buffer();
1913
1913
-
init_process();
1914
1914
-
1915
1915
-
// ../node_modules/.deno/@badrap+valita@0.4.6/node_modules/@badrap/valita/dist/node-cjs/index.esm.mjs
1916
1916
-
var index_esm_exports = {};
1917
1917
-
init_Buffer();
1918
1918
-
init_process();
1919
1919
-
__reExport(index_esm_exports, __toESM(require_node_cjs(), 1));
1920
1920
-
1921
1921
-
// ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/jwk/compute-jkt.js
1922
1922
-
init_Buffer();
1923
1923
-
init_process();
1924
1924
-
1925
1925
-
// ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/dpop/verify.js
1926
1926
-
var dpopJwkSchema = index_esm_exports.union(index_esm_exports.object({
1927
1927
-
kty: index_esm_exports.literal("EC"),
1928
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
1929
-
x: index_esm_exports.string(),
1930
1930
-
y: index_esm_exports.string()
1931
1931
-
}), index_esm_exports.object({
1932
1932
-
kty: index_esm_exports.literal("RSA"),
1933
1933
-
e: index_esm_exports.string(),
1934
1934
-
n: index_esm_exports.string()
1935
1935
-
}));
1936
1936
-
var dpopHeaderSchema = index_esm_exports.object({
1937
1937
-
typ: index_esm_exports.literal("dpop+jwt"),
1938
1938
-
alg: index_esm_exports.string().assert((alg) => alg !== "none", 'alg must not be "none"'),
1939
1939
-
jwk: dpopJwkSchema
1940
1940
-
});
1941
1941
-
var dpopPayloadSchema = index_esm_exports.object({
1942
1942
-
htm: index_esm_exports.string(),
1943
1943
-
htu: index_esm_exports.string(),
1944
1944
-
iat: index_esm_exports.number(),
1945
1945
-
jti: index_esm_exports.string(),
1946
1946
-
nonce: index_esm_exports.string().optional()
1947
1947
-
});
1948
1948
-
1949
1949
-
// ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/hash/index.js
1950
1950
-
init_Buffer();
1951
1951
-
init_process();
1952
1952
-
1953
1953
-
// ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/hash/pkce.js
1954
1954
-
init_Buffer();
1955
1955
-
init_process();
1956
1956
-
var generatePkce = /* @__PURE__ */ __name(async (length = 64) => {
1957
1957
-
const verifier = nanoid(length);
1958
1958
-
const challenge = await sha256Base64Url(verifier);
1959
1959
-
return { verifier, challenge, method: "S256" };
1960
1960
-
}, "generatePkce");
1961
1961
-
1962
1962
-
// ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/jwk/index.js
1963
1963
-
init_Buffer();
1964
1964
-
init_process();
1965
1965
-
1966
1966
-
// ../node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/dist/jwk/keys.js
1967
1967
-
init_Buffer();
1968
1968
-
init_process();
1969
1969
-
1970
1970
-
// ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/resolvers.js
1971
1971
-
init_Buffer();
1972
1972
-
init_process();
1973
1973
-
1974
1974
-
// ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/utils/response.js
1975
1975
-
init_Buffer();
1976
1976
-
init_process();
1977
1977
-
var extractContentType = /* @__PURE__ */ __name((headers) => {
1978
1978
-
return headers.get("content-type")?.split(";")[0];
1979
1979
-
}, "extractContentType");
1980
1980
-
1981
1981
-
// ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/utils/strings.js
1982
1982
-
init_Buffer();
1983
1983
-
init_process();
1984
1984
-
var isUrlParseSupported = "parse" in URL;
1985
1985
-
var isValidUrl = /* @__PURE__ */ __name((urlString) => {
1986
1986
-
let url = null;
1987
1987
-
if (isUrlParseSupported) {
1988
1988
-
url = URL.parse(urlString);
1989
1989
-
} else {
1990
1990
-
try {
1991
1991
-
url = new URL(urlString);
1992
1992
-
} catch {
1993
1993
-
}
1994
1994
-
}
1995
1995
-
if (url !== null) {
1996
1996
-
return url.protocol === "https:" || url.protocol === "http:";
1997
1997
-
}
1998
1998
-
return false;
1999
1999
-
}, "isValidUrl");
2000
2000
-
2001
2001
-
// ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/resolvers.js
2002
2002
-
var resolveFromIdentifier = /* @__PURE__ */ __name(async (ident) => {
2003
2003
-
const identity = await identityResolver.resolve(ident);
2004
2004
-
return {
2005
2005
-
identity,
2006
2006
-
metadata: await getMetadataFromResourceServer(identity.pds)
2007
2007
-
};
2008
2008
-
}, "resolveFromIdentifier");
2009
2009
-
var resolveFromService = /* @__PURE__ */ __name(async (host) => {
2010
2010
-
try {
2011
2011
-
const metadata = await getMetadataFromResourceServer(host);
2012
2012
-
return { metadata };
2013
2013
-
} catch (err2) {
2014
2014
-
if (err2 instanceof ResolverError) {
2015
2015
-
try {
2016
2016
-
const metadata = await getOAuthAuthorizationServerMetadata(host);
2017
2017
-
return { metadata };
2018
2018
-
} catch {
2019
2019
-
}
2020
2020
-
}
2021
2021
-
throw err2;
2022
2022
-
}
2023
2023
-
}, "resolveFromService");
2024
2024
-
var getOAuthProtectedResourceMetadata = /* @__PURE__ */ __name(async (host) => {
2025
2025
-
const url = new URL(`/.well-known/oauth-protected-resource`, host);
2026
2026
-
const response2 = await fetch(url.href, {
2027
2027
-
redirect: "manual",
2028
2028
-
headers: {
2029
2029
-
accept: "application/json"
2030
2030
-
}
2031
2031
-
});
2032
2032
-
if (response2.status !== 200 || extractContentType(response2.headers) !== "application/json") {
2033
2033
-
throw new ResolverError(`unexpected response`);
2034
2034
-
}
2035
2035
-
const metadata = await response2.json();
2036
2036
-
if (metadata.resource !== url.origin) {
2037
2037
-
throw new ResolverError(`unexpected issuer`);
2038
2038
-
}
2039
2039
-
return metadata;
2040
2040
-
}, "getOAuthProtectedResourceMetadata");
2041
2041
-
var getOAuthAuthorizationServerMetadata = /* @__PURE__ */ __name(async (host) => {
2042
2042
-
const url = new URL(`/.well-known/oauth-authorization-server`, host);
2043
2043
-
const response2 = await fetch(url.href, {
2044
2044
-
redirect: "manual",
2045
2045
-
headers: {
2046
2046
-
accept: "application/json"
2047
2047
-
}
2048
2048
-
});
2049
2049
-
if (response2.status !== 200 || extractContentType(response2.headers) !== "application/json") {
2050
2050
-
throw new ResolverError(`unexpected response`);
2051
2051
-
}
2052
2052
-
const metadata = await response2.json();
2053
2053
-
if (metadata.issuer !== url.origin) {
2054
2054
-
throw new ResolverError(`unexpected issuer`);
2055
2055
-
}
2056
2056
-
if (!isValidUrl(metadata.authorization_endpoint)) {
2057
2057
-
throw new ResolverError(`authorization server provided incorrect authorization endpoint`);
2058
2058
-
}
2059
2059
-
if (!metadata.client_id_metadata_document_supported) {
2060
2060
-
throw new ResolverError(`authorization server does not support 'client_id_metadata_document'`);
2061
2061
-
}
2062
2062
-
if (!metadata.pushed_authorization_request_endpoint) {
2063
2063
-
throw new ResolverError(`authorization server does not support 'pushed_authorization request'`);
2064
2064
-
}
2065
2065
-
if (metadata.response_types_supported) {
2066
2066
-
if (!metadata.response_types_supported.includes("code")) {
2067
2067
-
throw new ResolverError(`authorization server does not support 'code' response type`);
2068
2068
-
}
2069
2069
-
}
2070
2070
-
return metadata;
2071
2071
-
}, "getOAuthAuthorizationServerMetadata");
2072
2072
-
var getMetadataFromResourceServer = /* @__PURE__ */ __name(async (input) => {
2073
2073
-
const rs_metadata = await getOAuthProtectedResourceMetadata(input);
2074
2074
-
if (rs_metadata.authorization_servers?.length !== 1) {
2075
2075
-
throw new ResolverError(`expected exactly one authorization server in the listing`);
2076
2076
-
}
2077
2077
-
const issuer = rs_metadata.authorization_servers[0];
2078
2078
-
const as_metadata = await getOAuthAuthorizationServerMetadata(issuer);
2079
2079
-
if (as_metadata.protected_resources) {
2080
2080
-
if (!as_metadata.protected_resources.includes(rs_metadata.resource)) {
2081
2081
-
throw new ResolverError(`server is not in authorization server's jurisdiction`);
2082
2082
-
}
2083
2083
-
}
2084
2084
-
return as_metadata;
2085
2085
-
}, "getMetadataFromResourceServer");
2086
2086
-
2087
2087
-
// ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/agents/server-agent.js
2088
2088
-
init_Buffer();
2089
2089
-
init_process();
2090
2090
-
2091
2091
-
// ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/dpop.js
2092
2092
-
init_Buffer();
2093
2093
-
init_process();
2094
2094
-
var createDPoPFetch = /* @__PURE__ */ __name((dpopKey, isAuthServer) => {
2095
2095
-
const nonces = database.dpopNonces;
2096
2096
-
const pending2 = database.inflightDpop;
2097
2097
-
const sign = createDpopProofSigner(dpopKey);
2098
2098
-
return async (input, init) => {
2099
2099
-
const request = new Request(input, init);
2100
2100
-
const authorizationHeader = request.headers.get("authorization");
2101
2101
-
const ath = authorizationHeader?.startsWith("DPoP ") ? await sha256Base64Url(authorizationHeader.slice(5)) : void 0;
2102
2102
-
const { method, url } = request;
2103
2103
-
const { origin, pathname } = new URL(url);
2104
2104
-
const htu = origin + pathname;
2105
2105
-
let deferred = pending2.get(origin);
2106
2106
-
if (deferred) {
2107
2107
-
await deferred.promise;
2108
2108
-
deferred = void 0;
2109
2109
-
}
2110
2110
-
let initNonce;
2111
2111
-
let expiredOrMissing = false;
2112
2112
-
try {
2113
2113
-
const [nonce, lapsed] = nonces.getWithLapsed(origin);
2114
2114
-
initNonce = nonce;
2115
2115
-
expiredOrMissing = lapsed > 3 * 60 * 1e3;
2116
2116
-
} catch {
2117
2117
-
}
2118
2118
-
if (expiredOrMissing) {
2119
2119
-
pending2.set(origin, deferred = Promise.withResolvers());
2120
2120
-
}
2121
2121
-
let nextNonce;
2122
2122
-
try {
2123
2123
-
const initProof = await sign(method, htu, initNonce, ath);
2124
2124
-
request.headers.set("dpop", initProof);
2125
2125
-
const initResponse = await fetch(request);
2126
2126
-
nextNonce = initResponse.headers.get("dpop-nonce");
2127
2127
-
if (nextNonce === null || nextNonce === initNonce) {
2128
2128
-
return initResponse;
2129
2129
-
}
2130
2130
-
try {
2131
2131
-
nonces.set(origin, nextNonce);
2132
2132
-
} catch {
2133
2133
-
}
2134
2134
-
const shouldRetry = await isUseDpopNonceError(initResponse, isAuthServer);
2135
2135
-
if (!shouldRetry) {
2136
2136
-
return initResponse;
2137
2137
-
}
2138
2138
-
if (input === request || init?.body instanceof ReadableStream) {
2139
2139
-
return initResponse;
2140
2140
-
}
2141
2141
-
} finally {
2142
2142
-
if (deferred) {
2143
2143
-
pending2.delete(origin);
2144
2144
-
deferred.resolve();
2145
2145
-
}
2146
2146
-
}
2147
2147
-
{
2148
2148
-
const nextProof = await sign(method, htu, nextNonce, ath);
2149
2149
-
const nextRequest = new Request(input, init);
2150
2150
-
nextRequest.headers.set("dpop", nextProof);
2151
2151
-
const retryResponse = await fetch(nextRequest);
2152
2152
-
const retryNonce = retryResponse.headers.get("dpop-nonce");
2153
2153
-
if (retryNonce !== null && retryNonce !== nextNonce) {
2154
2154
-
try {
2155
2155
-
nonces.set(origin, retryNonce);
2156
2156
-
} catch {
2157
2157
-
}
2158
2158
-
}
2159
2159
-
return retryResponse;
2160
2160
-
}
2161
2161
-
};
2162
2162
-
}, "createDPoPFetch");
2163
2163
-
var isUseDpopNonceError = /* @__PURE__ */ __name(async (response2, isAuthServer) => {
2164
2164
-
if (isAuthServer === void 0 || isAuthServer === false) {
2165
2165
-
if (response2.status === 401) {
2166
2166
-
const wwwAuth = response2.headers.get("www-authenticate");
2167
2167
-
if (wwwAuth?.startsWith("DPoP")) {
2168
2168
-
return wwwAuth.includes('error="use_dpop_nonce"');
2169
2169
-
}
2170
2170
-
}
2171
2171
-
}
2172
2172
-
if (isAuthServer === void 0 || isAuthServer === true) {
2173
2173
-
if (response2.status === 400 && extractContentType(response2.headers) === "application/json") {
2174
2174
-
try {
2175
2175
-
const json = await response2.clone().json();
2176
2176
-
return typeof json === "object" && json?.["error"] === "use_dpop_nonce";
2177
2177
-
} catch {
2178
2178
-
return false;
2179
2179
-
}
2180
2180
-
}
2181
2181
-
}
2182
2182
-
return false;
2183
2183
-
}, "isUseDpopNonceError");
2184
2184
-
2185
2185
-
// ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/utils/misc.js
2186
2186
-
init_Buffer();
2187
2187
-
init_process();
2188
2188
-
var pick = /* @__PURE__ */ __name((obj, keys) => {
2189
2189
-
const cloned = {};
2190
2190
-
for (let idx = 0, len = keys.length; idx < len; idx++) {
2191
2191
-
const key = keys[idx];
2192
2192
-
cloned[key] = obj[key];
2193
2193
-
}
2194
2194
-
return cloned;
2195
2195
-
}, "pick");
2196
2196
-
2197
2197
-
// ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/agents/server-agent.js
2198
2198
-
var OAuthServerAgent = class {
2199
2199
-
static {
2200
2200
-
__name(this, "OAuthServerAgent");
2201
2201
-
}
2202
2202
-
#fetch;
2203
2203
-
#metadata;
2204
2204
-
#dpopKey;
2205
2205
-
constructor(metadata, dpopKey) {
2206
2206
-
this.#metadata = metadata;
2207
2207
-
this.#dpopKey = dpopKey;
2208
2208
-
this.#fetch = createDPoPFetch(dpopKey, true);
2209
2209
-
}
2210
2210
-
async request(endpoint, payload) {
2211
2211
-
const url = this.#metadata[`${endpoint}_endpoint`];
2212
2212
-
if (!url) {
2213
2213
-
throw new Error(`no endpoint for ${endpoint}`);
2214
2214
-
}
2215
2215
-
if ((endpoint === "token" || endpoint === "pushed_authorization_request") && fetchClientAssertion !== void 0) {
2216
2216
-
const sign = createDpopProofSigner(this.#dpopKey);
2217
2217
-
const assertion = await fetchClientAssertion({
2218
2218
-
aud: this.#metadata.issuer,
2219
2219
-
createDpopProof: /* @__PURE__ */ __name(async (url2, nonce) => {
2220
2220
-
return await sign("POST", url2, nonce, void 0);
2221
2221
-
}, "createDpopProof")
2222
2222
-
});
2223
2223
-
payload = { ...payload, ...assertion };
2224
2224
-
}
2225
2225
-
const response2 = await this.#fetch(url, {
2226
2226
-
method: "post",
2227
2227
-
headers: { "content-type": "application/json" },
2228
2228
-
body: JSON.stringify({ ...payload, client_id: CLIENT_ID })
2229
2229
-
});
2230
2230
-
if (extractContentType(response2.headers) !== "application/json") {
2231
2231
-
throw new FetchResponseError(response2, 2, `unexpected content-type`);
2232
2232
-
}
2233
2233
-
const json = await response2.json();
2234
2234
-
if (response2.ok) {
2235
2235
-
return json;
2236
2236
-
} else {
2237
2237
-
throw new OAuthResponseError(response2, json);
2238
2238
-
}
2239
2239
-
}
2240
2240
-
async revoke(token) {
2241
2241
-
try {
2242
2242
-
await this.request("revocation", { token });
2243
2243
-
} catch {
2244
2244
-
}
2245
2245
-
}
2246
2246
-
async exchangeCode(code, verifier) {
2247
2247
-
const response2 = await this.request("token", {
2248
2248
-
grant_type: "authorization_code",
2249
2249
-
redirect_uri: REDIRECT_URI,
2250
2250
-
code,
2251
2251
-
code_verifier: verifier
2252
2252
-
});
2253
2253
-
try {
2254
2254
-
return await this.#processExchangeResponse(response2);
2255
2255
-
} catch (err2) {
2256
2256
-
await this.revoke(response2.access_token);
2257
2257
-
throw err2;
2258
2258
-
}
2259
2259
-
}
2260
2260
-
async refresh({ sub, token }) {
2261
2261
-
if (!token.refresh) {
2262
2262
-
throw new TokenRefreshError(sub, "no refresh token available");
2263
2263
-
}
2264
2264
-
const response2 = await this.request("token", {
2265
2265
-
grant_type: "refresh_token",
2266
2266
-
refresh_token: token.refresh
2267
2267
-
});
2268
2268
-
try {
2269
2269
-
if (sub !== response2.sub) {
2270
2270
-
throw new TokenRefreshError(sub, `sub mismatch in token response; got ${response2.sub}`);
2271
2271
-
}
2272
2272
-
return this.#processTokenResponse(response2);
2273
2273
-
} catch (err2) {
2274
2274
-
await this.revoke(response2.access_token);
2275
2275
-
throw err2;
2276
2276
-
}
2277
2277
-
}
2278
2278
-
#processTokenResponse(res) {
2279
2279
-
if (!res.sub) {
2280
2280
-
throw new TypeError(`missing sub field in token response`);
2281
2281
-
}
2282
2282
-
if (!res.scope) {
2283
2283
-
throw new TypeError(`missing scope field in token response`);
2284
2284
-
}
2285
2285
-
if (res.token_type !== "DPoP") {
2286
2286
-
throw new TypeError(`token response returned a non-dpop token`);
2287
2287
-
}
2288
2288
-
return {
2289
2289
-
scope: res.scope,
2290
2290
-
refresh: res.refresh_token,
2291
2291
-
access: res.access_token,
2292
2292
-
type: res.token_type,
2293
2293
-
expires_at: typeof res.expires_in === "number" ? Date.now() + res.expires_in * 1e3 : void 0
2294
2294
-
};
2295
2295
-
}
2296
2296
-
async #processExchangeResponse(res) {
2297
2297
-
const sub = res.sub;
2298
2298
-
if (!sub) {
2299
2299
-
throw new TypeError(`missing sub field in token response`);
2300
2300
-
}
2301
2301
-
const token = this.#processTokenResponse(res);
2302
2302
-
const resolved = await resolveFromIdentifier(sub);
2303
2303
-
if (resolved.metadata.issuer !== this.#metadata.issuer) {
2304
2304
-
throw new TypeError(`issuer mismatch; got ${resolved.metadata.issuer}`);
2305
2305
-
}
2306
2306
-
return {
2307
2307
-
token,
2308
2308
-
info: {
2309
2309
-
sub,
2310
2310
-
aud: resolved.identity.pds,
2311
2311
-
server: pick(resolved.metadata, [
2312
2312
-
"issuer",
2313
2313
-
"authorization_endpoint",
2314
2314
-
"introspection_endpoint",
2315
2315
-
"pushed_authorization_request_endpoint",
2316
2316
-
"revocation_endpoint",
2317
2317
-
"token_endpoint"
2318
2318
-
])
2319
2319
-
}
2320
2320
-
};
2321
2321
-
}
2322
2322
-
};
2323
2323
-
2324
2324
-
// ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/agents/sessions.js
2325
2325
-
init_Buffer();
2326
2326
-
init_process();
2327
2327
-
2328
2328
-
// ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/utils/dpop-key.js
2329
2329
-
init_Buffer();
2330
2330
-
init_process();
2331
2331
-
var ES256_ALG = { name: "ECDSA", namedCurve: "P-256" };
2332
2332
-
var isLegacyDpopKey = /* @__PURE__ */ __name((key) => {
2333
2333
-
return typeof key.key === "string" && typeof key.jwt === "string";
2334
2334
-
}, "isLegacyDpopKey");
2335
2335
-
var migrateLegacyDpopKey = /* @__PURE__ */ __name(async (key) => {
2336
2336
-
const pkcs8 = fromBase64Url3(key.key);
2337
2337
-
const cryptoKey = await crypto.subtle.importKey("pkcs8", pkcs8, ES256_ALG, true, ["sign"]);
2338
2338
-
const jwk = await crypto.subtle.exportKey("jwk", cryptoKey);
2339
2339
-
jwk.alg = "ES256";
2340
2340
-
return jwk;
2341
2341
-
}, "migrateLegacyDpopKey");
2342
2342
-
2343
2343
-
// ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/agents/sessions.js
2344
2344
-
var pending = /* @__PURE__ */ new Map();
2345
2345
-
var getSession = /* @__PURE__ */ __name(async (sub, options) => {
2346
2346
-
options?.signal?.throwIfAborted();
2347
2347
-
let allowStored = isTokenUsable;
2348
2348
-
if (options?.noCache) {
2349
2349
-
allowStored = returnFalse;
2350
2350
-
} else if (options?.allowStale) {
2351
2351
-
allowStored = returnTrue;
2352
2352
-
}
2353
2353
-
let previousExecutionFlow;
2354
2354
-
while (previousExecutionFlow = pending.get(sub)) {
2355
2355
-
try {
2356
2356
-
const { isFresh, value: value2 } = await previousExecutionFlow;
2357
2357
-
if (isFresh || allowStored(value2)) {
2358
2358
-
return value2;
2359
2359
-
}
2360
2360
-
} catch {
2361
2361
-
}
2362
2362
-
options?.signal?.throwIfAborted();
2363
2363
-
}
2364
2364
-
const run = /* @__PURE__ */ __name(async () => {
2365
2365
-
const storedSession = await migrateSessionIfNeeded(sub, database.sessions.get(sub));
2366
2366
-
if (storedSession && allowStored(storedSession)) {
2367
2367
-
return { isFresh: false, value: storedSession };
2368
2368
-
}
2369
2369
-
const newSession = await refreshToken(sub, storedSession);
2370
2370
-
await storeSession(sub, newSession);
2371
2371
-
return { isFresh: true, value: newSession };
2372
2372
-
}, "run");
2373
2373
-
let promise;
2374
2374
-
if (locks) {
2375
2375
-
promise = locks.request(`atcute-oauth:${sub}`, run);
2376
2376
-
} else {
2377
2377
-
promise = run();
2378
2378
-
}
2379
2379
-
promise = promise.finally(() => pending.delete(sub));
2380
2380
-
if (pending.has(sub)) {
2381
2381
-
throw new Error("concurrent request for the same key");
2382
2382
-
}
2383
2383
-
pending.set(sub, promise);
2384
2384
-
const { value } = await promise;
2385
2385
-
return value;
2386
2386
-
}, "getSession");
2387
2387
-
var storeSession = /* @__PURE__ */ __name(async (sub, newSession) => {
2388
2388
-
try {
2389
2389
-
database.sessions.set(sub, newSession);
2390
2390
-
} catch (err2) {
2391
2391
-
await onRefreshError(newSession);
2392
2392
-
throw err2;
2393
2393
-
}
2394
2394
-
}, "storeSession");
2395
2395
-
var deleteStoredSession = /* @__PURE__ */ __name((sub) => {
2396
2396
-
database.sessions.delete(sub);
2397
2397
-
}, "deleteStoredSession");
2398
2398
-
var returnTrue = /* @__PURE__ */ __name(() => true, "returnTrue");
2399
2399
-
var returnFalse = /* @__PURE__ */ __name(() => false, "returnFalse");
2400
2400
-
var refreshToken = /* @__PURE__ */ __name(async (sub, storedSession) => {
2401
2401
-
if (storedSession === void 0) {
2402
2402
-
throw new TokenRefreshError(sub, `session deleted by another tab`);
2403
2403
-
}
2404
2404
-
const { dpopKey, info, token } = storedSession;
2405
2405
-
const server = new OAuthServerAgent(info.server, dpopKey);
2406
2406
-
try {
2407
2407
-
const newToken = await server.refresh({ sub: info.sub, token });
2408
2408
-
return { dpopKey, info, token: newToken };
2409
2409
-
} catch (cause) {
2410
2410
-
if (cause instanceof OAuthResponseError && cause.status === 400 && cause.error === "invalid_grant") {
2411
2411
-
throw new TokenRefreshError(sub, `session was revoked`, { cause });
2412
2412
-
}
2413
2413
-
throw cause;
2414
2414
-
}
2415
2415
-
}, "refreshToken");
2416
2416
-
var onRefreshError = /* @__PURE__ */ __name(async ({ dpopKey, info, token }) => {
2417
2417
-
const server = new OAuthServerAgent(info.server, dpopKey);
2418
2418
-
await server.revoke(token.refresh ?? token.access);
2419
2419
-
}, "onRefreshError");
2420
2420
-
var isTokenUsable = /* @__PURE__ */ __name(({ token }) => {
2421
2421
-
const expires = token.expires_at;
2422
2422
-
return expires == null || Date.now() + 6e4 <= expires;
2423
2423
-
}, "isTokenUsable");
2424
2424
-
var migrateSessionIfNeeded = /* @__PURE__ */ __name(async (sub, session) => {
2425
2425
-
if (!session || !isLegacyDpopKey(session.dpopKey)) {
2426
2426
-
return session;
2427
2427
-
}
2428
2428
-
const dpopKey = await migrateLegacyDpopKey(session.dpopKey);
2429
2429
-
const migrated = { ...session, dpopKey };
2430
2430
-
try {
2431
2431
-
database.sessions.set(sub, migrated);
2432
2432
-
} catch {
2433
2433
-
}
2434
2434
-
return migrated;
2435
2435
-
}, "migrateSessionIfNeeded");
2436
2436
-
2437
2437
-
// ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/agents/exchange.js
2438
2438
-
var createAuthorizationUrl = /* @__PURE__ */ __name(async (options) => {
2439
2439
-
const { target, scope, state = null, ...reqs } = options;
2440
2440
-
let resolved;
2441
2441
-
switch (target.type) {
2442
2442
-
case "account": {
2443
2443
-
resolved = await resolveFromIdentifier(target.identifier);
2444
2444
-
break;
2445
2445
-
}
2446
2446
-
case "pds": {
2447
2447
-
resolved = await resolveFromService(target.serviceUrl);
2448
2448
-
}
2449
2449
-
}
2450
2450
-
const { identity, metadata } = resolved;
2451
2451
-
const loginHint = identity ? identity.handle !== "handle.invalid" ? identity.handle : identity.did : void 0;
2452
2452
-
const sid = nanoid(24);
2453
2453
-
const pkce = await generatePkce();
2454
2454
-
const dpopKey = await generateDpopKey(["ES256"]);
2455
2455
-
const params = {
2456
2456
-
display: reqs.display,
2457
2457
-
ui_locales: reqs.locale,
2458
2458
-
prompt: reqs.prompt,
2459
2459
-
redirect_uri: REDIRECT_URI,
2460
2460
-
code_challenge: pkce.challenge,
2461
2461
-
code_challenge_method: pkce.method,
2462
2462
-
state: sid,
2463
2463
-
login_hint: loginHint,
2464
2464
-
response_mode: "fragment",
2465
2465
-
response_type: "code",
2466
2466
-
scope
2467
2467
-
};
2468
2468
-
database.states.set(sid, {
2469
2469
-
dpopKey,
2470
2470
-
metadata,
2471
2471
-
verifier: pkce.verifier,
2472
2472
-
state
2473
2473
-
});
2474
2474
-
const server = new OAuthServerAgent(metadata, dpopKey);
2475
2475
-
const response2 = await server.request("pushed_authorization_request", params);
2476
2476
-
const authUrl = new URL(metadata.authorization_endpoint);
2477
2477
-
authUrl.searchParams.set("client_id", CLIENT_ID);
2478
2478
-
authUrl.searchParams.set("request_uri", response2.request_uri);
2479
2479
-
return authUrl;
2480
2480
-
}, "createAuthorizationUrl");
2481
2481
-
var finalizeAuthorization = /* @__PURE__ */ __name(async (params) => {
2482
2482
-
const issuer = params.get("iss");
2483
2483
-
const sid = params.get("state");
2484
2484
-
const code = params.get("code");
2485
2485
-
const error = params.get("error");
2486
2486
-
if (!sid || !(code || error)) {
2487
2487
-
throw new LoginError(`missing parameters`);
2488
2488
-
}
2489
2489
-
const stored = database.states.get(sid);
2490
2490
-
if (stored) {
2491
2491
-
database.states.delete(sid);
2492
2492
-
} else {
2493
2493
-
throw new LoginError(`unknown state provided`);
2494
2494
-
}
2495
2495
-
if (error) {
2496
2496
-
throw new AuthorizationError(params.get("error_description") || error);
2497
2497
-
}
2498
2498
-
if (!code) {
2499
2499
-
throw new LoginError(`missing code parameter`);
2500
2500
-
}
2501
2501
-
const dpopKey = stored.dpopKey;
2502
2502
-
const metadata = stored.metadata;
2503
2503
-
const state = stored.state ?? null;
2504
2504
-
if (issuer === null) {
2505
2505
-
throw new LoginError(`missing issuer parameter`);
2506
2506
-
} else if (issuer !== metadata.issuer) {
2507
2507
-
throw new LoginError(`issuer mismatch`);
2508
2508
-
}
2509
2509
-
const server = new OAuthServerAgent(metadata, dpopKey);
2510
2510
-
const { info, token } = await server.exchangeCode(code, stored.verifier);
2511
2511
-
const sub = info.sub;
2512
2512
-
const session = { dpopKey, info, token };
2513
2513
-
await storeSession(sub, session);
2514
2514
-
return { session, state };
2515
2515
-
}, "finalizeAuthorization");
2516
2516
-
2517
2517
-
// ../node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/dist/agents/user-agent.js
2518
2518
-
init_Buffer();
2519
2519
-
init_process();
2520
2520
-
var OAuthUserAgent = class {
2521
2521
-
static {
2522
2522
-
__name(this, "OAuthUserAgent");
2523
2523
-
}
2524
2524
-
session;
2525
2525
-
#fetch;
2526
2526
-
#getSessionPromise;
2527
2527
-
constructor(session) {
2528
2528
-
this.session = session;
2529
2529
-
this.#fetch = createDPoPFetch(session.dpopKey, false);
2530
2530
-
}
2531
2531
-
get sub() {
2532
2532
-
return this.session.info.sub;
2533
2533
-
}
2534
2534
-
getSession(options) {
2535
2535
-
const promise = getSession(this.session.info.sub, options);
2536
2536
-
promise.then((session) => {
2537
2537
-
this.session = session;
2538
2538
-
}).finally(() => {
2539
2539
-
this.#getSessionPromise = void 0;
2540
2540
-
});
2541
2541
-
return this.#getSessionPromise = promise;
2542
2542
-
}
2543
2543
-
async signOut() {
2544
2544
-
const sub = this.session.info.sub;
2545
2545
-
try {
2546
2546
-
const { dpopKey, info, token } = await getSession(sub, { allowStale: true });
2547
2547
-
const server = new OAuthServerAgent(info.server, dpopKey);
2548
2548
-
await server.revoke(token.refresh ?? token.access);
2549
2549
-
} finally {
2550
2550
-
deleteStoredSession(sub);
2551
2551
-
}
2552
2552
-
}
2553
2553
-
async handle(pathname, init) {
2554
2554
-
await this.#getSessionPromise;
2555
2555
-
const headers = new Headers(init?.headers);
2556
2556
-
let session = this.session;
2557
2557
-
let url = new URL(pathname, session.info.aud);
2558
2558
-
headers.set("authorization", `${session.token.type} ${session.token.access}`);
2559
2559
-
let response2 = await this.#fetch(url.href, { ...init, headers });
2560
2560
-
if (!isInvalidTokenResponse(response2)) {
2561
2561
-
return response2;
2562
2562
-
}
2563
2563
-
try {
2564
2564
-
if (this.#getSessionPromise) {
2565
2565
-
session = await this.#getSessionPromise;
2566
2566
-
} else {
2567
2567
-
session = await this.getSession();
2568
2568
-
}
2569
2569
-
} catch {
2570
2570
-
return response2;
2571
2571
-
}
2572
2572
-
if (init?.body instanceof ReadableStream) {
2573
2573
-
return response2;
2574
2574
-
}
2575
2575
-
url = new URL(pathname, session.info.aud);
2576
2576
-
headers.set("authorization", `${session.token.type} ${session.token.access}`);
2577
2577
-
return await this.#fetch(url.href, { ...init, headers });
2578
2578
-
}
2579
2579
-
};
2580
2580
-
var isInvalidTokenResponse = /* @__PURE__ */ __name((response2) => {
2581
2581
-
if (response2.status !== 401) {
2582
2582
-
return false;
2583
2583
-
}
2584
2584
-
const auth = response2.headers.get("www-authenticate");
2585
2585
-
return auth != null && (auth.startsWith("Bearer ") || auth.startsWith("DPoP ")) && auth.includes('error="invalid_token"');
2586
2586
-
}, "isInvalidTokenResponse");
2587
2587
-
2588
2588
-
// ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/index.js
2589
2589
-
init_Buffer();
2590
2590
-
init_process();
2591
2591
-
2592
2592
-
// ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/actor/local.js
2593
2593
-
init_Buffer();
2594
2594
-
init_process();
2595
2595
-
2596
2596
-
// ../node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/dist/index.js
2597
2597
-
init_Buffer();
2598
2598
-
init_process();
2599
2599
-
2600
2600
-
// ../node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/dist/typedefs.js
2601
2601
-
var typedefs_exports = {};
2602
2602
-
__export(typedefs_exports, {
2603
2603
-
FRAGMENT_RE: () => FRAGMENT_RE,
2604
2604
-
MULTIBASE_RE: () => MULTIBASE_RE,
2605
2605
-
didDocument: () => didDocument,
2606
2606
-
didRelativeUri: () => didRelativeUri,
2607
2607
-
didString: () => didString,
2608
2608
-
multibaseString: () => multibaseString,
2609
2609
-
rfc3968UriSchema: () => rfc3968UriSchema,
2610
2610
-
service: () => service,
2611
2611
-
verificationMethod: () => verificationMethod
2612
2612
-
});
2613
2613
-
init_Buffer();
2614
2614
-
init_process();
2615
2615
-
2616
2616
-
// ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/index.js
2617
2617
-
init_Buffer();
2618
2618
-
init_process();
2619
2619
-
2620
2620
-
// ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/at-identifier.js
2621
2621
-
init_Buffer();
2622
2622
-
init_process();
2623
2623
-
2624
2624
-
// ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/did.js
2625
2625
-
init_Buffer();
2626
2626
-
init_process();
2627
2627
-
var DID_RE = /^did:([a-z]+):([a-zA-Z0-9._:%-]*[a-zA-Z0-9._-])$/;
2628
2628
-
var isDid = /* @__PURE__ */ __name(/* @__NO_SIDE_EFFECTS__ */ (input) => {
2629
2629
-
return typeof input === "string" && input.length >= 7 && input.length <= 2048 && DID_RE.test(input);
2630
2630
-
}, "isDid");
2631
2631
-
2632
2632
-
// ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/handle.js
2633
2633
-
init_Buffer();
2634
2634
-
init_process();
2635
2635
-
2636
2636
-
// ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/utils/ascii.js
2637
2637
-
init_Buffer();
2638
2638
-
init_process();
2639
2639
-
var isAsciiAlpha = /* @__PURE__ */ __name(/* @__NO_SIDE_EFFECTS__ */ (c) => {
2640
2640
-
return c >= 65 && c <= 90 || c >= 97 && c <= 122;
2641
2641
-
}, "isAsciiAlpha");
2642
2642
-
var isAsciiAlphaNum = /* @__PURE__ */ __name(/* @__NO_SIDE_EFFECTS__ */ (c) => {
2643
2643
-
return /* @__PURE__ */ isAsciiAlpha(c) || c >= 48 && c <= 57;
2644
2644
-
}, "isAsciiAlphaNum");
2645
2645
-
2646
2646
-
// ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/handle.js
2647
2647
-
var isValidLabel = /* @__PURE__ */ __name((input, start, end) => {
2648
2648
-
const len = end - start;
2649
2649
-
if (len === 0 || len > 63) {
2650
2650
-
return false;
2651
2651
-
}
2652
2652
-
const first = input.charCodeAt(start);
2653
2653
-
if (!isAsciiAlphaNum(first)) {
2654
2654
-
return false;
2655
2655
-
}
2656
2656
-
if (len > 1) {
2657
2657
-
if (!isAsciiAlphaNum(input.charCodeAt(end - 1)))
2658
2658
-
return false;
2659
2659
-
for (let j = start + 1; j < end - 1; j++) {
2660
2660
-
const c = input.charCodeAt(j);
2661
2661
-
if (!isAsciiAlphaNum(c) && c !== 45) {
2662
2662
-
return false;
2663
2663
-
}
2664
2664
-
}
2665
2665
-
}
2666
2666
-
return true;
2667
2667
-
}, "isValidLabel");
2668
2668
-
var isHandle = /* @__PURE__ */ __name(/* @__NO_SIDE_EFFECTS__ */ (input) => {
2669
2669
-
if (typeof input !== "string") {
2670
2670
-
return false;
2671
2671
-
}
2672
2672
-
const len = input.length;
2673
2673
-
if (len < 3 || len > 253) {
2674
2674
-
return false;
2675
2675
-
}
2676
2676
-
let labelStart = 0;
2677
2677
-
let labelCount = 0;
2678
2678
-
let lastLabelStart = 0;
2679
2679
-
for (let i = 0; i <= len; i++) {
2680
2680
-
if (i === len || input.charCodeAt(i) === 46) {
2681
2681
-
if (!isValidLabel(input, labelStart, i)) {
2682
2682
-
return false;
2683
2683
-
}
2684
2684
-
lastLabelStart = labelStart;
2685
2685
-
labelStart = i + 1;
2686
2686
-
labelCount++;
2687
2687
-
}
2688
2688
-
}
2689
2689
-
if (labelCount < 2) {
2690
2690
-
return false;
2691
2691
-
}
2692
2692
-
return isAsciiAlpha(input.charCodeAt(lastLabelStart));
2693
2693
-
}, "isHandle");
2694
2694
-
2695
2695
-
// ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/at-uri.js
2696
2696
-
init_Buffer();
2697
2697
-
init_process();
2698
2698
-
2699
2699
-
// ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/utils.js
2700
2700
-
init_Buffer();
2701
2701
-
init_process();
2702
2702
-
2703
2703
-
// ../node_modules/.deno/esm-env@1.2.2/node_modules/esm-env/index.js
2704
2704
-
init_Buffer();
2705
2705
-
init_process();
2706
2706
-
2707
2707
-
// ../node_modules/.deno/esm-env@1.2.2/node_modules/esm-env/browser-fallback.js
2708
2708
-
init_Buffer();
2709
2709
-
init_process();
2710
2710
-
2711
2711
-
// ../node_modules/.deno/esm-env@1.2.2/node_modules/esm-env/dev-fallback.js
2712
2712
-
init_Buffer();
2713
2713
-
init_process();
2714
2714
-
var node_env = globalThis.process?.env?.NODE_ENV;
2715
2715
-
var dev_fallback_default = node_env && !node_env.toLowerCase().startsWith("prod");
2716
2716
-
2717
2717
-
// ../node_modules/.deno/esm-env@1.2.2/node_modules/esm-env/true.js
2718
2718
-
init_Buffer();
2719
2719
-
init_process();
2720
2720
-
2721
2721
-
// ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/nsid.js
2722
2722
-
init_Buffer();
2723
2723
-
init_process();
2724
2724
-
2725
2725
-
// ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/record-key.js
2726
2726
-
init_Buffer();
2727
2727
-
init_process();
2728
2728
-
2729
2729
-
// ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/at-uri.js
2730
2730
-
var CANONICAL_AT_URI_MIN_LENGTH = 5 + 7 + 1 + 5 + 1 + 1;
2731
2731
-
var AT_URI_MAX_LENGTH = 5 + 2048 + 1 + 317 + 1 + 512;
2732
2732
-
2733
2733
-
// ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/cid.js
2734
2734
-
init_Buffer();
2735
2735
-
init_process();
2736
2736
-
2737
2737
-
// ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/datetime.js
2738
2738
-
init_Buffer();
2739
2739
-
init_process();
2740
2740
-
2741
2741
-
// ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/language.js
2742
2742
-
init_Buffer();
2743
2743
-
init_process();
2744
2744
-
2745
2745
-
// ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/tid.js
2746
2746
-
init_Buffer();
2747
2747
-
init_process();
2748
2748
-
2749
2749
-
// ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/syntax/uri.js
2750
2750
-
init_Buffer();
2751
2751
-
init_process();
2752
2752
-
2753
2753
-
// ../node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/dist/types.js
2754
2754
-
init_Buffer();
2755
2755
-
init_process();
2756
2756
-
2757
2757
-
// ../node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/dist/typedefs.js
2758
2758
-
var FRAGMENT_RE = /^#[^#]+$/;
2759
2759
-
var MULTIBASE_RE = /^z[a-km-zA-HJ-NP-Z1-9]+$/;
2760
2760
-
var rfc3968UriSchema = index_esm_exports.string().assert((input) => {
2761
2761
-
return URL.canParse(input);
2762
2762
-
}, `must be a url`);
2763
2763
-
var didRelativeUri = index_esm_exports.string().assert((input) => {
2764
2764
-
return FRAGMENT_RE.test(input) || URL.canParse(input);
2765
2765
-
}, `must be a did relative uri`);
2766
2766
-
var multibaseString = index_esm_exports.string().assert((input) => {
2767
2767
-
return MULTIBASE_RE.test(input);
2768
2768
-
}, `must be a base58 multibase`);
2769
2769
-
var didString = index_esm_exports.string().assert(isDid, `must be a did`);
2770
2770
-
var verificationMethod = index_esm_exports.object({
2771
2771
-
id: didRelativeUri,
2772
2772
-
type: index_esm_exports.string(),
2773
2773
-
controller: didString,
2774
2774
-
publicKeyMultibase: multibaseString.optional(),
2775
2775
-
publicKeyJwk: index_esm_exports.record().optional()
2776
2776
-
}).chain((input) => {
2777
2777
-
switch (input.type) {
2778
2778
-
case "Multikey": {
2779
2779
-
if (input.publicKeyMultibase === void 0) {
2780
2780
-
return index_esm_exports.err({ message: `missing multikey`, path: ["publicKeyMultibase"] });
2781
2781
-
}
2782
2782
-
break;
2783
2783
-
}
2784
2784
-
case "EcdsaSecp256k1VerificationKey2019":
2785
2785
-
case "EcdsaSecp256r1VerificationKey2019": {
2786
2786
-
if (input.publicKeyMultibase === void 0) {
2787
2787
-
return index_esm_exports.err({ message: `missing multibase key`, path: ["publicKeyMultibase"] });
2788
2788
-
}
2789
2789
-
break;
2790
2790
-
}
2791
2791
-
}
2792
2792
-
return index_esm_exports.ok(input);
2793
2793
-
});
2794
2794
-
var service = index_esm_exports.object({
2795
2795
-
// should've only been RFC3968, but did:plc uses relative URIs.
2796
2796
-
id: didRelativeUri,
2797
2797
-
type: index_esm_exports.union(index_esm_exports.string(), index_esm_exports.array(index_esm_exports.string())),
2798
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
2799
-
});
2800
2800
-
var didDocument = index_esm_exports.object({
2801
2801
-
"@context": index_esm_exports.array(rfc3968UriSchema),
2802
2802
-
id: didString,
2803
2803
-
alsoKnownAs: index_esm_exports.array(rfc3968UriSchema).chain((input) => {
2804
2804
-
for (let i = 0, len = input.length; i < len; i++) {
2805
2805
-
const aka = input[i];
2806
2806
-
for (let j = 0; j < i; j++) {
2807
2807
-
if (aka === input[j]) {
2808
2808
-
return index_esm_exports.err({
2809
2809
-
message: `duplicate "${aka}" aka entry`,
2810
2810
-
path: [i]
2811
2811
-
});
2812
2812
-
}
2813
2813
-
}
2814
2814
-
}
2815
2815
-
return index_esm_exports.ok(input);
2816
2816
-
}).optional(),
2817
2817
-
verificationMethod: index_esm_exports.array(verificationMethod).chain((input) => {
2818
2818
-
for (let i = 0, len = input.length; i < len; i++) {
2819
2819
-
const method = input[i];
2820
2820
-
const methodId = method.id;
2821
2821
-
for (let j = 0; j < i; j++) {
2822
2822
-
if (methodId === input[j].id) {
2823
2823
-
return index_esm_exports.err({
2824
2824
-
message: `duplicate "${methodId}" verification method`,
2825
2825
-
path: [i, "id"]
2826
2826
-
});
2827
2827
-
}
2828
2828
-
}
2829
2829
-
}
2830
2830
-
return index_esm_exports.ok(input);
2831
2831
-
}).optional(),
2832
2832
-
service: index_esm_exports.array(service).optional(),
2833
2833
-
controller: index_esm_exports.union(didString, index_esm_exports.array(didString)).optional(),
2834
2834
-
authentication: index_esm_exports.array(index_esm_exports.union(didRelativeUri, verificationMethod)).optional()
2835
2835
-
}).chain((input) => {
2836
2836
-
const { id: did, service: services } = input;
2837
2837
-
if (services?.length) {
2838
2838
-
const len = services.length;
2839
2839
-
const identifiers = new Array(len);
2840
2840
-
for (let i = 0; i < len; i++) {
2841
2841
-
const service2 = services[i];
2842
2842
-
let id = service2.id;
2843
2843
-
if (id[0] === "#") {
2844
2844
-
id = did + id;
2845
2845
-
}
2846
2846
-
identifiers[i] = id;
2847
2847
-
}
2848
2848
-
for (let i = 0; i < len; i++) {
2849
2849
-
const id = identifiers[i];
2850
2850
-
for (let j = 0; j < i; j++) {
2851
2851
-
if (id === identifiers[j]) {
2852
2852
-
return index_esm_exports.err({
2853
2853
-
message: `duplicate "${id}" service`,
2854
2854
-
path: ["service", i, "id"]
2855
2855
-
});
2856
2856
-
}
2857
2857
-
}
2858
2858
-
}
2859
2859
-
}
2860
2860
-
return index_esm_exports.ok(input);
2861
2861
-
});
2862
2862
-
2863
2863
-
// ../node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/dist/utils.js
2864
2864
-
init_Buffer();
2865
2865
-
init_process();
2866
2866
-
var isUrlParseSupported2 = "parse" in URL;
2867
2867
-
var isAtprotoServiceEndpoint = /* @__PURE__ */ __name((input) => {
2868
2868
-
let url = null;
2869
2869
-
if (isUrlParseSupported2) {
2870
2870
-
url = URL.parse(input);
2871
2871
-
} else {
2872
2872
-
try {
2873
2873
-
url = new URL(input);
2874
2874
-
} catch {
2875
2875
-
}
2876
2876
-
}
2877
2877
-
return url !== null && (url.protocol === "https:" || url.protocol === "http:") && url.pathname === "/" && url.search === "" && url.hash === "";
2878
2878
-
}, "isAtprotoServiceEndpoint");
2879
2879
-
var getAtprotoHandle = /* @__PURE__ */ __name((doc) => {
2880
2880
-
const alsoKnownAs = doc.alsoKnownAs;
2881
2881
-
if (!alsoKnownAs) {
2882
2882
-
return null;
2883
2883
-
}
2884
2884
-
const PREFIX = "at://";
2885
2885
-
for (let idx = 0, len = alsoKnownAs.length; idx < len; idx++) {
2886
2886
-
const aka = alsoKnownAs[idx];
2887
2887
-
if (!aka.startsWith(PREFIX)) {
2888
2888
-
continue;
2889
2889
-
}
2890
2890
-
const raw = aka.slice(PREFIX.length);
2891
2891
-
if (!isHandle(raw)) {
2892
2892
-
return void 0;
2893
2893
-
}
2894
2894
-
return raw;
2895
2895
-
}
2896
2896
-
return null;
2897
2897
-
}, "getAtprotoHandle");
2898
2898
-
var getAtprotoServiceEndpoint = /* @__PURE__ */ __name((doc, predicate) => {
2899
2899
-
const services = doc.service;
2900
2900
-
if (!services) {
2901
2901
-
return;
2902
2902
-
}
2903
2903
-
for (let idx = 0, len = services.length; idx < len; idx++) {
2904
2904
-
const { id, type, serviceEndpoint } = services[idx];
2905
2905
-
if (id !== predicate.id && id !== doc.id + predicate.id) {
2906
2906
-
continue;
2907
2907
-
}
2908
2908
-
if (predicate.type !== void 0) {
2909
2909
-
if (Array.isArray(type)) {
2910
2910
-
if (!type.includes(predicate.type)) {
2911
2911
-
continue;
2912
2912
-
}
2913
2913
-
} else {
2914
2914
-
if (type !== predicate.type) {
2915
2915
-
continue;
2916
2916
-
}
2917
2917
-
}
2918
2918
-
}
2919
2919
-
if (typeof serviceEndpoint !== "string" || !isAtprotoServiceEndpoint(serviceEndpoint)) {
2920
2920
-
continue;
2921
2921
-
}
2922
2922
-
return serviceEndpoint;
2923
2923
-
}
2924
2924
-
}, "getAtprotoServiceEndpoint");
2925
2925
-
var getPdsEndpoint = /* @__PURE__ */ __name((doc) => {
2926
2926
-
return getAtprotoServiceEndpoint(doc, {
2927
2927
-
id: "#atproto_pds",
2928
2928
-
type: "AtprotoPersonalDataServer"
2929
2929
-
});
2930
2930
-
}, "getPdsEndpoint");
2931
2931
-
2932
2932
-
// ../node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/dist/did.js
2933
2933
-
init_Buffer();
2934
2934
-
init_process();
2935
2935
-
2936
2936
-
// ../node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/dist/methods/plc.js
2937
2937
-
init_Buffer();
2938
2938
-
init_process();
2939
2939
-
var PLC_DID_RE = /^did:plc:([a-z2-7]{24})$/;
2940
2940
-
var isPlcDid = /* @__PURE__ */ __name((input) => {
2941
2941
-
return input.length === 32 && PLC_DID_RE.test(input);
2942
2942
-
}, "isPlcDid");
2943
2943
-
2944
2944
-
// ../node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/dist/methods/web.js
2945
2945
-
init_Buffer();
2946
2946
-
init_process();
2947
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
2948
-
var isAtprotoWebDid = /* @__PURE__ */ __name((input) => {
2949
2949
-
return input.length >= 12 && ATPROTO_WEB_DID_RE.test(input);
2950
2950
-
}, "isAtprotoWebDid");
2951
2951
-
var webDidToDocumentUrl = /* @__PURE__ */ __name((did) => {
2952
2952
-
const [host, ...paths] = did.slice(8).split(":").map(decodeURIComponent);
2953
2953
-
let pathname = "/" + paths.join("/");
2954
2954
-
if (pathname === "/") {
2955
2955
-
pathname = `/.well-known/did.json`;
2956
2956
-
} else {
2957
2957
-
pathname += `/did.json`;
2958
2958
-
}
2959
2959
-
const url = new URL(`https://${host}${pathname}`);
2960
2960
-
if (url.hostname === "localhost") {
2961
2961
-
url.protocol = "http:";
2962
2962
-
}
2963
2963
-
return url;
2964
2964
-
}, "webDidToDocumentUrl");
2965
2965
-
2966
2966
-
// ../node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/dist/did.js
2967
2967
-
var isAtprotoDid = /* @__PURE__ */ __name((input) => {
2968
2968
-
return isPlcDid(input) || isAtprotoWebDid(input);
2969
2969
-
}, "isAtprotoDid");
2970
2970
-
var extractDidMethod = /* @__PURE__ */ __name((did) => {
2971
2971
-
const isep = did.indexOf(":", 4);
2972
2972
-
const method = did.slice(4, isep);
2973
2973
-
return method;
2974
2974
-
}, "extractDidMethod");
2975
2975
-
2976
2976
-
// ../node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/dist/methods/key.js
2977
2977
-
init_Buffer();
2978
2978
-
init_process();
2979
2979
-
2980
2980
-
// ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/errors.js
2981
2981
-
init_Buffer();
2982
2982
-
init_process();
2983
2983
-
var DidDocumentResolutionError = class extends Error {
2984
2984
-
static {
2985
2985
-
__name(this, "DidDocumentResolutionError");
2986
2986
-
}
2987
2987
-
name = "DidResolutionError";
2988
2988
-
};
2989
2989
-
var UnsupportedDidMethodError = class extends DidDocumentResolutionError {
2990
2990
-
static {
2991
2991
-
__name(this, "UnsupportedDidMethodError");
2992
2992
-
}
2993
2993
-
did;
2994
2994
-
name = "UnsupportedDidMethodError";
2995
2995
-
constructor(did) {
2996
2996
-
super(`unsupported did method; did=${did}`);
2997
2997
-
this.did = did;
2998
2998
-
}
2999
2999
-
};
3000
3000
-
var DocumentNotFoundError = class extends DidDocumentResolutionError {
3001
3001
-
static {
3002
3002
-
__name(this, "DocumentNotFoundError");
3003
3003
-
}
3004
3004
-
did;
3005
3005
-
name = "DocumentNotFoundError";
3006
3006
-
constructor(did) {
3007
3007
-
super(`did document not found; did=${did}`);
3008
3008
-
this.did = did;
3009
3009
-
}
3010
3010
-
};
3011
3011
-
var FailedDocumentResolutionError = class extends DidDocumentResolutionError {
3012
3012
-
static {
3013
3013
-
__name(this, "FailedDocumentResolutionError");
3014
3014
-
}
3015
3015
-
did;
3016
3016
-
name = "FailedDocumentResolutionError";
3017
3017
-
constructor(did, options) {
3018
3018
-
super(`failed to resolve did document; did=${did}`, options);
3019
3019
-
this.did = did;
3020
3020
-
}
3021
3021
-
};
3022
3022
-
var HandleResolutionError = class extends Error {
3023
3023
-
static {
3024
3024
-
__name(this, "HandleResolutionError");
3025
3025
-
}
3026
3026
-
name = "HandleResolutionError";
3027
3027
-
};
3028
3028
-
var DidNotFoundError = class extends HandleResolutionError {
3029
3029
-
static {
3030
3030
-
__name(this, "DidNotFoundError");
3031
3031
-
}
3032
3032
-
handle;
3033
3033
-
name = "DidNotFoundError";
3034
3034
-
constructor(handle) {
3035
3035
-
super(`handle returned no did; handle=${handle}`);
3036
3036
-
this.handle = handle;
3037
3037
-
}
3038
3038
-
};
3039
3039
-
var FailedHandleResolutionError = class extends HandleResolutionError {
3040
3040
-
static {
3041
3041
-
__name(this, "FailedHandleResolutionError");
3042
3042
-
}
3043
3043
-
handle;
3044
3044
-
name = "FailedHandleResolutionError";
3045
3045
-
constructor(handle, options) {
3046
3046
-
super(`failed to resolve handle; handle=${handle}`, options);
3047
3047
-
this.handle = handle;
3048
3048
-
}
3049
3049
-
};
3050
3050
-
var ActorResolutionError = class extends Error {
3051
3051
-
static {
3052
3052
-
__name(this, "ActorResolutionError");
3053
3053
-
}
3054
3054
-
name = "ActorResolutionError";
3055
3055
-
};
3056
3056
-
3057
3057
-
// ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/actor/local.js
3058
3058
-
var LocalActorResolver = class {
3059
3059
-
static {
3060
3060
-
__name(this, "LocalActorResolver");
3061
3061
-
}
3062
3062
-
handleResolver;
3063
3063
-
didDocumentResolver;
3064
3064
-
constructor(options) {
3065
3065
-
this.handleResolver = options.handleResolver;
3066
3066
-
this.didDocumentResolver = options.didDocumentResolver;
3067
3067
-
}
3068
3068
-
async resolve(actor, options) {
3069
3069
-
const identifierIsDid = isDid(actor);
3070
3070
-
let did;
3071
3071
-
if (identifierIsDid) {
3072
3072
-
did = actor;
3073
3073
-
} else {
3074
3074
-
try {
3075
3075
-
did = await this.handleResolver.resolve(actor, options);
3076
3076
-
} catch (err2) {
3077
3077
-
throw new ActorResolutionError(`failed to resolve handle`, { cause: err2 });
3078
3078
-
}
3079
3079
-
}
3080
3080
-
let doc;
3081
3081
-
try {
3082
3082
-
doc = await this.didDocumentResolver.resolve(did, options);
3083
3083
-
} catch (err2) {
3084
3084
-
throw new ActorResolutionError(`failed to resolve did document`, { cause: err2 });
3085
3085
-
}
3086
3086
-
const pds = getPdsEndpoint(doc);
3087
3087
-
if (!pds) {
3088
3088
-
throw new ActorResolutionError(`missing pds endpoint`);
3089
3089
-
}
3090
3090
-
let handle = "handle.invalid";
3091
3091
-
if (identifierIsDid) {
3092
3092
-
const writtenHandle = getAtprotoHandle(doc);
3093
3093
-
if (writtenHandle) {
3094
3094
-
try {
3095
3095
-
const resolved = await this.handleResolver.resolve(writtenHandle, options);
3096
3096
-
if (resolved === did) {
3097
3097
-
handle = writtenHandle;
3098
3098
-
}
3099
3099
-
} catch {
3100
3100
-
}
3101
3101
-
}
3102
3102
-
} else if (getAtprotoHandle(doc) === actor) {
3103
3103
-
handle = actor;
3104
3104
-
}
3105
3105
-
return {
3106
3106
-
did,
3107
3107
-
handle,
3108
3108
-
pds: new URL(pds).href
3109
3109
-
};
3110
3110
-
}
3111
3111
-
};
3112
3112
-
3113
3113
-
// ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/did/composite.js
3114
3114
-
init_Buffer();
3115
3115
-
init_process();
3116
3116
-
var CompositeDidDocumentResolver = class {
3117
3117
-
static {
3118
3118
-
__name(this, "CompositeDidDocumentResolver");
3119
3119
-
}
3120
3120
-
#methods;
3121
3121
-
constructor({ methods }) {
3122
3122
-
this.#methods = new Map(Object.entries(methods));
3123
3123
-
}
3124
3124
-
async resolve(did, options) {
3125
3125
-
const method = extractDidMethod(did);
3126
3126
-
const resolver = this.#methods.get(method);
3127
3127
-
if (resolver === void 0) {
3128
3128
-
throw new UnsupportedDidMethodError(did);
3129
3129
-
}
3130
3130
-
return await resolver.resolve(did, options);
3131
3131
-
}
3132
3132
-
};
3133
3133
-
3134
3134
-
// ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/did/methods/plc.js
3135
3135
-
init_Buffer();
3136
3136
-
init_process();
3137
3137
-
3138
3138
-
// ../node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/dist/index.js
3139
3139
-
init_Buffer();
3140
3140
-
init_process();
3141
3141
-
3142
3142
-
// ../node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/dist/doh-json.js
3143
3143
-
init_Buffer();
3144
3144
-
init_process();
3145
3145
-
3146
3146
-
// ../node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/dist/pipeline.js
3147
3147
-
init_Buffer();
3148
3148
-
init_process();
3149
3149
-
function pipe(...pipeline) {
3150
3150
-
return pipeline.reduce(pipeTwo);
3151
3151
-
}
3152
3152
-
__name(pipe, "pipe");
3153
3153
-
var pipeTwo = /* @__PURE__ */ __name((first, second) => {
3154
3154
-
return (input) => first(input).then(second);
3155
3155
-
}, "pipeTwo");
3156
3156
-
3157
3157
-
// ../node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/dist/transformers.js
3158
3158
-
init_Buffer();
3159
3159
-
init_process();
3160
3160
-
3161
3161
-
// ../node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/dist/errors.js
3162
3162
-
init_Buffer();
3163
3163
-
init_process();
3164
3164
-
var FetchResponseError2 = class extends Error {
3165
3165
-
static {
3166
3166
-
__name(this, "FetchResponseError");
3167
3167
-
}
3168
3168
-
name = "FetchResponseError";
3169
3169
-
};
3170
3170
-
var FailedResponseError = class extends FetchResponseError2 {
3171
3171
-
static {
3172
3172
-
__name(this, "FailedResponseError");
3173
3173
-
}
3174
3174
-
response;
3175
3175
-
name = "FailedResponseError";
3176
3176
-
constructor(response2) {
3177
3177
-
super(`got http ${response2.status}`);
3178
3178
-
this.response = response2;
3179
3179
-
}
3180
3180
-
get status() {
3181
3181
-
return this.response.status;
3182
3182
-
}
3183
3183
-
};
3184
3184
-
var ImproperContentTypeError = class extends FetchResponseError2 {
3185
3185
-
static {
3186
3186
-
__name(this, "ImproperContentTypeError");
3187
3187
-
}
3188
3188
-
contentType;
3189
3189
-
name = "ImproperContentTypeError";
3190
3190
-
constructor(contentType, reason) {
3191
3191
-
super(reason);
3192
3192
-
this.contentType = contentType;
3193
3193
-
}
3194
3194
-
};
3195
3195
-
var ImproperContentLengthError = class extends FetchResponseError2 {
3196
3196
-
static {
3197
3197
-
__name(this, "ImproperContentLengthError");
3198
3198
-
}
3199
3199
-
expectedSize;
3200
3200
-
actualSize;
3201
3201
-
name = "ImproperContentLengthError";
3202
3202
-
constructor(expectedSize, actualSize, reason) {
3203
3203
-
super(reason);
3204
3204
-
this.expectedSize = expectedSize;
3205
3205
-
this.actualSize = actualSize;
3206
3206
-
}
3207
3207
-
};
3208
3208
-
var ImproperResponseError = class extends FetchResponseError2 {
3209
3209
-
static {
3210
3210
-
__name(this, "ImproperResponseError");
3211
3211
-
}
3212
3212
-
name = "ImproperResponseError";
3213
3213
-
constructor(reason, options) {
3214
3214
-
super(reason, options);
3215
3215
-
}
3216
3216
-
};
3217
3217
-
3218
3218
-
// ../node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/dist/streams/size-limit.js
3219
3219
-
init_Buffer();
3220
3220
-
init_process();
3221
3221
-
var SizeLimitStream = class extends TransformStream {
3222
3222
-
static {
3223
3223
-
__name(this, "SizeLimitStream");
3224
3224
-
}
3225
3225
-
constructor(maxSize) {
3226
3226
-
let bytesRead = 0;
3227
3227
-
super({
3228
3228
-
transform(chunk, controller) {
3229
3229
-
bytesRead += chunk.length;
3230
3230
-
if (bytesRead > maxSize) {
3231
3231
-
controller.error(new ImproperContentLengthError(maxSize, bytesRead, `response content-length too large`));
3232
3232
-
return;
3233
3233
-
}
3234
3234
-
controller.enqueue(chunk);
3235
3235
-
}
3236
3236
-
});
3237
3237
-
}
3238
3238
-
};
3239
3239
-
3240
3240
-
// ../node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/dist/transformers.js
3241
3241
-
var isResponseOk = /* @__PURE__ */ __name(async (response2) => {
3242
3242
-
if (response2.ok) {
3243
3243
-
return response2;
3244
3244
-
}
3245
3245
-
throw new FailedResponseError(response2);
3246
3246
-
}, "isResponseOk");
3247
3247
-
var readResponseAsText = /* @__PURE__ */ __name((maxSize) => async (response2) => {
3248
3248
-
const text = await readResponse(response2, maxSize);
3249
3249
-
return { response: response2, text };
3250
3250
-
}, "readResponseAsText");
3251
3251
-
var parseResponseAsJson = /* @__PURE__ */ __name((typeRegex, maxSize) => async (response2) => {
3252
3252
-
await assertContentType(response2, typeRegex);
3253
3253
-
const text = await readResponse(response2, maxSize);
3254
3254
-
try {
3255
3255
-
const json = JSON.parse(text);
3256
3256
-
return { response: response2, json };
3257
3257
-
} catch (error) {
3258
3258
-
throw new ImproperResponseError(`unexpected json data`, { cause: error });
3259
3259
-
}
3260
3260
-
}, "parseResponseAsJson");
3261
3261
-
var validateJsonWith = /* @__PURE__ */ __name((schema, options) => async (parsed) => {
3262
3262
-
const json = schema.parse(parsed.json, options);
3263
3263
-
return { response: parsed.response, json };
3264
3264
-
}, "validateJsonWith");
3265
3265
-
var assertContentType = /* @__PURE__ */ __name(async (response2, typeRegex) => {
3266
3266
-
const type = response2.headers.get("content-type")?.split(";", 1)[0].trim();
3267
3267
-
if (type === void 0) {
3268
3268
-
if (response2.body) {
3269
3269
-
await response2.body.cancel();
3270
3270
-
}
3271
3271
-
throw new ImproperContentTypeError(null, `missing response content-type`);
3272
3272
-
}
3273
3273
-
if (!typeRegex.test(type)) {
3274
3274
-
if (response2.body) {
3275
3275
-
await response2.body.cancel();
3276
3276
-
}
3277
3277
-
throw new ImproperContentTypeError(type, `unexpected response content-type`);
3278
3278
-
}
3279
3279
-
}, "assertContentType");
3280
3280
-
var readResponse = /* @__PURE__ */ __name(async (response2, maxSize) => {
3281
3281
-
const rawSize = response2.headers.get("content-length");
3282
3282
-
if (rawSize !== null) {
3283
3283
-
const size = Number(rawSize);
3284
3284
-
if (!Number.isSafeInteger(size) || size <= 0) {
3285
3285
-
response2.body?.cancel();
3286
3286
-
throw new ImproperContentLengthError(maxSize, null, `invalid response content-length`);
3287
3287
-
}
3288
3288
-
if (size > maxSize) {
3289
3289
-
response2.body?.cancel();
3290
3290
-
throw new ImproperContentLengthError(maxSize, size, `response content-length too large`);
3291
3291
-
}
3292
3292
-
}
3293
3293
-
const stream = response2.body.pipeThrough(new SizeLimitStream(maxSize)).pipeThrough(new TextDecoderStream());
3294
3294
-
let text = "";
3295
3295
-
for await (const chunk of createStreamIterator(stream)) {
3296
3296
-
text += chunk;
3297
3297
-
}
3298
3298
-
return text;
3299
3299
-
}, "readResponse");
3300
3300
-
var createStreamIterator = Symbol.asyncIterator in ReadableStream.prototype ? (stream) => stream[Symbol.asyncIterator]() : (stream) => {
3301
3301
-
const reader = stream.getReader();
3302
3302
-
return {
3303
3303
-
[Symbol.asyncIterator]() {
3304
3304
-
return this;
3305
3305
-
},
3306
3306
-
next() {
3307
3307
-
return reader.read();
3308
3308
-
},
3309
3309
-
async return() {
3310
3310
-
await reader.cancel();
3311
3311
-
return { done: true, value: void 0 };
3312
3312
-
},
3313
3313
-
async throw(error) {
3314
3314
-
await reader.cancel(error);
3315
3315
-
return { done: true, value: void 0 };
3316
3316
-
}
3317
3317
-
};
3318
3318
-
};
3319
3319
-
3320
3320
-
// ../node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/dist/doh-json.js
3321
3321
-
var uint32 = index_esm_exports.number().assert((input) => Number.isInteger(input) && input >= 0 && input <= 2 ** 32 - 1);
3322
3322
-
var question = index_esm_exports.object({
3323
3323
-
name: index_esm_exports.string(),
3324
3324
-
type: index_esm_exports.literal(16)
3325
3325
-
// TXT
3326
3326
-
});
3327
3327
-
var answer = index_esm_exports.object({
3328
3328
-
name: index_esm_exports.string(),
3329
3329
-
type: index_esm_exports.literal(16),
3330
3330
-
// TXT
3331
3331
-
TTL: uint32,
3332
3332
-
data: index_esm_exports.string().chain((input) => {
3333
3333
-
return index_esm_exports.ok(input.replace(/^"|"$/g, "").replace(/\\"/g, '"'));
3334
3334
-
})
3335
3335
-
});
3336
3336
-
var authority = index_esm_exports.object({
3337
3337
-
name: index_esm_exports.string(),
3338
3338
-
type: uint32,
3339
3339
-
TTL: uint32,
3340
3340
-
data: index_esm_exports.string()
3341
3341
-
});
3342
3342
-
var dohJsonTxtResult = index_esm_exports.object({
3343
3343
-
/** DNS response code */
3344
3344
-
Status: uint32,
3345
3345
-
/** whether response is truncated */
3346
3346
-
TC: index_esm_exports.boolean(),
3347
3347
-
/** whether recursive desired bit is set, always true for Google and Cloudflare DoH */
3348
3348
-
RD: index_esm_exports.boolean(),
3349
3349
-
/** whether recursive available bit is set, always true for Google and Cloudflare DoH */
3350
3350
-
RA: index_esm_exports.boolean(),
3351
3351
-
/** whether response data was validated with DNSSEC */
3352
3352
-
AD: index_esm_exports.boolean(),
3353
3353
-
/** whether client asked to disable DNSSEC validation */
3354
3354
-
CD: index_esm_exports.boolean(),
3355
3355
-
/** requested records */
3356
3356
-
Question: index_esm_exports.tuple([question]),
3357
3357
-
/** answers */
3358
3358
-
Answer: index_esm_exports.array(answer).optional(() => []),
3359
3359
-
/** authority */
3360
3360
-
Authority: index_esm_exports.array(authority).optional(),
3361
3361
-
/** comment from the DNS server */
3362
3362
-
Comment: index_esm_exports.union(index_esm_exports.string(), index_esm_exports.array(index_esm_exports.string())).optional()
3363
3363
-
});
3364
3364
-
var fetchDohJsonTxt = pipe(isResponseOk, parseResponseAsJson(/^application\/(dns-)?json$/, 16 * 1024), validateJsonWith(dohJsonTxtResult, { mode: "passthrough" }));
3365
3365
-
3366
3366
-
// ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/did/utils.js
3367
3367
-
init_Buffer();
3368
3368
-
init_process();
3369
3369
-
var fetchDocHandler = pipe(isResponseOk, parseResponseAsJson(/^application\/(did\+ld\+)?json$/, 20 * 1024), validateJsonWith(typedefs_exports.didDocument, { mode: "passthrough" }));
3370
3370
-
3371
3371
-
// ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/did/methods/plc.js
3372
3372
-
var PlcDidDocumentResolver = class {
3373
3373
-
static {
3374
3374
-
__name(this, "PlcDidDocumentResolver");
3375
3375
-
}
3376
3376
-
apiUrl;
3377
3377
-
#fetch;
3378
3378
-
constructor({ apiUrl = "https://plc.directory", fetch: fetchThis = fetch } = {}) {
3379
3379
-
this.apiUrl = apiUrl;
3380
3380
-
this.#fetch = fetchThis;
3381
3381
-
}
3382
3382
-
async resolve(did, options) {
3383
3383
-
if (!did.startsWith("did:plc:")) {
3384
3384
-
throw new UnsupportedDidMethodError(did);
3385
3385
-
}
3386
3386
-
let json;
3387
3387
-
try {
3388
3388
-
const url = new URL(`/${encodeURIComponent(did)}`, this.apiUrl);
3389
3389
-
const response2 = await (0, this.#fetch)(url, {
3390
3390
-
signal: options?.signal,
3391
3391
-
cache: options?.noCache ? "no-cache" : void 0,
3392
3392
-
redirect: "manual",
3393
3393
-
headers: { accept: "application/did+ld+json,application/json" }
3394
3394
-
});
3395
3395
-
if (response2.status >= 300 && response2.status < 400) {
3396
3396
-
throw new TypeError(`unexpected redirect`);
3397
3397
-
}
3398
3398
-
const handled = await fetchDocHandler(response2);
3399
3399
-
json = handled.json;
3400
3400
-
} catch (cause) {
3401
3401
-
if (cause instanceof FailedResponseError && cause.status === 404) {
3402
3402
-
throw new DocumentNotFoundError(did);
3403
3403
-
}
3404
3404
-
throw new FailedDocumentResolutionError(did, { cause });
3405
3405
-
}
3406
3406
-
return json;
3407
3407
-
}
3408
3408
-
};
3409
3409
-
3410
3410
-
// ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/did/methods/web.js
3411
3411
-
init_Buffer();
3412
3412
-
init_process();
3413
3413
-
var WebDidDocumentResolver = class {
3414
3414
-
static {
3415
3415
-
__name(this, "WebDidDocumentResolver");
3416
3416
-
}
3417
3417
-
#fetch;
3418
3418
-
constructor({ fetch: fetchThis = fetch } = {}) {
3419
3419
-
this.#fetch = fetchThis;
3420
3420
-
}
3421
3421
-
async resolve(did, options) {
3422
3422
-
if (!did.startsWith("did:web:")) {
3423
3423
-
throw new UnsupportedDidMethodError(did);
3424
3424
-
}
3425
3425
-
let json;
3426
3426
-
try {
3427
3427
-
const url = webDidToDocumentUrl(did);
3428
3428
-
const response2 = await (0, this.#fetch)(url, {
3429
3429
-
signal: options?.signal,
3430
3430
-
cache: options?.noCache ? "no-cache" : void 0,
3431
3431
-
redirect: "manual",
3432
3432
-
headers: { accept: "application/did+ld+json,application/json" }
3433
3433
-
});
3434
3434
-
if (response2.status >= 300 && response2.status < 400) {
3435
3435
-
throw new TypeError(`unexpected redirect`);
3436
3436
-
}
3437
3437
-
const handled = await fetchDocHandler(response2);
3438
3438
-
json = handled.json;
3439
3439
-
} catch (cause) {
3440
3440
-
if (cause instanceof FailedResponseError && cause.status === 404) {
3441
3441
-
throw new DocumentNotFoundError(did);
3442
3442
-
}
3443
3443
-
throw new FailedDocumentResolutionError(did, { cause });
3444
3444
-
}
3445
3445
-
return json;
3446
3446
-
}
3447
3447
-
};
3448
3448
-
3449
3449
-
// ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/did/methods/xrpc.js
3450
3450
-
init_Buffer();
3451
3451
-
init_process();
3452
3452
-
var fetchXrpcHandler = pipe(isResponseOk, parseResponseAsJson(/^application\/json$/, 20 * 1024 + 16), validateJsonWith(index_esm_exports.object({ didDoc: typedefs_exports.didDocument }), { mode: "passthrough" }));
3453
3453
-
3454
3454
-
// ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/handle/composite.js
3455
3455
-
init_Buffer();
3456
3456
-
init_process();
3457
3457
-
3458
3458
-
// ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/handle/methods/doh-json.js
3459
3459
-
init_Buffer();
3460
3460
-
init_process();
3461
3461
-
3462
3462
-
// ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/handle/methods/well-known.js
3463
3463
-
init_Buffer();
3464
3464
-
init_process();
3465
3465
-
var fetchWellKnownHandler = pipe(isResponseOk, readResponseAsText(2048 + 16));
3466
3466
-
3467
3467
-
// ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/handle/methods/xrpc.js
3468
3468
-
init_Buffer();
3469
3469
-
init_process();
3470
3470
-
var response = index_esm_exports.object({
3471
3471
-
did: index_esm_exports.string().assert((input) => isAtprotoDid(input))
3472
3472
-
});
3473
3473
-
var fetchXrpcHandler2 = pipe(isResponseOk, parseResponseAsJson(/^application\/json$/, 4 * 1024), validateJsonWith(response, { mode: "passthrough" }));
3474
3474
-
var XrpcHandleResolver = class {
3475
3475
-
static {
3476
3476
-
__name(this, "XrpcHandleResolver");
3477
3477
-
}
3478
3478
-
serviceUrl;
3479
3479
-
#fetch;
3480
3480
-
constructor({ serviceUrl, fetch: fetchThis = fetch }) {
3481
3481
-
this.serviceUrl = serviceUrl;
3482
3482
-
this.#fetch = fetchThis;
3483
3483
-
}
3484
3484
-
async resolve(handle, options) {
3485
3485
-
let json;
3486
3486
-
try {
3487
3487
-
const url = new URL(`/xrpc/com.atproto.identity.resolveHandle`, this.serviceUrl);
3488
3488
-
url.searchParams.set("handle", handle);
3489
3489
-
const response2 = await (0, this.#fetch)(url, {
3490
3490
-
signal: options?.signal,
3491
3491
-
cache: options?.noCache ? "no-cache" : void 0,
3492
3492
-
headers: { accept: "application/json" }
3493
3493
-
});
3494
3494
-
const handled = await fetchXrpcHandler2(response2);
3495
3495
-
json = handled.json;
3496
3496
-
} catch (cause) {
3497
3497
-
if (cause instanceof FailedResponseError && cause.status === 400) {
3498
3498
-
throw new DidNotFoundError(handle);
3499
3499
-
}
3500
3500
-
throw new FailedHandleResolutionError(handle, { cause });
3501
3501
-
}
3502
3502
-
return json.did;
3503
3503
-
}
3504
3504
-
};
3505
3505
-
3506
3506
-
// ../node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/types.js
3507
3507
-
init_Buffer();
3508
3508
-
init_process();
3509
3509
-
3510
3510
-
// components/output/raw/atproto/oauth.js
3511
3511
-
var STORAGE_KEY = "dor-atproto:did";
3512
3512
-
configureOAuth({
3513
3513
-
metadata: {
3514
3514
-
client_id: import.meta.env?.VITE_ATPROTO_CLIENT_ID ?? "https://elements.diffuse.sh/bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/oauth-client-metadata.json",
3515
3515
-
redirect_uri: window.location.origin.replace("://localhost", "://127.0.0.1") + window.location.pathname
3516
3516
-
},
3517
3517
-
identityResolver: new LocalActorResolver({
3518
3518
-
handleResolver: new XrpcHandleResolver({
3519
3519
-
serviceUrl: "https://public.api.bsky.app"
3520
3520
-
}),
3521
3521
-
didDocumentResolver: new CompositeDidDocumentResolver({
3522
3522
-
methods: {
3523
3523
-
plc: new PlcDidDocumentResolver(),
3524
3524
-
web: new WebDidDocumentResolver()
3525
3525
-
}
3526
3526
-
})
3527
3527
-
})
3528
3528
-
});
3529
3529
-
async function login(handle) {
3530
3530
-
const authUrl = await createAuthorizationUrl({
3531
3531
-
target: { type: "account", identifier: (
3532
3532
-
/** @type {any} */
3533
3533
-
handle
3534
3534
-
) },
3535
3535
-
scope: "atproto transition:generic"
3536
3536
-
});
3537
3537
-
window.location.assign(authUrl.toString());
3538
3538
-
}
3539
3539
-
__name(login, "login");
3540
3540
-
async function restoreOrFinalize() {
3541
3541
-
const params = new URLSearchParams(window.location.hash.slice(1));
3542
3542
-
if (params.has("code")) {
3543
3543
-
const result = await finalizeAuthorization(params);
3544
3544
-
history.replaceState(
3545
3545
-
null,
3546
3546
-
"",
3547
3547
-
window.location.pathname + window.location.search
3548
3548
-
);
3549
3549
-
localStorage.setItem(STORAGE_KEY, result.session.info.sub);
3550
3550
-
return result.session;
3551
3551
-
}
3552
3552
-
const did = localStorage.getItem(STORAGE_KEY);
3553
3553
-
if (did) {
3554
3554
-
try {
3555
3555
-
return await getSession(
3556
3556
-
/** @type {`did:${string}:${string}`} */
3557
3557
-
did,
3558
3558
-
{ allowStale: true }
3559
3559
-
);
3560
3560
-
} catch {
3561
3561
-
localStorage.removeItem(STORAGE_KEY);
3562
3562
-
return null;
3563
3563
-
}
3564
3564
-
}
3565
3565
-
return null;
3566
3566
-
}
3567
3567
-
__name(restoreOrFinalize, "restoreOrFinalize");
3568
3568
-
async function logout(agent) {
3569
3569
-
const did = localStorage.getItem(STORAGE_KEY);
3570
3570
-
try {
3571
3571
-
await agent.signOut();
3572
3572
-
} catch {
3573
3573
-
if (did) {
3574
3574
-
deleteStoredSession(
3575
3575
-
/** @type {`did:${string}:${string}`} */
3576
3576
-
did
3577
3577
-
);
3578
3578
-
}
3579
3579
-
}
3580
3580
-
localStorage.removeItem(STORAGE_KEY);
3581
3581
-
}
3582
3582
-
__name(logout, "logout");
3583
3583
-
3584
3584
-
export {
3585
3585
-
OAuthUserAgent,
3586
3586
-
login,
3587
3587
-
restoreOrFinalize,
3588
3588
-
logout
3589
3589
-
};
3590
3590
-
3591
3591
-
//# sourceMappingURL=./chunk-BP7OSAES.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-BP7OSAES.js.map
···
1
1
-
{"version":3,"sources":["/node_modules/.deno/@badrap+valita@0.4.6/node_modules/@badrap/valita/src/index.ts","/components/output/raw/atproto/oauth.js","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/index.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/environment.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/store/db.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/utils/runtime.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/errors.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/agents/exchange.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/index.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/client-assertion/index.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/client-assertion/create-client-assertion.ts","/node_modules/.deno/nanoid@5.1.6/node_modules/nanoid/index.js","/node_modules/.deno/nanoid@5.1.6/node_modules/nanoid/url-alphabet/index.js","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/internal/key-cache.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/internal/jwk.ts","/node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/lib/index.ts","/node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/lib/bases/base16-web.ts","/node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/lib/bases/base16-web-native.ts","/node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/lib/bases/base16-web-polyfill.ts","/node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/lib/utils.ts","/node_modules/.deno/@atcute+uint8array@1.1.1/node_modules/@atcute/uint8array/lib/index.ts","/node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/lib/bases/base64-web.ts","/node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/lib/bases/base64-web-native.ts","/node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/lib/bases/base64-web-polyfill.ts","/node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/lib/bases/base32.ts","/node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/lib/bases/base32-encode.ts","/node_modules/.deno/@atcute+multibase@1.1.8/node_modules/@atcute/multibase/lib/bases/base58.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/internal/crypto.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/jwt/index.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/client-assertion/generate-key.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/client-assertion/keys.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/dpop/index.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/dpop/fetch.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/hash/sha256.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/dpop/proof.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/dpop/generate-key.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/dpop/verify.ts","/node_modules/.deno/@badrap+valita@0.4.6/node_modules/@badrap/valita/src/index.esm.mts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/jwk/compute-jkt.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/hash/index.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/hash/pkce.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/jwk/index.ts","/node_modules/.deno/@atcute+oauth-crypto@0.1.0/node_modules/@atcute/oauth-crypto/lib/jwk/keys.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/resolvers.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/utils/response.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/utils/strings.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/agents/server-agent.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/dpop.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/utils/misc.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/agents/sessions.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/utils/dpop-key.ts","/node_modules/.deno/@atcute+oauth-browser-client@3.0.0/node_modules/@atcute/oauth-browser-client/lib/agents/user-agent.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/index.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/actor/local.ts","/node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/lib/index.ts","/node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/lib/typedefs.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/index.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/at-identifier.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/did.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/handle.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/utils/ascii.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/at-uri.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/utils.ts","/node_modules/.deno/esm-env@1.2.2/node_modules/esm-env/index.js","/node_modules/.deno/esm-env@1.2.2/node_modules/esm-env/browser-fallback.js","/node_modules/.deno/esm-env@1.2.2/node_modules/esm-env/dev-fallback.js","/node_modules/.deno/esm-env@1.2.2/node_modules/esm-env/true.js","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/nsid.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/record-key.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/cid.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/datetime.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/language.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/tid.ts","/node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/lib/syntax/uri.ts","/node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/dist/types.js","/node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/lib/utils.ts","/node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/lib/did.ts","/node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/lib/methods/plc.ts","/node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/lib/methods/web.ts","/node_modules/.deno/@atcute+identity@1.1.3/node_modules/@atcute/identity/lib/methods/key.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/errors.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/did/composite.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/did/methods/plc.ts","/node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/lib/index.ts","/node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/lib/doh-json.ts","/node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/lib/pipeline.ts","/node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/lib/transformers.ts","/node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/lib/errors.ts","/node_modules/.deno/@atcute+util-fetch@1.0.5/node_modules/@atcute/util-fetch/lib/streams/size-limit.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/did/utils.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/did/methods/web.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/did/methods/xrpc.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/handle/composite.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/handle/methods/doh-json.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/handle/methods/well-known.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/lib/handle/methods/xrpc.ts","/node_modules/.deno/@atcute+identity-resolver@1.2.2/node_modules/@atcute/identity-resolver/dist/types.js"],"sourcesContent":["/**\n * @module\n * A typesafe validation & parsing library for TypeScript.\n *\n * @example\n * ```ts\n * import * as v from \"@badrap/valita\";\n *\n * const vehicle = v.union(\n * v.object({ type: v.literal(\"plane\"), airline: v.string() }),\n * v.object({ type: v.literal(\"train\") }),\n * v.object({ type: v.literal(\"automobile\"), make: v.string() })\n * );\n * vehicle.parse({ type: \"bike\" });\n * // ValitaError: invalid_literal at .type (expected \"plane\", \"train\" or \"automobile\")\n * ```\n */\n\n// This is magic that turns object intersections to nicer-looking types.\ntype PrettyIntersection<V> = Extract<{ [K in keyof V]: V[K] }, unknown>;\n\ntype Literal = string | number | bigint | boolean;\ntype Key = string | number;\ntype InputType =\n | \"object\"\n | \"array\"\n | \"null\"\n | \"undefined\"\n | \"string\"\n | \"number\"\n | \"bigint\"\n | \"boolean\";\n\ntype CustomError =\n | undefined\n | string\n | {\n message?: string;\n path?: Key[];\n };\n\ntype IssueLeaf = Readonly<\n | { ok: false; code: \"custom_error\"; error: CustomError }\n | { ok: false; code: \"invalid_type\"; expected: InputType[] }\n | { ok: false; code: \"missing_value\" }\n | { ok: false; code: \"invalid_literal\"; expected: Literal[] }\n | { ok: false; code: \"unrecognized_keys\"; keys: Key[] }\n | { ok: false; code: \"invalid_union\"; tree: IssueTree }\n | {\n ok: false;\n code: \"invalid_length\";\n minLength: number;\n maxLength: number | undefined;\n }\n>;\n\nfunction expectedType(expected: InputType[]): IssueLeaf {\n return {\n ok: false,\n code: \"invalid_type\",\n expected,\n };\n}\n\nconst ISSUE_EXPECTED_NOTHING = expectedType([]);\nconst ISSUE_EXPECTED_STRING = expectedType([\"string\"]);\nconst ISSUE_EXPECTED_NUMBER = expectedType([\"number\"]);\nconst ISSUE_EXPECTED_BIGINT = expectedType([\"bigint\"]);\nconst ISSUE_EXPECTED_BOOLEAN = expectedType([\"boolean\"]);\nconst ISSUE_EXPECTED_UNDEFINED = expectedType([\"undefined\"]);\nconst ISSUE_EXPECTED_NULL = expectedType([\"null\"]);\nconst ISSUE_EXPECTED_OBJECT = expectedType([\"object\"]);\nconst ISSUE_EXPECTED_ARRAY = expectedType([\"array\"]);\nconst ISSUE_MISSING_VALUE: IssueLeaf = {\n ok: false,\n code: \"missing_value\",\n};\n\ntype IssueTree =\n | Readonly<{ ok: false; code: \"prepend\"; key: Key; tree: IssueTree }>\n | Readonly<{ ok: false; code: \"join\"; left: IssueTree; right: IssueTree }>\n | IssueLeaf;\n\ntype Issue = Readonly<\n | {\n code: \"custom_error\";\n path: Key[];\n message?: string | undefined;\n /** @deprecated Instead of `.error` use `.message`. */\n error: CustomError;\n }\n | { code: \"invalid_type\"; path: Key[]; expected: InputType[] }\n | { code: \"missing_value\"; path: Key[] }\n | { code: \"invalid_literal\"; path: Key[]; expected: Literal[] }\n | { code: \"unrecognized_keys\"; path: Key[]; keys: Key[] }\n | {\n code: \"invalid_union\";\n path: Key[];\n issues: Issue[];\n /** @deprecated Instead of `.tree` use `.issues`. */\n tree: IssueTree;\n }\n | {\n code: \"invalid_length\";\n path: Key[];\n minLength: number;\n maxLength: number | undefined;\n }\n>;\n\nfunction joinIssues(left: IssueTree | undefined, right: IssueTree): IssueTree {\n return left ? { ok: false, code: \"join\", left, right } : right;\n}\n\nfunction prependPath(key: Key, tree: IssueTree): IssueTree {\n return { ok: false, code: \"prepend\", key, tree };\n}\n\nfunction cloneIssueWithPath(tree: IssueLeaf, path: Key[]): Issue {\n const code = tree.code;\n switch (code) {\n case \"invalid_type\":\n return { code, path, expected: tree.expected };\n case \"invalid_literal\":\n return { code, path, expected: tree.expected };\n case \"missing_value\":\n return { code, path };\n case \"invalid_length\":\n return {\n code,\n path,\n minLength: tree.minLength,\n maxLength: tree.maxLength,\n };\n case \"unrecognized_keys\":\n return { code, path, keys: tree.keys };\n case \"invalid_union\":\n return { code, path, tree: tree.tree, issues: collectIssues(tree.tree) };\n case \"custom_error\":\n if (typeof tree.error === \"object\" && tree.error.path !== undefined) {\n path.push(...tree.error.path);\n }\n return {\n code,\n path,\n message:\n typeof tree.error === \"string\" ? tree.error : tree.error?.message,\n error: tree.error,\n };\n }\n}\n\nfunction collectIssues(\n tree: IssueTree,\n path: Key[] = [],\n issues: Issue[] = [],\n): Issue[] {\n for (;;) {\n if (tree.code === \"join\") {\n collectIssues(tree.left, path.slice(), issues);\n tree = tree.right;\n } else if (tree.code === \"prepend\") {\n path.push(tree.key);\n tree = tree.tree;\n } else {\n issues.push(cloneIssueWithPath(tree, path));\n return issues;\n }\n }\n}\n\nfunction separatedList(list: string[], sep: \"or\" | \"and\"): string {\n if (list.length === 0) {\n return \"nothing\";\n } else if (list.length === 1) {\n return list[0];\n } else {\n return `${list.slice(0, -1).join(\", \")} ${sep} ${list[list.length - 1]}`;\n }\n}\n\nfunction formatLiteral(value: Literal): string {\n return typeof value === \"bigint\" ? `${value}n` : JSON.stringify(value);\n}\n\nfunction countIssues(tree: IssueTree): number {\n let count = 0;\n for (;;) {\n if (tree.code === \"join\") {\n count += countIssues(tree.left);\n tree = tree.right;\n } else if (tree.code === \"prepend\") {\n tree = tree.tree;\n } else {\n return count + 1;\n }\n }\n}\n\nfunction formatIssueTree(tree: IssueTree): string {\n let path = \"\";\n let count = 0;\n for (;;) {\n if (tree.code === \"join\") {\n count += countIssues(tree.right);\n tree = tree.left;\n } else if (tree.code === \"prepend\") {\n path += `.${tree.key}`;\n tree = tree.tree;\n } else {\n break;\n }\n }\n\n let message = \"validation failed\";\n if (tree.code === \"invalid_type\") {\n message = `expected ${separatedList(tree.expected, \"or\")}`;\n } else if (tree.code === \"invalid_literal\") {\n message = `expected ${separatedList(\n tree.expected.map(formatLiteral),\n \"or\",\n )}`;\n } else if (tree.code === \"missing_value\") {\n message = `missing value`;\n } else if (tree.code === \"unrecognized_keys\") {\n const keys = tree.keys;\n message = `unrecognized ${\n keys.length === 1 ? \"key\" : \"keys\"\n } ${separatedList(keys.map(formatLiteral), \"and\")}`;\n } else if (tree.code === \"invalid_length\") {\n const min = tree.minLength;\n const max = tree.maxLength;\n message = `expected an array with `;\n if (min > 0) {\n if (max === min) {\n message += `${min}`;\n } else if (max !== undefined) {\n message += `between ${min} and ${max}`;\n } else {\n message += `at least ${min}`;\n }\n } else {\n message += `at most ${max ?? \"∞\"}`;\n }\n message += ` item(s)`;\n } else if (tree.code === \"custom_error\") {\n const error = tree.error;\n if (typeof error === \"string\") {\n message = error;\n } else if (error !== undefined) {\n if (error.message !== undefined) {\n message = error.message;\n }\n if (error.path !== undefined) {\n path += \".\" + error.path.join(\".\");\n }\n }\n }\n\n let msg = `${tree.code} at .${path.slice(1)} (${message})`;\n if (count === 1) {\n msg += ` (+ 1 other issue)`;\n } else if (count > 1) {\n msg += ` (+ ${count} other issues)`;\n }\n return msg;\n}\n\nfunction lazyProperty<T>(\n obj: object,\n prop: string | number | symbol,\n value: T,\n enumerable: boolean,\n): T {\n Object.defineProperty(obj, prop, {\n value,\n enumerable,\n writable: false,\n });\n return value;\n}\n\n/**\n * An error type representing one or more validation/parsing errors.\n *\n * The `.message` property gives a short overview of the encountered issues,\n * while the `.issue` property can be used to get a more detailed list.\n *\n * @example\n * ```ts\n * const t = v.object({ a: v.null(), b: v.null() });\n *\n * try {\n * t.parse({ a: 1 });\n * } catch (err) {\n * err.message;\n * // \"invalid_type at .a (expected null) (+ 1 other issue)\"\n *\n * err.issues;\n * // [\n * // { code: 'invalid_type', path: [ 'a' ], expected: [ 'null' ] },\n * // { code: 'missing_value', path: [ 'b' ] }\n * // ]\n * }\n * ```\n */\nexport class ValitaError extends Error {\n /** @internal */\n private readonly _issueTree: IssueTree;\n\n constructor(issueTree: IssueTree) {\n super(formatIssueTree(issueTree));\n\n Object.setPrototypeOf(this, new.target.prototype);\n\n this.name = new.target.name;\n this._issueTree = issueTree;\n }\n\n get issues(): readonly Issue[] {\n return lazyProperty(this, \"issues\", collectIssues(this._issueTree), true);\n }\n}\n\n/**\n * A successful validation/parsing result.\n *\n * Used in situations where both the parsing success and failure\n * cases are returned as values.\n */\nexport type Ok<T> = {\n readonly ok: true;\n\n /**\n * The successfully parsed value.\n */\n readonly value: T;\n};\n\n/**\n * A validation/parsing failure.\n *\n * Used in situations where both the parsing success and failure\n * cases are returned as values.\n */\nexport type Err = {\n readonly ok: false;\n\n /**\n * A condensed overview of the parsing issues.\n */\n readonly message: string;\n\n /**\n * A detailed list of the parsing issues.\n */\n readonly issues: readonly Issue[];\n\n /**\n * Throw a new ValitaError representing the parsing issues.\n */\n throw(): never;\n};\n\n/**\n * A validation/parsing success or failure.\n *\n * Used by parsing-related methods where and both success and failure\n * cases are returned as values (instead of raising an exception on failure).\n * The most notable example is the `Type.try(...)` method.\n *\n * The `.ok` property can to assert whether the value represents a success or\n * failure and access further information in a typesafe way.\n *\n * @example\n * ```ts\n * const t = v.string();\n *\n * // Make parsing fail or succeed about equally.\n * const result = t.try(Math.random() < 0.5 ? \"hello\" : null);\n *\n * if (result.ok) {\n * // TypeScript allows accessing .value within this code block.\n * console.log(`Success: ${result.value}`);\n * } else {\n * // TypeScript allows accessing .message within this code block.\n * console.log(`Failed: ${result.message}`);\n * }\n * ```\n */\nexport type ValitaResult<V> = Ok<V> | Err;\n\nclass ErrImpl implements Err {\n readonly ok = false;\n\n /** @internal */\n private readonly _issueTree: IssueTree;\n\n constructor(issueTree: IssueTree) {\n this._issueTree = issueTree;\n }\n\n get issues(): readonly Issue[] {\n return lazyProperty(this, \"issues\", collectIssues(this._issueTree), true);\n }\n\n get message(): string {\n return lazyProperty(\n this,\n \"message\",\n formatIssueTree(this._issueTree),\n true,\n );\n }\n\n throw(): never {\n throw new ValitaError(this._issueTree);\n }\n}\n\n/**\n * Create a value for returning a successful parsing result from chain().\n *\n * @example\n * ```ts\n * const t = v.string().chain((s) => v.ok(s + \", world!\"));\n *\n * t.parse(\"Hello\");\n * // \"Hello, world!\"\n * ```\n */\nexport function ok<T extends Literal>(value: T): Ok<T>;\nexport function ok<T>(value: T): Ok<T>;\nexport function ok<T>(value: T): Ok<T> {\n return { ok: true, value };\n}\n\n/**\n * Create a value for returning a parsing error from chain().\n *\n * An optional error message can be provided.\n *\n * @example\n * ```ts\n * const t = v.string().chain(() => v.err(\"bad value\"));\n *\n * t.parse(\"hello\");\n * // ValitaError: custom_error at . (bad value)\n * ```\n */\nexport function err(error?: CustomError): Err {\n return new ErrImpl({ ok: false, code: \"custom_error\", error });\n}\n\nfunction isObject(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nconst FLAG_FORBID_EXTRA_KEYS = 1 << 0;\nconst FLAG_STRIP_EXTRA_KEYS = 1 << 1;\nconst FLAG_MISSING_VALUE = 1 << 2;\n\n/**\n * Return the inferred output type of a validator.\n *\n * @example\n * ```ts\n * const t = v.union(v.literal(1), v.string());\n *\n * type T = v.Infer<typeof t>;\n * // type T = 1 | string;\n * ```\n */\nexport type Infer<T extends AbstractType> =\n T extends AbstractType<infer I> ? I : never;\n\nexport type ParseOptions = {\n mode?: \"passthrough\" | \"strict\" | \"strip\";\n};\n\nconst TAG_UNKNOWN = 0;\nconst TAG_NEVER = 1;\nconst TAG_STRING = 2;\nconst TAG_NUMBER = 3;\nconst TAG_BIGINT = 4;\nconst TAG_BOOLEAN = 5;\nconst TAG_NULL = 6;\nconst TAG_UNDEFINED = 7;\nconst TAG_LITERAL = 8;\nconst TAG_OPTIONAL = 9;\nconst TAG_OBJECT = 10;\nconst TAG_ARRAY = 11;\nconst TAG_UNION = 12;\nconst TAG_SIMPLE_UNION = 13;\nconst TAG_TRANSFORM = 14;\nconst TAG_OTHER = 15;\n\ntype MatcherResult = undefined | Ok<unknown> | IssueTree;\n\ntype Matcher<Input = unknown> = (value: Input, flags: number) => MatcherResult;\n\ntype TaggedMatcher = { tag: number; match: Matcher };\n\nconst taggedMatcher = (tag: number, match: Matcher): TaggedMatcher => {\n return { tag, match };\n};\n\nfunction callMatcher(\n matcher: TaggedMatcher,\n value: unknown,\n flags: number,\n): MatcherResult {\n switch (matcher.tag) {\n case TAG_UNKNOWN:\n return undefined;\n case TAG_NEVER:\n return ISSUE_EXPECTED_NOTHING;\n case TAG_STRING:\n return typeof value === \"string\" ? undefined : ISSUE_EXPECTED_STRING;\n case TAG_NUMBER:\n return typeof value === \"number\" ? undefined : ISSUE_EXPECTED_NUMBER;\n case TAG_BIGINT:\n return typeof value === \"bigint\" ? undefined : ISSUE_EXPECTED_BIGINT;\n case TAG_BOOLEAN:\n return typeof value === \"boolean\" ? undefined : ISSUE_EXPECTED_BOOLEAN;\n case TAG_NULL:\n return value === null ? undefined : ISSUE_EXPECTED_NULL;\n case TAG_UNDEFINED:\n return value === undefined ? undefined : ISSUE_EXPECTED_UNDEFINED;\n case TAG_LITERAL:\n return matcher.match(value, flags);\n case TAG_OPTIONAL:\n return matcher.match(value, flags);\n case TAG_OBJECT:\n return matcher.match(value, flags);\n case TAG_ARRAY:\n return matcher.match(value, flags);\n case TAG_UNION:\n return matcher.match(value, flags);\n case TAG_SIMPLE_UNION:\n return matcher.match(value, flags);\n case TAG_TRANSFORM:\n return matcher.match(value, flags);\n default:\n return matcher.match(value, flags);\n }\n}\n\nconst MATCHER_SYMBOL: unique symbol = Symbol.for(\"@valita/internal\");\n\nabstract class AbstractType<Output = unknown> {\n abstract readonly name: string;\n\n /** @internal */\n abstract _toTerminals(func: (t: TerminalType) => void): void;\n\n /** @internal */\n abstract readonly [MATCHER_SYMBOL]: TaggedMatcher;\n\n /**\n * Return new optional type that can not be used as a standalone\n * validator. Rather, it's meant to be used as a with object validators,\n * to mark one of the object's properties as _optional_. Optional property\n * types accept both the original type, `undefined` and missing properties.\n *\n * The optional `defaultFn` function, if provided, will be called each\n * time a value that is missing or `undefined` is parsed.\n *\n * @param [defaultFn] - An optional function returning the default value.\n */\n // Use `<X extends T>() => X` instead of `() => T` to make literal\n // inference work when an optionals with defaultFn is used as a\n // ObjectType property.\n // The same could be accomplished by replacing the `| T` in the\n // output type with `NoInfer<T>`, but it's supported only from\n // TypeScript 5.4 onwards.\n abstract optional<T extends Literal>(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n defaultFn: <X extends T>() => X,\n ): Type<Exclude<Output, undefined> | T>;\n // Support parsers like `v.array(t).optional(() => [])`\n // so that the output type is `Infer<typeof t>[]` instead of\n // `Infer<typeof t>[] | never[]`.\n abstract optional(\n defaultFn: () => Exclude<Output, undefined>,\n ): Type<Exclude<Output, undefined>>;\n abstract optional<T>(\n defaultFn: () => T,\n ): Type<Exclude<Output, undefined> | T>;\n abstract optional(): Optional<Output>;\n\n /**\n * @deprecated Instead of `.default(x)` use `.optional(() => x)`.\n */\n default<T extends Literal>(\n defaultValue: T,\n ): Type<Exclude<Output, undefined> | T>;\n default<T>(defaultValue: T): Type<Exclude<Output, undefined> | T>;\n default<T>(defaultValue: T): Type<Exclude<Output, undefined> | T> {\n const defaultResult = ok(defaultValue);\n return new TransformType(this.optional(), (v) => {\n return v === undefined ? defaultResult : undefined;\n });\n }\n\n /**\n * Derive a new validator that uses the provided predicate function to\n * perform custom validation for the source validator's output values.\n *\n * The predicate function should return `true` when the source\n * type's output value is valid, `false` otherwise. The checked value\n * itself won't get modified or replaced, and is returned as-is on\n * validation success.\n *\n * @example A validator that accepts only numeric strings.\n * ```ts\n * const numericString = v.string().assert((s) => /^\\d+$/.test(s))\n * numericString.parse(\"1\");\n * // \"1\"\n * numericString.parse(\"foo\");\n * // ValitaError: custom_error at . (validation failed)\n * ```\n *\n * You can also _refine_ the output type by passing in a\n * [type predicate](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates).\n * Note that the type predicate must have a compatible input type.\n *\n * @example A validator with its output type refined to `Date`.\n * ```ts\n * const dateType = v.unknown().assert((v): v is Date => v instanceof Date);\n * ```\n *\n * You can also pass in a custom failure messages.\n *\n * @example A validator that rejects non-integers with a custom error.\n * ```ts\n * const integer = v.number().assert((n) => Number.isInteger(n), \"not an integer\");\n * integer.parse(1);\n * // 1\n * integer.parse(1.5);\n * // ValitaError: custom_error at . (not an integer)\n * ```\n *\n * @param func - The assertion predicate function.\n * @param [error] - A custom error for situations when the assertion\n * predicate returns `false`.\n */\n assert<T extends Output>(\n func:\n | ((v: Output, options: ParseOptions) => v is T)\n | ((v: Output, options: ParseOptions) => boolean),\n error?: CustomError,\n ): Type<T> {\n const err: IssueLeaf = { ok: false, code: \"custom_error\", error };\n return new TransformType(this, (v, flags) =>\n func(v as Output, flagsToOptions(flags)) ? undefined : err,\n );\n }\n\n /**\n * Derive a new validator that uses the provided mapping function to\n * perform custom mapping for the source validator's output values.\n *\n * The mapped value's type doesn't have to stay same, but mapping must\n * always succeed (i.e. not throw) for all values that the source validator\n * outputs.\n *\n * @example\n * ```ts\n * const stringLength = v.string().assert((s) => s.length);\n * stringLength.parse(\"Hello, World!\");\n * // 13\n * stringLength.parse(1);\n * // ValitaError: invalid_type at . (expected string)\n * ```\n *\n * @param func - The mapping function.\n */\n map<T extends Literal>(\n func: (v: Output, options: ParseOptions) => T,\n ): Type<T>;\n map<T>(func: (v: Output, options: ParseOptions) => T): Type<T>;\n map<T>(func: (v: Output, options: ParseOptions) => T): Type<T> {\n return new TransformType(this, (v, flags) => ({\n ok: true,\n value: func(v as Output, flagsToOptions(flags)),\n }));\n }\n\n /**\n * Derive a new validator that uses the provided mapping function to\n * perform custom parsing for the source validator's output values.\n *\n * Unlike `.map`, `.chain` can also be used for cases where the\n * transformation might fail. If the transformation fails, return an error\n * with an optional message with `err(...)`. If not, then return the\n * transformed value with `ok(...)`.\n *\n * @example A parser for date strings, returns `Date` objects on success.\n * ```ts\n * const DateType = v.string().chain((s) => {\n * const date = new Date(s);\n * if (isNaN(+date)) {\n * return v.err(\"invalid date\");\n * }\n * return v.ok(date);\n * });\n *\n * Date.parse(\"2022-01-01\");\n * // 2022-01-01T00:00:00.000Z\n * Date.parse(\"foo\");\n * // ValitaError: custom_error at . (invalid date)\n * ```\n *\n * @param func - The parsing function.\n */\n chain<T extends Literal>(\n func: (v: Output, options: ParseOptions) => ValitaResult<T>,\n ): Type<T>;\n chain<T>(\n func: (v: Output, options: ParseOptions) => ValitaResult<T>,\n ): Type<T>;\n chain<T>(type: Type<T>): Type<T>;\n chain(\n input: Type | ((v: Output, options: ParseOptions) => ValitaResult<unknown>),\n ): Type {\n if (typeof input === \"function\") {\n return new TransformType(this, (v, flags) => {\n const r = input(v as Output, flagsToOptions(flags));\n return r.ok\n ? r\n : (r as unknown as { _issueTree: IssueTree })._issueTree;\n });\n }\n return new TransformType(this, (v, flags) =>\n callMatcher(input[MATCHER_SYMBOL], v, flags),\n );\n }\n}\n\ntype TypeName =\n | \"unknown\"\n | \"never\"\n | \"string\"\n | \"number\"\n | \"bigint\"\n | \"boolean\"\n | \"null\"\n | \"undefined\"\n | \"literal\"\n | \"object\"\n | \"array\"\n | \"union\"\n | \"lazy\"\n | \"transform\";\n\n/**\n * A base class for all concrete validators/parsers.\n */\nabstract class Type<Output = unknown> extends AbstractType<Output> {\n abstract name: TypeName;\n\n optional<T extends Literal>(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n defaultFn: <X extends T>() => X,\n ): Type<Exclude<Output, undefined> | T>;\n optional(\n defaultFn: () => Exclude<Output, undefined>,\n ): Type<Exclude<Output, undefined>>;\n optional<T>(defaultFn: () => T): Type<Exclude<Output, undefined> | T>;\n optional(): Optional<Output>;\n optional(defaultFn?: () => unknown): unknown {\n // If this type is already Optional there's no need to wrap it inside\n // a new Optional instance.\n const optional = new Optional(this);\n if (!defaultFn) {\n return optional;\n }\n return new TransformType(optional, (v) => {\n return v === undefined ? { ok: true, value: defaultFn() } : undefined;\n });\n }\n\n /**\n * Return new validator that accepts both the original type and `null`.\n *\n * The optional `defaultFn` function, if provided, will be called each\n * time a `null` is parsed.\n *\n * @param [defaultFn] - An optional function returning the default value.\n */\n nullable<T extends Literal>(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n defaultFn: <X extends T>() => X,\n ): Type<Exclude<Output, null> | T>;\n nullable(defaultFn: () => Exclude<Output, null>): Type<Exclude<Output, null>>;\n nullable<T>(defaultFn: () => T): Type<Exclude<Output, null> | T>;\n nullable(): UnionType<[Type<null>, this]>;\n nullable(defaultFn?: () => unknown): unknown {\n const nullable = new SimpleUnion([null_(), this]);\n if (!defaultFn) {\n return nullable;\n }\n return new TransformType(nullable, (v) => {\n return v === null ? { ok: true, value: defaultFn() } : undefined;\n });\n }\n\n _toTerminals(func: (t: TerminalType) => void): void {\n func(this as TerminalType);\n }\n\n /**\n * Parse a value without throwing.\n */\n try(v: unknown, options?: ParseOptions): ValitaResult<Infer<this>> {\n const r = callMatcher(\n this[MATCHER_SYMBOL],\n v,\n options === undefined\n ? FLAG_FORBID_EXTRA_KEYS\n : options.mode === \"strip\"\n ? FLAG_STRIP_EXTRA_KEYS\n : options.mode === \"passthrough\"\n ? 0\n : FLAG_FORBID_EXTRA_KEYS,\n );\n return r === undefined || r.ok\n ? { ok: true, value: (r === undefined ? v : r.value) as Infer<this> }\n : new ErrImpl(r);\n }\n\n /**\n * Parse a value. Throw a ValitaError on failure.\n */\n parse(v: unknown, options?: ParseOptions): Infer<this> {\n const r = callMatcher(\n this[MATCHER_SYMBOL],\n v,\n options === undefined\n ? FLAG_FORBID_EXTRA_KEYS\n : options.mode === \"strip\"\n ? FLAG_STRIP_EXTRA_KEYS\n : options.mode === \"passthrough\"\n ? 0\n : FLAG_FORBID_EXTRA_KEYS,\n );\n if (r === undefined || r.ok) {\n return (r === undefined ? v : r.value) as Infer<this>;\n }\n throw new ValitaError(r);\n }\n}\n\nclass SimpleUnion<Options extends Type[]> extends Type<Infer<Options[number]>> {\n readonly name = \"union\";\n readonly options: Readonly<Options>;\n\n constructor(options: Readonly<Options>) {\n super();\n this.options = options;\n }\n\n get [MATCHER_SYMBOL](): TaggedMatcher {\n const options = this.options.map((o) => o[MATCHER_SYMBOL]);\n return lazyProperty(\n this,\n MATCHER_SYMBOL,\n taggedMatcher(TAG_SIMPLE_UNION, (v, flags) => {\n let issue: IssueTree = ISSUE_EXPECTED_NOTHING;\n for (const option of options) {\n const result = callMatcher(option, v, flags);\n if (result === undefined || result.ok) {\n return result;\n }\n issue = result;\n }\n return issue;\n }),\n false,\n );\n }\n\n _toTerminals(func: (t: TerminalType) => void): void {\n for (const option of this.options) {\n option._toTerminals(func);\n }\n }\n}\n\n/**\n * A validator/parser marked as \"optional\", signifying that their value can\n * be missing from the parsed object.\n *\n * As such optionals can only be used as property validators within\n * object validators.\n */\nclass Optional<Output = unknown> extends AbstractType<Output | undefined> {\n readonly name = \"optional\";\n readonly type: Type<Output>;\n\n constructor(type: Type<Output>) {\n super();\n this.type = type;\n }\n\n optional<T extends Literal>(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n defaultFn: <X extends T>() => X,\n ): Type<Exclude<Output, undefined> | T>;\n optional(\n defaultFn: () => Exclude<Output, undefined>,\n ): Type<Exclude<Output, undefined>>;\n optional<T>(defaultFn: () => T): Type<Exclude<Output, undefined> | T>;\n optional(): Optional<Output>;\n optional(defaultFn?: () => unknown): unknown {\n if (!defaultFn) {\n return this;\n }\n return new TransformType(this, (v) => {\n return v === undefined ? { ok: true, value: defaultFn() } : undefined;\n });\n }\n\n get [MATCHER_SYMBOL](): TaggedMatcher {\n const matcher = this.type[MATCHER_SYMBOL];\n return lazyProperty(\n this,\n MATCHER_SYMBOL,\n taggedMatcher(TAG_OPTIONAL, (v, flags) =>\n v === undefined || flags & FLAG_MISSING_VALUE\n ? undefined\n : callMatcher(matcher, v, flags),\n ),\n false,\n );\n }\n\n _toTerminals(func: (t: TerminalType) => void): void {\n func(this);\n func(undefined_() as TerminalType);\n this.type._toTerminals(func);\n }\n}\n\ntype ObjectShape = Record<string, AbstractType>;\n\ntype ObjectOutput<\n T extends ObjectShape,\n R extends AbstractType | undefined,\n> = PrettyIntersection<\n {\n [K in keyof T]?: T[K] extends Optional ? Infer<T[K]> : unknown;\n } & {\n [K in keyof T as T[K] extends Optional ? never : K]: Infer<T[K]>;\n } & (R extends Type<infer I>\n ? Record<string, I>\n : R extends Optional<infer J>\n ? Partial<Record<string, J>>\n : unknown)\n>;\n\n// A bitset type, used for keeping track which known (required & optional) keys\n// the object validator has seen. Basically, when key `knownKey` is encountered,\n// the corresponding bit at index `keys.indexOf(knownKey)` gets flipped to 1.\n//\n// BitSet values initially start as a number (to avoid garbage collector churn),\n// and an empty BitSet is initialized like this:\n// let bitSet: BitSet = 0;\n//\n// As JavaScript bit arithmetic for numbers can only deal with 32-bit numbers,\n// BitSet values are upgraded to number arrays if a bits other than 0-31 need\n// to be flipped.\ntype BitSet = number | number[];\n\n// Set a bit in position `index` to one and return the updated bitset.\n// This function may or may not mutate `bits` in-place.\nfunction setBit(bits: BitSet, index: number): BitSet {\n if (typeof bits !== \"number\") {\n const idx = index >> 5;\n for (let i = bits.length; i <= idx; i++) {\n bits.push(0);\n }\n bits[idx] |= 1 << index % 32;\n return bits;\n } else if (index < 32) {\n return bits | (1 << index);\n } else {\n return setBit([bits, 0], index);\n }\n}\n\n// Get the bit at position `index`.\nfunction getBit(bits: BitSet, index: number): number {\n if (typeof bits === \"number\") {\n return index < 32 ? (bits >>> index) & 1 : 0;\n } else {\n return (bits[index >> 5] >>> index % 32) & 1;\n }\n}\n\nclass ObjectType<\n Shape extends ObjectShape = ObjectShape,\n Rest extends AbstractType | undefined = AbstractType | undefined,\n> extends Type<ObjectOutput<Shape, Rest>> {\n readonly name = \"object\";\n readonly shape: Shape;\n\n /** @internal */\n private readonly _restType: Rest;\n\n /** @internal */\n private readonly _checks?: {\n func: (v: unknown) => boolean;\n issue: IssueLeaf;\n }[];\n\n constructor(\n shape: Shape,\n restType: Rest,\n checks?: {\n func: (v: unknown) => boolean;\n issue: IssueLeaf;\n }[],\n ) {\n super();\n this.shape = shape;\n this._restType = restType;\n this._checks = checks;\n }\n\n get [MATCHER_SYMBOL](): TaggedMatcher {\n const func = createObjectMatcher(this.shape, this._restType, this._checks);\n return lazyProperty(\n this,\n MATCHER_SYMBOL,\n taggedMatcher(TAG_OBJECT, (v, flags) =>\n isObject(v) ? func(v, flags) : ISSUE_EXPECTED_OBJECT,\n ),\n false,\n );\n }\n\n check(\n func: (v: ObjectOutput<Shape, Rest>) => boolean,\n error?: CustomError,\n ): ObjectType<Shape, Rest> {\n const issue: IssueLeaf = { ok: false, code: \"custom_error\", error };\n return new ObjectType(this.shape, this._restType, [\n ...(this._checks ?? []),\n {\n func: func as (v: unknown) => boolean,\n issue,\n },\n ]);\n }\n\n rest<R extends Type>(restType: R): ObjectType<Shape, R> {\n return new ObjectType(this.shape, restType);\n }\n\n extend<S extends ObjectShape>(\n shape: S,\n ): ObjectType<Omit<Shape, keyof S> & S, Rest> {\n return new ObjectType(\n { ...this.shape, ...shape } as Omit<Shape, keyof S> & S,\n this._restType,\n );\n }\n\n pick<K extends (string & keyof Shape)[]>(\n ...keys: K\n ): ObjectType<Pick<Shape, K[number]>, undefined> {\n const shape = {} as Pick<Shape, K[number]>;\n for (const key of keys) {\n set(shape, key, this.shape[key]);\n }\n return new ObjectType(shape, undefined);\n }\n\n omit<K extends (string & keyof Shape)[]>(\n ...keys: K\n ): ObjectType<Omit<Shape, K[number]>, Rest> {\n const shape = { ...this.shape };\n for (const key of keys) {\n delete shape[key];\n }\n return new ObjectType(shape as Omit<Shape, K[number]>, this._restType);\n }\n\n partial(): ObjectType<\n { [K in keyof Shape]: Optional<Infer<Shape[K]>> },\n Rest extends AbstractType<infer I> ? Optional<I> : undefined\n > {\n const shape = {} as Record<string, unknown>;\n for (const key of Object.keys(this.shape)) {\n set(shape, key, this.shape[key].optional());\n }\n const rest = this._restType?.optional();\n return new ObjectType(\n shape as { [K in keyof Shape]: Optional<Infer<Shape[K]>> },\n rest as Rest extends AbstractType<infer I> ? Optional<I> : undefined,\n );\n }\n}\n\nfunction set(obj: Record<string, unknown>, key: string, value: unknown): void {\n if (key === \"__proto__\") {\n Object.defineProperty(obj, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n } else {\n obj[key] = value;\n }\n}\n\nfunction createObjectMatcher(\n shape: ObjectShape,\n rest?: AbstractType,\n checks?: {\n func: (v: unknown) => boolean;\n issue: IssueLeaf;\n }[],\n): Matcher<Record<string, unknown>> {\n type Entry = {\n key: string;\n index: number;\n matcher: TaggedMatcher;\n optional: boolean;\n missing: IssueTree;\n };\n\n const indexedEntries = Object.keys(shape).map((key, index) => {\n const type = shape[key];\n\n let optional = false as boolean;\n type._toTerminals((t) => {\n optional ||= t.name === \"optional\";\n });\n\n return {\n key,\n index,\n matcher: type[MATCHER_SYMBOL],\n optional,\n missing: prependPath(key, ISSUE_MISSING_VALUE),\n } satisfies Entry;\n });\n\n const keyedEntries = Object.create(null) as { [K in string]?: Entry };\n for (const entry of indexedEntries) {\n keyedEntries[entry.key] = entry;\n }\n\n const restMatcher = rest?.[MATCHER_SYMBOL];\n\n // A fast path for record(unknown()) without checks\n const fastPath =\n indexedEntries.length === 0 &&\n rest?.name === \"unknown\" &&\n checks === undefined;\n\n return (obj, flags) => {\n if (fastPath) {\n return undefined;\n }\n\n let output: Record<string, unknown> | undefined = undefined;\n let issues: IssueTree | undefined = undefined;\n let unrecognized: Key[] | undefined = undefined;\n let seenBits: BitSet = 0;\n let seenCount = 0;\n\n if (\n flags & (FLAG_FORBID_EXTRA_KEYS | FLAG_STRIP_EXTRA_KEYS) ||\n restMatcher !== undefined\n ) {\n for (const key in obj) {\n const value = obj[key];\n\n const entry = keyedEntries[key];\n if (entry === undefined && restMatcher === undefined) {\n if (flags & FLAG_FORBID_EXTRA_KEYS) {\n if (unrecognized === undefined) {\n unrecognized = [key];\n issues = joinIssues(issues, {\n ok: false,\n code: \"unrecognized_keys\",\n keys: unrecognized,\n });\n } else {\n unrecognized.push(key);\n }\n } else if (\n flags & FLAG_STRIP_EXTRA_KEYS &&\n issues === undefined &&\n output === undefined\n ) {\n output = {};\n for (let m = 0; m < indexedEntries.length; m++) {\n if (getBit(seenBits, m)) {\n const k = indexedEntries[m].key;\n set(output, k, obj[k]);\n }\n }\n }\n continue;\n }\n\n const r =\n entry === undefined\n ? callMatcher(restMatcher!, value, flags)\n : callMatcher(entry.matcher, value, flags);\n if (r === undefined) {\n if (output !== undefined && issues === undefined) {\n set(output, key, value);\n }\n } else if (!r.ok) {\n issues = joinIssues(issues, prependPath(key, r));\n } else if (issues === undefined) {\n if (output === undefined) {\n output = {};\n if (restMatcher === undefined) {\n for (let m = 0; m < indexedEntries.length; m++) {\n if (getBit(seenBits, m)) {\n const k = indexedEntries[m].key;\n set(output, k, obj[k]);\n }\n }\n } else {\n for (const k in obj) {\n set(output, k, obj[k]);\n }\n }\n }\n set(output, key, r.value);\n }\n\n if (entry !== undefined) {\n seenCount++;\n seenBits = setBit(seenBits, entry.index);\n }\n }\n }\n\n if (seenCount < indexedEntries.length) {\n for (let i = 0; i < indexedEntries.length; i++) {\n if (getBit(seenBits, i)) {\n continue;\n }\n const entry = indexedEntries[i];\n const value = obj[entry.key];\n\n let extraFlags = 0;\n if (value === undefined && !(entry.key in obj)) {\n if (!entry.optional) {\n issues = joinIssues(issues, entry.missing);\n continue;\n }\n extraFlags = FLAG_MISSING_VALUE;\n }\n\n const r = callMatcher(entry.matcher, value, flags | extraFlags);\n if (r === undefined) {\n if (output !== undefined && issues === undefined && !extraFlags) {\n set(output, entry.key, value);\n }\n } else if (!r.ok) {\n issues = joinIssues(issues, prependPath(entry.key, r));\n } else if (issues === undefined) {\n if (output === undefined) {\n output = {};\n if (restMatcher === undefined) {\n for (let m = 0; m < indexedEntries.length; m++) {\n if (m < i || getBit(seenBits, m)) {\n const k = indexedEntries[m].key;\n set(output, k, obj[k]);\n }\n }\n } else {\n for (const k in obj) {\n set(output, k, obj[k]);\n }\n for (let m = 0; m < i; m++) {\n if (!getBit(seenBits, m)) {\n const k = indexedEntries[m].key;\n set(output, k, obj[k]);\n }\n }\n }\n }\n set(output, entry.key, r.value);\n }\n }\n }\n\n if (issues !== undefined) {\n return issues;\n }\n\n if (checks !== undefined) {\n for (const { func, issue } of checks) {\n if (!func(output ?? obj)) {\n return issue;\n }\n }\n }\n return output && { ok: true, value: output };\n };\n}\n\ntype TupleOutput<T extends Type[]> = {\n [K in keyof T]: T[K] extends Type<infer U> ? U : never;\n};\n\ntype ArrayOutput<\n Head extends Type[],\n Rest extends Type | undefined,\n Tail extends Type[],\n> = [\n ...TupleOutput<Head>,\n ...(Rest extends Type ? Infer<Rest>[] : []),\n ...TupleOutput<Tail>,\n];\n\nclass ArrayOrTupleType<\n Head extends Type[] = Type[],\n Rest extends Type | undefined = Type | undefined,\n Tail extends Type[] = Type[],\n> extends Type<ArrayOutput<Head, Rest, Tail>> {\n readonly name = \"array\";\n readonly _prefix: Head;\n readonly _rest: Rest | undefined;\n readonly _suffix: Tail;\n\n constructor(prefix: Head, rest: Rest | undefined, suffix: Tail) {\n super();\n this._prefix = prefix;\n this._rest = rest;\n this._suffix = suffix;\n }\n\n get [MATCHER_SYMBOL](): TaggedMatcher {\n const prefix = this._prefix.map((t) => t[MATCHER_SYMBOL]);\n const suffix = this._suffix.map((t) => t[MATCHER_SYMBOL]);\n const rest =\n this._rest?.[MATCHER_SYMBOL] ??\n taggedMatcher(1, () => ISSUE_MISSING_VALUE);\n\n const minLength = prefix.length + suffix.length;\n const maxLength = this._rest ? Infinity : minLength;\n const invalidLength: IssueLeaf = {\n ok: false,\n code: \"invalid_length\",\n minLength,\n maxLength: maxLength === Infinity ? undefined : maxLength,\n };\n\n return lazyProperty(\n this,\n MATCHER_SYMBOL,\n taggedMatcher(TAG_ARRAY, (arr, flags) => {\n if (!Array.isArray(arr)) {\n return ISSUE_EXPECTED_ARRAY;\n }\n\n const length = arr.length;\n if (length < minLength || length > maxLength) {\n return invalidLength;\n }\n\n const headEnd = prefix.length;\n const tailStart = arr.length - suffix.length;\n\n let issueTree: IssueTree | undefined = undefined;\n let output: unknown[] = arr;\n for (let i = 0; i < arr.length; i++) {\n const entry =\n i < headEnd\n ? prefix[i]\n : i >= tailStart\n ? suffix[i - tailStart]\n : rest;\n const r = callMatcher(entry, arr[i], flags);\n if (r !== undefined) {\n if (r.ok) {\n if (output === arr) {\n output = arr.slice();\n }\n output[i] = r.value;\n } else {\n issueTree = joinIssues(issueTree, prependPath(i, r));\n }\n }\n }\n if (issueTree) {\n return issueTree;\n } else if (arr === output) {\n return undefined;\n } else {\n return { ok: true, value: output };\n }\n }),\n false,\n );\n }\n\n concat(type: ArrayType | TupleType | VariadicTupleType): ArrayOrTupleType {\n if (this._rest) {\n if (type._rest) {\n throw new TypeError(\"can not concatenate two variadic types\");\n }\n return new ArrayOrTupleType(this._prefix, this._rest, [\n ...this._suffix,\n ...type._prefix,\n ...type._suffix,\n ]);\n } else if (type._rest) {\n return new ArrayOrTupleType(\n [...this._prefix, ...this._suffix, ...type._prefix],\n type._rest,\n type._suffix,\n );\n } else {\n return new ArrayOrTupleType(\n [...this._prefix, ...this._suffix, ...type._prefix, ...type._suffix],\n type._rest,\n type._suffix,\n );\n }\n }\n}\n\n/**\n * A validator for arbitrary-length array types like `T[]`.\n */\ninterface ArrayType<Element extends Type = Type>\n extends Type<Infer<Element>[]> {\n readonly name: \"array\";\n\n /** @internal */\n readonly _prefix: Type[];\n\n /** @internal */\n readonly _rest: Element;\n\n /** @internal */\n readonly _suffix: Type[];\n\n concat<Suffix extends Type[]>(\n type: TupleType<Suffix>,\n ): VariadicTupleType<[], Element, Suffix>;\n}\n\n/**\n * A validator for a fixed-length tuple type like `[]`, `[T1, T2]`\n * or `[T1, T2, ..., Tn]`.\n */\ninterface TupleType<Elements extends Type[] = Type[]>\n extends Type<TupleOutput<Elements>> {\n readonly name: \"array\";\n\n /** @internal */\n readonly _prefix: Elements;\n\n /** @internal */\n readonly _rest: undefined;\n\n /** @internal */\n readonly _suffix: Type[];\n\n concat<ConcatPrefix extends Type[]>(\n type: TupleType<ConcatPrefix>,\n ): TupleType<[...Elements, ...ConcatPrefix]>;\n concat<\n ConcatPrefix extends Type[],\n Rest extends Type | undefined,\n Suffix extends Type[],\n >(\n type: VariadicTupleType<ConcatPrefix, Rest, Suffix>,\n ): VariadicTupleType<[...Elements, ...ConcatPrefix], Rest, Suffix>;\n concat<Element extends Type>(\n type: ArrayType<Element>,\n ): VariadicTupleType<Elements, Element, []>;\n}\n\n/**\n * A validator for a variadic tuple type like `[T1, ...T[], Tn]`,\n * `[...T[], Tn-1, Tn]` or `[T1, T2, ...T[]]`.\n */\ninterface VariadicTupleType<\n Prefix extends Type[] = Type[],\n Rest extends Type | undefined = undefined,\n Suffix extends Type[] = Type[],\n> extends Type<ArrayOutput<Prefix, Rest, Suffix>> {\n readonly name: \"array\";\n\n /** @internal */\n readonly _prefix: Prefix;\n\n /** @internal */\n readonly _rest: Rest;\n\n /** @internal */\n readonly _suffix: Suffix;\n\n concat<OtherPrefix extends Type[]>(\n type: TupleType<OtherPrefix>,\n ): VariadicTupleType<Prefix, Rest, [...Suffix, ...OtherPrefix]>;\n}\n\nfunction toInputType(v: unknown): InputType {\n const type = typeof v;\n if (type !== \"object\") {\n return type as InputType;\n } else if (v === null) {\n return \"null\";\n } else if (Array.isArray(v)) {\n return \"array\";\n } else {\n return type;\n }\n}\n\nfunction dedup<T>(arr: T[]): T[] {\n return [...new Set(arr)];\n}\n\nfunction groupTerminals(\n terminals: { root: AbstractType; terminal: TerminalType }[],\n): {\n types: Map<InputType, AbstractType[]>;\n literals: Map<unknown, AbstractType[]>;\n unknowns: AbstractType[];\n optionals: AbstractType[];\n expectedTypes: InputType[];\n} {\n const order = new Map<AbstractType, number>();\n const literals = new Map<unknown, AbstractType[]>();\n const types = new Map<InputType, AbstractType[]>();\n const unknowns = [] as AbstractType[];\n const optionals = [] as AbstractType[];\n const expectedTypes = [] as InputType[];\n for (const { root, terminal } of terminals) {\n order.set(root, order.get(root) ?? order.size);\n\n if (terminal.name === \"never\") {\n // skip\n } else if (terminal.name === \"optional\") {\n optionals.push(root);\n } else if (terminal.name === \"unknown\") {\n unknowns.push(root);\n } else if (terminal.name === \"literal\") {\n const roots = literals.get(terminal.value) ?? [];\n roots.push(root);\n literals.set(terminal.value, roots);\n expectedTypes.push(toInputType(terminal.value));\n } else {\n const roots = types.get(terminal.name) ?? [];\n roots.push(root);\n types.set(terminal.name, roots);\n expectedTypes.push(terminal.name);\n }\n }\n\n const byOrder = (a: AbstractType, b: AbstractType): number => {\n return (order.get(a) ?? 0) - (order.get(b) ?? 0);\n };\n\n for (const [value, roots] of literals) {\n const options = types.get(toInputType(value));\n if (options) {\n options.push(...roots);\n literals.delete(value);\n } else {\n literals.set(value, dedup(roots.concat(unknowns)).sort(byOrder));\n }\n }\n\n for (const [type, roots] of types) {\n types.set(type, dedup(roots.concat(unknowns)).sort(byOrder));\n }\n\n return {\n types,\n literals,\n unknowns: dedup(unknowns).sort(byOrder),\n optionals: dedup(optionals).sort(byOrder),\n expectedTypes: dedup(expectedTypes),\n };\n}\n\nfunction createObjectKeyMatcher(\n objects: { root: AbstractType; terminal: ObjectType }[],\n key: string,\n): Matcher<Record<string, unknown>> | undefined {\n const list: { root: AbstractType; terminal: TerminalType }[] = [];\n for (const { root, terminal } of objects) {\n terminal.shape[key]._toTerminals((t) => list.push({ root, terminal: t }));\n }\n\n const { types, literals, optionals, unknowns, expectedTypes } =\n groupTerminals(list);\n if (unknowns.length > 0 || optionals.length > 1) {\n return undefined;\n }\n for (const roots of literals.values()) {\n if (roots.length > 1) {\n return undefined;\n }\n }\n for (const roots of types.values()) {\n if (roots.length > 1) {\n return undefined;\n }\n }\n\n const missingValue = prependPath(key, ISSUE_MISSING_VALUE);\n const issue = prependPath(\n key,\n types.size === 0\n ? {\n ok: false,\n code: \"invalid_literal\",\n expected: [...literals.keys()] as Literal[],\n }\n : {\n ok: false,\n code: \"invalid_type\",\n expected: expectedTypes,\n },\n );\n\n const byLiteral =\n literals.size > 0 ? new Map<unknown, TaggedMatcher>() : undefined;\n if (byLiteral) {\n for (const [literal, options] of literals) {\n byLiteral.set(literal, options[0][MATCHER_SYMBOL]);\n }\n }\n\n const byType =\n types.size > 0 ? ({} as Record<string, TaggedMatcher>) : undefined;\n if (byType) {\n for (const [type, options] of types) {\n byType[type] = options[0][MATCHER_SYMBOL];\n }\n }\n\n const optional = optionals[0]?.[MATCHER_SYMBOL] as TaggedMatcher | undefined;\n return (obj, flags) => {\n const value = obj[key];\n if (value === undefined && !(key in obj)) {\n return optional === undefined\n ? missingValue\n : callMatcher(optional, obj, flags);\n }\n const option = byType?.[toInputType(value)] ?? byLiteral?.get(value);\n return option ? callMatcher(option, obj, flags) : issue;\n };\n}\n\nfunction createUnionObjectMatcher(\n terminals: { root: AbstractType; terminal: TerminalType }[],\n): Matcher<Record<string, unknown>> | undefined {\n const objects: { root: AbstractType; terminal: ObjectType }[] = [];\n const keyCounts = new Map<string, number>();\n\n for (const { root, terminal } of terminals) {\n if (terminal.name === \"unknown\") {\n return undefined;\n }\n\n if (terminal.name === \"object\") {\n for (const key in terminal.shape) {\n keyCounts.set(key, (keyCounts.get(key) ?? 0) + 1);\n }\n objects.push({ root, terminal });\n }\n }\n\n if (objects.length < 2) {\n return undefined;\n }\n\n for (const [key, count] of keyCounts) {\n if (count === objects.length) {\n const matcher = createObjectKeyMatcher(objects, key);\n if (matcher) {\n return matcher;\n }\n }\n }\n return undefined;\n}\n\nfunction createUnionBaseMatcher(\n terminals: { root: AbstractType; terminal: TerminalType }[],\n): Matcher {\n const { expectedTypes, literals, types, unknowns, optionals } =\n groupTerminals(terminals);\n\n const issue: IssueLeaf =\n types.size === 0 && unknowns.length === 0\n ? {\n ok: false,\n code: \"invalid_literal\",\n expected: [...literals.keys()] as Literal[],\n }\n : {\n ok: false,\n code: \"invalid_type\",\n expected: expectedTypes,\n };\n\n const byLiteral =\n literals.size > 0 ? new Map<unknown, TaggedMatcher[]>() : undefined;\n if (byLiteral) {\n for (const [literal, options] of literals) {\n byLiteral.set(\n literal,\n options.map((t) => t[MATCHER_SYMBOL]),\n );\n }\n }\n\n const byType =\n types.size > 0 ? ({} as Record<string, TaggedMatcher[]>) : undefined;\n if (byType) {\n for (const [type, options] of types) {\n byType[type] = options.map((t) => t[MATCHER_SYMBOL]);\n }\n }\n\n const optionalMatchers = optionals.map((t) => t[MATCHER_SYMBOL]);\n const unknownMatchers = unknowns.map((t) => t[MATCHER_SYMBOL]);\n return (value: unknown, flags: number) => {\n const options =\n flags & FLAG_MISSING_VALUE\n ? optionalMatchers\n : (byType?.[toInputType(value)] ??\n byLiteral?.get(value) ??\n unknownMatchers);\n\n let count = 0;\n let issueTree: IssueTree = issue;\n for (let i = 0; i < options.length; i++) {\n const r = callMatcher(options[i], value, flags);\n if (r === undefined || r.ok) {\n return r;\n }\n issueTree = count > 0 ? joinIssues(issueTree, r) : r;\n count++;\n }\n if (count > 1) {\n return { ok: false, code: \"invalid_union\", tree: issueTree };\n }\n return issueTree;\n };\n}\n\nclass UnionType<T extends Type[] = Type[]> extends Type<Infer<T[number]>> {\n readonly name = \"union\";\n readonly options: Readonly<T>;\n\n constructor(options: Readonly<T>) {\n super();\n this.options = options;\n }\n\n _toTerminals(func: (t: TerminalType) => void): void {\n for (const option of this.options) {\n option._toTerminals(func);\n }\n }\n\n get [MATCHER_SYMBOL](): TaggedMatcher {\n const flattened: { root: AbstractType; terminal: TerminalType }[] = [];\n for (const option of this.options) {\n option._toTerminals((terminal) => {\n flattened.push({ root: option, terminal });\n });\n }\n const base = createUnionBaseMatcher(flattened);\n const object = createUnionObjectMatcher(flattened);\n return lazyProperty(\n this,\n MATCHER_SYMBOL,\n taggedMatcher(TAG_UNION, (v, f) =>\n object !== undefined && isObject(v) ? object(v, f) : base(v, f),\n ),\n false,\n );\n }\n}\n\ntype TransformFunc = (value: unknown, flags: number) => MatcherResult;\n\nconst STRICT = Object.freeze({ mode: \"strict\" }) as ParseOptions;\nconst STRIP = Object.freeze({ mode: \"strip\" }) as ParseOptions;\nconst PASSTHROUGH = Object.freeze({ mode: \"passthrough\" }) as ParseOptions;\n\nfunction flagsToOptions(flags: number): ParseOptions {\n return flags & FLAG_FORBID_EXTRA_KEYS\n ? STRICT\n : flags & FLAG_STRIP_EXTRA_KEYS\n ? STRIP\n : PASSTHROUGH;\n}\n\nclass TransformType<Output> extends Type<Output> {\n readonly name = \"transform\";\n\n /** @internal */\n protected readonly _transformed: AbstractType;\n\n /** @internal */\n protected readonly _transform: TransformFunc;\n\n constructor(transformed: AbstractType, transform: TransformFunc) {\n super();\n this._transformed = transformed;\n this._transform = transform;\n }\n\n get [MATCHER_SYMBOL](): TaggedMatcher {\n const chain: TransformFunc[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let next: AbstractType = this;\n while (next instanceof TransformType) {\n chain.push(next._transform);\n next = next._transformed;\n }\n chain.reverse();\n\n const matcher = next[MATCHER_SYMBOL];\n const undef = ok(undefined);\n\n return lazyProperty(\n this,\n MATCHER_SYMBOL,\n taggedMatcher(TAG_TRANSFORM, (v, flags) => {\n let result = callMatcher(matcher, v, flags);\n if (result !== undefined && !result.ok) {\n return result;\n }\n\n let current: unknown;\n if (result !== undefined) {\n current = result.value;\n } else if (flags & FLAG_MISSING_VALUE) {\n current = undefined;\n result = undef;\n } else {\n current = v;\n }\n\n for (let i = 0; i < chain.length; i++) {\n const r = chain[i](current, flags);\n if (r !== undefined) {\n if (!r.ok) {\n return r;\n }\n current = r.value;\n result = r;\n }\n }\n return result;\n }),\n false,\n );\n }\n\n _toTerminals(func: (t: TerminalType) => void): void {\n this._transformed._toTerminals(func);\n }\n}\n\nclass LazyType<T> extends Type<T> {\n readonly name = \"lazy\";\n\n /** @internal */\n private _recursing = false;\n\n /** @internal */\n private readonly _definer: () => Type<T>;\n\n constructor(definer: () => Type<T>) {\n super();\n this._definer = definer;\n }\n\n get type() {\n return lazyProperty(this, \"type\", this._definer(), true);\n }\n\n get [MATCHER_SYMBOL]() {\n const matcher = taggedMatcher(TAG_OTHER, (value, flags) => {\n const typeMatcher = this.type[MATCHER_SYMBOL];\n matcher.tag = typeMatcher.tag;\n matcher.match = typeMatcher.match;\n lazyProperty(this, MATCHER_SYMBOL, typeMatcher, false);\n return callMatcher(typeMatcher, value, flags);\n });\n return matcher;\n }\n\n _toTerminals(func: (t: TerminalType) => void): void {\n if (!this._recursing) {\n this._recursing = true;\n try {\n this.type._toTerminals(func);\n } finally {\n this._recursing = false;\n }\n }\n }\n}\n\nfunction singleton<Output>(\n name: TypeName,\n tag: number,\n match: (value: unknown, flags: number) => MatcherResult,\n): () => Type<Output> {\n const value = taggedMatcher(tag, match);\n\n class SimpleType extends Type<Output> {\n readonly name: TypeName;\n readonly [MATCHER_SYMBOL]: TaggedMatcher;\n\n constructor() {\n super();\n this.name = name;\n this[MATCHER_SYMBOL] = value;\n }\n }\n\n const instance = new SimpleType();\n return /*#__NO_SIDE_EFFECTS__*/ () => instance;\n}\n\n/**\n * Create a validator that matches any value,\n * analogous to the TypeScript type `unknown`.\n */\nexport const unknown: () => Type = /*#__PURE__*/ singleton<unknown>(\n \"unknown\",\n TAG_UNKNOWN,\n () => undefined,\n);\n\n/**\n * Create a validator that never matches any value,\n * analogous to the TypeScript type `never`.\n */\nexport const never: () => Type<never> = /*#__PURE__*/ singleton<never>(\n \"never\",\n TAG_NEVER,\n () => ISSUE_EXPECTED_NOTHING,\n);\n\n/**\n * Create a validator that matches any string value.\n */\nexport const string: () => Type<string> = /*#__PURE__*/ singleton<string>(\n \"string\",\n TAG_STRING,\n (v) => (typeof v === \"string\" ? undefined : ISSUE_EXPECTED_STRING),\n);\n\n/**\n * Create a validator that matches any number value.\n */\nexport const number: () => Type<number> = /*#__PURE__*/ singleton<number>(\n \"number\",\n TAG_NUMBER,\n (v) => (typeof v === \"number\" ? undefined : ISSUE_EXPECTED_NUMBER),\n);\n\n/**\n * Create a validator that matches any bigint value.\n */\nexport const bigint: () => Type<bigint> = /*#__PURE__*/ singleton<bigint>(\n \"bigint\",\n TAG_BIGINT,\n (v) => (typeof v === \"bigint\" ? undefined : ISSUE_EXPECTED_BIGINT),\n);\n\n/**\n * Create a validator that matches any boolean value.\n */\nexport const boolean: () => Type<boolean> = /*#__PURE__*/ singleton<boolean>(\n \"boolean\",\n TAG_BOOLEAN,\n (v) => (typeof v === \"boolean\" ? undefined : ISSUE_EXPECTED_BOOLEAN),\n);\n\n/**\n * Create a validator that matches `null`.\n */\nconst null_: () => Type<null> = /*#__PURE__*/ singleton<null>(\n \"null\",\n TAG_NULL,\n (v) => (v === null ? undefined : ISSUE_EXPECTED_NULL),\n);\nexport { null_ as null };\n\n/**\n * Create a validator that matches `undefined`.\n */\nconst undefined_: () => Type<undefined> = /*#__PURE__*/ singleton<undefined>(\n \"undefined\",\n TAG_UNDEFINED,\n (v) => (v === undefined ? undefined : ISSUE_EXPECTED_UNDEFINED),\n);\nexport { undefined_ as undefined };\n\nclass LiteralType<Out extends Literal = Literal> extends Type<Out> {\n readonly name = \"literal\";\n readonly [MATCHER_SYMBOL]: TaggedMatcher;\n readonly value: Out;\n\n constructor(value: Out) {\n super();\n\n const issue: IssueLeaf = {\n ok: false,\n code: \"invalid_literal\",\n expected: [value],\n };\n this[MATCHER_SYMBOL] = taggedMatcher(TAG_LITERAL, (v) =>\n v === value ? undefined : issue,\n );\n this.value = value;\n }\n}\n\n/**\n * Create a validator for a specific string, number, bigint or boolean value.\n */\nexport const literal = <T extends Literal>(value: T): Type<T> => {\n return /*#__PURE__*/ new LiteralType(value);\n};\n\n/**\n * Create a validator for an object type.\n */\nexport const object = <T extends Record<string, AbstractType>>(\n obj: T,\n): ObjectType<T, undefined> => {\n return /*#__PURE__*/ new ObjectType(obj, undefined);\n};\n\n/**\n * Create a validator for a record type `Record<string, T>`,\n * where `T` is the output type of the given subvalidator.\n */\nexport const record = <T extends Type>(\n valueType?: T,\n): Type<Record<string, Infer<T>>> => {\n return /*#__PURE__*/ new ObjectType({}, valueType ?? unknown()) as Type<\n Record<string, Infer<T>>\n >;\n};\n\n/**\n * Create a validator for an array type `T[]`,\n * where `T` is the output type of the given subvalidator.\n */\nexport const array = <T extends Type>(item?: T): ArrayType<T> => {\n return /*#__PURE__*/ new ArrayOrTupleType(\n [],\n item ?? unknown(),\n [],\n ) as unknown as ArrayType<T>;\n};\n\n/**\n * Create a validator for an array type `[T1, T2, ..., Tn]`,\n * where `T1`, `T2`, ..., `Tn` are the output types of the given subvalidators.\n */\nexport const tuple = <T extends [] | [Type, ...Type[]]>(\n items: T,\n): TupleType<T> => {\n return /*#__PURE__*/ new ArrayOrTupleType(\n items,\n undefined,\n [],\n ) as unknown as TupleType<T>;\n};\n\n/**\n * Create a validator that matches any type `T1 | T2 | ... | Tn`,\n * where `T1`, `T2`, ..., `Tn` are the output types of the given subvalidators.\n *\n * This is analogous to how TypeScript's union types are constructed.\n */\nexport const union = <T extends Type[]>(...options: T): UnionType<T> => {\n return /*#__PURE__*/ new UnionType(options) as UnionType<T>;\n};\n\n/**\n * Create a validator that can reference itself, directly or indirectly.\n *\n * In most cases an explicit type annotation is also needed, as TypeScript\n * cannot infer return types of recursive functions.\n *\n * @example\n * ```ts\n * import * as v from \"@badrap/valita\";\n *\n * type T = string | T[];\n * const type: v.Type<T> = v.lazy(() => v.union(v.string(), v.array(type)));\n * ```\n */\nexport const lazy = <T>(definer: () => Type<T>): Type<T> => {\n return new LazyType(definer);\n};\n\ntype TerminalType =\n | (Type & {\n name:\n | \"unknown\"\n | \"never\"\n | \"string\"\n | \"number\"\n | \"bigint\"\n | \"boolean\"\n | \"null\"\n | \"undefined\";\n })\n | LiteralType\n | ObjectType\n | ArrayOrTupleType\n | Optional;\n\nexport type { Type, Optional };\nexport type { ObjectType, ArrayType, TupleType, VariadicTupleType, UnionType };\n","import { configureOAuth } from \"@atcute/oauth-browser-client\";\n\nimport {\n CompositeDidDocumentResolver,\n LocalActorResolver,\n PlcDidDocumentResolver,\n WebDidDocumentResolver,\n XrpcHandleResolver,\n} from \"@atcute/identity-resolver\";\n\nimport {\n createAuthorizationUrl,\n deleteStoredSession,\n finalizeAuthorization,\n getSession,\n OAuthUserAgent,\n} from \"@atcute/oauth-browser-client\";\n\nexport { OAuthUserAgent };\n\n/**\n * @import {Session} from \"@atcute/oauth-browser-client\"\n */\n\nconst STORAGE_KEY = \"dor-atproto:did\";\n\n// CONFIGURE\n// =========\n\nconfigureOAuth({\n metadata: {\n client_id: import.meta.env?.VITE_ATPROTO_CLIENT_ID ??\n \"https://elements.diffuse.sh/bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/oauth-client-metadata.json\",\n redirect_uri:\n window.location.origin.replace(\"://localhost\", \"://127.0.0.1\") +\n window.location.pathname,\n },\n identityResolver: new LocalActorResolver({\n handleResolver: new XrpcHandleResolver({\n serviceUrl: \"https://public.api.bsky.app\",\n }),\n didDocumentResolver: new CompositeDidDocumentResolver({\n methods: {\n plc: new PlcDidDocumentResolver(),\n web: new WebDidDocumentResolver(),\n },\n }),\n }),\n});\n\n// LOGIN\n// =====\n\n/**\n * Initiate the OAuth authorization flow for a given handle.\n * Navigates the browser away to the authorization server.\n *\n * @param {string} handle\n */\nexport async function login(handle) {\n const authUrl = await createAuthorizationUrl({\n target: { type: \"account\", identifier: /** @type {any} */ (handle) },\n scope: \"atproto transition:generic\",\n });\n\n window.location.assign(authUrl.toString());\n}\n\n// SESSION RESTORE / CALLBACK\n// ==========================\n\n/**\n * Attempt to restore an existing session or finalize an OAuth callback.\n * Returns the session if successful, or null if no session is available.\n *\n * @returns {Promise<Session | null>}\n */\nexport async function restoreOrFinalize() {\n // Check for OAuth callback parameters (the library uses response_mode=fragment,\n // so params arrive in the URL hash, not the query string)\n const params = new URLSearchParams(window.location.hash.slice(1));\n\n if (params.has(\"code\")) {\n const result = await finalizeAuthorization(params);\n\n // Clean up URL (remove fragment containing OAuth params)\n history.replaceState(\n null,\n \"\",\n window.location.pathname + window.location.search,\n );\n\n // Persist the DID for future session restoration\n localStorage.setItem(STORAGE_KEY, result.session.info.sub);\n\n return result.session;\n }\n\n // Try to restore a previously stored session\n const did = localStorage.getItem(STORAGE_KEY);\n\n if (did) {\n try {\n return await getSession(\n /** @type {`did:${string}:${string}`} */ (did),\n { allowStale: true },\n );\n } catch {\n localStorage.removeItem(STORAGE_KEY);\n return null;\n }\n }\n\n return null;\n}\n\n// LOGOUT\n// ======\n\n/**\n * Sign out and revoke the current session.\n *\n * @param {OAuthUserAgent} agent\n */\nexport async function logout(agent) {\n const did = localStorage.getItem(STORAGE_KEY);\n\n try {\n await agent.signOut();\n } catch {\n if (did) {\n deleteStoredSession(\n /** @type {`did:${string}:${string}`} */ (did),\n );\n }\n }\n\n localStorage.removeItem(STORAGE_KEY);\n}\n","export { configureOAuth, type ConfigureOAuthOptions } from './environment.js';\n\nexport * from './errors.js';\n\nexport * from './agents/exchange.js';\nexport {\n\tgetSession,\n\tdeleteStoredSession,\n\tlistStoredSessions,\n\ttype SessionGetOptions,\n} from './agents/sessions.js';\nexport * from './agents/user-agent.js';\n\nexport type {\n\tClientAssertionCredentials,\n\tClientAssertionFetcher,\n\tFetchClientAssertionParams,\n} from './types/client-assertion.js';\nexport type { TokenInfo, ExchangeInfo, Session } from './types/token.js';\n","import type { ActorResolver } from '@atcute/identity-resolver';\n\nimport { createOAuthDatabase, type OAuthDatabase } from './store/db.js';\nimport type { ClientAssertionFetcher } from './types/client-assertion.js';\n\nexport let CLIENT_ID: string;\nexport let REDIRECT_URI: string;\n\nexport let fetchClientAssertion: ClientAssertionFetcher | undefined;\n\nexport let database: OAuthDatabase;\n\nexport let identityResolver: ActorResolver;\n\nexport interface ConfigureOAuthOptions {\n\t/**\n\t * client metadata, necessary to drive the whole request\n\t */\n\tmetadata: {\n\t\tclient_id: string;\n\t\tredirect_uri: string;\n\t};\n\n\t/** resolves actor identifiers into identity metadata */\n\tidentityResolver: ActorResolver;\n\n\t/**\n\t * optional function to fetch DPoP-bound client assertions from your backend.\n\t */\n\tfetchClientAssertion?: ClientAssertionFetcher;\n\n\t/**\n\t * name that will be used as prefix for storage keys needed to persist authentication.\n\t * @default \"atcute-oauth\"\n\t */\n\tstorageName?: string;\n}\n\nexport const configureOAuth = (options: ConfigureOAuthOptions) => {\n\t({ identityResolver, fetchClientAssertion } = options);\n\t({ client_id: CLIENT_ID, redirect_uri: REDIRECT_URI } = options.metadata);\n\n\tdatabase = createOAuthDatabase({ name: options.storageName ?? 'atcute-oauth' });\n};\n","import type { Did } from '@atcute/lexicons';\nimport type { DpopPrivateJwk } from '@atcute/oauth-crypto';\nimport type { OAuthAuthorizationServerMetadata } from '@atcute/oauth-types';\n\nimport type { SimpleStore } from '../types/store.js';\nimport type { RawSession } from '../types/token.js';\nimport { locks } from '../utils/runtime.js';\n\nexport interface OAuthDatabaseOptions {\n\tname: string;\n}\n\ninterface SchemaItem<T> {\n\tvalue: T;\n\texpiresAt: number | null;\n\tupdatedAt?: number;\n}\n\ninterface Schema {\n\tsessions: {\n\t\tkey: Did;\n\t\tvalue: RawSession;\n\t\tindexes: {\n\t\t\texpiresAt: number;\n\t\t};\n\t};\n\tstates: {\n\t\tkey: string;\n\t\tvalue: {\n\t\t\tdpopKey: DpopPrivateJwk;\n\t\t\tmetadata: OAuthAuthorizationServerMetadata;\n\t\t\tverifier?: string;\n\t\t\tstate?: unknown;\n\t\t};\n\t};\n\n\tdpopNonces: {\n\t\tkey: string;\n\t\tvalue: string;\n\t};\n}\n\nconst parse = (raw: string | null) => {\n\tif (raw != null) {\n\t\tconst parsed = JSON.parse(raw);\n\t\tif (parsed != null) {\n\t\t\treturn parsed;\n\t\t}\n\t}\n\n\treturn {};\n};\n\nexport type OAuthDatabase = ReturnType<typeof createOAuthDatabase>;\n\nexport const createOAuthDatabase = ({ name }: OAuthDatabaseOptions) => {\n\tconst controller = new AbortController();\n\tconst signal = controller.signal;\n\n\tconst createStore = <N extends keyof Schema>(\n\t\tsubname: N,\n\t\texpiresAt: (item: Schema[N]['value']) => null | number,\n\t\tpersistUpdatedAt = false,\n\t): SimpleStore<Schema[N]['key'], Schema[N]['value']> => {\n\t\tlet store: any;\n\n\t\tconst storageKey = `${name}:${subname}`;\n\n\t\tconst persist = () => store && localStorage.setItem(storageKey, JSON.stringify(store));\n\t\tconst read = () => {\n\t\t\tif (signal.aborted) {\n\t\t\t\tthrow new Error(`store closed`);\n\t\t\t}\n\n\t\t\treturn (store ??= parse(localStorage.getItem(storageKey)));\n\t\t};\n\n\t\t{\n\t\t\tconst listener = (ev: StorageEvent) => {\n\t\t\t\tif (ev.key === storageKey) {\n\t\t\t\t\tstore = undefined;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tglobalThis.addEventListener('storage', listener, { signal });\n\t\t}\n\n\t\t{\n\t\t\tconst cleanup = async (lock: Lock | true | null) => {\n\t\t\t\tif (!lock || signal.aborted) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 10_000));\n\t\t\t\tif (signal.aborted) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet now = Date.now();\n\t\t\t\tlet changed = false;\n\n\t\t\t\tread();\n\n\t\t\t\tfor (const key in store) {\n\t\t\t\t\tconst item = store[key];\n\t\t\t\t\tconst expiresAt = item.expiresAt;\n\n\t\t\t\t\tif (expiresAt !== null && now > expiresAt) {\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\tdelete store[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (changed) {\n\t\t\t\t\tpersist();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (locks) {\n\t\t\t\tlocks.request(`${storageKey}:cleanup`, { ifAvailable: true }, cleanup);\n\t\t\t} else {\n\t\t\t\tcleanup(true);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tget(key) {\n\t\t\t\tread();\n\n\t\t\t\tconst item: SchemaItem<Schema[N]['value']> = store[key];\n\t\t\t\tif (!item) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst expiresAt = item.expiresAt;\n\t\t\t\tif (expiresAt !== null && Date.now() > expiresAt) {\n\t\t\t\t\tdelete store[key];\n\t\t\t\t\tpersist();\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\treturn item.value;\n\t\t\t},\n\t\t\tgetWithLapsed(key) {\n\t\t\t\tread();\n\n\t\t\t\tconst item: SchemaItem<Schema[N]['value']> = store[key];\n\t\t\t\tconst now = Date.now();\n\t\t\t\tif (!item) {\n\t\t\t\t\treturn [undefined, Infinity];\n\t\t\t\t}\n\n\t\t\t\tconst updatedAt = item.updatedAt;\n\t\t\t\tif (updatedAt === undefined) {\n\t\t\t\t\treturn [item.value, Infinity];\n\t\t\t\t}\n\n\t\t\t\treturn [item.value, now - updatedAt];\n\t\t\t},\n\t\t\tset(key, value) {\n\t\t\t\tread();\n\n\t\t\t\tconst item: SchemaItem<Schema[N]['value']> = {\n\t\t\t\t\tvalue: value,\n\t\t\t\t\texpiresAt: expiresAt(value),\n\t\t\t\t\tupdatedAt: persistUpdatedAt ? Date.now() : undefined,\n\t\t\t\t};\n\n\t\t\t\tstore[key] = item;\n\t\t\t\tpersist();\n\t\t\t},\n\t\t\tdelete(key) {\n\t\t\t\tread();\n\n\t\t\t\tif (store[key] !== undefined) {\n\t\t\t\t\tdelete store[key];\n\t\t\t\t\tpersist();\n\t\t\t\t}\n\t\t\t},\n\t\t\tkeys() {\n\t\t\t\tread();\n\n\t\t\t\treturn Object.keys(store);\n\t\t\t},\n\t\t};\n\t};\n\n\treturn {\n\t\tdispose: () => {\n\t\t\tcontroller.abort();\n\t\t},\n\n\t\tsessions: createStore('sessions', ({ token }) => {\n\t\t\tif (token.refresh) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn token.expires_at ?? null;\n\t\t}),\n\t\tstates: createStore('states', (_item) => Date.now() + 10 * 60 * 1_000), // 10 minutes\n\n\t\t// The reference PDS have nonces that expire after 3 minutes, while other\n\t\t// implementations can have varying expiration times.\n\t\t// Stored for 24 hours.\n\t\tdpopNonces: createStore('dpopNonces', (_item) => Date.now() + 24 * 60 * 60 * 1_000, true),\n\t\tinflightDpop: new Map<string, PromiseWithResolvers<void>>(),\n\t};\n};\n","export const locks: LockManager | undefined = typeof navigator !== 'undefined' ? navigator.locks : undefined;\n","import type { Did } from '@atcute/lexicons';\n\nexport class LoginError extends Error {\n\toverride name = 'LoginError';\n}\n\nexport class AuthorizationError extends Error {\n\toverride name = 'AuthorizationError';\n}\n\nexport class ResolverError extends Error {\n\toverride name = 'ResolverError';\n}\n\nexport class TokenRefreshError extends Error {\n\toverride name = 'TokenRefreshError';\n\n\tconstructor(\n\t\tpublic readonly sub: Did,\n\t\tmessage: string,\n\t\toptions?: ErrorOptions,\n\t) {\n\t\tsuper(message, options);\n\t}\n}\n\nexport class OAuthResponseError extends Error {\n\toverride name = 'OAuthResponseError';\n\n\treadonly error: string | undefined;\n\treadonly description: string | undefined;\n\n\tconstructor(\n\t\tpublic readonly response: Response,\n\t\tpublic readonly data: any,\n\t) {\n\t\tconst error = ifString(ifObject(data)?.['error']);\n\t\tconst errorDescription = ifString(ifObject(data)?.['error_description']);\n\n\t\tconst messageError = error ? `\"${error}\"` : 'unknown';\n\t\tconst messageDesc = errorDescription ? `: ${errorDescription}` : '';\n\t\tconst message = `OAuth ${messageError} error${messageDesc}`;\n\n\t\tsuper(message);\n\n\t\tthis.error = error;\n\t\tthis.description = errorDescription;\n\t}\n\n\tget status() {\n\t\treturn this.response.status;\n\t}\n\n\tget headers() {\n\t\treturn this.response.headers;\n\t}\n}\n\nexport class FetchResponseError extends Error {\n\toverride name = 'FetchResponseError';\n\n\tconstructor(\n\t\tpublic readonly response: Response,\n\t\tpublic status: number,\n\t\tmessage: string,\n\t) {\n\t\tsuper(message);\n\t}\n}\n\nconst ifString = (v: unknown): string | undefined => {\n\treturn typeof v === 'string' ? v : undefined;\n};\nconst ifObject = (v: unknown): Record<string, unknown> | undefined => {\n\treturn typeof v === 'object' && v !== null && !Array.isArray(v) ? (v as any) : undefined;\n};\n","import type { ResolvedActor } from '@atcute/identity-resolver';\nimport type { ActorIdentifier } from '@atcute/lexicons';\nimport { generateDpopKey, generatePkce } from '@atcute/oauth-crypto';\nimport type { OAuthAuthorizationServerMetadata, OAuthPrompt } from '@atcute/oauth-types';\n\nimport { nanoid } from 'nanoid';\n\nimport { CLIENT_ID, database, REDIRECT_URI } from '../environment.js';\nimport { AuthorizationError, LoginError } from '../errors.js';\nimport { resolveFromIdentifier, resolveFromService } from '../resolvers.js';\nimport type { Session } from '../types/token.js';\n\nimport { OAuthServerAgent } from './server-agent.js';\nimport { storeSession } from './sessions.js';\n\nexport type AuthorizeTargetOptions =\n\t| { type: 'account'; identifier: ActorIdentifier }\n\t| { type: 'pds'; serviceUrl: string };\n\nexport interface AuthorizeOptions {\n\ttarget: AuthorizeTargetOptions;\n\tscope: string;\n\tstate?: unknown;\n\tprompt?: OAuthPrompt | (string & {});\n\tdisplay?: 'page' | 'popup' | 'touch' | 'wap';\n\tlocale?: string;\n}\n\n/**\n * Create authentication URL for authorization\n * @param options\n * @returns URL to redirect the user for authorization\n */\nexport const createAuthorizationUrl = async (options: AuthorizeOptions): Promise<URL> => {\n\tconst { target, scope, state = null, ...reqs } = options;\n\n\tlet resolved: { identity?: ResolvedActor; metadata: OAuthAuthorizationServerMetadata };\n\tswitch (target.type) {\n\t\tcase 'account': {\n\t\t\tresolved = await resolveFromIdentifier(target.identifier);\n\t\t\tbreak;\n\t\t}\n\t\tcase 'pds': {\n\t\t\tresolved = await resolveFromService(target.serviceUrl);\n\t\t}\n\t}\n\n\tconst { identity, metadata } = resolved;\n\tconst loginHint = identity\n\t\t? identity.handle !== 'handle.invalid'\n\t\t\t? identity.handle\n\t\t\t: identity.did\n\t\t: undefined;\n\n\tconst sid = nanoid(24);\n\n\tconst pkce = await generatePkce();\n\tconst dpopKey = await generateDpopKey(['ES256']);\n\n\tconst params = {\n\t\tdisplay: reqs.display,\n\t\tui_locales: reqs.locale,\n\t\tprompt: reqs.prompt,\n\n\t\tredirect_uri: REDIRECT_URI,\n\t\tcode_challenge: pkce.challenge,\n\t\tcode_challenge_method: pkce.method,\n\t\tstate: sid,\n\t\tlogin_hint: loginHint,\n\t\tresponse_mode: 'fragment',\n\t\tresponse_type: 'code',\n\t\tscope: scope,\n\t} satisfies Record<string, string | undefined>;\n\n\tdatabase.states.set(sid, {\n\t\tdpopKey: dpopKey,\n\t\tmetadata: metadata,\n\t\tverifier: pkce.verifier,\n\t\tstate: state,\n\t});\n\n\tconst server = new OAuthServerAgent(metadata, dpopKey);\n\tconst response = await server.request('pushed_authorization_request', params);\n\n\tconst authUrl = new URL(metadata.authorization_endpoint);\n\tauthUrl.searchParams.set('client_id', CLIENT_ID);\n\tauthUrl.searchParams.set('request_uri', response.request_uri);\n\n\treturn authUrl;\n};\n\n/**\n * Finalize authorization\n * @param params Search params\n * @returns Session object, which you can use to instantiate user agents\n */\nexport const finalizeAuthorization = async (params: URLSearchParams) => {\n\tconst issuer = params.get('iss');\n\tconst sid = params.get('state');\n\tconst code = params.get('code');\n\tconst error = params.get('error');\n\n\tif (!sid || !(code || error)) {\n\t\tthrow new LoginError(`missing parameters`);\n\t}\n\n\tconst stored = database.states.get(sid);\n\tif (stored) {\n\t\t// Delete now that we've caught it\n\t\tdatabase.states.delete(sid);\n\t} else {\n\t\tthrow new LoginError(`unknown state provided`);\n\t}\n\n\tif (error) {\n\t\tthrow new AuthorizationError(params.get('error_description') || error);\n\t}\n\tif (!code) {\n\t\tthrow new LoginError(`missing code parameter`);\n\t}\n\n\tconst dpopKey = stored.dpopKey;\n\tconst metadata = stored.metadata;\n\tconst state = stored.state ?? null;\n\n\tif (issuer === null) {\n\t\tthrow new LoginError(`missing issuer parameter`);\n\t} else if (issuer !== metadata.issuer) {\n\t\tthrow new LoginError(`issuer mismatch`);\n\t}\n\n\t// Retrieve authentication tokens\n\tconst server = new OAuthServerAgent(metadata, dpopKey);\n\tconst { info, token } = await server.exchangeCode(code, stored.verifier);\n\n\t// We're finished!\n\tconst sub = info.sub;\n\tconst session: Session = { dpopKey, info, token };\n\n\tawait storeSession(sub, session);\n\n\treturn { session, state };\n};\n","export * from './client-assertion/index.js';\nexport * from './dpop/index.js';\nexport * from './hash/index.js';\nexport * from './jwk/index.js';\nexport * from './jwt/index.js';\n","export { createClientAssertion } from './create-client-assertion.js';\nexport { generateClientAssertionKey } from './generate-key.js';\nexport { importClientAssertionPkcs8 } from './keys.js';\nexport type { ClientAssertionPrivateJwk } from './types.js';\n","import { nanoid } from 'nanoid';\n\nimport { getCachedKeyMaterial } from '../internal/key-cache.js';\nimport { signJwt } from '../jwt/index.js';\n\nimport type { ClientAssertionPrivateJwk } from './types.js';\n\nexport interface CreateClientAssertionOptions {\n\t/** client id */\n\tclient_id: string;\n\t/** authorization server issuer */\n\taud: string;\n\t/** JWK thumbprint of the DPoP key to bind to (for CAB pattern) */\n\tjkt?: string;\n\t/** client assertion signing key */\n\tkey: ClientAssertionPrivateJwk;\n}\n\n/**\n * creates a DPoP-bound client assertion per RFC 7523.\n *\n * @param options creation options\n * @returns signed client assertion JWT\n */\nexport const createClientAssertion = async (options: CreateClientAssertionOptions): Promise<string> => {\n\tconst { client_id, aud, jkt, key } = options;\n\tconst { kid, alg } = key;\n\tconst { cryptoKey } = await getCachedKeyMaterial(key);\n\n\tconst now = Math.floor(Date.now() / 1000);\n\tconst cnf = jkt ? { jkt } : undefined;\n\n\treturn signJwt({\n\t\theader: {\n\t\t\talg,\n\t\t\tkid,\n\t\t},\n\t\tpayload: {\n\t\t\tiss: client_id,\n\t\t\tsub: client_id,\n\t\t\taud: aud,\n\t\t\tjti: nanoid(24),\n\t\t\tiat: now,\n\t\t\texp: now + 60,\n\t\t\tcnf,\n\t\t},\n\t\tkey: cryptoKey,\n\t\talg,\n\t});\n};\n","import { webcrypto as crypto } from 'node:crypto'\nimport { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nconst POOL_SIZE_MULTIPLIER = 128\nlet pool, poolOffset\nfunction fillPool(bytes) {\n if (!pool || pool.length < bytes) {\n pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER)\n crypto.getRandomValues(pool)\n poolOffset = 0\n } else if (poolOffset + bytes > pool.length) {\n crypto.getRandomValues(pool)\n poolOffset = 0\n }\n poolOffset += bytes\n}\nexport function random(bytes) {\n fillPool((bytes |= 0))\n return pool.subarray(poolOffset - bytes, poolOffset)\n}\nexport function customRandom(alphabet, defaultSize, getRandom) {\n let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1\n let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n if (!size) return ''\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let i = step\n while (i--) {\n id += alphabet[bytes[i] & mask] || ''\n if (id.length >= size) return id\n }\n }\n }\n}\nexport function customAlphabet(alphabet, size = 21) {\n return customRandom(alphabet, size, random)\n}\nexport function nanoid(size = 21) {\n fillPool((size |= 0))\n let id = ''\n for (let i = poolOffset - size; i < poolOffset; i++) {\n id += scopedUrlAlphabet[pool[i] & 63]\n }\n return id\n}\n","export const urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n","import type { PrivateJwk, PublicJwk } from '../jwk/types.js';\n\nimport { derivePublicJwk, importPrivateKeyFromJwk } from './jwk.js';\n\n/**\n * cached key material for a JWK.\n */\nexport interface CachedKeyMaterial {\n\tcryptoKey: CryptoKey;\n\tpublicJwk: PublicJwk;\n}\n\n/**\n * cache for imported keys.\n * uses WeakMap so entries are garbage collected when JWK objects are no longer referenced.\n */\nconst keyCache = new WeakMap<PrivateJwk, CachedKeyMaterial>();\n\n/**\n * retrieves or creates cached key material for a JWK.\n *\n * @param jwk private JWK to get material for\n * @returns cached key material (CryptoKey and derived public JWK)\n */\nexport const getCachedKeyMaterial = async (jwk: PrivateJwk): Promise<CachedKeyMaterial> => {\n\tconst cached = keyCache.get(jwk);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\tconst { alg } = jwk;\n\tconst cryptoKey = await importPrivateKeyFromJwk(jwk, alg);\n\tconst publicJwk = derivePublicJwk(jwk, jwk.kid, alg);\n\tconst material: CachedKeyMaterial = { cryptoKey, publicJwk };\n\n\tkeyCache.set(jwk, material);\n\n\treturn material;\n};\n\n/**\n * pre-populates the cache with already-imported key material.\n * useful for PKCS8 imports where we already have the CryptoKey.\n *\n * @param jwk private JWK to cache for\n * @param cryptoKey already-imported CryptoKey\n */\nexport const setCachedKeyMaterial = (jwk: PrivateJwk, cryptoKey: CryptoKey): void => {\n\tconst publicJwk = derivePublicJwk(jwk, jwk.kid, jwk.alg);\n\tkeyCache.set(jwk, { cryptoKey, publicJwk });\n};\n","import { fromBase64Pad, toBase64Pad } from '@atcute/multibase';\n\nimport type { PrivateJwk, PublicJwk, SigningAlgorithm } from '../jwk/types.js';\n\nimport { getImportAlgorithm } from './crypto.js';\n\nconst SIGNING_ALGORITHMS: readonly SigningAlgorithm[] = [\n\t'ES256',\n\t'ES384',\n\t'ES512',\n\t'PS256',\n\t'PS384',\n\t'PS512',\n\t'RS256',\n\t'RS384',\n\t'RS512',\n];\n\nconst CURVE_TO_ALG: Record<string, SigningAlgorithm> = {\n\t'P-256': 'ES256',\n\t'P-384': 'ES384',\n\t'P-521': 'ES512',\n};\n\nexport const isSigningAlgorithm = (alg: string): alg is SigningAlgorithm => {\n\treturn (SIGNING_ALGORITHMS as readonly string[]).includes(alg);\n};\n\nexport const parsePrivateJwkInput = (input: PrivateJwk | string): PrivateJwk => {\n\tif (typeof input === 'string') {\n\t\ttry {\n\t\t\tconst jwk = JSON.parse(input) as PrivateJwk;\n\t\t\treturn jwk;\n\t\t} catch {\n\t\t\tthrow new Error(`invalid JSON string`);\n\t\t}\n\t}\n\n\tif (typeof input === 'object' && input !== null && 'kty' in input) {\n\t\treturn input;\n\t}\n\n\tthrow new Error(`invalid input: expected JWK object or JSON string`);\n};\n\nexport const resolveSigningAlgorithm = (\n\tjwk: PrivateJwk,\n\toverride?: SigningAlgorithm,\n): SigningAlgorithm | undefined => {\n\tif (override) {\n\t\treturn override;\n\t}\n\n\tconst alg = jwk.alg;\n\tif (alg && isSigningAlgorithm(alg)) {\n\t\treturn alg;\n\t}\n\n\tif (jwk.kty === 'EC') {\n\t\tconst inferred = CURVE_TO_ALG[jwk.crv];\n\t\tif (inferred) {\n\t\t\treturn inferred;\n\t\t}\n\t}\n\n\treturn undefined;\n};\n\nexport const derivePublicJwk = (privateJwk: PrivateJwk, kid?: string, alg?: SigningAlgorithm): PublicJwk => {\n\tif (privateJwk.kty === 'EC') {\n\t\tconst { crv, x, y } = privateJwk;\n\t\treturn { kty: 'EC', crv, x, y, kid, alg, use: 'sig' };\n\t}\n\n\tif (privateJwk.kty === 'RSA') {\n\t\tconst { n, e } = privateJwk;\n\t\treturn { kty: 'RSA', n, e, kid, alg, use: 'sig' };\n\t}\n\n\tthrow new Error(`unsupported key type`);\n};\n\nexport const importPrivateKeyFromJwk = async (jwk: PrivateJwk, alg: SigningAlgorithm): Promise<CryptoKey> => {\n\tif (!('d' in jwk) || !jwk.d) {\n\t\tthrow new Error(`expected a private key (missing 'd' parameter)`);\n\t}\n\n\tif (jwk.kty === 'EC' && !alg.startsWith('ES')) {\n\t\tthrow new Error(`algorithm ${alg} does not match ec key`);\n\t}\n\tif (jwk.kty === 'RSA' && alg.startsWith('ES')) {\n\t\tthrow new Error(`algorithm ${alg} does not match rsa key`);\n\t}\n\n\tconst algorithm = getImportAlgorithm(alg, jwk.kty === 'EC' ? jwk.crv : undefined);\n\tconst key = await crypto.subtle.importKey('jwk', jwk, algorithm, true, ['sign']);\n\n\tif (!(key instanceof CryptoKey)) {\n\t\tthrow new Error(`expected asymmetric key, got symmetric`);\n\t}\n\n\treturn key;\n};\n\nexport const exportPrivateJwkFromKey = async (\n\tkey: CryptoKey,\n\talg: SigningAlgorithm,\n\tkid?: string,\n): Promise<PrivateJwk> => {\n\tconst jwk = (await crypto.subtle.exportKey('jwk', key)) as PrivateJwk;\n\tjwk.alg = alg;\n\tif (kid) {\n\t\tjwk.kid = kid;\n\t}\n\treturn jwk;\n};\n\nexport const importPkcs8PrivateKey = async (pem: string, alg: SigningAlgorithm): Promise<CryptoKey> => {\n\tconst bytes = parsePkcs8Pem(pem);\n\tconst algorithm = getImportAlgorithm(alg);\n\n\tconst key = await crypto.subtle.importKey('pkcs8', bytes, algorithm, true, ['sign']);\n\n\tif (!(key instanceof CryptoKey)) {\n\t\tthrow new Error(`expected asymmetric key, got symmetric`);\n\t}\n\n\treturn key;\n};\n\nexport const exportPkcs8PrivateKey = async (key: CryptoKey): Promise<string> => {\n\tconst pkcs8 = await crypto.subtle.exportKey('pkcs8', key);\n\tconst bytes = new Uint8Array(pkcs8);\n\tconst base64 = toBase64Pad(bytes);\n\n\treturn ['-----BEGIN PRIVATE KEY-----', ...chunk64(base64), '-----END PRIVATE KEY-----', ''].join('\\n');\n};\n\nconst parsePkcs8Pem = (pem: string): ArrayBuffer => {\n\tconst match = pem.match(/-----BEGIN PRIVATE KEY-----([\\s\\S]*?)-----END PRIVATE KEY-----/);\n\tif (!match) {\n\t\tthrow new Error(`invalid pkcs8 pem`);\n\t}\n\n\tconst base64 = match[1].replace(/\\s+/g, '');\n\tconst bytes = fromBase64Pad(base64);\n\tconst buffer = bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);\n\treturn buffer;\n};\n\nconst chunk64 = (input: string): string[] => {\n\tconst chunks: string[] = [];\n\tfor (let i = 0; i < input.length; i += 64) {\n\t\tchunks.push(input.slice(i, i + 64));\n\t}\n\treturn chunks;\n};\n","export { fromBase16, toBase16 } from '#bases/base16';\nexport {\n\tfromBase64,\n\tfromBase64Pad,\n\tfromBase64Url,\n\tfromBase64UrlPad,\n\ttoBase64,\n\ttoBase64Pad,\n\ttoBase64Url,\n\ttoBase64UrlPad,\n} from '#bases/base64';\n\nexport { fromBase32, toBase32 } from './bases/base32.ts';\nexport { fromBase58Btc, toBase58Btc } from './bases/base58.ts';\n","import { fromBase16 as fromBase16Native, toBase16 as toBase16Native } from './base16-web-native.ts';\nimport { fromBase16 as fromBase16Polyfill, toBase16 as toBase16Polyfill } from './base16-web-polyfill.ts';\n\nconst HAS_NATIVE_SUPPORT = 'fromHex' in Uint8Array;\n\nexport const fromBase16 = !HAS_NATIVE_SUPPORT ? fromBase16Polyfill : fromBase16Native;\nexport const toBase16 = !HAS_NATIVE_SUPPORT ? toBase16Polyfill : toBase16Native;\n","export const fromBase16 = (str: string): Uint8Array<ArrayBuffer> => {\n\treturn Uint8Array.fromHex(str) as Uint8Array<ArrayBuffer>;\n};\n\nexport const toBase16 = (bytes: Uint8Array): string => {\n\treturn bytes.toHex();\n};\n","// remove after September 2027\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array/toHex\n\nimport { createRfc4648Decode, createRfc4648Encode } from '../utils.ts';\n\nconst BASE16_CHARSET = '0123456789abcdef';\n\nexport const fromBase16: (str: string) => Uint8Array<ArrayBuffer> =\n\t/*#__PURE__*/ createRfc4648Decode(BASE16_CHARSET, 4, false);\nexport const toBase16: (bytes: Uint8Array) => string =\n\t/*#__PURE__*/ createRfc4648Encode(BASE16_CHARSET, 4, false);\n","import { alloc, allocUnsafe } from '@atcute/uint8array';\n\nexport const createRfc4648Encode = (alphabet: string, bitsPerChar: number, pad: boolean) => {\n\treturn (bytes: Uint8Array): string => {\n\t\tconst mask = (1 << bitsPerChar) - 1;\n\t\tlet str = '';\n\n\t\tlet bits = 0; // Number of bits currently in the buffer\n\t\tlet buffer = 0; // Bits waiting to be written out, MSB first\n\t\tfor (let i = 0; i < bytes.length; ++i) {\n\t\t\t// Slurp data into the buffer:\n\t\t\tbuffer = (buffer << 8) | bytes[i];\n\t\t\tbits += 8;\n\n\t\t\t// Write out as much as we can:\n\t\t\twhile (bits > bitsPerChar) {\n\t\t\t\tbits -= bitsPerChar;\n\t\t\t\tstr += alphabet[mask & (buffer >> bits)];\n\t\t\t}\n\t\t}\n\n\t\t// Partial character:\n\t\tif (bits !== 0) {\n\t\t\tstr += alphabet[mask & (buffer << (bitsPerChar - bits))];\n\t\t}\n\n\t\t// Add padding characters until we hit a byte boundary:\n\t\tif (pad) {\n\t\t\twhile (((str.length * bitsPerChar) & 7) !== 0) {\n\t\t\t\tstr += '=';\n\t\t\t}\n\t\t}\n\n\t\treturn str;\n\t};\n};\n\nexport const createRfc4648Decode = (alphabet: string, bitsPerChar: number, pad: boolean) => {\n\t// Build the character lookup table:\n\tconst codes: Record<string, number> = {};\n\tfor (let i = 0; i < alphabet.length; ++i) {\n\t\tcodes[alphabet[i]] = i;\n\t}\n\n\treturn (str: string): Uint8Array<ArrayBuffer> => {\n\t\t// Count the padding bytes:\n\t\tlet end = str.length;\n\t\twhile (pad && str[end - 1] === '=') {\n\t\t\t--end;\n\t\t}\n\n\t\t// Allocate the output:\n\t\tconst bytes = allocUnsafe(((end * bitsPerChar) / 8) | 0);\n\n\t\t// Parse the data:\n\t\tlet bits = 0; // Number of bits currently in the buffer\n\t\tlet buffer = 0; // Bits waiting to be written out, MSB first\n\t\tlet written = 0; // Next byte to write\n\t\tfor (let i = 0; i < end; ++i) {\n\t\t\t// Read one character from the string:\n\t\t\tconst value = codes[str[i]];\n\t\t\tif (value === undefined) {\n\t\t\t\tthrow new SyntaxError(`invalid base string`);\n\t\t\t}\n\n\t\t\t// Append the bits to the buffer:\n\t\t\tbuffer = (buffer << bitsPerChar) | value;\n\t\t\tbits += bitsPerChar;\n\n\t\t\t// Write out some bits if the buffer has a byte's worth:\n\t\t\tif (bits >= 8) {\n\t\t\t\tbits -= 8;\n\t\t\t\tbytes[written++] = 0xff & (buffer >> bits);\n\t\t\t}\n\t\t}\n\n\t\t// Verify that we have received just enough bits:\n\t\tif (bits >= bitsPerChar || (0xff & (buffer << (8 - bits))) !== 0) {\n\t\t\tthrow new SyntaxError('unexpected end of data');\n\t\t}\n\n\t\treturn bytes;\n\t};\n};\n\nexport const createBtcBaseEncode = (alphabet: string) => {\n\tif (alphabet.length >= 255) {\n\t\tthrow new RangeError(`alphabet too long`);\n\t}\n\n\tconst BASE = alphabet.length;\n\tconst LEADER = alphabet.charAt(0);\n\tconst iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n\n\treturn (source: Uint8Array): string => {\n\t\tif (source.length === 0) {\n\t\t\treturn '';\n\t\t}\n\n\t\t// Skip & count leading zeroes.\n\t\tlet zeroes = 0;\n\t\tlet length = 0;\n\t\tlet pbegin = 0;\n\t\tconst pend = source.length;\n\t\twhile (pbegin !== pend && source[pbegin] === 0) {\n\t\t\tpbegin++;\n\t\t\tzeroes++;\n\t\t}\n\n\t\t// Allocate enough space in big-endian base-N representation.\n\t\tconst dataLen = pend - pbegin;\n\t\tconst size = (dataLen * iFACTOR + 1) >>> 0;\n\t\tconst bN = alloc(size);\n\n\t\t// Process 3 source bytes at a time where possible.\n\t\t// multiplier: 256^3 = 16777216. max carry: 16777216 * (BASE-1) + (BASE-1).\n\t\t// for BASE=58: 16777216 * 57 = 956301312, well within 2^32 - 1.\n\t\t{\n\t\t\tconst rem = dataLen % 3;\n\t\t\tconst tripleEnd = pend - rem;\n\n\t\t\twhile (pbegin < tripleEnd) {\n\t\t\t\tlet carry = (source[pbegin] << 16) | (source[pbegin + 1] << 8) | source[pbegin + 2];\n\n\t\t\t\tlet i = 0;\n\t\t\t\tfor (let it1 = size - 1; (carry !== 0 || i < length) && it1 !== -1; it1--, i++) {\n\t\t\t\t\tcarry = carry + 16777216 * bN[it1];\n\t\t\t\t\tbN[it1] = (carry % BASE) | 0;\n\t\t\t\t\tcarry = (carry / BASE) | 0;\n\t\t\t\t}\n\n\t\t\t\tlength = i;\n\t\t\t\tpbegin += 3;\n\t\t\t}\n\t\t}\n\n\t\t// Process remaining 0-2 bytes one at a time.\n\t\twhile (pbegin !== pend) {\n\t\t\tlet carry = source[pbegin];\n\n\t\t\tlet i = 0;\n\t\t\tfor (let it1 = size - 1; (carry !== 0 || i < length) && it1 !== -1; it1--, i++) {\n\t\t\t\tcarry = carry + 256 * bN[it1];\n\t\t\t\tbN[it1] = (carry % BASE) | 0;\n\t\t\t\tcarry = (carry / BASE) | 0;\n\t\t\t}\n\n\t\t\tlength = i;\n\t\t\tpbegin++;\n\t\t}\n\n\t\t// Skip leading zeroes in base-N result.\n\t\tlet it2 = size - length;\n\t\twhile (it2 !== size && bN[it2] === 0) {\n\t\t\tit2++;\n\t\t}\n\n\t\t// Translate the result into a string.\n\t\tlet str = LEADER.repeat(zeroes);\n\t\tfor (; it2 < size; ++it2) {\n\t\t\tstr += alphabet.charAt(bN[it2]);\n\t\t}\n\n\t\treturn str;\n\t};\n};\n\nexport const createBtcBaseDecode = (alphabet: string) => {\n\tif (alphabet.length >= 255) {\n\t\tthrow new RangeError(`alphabet too long`);\n\t}\n\n\tconst BASE_MAP = new Uint8Array(128).fill(255);\n\tfor (let i = 0; i < alphabet.length; i++) {\n\t\tconst xc = alphabet.charCodeAt(i);\n\n\t\tif (xc >= 128) {\n\t\t\tthrow new RangeError(`non-ASCII character in alphabet`);\n\t\t}\n\t\tif (BASE_MAP[xc] !== 255) {\n\t\t\tthrow new RangeError(`${alphabet[i]} is ambiguous`);\n\t\t}\n\n\t\tBASE_MAP[xc] = i;\n\t}\n\n\tconst BASE = alphabet.length;\n\tconst BASE2 = BASE * BASE;\n\tconst LEADER = alphabet.charAt(0);\n\tconst FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n\n\treturn (source: string): Uint8Array<ArrayBuffer> => {\n\t\tif (source.length === 0) {\n\t\t\treturn allocUnsafe(0);\n\t\t}\n\n\t\t// Skip and count leading leader characters.\n\t\tlet psz = 0;\n\t\tlet zeroes = 0;\n\t\tlet length = 0;\n\n\t\twhile (source[psz] === LEADER) {\n\t\t\tzeroes++;\n\t\t\tpsz++;\n\t\t}\n\n\t\t// Allocate enough space in big-endian base256 representation.\n\t\tconst remaining = source.length - psz;\n\t\tconst size = (remaining * FACTOR + 1) >>> 0;\n\t\tconst b256 = alloc(size);\n\n\t\t// Process 2 source characters at a time where possible.\n\t\t// combined value: c0 * BASE + c1, multiplier: BASE^2.\n\t\t// max carry: BASE^2 * 255 + (BASE^2 - 1).\n\t\t// for BASE=58: 3364 * 255 + 3363 = 861183, well within safe integer range.\n\t\t{\n\t\t\tconst rem = remaining & 1;\n\t\t\tconst pairEnd = source.length - rem;\n\n\t\t\twhile (psz < pairEnd) {\n\t\t\t\tconst c0 = BASE_MAP[source.charCodeAt(psz)];\n\t\t\t\tconst c1 = BASE_MAP[source.charCodeAt(psz + 1)];\n\n\t\t\t\tif (c0 === 255 || c1 === 255) {\n\t\t\t\t\tthrow new Error(`invalid string`);\n\t\t\t\t}\n\n\t\t\t\tlet carry = c0 * BASE + c1;\n\n\t\t\t\tlet i = 0;\n\t\t\t\tfor (let it3 = size - 1; (carry !== 0 || i < length) && it3 !== -1; it3--, i++) {\n\t\t\t\t\tcarry += BASE2 * b256[it3];\n\t\t\t\t\tb256[it3] = carry & 0xff;\n\t\t\t\t\tcarry = (carry - (carry & 0xff)) / 256;\n\t\t\t\t}\n\t\t\t\tif (carry !== 0) {\n\t\t\t\t\tthrow new Error('non-zero carry');\n\t\t\t\t}\n\t\t\t\tlength = i;\n\t\t\t\tpsz += 2;\n\t\t\t}\n\t\t}\n\n\t\t// Process remaining character if odd count.\n\t\tif (psz < source.length) {\n\t\t\tlet carry = BASE_MAP[source.charCodeAt(psz)];\n\n\t\t\tif (carry === 255) {\n\t\t\t\tthrow new Error(`invalid string`);\n\t\t\t}\n\n\t\t\tlet i = 0;\n\t\t\tfor (let it3 = size - 1; (carry !== 0 || i < length) && it3 !== -1; it3--, i++) {\n\t\t\t\tcarry += BASE * b256[it3];\n\t\t\t\tb256[it3] = carry & 0xff;\n\t\t\t\tcarry = carry >>> 8;\n\t\t\t}\n\t\t\tif (carry !== 0) {\n\t\t\t\tthrow new Error('non-zero carry');\n\t\t\t}\n\t\t\tlength = i;\n\t\t}\n\n\t\t// Skip leading zeroes in b256.\n\t\tlet it4 = size - length;\n\t\twhile (it4 !== size && b256[it4] === 0) {\n\t\t\tit4++;\n\t\t}\n\n\t\tif (it4 === zeroes) {\n\t\t\treturn b256;\n\t\t}\n\n\t\tconst vch = allocUnsafe(zeroes + (size - it4));\n\t\tvch.fill(0, 0, zeroes);\n\t\tvch.set(b256.subarray(it4), zeroes);\n\n\t\treturn vch;\n\t};\n};\n","const textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\nconst subtle = crypto.subtle;\n\n/**\n * creates an Uint8Array of the requested size, with the contents zeroed\n */\nexport const alloc = (size: number): Uint8Array<ArrayBuffer> => {\n\treturn new Uint8Array(size);\n};\n\n/**\n * creates an Uint8Array of the requested size, where the contents may not be\n * zeroed out. only use if you're certain that the contents will be overwritten\n */\nexport const allocUnsafe = alloc;\n\n/**\n * compares two Uint8Array buffers\n */\nexport const compare = (a: Uint8Array, b: Uint8Array): number => {\n\tconst alen = a.length;\n\tconst blen = b.length;\n\n\tif (alen > blen) {\n\t\treturn 1;\n\t}\n\tif (alen < blen) {\n\t\treturn -1;\n\t}\n\n\tfor (let i = 0; i < alen; i++) {\n\t\tconst ax = a[i];\n\t\tconst bx = b[i];\n\n\t\tif (ax < bx) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tif (ax > bx) {\n\t\t\treturn 1;\n\t\t}\n\t}\n\n\treturn 0;\n};\n\n/**\n * checks if the two Uint8Array buffers are equal\n */\nexport const equals = (a: Uint8Array, b: Uint8Array): boolean => {\n\tif (a === b) {\n\t\treturn true;\n\t}\n\n\tlet len: number;\n\tif ((len = a.length) === b.length) {\n\t\twhile (len--) {\n\t\t\tif (a[len] !== b[len]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn len === -1;\n};\n\n/**\n * checks if the two Uint8Array buffers are equal, timing-safe version\n */\nexport const timingSafeEquals = (a: Uint8Array, b: Uint8Array): boolean => {\n\tlet len: number;\n\tlet out = 0;\n\tif ((len = a.length) === b.length) {\n\t\twhile (len--) {\n\t\t\tout |= a[len] ^ b[len];\n\t\t}\n\t}\n\n\treturn len === -1 && out === 0;\n};\n\n/**\n * concatenates multiple Uint8Array buffers into one\n */\nexport const concat = (arrays: Uint8Array[], size?: number): Uint8Array<ArrayBuffer> => {\n\tlet written = 0;\n\n\tlet len = arrays.length;\n\tlet idx: number;\n\n\tif (size === undefined) {\n\t\tfor (idx = size = 0; idx < len; idx++) {\n\t\t\tconst chunk = arrays[idx];\n\t\t\tsize += chunk.length;\n\t\t}\n\t}\n\n\tconst buffer = new Uint8Array(size);\n\n\tfor (idx = 0; idx < len; idx++) {\n\t\tconst chunk = arrays[idx];\n\n\t\tbuffer.set(chunk, written);\n\t\twritten += chunk.length;\n\t}\n\n\treturn buffer;\n};\n\n/**\n * encodes a UTF-8 string\n */\nexport const encodeUtf8 = (str: string): Uint8Array<ArrayBuffer> => {\n\treturn textEncoder.encode(str);\n};\n\n/**\n * encodes a UTF-8 string into a given buffer\n */\nexport const encodeUtf8Into = (to: Uint8Array, str: string, offset?: number, length?: number): number => {\n\tlet buffer: Uint8Array;\n\n\tif (offset === undefined) {\n\t\tbuffer = to;\n\t} else if (length === undefined) {\n\t\tbuffer = to.subarray(offset);\n\t} else {\n\t\tbuffer = to.subarray(offset, offset + length);\n\t}\n\n\tconst result = textEncoder.encodeInto(str, buffer);\n\n\treturn result.written;\n};\n\nconst _fromCharCode = String.fromCharCode;\n\n// fully unrolled short string decoder, inspired by cbor-x\n// returns null if non-ASCII byte encountered, signaling fallback to TextDecoder\nconst _shortString = (from: Uint8Array, p: number, length: number): string | null => {\n\tif (length < 4) {\n\t\tif (length < 2) {\n\t\t\tif (length === 0) return '';\n\t\t\tconst a = from[p];\n\t\t\tif (a & 0x80) return null;\n\t\t\treturn _fromCharCode(a);\n\t\t}\n\t\tconst a = from[p];\n\t\tconst b = from[p + 1];\n\t\tif ((a | b) & 0x80) return null;\n\t\tif (length === 2) return _fromCharCode(a, b);\n\t\tconst c = from[p + 2];\n\t\tif (c & 0x80) return null;\n\t\treturn _fromCharCode(a, b, c);\n\t}\n\tconst a = from[p];\n\tconst b = from[p + 1];\n\tconst c = from[p + 2];\n\tconst d = from[p + 3];\n\tif ((a | b | c | d) & 0x80) return null;\n\tif (length < 8) {\n\t\tif (length === 4) return _fromCharCode(a, b, c, d);\n\t\tconst e = from[p + 4];\n\t\tif (e & 0x80) return null;\n\t\tif (length === 5) return _fromCharCode(a, b, c, d, e);\n\t\tconst f = from[p + 5];\n\t\tif (f & 0x80) return null;\n\t\tif (length === 6) return _fromCharCode(a, b, c, d, e, f);\n\t\tconst g = from[p + 6];\n\t\tif (g & 0x80) return null;\n\t\treturn _fromCharCode(a, b, c, d, e, f, g);\n\t}\n\tconst e = from[p + 4];\n\tconst f = from[p + 5];\n\tconst g = from[p + 6];\n\tconst h = from[p + 7];\n\tif ((e | f | g | h) & 0x80) return null;\n\tif (length < 12) {\n\t\tif (length === 8) return _fromCharCode(a, b, c, d, e, f, g, h);\n\t\tconst i = from[p + 8];\n\t\tif (i & 0x80) return null;\n\t\tif (length === 9) return _fromCharCode(a, b, c, d, e, f, g, h, i);\n\t\tconst j = from[p + 9];\n\t\tif (j & 0x80) return null;\n\t\tif (length === 10) return _fromCharCode(a, b, c, d, e, f, g, h, i, j);\n\t\tconst k = from[p + 10];\n\t\tif (k & 0x80) return null;\n\t\treturn _fromCharCode(a, b, c, d, e, f, g, h, i, j, k);\n\t}\n\tconst i = from[p + 8];\n\tconst j = from[p + 9];\n\tconst k = from[p + 10];\n\tconst l = from[p + 11];\n\tif ((i | j | k | l) & 0x80) return null;\n\tif (length === 12) return _fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l);\n\tconst m = from[p + 12];\n\tif (m & 0x80) return null;\n\tif (length === 13) return _fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m);\n\tconst n = from[p + 13];\n\tif (n & 0x80) return null;\n\tif (length === 14) return _fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m, n);\n\tconst o = from[p + 14];\n\tif (o & 0x80) return null;\n\treturn _fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);\n};\n\n/**\n * decodes a UTF-8 string from a given buffer\n * @param from source buffer\n * @param offset byte offset to start reading from\n * @param length number of bytes to read\n * @returns decoded string\n */\nexport const decodeUtf8From = (\n\tfrom: Uint8Array,\n\toffset: number = 0,\n\tlength: number = from.length,\n): string => {\n\tif (length <= 15) {\n\t\tconst result = _shortString(from, offset, length);\n\t\tif (result !== null) return result;\n\t}\n\tif (offset === 0 && length === from.length) {\n\t\treturn textDecoder.decode(from);\n\t}\n\treturn textDecoder.decode(from.subarray(offset, offset + length));\n};\n\n/**\n * calculates the UTF-8 byte length of a string\n * @param str string to measure\n * @returns byte length when encoded as UTF-8\n */\nexport const getUtf8Length = (str: string): number => {\n\tconst len = str.length;\n\n\tlet u16pos = 0;\n\tlet u8pos = 0;\n\n\t// ASCII fast-path: batch process 4 chars at a time\n\twhile (u16pos + 3 < len) {\n\t\tconst a = str.charCodeAt(u16pos);\n\t\tconst b = str.charCodeAt(u16pos + 1);\n\t\tconst c = str.charCodeAt(u16pos + 2);\n\t\tconst d = str.charCodeAt(u16pos + 3);\n\n\t\tif ((a | b | c | d) >= 0x80) {\n\t\t\tbreak;\n\t\t}\n\n\t\tu16pos += 4;\n\t\tu8pos += 4;\n\t}\n\n\t// handle remaining chars\n\twhile (u16pos < len) {\n\t\tconst code = str.charCodeAt(u16pos);\n\n\t\tif (code < 0x80) {\n\t\t\tu16pos += 1;\n\t\t\tu8pos += 1;\n\t\t} else if (code < 0x800) {\n\t\t\tu16pos += 1;\n\t\t\tu8pos += 2;\n\t\t} else if (code < 0xd800 || code > 0xdbff) {\n\t\t\tu16pos += 1;\n\t\t\tu8pos += 3;\n\t\t} else {\n\t\t\tu16pos += 2;\n\t\t\tu8pos += 4;\n\t\t}\n\t}\n\n\treturn u8pos;\n};\n\n/**\n * checks if a string's UTF-8 byte length is within a given range.\n * includes early-exit optimization when exceeding max length.\n * @param str string to measure\n * @param min minimum byte length (inclusive)\n * @param max maximum byte length (inclusive)\n * @returns true if byte length is within [min, max]\n */\nexport const isUtf8LengthInRange = (str: string, min: number, max: number): boolean => {\n\tconst len = str.length;\n\n\t// fast path: if max possible UTF-8 length is below min, fail\n\tif (len * 3 < min) {\n\t\treturn false;\n\t}\n\n\t// fast path: if UTF-16 length satisfies min and max possible satisfies max\n\tif (len >= min && len * 3 <= max) {\n\t\treturn true;\n\t}\n\n\tlet u16pos = 0;\n\tlet u8pos = 0;\n\n\twhile (u16pos < len) {\n\t\tconst code = str.charCodeAt(u16pos);\n\n\t\tif (code < 0x80) {\n\t\t\tu16pos += 1;\n\t\t\tu8pos += 1;\n\t\t} else if (code < 0x800) {\n\t\t\tu16pos += 1;\n\t\t\tu8pos += 2;\n\t\t} else if (code < 0xd800 || code > 0xdbff) {\n\t\t\tu16pos += 1;\n\t\t\tu8pos += 3;\n\t\t} else {\n\t\t\tu16pos += 2;\n\t\t\tu8pos += 4;\n\t\t}\n\n\t\t// early exit once we exceed max\n\t\tif (u8pos > max) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn u8pos >= min;\n};\n\n/**\n * get a SHA-256 digest of this buffer\n */\nexport const toSha256 = async (buffer: Uint8Array<ArrayBuffer>): Promise<Uint8Array<ArrayBuffer>> => {\n\treturn new Uint8Array(await subtle.digest('SHA-256', buffer));\n};\n\n/**\n * generates cryptographically secure random bytes\n * @param size number of bytes to generate\n * @returns buffer filled with random bytes\n */\nexport const randomBytes = (size: number): Uint8Array<ArrayBuffer> => {\n\treturn crypto.getRandomValues(new Uint8Array(size));\n};\n","import {\n\tfromBase64 as fromBase64Native,\n\tfromBase64Pad as fromBase64PadNative,\n\tfromBase64Url as fromBase64UrlNative,\n\tfromBase64UrlPad as fromBase64UrlPadNative,\n\ttoBase64 as toBase64Native,\n\ttoBase64Pad as toBase64PadNative,\n\ttoBase64Url as toBase64UrlNative,\n\ttoBase64UrlPad as toBase64UrlPadNative,\n} from './base64-web-native.ts';\nimport {\n\tfromBase64Pad as fromBase64PadPolyfill,\n\tfromBase64 as fromBase64Polyfill,\n\tfromBase64UrlPad as fromBase64UrlPadPolyfill,\n\tfromBase64Url as fromBase64UrlPolyfill,\n\ttoBase64Pad as toBase64PadPolyfill,\n\ttoBase64 as toBase64Polyfill,\n\ttoBase64UrlPad as toBase64UrlPadPolyfill,\n\ttoBase64Url as toBase64UrlPolyfill,\n} from './base64-web-polyfill.ts';\n\nconst HAS_NATIVE_SUPPORT = 'fromBase64' in Uint8Array;\n\n// #region base64\nexport const fromBase64 = !HAS_NATIVE_SUPPORT ? fromBase64Polyfill : fromBase64Native;\nexport const toBase64 = !HAS_NATIVE_SUPPORT ? toBase64Polyfill : toBase64Native;\n// #endregion\n\n// #region base64pad\nexport const fromBase64Pad = !HAS_NATIVE_SUPPORT ? fromBase64PadPolyfill : fromBase64PadNative;\nexport const toBase64Pad = !HAS_NATIVE_SUPPORT ? toBase64PadPolyfill : toBase64PadNative;\n// #endregion\n\n// #region base64url\nexport const fromBase64Url = !HAS_NATIVE_SUPPORT ? fromBase64UrlPolyfill : fromBase64UrlNative;\nexport const toBase64Url = !HAS_NATIVE_SUPPORT ? toBase64UrlPolyfill : toBase64UrlNative;\n// #endregion\n\n// #region base64urlpad\nexport const fromBase64UrlPad = !HAS_NATIVE_SUPPORT ? fromBase64UrlPadPolyfill : fromBase64UrlPadNative;\nexport const toBase64UrlPad = !HAS_NATIVE_SUPPORT ? toBase64UrlPadPolyfill : toBase64UrlPadNative;\n// #endregion\n","// #region base64\nexport const fromBase64 = (str: string): Uint8Array<ArrayBuffer> => {\n\treturn Uint8Array.fromBase64(str, {\n\t\talphabet: 'base64',\n\t\tlastChunkHandling: 'loose',\n\t}) as Uint8Array<ArrayBuffer>;\n};\n\nexport const toBase64 = (bytes: Uint8Array): string => {\n\treturn bytes.toBase64({ alphabet: 'base64', omitPadding: true });\n};\n// #endregion\n\n// #region base64pad\nexport const fromBase64Pad = (str: string): Uint8Array<ArrayBuffer> => {\n\treturn Uint8Array.fromBase64(str, {\n\t\talphabet: 'base64',\n\t\tlastChunkHandling: 'strict',\n\t}) as Uint8Array<ArrayBuffer>;\n};\n\nexport const toBase64Pad = (bytes: Uint8Array): string => {\n\treturn bytes.toBase64({ alphabet: 'base64', omitPadding: false });\n};\n// #endregion\n\n// #region base64url\nexport const fromBase64Url = (str: string): Uint8Array<ArrayBuffer> => {\n\treturn Uint8Array.fromBase64(str, {\n\t\talphabet: 'base64url',\n\t\tlastChunkHandling: 'loose',\n\t}) as Uint8Array<ArrayBuffer>;\n};\n\nexport const toBase64Url = (bytes: Uint8Array): string => {\n\treturn bytes.toBase64({ alphabet: 'base64url', omitPadding: true });\n};\n// #endregion\n\n// #region base64urlpad\nexport const fromBase64UrlPad = (str: string): Uint8Array<ArrayBuffer> => {\n\treturn Uint8Array.fromBase64(str, {\n\t\talphabet: 'base64url',\n\t\tlastChunkHandling: 'strict',\n\t}) as Uint8Array<ArrayBuffer>;\n};\n\nexport const toBase64UrlPad = (bytes: Uint8Array): string => {\n\treturn bytes.toBase64({ alphabet: 'base64url', omitPadding: false });\n};\n// #endregion\n","// remove after September 2027\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array/toBase64\n\nimport { createRfc4648Decode, createRfc4648Encode } from '../utils.ts';\n\nconst BASE64_CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nconst BASE64URL_CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\n// #region base64\nexport const fromBase64: (str: string) => Uint8Array<ArrayBuffer> =\n\t/*#__PURE__*/ createRfc4648Decode(BASE64_CHARSET, 6, false);\nexport const toBase64: (bytes: Uint8Array) => string =\n\t/*#__PURE__*/ createRfc4648Encode(BASE64_CHARSET, 6, false);\n// #endregion\n\n// #region base64pad\nexport const fromBase64Pad: (str: string) => Uint8Array<ArrayBuffer> =\n\t/*#__PURE__*/ createRfc4648Decode(BASE64_CHARSET, 6, true);\nexport const toBase64Pad: (bytes: Uint8Array) => string =\n\t/*#__PURE__*/ createRfc4648Encode(BASE64_CHARSET, 6, true);\n// #endregion\n\n// #region base64url\nexport const fromBase64Url: (str: string) => Uint8Array<ArrayBuffer> =\n\t/*#__PURE__*/ createRfc4648Decode(BASE64URL_CHARSET, 6, false);\nexport const toBase64Url: (bytes: Uint8Array) => string =\n\t/*#__PURE__*/ createRfc4648Encode(BASE64URL_CHARSET, 6, false);\n// #endregion\n\n// #region base64urlpad\nexport const fromBase64UrlPad: (str: string) => Uint8Array<ArrayBuffer> =\n\t/*#__PURE__*/ createRfc4648Decode(BASE64URL_CHARSET, 6, true);\nexport const toBase64UrlPad: (bytes: Uint8Array) => string =\n\t/*#__PURE__*/ createRfc4648Encode(BASE64URL_CHARSET, 6, true);\n// #endregion\n","import { allocUnsafe } from '@atcute/uint8array';\n\nexport { toBase32 } from '#bases/base32-encode';\n\nconst ALPHABET = 'abcdefghijklmnopqrstuvwxyz234567';\n\n// #region decode\n\n// charCode -> 5-bit value lookup table, 0xff for invalid characters.\n// valid base32 chars: a-z (97-122) map to 0-25, 2-7 (50-55) map to 26-31.\nconst _decodeLut: Uint8Array = /*#__PURE__*/ (() => {\n\tconst t = new Uint8Array(128).fill(0xff);\n\tfor (let i = 0; i < 32; i++) {\n\t\tt[ALPHABET.charCodeAt(i)] = i;\n\t}\n\treturn t;\n})();\n\n/**\n * decodes an unpadded RFC 4648 base32 (lowercase) string to a Uint8Array\n * @param str base32 encoded string\n * @returns decoded buffer\n * @throws {SyntaxError} on invalid characters or malformed trailing bits\n */\nexport const fromBase32 = (str: string): Uint8Array<ArrayBuffer> => {\n\tconst end = str.length;\n\tconst bytes = allocUnsafe(((end * 5) / 8) | 0);\n\n\tlet written = 0;\n\tlet i = 0;\n\n\t// process 8-character groups (= 40 bits = 5 bytes each)\n\tconst fullGroups = end - (end % 8);\n\tfor (; i < fullGroups; i += 8) {\n\t\tconst c0 = _decodeLut[str.charCodeAt(i)];\n\t\tconst c1 = _decodeLut[str.charCodeAt(i + 1)];\n\t\tconst c2 = _decodeLut[str.charCodeAt(i + 2)];\n\t\tconst c3 = _decodeLut[str.charCodeAt(i + 3)];\n\t\tconst c4 = _decodeLut[str.charCodeAt(i + 4)];\n\t\tconst c5 = _decodeLut[str.charCodeAt(i + 5)];\n\t\tconst c6 = _decodeLut[str.charCodeAt(i + 6)];\n\t\tconst c7 = _decodeLut[str.charCodeAt(i + 7)];\n\n\t\t// valid base32 values are 0-31 (5 bits), so any value with bits\n\t\t// outside the low 5 means 0xff was in the mix\n\t\tif ((c0 | c1 | c2 | c3 | c4 | c5 | c6 | c7) & 0xe0) {\n\t\t\tthrow new SyntaxError(`invalid base string`);\n\t\t}\n\n\t\tbytes[written] = (c0 << 3) | (c1 >>> 2);\n\t\tbytes[written + 1] = ((c1 << 6) | (c2 << 1) | (c3 >>> 4)) & 0xff;\n\t\tbytes[written + 2] = ((c3 << 4) | (c4 >>> 1)) & 0xff;\n\t\tbytes[written + 3] = ((c4 << 7) | (c5 << 2) | (c6 >>> 3)) & 0xff;\n\t\tbytes[written + 4] = ((c6 << 5) | c7) & 0xff;\n\t\twritten += 5;\n\t}\n\n\t// handle remaining 1-7 characters\n\tif (i < end) {\n\t\tlet bits = 0;\n\t\tlet buffer = 0;\n\t\tfor (; i < end; ++i) {\n\t\t\tconst value = _decodeLut[str.charCodeAt(i)];\n\t\t\tif (value & 0xe0) {\n\t\t\t\tthrow new SyntaxError(`invalid base string`);\n\t\t\t}\n\t\t\tbuffer = (buffer << 5) | value;\n\t\t\tbits += 5;\n\t\t\tif (bits >= 8) {\n\t\t\t\tbits -= 8;\n\t\t\t\tbytes[written++] = 0xff & (buffer >> bits);\n\t\t\t}\n\t\t}\n\n\t\tif (bits >= 5 || (0xff & (buffer << (8 - bits))) !== 0) {\n\t\t\tthrow new SyntaxError(`unexpected end of data`);\n\t\t}\n\t}\n\n\treturn bytes;\n};\n\n// #endregion\n","const ALPHABET = 'abcdefghijklmnopqrstuvwxyz234567';\n\n// charCode lookup table: cc[i] = ALPHABET.charCodeAt(i) for i in 0..31\nconst _cc: Uint8Array = /*#__PURE__*/ (() => {\n\tconst t = new Uint8Array(32);\n\tfor (let i = 0; i < 32; i++) {\n\t\tt[i] = ALPHABET.charCodeAt(i);\n\t}\n\treturn t;\n})();\n\nconst _fromCharCode = String.fromCharCode;\n\n/**\n * encodes a Uint8Array to an unpadded RFC 4648 base32 (lowercase) string\n * @param bytes source buffer\n * @returns base32 encoded string\n */\nexport const toBase32 = (bytes: Uint8Array): string => {\n\tconst len = bytes.length;\n\tconst full = (len / 5) | 0;\n\tconst rem = len - full * 5;\n\tconst cc = _cc;\n\n\tlet str = '';\n\tlet ip = 0;\n\n\t// process pairs of 5-byte groups (10 bytes → 16 base32 chars) at a time,\n\t// batching into a single String.fromCharCode call for fewer string concats\n\tconst pairs = (full / 2) | 0;\n\tfor (let g = 0; g < pairs; g++) {\n\t\tconst a0 = bytes[ip],\n\t\t\ta1 = bytes[ip + 1],\n\t\t\ta2 = bytes[ip + 2],\n\t\t\ta3 = bytes[ip + 3],\n\t\t\ta4 = bytes[ip + 4];\n\t\tconst b0 = bytes[ip + 5],\n\t\t\tb1 = bytes[ip + 6],\n\t\t\tb2 = bytes[ip + 7],\n\t\t\tb3 = bytes[ip + 8],\n\t\t\tb4 = bytes[ip + 9];\n\n\t\tstr += _fromCharCode(\n\t\t\tcc[a0 >>> 3],\n\t\t\tcc[((a0 << 2) | (a1 >>> 6)) & 0x1f],\n\t\t\tcc[(a1 >>> 1) & 0x1f],\n\t\t\tcc[((a1 << 4) | (a2 >>> 4)) & 0x1f],\n\t\t\tcc[((a2 << 1) | (a3 >>> 7)) & 0x1f],\n\t\t\tcc[(a3 >>> 2) & 0x1f],\n\t\t\tcc[((a3 << 3) | (a4 >>> 5)) & 0x1f],\n\t\t\tcc[a4 & 0x1f],\n\t\t\tcc[b0 >>> 3],\n\t\t\tcc[((b0 << 2) | (b1 >>> 6)) & 0x1f],\n\t\t\tcc[(b1 >>> 1) & 0x1f],\n\t\t\tcc[((b1 << 4) | (b2 >>> 4)) & 0x1f],\n\t\t\tcc[((b2 << 1) | (b3 >>> 7)) & 0x1f],\n\t\t\tcc[(b3 >>> 2) & 0x1f],\n\t\t\tcc[((b3 << 3) | (b4 >>> 5)) & 0x1f],\n\t\t\tcc[b4 & 0x1f],\n\t\t);\n\t\tip += 10;\n\t}\n\n\t// remaining full group if odd count\n\tif (full & 1) {\n\t\tconst b0 = bytes[ip],\n\t\t\tb1 = bytes[ip + 1],\n\t\t\tb2 = bytes[ip + 2],\n\t\t\tb3 = bytes[ip + 3],\n\t\t\tb4 = bytes[ip + 4];\n\n\t\tstr += _fromCharCode(\n\t\t\tcc[b0 >>> 3],\n\t\t\tcc[((b0 << 2) | (b1 >>> 6)) & 0x1f],\n\t\t\tcc[(b1 >>> 1) & 0x1f],\n\t\t\tcc[((b1 << 4) | (b2 >>> 4)) & 0x1f],\n\t\t\tcc[((b2 << 1) | (b3 >>> 7)) & 0x1f],\n\t\t\tcc[(b3 >>> 2) & 0x1f],\n\t\t\tcc[((b3 << 3) | (b4 >>> 5)) & 0x1f],\n\t\t\tcc[b4 & 0x1f],\n\t\t);\n\t\tip += 5;\n\t}\n\n\t// handle remaining 1-4 bytes\n\tif (rem > 0) {\n\t\tlet buffer = 0;\n\t\tlet bits = 0;\n\t\tfor (let i = ip; i < len; i++) {\n\t\t\tbuffer = (buffer << 8) | bytes[i];\n\t\t\tbits += 8;\n\t\t}\n\t\twhile (bits >= 5) {\n\t\t\tbits -= 5;\n\t\t\tstr += _fromCharCode(cc[(buffer >>> bits) & 0x1f]);\n\t\t}\n\t\tif (bits > 0) {\n\t\t\tstr += _fromCharCode(cc[(buffer << (5 - bits)) & 0x1f]);\n\t\t}\n\t}\n\n\treturn str;\n};\n","import { createBtcBaseDecode, createBtcBaseEncode } from '../utils.ts';\n\nconst BASE58BTC_CHARSET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\n\nexport const fromBase58Btc: (source: string) => Uint8Array<ArrayBuffer> =\n\t/*#__PURE__*/ createBtcBaseDecode(BASE58BTC_CHARSET);\n\nexport const toBase58Btc: (source: Uint8Array) => string =\n\t/*#__PURE__*/ createBtcBaseEncode(BASE58BTC_CHARSET);\n","import type { SigningAlgorithm } from '../jwk/types.js';\n\nconst HASH_BY_ALG: Record<SigningAlgorithm, 'SHA-256' | 'SHA-384' | 'SHA-512'> = {\n\tES256: 'SHA-256',\n\tES384: 'SHA-384',\n\tES512: 'SHA-512',\n\tPS256: 'SHA-256',\n\tPS384: 'SHA-384',\n\tPS512: 'SHA-512',\n\tRS256: 'SHA-256',\n\tRS384: 'SHA-384',\n\tRS512: 'SHA-512',\n};\n\nconst CURVE_BY_ALG: Record<SigningAlgorithm, 'P-256' | 'P-384' | 'P-521' | null> = {\n\tES256: 'P-256',\n\tES384: 'P-384',\n\tES512: 'P-521',\n\tPS256: null,\n\tPS384: null,\n\tPS512: null,\n\tRS256: null,\n\tRS384: null,\n\tRS512: null,\n};\n\nexport const getHashName = (alg: SigningAlgorithm): 'SHA-256' | 'SHA-384' | 'SHA-512' => {\n\treturn HASH_BY_ALG[alg];\n};\n\nexport const getNamedCurve = (alg: SigningAlgorithm): 'P-256' | 'P-384' | 'P-521' | null => {\n\treturn CURVE_BY_ALG[alg];\n};\n\nexport const getSignAlgorithm = (alg: SigningAlgorithm): AlgorithmIdentifier | EcdsaParams | RsaPssParams => {\n\tif (alg.startsWith('ES')) {\n\t\treturn { name: 'ECDSA', hash: { name: getHashName(alg) } };\n\t}\n\tif (alg.startsWith('PS')) {\n\t\treturn {\n\t\t\tname: 'RSA-PSS',\n\t\t\thash: { name: getHashName(alg) },\n\t\t\tsaltLength: getHashLength(getHashName(alg)),\n\t\t};\n\t}\n\treturn { name: 'RSASSA-PKCS1-v1_5' };\n};\n\nexport const getImportAlgorithm = (\n\talg: SigningAlgorithm,\n\tcurve?: 'P-256' | 'P-384' | 'P-521',\n): EcKeyImportParams | RsaHashedImportParams => {\n\tif (alg.startsWith('ES')) {\n\t\tconst namedCurve = curve ?? getNamedCurve(alg);\n\t\tif (!namedCurve) {\n\t\t\tthrow new Error(`unable to determine curve for ${alg}`);\n\t\t}\n\t\treturn { name: 'ECDSA', namedCurve };\n\t}\n\n\tif (alg.startsWith('PS')) {\n\t\treturn { name: 'RSA-PSS', hash: { name: getHashName(alg) } };\n\t}\n\n\treturn { name: 'RSASSA-PKCS1-v1_5', hash: { name: getHashName(alg) } };\n};\n\nexport const getGenerateAlgorithm = (alg: SigningAlgorithm): EcKeyGenParams | RsaHashedKeyGenParams => {\n\tconst curve = getNamedCurve(alg);\n\tif (curve) {\n\t\treturn { name: 'ECDSA', namedCurve: curve };\n\t}\n\n\tconst hash = { name: getHashName(alg) };\n\treturn {\n\t\tname: alg.startsWith('PS') ? 'RSA-PSS' : 'RSASSA-PKCS1-v1_5',\n\t\thash,\n\t\tmodulusLength: 2048,\n\t\tpublicExponent: new Uint8Array([0x01, 0x00, 0x01]),\n\t};\n};\n\nconst getHashLength = (hash: 'SHA-256' | 'SHA-384' | 'SHA-512'): number => {\n\tswitch (hash) {\n\t\tcase 'SHA-256':\n\t\t\treturn 32;\n\t\tcase 'SHA-384':\n\t\t\treturn 48;\n\t\tcase 'SHA-512':\n\t\t\treturn 64;\n\t}\n};\n","import { fromBase64Url, toBase64Url } from '@atcute/multibase';\nimport { decodeUtf8From, encodeUtf8 } from '@atcute/uint8array';\n\nimport { getSignAlgorithm } from '../internal/crypto.js';\nimport type { SigningAlgorithm } from '../jwk/types.js';\n\n/**\n * signs a jwt using webcrypto.\n *\n * @param params signing parameters\n * @returns signed jwt\n */\nexport const signJwt = async (params: {\n\theader: Record<string, unknown>;\n\tpayload: Record<string, unknown>;\n\tkey: CryptoKey;\n\talg: SigningAlgorithm;\n}): Promise<string> => {\n\tconst { header, payload, key, alg } = params;\n\tconst fullHeader = { ...header, alg };\n\tconst headerSegment = encodeSegment(fullHeader);\n\tconst payloadSegment = encodeSegment(payload);\n\tconst signingInput = `${headerSegment}.${payloadSegment}`;\n\n\tconst signature = await crypto.subtle.sign(\n\t\tgetSignAlgorithm(alg),\n\t\tkey,\n\t\tencodeUtf8(signingInput) as Uint8Array<ArrayBuffer>,\n\t);\n\n\tconst signatureSegment = toBase64Url(new Uint8Array(signature));\n\n\treturn `${signingInput}.${signatureSegment}`;\n};\n\n/**\n * verifies a jwt and returns its payload.\n *\n * @param jwt jwt string\n * @param options verification options\n * @returns decoded payload\n */\nexport const verifyJwt = async (\n\tjwt: string,\n\toptions: { key: CryptoKey; alg: SigningAlgorithm; typ?: string },\n): Promise<Record<string, unknown>> => {\n\tconst { key, alg, typ } = options;\n\tconst parts = jwt.split('.');\n\tif (parts.length !== 3) {\n\t\tthrow new Error(`invalid jwt format`);\n\t}\n\n\tconst header = decodeSegment<Record<string, unknown>>(parts[0]);\n\tif (header.alg !== alg) {\n\t\tthrow new Error(`invalid jwt alg`);\n\t}\n\tif (typ && header.typ !== typ) {\n\t\tthrow new Error(`invalid jwt typ`);\n\t}\n\n\tconst payload = decodeSegment<Record<string, unknown>>(parts[1]);\n\tconst signature = fromBase64Url(parts[2]);\n\tconst signingInput = `${parts[0]}.${parts[1]}`;\n\n\tconst ok = await crypto.subtle.verify(\n\t\tgetSignAlgorithm(alg),\n\t\tkey,\n\t\tsignature,\n\t\tencodeUtf8(signingInput) as Uint8Array<ArrayBuffer>,\n\t);\n\n\tif (!ok) {\n\t\tthrow new Error(`invalid jwt signature`);\n\t}\n\n\treturn payload;\n};\n\nconst encodeSegment = (value: unknown): string => {\n\treturn toBase64Url(encodeUtf8(JSON.stringify(value)));\n};\n\nconst decodeSegment = <T>(value: string): T => {\n\tconst bytes = fromBase64Url(value);\n\treturn JSON.parse(decodeUtf8From(bytes)) as T;\n};\n","import { getGenerateAlgorithm } from '../internal/crypto.js';\nimport { exportPrivateJwkFromKey } from '../internal/jwk.js';\nimport { setCachedKeyMaterial } from '../internal/key-cache.js';\nimport type { SigningAlgorithm } from '../jwk/types.js';\n\nimport type { ClientAssertionPrivateJwk } from './types.js';\n\n/**\n * generates a new client assertion private key.\n *\n * @param kid key id to assign\n * @param alg signing algorithm (defaults to es256)\n * @returns client assertion private JWK (with cache pre-warmed)\n */\nexport const generateClientAssertionKey = async (\n\tkid: string,\n\talg: SigningAlgorithm = 'ES256',\n): Promise<ClientAssertionPrivateJwk> => {\n\tconst pair = await crypto.subtle.generateKey(getGenerateAlgorithm(alg), true, ['sign', 'verify']);\n\tconst jwk = (await exportPrivateJwkFromKey(pair.privateKey, alg, kid)) as ClientAssertionPrivateJwk;\n\n\t// pre-populate cache so we don't re-import\n\tsetCachedKeyMaterial(jwk, pair.privateKey);\n\n\treturn jwk;\n};\n","import { exportPrivateJwkFromKey, importPkcs8PrivateKey } from '../internal/jwk.js';\nimport { setCachedKeyMaterial } from '../internal/key-cache.js';\nimport type { SigningAlgorithm } from '../jwk/types.js';\n\nimport type { ClientAssertionPrivateJwk } from './types.js';\n\n/**\n * imports a client assertion private key from a pkcs8 pem string.\n *\n * @param pem pkcs8 pem string\n * @param options import options (kid + alg)\n * @returns client assertion private JWK (with cache pre-warmed)\n */\nexport const importClientAssertionPkcs8 = async (\n\tpem: string,\n\toptions: { kid: string; alg: SigningAlgorithm },\n): Promise<ClientAssertionPrivateJwk> => {\n\tconst { kid, alg } = options;\n\tconst cryptoKey = await importPkcs8PrivateKey(pem, alg);\n\tconst jwk = (await exportPrivateJwkFromKey(cryptoKey, alg, kid)) as ClientAssertionPrivateJwk;\n\n\t// pre-populate cache so we don't re-import\n\tsetCachedKeyMaterial(jwk, cryptoKey);\n\n\treturn jwk;\n};\n","export { createDpopFetch } from './fetch.js';\nexport { generateDpopKey } from './generate-key.js';\nexport { createDpopProofSigner } from './proof.js';\nexport type { DpopNonceCache, DpopPrivateJwk } from './types.js';\nexport {\n\tDpopVerifyError,\n\tverifyDpopProof,\n\ttype DpopClaims,\n\ttype DpopVerifyOptions,\n\ttype DpopVerifyResult,\n} from './verify.js';\n","import { sha256Base64Url } from '../hash/sha256.js';\n\nimport { createDpopProofSigner } from './proof.js';\nimport type { DpopPrivateJwk, DpopNonceCache } from './types.js';\n\nexport interface CreateDpopFetchOptions {\n\t/** DPoP private key (JWK with `alg` set) */\n\tkey: DpopPrivateJwk;\n\t/** nonce store, keyed by origin */\n\tnonces: DpopNonceCache;\n\t/** server's supported DPoP signing algorithms */\n\tsupportedAlgs?: readonly string[];\n\t/**\n\t * is the target an authorization server (true) or resource server (false)?\n\t * affects how `use_dpop_nonce` errors are detected.\n\t */\n\tisAuthServer?: boolean;\n\t/** custom fetch implementation */\n\tfetch?: typeof globalThis.fetch;\n}\n\n/**\n * creates a fetch wrapper that adds DPoP proofs to requests.\n *\n * @param options DPoP configuration\n * @returns fetch function with DPoP support\n */\nexport const createDpopFetch = (options: CreateDpopFetchOptions): typeof globalThis.fetch => {\n\tconst { key, nonces, supportedAlgs, isAuthServer, fetch = globalThis.fetch } = options;\n\n\tnegotiateAlg(key, supportedAlgs);\n\tconst sign = createDpopProofSigner(key);\n\n\treturn async (input, init) => {\n\t\tconst request: Request = init == null && input instanceof Request ? input : new Request(input, init);\n\n\t\tconst authHeader = request.headers.get('Authorization');\n\t\tconst ath = authHeader?.startsWith('DPoP ') ? await sha256Base64Url(authHeader.slice(5)) : undefined;\n\n\t\tconst { origin } = new URL(request.url);\n\t\tconst htm = request.method;\n\t\tconst htu = buildHtu(request.url);\n\n\t\tlet initNonce: string | undefined;\n\t\ttry {\n\t\t\tinitNonce = await nonces.get(origin);\n\t\t} catch {\n\t\t\t// ignore get errors\n\t\t}\n\n\t\tconst initProof = await sign(htm, htu, initNonce, ath);\n\t\trequest.headers.set('DPoP', initProof);\n\n\t\tconst initResponse = await fetch(request);\n\n\t\tconst nextNonce = initResponse.headers.get('DPoP-Nonce');\n\t\tif (!nextNonce || nextNonce === initNonce) {\n\t\t\treturn initResponse;\n\t\t}\n\n\t\ttry {\n\t\t\tawait nonces.set(origin, nextNonce);\n\t\t} catch {\n\t\t\t// ignore set errors\n\t\t}\n\n\t\tconst shouldRetry = await isUseDpopNonceError(initResponse, isAuthServer);\n\t\tif (!shouldRetry) {\n\t\t\treturn initResponse;\n\t\t}\n\n\t\tif (input === request || init?.body instanceof ReadableStream) {\n\t\t\treturn initResponse;\n\t\t}\n\n\t\tawait initResponse.body?.cancel();\n\n\t\tconst nextProof = await sign(htm, htu, nextNonce, ath);\n\t\tconst nextRequest = new Request(input, init);\n\t\tnextRequest.headers.set('DPoP', nextProof);\n\n\t\tconst retryResponse = await fetch(nextRequest);\n\n\t\tconst retryNonce = retryResponse.headers.get('DPoP-Nonce');\n\t\tif (retryNonce && retryNonce !== nextNonce) {\n\t\t\ttry {\n\t\t\t\tawait nonces.set(origin, retryNonce);\n\t\t\t} catch {\n\t\t\t\t// ignore set errors\n\t\t\t}\n\t\t}\n\n\t\treturn retryResponse;\n\t};\n};\n\nconst buildHtu = (url: string): string => {\n\tconst fragmentIdx = url.indexOf('#');\n\tconst queryIdx = url.indexOf('?');\n\tconst end = fragmentIdx === -1 ? queryIdx : queryIdx === -1 ? fragmentIdx : Math.min(fragmentIdx, queryIdx);\n\n\treturn end === -1 ? url : url.slice(0, end);\n};\n\nconst negotiateAlg = (key: DpopPrivateJwk, supportedAlgs?: readonly string[]): string => {\n\tconst keyAlg = key.alg;\n\n\tif (supportedAlgs?.length) {\n\t\tif (supportedAlgs.includes(keyAlg)) {\n\t\t\treturn keyAlg;\n\t\t}\n\t\tthrow new Error(`DPoP key algorithm ${keyAlg} not supported by server: ${supportedAlgs.join(', ')}`);\n\t}\n\n\treturn keyAlg;\n};\n\nconst isUseDpopNonceError = async (response: Response, isAuthServer?: boolean): Promise<boolean> => {\n\tif (isAuthServer === undefined || isAuthServer === false) {\n\t\tif (response.status === 401) {\n\t\t\tconst wwwAuth = response.headers.get('WWW-Authenticate');\n\t\t\tif (wwwAuth?.startsWith('DPoP')) {\n\t\t\t\treturn wwwAuth.includes('error=\"use_dpop_nonce\"');\n\t\t\t}\n\t\t}\n\t}\n\n\tif (isAuthServer === undefined || isAuthServer === true) {\n\t\tif (response.status === 400) {\n\t\t\ttry {\n\t\t\t\tconst json = await response.clone().json();\n\t\t\t\treturn typeof json === 'object' && json?.error === 'use_dpop_nonce';\n\t\t\t} catch {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false;\n};\n","import { toBase64Url } from '@atcute/multibase';\nimport { encodeUtf8, toSha256 } from '@atcute/uint8array';\n\n/**\n * computes sha-256 hash and returns base64url-encoded result.\n *\n * @param input string to hash\n * @returns base64url-encoded sha-256 hash\n */\nexport const sha256Base64Url = async (input: string): Promise<string> => {\n\tconst bytes = encodeUtf8(input);\n\tconst digest = await toSha256(bytes);\n\treturn toBase64Url(digest);\n};\n","import { nanoid } from 'nanoid';\n\nimport type { CachedKeyMaterial } from '../internal/key-cache.js';\nimport { getCachedKeyMaterial } from '../internal/key-cache.js';\nimport { signJwt } from '../jwt/index.js';\n\nimport type { DpopPrivateJwk } from './types.js';\n\n/**\n * creates a DPoP proof signer.\n *\n * @param jwk DPoP private JWK (with `alg` set)\n * @returns signing function for DPoP proofs\n */\nexport const createDpopProofSigner = (\n\tjwk: DpopPrivateJwk,\n): ((htm: string, htu: string, nonce?: string, ath?: string) => Promise<string>) => {\n\tconst alg = jwk.alg;\n\n\t// lazily resolve key material on first sign\n\tlet materialPromise: Promise<CachedKeyMaterial> | undefined;\n\n\treturn async (htm: string, htu: string, nonce?: string, ath?: string) => {\n\t\tmaterialPromise ||= getCachedKeyMaterial(jwk);\n\t\tconst { cryptoKey, publicJwk } = await materialPromise;\n\n\t\tconst now = Math.floor(Date.now() / 1_000);\n\n\t\treturn signJwt({\n\t\t\theader: {\n\t\t\t\ttyp: 'dpop+jwt',\n\t\t\t\tjwk: publicJwk,\n\t\t\t},\n\t\t\tpayload: {\n\t\t\t\thtm,\n\t\t\t\thtu,\n\t\t\t\tiat: now,\n\t\t\t\tjti: nanoid(24),\n\t\t\t\tnonce,\n\t\t\t\tath,\n\t\t\t},\n\t\t\tkey: cryptoKey,\n\t\t\talg,\n\t\t});\n\t};\n};\n","import { getGenerateAlgorithm } from '../internal/crypto.js';\nimport { exportPrivateJwkFromKey, isSigningAlgorithm } from '../internal/jwk.js';\nimport { setCachedKeyMaterial } from '../internal/key-cache.js';\nimport type { SigningAlgorithm } from '../jwk/types.js';\n\nimport type { DpopPrivateJwk } from './types.js';\n\n/**\n * preferred algorithm order for DPoP key generation.\n */\nconst PREFERRED_ALGORITHMS: readonly SigningAlgorithm[] = [\n\t'ES256',\n\t'ES384',\n\t'ES512',\n\t'PS256',\n\t'PS384',\n\t'PS512',\n\t'RS256',\n\t'RS384',\n\t'RS512',\n];\n\nconst sortAlgorithms = (algs: readonly SigningAlgorithm[]): SigningAlgorithm[] => {\n\treturn [...algs].sort((a, b) => {\n\t\tconst aIdx = PREFERRED_ALGORITHMS.indexOf(a);\n\t\tconst bIdx = PREFERRED_ALGORITHMS.indexOf(b);\n\n\t\tif (aIdx === -1 && bIdx === -1) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (aIdx === -1) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (bIdx === -1) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn aIdx - bIdx;\n\t});\n};\n\n/**\n * generates a new DPoP private JWK with `alg` set.\n *\n * @param supportedAlgs server supported algorithms (optional)\n * @returns private JWK (with cache pre-warmed)\n */\nexport const generateDpopKey = async (supportedAlgs?: readonly string[]): Promise<DpopPrivateJwk> => {\n\tconst normalized = supportedAlgs?.filter(isSigningAlgorithm) ?? [];\n\tif (supportedAlgs?.length && normalized.length === 0) {\n\t\tthrow new Error(`no supported algorithms provided`);\n\t}\n\n\tconst algs: SigningAlgorithm[] = normalized.length ? sortAlgorithms(normalized) : ['ES256'];\n\tconst errors: unknown[] = [];\n\n\tfor (const alg of algs) {\n\t\ttry {\n\t\t\tconst pair = await crypto.subtle.generateKey(getGenerateAlgorithm(alg), true, ['sign', 'verify']);\n\t\t\tconst jwk = (await exportPrivateJwkFromKey(pair.privateKey, alg)) as DpopPrivateJwk;\n\n\t\t\t// pre-populate cache so we don't re-import\n\t\t\tsetCachedKeyMaterial(jwk, pair.privateKey);\n\n\t\t\treturn jwk;\n\t\t} catch (err) {\n\t\t\terrors.push(err);\n\t\t}\n\t}\n\n\tthrow new AggregateError(errors, `failed to generate DPoP key for any of: ${algs.join(', ')}`);\n};\n","import { fromBase64Url } from '@atcute/multibase';\nimport { decodeUtf8From } from '@atcute/uint8array';\n\nimport * as v from '@badrap/valita';\n\nimport { getImportAlgorithm } from '../internal/crypto.js';\nimport { computeJktFromJwk } from '../jwk/compute-jkt.js';\nimport type { PublicJwk, SigningAlgorithm } from '../jwk/types.js';\nimport { verifyJwt } from '../jwt/index.js';\n\nimport type { Awaitable } from './types.js';\n\nconst dpopJwkSchema = v.union(\n\tv.object({\n\t\tkty: v.literal('EC'),\n\t\tcrv: v.union(v.literal('P-256'), v.literal('P-384'), v.literal('P-521')),\n\t\tx: v.string(),\n\t\ty: v.string(),\n\t}),\n\tv.object({\n\t\tkty: v.literal('RSA'),\n\t\te: v.string(),\n\t\tn: v.string(),\n\t}),\n);\n\nconst dpopHeaderSchema = v.object({\n\ttyp: v.literal('dpop+jwt'),\n\talg: v.string().assert((alg) => alg !== 'none', 'alg must not be \"none\"'),\n\tjwk: dpopJwkSchema,\n});\n\nconst dpopPayloadSchema = v.object({\n\thtm: v.string(),\n\thtu: v.string(),\n\tiat: v.number(),\n\tjti: v.string(),\n\tnonce: v.string().optional(),\n});\n\nexport type DpopClaims = v.Infer<typeof dpopPayloadSchema>;\ntype DpopJwk = v.Infer<typeof dpopJwkSchema>;\n\nexport interface DpopVerifyResult {\n\tclaims: DpopClaims;\n\tjkt: string;\n\tjwk: PublicJwk;\n}\n\nexport interface DpopVerifyOptions {\n\tmethod: string;\n\turl: string;\n\tnonce?: { check(nonce: string): Awaitable<boolean> };\n\tmaxClockSkew?: number;\n}\n\n/**\n * error thrown when dpop verification fails.\n */\nexport class DpopVerifyError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic code: 'missing' | 'invalid' | 'expired' | 'nonce_required',\n\t) {\n\t\tsuper(message);\n\t\tthis.name = 'DpopVerifyError';\n\t}\n}\n\n/**\n * verifies a dpop proof from a request header.\n *\n * @param dpopHeader dpop header value\n * @param options verification options\n * @returns verification result with claims and jwk thumbprint\n * @throws {DpopVerifyError} if verification fails\n */\nexport const verifyDpopProof = async (\n\tdpopHeader: string | null | undefined,\n\toptions: DpopVerifyOptions,\n): Promise<DpopVerifyResult> => {\n\tif (!dpopHeader) {\n\t\tthrow new DpopVerifyError(`missing dpop header`, 'missing');\n\t}\n\n\tconst { method, url, nonce: dpopNonce, maxClockSkew = 60 } = options;\n\tconst parts = dpopHeader.split('.');\n\tif (parts.length !== 3) {\n\t\tthrow new DpopVerifyError(`invalid dpop proof format`, 'invalid');\n\t}\n\n\tlet header: v.Infer<typeof dpopHeaderSchema>;\n\ttry {\n\t\theader = dpopHeaderSchema.parse(decodeSegment(parts[0]), { mode: 'passthrough' });\n\t} catch {\n\t\tthrow new DpopVerifyError(`invalid dpop header`, 'invalid');\n\t}\n\n\tconst { jwk, alg } = header;\n\tif (!isSigningAlgorithm(alg)) {\n\t\tthrow new DpopVerifyError(`unsupported dpop alg`, 'invalid');\n\t}\n\n\tlet payload: DpopClaims;\n\ttry {\n\t\tconst key = await importPublicKey(jwk, alg);\n\t\tconst raw = await verifyJwt(dpopHeader, { key, alg, typ: 'dpop+jwt' });\n\t\tpayload = dpopPayloadSchema.parse(raw, { mode: 'passthrough' });\n\t} catch (err) {\n\t\tif (err instanceof v.ValitaError) {\n\t\t\tthrow new DpopVerifyError(`invalid dpop payload`, 'invalid');\n\t\t}\n\t\tthrow new DpopVerifyError(`dpop signature verification failed`, 'invalid');\n\t}\n\n\tif (payload.htm !== method) {\n\t\tthrow new DpopVerifyError(`dpop htm mismatch: expected ${method}, got ${payload.htm}`, 'invalid');\n\t}\n\tif (payload.htu !== url) {\n\t\tthrow new DpopVerifyError(`dpop htu mismatch: expected ${url}, got ${payload.htu}`, 'invalid');\n\t}\n\n\tconst now = Math.floor(Date.now() / 1000);\n\tif (payload.iat > now + maxClockSkew) {\n\t\tthrow new DpopVerifyError(`dpop proof issued in the future`, 'invalid');\n\t}\n\tif (payload.iat < now - maxClockSkew) {\n\t\tthrow new DpopVerifyError(`dpop proof expired`, 'expired');\n\t}\n\n\tif (dpopNonce) {\n\t\tif (!payload.nonce || !(await dpopNonce.check(payload.nonce))) {\n\t\t\tthrow new DpopVerifyError(`invalid or missing dpop nonce`, 'nonce_required');\n\t\t}\n\t}\n\n\tconst jkt = await computeJktFromJwk(jwk as PublicJwk);\n\n\treturn { claims: payload, jwk: jwk as DpopJwk, jkt };\n};\n\nconst importPublicKey = async (jwk: PublicJwk, alg: SigningAlgorithm): Promise<CryptoKey> => {\n\tconst algorithm = getImportAlgorithm(alg, jwk.kty === 'EC' ? jwk.crv : undefined);\n\tconst key = await crypto.subtle.importKey('jwk', jwk, algorithm, true, ['verify']);\n\tif (!(key instanceof CryptoKey)) {\n\t\tthrow new Error(`expected asymmetric key, got symmetric`);\n\t}\n\n\treturn key;\n};\n\nconst isSigningAlgorithm = (alg: string): alg is SigningAlgorithm => {\n\treturn (\n\t\talg === 'ES256' ||\n\t\talg === 'ES384' ||\n\t\talg === 'ES512' ||\n\t\talg === 'PS256' ||\n\t\talg === 'PS384' ||\n\t\talg === 'PS512' ||\n\t\talg === 'RS256' ||\n\t\talg === 'RS384' ||\n\t\talg === 'RS512'\n\t);\n};\n\nconst decodeSegment = (segment: string): unknown => {\n\tconst bytes = fromBase64Url(segment);\n\treturn JSON.parse(decodeUtf8From(bytes));\n};\n","export * from \"./index.js\";\n","import { toBase64Url } from '@atcute/multibase';\nimport { encodeUtf8, toSha256 } from '@atcute/uint8array';\n\nimport type { PublicJwk } from './types.js';\n\n/**\n * computes the jwk thumbprint (rfc 7638) for a public key.\n *\n * @param jwk public jwk\n * @returns base64url-encoded sha-256 thumbprint\n */\nexport const computeJktFromJwk = async (jwk: PublicJwk): Promise<string> => {\n\tlet canonical: Record<string, string>;\n\n\tif (jwk.kty === 'EC') {\n\t\tconst { crv, x, y } = jwk;\n\t\tcanonical = { crv, kty: jwk.kty, x, y };\n\t} else {\n\t\tconst { e, n } = jwk;\n\t\tcanonical = { e, kty: jwk.kty, n };\n\t}\n\n\tconst serialized = JSON.stringify(canonical);\n\tconst hash = await toSha256(encodeUtf8(serialized));\n\n\treturn toBase64Url(hash);\n};\n","export { generatePkce } from './pkce.js';\nexport { sha256Base64Url } from './sha256.js';\n","import { nanoid } from 'nanoid';\n\nimport { sha256Base64Url } from './sha256.js';\n\n/**\n * generates pkce verifier and challenge (s256).\n *\n * @param length verifier length (43-128 per rfc 7636)\n * @returns pkce values\n */\nexport const generatePkce = async (\n\tlength = 64,\n): Promise<{ verifier: string; challenge: string; method: 'S256' }> => {\n\tconst verifier = nanoid(length);\n\tconst challenge = await sha256Base64Url(verifier);\n\n\treturn { verifier, challenge, method: 'S256' };\n};\n","export { computeJktFromJwk } from './compute-jkt.js';\nexport { derivePublicJwk } from '../internal/jwk.js';\nexport { exportPkcs8PrivateKey } from './keys.js';\nexport type {\n\tEcPrivateJwk,\n\tEcPublicJwk,\n\tPrivateJwk,\n\tPublicJwk,\n\tRsaPrivateJwk,\n\tRsaPublicJwk,\n\tSigningAlgorithm,\n} from './types.js';\n","import { exportPkcs8PrivateKey as exportPkcs8 } from '../internal/jwk.js';\nimport { getCachedKeyMaterial } from '../internal/key-cache.js';\n\nimport type { PrivateJwk } from './types.js';\n\n/**\n * exports a private JWK to PKCS8 PEM format.\n *\n * @param jwk private JWK to export\n * @returns PKCS8 PEM string\n */\nexport const exportPkcs8PrivateKey = async (jwk: PrivateJwk): Promise<string> => {\n\tconst { cryptoKey } = await getCachedKeyMaterial(jwk);\n\treturn exportPkcs8(cryptoKey);\n};\n","import type { ResolvedActor } from '@atcute/identity-resolver';\nimport type { ActorIdentifier } from '@atcute/lexicons';\nimport type { OAuthAuthorizationServerMetadata, OAuthProtectedResourceMetadata } from '@atcute/oauth-types';\n\nimport { identityResolver } from './environment.js';\nimport { ResolverError } from './errors.js';\nimport { extractContentType } from './utils/response.js';\nimport { isValidUrl } from './utils/strings.js';\n\nexport const resolveFromIdentifier = async (\n\tident: ActorIdentifier,\n): Promise<{ identity: ResolvedActor; metadata: OAuthAuthorizationServerMetadata }> => {\n\tconst identity = await identityResolver.resolve(ident);\n\n\treturn {\n\t\tidentity: identity,\n\t\tmetadata: await getMetadataFromResourceServer(identity.pds),\n\t};\n};\n\nexport const resolveFromService = async (\n\thost: string,\n): Promise<{ metadata: OAuthAuthorizationServerMetadata }> => {\n\ttry {\n\t\tconst metadata = await getMetadataFromResourceServer(host);\n\t\treturn { metadata };\n\t} catch (err) {\n\t\tif (err instanceof ResolverError) {\n\t\t\ttry {\n\t\t\t\tconst metadata = await getOAuthAuthorizationServerMetadata(host);\n\t\t\t\treturn { metadata };\n\t\t\t} catch {}\n\t\t}\n\n\t\tthrow err;\n\t}\n};\n\nconst getOAuthProtectedResourceMetadata = async (host: string): Promise<OAuthProtectedResourceMetadata> => {\n\tconst url = new URL(`/.well-known/oauth-protected-resource`, host);\n\tconst response = await fetch(url.href, {\n\t\tredirect: 'manual',\n\t\theaders: {\n\t\t\taccept: 'application/json',\n\t\t},\n\t});\n\n\tif (response.status !== 200 || extractContentType(response.headers) !== 'application/json') {\n\t\tthrow new ResolverError(`unexpected response`);\n\t}\n\n\tconst metadata = (await response.json()) as OAuthProtectedResourceMetadata;\n\tif (metadata.resource !== url.origin) {\n\t\tthrow new ResolverError(`unexpected issuer`);\n\t}\n\n\treturn metadata;\n};\n\nconst getOAuthAuthorizationServerMetadata = async (\n\thost: string,\n): Promise<OAuthAuthorizationServerMetadata> => {\n\tconst url = new URL(`/.well-known/oauth-authorization-server`, host);\n\tconst response = await fetch(url.href, {\n\t\tredirect: 'manual',\n\t\theaders: {\n\t\t\taccept: 'application/json',\n\t\t},\n\t});\n\n\tif (response.status !== 200 || extractContentType(response.headers) !== 'application/json') {\n\t\tthrow new ResolverError(`unexpected response`);\n\t}\n\n\tconst metadata = (await response.json()) as OAuthAuthorizationServerMetadata;\n\tif (metadata.issuer !== url.origin) {\n\t\tthrow new ResolverError(`unexpected issuer`);\n\t}\n\tif (!isValidUrl(metadata.authorization_endpoint)) {\n\t\tthrow new ResolverError(`authorization server provided incorrect authorization endpoint`);\n\t}\n\tif (!metadata.client_id_metadata_document_supported) {\n\t\tthrow new ResolverError(`authorization server does not support 'client_id_metadata_document'`);\n\t}\n\tif (!metadata.pushed_authorization_request_endpoint) {\n\t\tthrow new ResolverError(`authorization server does not support 'pushed_authorization request'`);\n\t}\n\tif (metadata.response_types_supported) {\n\t\tif (!metadata.response_types_supported.includes('code')) {\n\t\t\tthrow new ResolverError(`authorization server does not support 'code' response type`);\n\t\t}\n\t}\n\n\treturn metadata;\n};\n\nconst getMetadataFromResourceServer = async (input: string) => {\n\tconst rs_metadata = await getOAuthProtectedResourceMetadata(input);\n\n\tif (rs_metadata.authorization_servers?.length !== 1) {\n\t\tthrow new ResolverError(`expected exactly one authorization server in the listing`);\n\t}\n\n\tconst issuer = rs_metadata.authorization_servers[0];\n\n\tconst as_metadata = await getOAuthAuthorizationServerMetadata(issuer);\n\n\tif (as_metadata.protected_resources) {\n\t\tif (!as_metadata.protected_resources.includes(rs_metadata.resource)) {\n\t\t\tthrow new ResolverError(`server is not in authorization server's jurisdiction`);\n\t\t}\n\t}\n\n\treturn as_metadata;\n};\n","export const extractContentType = (headers: Headers): string | undefined => {\n\treturn headers.get('content-type')?.split(';')[0];\n};\n","const isUrlParseSupported = 'parse' in URL;\n\nexport const isValidUrl = (urlString: string): boolean => {\n\tlet url: URL | null = null;\n\tif (isUrlParseSupported) {\n\t\turl = URL.parse(urlString);\n\t} else {\n\t\ttry {\n\t\t\turl = new URL(urlString);\n\t\t} catch {}\n\t}\n\n\tif (url !== null) {\n\t\treturn url.protocol === 'https:' || url.protocol === 'http:';\n\t}\n\n\treturn false;\n};\n","import type { Did } from '@atcute/lexicons';\nimport { createDpopProofSigner, type DpopPrivateJwk } from '@atcute/oauth-crypto';\nimport type { AtprotoOAuthTokenResponse, OAuthParResponse } from '@atcute/oauth-types';\n\nimport { createDPoPFetch } from '../dpop.js';\nimport { CLIENT_ID, fetchClientAssertion, REDIRECT_URI } from '../environment.js';\nimport { FetchResponseError, OAuthResponseError, TokenRefreshError } from '../errors.js';\nimport { resolveFromIdentifier } from '../resolvers.js';\nimport type { PersistedAuthorizationServerMetadata } from '../types/server.js';\nimport type { ExchangeInfo, TokenInfo } from '../types/token.js';\nimport { pick } from '../utils/misc.js';\nimport { extractContentType } from '../utils/response.js';\n\nexport class OAuthServerAgent {\n\t#fetch: typeof fetch;\n\t#metadata: PersistedAuthorizationServerMetadata;\n\t#dpopKey: DpopPrivateJwk;\n\n\tconstructor(metadata: PersistedAuthorizationServerMetadata, dpopKey: DpopPrivateJwk) {\n\t\tthis.#metadata = metadata;\n\t\tthis.#dpopKey = dpopKey;\n\t\tthis.#fetch = createDPoPFetch(dpopKey, true);\n\t}\n\n\tasync request(\n\t\tendpoint: 'pushed_authorization_request',\n\t\tpayload: Record<string, unknown>,\n\t): Promise<OAuthParResponse>;\n\tasync request(endpoint: 'token', payload: Record<string, unknown>): Promise<AtprotoOAuthTokenResponse>;\n\tasync request(endpoint: 'revocation', payload: Record<string, unknown>): Promise<any>;\n\tasync request(endpoint: 'introspection', payload: Record<string, unknown>): Promise<any>;\n\tasync request(endpoint: string, payload: Record<string, unknown>): Promise<any> {\n\t\tconst url: string | undefined = (this.#metadata as any)[`${endpoint}_endpoint`];\n\t\tif (!url) {\n\t\t\tthrow new Error(`no endpoint for ${endpoint}`);\n\t\t}\n\n\t\tif (\n\t\t\t(endpoint === 'token' || endpoint === 'pushed_authorization_request') &&\n\t\t\tfetchClientAssertion !== undefined\n\t\t) {\n\t\t\tconst sign = createDpopProofSigner(this.#dpopKey);\n\n\t\t\tconst assertion = await fetchClientAssertion({\n\t\t\t\taud: this.#metadata.issuer,\n\t\t\t\tcreateDpopProof: async (url, nonce) => {\n\t\t\t\t\treturn await sign('POST', url, nonce, undefined);\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tpayload = { ...payload, ...assertion };\n\t\t}\n\n\t\tconst response = await this.#fetch(url, {\n\t\t\tmethod: 'post',\n\t\t\theaders: { 'content-type': 'application/json' },\n\t\t\tbody: JSON.stringify({ ...payload, client_id: CLIENT_ID }),\n\t\t});\n\n\t\tif (extractContentType(response.headers) !== 'application/json') {\n\t\t\tthrow new FetchResponseError(response, 2, `unexpected content-type`);\n\t\t}\n\n\t\tconst json = await response.json();\n\n\t\tif (response.ok) {\n\t\t\treturn json;\n\t\t} else {\n\t\t\tthrow new OAuthResponseError(response, json);\n\t\t}\n\t}\n\n\tasync revoke(token: string): Promise<void> {\n\t\ttry {\n\t\t\tawait this.request('revocation', { token: token });\n\t\t} catch {}\n\t}\n\n\tasync exchangeCode(code: string, verifier?: string): Promise<{ info: ExchangeInfo; token: TokenInfo }> {\n\t\tconst response = await this.request('token', {\n\t\t\tgrant_type: 'authorization_code',\n\t\t\tredirect_uri: REDIRECT_URI,\n\t\t\tcode: code,\n\t\t\tcode_verifier: verifier,\n\t\t});\n\n\t\ttry {\n\t\t\treturn await this.#processExchangeResponse(response);\n\t\t} catch (err) {\n\t\t\tawait this.revoke(response.access_token);\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tasync refresh({ sub, token }: { sub: Did; token: TokenInfo }): Promise<TokenInfo> {\n\t\tif (!token.refresh) {\n\t\t\tthrow new TokenRefreshError(sub, 'no refresh token available');\n\t\t}\n\n\t\tconst response = await this.request('token', {\n\t\t\tgrant_type: 'refresh_token',\n\t\t\trefresh_token: token.refresh,\n\t\t});\n\n\t\ttry {\n\t\t\tif (sub !== response.sub) {\n\t\t\t\tthrow new TokenRefreshError(sub, `sub mismatch in token response; got ${response.sub}`);\n\t\t\t}\n\n\t\t\treturn this.#processTokenResponse(response);\n\t\t} catch (err) {\n\t\t\tawait this.revoke(response.access_token);\n\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\t#processTokenResponse(res: AtprotoOAuthTokenResponse): TokenInfo {\n\t\tif (!res.sub) {\n\t\t\tthrow new TypeError(`missing sub field in token response`);\n\t\t}\n\t\tif (!res.scope) {\n\t\t\tthrow new TypeError(`missing scope field in token response`);\n\t\t}\n\t\tif (res.token_type !== 'DPoP') {\n\t\t\tthrow new TypeError(`token response returned a non-dpop token`);\n\t\t}\n\n\t\treturn {\n\t\t\tscope: res.scope,\n\t\t\trefresh: res.refresh_token,\n\t\t\taccess: res.access_token,\n\t\t\ttype: res.token_type,\n\t\t\texpires_at: typeof res.expires_in === 'number' ? Date.now() + res.expires_in * 1_000 : undefined,\n\t\t};\n\t}\n\n\tasync #processExchangeResponse(\n\t\tres: AtprotoOAuthTokenResponse,\n\t): Promise<{ info: ExchangeInfo; token: TokenInfo }> {\n\t\tconst sub = res.sub;\n\t\tif (!sub) {\n\t\t\tthrow new TypeError(`missing sub field in token response`);\n\t\t}\n\n\t\tconst token = this.#processTokenResponse(res);\n\t\tconst resolved = await resolveFromIdentifier(sub as Did);\n\n\t\tif (resolved.metadata.issuer !== this.#metadata.issuer) {\n\t\t\tthrow new TypeError(`issuer mismatch; got ${resolved.metadata.issuer}`);\n\t\t}\n\n\t\treturn {\n\t\t\ttoken: token,\n\t\t\tinfo: {\n\t\t\t\tsub: sub as Did,\n\t\t\t\taud: resolved.identity.pds,\n\t\t\t\tserver: pick(resolved.metadata, [\n\t\t\t\t\t'issuer',\n\t\t\t\t\t'authorization_endpoint',\n\t\t\t\t\t'introspection_endpoint',\n\t\t\t\t\t'pushed_authorization_request_endpoint',\n\t\t\t\t\t'revocation_endpoint',\n\t\t\t\t\t'token_endpoint',\n\t\t\t\t]),\n\t\t\t},\n\t\t};\n\t}\n}\n","import { createDpopProofSigner, sha256Base64Url, type DpopPrivateJwk } from '@atcute/oauth-crypto';\n\nimport { database } from './environment.js';\nimport { extractContentType } from './utils/response.js';\n\nexport const createDPoPFetch = (dpopKey: DpopPrivateJwk, isAuthServer?: boolean): typeof fetch => {\n\tconst nonces = database.dpopNonces;\n\tconst pending = database.inflightDpop;\n\n\tconst sign = createDpopProofSigner(dpopKey);\n\n\treturn async (input, init) => {\n\t\tconst request = new Request(input, init);\n\n\t\tconst authorizationHeader = request.headers.get('authorization');\n\t\tconst ath = authorizationHeader?.startsWith('DPoP ')\n\t\t\t? await sha256Base64Url(authorizationHeader.slice(5))\n\t\t\t: undefined;\n\n\t\tconst { method, url } = request;\n\t\tconst { origin, pathname } = new URL(url);\n\n\t\tconst htu = origin + pathname;\n\n\t\tlet deferred = pending.get(origin);\n\t\tif (deferred) {\n\t\t\tawait deferred.promise;\n\t\t\tdeferred = undefined;\n\t\t}\n\n\t\tlet initNonce: string | undefined;\n\t\tlet expiredOrMissing = false;\n\t\ttry {\n\t\t\tconst [nonce, lapsed] = nonces.getWithLapsed(origin);\n\n\t\t\tinitNonce = nonce;\n\t\t\texpiredOrMissing = lapsed > 3 * 60 * 1_000;\n\t\t} catch {\n\t\t\t// ignore read errors\n\t\t}\n\n\t\tif (expiredOrMissing) {\n\t\t\tpending.set(origin, (deferred = Promise.withResolvers()));\n\t\t}\n\n\t\tlet nextNonce: string | null;\n\t\ttry {\n\t\t\tconst initProof = await sign(method, htu, initNonce, ath);\n\t\t\trequest.headers.set('dpop', initProof);\n\n\t\t\tconst initResponse = await fetch(request);\n\n\t\t\tnextNonce = initResponse.headers.get('dpop-nonce');\n\t\t\tif (nextNonce === null || nextNonce === initNonce) {\n\t\t\t\treturn initResponse;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tnonces.set(origin, nextNonce);\n\t\t\t} catch {\n\t\t\t\t// ignore write errors\n\t\t\t}\n\n\t\t\tconst shouldRetry = await isUseDpopNonceError(initResponse, isAuthServer);\n\t\t\tif (!shouldRetry) {\n\t\t\t\treturn initResponse;\n\t\t\t}\n\n\t\t\tif (input === request || init?.body instanceof ReadableStream) {\n\t\t\t\treturn initResponse;\n\t\t\t}\n\t\t} finally {\n\t\t\tif (deferred) {\n\t\t\t\tpending.delete(origin);\n\t\t\t\tdeferred.resolve();\n\t\t\t}\n\t\t}\n\n\t\t{\n\t\t\tconst nextProof = await sign(method, htu, nextNonce, ath);\n\t\t\tconst nextRequest = new Request(input, init);\n\t\t\tnextRequest.headers.set('dpop', nextProof);\n\n\t\t\tconst retryResponse = await fetch(nextRequest);\n\n\t\t\tconst retryNonce = retryResponse.headers.get('dpop-nonce');\n\t\t\tif (retryNonce !== null && retryNonce !== nextNonce) {\n\t\t\t\ttry {\n\t\t\t\t\tnonces.set(origin, retryNonce);\n\t\t\t\t} catch {\n\t\t\t\t\t// ignore write errors\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn retryResponse;\n\t\t}\n\t};\n};\n\nconst isUseDpopNonceError = async (response: Response, isAuthServer?: boolean): Promise<boolean> => {\n\tif (isAuthServer === undefined || isAuthServer === false) {\n\t\tif (response.status === 401) {\n\t\t\tconst wwwAuth = response.headers.get('www-authenticate');\n\t\t\tif (wwwAuth?.startsWith('DPoP')) {\n\t\t\t\treturn wwwAuth.includes('error=\"use_dpop_nonce\"');\n\t\t\t}\n\t\t}\n\t}\n\n\tif (isAuthServer === undefined || isAuthServer === true) {\n\t\tif (response.status === 400 && extractContentType(response.headers) === 'application/json') {\n\t\t\ttry {\n\t\t\t\tconst json = await response.clone().json();\n\t\t\t\treturn typeof json === 'object' && json?.['error'] === 'use_dpop_nonce';\n\t\t\t} catch {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false;\n};\n","type UnwrapArray<T> = T extends (infer V)[] ? V : never;\n\nexport const pick = <T, K extends (keyof T)[]>(obj: T, keys: K): Pick<T, UnwrapArray<K>> => {\n\tconst cloned = {};\n\n\tfor (let idx = 0, len = keys.length; idx < len; idx++) {\n\t\tconst key = keys[idx];\n\n\t\t// @ts-expect-error\n\t\tcloned[key] = obj[key];\n\t}\n\n\treturn cloned as Pick<T, UnwrapArray<K>>;\n};\n","import type { Did } from '@atcute/lexicons';\n\nimport { database } from '../environment.js';\nimport { OAuthResponseError, TokenRefreshError } from '../errors.js';\nimport type { RawSession, Session } from '../types/token.js';\nimport { isLegacyDpopKey, migrateLegacyDpopKey } from '../utils/dpop-key.js';\nimport { locks } from '../utils/runtime.js';\n\nimport { OAuthServerAgent } from './server-agent.js';\n\nexport interface SessionGetOptions {\n\tsignal?: AbortSignal;\n\tnoCache?: boolean;\n\tallowStale?: boolean;\n}\n\ntype PendingItem<V> = Promise<{ value: V; isFresh: boolean }>;\nconst pending = new Map<Did, Promise<PendingItem<Session>>>();\n\nexport const getSession = async (sub: Did, options?: SessionGetOptions): Promise<Session> => {\n\toptions?.signal?.throwIfAborted();\n\n\tlet allowStored = isTokenUsable;\n\tif (options?.noCache) {\n\t\tallowStored = returnFalse;\n\t} else if (options?.allowStale) {\n\t\tallowStored = returnTrue;\n\t}\n\n\t// As long as concurrent requests are made for the same key, only one\n\t// request will be made to the cache & getter function at a time. This works\n\t// because there is no async operation between the while() loop and the\n\t// pending.set() call. Because of the \"single threaded\" nature of\n\t// JavaScript, the pending item will be set before the next iteration of the\n\t// while loop.\n\tlet previousExecutionFlow: Promise<PendingItem<Session>> | undefined;\n\twhile ((previousExecutionFlow = pending.get(sub))) {\n\t\ttry {\n\t\t\tconst { isFresh, value } = await previousExecutionFlow;\n\n\t\t\tif (isFresh || allowStored(value)) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Ignore errors from previous execution flows (they will have been\n\t\t\t// propagated by that flow).\n\t\t}\n\n\t\toptions?.signal?.throwIfAborted();\n\t}\n\n\tconst run = async (): Promise<PendingItem<Session>> => {\n\t\tconst storedSession = await migrateSessionIfNeeded(sub, database.sessions.get(sub));\n\n\t\tif (storedSession && allowStored(storedSession)) {\n\t\t\t// Use the stored value as return value for the current execution\n\t\t\t// flow. Notify other concurrent execution flows (that should be\n\t\t\t// \"stuck\" in the loop before until this promise resolves) that we got\n\t\t\t// a value, but that it came from the store (isFresh = false).\n\t\t\treturn { isFresh: false, value: storedSession };\n\t\t}\n\n\t\tconst newSession = await refreshToken(sub, storedSession);\n\n\t\tawait storeSession(sub, newSession);\n\t\treturn { isFresh: true, value: newSession };\n\t};\n\n\tlet promise: Promise<PendingItem<Session>>;\n\n\tif (locks) {\n\t\tpromise = locks.request<PendingItem<Session>>(`atcute-oauth:${sub}`, run as any);\n\t} else {\n\t\tpromise = run();\n\t}\n\n\tpromise = promise.finally(() => pending.delete(sub));\n\n\tif (pending.has(sub)) {\n\t\t// This should never happen. Indeed, there must not be any 'await'\n\t\t// statement between this and the loop iteration check meaning that\n\t\t// this.pending.get returned undefined. It is there to catch bugs that\n\t\t// would occur in future changes to the code.\n\t\tthrow new Error('concurrent request for the same key');\n\t}\n\n\tpending.set(sub, promise);\n\n\tconst { value } = await promise;\n\treturn value;\n};\n\nexport const storeSession = async (sub: Did, newSession: Session): Promise<void> => {\n\ttry {\n\t\tdatabase.sessions.set(sub, newSession);\n\t} catch (err) {\n\t\tawait onRefreshError(newSession);\n\t\tthrow err;\n\t}\n};\n\nexport const deleteStoredSession = (sub: Did): void => {\n\tdatabase.sessions.delete(sub);\n};\n\nexport const listStoredSessions = (): Did[] => {\n\treturn database.sessions.keys();\n};\n\nconst returnTrue = () => true;\nconst returnFalse = () => false;\n\nconst refreshToken = async (sub: Did, storedSession: Session | undefined): Promise<Session> => {\n\tif (storedSession === undefined) {\n\t\tthrow new TokenRefreshError(sub, `session deleted by another tab`);\n\t}\n\n\tconst { dpopKey, info, token } = storedSession;\n\tconst server = new OAuthServerAgent(info.server, dpopKey);\n\n\ttry {\n\t\tconst newToken = await server.refresh({ sub: info.sub, token });\n\n\t\treturn { dpopKey, info, token: newToken };\n\t} catch (cause) {\n\t\tif (cause instanceof OAuthResponseError && cause.status === 400 && cause.error === 'invalid_grant') {\n\t\t\tthrow new TokenRefreshError(sub, `session was revoked`, { cause });\n\t\t}\n\n\t\tthrow cause;\n\t}\n};\n\nconst onRefreshError = async ({ dpopKey, info, token }: Session) => {\n\t// If the token data cannot be stored, let's revoke it\n\tconst server = new OAuthServerAgent(info.server, dpopKey);\n\tawait server.revoke(token.refresh ?? token.access);\n};\n\nconst isTokenUsable = ({ token }: Session): boolean => {\n\tconst expires = token.expires_at;\n\treturn expires == null || Date.now() + 60_000 <= expires;\n};\n\nconst migrateSessionIfNeeded = async (\n\tsub: Did,\n\tsession: RawSession | undefined,\n): Promise<Session | undefined> => {\n\tif (!session || !isLegacyDpopKey(session.dpopKey)) {\n\t\treturn session as Session | undefined;\n\t}\n\n\tconst dpopKey = await migrateLegacyDpopKey(session.dpopKey);\n\tconst migrated = { ...session, dpopKey };\n\n\ttry {\n\t\tdatabase.sessions.set(sub, migrated);\n\t} catch {\n\t\t// ignore persistence errors\n\t}\n\n\treturn migrated;\n};\n","import { fromBase64Url } from '@atcute/multibase';\nimport type { DpopPrivateJwk } from '@atcute/oauth-crypto';\n\nexport interface LegacyDpopKey {\n\ttyp: 'ES256';\n\tkey: string;\n\tjwt: string;\n\tjkt?: string;\n}\n\nconst ES256_ALG = { name: 'ECDSA', namedCurve: 'P-256' } as const;\n\nexport const isLegacyDpopKey = (key: DpopPrivateJwk | LegacyDpopKey): key is LegacyDpopKey => {\n\treturn typeof (key as LegacyDpopKey).key === 'string' && typeof (key as LegacyDpopKey).jwt === 'string';\n};\n\nexport const migrateLegacyDpopKey = async (key: LegacyDpopKey): Promise<DpopPrivateJwk> => {\n\tconst pkcs8 = fromBase64Url(key.key);\n\tconst cryptoKey = await crypto.subtle.importKey('pkcs8', pkcs8, ES256_ALG, true, ['sign']);\n\tconst jwk = (await crypto.subtle.exportKey('jwk', cryptoKey)) as DpopPrivateJwk;\n\tjwk.alg = 'ES256';\n\n\treturn jwk;\n};\n","import type { FetchHandlerObject } from '@atcute/client';\nimport type { Did } from '@atcute/lexicons';\n\nimport { createDPoPFetch } from '../dpop.js';\nimport type { Session } from '../types/token.js';\n\nimport { OAuthServerAgent } from './server-agent.js';\nimport { type SessionGetOptions, deleteStoredSession, getSession } from './sessions.js';\n\nexport class OAuthUserAgent implements FetchHandlerObject {\n\t#fetch: typeof fetch;\n\t#getSessionPromise: Promise<Session> | undefined;\n\n\tconstructor(public session: Session) {\n\t\tthis.#fetch = createDPoPFetch(session.dpopKey, false);\n\t}\n\n\tget sub(): Did {\n\t\treturn this.session.info.sub;\n\t}\n\n\tgetSession(options?: SessionGetOptions): Promise<Session> {\n\t\tconst promise = getSession(this.session.info.sub, options);\n\n\t\tpromise\n\t\t\t.then((session) => {\n\t\t\t\tthis.session = session;\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tthis.#getSessionPromise = undefined;\n\t\t\t});\n\n\t\treturn (this.#getSessionPromise = promise);\n\t}\n\n\tasync signOut(): Promise<void> {\n\t\tconst sub = this.session.info.sub;\n\n\t\ttry {\n\t\t\tconst { dpopKey, info, token } = await getSession(sub, { allowStale: true });\n\t\t\tconst server = new OAuthServerAgent(info.server, dpopKey);\n\n\t\t\tawait server.revoke(token.refresh ?? token.access);\n\t\t} finally {\n\t\t\tdeleteStoredSession(sub);\n\t\t}\n\t}\n\n\tasync handle(pathname: string, init?: RequestInit): Promise<Response> {\n\t\tawait this.#getSessionPromise;\n\n\t\tconst headers = new Headers(init?.headers);\n\n\t\tlet session = this.session;\n\t\tlet url = new URL(pathname, session.info.aud);\n\n\t\theaders.set('authorization', `${session.token.type} ${session.token.access}`);\n\n\t\tlet response = await this.#fetch(url.href, { ...init, headers });\n\t\tif (!isInvalidTokenResponse(response)) {\n\t\t\treturn response;\n\t\t}\n\n\t\ttry {\n\t\t\tif (this.#getSessionPromise) {\n\t\t\t\tsession = await this.#getSessionPromise;\n\t\t\t} else {\n\t\t\t\tsession = await this.getSession();\n\t\t\t}\n\t\t} catch {\n\t\t\treturn response;\n\t\t}\n\n\t\t// Stream already consumed, can't retry.\n\t\tif (init?.body instanceof ReadableStream) {\n\t\t\treturn response;\n\t\t}\n\n\t\turl = new URL(pathname, session.info.aud);\n\t\theaders.set('authorization', `${session.token.type} ${session.token.access}`);\n\n\t\treturn await this.#fetch(url.href, { ...init, headers });\n\t}\n}\n\nconst isInvalidTokenResponse = (response: Response) => {\n\tif (response.status !== 401) {\n\t\treturn false;\n\t}\n\n\tconst auth = response.headers.get('www-authenticate');\n\n\treturn (\n\t\tauth != null &&\n\t\t(auth.startsWith('Bearer ') || auth.startsWith('DPoP ')) &&\n\t\tauth.includes('error=\"invalid_token\"')\n\t);\n};\n","export * from './actor/local.js';\n\nexport * from './did/composite.js';\nexport * from './did/methods/plc.js';\nexport * from './did/methods/web.js';\nexport * from './did/methods/xrpc.js';\n\nexport * from './handle/composite.js';\nexport * from './handle/methods/doh-json.js';\nexport * from './handle/methods/well-known.js';\nexport * from './handle/methods/xrpc.js';\n\nexport * from './errors.js';\nexport * from './types.js';\n","import { getAtprotoHandle, getPdsEndpoint } from '@atcute/identity';\nimport { isDid, type ActorIdentifier, type Did, type Handle } from '@atcute/lexicons/syntax';\n\nimport { ActorResolutionError } from '../errors.js';\nimport type {\n\tActorResolver,\n\tDidDocumentResolver,\n\tHandleResolver,\n\tResolveActorOptions,\n\tResolvedActor,\n} from '../types.js';\n\nexport interface LocalActorResolverOptions {\n\thandleResolver: HandleResolver;\n\tdidDocumentResolver: DidDocumentResolver;\n}\n\nexport class LocalActorResolver implements ActorResolver {\n\thandleResolver: HandleResolver;\n\tdidDocumentResolver: DidDocumentResolver;\n\n\tconstructor(options: LocalActorResolverOptions) {\n\t\tthis.handleResolver = options.handleResolver;\n\t\tthis.didDocumentResolver = options.didDocumentResolver;\n\t}\n\n\tasync resolve(actor: ActorIdentifier, options?: ResolveActorOptions): Promise<ResolvedActor> {\n\t\tconst identifierIsDid = isDid(actor);\n\n\t\tlet did: Did;\n\t\tif (identifierIsDid) {\n\t\t\tdid = actor as Did;\n\t\t} else {\n\t\t\ttry {\n\t\t\t\tdid = await this.handleResolver.resolve(actor as Handle, options);\n\t\t\t} catch (err) {\n\t\t\t\tthrow new ActorResolutionError(`failed to resolve handle`, { cause: err });\n\t\t\t}\n\t\t}\n\n\t\tlet doc;\n\t\ttry {\n\t\t\tdoc = await this.didDocumentResolver.resolve(did, options);\n\t\t} catch (err) {\n\t\t\tthrow new ActorResolutionError(`failed to resolve did document`, { cause: err });\n\t\t}\n\n\t\tconst pds = getPdsEndpoint(doc);\n\t\tif (!pds) {\n\t\t\tthrow new ActorResolutionError(`missing pds endpoint`);\n\t\t}\n\n\t\tlet handle: Handle = 'handle.invalid';\n\t\tif (identifierIsDid) {\n\t\t\tconst writtenHandle = getAtprotoHandle(doc);\n\t\t\tif (writtenHandle) {\n\t\t\t\ttry {\n\t\t\t\t\tconst resolved = await this.handleResolver.resolve(writtenHandle, options);\n\n\t\t\t\t\tif (resolved === did) {\n\t\t\t\t\t\thandle = writtenHandle;\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t} else if (getAtprotoHandle(doc) === actor) {\n\t\t\thandle = actor as Handle;\n\t\t}\n\n\t\treturn {\n\t\t\tdid: did,\n\t\t\thandle: handle,\n\t\t\tpds: new URL(pds).href,\n\t\t};\n\t}\n}\n","export * as defs from './typedefs.js';\nexport * from './types.js';\n\nexport * from './utils.js';\n\nexport * from './did.js';\nexport * from './methods/key.js';\nexport * from './methods/plc.js';\nexport * from './methods/web.js';\n","import * as v from '@badrap/valita';\n\nimport { isDid } from '@atcute/lexicons/syntax';\n\nimport * as t from './types.js';\n\n/** @deprecated */\nexport const FRAGMENT_RE = /^#[^#]+$/;\n/** @deprecated */\nexport const MULTIBASE_RE = /^z[a-km-zA-HJ-NP-Z1-9]+$/;\n\nexport const rfc3968UriSchema = v.string().assert((input) => {\n\treturn URL.canParse(input);\n}, `must be a url`);\n\nexport const didRelativeUri = v.string().assert((input) => {\n\treturn FRAGMENT_RE.test(input) || URL.canParse(input);\n}, `must be a did relative uri`);\n\nexport const multibaseString = v.string().assert((input) => {\n\treturn MULTIBASE_RE.test(input);\n}, `must be a base58 multibase`);\n\nexport const didString = v.string().assert(isDid, `must be a did`);\n\nexport const verificationMethod: v.Type<t.VerificationMethod> = v\n\t.object({\n\t\tid: didRelativeUri,\n\t\ttype: v.string(),\n\t\tcontroller: didString,\n\t\tpublicKeyMultibase: multibaseString.optional(),\n\t\tpublicKeyJwk: v.record().optional(),\n\t})\n\t.chain((input) => {\n\t\tswitch (input.type) {\n\t\t\tcase 'Multikey': {\n\t\t\t\tif (input.publicKeyMultibase === undefined) {\n\t\t\t\t\treturn v.err({ message: `missing multikey`, path: ['publicKeyMultibase'] });\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'EcdsaSecp256k1VerificationKey2019':\n\t\t\tcase 'EcdsaSecp256r1VerificationKey2019': {\n\t\t\t\tif (input.publicKeyMultibase === undefined) {\n\t\t\t\t\treturn v.err({ message: `missing multibase key`, path: ['publicKeyMultibase'] });\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn v.ok(input);\n\t});\n\nexport const service: v.Type<t.Service> = v.object({\n\t// should've only been RFC3968, but did:plc uses relative URIs.\n\tid: didRelativeUri,\n\ttype: v.union(v.string(), v.array(v.string())),\n\tserviceEndpoint: v.union(\n\t\trfc3968UriSchema,\n\t\tv.record(rfc3968UriSchema),\n\t\tv.array(v.union(rfc3968UriSchema, v.record(rfc3968UriSchema))),\n\t),\n});\n\nexport const didDocument: v.Type<t.DidDocument> = v\n\t.object({\n\t\t'@context': v.array(rfc3968UriSchema),\n\n\t\tid: didString,\n\n\t\talsoKnownAs: v\n\t\t\t.array(rfc3968UriSchema)\n\t\t\t.chain((input) => {\n\t\t\t\tfor (let i = 0, len = input.length; i < len; i++) {\n\t\t\t\t\tconst aka = input[i];\n\n\t\t\t\t\tfor (let j = 0; j < i; j++) {\n\t\t\t\t\t\tif (aka === input[j]) {\n\t\t\t\t\t\t\treturn v.err({\n\t\t\t\t\t\t\t\tmessage: `duplicate \"${aka}\" aka entry`,\n\t\t\t\t\t\t\t\tpath: [i],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn v.ok(input);\n\t\t\t})\n\t\t\t.optional(),\n\t\tverificationMethod: v\n\t\t\t.array(verificationMethod)\n\t\t\t.chain((input) => {\n\t\t\t\tfor (let i = 0, len = input.length; i < len; i++) {\n\t\t\t\t\tconst method = input[i];\n\t\t\t\t\tconst methodId = method.id;\n\n\t\t\t\t\tfor (let j = 0; j < i; j++) {\n\t\t\t\t\t\tif (methodId === input[j].id) {\n\t\t\t\t\t\t\treturn v.err({\n\t\t\t\t\t\t\t\tmessage: `duplicate \"${methodId}\" verification method`,\n\t\t\t\t\t\t\t\tpath: [i, 'id'],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn v.ok(input);\n\t\t\t})\n\t\t\t.optional(),\n\t\tservice: v.array(service).optional(),\n\n\t\tcontroller: v.union(didString, v.array(didString)).optional(),\n\t\tauthentication: v.array(v.union(didRelativeUri, verificationMethod)).optional(),\n\t})\n\t.chain((input) => {\n\t\tconst { id: did, service: services } = input;\n\n\t\tif (services?.length) {\n\t\t\tconst len = services.length;\n\t\t\tconst identifiers = new Array(len);\n\n\t\t\tfor (let i = 0; i < len; i++) {\n\t\t\t\tconst service = services[i];\n\n\t\t\t\tlet id = service.id;\n\t\t\t\tif (id[0] === '#') {\n\t\t\t\t\tid = did + id;\n\t\t\t\t}\n\n\t\t\t\tidentifiers[i] = id;\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < len; i++) {\n\t\t\t\tconst id = identifiers[i];\n\n\t\t\t\tfor (let j = 0; j < i; j++) {\n\t\t\t\t\tif (id === identifiers[j]) {\n\t\t\t\t\t\treturn v.err({\n\t\t\t\t\t\t\tmessage: `duplicate \"${id}\" service`,\n\t\t\t\t\t\t\tpath: ['service', i, 'id'],\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn v.ok(input);\n\t});\n","export * from './at-identifier.ts';\nexport * from './at-uri.ts';\nexport * from './cid.ts';\nexport * from './datetime.ts';\nexport * from './did.ts';\nexport * from './handle.ts';\nexport * from './language.ts';\nexport * from './nsid.ts';\nexport * from './record-key.ts';\nexport * from './tid.ts';\nexport * from './uri.ts';\n","import { isDid, type Did } from './did.ts';\nimport { isHandle, type Handle } from './handle.ts';\n\n/**\n * represents an account's identifier, either a {@link Did} or a\n * {@link Handle}\n */\nexport type ActorIdentifier = Did | Handle;\n\n// #__NO_SIDE_EFFECTS__\nexport const isActorIdentifier = (input: unknown): input is ActorIdentifier => {\n\treturn isDid(input) || isHandle(input);\n};\n","/**\n * represents a decentralized identifier (DID).\n */\nexport type Did<Method extends string = string> = `did:${Method}:${string}`;\n\n/**\n * represents a decentralized identifier with methods supported in atproto\n */\nexport type AtprotoDid = Did<'plc' | 'web'>;\n\nexport type AtprotoAudience = `${AtprotoDid}#${string}`;\n\nconst DID_RE = /^did:([a-z]+):([a-zA-Z0-9._:%-]*[a-zA-Z0-9._-])$/;\n\n// #__NO_SIDE_EFFECTS__\nexport const isDid = (input: unknown): input is Did => {\n\treturn typeof input === 'string' && input.length >= 7 && input.length <= 2048 && DID_RE.test(input);\n};\n","import { isAsciiAlpha, isAsciiAlphaNum } from './utils/ascii.ts';\n\n/**\n * represents an account's handle, using domains as a human-friendly\n * identifier.\n */\nexport type Handle = `${string}.${string}`;\n\n// validates a domain label: starts/ends with alphanumeric, middle allows hyphens, max 63 chars\nconst isValidLabel = (input: string, start: number, end: number): boolean => {\n\tconst len = end - start;\n\tif (len === 0 || len > 63) {\n\t\treturn false;\n\t}\n\n\tconst first = input.charCodeAt(start);\n\tif (!isAsciiAlphaNum(first)) {\n\t\treturn false;\n\t}\n\n\tif (len > 1) {\n\t\tif (!isAsciiAlphaNum(input.charCodeAt(end - 1))) return false;\n\t\tfor (let j = start + 1; j < end - 1; j++) {\n\t\t\tconst c = input.charCodeAt(j);\n\t\t\tif (!isAsciiAlphaNum(c) && c !== 0x2d) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true;\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const isHandle = (input: unknown): input is Handle => {\n\tif (typeof input !== 'string') {\n\t\treturn false;\n\t}\n\n\tconst len = input.length;\n\tif (len < 3 || len > 253) {\n\t\treturn false;\n\t}\n\n\tlet labelStart = 0;\n\tlet labelCount = 0;\n\tlet lastLabelStart = 0;\n\n\tfor (let i = 0; i <= len; i++) {\n\t\tif (i === len || input.charCodeAt(i) === 0x2e) {\n\t\t\tif (!isValidLabel(input, labelStart, i)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tlastLabelStart = labelStart;\n\t\t\tlabelStart = i + 1;\n\t\t\tlabelCount++;\n\t\t}\n\t}\n\n\t// need at least 2 labels (one dot)\n\tif (labelCount < 2) {\n\t\treturn false;\n\t}\n\n\t// TLD must start with a letter\n\treturn isAsciiAlpha(input.charCodeAt(lastLabelStart));\n};\n","// #__NO_SIDE_EFFECTS__\nexport const isAsciiAlpha = (c: number): boolean => {\n\treturn (c >= 0x41 && c <= 0x5a) || (c >= 0x61 && c <= 0x7a);\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const isAsciiAlphaNum = (c: number): boolean => {\n\treturn isAsciiAlpha(c) || (c >= 0x30 && c <= 0x39);\n};\n","import { type Result } from '../utils.ts';\n\nimport { isActorIdentifier, type ActorIdentifier } from './at-identifier.ts';\nimport { isDid, type Did } from './did.ts';\nimport { isNsid, type Nsid } from './nsid.ts';\nimport { isRecordKey, type RecordKey } from './record-key.ts';\nimport { isAsciiAlphaNum } from './utils/ascii.ts';\n\n/**\n * represents a general AT Protocol URI, representing either an entire\n * repository, a specific collection within a repository, or a record.\n *\n * it allows using handles over DIDs, but this means that it won't be stable.\n */\nexport type ResourceUri =\n\t| `at://${ActorIdentifier}`\n\t| `at://${ActorIdentifier}/${Nsid}`\n\t| `at://${ActorIdentifier}/${Nsid}/${RecordKey}`;\n\nexport type ParsedResourceUri =\n\t| { repo: ActorIdentifier; collection: undefined; rkey: undefined; fragment: string | undefined }\n\t| { repo: ActorIdentifier; collection: Nsid; rkey: undefined; fragment: string | undefined }\n\t| { repo: ActorIdentifier; collection: Nsid; rkey: RecordKey; fragment: string | undefined };\n\n// minimum valid non-canonical at-uri is `at://a.a` (8 chars)\nconst AT_URI_MIN_LENGTH = 8;\n// minimum canonical at-uri is `at://did:m:v/a.b.c/x` (20 chars)\nconst CANONICAL_AT_URI_MIN_LENGTH = 5 + 7 + 1 + 5 + 1 + 1;\n// maximum structural length:\n// `at://` + DID (2048) + `/` + NSID (317) + `/` + rkey (512)\nconst AT_URI_MAX_LENGTH = 5 + 2048 + 1 + 317 + 1 + 512;\n\n// repo: [a-zA-Z0-9._:%-]\n// collection: [a-zA-Z0-9.-]\n// rkey: [a-zA-Z0-9._~:@!$&%')(*+,;=-]\n// fragment: /[a-zA-Z0-9._~:@!$&%')(*+,;=\\-[\\]/\\\\]*\nconst ATURI_RE =\n\t/^at:\\/\\/([a-zA-Z0-9._:%-]+)(?:\\/([a-zA-Z0-9-.]+)(?:\\/([a-zA-Z0-9._~:@!$&%')(*+,;=-]+))?)?(?:#(\\/[a-zA-Z0-9._~:@!$&%')(*+,;=\\-[\\]/\\\\]*))?$/;\n\nconst isFragmentChar = (c: number): boolean => {\n\treturn (\n\t\tisAsciiAlphaNum(c) ||\n\t\tc === 0x2e || // .\n\t\tc === 0x5f || // _\n\t\tc === 0x7e || // ~\n\t\tc === 0x3a || // :\n\t\tc === 0x40 || // @\n\t\tc === 0x21 || // !\n\t\tc === 0x24 || // $\n\t\tc === 0x26 || // &\n\t\tc === 0x25 || // %\n\t\tc === 0x27 || // '\n\t\tc === 0x29 || // )\n\t\tc === 0x28 || // (\n\t\tc === 0x2a || // *\n\t\tc === 0x2b || // +\n\t\tc === 0x2c || // ,\n\t\tc === 0x3b || // ;\n\t\tc === 0x3d || // =\n\t\tc === 0x2d || // -\n\t\tc === 0x5b || // [\n\t\tc === 0x5d || // ]\n\t\tc === 0x2f || // /\n\t\tc === 0x5c // \\\n\t);\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const isResourceUri = (input: unknown): input is ResourceUri => {\n\tif (typeof input !== 'string') {\n\t\treturn false;\n\t}\n\n\tconst len = input.length;\n\tif (len < AT_URI_MIN_LENGTH || len > AT_URI_MAX_LENGTH) {\n\t\treturn false;\n\t}\n\n\tif (\n\t\tinput.charCodeAt(0) !== 0x61 ||\n\t\tinput.charCodeAt(1) !== 0x74 ||\n\t\tinput.charCodeAt(2) !== 0x3a ||\n\t\tinput.charCodeAt(3) !== 0x2f ||\n\t\tinput.charCodeAt(4) !== 0x2f\n\t) {\n\t\treturn false;\n\t}\n\n\tconst hash = input.indexOf('#', 5);\n\tconst stop = hash === -1 ? len : hash;\n\n\tif (hash !== -1) {\n\t\tconst fragmentStart = hash + 1;\n\t\tif (fragmentStart >= len || input.charCodeAt(fragmentStart) !== 0x2f) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (let idx = fragmentStart; idx < len; idx++) {\n\t\t\tif (!isFragmentChar(input.charCodeAt(idx))) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst firstSlash = input.indexOf('/', 5);\n\tlet repoEnd = stop;\n\tlet collection: string | undefined;\n\tlet rkey: string | undefined;\n\n\tif (firstSlash !== -1 && firstSlash < stop) {\n\t\trepoEnd = firstSlash;\n\n\t\tconst collectionStart = firstSlash + 1;\n\t\tif (collectionStart >= stop) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst secondSlash = input.indexOf('/', collectionStart);\n\t\tif (secondSlash !== -1 && secondSlash < stop) {\n\t\t\tif (secondSlash === collectionStart || secondSlash + 1 >= stop) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst thirdSlash = input.indexOf('/', secondSlash + 1);\n\t\t\tif (thirdSlash !== -1 && thirdSlash < stop) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tcollection = input.substring(collectionStart, secondSlash);\n\t\t\trkey = input.substring(secondSlash + 1, stop);\n\t\t} else {\n\t\t\tcollection = input.substring(collectionStart, stop);\n\t\t}\n\t}\n\n\tif (repoEnd <= 5) {\n\t\treturn false;\n\t}\n\n\tconst repo = input.substring(5, repoEnd);\n\n\treturn (\n\t\tisActorIdentifier(repo) &&\n\t\t(collection === undefined || isNsid(collection)) &&\n\t\t(rkey === undefined || isRecordKey(rkey))\n\t);\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const parseResourceUri = (input: string): Result<ParsedResourceUri, string> => {\n\tconst len = input.length;\n\tif (len < AT_URI_MIN_LENGTH || len > AT_URI_MAX_LENGTH) {\n\t\treturn { ok: false, error: `invalid at-uri: ${input}` };\n\t}\n\n\tconst match = ATURI_RE.exec(input);\n\tif (match === null) {\n\t\treturn { ok: false, error: `invalid at-uri: ${input}` };\n\t}\n\n\tconst [, r, c, k, f] = match;\n\n\tif (!isActorIdentifier(r)) {\n\t\treturn { ok: false, error: `invalid repo in at-uri: ${r}` };\n\t}\n\n\tif (c !== undefined && !isNsid(c)) {\n\t\treturn { ok: false, error: `invalid collection in at-uri: ${c}` };\n\t}\n\n\tif (k !== undefined && !isRecordKey(k)) {\n\t\treturn { ok: false, error: `invalid rkey in at-uri: ${k}` };\n\t}\n\n\treturn { ok: true, value: { repo: r, collection: c, rkey: k, fragment: f } };\n};\n\n/**\n * represents a canonical AT Protocol URI for a specific record.\n *\n * this URI format uses the account's DID as the authority, ensuring that\n * the URI remains valid even as the account changes handles, uniquely\n * identifying a specific piece of record within AT Protocol.\n */\nexport type CanonicalResourceUri = `at://${Did}/${Nsid}/${RecordKey}`;\n\nexport type ParsedCanonicalResourceUri = {\n\trepo: Did;\n\tcollection: Nsid;\n\trkey: RecordKey;\n\tfragment: string | undefined;\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const isCanonicalResourceUri = (input: unknown): input is CanonicalResourceUri => {\n\tif (typeof input !== 'string') {\n\t\treturn false;\n\t}\n\n\tconst len = input.length;\n\tif (len < CANONICAL_AT_URI_MIN_LENGTH || len > AT_URI_MAX_LENGTH) {\n\t\treturn false;\n\t}\n\n\t// must start with \"at://\"\n\tif (\n\t\tinput.charCodeAt(0) !== 0x61 ||\n\t\tinput.charCodeAt(1) !== 0x74 ||\n\t\tinput.charCodeAt(2) !== 0x3a ||\n\t\tinput.charCodeAt(3) !== 0x2f ||\n\t\tinput.charCodeAt(4) !== 0x2f\n\t) {\n\t\treturn false;\n\t}\n\n\tconst firstSlash = input.indexOf('/', 5);\n\tif (firstSlash === -1) {\n\t\treturn false;\n\t}\n\n\tconst secondSlash = input.indexOf('/', firstSlash + 1);\n\tif (secondSlash === -1) {\n\t\treturn false;\n\t}\n\n\t// check for fragment\n\tconst hashPos = input.indexOf('#', secondSlash + 1);\n\n\tconst repo = input.substring(5, firstSlash);\n\tconst collection = input.substring(firstSlash + 1, secondSlash);\n\tconst rkey = hashPos === -1 ? input.substring(secondSlash + 1) : input.substring(secondSlash + 1, hashPos);\n\n\treturn isDid(repo) && isNsid(collection) && isRecordKey(rkey);\n};\n\n// #__NO_SIDE_EFFECTS__\nexport const parseCanonicalResourceUri = (input: string): Result<ParsedCanonicalResourceUri, string> => {\n\tconst len = input.length;\n\tif (len < CANONICAL_AT_URI_MIN_LENGTH || len > AT_URI_MAX_LENGTH) {\n\t\treturn { ok: false, error: `invalid canonical-at-uri: ${input}` };\n\t}\n\n\tconst match = ATURI_RE.exec(input);\n\tif (match === null) {\n\t\treturn { ok: false, error: `invalid canonical-at-uri: ${input}` };\n\t}\n\n\tconst [, r, c, k, f] = match;\n\n\tif (!isDid(r)) {\n\t\treturn { ok: false, error: `invalid repo in canonical-at-uri: ${r}` };\n\t}\n\n\tif (!isNsid(c)) {\n\t\treturn { ok: false, error: `invalid collection in canonical-at-uri: ${c}` };\n\t}\n\n\tif (!isRecordKey(k)) {\n\t\treturn { ok: false, error: `invalid rkey in canonical-at-uri: ${k}` };\n\t}\n\n\treturn { ok: true, value: { repo: r, collection: c, rkey: k, fragment: f } };\n};\n","import { DEV } from 'esm-env';\n\nexport type Result<T, E> = { ok: true; value: T } | { ok: false; error: E };\n\nexport const assert: { (condition: any, message?: string): asserts condition } = (condition, message) => {\n\tif (!condition) {\n\t\tif (DEV) {\n\t\t\tthrow new Error(`Assertion failed` + (message ? `: ${message}` : ``));\n\t\t}\n\n\t\tthrow new Error(`Assertion failed`);\n\t}\n};\n\nexport const assertNever = (_: never, message?: string): never => {\n\tassert(false, message);\n};\n","export { default as BROWSER } from 'esm-env/browser';\nexport { default as DEV } from 'esm-env/development';\nexport { default as NODE } from 'esm-env/node';\n","export default typeof window !== 'undefined';\n","const node_env = globalThis.process?.env?.NODE_ENV;\nexport default node_env && !node_env.toLowerCase().startsWith('prod');\n","export default true;\n","import { isAsciiAlpha, isAsciiAlphaNum } from './utils/ascii.ts';\n\n/**\n * represents a namespace identifier (NSID)\n */\nexport type Nsid = `${string}.${string}.${string}`;\n\n// #__NO_SIDE_EFFECTS__\nexport const isNsid = (input: unknown): input is Nsid => {\n\tif (typeof input !== 'string') {\n\t\treturn false;\n\t}\n\n\tconst len = input.length;\n\tif (len < 5 || len > 317) {\n\t\treturn false;\n\t}\n\n\t// find the last dot to separate domain labels from the name segment\n\tlet lastDot = -1;\n\tfor (let j = len - 1; j >= 0; j--) {\n\t\tif (input.charCodeAt(j) === 0x2e) {\n\t\t\tlastDot = j;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (lastDot === -1) {\n\t\treturn false;\n\t}\n\n\t// validate domain segments (before lastDot)\n\tlet segStart = 0;\n\tlet segIdx = 0;\n\tfor (let i = 0; i <= lastDot; i++) {\n\t\tif (i === lastDot || input.charCodeAt(i) === 0x2e) {\n\t\t\tconst segLen = i - segStart;\n\t\t\tif (segLen === 0 || segLen > 63) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst first = input.charCodeAt(segStart);\n\t\t\tif (segIdx === 0) {\n\t\t\t\t// first domain label must start with a letter\n\t\t\t\tif (!isAsciiAlpha(first)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// subsequent domain labels start with alphanumeric\n\t\t\t\tif (!isAsciiAlphaNum(first)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (segLen > 1) {\n\t\t\t\tif (!isAsciiAlphaNum(input.charCodeAt(i - 1))) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tfor (let j = segStart + 1; j < i - 1; j++) {\n\t\t\t\t\tconst c = input.charCodeAt(j);\n\t\t\t\t\tif (!isAsciiAlphaNum(c) && c !== 0x2d) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsegStart = i + 1;\n\t\t\tsegIdx++;\n\t\t}\n\t}\n\n\t// need at least 2 domain segments\n\tif (segIdx < 2) {\n\t\treturn false;\n\t}\n\n\t// name segment (after lastDot): starts with letter, rest alphanumeric, max 63\n\tconst nameStart = lastDot + 1;\n\tconst nameLen = len - nameStart;\n\tif (nameLen === 0 || nameLen > 63) {\n\t\treturn false;\n\t}\n\n\tif (!isAsciiAlpha(input.charCodeAt(nameStart))) {\n\t\treturn false;\n\t}\n\tfor (let j = nameStart + 1; j < len; j++) {\n\t\tif (!isAsciiAlphaNum(input.charCodeAt(j))) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n};\n","import { isAsciiAlphaNum } from './utils/ascii.ts';\n\n/**\n * represents a record key\n */\nexport type RecordKey = string;\n\n// #__NO_SIDE_EFFECTS__\nexport const isRecordKey = (input: unknown): input is RecordKey => {\n\tif (typeof input !== 'string') {\n\t\treturn false;\n\t}\n\n\tconst len = input.length;\n\tif (len < 1 || len > 512) {\n\t\treturn false;\n\t}\n\n\t// reject \".\" and \"..\"\n\tif (len <= 2 && input.charCodeAt(0) === 0x2e && (len === 1 || input.charCodeAt(1) === 0x2e)) {\n\t\treturn false;\n\t}\n\n\tfor (let i = 0; i < len; i++) {\n\t\tconst c = input.charCodeAt(i);\n\t\t// [a-zA-Z0-9_~.:-]\n\t\tif (\n\t\t\t!isAsciiAlphaNum(c) &&\n\t\t\tc !== 0x5f && // _\n\t\t\tc !== 0x7e && // ~\n\t\t\tc !== 0x2e && // .\n\t\t\tc !== 0x3a && // :\n\t\t\tc !== 0x2d // -\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n};\n","/**\n * represents a content identifier (CID)\n */\nexport type Cid = string;\n\nconst DASL_CID_RE = /^baf[ky]rei[a-z2-7]{52}$/;\n\n// #__NO_SIDE_EFFECTS__\nexport const isCid = (input: unknown): input is Cid => {\n\treturn typeof input === 'string' && input.length === 59 && DASL_CID_RE.test(input);\n};\n","export type Datetime = string;\n\nconst DATE_TIME_RE =\n\t/^((?!0{3})\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01]))T((?:[01]\\d|2[0-3]):(?:[0-5]\\d):(?:[0-5]\\d))(\\.\\d+)?(Z|(?!-00:00)[+-](?:[01]\\d|2[0-3]):(?:[0-5]\\d))$/;\n\n// #__NO_SIDE_EFFECTS__\nexport const isDatetime = (input: unknown): input is Datetime => {\n\treturn typeof input === 'string' && input.length >= 20 && input.length <= 64 && DATE_TIME_RE.test(input);\n};\n","export type LanguageCode = string;\n\nconst LANGUAGE_CODE_RE =\n\t/^((?<grandfathered>(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)|(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang))|((?<language>([A-Za-z]{2,3}(-(?<extlang>[A-Za-z]{3}(-[A-Za-z]{3}){0,2}))?)|[A-Za-z]{4}|[A-Za-z]{5,8})(-(?<script>[A-Za-z]{4}))?(-(?<region>[A-Za-z]{2}|[0-9]{3}))?(-(?<variant>[A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3}))*(-(?<extension>[0-9A-WY-Za-wy-z](-[A-Za-z0-9]{2,8})+))*(-(?<privateUseA>x(-[A-Za-z0-9]{1,8})+))?)|(?<privateUseB>x(-[A-Za-z0-9]{1,8})+))$/;\n\n// #__NO_SIDE_EFFECTS__\nexport const isLanguageCode = (input: unknown): input is LanguageCode => {\n\treturn typeof input === 'string' && input.length >= 2 && LANGUAGE_CODE_RE.test(input);\n};\n","/**\n * represents a timestamp identifier (TID)\n */\nexport type Tid = string;\n\nconst TID_RE = /^[234567abcdefghij][234567abcdefghijklmnopqrstuvwxyz]{12}$/;\n\n// #__NO_SIDE_EFFECTS__\nexport const isTid = (input: unknown): input is Tid => {\n\treturn typeof input === 'string' && input.length === 13 && TID_RE.test(input);\n};\n","import { isUtf8LengthInRange } from '@atcute/uint8array';\n\n/**\n * represents a generic URI\n */\nexport type GenericUri = `${string}:${string}`;\n\nconst URI_RE = /^\\w+:(?:\\/\\/)?[^\\s/][^\\s]*$/;\n\n// #__NO_SIDE_EFFECTS__\nexport const isGenericUri = (input: unknown): input is GenericUri => {\n\tif (typeof input !== 'string') {\n\t\treturn false;\n\t}\n\n\tif (!isUtf8LengthInRange(input, 3, 8192)) {\n\t\treturn false;\n\t}\n\n\treturn URI_RE.test(input);\n};\n","export {};\n//# sourceMappingURL=types.js.map","import type { Handle } from '@atcute/lexicons';\nimport { isHandle } from '@atcute/lexicons/syntax';\n\nimport * as t from './types.js';\n\nexport interface VerificationMaterial {\n\ttype: string;\n\tpublicKeyMultibase: string;\n}\n\nconst isUrlParseSupported = 'parse' in URL;\n\nexport const isAtprotoServiceEndpoint = (input: string): boolean => {\n\tlet url: URL | null = null;\n\tif (isUrlParseSupported) {\n\t\turl = URL.parse(input);\n\t} else {\n\t\ttry {\n\t\t\turl = new URL(input);\n\t\t} catch {}\n\t}\n\n\treturn (\n\t\turl !== null &&\n\t\t(url.protocol === 'https:' || url.protocol === 'http:') &&\n\t\turl.pathname === '/' &&\n\t\turl.search === '' &&\n\t\turl.hash === ''\n\t);\n};\n\nexport const getVerificationMaterial = (\n\tdoc: t.DidDocument,\n\tid: `#${string}`,\n): VerificationMaterial | undefined => {\n\tconst verificationMethods = doc.verificationMethod;\n\tif (!verificationMethods) {\n\t\treturn;\n\t}\n\n\tconst expectedId = `${doc.id}${id}`;\n\n\tfor (let idx = 0, len = verificationMethods.length; idx < len; idx++) {\n\t\tconst { id, type, publicKeyMultibase } = verificationMethods[idx];\n\n\t\tif (id !== expectedId) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (publicKeyMultibase === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn { type, publicKeyMultibase };\n\t}\n};\n\nexport const getAtprotoVerificationMaterial = (doc: t.DidDocument): VerificationMaterial | undefined => {\n\treturn getVerificationMaterial(doc, '#atproto');\n};\n\nexport const getAtprotoLabelerVerificationMaterial = (\n\tdoc: t.DidDocument,\n): VerificationMaterial | undefined => {\n\treturn getVerificationMaterial(doc, '#atproto_label');\n};\n\nexport const getAtprotoHandle = (doc: t.DidDocument): Handle | null | undefined => {\n\tconst alsoKnownAs = doc.alsoKnownAs;\n\tif (!alsoKnownAs) {\n\t\treturn null;\n\t}\n\n\tconst PREFIX = 'at://';\n\n\tfor (let idx = 0, len = alsoKnownAs.length; idx < len; idx++) {\n\t\tconst aka = alsoKnownAs[idx];\n\n\t\tif (!aka.startsWith(PREFIX)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst raw = aka.slice(PREFIX.length);\n\n\t\tif (!isHandle(raw)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn raw;\n\t}\n\n\treturn null;\n};\n\nexport const getAtprotoServiceEndpoint = (\n\tdoc: t.DidDocument,\n\tpredicate: { id: `#${string}`; type?: string },\n): string | undefined => {\n\tconst services = doc.service;\n\tif (!services) {\n\t\treturn;\n\t}\n\n\tfor (let idx = 0, len = services.length; idx < len; idx++) {\n\t\tconst { id, type, serviceEndpoint } = services[idx];\n\n\t\tif (id !== predicate.id && id !== doc.id + predicate.id) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (predicate.type !== undefined) {\n\t\t\tif (Array.isArray(type)) {\n\t\t\t\tif (!type.includes(predicate.type)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (type !== predicate.type) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (typeof serviceEndpoint !== 'string' || !isAtprotoServiceEndpoint(serviceEndpoint)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn serviceEndpoint;\n\t}\n};\n\nexport const getPdsEndpoint = (doc: t.DidDocument): string | undefined => {\n\treturn getAtprotoServiceEndpoint(doc, {\n\t\tid: '#atproto_pds',\n\t\ttype: 'AtprotoPersonalDataServer',\n\t});\n};\n\nexport const getLabelerEndpoint = (doc: t.DidDocument): string | undefined => {\n\treturn getAtprotoServiceEndpoint(doc, {\n\t\tid: '#atproto_labeler',\n\t\ttype: 'AtprotoLabeler',\n\t});\n};\n\nexport const getBlueskyChatEndpoint = (doc: t.DidDocument): string | undefined => {\n\treturn getAtprotoServiceEndpoint(doc, {\n\t\tid: '#bsky_chat',\n\t\ttype: 'BskyChatService',\n\t});\n};\n\nexport const getBlueskyFeedgenEndpoint = (doc: t.DidDocument): string | undefined => {\n\treturn getAtprotoServiceEndpoint(doc, {\n\t\tid: '#bsky_fg',\n\t\ttype: 'BskyFeedGenerator',\n\t});\n};\n\nexport const getBlueskyNotificationEndpoint = (doc: t.DidDocument): string | undefined => {\n\treturn getAtprotoServiceEndpoint(doc, {\n\t\tid: '#bsky_notif',\n\t\ttype: 'BskyNotificationService',\n\t});\n};\n","import type { AtprotoAudience, AtprotoDid, Did } from '@atcute/lexicons/syntax';\n\nimport { isPlcDid } from './methods/plc.js';\nimport { isAtprotoWebDid } from './methods/web.js';\n\nconst FRAGMENT_RE = /^(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@\\/?]|%[0-9A-Fa-f]{2})*$/;\n\n/**\n * checks if it's a DID identifier that is supported by atproto\n */\nexport const isAtprotoDid = (input: string): input is AtprotoDid => {\n\treturn isPlcDid(input) || isAtprotoWebDid(input);\n};\n\nexport const isAtprotoAudience = (input: string): input is AtprotoAudience => {\n\t// 'did:web:a.co#f'\n\tif (input.length < 14) {\n\t\treturn false;\n\t}\n\n\tconst isep = input.indexOf('#', 12);\n\tif (isep === -1) {\n\t\treturn false;\n\t}\n\n\treturn FRAGMENT_RE.test(input.slice(isep + 1)) && isAtprotoDid(input.slice(0, isep));\n};\n\n/**\n * returns the DID's method\n */\nexport const extractDidMethod = <M extends string>(did: Did<M>): M => {\n\tconst isep = did.indexOf(':', 4);\n\tconst method = did.slice(4, isep);\n\treturn method as M;\n};\n","import type { Did } from '@atcute/lexicons/syntax';\n\n/** @deprecated use `isPlcDid` instead */\nexport const PLC_DID_RE = /^did:plc:([a-z2-7]{24})$/;\n\n/**\n * checks if input is a did:plc identifier\n */\nexport const isPlcDid = (input: string): input is Did<'plc'> => {\n\treturn input.length === 32 && PLC_DID_RE.test(input);\n};\n","import type { Did } from '@atcute/lexicons/syntax';\n\n/** @deprecated use `isWebDid` instead */\nexport const WEB_DID_RE =\n\t/^did:web:([a-zA-Z0-9%\\-]+(?:(?:\\.[a-zA-Z0-9%\\-]+)*(?:\\.[a-zA-Z]{2,}))?)?((?::[a-zA-Z0-9\\-%.]+)+)?$/;\n\n/** @deprecated use `isAtprotoWebDid` instead */\nexport const ATPROTO_WEB_DID_RE =\n\t/^did:web:([a-zA-Z0-9\\-]+(?:\\.[a-zA-Z0-9\\-]+)*(?:\\.[a-zA-Z]{2,})|localhost(?:%3[aA]\\d+)?)$/;\n\n/**\n * checks if input is a did:web identifier, note that you should probably use\n * `isAtprotoDidWeb` for atproto-related cases as atproto only supports a subset\n * of the did:web specification (namely, no custom paths)\n */\nexport const isWebDid = (input: string): input is Did<'web'> => {\n\treturn input.length >= 9 && WEB_DID_RE.test(input);\n};\n\n/**\n * checks if input is a did:web identifier that is supported by atproto\n */\nexport const isAtprotoWebDid = (input: string): input is Did<'web'> => {\n\treturn input.length >= 12 && ATPROTO_WEB_DID_RE.test(input);\n};\n\n/**\n * normalize a did:web identifier\n */\nexport const normalizeWebDid = (did: Did<'web'>): Did<'web'> => {\n\tconst [host, ...paths] = did.slice(8).split(':').map(decodeURIComponent);\n\n\tlet normalized = `did:web:${encodeURIComponent(host.toLowerCase())}`;\n\tif (paths.length > 0) {\n\t\tnormalized += `:${paths.join(':')}`;\n\t}\n\n\treturn normalized as Did<'web'>;\n};\n\n/**\n * converts did:web identifier into the DID document's URL\n */\nexport const webDidToDocumentUrl = (did: Did<'web'>): URL => {\n\tconst [host, ...paths] = did.slice(8).split(':').map(decodeURIComponent);\n\n\tlet pathname = '/' + paths.join('/');\n\tif (pathname === '/') {\n\t\tpathname = `/.well-known/did.json`;\n\t} else {\n\t\tpathname += `/did.json`;\n\t}\n\n\tconst url = new URL(`https://${host}${pathname}`);\n\tif (url.hostname === 'localhost') {\n\t\turl.protocol = 'http:';\n\t}\n\n\treturn url;\n};\n","import type { Did } from '@atcute/lexicons';\n\nconst KEY_DID_RE = /^did:key:z[a-km-zA-HJ-NP-Z1-9]+$/;\n\n/**\n * checks if input is a did:key identifier\n */\nexport const isKeyDid = (input: string): input is Did<'key'> => {\n\treturn input.length >= 10 && KEY_DID_RE.test(input);\n};\n","import type { Did } from '@atcute/lexicons/syntax';\n\n// #region DID document resolution errors\nexport class DidDocumentResolutionError extends Error {\n\toverride name = 'DidResolutionError';\n}\n\nexport class UnsupportedDidMethodError extends DidDocumentResolutionError {\n\toverride name = 'UnsupportedDidMethodError';\n\n\tconstructor(public did: Did) {\n\t\tsuper(`unsupported did method; did=${did}`);\n\t}\n}\n\nexport class ImproperDidError extends DidDocumentResolutionError {\n\toverride name = 'ImproperDidError';\n\n\tconstructor(public did: Did) {\n\t\tsuper(`improper did; did=${did}`);\n\t}\n}\n\nexport class DocumentNotFoundError extends DidDocumentResolutionError {\n\toverride name = 'DocumentNotFoundError';\n\n\tconstructor(public did: Did) {\n\t\tsuper(`did document not found; did=${did}`);\n\t}\n}\n\nexport class FailedDocumentResolutionError extends DidDocumentResolutionError {\n\toverride name = 'FailedDocumentResolutionError';\n\n\tconstructor(\n\t\tpublic did: Did,\n\t\toptions?: ErrorOptions,\n\t) {\n\t\tsuper(`failed to resolve did document; did=${did}`, options);\n\t}\n}\n// #endregion\n\n// #region Handle resolution errors\nexport class HandleResolutionError extends Error {\n\toverride name = 'HandleResolutionError';\n}\n\nexport class DidNotFoundError extends HandleResolutionError {\n\toverride name = 'DidNotFoundError';\n\n\tconstructor(public handle: string) {\n\t\tsuper(`handle returned no did; handle=${handle}`);\n\t}\n}\n\nexport class FailedHandleResolutionError extends HandleResolutionError {\n\toverride name = 'FailedHandleResolutionError';\n\n\tconstructor(\n\t\tpublic handle: string,\n\t\toptions?: ErrorOptions,\n\t) {\n\t\tsuper(`failed to resolve handle; handle=${handle}`, options);\n\t}\n}\n\nexport class InvalidResolvedHandleError extends HandleResolutionError {\n\toverride name = 'InvalidResolvedHandleError';\n\n\tconstructor(\n\t\tpublic handle: string,\n\t\tpublic did: string,\n\t) {\n\t\tsuper(`handle returned invalid did; handle=${handle}; did=${did}`);\n\t}\n}\n\nexport class AmbiguousHandleError extends HandleResolutionError {\n\toverride name = 'AmbiguousHandleError';\n\n\tconstructor(handle: string) {\n\t\tsuper(`handle returned multiple did values; handle=${handle}`);\n\t}\n}\n// #endregion\n\n// #region Actor resolution errors\nexport class ActorResolutionError extends Error {\n\toverride name = 'ActorResolutionError';\n}\n// #endregion\n","import { extractDidMethod, type DidDocument } from '@atcute/identity';\nimport type { Did } from '@atcute/lexicons/syntax';\n\nimport * as err from '../errors.js';\nimport type { DidDocumentResolver, ResolveDidDocumentOptions } from '../types.js';\n\nexport interface CompositeDidDocumentResolverOptions<M extends string> {\n\tmethods: { [K in M]: DidDocumentResolver<K> };\n}\n\nexport class CompositeDidDocumentResolver<M extends string> implements DidDocumentResolver<M> {\n\t#methods: Map<string, DidDocumentResolver<M>>;\n\n\tconstructor({ methods }: CompositeDidDocumentResolverOptions<M>) {\n\t\tthis.#methods = new Map(Object.entries(methods));\n\t}\n\n\tasync resolve(did: Did<M>, options?: ResolveDidDocumentOptions): Promise<DidDocument> {\n\t\tconst method = extractDidMethod(did);\n\n\t\tconst resolver = this.#methods.get(method);\n\t\tif (resolver === undefined) {\n\t\t\tthrow new err.UnsupportedDidMethodError(did);\n\t\t}\n\n\t\treturn await resolver.resolve(did, options);\n\t}\n}\n","import type { DidDocument } from '@atcute/identity';\nimport type { Did } from '@atcute/lexicons/syntax';\nimport { FailedResponseError } from '@atcute/util-fetch';\n\nimport * as err from '../../errors.js';\nimport type { DidDocumentResolver, ResolveDidDocumentOptions } from '../../types.js';\nimport { fetchDocHandler } from '../utils.js';\n\nexport interface PlcDidDocumentResolverOptions {\n\tapiUrl?: string;\n\tfetch?: typeof fetch;\n}\n\nexport class PlcDidDocumentResolver implements DidDocumentResolver<'plc'> {\n\treadonly apiUrl: string;\n\t#fetch: typeof fetch;\n\n\tconstructor({\n\t\tapiUrl = 'https://plc.directory',\n\t\tfetch: fetchThis = fetch,\n\t}: PlcDidDocumentResolverOptions = {}) {\n\t\tthis.apiUrl = apiUrl;\n\t\tthis.#fetch = fetchThis;\n\t}\n\n\tasync resolve(did: Did<'plc'>, options?: ResolveDidDocumentOptions): Promise<DidDocument> {\n\t\t// quick sanity check\n\t\tif (!did.startsWith('did:plc:')) {\n\t\t\tthrow new err.UnsupportedDidMethodError(did);\n\t\t}\n\n\t\tlet json: DidDocument;\n\n\t\ttry {\n\t\t\tconst url = new URL(`/${encodeURIComponent(did)}`, this.apiUrl);\n\n\t\t\tconst response = await (0, this.#fetch)(url, {\n\t\t\t\tsignal: options?.signal,\n\t\t\t\tcache: options?.noCache ? 'no-cache' : undefined,\n\t\t\t\tredirect: 'manual',\n\t\t\t\theaders: { accept: 'application/did+ld+json,application/json' },\n\t\t\t});\n\n\t\t\tif (response.status >= 300 && response.status < 400) {\n\t\t\t\tthrow new TypeError(`unexpected redirect`);\n\t\t\t}\n\n\t\t\tconst handled = await fetchDocHandler(response);\n\n\t\t\tjson = handled.json;\n\t\t} catch (cause) {\n\t\t\tif (cause instanceof FailedResponseError && cause.status === 404) {\n\t\t\t\tthrow new err.DocumentNotFoundError(did);\n\t\t\t}\n\n\t\t\tthrow new err.FailedDocumentResolutionError(did, { cause });\n\t\t}\n\n\t\treturn json;\n\t}\n}\n","export * from './doh-json.js';\nexport * from './errors.js';\nexport * from './pipeline.js';\nexport * from './transformers.js';\n","import * as v from '@badrap/valita';\n\nimport { pipe } from './pipeline.js';\nimport { isResponseOk, parseResponseAsJson, validateJsonWith } from './transformers.js';\n\nconst uint32 = v.number().assert((input) => Number.isInteger(input) && input >= 0 && input <= 2 ** 32 - 1);\n\nconst question = v.object({\n\tname: v.string(),\n\ttype: v.literal(16), // TXT\n});\n\nconst answer = v.object({\n\tname: v.string(),\n\ttype: v.literal(16), // TXT\n\tTTL: uint32,\n\tdata: v.string().chain((input) => {\n\t\treturn v.ok(input.replace(/^\"|\"$/g, '').replace(/\\\\\"/g, '\"'));\n\t}),\n});\n\nconst authority = v.object({\n\tname: v.string(),\n\ttype: uint32,\n\tTTL: uint32,\n\tdata: v.string(),\n});\n\n/** DoH JSON response schema for TXT record queries */\nexport const dohJsonTxtResult = v.object({\n\t/** DNS response code */\n\tStatus: uint32,\n\t/** whether response is truncated */\n\tTC: v.boolean(),\n\t/** whether recursive desired bit is set, always true for Google and Cloudflare DoH */\n\tRD: v.boolean(),\n\t/** whether recursive available bit is set, always true for Google and Cloudflare DoH */\n\tRA: v.boolean(),\n\t/** whether response data was validated with DNSSEC */\n\tAD: v.boolean(),\n\t/** whether client asked to disable DNSSEC validation */\n\tCD: v.boolean(),\n\t/** requested records */\n\tQuestion: v.tuple([question]),\n\t/** answers */\n\tAnswer: v.array(answer).optional(() => []),\n\t/** authority */\n\tAuthority: v.array(authority).optional(),\n\t/** comment from the DNS server */\n\tComment: v.union(v.string(), v.array(v.string())).optional(),\n});\n\nexport type DohJsonTxtResult = v.Infer<typeof dohJsonTxtResult>;\n\n/** fetch handler pipeline for DoH JSON TXT record responses */\nexport const fetchDohJsonTxt = pipe(\n\tisResponseOk,\n\tparseResponseAsJson(/^application\\/(dns-)?json$/, 16 * 1024),\n\tvalidateJsonWith(dohJsonTxtResult, { mode: 'passthrough' }),\n);\n","type Transformer<I, O = I> = (input: I) => Promise<O>;\n\ntype PipelineInput<T extends readonly Transformer<any>[]> = T extends [Transformer<infer I, any>, ...any[]]\n\t? I\n\t: T extends Transformer<infer I, any>[]\n\t\t? I\n\t\t: never;\n\ntype PipelineOutput<T extends readonly Transformer<any>[]> = T extends [...any[], Transformer<any, infer O>]\n\t? O\n\t: T extends Transformer<any, infer O>[]\n\t\t? O\n\t\t: never;\n\ntype Pipeline<\n\tF extends readonly Transformer<any>[],\n\tAcc extends readonly Transformer<any>[] = [],\n> = F extends [Transformer<infer I, infer O>]\n\t? [...Acc, Transformer<I, O>]\n\t: F extends [Transformer<infer A, any>, ...infer Tail]\n\t\t? Tail extends [Transformer<infer B, any>, ...any[]]\n\t\t\t? Pipeline<Tail, [...Acc, Transformer<A, B>]>\n\t\t\t: Acc\n\t\t: Acc;\n\nexport function pipe(): never;\nexport function pipe<T extends readonly Transformer<any>[]>(\n\t...pipeline: Pipeline<T> extends T ? T : Pipeline<T>\n): (input: PipelineInput<T>) => Promise<PipelineOutput<T>>;\nexport function pipe<T extends readonly Transformer<any>[]>(\n\t...pipeline: Pipeline<T> extends T ? T : Pipeline<T>\n): (input: PipelineInput<T>) => Promise<PipelineOutput<T>> {\n\treturn pipeline.reduce(pipeTwo);\n}\n\nconst pipeTwo = <I, O, X = unknown>(\n\tfirst: Transformer<I, X>,\n\tsecond: Transformer<X, O>,\n): ((input: I) => Promise<O>) => {\n\treturn (input) => first(input).then(second);\n};\n","import * as v from '@badrap/valita';\n\nimport * as err from './errors.js';\nimport { SizeLimitStream } from './streams/size-limit.js';\n\nexport type TextResponse = {\n\tresponse: Response;\n\ttext: string;\n};\n\nexport type ParsedJsonResponse<T = unknown> = {\n\tresponse: Response;\n\tjson: T;\n};\n\nexport const isResponseOk = async (response: Response): Promise<Response> => {\n\tif (response.ok) {\n\t\treturn response;\n\t}\n\n\tthrow new err.FailedResponseError(response);\n};\n\nexport const readResponseAsText =\n\t(maxSize: number) =>\n\tasync (response: Response): Promise<TextResponse> => {\n\t\tconst text = await readResponse(response, maxSize);\n\t\treturn { response, text };\n\t};\n\nexport const parseResponseAsJson =\n\t(typeRegex: RegExp, maxSize: number) =>\n\tasync (response: Response): Promise<ParsedJsonResponse> => {\n\t\tawait assertContentType(response, typeRegex);\n\n\t\tconst text = await readResponse(response, maxSize);\n\n\t\ttry {\n\t\t\tconst json = JSON.parse(text);\n\t\t\treturn { response, json };\n\t\t} catch (error) {\n\t\t\tthrow new err.ImproperResponseError(`unexpected json data`, { cause: error });\n\t\t}\n\t};\n\ntype ParseOptions = NonNullable<Parameters<v.Type['parse']>[1]>;\n\nexport const validateJsonWith =\n\t<T>(schema: v.Type<T>, options?: ParseOptions) =>\n\tasync (parsed: ParsedJsonResponse): Promise<ParsedJsonResponse<T>> => {\n\t\tconst json = schema.parse(parsed.json, options);\n\t\treturn { response: parsed.response, json };\n\t};\n\nconst assertContentType = async (response: Response, typeRegex: RegExp): Promise<void> => {\n\tconst type = response.headers.get('content-type')?.split(';', 1)[0].trim();\n\n\tif (type === undefined) {\n\t\tif (response.body) {\n\t\t\tawait response.body.cancel();\n\t\t}\n\n\t\tthrow new err.ImproperContentTypeError(null, `missing response content-type`);\n\t}\n\n\tif (!typeRegex.test(type)) {\n\t\tif (response.body) {\n\t\t\tawait response.body.cancel();\n\t\t}\n\n\t\tthrow new err.ImproperContentTypeError(type, `unexpected response content-type`);\n\t}\n};\n\nconst readResponse = async (response: Response, maxSize: number): Promise<string> => {\n\tconst rawSize = response.headers.get('content-length');\n\tif (rawSize !== null) {\n\t\tconst size = Number(rawSize);\n\n\t\tif (!Number.isSafeInteger(size) || size <= 0) {\n\t\t\tresponse.body?.cancel();\n\t\t\tthrow new err.ImproperContentLengthError(maxSize, null, `invalid response content-length`);\n\t\t}\n\n\t\tif (size > maxSize) {\n\t\t\tresponse.body?.cancel();\n\t\t\tthrow new err.ImproperContentLengthError(maxSize, size, `response content-length too large`);\n\t\t}\n\t}\n\n\tconst stream = response\n\t\t.body!.pipeThrough(new SizeLimitStream(maxSize))\n\t\t.pipeThrough(new TextDecoderStream());\n\n\tlet text = '';\n\tfor await (const chunk of createStreamIterator(stream)) {\n\t\ttext += chunk;\n\t}\n\n\treturn text;\n};\n\nconst createStreamIterator: <T>(stream: ReadableStream<T>) => AsyncIterableIterator<T> =\n\tSymbol.asyncIterator in ReadableStream.prototype\n\t\t? (stream) => stream[Symbol.asyncIterator]()\n\t\t: (stream) => {\n\t\t\t\tconst reader = stream.getReader();\n\n\t\t\t\treturn {\n\t\t\t\t\t[Symbol.asyncIterator]() {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\tnext() {\n\t\t\t\t\t\treturn reader.read() as Promise<IteratorResult<any>>;\n\t\t\t\t\t},\n\t\t\t\t\tasync return() {\n\t\t\t\t\t\tawait reader.cancel();\n\t\t\t\t\t\treturn { done: true, value: undefined };\n\t\t\t\t\t},\n\t\t\t\t\tasync throw(error: unknown) {\n\t\t\t\t\t\tawait reader.cancel(error);\n\t\t\t\t\t\treturn { done: true, value: undefined };\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t};\n","export class FetchResponseError extends Error {\n\toverride name = 'FetchResponseError';\n}\n\nexport class FailedResponseError extends FetchResponseError {\n\toverride name = 'FailedResponseError';\n\n\tconstructor(public response: Response) {\n\t\tsuper(`got http ${response.status}`);\n\t}\n\n\tget status(): number {\n\t\treturn this.response.status;\n\t}\n}\n\nexport class ImproperContentTypeError extends FetchResponseError {\n\toverride name = 'ImproperContentTypeError';\n\n\tconstructor(\n\t\tpublic contentType: string | null,\n\t\treason: string,\n\t) {\n\t\tsuper(reason);\n\t}\n}\n\nexport class ImproperContentLengthError extends FetchResponseError {\n\toverride name = 'ImproperContentLengthError';\n\n\tconstructor(\n\t\tpublic expectedSize: number,\n\t\tpublic actualSize: number | null,\n\t\treason: string,\n\t) {\n\t\tsuper(reason);\n\t}\n}\n\nexport class ImproperResponseError extends FetchResponseError {\n\toverride name = 'ImproperResponseError';\n\n\tconstructor(reason: string, options?: ErrorOptions) {\n\t\tsuper(reason, options);\n\t}\n}\n","import * as err from '../errors.js';\n\nexport class SizeLimitStream extends TransformStream<Uint8Array<ArrayBuffer>, Uint8Array<ArrayBuffer>> {\n\tconstructor(maxSize: number) {\n\t\tlet bytesRead = 0;\n\n\t\tsuper({\n\t\t\ttransform(chunk, controller) {\n\t\t\t\tbytesRead += chunk.length;\n\n\t\t\t\tif (bytesRead > maxSize) {\n\t\t\t\t\tcontroller.error(\n\t\t\t\t\t\tnew err.ImproperContentLengthError(maxSize, bytesRead, `response content-length too large`),\n\t\t\t\t\t);\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcontroller.enqueue(chunk);\n\t\t\t},\n\t\t});\n\t}\n}\n","import { defs } from '@atcute/identity';\nimport { isResponseOk, parseResponseAsJson, pipe, validateJsonWith } from '@atcute/util-fetch';\n\nexport const fetchDocHandler = pipe(\n\tisResponseOk,\n\tparseResponseAsJson(/^application\\/(did\\+ld\\+)?json$/, 20 * 1024),\n\tvalidateJsonWith(defs.didDocument, { mode: 'passthrough' }),\n);\n","import { webDidToDocumentUrl, type DidDocument } from '@atcute/identity';\nimport type { Did } from '@atcute/lexicons/syntax';\nimport { FailedResponseError } from '@atcute/util-fetch';\n\nimport * as err from '../../errors.js';\nimport type { DidDocumentResolver, ResolveDidDocumentOptions } from '../../types.js';\nimport { fetchDocHandler } from '../utils.js';\n\nexport interface WebDidDocumentResolverOptions {\n\tfetch?: typeof fetch;\n}\n\nexport class WebDidDocumentResolver implements DidDocumentResolver<'web'> {\n\t#fetch: typeof fetch;\n\n\tconstructor({ fetch: fetchThis = fetch }: WebDidDocumentResolverOptions = {}) {\n\t\tthis.#fetch = fetchThis;\n\t}\n\n\tasync resolve(did: Did<'web'>, options?: ResolveDidDocumentOptions): Promise<DidDocument> {\n\t\t// quick sanity check\n\t\tif (!did.startsWith('did:web:')) {\n\t\t\tthrow new err.UnsupportedDidMethodError(did);\n\t\t}\n\n\t\tlet json: DidDocument;\n\n\t\ttry {\n\t\t\tconst url = webDidToDocumentUrl(did);\n\n\t\t\tconst response = await (0, this.#fetch)(url, {\n\t\t\t\tsignal: options?.signal,\n\t\t\t\tcache: options?.noCache ? 'no-cache' : undefined,\n\t\t\t\tredirect: 'manual',\n\t\t\t\theaders: { accept: 'application/did+ld+json,application/json' },\n\t\t\t});\n\n\t\t\tif (response.status >= 300 && response.status < 400) {\n\t\t\t\tthrow new TypeError(`unexpected redirect`);\n\t\t\t}\n\n\t\t\tconst handled = await fetchDocHandler(response);\n\n\t\t\tjson = handled.json;\n\t\t} catch (cause) {\n\t\t\tif (cause instanceof FailedResponseError && cause.status === 404) {\n\t\t\t\tthrow new err.DocumentNotFoundError(did);\n\t\t\t}\n\n\t\t\tthrow new err.FailedDocumentResolutionError(did, { cause });\n\t\t}\n\n\t\treturn json;\n\t}\n}\n\nexport class AtprotoWebDidDocumentResolver implements DidDocumentResolver<'web'> {\n\t#fetch: typeof fetch;\n\n\tconstructor({ fetch: fetchThis = fetch }: WebDidDocumentResolverOptions = {}) {\n\t\tthis.#fetch = fetchThis;\n\t}\n\n\tasync resolve(did: Did<'web'>, options?: ResolveDidDocumentOptions): Promise<DidDocument> {\n\t\t// quick sanity check\n\t\tif (!did.startsWith('did:web:')) {\n\t\t\tthrow new err.UnsupportedDidMethodError(did);\n\t\t}\n\n\t\tconst [host, ...paths] = did.slice(8).split(':').map(decodeURIComponent);\n\t\tconst url = new URL(`https://${host}/.well-known/did.json`);\n\n\t\tif (paths.length > 0) {\n\t\t\tthrow new err.ImproperDidError(did);\n\t\t}\n\n\t\tlet json: DidDocument;\n\n\t\ttry {\n\t\t\tconst response = await (0, this.#fetch)(url, {\n\t\t\t\tsignal: options?.signal,\n\t\t\t\tcache: options?.noCache ? 'no-cache' : undefined,\n\t\t\t\tredirect: 'manual',\n\t\t\t\theaders: { accept: 'application/did+ld+json,application/json' },\n\t\t\t});\n\n\t\t\tif (response.status >= 300 && response.status < 400) {\n\t\t\t\tthrow new TypeError(`unexpected redirect`);\n\t\t\t}\n\n\t\t\tconst handled = await fetchDocHandler(response);\n\n\t\t\tjson = handled.json;\n\t\t} catch (cause) {\n\t\t\tif (cause instanceof FailedResponseError && cause.status === 404) {\n\t\t\t\tthrow new err.DocumentNotFoundError(did);\n\t\t\t}\n\n\t\t\tthrow new err.FailedDocumentResolutionError(did, { cause });\n\t\t}\n\n\t\treturn json;\n\t}\n}\n","import { defs, type DidDocument } from '@atcute/identity';\nimport type { Did } from '@atcute/lexicons/syntax';\nimport {\n\tFailedResponseError,\n\tisResponseOk,\n\tparseResponseAsJson,\n\tpipe,\n\tvalidateJsonWith,\n} from '@atcute/util-fetch';\n\nimport * as v from '@badrap/valita';\n\nimport * as err from '../../errors.js';\nimport type { DidDocumentResolver, ResolveDidDocumentOptions } from '../../types.js';\n\nconst fetchXrpcHandler = pipe(\n\tisResponseOk,\n\tparseResponseAsJson(/^application\\/json$/, 20 * 1024 + 16),\n\tvalidateJsonWith(v.object({ didDoc: defs.didDocument }), { mode: 'passthrough' }),\n);\n\nexport interface XrpcDidDocumentResolverOptions {\n\tserviceUrl: string;\n\tfetch?: typeof fetch;\n}\n\nexport class XrpcDidDocumentResolver implements DidDocumentResolver<string> {\n\treadonly serviceUrl: string;\n\t#fetch: typeof fetch;\n\n\tconstructor({ serviceUrl, fetch: fetchThis = fetch }: XrpcDidDocumentResolverOptions) {\n\t\tthis.serviceUrl = serviceUrl;\n\t\tthis.#fetch = fetchThis;\n\t}\n\n\tasync resolve(did: Did, options?: ResolveDidDocumentOptions): Promise<DidDocument> {\n\t\tlet json: DidDocument;\n\n\t\ttry {\n\t\t\tconst url = new URL(`/xrpc/com.atproto.identity.resolveDid`, this.serviceUrl);\n\t\t\turl.searchParams.set('did', did);\n\n\t\t\tconst response = await (0, this.#fetch)(url, {\n\t\t\t\tsignal: options?.signal,\n\t\t\t\tcache: options?.noCache ? 'no-cache' : undefined,\n\t\t\t\theaders: { accept: 'application/json' },\n\t\t\t});\n\n\t\t\tconst handled = await fetchXrpcHandler(response);\n\n\t\t\tjson = handled.json.didDoc;\n\t\t} catch (cause) {\n\t\t\tif (cause instanceof FailedResponseError && cause.status === 404) {\n\t\t\t\tthrow new err.DocumentNotFoundError(did);\n\t\t\t}\n\n\t\t\tthrow new err.FailedDocumentResolutionError(did, { cause });\n\t\t}\n\n\t\treturn json;\n\t}\n}\n","import type { AtprotoDid, Handle } from '@atcute/lexicons/syntax';\n\nimport * as err from '../errors.js';\nimport type { HandleResolver, ResolveHandleOptions } from '../types.js';\n\nexport type CompositeStrategy = 'http-first' | 'dns-first' | 'race' | 'both';\n\nexport interface CompositeHandleResolverOptions {\n\t/** controls how the resolution is done, defaults to 'race' */\n\tstrategy?: CompositeStrategy;\n\t/** the methods to use for resolving the handle. */\n\tmethods: Record<'http' | 'dns', HandleResolver>;\n}\n\nexport class CompositeHandleResolver implements HandleResolver {\n\t#methods: Record<'http' | 'dns', HandleResolver>;\n\tstrategy: CompositeStrategy;\n\n\tconstructor({ methods, strategy = 'race' }: CompositeHandleResolverOptions) {\n\t\tthis.#methods = methods;\n\t\tthis.strategy = strategy;\n\t}\n\n\tasync resolve(handle: Handle, options?: ResolveHandleOptions): Promise<AtprotoDid> {\n\t\tconst { http, dns } = this.#methods;\n\n\t\tconst parentSignal = options?.signal;\n\t\tconst controller = new AbortController();\n\t\tif (parentSignal) {\n\t\t\tparentSignal.addEventListener('abort', () => controller.abort(), { signal: controller.signal });\n\t\t}\n\n\t\tconst dnsPromise = dns.resolve(handle, { ...options, signal: controller.signal });\n\t\tconst httpPromise = http.resolve(handle, { ...options, signal: controller.signal });\n\n\t\tswitch (this.strategy) {\n\t\t\tcase 'race': {\n\t\t\t\treturn new Promise((resolve) => {\n\t\t\t\t\tdnsPromise.then(\n\t\t\t\t\t\t(did) => {\n\t\t\t\t\t\t\tcontroller.abort();\n\t\t\t\t\t\t\tresolve(did);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t() => resolve(httpPromise),\n\t\t\t\t\t);\n\n\t\t\t\t\thttpPromise.then(\n\t\t\t\t\t\t(did) => {\n\t\t\t\t\t\t\tcontroller.abort();\n\t\t\t\t\t\t\tresolve(did);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t() => resolve(dnsPromise),\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t\tcase 'dns-first': {\n\t\t\t\thttpPromise.catch(noop);\n\n\t\t\t\tconst resolved = await dnsPromise.catch(noop);\n\t\t\t\tif (resolved) {\n\t\t\t\t\tcontroller.abort();\n\t\t\t\t\treturn resolved;\n\t\t\t\t}\n\n\t\t\t\treturn httpPromise;\n\t\t\t}\n\t\t\tcase 'http-first': {\n\t\t\t\tdnsPromise.catch(noop);\n\n\t\t\t\tconst resolved = await httpPromise.catch(noop);\n\t\t\t\tif (resolved) {\n\t\t\t\t\tcontroller.abort();\n\t\t\t\t\treturn resolved;\n\t\t\t\t}\n\n\t\t\t\treturn dnsPromise;\n\t\t\t}\n\t\t\tcase 'both': {\n\t\t\t\tconst [dnsResponse, httpResponse] = await Promise.allSettled([dnsPromise, httpPromise]);\n\n\t\t\t\tconst dnsDid = dnsResponse.status === 'fulfilled' ? dnsResponse.value : undefined;\n\t\t\t\tconst httpDid = httpResponse.status === 'fulfilled' ? httpResponse.value : undefined;\n\n\t\t\t\tif (dnsDid && httpDid && dnsDid !== httpDid) {\n\t\t\t\t\tthrow new err.AmbiguousHandleError(handle);\n\t\t\t\t}\n\n\t\t\t\treturn dnsDid || httpDid || dnsPromise;\n\t\t\t}\n\t\t}\n\t}\n}\n\nconst noop = () => {};\n","import { isAtprotoDid } from '@atcute/identity';\nimport type { AtprotoDid, Handle } from '@atcute/lexicons/syntax';\nimport { type DohJsonTxtResult, fetchDohJsonTxt } from '@atcute/util-fetch';\n\nimport * as err from '../../errors.js';\nimport type { HandleResolver, ResolveHandleOptions } from '../../types.js';\n\nconst SUBDOMAIN = '_atproto';\nconst PREFIX = 'did=';\n\nexport interface DohJsonHandleResolverOptions {\n\tdohUrl: string;\n\tfetch?: typeof fetch;\n}\n\nexport class DohJsonHandleResolver implements HandleResolver {\n\treadonly dohUrl: string;\n\t#fetch: typeof fetch;\n\n\tconstructor({ dohUrl, fetch: fetchThis = fetch }: DohJsonHandleResolverOptions) {\n\t\tthis.dohUrl = dohUrl;\n\t\tthis.#fetch = fetchThis;\n\t}\n\n\tasync resolve(handle: Handle, options?: ResolveHandleOptions): Promise<AtprotoDid> {\n\t\tlet json: DohJsonTxtResult;\n\n\t\ttry {\n\t\t\tconst url = new URL(this.dohUrl);\n\t\t\turl.searchParams.set('name', `${SUBDOMAIN}.${handle}`);\n\t\t\turl.searchParams.set('type', 'TXT');\n\n\t\t\tconst response = await (0, this.#fetch)(url, {\n\t\t\t\tsignal: options?.signal,\n\t\t\t\tcache: options?.noCache ? 'no-cache' : undefined,\n\t\t\t\theaders: { accept: 'application/dns-json' },\n\t\t\t});\n\n\t\t\tconst handled = await fetchDohJsonTxt(response);\n\n\t\t\tjson = handled.json;\n\t\t} catch (cause) {\n\t\t\tthrow new err.FailedHandleResolutionError(handle, { cause });\n\t\t}\n\n\t\tconst status = json.Status;\n\t\tconst answers = json.Answer;\n\n\t\tif (status !== 0 /* NOERROR */) {\n\t\t\tif (status === 3 /* NXDOMAIN */) {\n\t\t\t\tthrow new err.DidNotFoundError(handle);\n\t\t\t}\n\n\t\t\tthrow new err.FailedHandleResolutionError(handle, {\n\t\t\t\tcause: new TypeError(`dns returned ${status}`),\n\t\t\t});\n\t\t}\n\n\t\tfor (let i = 0, il = answers.length; i < il; i++) {\n\t\t\tconst answer = answers[i];\n\t\t\tconst data = answer.data;\n\n\t\t\tif (!data.startsWith(PREFIX)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tfor (let j = i + 1; j < il; j++) {\n\t\t\t\tconst data = answers[j].data;\n\t\t\t\tif (data.startsWith(PREFIX)) {\n\t\t\t\t\tthrow new err.AmbiguousHandleError(handle);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst did = data.slice(PREFIX.length);\n\t\t\tif (!isAtprotoDid(did)) {\n\t\t\t\tthrow new err.InvalidResolvedHandleError(handle, did);\n\t\t\t}\n\n\t\t\treturn did;\n\t\t}\n\n\t\t// theoretically this shouldn't happen, it should've returned NXDOMAIN\n\t\tthrow new err.DidNotFoundError(handle);\n\t}\n}\n","import { isAtprotoDid } from '@atcute/identity';\nimport type { AtprotoDid, Handle } from '@atcute/lexicons/syntax';\nimport { FailedResponseError, isResponseOk, pipe, readResponseAsText } from '@atcute/util-fetch';\n\nimport * as err from '../../errors.js';\nimport type { HandleResolver, ResolveHandleOptions } from '../../types.js';\n\nexport interface WellKnownHandleResolverOptions {\n\tfetch?: typeof fetch;\n}\n\nconst fetchWellKnownHandler = pipe(isResponseOk, readResponseAsText(2048 + 16));\n\nexport class WellKnownHandleResolver implements HandleResolver {\n\t#fetch: typeof fetch;\n\n\tconstructor({ fetch: fetchThis = fetch }: WellKnownHandleResolverOptions = {}) {\n\t\tthis.#fetch = fetchThis;\n\t}\n\n\tasync resolve(handle: Handle, options?: ResolveHandleOptions): Promise<AtprotoDid> {\n\t\tlet text: string;\n\n\t\ttry {\n\t\t\tconst url = new URL('/.well-known/atproto-did', `https://${handle}`);\n\n\t\t\tconst response = await (0, this.#fetch)(url, {\n\t\t\t\tsignal: options?.signal,\n\t\t\t\tcache: options?.noCache ? 'no-cache' : undefined,\n\t\t\t\tredirect: 'manual',\n\t\t\t});\n\n\t\t\tif (response.status >= 300 && response.status < 400) {\n\t\t\t\tthrow new TypeError(`unexpected redirect`);\n\t\t\t}\n\n\t\t\tconst handled = await fetchWellKnownHandler(response);\n\n\t\t\ttext = handled.text;\n\t\t} catch (cause) {\n\t\t\tif (cause instanceof FailedResponseError && cause.status === 404) {\n\t\t\t\tthrow new err.DidNotFoundError(handle);\n\t\t\t}\n\n\t\t\tthrow new err.FailedHandleResolutionError(handle, { cause });\n\t\t}\n\n\t\tconst did = text.split('\\n')[0]!.trim();\n\t\tif (!isAtprotoDid(did)) {\n\t\t\tthrow new err.InvalidResolvedHandleError(handle, did);\n\t\t}\n\n\t\treturn did;\n\t}\n}\n","import * as v from '@badrap/valita';\n\nimport { isAtprotoDid } from '@atcute/identity';\nimport type { AtprotoDid, Handle } from '@atcute/lexicons/syntax';\nimport {\n\tFailedResponseError,\n\tisResponseOk,\n\tparseResponseAsJson,\n\tpipe,\n\tvalidateJsonWith,\n} from '@atcute/util-fetch';\n\nimport * as err from '../../errors.js';\nimport type { HandleResolver, ResolveHandleOptions } from '../../types.js';\n\nconst response = v.object({\n\tdid: v.string().assert((input) => isAtprotoDid(input)),\n});\n\nconst fetchXrpcHandler = pipe(\n\tisResponseOk,\n\tparseResponseAsJson(/^application\\/json$/, 4 * 1024),\n\tvalidateJsonWith(response, { mode: 'passthrough' }),\n);\n\nexport interface XrpcHandleResolverOptions {\n\tserviceUrl: string;\n\tfetch?: typeof fetch;\n}\n\nexport class XrpcHandleResolver implements HandleResolver {\n\treadonly serviceUrl: string;\n\t#fetch: typeof fetch;\n\n\tconstructor({ serviceUrl, fetch: fetchThis = fetch }: XrpcHandleResolverOptions) {\n\t\tthis.serviceUrl = serviceUrl;\n\t\tthis.#fetch = fetchThis;\n\t}\n\n\tasync resolve(handle: Handle, options?: ResolveHandleOptions): Promise<AtprotoDid> {\n\t\tlet json: v.Infer<typeof response>;\n\n\t\ttry {\n\t\t\tconst url = new URL(`/xrpc/com.atproto.identity.resolveHandle`, this.serviceUrl);\n\t\t\turl.searchParams.set('handle', handle);\n\n\t\t\tconst response = await (0, this.#fetch)(url, {\n\t\t\t\tsignal: options?.signal,\n\t\t\t\tcache: options?.noCache ? 'no-cache' : undefined,\n\t\t\t\theaders: { accept: 'application/json' },\n\t\t\t});\n\n\t\t\tconst handled = await fetchXrpcHandler(response);\n\n\t\t\tjson = handled.json;\n\t\t} catch (cause) {\n\t\t\tif (cause instanceof FailedResponseError && cause.status === 400) {\n\t\t\t\tthrow new err.DidNotFoundError(handle);\n\t\t\t}\n\n\t\t\tthrow new err.FailedHandleResolutionError(handle, { cause });\n\t\t}\n\n\t\treturn json.did;\n\t}\n}\n","export {};\n//# sourceMappingURL=types.js.map"],"mappings":"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","names":["ok","err","ValitaError","literal","object","record","array","tuple","union","expiresAt","response","fromBase64Url","toBase64Url","HAS_NATIVE_SUPPORT","fromBase64Url","HAS_NATIVE_SUPPORT","toBase64Url","_fromCharCode","ALPHABET","toBase64Url","toBase64Url","toBase64Url","err","err","response","pending","response","url","response","err","fromBase64Url","value","err","response","response","service","isUrlParseSupported","err","FetchResponseError","response","response","response","response","fetchXrpcHandler","response"],"sourceRoot":"file:///var/home/toko/Code/tokono.ma/diffuse-artifacts/diffuse","file":"/chunk-BP7OSAES.js.map"}
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CMU4QLMC.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CMU4QLMC.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CMU4QLMC.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CMU4QLMC.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CNO46O5F.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CNO46O5F.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CNO46O5F.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CNO46O5F.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CPN2PPDQ.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CPN2PPDQ.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CPN2PPDQ.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CPN2PPDQ.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CPS76EE2.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CPS76EE2.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CPS76EE2.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CPS76EE2.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CXGVZUBI.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CXGVZUBI.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-CXGVZUBI.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-CXGVZUBI.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-DUCTMCPX.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-DUCTMCPX.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-DUCTMCPX.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-DUCTMCPX.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EEUCFWD4.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EEUCFWD4.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EEUCFWD4.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EEUCFWD4.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EEVL24MR.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EEVL24MR.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EEVL24MR.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EEVL24MR.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EJ2QF5QE.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EJ2QF5QE.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EJ2QF5QE.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EJ2QF5QE.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EMWRB7HX.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EMWRB7HX.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EMWRB7HX.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EMWRB7HX.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-ERP4MUHU.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-ERP4MUHU.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-ERP4MUHU.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-ERP4MUHU.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EY2MBHBU.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EY2MBHBU.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-EY2MBHBU.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-EY2MBHBU.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FAW4EB7G.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FAW4EB7G.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FAW4EB7G.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FAW4EB7G.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FIWHH4Y5.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FIWHH4Y5.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FIWHH4Y5.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FIWHH4Y5.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FVPZU4QY.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FVPZU4QY.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FVPZU4QY.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FVPZU4QY.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FVTTELAZ.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FVTTELAZ.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FVTTELAZ.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FVTTELAZ.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FZQXS3RE.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FZQXS3RE.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-FZQXS3RE.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-FZQXS3RE.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-G2ZO6QIY.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-G2ZO6QIY.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-G2ZO6QIY.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-G2ZO6QIY.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-G56PUJUJ.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-G56PUJUJ.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-G56PUJUJ.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-G56PUJUJ.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-GMLGV4UU.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-GMLGV4UU.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-GMLGV4UU.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-GMLGV4UU.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-GSA3UBRU.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-GSA3UBRU.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-GSA3UBRU.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-GSA3UBRU.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-GX3WPNEX.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-GX3WPNEX.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-GX3WPNEX.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-GX3WPNEX.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-H3WG7GN4.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-H3WG7GN4.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-H3WG7GN4.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-H3WG7GN4.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HDWTLLD6.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HDWTLLD6.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HDWTLLD6.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HDWTLLD6.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HLQZU6M2.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HLQZU6M2.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HLQZU6M2.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HLQZU6M2.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HN4F5JEZ.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HN4F5JEZ.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HN4F5JEZ.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HN4F5JEZ.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HNTKRGE7.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HNTKRGE7.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HNTKRGE7.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HNTKRGE7.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HRGYPYP6.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HRGYPYP6.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-HRGYPYP6.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-HRGYPYP6.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-IPY3IZ42.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-IPY3IZ42.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-IPY3IZ42.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-IPY3IZ42.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-J34EA5F4.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-J34EA5F4.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-J34EA5F4.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-J34EA5F4.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JEKGVPZ5.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JEKGVPZ5.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JEKGVPZ5.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JEKGVPZ5.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JQFGN3M7.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JQFGN3M7.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JQFGN3M7.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JQFGN3M7.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JS4TF33K.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JS4TF33K.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JS4TF33K.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JS4TF33K.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JSOX7OQB.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JSOX7OQB.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JSOX7OQB.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JSOX7OQB.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JUPK7PXD.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JUPK7PXD.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-JUPK7PXD.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-JUPK7PXD.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-KGUWC6A2.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-KGUWC6A2.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-KGUWC6A2.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-KGUWC6A2.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-KIMDMO5U.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-KIMDMO5U.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-KIMDMO5U.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-KIMDMO5U.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-LGC5DXHT.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-LGC5DXHT.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-LGC5DXHT.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-LGC5DXHT.js.map
-683
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-LPLLWF34.js
···
1
1
-
import {
2
2
-
OAuthUserAgent,
3
3
-
login,
4
4
-
logout,
5
5
-
restoreOrFinalize
6
6
-
} from "./chunk-BP7OSAES.js";
7
7
-
import {
8
8
-
outputManager
9
9
-
} from "./chunk-S4RHYXDI.js";
10
10
-
import {
11
11
-
BroadcastableDiffuseElement
12
12
-
} from "./chunk-FIWHH4Y5.js";
13
13
-
import {
14
14
-
signal
15
15
-
} from "./chunk-KIMDMO5U.js";
16
16
-
import {
17
17
-
__name,
18
18
-
init_Buffer,
19
19
-
init_process
20
20
-
} from "./chunk-FZQXS3RE.js";
21
21
-
22
22
-
// components/output/raw/atproto/element.js
23
23
-
init_Buffer();
24
24
-
init_process();
25
25
-
26
26
-
// ../node_modules/.deno/@atcute+client@4.2.1/node_modules/@atcute/client/dist/index.js
27
27
-
init_Buffer();
28
28
-
init_process();
29
29
-
30
30
-
// ../node_modules/.deno/@atcute+client@4.2.1/node_modules/@atcute/client/dist/client.js
31
31
-
init_Buffer();
32
32
-
init_process();
33
33
-
34
34
-
// ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/validations/index.js
35
35
-
init_Buffer();
36
36
-
init_process();
37
37
-
38
38
-
// ../node_modules/.deno/@atcute+util-text@1.1.1/node_modules/@atcute/util-text/dist/index.js
39
39
-
init_Buffer();
40
40
-
init_process();
41
41
-
var segmenter = new Intl.Segmenter();
42
42
-
43
43
-
// ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/interfaces/bytes.js
44
44
-
init_Buffer();
45
45
-
init_process();
46
46
-
47
47
-
// ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/interfaces/index.js
48
48
-
init_Buffer();
49
49
-
init_process();
50
50
-
51
51
-
// ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/interfaces/blob.js
52
52
-
init_Buffer();
53
53
-
init_process();
54
54
-
55
55
-
// ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/interfaces/cid-link.js
56
56
-
init_Buffer();
57
57
-
init_process();
58
58
-
59
59
-
// ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/validations/utils.js
60
60
-
init_Buffer();
61
61
-
init_process();
62
62
-
63
63
-
// ../node_modules/.deno/@atcute+lexicons@1.2.9/node_modules/@atcute/lexicons/dist/validations/index.js
64
64
-
var xrpcSchemaGenerated = false;
65
65
-
var ok = /* @__PURE__ */ __name(/* @__NO_SIDE_EFFECTS__ */ (value) => {
66
66
-
return { ok: true, value };
67
67
-
}, "ok");
68
68
-
var FLAG_EMPTY = 0;
69
69
-
var FLAG_ABORT_EARLY = 1 << 0;
70
70
-
var cloneIssueWithPath = /* @__PURE__ */ __name((issue, path) => {
71
71
-
const { ok: _ok, msg: _fmt, ...clone } = issue;
72
72
-
return { ...clone, path };
73
73
-
}, "cloneIssueWithPath");
74
74
-
var collectIssues = /* @__PURE__ */ __name((tree, path = [], issues = []) => {
75
75
-
for (; ; ) {
76
76
-
switch (tree.code) {
77
77
-
case "join": {
78
78
-
collectIssues(tree.left, path.slice(), issues);
79
79
-
tree = tree.right;
80
80
-
continue;
81
81
-
}
82
82
-
case "prepend": {
83
83
-
path.push(tree.key);
84
84
-
tree = tree.tree;
85
85
-
continue;
86
86
-
}
87
87
-
default: {
88
88
-
issues.push(cloneIssueWithPath(tree, path));
89
89
-
return issues;
90
90
-
}
91
91
-
}
92
92
-
}
93
93
-
}, "collectIssues");
94
94
-
var countIssues = /* @__PURE__ */ __name((tree) => {
95
95
-
let count = 0;
96
96
-
for (; ; ) {
97
97
-
switch (tree.code) {
98
98
-
case "join": {
99
99
-
count += countIssues(tree.left);
100
100
-
tree = tree.right;
101
101
-
continue;
102
102
-
}
103
103
-
case "prepend": {
104
104
-
tree = tree.tree;
105
105
-
continue;
106
106
-
}
107
107
-
default: {
108
108
-
return count + 1;
109
109
-
}
110
110
-
}
111
111
-
}
112
112
-
}, "countIssues");
113
113
-
var formatIssueTree = /* @__PURE__ */ __name((tree) => {
114
114
-
let path = "";
115
115
-
let count = 0;
116
116
-
for (; ; ) {
117
117
-
switch (tree.code) {
118
118
-
case "join": {
119
119
-
count += countIssues(tree.right);
120
120
-
tree = tree.left;
121
121
-
continue;
122
122
-
}
123
123
-
case "prepend": {
124
124
-
path += `.${tree.key}`;
125
125
-
tree = tree.tree;
126
126
-
continue;
127
127
-
}
128
128
-
}
129
129
-
break;
130
130
-
}
131
131
-
const message = tree.msg();
132
132
-
let msg = `${tree.code} at ${path || "."} (${message})`;
133
133
-
if (count > 0) {
134
134
-
msg += ` (+${count} other issue(s))`;
135
135
-
}
136
136
-
return msg;
137
137
-
}, "formatIssueTree");
138
138
-
var ValidationError = class extends Error {
139
139
-
static {
140
140
-
__name(this, "ValidationError");
141
141
-
}
142
142
-
name = "ValidationError";
143
143
-
#issueTree;
144
144
-
constructor(issueTree) {
145
145
-
super();
146
146
-
this.#issueTree = issueTree;
147
147
-
}
148
148
-
get message() {
149
149
-
return formatIssueTree(this.#issueTree);
150
150
-
}
151
151
-
get issues() {
152
152
-
return collectIssues(this.#issueTree);
153
153
-
}
154
154
-
};
155
155
-
var ErrImpl = class {
156
156
-
static {
157
157
-
__name(this, "ErrImpl");
158
158
-
}
159
159
-
ok = false;
160
160
-
#issueTree;
161
161
-
constructor(issueTree) {
162
162
-
this.#issueTree = issueTree;
163
163
-
}
164
164
-
get message() {
165
165
-
return formatIssueTree(this.#issueTree);
166
166
-
}
167
167
-
get issues() {
168
168
-
return collectIssues(this.#issueTree);
169
169
-
}
170
170
-
throw() {
171
171
-
throw new ValidationError(this.#issueTree);
172
172
-
}
173
173
-
};
174
174
-
var safeParse = /* @__PURE__ */ __name(/* @__NO_SIDE_EFFECTS__ */ (schema, input) => {
175
175
-
const r = schema["~run"](input, FLAG_EMPTY);
176
176
-
if (r === void 0) {
177
177
-
return /* @__PURE__ */ ok(input);
178
178
-
}
179
179
-
if (r.ok) {
180
180
-
return r;
181
181
-
}
182
182
-
return new ErrImpl(r);
183
183
-
}, "safeParse");
184
184
-
185
185
-
// ../node_modules/.deno/@atcute+client@4.2.1/node_modules/@atcute/client/dist/fetch-handler.js
186
186
-
init_Buffer();
187
187
-
init_process();
188
188
-
var buildFetchHandler = /* @__PURE__ */ __name((handler) => {
189
189
-
if (typeof handler === "object") {
190
190
-
return handler.handle.bind(handler);
191
191
-
}
192
192
-
return handler;
193
193
-
}, "buildFetchHandler");
194
194
-
195
195
-
// ../node_modules/.deno/@atcute+client@4.2.1/node_modules/@atcute/client/dist/client.js
196
196
-
var JSON_CONTENT_TYPE_RE = /\bapplication\/json\b/;
197
197
-
var Client = class _Client {
198
198
-
static {
199
199
-
__name(this, "Client");
200
200
-
}
201
201
-
handler;
202
202
-
proxy;
203
203
-
constructor({ handler, proxy = null }) {
204
204
-
this.handler = buildFetchHandler(handler);
205
205
-
this.proxy = proxy;
206
206
-
}
207
207
-
/**
208
208
-
* clones this XRPC client
209
209
-
* @param opts options to merge with
210
210
-
* @returns the cloned XRPC client
211
211
-
*/
212
212
-
clone({ handler = this.handler, proxy = this.proxy } = {}) {
213
213
-
return new _Client({ handler, proxy });
214
214
-
}
215
215
-
get(name, options = {}) {
216
216
-
return this.#perform("get", name, options);
217
217
-
}
218
218
-
post(name, options = {}) {
219
219
-
return this.#perform("post", name, options);
220
220
-
}
221
221
-
async call(schema, options = {}) {
222
222
-
if (!xrpcSchemaGenerated) {
223
223
-
return;
224
224
-
}
225
225
-
if ("mainSchema" in schema) {
226
226
-
schema = schema.mainSchema;
227
227
-
}
228
228
-
if (schema.params !== null) {
229
229
-
const paramsResult = safeParse(schema.params, options.params);
230
230
-
if (!paramsResult.ok) {
231
231
-
throw new ClientValidationError("params", paramsResult);
232
232
-
}
233
233
-
}
234
234
-
if (schema.type === "xrpc_procedure" && schema.input?.type === "lex") {
235
235
-
const inputResult = safeParse(schema.input.schema, options.input);
236
236
-
if (!inputResult.ok) {
237
237
-
throw new ClientValidationError("input", inputResult);
238
238
-
}
239
239
-
}
240
240
-
const isQuery = schema.type === "xrpc_query";
241
241
-
const method = isQuery ? "get" : "post";
242
242
-
if (options.as === void 0 && schema.output?.type === "blob") {
243
243
-
throw new TypeError(`\`as\` option is required for endpoints returning blobs`);
244
244
-
}
245
245
-
const format = options.as !== void 0 ? options.as : schema.output?.type === "lex" ? "json" : null;
246
246
-
const response = await this.#perform(method, schema.nsid, {
247
247
-
params: options.params,
248
248
-
input: isQuery ? void 0 : options.input,
249
249
-
as: format,
250
250
-
signal: options.signal,
251
251
-
headers: options.headers
252
252
-
});
253
253
-
if (format === "json" && response.ok && schema.output?.type === "lex") {
254
254
-
const outputResult = safeParse(schema.output.schema, response.data);
255
255
-
if (!outputResult.ok) {
256
256
-
throw new ClientValidationError("output", outputResult);
257
257
-
}
258
258
-
return {
259
259
-
ok: true,
260
260
-
status: response.status,
261
261
-
headers: response.headers,
262
262
-
data: outputResult.value
263
263
-
};
264
264
-
}
265
265
-
return response;
266
266
-
}
267
267
-
async #perform(method, name, { signal: signal2, as: format = "json", headers, input, params }) {
268
268
-
const isWebInput = input && (input instanceof Blob || ArrayBuffer.isView(input) || input instanceof ArrayBuffer || input instanceof ReadableStream);
269
269
-
const url = `/xrpc/${name}` + _constructSearchParams(params);
270
270
-
const response = await this.handler(url, {
271
271
-
method,
272
272
-
signal: signal2,
273
273
-
body: input && !isWebInput ? JSON.stringify(input) : input,
274
274
-
headers: _mergeHeaders(headers, {
275
275
-
"content-type": input && !isWebInput ? "application/json" : null,
276
276
-
"atproto-proxy": _constructProxyHeader(this.proxy)
277
277
-
}),
278
278
-
duplex: input instanceof ReadableStream ? "half" : void 0
279
279
-
});
280
280
-
{
281
281
-
const status = response.status;
282
282
-
const headers2 = response.headers;
283
283
-
const type = headers2.get("content-type");
284
284
-
if (status !== 200) {
285
285
-
let json;
286
286
-
if (type != null && JSON_CONTENT_TYPE_RE.test(type)) {
287
287
-
try {
288
288
-
const parsed = await response.json();
289
289
-
if (isXRPCErrorPayload(parsed)) {
290
290
-
json = parsed;
291
291
-
}
292
292
-
} catch {
293
293
-
}
294
294
-
} else {
295
295
-
await response.body?.cancel();
296
296
-
}
297
297
-
return {
298
298
-
ok: false,
299
299
-
status,
300
300
-
headers: headers2,
301
301
-
data: json ?? {
302
302
-
error: `UnknownXRPCError`,
303
303
-
message: `Request failed with status code ${status}`
304
304
-
}
305
305
-
};
306
306
-
}
307
307
-
{
308
308
-
let data;
309
309
-
switch (format) {
310
310
-
case "json": {
311
311
-
if (type != null && JSON_CONTENT_TYPE_RE.test(type)) {
312
312
-
data = await response.json();
313
313
-
} else {
314
314
-
await response.body?.cancel();
315
315
-
throw new TypeError(`Invalid response content-type (got ${type})`);
316
316
-
}
317
317
-
break;
318
318
-
}
319
319
-
case null: {
320
320
-
data = null;
321
321
-
await response.body?.cancel();
322
322
-
break;
323
323
-
}
324
324
-
case "blob": {
325
325
-
data = await response.blob();
326
326
-
break;
327
327
-
}
328
328
-
case "bytes": {
329
329
-
data = new Uint8Array(await response.arrayBuffer());
330
330
-
break;
331
331
-
}
332
332
-
case "stream": {
333
333
-
data = response.body;
334
334
-
break;
335
335
-
}
336
336
-
}
337
337
-
return {
338
338
-
ok: true,
339
339
-
status,
340
340
-
headers: headers2,
341
341
-
data
342
342
-
};
343
343
-
}
344
344
-
}
345
345
-
}
346
346
-
};
347
347
-
var _constructSearchParams = /* @__PURE__ */ __name((params) => {
348
348
-
let searchParams;
349
349
-
for (const key in params) {
350
350
-
const value = params[key];
351
351
-
if (value !== void 0) {
352
352
-
searchParams ??= new URLSearchParams();
353
353
-
if (Array.isArray(value)) {
354
354
-
for (let idx = 0, len = value.length; idx < len; idx++) {
355
355
-
const val = value[idx];
356
356
-
searchParams.append(key, "" + val);
357
357
-
}
358
358
-
} else {
359
359
-
searchParams.set(key, "" + value);
360
360
-
}
361
361
-
}
362
362
-
}
363
363
-
return searchParams ? `?` + searchParams.toString() : "";
364
364
-
}, "_constructSearchParams");
365
365
-
var _constructProxyHeader = /* @__PURE__ */ __name((proxy) => {
366
366
-
if (proxy != null) {
367
367
-
return `${proxy.did}${proxy.serviceId}`;
368
368
-
}
369
369
-
return null;
370
370
-
}, "_constructProxyHeader");
371
371
-
var _mergeHeaders = /* @__PURE__ */ __name((init, defaults) => {
372
372
-
let headers;
373
373
-
for (const name in defaults) {
374
374
-
const value = defaults[name];
375
375
-
if (value !== null) {
376
376
-
headers ??= new Headers(init);
377
377
-
if (!headers.has(name)) {
378
378
-
headers.set(name, value);
379
379
-
}
380
380
-
}
381
381
-
}
382
382
-
return headers ?? init;
383
383
-
}, "_mergeHeaders");
384
384
-
var isXRPCErrorPayload = /* @__PURE__ */ __name((input) => {
385
385
-
if (typeof input !== "object" || input == null) {
386
386
-
return false;
387
387
-
}
388
388
-
const kindType = typeof input.error;
389
389
-
const messageType = typeof input.message;
390
390
-
return kindType === "string" && (messageType === "undefined" || messageType === "string");
391
391
-
}, "isXRPCErrorPayload");
392
392
-
var ok2 = /* @__PURE__ */ __name((input) => {
393
393
-
if (input instanceof Promise) {
394
394
-
return input.then(ok2);
395
395
-
}
396
396
-
if (input.ok) {
397
397
-
return input.data;
398
398
-
}
399
399
-
throw new ClientResponseError(input);
400
400
-
}, "ok");
401
401
-
var ClientResponseError = class extends Error {
402
402
-
static {
403
403
-
__name(this, "ClientResponseError");
404
404
-
}
405
405
-
/** error name returned by service */
406
406
-
error;
407
407
-
/** error message returned by service */
408
408
-
description;
409
409
-
/** response status */
410
410
-
status;
411
411
-
/** response headers */
412
412
-
headers;
413
413
-
constructor({ status, headers = new Headers(), data }) {
414
414
-
super(`${data.error} > ${data.message ?? "(unspecified description)"}`);
415
415
-
this.name = "ClientResponseError";
416
416
-
this.error = data.error;
417
417
-
this.description = data.message;
418
418
-
this.status = status;
419
419
-
this.headers = headers;
420
420
-
}
421
421
-
};
422
422
-
var ClientValidationError = class extends Error {
423
423
-
static {
424
424
-
__name(this, "ClientValidationError");
425
425
-
}
426
426
-
/** validation target (params, input, or output) */
427
427
-
target;
428
428
-
/** validation result */
429
429
-
result;
430
430
-
constructor(target, result) {
431
431
-
super(`validation failed for ${target}: ${result.message}`);
432
432
-
this.name = "ClientValidationError";
433
433
-
this.target = target;
434
434
-
this.result = result;
435
435
-
}
436
436
-
};
437
437
-
438
438
-
// ../node_modules/.deno/@atcute+client@4.2.1/node_modules/@atcute/client/dist/credential-manager.js
439
439
-
init_Buffer();
440
440
-
init_process();
441
441
-
442
442
-
// ../node_modules/.deno/@atcute+client@4.2.1/node_modules/@atcute/client/dist/utils/jwt.js
443
443
-
init_Buffer();
444
444
-
init_process();
445
445
-
446
446
-
// components/output/raw/atproto/element.js
447
447
-
var ATProtoOutput = class extends BroadcastableDiffuseElement {
448
448
-
static {
449
449
-
__name(this, "ATProtoOutput");
450
450
-
}
451
451
-
static NAME = "diffuse/output/raw/atproto";
452
452
-
/** @type {Client | null} */
453
453
-
#rpc = null;
454
454
-
/** @type {OAuthUserAgent | null} */
455
455
-
#agent = null;
456
456
-
/** @type {string | null} */
457
457
-
#did = null;
458
458
-
/** Public signal exposing the authenticated DID (null when not logged in). */
459
459
-
$did = signal(
460
460
-
/** @type {string | null} */
461
461
-
null
462
462
-
);
463
463
-
#manager;
464
464
-
/** @type {PromiseWithResolvers<void>} */
465
465
-
#authenticated = Promise.withResolvers();
466
466
-
constructor() {
467
467
-
super();
468
468
-
this.#manager = outputManager({
469
469
-
init: /* @__PURE__ */ __name(async () => {
470
470
-
await this.#ensureAuthenticated();
471
471
-
return true;
472
472
-
}, "init"),
473
473
-
facets: {
474
474
-
empty: /* @__PURE__ */ __name(() => [], "empty"),
475
475
-
get: /* @__PURE__ */ __name(() => this.#listRecords("sh.diffuse.output.facet"), "get"),
476
476
-
put: /* @__PURE__ */ __name((data) => this.#putRecords("sh.diffuse.output.facet", data), "put")
477
477
-
},
478
478
-
playlists: {
479
479
-
empty: /* @__PURE__ */ __name(() => [], "empty"),
480
480
-
get: /* @__PURE__ */ __name(() => this.#listRecords("sh.diffuse.output.playlist"), "get"),
481
481
-
put: /* @__PURE__ */ __name((data) => this.#putRecords("sh.diffuse.output.playlist", data), "put")
482
482
-
},
483
483
-
themes: {
484
484
-
empty: /* @__PURE__ */ __name(() => [], "empty"),
485
485
-
get: /* @__PURE__ */ __name(() => this.#listRecords("sh.diffuse.output.theme"), "get"),
486
486
-
put: /* @__PURE__ */ __name((data) => this.#putRecords("sh.diffuse.output.theme", data), "put")
487
487
-
},
488
488
-
tracks: {
489
489
-
empty: /* @__PURE__ */ __name(() => [], "empty"),
490
490
-
get: /* @__PURE__ */ __name(() => this.#listRecords("sh.diffuse.output.track"), "get"),
491
491
-
put: /* @__PURE__ */ __name((data) => this.#putRecords("sh.diffuse.output.track", data), "put")
492
492
-
}
493
493
-
});
494
494
-
this.facets = this.#manager.facets;
495
495
-
this.playlists = this.#manager.playlists;
496
496
-
this.themes = this.#manager.themes;
497
497
-
this.tracks = this.#manager.tracks;
498
498
-
}
499
499
-
// LIFECYCLE
500
500
-
/** @override */
501
501
-
connectedCallback() {
502
502
-
if (this.hasAttribute("group")) {
503
503
-
const actions = this.broadcast(this.nameWithGroup, {
504
504
-
put: { strategy: "replicate", fn: this.#putIncoming }
505
505
-
});
506
506
-
if (actions) {
507
507
-
this.#put = this.#putOutgoing(actions.put);
508
508
-
}
509
509
-
}
510
510
-
super.connectedCallback();
511
511
-
this.#tryRestore();
512
512
-
}
513
513
-
// AUTH
514
514
-
async #tryRestore() {
515
515
-
await this.whenConnected();
516
516
-
const session = await restoreOrFinalize();
517
517
-
if (session) {
518
518
-
this.#setSession(session);
519
519
-
}
520
520
-
}
521
521
-
/**
522
522
-
* @param {import("@atcute/oauth-browser-client").Session} session
523
523
-
*/
524
524
-
#setSession(session) {
525
525
-
this.#agent = new OAuthUserAgent(session);
526
526
-
this.#rpc = new Client({ handler: this.#agent });
527
527
-
this.#did = session.info.sub;
528
528
-
this.$did.value = session.info.sub;
529
529
-
this.#authenticated.resolve();
530
530
-
}
531
531
-
async #ensureAuthenticated() {
532
532
-
await this.whenConnected();
533
533
-
return this.#authenticated.promise;
534
534
-
}
535
535
-
/**
536
536
-
* Initiate the OAuth flow.
537
537
-
* Navigates the browser to the authorization server.
538
538
-
*
539
539
-
* @param {string} handle
540
540
-
*/
541
541
-
async login(handle) {
542
542
-
await login(handle);
543
543
-
}
544
544
-
/**
545
545
-
* Sign out and revoke the current session.
546
546
-
*/
547
547
-
async logout() {
548
548
-
if (this.#agent) {
549
549
-
await logout(this.#agent);
550
550
-
this.#agent = null;
551
551
-
this.#rpc = null;
552
552
-
this.#did = null;
553
553
-
this.$did.value = null;
554
554
-
this.#authenticated = Promise.withResolvers();
555
555
-
}
556
556
-
}
557
557
-
// RECORDS
558
558
-
/**
559
559
-
* @template T
560
560
-
* @param {string} collection
561
561
-
* @returns {Promise<T[]>}
562
562
-
*/
563
563
-
async #listRecords(collection) {
564
564
-
if (!this.#rpc || !this.#did) return [];
565
565
-
const records = [];
566
566
-
let cursor;
567
567
-
do {
568
568
-
const page = await ok2(this.#rpc.get(
569
569
-
"com.atproto.repo.listRecords",
570
570
-
{ params: { repo: this.#did, collection, limit: 100, cursor } }
571
571
-
));
572
572
-
for (const record of page.records) {
573
573
-
records.push(record.value);
574
574
-
}
575
575
-
cursor = page.cursor;
576
576
-
} while (cursor);
577
577
-
return records;
578
578
-
}
579
579
-
/**
580
580
-
* @param {string} collection
581
581
-
* @param {Array<{ id: string }>} data
582
582
-
*/
583
583
-
async #putRecordsSync(collection, data) {
584
584
-
if (!this.#rpc || !this.#did) return;
585
585
-
const existing = /* @__PURE__ */ new Map();
586
586
-
let cursor;
587
587
-
do {
588
588
-
const page = await ok2(this.#rpc.get(
589
589
-
"com.atproto.repo.listRecords",
590
590
-
{ params: { repo: this.#did, collection, limit: 100, cursor } }
591
591
-
));
592
592
-
for (const record of page.records) {
593
593
-
const rkey = record.uri.split("/").pop();
594
594
-
existing.set(record.value.id, { rkey, value: record.value });
595
595
-
}
596
596
-
cursor = page.cursor;
597
597
-
} while (cursor);
598
598
-
const desired = new Map(data.map((record) => [record.id, record]));
599
599
-
const writes = [];
600
600
-
for (const [id, { rkey }] of existing) {
601
601
-
if (!desired.has(id)) {
602
602
-
writes.push({
603
603
-
$type: "com.atproto.repo.applyWrites#delete",
604
604
-
collection,
605
605
-
rkey
606
606
-
});
607
607
-
}
608
608
-
}
609
609
-
for (const [id, record] of desired) {
610
610
-
const entry = existing.get(id);
611
611
-
if (!entry) {
612
612
-
writes.push({
613
613
-
$type: "com.atproto.repo.applyWrites#create",
614
614
-
collection,
615
615
-
rkey: id,
616
616
-
value: record
617
617
-
});
618
618
-
} else if (JSON.stringify(entry.value) !== JSON.stringify(record)) {
619
619
-
writes.push({
620
620
-
$type: "com.atproto.repo.applyWrites#update",
621
621
-
collection,
622
622
-
rkey: entry.rkey,
623
623
-
value: record
624
624
-
});
625
625
-
}
626
626
-
}
627
627
-
if (writes.length > 0) {
628
628
-
await this.#rpc.post("com.atproto.repo.applyWrites", {
629
629
-
input: { repo: this.#did, writes }
630
630
-
});
631
631
-
}
632
632
-
}
633
633
-
// GET & PUT (broadcasting layer)
634
634
-
/**
635
635
-
* @param {string} collection
636
636
-
* @param {Array<{ id: string }>} data
637
637
-
*/
638
638
-
#putProxy = /* @__PURE__ */ __name((collection, data) => this.#putRecordsSync(collection, data), "#putProxy");
639
639
-
#put = this.#putProxy;
640
640
-
/**
641
641
-
* @param {string} collection
642
642
-
* @param {Array<{ id: string }>} data
643
643
-
*/
644
644
-
#putRecords = /* @__PURE__ */ __name((collection, data) => this.#put(collection, data), "#putRecords");
645
645
-
/**
646
646
-
* @param {(uuidSender: ReturnType<typeof crypto.randomUUID>, collection: string, data: Array<{ id: string }>) => Promise<void>} action
647
647
-
* @returns {(collection: string, data: Array<{ id: string }>) => Promise<void>}
648
648
-
*/
649
649
-
#putOutgoing = /* @__PURE__ */ __name((action) => async (collection, data) => {
650
650
-
return await action(this.uuid, collection, data);
651
651
-
}, "#putOutgoing");
652
652
-
/**
653
653
-
* @param {ReturnType<typeof crypto.randomUUID>} uuidSender
654
654
-
* @param {string} collection
655
655
-
* @param {Array<{ id: string }>} data
656
656
-
*/
657
657
-
#putIncoming(uuidSender, collection, data) {
658
658
-
if (uuidSender === this.uuid) {
659
659
-
this.#putProxy(collection, data);
660
660
-
} else {
661
661
-
const collectionMap = {
662
662
-
"sh.diffuse.output.facet": this.#manager.signals.facets,
663
663
-
"sh.diffuse.output.playlist": this.#manager.signals.playlists,
664
664
-
"sh.diffuse.output.theme": this.#manager.signals.themes,
665
665
-
"sh.diffuse.output.track": this.#manager.signals.tracks
666
666
-
};
667
667
-
const sig = collectionMap[collection];
668
668
-
if (sig) sig.value = data;
669
669
-
}
670
670
-
}
671
671
-
};
672
672
-
var element_default = ATProtoOutput;
673
673
-
var CLASS = ATProtoOutput;
674
674
-
var NAME = "dor-atproto";
675
675
-
customElements.define(NAME, ATProtoOutput);
676
676
-
677
677
-
export {
678
678
-
element_default,
679
679
-
CLASS,
680
680
-
NAME
681
681
-
};
682
682
-
683
683
-
//# sourceMappingURL=./chunk-LPLLWF34.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-LPLLWF34.js.map
···
1
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"}
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-M7PCQLSV.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-M7PCQLSV.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-M7PCQLSV.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-M7PCQLSV.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-MVWHZJHR.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-MVWHZJHR.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-MVWHZJHR.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-MVWHZJHR.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-MXEJU4VJ.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-MXEJU4VJ.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-MXEJU4VJ.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-MXEJU4VJ.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-MZP4RURX.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-MZP4RURX.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-MZP4RURX.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-MZP4RURX.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-NCFHYTLD.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-NCFHYTLD.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-NCFHYTLD.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-NCFHYTLD.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-NGXRH664.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-NGXRH664.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-NGXRH664.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-NGXRH664.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-OEJDMRAO.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-OEJDMRAO.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-OEJDMRAO.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-OEJDMRAO.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-ONE5JH5Q.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-ONE5JH5Q.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-ONE5JH5Q.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-ONE5JH5Q.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-OXLVUFPU.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-OXLVUFPU.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-OXLVUFPU.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-OXLVUFPU.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-P3M4HQTD.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-P3M4HQTD.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-P3M4HQTD.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-P3M4HQTD.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-PE6SII6D.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-PE6SII6D.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-PE6SII6D.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-PE6SII6D.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-PJWFBDSG.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-PJWFBDSG.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-PJWFBDSG.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-PJWFBDSG.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-PUHBIZRM.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-PUHBIZRM.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-PUHBIZRM.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-PUHBIZRM.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-QJG4JBCO.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-QJG4JBCO.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-QJG4JBCO.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-QJG4JBCO.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-QQ2VIQZY.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-QQ2VIQZY.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-QQ2VIQZY.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-QQ2VIQZY.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-R65OZ4FV.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-R65OZ4FV.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-R65OZ4FV.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-R65OZ4FV.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-RG36R2PW.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-RG36R2PW.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-RG36R2PW.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-RG36R2PW.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-RPWC6IKI.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-RPWC6IKI.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-RPWC6IKI.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-RPWC6IKI.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-S4RHYXDI.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-S4RHYXDI.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-S4RHYXDI.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-S4RHYXDI.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-S6GAP4IS.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-S6GAP4IS.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-S6GAP4IS.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-S6GAP4IS.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-SSTS6DW7.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-SSTS6DW7.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-SSTS6DW7.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-SSTS6DW7.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-UGE3FKYA.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-UGE3FKYA.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-UGE3FKYA.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-UGE3FKYA.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-UMLUM7AR.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-UMLUM7AR.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-UMLUM7AR.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-UMLUM7AR.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-UXCYOXOC.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-UXCYOXOC.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-UXCYOXOC.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-UXCYOXOC.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-WM2QH5TD.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-WM2QH5TD.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-WM2QH5TD.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-WM2QH5TD.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-WSITZE2C.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-WSITZE2C.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-WSITZE2C.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-WSITZE2C.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-XXGFKU7I.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-XXGFKU7I.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-XXGFKU7I.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-XXGFKU7I.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-YVFCBSEJ.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-YVFCBSEJ.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/chunk-YVFCBSEJ.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/chunk-YVFCBSEJ.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/cid.js
···
1
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/cid.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/cid.js.map
···
1
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/cid.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/element.js
···
1
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/element.js.map
···
1
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/common/element.js.map
-63
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/facets/foundation.js
···
1
1
-
import {
2
2
-
GROUP,
3
3
-
config,
4
4
-
findExistingOrAdd,
5
5
-
foundation_default
6
6
-
} from "../../chunk-JUPK7PXD.js";
7
7
-
import "../../chunk-HRGYPYP6.js";
8
8
-
import "../../chunk-YVFCBSEJ.js";
9
9
-
import "../../chunk-OXLVUFPU.js";
10
10
-
import "../../chunk-JQFGN3M7.js";
11
11
-
import "../../chunk-GMLGV4UU.js";
12
12
-
import "../../chunk-CPS76EE2.js";
13
13
-
import "../../chunk-IPY3IZ42.js";
14
14
-
import "../../chunk-A7EWFKZ4.js";
15
15
-
import "../../chunk-CNO46O5F.js";
16
16
-
import "../../chunk-77DLAY6P.js";
17
17
-
import "../../chunk-OEJDMRAO.js";
18
18
-
import "../../chunk-LPLLWF34.js";
19
19
-
import "../../chunk-BP7OSAES.js";
20
20
-
import "../../chunk-77ZY4GQV.js";
21
21
-
import "../../chunk-MVWHZJHR.js";
22
22
-
import "../../chunk-S4RHYXDI.js";
23
23
-
import "../../chunk-FVTTELAZ.js";
24
24
-
import "../../chunk-33EY7IZW.js";
25
25
-
import "../../chunk-3W46CCB5.js";
26
26
-
import "../../chunk-32QOJ2TM.js";
27
27
-
import "../../chunk-HDWTLLD6.js";
28
28
-
import "../../chunk-M7PCQLSV.js";
29
29
-
import "../../chunk-UXCYOXOC.js";
30
30
-
import "../../chunk-GX3WPNEX.js";
31
31
-
import "../../chunk-RPWC6IKI.js";
32
32
-
import "../../chunk-SSTS6DW7.js";
33
33
-
import "../../chunk-HN4F5JEZ.js";
34
34
-
import "../../chunk-NGXRH664.js";
35
35
-
import "../../chunk-CXGVZUBI.js";
36
36
-
import "../../chunk-GSA3UBRU.js";
37
37
-
import "../../chunk-AGNDISJF.js";
38
38
-
import "../../chunk-EEUCFWD4.js";
39
39
-
import "../../chunk-6DRHTH2U.js";
40
40
-
import "../../chunk-JS4TF33K.js";
41
41
-
import "../../chunk-UMLUM7AR.js";
42
42
-
import "../../chunk-EEVL24MR.js";
43
43
-
import "../../chunk-4UUOGUZ7.js";
44
44
-
import "../../chunk-3WGC3A6G.js";
45
45
-
import "../../chunk-S6GAP4IS.js";
46
46
-
import "../../chunk-PE6SII6D.js";
47
47
-
import "../../chunk-DUCTMCPX.js";
48
48
-
import "../../chunk-UGE3FKYA.js";
49
49
-
import "../../chunk-FIWHH4Y5.js";
50
50
-
import "../../chunk-G56PUJUJ.js";
51
51
-
import "../../chunk-KIMDMO5U.js";
52
52
-
import "../../chunk-H3WG7GN4.js";
53
53
-
import "../../chunk-EJ2QF5QE.js";
54
54
-
import "../../chunk-NCFHYTLD.js";
55
55
-
import "../../chunk-FZQXS3RE.js";
56
56
-
export {
57
57
-
GROUP,
58
58
-
config,
59
59
-
foundation_default as default,
60
60
-
findExistingOrAdd
61
61
-
};
62
62
-
63
63
-
//# sourceMappingURL=./foundation.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/facets/foundation.js.map
···
1
1
-
../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/common/facets/foundation.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/facets/utils.js
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/facets/utils.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/facets/utils.js.map
···
1
1
-
../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/common/facets/utils.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/playlist.js
···
1
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/playlist.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/playlist.js.map
···
1
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/playlist.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/signal.js
···
1
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/signal.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/signal.js.map
···
1
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/common/signal.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/themes/utils.js
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/themes/utils.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/themes/utils.js.map
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/themes/utils.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/utils.js
···
1
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/utils.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/utils.js.map
···
1
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/common/utils.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/worker.js
···
1
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/worker.js.map
···
1
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/common/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/worker/rpc.js
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/common/worker/rpc.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/common/worker/rpc.js.map
···
1
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/common/worker/rpc.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/configurator/input/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/configurator/input/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/configurator/input/element.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/configurator/input/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/configurator/input/worker.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/configurator/input/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/configurator/input/worker.js.map
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/configurator/input/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/configurator/output/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/configurator/output/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/configurator/output/element.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/configurator/output/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/audio/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/engine/audio/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/audio/element.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/engine/audio/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/queue/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/engine/queue/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/queue/element.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/engine/queue/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/queue/worker.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/engine/queue/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/queue/worker.js.map
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/engine/queue/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/repeat-shuffle/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/engine/repeat-shuffle/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/repeat-shuffle/element.js.map
···
1
1
-
../../../../bafybeia4lo67fqia3emjf54vzbrvfyao6fwndoc4rnqpav4yezowfg4j6e/components/engine/repeat-shuffle/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/scope/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/engine/scope/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/engine/scope/element.js.map
···
1
1
-
../../../../bafybeihr4brahqptxmxcdksktdfgs4hyl64odwx524vqmmitjvmn57sklq/components/engine/scope/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/common.js
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/common.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/common.js.map
···
1
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/common.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/common.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/common.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/common.js.map
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/common.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/constants.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/constants.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/constants.js.map
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/constants.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/element.js.map
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/worker.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/https/worker.js.map
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/https/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/class.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/opensubsonic/class.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/class.js.map
···
1
1
-
../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/components/input/opensubsonic/class.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/common.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/opensubsonic/common.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/common.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/opensubsonic/common.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/constants.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/opensubsonic/constants.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/constants.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/opensubsonic/constants.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/opensubsonic/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/element.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/opensubsonic/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/worker.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/opensubsonic/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/opensubsonic/worker.js.map
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/opensubsonic/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/common.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/s3/common.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/common.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/s3/common.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/constants.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/s3/constants.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/constants.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/s3/constants.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/s3/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/element.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/input/s3/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/worker.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/s3/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/input/s3/worker.js.map
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/input/s3/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/auto-queue/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/auto-queue/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/auto-queue/element.js.map
···
1
1
-
../../../../bafybeia4lo67fqia3emjf54vzbrvfyao6fwndoc4rnqpav4yezowfg4j6e/components/orchestrator/auto-queue/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/favourites/common.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/favourites/common.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/favourites/common.js.map
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/favourites/common.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/favourites/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/favourites/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/favourites/element.js.map
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/favourites/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/favourites/worker.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/favourites/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/favourites/worker.js.map
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/favourites/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/input/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/input/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/input/element.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/input/element.js.map
-28
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/output/element.js
···
1
1
-
import {
2
2
-
CLASS,
3
3
-
NAME,
4
4
-
element_default
5
5
-
} from "../../../chunk-A7EWFKZ4.js";
6
6
-
import "../../../chunk-CNO46O5F.js";
7
7
-
import "../../../chunk-77DLAY6P.js";
8
8
-
import "../../../chunk-OEJDMRAO.js";
9
9
-
import "../../../chunk-LPLLWF34.js";
10
10
-
import "../../../chunk-BP7OSAES.js";
11
11
-
import "../../../chunk-77ZY4GQV.js";
12
12
-
import "../../../chunk-MVWHZJHR.js";
13
13
-
import "../../../chunk-S4RHYXDI.js";
14
14
-
import "../../../chunk-4UUOGUZ7.js";
15
15
-
import "../../../chunk-FIWHH4Y5.js";
16
16
-
import "../../../chunk-G56PUJUJ.js";
17
17
-
import "../../../chunk-KIMDMO5U.js";
18
18
-
import "../../../chunk-H3WG7GN4.js";
19
19
-
import "../../../chunk-EJ2QF5QE.js";
20
20
-
import "../../../chunk-NCFHYTLD.js";
21
21
-
import "../../../chunk-FZQXS3RE.js";
22
22
-
export {
23
23
-
CLASS,
24
24
-
NAME,
25
25
-
element_default as default
26
26
-
};
27
27
-
28
28
-
//# sourceMappingURL=./element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/output/element.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/output/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/process-tracks/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/process-tracks/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/process-tracks/element.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/process-tracks/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/process-tracks/worker.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/process-tracks/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/process-tracks/worker.js.map
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/process-tracks/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/queue-audio/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/queue-audio/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/queue-audio/element.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/queue-audio/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/scoped-tracks/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/scoped-tracks/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/scoped-tracks/element.js.map
···
1
1
-
../../../../bafybeihr4brahqptxmxcdksktdfgs4hyl64odwx524vqmmitjvmn57sklq/components/orchestrator/scoped-tracks/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/scoped-tracks/worker.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/scoped-tracks/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/scoped-tracks/worker.js.map
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/scoped-tracks/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/sources/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/orchestrator/sources/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/orchestrator/sources/element.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/orchestrator/sources/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/automerge-repo-server/element.js
···
1
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/automerge-repo-server/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/automerge-repo-server/element.js.map
···
1
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/automerge-repo-server/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/s3/constants.js
···
1
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/s3/constants.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/s3/constants.js.map
···
1
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/s3/constants.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/s3/element.js
···
1
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/s3/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/s3/element.js.map
···
1
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/s3/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/s3/worker.js
···
1
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/s3/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/bytes/s3/worker.js.map
···
1
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/bytes/s3/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/common.js
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/common.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/common.js.map
···
1
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/output/common.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/polymorphic/indexed-db/constants.js
···
1
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/polymorphic/indexed-db/constants.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/polymorphic/indexed-db/constants.js.map
···
1
1
-
../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/output/polymorphic/indexed-db/constants.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/polymorphic/indexed-db/element.js
···
1
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/polymorphic/indexed-db/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/polymorphic/indexed-db/element.js.map
···
1
1
-
../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/output/polymorphic/indexed-db/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/polymorphic/indexed-db/worker.js
···
1
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/polymorphic/indexed-db/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/polymorphic/indexed-db/worker.js.map
···
1
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/polymorphic/indexed-db/worker.js.map
-22
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/raw/atproto/element.js
···
1
1
-
import {
2
2
-
CLASS,
3
3
-
NAME,
4
4
-
element_default
5
5
-
} from "../../../../chunk-LPLLWF34.js";
6
6
-
import "../../../../chunk-BP7OSAES.js";
7
7
-
import "../../../../chunk-77ZY4GQV.js";
8
8
-
import "../../../../chunk-S4RHYXDI.js";
9
9
-
import "../../../../chunk-FIWHH4Y5.js";
10
10
-
import "../../../../chunk-G56PUJUJ.js";
11
11
-
import "../../../../chunk-KIMDMO5U.js";
12
12
-
import "../../../../chunk-H3WG7GN4.js";
13
13
-
import "../../../../chunk-EJ2QF5QE.js";
14
14
-
import "../../../../chunk-NCFHYTLD.js";
15
15
-
import "../../../../chunk-FZQXS3RE.js";
16
16
-
export {
17
17
-
CLASS,
18
18
-
NAME,
19
19
-
element_default as default
20
20
-
};
21
21
-
22
22
-
//# sourceMappingURL=./element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/raw/atproto/element.js.map
···
1
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/raw/atproto/element.js.map
-16
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/raw/atproto/oauth.js
···
1
1
-
import {
2
2
-
OAuthUserAgent,
3
3
-
login,
4
4
-
logout,
5
5
-
restoreOrFinalize
6
6
-
} from "../../../../chunk-BP7OSAES.js";
7
7
-
import "../../../../chunk-77ZY4GQV.js";
8
8
-
import "../../../../chunk-FZQXS3RE.js";
9
9
-
export {
10
10
-
OAuthUserAgent,
11
11
-
login,
12
12
-
logout,
13
13
-
restoreOrFinalize
14
14
-
};
15
15
-
16
16
-
//# sourceMappingURL=./oauth.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/output/raw/atproto/oauth.js.map
···
1
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/output/raw/atproto/oauth.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/artwork/constants.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/artwork/constants.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/artwork/constants.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/artwork/constants.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/artwork/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/artwork/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/artwork/element.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/artwork/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/artwork/worker.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/artwork/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/artwork/worker.js.map
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/artwork/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/metadata/common.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/metadata/common.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/metadata/common.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/metadata/common.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/metadata/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/metadata/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/metadata/element.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/metadata/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/metadata/worker.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/metadata/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/metadata/worker.js.map
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/metadata/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/search/constants.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/search/constants.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/search/constants.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/search/constants.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/search/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/search/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/search/element.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/processor/search/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/search/worker.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/search/worker.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/processor/search/worker.js.map
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/processor/search/worker.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/base.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/base.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/base.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/transformer/output/base.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/automerge/constants.js
···
1
1
-
../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/bytes/automerge/constants.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/automerge/constants.js.map
···
1
1
-
../../../../../../bafybeieo3vdz7hmuriods6ueueg5yt6xctzjqrmqdasqr4plalwojiwvou/components/transformer/output/bytes/automerge/constants.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/automerge/element.js
···
1
1
-
../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/bytes/automerge/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/automerge/element.js.map
···
1
1
-
../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/bytes/automerge/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/automerge/utils.js
···
1
1
-
../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/bytes/automerge/utils.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/automerge/utils.js.map
···
1
1
-
../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/bytes/automerge/utils.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/json/element.js
···
1
1
-
../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/bytes/json/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/bytes/json/element.js.map
···
1
1
-
../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/bytes/json/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/refiner/default/element.js
···
1
1
-
../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/refiner/default/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/refiner/default/element.js.map
···
1
1
-
../../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/transformer/output/refiner/default/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/string/json/element.js
···
1
1
-
../../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/components/transformer/output/string/json/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/components/transformer/output/string/json/element.js.map
···
1
1
-
../../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/components/transformer/output/string/json/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/definitions/index.ts
···
1
1
-
../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/definitions/index.ts
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/definitions/output/facet.json
···
1
1
-
../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/definitions/output/facet.json
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/definitions/output/playlist.json
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/definitions/output/playlist.json
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/definitions/output/theme.json
···
1
1
-
../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/definitions/output/theme.json
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/definitions/output/track.json
···
1
1
-
../../../bafybeiftdd7dlfoayxlckoz7nnnoun5ggr2p2biwnbnfn3zflg2drlkmca/definitions/output/track.json
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/examples/generate-playlist.html.txt
···
1
1
-
../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/facets/examples/generate-playlist.html.txt
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/examples/now-playing.html.txt
···
1
1
-
../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/facets/examples/now-playing.html.txt
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/index.html
···
1
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/facets/index.html
-314
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/index.js
···
1
1
-
import {
2
2
-
EditorView,
3
3
-
autocompletion,
4
4
-
basicSetup,
5
5
-
css,
6
6
-
html,
7
7
-
javascript
8
8
-
} from "../chunk-WM2QH5TD.js";
9
9
-
import {
10
10
-
foundation_default
11
11
-
} from "../chunk-JUPK7PXD.js";
12
12
-
import "../chunk-HRGYPYP6.js";
13
13
-
import "../chunk-YVFCBSEJ.js";
14
14
-
import "../chunk-OXLVUFPU.js";
15
15
-
import "../chunk-JQFGN3M7.js";
16
16
-
import "../chunk-GMLGV4UU.js";
17
17
-
import "../chunk-CPS76EE2.js";
18
18
-
import "../chunk-IPY3IZ42.js";
19
19
-
import "../chunk-A7EWFKZ4.js";
20
20
-
import "../chunk-CNO46O5F.js";
21
21
-
import "../chunk-77DLAY6P.js";
22
22
-
import "../chunk-OEJDMRAO.js";
23
23
-
import "../chunk-LPLLWF34.js";
24
24
-
import "../chunk-BP7OSAES.js";
25
25
-
import "../chunk-77ZY4GQV.js";
26
26
-
import "../chunk-MVWHZJHR.js";
27
27
-
import "../chunk-S4RHYXDI.js";
28
28
-
import "../chunk-FVTTELAZ.js";
29
29
-
import "../chunk-33EY7IZW.js";
30
30
-
import "../chunk-3W46CCB5.js";
31
31
-
import "../chunk-32QOJ2TM.js";
32
32
-
import "../chunk-HDWTLLD6.js";
33
33
-
import "../chunk-M7PCQLSV.js";
34
34
-
import "../chunk-UXCYOXOC.js";
35
35
-
import "../chunk-GX3WPNEX.js";
36
36
-
import "../chunk-RPWC6IKI.js";
37
37
-
import "../chunk-SSTS6DW7.js";
38
38
-
import "../chunk-HN4F5JEZ.js";
39
39
-
import "../chunk-NGXRH664.js";
40
40
-
import "../chunk-CXGVZUBI.js";
41
41
-
import "../chunk-GSA3UBRU.js";
42
42
-
import "../chunk-AGNDISJF.js";
43
43
-
import "../chunk-EEUCFWD4.js";
44
44
-
import "../chunk-6DRHTH2U.js";
45
45
-
import "../chunk-JS4TF33K.js";
46
46
-
import "../chunk-UMLUM7AR.js";
47
47
-
import "../chunk-EEVL24MR.js";
48
48
-
import "../chunk-4UUOGUZ7.js";
49
49
-
import "../chunk-3WGC3A6G.js";
50
50
-
import "../chunk-S6GAP4IS.js";
51
51
-
import "../chunk-PE6SII6D.js";
52
52
-
import "../chunk-DUCTMCPX.js";
53
53
-
import "../chunk-UGE3FKYA.js";
54
54
-
import {
55
55
-
B,
56
56
-
T
57
57
-
} from "../chunk-FIWHH4Y5.js";
58
58
-
import "../chunk-G56PUJUJ.js";
59
59
-
import {
60
60
-
effect,
61
61
-
signal
62
62
-
} from "../chunk-KIMDMO5U.js";
63
63
-
import "../chunk-H3WG7GN4.js";
64
64
-
import "../chunk-EJ2QF5QE.js";
65
65
-
import "../chunk-NCFHYTLD.js";
66
66
-
import {
67
67
-
facetFromUrl
68
68
-
} from "../chunk-QQ2VIQZY.js";
69
69
-
import {
70
70
-
qi
71
71
-
} from "../chunk-PUHBIZRM.js";
72
72
-
import {
73
73
-
create
74
74
-
} from "../chunk-4YB6QUPN.js";
75
75
-
import {
76
76
-
__name,
77
77
-
init_Buffer,
78
78
-
init_process
79
79
-
} from "../chunk-FZQXS3RE.js";
80
80
-
81
81
-
// facets/index.js
82
82
-
init_Buffer();
83
83
-
init_process();
84
84
-
document.body.addEventListener(
85
85
-
"click",
86
86
-
/**
87
87
-
* @param {MouseEvent} event
88
88
-
*/
89
89
-
async (event) => {
90
90
-
const target = (
91
91
-
/** @type {HTMLElement} */
92
92
-
event.target
93
93
-
);
94
94
-
const rel = target.getAttribute("rel");
95
95
-
if (!rel) return;
96
96
-
const url = target.closest("li")?.getAttribute("data-url");
97
97
-
if (!url) return;
98
98
-
const name = target.closest("li")?.getAttribute("data-name");
99
99
-
if (!name) return;
100
100
-
switch (rel) {
101
101
-
case "fork": {
102
102
-
const facet = await facetFromUrl({ name, url }, { fetchHTML: true });
103
103
-
editFacet(facet);
104
104
-
document.querySelector("#build")?.scrollIntoView();
105
105
-
break;
106
106
-
}
107
107
-
case "save": {
108
108
-
const facet = await facetFromUrl({ name, url }, { fetchHTML: false });
109
109
-
const out = foundation_default.orchestrator.output();
110
110
-
out.facets.save([
111
111
-
...out.facets.collection(),
112
112
-
facet
113
113
-
]);
114
114
-
break;
115
115
-
}
116
116
-
}
117
117
-
}
118
118
-
);
119
119
-
var listEl = document.querySelector("#list");
120
120
-
if (!listEl) throw new Error("List element not found");
121
121
-
var output = foundation_default.orchestrator.output();
122
122
-
effect(() => {
123
123
-
const col = output.facets.collection().sort((a, b) => {
124
124
-
return a.name.toLocaleLowerCase().localeCompare(b.name.toLocaleLowerCase());
125
125
-
});
126
126
-
const h = col.length ? T`
127
127
-
<ul>
128
128
-
${col.map(
129
129
-
(c) => T`
130
130
-
<li style="margin-bottom: var(--space-2xs)">
131
131
-
<span>${c.name}</span>
132
132
-
<div class="list-description">
133
133
-
<div style="margin-bottom: var(--space-2xs)">
134
134
-
${c.url && !c.html ? T`
135
135
-
<span class="with-icon">
136
136
-
<i class="ph-fill ph-binoculars"></i>
137
137
-
<span>Tracking the original <a href="${c.url}">URL</a></span>
138
138
-
</span>
139
139
-
` : T`
140
140
-
<span class="with-icon">
141
141
-
<i class="ph-fill ph-code"></i>
142
142
-
<span>Custom code</span>
143
143
-
</span>
144
144
-
`}
145
145
-
</div>
146
146
-
<div class="button-row">
147
147
-
<a href="facets/l/?id=${c.id}" class="button button--bg-twist-1">
148
148
-
<span class="with-icon">
149
149
-
<i class="ph-fill ph-globe"></i> Open
150
150
-
</span>
151
151
-
</a>
152
152
-
<button
153
153
-
class="button--bg-twist-1 button--subtle"
154
154
-
@click="${() => editFacet(c)}"
155
155
-
>
156
156
-
<span class="with-icon">
157
157
-
<i class="ph-fill ph-cursor-text"></i> Edit
158
158
-
</span>
159
159
-
</button>
160
160
-
<button
161
161
-
class="button--bg-twist-2 button--subtle"
162
162
-
@click="${deleteFacet({
163
163
-
id: c.id
164
164
-
})}"
165
165
-
>
166
166
-
<span class="with-icon">
167
167
-
<i class="ph-fill ph-eraser"></i> Delete
168
168
-
</span>
169
169
-
</button>
170
170
-
</div>
171
171
-
</div>
172
172
-
</li>
173
173
-
`
174
174
-
)}
175
175
-
</ul>
176
176
-
` : output.facets.state() === "loaded" ? emptyFacetsList : T`
177
177
-
<i class="ph-bold ph-spinner-gap"></i>
178
178
-
`;
179
179
-
B(h, listEl);
180
180
-
});
181
181
-
var emptyFacetsList = T`
182
182
-
<p style="margin-bottom: 0;">
183
183
-
<i class="ph-fill ph-info"></i> You have not saved any facets yet.
184
184
-
</p>
185
185
-
`;
186
186
-
function deleteFacet({ id }) {
187
187
-
return () => {
188
188
-
const c = confirm("Are you sure you want to delete this facet?");
189
189
-
if (!c) return;
190
190
-
output.facets.save(
191
191
-
output.facets.collection().filter((c2) => !(c2.id === id))
192
192
-
);
193
193
-
};
194
194
-
}
195
195
-
__name(deleteFacet, "deleteFacet");
196
196
-
var $editingFacet = signal(
197
197
-
/** @type {Facet | null} */
198
198
-
null
199
199
-
);
200
200
-
var editorContainer = document.body.querySelector("#html-input-container");
201
201
-
if (!editorContainer) throw new Error("Editor container not found");
202
202
-
var editor = new EditorView({
203
203
-
parent: editorContainer,
204
204
-
doc: `
205
205
-
<main>
206
206
-
<h1 id="now-playing">
207
207
-
Waiting on tracks & queue to load ...
208
208
-
</h1>
209
209
-
</main>
210
210
-
211
211
-
<style>
212
212
-
@import "./styles/base.css";
213
213
-
@import "./styles/diffuse/page.css";
214
214
-
</style>
215
215
-
216
216
-
<script type="module">
217
217
-
import foundation from "./common/facets/foundation.js";
218
218
-
import { effect } from "./common/signal.js";
219
219
-
220
220
-
const components = foundation.features.fillQueueAutomatically();
221
221
-
const myHtmlElement = document.querySelector("#now-playing");
222
222
-
223
223
-
effect(() => {
224
224
-
const currentlyPlaying = components.engine.queue.now();
225
225
-
if (currentlyPlaying && myHtmlElement) {
226
226
-
myHtmlElement.innerText = \`\${currentlyPlaying.tags.artist} - \${currentlyPlaying.tags.title}\`;
227
227
-
}
228
228
-
})
229
229
-
<\/script>
230
230
-
`.trim(),
231
231
-
extensions: [
232
232
-
basicSetup,
233
233
-
html(),
234
234
-
css(),
235
235
-
javascript(),
236
236
-
autocompletion()
237
237
-
]
238
238
-
});
239
239
-
document.querySelector("#build-form")?.addEventListener(
240
240
-
"submit",
241
241
-
onBuildSubmit
242
242
-
);
243
243
-
async function onBuildSubmit(event) {
244
244
-
event.preventDefault();
245
245
-
const nameEl = (
246
246
-
/** @type {HTMLInputElement | null} */
247
247
-
document.querySelector(
248
248
-
"#name-input"
249
249
-
)
250
250
-
);
251
251
-
const html2 = editor.state.doc.toString();
252
252
-
const cid = await create(85, new TextEncoder().encode(html2));
253
253
-
const name = nameEl?.value ?? "nameless";
254
254
-
const facet = $editingFacet.value ? {
255
255
-
...$editingFacet.value,
256
256
-
cid,
257
257
-
html: html2,
258
258
-
name
259
259
-
} : {
260
260
-
$type: "sh.diffuse.output.facet",
261
261
-
id: crypto.randomUUID(),
262
262
-
cid,
263
263
-
html: html2,
264
264
-
name
265
265
-
};
266
266
-
switch (
267
267
-
/** @type {any} */
268
268
-
event.submitter.name
269
269
-
) {
270
270
-
case "save":
271
271
-
await saveFacet(facet);
272
272
-
break;
273
273
-
case "save+open":
274
274
-
await saveFacet(facet);
275
275
-
globalThis.open(`./facets/l/?id=${facet.id}`, "blank");
276
276
-
break;
277
277
-
}
278
278
-
}
279
279
-
__name(onBuildSubmit, "onBuildSubmit");
280
280
-
async function editFacet(ogFacet) {
281
281
-
const facet = { ...ogFacet };
282
282
-
const nameEl = (
283
283
-
/** @type {HTMLInputElement | null} */
284
284
-
document.querySelector(
285
285
-
"#name-input"
286
286
-
)
287
287
-
);
288
288
-
if (!nameEl) return;
289
289
-
document.querySelector("#build")?.scrollIntoView();
290
290
-
if (!facet.html && facet.url) {
291
291
-
const html2 = await fetch(facet.url).then((res) => res.text());
292
292
-
const cid = await create(85, new TextEncoder().encode(html2));
293
293
-
facet.html = html2;
294
294
-
facet.cid = cid;
295
295
-
}
296
296
-
$editingFacet.value = facet;
297
297
-
nameEl.value = facet.name;
298
298
-
editor.dispatch({
299
299
-
changes: { from: 0, to: editor.state.doc.length, insert: facet.html }
300
300
-
});
301
301
-
}
302
302
-
__name(editFacet, "editFacet");
303
303
-
async function saveFacet(facet) {
304
304
-
const col = output.facets.collection();
305
305
-
const colWithoutId = col.filter((c) => c.id !== facet.id);
306
306
-
const timestamp = qi.Now.zonedDateTimeISO().toString();
307
307
-
await output.facets.save([...colWithoutId, {
308
308
-
...facet,
309
309
-
updatedAt: timestamp
310
310
-
}]);
311
311
-
}
312
312
-
__name(saveFacet, "saveFacet");
313
313
-
314
314
-
//# sourceMappingURL=./index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/index.js.map
···
1
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/facets/index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/l/index.html
···
1
1
-
../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/facets/l/index.html
-115
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/l/index.js
···
1
1
-
import {
2
2
-
foundation_default
3
3
-
} from "../../chunk-JUPK7PXD.js";
4
4
-
import "../../chunk-HRGYPYP6.js";
5
5
-
import "../../chunk-YVFCBSEJ.js";
6
6
-
import "../../chunk-OXLVUFPU.js";
7
7
-
import "../../chunk-JQFGN3M7.js";
8
8
-
import "../../chunk-GMLGV4UU.js";
9
9
-
import "../../chunk-CPS76EE2.js";
10
10
-
import "../../chunk-IPY3IZ42.js";
11
11
-
import "../../chunk-A7EWFKZ4.js";
12
12
-
import "../../chunk-CNO46O5F.js";
13
13
-
import "../../chunk-77DLAY6P.js";
14
14
-
import "../../chunk-OEJDMRAO.js";
15
15
-
import "../../chunk-LPLLWF34.js";
16
16
-
import "../../chunk-BP7OSAES.js";
17
17
-
import "../../chunk-77ZY4GQV.js";
18
18
-
import "../../chunk-MVWHZJHR.js";
19
19
-
import "../../chunk-S4RHYXDI.js";
20
20
-
import "../../chunk-FVTTELAZ.js";
21
21
-
import "../../chunk-33EY7IZW.js";
22
22
-
import "../../chunk-3W46CCB5.js";
23
23
-
import "../../chunk-32QOJ2TM.js";
24
24
-
import "../../chunk-HDWTLLD6.js";
25
25
-
import "../../chunk-M7PCQLSV.js";
26
26
-
import "../../chunk-UXCYOXOC.js";
27
27
-
import "../../chunk-GX3WPNEX.js";
28
28
-
import "../../chunk-RPWC6IKI.js";
29
29
-
import "../../chunk-SSTS6DW7.js";
30
30
-
import "../../chunk-HN4F5JEZ.js";
31
31
-
import "../../chunk-NGXRH664.js";
32
32
-
import "../../chunk-CXGVZUBI.js";
33
33
-
import "../../chunk-GSA3UBRU.js";
34
34
-
import "../../chunk-AGNDISJF.js";
35
35
-
import "../../chunk-EEUCFWD4.js";
36
36
-
import "../../chunk-6DRHTH2U.js";
37
37
-
import "../../chunk-JS4TF33K.js";
38
38
-
import "../../chunk-UMLUM7AR.js";
39
39
-
import "../../chunk-EEVL24MR.js";
40
40
-
import "../../chunk-4UUOGUZ7.js";
41
41
-
import "../../chunk-3WGC3A6G.js";
42
42
-
import "../../chunk-S6GAP4IS.js";
43
43
-
import "../../chunk-PE6SII6D.js";
44
44
-
import "../../chunk-DUCTMCPX.js";
45
45
-
import "../../chunk-UGE3FKYA.js";
46
46
-
import "../../chunk-FIWHH4Y5.js";
47
47
-
import "../../chunk-G56PUJUJ.js";
48
48
-
import {
49
49
-
effect
50
50
-
} from "../../chunk-KIMDMO5U.js";
51
51
-
import "../../chunk-H3WG7GN4.js";
52
52
-
import "../../chunk-EJ2QF5QE.js";
53
53
-
import "../../chunk-NCFHYTLD.js";
54
54
-
import {
55
55
-
create
56
56
-
} from "../../chunk-4YB6QUPN.js";
57
57
-
import {
58
58
-
__name,
59
59
-
init_Buffer,
60
60
-
init_process
61
61
-
} from "../../chunk-FZQXS3RE.js";
62
62
-
63
63
-
// facets/l/index.js
64
64
-
init_Buffer();
65
65
-
init_process();
66
66
-
var output = foundation_default.orchestrator.output();
67
67
-
var docUrl = new URL(document.location.href);
68
68
-
var id = docUrl.searchParams.get("id");
69
69
-
var cid = docUrl.searchParams.get("cid");
70
70
-
var name = docUrl.searchParams.get("name");
71
71
-
var url = docUrl.searchParams.get("url");
72
72
-
var containerNull = document.querySelector("#container");
73
73
-
if (!containerNull) throw new Error("Container not found");
74
74
-
var container = (
75
75
-
/** @type {HTMLDivElement} */
76
76
-
containerNull
77
77
-
);
78
78
-
effect(async () => {
79
79
-
const collection = output.facets.collection();
80
80
-
if (output.facets.state() !== "loaded") return;
81
81
-
let facet;
82
82
-
if (id) {
83
83
-
facet = collection.find((c) => c.id === id);
84
84
-
} else if (cid) {
85
85
-
facet = collection.find((c) => c.cid === cid);
86
86
-
} else if (name) {
87
87
-
facet = collection.find((c) => c.name === name);
88
88
-
} else if (url) {
89
89
-
const c = {
90
90
-
$type: "sh.diffuse.output.facet",
91
91
-
id: crypto.randomUUID(),
92
92
-
name: "tryout",
93
93
-
url
94
94
-
};
95
95
-
facet = c;
96
96
-
}
97
97
-
if (!facet) return;
98
98
-
if (!facet.html && facet.url) {
99
99
-
const html = await fetch(facet.url).then((res) => res.text());
100
100
-
const cid2 = await create(85, new TextEncoder().encode(html));
101
101
-
facet.html = html;
102
102
-
facet.cid = cid2;
103
103
-
}
104
104
-
loadIntoContainer(facet);
105
105
-
});
106
106
-
function loadIntoContainer(facet) {
107
107
-
const range = document.createRange();
108
108
-
range.selectNode(container);
109
109
-
const documentFragment = range.createContextualFragment(facet.html ?? "");
110
110
-
container.innerHTML = "";
111
111
-
container.append(documentFragment);
112
112
-
}
113
113
-
__name(loadIntoContainer, "loadIntoContainer");
114
114
-
115
115
-
//# sourceMappingURL=./index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/l/index.js.map
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/facets/l/index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/tools/auto-queue.html.txt
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/facets/tools/auto-queue.html.txt
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/facets/tools/v3-import.html.txt
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/facets/tools/v3-import.html.txt
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/favicon-16x16.png
···
1
1
-
../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/favicon-16x16.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/favicon-32x32.png
···
1
1
-
../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/favicon-32x32.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/favicon.ico
···
1
1
-
../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/favicon.ico
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/fonts/CommitMonoVariable.woff2
···
1
1
-
../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/fonts/CommitMonoVariable.woff2
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/fonts/InterVariable-Italic.woff2
···
1
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/fonts/InterVariable-Italic.woff2
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/fonts/InterVariable.woff2
···
1
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/fonts/InterVariable.woff2
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/fonts/ms_sans_serif.woff2
···
1
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/ms_sans_serif.woff2
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/fonts/ms_sans_serif_bold.woff2
···
1
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/ms_sans_serif_bold.woff2
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/1.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/1.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/10.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/10.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/11.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/11.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/12.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/12.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/13.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/13.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/14.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/14.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/15.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/15.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/16.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/16.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/17.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/17.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/18.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/18.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/19.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/19.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/2.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/2.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/20.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/20.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/21.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/21.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/22.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/22.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/23.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/23.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/24.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/24.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/25.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/25.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/26.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/26.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/27.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/27.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/28.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/28.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/29.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/29.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/3.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/3.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/30.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/30.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/4.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/4.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/5.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/5.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/6.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/6.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/7.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/7.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/8.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/8.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/9.jpg
···
1
1
-
../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/9.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/1.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/1.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/10.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/10.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/11.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/11.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/12.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/12.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/13.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/13.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/14.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/14.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/15.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/15.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/16.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/16.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/17.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/17.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/18.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/18.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/19.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/19.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/2.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/2.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/20.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/20.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/21.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/21.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/22.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/22.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/23.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/23.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/24.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/24.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/25.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/25.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/26.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/26.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/27.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/27.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/28.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/28.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/29.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/29.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/3.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/3.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/30.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/30.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/4.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/4.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/5.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/5.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/6.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/6.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/7.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/7.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/8.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/8.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/background/thumbnails/9.jpg
···
1
1
-
../../../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/Background/Thumbnails/9.jpg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/diffuse-current.svg
···
1
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/diffuse-current.svg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/diffuse-dark.svg
···
1
1
-
../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse-dark.svg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/diffuse-grey.svg
···
1
1
-
../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse-grey.svg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/diffuse-light.svg
···
1
1
-
../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse-light.svg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/diffuse__icon-dark.svg
···
1
1
-
../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse__icon-dark.svg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/diffuse__icon-grey.svg
···
1
1
-
../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse__icon-grey.svg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/diffuse__icon-light.svg
···
1
1
-
../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/diffuse__icon-light.svg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icon-square-ws.png
···
1
1
-
../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/icon-square-ws.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icon-square.png
···
1
1
-
../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/icon-square.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icon.png
···
1
1
-
../../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/images/icon.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/catalog-1.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/catalog-1.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/cd_audio_cd_a-0.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/cd_audio_cd_a-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/cd_audio_cd_a-2.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/cd_audio_cd_a-2.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/cd_audio_cd_a-3.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/cd_audio_cd_a-3.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/cd_audio_cd_a-4.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/cd_audio_cd_a-4.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/cd_drive-0.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/cd_drive-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/cd_drive_purple-3.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/cd_drive_purple-3.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/channels-2.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/channels-2.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/check-0.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/check-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/computer_sound-0.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/computer_sound-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/computer_user_pencil-0.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/computer_user_pencil-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/connected_world-0.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/connected_world-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_admin_tools-3.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_admin_tools-3.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_admin_tools-5.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_admin_tools-5.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_channels-2.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_channels-2.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_channels-3.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_channels-3.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_closed-3.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_closed-3.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_closed-4.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_closed-4.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_control_panel-2.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_control_panel-2.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_control_panel-3.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_control_panel-3.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_explorer-4.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_explorer-4.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_explorer-5.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_explorer-5.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_favorites-2.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_favorites-2.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_favorites-4.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_favorites-4.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_net_web-3.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_net_web-3.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_net_web-4.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_net_web-4.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_network_conn-3.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_network_conn-3.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_network_conn-5.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_network_conn-5.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_open_file_mydocs_2k-3.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_open_file_mydocs_2k-3.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/directory_open_file_mydocs_2k-4.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/directory_open_file_mydocs_2k-4.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/gears-0.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/gears-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/globe_map-0.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/globe_map-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/help_book_big-0.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/help_book_big-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/installer-3.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/installer-3.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/installer_generic_old-0.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/installer_generic_old-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/loudspeaker_wave-0.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/loudspeaker_wave-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/magnifying_glass-0.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/magnifying_glass-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/magnifying_glass_4-1.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/magnifying_glass_4-1.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/media_player-0.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/media_player-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/media_player_stream_no.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/media_player_stream_no.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/ms_dos-1.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/ms_dos-1.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/msg_error-0.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/msg_error-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/msg_information-0.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/msg_information-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/msg_question-0.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/msg_question-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/msg_warning-0.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/msg_warning-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/multimedia-4.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/multimedia-4.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/network_drive_world-0.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/network_drive_world-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/no-1.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/no-1.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/restrict-1.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/restrict-1.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/search_computer-0.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/search_computer-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/search_server-1.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/search_server-1.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/search_web-0.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/search_web-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/settings_gear-0.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/settings_gear-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/settings_gear-2.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/settings_gear-2.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/tip.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/tip.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/utopia_smiley.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/utopia_smiley.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/winamp2-32x32.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/winamp2-32x32.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/windows-0.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/windows-0.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/world-2.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/world-2.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/world-4.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/world-4.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/images/icons/windows_98/world_network_directories-3.png
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/images/icons/windows_98/world_network_directories-3.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/index.html
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/index.html
-138
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/index.js
···
1
1
-
import {
2
2
-
GROUP
3
3
-
} from "./chunk-JUPK7PXD.js";
4
4
-
import {
5
5
-
element_default as element_default4
6
6
-
} from "./chunk-HRGYPYP6.js";
7
7
-
import "./chunk-YVFCBSEJ.js";
8
8
-
import "./chunk-OXLVUFPU.js";
9
9
-
import "./chunk-JQFGN3M7.js";
10
10
-
import "./chunk-GMLGV4UU.js";
11
11
-
import "./chunk-CPS76EE2.js";
12
12
-
import "./chunk-IPY3IZ42.js";
13
13
-
import {
14
14
-
element_default as element_default3
15
15
-
} from "./chunk-A7EWFKZ4.js";
16
16
-
import "./chunk-CNO46O5F.js";
17
17
-
import "./chunk-77DLAY6P.js";
18
18
-
import "./chunk-OEJDMRAO.js";
19
19
-
import "./chunk-LPLLWF34.js";
20
20
-
import "./chunk-BP7OSAES.js";
21
21
-
import "./chunk-77ZY4GQV.js";
22
22
-
import "./chunk-MVWHZJHR.js";
23
23
-
import "./chunk-S4RHYXDI.js";
24
24
-
import {
25
25
-
element_default as element_default5
26
26
-
} from "./chunk-FVTTELAZ.js";
27
27
-
import "./chunk-33EY7IZW.js";
28
28
-
import "./chunk-3W46CCB5.js";
29
29
-
import "./chunk-32QOJ2TM.js";
30
30
-
import {
31
31
-
element_default as element_default2
32
32
-
} from "./chunk-HDWTLLD6.js";
33
33
-
import "./chunk-M7PCQLSV.js";
34
34
-
import "./chunk-UXCYOXOC.js";
35
35
-
import "./chunk-GX3WPNEX.js";
36
36
-
import "./chunk-RPWC6IKI.js";
37
37
-
import "./chunk-SSTS6DW7.js";
38
38
-
import "./chunk-HN4F5JEZ.js";
39
39
-
import "./chunk-NGXRH664.js";
40
40
-
import "./chunk-CXGVZUBI.js";
41
41
-
import "./chunk-GSA3UBRU.js";
42
42
-
import "./chunk-AGNDISJF.js";
43
43
-
import "./chunk-EEUCFWD4.js";
44
44
-
import "./chunk-6DRHTH2U.js";
45
45
-
import "./chunk-JS4TF33K.js";
46
46
-
import {
47
47
-
element_default
48
48
-
} from "./chunk-UMLUM7AR.js";
49
49
-
import "./chunk-EEVL24MR.js";
50
50
-
import "./chunk-4UUOGUZ7.js";
51
51
-
import "./chunk-3WGC3A6G.js";
52
52
-
import "./chunk-S6GAP4IS.js";
53
53
-
import "./chunk-PE6SII6D.js";
54
54
-
import "./chunk-DUCTMCPX.js";
55
55
-
import "./chunk-UGE3FKYA.js";
56
56
-
import "./chunk-FIWHH4Y5.js";
57
57
-
import "./chunk-G56PUJUJ.js";
58
58
-
import "./chunk-KIMDMO5U.js";
59
59
-
import "./chunk-H3WG7GN4.js";
60
60
-
import "./chunk-EJ2QF5QE.js";
61
61
-
import "./chunk-NCFHYTLD.js";
62
62
-
import {
63
63
-
__name,
64
64
-
init_Buffer,
65
65
-
init_process
66
66
-
} from "./chunk-FZQXS3RE.js";
67
67
-
68
68
-
// index.js
69
69
-
init_Buffer();
70
70
-
init_process();
71
71
-
var s3 = new element_default2();
72
72
-
var input = new element_default();
73
73
-
input.setAttribute("group", GROUP);
74
74
-
input.append(s3);
75
75
-
var output = new element_default3();
76
76
-
output.setAttribute("group", GROUP);
77
77
-
var metadataProcessor = new element_default4();
78
78
-
metadataProcessor.setAttribute("group", GROUP);
79
79
-
document.body.append(input, output, metadataProcessor);
80
80
-
var pto = new element_default5();
81
81
-
pto.setAttribute("group", GROUP);
82
82
-
pto.setAttribute("input-selector", input.selector);
83
83
-
pto.setAttribute("output-selector", output.selector);
84
84
-
pto.setAttribute("metadata-processor-selector", metadataProcessor.selector);
85
85
-
document.body.append(pto);
86
86
-
var addDemoBtn = document.querySelector("#add-sample-content");
87
87
-
async function addSampleContent() {
88
88
-
if (!addDemoBtn) return;
89
89
-
addDemoBtn.setAttribute("disabled", "");
90
90
-
addDemoBtn.innerHTML = `<span>
91
91
-
<i class="ph-fill ph-hourglass-medium"></i>
92
92
-
Adding source
93
93
-
</span>`;
94
94
-
const demo = await s3.demo();
95
95
-
const tracks = output.tracks.collection();
96
96
-
await output.tracks.save([...tracks, demo.track]);
97
97
-
addDemoBtn.innerHTML = `<span>
98
98
-
<i class="ph-fill ph-hourglass-medium"></i>
99
99
-
Processing source
100
100
-
</span>`;
101
101
-
await pto.process();
102
102
-
addDemoBtn.innerHTML = `<span>
103
103
-
<i class="ph-fill ph-check-fat"></i> Added
104
104
-
</span>`;
105
105
-
}
106
106
-
__name(addSampleContent, "addSampleContent");
107
107
-
addDemoBtn?.addEventListener("click", addSampleContent);
108
108
-
if (document.location.hostname.endsWith("diffuse.sh")) {
109
109
-
document.querySelectorAll("#status").forEach(async (status) => {
110
110
-
const versionOrCid = document.location.pathname.slice(1).split("/")[0]?.toLowerCase() ?? "";
111
111
-
const usesCid = versionOrCid.startsWith("bafy");
112
112
-
const { default: artifacts } = await import(`${document.location.origin}/artifacts.json`, { with: { type: "json" } });
113
113
-
const lastArtifact = Object.values(artifacts).reverse()[0];
114
114
-
const isLatest = usesCid ? versionOrCid === lastArtifact.cid : versionOrCid === lastArtifact.version;
115
115
-
status.querySelectorAll(".ph-spinner").forEach((icon) => {
116
116
-
icon.parentElement?.classList.add("hidden");
117
117
-
setTimeout(() => {
118
118
-
icon.parentElement?.classList.remove("animate-spin");
119
119
-
icon.classList.remove("ph-spinner");
120
120
-
icon.classList.add("ph-arrow-fat-lines-up");
121
121
-
}, 500);
122
122
-
});
123
123
-
status.querySelectorAll(`[href="/latest/"]`).forEach((a) => {
124
124
-
if (usesCid) a.setAttribute("href", "/latest/hash/");
125
125
-
if (!isLatest) {
126
126
-
setTimeout(() => {
127
127
-
a.classList.remove("hidden");
128
128
-
}, 750);
129
129
-
}
130
130
-
});
131
131
-
});
132
132
-
} else {
133
133
-
document.querySelectorAll("#status").forEach((status) => {
134
134
-
status.remove();
135
135
-
});
136
136
-
}
137
137
-
138
138
-
//# sourceMappingURL=./index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/index.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/mstile-150x150.png
···
1
1
-
../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/mstile-150x150.png
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/node_crypto-QYMDOTAM.js
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/node_crypto-QYMDOTAM.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/node_crypto-QYMDOTAM.js.map
···
1
1
-
../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/node_crypto-QYMDOTAM.js.map
-12
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/oauth-client-metadata.json
···
1
1
-
{
2
2
-
"client_id": "https://elements.diffuse.sh/bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/oauth-client-metadata.json",
3
3
-
"client_name": "Diffuse",
4
4
-
"client_uri": "https://elements.diffuse.sh",
5
5
-
"redirect_uris": ["https://elements.diffuse.sh/"],
6
6
-
"scope": "atproto transition:generic",
7
7
-
"grant_types": ["authorization_code", "refresh_token"],
8
8
-
"response_types": ["code"],
9
9
-
"token_endpoint_auth_method": "none",
10
10
-
"application_type": "web",
11
11
-
"dpop_bound_access_tokens": true
12
12
-
}
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/safari-pinned-tab.svg
···
1
1
-
../bafybeickgtv5nqyo2wizj323e6jy4mlcrmchzyfsgjgngl5kbzv6coqhk4/safari-pinned-tab.svg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/animations.css
···
1
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/animations.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/animations.css.map
···
1
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/animations.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/base.css
···
1
1
-
../../bafybeiftdd7dlfoayxlckoz7nnnoun5ggr2p2biwnbnfn3zflg2drlkmca/styles/base.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/base.css.map
···
1
1
-
../../bafybeiftdd7dlfoayxlckoz7nnnoun5ggr2p2biwnbnfn3zflg2drlkmca/styles/base.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/diffuse/colors.css
···
1
1
-
../../../bafybeiftdd7dlfoayxlckoz7nnnoun5ggr2p2biwnbnfn3zflg2drlkmca/styles/diffuse/colors.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/diffuse/colors.css.map
···
1
1
-
../../../bafybeiftdd7dlfoayxlckoz7nnnoun5ggr2p2biwnbnfn3zflg2drlkmca/styles/diffuse/colors.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/diffuse/fonts.css
···
1
1
-
../../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/diffuse/fonts.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/diffuse/fonts.css.map
···
1
1
-
../../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/diffuse/fonts.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/diffuse/page.css
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/styles/diffuse/page.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/diffuse/page.css.map
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/styles/diffuse/page.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/font-faces.css
···
1
1
-
../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/font-faces.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/font-faces.css.map
···
1
1
-
../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/font-faces.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/reset.css
···
1
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/reset.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/reset.css.map
···
1
1
-
../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/reset.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/variables.css
···
1
1
-
../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/variables.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/variables.css.map
···
1
1
-
../../bafybeiezh4rgv7gk73o5dalfyilv5nfopezyvshtj5j7hrn23r4n27k7da/styles/variables.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/98.css
···
1
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/98.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/98.css.map
···
1
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/98.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/ms_sans_serif.woff2
···
1
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/ms_sans_serif.woff2
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/ms_sans_serif_bold.woff2
···
1
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/ms_sans_serif_bold.woff2
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/bold/Phosphor-Bold.svg
···
1
1
-
../../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/styles/vendor/phosphor/bold/Phosphor-Bold.svg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/bold/Phosphor-Bold.ttf
···
1
1
-
../../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/styles/vendor/phosphor/bold/Phosphor-Bold.ttf
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/bold/Phosphor-Bold.woff
···
1
1
-
../../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/styles/vendor/phosphor/bold/Phosphor-Bold.woff
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/bold/Phosphor-Bold.woff2
···
1
1
-
../../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/styles/vendor/phosphor/bold/Phosphor-Bold.woff2
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/bold/style.css
···
1
1
-
../../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/styles/vendor/phosphor/bold/style.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/bold/style.css.map
···
1
1
-
../../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/styles/vendor/phosphor/bold/style.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/fill/Phosphor-Fill.svg
···
1
1
-
../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/Phosphor-Fill.svg
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/fill/Phosphor-Fill.ttf
···
1
1
-
../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/Phosphor-Fill.ttf
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/fill/Phosphor-Fill.woff
···
1
1
-
../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/Phosphor-Fill.woff
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/fill/Phosphor-Fill.woff2
···
1
1
-
../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/Phosphor-Fill.woff2
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/fill/style.css
···
1
1
-
../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/style.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/vendor/phosphor/fill/style.css.map
···
1
1
-
../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/styles/vendor/phosphor/fill/style.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/wireframe/ui.css
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/styles/wireframe/ui.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/styles/wireframe/ui.css.map
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/styles/wireframe/ui.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/testing/index.html
···
1
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/testing/index.html
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/testing/output.js
···
1
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/testing/output.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/testing/output.js.map
···
1
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/testing/output.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/testing/output/index.html
···
1
1
-
../../../bafybeic6tj6wx4iomrjs54m3je4e7lmq4jgcn7zqegufxtvqijffq32zkm/testing/output/index.html
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/testing/sample/tracks.js
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/testing/sample/tracks.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/testing/sample/tracks.js.map
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/testing/sample/tracks.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/artwork-controller/element.css
···
1
1
-
../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/themes/blur/artwork-controller/element.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/artwork-controller/element.css.map
···
1
1
-
../../../../bafybeidxl54c4ymomv6kytxqps6b5di34hgltpvyomx52g65lplv6dosxy/themes/blur/artwork-controller/element.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/artwork-controller/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/blur/artwork-controller/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/artwork-controller/element.js.map
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/blur/artwork-controller/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/artwork-controller/facet.html.txt
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/blur/artwork-controller/facet.html.txt
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/index.css
···
1
1
-
../../../bafybeihr4brahqptxmxcdksktdfgs4hyl64odwx524vqmmitjvmn57sklq/themes/blur/index.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/index.css.map
···
1
1
-
../../../bafybeihr4brahqptxmxcdksktdfgs4hyl64odwx524vqmmitjvmn57sklq/themes/blur/index.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/index.html
···
1
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/blur/index.html
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/index.js
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/blur/index.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/index.js.map
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/blur/index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/variables.css
···
1
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/blur/variables.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/blur/variables.css.map
···
1
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/blur/variables.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/index.html
···
1
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/index.html
-287
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/index.js
···
1
1
-
import {
2
2
-
EditorView,
3
3
-
autocompletion,
4
4
-
basicSetup,
5
5
-
css,
6
6
-
html,
7
7
-
javascript
8
8
-
} from "../chunk-WM2QH5TD.js";
9
9
-
import {
10
10
-
themeFromUrl
11
11
-
} from "../chunk-G2ZO6QIY.js";
12
12
-
import {
13
13
-
foundation_default
14
14
-
} from "../chunk-JUPK7PXD.js";
15
15
-
import "../chunk-HRGYPYP6.js";
16
16
-
import "../chunk-YVFCBSEJ.js";
17
17
-
import "../chunk-OXLVUFPU.js";
18
18
-
import "../chunk-JQFGN3M7.js";
19
19
-
import "../chunk-GMLGV4UU.js";
20
20
-
import "../chunk-CPS76EE2.js";
21
21
-
import "../chunk-IPY3IZ42.js";
22
22
-
import "../chunk-A7EWFKZ4.js";
23
23
-
import "../chunk-CNO46O5F.js";
24
24
-
import "../chunk-77DLAY6P.js";
25
25
-
import "../chunk-OEJDMRAO.js";
26
26
-
import "../chunk-LPLLWF34.js";
27
27
-
import "../chunk-BP7OSAES.js";
28
28
-
import "../chunk-77ZY4GQV.js";
29
29
-
import "../chunk-MVWHZJHR.js";
30
30
-
import "../chunk-S4RHYXDI.js";
31
31
-
import "../chunk-FVTTELAZ.js";
32
32
-
import "../chunk-33EY7IZW.js";
33
33
-
import "../chunk-3W46CCB5.js";
34
34
-
import "../chunk-32QOJ2TM.js";
35
35
-
import "../chunk-HDWTLLD6.js";
36
36
-
import "../chunk-M7PCQLSV.js";
37
37
-
import "../chunk-UXCYOXOC.js";
38
38
-
import "../chunk-GX3WPNEX.js";
39
39
-
import "../chunk-RPWC6IKI.js";
40
40
-
import "../chunk-SSTS6DW7.js";
41
41
-
import "../chunk-HN4F5JEZ.js";
42
42
-
import "../chunk-NGXRH664.js";
43
43
-
import "../chunk-CXGVZUBI.js";
44
44
-
import "../chunk-GSA3UBRU.js";
45
45
-
import "../chunk-AGNDISJF.js";
46
46
-
import "../chunk-EEUCFWD4.js";
47
47
-
import "../chunk-6DRHTH2U.js";
48
48
-
import "../chunk-JS4TF33K.js";
49
49
-
import "../chunk-UMLUM7AR.js";
50
50
-
import "../chunk-EEVL24MR.js";
51
51
-
import "../chunk-4UUOGUZ7.js";
52
52
-
import "../chunk-3WGC3A6G.js";
53
53
-
import "../chunk-S6GAP4IS.js";
54
54
-
import "../chunk-PE6SII6D.js";
55
55
-
import "../chunk-DUCTMCPX.js";
56
56
-
import "../chunk-UGE3FKYA.js";
57
57
-
import {
58
58
-
B,
59
59
-
T
60
60
-
} from "../chunk-FIWHH4Y5.js";
61
61
-
import "../chunk-G56PUJUJ.js";
62
62
-
import {
63
63
-
effect,
64
64
-
signal
65
65
-
} from "../chunk-KIMDMO5U.js";
66
66
-
import "../chunk-H3WG7GN4.js";
67
67
-
import "../chunk-EJ2QF5QE.js";
68
68
-
import "../chunk-NCFHYTLD.js";
69
69
-
import {
70
70
-
qi
71
71
-
} from "../chunk-PUHBIZRM.js";
72
72
-
import {
73
73
-
create
74
74
-
} from "../chunk-4YB6QUPN.js";
75
75
-
import {
76
76
-
__name,
77
77
-
init_Buffer,
78
78
-
init_process
79
79
-
} from "../chunk-FZQXS3RE.js";
80
80
-
81
81
-
// themes/index.js
82
82
-
init_Buffer();
83
83
-
init_process();
84
84
-
document.body.addEventListener(
85
85
-
"click",
86
86
-
/**
87
87
-
* @param {MouseEvent} event
88
88
-
*/
89
89
-
async (event) => {
90
90
-
const target = (
91
91
-
/** @type {HTMLElement} */
92
92
-
event.target
93
93
-
);
94
94
-
const rel = target.getAttribute("rel");
95
95
-
if (!rel) return;
96
96
-
const url = target.closest("li")?.getAttribute("data-url");
97
97
-
if (!url) return;
98
98
-
const name = target.closest("li")?.getAttribute("data-name");
99
99
-
if (!name) return;
100
100
-
switch (rel) {
101
101
-
case "fork": {
102
102
-
const theme = await themeFromUrl({ name, url }, { fetchHTML: true });
103
103
-
editTheme(theme);
104
104
-
document.querySelector("#build")?.scrollIntoView();
105
105
-
break;
106
106
-
}
107
107
-
case "save": {
108
108
-
const theme = await themeFromUrl({ name, url }, { fetchHTML: false });
109
109
-
const out = foundation_default.orchestrator.output();
110
110
-
out.themes.save([
111
111
-
...out.themes.collection(),
112
112
-
theme
113
113
-
]);
114
114
-
break;
115
115
-
}
116
116
-
}
117
117
-
}
118
118
-
);
119
119
-
var listEl = document.querySelector("#list");
120
120
-
if (!listEl) throw new Error("List element not found");
121
121
-
var output = foundation_default.orchestrator.output();
122
122
-
effect(() => {
123
123
-
const col = output.themes.collection().sort((a, b) => {
124
124
-
return a.name.toLocaleLowerCase().localeCompare(b.name.toLocaleLowerCase());
125
125
-
});
126
126
-
const h = col.length ? T`
127
127
-
<ul>
128
128
-
${col.map(
129
129
-
(c) => T`
130
130
-
<li style="margin-bottom: var(--space-2xs)">
131
131
-
<span>${c.name}</span>
132
132
-
<div class="list-description">
133
133
-
<div style="margin-bottom: var(--space-2xs)">
134
134
-
${c.url && !c.html ? T`
135
135
-
<span class="with-icon">
136
136
-
<i class="ph-fill ph-binoculars"></i>
137
137
-
<span>Tracking the original <a href="${c.url}">URL</a></span>
138
138
-
</span>
139
139
-
` : T`
140
140
-
<span class="with-icon">
141
141
-
<i class="ph-fill ph-code"></i>
142
142
-
<span>Custom code</span>
143
143
-
</span>
144
144
-
`}
145
145
-
</div>
146
146
-
<div class="button-row">
147
147
-
<a href="themes/l/?id=${c.id}" class="button button--bg-twist-1">
148
148
-
<span class="with-icon">
149
149
-
<i class="ph-fill ph-globe"></i> Open
150
150
-
</span>
151
151
-
</a>
152
152
-
<button
153
153
-
class="button--bg-twist-1 button--subtle"
154
154
-
@click="${() => editTheme(c)}"
155
155
-
>
156
156
-
<span class="with-icon">
157
157
-
<i class="ph-fill ph-cursor-text"></i> Edit
158
158
-
</span>
159
159
-
</button>
160
160
-
<button
161
161
-
class="button--bg-twist-2 button--subtle"
162
162
-
@click="${deleteTheme({
163
163
-
id: c.id
164
164
-
})}"
165
165
-
>
166
166
-
<span class="with-icon">
167
167
-
<i class="ph-fill ph-eraser"></i> Delete
168
168
-
</span>
169
169
-
</button>
170
170
-
</div>
171
171
-
</div>
172
172
-
</li>
173
173
-
`
174
174
-
)}
175
175
-
</ul>
176
176
-
` : output.themes.state() === "loaded" ? emptyThemesList : T`
177
177
-
<i class="ph-bold ph-spinner-gap"></i>
178
178
-
`;
179
179
-
B(h, listEl);
180
180
-
});
181
181
-
var emptyThemesList = T`
182
182
-
<p style="margin-bottom: 0;">
183
183
-
<i class="ph-fill ph-info"></i> You have not saved any themes yet.
184
184
-
</p>
185
185
-
`;
186
186
-
function deleteTheme({ id }) {
187
187
-
return () => {
188
188
-
const c = confirm("Are you sure you want to delete this theme?");
189
189
-
if (!c) return;
190
190
-
output.themes.save(
191
191
-
output.themes.collection().filter((c2) => !(c2.id === id))
192
192
-
);
193
193
-
};
194
194
-
}
195
195
-
__name(deleteTheme, "deleteTheme");
196
196
-
var $editingTheme = signal(
197
197
-
/** @type {Theme | null} */
198
198
-
null
199
199
-
);
200
200
-
var editorContainer = document.body.querySelector("#html-input-container");
201
201
-
if (!editorContainer) throw new Error("Editor container not found");
202
202
-
var editor = new EditorView({
203
203
-
parent: editorContainer,
204
204
-
doc: ``.trim(),
205
205
-
extensions: [
206
206
-
basicSetup,
207
207
-
html(),
208
208
-
css(),
209
209
-
javascript(),
210
210
-
autocompletion()
211
211
-
]
212
212
-
});
213
213
-
document.querySelector("#build-form")?.addEventListener(
214
214
-
"submit",
215
215
-
onBuildSubmit
216
216
-
);
217
217
-
async function onBuildSubmit(event) {
218
218
-
event.preventDefault();
219
219
-
const nameEl = (
220
220
-
/** @type {HTMLInputElement | null} */
221
221
-
document.querySelector(
222
222
-
"#name-input"
223
223
-
)
224
224
-
);
225
225
-
const html2 = editor.state.doc.toString();
226
226
-
const cid = await create(85, new TextEncoder().encode(html2));
227
227
-
const name = nameEl?.value ?? "nameless";
228
228
-
const theme = $editingTheme.value ? {
229
229
-
...$editingTheme.value,
230
230
-
cid,
231
231
-
html: html2,
232
232
-
name
233
233
-
} : {
234
234
-
$type: "sh.diffuse.output.theme",
235
235
-
id: crypto.randomUUID(),
236
236
-
cid,
237
237
-
html: html2,
238
238
-
name
239
239
-
};
240
240
-
switch (
241
241
-
/** @type {any} */
242
242
-
event.submitter.name
243
243
-
) {
244
244
-
case "save":
245
245
-
await saveTheme(theme);
246
246
-
break;
247
247
-
case "save+open":
248
248
-
await saveTheme(theme);
249
249
-
globalThis.open(`./themes/l/?id=${theme.id}`, "blank");
250
250
-
break;
251
251
-
}
252
252
-
}
253
253
-
__name(onBuildSubmit, "onBuildSubmit");
254
254
-
async function editTheme(ogTheme) {
255
255
-
const theme = { ...ogTheme };
256
256
-
const nameEl = (
257
257
-
/** @type {HTMLInputElement | null} */
258
258
-
document.querySelector(
259
259
-
"#name-input"
260
260
-
)
261
261
-
);
262
262
-
if (!nameEl) return;
263
263
-
if (!theme.html && theme.url) {
264
264
-
const html2 = await fetch(theme.url).then((res) => res.text());
265
265
-
const cid = await create(85, new TextEncoder().encode(html2));
266
266
-
theme.html = html2;
267
267
-
theme.cid = cid;
268
268
-
}
269
269
-
$editingTheme.value = theme;
270
270
-
nameEl.value = theme.name;
271
271
-
editor.dispatch({
272
272
-
changes: { from: 0, to: editor.state.doc.length, insert: theme.html }
273
273
-
});
274
274
-
}
275
275
-
__name(editTheme, "editTheme");
276
276
-
async function saveTheme(theme) {
277
277
-
const col = output.themes.collection();
278
278
-
const colWithoutId = col.filter((c) => c.id !== theme.id);
279
279
-
const timestamp = qi.Now.zonedDateTimeISO().toString();
280
280
-
await output.themes.save([...colWithoutId, {
281
281
-
...theme,
282
282
-
updatedAt: timestamp
283
283
-
}]);
284
284
-
}
285
285
-
__name(saveTheme, "saveTheme");
286
286
-
287
287
-
//# sourceMappingURL=./index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/index.js.map
···
1
1
-
../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/l/index.css
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/l/index.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/l/index.css.map
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/l/index.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/l/index.html
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/l/index.html
-108
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/l/index.js
···
1
1
-
import {
2
2
-
foundation_default
3
3
-
} from "../../chunk-JUPK7PXD.js";
4
4
-
import "../../chunk-HRGYPYP6.js";
5
5
-
import "../../chunk-YVFCBSEJ.js";
6
6
-
import "../../chunk-OXLVUFPU.js";
7
7
-
import "../../chunk-JQFGN3M7.js";
8
8
-
import "../../chunk-GMLGV4UU.js";
9
9
-
import "../../chunk-CPS76EE2.js";
10
10
-
import "../../chunk-IPY3IZ42.js";
11
11
-
import "../../chunk-A7EWFKZ4.js";
12
12
-
import "../../chunk-CNO46O5F.js";
13
13
-
import "../../chunk-77DLAY6P.js";
14
14
-
import "../../chunk-OEJDMRAO.js";
15
15
-
import "../../chunk-LPLLWF34.js";
16
16
-
import "../../chunk-BP7OSAES.js";
17
17
-
import "../../chunk-77ZY4GQV.js";
18
18
-
import "../../chunk-MVWHZJHR.js";
19
19
-
import "../../chunk-S4RHYXDI.js";
20
20
-
import "../../chunk-FVTTELAZ.js";
21
21
-
import "../../chunk-33EY7IZW.js";
22
22
-
import "../../chunk-3W46CCB5.js";
23
23
-
import "../../chunk-32QOJ2TM.js";
24
24
-
import "../../chunk-HDWTLLD6.js";
25
25
-
import "../../chunk-M7PCQLSV.js";
26
26
-
import "../../chunk-UXCYOXOC.js";
27
27
-
import "../../chunk-GX3WPNEX.js";
28
28
-
import "../../chunk-RPWC6IKI.js";
29
29
-
import "../../chunk-SSTS6DW7.js";
30
30
-
import "../../chunk-HN4F5JEZ.js";
31
31
-
import "../../chunk-NGXRH664.js";
32
32
-
import "../../chunk-CXGVZUBI.js";
33
33
-
import "../../chunk-GSA3UBRU.js";
34
34
-
import "../../chunk-AGNDISJF.js";
35
35
-
import "../../chunk-EEUCFWD4.js";
36
36
-
import "../../chunk-6DRHTH2U.js";
37
37
-
import "../../chunk-JS4TF33K.js";
38
38
-
import "../../chunk-UMLUM7AR.js";
39
39
-
import "../../chunk-EEVL24MR.js";
40
40
-
import "../../chunk-4UUOGUZ7.js";
41
41
-
import "../../chunk-3WGC3A6G.js";
42
42
-
import "../../chunk-S6GAP4IS.js";
43
43
-
import "../../chunk-PE6SII6D.js";
44
44
-
import "../../chunk-DUCTMCPX.js";
45
45
-
import "../../chunk-UGE3FKYA.js";
46
46
-
import "../../chunk-FIWHH4Y5.js";
47
47
-
import "../../chunk-G56PUJUJ.js";
48
48
-
import {
49
49
-
effect
50
50
-
} from "../../chunk-KIMDMO5U.js";
51
51
-
import "../../chunk-H3WG7GN4.js";
52
52
-
import "../../chunk-EJ2QF5QE.js";
53
53
-
import "../../chunk-NCFHYTLD.js";
54
54
-
import {
55
55
-
create
56
56
-
} from "../../chunk-4YB6QUPN.js";
57
57
-
import {
58
58
-
__name,
59
59
-
init_Buffer,
60
60
-
init_process
61
61
-
} from "../../chunk-FZQXS3RE.js";
62
62
-
63
63
-
// themes/l/index.js
64
64
-
init_Buffer();
65
65
-
init_process();
66
66
-
var output = foundation_default.orchestrator.output();
67
67
-
var docUrl = new URL(document.location.href);
68
68
-
var id = docUrl.searchParams.get("id");
69
69
-
var cid = docUrl.searchParams.get("cid");
70
70
-
var name = docUrl.searchParams.get("name");
71
71
-
var url = docUrl.searchParams.get("url");
72
72
-
effect(async () => {
73
73
-
const collection = output.themes.collection();
74
74
-
if (output.themes.state() !== "loaded") return;
75
75
-
let theme;
76
76
-
if (id) {
77
77
-
theme = collection.find((t) => t.id === id);
78
78
-
} else if (cid) {
79
79
-
theme = collection.find((t) => t.cid === cid);
80
80
-
} else if (name) {
81
81
-
theme = collection.find((t) => t.name === name);
82
82
-
} else if (url) {
83
83
-
const t = {
84
84
-
$type: "sh.diffuse.output.theme",
85
85
-
id: crypto.randomUUID(),
86
86
-
name: "tryout",
87
87
-
url
88
88
-
};
89
89
-
theme = t;
90
90
-
}
91
91
-
if (!theme) return;
92
92
-
if (!theme.html && theme.url) {
93
93
-
const html = await fetch(theme.url).then((res) => res.text());
94
94
-
const cid2 = await create(85, new TextEncoder().encode(html));
95
95
-
theme.html = html;
96
96
-
theme.cid = cid2;
97
97
-
}
98
98
-
loadIntoContainer(theme);
99
99
-
});
100
100
-
function loadIntoContainer(theme) {
101
101
-
const iframe = document.createElement("iframe");
102
102
-
iframe.srcdoc = theme.html ?? "";
103
103
-
document.body.innerHTML = "";
104
104
-
document.body.append(iframe);
105
105
-
}
106
106
-
__name(loadIntoContainer, "loadIntoContainer");
107
107
-
108
108
-
//# sourceMappingURL=./index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/l/index.js.map
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/l/index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/98-vars.css
···
1
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/98-vars.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/98-vars.css.map
···
1
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/98-vars.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/browser/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/browser/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/browser/element.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/browser/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/browser/facet.html.txt
···
1
1
-
../../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/themes/webamp/browser/facet.html.txt
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/common/ui.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/common/ui.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/common/ui.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/common/ui.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/configurators/input/element.js
···
1
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/configurators/input/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/configurators/input/element.js.map
···
1
1
-
../../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/configurators/input/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/configurators/input/facet.html.txt
···
1
1
-
../../../../../bafybeibpmqpxuvey34kzaxj3yyprwbkgvhbuz3xpxb74jpk7nxgxu2yr74/themes/webamp/configurators/input/facet.html.txt
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/configurators/output/element.js
···
1
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/configurators/output/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/configurators/output/element.js.map
···
1
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/configurators/output/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/configurators/output/facet.html.txt
···
1
1
-
../../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/configurators/output/facet.html.txt
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/facet.css
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/facet.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/facet.css.map
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/facet.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/fonts.css
···
1
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/fonts.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/fonts.css.map
···
1
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/fonts.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/index.css
···
1
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/index.css
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/index.css.map
···
1
1
-
../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/index.css.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/index.html
···
1
1
-
../../../bafybeihr4brahqptxmxcdksktdfgs4hyl64odwx524vqmmitjvmn57sklq/themes/webamp/index.html
-180
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/index.js
···
1
1
-
import "../../chunk-ONE5JH5Q.js";
2
2
-
import "../../chunk-EMWRB7HX.js";
3
3
-
import "../../chunk-3CXPPL5Z.js";
4
4
-
import "../../chunk-EY2MBHBU.js";
5
5
-
import {
6
6
-
element_default
7
7
-
} from "../../chunk-HNTKRGE7.js";
8
8
-
import {
9
9
-
element_default as element_default2
10
10
-
} from "../../chunk-KGUWC6A2.js";
11
11
-
import "../../chunk-QJG4JBCO.js";
12
12
-
import "../../chunk-HRGYPYP6.js";
13
13
-
import {
14
14
-
element_exports as element_exports3
15
15
-
} from "../../chunk-YVFCBSEJ.js";
16
16
-
import {
17
17
-
element_exports as element_exports4
18
18
-
} from "../../chunk-JQFGN3M7.js";
19
19
-
import "../../chunk-IPY3IZ42.js";
20
20
-
import "../../chunk-A7EWFKZ4.js";
21
21
-
import "../../chunk-CNO46O5F.js";
22
22
-
import "../../chunk-77DLAY6P.js";
23
23
-
import "../../chunk-OEJDMRAO.js";
24
24
-
import "../../chunk-LPLLWF34.js";
25
25
-
import "../../chunk-BP7OSAES.js";
26
26
-
import "../../chunk-77ZY4GQV.js";
27
27
-
import "../../chunk-MVWHZJHR.js";
28
28
-
import "../../chunk-S4RHYXDI.js";
29
29
-
import "../../chunk-FVTTELAZ.js";
30
30
-
import "../../chunk-3W46CCB5.js";
31
31
-
import "../../chunk-HDWTLLD6.js";
32
32
-
import "../../chunk-M7PCQLSV.js";
33
33
-
import "../../chunk-UXCYOXOC.js";
34
34
-
import "../../chunk-GX3WPNEX.js";
35
35
-
import "../../chunk-RPWC6IKI.js";
36
36
-
import "../../chunk-SSTS6DW7.js";
37
37
-
import "../../chunk-HN4F5JEZ.js";
38
38
-
import "../../chunk-GSA3UBRU.js";
39
39
-
import "../../chunk-AGNDISJF.js";
40
40
-
import "../../chunk-EEUCFWD4.js";
41
41
-
import "../../chunk-6DRHTH2U.js";
42
42
-
import "../../chunk-JS4TF33K.js";
43
43
-
import {
44
44
-
element_exports as element_exports2
45
45
-
} from "../../chunk-UMLUM7AR.js";
46
46
-
import "../../chunk-EEVL24MR.js";
47
47
-
import "../../chunk-4UUOGUZ7.js";
48
48
-
import {
49
49
-
element_exports
50
50
-
} from "../../chunk-PE6SII6D.js";
51
51
-
import "../../chunk-DUCTMCPX.js";
52
52
-
import "../../chunk-UGE3FKYA.js";
53
53
-
import {
54
54
-
component
55
55
-
} from "../../chunk-FIWHH4Y5.js";
56
56
-
import "../../chunk-G56PUJUJ.js";
57
57
-
import {
58
58
-
effect,
59
59
-
untracked
60
60
-
} from "../../chunk-KIMDMO5U.js";
61
61
-
import "../../chunk-H3WG7GN4.js";
62
62
-
import "../../chunk-EJ2QF5QE.js";
63
63
-
import "../../chunk-NCFHYTLD.js";
64
64
-
import {
65
65
-
__name,
66
66
-
init_Buffer,
67
67
-
init_process
68
68
-
} from "../../chunk-FZQXS3RE.js";
69
69
-
70
70
-
// themes/webamp/index.js
71
71
-
init_Buffer();
72
72
-
init_process();
73
73
-
var input = component(element_exports2);
74
74
-
var queue = component(element_exports);
75
75
-
var search = component(element_exports3);
76
76
-
var scopedTracks = component(element_exports4);
77
77
-
var output = document.querySelector("#output");
78
78
-
if (!output) throw new Error("Missing output element");
79
79
-
globalThis.queue = queue;
80
80
-
globalThis.output = output;
81
81
-
var index = {};
82
82
-
var initiatedPlaylist = false;
83
83
-
var ampElement = document.querySelector("dtw-webamp");
84
84
-
if (ampElement instanceof element_default === false) {
85
85
-
throw new Error("Missing webamp element");
86
86
-
}
87
87
-
var amp = ampElement.amp;
88
88
-
var loadFromUrl = amp.media.loadFromUrl.bind(amp.media);
89
89
-
async function loadOverride(uri, autoPlay) {
90
90
-
if (uri.startsWith("blob:")) {
91
91
-
return await loadFromUrl(uri, autoPlay);
92
92
-
}
93
93
-
const resp = await input.resolve({ method: "GET", uri });
94
94
-
if (!resp) throw new Error("Failed to resolve URI");
95
95
-
if (resp && "stream" in resp) {
96
96
-
throw new Error("Webamp does not support playing streams.");
97
97
-
}
98
98
-
return await loadFromUrl(resp.url, autoPlay);
99
99
-
}
100
100
-
__name(loadOverride, "loadOverride");
101
101
-
amp.media.loadFromUrl = loadOverride.bind(amp.media);
102
102
-
effect(() => {
103
103
-
const past = untracked(() => queue.past());
104
104
-
const now = untracked(() => queue.now());
105
105
-
const future = queue.future();
106
106
-
const list = [...past, ...now ? [now] : [], ...future];
107
107
-
const newIdx = {};
108
108
-
const idMap = {};
109
109
-
list.forEach((item) => {
110
110
-
newIdx[item.id] = (newIdx[item.id] ?? 0) + 1;
111
111
-
idMap[item.id] = item;
112
112
-
});
113
113
-
const tracksToAdd = [];
114
114
-
Object.entries(newIdx).forEach(([id, n]) => {
115
115
-
const x = index[id] ?? 0;
116
116
-
if (n > x) {
117
117
-
tracksToAdd.push(idMap[id]);
118
118
-
index[id] = x + 1;
119
119
-
}
120
120
-
});
121
121
-
tracksToAdd.forEach((t) => ampElement.addTrack(t));
122
122
-
if (!initiatedPlaylist && tracksToAdd.length) {
123
123
-
initiatedPlaylist = true;
124
124
-
amp.store.dispatch({ type: "BUFFER_TRACK", id: 0 });
125
125
-
}
126
126
-
});
127
127
-
effect(() => {
128
128
-
queue.supply({ tracks: scopedTracks.tracks() });
129
129
-
});
130
130
-
var tracksPromise = Promise.withResolvers();
131
131
-
effect(() => {
132
132
-
const state = output.tracks.state();
133
133
-
if (state !== "loaded") return;
134
134
-
const fingerprintSearch = search.supplyFingerprint();
135
135
-
if (fingerprintSearch === void 0) return;
136
136
-
const fingerprintQueue = queue.supplyFingerprint();
137
137
-
if (fingerprintQueue === void 0) return;
138
138
-
tracksPromise.resolve("loaded");
139
139
-
});
140
140
-
document.body.querySelectorAll(".desktop__item").forEach((element) => {
141
141
-
if (element instanceof HTMLElement) {
142
142
-
element.addEventListener("dblclick", () => {
143
143
-
const f = element.querySelector("label")?.getAttribute("for");
144
144
-
if (f) return windowManager()?.toggleWindow(f);
145
145
-
});
146
146
-
}
147
147
-
});
148
148
-
document.body.querySelector("#desktop-batch")?.addEventListener(
149
149
-
"dblclick",
150
150
-
() => {
151
151
-
tracksPromise.promise.then(() => {
152
152
-
addBatch();
153
153
-
});
154
154
-
}
155
155
-
);
156
156
-
var winampIsShown = true;
157
157
-
document.body.querySelector("#desktop-winamp")?.addEventListener(
158
158
-
"dblclick",
159
159
-
() => {
160
160
-
if (winampIsShown) {
161
161
-
amp.close();
162
162
-
} else {
163
163
-
amp.reopen();
164
164
-
winampIsShown = true;
165
165
-
}
166
166
-
}
167
167
-
);
168
168
-
amp.onClose(() => winampIsShown = false);
169
169
-
async function addBatch() {
170
170
-
await queue.fill({ augment: true, amount: 50, shuffled: true });
171
171
-
}
172
172
-
__name(addBatch, "addBatch");
173
173
-
function windowManager() {
174
174
-
const w = document.body.querySelector("dtw-window-manager");
175
175
-
if (w instanceof element_default2) return w;
176
176
-
return null;
177
177
-
}
178
178
-
__name(windowManager, "windowManager");
179
179
-
180
180
-
//# sourceMappingURL=./index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/index.js.map
···
1
1
-
../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/index.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/webamp/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/webamp/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/webamp/element.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/webamp/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/window-manager/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/window-manager/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/window-manager/element.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/window-manager/element.js.map
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/window/element.js
···
1
1
-
../../../../bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu/themes/webamp/window/element.js
-1
artifacts/bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha/themes/webamp/window/element.js.map
···
1
1
-
../../../../bafybeib3wlfzxqunhpofk5mpfpyoqpd42bsj43o3vzxnpjbahimyjjyq54/themes/webamp/window/element.js.map
+2
-2
artifacts/versions.json
···
5
5
"version": "3.5.0"
6
6
},
7
7
"4.0.0-alpha": {
8
8
-
"cid": "bafybeidsm7gnga577ssyczkvij5icxw2mg4zu5rrvilglmkyaguso52uha",
8
8
+
"cid": "bafybeidalhvzpez6rklon4cuqrh44f47s6iw34tgqzocr5c3mdhxbkwtsu",
9
9
"createdAt": "2026-02-15T18:06:05.676Z",
10
10
"version": "4.0.0-alpha"
11
11
}
12
12
-
}
12
12
+
}
+7
-1
tasks/generate-redirects.ts
···
180
180
status: 302,
181
181
};
182
182
183
183
+
const oauth: Rule = {
184
184
+
from: "/oauth-client-metadata.json",
185
185
+
to: `/${latestRelease.cid}/oauth-client-metadata.json`,
186
186
+
status: 200,
187
187
+
};
188
188
+
183
189
const root: Rule = {
184
190
from: "/",
185
191
to: `/${latestRelease.version}/`,
186
192
status: 302,
187
193
};
188
194
189
189
-
rules = [root, latest, latestHash, latestSplat, ...rules];
195
195
+
rules = [root, latest, latestHash, latestSplat, oauth, ...rules];
190
196
191
197
////////////////////////////////////////////
192
198
// `_redirects` file