UNPKG

@urql/exchange-auth

Version:

An exchange for managing authentication and token refresh in urql

3 lines (2 loc) 1.85 kB
import{makeSubject as t,filter as e,map as n,merge as o,toPromise as r,take as a,onStart as c}from"wonka";import{makeOperation as i,createRequest as u,makeErrorResult as h}from"@urql/core";var p=(t,e)=>i(t.kind,t,{...t.context,authAttempt:e});function s(s){return({client:d,forward:f})=>{var x,l=new Set,v=t(),m=t(),k=new Map;function A(){x=void 0;var t=k;k=new Map,t.forEach(v.next)}function w(t){x=void 0;var e=k;k=new Map,e.forEach((e=>{m.next(h(e,t))}))}var _=null;return t=>{function h(){x=Promise.resolve().then((()=>s({mutate(t,n,o){var i=d.createRequestOperation("mutation",u(t,n),o);return r(a(1)(e((t=>t.operation.key===i.key&&i.context._instance===t.operation.context._instance))(c((()=>{var t=E(i);l.add(t.context._instance),v.next(t)}))(M))))},appendHeaders(t,e){var n="function"==typeof t.context.fetchOptions?t.context.fetchOptions():t.context.fetchOptions||{};return i(t.kind,t,{...t.context,fetchOptions:{...n,headers:{...n.headers,...e}}})}}))).then((t=>{t&&(_=t),A()})).catch((t=>{w(t)}))}function y(t){k.set(t.key,p(t,!0)),_&&!x&&(x=_.refreshAuth().then(A).catch(w))}function E(t){return _?_.addAuthToOperation(t):t}h();var O=e(Boolean)(n((t=>"teardown"===t.kind?(k.delete(t.key),t):t.context._instance&&l.has(t.context._instance)?t:t.context.authAttempt?E(t):x||!_?(x||h(),k.has(t.key)||k.set(t.key,p(t,!1)),null):function(t){return!t.context.authAttempt&&_&&_.willAuthError&&_.willAuthError(t)}(t)?(y(t),null):E(p(t,!1))))(o([v.source,t]))),M=f(O);return o([m.source,e((t=>!l.has(t.operation.context._instance)&&t.error&&function(t){return _&&_.didAuthError&&_.didAuthError(t.error,t.operation)}(t)&&!t.operation.context.authAttempt?(y(t.operation),!1):(l.has(t.operation.context._instance)&&l.delete(t.operation.context._instance),!0)))(M)])}}}export{s as authExchange}; //# sourceMappingURL=urql-exchange-auth.min.mjs.map