UNPKG

@altostra/core

Version:

Core library for shared types and logic

1 lines • 9.96 kB
"use strict";var _AWSParameterStore_instances,_AWSParameterStore_logger,_AWSParameterStore_ssm,_AWSParameterStore_env,_AWSParameterStore_project,_AWSParameterStore_getAllPagesFromSSMByParams,_AWSParameterStore_getFromSSMByParameters,_AWSParameterStore_getAllPagesFromSSMByPath,_AWSParameterStore_generateParamDictionary,_AWSParameterStore_toEnvironmentSensitiveFormat,_AWSParameterStore_removeEnvironmentPrefix,_AWSParameterStore_mergeProjectAndCommonParams,_AWSParameterStore_populateFromParamCollection,_AWSParameterStore_isCommonParam,__awaiter=this&&this.__awaiter||function(e,r,t,a){return new(t||(t=Promise))((function(i,o){function s(e){try{m(a.next(e))}catch(e){o(e)}}function _(e){try{m(a.throw(e))}catch(e){o(e)}}function m(e){var r;e.done?i(e.value):(r=e.value,r instanceof t?r:new t((function(e){e(r)}))).then(s,_)}m((a=a.apply(e,r||[])).next())}))},__classPrivateFieldSet=this&&this.__classPrivateFieldSet||function(e,r,t,a,i){if("m"===a)throw new TypeError("Private method is not writable");if("a"===a&&!i)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof r?e!==r||!i:!r.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===a?i.call(e,t):i?i.value=t:r.set(e,t),t},__classPrivateFieldGet=this&&this.__classPrivateFieldGet||function(e,r,t,a){if("a"===t&&!a)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof r?e!==r||!a:!r.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===t?a:"a"===t?a.call(e):a?a.value:r.get(e)};Object.defineProperty(exports,"__esModule",{value:!0}),exports.AWSParameterStore=void 0;const from_1=require("@reactivex/ix-es2015-cjs/iterable/from"),flatmap_1=require("@reactivex/ix-es2015-cjs/iterable/operators/flatmap"),map_1=require("@reactivex/ix-es2015-cjs/iterable/operators/map"),aws_sdk_1=require("aws-sdk"),AltoError_1=require("../Errors/AltoError"),Logging_1=require("../Logging"),Object_1=require("../Utils/Object"),byNameCache={},byPathCache={},commonPrefix="common";class AWSParameterStore{constructor(e,{logger:r,environment:t,service:a}={}){var i,o;_AWSParameterStore_instances.add(this),_AWSParameterStore_logger.set(this,void 0),_AWSParameterStore_ssm.set(this,void 0),_AWSParameterStore_env.set(this,void 0),_AWSParameterStore_project.set(this,void 0),__classPrivateFieldSet(this,_AWSParameterStore_ssm,null!=e?e:new aws_sdk_1.SSM,"f"),__classPrivateFieldSet(this,_AWSParameterStore_logger,null!=r?r:(0,Logging_1.nullLogger)(),"f");const s=null!=t?t:null===(i=process.env.ALTO_ENVIRONMENT)||void 0===i?void 0:i.toLowerCase();if(__classPrivateFieldSet(this,_AWSParameterStore_project,null!=a?a:process.env.ALTO_PROJECT,"f"),!s||!__classPrivateFieldGet(this,_AWSParameterStore_project,"f"))throw AltoError_1.AltoError.create("Missing either project or environment environment-variables.\nPlease make sure the required environment-variable exist or that you've specified defaults.",{data:{ALTO_ENVIRONMENT:null!=s?s:null,ALTO_PROJECT:null!==(o=__classPrivateFieldGet(this,_AWSParameterStore_project,"f"))&&void 0!==o?o:null}});__classPrivateFieldSet(this,_AWSParameterStore_env,s,"f")}get(e){var r;return __awaiter(this,void 0,void 0,(function*(){if(e in byNameCache)return __classPrivateFieldGet(this,_AWSParameterStore_logger,"f").verbose(`Got param [${e}] from cache`),byNameCache[e];const t=[__classPrivateFieldGet(this,_AWSParameterStore_instances,"m",_AWSParameterStore_toEnvironmentSensitiveFormat).call(this,e,{isCommon:!1}),__classPrivateFieldGet(this,_AWSParameterStore_instances,"m",_AWSParameterStore_toEnvironmentSensitiveFormat).call(this,e,{isCommon:!0})],a=yield __classPrivateFieldGet(this,_AWSParameterStore_ssm,"f").getParameters({Names:t,WithDecryption:!0}).promise();if(!(null===(r=a.Parameters)||void 0===r?void 0:r.length))return void __classPrivateFieldGet(this,_AWSParameterStore_logger,"f").verbose(`Couldn't find param [${e}] from SSM`);let i;return i=a.Parameters.length>1&&__classPrivateFieldGet(this,_AWSParameterStore_instances,"m",_AWSParameterStore_isCommonParam).call(this,a.Parameters[0].Name)?a.Parameters[1].Value:a.Parameters[0].Value,byNameCache[e]=i,__classPrivateFieldGet(this,_AWSParameterStore_logger,"f").verbose(`Got param [${e}] from SSM`),i}))}getParameters(e){return __awaiter(this,void 0,void 0,(function*(){const r={},t=[],a=[];for(const i of e)i in byNameCache?(t.push(i),r[i]=byNameCache[i]):a.push(i);const i=a.map(e=>__classPrivateFieldGet(this,_AWSParameterStore_instances,"m",_AWSParameterStore_toEnvironmentSensitiveFormat).call(this,e,{isCommon:!1})),o=a.map(e=>__classPrivateFieldGet(this,_AWSParameterStore_instances,"m",_AWSParameterStore_toEnvironmentSensitiveFormat).call(this,e,{isCommon:!0}));__classPrivateFieldGet(this,_AWSParameterStore_logger,"f").verbose("renamed params by service name - "+JSON.stringify(i)),__classPrivateFieldGet(this,_AWSParameterStore_logger,"f").verbose("renamed params with common - "+JSON.stringify(o));const[s,_]=yield Promise.all([__classPrivateFieldGet(this,_AWSParameterStore_instances,"m",_AWSParameterStore_getAllPagesFromSSMByParams).call(this,i),__classPrivateFieldGet(this,_AWSParameterStore_instances,"m",_AWSParameterStore_getAllPagesFromSSMByParams).call(this,o)]),m=__classPrivateFieldGet(this,_AWSParameterStore_instances,"m",_AWSParameterStore_mergeProjectAndCommonParams).call(this,_,s),n=m?__classPrivateFieldGet(this,_AWSParameterStore_instances,"m",_AWSParameterStore_generateParamDictionary).call(this,m):{};return Object.assign(byNameCache,n),Object.assign(r,n),__classPrivateFieldGet(this,_AWSParameterStore_logger,"f").verbose(`Got ${t.length} from cache and ${a.length} from SSM`,{cachedParams:t,uncachedParams:a}),r}))}getParametersByPath(e,{isRecursive:r=!1}={}){var t;return __awaiter(this,void 0,void 0,(function*(){if(e in byPathCache)return __classPrivateFieldGet(this,_AWSParameterStore_logger,"f").verbose(`Got param by path [${e}] from cache`),null!==(t=byPathCache[e])&&void 0!==t?t:{};const a=__classPrivateFieldGet(this,_AWSParameterStore_instances,"m",_AWSParameterStore_toEnvironmentSensitiveFormat).call(this,e,{isCommon:!1}),i=__classPrivateFieldGet(this,_AWSParameterStore_instances,"m",_AWSParameterStore_toEnvironmentSensitiveFormat).call(this,e,{isCommon:!0});__classPrivateFieldGet(this,_AWSParameterStore_logger,"f").verbose("renamed params by service name - "+a),__classPrivateFieldGet(this,_AWSParameterStore_logger,"f").verbose("renamed params with common - "+i);const[o,s]=yield Promise.all([__classPrivateFieldGet(this,_AWSParameterStore_instances,"m",_AWSParameterStore_getAllPagesFromSSMByPath).call(this,a,r),__classPrivateFieldGet(this,_AWSParameterStore_instances,"m",_AWSParameterStore_getAllPagesFromSSMByPath).call(this,i,r)]),_=__classPrivateFieldGet(this,_AWSParameterStore_instances,"m",_AWSParameterStore_mergeProjectAndCommonParams).call(this,(0,from_1.from)(s),(0,from_1.from)(o)),m=_?__classPrivateFieldGet(this,_AWSParameterStore_instances,"m",_AWSParameterStore_generateParamDictionary).call(this,_):{};return __classPrivateFieldGet(this,_AWSParameterStore_logger,"f").verbose(`Got param by path [${e}] from SSM`),byPathCache[e]=m,m}))}}exports.AWSParameterStore=AWSParameterStore,_AWSParameterStore_logger=new WeakMap,_AWSParameterStore_ssm=new WeakMap,_AWSParameterStore_env=new WeakMap,_AWSParameterStore_project=new WeakMap,_AWSParameterStore_instances=new WeakSet,_AWSParameterStore_getAllPagesFromSSMByParams=function(e){return __awaiter(this,void 0,void 0,(function*(){const r=[];for(let t=0;t<e.length;t+=10)r.push(e.slice(t,t+10));const t=yield Promise.all(r.map(e=>__classPrivateFieldGet(this,_AWSParameterStore_instances,"m",_AWSParameterStore_getFromSSMByParameters).call(this,e)));return(0,from_1.from)(t).pipe((0,flatmap_1.flatMap)(e=>{var r;return null!==(r=e.Parameters)&&void 0!==r?r:[]}))}))},_AWSParameterStore_getFromSSMByParameters=function(e){return __awaiter(this,void 0,void 0,(function*(){return yield __classPrivateFieldGet(this,_AWSParameterStore_ssm,"f").getParameters({Names:e,WithDecryption:!0}).promise()}))},_AWSParameterStore_getAllPagesFromSSMByPath=function(e,r){var t;return __awaiter(this,void 0,void 0,(function*(){let a;const i=[];do{const o=yield __classPrivateFieldGet(this,_AWSParameterStore_ssm,"f").getParametersByPath({Path:e,Recursive:r,WithDecryption:!0,NextToken:a}).promise();(null===(t=o.Parameters)||void 0===t?void 0:t.values())&&i.push(...o.Parameters.values()),a=o.NextToken}while(a);return i}))},_AWSParameterStore_generateParamDictionary=function(e){return(0,Object_1.fromEntries)(Object.entries(e).map(([e,r])=>[e,r.Value]))},_AWSParameterStore_toEnvironmentSensitiveFormat=function(e,{isCommon:r}){return`/${__classPrivateFieldGet(this,_AWSParameterStore_env,"f")}/${r?"common":__classPrivateFieldGet(this,_AWSParameterStore_project,"f")}${e}`},_AWSParameterStore_removeEnvironmentPrefix=function(e){const r=__classPrivateFieldGet(this,_AWSParameterStore_instances,"m",_AWSParameterStore_isCommonParam).call(this,e)?"common":__classPrivateFieldGet(this,_AWSParameterStore_project,"f");return e.substring(__classPrivateFieldGet(this,_AWSParameterStore_env,"f").length+r.length+2)},_AWSParameterStore_mergeProjectAndCommonParams=function(e,r){const t={};return __classPrivateFieldGet(this,_AWSParameterStore_instances,"m",_AWSParameterStore_populateFromParamCollection).call(this,t,e),__classPrivateFieldGet(this,_AWSParameterStore_instances,"m",_AWSParameterStore_populateFromParamCollection).call(this,t,r),t},_AWSParameterStore_populateFromParamCollection=function(e,r){Object.assign(e,...r.pipe((0,map_1.map)(e=>({[__classPrivateFieldGet(this,_AWSParameterStore_instances,"m",_AWSParameterStore_removeEnvironmentPrefix).call(this,e.Name)]:e}))))},_AWSParameterStore_isCommonParam=function(e){return e.startsWith(`/${__classPrivateFieldGet(this,_AWSParameterStore_env,"f")}/common`)};