@learncard/chapi-plugin 1.1.2 → 1.1.6
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.
- package/dist/chapi-plugin.cjs.development.js +18 -4
- package/dist/chapi-plugin.cjs.development.js.map +2 -2
- package/dist/chapi-plugin.cjs.production.min.js +3 -3
- package/dist/chapi-plugin.cjs.production.min.js.map +3 -3
- package/dist/chapi-plugin.esm.js +18 -4
- package/dist/chapi-plugin.esm.js.map +2 -2
- package/dist/chapi.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
"use strict";var T=Object.defineProperty;var
|
|
1
|
+
"use strict";var T=Object.defineProperty;var Te=Object.getOwnPropertyDescriptor;var Oe=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})},Re=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Oe(e))!Me.call(n,o)&&o!==t&&T(n,o,{get:()=>e[o],enumerable:!(i=Te(e,o))||i.enumerable});return n};var Ae=n=>Re(T({},"__esModule",{value:!0}),n);var Xe={};Ie(Xe,{getCHAPIPlugin:()=>Pe});module.exports=Ae(Xe);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(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 we(n){return n&&typeof n=="object"&&n.jsonrpc==="2.0"&&n.id&&typeof n.id=="string"}r(we,"isValidMessage");function Le(n){return we(n)&&Array.isArray(n.params)}r(Le,"isValidRequest");function je(n){return we(n)&&!!("result"in n^"error"in n)&&(!("error"in n)||Ne(n.error))}r(je,"isValidResponse");function Ne(n){return n&&typeof n=="object"&&typeof n.code=="number"&&typeof n.message=="string"}r(Ne,"isValidError");function fe(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=q.ServerError.code,"details"in n&&(e.details=n.details),e}r(fe,"serializeError");function me(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(me,"deserializeError");function O({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&&Le(o.data)||!i&&je(o.data))&&n(o.data,o)}}r(O,"createMessageListener");function ge(n){let[e,...t]=n.split("."),i=t.pop();return e=[e,...t].join("."),{name:e,method:i}}r(ge,"destructureMethodName");function b(n){try{return typeof n.then=="function"}catch{}return!1}r(b,"isHandlePromise");var He=3e4,$=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 i=this;i.origin=m(e).origin,i._handle=t.handle||window.opener||window.parent;let o=i._pending;return i._listener=O({origin:i.origin,handle:i._handle,expectRequest:!1,listener:r(s=>{if(!o.has(s.id))return;let{resolve:l,reject:c,cancelTimeout:a}=o.get(s.id);if(a(),"result"in s)return l(s.result);c(me(s.error))},"listener")}),window.addEventListener("message",i._listener),new V(i)}async send(e,t,{timeout:i=He}){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((l,c)=>{let a=o._pending,d;if(i>0){let h=setTimeout(()=>{a.delete(s.id),c(new Error("RPC call timed out."))},i);d=r(()=>{a.delete(s.id),clearTimeout(h)},"cancelTimeout")}else d=r(()=>{a.delete(s.id)},"cancelTimeout");a.set(s.id,{resolve:l,reject:c,cancelTimeout:d})})}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($,"Client");var g=$,z=class z{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(z,"Injector");var V=z;var F=class F{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(F,"EventEmitter");var C=F;var K=class K{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=O({origin:i.origin,handle:i._handle,expectRequest:!0,listener:r(s=>{let{name:l,method:c}=ge(s.method),a=i._apis[l];if(c&&c.startsWith("_"))return ye(i._handle,i.origin,s);if(!a&&o)return;if(!a||typeof a[c]!="function")return ye(i._handle,i.origin,s);let d=a[c];(async()=>{let h={jsonrpc:"2.0",id:s.id};try{h.result=await d.apply(a,s.params)}catch(u){h.error=fe(u)}i._handle&&(b(i._handle)?i._handle.then(u=>u.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(K,"Server");var y=K;function ye(n,e,t){let i={jsonrpc:"2.0",id:t.id,error:Object.assign({},q.MethodNotFound)};return b(n)?n.then(o=>o.postMessage(i,e)):n.postMessage(i,e)}r(ye,"sendMethodNotFound");var X=class X{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(X,"WebApp");var _=X;var Y=class Y{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(Y,"WebAppWindowDialog");var x=Y;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"),B(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"),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 {
|
|
3
|
+
}`)),this.container=document.createElement("div"),B(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",B(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 M=G;function B(n,e){for(let t in e)n.style[t]=e[t]}r(B,"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:l=500,height:c=400}=i;l=Math.min(l,window.innerWidth),c=Math.min(c,window.innerHeight);let a=Math.floor(o!==void 0?o:window.screenX+(window.innerWidth-l)/2),d=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=${l},height=${c},left=${a},top=${d}`;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 I=Q;var Ue=6e4,J=class J{constructor(e,{timeout:t=Ue,dialog:i=null,handle:o,popup:s=!1,className:l=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((d,h)=>{this._timeoutId=setTimeout(()=>h(new DOMException("Loading Web application window timed out.","TimeoutError")),t),this._private._resolveReady=u=>{clearTimeout(this.timeoutId),this._timeoutId=null,d(u)},this._private._rejectReady=u=>{clearTimeout(this.timeoutId),this._timeoutId=null,h(u)}}),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 I({url:e,handle:o,bounds:a}):this.dialog=new M({url:e,handle:o,className:l})),this.popup&&a){let{x:d,y:h,width:u=500,height:f=400}=a;u=Math.min(u,window.innerWidth),f=Math.min(f+30,window.innerHeight),d=Math.floor(d!==void 0?d:window.screenX+(window.innerWidth-u)/2),h=Math.floor(h!==void 0?h:window.screenY+(window.innerHeight-f)/2+15),this.dialog.handle.resizeTo(u,f),this.dialog.handle.moveTo(d,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(d){console.error(d)}}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(J,"WebAppWindow");var p=J;var Se=1e4,Z=class Z{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=Se,iframe:i,dialog:o=null,popup:s=!1,handle:l,windowControl:c,className:a,customize:d,bounds:h}={}){if(this.loaded)throw new Error("AppContext already loaded.");this.loaded=!0,this.control=new p(e,{timeout:t,dialog:o,iframe:i,popup:s,handle:l,windowControl:c,className:a,customize:d,bounds:h}),window.addEventListener("pagehide",()=>this.close(),{once:!0}),this.server.define("core.control",this.control);let u=m(e).origin;return this.server.listen(u,{handle:this.control.handle,ignoreUnknownApi:!0}),await this.control._private.isReady(),this.injector=await this.client.connect(u,{handle:this.control.handle}),this.injector}close(){this.closed||(this.closed=!0,this.control._private.destroy(),this.server.close(),this.client.close())}};r(Z,"WebAppContext");var v=Z;var ee=class ee{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 p(e,{className:"credential-handler"});return t.ready(),t.show(),t.handle._dialog=t.dialog,t.handle}respondWith(e){this._promise=e}};r(ee,"CredentialRequestEvent");var R=ee;var te=class te{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 p(e);return t.ready(),t.show(),t.handle._dialog=t.dialog,t.handle}respondWith(e){this._promise=e}};r(te,"CredentialStoreEvent");var A=te;var ie=class ie{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(ie,"CredentialHandlerService");var L=ie;var _e=["credentialrequest","credentialstore"],ne=class ne 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(!_e.includes(e))throw new DOMException(`Unsupported event type "${e}"`,"NotSupportedError");return this._emitter.addEventListener(e,t)}removeEventListener(e,t){if(!_e.includes(e))throw new DOMException(`Unsupported event type "${e}"`,"NotSupportedError");return this._emitter.removeEventListener(e,t)}};r(ne,"CredentialHandler");var j=ne;var re=class re{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(...l){return this._deprecateNotice(),s(...l)}}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(re,"CredentialHints");var N=re;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 oe=class oe{constructor(e,t){if(!(e&&typeof e=="string"))throw new TypeError('"url" must be a non-empty string.');this.hints=new N(e,t)}static async requestPermission(){return(await navigator.credentialsPolyfill.permissions.request({name:"credentialhandler"})).state}};r(oe,"CredentialManager");var E=oe;var se=class se{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(se,"CredentialHandlerRegistration");var P=se;var ae=class ae{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(ae,"CredentialHandlers");var H=ae;var ce=class ce{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(ce,"WebCredential");var w=ce;var De=0,qe=0,de=class de{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:De}},{name:"store",options:{timeout:qe}}]})})()}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(de,"CredentialsContainer");var U=de;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 S=le;var ke="https://authn.io";var he;async function ve(n){return he||(he=!0,Ve(n))}r(ve,"loadOnce");async function Ve(n={mediatorOrigin:ke}){$e();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(o);let s={};s.permissions=new
|
|
5
|
+
}`)),document.body.appendChild(o);let s={};s.permissions=new S(i),s.CredentialHandlers=new H(i),s.CredentialHandler=j,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 l=new Proxy(navigator.credentials,{set(c,a,d){return a in s.credentials._nativeCredentialsContainer?s.credentials._nativeCredentialsContainer[a]=d:c[a]=d,!0}});return Object.defineProperty(navigator,"credentials",{value:l,writable:!0}),window.CredentialManager=E,window.WebCredential=w,s}r(Ve,"load");function $e(){if(!window.isSecureContext)throw new DOMException("SecurityError","The operation is insecure.")}r($e,"_assertSecureContext");var ze=6e4,ue=class ue 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."))},ze);e.server.define("credentialEventProxy",{async send(s){return t(s),clearTimeout(o),new Promise((l,c)=>{s.respondWith=a=>{try{l(a)}catch(d){c(d)}}})}}),e.ready()})}};r(ue,"CredentialEventProxy");var W=ue;var Fe="https://authn.io";async function be(){if(await navigator.credentialsPolyfill.CredentialManager.requestPermission()!=="granted")throw new Error("Permission denied.")}r(be,"installHandler");async function xe({mediatorOrigin:n=Fe,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=>Ee({event:s,get:e}))}if(t){if(typeof t!="function")throw new TypeError('"store" must be a function.');o.addEventListener("credentialstore",s=>Ee({event:s,store:t}))}await o.connect()}r(xe,"activateHandler");async function Ce(){return new W().receive()}r(Ce,"receiveCredentialEvent");function Ee({event:n,get:e,store:t}){n.respondWith(Ke({event:n,get:e,store:t}))}r(Ee,"listener");async function Ke({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(Ke,"createResponse");var Pe=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")}};if((()=>{try{let e=window.navigator?.credentials;if(!e)return!0;let t=Object.getPrototypeOf(e),i=Object.getOwnPropertyDescriptor(e,"get")??(t?Object.getOwnPropertyDescriptor(t,"get"):void 0);return!i||i.writable?!0:!!i.set}catch{return!0}})())try{await ve()}catch{}return{name:"CHAPI",displayName:"CHAPI",description:"Credential Handler API. Allows sending/retrieving credentials across wallets and issuers",methods:{installChapiHandler:r(async()=>be(),"installChapiHandler"),activateChapiHandler:r(async(e,{mediatorOrigin:t=`https://authn.io/mediator?${encodeURIComponent(window.location.origin)}`,get:i,store:o})=>xe({mediatorOrigin:t,get:i,store:o}),"activateChapiHandler"),receiveChapiEvent:r(async()=>Ce(),"receiveChapiEvent"),storeCredentialViaChapiDidAuth:r(async(e,t)=>{let i=crypto.randomUUID(),o=window.location.origin,s={web:{VerifiablePresentation:{query:{type:"DIDAuthentication"},challenge:i,domain:o}}},l=await navigator.credentials.get(s);if(!l)return{success:!1,reason:"did not auth"};let c=await e.invoke.verifyPresentation(l.data,{challenge:i,domain:o,proofPurpose:"authentication"});if(c.warnings.length>0||c.errors.length>0)return{success:!1,reason:"auth failed verification"};let a=l.data?.proof?.verificationMethod?.split("#")[0],d=[];if(Array.isArray(t))for(let f=0;f<t.length;f++){let D=t[f];Array.isArray(D.credentialSubject)||(D.credentialSubject.id=a),d.push(await e.invoke.issueCredential(D))}else Array.isArray(t.credentialSubject)||(t.credentialSubject.id=a),d.push(await e.invoke.issueCredential(t));let h=await e.invoke.getTestVp();return h.verifiableCredential=d,await e.invoke.storePresentationViaChapi(h)?{success:!0}:{success:!1,reason:"did not store"}},"storeCredentialViaChapiDidAuth"),storePresentationViaChapi:r(async(e,t)=>{let i=new WebCredential("VerifiablePresentation",t);return window.navigator.credentials.store(i)},"storePresentationViaChapi")}}},"getCHAPIPlugin");
|
|
6
6
|
/*! Bundled license information:
|
|
7
7
|
|
|
8
8
|
web-request-rpc/utils.js:
|