···11-/* esm.sh - @atcute/identity-resolver@1.2.2 */
22-import{getAtprotoHandle as H,getPdsEndpoint as S}from"../../identity@1.1.4/es2022/identity.mjs";import{isDid as X}from"../../lexicons@1.2.10/es2022/syntax.mjs";var v=class extends Error{name="DidResolutionError"},h=class extends v{did;name="UnsupportedDidMethodError";constructor(e){super(`unsupported did method; did=${e}`),this.did=e}},U=class extends v{did;name="ImproperDidError";constructor(e){super(`improper did; did=${e}`),this.did=e}},p=class extends v{did;name="DocumentNotFoundError";constructor(e){super(`did document not found; did=${e}`),this.did=e}},u=class extends v{did;name="FailedDocumentResolutionError";constructor(e,r){super(`failed to resolve did document; did=${e}`,r),this.did=e}},E=class extends Error{name="HandleResolutionError"},f=class extends E{handle;name="DidNotFoundError";constructor(e){super(`handle returned no did; handle=${e}`),this.handle=e}},m=class extends E{handle;name="FailedHandleResolutionError";constructor(e,r){super(`failed to resolve handle; handle=${e}`,r),this.handle=e}},g=class extends E{handle;did;name="InvalidResolvedHandleError";constructor(e,r){super(`handle returned invalid did; handle=${e}; did=${r}`),this.handle=e,this.did=r}},R=class extends E{name="AmbiguousHandleError";constructor(e){super(`handle returned multiple did values; handle=${e}`)}},y=class extends Error{name="ActorResolutionError"};var A=class{handleResolver;didDocumentResolver;constructor(e){this.handleResolver=e.handleResolver,this.didDocumentResolver=e.didDocumentResolver}async resolve(e,r){let n=X(e),t;if(n)t=e;else try{t=await this.handleResolver.resolve(e,r)}catch(c){throw new y("failed to resolve handle",{cause:c})}let s;try{s=await this.didDocumentResolver.resolve(t,r)}catch(c){throw new y("failed to resolve did document",{cause:c})}let o=S(s);if(!o)throw new y("missing pds endpoint");let a="handle.invalid";if(n){let c=H(s);if(c)try{await this.handleResolver.resolve(c,r)===t&&(a=c)}catch{}}else H(s)===e&&(a=e);return{did:t,handle:a,pds:new URL(o).href}}};import{extractDidMethod as B}from"../../identity@1.1.4/es2022/identity.mjs";var T=class{#e;constructor({methods:e}){this.#e=new Map(Object.entries(e))}async resolve(e,r){let n=B(e),t=this.#e.get(n);if(t===void 0)throw new h(e);return await t.resolve(e,r)}};import{FailedResponseError as Q}from"../../util-fetch@1.0.5/es2022/util-fetch.mjs";import{defs as _}from"../../identity@1.1.4/es2022/identity.mjs";import{isResponseOk as q,parseResponseAsJson as z,pipe as G,validateJsonWith as K}from"../../util-fetch@1.0.5/es2022/util-fetch.mjs";var j=G(q,z(/^application\/(did\+ld\+)?json$/,20*1024),K(_.didDocument,{mode:"passthrough"}));var N=class{apiUrl;#e;constructor({apiUrl:e="https://plc.directory",fetch:r=fetch}={}){this.apiUrl=e,this.#e=r}async resolve(e,r){if(!e.startsWith("did:plc:"))throw new h(e);let n;try{let t=new URL(`/${encodeURIComponent(e)}`,this.apiUrl),s=await(0,this.#e)(t,{signal:r?.signal,cache:r?.noCache?"no-cache":void 0,redirect:"manual",headers:{accept:"application/did+ld+json,application/json"}});if(s.status>=300&&s.status<400)throw new TypeError("unexpected redirect");n=(await j(s)).json}catch(t){throw t instanceof Q&&t.status===404?new p(e):new u(e,{cause:t})}return n}};import{webDidToDocumentUrl as V}from"../../identity@1.1.4/es2022/identity.mjs";import{FailedResponseError as I}from"../../util-fetch@1.0.5/es2022/util-fetch.mjs";var P=class{#e;constructor({fetch:e=fetch}={}){this.#e=e}async resolve(e,r){if(!e.startsWith("did:web:"))throw new h(e);let n;try{let t=V(e),s=await(0,this.#e)(t,{signal:r?.signal,cache:r?.noCache?"no-cache":void 0,redirect:"manual",headers:{accept:"application/did+ld+json,application/json"}});if(s.status>=300&&s.status<400)throw new TypeError("unexpected redirect");n=(await j(s)).json}catch(t){throw t instanceof I&&t.status===404?new p(e):new u(e,{cause:t})}return n}},C=class{#e;constructor({fetch:e=fetch}={}){this.#e=e}async resolve(e,r){if(!e.startsWith("did:web:"))throw new h(e);let[n,...t]=e.slice(8).split(":").map(decodeURIComponent),s=new URL(`https://${n}/.well-known/did.json`);if(t.length>0)throw new U(e);let o;try{let a=await(0,this.#e)(s,{signal:r?.signal,cache:r?.noCache?"no-cache":void 0,redirect:"manual",headers:{accept:"application/did+ld+json,application/json"}});if(a.status>=300&&a.status<400)throw new TypeError("unexpected redirect");o=(await j(a)).json}catch(a){throw a instanceof I&&a.status===404?new p(e):new u(e,{cause:a})}return o}};import{defs as Y}from"../../identity@1.1.4/es2022/identity.mjs";import{FailedResponseError as Z,isResponseOk as ee,parseResponseAsJson as re,pipe as te,validateJsonWith as oe}from"../../util-fetch@1.0.5/es2022/util-fetch.mjs";import*as M from"../../../@badrap/valita@0.4.6/es2022/valita.mjs";var se=te(ee,re(/^application\/json$/,20*1024+16),oe(M.object({didDoc:Y.didDocument}),{mode:"passthrough"})),L=class{serviceUrl;#e;constructor({serviceUrl:e,fetch:r=fetch}){this.serviceUrl=e,this.#e=r}async resolve(e,r){let n;try{let t=new URL("/xrpc/com.atproto.identity.resolveDid",this.serviceUrl);t.searchParams.set("did",e);let s=await(0,this.#e)(t,{signal:r?.signal,cache:r?.noCache?"no-cache":void 0,headers:{accept:"application/json"}});n=(await se(s)).json.didDoc}catch(t){throw t instanceof Z&&t.status===404?new p(e):new u(e,{cause:t})}return n}};var k=class{#e;strategy;constructor({methods:e,strategy:r="race"}){this.#e=e,this.strategy=r}async resolve(e,r){let{http:n,dns:t}=this.#e,s=r?.signal,o=new AbortController;s&&s.addEventListener("abort",()=>o.abort(),{signal:o.signal});let a=t.resolve(e,{...r,signal:o.signal}),c=n.resolve(e,{...r,signal:o.signal});switch(this.strategy){case"race":return new Promise(d=>{a.then(l=>{o.abort(),d(l)},()=>d(c)),c.then(l=>{o.abort(),d(l)},()=>d(a))});case"dns-first":{c.catch(F);let d=await a.catch(F);return d?(o.abort(),d):c}case"http-first":{a.catch(F);let d=await c.catch(F);return d?(o.abort(),d):a}case"both":{let[d,l]=await Promise.allSettled([a,c]),x=d.status==="fulfilled"?d.value:void 0,D=l.status==="fulfilled"?l.value:void 0;if(x&&D&&x!==D)throw new R(e);return x||D||a}}}},F=()=>{};import{isAtprotoDid as ne}from"../../identity@1.1.4/es2022/identity.mjs";import{fetchDohJsonTxt as ae}from"../../util-fetch@1.0.5/es2022/util-fetch.mjs";var ie="_atproto",b="did=",J=class{dohUrl;#e;constructor({dohUrl:e,fetch:r=fetch}){this.dohUrl=e,this.#e=r}async resolve(e,r){let n;try{let o=new URL(this.dohUrl);o.searchParams.set("name",`${ie}.${e}`),o.searchParams.set("type","TXT");let a=await(0,this.#e)(o,{signal:r?.signal,cache:r?.noCache?"no-cache":void 0,headers:{accept:"application/dns-json"}});n=(await ae(a)).json}catch(o){throw new m(e,{cause:o})}let t=n.Status,s=n.Answer;if(t!==0)throw t===3?new f(e):new m(e,{cause:new TypeError(`dns returned ${t}`)});for(let o=0,a=s.length;o<a;o++){let d=s[o].data;if(!d.startsWith(b))continue;for(let x=o+1;x<a;x++)if(s[x].data.startsWith(b))throw new R(e);let l=d.slice(b.length);if(!ne(l))throw new g(e,l);return l}throw new f(e)}};import{isAtprotoDid as ce}from"../../identity@1.1.4/es2022/identity.mjs";import{FailedResponseError as de,isResponseOk as le,pipe as he,readResponseAsText as pe}from"../../util-fetch@1.0.5/es2022/util-fetch.mjs";var ue=he(le,pe(2064)),O=class{#e;constructor({fetch:e=fetch}={}){this.#e=e}async resolve(e,r){let n;try{let s=new URL("/.well-known/atproto-did",`https://${e}`),o=await(0,this.#e)(s,{signal:r?.signal,cache:r?.noCache?"no-cache":void 0,redirect:"manual"});if(o.status>=300&&o.status<400)throw new TypeError("unexpected redirect");n=(await ue(o)).text}catch(s){throw s instanceof de&&s.status===404?new f(e):new m(e,{cause:s})}let t=n.split(`
33-`)[0].trim();if(!ce(t))throw new g(e,t);return t}};import*as $ from"../../../@badrap/valita@0.4.6/es2022/valita.mjs";import{isAtprotoDid as fe}from"../../identity@1.1.4/es2022/identity.mjs";import{FailedResponseError as me,isResponseOk as we,parseResponseAsJson as xe,pipe as ve,validateJsonWith as Ee}from"../../util-fetch@1.0.5/es2022/util-fetch.mjs";var ge=$.object({did:$.string().assert(i=>fe(i))}),Re=ve(we,xe(/^application\/json$/,4*1024),Ee(ge,{mode:"passthrough"})),W=class{serviceUrl;#e;constructor({serviceUrl:e,fetch:r=fetch}){this.serviceUrl=e,this.#e=r}async resolve(e,r){let n;try{let t=new URL("/xrpc/com.atproto.identity.resolveHandle",this.serviceUrl);t.searchParams.set("handle",e);let s=await(0,this.#e)(t,{signal:r?.signal,cache:r?.noCache?"no-cache":void 0,headers:{accept:"application/json"}});n=(await Re(s)).json}catch(t){throw t instanceof me&&t.status===400?new f(e):new m(e,{cause:t})}return n.did}};export{y as ActorResolutionError,R as AmbiguousHandleError,C as AtprotoWebDidDocumentResolver,T as CompositeDidDocumentResolver,k as CompositeHandleResolver,v as DidDocumentResolutionError,f as DidNotFoundError,p as DocumentNotFoundError,J as DohJsonHandleResolver,u as FailedDocumentResolutionError,m as FailedHandleResolutionError,E as HandleResolutionError,U as ImproperDidError,g as InvalidResolvedHandleError,A as LocalActorResolver,N as PlcDidDocumentResolver,h as UnsupportedDidMethodError,P as WebDidDocumentResolver,O as WellKnownHandleResolver,L as XrpcDidDocumentResolver,W as XrpcHandleResolver};
44-//# sourceMappingURL=./identity-resolver.mjs.map
···11-/* esm.sh - @atcute/identity@1.1.4 */
22-var E=Object.defineProperty;var D=(e,t)=>{for(var o in t)E(e,o,{get:t[o],enumerable:!0})};var g={};D(g,{FRAGMENT_RE:()=>h,MULTIBASE_RE:()=>m,didDocument:()=>_,didRelativeUri:()=>f,didString:()=>d,multibaseString:()=>y,rfc3968UriSchema:()=>l,service:()=>x,verificationMethod:()=>u});import{isDid as R}from"../../lexicons@1.2.10/es2022/syntax.mjs";import*as r from"../../../@badrap/valita@0.4.6/es2022/valita.mjs";var h=/^#[^#]+$/,m=/^z[a-km-zA-HJ-NP-Z1-9]+$/,l=r.string().assert(e=>URL.canParse(e),"must be a url"),f=r.string().assert(e=>h.test(e)||URL.canParse(e),"must be a did relative uri"),y=r.string().assert(e=>m.test(e),"must be a base58 multibase"),d=r.string().assert(R,"must be a did"),u=r.object({id:f,type:r.string(),controller:d,publicKeyMultibase:y.optional(),publicKeyJwk:r.record().optional()}).chain(e=>{switch(e.type){case"Multikey":{if(e.publicKeyMultibase===void 0)return r.err({message:"missing multikey",path:["publicKeyMultibase"]});break}case"EcdsaSecp256k1VerificationKey2019":case"EcdsaSecp256r1VerificationKey2019":{if(e.publicKeyMultibase===void 0)return r.err({message:"missing multibase key",path:["publicKeyMultibase"]});break}}return r.ok(e)}),x=r.object({id:f,type:r.union(r.string(),r.array(r.string())),serviceEndpoint:r.union(l,r.record(l),r.array(r.union(l,r.record(l))))}),_=r.object({"@context":r.array(l).optional(),id:d,alsoKnownAs:r.array(l).chain(e=>{for(let t=0,o=e.length;t<o;t++){let n=e[t];for(let i=0;i<t;i++)if(n===e[i])return r.err({message:`duplicate "${n}" aka entry`,path:[t]})}return r.ok(e)}).optional(),verificationMethod:r.array(u).chain(e=>{for(let t=0,o=e.length;t<o;t++){let i=e[t].id;for(let s=0;s<t;s++)if(i===e[s].id)return r.err({message:`duplicate "${i}" verification method`,path:[t,"id"]})}return r.ok(e)}).optional(),service:r.array(x).optional(),controller:r.union(d,r.array(d)).optional(),authentication:r.array(r.union(f,u)).optional()}).chain(e=>{let{id:t,service:o}=e;if(o?.length){let n=o.length,i=new Array(n);for(let s=0;s<n;s++){let a=o[s].id;a[0]==="#"&&(a=t+a),i[s]=a}for(let s=0;s<n;s++){let c=i[s];for(let a=0;a<s;a++)if(c===i[a])return r.err({message:`duplicate "${c}" service`,path:["service",s,"id"]})}}return r.ok(e)});import{isHandle as M}from"../../lexicons@1.2.10/es2022/syntax.mjs";var $="parse"in URL,w=e=>{let t=null;if($)t=URL.parse(e);else try{t=new URL(e)}catch{}return t!==null&&(t.protocol==="https:"||t.protocol==="http:")&&t.pathname==="/"&&t.search===""&&t.hash===""},b=(e,t)=>{let o=e.verificationMethod;if(!o)return;let n=`${e.id}${t}`;for(let i=0,s=o.length;i<s;i++){let{id:c,type:a,publicKeyMultibase:v}=o[i];if(c===n&&v!==void 0)return{type:a,publicKeyMultibase:v}}},W=e=>b(e,"#atproto"),F=e=>b(e,"#atproto_label"),N=e=>{let t=e.alsoKnownAs;if(!t)return null;let o="at://";for(let n=0,i=t.length;n<i;n++){let s=t[n];if(!s.startsWith(o))continue;let c=s.slice(o.length);return M(c)?c:void 0}return null},p=(e,t)=>{let o=e.service;if(o)for(let n=0,i=o.length;n<i;n++){let{id:s,type:c,serviceEndpoint:a}=o[n];if(!(s!==t.id&&s!==e.id+t.id)){if(t.type!==void 0){if(Array.isArray(c)){if(!c.includes(t.type))continue}else if(c!==t.type)continue}if(!(typeof a!="string"||!w(a)))return a}}},T=e=>p(e,{id:"#atproto_pds",type:"AtprotoPersonalDataServer"}),V=e=>p(e,{id:"#atproto_labeler",type:"AtprotoLabeler"}),H=e=>p(e,{id:"#bsky_chat",type:"BskyChatService"}),O=e=>p(e,{id:"#bsky_fg",type:"BskyFeedGenerator"}),G=e=>p(e,{id:"#bsky_notif",type:"BskyNotificationService"});var z=/^did:plc:([a-z2-7]{24})$/,A=e=>e.length===32&&z.test(e);var K=/^did:web:([a-zA-Z0-9%-]+(?:(?:\.[a-zA-Z0-9%-]+)*(?:\.[a-zA-Z]{2,}))?)?((?::[a-zA-Z0-9\-%.]+)+)?$/,U=/^did:web:([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*(?:\.[a-zA-Z]{2,})|localhost(?:%3[aA]\d+)?)$/,Y=e=>e.length>=9&&K.test(e),k=e=>e.length>=12&&U.test(e),q=e=>{let[t,...o]=e.slice(8).split(":").map(decodeURIComponent),n=`did:web:${encodeURIComponent(t.toLowerCase())}`;return o.length>0&&(n+=`:${o.join(":")}`),n},Q=e=>{let[t,...o]=e.slice(8).split(":").map(decodeURIComponent),n="/"+o.join("/");n==="/"?n="/.well-known/did.json":n+="/did.json";let i=new URL(`https://${t}${n}`);return i.hostname==="localhost"&&(i.protocol="http:"),i};var L=/^(?:[A-Za-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9A-Fa-f]{2})*$/,P=e=>A(e)||k(e),oe=e=>{if(e.length<14)return!1;let t=e.indexOf("#",12);return t===-1?!1:L.test(e.slice(t+1))&&P(e.slice(0,t))},ne=e=>{let t=e.indexOf(":",4);return e.slice(4,t)};var S=/^did:key:z[a-km-zA-HJ-NP-Z1-9]+$/,se=e=>e.length>=10&&S.test(e);export{U as ATPROTO_WEB_DID_RE,z as PLC_DID_RE,K as WEB_DID_RE,g as defs,ne as extractDidMethod,N as getAtprotoHandle,F as getAtprotoLabelerVerificationMaterial,p as getAtprotoServiceEndpoint,W as getAtprotoVerificationMaterial,H as getBlueskyChatEndpoint,O as getBlueskyFeedgenEndpoint,G as getBlueskyNotificationEndpoint,V as getLabelerEndpoint,T as getPdsEndpoint,b as getVerificationMaterial,oe as isAtprotoAudience,P as isAtprotoDid,w as isAtprotoServiceEndpoint,k as isAtprotoWebDid,se as isKeyDid,A as isPlcDid,Y as isWebDid,q as normalizeWebDid,Q as webDidToDocumentUrl};
33-//# sourceMappingURL=./identity.mjs.map
···11-/* esm.sh - @atcute/lexicons@1.2.10/dist/syntax/at-identifier */
22-import{isDid as i}from"./did.mjs";import{isHandle as o}from"./handle.mjs";var m=r=>i(r)||o(r);export{m as isActorIdentifier};
33-//# sourceMappingURL=./at-identifier.mjs.map
···11-{"mappings":";AAAA,OAAS,SAAAA,MAAuB,YAChC,OAAS,YAAAC,MAA6B,eAS/B,IAAMC,EAAqBC,GAC1BH,EAAMG,CAAK,GAAKF,EAASE,CAAK","names":["isDid","isHandle","isActorIdentifier","input"],"sources":["../esm/npm/@atcute/lexicons@1.2.10/node_modules/@atcute/lexicons/lib/syntax/at-identifier.ts"],"sourcesContent":["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 =\u003e {\n\treturn isDid(input) || isHandle(input);\n};\n"],"version":3}
···11-/* esm.sh - @atcute/multibase@1.2.0 */
22-var H=t=>Uint8Array.fromHex(t),N=t=>t.toHex();import{alloc as T,allocUnsafe as b}from"../../uint8array@1.1.1/es2022/uint8array.mjs";var w=(t,a,i)=>x=>{let e=(1<<a)-1,B="",o=0,r=0;for(let n=0;n<x.length;++n)for(r=r<<8|x[n],o+=8;o>a;)o-=a,B+=t[e&r>>o];if(o!==0&&(B+=t[e&r<<a-o]),i)for(;(B.length*a&7)!==0;)B+="=";return B},E=(t,a,i)=>{let x={};for(let e=0;e<t.length;++e)x[t[e]]=e;return e=>{let B=e.length;for(;i&&e[B-1]==="=";)--B;let o=b(B*a/8|0),r=0,n=0,s=0;for(let f=0;f<B;++f){let l=x[e[f]];if(l===void 0)throw new SyntaxError("invalid base string");n=n<<a|l,r+=a,r>=8&&(r-=8,o[s++]=255&n>>r)}if(r>=a||(255&n<<8-r)!==0)throw new SyntaxError("unexpected end of data");return o}},_=t=>{if(t.length>=255)throw new RangeError("alphabet too long");let a=t.length,i=t.charAt(0),x=Math.log(256)/Math.log(a);return e=>{if(e.length===0)return"";let B=0,o=0,r=0,n=e.length;for(;r!==n&&e[r]===0;)r++,B++;let s=n-r,f=s*x+1>>>0,l=T(f);{let p=s%3,m=n-p;for(;r<m;){let d=e[r]<<16|e[r+1]<<8|e[r+2],A=0;for(let g=f-1;(d!==0||A<o)&&g!==-1;g--,A++)d=d+16777216*l[g],l[g]=d%a|0,d=d/a|0;o=A,r+=3}}for(;r!==n;){let p=e[r],m=0;for(let d=f-1;(p!==0||m<o)&&d!==-1;d--,m++)p=p+256*l[d],l[d]=p%a|0,p=p/a|0;o=m,r++}let c=f-o;for(;c!==f&&l[c]===0;)c++;let h=i.repeat(B);for(;c<f;++c)h+=t.charAt(l[c]);return h}},z=t=>{if(t.length>=255)throw new RangeError("alphabet too long");let a=new Uint8Array(128).fill(255);for(let o=0;o<t.length;o++){let r=t.charCodeAt(o);if(r>=128)throw new RangeError("non-ASCII character in alphabet");if(a[r]!==255)throw new RangeError(`${t[o]} is ambiguous`);a[r]=o}let i=t.length,x=i*i,e=t.charAt(0),B=Math.log(i)/Math.log(256);return o=>{if(o.length===0)return b(0);let r=0,n=0,s=0;for(;o[r]===e;)n++,r++;let f=o.length-r,l=f*B+1>>>0,c=T(l);{let m=f&1,d=o.length-m;for(;r<d;){let A=a[o.charCodeAt(r)],g=a[o.charCodeAt(r+1)];if(A===255||g===255)throw new Error("invalid string");let u=A*i+g,y=0;for(let C=l-1;(u!==0||y<s)&&C!==-1;C--,y++)u+=x*c[C],c[C]=u&255,u=(u-(u&255))/256;if(u!==0)throw new Error("non-zero carry");s=y,r+=2}}if(r<o.length){let m=a[o.charCodeAt(r)];if(m===255)throw new Error("invalid string");let d=0;for(let A=l-1;(m!==0||d<s)&&A!==-1;A--,d++)m+=i*c[A],c[A]=m&255,m=m>>>8;if(m!==0)throw new Error("non-zero carry");s=d}let h=l-s;for(;h!==l&&c[h]===0;)h++;if(h===n)return c;let p=b(n+(l-h));return p.fill(0,0,n),p.set(c.subarray(h),n),p}};var k="0123456789abcdef",D=E(k,4,!1),L=w(k,4,!1);var M="fromHex"in Uint8Array,rt=M?H:D,at=M?N:L;var I=t=>Uint8Array.fromBase64(t,{alphabet:"base64",lastChunkHandling:"loose"}),O=t=>t.toBase64({alphabet:"base64",omitPadding:!0}),j=t=>Uint8Array.fromBase64(t,{alphabet:"base64",lastChunkHandling:"strict"}),q=t=>t.toBase64({alphabet:"base64",omitPadding:!1}),F=t=>Uint8Array.fromBase64(t,{alphabet:"base64url",lastChunkHandling:"loose"}),V=t=>t.toBase64({alphabet:"base64url",omitPadding:!0}),G=t=>Uint8Array.fromBase64(t,{alphabet:"base64url",lastChunkHandling:"strict"}),J=t=>t.toBase64({alphabet:"base64url",omitPadding:!1});var S="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",R="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",K=E(S,6,!1),Q=w(S,6,!1),W=E(S,6,!0),X=w(S,6,!0),Y=E(R,6,!1),Z=w(R,6,!1),$=E(R,6,!0),tt=w(R,6,!0);var P="fromBase64"in Uint8Array,nt=P?I:K,st=P?O:Q,ft=P?j:W,lt=P?q:X,ct=P?F:Y,it=P?V:Z,Bt=P?G:$,dt=P?J:tt;import{allocUnsafe as ht}from"../../uint8array@1.1.1/es2022/uint8array.mjs";var xt="abcdefghijklmnopqrstuvwxyz234567",mt=(()=>{let t=new Uint8Array(32);for(let a=0;a<32;a++)t[a]=xt.charCodeAt(a);return t})(),v=String.fromCharCode,et=t=>{let a=t.length,i=a/5|0,x=a-i*5,e=mt,B="",o=0,r=i/2|0;for(let n=0;n<r;n++){let s=t[o],f=t[o+1],l=t[o+2],c=t[o+3],h=t[o+4],p=t[o+5],m=t[o+6],d=t[o+7],A=t[o+8],g=t[o+9];B+=v(e[s>>>3],e[(s<<2|f>>>6)&31],e[f>>>1&31],e[(f<<4|l>>>4)&31],e[(l<<1|c>>>7)&31],e[c>>>2&31],e[(c<<3|h>>>5)&31],e[h&31],e[p>>>3],e[(p<<2|m>>>6)&31],e[m>>>1&31],e[(m<<4|d>>>4)&31],e[(d<<1|A>>>7)&31],e[A>>>2&31],e[(A<<3|g>>>5)&31],e[g&31]),o+=10}if(i&1){let n=t[o],s=t[o+1],f=t[o+2],l=t[o+3],c=t[o+4];B+=v(e[n>>>3],e[(n<<2|s>>>6)&31],e[s>>>1&31],e[(s<<4|f>>>4)&31],e[(f<<1|l>>>7)&31],e[l>>>2&31],e[(l<<3|c>>>5)&31],e[c&31]),o+=5}if(x>0){let n=0,s=0;for(let f=o;f<a;f++)n=n<<8|t[f],s+=8;for(;s>=5;)s-=5,B+=v(e[n>>>s&31]);s>0&&(B+=v(e[n<<5-s&31]))}return B};var pt="abcdefghijklmnopqrstuvwxyz234567",U=(()=>{let t=new Uint8Array(128).fill(255);for(let a=0;a<32;a++)t[pt.charCodeAt(a)]=a;return t})(),At=t=>{let a=t.length,i=ht(a*5/8|0),x=0,e=0,B=a-a%8;for(;e<B;e+=8){let o=U[t.charCodeAt(e)],r=U[t.charCodeAt(e+1)],n=U[t.charCodeAt(e+2)],s=U[t.charCodeAt(e+3)],f=U[t.charCodeAt(e+4)],l=U[t.charCodeAt(e+5)],c=U[t.charCodeAt(e+6)],h=U[t.charCodeAt(e+7)];if((o|r|n|s|f|l|c|h)&224)throw new SyntaxError("invalid base string");i[x]=o<<3|r>>>2,i[x+1]=(r<<6|n<<1|s>>>4)&255,i[x+2]=(s<<4|f>>>1)&255,i[x+3]=(f<<7|l<<2|c>>>3)&255,i[x+4]=(c<<5|h)&255,x+=5}if(e<a){let o=0,r=0;for(;e<a;++e){let n=U[t.charCodeAt(e)];if(n&224)throw new SyntaxError("invalid base string");r=r<<5|n,o+=5,o>=8&&(o-=8,i[x++]=255&r>>o)}if(o>=5||(255&r<<8-o)!==0)throw new SyntaxError("unexpected end of data")}return i};var ot="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",gt=z(ot),Ut=_(ot);export{rt as fromBase16,At as fromBase32,gt as fromBase58Btc,nt as fromBase64,ft as fromBase64Pad,ct as fromBase64Url,Bt as fromBase64UrlPad,at as toBase16,et as toBase32,Ut as toBase58Btc,st as toBase64,lt as toBase64Pad,it as toBase64Url,dt as toBase64UrlPad};
33-//# sourceMappingURL=./multibase.mjs.map
···11-/* esm.sh - @atcute/oauth-browser-client@3.0.0 */
22-var b=typeof navigator<"u"?navigator.locks:void 0;var ee=t=>{if(t!=null){let e=JSON.parse(t);if(e!=null)return e}return{}},M=({name:t})=>{let e=new AbortController,r=e.signal,s=(o,i,a=!1)=>{let n,u=`${t}:${o}`,h=()=>n&&localStorage.setItem(u,JSON.stringify(n)),d=()=>{if(r.aborted)throw new Error("store closed");return n??=ee(localStorage.getItem(u))};{let p=c=>{c.key===u&&(n=void 0)};globalThis.addEventListener("storage",p,{signal:r})}{let p=async c=>{if(!c||r.aborted||(await new Promise(l=>setTimeout(l,1e4)),r.aborted))return;let f=Date.now(),y=!1;d();for(let l in n){let S=n[l].expiresAt;S!==null&&f>S&&(y=!0,delete n[l])}y&&h()};b?b.request(`${u}:cleanup`,{ifAvailable:!0},p):p(!0)}return{get(p){d();let c=n[p];if(!c)return;let f=c.expiresAt;if(f!==null&&Date.now()>f){delete n[p],h();return}return c.value},getWithLapsed(p){d();let c=n[p],f=Date.now();if(!c)return[void 0,1/0];let y=c.updatedAt;return y===void 0?[c.value,1/0]:[c.value,f-y]},set(p,c){d();let f={value:c,expiresAt:i(c),updatedAt:a?Date.now():void 0};n[p]=f,h()},delete(p){d(),n[p]!==void 0&&(delete n[p],h())},keys(){return d(),Object.keys(n)}}};return{dispose:()=>{e.abort()},sessions:s("sessions",({token:o})=>o.refresh?null:o.expires_at??null),states:s("states",o=>Date.now()+600*1e3),dpopNonces:s("dpopNonces",o=>Date.now()+1440*60*1e3,!0),inflightDpop:new Map}};var A,P,T,w,$,te=t=>{({identityResolver:$,fetchClientAssertion:T}=t),{client_id:A,redirect_uri:P}=t.metadata,w=M({name:t.storageName??"atcute-oauth"})};var x=class extends Error{name="LoginError"},I=class extends Error{name="AuthorizationError"},m=class extends Error{name="ResolverError"},v=class extends Error{sub;name="TokenRefreshError";constructor(e,r,s){super(r,s),this.sub=e}},E=class extends Error{response;data;name="OAuthResponseError";error;description;constructor(e,r){let s=W(B(r)?.error),o=W(B(r)?.error_description),i=s?`"${s}"`:"unknown",a=o?`: ${o}`:"",n=`OAuth ${i} error${a}`;super(n),this.response=e,this.data=r,this.error=s,this.description=o}get status(){return this.response.status}get headers(){return this.response.headers}},j=class extends Error{response;status;name="FetchResponseError";constructor(e,r,s){super(s),this.response=e,this.status=r}},W=t=>typeof t=="string"?t:void 0,B=t=>typeof t=="object"&&t!==null&&!Array.isArray(t)?t:void 0;import{generateDpopKey as ye,generatePkce as ge}from"../../oauth-crypto@0.1.0/es2022/oauth-crypto.mjs";import{nanoid as _e}from"../../../nanoid@5.1.7/es2022/nanoid.mjs";var k=t=>t.get("content-type")?.split(";")[0];var re="parse"in URL,H=t=>{let e=null;if(re)e=URL.parse(t);else try{e=new URL(t)}catch{}return e!==null?e.protocol==="https:"||e.protocol==="http:":!1};var L=async t=>{let e=await $.resolve(t);return{identity:e,metadata:await G(e.pds)}},J=async t=>{try{return{metadata:await G(t)}}catch(e){if(e instanceof m)try{return{metadata:await V(t)}}catch{}throw e}},se=async t=>{let e=new URL("/.well-known/oauth-protected-resource",t),r=await fetch(e.href,{redirect:"manual",headers:{accept:"application/json"}});if(r.status!==200||k(r.headers)!=="application/json")throw new m("unexpected response");let s=await r.json();if(s.resource!==e.origin)throw new m("unexpected issuer");return s},V=async t=>{let e=new URL("/.well-known/oauth-authorization-server",t),r=await fetch(e.href,{redirect:"manual",headers:{accept:"application/json"}});if(r.status!==200||k(r.headers)!=="application/json")throw new m("unexpected response");let s=await r.json();if(s.issuer!==e.origin)throw new m("unexpected issuer");if(!H(s.authorization_endpoint))throw new m("authorization server provided incorrect authorization endpoint");if(!s.client_id_metadata_document_supported)throw new m("authorization server does not support 'client_id_metadata_document'");if(!s.pushed_authorization_request_endpoint)throw new m("authorization server does not support 'pushed_authorization request'");if(s.response_types_supported&&!s.response_types_supported.includes("code"))throw new m("authorization server does not support 'code' response type");return s},G=async t=>{let e=await se(t);if(e.authorization_servers?.length!==1)throw new m("expected exactly one authorization server in the listing");let r=e.authorization_servers[0],s=await V(r);if(s.protected_resources&&!s.protected_resources.includes(e.resource))throw new m("server is not in authorization server's jurisdiction");return s};import{createDpopProofSigner as ae}from"../../oauth-crypto@0.1.0/es2022/oauth-crypto.mjs";import{createDpopProofSigner as oe,sha256Base64Url as ne}from"../../oauth-crypto@0.1.0/es2022/oauth-crypto.mjs";var U=(t,e)=>{let r=w.dpopNonces,s=w.inflightDpop,o=oe(t);return async(i,a)=>{let n=new Request(i,a),u=n.headers.get("authorization"),h=u?.startsWith("DPoP ")?await ne(u.slice(5)):void 0,{method:d,url:p}=n,{origin:c,pathname:f}=new URL(p),y=c+f,l=s.get(c);l&&(await l.promise,l=void 0);let z,S=!1;try{let[D,g]=r.getWithLapsed(c);z=D,S=g>180*1e3}catch{}S&&s.set(c,l=Promise.withResolvers());let R;try{let D=await o(d,y,z,h);n.headers.set("dpop",D);let g=await fetch(n);if(R=g.headers.get("dpop-nonce"),R===null||R===z)return g;try{r.set(c,R)}catch{}if(!await ie(g,e)||i===n||a?.body instanceof ReadableStream)return g}finally{l&&(s.delete(c),l.resolve())}{let D=await o(d,y,R,h),g=new Request(i,a);g.headers.set("dpop",D);let C=await fetch(g),O=C.headers.get("dpop-nonce");if(O!==null&&O!==R)try{r.set(c,O)}catch{}return C}}},ie=async(t,e)=>{if((e===void 0||e===!1)&&t.status===401){let r=t.headers.get("www-authenticate");if(r?.startsWith("DPoP"))return r.includes('error="use_dpop_nonce"')}if((e===void 0||e===!0)&&t.status===400&&k(t.headers)==="application/json")try{let r=await t.clone().json();return typeof r=="object"&&r?.error==="use_dpop_nonce"}catch{return!1}return!1};var Q=(t,e)=>{let r={};for(let s=0,o=e.length;s<o;s++){let i=e[s];r[i]=t[i]}return r};var _=class{#t;#e;#r;constructor(e,r){this.#e=e,this.#r=r,this.#t=U(r,!0)}async request(e,r){let s=this.#e[`${e}_endpoint`];if(!s)throw new Error(`no endpoint for ${e}`);if((e==="token"||e==="pushed_authorization_request")&&T!==void 0){let a=ae(this.#r),n=await T({aud:this.#e.issuer,createDpopProof:async(u,h)=>await a("POST",u,h,void 0)});r={...r,...n}}let o=await this.#t(s,{method:"post",headers:{"content-type":"application/json"},body:JSON.stringify({...r,client_id:A})});if(k(o.headers)!=="application/json")throw new j(o,2,"unexpected content-type");let i=await o.json();if(o.ok)return i;throw new E(o,i)}async revoke(e){try{await this.request("revocation",{token:e})}catch{}}async exchangeCode(e,r){let s=await this.request("token",{grant_type:"authorization_code",redirect_uri:P,code:e,code_verifier:r});try{return await this.#o(s)}catch(o){throw await this.revoke(s.access_token),o}}async refresh({sub:e,token:r}){if(!r.refresh)throw new v(e,"no refresh token available");let s=await this.request("token",{grant_type:"refresh_token",refresh_token:r.refresh});try{if(e!==s.sub)throw new v(e,`sub mismatch in token response; got ${s.sub}`);return this.#s(s)}catch(o){throw await this.revoke(s.access_token),o}}#s(e){if(!e.sub)throw new TypeError("missing sub field in token response");if(!e.scope)throw new TypeError("missing scope field in token response");if(e.token_type!=="DPoP")throw new TypeError("token response returned a non-dpop token");return{scope:e.scope,refresh:e.refresh_token,access:e.access_token,type:e.token_type,expires_at:typeof e.expires_in=="number"?Date.now()+e.expires_in*1e3:void 0}}async#o(e){let r=e.sub;if(!r)throw new TypeError("missing sub field in token response");let s=this.#s(e),o=await L(r);if(o.metadata.issuer!==this.#e.issuer)throw new TypeError(`issuer mismatch; got ${o.metadata.issuer}`);return{token:s,info:{sub:r,aud:o.identity.pds,server:Q(o.metadata,["issuer","authorization_endpoint","introspection_endpoint","pushed_authorization_request_endpoint","revocation_endpoint","token_endpoint"])}}}};import{fromBase64Url as ce}from"../../multibase@1.2.0/es2022/multibase.mjs";var pe={name:"ECDSA",namedCurve:"P-256"},X=t=>typeof t.key=="string"&&typeof t.jwt=="string",Y=async t=>{let e=ce(t.key),r=await crypto.subtle.importKey("pkcs8",e,pe,!0,["sign"]),s=await crypto.subtle.exportKey("jwk",r);return s.alg="ES256",s};var q=new Map,K=async(t,e)=>{e?.signal?.throwIfAborted();let r=we;e?.noCache?r=le:e?.allowStale&&(r=de);let s;for(;s=q.get(t);){try{let{isFresh:n,value:u}=await s;if(n||r(u))return u}catch{}e?.signal?.throwIfAborted()}let o=async()=>{let n=await me(t,w.sessions.get(t));if(n&&r(n))return{isFresh:!1,value:n};let u=await he(t,n);return await F(t,u),{isFresh:!0,value:u}},i;if(b?i=b.request(`atcute-oauth:${t}`,o):i=o(),i=i.finally(()=>q.delete(t)),q.has(t))throw new Error("concurrent request for the same key");q.set(t,i);let{value:a}=await i;return a},F=async(t,e)=>{try{w.sessions.set(t,e)}catch(r){throw await fe(e),r}},N=t=>{w.sessions.delete(t)},ue=()=>w.sessions.keys(),de=()=>!0,le=()=>!1,he=async(t,e)=>{if(e===void 0)throw new v(t,"session deleted by another tab");let{dpopKey:r,info:s,token:o}=e,i=new _(s.server,r);try{let a=await i.refresh({sub:s.sub,token:o});return{dpopKey:r,info:s,token:a}}catch(a){throw a instanceof E&&a.status===400&&a.error==="invalid_grant"?new v(t,"session was revoked",{cause:a}):a}},fe=async({dpopKey:t,info:e,token:r})=>{await new _(e.server,t).revoke(r.refresh??r.access)},we=({token:t})=>{let e=t.expires_at;return e==null||Date.now()+6e4<=e},me=async(t,e)=>{if(!e||!X(e.dpopKey))return e;let r=await Y(e.dpopKey),s={...e,dpopKey:r};try{w.sessions.set(t,s)}catch{}return s};var ct=async t=>{let{target:e,scope:r,state:s=null,...o}=t,i;switch(e.type){case"account":{i=await L(e.identifier);break}case"pds":i=await J(e.serviceUrl)}let{identity:a,metadata:n}=i,u=a?a.handle!=="handle.invalid"?a.handle:a.did:void 0,h=_e(24),d=await ge(),p=await ye(["ES256"]),c={display:o.display,ui_locales:o.locale,prompt:o.prompt,redirect_uri:P,code_challenge:d.challenge,code_challenge_method:d.method,state:h,login_hint:u,response_mode:"fragment",response_type:"code",scope:r};w.states.set(h,{dpopKey:p,metadata:n,verifier:d.verifier,state:s});let y=await new _(n,p).request("pushed_authorization_request",c),l=new URL(n.authorization_endpoint);return l.searchParams.set("client_id",A),l.searchParams.set("request_uri",y.request_uri),l},pt=async t=>{let e=t.get("iss"),r=t.get("state"),s=t.get("code"),o=t.get("error");if(!r||!(s||o))throw new x("missing parameters");let i=w.states.get(r);if(i)w.states.delete(r);else throw new x("unknown state provided");if(o)throw new I(t.get("error_description")||o);if(!s)throw new x("missing code parameter");let a=i.dpopKey,n=i.metadata,u=i.state??null;if(e===null)throw new x("missing issuer parameter");if(e!==n.issuer)throw new x("issuer mismatch");let h=new _(n,a),{info:d,token:p}=await h.exchangeCode(s,i.verifier),c=d.sub,f={dpopKey:a,info:d,token:p};return await F(c,f),{session:f,state:u}};var Z=class{session;#t;#e;constructor(e){this.session=e,this.#t=U(e.dpopKey,!1)}get sub(){return this.session.info.sub}getSession(e){let r=K(this.session.info.sub,e);return r.then(s=>{this.session=s}).finally(()=>{this.#e=void 0}),this.#e=r}async signOut(){let e=this.session.info.sub;try{let{dpopKey:r,info:s,token:o}=await K(e,{allowStale:!0});await new _(s.server,r).revoke(o.refresh??o.access)}finally{N(e)}}async handle(e,r){await this.#e;let s=new Headers(r?.headers),o=this.session,i=new URL(e,o.info.aud);s.set("authorization",`${o.token.type} ${o.token.access}`);let a=await this.#t(i.href,{...r,headers:s});if(!xe(a))return a;try{this.#e?o=await this.#e:o=await this.getSession()}catch{return a}return r?.body instanceof ReadableStream?a:(i=new URL(e,o.info.aud),s.set("authorization",`${o.token.type} ${o.token.access}`),await this.#t(i.href,{...r,headers:s}))}},xe=t=>{if(t.status!==401)return!1;let e=t.headers.get("www-authenticate");return e!=null&&(e.startsWith("Bearer ")||e.startsWith("DPoP "))&&e.includes('error="invalid_token"')};export{I as AuthorizationError,j as FetchResponseError,x as LoginError,E as OAuthResponseError,Z as OAuthUserAgent,m as ResolverError,v as TokenRefreshError,te as configureOAuth,ct as createAuthorizationUrl,N as deleteStoredSession,pt as finalizeAuthorization,K as getSession,ue as listStoredSessions};
33-//# sourceMappingURL=./oauth-browser-client.mjs.map