@webority/mobile-core 0.8.2 → 0.9.0

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 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getClientBuild=exports.applyClientHeaders=exports.applyAccountIdHeader=exports.CLIENT_KIND_HEADER=exports.CLIENT_KIND=exports.CLIENT_BUILD_HEADER=exports.APP_BUILD_HEADER=exports.ACCOUNT_ID_HEADER=void 0;var _index=require("../config/index.js"),_appBuild=require("../versionCheck/appBuild.js");const CLIENT_BUILD_HEADER=exports.CLIENT_BUILD_HEADER="X-Client-Build",APP_BUILD_HEADER=exports.APP_BUILD_HEADER="X-App-Build",CLIENT_KIND_HEADER=exports.CLIENT_KIND_HEADER="X-Client-Kind",ACCOUNT_ID_HEADER=exports.ACCOUNT_ID_HEADER="X-Account-Id",CLIENT_KIND=exports.CLIENT_KIND="MobileApp",getClientBuild=()=>{const e=(0,_index.getConfigValue)("appVersion");if(!e)return null;const t=(0,_index.getConfigValue)("commit");return t?`${e}+${t}`:e};exports.getClientBuild=getClientBuild;const setIfAbsent=(e,t,s)=>{s&&!e.has(t)&&e.set(t,s)},applyClientHeaders=e=>{e.interceptors.request.use(e=>{setIfAbsent(e.headers,CLIENT_KIND_HEADER,CLIENT_KIND),setIfAbsent(e.headers,CLIENT_BUILD_HEADER,getClientBuild());const t=(0,_appBuild.readAppBuild)();return setIfAbsent(e.headers,APP_BUILD_HEADER,null===t?null:String(t)),e})};exports.applyClientHeaders=applyClientHeaders;const applyAccountIdHeader=async(e,t)=>{const s=t?await t():null;s&&e.set(ACCOUNT_ID_HEADER,s)};exports.applyAccountIdHeader=applyAccountIdHeader;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.stampAccountId=exports.readAccountId=exports.getClientBuild=exports.applyClientHeaders=exports.CLIENT_KIND_HEADER=exports.CLIENT_KIND=exports.CLIENT_BUILD_HEADER=exports.APP_BUILD_HEADER=exports.ACCOUNT_ID_HEADER=void 0;var _index=require("../config/index.js"),_appBuild=require("../versionCheck/appBuild.js");const CLIENT_BUILD_HEADER=exports.CLIENT_BUILD_HEADER="X-Client-Build",APP_BUILD_HEADER=exports.APP_BUILD_HEADER="X-App-Build",CLIENT_KIND_HEADER=exports.CLIENT_KIND_HEADER="X-Client-Kind",ACCOUNT_ID_HEADER=exports.ACCOUNT_ID_HEADER="X-Account-Id",CLIENT_KIND=exports.CLIENT_KIND="MobileApp",getClientBuild=()=>{const e=(0,_index.getConfigValue)("appVersion");if(!e)return null;const t=(0,_index.getConfigValue)("commit");return t?`${e}+${t}`:e};exports.getClientBuild=getClientBuild;const setIfAbsent=(e,t,s)=>{s&&!e.has(t)&&e.set(t,s)},applyClientHeaders=e=>{e.interceptors.request.use(e=>{setIfAbsent(e.headers,CLIENT_KIND_HEADER,CLIENT_KIND),setIfAbsent(e.headers,CLIENT_BUILD_HEADER,getClientBuild());const t=(0,_appBuild.readAppBuild)();return setIfAbsent(e.headers,APP_BUILD_HEADER,null===t?null:String(t)),e})};exports.applyClientHeaders=applyClientHeaders;const readAccountId=async e=>e&&await e()||null;exports.readAccountId=readAccountId;const stampAccountId=async(e,t)=>{if(void 0!==e._accountId)return void(e._accountId&&e.headers.set(ACCOUNT_ID_HEADER,e._accountId));const s=e.headers.get(ACCOUNT_ID_HEADER);if("string"==typeof s&&""!==s)return void(e._accountId=s);const n=await readAccountId(t);e._accountId=n,n&&e.headers.set(ACCOUNT_ID_HEADER,n)};exports.stampAccountId=stampAccountId;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.retryAfterMs=exports.isRetryableStatus=exports.isRetryableFailure=exports.isNeverSentError=exports.attachRetry=exports.IDEMPOTENCY_KEY_HEADER=void 0;var _axios=_interopRequireDefault(require("axios")),_index=require("../config/index.js");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const IDEMPOTENCY_KEY_HEADER=exports.IDEMPOTENCY_KEY_HEADER="Idempotency-Key",isRetryableStatus=e=>"number"==typeof e&&(429===e||e>=500&&e<=599);exports.isRetryableStatus=isRetryableStatus;const IDEMPOTENT_METHODS=new Set(["get","head","options","put","delete"]),NEVER_SENT_CODES=new Set(["ECONNREFUSED","ENOTFOUND","EAI_AGAIN","ENETUNREACH","EHOSTUNREACH"]),isNeverSentError=e=>!e.response&&"string"==typeof e.code&&NEVER_SENT_CODES.has(e.code);exports.isNeverSentError=isNeverSentError;const MAX_RETRY_AFTER_MS=3e4,retryAfterMs=e=>{const t=e.response;if(!t)return null;const r=t.data,s=t.headers,o="function"==typeof s?.get?s.get("retry-after"):s?.["retry-after"];for(const e of[r?.retryAfterSeconds,o]){const t=Number(e);if(null!=e&&Number.isFinite(t)&&t>0)return 1e3*t}return null};exports.retryAfterMs=retryAfterMs;const hasIdempotencyKey=e=>{const t=e?.headers,r="function"==typeof t?.get?t.get(IDEMPOTENCY_KEY_HEADER):t?.[IDEMPOTENCY_KEY_HEADER];return"string"==typeof r&&""!==r},isRetryableFailure=e=>{if(_axios.default.isCancel(e)||"ERR_CANCELED"===e.code)return!1;if(isNeverSentError(e))return!0;const t=(e.config?.method??"get").toLowerCase(),r=IDEMPOTENT_METHODS.has(t),s=e.response?.status;if(void 0===s)return r;if(!isRetryableStatus(s))return!1;const o=retryAfterMs(e);return!(null!==o&&o>3e4)&&(r||(429===s||503===s)&&hasIdempotencyKey(e.config))};exports.isRetryableFailure=isRetryableFailure;const DEFAULT_POLICY={retryDelayMs:e=>e<=1?0:2**e*1e3,shouldRetry:isRetryableFailure,onRetry:()=>{}},waitOrAbort=(e,t)=>new Promise(r=>{const onAbort=()=>{clearTimeout(s),r(!1)},s=setTimeout(()=>{t?.removeEventListener?.("abort",onAbort),r(!0)},e);t?.addEventListener?.("abort",onAbort,{once:!0})}),attachRetry=(e,t={})=>{e.interceptors.response.use(void 0,async r=>{const s=r,o=s?.config;if(!o||!1===o.retry)return Promise.reject(r);const n="object"==typeof o.retry?o.retry:{},i={...DEFAULT_POLICY,retries:(0,_index.getConfigValue)("retries"),...t,...n},a=(o.__retryAttempt??0)+1;if(a>i.retries||!i.shouldRetry(s))return Promise.reject(r);if(o.signal?.aborted)return Promise.reject(r);o.__retryAttempt=a,o.transformRequest=[e=>e],i.onRetry(a,s);const E=retryAfterMs(s)??i.retryDelayMs(a);return await waitOrAbort(E,o.signal)?e.request(o):Promise.reject(r)})};exports.attachRetry=attachRetry;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.retryAfterMs=exports.isRetryableStatus=exports.isRetryableFailure=exports.isNeverSentError=exports.attachRetry=exports.IDEMPOTENCY_KEY_HEADER=void 0;var _axios=_interopRequireDefault(require("axios")),_index=require("../config/index.js"),_workspace=require("./workspace.js");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const IDEMPOTENCY_KEY_HEADER=exports.IDEMPOTENCY_KEY_HEADER="Idempotency-Key",isRetryableStatus=e=>"number"==typeof e&&(429===e||e>=500&&e<=599);exports.isRetryableStatus=isRetryableStatus;const IDEMPOTENT_METHODS=new Set(["get","head","options","put","delete"]),NEVER_SENT_CODES=new Set(["ECONNREFUSED","ENOTFOUND","EAI_AGAIN","ENETUNREACH","EHOSTUNREACH"]),isNeverSentError=e=>!e.response&&"string"==typeof e.code&&NEVER_SENT_CODES.has(e.code);exports.isNeverSentError=isNeverSentError;const MAX_RETRY_AFTER_MS=3e4,retryAfterMs=e=>{const r=e.response;if(!r)return null;const t=r.data,s=r.headers,o="function"==typeof s?.get?s.get("retry-after"):s?.["retry-after"];for(const e of[t?.retryAfterSeconds,o]){const r=Number(e);if(null!=e&&Number.isFinite(r)&&r>0)return 1e3*r}return null};exports.retryAfterMs=retryAfterMs;const hasIdempotencyKey=e=>{const r=e?.headers,t="function"==typeof r?.get?r.get(IDEMPOTENCY_KEY_HEADER):r?.[IDEMPOTENCY_KEY_HEADER];return"string"==typeof t&&""!==t},isRetryableFailure=e=>{if(_axios.default.isCancel(e)||"ERR_CANCELED"===e.code)return!1;if(isNeverSentError(e))return!0;const r=(e.config?.method??"get").toLowerCase(),t=IDEMPOTENT_METHODS.has(r),s=e.response?.status;if(void 0===s)return t;if(!isRetryableStatus(s))return!1;const o=retryAfterMs(e);return!(null!==o&&o>3e4)&&(t||(429===s||503===s)&&hasIdempotencyKey(e.config))};exports.isRetryableFailure=isRetryableFailure;const DEFAULT_POLICY={retryDelayMs:e=>e<=1?0:2**e*1e3,shouldRetry:isRetryableFailure,onRetry:()=>{}},waitOrAbort=(e,r)=>new Promise(t=>{const onAbort=()=>{clearTimeout(s),t(!1)},s=setTimeout(()=>{r?.removeEventListener?.("abort",onAbort),t(!0)},e);r?.addEventListener?.("abort",onAbort,{once:!0})}),attachRetry=(e,r={})=>{e.interceptors.response.use(void 0,async t=>{const s=t,o=s?.config;if(!o||!1===o.retry||(0,_workspace.isWorkspaceChangedResponse)(s))return Promise.reject(t);const n="object"==typeof o.retry?o.retry:{},i={...DEFAULT_POLICY,retries:(0,_index.getConfigValue)("retries"),...r,...n},a=(o.__retryAttempt??0)+1;if(a>i.retries||!i.shouldRetry(s))return Promise.reject(t);if(o.signal?.aborted)return Promise.reject(t);o.__retryAttempt=a,o.transformRequest=[e=>e],i.onRetry(a,s);const E=retryAfterMs(s)??i.retryDelayMs(a);return await waitOrAbort(E,o.signal)?e.request(o):Promise.reject(t)})};exports.attachRetry=attachRetry;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.resetRefreshState=exports.refreshAccessToken=exports.readSignOutReason=exports.queueBehindRefresh=exports.isRefreshInFlight=exports.injectUserAuth=exports.injectStore=exports.getRefreshPath=exports.getErrorMessage=exports.getAccountIdProvider=exports.endSessionAndLogout=exports.dispatchLogout=exports.SIGN_OUT_REASON_HEADER=void 0;var _axios=_interopRequireDefault(require("axios")),_authStore=require("../auth/authStore.js"),_index=require("../logger/index.js"),_publicClient=_interopRequireDefault(require("./publicClient.js"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let store,auth;const injectStore=e=>{store=e};exports.injectStore=injectStore;const injectUserAuth=e=>{auth=e};exports.injectUserAuth=injectUserAuth;let refreshTokenPromise=null,failedQueue=[];const processQueue=(e,r=null)=>{failedQueue.forEach(({resolve:s,reject:t})=>{e?t(e):null!==r&&s(r)}),failedQueue=[]},resetRefreshState=()=>{refreshTokenPromise=null,processQueue(new Error("[@webority/mobile-core] Session ended"))};exports.resetRefreshState=resetRefreshState;const getErrorMessage=e=>e instanceof Error?e.message:"string"==typeof e?e:"Unknown error";exports.getErrorMessage=getErrorMessage;const requireAuth=()=>{if(!store||!auth)throw new Error("User package store is not initialized. Call initUserAuth first.");return{store:store,auth:auth}},getAccountIdProvider=()=>auth?.accountId;exports.getAccountIdProvider=getAccountIdProvider;const getRefreshPath=()=>auth?.refresh.path;exports.getRefreshPath=getRefreshPath;const dispatchLogout=async()=>{const e=requireAuth();await e.store.dispatch(e.auth.logout())};exports.dispatchLogout=dispatchLogout;const SIGN_OUT_REASON_HEADER=exports.SIGN_OUT_REASON_HEADER="X-Sign-Out-Reason",readSignOutReason=e=>{const r=void 0===auth?.signOutReasonHeader?SIGN_OUT_REASON_HEADER:auth.signOutReasonHeader;if(!r||!e||"object"!=typeof e)return null;const s=e.get,t="function"==typeof s?s.call(e,r):e[r.toLowerCase()];return"string"==typeof t&&""!==t.trim()?t.trim():null};exports.readSignOutReason=readSignOutReason;const endSessionAndLogout=async(e,r)=>{await(0,_authStore.clearSession)(e,{signOutReason:r}),await dispatchLogout()};exports.endSessionAndLogout=endSessionAndLogout;const isRefreshInFlight=()=>null!==refreshTokenPromise;exports.isRefreshInFlight=isRefreshInFlight;const queueBehindRefresh=()=>new Promise((e,r)=>{failedQueue.push({resolve:e,reject:r})});exports.queueBehindRefresh=queueBehindRefresh;class SessionEndedError extends Error{constructor(e){super(e),this.name="SessionEndedError",Object.setPrototypeOf(this,SessionEndedError.prototype)}}const endsSession=e=>e instanceof SessionEndedError||_axios.default.isAxiosError(e)&&(400===e.response?.status||401===e.response?.status),asString=(e,r)=>{if("string"!=typeof e||""===e)throw new Error(`The refresh response has no "${r}".`);return e},readWeborityTokens=e=>{const r=e??{};return{accessToken:asString(r.accessToken,"accessToken"),accessTokenExpiry:asString(r.accessTokenExpiration,"accessTokenExpiration"),refreshToken:asString(r.refreshToken,"refreshToken"),refreshTokenExpiry:asString(r.refreshTokenExpiration,"refreshTokenExpiration")}},callRefreshEndpoint=async e=>{const r=await(0,_authStore.getToken)(_authStore.REFRESH_TOKEN_KEY);if(!r?.token)throw new SessionEndedError("No refresh token available");if(Date.parse(r.expiry)<=Date.now())throw new SessionEndedError("Refresh token expired");const s=await(0,_authStore.getToken)(_authStore.ACCESS_TOKEN_KEY),t={accessToken:s?.token??null,refreshToken:r.token},o=e.body?await e.body(t):t,n=e.headers?await e.headers():void 0;_index.Logger.info("Refreshing the access token");const{data:i}=await _publicClient.default.post(e.path,o,n?{headers:n}:void 0),a=(e.readTokens??readWeborityTokens)(i);return await(0,_authStore.storeToken)(_authStore.ACCESS_TOKEN_KEY,a.accessToken,a.accessTokenExpiry),await(0,_authStore.storeToken)(_authStore.REFRESH_TOKEN_KEY,a.refreshToken,a.refreshTokenExpiry),_index.Logger.info("Access token refreshed"),a.accessToken},refreshAccessToken=()=>{if(refreshTokenPromise)return refreshTokenPromise;const e=(async()=>{try{const e=await callRefreshEndpoint(requireAuth().auth.refresh);return processQueue(null,e),e}catch(e){const r=_axios.default.isAxiosError(e)?e.response?.data:void 0;throw _index.Logger.error("Token refresh failed:",r??getErrorMessage(e)),processQueue(e,null),endsSession(e)&&await endSessionAndLogout("rejected",_axios.default.isAxiosError(e)?readSignOutReason(e.response?.headers):null),e}})().finally(()=>{refreshTokenPromise===e&&(refreshTokenPromise=null)});return refreshTokenPromise=e,e};exports.refreshAccessToken=refreshAccessToken;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.waitForSessionReplacement=exports.storeReplacementSession=exports.resetRefreshState=exports.refreshAccessToken=exports.readSignOutReason=exports.queueBehindRefresh=exports.isRefreshInFlight=exports.injectUserAuth=exports.injectStore=exports.getRefreshPath=exports.getErrorMessage=exports.getAccountIdProvider=exports.endSessionAndLogout=exports.dispatchLogout=exports.currentTokenIfReplaced=exports.beginSessionReplacement=exports.SIGN_OUT_REASON_HEADER=void 0;var _axios=_interopRequireDefault(require("axios")),_authStore=require("../auth/authStore.js"),_index=require("../logger/index.js"),_publicClient=_interopRequireDefault(require("./publicClient.js"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let store,auth;const injectStore=e=>{store=e};exports.injectStore=injectStore;const injectUserAuth=e=>{auth=e};exports.injectUserAuth=injectUserAuth;let refreshTokenPromise=null,failedQueue=[];const processQueue=(e,t=null)=>{failedQueue.forEach(({resolve:r,reject:s})=>{e?s(e):null!==t&&r(t)}),failedQueue=[]},resetRefreshState=()=>{refreshTokenPromise=null,processQueue(new Error("[@webority/mobile-core] Session ended"))};exports.resetRefreshState=resetRefreshState;const getErrorMessage=e=>e instanceof Error?e.message:"string"==typeof e?e:"Unknown error";exports.getErrorMessage=getErrorMessage;const requireAuth=()=>{if(!store||!auth)throw new Error("User package store is not initialized. Call initUserAuth first.");return{store:store,auth:auth}},getAccountIdProvider=()=>auth?.accountId;exports.getAccountIdProvider=getAccountIdProvider;const getRefreshPath=()=>auth?.refresh.path;exports.getRefreshPath=getRefreshPath;const dispatchLogout=async()=>{const e=requireAuth();await e.store.dispatch(e.auth.logout())};exports.dispatchLogout=dispatchLogout;const SIGN_OUT_REASON_HEADER=exports.SIGN_OUT_REASON_HEADER="X-Sign-Out-Reason",readSignOutReason=e=>{const t=void 0===auth?.signOutReasonHeader?SIGN_OUT_REASON_HEADER:auth.signOutReasonHeader;if(!t||!e||"object"!=typeof e)return null;const r=e.get,s="function"==typeof r?r.call(e,t):e[t.toLowerCase()];return"string"==typeof s&&""!==s.trim()?s.trim():null};exports.readSignOutReason=readSignOutReason;const endSessionAndLogout=async(e,t)=>{await(0,_authStore.clearSession)(e,{signOutReason:t}),await dispatchLogout()};exports.endSessionAndLogout=endSessionAndLogout;const isRefreshInFlight=()=>null!==refreshTokenPromise;exports.isRefreshInFlight=isRefreshInFlight;let replacementCount=0,replacementSettled=Promise.resolve(),settleReplacement=null;const beginSessionReplacement=()=>{0===replacementCount&&(replacementSettled=new Promise(e=>{settleReplacement=e})),replacementCount+=1;let e=!1;return()=>{e||(e=!0,replacementCount-=1,0===replacementCount&&(settleReplacement?.(),settleReplacement=null))}};exports.beginSessionReplacement=beginSessionReplacement;const waitForSessionReplacement=()=>0===replacementCount?Promise.resolve():replacementSettled;exports.waitForSessionReplacement=waitForSessionReplacement;const currentTokenIfReplaced=async e=>{const t=(await(0,_authStore.getToken)(_authStore.ACCESS_TOKEN_KEY))?.token??null;return null!==t&&t!==e?t:null};exports.currentTokenIfReplaced=currentTokenIfReplaced;const queueBehindRefresh=()=>new Promise((e,t)=>{failedQueue.push({resolve:e,reject:t})});exports.queueBehindRefresh=queueBehindRefresh;class SessionEndedError extends Error{constructor(e){super(e),this.name="SessionEndedError",Object.setPrototypeOf(this,SessionEndedError.prototype)}}const endsSession=e=>e instanceof SessionEndedError||_axios.default.isAxiosError(e)&&(400===e.response?.status||401===e.response?.status),asString=(e,t)=>{if("string"!=typeof e||""===e)throw new Error(`The refresh response has no "${t}".`);return e},readWeborityTokens=e=>{const t=e??{};return{accessToken:asString(t.accessToken,"accessToken"),accessTokenExpiry:asString(t.accessTokenExpiration,"accessTokenExpiration"),refreshToken:asString(t.refreshToken,"refreshToken"),refreshTokenExpiry:asString(t.refreshTokenExpiration,"refreshTokenExpiration")}},storeReplacementSession=async e=>{let t;try{t=(auth?.refresh.readTokens??readWeborityTokens)(e)}catch(e){return void _index.Logger.error("A session-replacing response carried no tokens:",getErrorMessage(e))}await(0,_authStore.storeToken)(_authStore.ACCESS_TOKEN_KEY,t.accessToken,t.accessTokenExpiry),await(0,_authStore.storeToken)(_authStore.REFRESH_TOKEN_KEY,t.refreshToken,t.refreshTokenExpiry)};exports.storeReplacementSession=storeReplacementSession;const callRefreshEndpoint=async e=>{const t=await(0,_authStore.getToken)(_authStore.REFRESH_TOKEN_KEY);if(!t?.token)throw new SessionEndedError("No refresh token available");if(Date.parse(t.expiry)<=Date.now())throw new SessionEndedError("Refresh token expired");const r=await(0,_authStore.getToken)(_authStore.ACCESS_TOKEN_KEY),s={accessToken:r?.token??null,refreshToken:t.token},o=e.body?await e.body(s):s,n=e.headers?await e.headers():void 0;_index.Logger.info("Refreshing the access token");const{data:a}=await _publicClient.default.post(e.path,o,n?{headers:n}:void 0),i=(e.readTokens??readWeborityTokens)(a);if(await waitForSessionReplacement(),(await(0,_authStore.getToken)(_authStore.REFRESH_TOKEN_KEY))?.token!==t.token){const e=(await(0,_authStore.getToken)(_authStore.ACCESS_TOKEN_KEY))?.token;if(e)return _index.Logger.info("Keeping the session that replaced this one during the refresh"),e}return await(0,_authStore.storeToken)(_authStore.ACCESS_TOKEN_KEY,i.accessToken,i.accessTokenExpiry),await(0,_authStore.storeToken)(_authStore.REFRESH_TOKEN_KEY,i.refreshToken,i.refreshTokenExpiry),_index.Logger.info("Access token refreshed"),i.accessToken},refreshAccessToken=()=>{if(refreshTokenPromise)return refreshTokenPromise;const e=(async()=>{let e=null;try{const{refresh:t}=requireAuth().auth;e=(await(0,_authStore.getToken)(_authStore.ACCESS_TOKEN_KEY))?.token??null;const r=await callRefreshEndpoint(t);return processQueue(null,r),r}catch(t){if(endsSession(t)){await waitForSessionReplacement();const t=await currentTokenIfReplaced(e);if(t)return _index.Logger.info("The session was replaced during the refresh; continuing with the new one"),processQueue(null,t),t}const r=_axios.default.isAxiosError(t)?t.response?.data:void 0;throw _index.Logger.error("Token refresh failed:",r??getErrorMessage(t)),processQueue(t,null),endsSession(t)&&await endSessionAndLogout("rejected",_axios.default.isAxiosError(t)?readSignOutReason(t.response?.headers):null),t}})().finally(()=>{refreshTokenPromise===e&&(refreshTokenPromise=null)});return refreshTokenPromise=e,e};exports.refreshAccessToken=refreshAccessToken;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.SESSION_TERMINATION_CODES=exports.SESSION_INVALID_HEADER=exports.RequestOfflineError=void 0,Object.defineProperty(exports,"SIGN_OUT_REASON_HEADER",{enumerable:!0,get:function(){return _tokenRefresh.SIGN_OUT_REASON_HEADER}}),exports.default=void 0,Object.defineProperty(exports,"injectStore",{enumerable:!0,get:function(){return _tokenRefresh.injectStore}}),Object.defineProperty(exports,"injectUserAuth",{enumerable:!0,get:function(){return _tokenRefresh.injectUserAuth}}),Object.defineProperty(exports,"resetRefreshState",{enumerable:!0,get:function(){return _tokenRefresh.resetRefreshState}});var _axios=_interopRequireWildcard(require("axios")),_authStore=require("../auth/authStore.js"),_index=require("../config/index.js"),_index2=require("../logger/index.js"),_networkStatus=require("../network/networkStatus.js");require("../types/axios.js");var _baseUrl=require("./baseUrl.js"),_clientHeaders=require("./clientHeaders.js"),_curl=require("./curl.js"),_minAppVersion=require("./minAppVersion.js"),_multipart=require("./multipart.js"),_requestDefaults=require("./requestDefaults.js"),_responseBodyText=require("./responseBodyText.js"),_retry=require("./retry.js"),_tokenRefresh=require("./tokenRefresh.js");function _interopRequireWildcard(e,r){if("function"==typeof WeakMap)var t=new WeakMap,s=new WeakMap;return(_interopRequireWildcard=function(e,r){if(!r&&e&&e.__esModule)return e;var o,n,i={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return i;if(o=r?s:t){if(o.has(e))return o.get(e);o.set(e,i)}for(const r in e)"default"!==r&&{}.hasOwnProperty.call(e,r)&&((n=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,r))&&(n.get||n.set)?o(i,r,n):i[r]=e[r]);return i})(e,r)}class RequestOfflineError extends Error{constructor(e="Request blocked: device is offline"){super(e),this.name="RequestOfflineError",Object.setPrototypeOf(this,RequestOfflineError.prototype)}}exports.RequestOfflineError=RequestOfflineError;class NoAccessTokenError extends Error{constructor(){super("No access token available"),this.name="NoAccessTokenError",Object.setPrototypeOf(this,NoAccessTokenError.prototype)}}const SESSION_TERMINATION_CODES=exports.SESSION_TERMINATION_CODES={TERMINATED:"SESSION_TERMINATED",EXPIRED:"SESSION_EXPIRED"},TERMINATION_CODES=new Set(Object.values(SESSION_TERMINATION_CODES)),SESSION_INVALID_HEADER=exports.SESSION_INVALID_HEADER="x-security-stamp-invalid",hasSessionInvalidHeader=e=>{if(!e||"object"!=typeof e)return!1;const r=e.get,t="function"==typeof r?r.call(e,SESSION_INVALID_HEADER):e[SESSION_INVALID_HEADER];return"true"===String(t).toLowerCase()},getSessionTerminationCode=e=>{if(!e||"object"!=typeof e)return;const r=e,t=r.error,s=[r.code,r.errorCode,t&&"object"==typeof t?t.code:void 0];for(const e of s)if("string"==typeof e&&TERMINATION_CODES.has(e))return e},userClient=_axios.default.create({headers:{"Content-Type":"application/json"}});(0,_minAppVersion.readMinAppVersion)(userClient),(0,_retry.attachRetry)(userClient);const setAuthHeader=(e,r)=>{e.headers instanceof _axios.AxiosHeaders?e.headers.set("Authorization",`Bearer ${r}`):e.headers=_axios.AxiosHeaders.from({...e.headers,Authorization:`Bearer ${r}`})},isRefreshTokenRequest=e=>{const r=(0,_tokenRefresh.getRefreshPath)();return!!r&&!!e?.includes(r)};(0,_baseUrl.applyConfiguredBaseUrl)(userClient),(0,_requestDefaults.applyRequestDefaults)(userClient),(0,_multipart.sendFormDataAsMultipart)(userClient),userClient.interceptors.request.use(e=>((0,_index.getConfigValue)("logCurl")&&(0,_curl.logCurl)(e),e)),(0,_clientHeaders.applyClientHeaders)(userClient),userClient.interceptors.request.use(async e=>{if(!1===(await(0,_networkStatus.getLastKnownNetworkStatus)()).isConnected)return _index2.Logger.warn(`Request blocked: device is offline. URL: ${e.url}`),Promise.reject(new RequestOfflineError);try{if(isRefreshTokenRequest(e.url))return e;const r=await(0,_authStore.getToken)(_authStore.ACCESS_TOKEN_KEY);if(!r?.token)throw new NoAccessTokenError;const t=Date.now(),s=Date.parse(r.expiry);if(s<=t+3e4){_index2.Logger.info("Access token expired or about to expire, refreshing before request");const r=await(0,_tokenRefresh.refreshAccessToken)();return setAuthHeader(e,r),await(0,_clientHeaders.applyAccountIdHeader)(e.headers,(0,_tokenRefresh.getAccountIdProvider)()),e}return setAuthHeader(e,r.token),await(0,_clientHeaders.applyAccountIdHeader)(e.headers,(0,_tokenRefresh.getAccountIdProvider)()),e}catch(r){return r instanceof NoAccessTokenError?_index2.Logger.info(`Request not sent: signed out. URL: ${e.url}`):_index2.Logger.error("Failed to attach token:",(0,_tokenRefresh.getErrorMessage)(r)),Promise.reject(r)}},e=>(_index2.Logger.error("Request error:",(0,_tokenRefresh.getErrorMessage)(e)),Promise.reject(e))),userClient.interceptors.response.use(e=>e,async e=>{if(_axios.default.isCancel(e))return Promise.reject(e);if(e instanceof RequestOfflineError||e instanceof NoAccessTokenError)return Promise.reject(e);if(!_axios.default.isAxiosError(e))return _index2.Logger.error(`Non-axios error in response interceptor: ${(0,_tokenRefresh.getErrorMessage)(e)}`),Promise.reject(e);const r=e,t=r.config;if(!r.response)return t?.skipErrorLog||_index2.Logger.info(`Network error or no response from server: ${r.message}, URL: ${t?.url}`),Promise.reject(e);if(401===r.response.status&&t&&!t._retry){if(isRefreshTokenRequest(t.url))return Promise.reject(e);const s=(0,_tokenRefresh.readSignOutReason)(r.response.headers),o=getSessionTerminationCode(r.response.data)??(hasSessionInvalidHeader(r.response.headers)||null!==s?SESSION_TERMINATION_CODES.TERMINATED:void 0);if(o)return _index2.Logger.warn(`Session ${o}, logging out without refresh. URL: ${t.url}`),(0,_tokenRefresh.resetRefreshState)(),await(0,_tokenRefresh.endSessionAndLogout)("terminated",s),Promise.reject(e);if(_index2.Logger.warn(`Unauthorized URL: ${t.url}`),t._retry=!0,(0,_tokenRefresh.isRefreshInFlight)())return(0,_tokenRefresh.queueBehindRefresh)().then(e=>(_index2.Logger.info("Retrying request after token refresh:",t.url),setAuthHeader(t,e),userClient(t))).catch(e=>(_index2.Logger.error("Failed to retry request after token refresh:",(0,_tokenRefresh.getErrorMessage)(e)),Promise.reject(e)));try{const e=await(0,_tokenRefresh.refreshAccessToken)();return setAuthHeader(t,e),userClient(t)}catch(e){return Promise.reject(e)}}return t?.skipErrorLog||_index2.Logger.error(`Response error: ${(0,_responseBodyText.responseBodyText)(r.response?.data,r.message)}, URL: ${t?.url}, Status: ${r.response.status}`),Promise.reject(e)});var _default=exports.default=userClient;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.SESSION_TERMINATION_CODES=exports.SESSION_INVALID_HEADER=exports.RequestOfflineError=void 0,Object.defineProperty(exports,"SIGN_OUT_REASON_HEADER",{enumerable:!0,get:function(){return _tokenRefresh.SIGN_OUT_REASON_HEADER}}),exports.default=void 0,Object.defineProperty(exports,"injectStore",{enumerable:!0,get:function(){return _tokenRefresh.injectStore}}),Object.defineProperty(exports,"injectUserAuth",{enumerable:!0,get:function(){return _tokenRefresh.injectUserAuth}}),Object.defineProperty(exports,"resetRefreshState",{enumerable:!0,get:function(){return _tokenRefresh.resetRefreshState}});var _axios=_interopRequireWildcard(require("axios")),_authStore=require("../auth/authStore.js"),_index=require("../config/index.js"),_index2=require("../logger/index.js"),_networkStatus=require("../network/networkStatus.js");require("../types/axios.js");var _baseUrl=require("./baseUrl.js"),_clientHeaders=require("./clientHeaders.js"),_curl=require("./curl.js"),_minAppVersion=require("./minAppVersion.js"),_multipart=require("./multipart.js"),_requestDefaults=require("./requestDefaults.js"),_responseBodyText=require("./responseBodyText.js"),_retry=require("./retry.js"),_tokenRefresh=require("./tokenRefresh.js"),_workspace=require("./workspace.js");function _interopRequireWildcard(e,r){if("function"==typeof WeakMap)var t=new WeakMap,s=new WeakMap;return(_interopRequireWildcard=function(e,r){if(!r&&e&&e.__esModule)return e;var o,n,i={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return i;if(o=r?s:t){if(o.has(e))return o.get(e);o.set(e,i)}for(const r in e)"default"!==r&&{}.hasOwnProperty.call(e,r)&&((n=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,r))&&(n.get||n.set)?o(i,r,n):i[r]=e[r]);return i})(e,r)}class RequestOfflineError extends Error{constructor(e="Request blocked: device is offline"){super(e),this.name="RequestOfflineError",Object.setPrototypeOf(this,RequestOfflineError.prototype)}}exports.RequestOfflineError=RequestOfflineError;class NoAccessTokenError extends Error{constructor(){super("No access token available"),this.name="NoAccessTokenError",Object.setPrototypeOf(this,NoAccessTokenError.prototype)}}const SESSION_TERMINATION_CODES=exports.SESSION_TERMINATION_CODES={TERMINATED:"SESSION_TERMINATED",EXPIRED:"SESSION_EXPIRED"},TERMINATION_CODES=new Set(Object.values(SESSION_TERMINATION_CODES)),SESSION_INVALID_HEADER=exports.SESSION_INVALID_HEADER="x-security-stamp-invalid",hasSessionInvalidHeader=e=>{if(!e||"object"!=typeof e)return!1;const r=e.get,t="function"==typeof r?r.call(e,SESSION_INVALID_HEADER):e[SESSION_INVALID_HEADER];return"true"===String(t).toLowerCase()},getSessionTerminationCode=e=>{if(!e||"object"!=typeof e)return;const r=e,t=r.error,s=[r.code,r.errorCode,t&&"object"==typeof t?t.code:void 0];for(const e of s)if("string"==typeof e&&TERMINATION_CODES.has(e))return e},endReplacement=e=>{e?._endReplacement?.(),e&&(e._endReplacement=void 0)},readSentToken=e=>{const r=e.headers instanceof _axios.AxiosHeaders?e.headers.get("Authorization"):void 0;return"string"==typeof r&&r.startsWith("Bearer ")?r.slice(7):null},userClient=_axios.default.create({headers:{"Content-Type":"application/json"}});(0,_minAppVersion.readMinAppVersion)(userClient),(0,_retry.attachRetry)(userClient);const setAuthHeader=(e,r)=>{e.headers instanceof _axios.AxiosHeaders?e.headers.set("Authorization",`Bearer ${r}`):e.headers=_axios.AxiosHeaders.from({...e.headers,Authorization:`Bearer ${r}`})},isRefreshTokenRequest=e=>{const r=(0,_tokenRefresh.getRefreshPath)();return!!r&&!!e?.includes(r)};userClient.interceptors.request.use(e=>(e.replacesSession&&!isRefreshTokenRequest(e.url)&&(e._endReplacement=(0,_tokenRefresh.beginSessionReplacement)()),e)),(0,_baseUrl.applyConfiguredBaseUrl)(userClient),(0,_requestDefaults.applyRequestDefaults)(userClient),(0,_multipart.sendFormDataAsMultipart)(userClient),userClient.interceptors.request.use(e=>((0,_index.getConfigValue)("logCurl")&&(0,_curl.logCurl)(e),e)),(0,_clientHeaders.applyClientHeaders)(userClient),userClient.interceptors.request.use(async e=>{endReplacement(e);if(!1===(await(0,_networkStatus.getLastKnownNetworkStatus)()).isConnected)return _index2.Logger.warn(`Request blocked: device is offline. URL: ${e.url}`),Promise.reject(new RequestOfflineError);try{if(isRefreshTokenRequest(e.url))return e;await(0,_clientHeaders.stampAccountId)(e,(0,_tokenRefresh.getAccountIdProvider)());const r=await(0,_authStore.getToken)(_authStore.ACCESS_TOKEN_KEY);if(!r?.token)throw new NoAccessTokenError;const t=Date.now(),s=Date.parse(r.expiry);if(s<=t+3e4){_index2.Logger.info("Access token expired or about to expire, refreshing before request");const r=await(0,_tokenRefresh.refreshAccessToken)();setAuthHeader(e,r)}else setAuthHeader(e,r.token);return e}catch(r){return r instanceof NoAccessTokenError?_index2.Logger.info(`Request not sent: signed out. URL: ${e.url}`):_index2.Logger.error("Failed to attach token:",(0,_tokenRefresh.getErrorMessage)(r)),Promise.reject(r)}},e=>(_index2.Logger.error("Request error:",(0,_tokenRefresh.getErrorMessage)(e)),Promise.reject(e))),userClient.interceptors.response.use(async e=>{const r=e.config;if(r._endReplacement)try{await(0,_tokenRefresh.storeReplacementSession)(e.data)}finally{endReplacement(r)}return e},async e=>{if(endReplacement(e?.config),_axios.default.isCancel(e))return Promise.reject(e);if(e instanceof RequestOfflineError||e instanceof NoAccessTokenError)return Promise.reject(e);if(!_axios.default.isAxiosError(e))return _index2.Logger.error(`Non-axios error in response interceptor: ${(0,_tokenRefresh.getErrorMessage)(e)}`),Promise.reject(e);const r=e,t=r.config;if(!r.response)return t?.skipErrorLog||_index2.Logger.info(`Network error or no response from server: ${r.message}, URL: ${t?.url}`),Promise.reject(e);if((0,_workspace.isWorkspaceChangedResponse)(r))return _index2.Logger.info(`Refused for another workspace. URL: ${t?.url}`),Promise.reject(new _workspace.WorkspaceChangedError("Refused for another workspace",{response:r.response,config:t,cause:e}));if(401===r.response.status&&t&&!t._replayedWithCurrentToken&&!t.replacesSession&&!isRefreshTokenRequest(t.url)&&(await(0,_tokenRefresh.waitForSessionReplacement)(),await(0,_tokenRefresh.currentTokenIfReplaced)(readSentToken(t)))){const r=await(0,_clientHeaders.readAccountId)((0,_tokenRefresh.getAccountIdProvider)());return(t._accountId??null)!==r?(_index2.Logger.info(`Workspace changed in flight; not sent again. URL: ${t.url}`),Promise.reject(new _workspace.WorkspaceChangedError("Workspace changed in flight",{config:t,cause:e}))):(_index2.Logger.info(`Session changed while the request was in flight; sending it again. URL: ${t.url}`),t._replayedWithCurrentToken=!0,userClient(t))}if(401===r.response.status&&t&&!t._retry){if(isRefreshTokenRequest(t.url))return Promise.reject(e);const s=(0,_tokenRefresh.readSignOutReason)(r.response.headers),o=getSessionTerminationCode(r.response.data)??(hasSessionInvalidHeader(r.response.headers)||null!==s?SESSION_TERMINATION_CODES.TERMINATED:void 0);if(o)return _index2.Logger.warn(`Session ${o}, logging out without refresh. URL: ${t.url}`),(0,_tokenRefresh.resetRefreshState)(),await(0,_tokenRefresh.endSessionAndLogout)("terminated",s),Promise.reject(e);if(_index2.Logger.warn(`Unauthorized URL: ${t.url}`),t._retry=!0,(0,_tokenRefresh.isRefreshInFlight)())return(0,_tokenRefresh.queueBehindRefresh)().then(e=>(_index2.Logger.info("Retrying request after token refresh:",t.url),setAuthHeader(t,e),userClient(t))).catch(e=>(_index2.Logger.error("Failed to retry request after token refresh:",(0,_tokenRefresh.getErrorMessage)(e)),Promise.reject(e)));try{const e=await(0,_tokenRefresh.refreshAccessToken)();return setAuthHeader(t,e),userClient(t)}catch(e){return Promise.reject(e)}}return t?.skipErrorLog||_index2.Logger.error(`Response error: ${(0,_responseBodyText.responseBodyText)(r.response?.data,r.message)}, URL: ${t?.url}, Status: ${r.response.status}`),Promise.reject(e)});var _default=exports.default=userClient;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isWorkspaceChangedResponse=exports.isWorkspaceChangedError=exports.WorkspaceChangedError=exports.WORKSPACE_CHANGED_CODE=void 0;const WORKSPACE_CHANGED_CODE=exports.WORKSPACE_CHANGED_CODE="workspace_changed",WORKSPACE_CHANGED_MESSAGE="This was started in another workspace. Switch back to it and try again.";class WorkspaceChangedError extends Error{code=WORKSPACE_CHANGED_CODE;constructor(e=WORKSPACE_CHANGED_MESSAGE,r={}){super(e),this.name="WorkspaceChangedError",this.response=r.response??{status:409,data:{code:WORKSPACE_CHANGED_CODE,message:e},headers:{}},this.config=r.config,this.cause=r.cause,Object.setPrototypeOf(this,WorkspaceChangedError.prototype)}}exports.WorkspaceChangedError=WorkspaceChangedError;const isWorkspaceChangedError=e=>e instanceof WorkspaceChangedError||"object"==typeof e&&null!==e&&("WorkspaceChangedError"===e.name||e.code===WORKSPACE_CHANGED_CODE);exports.isWorkspaceChangedError=isWorkspaceChangedError;const isWorkspaceChangedResponse=e=>{const r=e?.response;if(409!==r?.status)return!1;const s=r.data;return"object"==typeof s&&null!==s&&s.code===WORKSPACE_CHANGED_CODE};exports.isWorkspaceChangedResponse=isWorkspaceChangedResponse;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"ACCESS_TOKEN_KEY",{enumerable:!0,get:function(){return _authStore.ACCESS_TOKEN_KEY}}),Object.defineProperty(exports,"ACCOUNT_ID_HEADER",{enumerable:!0,get:function(){return _clientHeaders.ACCOUNT_ID_HEADER}}),Object.defineProperty(exports,"AsYouType",{enumerable:!0,get:function(){return _index4.AsYouType}}),Object.defineProperty(exports,"CLIENT_BUILD_HEADER",{enumerable:!0,get:function(){return _clientHeaders.CLIENT_BUILD_HEADER}}),Object.defineProperty(exports,"CLIENT_KIND",{enumerable:!0,get:function(){return _clientHeaders.CLIENT_KIND}}),Object.defineProperty(exports,"CLIENT_KIND_HEADER",{enumerable:!0,get:function(){return _clientHeaders.CLIENT_KIND_HEADER}}),Object.defineProperty(exports,"CONTRACT_ERROR_CODE",{enumerable:!0,get:function(){return _index3.CONTRACT_ERROR_CODE}}),Object.defineProperty(exports,"DeepLink",{enumerable:!0,get:function(){return _index2.DeepLink}}),Object.defineProperty(exports,"IDEMPOTENCY_KEY_HEADER",{enumerable:!0,get:function(){return _retry.IDEMPOTENCY_KEY_HEADER}}),Object.defineProperty(exports,"LEGACY_REFRESH_TOKEN_LIFETIME_MS",{enumerable:!0,get:function(){return _authStore.LEGACY_REFRESH_TOKEN_LIFETIME_MS}}),Object.defineProperty(exports,"Logger",{enumerable:!0,get:function(){return _index5.Logger}}),Object.defineProperty(exports,"MIN_APP_VERSION_HEADER",{enumerable:!0,get:function(){return _minAppVersion.MIN_APP_VERSION_HEADER}}),Object.defineProperty(exports,"NETWORK_CODE",{enumerable:!0,get:function(){return _index3.NETWORK_CODE}}),Object.defineProperty(exports,"OFFLINE_MESSAGE",{enumerable:!0,get:function(){return _index3.OFFLINE_MESSAGE}}),Object.defineProperty(exports,"PUSH_STATUS",{enumerable:!0,get:function(){return _status.PUSH_STATUS}}),Object.defineProperty(exports,"REFRESH_TOKEN_KEY",{enumerable:!0,get:function(){return _authStore.REFRESH_TOKEN_KEY}}),Object.defineProperty(exports,"REQUEST_CANCELED_CODE",{enumerable:!0,get:function(){return _index3.REQUEST_CANCELED_CODE}}),Object.defineProperty(exports,"RequestOfflineError",{enumerable:!0,get:function(){return _userClient.RequestOfflineError}}),Object.defineProperty(exports,"SERVER_FAILURE_MESSAGE",{enumerable:!0,get:function(){return _index3.SERVER_FAILURE_MESSAGE}}),Object.defineProperty(exports,"SESSION_TERMINATION_CODES",{enumerable:!0,get:function(){return _userClient.SESSION_TERMINATION_CODES}}),Object.defineProperty(exports,"SESSION_USER_KEY",{enumerable:!0,get:function(){return _authStore.SESSION_USER_KEY}}),Object.defineProperty(exports,"SIGN_OUT_REASON_HEADER",{enumerable:!0,get:function(){return _userClient.SIGN_OUT_REASON_HEADER}}),Object.defineProperty(exports,"Storage",{enumerable:!0,get:function(){return _index7.Storage}}),Object.defineProperty(exports,"TIMEOUT_CODE",{enumerable:!0,get:function(){return _index3.TIMEOUT_CODE}}),Object.defineProperty(exports,"TIMEOUT_MESSAGE",{enumerable:!0,get:function(){return _index3.TIMEOUT_MESSAGE}}),Object.defineProperty(exports,"UNEXPECTED_MESSAGE",{enumerable:!0,get:function(){return _index3.UNEXPECTED_MESSAGE}}),Object.defineProperty(exports,"VersionCheck",{enumerable:!0,get:function(){return _index9.VersionCheck}}),Object.defineProperty(exports,"addDays",{enumerable:!0,get:function(){return _index4.addDays}}),Object.defineProperty(exports,"addMinAppVersionListener",{enumerable:!0,get:function(){return _minAppVersion.addMinAppVersionListener}}),Object.defineProperty(exports,"addNetworkStatusListener",{enumerable:!0,get:function(){return _index6.addNetworkStatusListener}}),Object.defineProperty(exports,"addSessionEndedListener",{enumerable:!0,get:function(){return _authStore.addSessionEndedListener}}),Object.defineProperty(exports,"apiErrorMessage",{enumerable:!0,get:function(){return _index3.apiErrorMessage}}),Object.defineProperty(exports,"applyRequestDefaults",{enumerable:!0,get:function(){return _requestDefaults.applyRequestDefaults}}),Object.defineProperty(exports,"attachRetry",{enumerable:!0,get:function(){return _retry.attachRetry}}),Object.defineProperty(exports,"buildCurl",{enumerable:!0,get:function(){return _curl.buildCurl}}),Object.defineProperty(exports,"clampNationalNumber",{enumerable:!0,get:function(){return _index4.clampNationalNumber}}),Object.defineProperty(exports,"clearSession",{enumerable:!0,get:function(){return _authStore.clearSession}}),Object.defineProperty(exports,"configureFormatters",{enumerable:!0,get:function(){return _index4.configureFormatters}}),Object.defineProperty(exports,"configureLogger",{enumerable:!0,get:function(){return _index5.configureLogger}}),Object.defineProperty(exports,"countryFlagEmoji",{enumerable:!0,get:function(){return _index4.countryFlagEmoji}}),Object.defineProperty(exports,"crashlyticsRemoteLogger",{enumerable:!0,get:function(){return _crashlytics.crashlyticsRemoteLogger}}),Object.defineProperty(exports,"decodeJWT",{enumerable:!0,get:function(){return _jwt.decodeJWT}}),Object.defineProperty(exports,"detectPhoneCountry",{enumerable:!0,get:function(){return _index4.detectPhoneCountry}}),Object.defineProperty(exports,"diffMs",{enumerable:!0,get:function(){return _index4.diffMs}}),Object.defineProperty(exports,"encodeBase64",{enumerable:!0,get:function(){return _base.encodeBase64}}),Object.defineProperty(exports,"extractApiError",{enumerable:!0,get:function(){return _index3.extractApiError}}),Object.defineProperty(exports,"formatCompactNumber",{enumerable:!0,get:function(){return _index4.formatCompactNumber}}),Object.defineProperty(exports,"formatCurrency",{enumerable:!0,get:function(){return _index4.formatCurrency}}),Object.defineProperty(exports,"formatDate",{enumerable:!0,get:function(){return _index4.formatDate}}),Object.defineProperty(exports,"formatDateDDMMMYYYY",{enumerable:!0,get:function(){return _index4.formatDateDDMMMYYYY}}),Object.defineProperty(exports,"formatDateISO",{enumerable:!0,get:function(){return _index4.formatDateISO}}),Object.defineProperty(exports,"formatDatePattern",{enumerable:!0,get:function(){return _index4.formatDatePattern}}),Object.defineProperty(exports,"formatDateTime",{enumerable:!0,get:function(){return _index4.formatDateTime}}),Object.defineProperty(exports,"formatMinor",{enumerable:!0,get:function(){return _index4.formatMinor}}),Object.defineProperty(exports,"formatNumber",{enumerable:!0,get:function(){return _index4.formatNumber}}),Object.defineProperty(exports,"formatPercent",{enumerable:!0,get:function(){return _index4.formatPercent}}),Object.defineProperty(exports,"formatPhone",{enumerable:!0,get:function(){return _index4.formatPhone}}),Object.defineProperty(exports,"formatPhoneAsTyped",{enumerable:!0,get:function(){return _index4.formatPhoneAsTyped}}),Object.defineProperty(exports,"formatRelative",{enumerable:!0,get:function(){return _index4.formatRelative}}),Object.defineProperty(exports,"formatRelativeTime",{enumerable:!0,get:function(){return _index4.formatRelativeTime}}),Object.defineProperty(exports,"formatTime",{enumerable:!0,get:function(){return _index4.formatTime}}),Object.defineProperty(exports,"formatTime12h",{enumerable:!0,get:function(){return _index4.formatTime12h}}),Object.defineProperty(exports,"formatTimeInWindowsZone",{enumerable:!0,get:function(){return _index4.formatTimeInWindowsZone}}),Object.defineProperty(exports,"formatTimeInZone",{enumerable:!0,get:function(){return _index4.formatTimeInZone}}),Object.defineProperty(exports,"getClientBuild",{enumerable:!0,get:function(){return _clientHeaders.getClientBuild}}),Object.defineProperty(exports,"getConfig",{enumerable:!0,get:function(){return _index.getConfig}}),Object.defineProperty(exports,"getConfigValue",{enumerable:!0,get:function(){return _index.getConfigValue}}),Object.defineProperty(exports,"getCountries",{enumerable:!0,get:function(){return _index4.getCountries}}),Object.defineProperty(exports,"getCountryCallingCode",{enumerable:!0,get:function(){return _index4.getCountryCallingCode}}),Object.defineProperty(exports,"getDeviceContext",{enumerable:!0,get:function(){return _index5.getDeviceContext}}),Object.defineProperty(exports,"getFormatterConfig",{enumerable:!0,get:function(){return _index4.getFormatterConfig}}),Object.defineProperty(exports,"getInitials",{enumerable:!0,get:function(){return _index4.getInitials}}),Object.defineProperty(exports,"getJWTExpiry",{enumerable:!0,get:function(){return _jwt.getJWTExpiry}}),Object.defineProperty(exports,"getMinAppVersion",{enumerable:!0,get:function(){return _minAppVersion.getMinAppVersion}}),Object.defineProperty(exports,"getNetworkStatus",{enumerable:!0,get:function(){return _index6.getNetworkStatus}}),Object.defineProperty(exports,"getPhoneCountries",{enumerable:!0,get:function(){return _index4.getPhoneCountries}}),Object.defineProperty(exports,"getSessionUser",{enumerable:!0,get:function(){return _authStore.getSessionUser}}),Object.defineProperty(exports,"getToken",{enumerable:!0,get:function(){return _authStore.getToken}}),Object.defineProperty(exports,"initUserAuth",{enumerable:!0,get:function(){return _initUserAuth.initUserAuth}}),Object.defineProperty(exports,"initWebority",{enumerable:!0,get:function(){return _initSDK.initWebority}}),Object.defineProperty(exports,"injectStore",{enumerable:!0,get:function(){return _userClient.injectStore}}),Object.defineProperty(exports,"injectUserAuth",{enumerable:!0,get:function(){return _userClient.injectUserAuth}}),Object.defineProperty(exports,"isAadhaar",{enumerable:!0,get:function(){return _index8.isAadhaar}}),Object.defineProperty(exports,"isAlphanumeric",{enumerable:!0,get:function(){return _index8.isAlphanumeric}}),Object.defineProperty(exports,"isApiError",{enumerable:!0,get:function(){return _index3.isApiError}}),Object.defineProperty(exports,"isBetween",{enumerable:!0,get:function(){return _index8.isBetween}}),Object.defineProperty(exports,"isBuildBelowMinimum",{enumerable:!0,get:function(){return _index9.isBuildBelowMinimum}}),Object.defineProperty(exports,"isDateAfter",{enumerable:!0,get:function(){return _index4.isDateAfter}}),Object.defineProperty(exports,"isDateBefore",{enumerable:!0,get:function(){return _index4.isDateBefore}}),Object.defineProperty(exports,"isEmail",{enumerable:!0,get:function(){return _index8.isEmail}}),Object.defineProperty(exports,"isGstin",{enumerable:!0,get:function(){return _index8.isGstin}}),Object.defineProperty(exports,"isHexColor",{enumerable:!0,get:function(){return _index8.isHexColor}}),Object.defineProperty(exports,"isIfsc",{enumerable:!0,get:function(){return _index8.isIfsc}}),Object.defineProperty(exports,"isIndianMobile",{enumerable:!0,get:function(){return _index8.isIndianMobile}}),Object.defineProperty(exports,"isIndianPincode",{enumerable:!0,get:function(){return _index8.isIndianPincode}}),Object.defineProperty(exports,"isInteger",{enumerable:!0,get:function(){return _index8.isInteger}}),Object.defineProperty(exports,"isJWTExpired",{enumerable:!0,get:function(){return _jwt.isJWTExpired}}),Object.defineProperty(exports,"isNeverSentError",{enumerable:!0,get:function(){return _retry.isNeverSentError}}),Object.defineProperty(exports,"isNoResponse",{enumerable:!0,get:function(){return _index3.isNoResponse}}),Object.defineProperty(exports,"isNonEmpty",{enumerable:!0,get:function(){return _index8.isNonEmpty}}),Object.defineProperty(exports,"isNumeric",{enumerable:!0,get:function(){return _index8.isNumeric}}),Object.defineProperty(exports,"isPan",{enumerable:!0,get:function(){return _index8.isPan}}),Object.defineProperty(exports,"isPhone",{enumerable:!0,get:function(){return _index8.isPhone}}),Object.defineProperty(exports,"isRetryableFailure",{enumerable:!0,get:function(){return _retry.isRetryableFailure}}),Object.defineProperty(exports,"isRetryableStatus",{enumerable:!0,get:function(){return _retry.isRetryableStatus}}),Object.defineProperty(exports,"isSameDay",{enumerable:!0,get:function(){return _index4.isSameDay}}),Object.defineProperty(exports,"isStorageAvailable",{enumerable:!0,get:function(){return _index7.isStorageAvailable}}),Object.defineProperty(exports,"isStrongPassword",{enumerable:!0,get:function(){return _index8.isStrongPassword}}),Object.defineProperty(exports,"isSupportedCountry",{enumerable:!0,get:function(){return _index4.isSupportedCountry}}),Object.defineProperty(exports,"isUrl",{enumerable:!0,get:function(){return _index8.isUrl}}),Object.defineProperty(exports,"isValidNationalNumber",{enumerable:!0,get:function(){return _index4.isValidNationalNumber}}),Object.defineProperty(exports,"isValidPhoneNumber",{enumerable:!0,get:function(){return _index4.isValidPhoneNumber}}),Object.defineProperty(exports,"logCurl",{enumerable:!0,get:function(){return _curl.logCurl}}),Object.defineProperty(exports,"maxLength",{enumerable:!0,get:function(){return _index8.maxLength}}),Object.defineProperty(exports,"maxNationalNumberLength",{enumerable:!0,get:function(){return _index4.maxNationalNumberLength}}),Object.defineProperty(exports,"minLength",{enumerable:!0,get:function(){return _index8.minLength}}),Object.defineProperty(exports,"newCorrelationId",{enumerable:!0,get:function(){return _requestDefaults.newCorrelationId}}),Object.defineProperty(exports,"normalizePhone",{enumerable:!0,get:function(){return _index4.normalizePhone}}),Object.defineProperty(exports,"parseBuildNumber",{enumerable:!0,get:function(){return _index9.parseBuildNumber}}),Object.defineProperty(exports,"parseDeepLink",{enumerable:!0,get:function(){return _index2.parseDeepLink}}),Object.defineProperty(exports,"parsePhoneNumber",{enumerable:!0,get:function(){return _index4.parsePhoneNumber}}),Object.defineProperty(exports,"parsePhoneNumberFromString",{enumerable:!0,get:function(){return _index4.parsePhoneNumberFromString}}),Object.defineProperty(exports,"publicClient",{enumerable:!0,get:function(){return _publicClient.default}}),Object.defineProperty(exports,"refreshAccessToken",{enumerable:!0,get:function(){return _tokenRefresh.refreshAccessToken}}),Object.defineProperty(exports,"removeSessionUser",{enumerable:!0,get:function(){return _authStore.removeSessionUser}}),Object.defineProperty(exports,"removeToken",{enumerable:!0,get:function(){return _authStore.removeToken}}),Object.defineProperty(exports,"resetConfig",{enumerable:!0,get:function(){return _index.resetConfig}}),Object.defineProperty(exports,"resetRefreshState",{enumerable:!0,get:function(){return _userClient.resetRefreshState}}),Object.defineProperty(exports,"retryAfterMs",{enumerable:!0,get:function(){return _retry.retryAfterMs}}),Object.defineProperty(exports,"setConfig",{enumerable:!0,get:function(){return _index.setConfig}}),Object.defineProperty(exports,"setDeviceContext",{enumerable:!0,get:function(){return _index5.setDeviceContext}}),Object.defineProperty(exports,"setDeviceInfoImplementation",{enumerable:!0,get:function(){return _index9.setDeviceInfoImplementation}}),Object.defineProperty(exports,"setKeychainImplementation",{enumerable:!0,get:function(){return _authStore.setKeychainImplementation}}),Object.defineProperty(exports,"setLegacyTokenKeys",{enumerable:!0,get:function(){return _authStore.setLegacyTokenKeys}}),Object.defineProperty(exports,"setNetworkStatusImplementation",{enumerable:!0,get:function(){return _index6.setNetworkStatusImplementation}}),Object.defineProperty(exports,"setRemoteLogger",{enumerable:!0,get:function(){return _index5.setRemoteLogger}}),Object.defineProperty(exports,"setStorageImplementation",{enumerable:!0,get:function(){return _index7.setStorageImplementation}}),Object.defineProperty(exports,"splitPhoneNumber",{enumerable:!0,get:function(){return _index4.splitPhoneNumber}}),Object.defineProperty(exports,"startOfDay",{enumerable:!0,get:function(){return _index4.startOfDay}}),Object.defineProperty(exports,"storeSessionUser",{enumerable:!0,get:function(){return _authStore.storeSessionUser}}),Object.defineProperty(exports,"storeToken",{enumerable:!0,get:function(){return _authStore.storeToken}}),Object.defineProperty(exports,"toFieldPath",{enumerable:!0,get:function(){return _index3.toFieldPath}}),Object.defineProperty(exports,"useDeepLink",{enumerable:!0,get:function(){return _index2.useDeepLink}}),Object.defineProperty(exports,"useNetworkStatus",{enumerable:!0,get:function(){return _index6.useNetworkStatus}}),Object.defineProperty(exports,"useVersionCheck",{enumerable:!0,get:function(){return _index9.useVersionCheck}}),Object.defineProperty(exports,"userClient",{enumerable:!0,get:function(){return _userClient.default}}),Object.defineProperty(exports,"validatePhoneNumberLength",{enumerable:!0,get:function(){return _index4.validatePhoneNumberLength}});var _clientHeaders=require("./api/clientHeaders.js"),_curl=require("./api/curl.js"),_minAppVersion=require("./api/minAppVersion.js"),_publicClient=_interopRequireDefault(require("./api/publicClient.js")),_requestDefaults=require("./api/requestDefaults.js"),_retry=require("./api/retry.js"),_tokenRefresh=require("./api/tokenRefresh.js"),_userClient=_interopRequireWildcard(require("./api/userClient.js")),_authStore=require("./auth/authStore.js"),_jwt=require("./auth/jwt.js"),_index=require("./config/index.js"),_index2=require("./deepLink/index.js"),_index3=require("./errors/index.js"),_index4=require("./formatters/index.js"),_initSDK=require("./initSDK.js"),_initUserAuth=require("./initUserAuth.js"),_index5=require("./logger/index.js"),_crashlytics=require("./logger/crashlytics.js"),_index6=require("./network/index.js"),_status=require("./push/status.js"),_index7=require("./storage/index.js"),_base=require("./utils/base64.js"),_index8=require("./validators/index.js"),_index9=require("./versionCheck/index.js");function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(_interopRequireWildcard=function(e,t){if(!t&&e&&e.__esModule)return e;var i,o,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(i=t?n:r){if(i.has(e))return i.get(e);i.set(e,u)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((o=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(o.get||o.set)?i(u,t,o):u[t]=e[t]);return u})(e,t)}function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"ACCESS_TOKEN_KEY",{enumerable:!0,get:function(){return _authStore.ACCESS_TOKEN_KEY}}),Object.defineProperty(exports,"ACCOUNT_ID_HEADER",{enumerable:!0,get:function(){return _clientHeaders.ACCOUNT_ID_HEADER}}),Object.defineProperty(exports,"AsYouType",{enumerable:!0,get:function(){return _index4.AsYouType}}),Object.defineProperty(exports,"CLIENT_BUILD_HEADER",{enumerable:!0,get:function(){return _clientHeaders.CLIENT_BUILD_HEADER}}),Object.defineProperty(exports,"CLIENT_KIND",{enumerable:!0,get:function(){return _clientHeaders.CLIENT_KIND}}),Object.defineProperty(exports,"CLIENT_KIND_HEADER",{enumerable:!0,get:function(){return _clientHeaders.CLIENT_KIND_HEADER}}),Object.defineProperty(exports,"CONTRACT_ERROR_CODE",{enumerable:!0,get:function(){return _index3.CONTRACT_ERROR_CODE}}),Object.defineProperty(exports,"DeepLink",{enumerable:!0,get:function(){return _index2.DeepLink}}),Object.defineProperty(exports,"IDEMPOTENCY_KEY_HEADER",{enumerable:!0,get:function(){return _retry.IDEMPOTENCY_KEY_HEADER}}),Object.defineProperty(exports,"LEGACY_REFRESH_TOKEN_LIFETIME_MS",{enumerable:!0,get:function(){return _authStore.LEGACY_REFRESH_TOKEN_LIFETIME_MS}}),Object.defineProperty(exports,"Logger",{enumerable:!0,get:function(){return _index5.Logger}}),Object.defineProperty(exports,"MIN_APP_VERSION_HEADER",{enumerable:!0,get:function(){return _minAppVersion.MIN_APP_VERSION_HEADER}}),Object.defineProperty(exports,"NETWORK_CODE",{enumerable:!0,get:function(){return _index3.NETWORK_CODE}}),Object.defineProperty(exports,"OFFLINE_MESSAGE",{enumerable:!0,get:function(){return _index3.OFFLINE_MESSAGE}}),Object.defineProperty(exports,"PUSH_STATUS",{enumerable:!0,get:function(){return _status.PUSH_STATUS}}),Object.defineProperty(exports,"REFRESH_TOKEN_KEY",{enumerable:!0,get:function(){return _authStore.REFRESH_TOKEN_KEY}}),Object.defineProperty(exports,"REQUEST_CANCELED_CODE",{enumerable:!0,get:function(){return _index3.REQUEST_CANCELED_CODE}}),Object.defineProperty(exports,"RequestOfflineError",{enumerable:!0,get:function(){return _userClient.RequestOfflineError}}),Object.defineProperty(exports,"SERVER_FAILURE_MESSAGE",{enumerable:!0,get:function(){return _index3.SERVER_FAILURE_MESSAGE}}),Object.defineProperty(exports,"SESSION_TERMINATION_CODES",{enumerable:!0,get:function(){return _userClient.SESSION_TERMINATION_CODES}}),Object.defineProperty(exports,"SESSION_USER_KEY",{enumerable:!0,get:function(){return _authStore.SESSION_USER_KEY}}),Object.defineProperty(exports,"SIGN_OUT_REASON_HEADER",{enumerable:!0,get:function(){return _userClient.SIGN_OUT_REASON_HEADER}}),Object.defineProperty(exports,"Storage",{enumerable:!0,get:function(){return _index7.Storage}}),Object.defineProperty(exports,"TIMEOUT_CODE",{enumerable:!0,get:function(){return _index3.TIMEOUT_CODE}}),Object.defineProperty(exports,"TIMEOUT_MESSAGE",{enumerable:!0,get:function(){return _index3.TIMEOUT_MESSAGE}}),Object.defineProperty(exports,"UNEXPECTED_MESSAGE",{enumerable:!0,get:function(){return _index3.UNEXPECTED_MESSAGE}}),Object.defineProperty(exports,"VersionCheck",{enumerable:!0,get:function(){return _index9.VersionCheck}}),Object.defineProperty(exports,"WORKSPACE_CHANGED_CODE",{enumerable:!0,get:function(){return _workspace.WORKSPACE_CHANGED_CODE}}),Object.defineProperty(exports,"WorkspaceChangedError",{enumerable:!0,get:function(){return _workspace.WorkspaceChangedError}}),Object.defineProperty(exports,"addDays",{enumerable:!0,get:function(){return _index4.addDays}}),Object.defineProperty(exports,"addMinAppVersionListener",{enumerable:!0,get:function(){return _minAppVersion.addMinAppVersionListener}}),Object.defineProperty(exports,"addNetworkStatusListener",{enumerable:!0,get:function(){return _index6.addNetworkStatusListener}}),Object.defineProperty(exports,"addSessionEndedListener",{enumerable:!0,get:function(){return _authStore.addSessionEndedListener}}),Object.defineProperty(exports,"apiErrorMessage",{enumerable:!0,get:function(){return _index3.apiErrorMessage}}),Object.defineProperty(exports,"applyRequestDefaults",{enumerable:!0,get:function(){return _requestDefaults.applyRequestDefaults}}),Object.defineProperty(exports,"attachRetry",{enumerable:!0,get:function(){return _retry.attachRetry}}),Object.defineProperty(exports,"buildCurl",{enumerable:!0,get:function(){return _curl.buildCurl}}),Object.defineProperty(exports,"clampNationalNumber",{enumerable:!0,get:function(){return _index4.clampNationalNumber}}),Object.defineProperty(exports,"clearSession",{enumerable:!0,get:function(){return _authStore.clearSession}}),Object.defineProperty(exports,"configureFormatters",{enumerable:!0,get:function(){return _index4.configureFormatters}}),Object.defineProperty(exports,"configureLogger",{enumerable:!0,get:function(){return _index5.configureLogger}}),Object.defineProperty(exports,"countryFlagEmoji",{enumerable:!0,get:function(){return _index4.countryFlagEmoji}}),Object.defineProperty(exports,"crashlyticsRemoteLogger",{enumerable:!0,get:function(){return _crashlytics.crashlyticsRemoteLogger}}),Object.defineProperty(exports,"decodeJWT",{enumerable:!0,get:function(){return _jwt.decodeJWT}}),Object.defineProperty(exports,"detectPhoneCountry",{enumerable:!0,get:function(){return _index4.detectPhoneCountry}}),Object.defineProperty(exports,"diffMs",{enumerable:!0,get:function(){return _index4.diffMs}}),Object.defineProperty(exports,"encodeBase64",{enumerable:!0,get:function(){return _base.encodeBase64}}),Object.defineProperty(exports,"extractApiError",{enumerable:!0,get:function(){return _index3.extractApiError}}),Object.defineProperty(exports,"formatCompactNumber",{enumerable:!0,get:function(){return _index4.formatCompactNumber}}),Object.defineProperty(exports,"formatCurrency",{enumerable:!0,get:function(){return _index4.formatCurrency}}),Object.defineProperty(exports,"formatDate",{enumerable:!0,get:function(){return _index4.formatDate}}),Object.defineProperty(exports,"formatDateDDMMMYYYY",{enumerable:!0,get:function(){return _index4.formatDateDDMMMYYYY}}),Object.defineProperty(exports,"formatDateISO",{enumerable:!0,get:function(){return _index4.formatDateISO}}),Object.defineProperty(exports,"formatDatePattern",{enumerable:!0,get:function(){return _index4.formatDatePattern}}),Object.defineProperty(exports,"formatDateTime",{enumerable:!0,get:function(){return _index4.formatDateTime}}),Object.defineProperty(exports,"formatMinor",{enumerable:!0,get:function(){return _index4.formatMinor}}),Object.defineProperty(exports,"formatNumber",{enumerable:!0,get:function(){return _index4.formatNumber}}),Object.defineProperty(exports,"formatPercent",{enumerable:!0,get:function(){return _index4.formatPercent}}),Object.defineProperty(exports,"formatPhone",{enumerable:!0,get:function(){return _index4.formatPhone}}),Object.defineProperty(exports,"formatPhoneAsTyped",{enumerable:!0,get:function(){return _index4.formatPhoneAsTyped}}),Object.defineProperty(exports,"formatRelative",{enumerable:!0,get:function(){return _index4.formatRelative}}),Object.defineProperty(exports,"formatRelativeTime",{enumerable:!0,get:function(){return _index4.formatRelativeTime}}),Object.defineProperty(exports,"formatTime",{enumerable:!0,get:function(){return _index4.formatTime}}),Object.defineProperty(exports,"formatTime12h",{enumerable:!0,get:function(){return _index4.formatTime12h}}),Object.defineProperty(exports,"formatTimeInWindowsZone",{enumerable:!0,get:function(){return _index4.formatTimeInWindowsZone}}),Object.defineProperty(exports,"formatTimeInZone",{enumerable:!0,get:function(){return _index4.formatTimeInZone}}),Object.defineProperty(exports,"getClientBuild",{enumerable:!0,get:function(){return _clientHeaders.getClientBuild}}),Object.defineProperty(exports,"getConfig",{enumerable:!0,get:function(){return _index.getConfig}}),Object.defineProperty(exports,"getConfigValue",{enumerable:!0,get:function(){return _index.getConfigValue}}),Object.defineProperty(exports,"getCountries",{enumerable:!0,get:function(){return _index4.getCountries}}),Object.defineProperty(exports,"getCountryCallingCode",{enumerable:!0,get:function(){return _index4.getCountryCallingCode}}),Object.defineProperty(exports,"getDeviceContext",{enumerable:!0,get:function(){return _index5.getDeviceContext}}),Object.defineProperty(exports,"getFormatterConfig",{enumerable:!0,get:function(){return _index4.getFormatterConfig}}),Object.defineProperty(exports,"getInitials",{enumerable:!0,get:function(){return _index4.getInitials}}),Object.defineProperty(exports,"getJWTExpiry",{enumerable:!0,get:function(){return _jwt.getJWTExpiry}}),Object.defineProperty(exports,"getMinAppVersion",{enumerable:!0,get:function(){return _minAppVersion.getMinAppVersion}}),Object.defineProperty(exports,"getNetworkStatus",{enumerable:!0,get:function(){return _index6.getNetworkStatus}}),Object.defineProperty(exports,"getPhoneCountries",{enumerable:!0,get:function(){return _index4.getPhoneCountries}}),Object.defineProperty(exports,"getSessionUser",{enumerable:!0,get:function(){return _authStore.getSessionUser}}),Object.defineProperty(exports,"getToken",{enumerable:!0,get:function(){return _authStore.getToken}}),Object.defineProperty(exports,"initUserAuth",{enumerable:!0,get:function(){return _initUserAuth.initUserAuth}}),Object.defineProperty(exports,"initWebority",{enumerable:!0,get:function(){return _initSDK.initWebority}}),Object.defineProperty(exports,"injectStore",{enumerable:!0,get:function(){return _userClient.injectStore}}),Object.defineProperty(exports,"injectUserAuth",{enumerable:!0,get:function(){return _userClient.injectUserAuth}}),Object.defineProperty(exports,"isAadhaar",{enumerable:!0,get:function(){return _index8.isAadhaar}}),Object.defineProperty(exports,"isAlphanumeric",{enumerable:!0,get:function(){return _index8.isAlphanumeric}}),Object.defineProperty(exports,"isApiError",{enumerable:!0,get:function(){return _index3.isApiError}}),Object.defineProperty(exports,"isBetween",{enumerable:!0,get:function(){return _index8.isBetween}}),Object.defineProperty(exports,"isBuildBelowMinimum",{enumerable:!0,get:function(){return _index9.isBuildBelowMinimum}}),Object.defineProperty(exports,"isDateAfter",{enumerable:!0,get:function(){return _index4.isDateAfter}}),Object.defineProperty(exports,"isDateBefore",{enumerable:!0,get:function(){return _index4.isDateBefore}}),Object.defineProperty(exports,"isEmail",{enumerable:!0,get:function(){return _index8.isEmail}}),Object.defineProperty(exports,"isGstin",{enumerable:!0,get:function(){return _index8.isGstin}}),Object.defineProperty(exports,"isHexColor",{enumerable:!0,get:function(){return _index8.isHexColor}}),Object.defineProperty(exports,"isIfsc",{enumerable:!0,get:function(){return _index8.isIfsc}}),Object.defineProperty(exports,"isIndianMobile",{enumerable:!0,get:function(){return _index8.isIndianMobile}}),Object.defineProperty(exports,"isIndianPincode",{enumerable:!0,get:function(){return _index8.isIndianPincode}}),Object.defineProperty(exports,"isInteger",{enumerable:!0,get:function(){return _index8.isInteger}}),Object.defineProperty(exports,"isJWTExpired",{enumerable:!0,get:function(){return _jwt.isJWTExpired}}),Object.defineProperty(exports,"isNeverSentError",{enumerable:!0,get:function(){return _retry.isNeverSentError}}),Object.defineProperty(exports,"isNoResponse",{enumerable:!0,get:function(){return _index3.isNoResponse}}),Object.defineProperty(exports,"isNonEmpty",{enumerable:!0,get:function(){return _index8.isNonEmpty}}),Object.defineProperty(exports,"isNumeric",{enumerable:!0,get:function(){return _index8.isNumeric}}),Object.defineProperty(exports,"isPan",{enumerable:!0,get:function(){return _index8.isPan}}),Object.defineProperty(exports,"isPhone",{enumerable:!0,get:function(){return _index8.isPhone}}),Object.defineProperty(exports,"isRetryableFailure",{enumerable:!0,get:function(){return _retry.isRetryableFailure}}),Object.defineProperty(exports,"isRetryableStatus",{enumerable:!0,get:function(){return _retry.isRetryableStatus}}),Object.defineProperty(exports,"isSameDay",{enumerable:!0,get:function(){return _index4.isSameDay}}),Object.defineProperty(exports,"isStorageAvailable",{enumerable:!0,get:function(){return _index7.isStorageAvailable}}),Object.defineProperty(exports,"isStrongPassword",{enumerable:!0,get:function(){return _index8.isStrongPassword}}),Object.defineProperty(exports,"isSupportedCountry",{enumerable:!0,get:function(){return _index4.isSupportedCountry}}),Object.defineProperty(exports,"isUrl",{enumerable:!0,get:function(){return _index8.isUrl}}),Object.defineProperty(exports,"isValidNationalNumber",{enumerable:!0,get:function(){return _index4.isValidNationalNumber}}),Object.defineProperty(exports,"isValidPhoneNumber",{enumerable:!0,get:function(){return _index4.isValidPhoneNumber}}),Object.defineProperty(exports,"isWorkspaceChangedError",{enumerable:!0,get:function(){return _workspace.isWorkspaceChangedError}}),Object.defineProperty(exports,"logCurl",{enumerable:!0,get:function(){return _curl.logCurl}}),Object.defineProperty(exports,"maxLength",{enumerable:!0,get:function(){return _index8.maxLength}}),Object.defineProperty(exports,"maxNationalNumberLength",{enumerable:!0,get:function(){return _index4.maxNationalNumberLength}}),Object.defineProperty(exports,"minLength",{enumerable:!0,get:function(){return _index8.minLength}}),Object.defineProperty(exports,"newCorrelationId",{enumerable:!0,get:function(){return _requestDefaults.newCorrelationId}}),Object.defineProperty(exports,"normalizePhone",{enumerable:!0,get:function(){return _index4.normalizePhone}}),Object.defineProperty(exports,"parseBuildNumber",{enumerable:!0,get:function(){return _index9.parseBuildNumber}}),Object.defineProperty(exports,"parseDeepLink",{enumerable:!0,get:function(){return _index2.parseDeepLink}}),Object.defineProperty(exports,"parsePhoneNumber",{enumerable:!0,get:function(){return _index4.parsePhoneNumber}}),Object.defineProperty(exports,"parsePhoneNumberFromString",{enumerable:!0,get:function(){return _index4.parsePhoneNumberFromString}}),Object.defineProperty(exports,"publicClient",{enumerable:!0,get:function(){return _publicClient.default}}),Object.defineProperty(exports,"refreshAccessToken",{enumerable:!0,get:function(){return _tokenRefresh.refreshAccessToken}}),Object.defineProperty(exports,"removeSessionUser",{enumerable:!0,get:function(){return _authStore.removeSessionUser}}),Object.defineProperty(exports,"removeToken",{enumerable:!0,get:function(){return _authStore.removeToken}}),Object.defineProperty(exports,"resetConfig",{enumerable:!0,get:function(){return _index.resetConfig}}),Object.defineProperty(exports,"resetRefreshState",{enumerable:!0,get:function(){return _userClient.resetRefreshState}}),Object.defineProperty(exports,"retryAfterMs",{enumerable:!0,get:function(){return _retry.retryAfterMs}}),Object.defineProperty(exports,"setConfig",{enumerable:!0,get:function(){return _index.setConfig}}),Object.defineProperty(exports,"setDeviceContext",{enumerable:!0,get:function(){return _index5.setDeviceContext}}),Object.defineProperty(exports,"setDeviceInfoImplementation",{enumerable:!0,get:function(){return _index9.setDeviceInfoImplementation}}),Object.defineProperty(exports,"setKeychainImplementation",{enumerable:!0,get:function(){return _authStore.setKeychainImplementation}}),Object.defineProperty(exports,"setLegacyTokenKeys",{enumerable:!0,get:function(){return _authStore.setLegacyTokenKeys}}),Object.defineProperty(exports,"setNetworkStatusImplementation",{enumerable:!0,get:function(){return _index6.setNetworkStatusImplementation}}),Object.defineProperty(exports,"setRemoteLogger",{enumerable:!0,get:function(){return _index5.setRemoteLogger}}),Object.defineProperty(exports,"setStorageImplementation",{enumerable:!0,get:function(){return _index7.setStorageImplementation}}),Object.defineProperty(exports,"splitPhoneNumber",{enumerable:!0,get:function(){return _index4.splitPhoneNumber}}),Object.defineProperty(exports,"startOfDay",{enumerable:!0,get:function(){return _index4.startOfDay}}),Object.defineProperty(exports,"storeSessionUser",{enumerable:!0,get:function(){return _authStore.storeSessionUser}}),Object.defineProperty(exports,"storeToken",{enumerable:!0,get:function(){return _authStore.storeToken}}),Object.defineProperty(exports,"toFieldPath",{enumerable:!0,get:function(){return _index3.toFieldPath}}),Object.defineProperty(exports,"useDeepLink",{enumerable:!0,get:function(){return _index2.useDeepLink}}),Object.defineProperty(exports,"useNetworkStatus",{enumerable:!0,get:function(){return _index6.useNetworkStatus}}),Object.defineProperty(exports,"useVersionCheck",{enumerable:!0,get:function(){return _index9.useVersionCheck}}),Object.defineProperty(exports,"userClient",{enumerable:!0,get:function(){return _userClient.default}}),Object.defineProperty(exports,"validatePhoneNumberLength",{enumerable:!0,get:function(){return _index4.validatePhoneNumberLength}});var _clientHeaders=require("./api/clientHeaders.js"),_curl=require("./api/curl.js"),_minAppVersion=require("./api/minAppVersion.js"),_publicClient=_interopRequireDefault(require("./api/publicClient.js")),_requestDefaults=require("./api/requestDefaults.js"),_retry=require("./api/retry.js"),_tokenRefresh=require("./api/tokenRefresh.js"),_userClient=_interopRequireWildcard(require("./api/userClient.js")),_workspace=require("./api/workspace.js"),_authStore=require("./auth/authStore.js"),_jwt=require("./auth/jwt.js"),_index=require("./config/index.js"),_index2=require("./deepLink/index.js"),_index3=require("./errors/index.js"),_index4=require("./formatters/index.js"),_initSDK=require("./initSDK.js"),_initUserAuth=require("./initUserAuth.js"),_index5=require("./logger/index.js"),_crashlytics=require("./logger/crashlytics.js"),_index6=require("./network/index.js"),_status=require("./push/status.js"),_index7=require("./storage/index.js"),_base=require("./utils/base64.js"),_index8=require("./validators/index.js"),_index9=require("./versionCheck/index.js");function _interopRequireWildcard(e,r){if("function"==typeof WeakMap)var t=new WeakMap,n=new WeakMap;return(_interopRequireWildcard=function(e,r){if(!r&&e&&e.__esModule)return e;var i,o,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(i=r?n:t){if(i.has(e))return i.get(e);i.set(e,u)}for(const r in e)"default"!==r&&{}.hasOwnProperty.call(e,r)&&((o=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,r))&&(o.get||o.set)?i(u,r,o):u[r]=e[r]);return u})(e,r)}function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.errorToastMiddleware=errorToastMiddleware,exports.isSilentRejection=void 0;var _extractApiError=require("../errors/extractApiError.js");const isDict=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),hasSilent=e=>isDict(e)&&!0===e.silent,isSilentRejection=e=>hasSilent(e)||hasSilent(e.arg)||isDict(e.arg)&&hasSilent(e.arg.originalArgs)||hasSilent(e.baseQueryMeta);function errorToastMiddleware(e){const{showToast:t,ignoreCodes:r=[],ignoreStatuses:i=[401],dedupeMs:s=4e3,onRejected:o}=e,n=new Map;return e=>a=>c=>{const l=a(c);if(!isDict(c)||!isDict(c.meta))return l;const u=c.meta;if("rejected"!==u.requestStatus||!0===u.aborted||!0===u.condition)return l;const d=(0,_extractApiError.extractApiError)(!0===u.rejectedWithValue?c.payload:c.error);if(d.code===_extractApiError.REQUEST_CANCELED_CODE)return l;const p=o?.(c,d,e);if("silent"===p||isSilentRejection(u))return l;if("toast"!==p){if(null!==d.code&&r.includes(d.code))return l;if(i.includes(d.status))return l}return(e=>{if(s<=0)return!0;const t=Date.now();for(const[e,r]of n)t-r>=s&&n.delete(e);return!n.has(e)&&(n.set(e,t),!0)})(d.message)&&t(d.message,d),l}}exports.isSilentRejection=isSilentRejection;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.errorToastMiddleware=errorToastMiddleware,exports.isSilentRejection=void 0;var _workspace=require("../api/workspace.js"),_extractApiError=require("../errors/extractApiError.js");const isDict=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),hasSilent=e=>isDict(e)&&!0===e.silent,isSilentRejection=e=>hasSilent(e)||hasSilent(e.arg)||isDict(e.arg)&&hasSilent(e.arg.originalArgs)||hasSilent(e.baseQueryMeta);function errorToastMiddleware(e){const{showToast:r,ignoreCodes:t=[],ignoreStatuses:i=[401],dedupeMs:s=4e3,onRejected:o}=e,n=new Map;return e=>a=>c=>{const l=a(c);if(!isDict(c)||!isDict(c.meta))return l;const u=c.meta;if("rejected"!==u.requestStatus||!0===u.aborted||!0===u.condition)return l;const d=(0,_extractApiError.extractApiError)(!0===u.rejectedWithValue?c.payload:c.error);if(d.code===_extractApiError.REQUEST_CANCELED_CODE)return l;const p=o?.(c,d,e);if("silent"===p||isSilentRejection(u))return l;if("toast"!==p){if(null!==d.code&&(d.code===_workspace.WORKSPACE_CHANGED_CODE||t.includes(d.code)))return l;if(i.includes(d.status))return l}return(e=>{if(s<=0)return!0;const r=Date.now();for(const[e,t]of n)r-t>=s&&n.delete(e);return!n.has(e)&&(n.set(e,r),!0)})(d.message)&&r(d.message,d),l}}exports.isSilentRejection=isSilentRejection;
@@ -1 +1 @@
1
- "use strict";import{getConfigValue}from"../config/index.js";import{readAppBuild}from"../versionCheck/appBuild.js";export const CLIENT_BUILD_HEADER="X-Client-Build";export const APP_BUILD_HEADER="X-App-Build";export const CLIENT_KIND_HEADER="X-Client-Kind";export const ACCOUNT_ID_HEADER="X-Account-Id";export const CLIENT_KIND="MobileApp";export const getClientBuild=()=>{const e=getConfigValue("appVersion");if(!e)return null;const t=getConfigValue("commit");return t?`${e}+${t}`:e};const setIfAbsent=(e,t,n)=>{n&&!e.has(t)&&e.set(t,n)};export const applyClientHeaders=e=>{e.interceptors.request.use(e=>{setIfAbsent(e.headers,"X-Client-Kind","MobileApp"),setIfAbsent(e.headers,"X-Client-Build",getClientBuild());const t=readAppBuild();return setIfAbsent(e.headers,"X-App-Build",null===t?null:String(t)),e})};export const applyAccountIdHeader=async(e,t)=>{const n=t?await t():null;n&&e.set("X-Account-Id",n)};
1
+ "use strict";import{getConfigValue}from"../config/index.js";import{readAppBuild}from"../versionCheck/appBuild.js";export const CLIENT_BUILD_HEADER="X-Client-Build";export const APP_BUILD_HEADER="X-App-Build";export const CLIENT_KIND_HEADER="X-Client-Kind";export const ACCOUNT_ID_HEADER="X-Account-Id";export const CLIENT_KIND="MobileApp";export const getClientBuild=()=>{const t=getConfigValue("appVersion");if(!t)return null;const e=getConfigValue("commit");return e?`${t}+${e}`:t};const setIfAbsent=(t,e,n)=>{n&&!t.has(e)&&t.set(e,n)};export const applyClientHeaders=t=>{t.interceptors.request.use(t=>{setIfAbsent(t.headers,"X-Client-Kind","MobileApp"),setIfAbsent(t.headers,"X-Client-Build",getClientBuild());const e=readAppBuild();return setIfAbsent(t.headers,"X-App-Build",null===e?null:String(e)),t})};export const readAccountId=async t=>t&&await t()||null;export const stampAccountId=async(t,e)=>{if(void 0!==t._accountId)return void(t._accountId&&t.headers.set("X-Account-Id",t._accountId));const n=t.headers.get("X-Account-Id");if("string"==typeof n&&""!==n)return void(t._accountId=n);const o=await readAccountId(e);t._accountId=o,o&&t.headers.set("X-Account-Id",o)};
@@ -1 +1 @@
1
- "use strict";import axios from"axios";import{getConfigValue}from"../config/index.js";export const IDEMPOTENCY_KEY_HEADER="Idempotency-Key";export const isRetryableStatus=e=>"number"==typeof e&&(429===e||e>=500&&e<=599);const IDEMPOTENT_METHODS=new Set(["get","head","options","put","delete"]),NEVER_SENT_CODES=new Set(["ECONNREFUSED","ENOTFOUND","EAI_AGAIN","ENETUNREACH","EHOSTUNREACH"]);export const isNeverSentError=e=>!e.response&&"string"==typeof e.code&&NEVER_SENT_CODES.has(e.code);const MAX_RETRY_AFTER_MS=3e4;export const retryAfterMs=e=>{const t=e.response;if(!t)return null;const r=t.data,o=t.headers,s="function"==typeof o?.get?o.get("retry-after"):o?.["retry-after"];for(const e of[r?.retryAfterSeconds,s]){const t=Number(e);if(null!=e&&Number.isFinite(t)&&t>0)return 1e3*t}return null};const hasIdempotencyKey=e=>{const t=e?.headers,r="function"==typeof t?.get?t.get("Idempotency-Key"):t?.["Idempotency-Key"];return"string"==typeof r&&""!==r};export const isRetryableFailure=e=>{if(axios.isCancel(e)||"ERR_CANCELED"===e.code)return!1;if(isNeverSentError(e))return!0;const t=(e.config?.method??"get").toLowerCase(),r=IDEMPOTENT_METHODS.has(t),o=e.response?.status;if(void 0===o)return r;if(!isRetryableStatus(o))return!1;const s=retryAfterMs(e);return!(null!==s&&s>3e4)&&(r||(429===o||503===o)&&hasIdempotencyKey(e.config))};const DEFAULT_POLICY={retryDelayMs:e=>e<=1?0:2**e*1e3,shouldRetry:isRetryableFailure,onRetry:()=>{}},waitOrAbort=(e,t)=>new Promise(r=>{const onAbort=()=>{clearTimeout(o),r(!1)},o=setTimeout(()=>{t?.removeEventListener?.("abort",onAbort),r(!0)},e);t?.addEventListener?.("abort",onAbort,{once:!0})});export const attachRetry=(e,t={})=>{e.interceptors.response.use(void 0,async r=>{const o=r,s=o?.config;if(!s||!1===s.retry)return Promise.reject(r);const n="object"==typeof s.retry?s.retry:{},i={...DEFAULT_POLICY,retries:getConfigValue("retries"),...t,...n},c=(s.__retryAttempt??0)+1;if(c>i.retries||!i.shouldRetry(o))return Promise.reject(r);if(s.signal?.aborted)return Promise.reject(r);s.__retryAttempt=c,s.transformRequest=[e=>e],i.onRetry(c,o);const a=retryAfterMs(o)??i.retryDelayMs(c);return await waitOrAbort(a,s.signal)?e.request(s):Promise.reject(r)})};
1
+ "use strict";import axios from"axios";import{getConfigValue}from"../config/index.js";import{isWorkspaceChangedResponse}from"./workspace.js";export const IDEMPOTENCY_KEY_HEADER="Idempotency-Key";export const isRetryableStatus=e=>"number"==typeof e&&(429===e||e>=500&&e<=599);const IDEMPOTENT_METHODS=new Set(["get","head","options","put","delete"]),NEVER_SENT_CODES=new Set(["ECONNREFUSED","ENOTFOUND","EAI_AGAIN","ENETUNREACH","EHOSTUNREACH"]);export const isNeverSentError=e=>!e.response&&"string"==typeof e.code&&NEVER_SENT_CODES.has(e.code);const MAX_RETRY_AFTER_MS=3e4;export const retryAfterMs=e=>{const t=e.response;if(!t)return null;const r=t.data,o=t.headers,s="function"==typeof o?.get?o.get("retry-after"):o?.["retry-after"];for(const e of[r?.retryAfterSeconds,s]){const t=Number(e);if(null!=e&&Number.isFinite(t)&&t>0)return 1e3*t}return null};const hasIdempotencyKey=e=>{const t=e?.headers,r="function"==typeof t?.get?t.get("Idempotency-Key"):t?.["Idempotency-Key"];return"string"==typeof r&&""!==r};export const isRetryableFailure=e=>{if(axios.isCancel(e)||"ERR_CANCELED"===e.code)return!1;if(isNeverSentError(e))return!0;const t=(e.config?.method??"get").toLowerCase(),r=IDEMPOTENT_METHODS.has(t),o=e.response?.status;if(void 0===o)return r;if(!isRetryableStatus(o))return!1;const s=retryAfterMs(e);return!(null!==s&&s>3e4)&&(r||(429===o||503===o)&&hasIdempotencyKey(e.config))};const DEFAULT_POLICY={retryDelayMs:e=>e<=1?0:2**e*1e3,shouldRetry:isRetryableFailure,onRetry:()=>{}},waitOrAbort=(e,t)=>new Promise(r=>{const onAbort=()=>{clearTimeout(o),r(!1)},o=setTimeout(()=>{t?.removeEventListener?.("abort",onAbort),r(!0)},e);t?.addEventListener?.("abort",onAbort,{once:!0})});export const attachRetry=(e,t={})=>{e.interceptors.response.use(void 0,async r=>{const o=r,s=o?.config;if(!s||!1===s.retry||isWorkspaceChangedResponse(o))return Promise.reject(r);const n="object"==typeof s.retry?s.retry:{},i={...DEFAULT_POLICY,retries:getConfigValue("retries"),...t,...n},c=(s.__retryAttempt??0)+1;if(c>i.retries||!i.shouldRetry(o))return Promise.reject(r);if(s.signal?.aborted)return Promise.reject(r);s.__retryAttempt=c,s.transformRequest=[e=>e],i.onRetry(c,o);const a=retryAfterMs(o)??i.retryDelayMs(c);return await waitOrAbort(a,s.signal)?e.request(s):Promise.reject(r)})};
@@ -1 +1 @@
1
- "use strict";import axios from"axios";import{ACCESS_TOKEN_KEY,clearSession,getToken,REFRESH_TOKEN_KEY,storeToken}from"../auth/authStore.js";import{Logger}from"../logger/index.js";import publicClient from"./publicClient.js";let store,auth;export const injectStore=e=>{store=e};export const injectUserAuth=e=>{auth=e};let refreshTokenPromise=null,failedQueue=[];const processQueue=(e,r=null)=>{failedQueue.forEach(({resolve:o,reject:s})=>{e?s(e):null!==r&&o(r)}),failedQueue=[]};export const resetRefreshState=()=>{refreshTokenPromise=null,processQueue(new Error("[@webority/mobile-core] Session ended"))};export const getErrorMessage=e=>e instanceof Error?e.message:"string"==typeof e?e:"Unknown error";const requireAuth=()=>{if(!store||!auth)throw new Error("User package store is not initialized. Call initUserAuth first.");return{store:store,auth:auth}};export const getAccountIdProvider=()=>auth?.accountId;export const getRefreshPath=()=>auth?.refresh.path;export const dispatchLogout=async()=>{const e=requireAuth();await e.store.dispatch(e.auth.logout())};export const SIGN_OUT_REASON_HEADER="X-Sign-Out-Reason";export const readSignOutReason=e=>{const r=void 0===auth?.signOutReasonHeader?"X-Sign-Out-Reason":auth.signOutReasonHeader;if(!r||!e||"object"!=typeof e)return null;const o=e.get,s="function"==typeof o?o.call(e,r):e[r.toLowerCase()];return"string"==typeof s&&""!==s.trim()?s.trim():null};export const endSessionAndLogout=async(e,r)=>{await clearSession(e,{signOutReason:r}),await dispatchLogout()};export const isRefreshInFlight=()=>null!==refreshTokenPromise;export const queueBehindRefresh=()=>new Promise((e,r)=>{failedQueue.push({resolve:e,reject:r})});class SessionEndedError extends Error{constructor(e){super(e),this.name="SessionEndedError",Object.setPrototypeOf(this,SessionEndedError.prototype)}}const endsSession=e=>e instanceof SessionEndedError||axios.isAxiosError(e)&&(400===e.response?.status||401===e.response?.status),asString=(e,r)=>{if("string"!=typeof e||""===e)throw new Error(`The refresh response has no "${r}".`);return e},readWeborityTokens=e=>{const r=e??{};return{accessToken:asString(r.accessToken,"accessToken"),accessTokenExpiry:asString(r.accessTokenExpiration,"accessTokenExpiration"),refreshToken:asString(r.refreshToken,"refreshToken"),refreshTokenExpiry:asString(r.refreshTokenExpiration,"refreshTokenExpiration")}},callRefreshEndpoint=async e=>{const r=await getToken(REFRESH_TOKEN_KEY);if(!r?.token)throw new SessionEndedError("No refresh token available");if(Date.parse(r.expiry)<=Date.now())throw new SessionEndedError("Refresh token expired");const o=await getToken(ACCESS_TOKEN_KEY),s={accessToken:o?.token??null,refreshToken:r.token},t=e.body?await e.body(s):s,n=e.headers?await e.headers():void 0;Logger.info("Refreshing the access token");const{data:i}=await publicClient.post(e.path,t,n?{headers:n}:void 0),a=(e.readTokens??readWeborityTokens)(i);return await storeToken(ACCESS_TOKEN_KEY,a.accessToken,a.accessTokenExpiry),await storeToken(REFRESH_TOKEN_KEY,a.refreshToken,a.refreshTokenExpiry),Logger.info("Access token refreshed"),a.accessToken};export const refreshAccessToken=()=>{if(refreshTokenPromise)return refreshTokenPromise;const e=(async()=>{try{const e=await callRefreshEndpoint(requireAuth().auth.refresh);return processQueue(null,e),e}catch(e){const r=axios.isAxiosError(e)?e.response?.data:void 0;throw Logger.error("Token refresh failed:",r??getErrorMessage(e)),processQueue(e,null),endsSession(e)&&await endSessionAndLogout("rejected",axios.isAxiosError(e)?readSignOutReason(e.response?.headers):null),e}})().finally(()=>{refreshTokenPromise===e&&(refreshTokenPromise=null)});return refreshTokenPromise=e,e};
1
+ "use strict";import axios from"axios";import{ACCESS_TOKEN_KEY,clearSession,getToken,REFRESH_TOKEN_KEY,storeToken}from"../auth/authStore.js";import{Logger}from"../logger/index.js";import publicClient from"./publicClient.js";let store,auth;export const injectStore=e=>{store=e};export const injectUserAuth=e=>{auth=e};let refreshTokenPromise=null,failedQueue=[];const processQueue=(e,r=null)=>{failedQueue.forEach(({resolve:o,reject:t})=>{e?t(e):null!==r&&o(r)}),failedQueue=[]};export const resetRefreshState=()=>{refreshTokenPromise=null,processQueue(new Error("[@webority/mobile-core] Session ended"))};export const getErrorMessage=e=>e instanceof Error?e.message:"string"==typeof e?e:"Unknown error";const requireAuth=()=>{if(!store||!auth)throw new Error("User package store is not initialized. Call initUserAuth first.");return{store:store,auth:auth}};export const getAccountIdProvider=()=>auth?.accountId;export const getRefreshPath=()=>auth?.refresh.path;export const dispatchLogout=async()=>{const e=requireAuth();await e.store.dispatch(e.auth.logout())};export const SIGN_OUT_REASON_HEADER="X-Sign-Out-Reason";export const readSignOutReason=e=>{const r=void 0===auth?.signOutReasonHeader?"X-Sign-Out-Reason":auth.signOutReasonHeader;if(!r||!e||"object"!=typeof e)return null;const o=e.get,t="function"==typeof o?o.call(e,r):e[r.toLowerCase()];return"string"==typeof t&&""!==t.trim()?t.trim():null};export const endSessionAndLogout=async(e,r)=>{await clearSession(e,{signOutReason:r}),await dispatchLogout()};export const isRefreshInFlight=()=>null!==refreshTokenPromise;let replacementCount=0,replacementSettled=Promise.resolve(),settleReplacement=null;export const beginSessionReplacement=()=>{0===replacementCount&&(replacementSettled=new Promise(e=>{settleReplacement=e})),replacementCount+=1;let e=!1;return()=>{e||(e=!0,replacementCount-=1,0===replacementCount&&(settleReplacement?.(),settleReplacement=null))}};export const waitForSessionReplacement=()=>0===replacementCount?Promise.resolve():replacementSettled;export const currentTokenIfReplaced=async e=>{const r=(await getToken(ACCESS_TOKEN_KEY))?.token??null;return null!==r&&r!==e?r:null};export const queueBehindRefresh=()=>new Promise((e,r)=>{failedQueue.push({resolve:e,reject:r})});class SessionEndedError extends Error{constructor(e){super(e),this.name="SessionEndedError",Object.setPrototypeOf(this,SessionEndedError.prototype)}}const endsSession=e=>e instanceof SessionEndedError||axios.isAxiosError(e)&&(400===e.response?.status||401===e.response?.status),asString=(e,r)=>{if("string"!=typeof e||""===e)throw new Error(`The refresh response has no "${r}".`);return e},readWeborityTokens=e=>{const r=e??{};return{accessToken:asString(r.accessToken,"accessToken"),accessTokenExpiry:asString(r.accessTokenExpiration,"accessTokenExpiration"),refreshToken:asString(r.refreshToken,"refreshToken"),refreshTokenExpiry:asString(r.refreshTokenExpiration,"refreshTokenExpiration")}};export const storeReplacementSession=async e=>{let r;try{r=(auth?.refresh.readTokens??readWeborityTokens)(e)}catch(e){return void Logger.error("A session-replacing response carried no tokens:",getErrorMessage(e))}await storeToken(ACCESS_TOKEN_KEY,r.accessToken,r.accessTokenExpiry),await storeToken(REFRESH_TOKEN_KEY,r.refreshToken,r.refreshTokenExpiry)};const callRefreshEndpoint=async e=>{const r=await getToken(REFRESH_TOKEN_KEY);if(!r?.token)throw new SessionEndedError("No refresh token available");if(Date.parse(r.expiry)<=Date.now())throw new SessionEndedError("Refresh token expired");const o=await getToken(ACCESS_TOKEN_KEY),t={accessToken:o?.token??null,refreshToken:r.token},s=e.body?await e.body(t):t,n=e.headers?await e.headers():void 0;Logger.info("Refreshing the access token");const{data:a}=await publicClient.post(e.path,s,n?{headers:n}:void 0),i=(e.readTokens??readWeborityTokens)(a);if(await waitForSessionReplacement(),(await getToken(REFRESH_TOKEN_KEY))?.token!==r.token){const e=(await getToken(ACCESS_TOKEN_KEY))?.token;if(e)return Logger.info("Keeping the session that replaced this one during the refresh"),e}return await storeToken(ACCESS_TOKEN_KEY,i.accessToken,i.accessTokenExpiry),await storeToken(REFRESH_TOKEN_KEY,i.refreshToken,i.refreshTokenExpiry),Logger.info("Access token refreshed"),i.accessToken};export const refreshAccessToken=()=>{if(refreshTokenPromise)return refreshTokenPromise;const e=(async()=>{let e=null;try{const{refresh:r}=requireAuth().auth;e=(await getToken(ACCESS_TOKEN_KEY))?.token??null;const o=await callRefreshEndpoint(r);return processQueue(null,o),o}catch(r){if(endsSession(r)){await waitForSessionReplacement();const r=await currentTokenIfReplaced(e);if(r)return Logger.info("The session was replaced during the refresh; continuing with the new one"),processQueue(null,r),r}const o=axios.isAxiosError(r)?r.response?.data:void 0;throw Logger.error("Token refresh failed:",o??getErrorMessage(r)),processQueue(r,null),endsSession(r)&&await endSessionAndLogout("rejected",axios.isAxiosError(r)?readSignOutReason(r.response?.headers):null),r}})().finally(()=>{refreshTokenPromise===e&&(refreshTokenPromise=null)});return refreshTokenPromise=e,e};
@@ -1 +1 @@
1
- "use strict";import axios,{AxiosHeaders}from"axios";import{ACCESS_TOKEN_KEY,getToken}from"../auth/authStore.js";import{getConfigValue}from"../config/index.js";import{Logger}from"../logger/index.js";import{getLastKnownNetworkStatus}from"../network/networkStatus.js";import"../types/axios.js";import{applyConfiguredBaseUrl}from"./baseUrl.js";import{applyAccountIdHeader,applyClientHeaders}from"./clientHeaders.js";import{logCurl}from"./curl.js";import{readMinAppVersion}from"./minAppVersion.js";import{sendFormDataAsMultipart}from"./multipart.js";import{applyRequestDefaults}from"./requestDefaults.js";import{responseBodyText}from"./responseBodyText.js";import{attachRetry}from"./retry.js";import{endSessionAndLogout,getAccountIdProvider,getErrorMessage,getRefreshPath,isRefreshInFlight,queueBehindRefresh,readSignOutReason,refreshAccessToken,resetRefreshState}from"./tokenRefresh.js";export{injectStore,injectUserAuth,resetRefreshState,SIGN_OUT_REASON_HEADER}from"./tokenRefresh.js";export class RequestOfflineError extends Error{constructor(e="Request blocked: device is offline"){super(e),this.name="RequestOfflineError",Object.setPrototypeOf(this,RequestOfflineError.prototype)}}class NoAccessTokenError extends Error{constructor(){super("No access token available"),this.name="NoAccessTokenError",Object.setPrototypeOf(this,NoAccessTokenError.prototype)}}export const SESSION_TERMINATION_CODES={TERMINATED:"SESSION_TERMINATED",EXPIRED:"SESSION_EXPIRED"};const TERMINATION_CODES=new Set(Object.values(SESSION_TERMINATION_CODES));export const SESSION_INVALID_HEADER="x-security-stamp-invalid";const hasSessionInvalidHeader=e=>{if(!e||"object"!=typeof e)return!1;const r=e.get,t="function"==typeof r?r.call(e,SESSION_INVALID_HEADER):e[SESSION_INVALID_HEADER];return"true"===String(t).toLowerCase()},getSessionTerminationCode=e=>{if(!e||"object"!=typeof e)return;const r=e,t=r.error,s=[r.code,r.errorCode,t&&"object"==typeof t?t.code:void 0];for(const e of s)if("string"==typeof e&&TERMINATION_CODES.has(e))return e},userClient=axios.create({headers:{"Content-Type":"application/json"}});readMinAppVersion(userClient),attachRetry(userClient);const setAuthHeader=(e,r)=>{e.headers instanceof AxiosHeaders?e.headers.set("Authorization",`Bearer ${r}`):e.headers=AxiosHeaders.from({...e.headers,Authorization:`Bearer ${r}`})},isRefreshTokenRequest=e=>{const r=getRefreshPath();return!!r&&!!e?.includes(r)};applyConfiguredBaseUrl(userClient),applyRequestDefaults(userClient),sendFormDataAsMultipart(userClient),userClient.interceptors.request.use(e=>(getConfigValue("logCurl")&&logCurl(e),e)),applyClientHeaders(userClient),userClient.interceptors.request.use(async e=>{if(!1===(await getLastKnownNetworkStatus()).isConnected)return Logger.warn(`Request blocked: device is offline. URL: ${e.url}`),Promise.reject(new RequestOfflineError);try{if(isRefreshTokenRequest(e.url))return e;const r=await getToken(ACCESS_TOKEN_KEY);if(!r?.token)throw new NoAccessTokenError;const t=Date.now(),s=Date.parse(r.expiry);if(s<=t+3e4){Logger.info("Access token expired or about to expire, refreshing before request");const r=await refreshAccessToken();return setAuthHeader(e,r),await applyAccountIdHeader(e.headers,getAccountIdProvider()),e}return setAuthHeader(e,r.token),await applyAccountIdHeader(e.headers,getAccountIdProvider()),e}catch(r){return r instanceof NoAccessTokenError?Logger.info(`Request not sent: signed out. URL: ${e.url}`):Logger.error("Failed to attach token:",getErrorMessage(r)),Promise.reject(r)}},e=>(Logger.error("Request error:",getErrorMessage(e)),Promise.reject(e))),userClient.interceptors.response.use(e=>e,async e=>{if(axios.isCancel(e))return Promise.reject(e);if(e instanceof RequestOfflineError||e instanceof NoAccessTokenError)return Promise.reject(e);if(!axios.isAxiosError(e))return Logger.error(`Non-axios error in response interceptor: ${getErrorMessage(e)}`),Promise.reject(e);const r=e,t=r.config;if(!r.response)return t?.skipErrorLog||Logger.info(`Network error or no response from server: ${r.message}, URL: ${t?.url}`),Promise.reject(e);if(401===r.response.status&&t&&!t._retry){if(isRefreshTokenRequest(t.url))return Promise.reject(e);const s=readSignOutReason(r.response.headers),o=getSessionTerminationCode(r.response.data)??(hasSessionInvalidHeader(r.response.headers)||null!==s?SESSION_TERMINATION_CODES.TERMINATED:void 0);if(o)return Logger.warn(`Session ${o}, logging out without refresh. URL: ${t.url}`),resetRefreshState(),await endSessionAndLogout("terminated",s),Promise.reject(e);if(Logger.warn(`Unauthorized URL: ${t.url}`),t._retry=!0,isRefreshInFlight())return queueBehindRefresh().then(e=>(Logger.info("Retrying request after token refresh:",t.url),setAuthHeader(t,e),userClient(t))).catch(e=>(Logger.error("Failed to retry request after token refresh:",getErrorMessage(e)),Promise.reject(e)));try{const e=await refreshAccessToken();return setAuthHeader(t,e),userClient(t)}catch(e){return Promise.reject(e)}}return t?.skipErrorLog||Logger.error(`Response error: ${responseBodyText(r.response?.data,r.message)}, URL: ${t?.url}, Status: ${r.response.status}`),Promise.reject(e)});export default userClient;
1
+ "use strict";import axios,{AxiosHeaders}from"axios";import{ACCESS_TOKEN_KEY,getToken}from"../auth/authStore.js";import{getConfigValue}from"../config/index.js";import{Logger}from"../logger/index.js";import{getLastKnownNetworkStatus}from"../network/networkStatus.js";import"../types/axios.js";import{applyConfiguredBaseUrl}from"./baseUrl.js";import{applyClientHeaders,readAccountId,stampAccountId}from"./clientHeaders.js";import{logCurl}from"./curl.js";import{readMinAppVersion}from"./minAppVersion.js";import{sendFormDataAsMultipart}from"./multipart.js";import{applyRequestDefaults}from"./requestDefaults.js";import{responseBodyText}from"./responseBodyText.js";import{attachRetry}from"./retry.js";import{beginSessionReplacement,currentTokenIfReplaced,endSessionAndLogout,getAccountIdProvider,getErrorMessage,getRefreshPath,isRefreshInFlight,queueBehindRefresh,readSignOutReason,refreshAccessToken,resetRefreshState,storeReplacementSession,waitForSessionReplacement}from"./tokenRefresh.js";import{isWorkspaceChangedResponse,WorkspaceChangedError}from"./workspace.js";export{injectStore,injectUserAuth,resetRefreshState,SIGN_OUT_REASON_HEADER}from"./tokenRefresh.js";export class RequestOfflineError extends Error{constructor(e="Request blocked: device is offline"){super(e),this.name="RequestOfflineError",Object.setPrototypeOf(this,RequestOfflineError.prototype)}}class NoAccessTokenError extends Error{constructor(){super("No access token available"),this.name="NoAccessTokenError",Object.setPrototypeOf(this,NoAccessTokenError.prototype)}}export const SESSION_TERMINATION_CODES={TERMINATED:"SESSION_TERMINATED",EXPIRED:"SESSION_EXPIRED"};const TERMINATION_CODES=new Set(Object.values(SESSION_TERMINATION_CODES));export const SESSION_INVALID_HEADER="x-security-stamp-invalid";const hasSessionInvalidHeader=e=>{if(!e||"object"!=typeof e)return!1;const r=e.get,t="function"==typeof r?r.call(e,SESSION_INVALID_HEADER):e[SESSION_INVALID_HEADER];return"true"===String(t).toLowerCase()},getSessionTerminationCode=e=>{if(!e||"object"!=typeof e)return;const r=e,t=r.error,s=[r.code,r.errorCode,t&&"object"==typeof t?t.code:void 0];for(const e of s)if("string"==typeof e&&TERMINATION_CODES.has(e))return e},endReplacement=e=>{e?._endReplacement?.(),e&&(e._endReplacement=void 0)},readSentToken=e=>{const r=e.headers instanceof AxiosHeaders?e.headers.get("Authorization"):void 0;return"string"==typeof r&&r.startsWith("Bearer ")?r.slice(7):null},userClient=axios.create({headers:{"Content-Type":"application/json"}});readMinAppVersion(userClient),attachRetry(userClient);const setAuthHeader=(e,r)=>{e.headers instanceof AxiosHeaders?e.headers.set("Authorization",`Bearer ${r}`):e.headers=AxiosHeaders.from({...e.headers,Authorization:`Bearer ${r}`})},isRefreshTokenRequest=e=>{const r=getRefreshPath();return!!r&&!!e?.includes(r)};userClient.interceptors.request.use(e=>(e.replacesSession&&!isRefreshTokenRequest(e.url)&&(e._endReplacement=beginSessionReplacement()),e)),applyConfiguredBaseUrl(userClient),applyRequestDefaults(userClient),sendFormDataAsMultipart(userClient),userClient.interceptors.request.use(e=>(getConfigValue("logCurl")&&logCurl(e),e)),applyClientHeaders(userClient),userClient.interceptors.request.use(async e=>{endReplacement(e);if(!1===(await getLastKnownNetworkStatus()).isConnected)return Logger.warn(`Request blocked: device is offline. URL: ${e.url}`),Promise.reject(new RequestOfflineError);try{if(isRefreshTokenRequest(e.url))return e;await stampAccountId(e,getAccountIdProvider());const r=await getToken(ACCESS_TOKEN_KEY);if(!r?.token)throw new NoAccessTokenError;const t=Date.now(),s=Date.parse(r.expiry);if(s<=t+3e4){Logger.info("Access token expired or about to expire, refreshing before request");const r=await refreshAccessToken();setAuthHeader(e,r)}else setAuthHeader(e,r.token);return e}catch(r){return r instanceof NoAccessTokenError?Logger.info(`Request not sent: signed out. URL: ${e.url}`):Logger.error("Failed to attach token:",getErrorMessage(r)),Promise.reject(r)}},e=>(Logger.error("Request error:",getErrorMessage(e)),Promise.reject(e))),userClient.interceptors.response.use(async e=>{const r=e.config;if(r._endReplacement)try{await storeReplacementSession(e.data)}finally{endReplacement(r)}return e},async e=>{if(endReplacement(e?.config),axios.isCancel(e))return Promise.reject(e);if(e instanceof RequestOfflineError||e instanceof NoAccessTokenError)return Promise.reject(e);if(!axios.isAxiosError(e))return Logger.error(`Non-axios error in response interceptor: ${getErrorMessage(e)}`),Promise.reject(e);const r=e,t=r.config;if(!r.response)return t?.skipErrorLog||Logger.info(`Network error or no response from server: ${r.message}, URL: ${t?.url}`),Promise.reject(e);if(isWorkspaceChangedResponse(r))return Logger.info(`Refused for another workspace. URL: ${t?.url}`),Promise.reject(new WorkspaceChangedError("Refused for another workspace",{response:r.response,config:t,cause:e}));if(401===r.response.status&&t&&!t._replayedWithCurrentToken&&!t.replacesSession&&!isRefreshTokenRequest(t.url)&&(await waitForSessionReplacement(),await currentTokenIfReplaced(readSentToken(t)))){const r=await readAccountId(getAccountIdProvider());return(t._accountId??null)!==r?(Logger.info(`Workspace changed in flight; not sent again. URL: ${t.url}`),Promise.reject(new WorkspaceChangedError("Workspace changed in flight",{config:t,cause:e}))):(Logger.info(`Session changed while the request was in flight; sending it again. URL: ${t.url}`),t._replayedWithCurrentToken=!0,userClient(t))}if(401===r.response.status&&t&&!t._retry){if(isRefreshTokenRequest(t.url))return Promise.reject(e);const s=readSignOutReason(r.response.headers),o=getSessionTerminationCode(r.response.data)??(hasSessionInvalidHeader(r.response.headers)||null!==s?SESSION_TERMINATION_CODES.TERMINATED:void 0);if(o)return Logger.warn(`Session ${o}, logging out without refresh. URL: ${t.url}`),resetRefreshState(),await endSessionAndLogout("terminated",s),Promise.reject(e);if(Logger.warn(`Unauthorized URL: ${t.url}`),t._retry=!0,isRefreshInFlight())return queueBehindRefresh().then(e=>(Logger.info("Retrying request after token refresh:",t.url),setAuthHeader(t,e),userClient(t))).catch(e=>(Logger.error("Failed to retry request after token refresh:",getErrorMessage(e)),Promise.reject(e)));try{const e=await refreshAccessToken();return setAuthHeader(t,e),userClient(t)}catch(e){return Promise.reject(e)}}return t?.skipErrorLog||Logger.error(`Response error: ${responseBodyText(r.response?.data,r.message)}, URL: ${t?.url}, Status: ${r.response.status}`),Promise.reject(e)});export default userClient;
@@ -0,0 +1 @@
1
+ "use strict";export const WORKSPACE_CHANGED_CODE="workspace_changed";const WORKSPACE_CHANGED_MESSAGE="This was started in another workspace. Switch back to it and try again.";export class WorkspaceChangedError extends Error{code="workspace_changed";constructor(e=WORKSPACE_CHANGED_MESSAGE,r={}){super(e),this.name="WorkspaceChangedError",this.response=r.response??{status:409,data:{code:"workspace_changed",message:e},headers:{}},this.config=r.config,this.cause=r.cause,Object.setPrototypeOf(this,WorkspaceChangedError.prototype)}}export const isWorkspaceChangedError=e=>e instanceof WorkspaceChangedError||"object"==typeof e&&null!==e&&("WorkspaceChangedError"===e.name||"workspace_changed"===e.code);export const isWorkspaceChangedResponse=e=>{const r=e?.response;if(409!==r?.status)return!1;const s=r.data;return"object"==typeof s&&null!==s&&"workspace_changed"===s.code};
@@ -1 +1 @@
1
- "use strict";export{ACCOUNT_ID_HEADER,CLIENT_BUILD_HEADER,CLIENT_KIND,CLIENT_KIND_HEADER,getClientBuild}from"./api/clientHeaders.js";export{buildCurl,logCurl}from"./api/curl.js";export{addMinAppVersionListener,getMinAppVersion,MIN_APP_VERSION_HEADER}from"./api/minAppVersion.js";export{default as publicClient}from"./api/publicClient.js";export{applyRequestDefaults,newCorrelationId}from"./api/requestDefaults.js";export{attachRetry,IDEMPOTENCY_KEY_HEADER,isNeverSentError,isRetryableFailure,isRetryableStatus,retryAfterMs}from"./api/retry.js";export{refreshAccessToken}from"./api/tokenRefresh.js";export{default as userClient,injectStore,injectUserAuth,RequestOfflineError,resetRefreshState,SESSION_TERMINATION_CODES,SIGN_OUT_REASON_HEADER}from"./api/userClient.js";export{ACCESS_TOKEN_KEY,addSessionEndedListener,clearSession,getSessionUser,getToken,LEGACY_REFRESH_TOKEN_LIFETIME_MS,REFRESH_TOKEN_KEY,removeSessionUser,removeToken,SESSION_USER_KEY,setKeychainImplementation,setLegacyTokenKeys,storeSessionUser,storeToken}from"./auth/authStore.js";export{decodeJWT,getJWTExpiry,isJWTExpired}from"./auth/jwt.js";export{getConfig,getConfigValue,resetConfig,setConfig}from"./config/index.js";export{DeepLink,parseDeepLink,useDeepLink}from"./deepLink/index.js";export{apiErrorMessage,CONTRACT_ERROR_CODE,extractApiError,isApiError,isNoResponse,NETWORK_CODE,OFFLINE_MESSAGE,REQUEST_CANCELED_CODE,SERVER_FAILURE_MESSAGE,TIMEOUT_CODE,TIMEOUT_MESSAGE,toFieldPath,UNEXPECTED_MESSAGE}from"./errors/index.js";export{AsYouType,addDays,clampNationalNumber,configureFormatters,countryFlagEmoji,detectPhoneCountry,diffMs,formatCompactNumber,formatCurrency,formatDate,formatDateDDMMMYYYY,formatDateISO,formatDatePattern,formatDateTime,formatMinor,formatNumber,formatPercent,formatPhone,formatPhoneAsTyped,formatRelative,formatRelativeTime,formatTime,formatTime12h,formatTimeInWindowsZone,formatTimeInZone,getCountries,getCountryCallingCode,getFormatterConfig,getInitials,getPhoneCountries,isDateAfter,isDateBefore,isSameDay,isSupportedCountry,isValidNationalNumber,isValidPhoneNumber,maxNationalNumberLength,normalizePhone,parsePhoneNumber,parsePhoneNumberFromString,splitPhoneNumber,startOfDay,validatePhoneNumberLength}from"./formatters/index.js";export{initWebority}from"./initSDK.js";export{initUserAuth}from"./initUserAuth.js";export{configureLogger,getDeviceContext,Logger,setDeviceContext,setRemoteLogger}from"./logger/index.js";export{crashlyticsRemoteLogger}from"./logger/crashlytics.js";export{addNetworkStatusListener,getNetworkStatus,setNetworkStatusImplementation,useNetworkStatus}from"./network/index.js";export{PUSH_STATUS}from"./push/status.js";export{isStorageAvailable,Storage,setStorageImplementation}from"./storage/index.js";export{encodeBase64}from"./utils/base64.js";export{isAadhaar,isAlphanumeric,isBetween,isEmail,isGstin,isHexColor,isIfsc,isIndianMobile,isIndianPincode,isInteger,isNonEmpty,isNumeric,isPan,isPhone,isStrongPassword,isUrl,maxLength,minLength}from"./validators/index.js";export{isBuildBelowMinimum,parseBuildNumber,setDeviceInfoImplementation,useVersionCheck,VersionCheck}from"./versionCheck/index.js";
1
+ "use strict";export{ACCOUNT_ID_HEADER,CLIENT_BUILD_HEADER,CLIENT_KIND,CLIENT_KIND_HEADER,getClientBuild}from"./api/clientHeaders.js";export{buildCurl,logCurl}from"./api/curl.js";export{addMinAppVersionListener,getMinAppVersion,MIN_APP_VERSION_HEADER}from"./api/minAppVersion.js";export{default as publicClient}from"./api/publicClient.js";export{applyRequestDefaults,newCorrelationId}from"./api/requestDefaults.js";export{attachRetry,IDEMPOTENCY_KEY_HEADER,isNeverSentError,isRetryableFailure,isRetryableStatus,retryAfterMs}from"./api/retry.js";export{refreshAccessToken}from"./api/tokenRefresh.js";export{default as userClient,injectStore,injectUserAuth,RequestOfflineError,resetRefreshState,SESSION_TERMINATION_CODES,SIGN_OUT_REASON_HEADER}from"./api/userClient.js";export{isWorkspaceChangedError,WORKSPACE_CHANGED_CODE,WorkspaceChangedError}from"./api/workspace.js";export{ACCESS_TOKEN_KEY,addSessionEndedListener,clearSession,getSessionUser,getToken,LEGACY_REFRESH_TOKEN_LIFETIME_MS,REFRESH_TOKEN_KEY,removeSessionUser,removeToken,SESSION_USER_KEY,setKeychainImplementation,setLegacyTokenKeys,storeSessionUser,storeToken}from"./auth/authStore.js";export{decodeJWT,getJWTExpiry,isJWTExpired}from"./auth/jwt.js";export{getConfig,getConfigValue,resetConfig,setConfig}from"./config/index.js";export{DeepLink,parseDeepLink,useDeepLink}from"./deepLink/index.js";export{apiErrorMessage,CONTRACT_ERROR_CODE,extractApiError,isApiError,isNoResponse,NETWORK_CODE,OFFLINE_MESSAGE,REQUEST_CANCELED_CODE,SERVER_FAILURE_MESSAGE,TIMEOUT_CODE,TIMEOUT_MESSAGE,toFieldPath,UNEXPECTED_MESSAGE}from"./errors/index.js";export{AsYouType,addDays,clampNationalNumber,configureFormatters,countryFlagEmoji,detectPhoneCountry,diffMs,formatCompactNumber,formatCurrency,formatDate,formatDateDDMMMYYYY,formatDateISO,formatDatePattern,formatDateTime,formatMinor,formatNumber,formatPercent,formatPhone,formatPhoneAsTyped,formatRelative,formatRelativeTime,formatTime,formatTime12h,formatTimeInWindowsZone,formatTimeInZone,getCountries,getCountryCallingCode,getFormatterConfig,getInitials,getPhoneCountries,isDateAfter,isDateBefore,isSameDay,isSupportedCountry,isValidNationalNumber,isValidPhoneNumber,maxNationalNumberLength,normalizePhone,parsePhoneNumber,parsePhoneNumberFromString,splitPhoneNumber,startOfDay,validatePhoneNumberLength}from"./formatters/index.js";export{initWebority}from"./initSDK.js";export{initUserAuth}from"./initUserAuth.js";export{configureLogger,getDeviceContext,Logger,setDeviceContext,setRemoteLogger}from"./logger/index.js";export{crashlyticsRemoteLogger}from"./logger/crashlytics.js";export{addNetworkStatusListener,getNetworkStatus,setNetworkStatusImplementation,useNetworkStatus}from"./network/index.js";export{PUSH_STATUS}from"./push/status.js";export{isStorageAvailable,Storage,setStorageImplementation}from"./storage/index.js";export{encodeBase64}from"./utils/base64.js";export{isAadhaar,isAlphanumeric,isBetween,isEmail,isGstin,isHexColor,isIfsc,isIndianMobile,isIndianPincode,isInteger,isNonEmpty,isNumeric,isPan,isPhone,isStrongPassword,isUrl,maxLength,minLength}from"./validators/index.js";export{isBuildBelowMinimum,parseBuildNumber,setDeviceInfoImplementation,useVersionCheck,VersionCheck}from"./versionCheck/index.js";
@@ -1 +1 @@
1
- "use strict";import{extractApiError,REQUEST_CANCELED_CODE}from"../errors/extractApiError.js";const isDict=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),hasSilent=e=>isDict(e)&&!0===e.silent;export const isSilentRejection=e=>hasSilent(e)||hasSilent(e.arg)||isDict(e.arg)&&hasSilent(e.arg.originalArgs)||hasSilent(e.baseQueryMeta);export function errorToastMiddleware(e){const{showToast:t,ignoreCodes:r=[],ignoreStatuses:s=[401],dedupeMs:i=4e3,onRejected:n}=e,o=new Map;return e=>a=>c=>{const u=a(c);if(!isDict(c)||!isDict(c.meta))return u;const l=c.meta;if("rejected"!==l.requestStatus||!0===l.aborted||!0===l.condition)return u;const d=extractApiError(!0===l.rejectedWithValue?c.payload:c.error);if(d.code===REQUEST_CANCELED_CODE)return u;const f=n?.(c,d,e);if("silent"===f||isSilentRejection(l))return u;if("toast"!==f){if(null!==d.code&&r.includes(d.code))return u;if(s.includes(d.status))return u}return(e=>{if(i<=0)return!0;const t=Date.now();for(const[e,r]of o)t-r>=i&&o.delete(e);return!o.has(e)&&(o.set(e,t),!0)})(d.message)&&t(d.message,d),u}}
1
+ "use strict";import{WORKSPACE_CHANGED_CODE}from"../api/workspace.js";import{extractApiError,REQUEST_CANCELED_CODE}from"../errors/extractApiError.js";const isDict=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),hasSilent=e=>isDict(e)&&!0===e.silent;export const isSilentRejection=e=>hasSilent(e)||hasSilent(e.arg)||isDict(e.arg)&&hasSilent(e.arg.originalArgs)||hasSilent(e.baseQueryMeta);export function errorToastMiddleware(e){const{showToast:t,ignoreCodes:r=[],ignoreStatuses:s=[401],dedupeMs:i=4e3,onRejected:o}=e,n=new Map;return e=>a=>c=>{const u=a(c);if(!isDict(c)||!isDict(c.meta))return u;const l=c.meta;if("rejected"!==l.requestStatus||!0===l.aborted||!0===l.condition)return u;const E=extractApiError(!0===l.rejectedWithValue?c.payload:c.error);if(E.code===REQUEST_CANCELED_CODE)return u;const d=o?.(c,E,e);if("silent"===d||isSilentRejection(l))return u;if("toast"!==d){if(null!==E.code&&(E.code===WORKSPACE_CHANGED_CODE||r.includes(E.code)))return u;if(s.includes(E.status))return u}return(e=>{if(i<=0)return!0;const t=Date.now();for(const[e,r]of n)t-r>=i&&n.delete(e);return!n.has(e)&&(n.set(e,t),!0)})(E.message)&&t(E.message,E),u}}
@@ -18,12 +18,21 @@ export declare const getClientBuild: () => string | null;
18
18
  */
19
19
  export declare const applyClientHeaders: (client: AxiosInstance) => void;
20
20
  export type AccountIdProvider = () => string | null | undefined | Promise<string | null | undefined>;
21
+ /** The provider's current account id; an empty value reads as none. */
22
+ export declare const readAccountId: (provider: AccountIdProvider | undefined) => Promise<string | null>;
23
+ export interface AccountStampedConfig {
24
+ headers: {
25
+ get: (name: string) => unknown;
26
+ set: (name: string, value: string) => unknown;
27
+ };
28
+ /** The workspace the request was made in; `null` when it named none, unset until first sent. */
29
+ _accountId?: string | null;
30
+ }
21
31
  /**
22
- * Sets X-Account-Id from the app's provider on every send, overwriting, so a
23
- * request replayed after a refresh or an account switch carries the current
24
- * account rather than the one it first went out with. `null` sends none.
32
+ * Stamps X-Account-Id once, on the first send, and records it on the config. A request must
33
+ * never run in a workspace other than the one it was made in, so every resend (the retry
34
+ * policy, a 401 replay, a refresh replay) keeps the first stamp even after the user switched.
35
+ * A header the caller set itself (an outbox item naming its own workspace) wins over the provider.
25
36
  */
26
- export declare const applyAccountIdHeader: (headers: {
27
- set: (name: string, value: string) => unknown;
28
- }, provider: AccountIdProvider | undefined) => Promise<void>;
37
+ export declare const stampAccountId: (config: AccountStampedConfig, provider: AccountIdProvider | undefined) => Promise<void>;
29
38
  //# sourceMappingURL=clientHeaders.d.ts.map
@@ -42,8 +42,24 @@ export declare const readSignOutReason: (headers: unknown) => string | null;
42
42
  */
43
43
  export declare const endSessionAndLogout: (reason: SessionEndReason, signOutReason: string | null) => Promise<void>;
44
44
  export declare const isRefreshInFlight: () => boolean;
45
+ /** Opens the replacement window for one flagged request; call the returned function once it settles. */
46
+ export declare const beginSessionReplacement: () => (() => void);
47
+ /** Resolves at once when no session replacement is open, else once every open one has settled. */
48
+ export declare const waitForSessionReplacement: () => Promise<void>;
49
+ /**
50
+ * The stored access token when it is no longer `sentToken`: the session was refreshed or replaced
51
+ * while a request carrying `sentToken` was in flight, so that request's refusal says nothing about
52
+ * the session now held. Null when the token is unchanged or nothing is stored.
53
+ */
54
+ export declare const currentTokenIfReplaced: (sentToken: string | null) => Promise<string | null>;
45
55
  /** Wait for the in-flight refresh without joining it: resolved or rejected by processQueue. */
46
56
  export declare const queueBehindRefresh: () => Promise<string>;
57
+ /**
58
+ * Stores the session a flagged request's response carries, read the way refresh responses are,
59
+ * before the replacement window closes, so a request waiting on the window retries with the new
60
+ * token. A body without tokens is logged and left to the caller; a failed keychain write rejects.
61
+ */
62
+ export declare const storeReplacementSession: (data: unknown) => Promise<void>;
47
63
  /**
48
64
  * Refresh the access token, joining a refresh already in flight rather than
49
65
  * starting a second one. Every request queued behind it is replayed on success
@@ -0,0 +1,37 @@
1
+ import type { AxiosError, InternalAxiosRequestConfig } from 'axios';
2
+ /** The body `code` of the API's 409 for a request naming a workspace the session is not in. */
3
+ export declare const WORKSPACE_CHANGED_CODE = "workspace_changed";
4
+ interface WorkspaceChangedResponse {
5
+ status: number;
6
+ data: unknown;
7
+ headers: unknown;
8
+ }
9
+ /**
10
+ * A request was refused because it belongs to a workspace other than the one now held: the
11
+ * server answered 409 `workspace_changed`, or the user switched workspace while it was in flight
12
+ * so sending it again would run it in the new one. Never retried and never a logout.
13
+ *
14
+ * It carries the server's 409 as `response`, or one in the same shape when the client held the
15
+ * request back, so `extractApiError` reads `code: 'workspace_changed'` and the download module
16
+ * reports `http-error` 409 either way.
17
+ */
18
+ export declare class WorkspaceChangedError extends Error {
19
+ readonly code = "workspace_changed";
20
+ readonly response: WorkspaceChangedResponse;
21
+ readonly config?: InternalAxiosRequestConfig;
22
+ readonly cause?: unknown;
23
+ constructor(message?: string, options?: {
24
+ response?: WorkspaceChangedResponse;
25
+ config?: InternalAxiosRequestConfig;
26
+ cause?: unknown;
27
+ });
28
+ }
29
+ /**
30
+ * By instanceof, by name (a second copy of the package fails instanceof), and by code: the
31
+ * `ApiError` `extractApiError` or the RTK Query base query makes of it carries the code too.
32
+ */
33
+ export declare const isWorkspaceChangedError: (error: unknown) => boolean;
34
+ /** A 409 whose body `code` is `workspace_changed`. */
35
+ export declare const isWorkspaceChangedResponse: (error: AxiosError | undefined) => boolean;
36
+ export {};
37
+ //# sourceMappingURL=workspace.d.ts.map
@@ -42,6 +42,7 @@ export { attachRetry, IDEMPOTENCY_KEY_HEADER, isNeverSentError, isRetryableFailu
42
42
  export { refreshAccessToken } from './api/tokenRefresh';
43
43
  export type { RefreshableStore, SessionTerminationCode } from './api/userClient';
44
44
  export { default as userClient, injectStore, injectUserAuth, RequestOfflineError, resetRefreshState, SESSION_TERMINATION_CODES, SIGN_OUT_REASON_HEADER } from './api/userClient';
45
+ export { isWorkspaceChangedError, WORKSPACE_CHANGED_CODE, WorkspaceChangedError } from './api/workspace';
45
46
  export type { KeychainLike, LegacyTokenKeys, SecureCredentials, SessionEndDetail, SessionEndedListener, SessionEndReason, StoredToken } from './auth/authStore';
46
47
  export { ACCESS_TOKEN_KEY, addSessionEndedListener, clearSession, getSessionUser, getToken, LEGACY_REFRESH_TOKEN_LIFETIME_MS, REFRESH_TOKEN_KEY, removeSessionUser, removeToken, SESSION_USER_KEY, setKeychainImplementation, setLegacyTokenKeys, storeSessionUser, storeToken } from './auth/authStore';
47
48
  export type { JwtClaims } from './auth/jwt';
@@ -37,7 +37,9 @@ export interface UserAuthOptions {
37
37
  refresh: TokenRefreshConfig;
38
38
  /**
39
39
  * The account the signed-in user is working in, sent as `X-Account-Id` on
40
- * every userClient request. Read on every send, so a switch applies at once.
40
+ * every userClient request. Read when a request is first sent and kept for its
41
+ * resends, so a request never runs in a workspace the user switched to after
42
+ * making it; a request that sets the header itself keeps its own value.
41
43
  * Omit it in a product whose API takes the account from the token alone.
42
44
  */
43
45
  accountId?: AccountIdProvider;
@@ -14,7 +14,8 @@ import { type ApiError } from '../errors/extractApiError';
14
14
  *
15
15
  * Never toasted: an aborted thunk or a cancelled request (a screen unmounting), an RTK Query
16
16
  * condition skip (the data is already cached), a 401 by default (the auth layer owns a dead
17
- * session). Identical messages are de-duplicated for `dedupeMs`, because a screen that fires
17
+ * session), a `workspace_changed` rejection (the request belonged to a workspace the user left).
18
+ * Identical messages are de-duplicated for `dedupeMs`, because a screen that fires
18
19
  * four fetches and loses the network would otherwise stack four copies of one sentence.
19
20
  *
20
21
  * `onRejected` is the product's say over one rejection, run before the default rules:
@@ -3,6 +3,13 @@ declare module 'axios' {
3
3
  interface AxiosRequestConfig {
4
4
  /** When true, the library's response-error interceptors do not log this request's failure. */
5
5
  skipErrorLog?: boolean;
6
+ /**
7
+ * The request ends the current session and answers with a new one in the refresh
8
+ * response's shape (a workspace switch, a reissue after a security change). userClient
9
+ * stores those tokens before the response resolves, and a request refused meanwhile for
10
+ * the old session waits for them and is sent again instead of ending the session.
11
+ */
12
+ replacesSession?: boolean;
6
13
  }
7
14
  }
8
15
  //# sourceMappingURL=axios.d.ts.map
@@ -18,12 +18,21 @@ export declare const getClientBuild: () => string | null;
18
18
  */
19
19
  export declare const applyClientHeaders: (client: AxiosInstance) => void;
20
20
  export type AccountIdProvider = () => string | null | undefined | Promise<string | null | undefined>;
21
+ /** The provider's current account id; an empty value reads as none. */
22
+ export declare const readAccountId: (provider: AccountIdProvider | undefined) => Promise<string | null>;
23
+ export interface AccountStampedConfig {
24
+ headers: {
25
+ get: (name: string) => unknown;
26
+ set: (name: string, value: string) => unknown;
27
+ };
28
+ /** The workspace the request was made in; `null` when it named none, unset until first sent. */
29
+ _accountId?: string | null;
30
+ }
21
31
  /**
22
- * Sets X-Account-Id from the app's provider on every send, overwriting, so a
23
- * request replayed after a refresh or an account switch carries the current
24
- * account rather than the one it first went out with. `null` sends none.
32
+ * Stamps X-Account-Id once, on the first send, and records it on the config. A request must
33
+ * never run in a workspace other than the one it was made in, so every resend (the retry
34
+ * policy, a 401 replay, a refresh replay) keeps the first stamp even after the user switched.
35
+ * A header the caller set itself (an outbox item naming its own workspace) wins over the provider.
25
36
  */
26
- export declare const applyAccountIdHeader: (headers: {
27
- set: (name: string, value: string) => unknown;
28
- }, provider: AccountIdProvider | undefined) => Promise<void>;
37
+ export declare const stampAccountId: (config: AccountStampedConfig, provider: AccountIdProvider | undefined) => Promise<void>;
29
38
  //# sourceMappingURL=clientHeaders.d.ts.map
@@ -42,8 +42,24 @@ export declare const readSignOutReason: (headers: unknown) => string | null;
42
42
  */
43
43
  export declare const endSessionAndLogout: (reason: SessionEndReason, signOutReason: string | null) => Promise<void>;
44
44
  export declare const isRefreshInFlight: () => boolean;
45
+ /** Opens the replacement window for one flagged request; call the returned function once it settles. */
46
+ export declare const beginSessionReplacement: () => (() => void);
47
+ /** Resolves at once when no session replacement is open, else once every open one has settled. */
48
+ export declare const waitForSessionReplacement: () => Promise<void>;
49
+ /**
50
+ * The stored access token when it is no longer `sentToken`: the session was refreshed or replaced
51
+ * while a request carrying `sentToken` was in flight, so that request's refusal says nothing about
52
+ * the session now held. Null when the token is unchanged or nothing is stored.
53
+ */
54
+ export declare const currentTokenIfReplaced: (sentToken: string | null) => Promise<string | null>;
45
55
  /** Wait for the in-flight refresh without joining it: resolved or rejected by processQueue. */
46
56
  export declare const queueBehindRefresh: () => Promise<string>;
57
+ /**
58
+ * Stores the session a flagged request's response carries, read the way refresh responses are,
59
+ * before the replacement window closes, so a request waiting on the window retries with the new
60
+ * token. A body without tokens is logged and left to the caller; a failed keychain write rejects.
61
+ */
62
+ export declare const storeReplacementSession: (data: unknown) => Promise<void>;
47
63
  /**
48
64
  * Refresh the access token, joining a refresh already in flight rather than
49
65
  * starting a second one. Every request queued behind it is replayed on success
@@ -0,0 +1,37 @@
1
+ import type { AxiosError, InternalAxiosRequestConfig } from 'axios';
2
+ /** The body `code` of the API's 409 for a request naming a workspace the session is not in. */
3
+ export declare const WORKSPACE_CHANGED_CODE = "workspace_changed";
4
+ interface WorkspaceChangedResponse {
5
+ status: number;
6
+ data: unknown;
7
+ headers: unknown;
8
+ }
9
+ /**
10
+ * A request was refused because it belongs to a workspace other than the one now held: the
11
+ * server answered 409 `workspace_changed`, or the user switched workspace while it was in flight
12
+ * so sending it again would run it in the new one. Never retried and never a logout.
13
+ *
14
+ * It carries the server's 409 as `response`, or one in the same shape when the client held the
15
+ * request back, so `extractApiError` reads `code: 'workspace_changed'` and the download module
16
+ * reports `http-error` 409 either way.
17
+ */
18
+ export declare class WorkspaceChangedError extends Error {
19
+ readonly code = "workspace_changed";
20
+ readonly response: WorkspaceChangedResponse;
21
+ readonly config?: InternalAxiosRequestConfig;
22
+ readonly cause?: unknown;
23
+ constructor(message?: string, options?: {
24
+ response?: WorkspaceChangedResponse;
25
+ config?: InternalAxiosRequestConfig;
26
+ cause?: unknown;
27
+ });
28
+ }
29
+ /**
30
+ * By instanceof, by name (a second copy of the package fails instanceof), and by code: the
31
+ * `ApiError` `extractApiError` or the RTK Query base query makes of it carries the code too.
32
+ */
33
+ export declare const isWorkspaceChangedError: (error: unknown) => boolean;
34
+ /** A 409 whose body `code` is `workspace_changed`. */
35
+ export declare const isWorkspaceChangedResponse: (error: AxiosError | undefined) => boolean;
36
+ export {};
37
+ //# sourceMappingURL=workspace.d.ts.map
@@ -42,6 +42,7 @@ export { attachRetry, IDEMPOTENCY_KEY_HEADER, isNeverSentError, isRetryableFailu
42
42
  export { refreshAccessToken } from './api/tokenRefresh.js';
43
43
  export type { RefreshableStore, SessionTerminationCode } from './api/userClient.js';
44
44
  export { default as userClient, injectStore, injectUserAuth, RequestOfflineError, resetRefreshState, SESSION_TERMINATION_CODES, SIGN_OUT_REASON_HEADER } from './api/userClient.js';
45
+ export { isWorkspaceChangedError, WORKSPACE_CHANGED_CODE, WorkspaceChangedError } from './api/workspace.js';
45
46
  export type { KeychainLike, LegacyTokenKeys, SecureCredentials, SessionEndDetail, SessionEndedListener, SessionEndReason, StoredToken } from './auth/authStore.js';
46
47
  export { ACCESS_TOKEN_KEY, addSessionEndedListener, clearSession, getSessionUser, getToken, LEGACY_REFRESH_TOKEN_LIFETIME_MS, REFRESH_TOKEN_KEY, removeSessionUser, removeToken, SESSION_USER_KEY, setKeychainImplementation, setLegacyTokenKeys, storeSessionUser, storeToken } from './auth/authStore.js';
47
48
  export type { JwtClaims } from './auth/jwt.js';
@@ -37,7 +37,9 @@ export interface UserAuthOptions {
37
37
  refresh: TokenRefreshConfig;
38
38
  /**
39
39
  * The account the signed-in user is working in, sent as `X-Account-Id` on
40
- * every userClient request. Read on every send, so a switch applies at once.
40
+ * every userClient request. Read when a request is first sent and kept for its
41
+ * resends, so a request never runs in a workspace the user switched to after
42
+ * making it; a request that sets the header itself keeps its own value.
41
43
  * Omit it in a product whose API takes the account from the token alone.
42
44
  */
43
45
  accountId?: AccountIdProvider;
@@ -14,7 +14,8 @@ import { type ApiError } from '../errors/extractApiError.js';
14
14
  *
15
15
  * Never toasted: an aborted thunk or a cancelled request (a screen unmounting), an RTK Query
16
16
  * condition skip (the data is already cached), a 401 by default (the auth layer owns a dead
17
- * session). Identical messages are de-duplicated for `dedupeMs`, because a screen that fires
17
+ * session), a `workspace_changed` rejection (the request belonged to a workspace the user left).
18
+ * Identical messages are de-duplicated for `dedupeMs`, because a screen that fires
18
19
  * four fetches and loses the network would otherwise stack four copies of one sentence.
19
20
  *
20
21
  * `onRejected` is the product's say over one rejection, run before the default rules:
@@ -3,6 +3,13 @@ declare module 'axios' {
3
3
  interface AxiosRequestConfig {
4
4
  /** When true, the library's response-error interceptors do not log this request's failure. */
5
5
  skipErrorLog?: boolean;
6
+ /**
7
+ * The request ends the current session and answers with a new one in the refresh
8
+ * response's shape (a workspace switch, a reissue after a security change). userClient
9
+ * stores those tokens before the response resolves, and a request refused meanwhile for
10
+ * the old session waits for them and is sent again instead of ending the session.
11
+ */
12
+ replacesSession?: boolean;
6
13
  }
7
14
  }
8
15
  //# sourceMappingURL=axios.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webority/mobile-core",
3
- "version": "0.8.2",
3
+ "version": "0.9.0",
4
4
  "description": "Platform layer for Webority React Native apps: HTTP clients, auth/token storage, config, logging, formatters, validators, network status, permissions, storage, version checks and over-the-air updates. No UI.",
5
5
  "keywords": [
6
6
  "react-native",