UNPKG

@frontitude/cli

Version:

The Frontitude CLI enables product teams to integrate their code with Frontitude (frontitude.com), thus creating a single source of truth for their product copy, from design to development.

1 lines 1.53 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.fetchPolling=void 0;const tslib_1=require("tslib"),nativeFetch=require("node-fetch"),config=tslib_1.__importStar(require("../../common/config")),FT_SES_HEADER_NAME="X-FT-Ses",ACCESS_TOKEN_HEADER_NAME="Authorization",ACCESS_TOKEN_CONFIG_KEY="access-token",SESSION_ID_CONFIG_KEY="sessionId";function getRequestHeaders(e){const t="json"===e?{Accept:"application/json","Content-Type":"application/json"}:{},n=config.global.get("sessionId"),r=process.env.ACCESS_TOKEN||config.global.get("access-token");return r?t.Authorization=`Bearer ${r}`:n&&(t["X-FT-Ses"]=n),t}function fetch(e,t){const n=getRequestHeaders(t.type),r=Object.assign({},t,Object.keys(n).length>0?{headers:n}:{});return nativeFetch(e,r).then((e=>handleErrorResponse(e))).then((e=>deserializeResponse(e,r.type)))}async function handleErrorResponse(e){if(e.status>=400){const t=await e.text(),n=`HTTP_CODE_${e.status}`,r=new Error(`fetch error. [url] ${e.url} [code] ${e.status} [message] ${t}`);throw r.name=n,r}return e}function deserializeResponse(e,t){return"json"===t?e.text().then((function(e){return e?JSON.parse(e):{}})):e.text()}function fetchPolling(e,t){return new Promise(((n,r)=>{const s=setInterval((async()=>{try{const r=await fetch(e,t);if(!r)return;clearInterval(s),clearTimeout(o),n(r)}catch(e){if(e&&"HTTP_CODE_404"===e.name)return;clearInterval(s),clearTimeout(o),r(e)}}),1e3),o=setTimeout((()=>{clearInterval(s)}),9e5)}))}exports.default=fetch,exports.fetchPolling=fetchPolling;