@learncard/chapi-plugin 1.0.78 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,80 +1,124 @@
1
- "use strict";var W=Object.defineProperty;var ne=Object.getOwnPropertyDescriptor;var re=Object.getOwnPropertyNames;var oe=Object.prototype.hasOwnProperty;var o=(i,e)=>W(i,"name",{value:e,configurable:!0});var se=(i,e)=>{for(var t in e)W(i,t,{get:e[t],enumerable:!0})},ae=(i,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of re(e))!oe.call(i,r)&&r!==t&&W(i,r,{get:()=>e[r],enumerable:!(n=ne(e,r))||n.enumerable});return i};var ce=i=>ae(W({},"__esModule",{value:!0}),i);var Ce={};se(Ce,{getCHAPIPlugin:()=>ie});module.exports=ce(Ce);var q={ParseError:{message:"Parse error",code:-32700},InvalidRequest:{message:"Invalid Request",code:-32600},MethodNotFound:{message:"Method not found",code:-32601},InvalidParams:{message:"Invalid params",code:-32602},InternalError:{message:"Internal Error",code:-32603},ServerError:{message:"Server error",code:-32e3}};function m(i,e){if(e===void 0&&(e=window.location.href),typeof URL=="function")return new URL(i,e);if(typeof i!="string")throw new TypeError('"url" must be a string.');i.includes(":")||(e.startsWith("http")&&!i.startsWith("/")?i=e+"/"+i:i=e+i);let t=document.createElement("a");t.href=i;let n=(t.protocol||window.location.protocol)+"//";t.host?t.protocol==="http:"&&t.port==="80"||t.protocol==="https:"&&t.port==="443"?n+=t.hostname:n+=t.host:n+=window.location.host;let r=t.pathname;return r.startsWith("/")||(r="/"+r),{host:t.host||window.location.host,hostname:t.hostname,origin:n,protocol:t.protocol,pathname:r}}o(m,"parseUrl");function z(i,e){for(e=i="";i++<36;e+=i*51&52?(i^15?8^Math.random()*(i^20?16:4):4).toString(16):"-");return e}o(z,"uuidv4");function F(i){return i&&typeof i=="object"&&i.jsonrpc==="2.0"&&i.id&&typeof i.id=="string"}o(F,"isValidMessage");function le(i){return F(i)&&Array.isArray(i.params)}o(le,"isValidRequest");function de(i){return F(i)&&!!("result"in i^"error"in i)&&(!("error"in i)||he(i.error))}o(de,"isValidResponse");function he(i){return i&&typeof i=="object"&&typeof i.code=="number"&&typeof i.message=="string"}o(he,"isValidError");function K(i){let e={message:i.message};return i.constructor.name!=="Error"&&(e.constructor=i.constructor.name),"name"in i&&(e.name=i.name),"code"in i?e.code=i.code:e.code=q.ServerError.code,"details"in i&&(e.details=i.details),e}o(K,"serializeError");function X(i){let e;return i.constructor==="DOMException"?e=new DOMException(i.message,i.name):(e=new Error(i.message),"code"in i&&(e.code=i.code)),i.details&&(e.details=i.details),e}o(X,"deserializeError");function S({listener:i,origin:e,handle:t,expectRequest:n}){if(x(t)){let r=t;t=!1,r.then(s=>t=s)}return r=>{!(r.source===t&&r.origin===e&&(n&&le(r.data)||!n&&de(r.data)))||i(r.data,r)}}o(S,"createMessageListener");function Y(i){let[e,...t]=i.split("."),n=t.pop();return e=[e,...t].join("."),{name:e,method:n}}o(Y,"destructureMethodName");function x(i){try{return typeof i.then=="function"}catch{}return!1}o(x,"isHandlePromise");var pe=3e4,g=class{constructor(){this.origin=null,this._handle=null,this._listener=null,this._pending=new Map}async connect(e,t){if(this._listener)throw new Error("Already connected.");t=t||{};let n=this;n.origin=m(e).origin,n._handle=t.handle||window.opener||window.parent;let r=n._pending;return n._listener=S({origin:n.origin,handle:n._handle,expectRequest:!1,listener:s=>{if(!r.has(s.id))return;let{resolve:d,reject:c,cancelTimeout:a}=r.get(s.id);if(a(),"result"in s)return d(s.result);c(X(s.error))}}),window.addEventListener("message",n._listener),new D(n)}async send(e,t,{timeout:n=pe}){if(!this._listener)throw new Error("RPC client not connected.");let r=this,s={jsonrpc:"2.0",id:z(),method:e,params:t};return x(r._handle)?(await r._handle).postMessage(s,r.origin):r._handle.postMessage(s,r.origin),new Promise((d,c)=>{let a=r._pending,l;if(n>0){let h=setTimeout(()=>{a.delete(s.id),c(new Error("RPC call timed out."))},n);l=o(()=>{a.delete(s.id),clearTimeout(h)},"cancelTimeout")}else l=o(()=>{a.delete(s.id)},"cancelTimeout");a.set(s.id,{resolve:d,reject:c,cancelTimeout:l})})}close(){if(this._listener){window.removeEventListener("message",this._listener),this._handle=this.origin=this._listener=null;for(let e of this._pending.values())e.reject(new Error("RPC client closed."));this._pending=new Map}}};o(g,"Client");var D=class{constructor(e){this.client=e,this._apis=new Map}define(e,t){if(!(e&&typeof e=="string"))throw new TypeError("`name` must be a non-empty string.");if(!(t&&typeof t=="object"&&Array.isArray(t.functions)))throw new TypeError("`definition.function` must be an array of function names or function definition objects to be defined.");let n=this,r={};return t.functions.forEach(s=>{typeof s=="string"&&(s={name:s,options:{}}),r[s.name]=async function(){return n.client.send(e+"."+s.name,[...arguments],s.options)}}),n._apis[e]=r,r}get(e,t){if(!this._apis[e]){if(t)return this.define(e,t);throw new Error(`API "${e}" has not been defined.`)}return this._apis[e]}};o(D,"Injector");var C=class{constructor({deserialize:e=o(n=>n,"deserialize"),waitUntil:t=o(async()=>{},"waitUntil")}={}){this._listeners=[],this._deserialize=e,this._waitUntil=t}async emit(e){return e=this._deserialize(e),(this._listeners[e.type]||[]).forEach(t=>t(e)),this._waitUntil(e)}addEventListener(e,t){this._listeners[e]?this._listeners[e].push(t):this._listeners[e]=[t]}removeEventListener(e,t){let n=this._listeners[e];if(!n)return;let r=n.indexOf(t);r!==-1&&n.splice(r,1)}};o(C,"EventEmitter");var y=class{constructor(){this.origin=null,this._handle=null,this._apis=new Map}define(e,t){if(!(e&&typeof e=="string"))throw new TypeError("`name` must be a non-empty string.");if(!(t&&t!=="object"))throw new TypeError("`api` must be an object.");if(e in this._apis)throw new Error(`The "${e}" API is already defined.`);this._apis[e]=t}async listen(e,t){if(this._listener)throw new Error("Already listening.");t=t||{};let n=this;n.origin=m(e).origin,n._handle=t.handle||window.opener||window.parent;let r=t.ignoreUnknownApi==="true"||!1;n._listener=S({origin:n.origin,handle:n._handle,expectRequest:!0,listener:s=>{let{name:d,method:c}=Y(s.method),a=n._apis[d];if(c&&c.startsWith("_"))return G(n._handle,n.origin,s);if(!a&&r)return;if(!a||typeof a[c]!="function")return G(n._handle,n.origin,s);let l=a[c];(async()=>{let h={jsonrpc:"2.0",id:s.id};try{h.result=await l.apply(a,s.params)}catch(p){h.error=K(p)}n._handle&&(x(n._handle)?n._handle.then(p=>p.postMessage(h,n.origin)):n._handle.postMessage(h,n.origin))})()}}),window.addEventListener("message",n._listener)}close(){this._listener&&(window.removeEventListener("message",this._listener),this._handle=this.origin=this._listener=null)}};o(y,"Server");function G(i,e,t){let n={jsonrpc:"2.0",id:t.id,error:Object.assign({},q.MethodNotFound)};return x(i)?i.then(r=>r.postMessage(n,e)):i.postMessage(n,e)}o(G,"sendMethodNotFound");var _=class{constructor(e){this.relyingOrigin=m(e).origin,this.client=null,this.injector=null,this.client=new g,this.server=new y,this._control=null,this._connected=!1}async connect(){return this.injector=await this.client.connect(this.relyingOrigin),this._connected=!0,this._control=this.injector.define("core.control",{functions:["ready","show","hide"]}),this.server.listen(this.relyingOrigin),this.injector}async ready(){if(!this._connected)throw new Error('WebApp not connected. Did you call ".connect()"?');return await this._control.ready(),this}close(){this._connected&&(this.server.close(),this.client.close(),this._connected=!1)}async show(){if(!this._connected)throw new Error('Cannot "show" yet; not connected. Did you call ".connect()"?');return this._control.show()}async hide(){if(!this._connected)throw new Error('Cannot "hide" yet; not connected. Did you call ".connect()?"');return this._control.hide()}};o(_,"WebApp");var b=class{constructor(){this._closeEventListeners=new Set}addEventListener(e,t){if(e!=="close")throw new Error(`Unknown event "${e}".`);if(typeof t!="function")throw new TypeError('"listener" must be a function.');this._closeEventListeners.add(t)}removeEventListener(e,t){if(e!=="close")throw new Error(`Unknown event "${e}".`);if(typeof t!="function")throw new TypeError('"listener" must be a function.');this._closeEventListeners.delete(t)}show(){}close(){for(let e of this._closeEventListeners)e({})}destroy(){this._closeEventListeners.clear()}};o(b,"WebAppWindowDialog");var T=class extends b{constructor({url:e,handle:t,className:n}){super(),this.url=e,this.handle=t,this.dialog=document.createElement("dialog"),V(this.dialog,{position:"fixed",top:0,left:0,width:"100%",height:"100%","max-width":"100%","max-height":"100%",display:"none",margin:0,padding:0,border:"none",background:"transparent",color:"black","box-sizing":"border-box",overflow:"hidden","user-select":"none","z-index":1e6}),this.dialog.className="web-app-window",typeof n=="string"&&(this.dialog.className=this.dialog.className+" "+n);let r=document.createElement("style");r.appendChild(document.createTextNode(`dialog.web-app-window::backdrop {
1
+ "use strict";var T=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Te=Object.getOwnPropertyNames;var Me=Object.prototype.hasOwnProperty;var r=(n,e)=>T(n,"name",{value:e,configurable:!0});var Ie=(n,e)=>{for(var t in e)T(n,t,{get:e[t],enumerable:!0})},Oe=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Te(e))!Me.call(n,o)&&o!==t&&T(n,o,{get:()=>e[o],enumerable:!(i=Pe(e,o))||i.enumerable});return n};var Re=n=>Oe(T({},"__esModule",{value:!0}),n);var Ke={};Ie(Ke,{getCHAPIPlugin:()=>Ce});module.exports=Re(Ke);var D={ParseError:{message:"Parse error",code:-32700},InvalidRequest:{message:"Invalid Request",code:-32600},MethodNotFound:{message:"Method not found",code:-32601},InvalidParams:{message:"Invalid params",code:-32602},InternalError:{message:"Internal Error",code:-32603},ServerError:{message:"Server error",code:-32e3}};function m(n,e){if(e===void 0&&(e=window.location.href),typeof URL=="function")return new URL(n,e);if(typeof n!="string")throw new TypeError('"url" must be a string.');n.includes(":")||(e.startsWith("http")&&!n.startsWith("/")?n=e+"/"+n:n=e+n);let t=document.createElement("a");t.href=n;let i=(t.protocol||window.location.protocol)+"//";t.host?t.protocol==="http:"&&t.port==="80"||t.protocol==="https:"&&t.port==="443"?i+=t.hostname:i+=t.host:i+=window.location.host;let o=t.pathname;return o.startsWith("/")||(o="/"+o),{host:t.host||window.location.host,hostname:t.hostname,origin:i,protocol:t.protocol,pathname:o}}r(m,"parseUrl");function pe(n,e){for(e=n="";n++<36;e+=n*51&52?(n^15?8^Math.random()*(n^20?16:4):4).toString(16):"-");return e}r(pe,"uuidv4");function ue(n){return n&&typeof n=="object"&&n.jsonrpc==="2.0"&&n.id&&typeof n.id=="string"}r(ue,"isValidMessage");function Ae(n){return ue(n)&&Array.isArray(n.params)}r(Ae,"isValidRequest");function Le(n){return ue(n)&&!!("result"in n^"error"in n)&&(!("error"in n)||Ne(n.error))}r(Le,"isValidResponse");function Ne(n){return n&&typeof n=="object"&&typeof n.code=="number"&&typeof n.message=="string"}r(Ne,"isValidError");function we(n){let e={message:n.message};return n.constructor.name!=="Error"&&(e.constructor=n.constructor.name),"name"in n&&(e.name=n.name),"code"in n?e.code=n.code:e.code=D.ServerError.code,"details"in n&&(e.details=n.details),e}r(we,"serializeError");function fe(n){let e;return n.constructor==="DOMException"?e=new DOMException(n.message,n.name):(e=new Error(n.message),"code"in n&&(e.code=n.code)),n.details&&(e.details=n.details),e}r(fe,"deserializeError");function M({listener:n,origin:e,handle:t,expectRequest:i}){if(b(t)){let o=t;t=!1,o.then(s=>t=s)}return o=>{o.source===t&&o.origin===e&&(i&&Ae(o.data)||!i&&Le(o.data))&&n(o.data,o)}}r(M,"createMessageListener");function me(n){let[e,...t]=n.split("."),i=t.pop();return e=[e,...t].join("."),{name:e,method:i}}r(me,"destructureMethodName");function b(n){try{return typeof n.then=="function"}catch{}return!1}r(b,"isHandlePromise");var je=3e4,V=class V{constructor(){this.origin=null,this._handle=null,this._listener=null,this._pending=new Map}async connect(e,t){if(this._listener)throw new Error("Already connected.");t=t||{};let i=this;i.origin=m(e).origin,i._handle=t.handle||window.opener||window.parent;let o=i._pending;return i._listener=M({origin:i.origin,handle:i._handle,expectRequest:!1,listener:r(s=>{if(!o.has(s.id))return;let{resolve:d,reject:c,cancelTimeout:a}=o.get(s.id);if(a(),"result"in s)return d(s.result);c(fe(s.error))},"listener")}),window.addEventListener("message",i._listener),new k(i)}async send(e,t,{timeout:i=je}){if(!this._listener)throw new Error("RPC client not connected.");let o=this,s={jsonrpc:"2.0",id:pe(),method:e,params:t};return b(o._handle)?(await o._handle).postMessage(s,o.origin):o._handle.postMessage(s,o.origin),new Promise((d,c)=>{let a=o._pending,l;if(i>0){let h=setTimeout(()=>{a.delete(s.id),c(new Error("RPC call timed out."))},i);l=r(()=>{a.delete(s.id),clearTimeout(h)},"cancelTimeout")}else l=r(()=>{a.delete(s.id)},"cancelTimeout");a.set(s.id,{resolve:d,reject:c,cancelTimeout:l})})}close(){if(this._listener){window.removeEventListener("message",this._listener),this._handle=this.origin=this._listener=null;for(let e of this._pending.values())e.reject(new Error("RPC client closed."));this._pending=new Map}}};r(V,"Client");var g=V,$=class ${constructor(e){this.client=e,this._apis=new Map}define(e,t){if(!(e&&typeof e=="string"))throw new TypeError("`name` must be a non-empty string.");if(!(t&&typeof t=="object"&&Array.isArray(t.functions)))throw new TypeError("`definition.function` must be an array of function names or function definition objects to be defined.");let i=this,o={};return t.functions.forEach(s=>{typeof s=="string"&&(s={name:s,options:{}}),o[s.name]=async function(){return i.client.send(e+"."+s.name,[...arguments],s.options)}}),i._apis[e]=o,o}get(e,t){if(!this._apis[e]){if(t)return this.define(e,t);throw new Error(`API "${e}" has not been defined.`)}return this._apis[e]}};r($,"Injector");var k=$;var z=class z{constructor({deserialize:e=r(i=>i,"deserialize"),waitUntil:t=r(async()=>{},"waitUntil")}={}){this._listeners=[],this._deserialize=e,this._waitUntil=t}async emit(e){return e=this._deserialize(e),(this._listeners[e.type]||[]).forEach(t=>t(e)),this._waitUntil(e)}addEventListener(e,t){this._listeners[e]?this._listeners[e].push(t):this._listeners[e]=[t]}removeEventListener(e,t){let i=this._listeners[e];if(!i)return;let o=i.indexOf(t);o!==-1&&i.splice(o,1)}};r(z,"EventEmitter");var C=z;var F=class F{constructor(){this.origin=null,this._handle=null,this._apis=new Map}define(e,t){if(!(e&&typeof e=="string"))throw new TypeError("`name` must be a non-empty string.");if(!(t&&t!=="object"))throw new TypeError("`api` must be an object.");if(e in this._apis)throw new Error(`The "${e}" API is already defined.`);this._apis[e]=t}async listen(e,t){if(this._listener)throw new Error("Already listening.");t=t||{};let i=this;i.origin=m(e).origin,i._handle=t.handle||window.opener||window.parent;let o=t.ignoreUnknownApi==="true"||!1;i._listener=M({origin:i.origin,handle:i._handle,expectRequest:!0,listener:r(s=>{let{name:d,method:c}=me(s.method),a=i._apis[d];if(c&&c.startsWith("_"))return ge(i._handle,i.origin,s);if(!a&&o)return;if(!a||typeof a[c]!="function")return ge(i._handle,i.origin,s);let l=a[c];(async()=>{let h={jsonrpc:"2.0",id:s.id};try{h.result=await l.apply(a,s.params)}catch(p){h.error=we(p)}i._handle&&(b(i._handle)?i._handle.then(p=>p.postMessage(h,i.origin)):i._handle.postMessage(h,i.origin))})()},"listener")}),window.addEventListener("message",i._listener)}close(){this._listener&&(window.removeEventListener("message",this._listener),this._handle=this.origin=this._listener=null)}};r(F,"Server");var y=F;function ge(n,e,t){let i={jsonrpc:"2.0",id:t.id,error:Object.assign({},D.MethodNotFound)};return b(n)?n.then(o=>o.postMessage(i,e)):n.postMessage(i,e)}r(ge,"sendMethodNotFound");var K=class K{constructor(e){this.relyingOrigin=m(e).origin,this.client=null,this.injector=null,this.client=new g,this.server=new y,this._control=null,this._connected=!1}async connect(){return this.injector=await this.client.connect(this.relyingOrigin),this._connected=!0,this._control=this.injector.define("core.control",{functions:["ready","show","hide"]}),this.server.listen(this.relyingOrigin),this.injector}async ready(){if(!this._connected)throw new Error('WebApp not connected. Did you call ".connect()"?');return await this._control.ready(),this}close(){this._connected&&(this.server.close(),this.client.close(),this._connected=!1)}async show(){if(!this._connected)throw new Error('Cannot "show" yet; not connected. Did you call ".connect()"?');return this._control.show()}async hide(){if(!this._connected)throw new Error('Cannot "hide" yet; not connected. Did you call ".connect()?"');return this._control.hide()}};r(K,"WebApp");var _=K;var X=class X{constructor(){this._closeEventListeners=new Set}addEventListener(e,t){if(e!=="close")throw new Error(`Unknown event "${e}".`);if(typeof t!="function")throw new TypeError('"listener" must be a function.');this._closeEventListeners.add(t)}removeEventListener(e,t){if(e!=="close")throw new Error(`Unknown event "${e}".`);if(typeof t!="function")throw new TypeError('"listener" must be a function.');this._closeEventListeners.delete(t)}show(){}close(){for(let e of this._closeEventListeners)e({})}destroy(){this._closeEventListeners.clear()}};r(X,"WebAppWindowDialog");var x=X;var G=class G extends x{constructor({url:e,handle:t,className:i}){super(),this.url=e,this.handle=t,this.dialog=document.createElement("dialog"),Y(this.dialog,{position:"fixed",top:0,left:0,width:"100%",height:"100%","max-width":"100%","max-height":"100%",display:"none",margin:0,padding:0,border:"none",background:"transparent",color:"black","box-sizing":"border-box",overflow:"hidden","user-select":"none","z-index":1e6}),this.dialog.className="web-app-window",typeof i=="string"&&(this.dialog.className=this.dialog.className+" "+i);let o=document.createElement("style");o.appendChild(document.createTextNode(`dialog.web-app-window::backdrop {
2
2
  background-color: transparent;
3
- }`)),this.container=document.createElement("div"),V(this.container,{position:"relative",width:"100%",height:"100%",margin:0,padding:0,display:"flex","flex-direction":"column"}),this.container.className="web-app-window-backdrop",this.iframe=document.createElement("iframe"),this.iframe.src=e,this.iframe.scrolling="auto",V(this.iframe,{position:"fixed",top:0,left:0,width:"100%",height:"100%",border:"none",background:"transparent",overflow:"hidden",margin:0,padding:0,"flex-grow":1,"user-select":"none"}),this.dialog.appendChild(r),this.container.appendChild(this.iframe),this.dialog.appendChild(this.container),this.dialog.addEventListener("cancel",s=>{s.preventDefault(),this.hide()}),document.body.appendChild(this.dialog),this.handle=this.iframe.contentWindow}show(){this.dialog.style.display="block",this.dialog.showModal&&this.dialog.showModal();try{this.dialog.style.pointerEvents="none"}catch{}setTimeout(()=>{try{this.dialog.style.pointerEvents=""}catch{}},32)}close(){if(this.dialog.style.display="none",this.dialog.close)try{this.dialog.close()}catch(e){console.error(e)}super.close()}destroy(){this.dialog.parentNode.removeChild(this.dialog),super.destroy()}};o(T,"WebAppWindowInlineDialog");function V(i,e){for(let t in e)i.style[t]=e[t]}o(V,"applyStyle");var M=class extends b{constructor({url:e,handle:t,bounds:n={width:500,height:400}}){super(),this.url=e,this.handle=t,this._locationChanging=!1,t||this._openWindow({url:e,name:"web-app-window",bounds:n}),this.destroyed=!1,this._removeListeners=()=>{}}show(){}close(){this.destroy()}destroy(){this.handle&&!this.destroyed&&(this.handle.close(),super.close(),this.handle=null,this.destroyed=!0,this._removeListeners(),super.destroy())}isClosed(){return!this.handle||this.handle.closed}_openWindow({url:e,name:t,bounds:n}){let{x:r,y:s}=n,{width:d=500,height:c=400}=n;d=Math.min(d,window.innerWidth),c=Math.min(c,window.innerHeight);let a=Math.floor(r!==void 0?r:window.screenX+(window.innerWidth-d)/2),l=Math.floor(s!==void 0?s:window.screenY+(window.innerHeight-c)/2),h=`popup=yes,menubar=no,location=no,resizable=no,scrollbars=no,status=no,width=${d},height=${c},left=${a},top=${l}`;this._locationChanging=!0,this.handle=window.open(e,t,h),this._addListeners()}setLocation(e){this.url=e,this._locationChanging=!0,this.handle.location.replace(e)}_addListeners(){let e=o(()=>this.destroy(),"destroyDialog"),t=o(()=>{this._locationChanging=!1},"loadDialog"),n=o(()=>{this._locationChanging||this.destroy()},"unloadDialog");this.handle.addEventListener("unload",n),this.handle.addEventListener("load",t),window.addEventListener("beforeUnload",e,{once:!0});let r=setInterval(()=>{this.isClosed()&&(this.destroy(),clearInterval(r))},250);this._removeListeners=()=>{clearInterval(r),this.handle.removeListener("unload",n),this.handle.removeListener("load",t),window.removeEventListener("beforeUnload",e)}}};o(M,"WebAppWindowPopupDialog");var ue=6e4,u=class{constructor(e,{timeout:t=ue,dialog:n=null,handle:r,popup:s=!1,className:d=null,customize:c=null,bounds:a}={}){if(this.visible=!1,this.dialog=n,this.handle=null,this.popup=s,this.windowControl=null,this._destroyed=!1,this._ready=!1,this._private={},this._timeoutId=null,r&&r._dialog&&(this.dialog=n=r._dialog),this._private._readyPromise=new Promise((l,h)=>{this._timeoutId=setTimeout(()=>h(new DOMException("Loading Web application window timed out.","TimeoutError")),t),this._private._resolveReady=p=>{clearTimeout(this.timeoutId),this._timeoutId=null,l(p)},this._private._rejectReady=p=>{clearTimeout(this.timeoutId),this._timeoutId=null,h(p)}}),this._private.isReady=async()=>this._private._readyPromise,this._private.destroy=()=>{this._timeoutId&&this._private._rejectReady(new DOMException("Web application window closed before ready.","AbortError")),this._destroyed||(this.dialog.destroy(),this.dialog=null,this._destroyed=!0)},c&&!typeof c==="function")throw new TypeError("`options.customize` must be a function.");if(this.dialog||(this.popup?this.dialog=new M({url:e,handle:r,bounds:a}):this.dialog=new T({url:e,handle:r,className:d})),this.popup&&a){let{x:l,y:h,width:p=500,height:f=400}=a;p=Math.min(p,window.innerWidth),f=Math.min(f+30,window.innerHeight),l=Math.floor(l!==void 0?l:window.screenX+(window.innerWidth-p)/2),h=Math.floor(h!==void 0?h:window.screenY+(window.innerHeight-f)/2+15),this.dialog.handle.resizeTo(p,f),this.dialog.handle.moveTo(l,h)}if(this.handle=this.dialog.handle,c)try{c({dialog:this.dialog.dialog,container:this.dialog.container,iframe:this.dialog.iframe,webAppWindow:this})}catch(l){console.error(l)}}ready(){this._ready=!0,this._private._resolveReady(!0)}show(){if(!this.visible){this.visible=!0;let e=document.querySelector("body");this._bodyOverflowStyle=e.style.overflow,e.style.overflow="hidden",this._destroyed?this.windowControl.show&&this.windowControl.show():this.dialog.show()}}hide(){if(this.visible){this.visible=!1;let e=document.querySelector("body");this._bodyOverflowStyle?e.style.overflow=this._bodyOverflowStyle:e.style.overflow="",this._destroyed?this.windowControl.hide&&this.windowControl.hide():this.dialog.close()}}};o(u,"WebAppWindow");var we=1e4,v=class{constructor(){this.client=new g,this.server=new y,this.injector=null,this.control=null,this.loaded=!1,this.closed=!1}async createWindow(e,{timeout:t=we,iframe:n,dialog:r=null,popup:s=!1,handle:d,windowControl:c,className:a,customize:l,bounds:h}={}){if(this.loaded)throw new Error("AppContext already loaded.");this.loaded=!0,this.control=new u(e,{timeout:t,dialog:r,iframe:n,popup:s,handle:d,windowControl:c,className:a,customize:l,bounds:h}),window.addEventListener("pagehide",()=>this.close(),{once:!0}),this.server.define("core.control",this.control);let p=m(e).origin;return this.server.listen(p,{handle:this.control.handle,ignoreUnknownApi:!0}),await this.control._private.isReady(),this.injector=await this.client.connect(p,{handle:this.control.handle}),this.injector}close(){this.closed||(this.closed=!0,this.control._private.destroy(),this.server.close(),this.client.close())}};o(v,"WebAppContext");var I=class{constructor({credentialHandler:e,credentialRequestOrigin:t,credentialRequestOptions:n,hintKey:r}){this.type="credentialrequest",this._credentialHandler=e,this.credentialRequestOrigin=t,this.credentialRequestOptions=n,this.hintKey=r}async openWindow(e){await this._credentialHandler.show();let t=new u(e,{className:"credential-handler"});return t.ready(),t.show(),t.handle._dialog=t.dialog,t.handle}respondWith(e){this._promise=e}};o(I,"CredentialRequestEvent");var O=class{constructor({credentialHandler:e,credentialRequestOrigin:t,credential:n,hintKey:r}){this.type="credentialstore",this._credentialHandler=e,this.credentialRequestOrigin=t,this.credential=n,this.hintKey=r}async openWindow(e){await this._credentialHandler.show();let t=new u(e);return t.ready(),t.show(),t.handle._dialog=t.dialog,t.handle}respondWith(e){this._promise=e}};o(O,"CredentialStoreEvent");var R=class{constructor(e){this._credentialHandler=e}async request(e){return await this._credentialHandler._emitter.emit(new I(Object.assign({credentialHandler:this._credentialHandler},e)))}async store(e){return await this._credentialHandler._emitter.emit(new O(Object.assign({credentialHandler:this._credentialHandler},e)))}};o(R,"CredentialHandlerService");var Q=["credentialrequest","credentialstore"],A=class extends _{constructor(e,t=!1){if(typeof e!="string")throw new TypeError('"mediatorOrigin" must be a string.');super(e,t),this._emitter=new C({async waitUntil(n){return n._promise||Promise.reject(new DOMException('No "credentialrequest" event handler found.',"NotFoundError"))}})}async connect(){let e=await super.connect();return this.server.define("credentialHandler",new R(this)),await this.ready(),e}addEventListener(e,t){if(!Q.includes(e))throw new DOMException(`Unsupported event type "${e}"`,"NotSupportedError");return this._emitter.addEventListener(e,t)}removeEventListener(e,t){if(!Q.includes(e))throw new DOMException(`Unsupported event type "${e}"`,"NotSupportedError");return this._emitter.removeEventListener(e,t)}};o(A,"CredentialHandler");var L=class{constructor(e,t){let n=t.get("credentialHints",{functions:["delete","get","keys","has","set","clear"]});for(let r in n)if(r!=="set"){let s=n[r].bind(this,e);this[r]=function(...d){return this._deprecateNotice(),s(...d)}}this._remoteSet=n.set.bind(this,e)}async set(e,t){this._deprecateNotice(),t.icons=t.icons||[];let n=t.icons.map(r=>fe(r.src).then(s=>{r.fetchedImage=s}));return await Promise.all(n),this._remoteSet(e,t)}_deprecateNotice(){console.warn("Credential hints are deprecated and no longer used.")}};o(L,"CredentialHints");function fe(i){return new Promise(e=>{let t=new Image;t.crossOrigin="Anonymous",t.onload=()=>{let n=document.createElement("canvas"),r=n.getContext("2d");n.height=t.height,n.width=t.width,r.drawImage(t,0,0);let s=n.toDataURL();e(s),n=null},t.onerror=()=>e(null),t.src=i})}o(fe,"imageToDataUrl");var E=class{constructor(e,t){if(!(e&&typeof e=="string"))throw new TypeError('"url" must be a non-empty string.');this.hints=new L(e,t)}static async requestPermission(){return(await navigator.credentialsPolyfill.permissions.request({name:"credentialhandler"})).state}};o(E,"CredentialManager");var P=class{constructor(e,t){if(!(e&&typeof e=="string"))throw new TypeError('"url" must be a non-empty string.');this.credentialManager=new E(e,t)}};o(P,"CredentialHandlerRegistration");var N=class{constructor(e){this._init=(async()=>{this._injector=await e,this._remote=this._injector.get("credentialHandlers",{functions:["register","unregister","getRegistration","hasRegistration"]})})()}async register(e){return this._deprecateNotice(),await this._init,e=await this._remote.register("credential",e),new P(e,this._injector)}async unregister(e){return this._deprecateNotice(),await this._init,this._remote.unregister("credential",e)}async getRegistration(e){return this._deprecateNotice(),await this._init,e=await this._remote.getRegistration("credential",e),e?new P(e,this._injector):null}async hasRegistration(e){return this._deprecateNotice(),await this._init,await this._remote.hasRegistration("credential",e)}_deprecateNotice(){console.warn('Credential handler registration APIs are deprecated. The credential handler specified in "manifest.json" is now automatically registered when a user grants permission to install a credential handler via "CredentialManager.requestPermission()".')}};o(N,"CredentialHandlers");var w=class{constructor(e,t,{recommendedHandlerOrigins:n=[],protocols:r={}}={}){if(typeof e!="string")throw new TypeError('"dataType" must be a string.');this.type="web",this.dataType=e,this.data=t,this.options={recommendedHandlerOrigins:n,protocols:r}}};o(w,"WebCredential");var me=0,ge=0,j=class{constructor(e){this._nativeCredentialsContainer={get:navigator.credentials&&navigator.credentials.get&&navigator.credentials.get.bind(navigator.credentials),store:navigator.credentials&&navigator.credentials.store&&navigator.credentials.store.bind(navigator.credentials)},this._init=(async()=>{this._remote=(await e).get("credentialsContainer",{functions:[{name:"get",options:{timeout:me}},{name:"store",options:{timeout:ge}}]})})()}async get(e={}){if(e.web){await this._init;let t=await this._remote.get(e);return t?new w(t.dataType,t.data):null}if(this._nativeCredentialsContainer.get)return this._nativeCredentialsContainer.get(e);throw new DOMException("Not implemented.","NotSupportedError")}async store(e){if(e instanceof w){await this._init;let t=await this._remote.store(e);return t?new w(t.dataType,t.data):null}if(this._nativeCredentialsContainer.store)return this._nativeCredentialsContainer.store(e);throw new DOMException("Not implemented.","NotSupportedError")}};o(j,"CredentialsContainer");var H=class{constructor(e){this._init=(async()=>{this._remote=(await e).get("permissionManager",{functions:["query",{name:"request",options:{timeout:0}},"revoke"]})})()}async query(e){return await this._init,await this._remote.query(e)}async request(e){return await this._init,await this._remote.request(e)}async revoke(e){return await this._init,await this._remote.revoke(e)}};o(H,"PermissionManager");var ye="https://authn.io";var $;async function B(i){return $||($=!0,_e(i))}o(B,"loadOnce");async function _e(i={mediatorOrigin:ye}){ve();let e;if(typeof i=="string")e=i;else if(i&&typeof i=="object"&&typeof i.mediatorOrigin=="string")e=`${i.mediatorOrigin}/mediator`;else throw new Error('"options.mediatorOrigin" must be a string expressing the origin of the mediator.');let n=new v().createWindow(e,{className:"credential-mediator",timeout:3e4}),r=document.createElement("style");r.appendChild(document.createTextNode(`dialog.web-app-window.credential-mediator > .web-app-window-backdrop {
3
+ }`)),this.container=document.createElement("div"),Y(this.container,{position:"relative",width:"100%",height:"100%",margin:0,padding:0,display:"flex","flex-direction":"column"}),this.container.className="web-app-window-backdrop",this.iframe=document.createElement("iframe"),this.iframe.src=e,this.iframe.scrolling="auto",Y(this.iframe,{position:"fixed",top:0,left:0,width:"100%",height:"100%",border:"none",background:"transparent",overflow:"hidden",margin:0,padding:0,"flex-grow":1,"user-select":"none"}),this.dialog.appendChild(o),this.container.appendChild(this.iframe),this.dialog.appendChild(this.container),this.dialog.addEventListener("cancel",s=>{s.preventDefault(),this.hide()}),document.body.appendChild(this.dialog),this.handle=this.iframe.contentWindow}show(){this.dialog.style.display="block",this.dialog.showModal&&this.dialog.showModal();try{this.dialog.style.pointerEvents="none"}catch{}setTimeout(()=>{try{this.dialog.style.pointerEvents=""}catch{}},32)}close(){if(this.dialog.style.display="none",this.dialog.close)try{this.dialog.close()}catch(e){console.error(e)}super.close()}destroy(){this.dialog.parentNode.removeChild(this.dialog),super.destroy()}};r(G,"WebAppWindowInlineDialog");var I=G;function Y(n,e){for(let t in e)n.style[t]=e[t]}r(Y,"applyStyle");var Q=class Q extends x{constructor({url:e,handle:t,bounds:i={width:500,height:400}}){super(),this.url=e,this.handle=t,this._locationChanging=!1,t||this._openWindow({url:e,name:"web-app-window",bounds:i}),this.destroyed=!1,this._removeListeners=()=>{}}show(){}close(){this.destroy()}destroy(){this.handle&&!this.destroyed&&(this.handle.close(),super.close(),this.handle=null,this.destroyed=!0,this._removeListeners(),super.destroy())}isClosed(){return!this.handle||this.handle.closed}_openWindow({url:e,name:t,bounds:i}){let{x:o,y:s}=i,{width:d=500,height:c=400}=i;d=Math.min(d,window.innerWidth),c=Math.min(c,window.innerHeight);let a=Math.floor(o!==void 0?o:window.screenX+(window.innerWidth-d)/2),l=Math.floor(s!==void 0?s:window.screenY+(window.innerHeight-c)/2),h=`popup=yes,menubar=no,location=no,resizable=no,scrollbars=no,status=no,width=${d},height=${c},left=${a},top=${l}`;this._locationChanging=!0,this.handle=window.open(e,t,h),this._addListeners()}setLocation(e){this.url=e,this._locationChanging=!0,this.handle.location.replace(e)}_addListeners(){let e=r(()=>this.destroy(),"destroyDialog"),t=r(()=>{this._locationChanging=!1},"loadDialog"),i=r(()=>{this._locationChanging||this.destroy()},"unloadDialog");this.handle.addEventListener("unload",i),this.handle.addEventListener("load",t),window.addEventListener("beforeUnload",e,{once:!0});let o=setInterval(()=>{this.isClosed()&&(this.destroy(),clearInterval(o))},250);this._removeListeners=()=>{clearInterval(o),this.handle.removeListener("unload",i),this.handle.removeListener("load",t),window.removeEventListener("beforeUnload",e)}}};r(Q,"WebAppWindowPopupDialog");var O=Q;var He=6e4,B=class B{constructor(e,{timeout:t=He,dialog:i=null,handle:o,popup:s=!1,className:d=null,customize:c=null,bounds:a}={}){if(this.visible=!1,this.dialog=i,this.handle=null,this.popup=s,this.windowControl=null,this._destroyed=!1,this._ready=!1,this._private={},this._timeoutId=null,o&&o._dialog&&(this.dialog=i=o._dialog),this._private._readyPromise=new Promise((l,h)=>{this._timeoutId=setTimeout(()=>h(new DOMException("Loading Web application window timed out.","TimeoutError")),t),this._private._resolveReady=p=>{clearTimeout(this.timeoutId),this._timeoutId=null,l(p)},this._private._rejectReady=p=>{clearTimeout(this.timeoutId),this._timeoutId=null,h(p)}}),this._private.isReady=async()=>this._private._readyPromise,this._private.destroy=()=>{this._timeoutId&&this._private._rejectReady(new DOMException("Web application window closed before ready.","AbortError")),this._destroyed||(this.dialog.destroy(),this.dialog=null,this._destroyed=!0)},this.dialog||(this.popup?this.dialog=new O({url:e,handle:o,bounds:a}):this.dialog=new I({url:e,handle:o,className:d})),this.popup&&a){let{x:l,y:h,width:p=500,height:f=400}=a;p=Math.min(p,window.innerWidth),f=Math.min(f+30,window.innerHeight),l=Math.floor(l!==void 0?l:window.screenX+(window.innerWidth-p)/2),h=Math.floor(h!==void 0?h:window.screenY+(window.innerHeight-f)/2+15),this.dialog.handle.resizeTo(p,f),this.dialog.handle.moveTo(l,h)}if(this.handle=this.dialog.handle,c)try{c({dialog:this.dialog.dialog,container:this.dialog.container,iframe:this.dialog.iframe,webAppWindow:this})}catch(l){console.error(l)}}ready(){this._ready=!0,this._private._resolveReady(!0)}show(){if(!this.visible){this.visible=!0;let e=document.querySelector("body");this._bodyOverflowStyle=e.style.overflow,e.style.overflow="hidden",this._destroyed?this.windowControl.show&&this.windowControl.show():this.dialog.show()}}hide(){if(this.visible){this.visible=!1;let e=document.querySelector("body");this._bodyOverflowStyle?e.style.overflow=this._bodyOverflowStyle:e.style.overflow="",this._destroyed?this.windowControl.hide&&this.windowControl.hide():this.dialog.close()}}};r(B,"WebAppWindow");var u=B;var Ue=1e4,J=class J{constructor(){this.client=new g,this.server=new y,this.injector=null,this.control=null,this.loaded=!1,this.closed=!1}async createWindow(e,{timeout:t=Ue,iframe:i,dialog:o=null,popup:s=!1,handle:d,windowControl:c,className:a,customize:l,bounds:h}={}){if(this.loaded)throw new Error("AppContext already loaded.");this.loaded=!0,this.control=new u(e,{timeout:t,dialog:o,iframe:i,popup:s,handle:d,windowControl:c,className:a,customize:l,bounds:h}),window.addEventListener("pagehide",()=>this.close(),{once:!0}),this.server.define("core.control",this.control);let p=m(e).origin;return this.server.listen(p,{handle:this.control.handle,ignoreUnknownApi:!0}),await this.control._private.isReady(),this.injector=await this.client.connect(p,{handle:this.control.handle}),this.injector}close(){this.closed||(this.closed=!0,this.control._private.destroy(),this.server.close(),this.client.close())}};r(J,"WebAppContext");var v=J;var Z=class Z{constructor({credentialHandler:e,credentialRequestOrigin:t,credentialRequestOptions:i,hintKey:o}){this.type="credentialrequest",this._credentialHandler=e,this.credentialRequestOrigin=t,this.credentialRequestOptions=i,this.hintKey=o}async openWindow(e){await this._credentialHandler.show();let t=new u(e,{className:"credential-handler"});return t.ready(),t.show(),t.handle._dialog=t.dialog,t.handle}respondWith(e){this._promise=e}};r(Z,"CredentialRequestEvent");var R=Z;var ee=class ee{constructor({credentialHandler:e,credentialRequestOrigin:t,credential:i,hintKey:o}){this.type="credentialstore",this._credentialHandler=e,this.credentialRequestOrigin=t,this.credential=i,this.hintKey=o}async openWindow(e){await this._credentialHandler.show();let t=new u(e);return t.ready(),t.show(),t.handle._dialog=t.dialog,t.handle}respondWith(e){this._promise=e}};r(ee,"CredentialStoreEvent");var A=ee;var te=class te{constructor(e){this._credentialHandler=e}async request(e){return await this._credentialHandler._emitter.emit(new R(Object.assign({credentialHandler:this._credentialHandler},e)))}async store(e){return await this._credentialHandler._emitter.emit(new A(Object.assign({credentialHandler:this._credentialHandler},e)))}};r(te,"CredentialHandlerService");var L=te;var ye=["credentialrequest","credentialstore"],ie=class ie extends _{constructor(e,t=!1){if(typeof e!="string")throw new TypeError('"mediatorOrigin" must be a string.');super(e,t),this._emitter=new C({async waitUntil(i){return i._promise||Promise.reject(new DOMException('No "credentialrequest" event handler found.',"NotFoundError"))}})}async connect(){let e=await super.connect();return this.server.define("credentialHandler",new L(this)),await this.ready(),e}addEventListener(e,t){if(!ye.includes(e))throw new DOMException(`Unsupported event type "${e}"`,"NotSupportedError");return this._emitter.addEventListener(e,t)}removeEventListener(e,t){if(!ye.includes(e))throw new DOMException(`Unsupported event type "${e}"`,"NotSupportedError");return this._emitter.removeEventListener(e,t)}};r(ie,"CredentialHandler");var N=ie;var ne=class ne{constructor(e,t){let i=t.get("credentialHints",{functions:["delete","get","keys","has","set","clear"]});for(let o in i)if(o!=="set"){let s=i[o].bind(this,e);this[o]=function(...d){return this._deprecateNotice(),s(...d)}}this._remoteSet=i.set.bind(this,e)}async set(e,t){this._deprecateNotice(),t.icons=t.icons||[];let i=t.icons.map(o=>We(o.src).then(s=>{o.fetchedImage=s}));return await Promise.all(i),this._remoteSet(e,t)}_deprecateNotice(){console.warn("Credential hints are deprecated and no longer used.")}};r(ne,"CredentialHints");var j=ne;function We(n){return new Promise(e=>{let t=new Image;t.crossOrigin="Anonymous",t.onload=()=>{let i=document.createElement("canvas"),o=i.getContext("2d");i.height=t.height,i.width=t.width,o.drawImage(t,0,0);let s=i.toDataURL();e(s),i=null},t.onerror=()=>e(null),t.src=n})}r(We,"imageToDataUrl");var re=class re{constructor(e,t){if(!(e&&typeof e=="string"))throw new TypeError('"url" must be a non-empty string.');this.hints=new j(e,t)}static async requestPermission(){return(await navigator.credentialsPolyfill.permissions.request({name:"credentialhandler"})).state}};r(re,"CredentialManager");var E=re;var oe=class oe{constructor(e,t){if(!(e&&typeof e=="string"))throw new TypeError('"url" must be a non-empty string.');this.credentialManager=new E(e,t)}};r(oe,"CredentialHandlerRegistration");var P=oe;var se=class se{constructor(e){this._init=(async()=>{this._injector=await e,this._remote=this._injector.get("credentialHandlers",{functions:["register","unregister","getRegistration","hasRegistration"]})})()}async register(e){return this._deprecateNotice(),await this._init,e=await this._remote.register("credential",e),new P(e,this._injector)}async unregister(e){return this._deprecateNotice(),await this._init,this._remote.unregister("credential",e)}async getRegistration(e){return this._deprecateNotice(),await this._init,e=await this._remote.getRegistration("credential",e),e?new P(e,this._injector):null}async hasRegistration(e){return this._deprecateNotice(),await this._init,await this._remote.hasRegistration("credential",e)}_deprecateNotice(){console.warn('Credential handler registration APIs are deprecated. The credential handler specified in "manifest.json" is now automatically registered when a user grants permission to install a credential handler via "CredentialManager.requestPermission()".')}};r(se,"CredentialHandlers");var H=se;var ae=class ae{constructor(e,t,{recommendedHandlerOrigins:i=[],protocols:o={}}={}){if(typeof e!="string")throw new TypeError('"dataType" must be a string.');this.type="web",this.dataType=e,this.data=t,this.options={recommendedHandlerOrigins:i,protocols:o}}};r(ae,"WebCredential");var w=ae;var Se=0,De=0,ce=class ce{constructor(e){this._nativeCredentialsContainer={get:navigator.credentials&&navigator.credentials.get&&navigator.credentials.get.bind(navigator.credentials),store:navigator.credentials&&navigator.credentials.store&&navigator.credentials.store.bind(navigator.credentials)},this._init=(async()=>{this._remote=(await e).get("credentialsContainer",{functions:[{name:"get",options:{timeout:Se}},{name:"store",options:{timeout:De}}]})})()}async get(e={}){if(e.web){await this._init;let t=await this._remote.get(e);return t?new w(t.dataType,t.data):null}if(this._nativeCredentialsContainer.get)return this._nativeCredentialsContainer.get(e);throw new DOMException("Not implemented.","NotSupportedError")}async store(e){if(e instanceof w){await this._init;let t=await this._remote.store(e);return t?new w(t.dataType,t.data):null}if(this._nativeCredentialsContainer.store)return this._nativeCredentialsContainer.store(e);throw new DOMException("Not implemented.","NotSupportedError")}};r(ce,"CredentialsContainer");var U=ce;var le=class le{constructor(e){this._init=(async()=>{this._remote=(await e).get("permissionManager",{functions:["query",{name:"request",options:{timeout:0}},"revoke"]})})()}async query(e){return await this._init,await this._remote.query(e)}async request(e){return await this._init,await this._remote.request(e)}async revoke(e){return await this._init,await this._remote.revoke(e)}};r(le,"PermissionManager");var W=le;var qe="https://authn.io";var de;async function _e(n){return de||(de=!0,ke(n))}r(_e,"loadOnce");async function ke(n={mediatorOrigin:qe}){Ve();let e;if(typeof n=="string")e=n;else if(n&&typeof n=="object"&&typeof n.mediatorOrigin=="string")e=`${n.mediatorOrigin}/mediator`;else throw new Error('"options.mediatorOrigin" must be a string expressing the origin of the mediator.');let i=new v().createWindow(e,{className:"credential-mediator",timeout:3e4}),o=document.createElement("style");o.appendChild(document.createTextNode(`dialog.web-app-window.credential-mediator > .web-app-window-backdrop {
4
4
  background-color: rgba(0, 0, 0, 0.25);
5
- }`)),document.body.appendChild(r);let s={};s.permissions=new H(n),s.CredentialHandlers=new N(n),s.CredentialHandler=A,s.CredentialManager=E,s.credentials=new j(n),s.WebCredential=w,navigator.credentialsPolyfill=s,"credentials"in navigator?(navigator.credentials.get=s.credentials.get.bind(s.credentials),navigator.credentials.store=s.credentials.store.bind(s.credentials)):navigator.credentials=s.credentials;let d=new Proxy(navigator.credentials,{set(c,a,l){return a in s.credentials._nativeCredentialsContainer?s.credentials._nativeCredentialsContainer[a]=l:c[a]=l,!0}});return Object.defineProperty(navigator,"credentials",{value:d,writable:!0}),window.CredentialManager=E,window.WebCredential=w,s}o(_e,"load");function ve(){if(!window.isSecureContext)throw new DOMException("SecurityError","The operation is insecure.")}o(ve,"_assertSecureContext");var Ee=6e4,U=class extends _{constructor(){super(window.location.origin)}async receive(){let e=this;return await e.connect(),new Promise((t,n)=>{let r=setTimeout(()=>{n(new Error("Timed out waiting to receive event."))},Ee);e.server.define("credentialEventProxy",{async send(s){return t(s),clearTimeout(r),new Promise((d,c)=>{s.respondWith=a=>{try{d(a)}catch(l){c(l)}}})}}),e.ready()})}};o(U,"CredentialEventProxy");var be="https://authn.io";async function Z(){if(await navigator.credentialsPolyfill.CredentialManager.requestPermission()!=="granted")throw new Error("Permission denied.")}o(Z,"installHandler");async function ee({mediatorOrigin:i=be,get:e,store:t}){if(!(e||t))throw new Error('"get" or "store" function(s) must be specified.');let n=navigator.credentialsPolyfill.CredentialHandler,r=new n(i);if(e){if(typeof e!="function")throw new TypeError('"get" must be a function.');r.addEventListener("credentialrequest",s=>J({event:s,get:e}))}if(t){if(typeof t!="function")throw new TypeError('"store" must be a function.');r.addEventListener("credentialstore",s=>J({event:s,store:t}))}await r.connect()}o(ee,"activateHandler");async function te(){return new U().receive()}o(te,"receiveCredentialEvent");function J({event:i,get:e,store:t}){i.respondWith(xe({event:i,get:e,store:t}))}o(J,"listener");async function xe({event:i,get:e,store:t}){let n=await(e||t)({event:i});if(!(n&&typeof n=="object"))throw new TypeError('Return value of "get" or "store" hook must be an object.');if(n.type==="response")return{dataType:n.dataType,data:n.data};if(n.type==="redirect"){let r=new v,s=await i.openWindow(n.url);return(await r.createWindow(n.url,{handle:s,popup:!1,timeout:6e5})).get("credentialEventProxy",{functions:[{name:"send",options:{timeout:0}}]}).send({type:i.type,credentialRequestOptions:i.credentialRequestOptions,credentialRequestOrigin:i.credentialRequestOrigin,credential:i.credential,hintKey:i.hintKey})}throw new Error('Return value of "get" or "store" must have a type of "response" or "redirect".')}o(xe,"createResponse");var ie=o(async()=>{if(typeof window>"u")return{name:"CHAPI",methods:{installChapiHandler:async()=>{throw new Error("CHAPI is only available inside of a browser!")},activateChapiHandler:async()=>{throw new Error("CHAPI is only available inside of a browser!")},receiveChapiEvent:async()=>{throw new Error("CHAPI is only available inside of a browser!")},storeCredentialViaChapiDidAuth:async()=>{throw new Error("CHAPI is only available inside of a browser!")},storePresentationViaChapi:async()=>{throw new Error("CHAPI is only available inside of a browser!")}}};try{await B()}catch(i){console.error("Error loading CHAPI polyfill!",i)}return{name:"CHAPI",displayName:"CHAPI",description:"Credential Handler API. Allows sending/retrieving credentials across wallets and issuers",methods:{installChapiHandler:async()=>Z(),activateChapiHandler:async(i,{mediatorOrigin:e=`https://authn.io/mediator?${encodeURIComponent(window.location.origin)}`,get:t,store:n})=>ee({mediatorOrigin:e,get:t,store:n}),receiveChapiEvent:async()=>te(),storeCredentialViaChapiDidAuth:async(i,e)=>{let t=crypto.randomUUID(),n=window.location.origin,r={web:{VerifiablePresentation:{query:{type:"DIDAuthentication"},challenge:t,domain:n}}},s=await navigator.credentials.get(r);if(!s)return{success:!1,reason:"did not auth"};let d=await i.invoke.verifyPresentation(s.data,{challenge:t,domain:n,proofPurpose:"authentication"});if(d.warnings.length>0||d.errors.length>0)return{success:!1,reason:"auth failed verification"};let c=s.data?.proof?.verificationMethod?.split("#")[0],a=[];if(Array.isArray(e))for(let p=0;p<e.length;p++){let f=e[p];Array.isArray(f.credentialSubject)||(f.credentialSubject.id=c),a.push(await i.invoke.issueCredential(f))}else Array.isArray(e.credentialSubject)||(e.credentialSubject.id=c),a.push(await i.invoke.issueCredential(e));let l=await i.invoke.getTestVp();return l.verifiableCredential=a,await i.invoke.storePresentationViaChapi(l)?{success:!0}:{success:!1,reason:"did not store"}},storePresentationViaChapi:async(i,e)=>{let t=new WebCredential("VerifiablePresentation",e);return window.navigator.credentials.store(t)}}}},"getCHAPIPlugin");
6
- /*!
7
- * A CredentialHandlerRegistration provides a CredentialManager to enable Web
8
- * apps to register Profiles that can be presented to websites.
9
- *
10
- * Copyright (c) 2017 Digital Bazaar, Inc. All rights reserved.
11
- */
12
- /*!
13
- * A CredentialRequestEvent is emitted when a request has been made for
14
- * credentials.
15
- *
16
- * Copyright (c) 2017 Digital Bazaar, Inc. All rights reserved.
17
- */
18
- /*!
19
- * A CredentialStoreEvent is emitted when a request has been made to
20
- * store a credential.
21
- *
22
- * Copyright (c) 2017 Digital Bazaar, Inc. All rights reserved.
23
- */
24
- /*!
25
- * A WebApp is a remote application that runs in a WebAppContext.
26
- *
27
- * Copyright (c) 2017 Digital Bazaar, Inc. All rights reserved.
28
- */
29
- /*!
30
- * A WebCredential is a Credential that can be retrieved from or stored by a
31
- * "credential handler" that runs in a third party Web application.
32
- *
33
- * Copyright (c) 2017-2023 Digital Bazaar, Inc. All rights reserved.
34
- */
35
- /*!
36
- * Copyright (c) 2017 Digital Bazaar, Inc. All rights reserved.
37
- */
38
- /*!
39
- * Copyright (c) 2017-2018 Digital Bazaar, Inc. All rights reserved.
40
- */
41
- /*!
42
- * Copyright (c) 2017-2022 Digital Bazaar, Inc. All rights reserved.
43
- */
44
- /*!
45
- * Copyright (c) 2017-2023 Digital Bazaar, Inc. All rights reserved.
46
- */
47
- /*!
48
- * Copyright (c) 2017-2024 Digital Bazaar, Inc. All rights reserved.
49
- */
50
- /*!
51
- * Copyright (c) 2018-2022 Digital Bazaar, Inc. All rights reserved.
52
- */
53
- /*!
54
- * Copyright (c) 2022 Digital Bazaar, Inc. All rights reserved.
55
- */
56
- /*!
57
- * Copyright (c) 2022-2023 Digital Bazaar, Inc. All rights reserved.
58
- */
59
- /*!
60
- * JSON-RPC for Web Request Polyfills.
61
- *
62
- * Copyright (c) 2017 Digital Bazaar, Inc. All rights reserved.
63
- */
64
- /*!
65
- * The core CredentialHandler class.
66
- *
67
- * Copyright (c) 2017 Digital Bazaar, Inc. All rights reserved.
68
- */
69
- /*!
70
- * Utilities for Web Request RPC.
71
- *
72
- * Copyright (c) 2017 Digital Bazaar, Inc. All rights reserved.
73
- */
74
- /*!
75
- * Wrapper for native CredentialsContainer that uses remote Credential Mediator
76
- * for WebCredential-related operations.
77
- *
78
- * Copyright (c) 2017-2018 Digital Bazaar, Inc. All rights reserved.
79
- */
5
+ }`)),document.body.appendChild(o);let s={};s.permissions=new W(i),s.CredentialHandlers=new H(i),s.CredentialHandler=N,s.CredentialManager=E,s.credentials=new U(i),s.WebCredential=w,navigator.credentialsPolyfill=s,"credentials"in navigator?(navigator.credentials.get=s.credentials.get.bind(s.credentials),navigator.credentials.store=s.credentials.store.bind(s.credentials)):navigator.credentials=s.credentials;let d=new Proxy(navigator.credentials,{set(c,a,l){return a in s.credentials._nativeCredentialsContainer?s.credentials._nativeCredentialsContainer[a]=l:c[a]=l,!0}});return Object.defineProperty(navigator,"credentials",{value:d,writable:!0}),window.CredentialManager=E,window.WebCredential=w,s}r(ke,"load");function Ve(){if(!window.isSecureContext)throw new DOMException("SecurityError","The operation is insecure.")}r(Ve,"_assertSecureContext");var $e=6e4,he=class he extends _{constructor(){super(window.location.origin)}async receive(){let e=this;return await e.connect(),new Promise((t,i)=>{let o=setTimeout(()=>{i(new Error("Timed out waiting to receive event."))},$e);e.server.define("credentialEventProxy",{async send(s){return t(s),clearTimeout(o),new Promise((d,c)=>{s.respondWith=a=>{try{d(a)}catch(l){c(l)}}})}}),e.ready()})}};r(he,"CredentialEventProxy");var S=he;var ze="https://authn.io";async function Ee(){if(await navigator.credentialsPolyfill.CredentialManager.requestPermission()!=="granted")throw new Error("Permission denied.")}r(Ee,"installHandler");async function be({mediatorOrigin:n=ze,get:e,store:t}){if(!(e||t))throw new Error('"get" or "store" function(s) must be specified.');let i=navigator.credentialsPolyfill.CredentialHandler,o=new i(n);if(e){if(typeof e!="function")throw new TypeError('"get" must be a function.');o.addEventListener("credentialrequest",s=>ve({event:s,get:e}))}if(t){if(typeof t!="function")throw new TypeError('"store" must be a function.');o.addEventListener("credentialstore",s=>ve({event:s,store:t}))}await o.connect()}r(be,"activateHandler");async function xe(){return new S().receive()}r(xe,"receiveCredentialEvent");function ve({event:n,get:e,store:t}){n.respondWith(Fe({event:n,get:e,store:t}))}r(ve,"listener");async function Fe({event:n,get:e,store:t}){let i=await(e||t)({event:n});if(!(i&&typeof i=="object"))throw new TypeError('Return value of "get" or "store" hook must be an object.');if(i.type==="response")return{dataType:i.dataType,data:i.data};if(i.type==="redirect"){let o=new v,s=await n.openWindow(i.url);return(await o.createWindow(i.url,{handle:s,popup:!1,timeout:6e5})).get("credentialEventProxy",{functions:[{name:"send",options:{timeout:0}}]}).send({type:n.type,credentialRequestOptions:n.credentialRequestOptions,credentialRequestOrigin:n.credentialRequestOrigin,credential:n.credential,hintKey:n.hintKey})}throw new Error('Return value of "get" or "store" must have a type of "response" or "redirect".')}r(Fe,"createResponse");var Ce=r(async()=>{if(typeof window>"u")return{name:"CHAPI",methods:{installChapiHandler:r(async()=>{throw new Error("CHAPI is only available inside of a browser!")},"installChapiHandler"),activateChapiHandler:r(async()=>{throw new Error("CHAPI is only available inside of a browser!")},"activateChapiHandler"),receiveChapiEvent:r(async()=>{throw new Error("CHAPI is only available inside of a browser!")},"receiveChapiEvent"),storeCredentialViaChapiDidAuth:r(async()=>{throw new Error("CHAPI is only available inside of a browser!")},"storeCredentialViaChapiDidAuth"),storePresentationViaChapi:r(async()=>{throw new Error("CHAPI is only available inside of a browser!")},"storePresentationViaChapi")}};try{await _e()}catch(n){console.error("Error loading CHAPI polyfill!",n)}return{name:"CHAPI",displayName:"CHAPI",description:"Credential Handler API. Allows sending/retrieving credentials across wallets and issuers",methods:{installChapiHandler:r(async()=>Ee(),"installChapiHandler"),activateChapiHandler:r(async(n,{mediatorOrigin:e=`https://authn.io/mediator?${encodeURIComponent(window.location.origin)}`,get:t,store:i})=>be({mediatorOrigin:e,get:t,store:i}),"activateChapiHandler"),receiveChapiEvent:r(async()=>xe(),"receiveChapiEvent"),storeCredentialViaChapiDidAuth:r(async(n,e)=>{let t=crypto.randomUUID(),i=window.location.origin,o={web:{VerifiablePresentation:{query:{type:"DIDAuthentication"},challenge:t,domain:i}}},s=await navigator.credentials.get(o);if(!s)return{success:!1,reason:"did not auth"};let d=await n.invoke.verifyPresentation(s.data,{challenge:t,domain:i,proofPurpose:"authentication"});if(d.warnings.length>0||d.errors.length>0)return{success:!1,reason:"auth failed verification"};let c=s.data?.proof?.verificationMethod?.split("#")[0],a=[];if(Array.isArray(e))for(let p=0;p<e.length;p++){let f=e[p];Array.isArray(f.credentialSubject)||(f.credentialSubject.id=c),a.push(await n.invoke.issueCredential(f))}else Array.isArray(e.credentialSubject)||(e.credentialSubject.id=c),a.push(await n.invoke.issueCredential(e));let l=await n.invoke.getTestVp();return l.verifiableCredential=a,await n.invoke.storePresentationViaChapi(l)?{success:!0}:{success:!1,reason:"did not store"}},"storeCredentialViaChapiDidAuth"),storePresentationViaChapi:r(async(n,e)=>{let t=new WebCredential("VerifiablePresentation",e);return window.navigator.credentials.store(t)},"storePresentationViaChapi")}}},"getCHAPIPlugin");
6
+ /*! Bundled license information:
7
+
8
+ web-request-rpc/utils.js:
9
+ (*!
10
+ * Utilities for Web Request RPC.
11
+ *
12
+ * Copyright (c) 2017 Digital Bazaar, Inc. All rights reserved.
13
+ *)
14
+
15
+ web-request-rpc/Client.js:
16
+ web-request-rpc/EventEmitter.js:
17
+ web-request-rpc/Server.js:
18
+ (*!
19
+ * Copyright (c) 2017 Digital Bazaar, Inc. All rights reserved.
20
+ *)
21
+
22
+ web-request-rpc/WebApp.js:
23
+ (*!
24
+ * A WebApp is a remote application that runs in a WebAppContext.
25
+ *
26
+ * Copyright (c) 2017 Digital Bazaar, Inc. All rights reserved.
27
+ *)
28
+
29
+ web-request-rpc/WebAppWindowDialog.js:
30
+ web-request-rpc/WebAppWindowInlineDialog.js:
31
+ (*!
32
+ * Copyright (c) 2022 Digital Bazaar, Inc. All rights reserved.
33
+ *)
34
+
35
+ web-request-rpc/WebAppWindowPopupDialog.js:
36
+ (*!
37
+ * Copyright (c) 2022-2023 Digital Bazaar, Inc. All rights reserved.
38
+ *)
39
+
40
+ web-request-rpc/WebAppWindow.js:
41
+ (*!
42
+ * Copyright (c) 2017-2023 Digital Bazaar, Inc. All rights reserved.
43
+ *)
44
+
45
+ web-request-rpc/WebAppContext.js:
46
+ credential-handler-polyfill/CredentialHandlerService.js:
47
+ credential-handler-polyfill/CredentialHints.js:
48
+ credential-handler-polyfill/CredentialManager.js:
49
+ credential-handler-polyfill/CredentialHandlers.js:
50
+ credential-handler-polyfill/PermissionManager.js:
51
+ (*!
52
+ * Copyright (c) 2017-2022 Digital Bazaar, Inc. All rights reserved.
53
+ *)
54
+
55
+ web-request-rpc/index.js:
56
+ (*!
57
+ * JSON-RPC for Web Request Polyfills.
58
+ *
59
+ * Copyright (c) 2017 Digital Bazaar, Inc. All rights reserved.
60
+ *)
61
+
62
+ credential-handler-polyfill/CredentialRequestEvent.js:
63
+ (*!
64
+ * A CredentialRequestEvent is emitted when a request has been made for
65
+ * credentials.
66
+ *
67
+ * Copyright (c) 2017 Digital Bazaar, Inc. All rights reserved.
68
+ *)
69
+
70
+ credential-handler-polyfill/CredentialStoreEvent.js:
71
+ (*!
72
+ * A CredentialStoreEvent is emitted when a request has been made to
73
+ * store a credential.
74
+ *
75
+ * Copyright (c) 2017 Digital Bazaar, Inc. All rights reserved.
76
+ *)
77
+
78
+ credential-handler-polyfill/CredentialHandler.js:
79
+ (*!
80
+ * The core CredentialHandler class.
81
+ *
82
+ * Copyright (c) 2017 Digital Bazaar, Inc. All rights reserved.
83
+ *)
84
+
85
+ credential-handler-polyfill/CredentialHandlerRegistration.js:
86
+ (*!
87
+ * A CredentialHandlerRegistration provides a CredentialManager to enable Web
88
+ * apps to register Profiles that can be presented to websites.
89
+ *
90
+ * Copyright (c) 2017 Digital Bazaar, Inc. All rights reserved.
91
+ *)
92
+
93
+ credential-handler-polyfill/WebCredential.js:
94
+ (*!
95
+ * A WebCredential is a Credential that can be retrieved from or stored by a
96
+ * "credential handler" that runs in a third party Web application.
97
+ *
98
+ * Copyright (c) 2017-2023 Digital Bazaar, Inc. All rights reserved.
99
+ *)
100
+
101
+ credential-handler-polyfill/CredentialsContainer.js:
102
+ (*!
103
+ * Wrapper for native CredentialsContainer that uses remote Credential Mediator
104
+ * for WebCredential-related operations.
105
+ *
106
+ * Copyright (c) 2017-2018 Digital Bazaar, Inc. All rights reserved.
107
+ *)
108
+
109
+ credential-handler-polyfill/index.js:
110
+ (*!
111
+ * Copyright (c) 2017-2024 Digital Bazaar, Inc. All rights reserved.
112
+ *)
113
+
114
+ web-credential-handler/CredentialEventProxy.js:
115
+ (*!
116
+ * Copyright (c) 2017-2018 Digital Bazaar, Inc. All rights reserved.
117
+ *)
118
+
119
+ web-credential-handler/index.js:
120
+ (*!
121
+ * Copyright (c) 2018-2022 Digital Bazaar, Inc. All rights reserved.
122
+ *)
123
+ */
80
124
  //# sourceMappingURL=chapi-plugin.cjs.production.min.js.map