UNPKG

@altostra/core

Version:

Core library for shared types and logic

1 lines 5.02 kB
"use strict";var _ServiceClientBase_instances,_ServiceClientBase_axios,_ServiceClientBase_wrapAuthorizationErrors,_ServiceClientBase_createValidationAssertion,__awaiter=this&&this.__awaiter||function(e,r,t,i){return new(t||(t=Promise))((function(a,s){function o(e){try{c(i.next(e))}catch(e){s(e)}}function n(e){try{c(i.throw(e))}catch(e){s(e)}}function c(e){var r;e.done?a(e.value):(r=e.value,r instanceof t?r:new t((function(e){e(r)}))).then(o,n)}c((i=i.apply(e,r||[])).next())}))},__classPrivateFieldSet=this&&this.__classPrivateFieldSet||function(e,r,t,i,a){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!a)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof r?e!==r||!a:!r.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?a.call(e,t):a?a.value=t:r.set(e,t),t},__classPrivateFieldGet=this&&this.__classPrivateFieldGet||function(e,r,t,i){if("a"===t&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof r?e!==r||!i:!r.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===t?i:"a"===t?i.call(e):i?i.value:r.get(e)},__rest=this&&this.__rest||function(e,r){var t={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&r.indexOf(i)<0&&(t[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(i=Object.getOwnPropertySymbols(e);a<i.length;a++)r.indexOf(i[a])<0&&Object.prototype.propertyIsEnumerable.call(e,i[a])&&(t[i[a]]=e[i[a]])}return t},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.ServiceClientBase=void 0;const UserFacingError_1=require("../../../common/Errors/UserFacingError"),Logging_1=require("../../../common/Logging"),Axios_1=require("../../../common/Utils/Axios"),Object_1=require("../../../common/Utils/Object"),type_validations_1=require("@altostra/type-validations"),axios_1=__importDefault(require("axios")),common_1=require("../common");class ServiceClientBase{constructor({serviceName:e,axios:r=axios_1.default.create(),logger:t=(0,Logging_1.nullLogger)(void 0,Logging_1.operationLoggingSeverities),supportedFeatures:i,errorMapping:a={},wrapAuthorizationErrors:s=!0}={}){var o,n;_ServiceClientBase_instances.add(this),_ServiceClientBase_axios.set(this,void 0),_ServiceClientBase_wrapAuthorizationErrors.set(this,void 0),__classPrivateFieldSet(this,_ServiceClientBase_axios,r,"f"),__classPrivateFieldSet(this,_ServiceClientBase_wrapAuthorizationErrors,s,"f"),this.serviceName=null!==(n=null!=e?e:null===(o=this.constructor)||void 0===o?void 0:o.name)&&void 0!==n?n:"Unknown service",this._logger=t.appendSource(this.serviceName),this._logger.appendMetadata({serviceName:this.serviceName}),this._errorMapping=a,(null==i?void 0:i.length)&&(__classPrivateFieldGet(this,_ServiceClientBase_axios,"f").defaults.headers[common_1.SUPPORTED_FEATURES_HEADER]=i.map(encodeURIComponent).join(" "))}_withLogging(e,r,t,i){return(0,Logging_1.withOperationLogging)(this._logger,e,r,t,i)}_request(e){var r,{request:t,errorWrapping:i={},verboseErrorData:a}=e,s=__rest(e,["request","errorWrapping","verboseErrorData"]);return __awaiter(this,void 0,void 0,(function*(){const e="dataValidator"in s?s.dataValidator:__classPrivateFieldGet(this,_ServiceClientBase_instances,"m",_ServiceClientBase_createValidationAssertion).call(this,s.dataValidation);try{const{data:r}=yield t(__classPrivateFieldGet(this,_ServiceClientBase_axios,"f"));return e(r),r}catch(e){const t=__classPrivateFieldGet(this,_ServiceClientBase_wrapAuthorizationErrors,"f")&&(0,Axios_1.isAxiosError)(e)&&401===(null===(r=e.response)||void 0===r?void 0:r.status),s=UserFacingError_1.UserFacingError.wrapError(e,Object.assign(Object.assign({category:t?"user-fault":"server-fault",type:t?"unauthorized":"server-error"},!t&&i),{serializedGetter:Axios_1.axiosSerializedError,data:Object.assign({serviceName:this.serviceName},(0,Object_1.isObject)(i.data)&&i.data),verboseData:Object.assign(Object.assign({},a),(0,Object_1.isObject)(i.verboseData)&&i.verboseData)}));if(s.type&&s.type in this._errorMapping){const e=this._errorMapping[s.type],r="string"==typeof e?e:yield Promise.resolve(e(s));throw"string"!=typeof r?r:UserFacingError_1.UserFacingError.wrapError(s,{forceWrap:!0,message:r,category:s.category,type:s.type,data:s.data,verboseData:s.verboseData,code:s.code})}throw s}}))}}exports.ServiceClientBase=ServiceClientBase,_ServiceClientBase_axios=new WeakMap,_ServiceClientBase_wrapAuthorizationErrors=new WeakMap,_ServiceClientBase_instances=new WeakSet,_ServiceClientBase_createValidationAssertion=function(e){return(0,type_validations_1.assertBy)(e,(0,common_1.createServiceErrorFactory)(this.serviceName,isCLI()?"cli":"other"))};const altoArgv1RX=/(?:\/bin\/alto|\\bin\\alto)(?:\.js)?$/;function isCLI(){return process.argv.length>1&&altoArgv1RX.test(process.argv[1])}