@aktivco/rutoken-connect
Version:
Provides Rutoken Connect API
1 lines • 1.39 kB
JavaScript
const Status=Object.freeze({noExtension:-1,ready:0,noNative:1,oldExtension:2,oldNative:3,error:4}),lastStatus=Status.error,isFirefox=function(){const t=window.navigator.userAgent;return!!t.match(/firefox/i)&&!t.match(/seamonkey/i)}();let status,statusPromise;function getStatus(){if(null!=status&&null!==status)return Promise.resolve(status);if(null!=statusPromise)return statusPromise;let t,s;statusPromise=new Promise(((e,o)=>{t=t=>{null!=statusPromise&&null!==status&&e(t),status=t,statusPromise=void 0},s=t=>{null!=statusPromise&&null!==status&&o(t),status=null,statusPromise=Promise.reject(t)}}));const e=e=>{if(e.source===window&&void 0!==e.data&&void 0!==e.data.rutoken&&"EE4F9C58-64D8-4FCD-AB45-0E3040EEB37D"===e.data.rutoken.uuid){const{status:o}=e.data.rutoken;void 0!==o&&0<=o&&o<=lastStatus?t(o):s(new Error(`Couldn't parse extension status: ${o}`))}};window.addEventListener("message",e);let o="chrome-extension://acbchkahfmndkenefkcklofjmipghjjp/check_rtconnect_extension";const n={};return isFirefox&&(o="https://qbwjg564lyt1tdfo23xz5l3udvdfe0ux.rutoken.ru/api/v1/check_rtconnect_extension",n.mode="no-cors"),fetch(o,n).then((()=>{isFirefox&&t(Status.noExtension)})).catch((o=>{isFirefox?setTimeout((()=>{void 0===status&&(window.removeEventListener("message",e),s(o))}),2e3):t(Status.noExtension)})).then((()=>null!=status?status:statusPromise))}export{Status,getStatus};