@onylab/common-api 1.1.3 → 1.1.4

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.
@@ -680,8 +680,6 @@ declare module "util/FormatterUtil" {
680
680
  }
681
681
  declare module "util/AddressUtil" {
682
682
  export class AddressUtil {
683
- private static readonly ZIPCODES;
684
- private static readonly CITIES;
685
683
  private static readonly ZIPCODE_CITY;
686
684
  private static readonly REGIONS;
687
685
  private static readonly COUNTRIES;
@@ -1,2 +1,2 @@
1
- !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.SmilePlayerCommon=e():t.SmilePlayerCommon=e()}(global,(()=>(()=>{"use strict";var t={16:t=>{t.exports=require("emoji-regex")}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var i=e[r]={exports:{}};return t[r](i,i.exports,n),i.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};n.r(r),n.d(r,{Constant:()=>o,Exception:()=>i,Http:()=>a,Service:()=>u,Template:()=>s,Tool:()=>c,Util:()=>l});var o={};n.r(o),n.d(o,{Path:()=>p});var i={};n.r(i),n.d(i,{BadParameterException:()=>v,BadRequestException:()=>b,ConflictException:()=>w,DuplicateException:()=>S,ExternalApiException:()=>O,InternalException:()=>_,MainException:()=>d,NotImplementedException:()=>P,ObjectNotFoundException:()=>I,PageNotFoundException:()=>A,UnauthorizedException:()=>N});var a={};n.r(a),n.d(a,{AuthenticationMiddleware:()=>z,AuthorizationMiddleware:()=>G,HandlerController:()=>H,Server:()=>X});var u={};n.r(u),n.d(u,{EmailSenderService:()=>At,SmsSenderService:()=>ct});var s={};n.r(s),n.d(s,{TemplateEngine:()=>Pt});var c={};n.r(c),n.d(c,{Configuration:()=>Lt,Database:()=>Ut,Displayer:()=>Ht,Downloader:()=>zt,Env:()=>R,Environment:()=>F,FileSystem:()=>wt,Logger:()=>q,Retry:()=>rt});var l={};n.r(l),n.d(l,{AddressUtil:()=>Bt,DateUtil:()=>Vt,ExtractorUtil:()=>Jt,FormatterUtil:()=>Zt,GeneratorUtil:()=>mt,MathUtil:()=>$t,ObjectUtil:()=>Yt,PriceUtil:()=>Xt,StringUtil:()=>Wt,ValidatorUtil:()=>ot,asyncForEach:()=>dt,isNullOrUndefined:()=>U,wait:()=>yt});var f,p=function(){function t(){}return t.registerBasePath=function(e){void 0!==process.env.APP_HOME?t.BASE_PATH=process.env.APP_HOME+"/":t.BASE_PATH=e+(e.endsWith("/")?"":"/")},t.data=function(){return t.BASE_PATH+"data/"},t.db=function(){return t.storage()+"db/"},t.root=function(){return t.BASE_PATH},t.session=function(){return t.storage()+"session/"},t.storage=function(){return t.BASE_PATH+"storage/"},t.BASE_PATH="./",t}(),h=(f=function(t,e){return f=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},f(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}f(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),d=function(t){function e(n,r,o){var i=t.call(this,n)||this;return i.code=r,i.data=o,i.name="MainException","function"==typeof Error.captureStackTrace?Error.captureStackTrace(i,e):i.stack=new Error(n).stack,i}return h(e,t),e}(Error),y=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),v=function(t){function e(e,n){var r=t.call(this,e,400,n)||this;return r.name="BadParameterException",r}return y(e,t),e}(d),m=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),b=function(t){function e(e,n){var r=t.call(this,e,400,n)||this;return r.name="BadRequestException",r}return m(e,t),e}(d),g=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),w=function(t){function e(e,n){var r=t.call(this,e,409,n)||this;return r.name="ConflictException",r}return g(e,t),e}(d),E=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),S=function(t){function e(e,n){var r=t.call(this,e,409,n)||this;return r.name="DuplicateException",r}return E(e,t),e}(d),x=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),O=function(t){function e(e,n){var r=t.call(this,e,502,n)||this;return r.name="ExternalApiException",r}return x(e,t),e}(d),T=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),_=function(t){function e(e,n){var r=t.call(this,e,500,n)||this;return r.name="InternalException",r}return T(e,t),e}(d),C=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),P=function(t){function e(e,n){var r=t.call(this,e,501,n)||this;return r.name="NotImplementedException",r}return C(e,t),e}(d),j=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),I=function(t){function e(e,n){var r=t.call(this,e,404,n)||this;return r.name="ObjectNotFoundException",r}return j(e,t),e}(d),M=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),A=function(t){function e(e,n){var r=t.call(this,e,404,n)||this;return r.name="PageNotFoundException",r}return M(e,t),e}(d),D=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),N=function(t){function e(n,r){var o=t.call(this,n,e.ERROR_CODE,r)||this;return o.name="UnauthorizedException",o}return D(e,t),e.ERROR_CODE=401,e}(d);const L=require("@sentry/node"),k=require("@sentry/profiling-node");var R;!function(t){t.PRODUCTION="prod",t.DEVELOPMENT="dev",t.TEST="test"}(R||(R={}));var F=function(){function t(){}return t.getMode=function(){switch(process.env.NODE_ENV){case"dev":case"development":return R.DEVELOPMENT;case"prod":case"production":return R.PRODUCTION;case"test":return R.TEST}return void 0===process.env.APP_ID?R.DEVELOPMENT:R.PRODUCTION},t}(),U=function(t){return null==t},q=function(){function t(){}return t.init=function(t,e){F.getMode()===R.PRODUCTION&&(L.init({dsn:t,integrations:[L.captureConsoleIntegration({levels:["error","warn","log"]}),(0,k.nodeProfilingIntegration)()],environment:F.getMode(),maxBreadcrumbs:50,tracesSampleRate:0,profilesSampleRate:0}),L.setupExpressErrorHandler(e))},t.trace=function(t,e){[R.DEVELOPMENT,R.TEST].includes(F.getMode())?void 0===e?console.info(t):console.info(t,e):L.addBreadcrumb({category:"info",message:t,data:e,level:"info"})},t.debug=function(t,e){[R.DEVELOPMENT,R.TEST].includes(F.getMode())?void 0===e?console.log(t):console.log(t,e):L.addBreadcrumb({category:"debug",message:t,data:e,level:"debug"})},t.info=function(t,e){[R.DEVELOPMENT,R.TEST].includes(F.getMode())?void 0===e?console.info(t):console.info(t,e):L.withScope((function(n){void 0!==e&&n.setExtra("extra",JSON.stringify(e)),L.captureMessage(t)}))},t.warning=function(t,e){U(t.response)||("object"!=typeof e&&(e={}),e.requestErrorData=t.response.data),[R.DEVELOPMENT,R.TEST].includes(F.getMode())?void 0===e?console.warn(t):console.warn(t,e):L.withScope((function(n){void 0!==e&&n.setExtra("extra",JSON.stringify(e)),void 0!==t.data&&n.setExtra("data",JSON.stringify(t.data)),L.captureException(t)}))},t.error=function(t,e){[N.ERROR_CODE].includes(t.code)||(U(t.response)||("object"!=typeof e&&(e={}),e.requestErrorData=t.response.data),[R.DEVELOPMENT,R.TEST].includes(F.getMode())?void 0===e?console.error(t):console.error(t,e):L.withScope((function(n){void 0!==e&&n.setExtra("extra",JSON.stringify(e)),void 0!==t.data&&n.setExtra("data",JSON.stringify(t.data)),L.captureException(t)})))},t}(),H=function(){function t(){}return t.error=function(t,e,n){q.error(n);var r=void 0!==n.code&&null!==n.code?Number(n.code):500;e.status(!isNaN(r)&&Number(n.code)>=400&&Number(n.code)<=599?Number(n.code):500),e.json({code:n.code,message:n.message})},t}(),z=function(){function t(t){this.configuration=t}return t.prototype.handler=function(){var t=this;return function(e,n,r){try{var o=!1;if(o||void 0===t.configuration.jwt||(e.session={},o=!0),o||void 0===t.configuration.key||(o=t.authApiKey(e)),!o&&void 0!==t.configuration.session){var i=Object.keys(e.session);if(!Array.isArray(t.configuration.session.required))throw new N("session is not well formatted");t.configuration.session.required.forEach((function(t){if(!i.includes(t))throw new N("session is incomplete")})),o=!0}if(o||void 0===t.configuration.none||(o=t.authNone(e)),!o)throw new N("request is not authenticate");r()}catch(t){H.error(e,n,t)}}},t.prototype.authApiKey=function(t){if("string"!=typeof t.headers.Authorization||!t.headers.Authorization.startsWith("apiKey"))return!1;var e=t.headers.Authorization.split(" ");if(2!==e.length)throw new N("api key is not well formatted");if(e[1]!==this.configuration.key.secret)throw new N("api key is not valid");return t.session={},!0},t.prototype.authNone=function(t){return!(!Array.isArray(this.configuration.none.urlStartsWith)||void 0===this.configuration.none.urlStartsWith.find((function(e){var n;return null===(n=t.originalUrl)||void 0===n?void 0:n.startsWith(e)}))||(t.session={},0))},t}(),G=function(){function t(){}return t.prototype.can=function(t,e){},t}();const W=require("crypto"),Z=require("express"),B=require("cors"),V=require("compression"),J=require("helmet");var $=n.n(J);const Y=require("connect-timeout");var X=function(){function t(){}return t.prototype.create=function(e,n){return r=this,o=void 0,a=function(){var r,o;return function(t,e){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(s){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,s])}}}(this,(function(i){return void 0===this.app&&(r=n||t.DEFAULT_PORT,o="http://localhost:"+String(r),q.debug("start server on "+o),this.app=Z(),this.app.set("trust proxy",!0),this.app.use(V({level:-1})),this.app.use(Y("300s")),this.app.use(Z.json({inflate:!0,limit:"10mb",reviver:null,strict:!0,type:"application/json",verify:void 0})),this.app.use(Z.urlencoded({limit:"10mb"})),this.app.use(B({origin:[o].concat(e),credentials:!0})),this.app.use($()()),this.app.use(Z.json()),this.app.listen(r,(function(){q.debug("server is running on "+o)}))),[2,this.app]}))},new((i=void 0)||(i=Promise))((function(t,e){function n(t){try{s(a.next(t))}catch(t){e(t)}}function u(t){try{s(a.throw(t))}catch(t){e(t)}}function s(e){var r;e.done?t(e.value):(r=e.value,r instanceof i?r:new i((function(t){t(r)}))).then(n,u)}s((a=a.apply(r,o||[])).next())}));var r,o,i,a},t.prototype.getSessionSecret=function(e){return W.createHash("sha1").update(e+t.SALT).digest("hex")},t.DEFAULT_PORT=8080,t.SALT="03561b4a0fe7f125025",t}();const K=require("axios");var Q=n.n(K);const tt=require("luxon"),et=require("querystring"),nt=require("retry");var rt=function(){function t(){}return t.request=function(t){return e=this,n=arguments,o=function(t,e,n){var r;return void 0===e&&(e=2),function(t,e){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(s){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,s])}}}(this,(function(o){return r=nt.operation({retries:e,factor:1,minTimeout:0,maxTimeout:0,randomize:!1}),[2,new Promise((function(e,o){r.attempt((function(){t().then(e).catch((function(t){r.retry(t)?"function"==typeof n&&n(t):o(t)}))}))}))]}))},new((r=void 0)||(r=Promise))((function(t,i){function a(t){try{s(o.next(t))}catch(t){i(t)}}function u(t){try{s(o.throw(t))}catch(t){i(t)}}function s(e){var n;e.done?t(e.value):(n=e.value,n instanceof r?n:new r((function(t){t(n)}))).then(a,u)}s((o=o.apply(e,n||[])).next())}));var e,n,r,o},t}(),ot=function(){function t(){}return t.isEmail=function(t){return"string"==typeof t&&new RegExp("^[a-zA-Z0-9\\.!#$%&*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$","i").test(t)},t.isPhone=function(t){return"string"==typeof t&&new RegExp("^([+\\s0-9]{10,}(#[0-9]+)?)$").test(t)},t.isIntMobilePhone=function(t){var e=new RegExp("^\\+1[0-9]{10}$","i"),n=new RegExp("^\\+33(6|7)[0-9]{8}$","i"),r=new RegExp("^\\+1[0-9]{10}$","i");return e.test(t)||n.test(t)||r.test(t)},t.isNumber=function(t){return"number"==typeof t||"string"==typeof t&&new RegExp("^-?[0-9]+\\.?[0-9]*$").test(t)},t}();const it=require("iconv-lite");var at=function(){function t(){}return t.isUTF8=function(t){return!t||"utf8"===(t=t.toLowerCase())||"utf-8"===t},t.urlencode=function(e,n){if(!n||t.isUTF8(n))return encodeURIComponent(e);for(var r=(0,it.encode)(e,n),o="",i="",a=0;a<r.length;a++)1===(i=r[a].toString(16)).length&&(i="0"+i),o+="%"+i;return o.toUpperCase()},t}(),ut=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{s(r.next(t))}catch(t){i(t)}}function u(t){try{s(r.throw(t))}catch(t){i(t)}}function s(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,u)}s((r=r.apply(t,e||[])).next())}))},st=function(t,e){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(s){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,s])}}},ct=function(){function t(t,e){this.token=t,this.mode=e}return t.prototype.send=function(e,n,r){return ut(this,arguments,void 0,(function(e,n,r,o,i){var a,u=this;return void 0===o&&(o=!0),st(this,(function(s){switch(s.label){case 0:return 0===(a=this.checkPhoneFormat(r)).length?(q.warning(new v("no valid phone",{phones:r})),[2,Promise.resolve()]):(a.length>1&&(n.length>2*t.MESSAGE_MAX_LENGTH?n=n.substring(0,2*t.MESSAGE_MAX_LENGTH):n.length>t.MESSAGE_MAX_LENGTH&&n.length<=1.33*t.MESSAGE_MAX_LENGTH&&(n=n.substring(0,t.MESSAGE_MAX_LENGTH))),[4,rt.request((function(){return ut(u,void 0,void 0,(function(){var r,u,s;return st(this,(function(c){switch(c.label){case 0:return r={accessToken:this.token,emetteur:e,message:at.urlencode(n,"ISO-8859-15"),numero:a.map((function(t){return t.replace("+","")})).join(","),classe_msg:2,nbr_msg:Math.ceil(n.length/t.MESSAGE_MAX_LENGTH)},o&&(r.stop=1),void 0!==i&&(r.date_envoi=tt.DateTime.fromISO(i,{setZone:!0}).toFormat("ddMMyyyy-HH:mm")),u=tt.DateTime.fromISO(null!=i?i:(new Date).toISOString(),{setZone:!0}).setZone("Europe/Paris"),o?u.hour>=21?r.date_envoi=u.plus({day:1}).set({hour:9}).toFormat("ddMMyyyy-HH:mm"):u.hour<9&&(r.date_envoi=u.set({hour:9}).toFormat("ddMMyyyy-HH:mm")):u.hour<8&&(r.date_envoi=u.set({hour:8}).toFormat("ddMMyyyy-HH:mm")),this.mode!==R.TEST?[3,1]:(q.info("Simulation Mode: SMS has been sent",{params:r}),[3,3]);case 1:return this.mode===R.DEVELOPMENT&&(a=["+15145705214"]),[4,Q().post(t.BASE_API_URL+"sendSMS.do",et.stringify(r,"&","=",{encodeURIComponent:function(t){return t}}),{timeout:3e4})];case 2:if((s=c.sent()).data.length>0&&"0"!==s.data.trim().substring(0,1))throw new O("Error: "+s.data,r);c.label=3;case 3:return[2]}}))}))}),0,q.error.bind(q))]);case 1:return s.sent(),[2]}}))}))},t.prototype.checkPhoneFormat=function(t){return t.filter((function(t){return ot.isIntMobilePhone(t)}))},t.BASE_API_URL="https://api.smsmode.com/http/1.6/",t.MESSAGE_MAX_LENGTH=150,t}();const lt=require("path"),ft=require("mustache"),pt=require("lodash"),ht=require("fs");var dt=function(t,e){return n=void 0,r=void 0,i=function(){var n;return function(t,e){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(s){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,s])}}}(this,(function(r){switch(r.label){case 0:n=0,r.label=1;case 1:return n<t.length?[4,e(t[n])]:[3,4];case 2:r.sent(),r.label=3;case 3:return n++,[3,1];case 4:return[2]}}))},new((o=void 0)||(o=Promise))((function(t,e){function a(t){try{s(i.next(t))}catch(t){e(t)}}function u(t){try{s(i.throw(t))}catch(t){e(t)}}function s(e){var n;e.done?t(e.value):(n=e.value,n instanceof o?n:new o((function(t){t(n)}))).then(a,u)}s((i=i.apply(n,r||[])).next())}));var n,r,o,i},yt=function(t){return new Promise((function(e){return setTimeout(e,t)}))};const vt=require("color-name");var mt=function(){function t(){}return t.code=function(e){null==e&&(e=6);for(var n="";n.length<e;)n+=t.symbolUpperCases[t.int(0,t.symbolUpperCases.length-1)];return n},t.color=function(e){void 0===e&&(e=1);var n=t.rgbToHex(Math.round(255*e)),r="#000000"+n,o=Object.values(vt);if(0===o.length)return r;var i=o[t.int(0,o.length-1)];return 3!==i.length?r:"#"+t.rgbToHex(i[0])+t.rgbToHex(i[1])+t.rgbToHex(i[2])+n},t.rgbToHex=function(t){var e=t.toString(16);return 1===e.length?"0"+e:e},t.int=function(t,e){return null==t&&(t=0),null==e&&(e=Number.POSITIVE_INFINITY),t=Math.ceil(t),e=Math.floor(e),Math.floor(Math.random()*(e-t+1))+t},t.password=function(e){null==e&&(e=8);for(var n="";n.length<e;)switch(t.int(1,3)){case 1:n+=t.symbolUpperCases[t.int(0,t.symbolUpperCases.length-1)];break;case 2:n+=t.symbolLowerCases[t.int(0,t.symbolLowerCases.length-1)];break;default:n+=String(t.int(0,9))}return n},t.symbolUpperCases=["A","B","C","D","E","F","G","H","K","M","N","P","R","S","T","U","V","W","X","Y","Z"],t.symbolLowerCases=["a","b","c","d","e","f","g","h","k","m","n","p","r","s","t","u","v","w","x","y","z"],t}(),bt=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{s(r.next(t))}catch(t){i(t)}}function u(t){try{s(r.throw(t))}catch(t){i(t)}}function s(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,u)}s((r=r.apply(t,e||[])).next())}))},gt=function(t,e){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(s){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,s])}}},wt=function(){function t(){}return t.prototype.dirPath=function(t){var e=lt.resolve(t).lastIndexOf(lt.sep);return e<0?t:lt.resolve(lt.resolve(t).substr(0,e+1))+lt.sep},t.prototype.listFiles=function(t){return bt(this,void 0,void 0,(function(){var e,n,r,o=this;return gt(this,(function(i){switch(i.label){case 0:if(!this.isDir(t))throw new v(String(t)+" does not exist or is not a directory");return e=t.endsWith("/")?"":"/",n=ht.readdirSync(t),r=[],[4,dt(n,(function(n){return bt(o,void 0,void 0,(function(){return gt(this,(function(o){return this.isFile(t+e+n)&&r.push(t+e+n),[2]}))}))}))];case 1:return i.sent(),[2,r]}}))}))},t.prototype.randomFile=function(t,e){return bt(this,void 0,void 0,(function(){var n,r;return gt(this,(function(o){switch(o.label){case 0:return[4,this.listFiles(t)];case 1:return 0===(n=o.sent()).length?[2,void 0]:(r=void 0!==e?Math.max(e,0)%n.length:mt.int(0,n.length-1),[2,n[r]])}}))}))},t.prototype.move=function(t,e){return bt(this,void 0,void 0,(function(){return gt(this,(function(n){if(!this.isFile(t))throw new v(String(t)+" does not exist or is not a file");if(ht.mkdirSync(e,{recursive:!0}),!this.isDir(e))throw new v(String(e)+" does not exist or is not a directory");return[2,ht.renameSync(t,e+lt.basename(t))]}))}))},t.prototype.read=function(t){return bt(this,void 0,void 0,(function(){return gt(this,(function(e){if(!this.isFile(t))throw new v(String(t)+" does not exist or is not a file");return[2,ht.readFileSync(t,"utf8")]}))}))},t.prototype.readJson=function(t){return bt(this,void 0,void 0,(function(){var e;return gt(this,(function(n){switch(n.label){case 0:return[4,this.read(t)];case 1:if(e=n.sent(),!this.isJson(e))throw new v(String(t)+" does not contain JSON");return[2,JSON.parse(e)]}}))}))},t.prototype.readJsonFiles=function(t){return bt(this,void 0,void 0,(function(){var e,n,r,o=this;return gt(this,(function(i){switch(i.label){case 0:if(!this.isDir(t))throw new v(String(t)+" does not exist or is not a directory");return e=t.endsWith("/")?"":"/",n=ht.readdirSync(t),r=[],[4,dt(n,(function(n){return bt(o,void 0,void 0,(function(){var o,i,a;return gt(this,(function(u){switch(u.label){case 0:return this.isFile(t+e+n)&&n.endsWith(".json")?(i=(o=r).push,a={name:n},[4,this.readJson(t+e+n)]):[3,2];case 1:i.apply(o,[(a.data=u.sent(),a)]),u.label=2;case 2:return[2]}}))}))}))];case 1:return i.sent(),[2,r]}}))}))},t.prototype.write=function(t,e){return bt(this,void 0,void 0,(function(){var n;return gt(this,(function(r){return"",n="string"==typeof e||"number"==typeof e?String(e):JSON.stringify(e),ht.mkdirSync(this.dirPath(t),{recursive:!0}),ht.writeFileSync(t,n,{encoding:"utf8"}),[2,Promise.resolve()]}))}))},t.prototype.writeJson=function(t,e){return bt(this,void 0,void 0,(function(){return gt(this,(function(n){return[2,this.write(t,JSON.stringify(e))]}))}))},t.prototype.isDir=function(t){return ht.existsSync(t)&&ht.statSync(t).isDirectory()},t.prototype.isFile=function(t){return ht.existsSync(t)&&ht.statSync(t).isFile()},t.prototype.isJson=function(t){try{return JSON.parse(t),!0}catch(t){return!1}},t}();const Et=require("clean-css"),St=require("html-minifier-terser");var xt=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{s(r.next(t))}catch(t){i(t)}}function u(t){try{s(r.throw(t))}catch(t){i(t)}}function s(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,u)}s((r=r.apply(t,e||[])).next())}))},Ot=function(t,e){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(s){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,s])}}},Tt=function(){function t(){}return t.prototype.css=function(t){return xt(this,void 0,void 0,(function(){return Ot(this,(function(e){return[2,new Et({compatibility:"ie7",format:!1,level:1,sourceMap:!1}).minify(t).styles]}))}))},t.prototype.html=function(t){return xt(this,void 0,void 0,(function(){return Ot(this,(function(e){switch(e.label){case 0:return[4,(0,St.minify)(t,{collapseBooleanAttributes:!0,collapseInlineTagWhitespace:!0,collapseWhitespace:!0,continueOnParseError:!1,decodeEntities:!1,html5:!0,minifyCSS:!0,minifyJS:!0,noNewlinesBeforeTagClose:!0,preserveLineBreaks:!1,preventAttributesEscaping:!1,processConditionalComments:!1,quoteCharacter:'"',removeAttributeQuotes:!1,removeComments:!0,removeEmptyAttributes:!0,removeEmptyElements:!0,removeOptionalTags:!1,removeRedundantAttributes:!0,removeScriptTypeAttributes:!1,removeStyleLinkTypeAttributes:!1,removeTagWhitespace:!1})];case 1:return[2,e.sent()]}}))}))},t}(),_t=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{s(r.next(t))}catch(t){i(t)}}function u(t){try{s(r.throw(t))}catch(t){i(t)}}function s(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,u)}s((r=r.apply(t,e||[])).next())}))},Ct=function(t,e){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(s){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,s])}}},Pt=function(){function t(){this.minifier=new Tt}return t.prototype.render=function(t,e,n){return _t(this,void 0,void 0,(function(){var r,o,i,a,u,s=this;return Ct(this,(function(c){switch(c.label){case 0:return t.endsWith(".template")||(t+=".template"),r=(0,pt.cloneDeep)(e),o=lt.isAbsolute(t)?"":__dirname+lt.sep,[4,(new wt).read(o+t)];case 1:return i=c.sent(),a=[],(0,ft.parse)(i).forEach((function(t){t.length>=4&&"&"===t[0]&&t[1].startsWith("include:")&&a.push(t[1])})),a.length>0?(void 0===n?n=lt.dirname(o+t)+lt.sep:lt.isAbsolute(n)||(n=o+n),[4,dt(a,(function(t){return _t(s,void 0,void 0,(function(){var e,o,i,a;return Ct(this,(function(u){switch(u.label){case 0:return 3!==(e=t.split(":")).length||void 0===r[t]?[3,2]:(o=e[2],n.includes("/html")&&Object.keys(r[t]).forEach((function(e){r[t][e]=Array.isArray(r[t][e])?r[t][e].map((function(t){return t.replace(/(?:\r\n|\r|\n)/g,"<br>")})):r[t][e].replace(/(?:\r\n|\r|\n)/g,"<br>")})),i=r,a=t,[4,this.render(lt.resolve(n,o),r[t])]);case 1:i[a]=u.sent(),u.label=2;case 2:return[2]}}))}))}))]):[3,3];case 2:c.sent(),c.label=3;case 3:if((u=(0,ft.render)(i,r)).includes("{{")||u.includes("}}"))throw new w("template: missing data to render template",{templatePath:t,data:e});return[2,t.includes("html")?this.minifier.html(u):u]}}))}))},t}();const jt=require("node-mailjet");var It=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{s(r.next(t))}catch(t){i(t)}}function u(t){try{s(r.throw(t))}catch(t){i(t)}}function s(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,u)}s((r=r.apply(t,e||[])).next())}))},Mt=function(t,e){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(s){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,s])}}},At=function(){function t(t,e,n){this.templateEngine=new Pt,this.mailjet=new jt.Client({apiKey:t,apiSecret:e}),this.mode=n}return t.prototype.sendDeliveryDelay=function(t,e,n){return It(this,void 0,void 0,(function(){var r=this;return Mt(this,(function(o){switch(o.label){case 0:return[4,rt.request((function(){return It(r,void 0,void 0,(function(){var r,o;return Mt(this,(function(i){switch(i.label){case 0:return void 0===n.base.copyright&&(n.base.copyright={year:String((new Date).getUTCFullYear())}),[4,this.templateEngine.render("data/email/template/deliveryDelay",n,"data/email/element/text")];case 1:return r=i.sent(),[4,this.templateEngine.render("data/email/template/deliveryDelay",n,"data/email/element/html")];case 2:return o=i.sent(),[4,this.sendNotification(t,[{recipient:e,subject:n.base.subject,text:r,html:o}],!1)];case 3:return[2,i.sent()]}}))}))}),0,q.error.bind(q))];case 1:return[2,o.sent()]}}))}))},t.prototype.sendTrackDelivery=function(t,e,n){return It(this,void 0,void 0,(function(){var r=this;return Mt(this,(function(o){switch(o.label){case 0:return[4,rt.request((function(){return It(r,void 0,void 0,(function(){var r,o,i,a;return Mt(this,(function(u){switch(u.label){case 0:return[4,this.templateEngine.render("data/email/template/trackDelivery",n,"data/email/element/text")];case 1:return r=u.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:r,base:n.base})];case 2:return o=u.sent(),[4,this.templateEngine.render("data/email/template/trackDelivery",n,"data/email/element/html")];case 3:return i=u.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:i,base:n.base})];case 4:return a=u.sent(),[4,this.sendNotification(t,[{recipient:e,subject:n.base.subject,text:o,html:a}],!1)];case 5:return[2,u.sent()]}}))}))}),0,q.error.bind(q))];case 1:return[2,o.sent()]}}))}))},t.prototype.sendUserNotification=function(t,e,n){return It(this,arguments,void 0,(function(t,e,n,r,o){var i=this;return void 0===r&&(r=!0),Mt(this,(function(a){switch(a.label){case 0:return[4,rt.request((function(){return It(i,void 0,void 0,(function(){var i,a,u,s;return Mt(this,(function(c){switch(c.label){case 0:return[4,this.templateEngine.render("data/email/template/userNotification",n,"data/email/element/text")];case 1:return i=c.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:i,base:n.base,isCommercial:r})];case 2:return a=c.sent(),[4,this.templateEngine.render("data/email/template/userNotification",n,"data/email/element/html")];case 3:return u=c.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:u,base:n.base,isCommercial:r})];case 4:return s=c.sent(),[4,this.sendNotification(t,[{recipient:e,subject:n.base.subject,text:a,html:s}],r,o)];case 5:return[2,c.sent()]}}))}))}),0,q.error.bind(q))];case 1:return[2,a.sent()]}}))}))},t.prototype.sendUsersNotifications=function(t,e,n,r){return It(this,void 0,void 0,(function(){var o=this;return Mt(this,(function(i){switch(i.label){case 0:return[4,rt.request((function(){return It(o,void 0,void 0,(function(){var o,i=this;return Mt(this,(function(a){switch(a.label){case 0:return o=[],[4,dt(e,(function(t){return It(i,void 0,void 0,(function(){var e,r,i,a;return Mt(this,(function(u){switch(u.label){case 0:return[4,this.templateEngine.render("data/email/template/userNotification",t.data,"data/email/element/text")];case 1:return e=u.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:e,base:t.data.base,isCommercial:n})];case 2:return r=u.sent(),[4,this.templateEngine.render("data/email/template/userNotification",t.data,"data/email/element/html")];case 3:return i=u.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:i,base:t.data.base,isCommercial:n})];case 4:return a=u.sent(),o.push({recipient:t.recipient,subject:t.data.base.subject,text:r,html:a}),[2]}}))}))}))];case 1:return a.sent(),[4,this.sendNotification(t,o,n,r)];case 2:return[2,a.sent()]}}))}))}),0,q.error.bind(q))];case 1:return[2,i.sent()]}}))}))},t.prototype.sendDiscount=function(t,e,n){return It(this,arguments,void 0,(function(t,e,n,r,o){var i=this;return void 0===r&&(r=!0),Mt(this,(function(a){switch(a.label){case 0:return[4,rt.request((function(){return It(i,void 0,void 0,(function(){var i,a,u,s;return Mt(this,(function(c){switch(c.label){case 0:return[4,this.templateEngine.render("data/email/template/discount",n,"data/email/element/text")];case 1:return i=c.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:i,base:n.base,isCommercial:r})];case 2:return a=c.sent(),[4,this.templateEngine.render("data/email/template/discount",n,"data/email/element/html")];case 3:return u=c.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:u,base:n.base,isCommercial:r})];case 4:return s=c.sent(),[4,this.sendNotification(t,[{recipient:e,subject:n.base.subject,text:a,html:s}],r,o)];case 5:return[2,c.sent()]}}))}))}),0,q.error.bind(q))];case 1:return[2,a.sent()]}}))}))},t.prototype.sendDiscounts=function(t,e){return It(this,arguments,void 0,(function(t,e,n,r){var o=this;return void 0===n&&(n=!0),Mt(this,(function(i){switch(i.label){case 0:return[4,rt.request((function(){return It(o,void 0,void 0,(function(){var o,i=this;return Mt(this,(function(a){switch(a.label){case 0:return o=[],[4,dt(e,(function(t){return It(i,void 0,void 0,(function(){var e,r,i,a;return Mt(this,(function(u){switch(u.label){case 0:return[4,this.templateEngine.render("data/email/template/discount",t.data,"data/email/element/text")];case 1:return e=u.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:e,base:t.data.base,isCommercial:n})];case 2:return r=u.sent(),[4,this.templateEngine.render("data/email/template/discount",t.data,"data/email/element/html")];case 3:return i=u.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:i,base:t.data.base,isCommercial:n})];case 4:return a=u.sent(),o.push({recipient:t.recipient,subject:t.data.base.subject,text:r,html:a}),[2]}}))}))}))];case 1:return a.sent(),[4,this.sendNotification(t,o,n,r)];case 2:return[2,a.sent()]}}))}))}),0,q.error.bind(q))];case 1:return[2,i.sent()]}}))}))},t.prototype.sendNotification=function(t,e){return It(this,arguments,void 0,(function(t,e,n,r){var o,i,a=this;return void 0===n&&(n=!1),Mt(this,(function(u){switch(u.label){case 0:if(0===e.length)throw new v("email: missing messages");u.label=1;case 1:return u.trys.push([1,6,,7]),this.mode!==R.TEST?[3,2]:(q.info("Simulation Mode: Email has been sent",{sender:t,recipients:e.map((function(t){return t.recipient}))}),[3,5]);case 2:return o=[],[4,dt(e,(function(e){return It(a,void 0,void 0,(function(){return Mt(this,(function(i){return this.mode===R.DEVELOPMENT&&(e.recipient.contact="developer@onylab.com"),o.push({From:{Name:t.name,Email:t.contact},To:[{Name:e.recipient.name,Email:e.recipient.contact}],Subject:e.subject,TextPart:e.text,HTMLPart:e.html,Priority:n?0:2,customID:void 0===r?void 0:String(r)}),[2]}))}))}))];case 3:return u.sent(),[4,this.mailjet.post("send",{version:"v3.1"}).request({Messages:o})];case 4:u.sent(),u.label=5;case 5:return[3,7];case 6:throw i=u.sent(),new d(i.message,Number(i.statusCode));case 7:return[2]}}))}))},t}(),Dt=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{s(r.next(t))}catch(t){i(t)}}function u(t){try{s(r.throw(t))}catch(t){i(t)}}function s(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,u)}s((r=r.apply(t,e||[])).next())}))},Nt=function(t,e){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(s){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,s])}}},Lt=function(){function t(e,n){this.filesystem=new wt,void 0!==t.root&&t.root===e||(t.root=e,t.config=void 0);var r=void 0===n?F.getMode():n;void 0!==t.environment&&t.environment===r||(t.environment=void 0===n?F.getMode():n,t.config=void 0)}return t.prototype.full=function(){return Dt(this,void 0,void 0,(function(){return Nt(this,(function(e){switch(e.label){case 0:return[4,this.init()];case 1:return e.sent(),[2,t.config]}}))}))},t.prototype.init=function(){return Dt(this,void 0,void 0,(function(){var e,n,r,o;return Nt(this,(function(i){switch(i.label){case 0:return void 0!==t.config?[3,6]:void 0!==t.root?[3,1]:(t.config={},[3,6]);case 1:return e=t,[4,this.filesystem.readJson(t.root+"data/config.json")];case 2:if(e.config=i.sent(),![R.DEVELOPMENT,R.TEST].includes(t.environment))return[3,6];i.label=3;case 3:return i.trys.push([3,5,,6]),n=t,r=pt.merge,o=[t.config],[4,this.filesystem.readJson(t.root+"data/config_"+String(t.environment)+".json")];case 4:return n.config=r.apply(void 0,o.concat([i.sent()])),[3,6];case 5:return i.sent(),[3,6];case 6:return[2]}}))}))},t}();const kt=require("typeorm");var Rt=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{s(r.next(t))}catch(t){i(t)}}function u(t){try{s(r.throw(t))}catch(t){i(t)}}function s(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,u)}s((r=r.apply(t,e||[])).next())}))},Ft=function(t,e){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(s){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,s])}}},Ut=function(){function t(t){this.root=t}return t.prototype.connect=function(t,e){return Rt(this,void 0,void 0,(function(){var n,r;return Ft(this,(function(o){switch(o.label){case 0:return void 0!==this.db?[3,2]:[4,this.init()];case 1:o.sent(),o.label=2;case 2:return void 0===(n=this.db[t])?[3,4]:(n.entities=e,n.logging=["error"],n.logger=!0,n.bigNumberStrings=!1,void 0===n.timezone&&(n.timezone="Z"),void 0===n.charset&&(n.charset="UTF8_GENERAL_CI"),r=this,[4,(0,kt.createConnection)(n)]);case 3:return r.connection=o.sent(),[3,5];case 4:q.error(new v("bad connection name")),o.label=5;case 5:return[2]}}))}))},t.prototype.synchronize=function(){return Rt(this,void 0,void 0,(function(){return Ft(this,(function(t){switch(t.label){case 0:return void 0===this.connection?[3,2]:[4,this.connection.synchronize()];case 1:t.sent(),t.label=2;case 2:return[2]}}))}))},t.prototype.close=function(){return Rt(this,void 0,void 0,(function(){return Ft(this,(function(t){return[2,this.connection.close()]}))}))},t.prototype.init=function(){return Rt(this,void 0,void 0,(function(){var t,e;return Ft(this,(function(n){switch(n.label){case 0:return void 0!==this.root?[3,1]:(this.db={},[3,3]);case 1:return t=new wt,e=this,[4,t.readJson(this.root+"data/db.json")];case 2:e.db=n.sent(),n.label=3;case 3:return[2]}}))}))},t}();const qt=require("prettyjson");var Ht=function(){function t(){}return t.prototype.error=function(t){q.error(t)},t.prototype.info=function(t){q.trace(t)},t.prototype.json=function(t){q.trace(qt.render(t,{}))},t.prototype.success=function(t){q.trace(t)},t}(),zt=function(){function t(){this.fileSystem=new wt}return t.prototype.image=function(t,e,n){return r=this,o=void 0,a=function(){var r,o;return function(t,e){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(s){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,s])}}}(this,(function(i){switch(i.label){case 0:return void 0===n&&(n=W.randomBytes(20).toString("hex")+lt.extname(t)),[4,this.fileSystem.write(e+lt.sep+n,"")];case 1:return i.sent(),r=lt.resolve(e+lt.sep+n),o=ht.createWriteStream(r),[4,Q()({url:t,method:"GET",responseType:"stream"})];case 2:return i.sent().data.pipe(o),[2,new Promise((function(t,e){o.on("finish",(function(){return t(r)})),o.on("error",e)}))]}}))},new((i=void 0)||(i=Promise))((function(t,e){function n(t){try{s(a.next(t))}catch(t){e(t)}}function u(t){try{s(a.throw(t))}catch(t){e(t)}}function s(e){var r;e.done?t(e.value):(r=e.value,r instanceof i?r:new i((function(t){t(r)}))).then(n,u)}s((a=a.apply(r,o||[])).next())}));var r,o,i,a},t}();const Gt=require("fast-diff");var Wt=function(){function t(){}return t.escapeRegExp=function(t){return"string"!=typeof t?t:t.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")},t.hash=function(t,e){void 0===e&&(e=0);for(var n=3735928559^e,r=1103547991^e,o=0,i=void 0;o<t.length;o++)i=t.charCodeAt(o),n=Math.imul(n^i,2654435761),r=Math.imul(r^i,1597334677);return n=Math.imul(n^n>>>16,2246822507),n^=Math.imul(r^r>>>13,3266489909),r=Math.imul(r^r>>>16,2246822507),((r^=Math.imul(n^n>>>13,3266489909))>>>0).toString(16).padStart(8,"0")+(n>>>0).toString(16).padStart(8,"0")},t.nullable=function(t){return U(t)||"string"==typeof t&&0===t.length?null:t},t.removeMultiSpaces=function(t){return"string"!=typeof t?t:t.replace(/\s{2,}/g," ")},t.removeText=function(e,n){if("string"!=typeof e||"string"!=typeof n||0===n.length)return e;try{e=(e=e.replace(new RegExp(t.escapeRegExp(n),"ig"),"")).replace(new RegExp(t.escapeRegExp(n).replace(new RegExp("\\s","g"),"-"),"ig"),"")}catch(t){}return e},t.replace=function(e,n,r){if("string"!=typeof e)return e;if(n.length!==r.length)return e;var o=e;return n.forEach((function(e,n){o=o.replace(new RegExp(t.escapeRegExp(e),"ig"),r[n])})),o},t.slugify=function(t,e){return void 0===e&&(e=""),void 0===t?"":(0,pt.toLower)((0,pt.trim)((0,pt.deburr)(t)).replace(/[^0-9a-z\-\_]/gi,e))},t.truncate=function(t,e){return U(t)||t.length<=e?t:e<=3?"":t.slice(0,e-3)+"..."},t}(),Zt=function(){function t(){}return t.trim=function(t){return"string"==typeof t?t.trim():t},t.capitalize=function(e){var n=t.lower(e);return"string"==typeof n?n.split(" ").map((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})).join(" "):e},t.ucfirst=function(e){var n=t.lower(e);return"string"==typeof n?n.charAt(0).toUpperCase()+n.slice(1):e},t.lower=function(t){return"string"==typeof t?t.toLocaleLowerCase():t},t.upper=function(t){return"string"==typeof t?t.toLocaleUpperCase():t},t.phone=function(e,n,r){if(void 0===r&&(r="nat"),"string"==typeof e)switch(e=t.preformatPhone(e,n),r){case"nat":return t.phoneNat(e,n);case"int":return t.phoneInt(e,n)}return e},t.stripEmoji=function(t){var e=t;if("string"==typeof e)for(var r=n(16),o=void 0;null!==(o=r().exec(e));)try{e=(e=(e=e.replace(new RegExp(Wt.escapeRegExp(o[0]),"g"),"")).replace(new RegExp("\\s+","g")," ")).trim()}catch(t){}return e},t.stripExoticCharacters=function(t){return"string"==typeof t?t.replace("’","'").replace(/[\u0250-\ue007]+/g,"*"):t},t.preformatPhone=function(t,e){return t=t.trim().replace(/\s?\.?\-?\(?\)?/g,""),"fr"===e&&new RegExp("^[1-9]").test(t)&&9===t.length?"0"+t:t},t.phoneNat=function(t,e){if("fr"===e){if(t.startsWith("+330")?t=t.substring(3):t.startsWith("+33")?t="0"+t.substring(3):t.startsWith("0033")?t="0"+t.substring(4):t.startsWith("33")&&11===t.length&&(t="0"+t.substring(2)),10===t.length){var n=0;t=t.split("").map((function(t){return t+(++n%2==0?" ":"")})).join("").trim()}return t}return t},t.phoneInt=function(t,e){return t.startsWith("+")?t:"fr"===e?(t.startsWith("0")&&(t=t.substring(1)),"+33"+t):t},t}(),Bt=function(){function t(){}return t.autoCorrectCity=function(e){if(U(e)||"string"!=typeof e||0===e.length)return e;(e.toLowerCase().startsWith("st-")||e.toLowerCase().startsWith("st "))&&(e="Saint "+e.substring(3));var n=t.CITIES.find((function(t){return t.toLowerCase()===e.toLowerCase()}));if(void 0!==n)return n;var r=t.CITIES.find((function(n){var r=t.countDiff(e,n);return r.add<=2&&r.remove<=2}));if(void 0!==r)return r;var o=t.CITIES.find((function(t){return t.replace(/-/g," ").toLowerCase()===e.toLowerCase()}));if(void 0!==o)return o;var i=t.CITIES.find((function(n){var r=t.countDiff(e,n.replace(/-/g," "));return r.add<=2&&r.remove<=2}));if(void 0!==i)return i;var a=t.CITIES.find((function(t){return t.toLowerCase().startsWith(e.toLowerCase())}));if(void 0!==a)return a;var u=t.CITIES.find((function(t){return e.toLowerCase().includes(t.toLowerCase())}));return void 0!==u?u:e},t.autoCorrectStreet=function(e){if(U(e)||"string"!=typeof e||0===e.length)return e;t.STREET_TYPE.forEach((function(t){t.short.length<t.long.length&&(e=(e=e.replace(new RegExp("(\\s"+String(t.short)+"\\.?\\s)","ig")," "+String(t.long)+" ")).replace(new RegExp("(\\s"+String(t.short)+"\\.\\s)","ig")," "+String(t.long)+" "))}));var n=new RegExp("^(0+)[0-9]+,?\\s[a-zA-Z]+").exec(e);return null!==n&&2===n.length&&(e=e.substring(n[1].length)),t.STREET_TYPE.forEach((function(t){e=(e=e.replace(new RegExp("([0-9]+)("+String(t.long)+"\\s)","ig"),"$1 $2")).replace(new RegExp("([0-9]+)("+String(t.short)+"\\.?\\s)","ig"),"$1 "+String(t.long)+" ")})),e},t.getZipCodeFromCity=function(e){if(!U(e))return Object.keys(t.ZIPCODE_CITY).reduce((function(n,r){return void 0!==t.ZIPCODE_CITY[r].find((function(t){return t.toLowerCase()===e.toLowerCase()}))?r:n}),void 0)},t.getCityFromZipCode=function(e,n){if(void 0!==e&&void 0!==n){var r,o=t.ZIPCODE_CITY[e];if(void 0!==o)return 1===o.length?o[0]:(n.split(",").forEach((function(t){r=o.find((function(e){return t.trim().toLowerCase()===e.trim().toLowerCase()}))})),void 0!==r?r:o[0])}},t.isZipCode=function(e){return"string"==typeof e&&(!!t.ZIPCODES.includes(e)||ot.isNumber(e)&&5===e.length&&!e.includes(".")&&!e.includes("-"))},t.parse=function(e,n){void 0===n&&(n=!0);var r={};if(!U(e)){var o=e.split(",");if(o.length>=3&&n){void 0===t.COUNTRIES.find((function(t){return e.toLowerCase().includes(" "+t.toLowerCase())}))&&o.push("France");var i=o.length-1;if(r.country=o[i].trim(),o.splice(i--,1),void 0!==o[i]&&o[i].trim().includes(" ")){var a=o[i].trim().split(" ");r.zip=void 0===a[0]?void 0:a[0].trim(),a.splice(0,1),r.city=a.join(" ").trim(),o.splice(i--,1)}else isNaN(Number(o[i].trim()))?isNaN(Number(o[i-1].trim()))?(r.city=o[i].trim(),o.splice(i--,1)):(r.city=o[i].trim(),o.splice(i--,1),r.zip=o[i].trim(),o.splice(i--,1)):(r.zip=o[i].trim(),o.splice(i--,1),i>=2&&(r.city=o[i].trim(),o.splice(i--,1)));r.street=o.map((function(t){return t.trim()})).join(" ").trim()}else{var u=e.toLowerCase();t.ZIPCODES.forEach((function(t){if(u.includes(t)){r.zip=t;try{u=u.replace(new RegExp(Wt.escapeRegExp(t),"ig"),"")}catch(t){}}})),t.CITIES.forEach((function(e){var n;if(u.includes(e.toLowerCase())&&(void 0===r.zip||(null===(n=t.ZIPCODE_CITY[r.zip])||void 0===n?void 0:n.find((function(t){return t.toLowerCase()===e.toLowerCase()}))))){r.city=e;try{u=u.replace(new RegExp(Wt.escapeRegExp(e),"ig"),"")}catch(t){}}})),t.COUNTRIES.forEach((function(t){if(u.includes(" "+t.toLowerCase())&&!u.includes("de "+t.toLowerCase())&&!u.includes("de la "+t.toLowerCase())){r.country=t;try{u=u.replace(new RegExp(Wt.escapeRegExp(" "+t),"ig"),"")}catch(t){}}})),void 0===r.street&&(r.street=(0,pt.trim)(u.split(",").map((function(t){return t.trim()})).join(" "),"-").trim())}void 0===r.country&&(r.country="France")}return void 0!==r.street&&(r.street=Zt.lower(Zt.trim(String(r.street)))),void 0!==r.zip&&(r.zip=Zt.upper(Zt.trim(String(r.zip)))),void 0!==r.city&&(r.city=t.autoCorrectCity(Zt.capitalize(Zt.trim(String(r.city))))),void 0!==r.country&&(r.country=Zt.capitalize(Zt.trim(String(r.country)))),t.complete(r)},t.complete=function(e){if(void 0===e.city||0===e.city.length){var n=t.getCityFromZipCode(e.zip,e.street);void 0!==n&&(e.city=n)}return"string"==typeof e.street&&t.REGIONS.forEach((function(t){e.street=Wt.removeText(e.street,t).trim()})),"fr"===Zt.lower(e.country)&&(e.country="France"),e},t.removeDuplicates=function(t){if("string"!=typeof t)return t;var e=[];return t.split(",").forEach((function(t){void 0===e.find((function(e){return e.trim().toLowerCase().includes(t.trim().toLowerCase())}))&&e.push(t)})),e.join(",")},t.countDiff=function(t,e){var n={add:0,remove:0};return Gt(t.toLowerCase(),e.toLowerCase()).forEach((function(t){switch(t[0]){case-1:n.remove+=t[1].length;break;case 1:n.add+=t[1].length}})),n},t.ZIPCODES=["78500","78600","78800","95240","95530","78630","78670","78240","78580","78300","78955","78260","95150","95250","95480","95320","95550","95370","95740","95220","95870","78420","78400","78110","78360","78290","78230","78540","78920","95600"],t.CITIES=["Sartrouville","Cormeilles-en-Parisis","Houilles","Maisons-Laffitte","La Frette-sur-Seine","Argenteuil","Montesson","Le Mesnil-le-Roi","Bezons","Orgeval","Poissy","Morainvilliers","Villennes-sur-Seine","Medan","Chambourcy","Aigremont","Les Alluets-le-Roi","Carrières-sous-Poissy","Achères","Taverny","Beauchamp","Pierrelaye","Saint-Leu-la-Forêt","Bessancourt","Montigny-lès-Cormeilles","Herblay","Méry-sur-Oise","Carrières-sur-Seine","Bezons","Chatou","Le Vésinet","Montesson","Croissy","Croissy-sur-Seine","Le Pecq","Vernouillet","Ecquevilly"],t.ZIPCODE_CITY={78500:["Sartrouville"],78600:["Maisons-Laffitte","Le Mesnil-le-Roi"],78800:["Houilles"],95240:["Cormeilles-en-Parisis"],95530:["La Frette-sur-Seine"],78100:["Saint-Germain-en-Laye"],95100:["Argenteuil"],78630:["Orgeval","Morainvilliers"],78670:["Villennes-sur-Seine","Medan"],78240:["Chambourcy","Aigremont"],78300:["Poissy"],78955:["Carrières-sous-Poissy"],78260:["Achères"],78540:["Vernouillet"],78920:["Ecquevilly"],95150:["Taverny"],95250:["Beauchamp"],95480:["Pierrelaye"],95320:["Saint-Leu-la-Forêt"],95550:["Bessancourt"],95370:["Montigny-les-Cormeilles"],95220:["Herblay"],95740:["Frépillon"],95540:["Méry-sur-Oise"],95870:["Bezons"],78420:["Carrières-sur-Seine"],78400:["Chatou"],78110:["Le Vésinet"],78360:["Montesson"],78290:["Croissy-sur-Seine"],78230:["Le Pecq"],95600:["Eaubonne"]},t.REGIONS=["île-de-france"],t.COUNTRIES=["France","FR"],t.STREET_TYPE=[{short:"av",long:"avenue"},{short:"rue",long:"rue"},{short:"bd",long:"boulevard"},{short:"chau",long:"chaussée"},{short:"trav",long:"traverse"},{short:"pl",long:"place"},{short:"pass",long:"passage"},{short:"sent",long:"sentier"},{short:"imp",long:"impasse"},{short:"all",long:"allée"},{short:"chem",long:"chemin"},{short:"ham",long:"hameau"},{short:"dom",long:"domaine"}],t}(),Vt=function(){function t(){}return t.getCycleDateFromFullDate=function(t,e){if("weekly"===e){var n=tt.DateTime.fromISO(t.replace(/-W([0-9])$/i,"-W0$1")).toISOWeekDate();if(null===n)return t;var r=n.split("-");return r.length>2?r[0]+"-"+r[1]:r.join("-")}return"monthly"===e?tt.DateTime.fromISO(t).toFormat("yyyy-LL"):tt.DateTime.fromISO(t).toISODate()},t.displayWeekDay=function(e){var n="";return void 0!==t.WEEK_DAYS[e]&&(n=t.WEEK_DAYS[e]),n},t.generatePeriod=function(e,n,r,o,i,a){void 0===o&&(o=!0),void 0===i&&(i=t.PERIOD_MAX_DATES),void 0===a&&(a="daily");for(var u={daily:{day:1},weekly:{week:1},monthly:{month:1}}[a],s=tt.DateTime.fromISO(e,{setZone:!0}).toISODate(),c=tt.DateTime.fromISO(n,{setZone:!0}).toISODate(),l=0,f={};s<=c&&l<i;){var p=t.getCycleDateFromFullDate(s,a);f[p]=(0,pt.cloneDeep)(r),o&&(f[p].date=p),s=tt.DateTime.fromISO(s,{setZone:!0}).plus(u).toISODate(),l++}return f},t.getOpenPeriods=function(t,e){var n=[];return t.forEach((function(t){for(var r=[t],o=function(){var t=r[0];if(void 0===e.find((function(e){return e.from<=t.from&&t.to<=e.to}))){var o=e.find((function(e){return e.from<=t.from&&t.from<e.to&&e.to<t.to}));if(void 0!==o)r.push({from:o.to,to:t.to});else{var i=e.find((function(e){return t.from<e.from&&t.to>e.from&&t.to<=e.to}));if(void 0!==i)r.push({from:t.from,to:i.from});else{var a=e.find((function(e){return t.from<e.from&&e.to<t.to}));void 0!==a?(r.push({from:t.from,to:a.from}),r.push({from:a.to,to:t.to})):n.push(t)}}}r.shift()};r.length>0;)o()})),n},t.limitDate=function(t,e,n){if(void 0===n&&(n=0),void 0!==t&&void 0!==e){var r=tt.DateTime.fromISO(t,{setZone:!0}).toISO(),o=tt.DateTime.fromISO(e,{setZone:!0}).plus({seconds:n}).toISO();return r>o?o:r}},t.localeToISO=function(t){var e,n=new RegExp("[0-9]{2}/[0-9]{2}/[0-9]{4}"),r=new RegExp("[0-9]{2}-[0-9]{2}-[0-9]{4}"),o=new RegExp("[0-9]{4}-[0-9]{2}-[0-9]{2}");if(n.test(t))e=(i=t.split("/"))[2]+"-"+i[1]+"-"+i[0];else if(r.test(t)){var i;e=(i=t.split("-"))[2]+"-"+i[1]+"-"+i[0]}else o.test(t)&&(e=t);return e},t.slotToTime=function(t){var e,n=new RegExp("^(\\s)?[0-9]{2}:[0-9]{2}(\\s)?$"),r=new RegExp("^(\\s)?[0-9]{2}:[0-9]{2}(\\s)?-(\\s)?[0-9]{2}:[0-9]{2}(\\s)?$");return t=t.trim(),n.test(t)?e=t.trim()+":00":r.test(t)&&(e=t.split("-")[0].trim()+":00"),e},t.delay=function(t,e,n){return U(t)||U(e)?0:Math.round(Math.abs(tt.DateTime.fromISO(t,{setZone:!0}).toUTC().diff(tt.DateTime.fromISO(e,{setZone:!0}).toUTC(),[n])[n]))},t.round=function(t,e){if(void 0===e&&(e=0),"string"!=typeof t)return t;var n=tt.DateTime.fromISO(t,{setZone:!0});return tt.DateTime.fromMillis(Math.round(+n.toMillis()/e)*e).setZone(n.zone).toISO()},t.min=function(t){return t.reduce((function(t,e){return"string"!=typeof t||t>e?e:t}),void 0)},t.max=function(t){return t.reduce((function(t,e){return void 0===t||t<e?e:t}),void 0)},t.PERIOD_MAX_DATES=90,t.WEEK_DAYS={1:"lundi",2:"mardi",3:"mercredi",4:"jeudi",5:"vendredi",6:"samedi",7:"dimanche"},t}(),Jt=function(){function t(){}return t.phone=function(t,e){if("string"==typeof t&&(t=t.trim().replace(/\s?\.?\-?\(?\)?/g,""),"fr"===e)){var n=new RegExp("(0[6-7][0-9]{8})","i").exec(t);if(null!==n&&n.length>0&&null!==n[0])return n[0]}},t}(),$t=function(){function t(){}return t.avg=function(e){if(0===e.length)return 0;var n=e.reduce((function(t,e){return t+e}),0);return t.round(n/e.length,2)},t.applyVariation=function(t,e){return t*(t>=0?1+e/100:1-e/100)},t.median=function(e){if(0===e.length)return 0;if(1===e.length)return e[0];var n=e.sort((function(t,e){return t-e}));return n.length%2==0?t.avg([n[n.length/2-1],n[n.length/2]]):n[Math.floor(n.length/2)]},t.percentage=function(t,e){if("number"==typeof t&&"number"==typeof e)return 0===e?0:t/e*100},t.round=function(t,e){return"number"!=typeof t?t:0===e?Math.round(t):Math.round(t*Math.pow(10,e))/Math.pow(10,e)},t.variation=function(t,e){var n=0;return 0!==e?n=0!==t?(e-t)/Math.abs(t)*100:100*(e>0?1:-1):0!==t&&(n=-100*(t>0?1:-1)),Math.floor(n)},t}(),Yt=function(){function t(){}return t.compact=function(e,n){if(void 0===n&&(n={}),(0,pt.isArray)(e)){var r=[];return e.forEach((function(e){e=t.compact(e,n),((0,pt.isArray)(e)&&e.length>0||(0,pt.isObject)(e)&&Object.keys(e).length>0||null!=e&&!(0,pt.isArray)(e)&&!(0,pt.isObject)(e))&&r.push(e)})),r}if((0,pt.isObject)(e)){var o={};return Object.keys(e).forEach((function(r){var i=e[r];(0,pt.isArray)(i)||(0,pt.isObject)(i)?(i=t.compact(i,n),((0,pt.isArray)(i)&&i.length>0||(0,pt.isObject)(i)&&Object.keys(i).length>0||null!=i&&!(0,pt.isArray)(i)&&!(0,pt.isObject)(i))&&(o[r]=i)):null!=i&&("string"!=typeof i||!1===n.removeEmptyString||i.length>0)&&(o[r]=i)})),o}return"string"!=typeof e||!1===n.removeEmptyString||e.length>0?e:void 0},t}(),Xt=function(){function t(){}return t.applyTaxes=function(t,e,n){void 0===n&&(n=2);var r=Number(t);return e.forEach((function(e){r+=Number(t)*e})),String($t.round(r,n))},t.calculateTaxes=function(t,e){var n=0;return e.forEach((function(e){n+=t*e})),$t.round(n,2)},t.displayWithCurrency=function(e,n){if(null==e)return e;var r=t.currencies[n],o=e+" "+n;if(void 0!==r)switch(r.position){case"before":o=r.symbol+e;break;case"after":o=e+r.symbol}return o},t.format=function(t,e,n){if(void 0===n&&(n=2),null==t)return t;var r=Number(t.replace(/\,/gi,"")).toLocaleString("en-US",{style:"decimal",useGrouping:!0,minimumFractionDigits:n,maximumFractionDigits:n});switch(e){case"fr":return r.replace(/\,/gi," ").replace(/\./gi,",");case"us":return r}},t.round=function(t,e){void 0===e&&(e=.1);var n=100*Number(t),r=100*e,o=n%r;return String($t.round(n-o+(o<Math.ceil(r/2)?0:r),2)/100)},t.currencies={CAD:{symbol:"$",position:"before"},EUR:{symbol:"€",position:"after"},USD:{symbol:"$",position:"before"}},t}();return r})()));
1
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.SmilePlayerCommon=e():t.SmilePlayerCommon=e()}(global,(()=>(()=>{"use strict";var t={16:t=>{t.exports=require("emoji-regex")}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var i=e[r]={exports:{}};return t[r](i,i.exports,n),i.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};n.r(r),n.d(r,{Constant:()=>o,Exception:()=>i,Http:()=>a,Service:()=>u,Template:()=>c,Tool:()=>s,Util:()=>l});var o={};n.r(o),n.d(o,{Path:()=>p});var i={};n.r(i),n.d(i,{BadParameterException:()=>v,BadRequestException:()=>b,ConflictException:()=>w,DuplicateException:()=>S,ExternalApiException:()=>O,InternalException:()=>_,MainException:()=>d,NotImplementedException:()=>j,ObjectNotFoundException:()=>M,PageNotFoundException:()=>D,UnauthorizedException:()=>N});var a={};n.r(a),n.d(a,{AuthenticationMiddleware:()=>G,AuthorizationMiddleware:()=>z,HandlerController:()=>H,Server:()=>X});var u={};n.r(u),n.d(u,{EmailSenderService:()=>Dt,SmsSenderService:()=>st});var c={};n.r(c),n.d(c,{TemplateEngine:()=>jt});var s={};n.r(s),n.d(s,{Configuration:()=>kt,Database:()=>Ut,Displayer:()=>Ht,Downloader:()=>Gt,Env:()=>L,Environment:()=>F,FileSystem:()=>wt,Logger:()=>q,Retry:()=>rt});var l={};n.r(l),n.d(l,{AddressUtil:()=>Bt,DateUtil:()=>Vt,ExtractorUtil:()=>Jt,FormatterUtil:()=>Zt,GeneratorUtil:()=>mt,MathUtil:()=>Yt,ObjectUtil:()=>$t,PriceUtil:()=>Xt,StringUtil:()=>Wt,ValidatorUtil:()=>ot,asyncForEach:()=>dt,isNullOrUndefined:()=>U,wait:()=>yt});var f,p=function(){function t(){}return t.registerBasePath=function(e){void 0!==process.env.APP_HOME?t.BASE_PATH=process.env.APP_HOME+"/":t.BASE_PATH=e+(e.endsWith("/")?"":"/")},t.data=function(){return t.BASE_PATH+"data/"},t.db=function(){return t.storage()+"db/"},t.root=function(){return t.BASE_PATH},t.session=function(){return t.storage()+"session/"},t.storage=function(){return t.BASE_PATH+"storage/"},t.BASE_PATH="./",t}(),h=(f=function(t,e){return f=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},f(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}f(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),d=function(t){function e(n,r,o){var i=t.call(this,n)||this;return i.code=r,i.data=o,i.name="MainException","function"==typeof Error.captureStackTrace?Error.captureStackTrace(i,e):i.stack=new Error(n).stack,i}return h(e,t),e}(Error),y=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),v=function(t){function e(e,n){var r=t.call(this,e,400,n)||this;return r.name="BadParameterException",r}return y(e,t),e}(d),m=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),b=function(t){function e(e,n){var r=t.call(this,e,400,n)||this;return r.name="BadRequestException",r}return m(e,t),e}(d),g=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),w=function(t){function e(e,n){var r=t.call(this,e,409,n)||this;return r.name="ConflictException",r}return g(e,t),e}(d),E=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),S=function(t){function e(e,n){var r=t.call(this,e,409,n)||this;return r.name="DuplicateException",r}return E(e,t),e}(d),x=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),O=function(t){function e(e,n){var r=t.call(this,e,502,n)||this;return r.name="ExternalApiException",r}return x(e,t),e}(d),T=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),_=function(t){function e(e,n){var r=t.call(this,e,500,n)||this;return r.name="InternalException",r}return T(e,t),e}(d),C=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),j=function(t){function e(e,n){var r=t.call(this,e,501,n)||this;return r.name="NotImplementedException",r}return C(e,t),e}(d),P=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),M=function(t){function e(e,n){var r=t.call(this,e,404,n)||this;return r.name="ObjectNotFoundException",r}return P(e,t),e}(d),A=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),D=function(t){function e(e,n){var r=t.call(this,e,404,n)||this;return r.name="PageNotFoundException",r}return A(e,t),e}(d),I=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),N=function(t){function e(n,r){var o=t.call(this,n,e.ERROR_CODE,r)||this;return o.name="UnauthorizedException",o}return I(e,t),e.ERROR_CODE=401,e}(d);const k=require("@sentry/node"),R=require("@sentry/profiling-node");var L;!function(t){t.PRODUCTION="prod",t.DEVELOPMENT="dev",t.TEST="test"}(L||(L={}));var F=function(){function t(){}return t.getMode=function(){switch(process.env.NODE_ENV){case"dev":case"development":return L.DEVELOPMENT;case"prod":case"production":return L.PRODUCTION;case"test":return L.TEST}return void 0===process.env.APP_ID?L.DEVELOPMENT:L.PRODUCTION},t}(),U=function(t){return null==t},q=function(){function t(){}return t.init=function(t,e){F.getMode()===L.PRODUCTION&&(k.init({dsn:t,integrations:[k.captureConsoleIntegration({levels:["error","warn","log"]}),(0,R.nodeProfilingIntegration)()],environment:F.getMode(),maxBreadcrumbs:50,tracesSampleRate:0,profilesSampleRate:0}),k.setupExpressErrorHandler(e))},t.trace=function(t,e){[L.DEVELOPMENT,L.TEST].includes(F.getMode())?void 0===e?console.info(t):console.info(t,e):k.addBreadcrumb({category:"info",message:t,data:e,level:"info"})},t.debug=function(t,e){[L.DEVELOPMENT,L.TEST].includes(F.getMode())?void 0===e?console.log(t):console.log(t,e):k.addBreadcrumb({category:"debug",message:t,data:e,level:"debug"})},t.info=function(t,e){[L.DEVELOPMENT,L.TEST].includes(F.getMode())?void 0===e?console.info(t):console.info(t,e):k.withScope((function(n){void 0!==e&&n.setExtra("extra",JSON.stringify(e)),k.captureMessage(t)}))},t.warning=function(t,e){U(t.response)||("object"!=typeof e&&(e={}),e.requestErrorData=t.response.data),[L.DEVELOPMENT,L.TEST].includes(F.getMode())?void 0===e?console.warn(t):console.warn(t,e):k.withScope((function(n){void 0!==e&&n.setExtra("extra",JSON.stringify(e)),void 0!==t.data&&n.setExtra("data",JSON.stringify(t.data)),k.captureException(t)}))},t.error=function(t,e){[N.ERROR_CODE].includes(t.code)||(U(t.response)||("object"!=typeof e&&(e={}),e.requestErrorData=t.response.data),[L.DEVELOPMENT,L.TEST].includes(F.getMode())?void 0===e?console.error(t):console.error(t,e):k.withScope((function(n){void 0!==e&&n.setExtra("extra",JSON.stringify(e)),void 0!==t.data&&n.setExtra("data",JSON.stringify(t.data)),k.captureException(t)})))},t}(),H=function(){function t(){}return t.error=function(t,e,n){q.error(n);var r=void 0!==n.code&&null!==n.code?Number(n.code):500;e.status(!isNaN(r)&&Number(n.code)>=400&&Number(n.code)<=599?Number(n.code):500),e.json({code:n.code,message:n.message})},t}(),G=function(){function t(t){this.configuration=t}return t.prototype.handler=function(){var t=this;return function(e,n,r){try{var o=!1;if(o||void 0===t.configuration.jwt||(e.session={},o=!0),o||void 0===t.configuration.key||(o=t.authApiKey(e)),!o&&void 0!==t.configuration.session){var i=Object.keys(e.session);if(!Array.isArray(t.configuration.session.required))throw new N("session is not well formatted");t.configuration.session.required.forEach((function(t){if(!i.includes(t))throw new N("session is incomplete")})),o=!0}if(o||void 0===t.configuration.none||(o=t.authNone(e)),!o)throw new N("request is not authenticate");r()}catch(t){H.error(e,n,t)}}},t.prototype.authApiKey=function(t){if("string"!=typeof t.headers.Authorization||!t.headers.Authorization.startsWith("apiKey"))return!1;var e=t.headers.Authorization.split(" ");if(2!==e.length)throw new N("api key is not well formatted");if(e[1]!==this.configuration.key.secret)throw new N("api key is not valid");return t.session={},!0},t.prototype.authNone=function(t){return!(!Array.isArray(this.configuration.none.urlStartsWith)||void 0===this.configuration.none.urlStartsWith.find((function(e){var n;return null===(n=t.originalUrl)||void 0===n?void 0:n.startsWith(e)}))||(t.session={},0))},t}(),z=function(){function t(){}return t.prototype.can=function(t,e){},t}();const W=require("crypto"),Z=require("express"),B=require("cors"),V=require("compression"),J=require("helmet");var Y=n.n(J);const $=require("connect-timeout");var X=function(){function t(){}return t.prototype.create=function(e,n){return r=this,o=void 0,a=function(){var r,o;return function(t,e){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(c){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,c])}}}(this,(function(i){return void 0===this.app&&(r=n||t.DEFAULT_PORT,o="http://localhost:"+String(r),q.debug("start server on "+o),this.app=Z(),this.app.set("trust proxy",!0),this.app.use(V({level:-1})),this.app.use($("300s")),this.app.use(Z.json({inflate:!0,limit:"10mb",reviver:null,strict:!0,type:"application/json",verify:void 0})),this.app.use(Z.urlencoded({limit:"10mb"})),this.app.use(B({origin:[o].concat(e),credentials:!0})),this.app.use(Y()()),this.app.use(Z.json()),this.app.listen(r,(function(){q.debug("server is running on "+o)}))),[2,this.app]}))},new((i=void 0)||(i=Promise))((function(t,e){function n(t){try{c(a.next(t))}catch(t){e(t)}}function u(t){try{c(a.throw(t))}catch(t){e(t)}}function c(e){var r;e.done?t(e.value):(r=e.value,r instanceof i?r:new i((function(t){t(r)}))).then(n,u)}c((a=a.apply(r,o||[])).next())}));var r,o,i,a},t.prototype.getSessionSecret=function(e){return W.createHash("sha1").update(e+t.SALT).digest("hex")},t.DEFAULT_PORT=8080,t.SALT="03561b4a0fe7f125025",t}();const K=require("axios");var Q=n.n(K);const tt=require("luxon"),et=require("querystring"),nt=require("retry");var rt=function(){function t(){}return t.request=function(t){return e=this,n=arguments,o=function(t,e,n){var r;return void 0===e&&(e=2),function(t,e){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(c){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,c])}}}(this,(function(o){return r=nt.operation({retries:e,factor:1,minTimeout:0,maxTimeout:0,randomize:!1}),[2,new Promise((function(e,o){r.attempt((function(){t().then(e).catch((function(t){r.retry(t)?"function"==typeof n&&n(t):o(t)}))}))}))]}))},new((r=void 0)||(r=Promise))((function(t,i){function a(t){try{c(o.next(t))}catch(t){i(t)}}function u(t){try{c(o.throw(t))}catch(t){i(t)}}function c(e){var n;e.done?t(e.value):(n=e.value,n instanceof r?n:new r((function(t){t(n)}))).then(a,u)}c((o=o.apply(e,n||[])).next())}));var e,n,r,o},t}(),ot=function(){function t(){}return t.isEmail=function(t){return"string"==typeof t&&new RegExp("^[a-zA-Z0-9\\.!#$%&*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$","i").test(t)},t.isPhone=function(t){return"string"==typeof t&&new RegExp("^([+\\s0-9]{10,}(#[0-9]+)?)$").test(t)},t.isIntMobilePhone=function(t){var e=new RegExp("^\\+1[0-9]{10}$","i"),n=new RegExp("^\\+33(6|7)[0-9]{8}$","i"),r=new RegExp("^\\+1[0-9]{10}$","i");return e.test(t)||n.test(t)||r.test(t)},t.isNumber=function(t){return"number"==typeof t||"string"==typeof t&&new RegExp("^-?[0-9]+\\.?[0-9]*$").test(t)},t}();const it=require("iconv-lite");var at=function(){function t(){}return t.isUTF8=function(t){return!t||"utf8"===(t=t.toLowerCase())||"utf-8"===t},t.urlencode=function(e,n){if(!n||t.isUTF8(n))return encodeURIComponent(e);for(var r=(0,it.encode)(e,n),o="",i="",a=0;a<r.length;a++)1===(i=r[a].toString(16)).length&&(i="0"+i),o+="%"+i;return o.toUpperCase()},t}(),ut=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{c(r.next(t))}catch(t){i(t)}}function u(t){try{c(r.throw(t))}catch(t){i(t)}}function c(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,u)}c((r=r.apply(t,e||[])).next())}))},ct=function(t,e){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(c){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,c])}}},st=function(){function t(t,e){this.token=t,this.mode=e}return t.prototype.send=function(e,n,r){return ut(this,arguments,void 0,(function(e,n,r,o,i){var a,u=this;return void 0===o&&(o=!0),ct(this,(function(c){switch(c.label){case 0:return 0===(a=this.checkPhoneFormat(r)).length?(q.warning(new v("no valid phone",{phones:r})),[2,Promise.resolve()]):(a.length>1&&(n.length>2*t.MESSAGE_MAX_LENGTH?n=n.substring(0,2*t.MESSAGE_MAX_LENGTH):n.length>t.MESSAGE_MAX_LENGTH&&n.length<=1.33*t.MESSAGE_MAX_LENGTH&&(n=n.substring(0,t.MESSAGE_MAX_LENGTH))),[4,rt.request((function(){return ut(u,void 0,void 0,(function(){var r,u,c;return ct(this,(function(s){switch(s.label){case 0:return r={accessToken:this.token,emetteur:e,message:at.urlencode(n,"ISO-8859-15"),numero:a.map((function(t){return t.replace("+","")})).join(","),classe_msg:2,nbr_msg:Math.ceil(n.length/t.MESSAGE_MAX_LENGTH)},o&&(r.stop=1),void 0!==i&&(r.date_envoi=tt.DateTime.fromISO(i,{setZone:!0}).toFormat("ddMMyyyy-HH:mm")),u=tt.DateTime.fromISO(null!=i?i:(new Date).toISOString(),{setZone:!0}).setZone("Europe/Paris"),o?u.hour>=21?r.date_envoi=u.plus({day:1}).set({hour:9}).toFormat("ddMMyyyy-HH:mm"):u.hour<9&&(r.date_envoi=u.set({hour:9}).toFormat("ddMMyyyy-HH:mm")):u.hour<8&&(r.date_envoi=u.set({hour:8}).toFormat("ddMMyyyy-HH:mm")),this.mode!==L.TEST?[3,1]:(q.info("Simulation Mode: SMS has been sent",{params:r}),[3,3]);case 1:return this.mode===L.DEVELOPMENT&&(a=["+15145705214"]),[4,Q().post(t.BASE_API_URL+"sendSMS.do",et.stringify(r,"&","=",{encodeURIComponent:function(t){return t}}),{timeout:3e4})];case 2:if((c=s.sent()).data.length>0&&"0"!==c.data.trim().substring(0,1))throw new O("Error: "+c.data,r);s.label=3;case 3:return[2]}}))}))}),0,q.error.bind(q))]);case 1:return c.sent(),[2]}}))}))},t.prototype.checkPhoneFormat=function(t){return t.filter((function(t){return ot.isIntMobilePhone(t)}))},t.BASE_API_URL="https://api.smsmode.com/http/1.6/",t.MESSAGE_MAX_LENGTH=150,t}();const lt=require("path"),ft=require("mustache"),pt=require("lodash"),ht=require("fs");var dt=function(t,e){return n=void 0,r=void 0,i=function(){var n;return function(t,e){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(c){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,c])}}}(this,(function(r){switch(r.label){case 0:n=0,r.label=1;case 1:return n<t.length?[4,e(t[n])]:[3,4];case 2:r.sent(),r.label=3;case 3:return n++,[3,1];case 4:return[2]}}))},new((o=void 0)||(o=Promise))((function(t,e){function a(t){try{c(i.next(t))}catch(t){e(t)}}function u(t){try{c(i.throw(t))}catch(t){e(t)}}function c(e){var n;e.done?t(e.value):(n=e.value,n instanceof o?n:new o((function(t){t(n)}))).then(a,u)}c((i=i.apply(n,r||[])).next())}));var n,r,o,i},yt=function(t){return new Promise((function(e){return setTimeout(e,t)}))};const vt=require("color-name");var mt=function(){function t(){}return t.code=function(e){null==e&&(e=6);for(var n="";n.length<e;)n+=t.symbolUpperCases[t.int(0,t.symbolUpperCases.length-1)];return n},t.color=function(e){void 0===e&&(e=1);var n=t.rgbToHex(Math.round(255*e)),r="#000000"+n,o=Object.values(vt);if(0===o.length)return r;var i=o[t.int(0,o.length-1)];return 3!==i.length?r:"#"+t.rgbToHex(i[0])+t.rgbToHex(i[1])+t.rgbToHex(i[2])+n},t.rgbToHex=function(t){var e=t.toString(16);return 1===e.length?"0"+e:e},t.int=function(t,e){return null==t&&(t=0),null==e&&(e=Number.POSITIVE_INFINITY),t=Math.ceil(t),e=Math.floor(e),Math.floor(Math.random()*(e-t+1))+t},t.password=function(e){null==e&&(e=8);for(var n="";n.length<e;)switch(t.int(1,3)){case 1:n+=t.symbolUpperCases[t.int(0,t.symbolUpperCases.length-1)];break;case 2:n+=t.symbolLowerCases[t.int(0,t.symbolLowerCases.length-1)];break;default:n+=String(t.int(0,9))}return n},t.symbolUpperCases=["A","B","C","D","E","F","G","H","K","M","N","P","R","S","T","U","V","W","X","Y","Z"],t.symbolLowerCases=["a","b","c","d","e","f","g","h","k","m","n","p","r","s","t","u","v","w","x","y","z"],t}(),bt=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{c(r.next(t))}catch(t){i(t)}}function u(t){try{c(r.throw(t))}catch(t){i(t)}}function c(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,u)}c((r=r.apply(t,e||[])).next())}))},gt=function(t,e){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(c){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,c])}}},wt=function(){function t(){}return t.prototype.dirPath=function(t){var e=lt.resolve(t).lastIndexOf(lt.sep);return e<0?t:lt.resolve(lt.resolve(t).substr(0,e+1))+lt.sep},t.prototype.listFiles=function(t){return bt(this,void 0,void 0,(function(){var e,n,r,o=this;return gt(this,(function(i){switch(i.label){case 0:if(!this.isDir(t))throw new v(String(t)+" does not exist or is not a directory");return e=t.endsWith("/")?"":"/",n=ht.readdirSync(t),r=[],[4,dt(n,(function(n){return bt(o,void 0,void 0,(function(){return gt(this,(function(o){return this.isFile(t+e+n)&&r.push(t+e+n),[2]}))}))}))];case 1:return i.sent(),[2,r]}}))}))},t.prototype.randomFile=function(t,e){return bt(this,void 0,void 0,(function(){var n,r;return gt(this,(function(o){switch(o.label){case 0:return[4,this.listFiles(t)];case 1:return 0===(n=o.sent()).length?[2,void 0]:(r=void 0!==e?Math.max(e,0)%n.length:mt.int(0,n.length-1),[2,n[r]])}}))}))},t.prototype.move=function(t,e){return bt(this,void 0,void 0,(function(){return gt(this,(function(n){if(!this.isFile(t))throw new v(String(t)+" does not exist or is not a file");if(ht.mkdirSync(e,{recursive:!0}),!this.isDir(e))throw new v(String(e)+" does not exist or is not a directory");return[2,ht.renameSync(t,e+lt.basename(t))]}))}))},t.prototype.read=function(t){return bt(this,void 0,void 0,(function(){return gt(this,(function(e){if(!this.isFile(t))throw new v(String(t)+" does not exist or is not a file");return[2,ht.readFileSync(t,"utf8")]}))}))},t.prototype.readJson=function(t){return bt(this,void 0,void 0,(function(){var e;return gt(this,(function(n){switch(n.label){case 0:return[4,this.read(t)];case 1:if(e=n.sent(),!this.isJson(e))throw new v(String(t)+" does not contain JSON");return[2,JSON.parse(e)]}}))}))},t.prototype.readJsonFiles=function(t){return bt(this,void 0,void 0,(function(){var e,n,r,o=this;return gt(this,(function(i){switch(i.label){case 0:if(!this.isDir(t))throw new v(String(t)+" does not exist or is not a directory");return e=t.endsWith("/")?"":"/",n=ht.readdirSync(t),r=[],[4,dt(n,(function(n){return bt(o,void 0,void 0,(function(){var o,i,a;return gt(this,(function(u){switch(u.label){case 0:return this.isFile(t+e+n)&&n.endsWith(".json")?(i=(o=r).push,a={name:n},[4,this.readJson(t+e+n)]):[3,2];case 1:i.apply(o,[(a.data=u.sent(),a)]),u.label=2;case 2:return[2]}}))}))}))];case 1:return i.sent(),[2,r]}}))}))},t.prototype.write=function(t,e){return bt(this,void 0,void 0,(function(){var n;return gt(this,(function(r){return"",n="string"==typeof e||"number"==typeof e?String(e):JSON.stringify(e),ht.mkdirSync(this.dirPath(t),{recursive:!0}),ht.writeFileSync(t,n,{encoding:"utf8"}),[2,Promise.resolve()]}))}))},t.prototype.writeJson=function(t,e){return bt(this,void 0,void 0,(function(){return gt(this,(function(n){return[2,this.write(t,JSON.stringify(e))]}))}))},t.prototype.isDir=function(t){return ht.existsSync(t)&&ht.statSync(t).isDirectory()},t.prototype.isFile=function(t){return ht.existsSync(t)&&ht.statSync(t).isFile()},t.prototype.isJson=function(t){try{return JSON.parse(t),!0}catch(t){return!1}},t}();const Et=require("clean-css"),St=require("html-minifier-terser");var xt=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{c(r.next(t))}catch(t){i(t)}}function u(t){try{c(r.throw(t))}catch(t){i(t)}}function c(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,u)}c((r=r.apply(t,e||[])).next())}))},Ot=function(t,e){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(c){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,c])}}},Tt=function(){function t(){}return t.prototype.css=function(t){return xt(this,void 0,void 0,(function(){return Ot(this,(function(e){return[2,new Et({compatibility:"ie7",format:!1,level:1,sourceMap:!1}).minify(t).styles]}))}))},t.prototype.html=function(t){return xt(this,void 0,void 0,(function(){return Ot(this,(function(e){switch(e.label){case 0:return[4,(0,St.minify)(t,{collapseBooleanAttributes:!0,collapseInlineTagWhitespace:!0,collapseWhitespace:!0,continueOnParseError:!1,decodeEntities:!1,html5:!0,minifyCSS:!0,minifyJS:!0,noNewlinesBeforeTagClose:!0,preserveLineBreaks:!1,preventAttributesEscaping:!1,processConditionalComments:!1,quoteCharacter:'"',removeAttributeQuotes:!1,removeComments:!0,removeEmptyAttributes:!0,removeEmptyElements:!0,removeOptionalTags:!1,removeRedundantAttributes:!0,removeScriptTypeAttributes:!1,removeStyleLinkTypeAttributes:!1,removeTagWhitespace:!1})];case 1:return[2,e.sent()]}}))}))},t}(),_t=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{c(r.next(t))}catch(t){i(t)}}function u(t){try{c(r.throw(t))}catch(t){i(t)}}function c(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,u)}c((r=r.apply(t,e||[])).next())}))},Ct=function(t,e){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(c){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,c])}}},jt=function(){function t(){this.minifier=new Tt}return t.prototype.render=function(t,e,n){return _t(this,void 0,void 0,(function(){var r,o,i,a,u,c=this;return Ct(this,(function(s){switch(s.label){case 0:return t.endsWith(".template")||(t+=".template"),r=(0,pt.cloneDeep)(e),o=lt.isAbsolute(t)?"":__dirname+lt.sep,[4,(new wt).read(o+t)];case 1:return i=s.sent(),a=[],(0,ft.parse)(i).forEach((function(t){t.length>=4&&"&"===t[0]&&t[1].startsWith("include:")&&a.push(t[1])})),a.length>0?(void 0===n?n=lt.dirname(o+t)+lt.sep:lt.isAbsolute(n)||(n=o+n),[4,dt(a,(function(t){return _t(c,void 0,void 0,(function(){var e,o,i,a;return Ct(this,(function(u){switch(u.label){case 0:return 3!==(e=t.split(":")).length||void 0===r[t]?[3,2]:(o=e[2],n.includes("/html")&&Object.keys(r[t]).forEach((function(e){r[t][e]=Array.isArray(r[t][e])?r[t][e].map((function(t){return t.replace(/(?:\r\n|\r|\n)/g,"<br>")})):r[t][e].replace(/(?:\r\n|\r|\n)/g,"<br>")})),i=r,a=t,[4,this.render(lt.resolve(n,o),r[t])]);case 1:i[a]=u.sent(),u.label=2;case 2:return[2]}}))}))}))]):[3,3];case 2:s.sent(),s.label=3;case 3:if((u=(0,ft.render)(i,r)).includes("{{")||u.includes("}}"))throw new w("template: missing data to render template",{templatePath:t,data:e});return[2,t.includes("html")?this.minifier.html(u):u]}}))}))},t}();const Pt=require("node-mailjet");var Mt=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{c(r.next(t))}catch(t){i(t)}}function u(t){try{c(r.throw(t))}catch(t){i(t)}}function c(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,u)}c((r=r.apply(t,e||[])).next())}))},At=function(t,e){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(c){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,c])}}},Dt=function(){function t(t,e,n){this.templateEngine=new jt,this.mailjet=new Pt.Client({apiKey:t,apiSecret:e}),this.mode=n}return t.prototype.sendDeliveryDelay=function(t,e,n){return Mt(this,void 0,void 0,(function(){var r=this;return At(this,(function(o){switch(o.label){case 0:return[4,rt.request((function(){return Mt(r,void 0,void 0,(function(){var r,o;return At(this,(function(i){switch(i.label){case 0:return void 0===n.base.copyright&&(n.base.copyright={year:String((new Date).getUTCFullYear())}),[4,this.templateEngine.render("data/email/template/deliveryDelay",n,"data/email/element/text")];case 1:return r=i.sent(),[4,this.templateEngine.render("data/email/template/deliveryDelay",n,"data/email/element/html")];case 2:return o=i.sent(),[4,this.sendNotification(t,[{recipient:e,subject:n.base.subject,text:r,html:o}],!1)];case 3:return[2,i.sent()]}}))}))}),0,q.error.bind(q))];case 1:return[2,o.sent()]}}))}))},t.prototype.sendTrackDelivery=function(t,e,n){return Mt(this,void 0,void 0,(function(){var r=this;return At(this,(function(o){switch(o.label){case 0:return[4,rt.request((function(){return Mt(r,void 0,void 0,(function(){var r,o,i,a;return At(this,(function(u){switch(u.label){case 0:return[4,this.templateEngine.render("data/email/template/trackDelivery",n,"data/email/element/text")];case 1:return r=u.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:r,base:n.base})];case 2:return o=u.sent(),[4,this.templateEngine.render("data/email/template/trackDelivery",n,"data/email/element/html")];case 3:return i=u.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:i,base:n.base})];case 4:return a=u.sent(),[4,this.sendNotification(t,[{recipient:e,subject:n.base.subject,text:o,html:a}],!1)];case 5:return[2,u.sent()]}}))}))}),0,q.error.bind(q))];case 1:return[2,o.sent()]}}))}))},t.prototype.sendUserNotification=function(t,e,n){return Mt(this,arguments,void 0,(function(t,e,n,r,o){var i=this;return void 0===r&&(r=!0),At(this,(function(a){switch(a.label){case 0:return[4,rt.request((function(){return Mt(i,void 0,void 0,(function(){var i,a,u,c;return At(this,(function(s){switch(s.label){case 0:return[4,this.templateEngine.render("data/email/template/userNotification",n,"data/email/element/text")];case 1:return i=s.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:i,base:n.base,isCommercial:r})];case 2:return a=s.sent(),[4,this.templateEngine.render("data/email/template/userNotification",n,"data/email/element/html")];case 3:return u=s.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:u,base:n.base,isCommercial:r})];case 4:return c=s.sent(),[4,this.sendNotification(t,[{recipient:e,subject:n.base.subject,text:a,html:c}],r,o)];case 5:return[2,s.sent()]}}))}))}),0,q.error.bind(q))];case 1:return[2,a.sent()]}}))}))},t.prototype.sendUsersNotifications=function(t,e,n,r){return Mt(this,void 0,void 0,(function(){var o=this;return At(this,(function(i){switch(i.label){case 0:return[4,rt.request((function(){return Mt(o,void 0,void 0,(function(){var o,i=this;return At(this,(function(a){switch(a.label){case 0:return o=[],[4,dt(e,(function(t){return Mt(i,void 0,void 0,(function(){var e,r,i,a;return At(this,(function(u){switch(u.label){case 0:return[4,this.templateEngine.render("data/email/template/userNotification",t.data,"data/email/element/text")];case 1:return e=u.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:e,base:t.data.base,isCommercial:n})];case 2:return r=u.sent(),[4,this.templateEngine.render("data/email/template/userNotification",t.data,"data/email/element/html")];case 3:return i=u.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:i,base:t.data.base,isCommercial:n})];case 4:return a=u.sent(),o.push({recipient:t.recipient,subject:t.data.base.subject,text:r,html:a}),[2]}}))}))}))];case 1:return a.sent(),[4,this.sendNotification(t,o,n,r)];case 2:return[2,a.sent()]}}))}))}),0,q.error.bind(q))];case 1:return[2,i.sent()]}}))}))},t.prototype.sendDiscount=function(t,e,n){return Mt(this,arguments,void 0,(function(t,e,n,r,o){var i=this;return void 0===r&&(r=!0),At(this,(function(a){switch(a.label){case 0:return[4,rt.request((function(){return Mt(i,void 0,void 0,(function(){var i,a,u,c;return At(this,(function(s){switch(s.label){case 0:return[4,this.templateEngine.render("data/email/template/discount",n,"data/email/element/text")];case 1:return i=s.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:i,base:n.base,isCommercial:r})];case 2:return a=s.sent(),[4,this.templateEngine.render("data/email/template/discount",n,"data/email/element/html")];case 3:return u=s.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:u,base:n.base,isCommercial:r})];case 4:return c=s.sent(),[4,this.sendNotification(t,[{recipient:e,subject:n.base.subject,text:a,html:c}],r,o)];case 5:return[2,s.sent()]}}))}))}),0,q.error.bind(q))];case 1:return[2,a.sent()]}}))}))},t.prototype.sendDiscounts=function(t,e){return Mt(this,arguments,void 0,(function(t,e,n,r){var o=this;return void 0===n&&(n=!0),At(this,(function(i){switch(i.label){case 0:return[4,rt.request((function(){return Mt(o,void 0,void 0,(function(){var o,i=this;return At(this,(function(a){switch(a.label){case 0:return o=[],[4,dt(e,(function(t){return Mt(i,void 0,void 0,(function(){var e,r,i,a;return At(this,(function(u){switch(u.label){case 0:return[4,this.templateEngine.render("data/email/template/discount",t.data,"data/email/element/text")];case 1:return e=u.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:e,base:t.data.base,isCommercial:n})];case 2:return r=u.sent(),[4,this.templateEngine.render("data/email/template/discount",t.data,"data/email/element/html")];case 3:return i=u.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:i,base:t.data.base,isCommercial:n})];case 4:return a=u.sent(),o.push({recipient:t.recipient,subject:t.data.base.subject,text:r,html:a}),[2]}}))}))}))];case 1:return a.sent(),[4,this.sendNotification(t,o,n,r)];case 2:return[2,a.sent()]}}))}))}),0,q.error.bind(q))];case 1:return[2,i.sent()]}}))}))},t.prototype.sendNotification=function(t,e){return Mt(this,arguments,void 0,(function(t,e,n,r){var o,i,a=this;return void 0===n&&(n=!1),At(this,(function(u){switch(u.label){case 0:if(0===e.length)throw new v("email: missing messages");u.label=1;case 1:return u.trys.push([1,6,,7]),this.mode!==L.TEST?[3,2]:(q.info("Simulation Mode: Email has been sent",{sender:t,recipients:e.map((function(t){return t.recipient}))}),[3,5]);case 2:return o=[],[4,dt(e,(function(e){return Mt(a,void 0,void 0,(function(){return At(this,(function(i){return this.mode===L.DEVELOPMENT&&(e.recipient.contact="developer@onylab.com"),o.push({From:{Name:t.name,Email:t.contact},To:[{Name:e.recipient.name,Email:e.recipient.contact}],Subject:e.subject,TextPart:e.text,HTMLPart:e.html,Priority:n?0:2,customID:void 0===r?void 0:String(r)}),[2]}))}))}))];case 3:return u.sent(),[4,this.mailjet.post("send",{version:"v3.1"}).request({Messages:o})];case 4:u.sent(),u.label=5;case 5:return[3,7];case 6:throw i=u.sent(),new d(i.message,Number(i.statusCode));case 7:return[2]}}))}))},t}(),It=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{c(r.next(t))}catch(t){i(t)}}function u(t){try{c(r.throw(t))}catch(t){i(t)}}function c(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,u)}c((r=r.apply(t,e||[])).next())}))},Nt=function(t,e){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(c){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,c])}}},kt=function(){function t(e,n){this.filesystem=new wt,void 0!==t.root&&t.root===e||(t.root=e,t.config=void 0);var r=void 0===n?F.getMode():n;void 0!==t.environment&&t.environment===r||(t.environment=void 0===n?F.getMode():n,t.config=void 0)}return t.prototype.full=function(){return It(this,void 0,void 0,(function(){return Nt(this,(function(e){switch(e.label){case 0:return[4,this.init()];case 1:return e.sent(),[2,t.config]}}))}))},t.prototype.init=function(){return It(this,void 0,void 0,(function(){var e,n,r,o;return Nt(this,(function(i){switch(i.label){case 0:return void 0!==t.config?[3,6]:void 0!==t.root?[3,1]:(t.config={},[3,6]);case 1:return e=t,[4,this.filesystem.readJson(t.root+"data/config.json")];case 2:if(e.config=i.sent(),![L.DEVELOPMENT,L.TEST].includes(t.environment))return[3,6];i.label=3;case 3:return i.trys.push([3,5,,6]),n=t,r=pt.merge,o=[t.config],[4,this.filesystem.readJson(t.root+"data/config_"+String(t.environment)+".json")];case 4:return n.config=r.apply(void 0,o.concat([i.sent()])),[3,6];case 5:return i.sent(),[3,6];case 6:return[2]}}))}))},t}();const Rt=require("typeorm");var Lt=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{c(r.next(t))}catch(t){i(t)}}function u(t){try{c(r.throw(t))}catch(t){i(t)}}function c(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,u)}c((r=r.apply(t,e||[])).next())}))},Ft=function(t,e){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(c){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,c])}}},Ut=function(){function t(t){this.root=t}return t.prototype.connect=function(t,e){return Lt(this,void 0,void 0,(function(){var n,r;return Ft(this,(function(o){switch(o.label){case 0:return void 0!==this.db?[3,2]:[4,this.init()];case 1:o.sent(),o.label=2;case 2:return void 0===(n=this.db[t])?[3,4]:(n.entities=e,n.logging=["error"],n.logger=!0,n.bigNumberStrings=!1,void 0===n.timezone&&(n.timezone="Z"),void 0===n.charset&&(n.charset="UTF8_GENERAL_CI"),r=this,[4,(0,Rt.createConnection)(n)]);case 3:return r.connection=o.sent(),[3,5];case 4:q.error(new v("bad connection name")),o.label=5;case 5:return[2]}}))}))},t.prototype.synchronize=function(){return Lt(this,void 0,void 0,(function(){return Ft(this,(function(t){switch(t.label){case 0:return void 0===this.connection?[3,2]:[4,this.connection.synchronize()];case 1:t.sent(),t.label=2;case 2:return[2]}}))}))},t.prototype.close=function(){return Lt(this,void 0,void 0,(function(){return Ft(this,(function(t){return[2,this.connection.close()]}))}))},t.prototype.init=function(){return Lt(this,void 0,void 0,(function(){var t,e;return Ft(this,(function(n){switch(n.label){case 0:return void 0!==this.root?[3,1]:(this.db={},[3,3]);case 1:return t=new wt,e=this,[4,t.readJson(this.root+"data/db.json")];case 2:e.db=n.sent(),n.label=3;case 3:return[2]}}))}))},t}();const qt=require("prettyjson");var Ht=function(){function t(){}return t.prototype.error=function(t){q.error(t)},t.prototype.info=function(t){q.trace(t)},t.prototype.json=function(t){q.trace(qt.render(t,{}))},t.prototype.success=function(t){q.trace(t)},t}(),Gt=function(){function t(){this.fileSystem=new wt}return t.prototype.image=function(t,e,n){return r=this,o=void 0,a=function(){var r,o;return function(t,e){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(c){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=e.call(t,i)}catch(t){u=[6,t],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,c])}}}(this,(function(i){switch(i.label){case 0:return void 0===n&&(n=W.randomBytes(20).toString("hex")+lt.extname(t)),[4,this.fileSystem.write(e+lt.sep+n,"")];case 1:return i.sent(),r=lt.resolve(e+lt.sep+n),o=ht.createWriteStream(r),[4,Q()({url:t,method:"GET",responseType:"stream"})];case 2:return i.sent().data.pipe(o),[2,new Promise((function(t,e){o.on("finish",(function(){return t(r)})),o.on("error",e)}))]}}))},new((i=void 0)||(i=Promise))((function(t,e){function n(t){try{c(a.next(t))}catch(t){e(t)}}function u(t){try{c(a.throw(t))}catch(t){e(t)}}function c(e){var r;e.done?t(e.value):(r=e.value,r instanceof i?r:new i((function(t){t(r)}))).then(n,u)}c((a=a.apply(r,o||[])).next())}));var r,o,i,a},t}();const zt=require("fast-diff");var Wt=function(){function t(){}return t.escapeRegExp=function(t){return"string"!=typeof t?t:t.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")},t.hash=function(t,e){void 0===e&&(e=0);for(var n=3735928559^e,r=1103547991^e,o=0,i=void 0;o<t.length;o++)i=t.charCodeAt(o),n=Math.imul(n^i,2654435761),r=Math.imul(r^i,1597334677);return n=Math.imul(n^n>>>16,2246822507),n^=Math.imul(r^r>>>13,3266489909),r=Math.imul(r^r>>>16,2246822507),((r^=Math.imul(n^n>>>13,3266489909))>>>0).toString(16).padStart(8,"0")+(n>>>0).toString(16).padStart(8,"0")},t.nullable=function(t){return U(t)||"string"==typeof t&&0===t.length?null:t},t.removeMultiSpaces=function(t){return"string"!=typeof t?t:t.replace(/\s{2,}/g," ")},t.removeText=function(e,n){if("string"!=typeof e||"string"!=typeof n||0===n.length)return e;try{e=(e=e.replace(new RegExp(t.escapeRegExp(n),"ig"),"")).replace(new RegExp(t.escapeRegExp(n).replace(new RegExp("\\s","g"),"-"),"ig"),"")}catch(t){}return e},t.replace=function(e,n,r){if("string"!=typeof e)return e;if(n.length!==r.length)return e;var o=e;return n.forEach((function(e,n){o=o.replace(new RegExp(t.escapeRegExp(e),"ig"),r[n])})),o},t.slugify=function(t,e){return void 0===e&&(e=""),void 0===t?"":(0,pt.toLower)((0,pt.trim)((0,pt.deburr)(t)).replace(/[^0-9a-z\-\_]/gi,e))},t.truncate=function(t,e){return U(t)||t.length<=e?t:e<=3?"":t.slice(0,e-3)+"..."},t}(),Zt=function(){function t(){}return t.trim=function(t){return"string"==typeof t?t.trim():t},t.capitalize=function(e){var n=t.lower(e);return"string"==typeof n?n.split(" ").map((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})).join(" "):e},t.ucfirst=function(e){var n=t.lower(e);return"string"==typeof n?n.charAt(0).toUpperCase()+n.slice(1):e},t.lower=function(t){return"string"==typeof t?t.toLocaleLowerCase():t},t.upper=function(t){return"string"==typeof t?t.toLocaleUpperCase():t},t.phone=function(e,n,r){if(void 0===r&&(r="nat"),"string"==typeof e)switch(e=t.preformatPhone(e,n),r){case"nat":return t.phoneNat(e,n);case"int":return t.phoneInt(e,n)}return e},t.stripEmoji=function(t){var e=t;if("string"==typeof e)for(var r=n(16),o=void 0;null!==(o=r().exec(e));)try{e=(e=(e=e.replace(new RegExp(Wt.escapeRegExp(o[0]),"g"),"")).replace(new RegExp("\\s+","g")," ")).trim()}catch(t){}return e},t.stripExoticCharacters=function(t){return"string"==typeof t?t.replace("’","'").replace(/[\u0250-\ue007]+/g,"*"):t},t.preformatPhone=function(t,e){return t=t.trim().replace(/\s?\.?\-?\(?\)?/g,""),"fr"===e&&new RegExp("^[1-9]").test(t)&&9===t.length?"0"+t:t},t.phoneNat=function(t,e){if("fr"===e){if(t.startsWith("+330")?t=t.substring(3):t.startsWith("+33")?t="0"+t.substring(3):t.startsWith("0033")?t="0"+t.substring(4):t.startsWith("33")&&11===t.length&&(t="0"+t.substring(2)),10===t.length){var n=0;t=t.split("").map((function(t){return t+(++n%2==0?" ":"")})).join("").trim()}return t}return t},t.phoneInt=function(t,e){return t.startsWith("+")?t:"fr"===e?(t.startsWith("0")&&(t=t.substring(1)),"+33"+t):t},t}(),Bt=function(){function t(){}return t.autoCorrectCity=function(e){if(U(e)||"string"!=typeof e||0===e.length)return e;(e.toLowerCase().startsWith("st-")||e.toLowerCase().startsWith("st "))&&(e="Saint "+e.substring(3));var n=Object.values(t.ZIPCODE_CITY).flat(),r=n.find((function(t){return t.toLowerCase()===e.toLowerCase()}));if(void 0!==r)return r;var o=n.find((function(n){var r=t.countDiff(e,n);return r.add<=2&&r.remove<=2}));if(void 0!==o)return o;var i=n.find((function(t){return t.replace(/-/g," ").toLowerCase()===e.toLowerCase()}));if(void 0!==i)return i;var a=n.find((function(n){var r=t.countDiff(e,n.replace(/-/g," "));return r.add<=2&&r.remove<=2}));if(void 0!==a)return a;var u=n.find((function(t){return t.toLowerCase().startsWith(e.toLowerCase())}));if(void 0!==u)return u;var c=n.find((function(t){return e.toLowerCase().includes(t.toLowerCase())}));return void 0!==c?c:e},t.autoCorrectStreet=function(e){if(U(e)||"string"!=typeof e||0===e.length)return e;t.STREET_TYPE.forEach((function(t){t.short.length<t.long.length&&(e=(e=e.replace(new RegExp("(\\s"+String(t.short)+"\\.?\\s)","ig")," "+String(t.long)+" ")).replace(new RegExp("(\\s"+String(t.short)+"\\.\\s)","ig")," "+String(t.long)+" "))}));var n=new RegExp("^(0+)[0-9]+,?\\s[a-zA-Z]+").exec(e);return null!==n&&2===n.length&&(e=e.substring(n[1].length)),t.STREET_TYPE.forEach((function(t){e=(e=e.replace(new RegExp("([0-9]+)("+String(t.long)+"\\s)","ig"),"$1 $2")).replace(new RegExp("([0-9]+)("+String(t.short)+"\\.?\\s)","ig"),"$1 "+String(t.long)+" ")})),e},t.getZipCodeFromCity=function(e){if(!U(e))return Object.keys(t.ZIPCODE_CITY).reduce((function(n,r){return void 0!==t.ZIPCODE_CITY[r].find((function(t){return t.toLowerCase()===e.toLowerCase()}))?r:n}),void 0)},t.getCityFromZipCode=function(e,n){if(void 0!==e&&void 0!==n){var r,o=t.ZIPCODE_CITY[e];if(void 0!==o)return 1===o.length?o[0]:(n.split(",").forEach((function(t){r=o.find((function(e){return t.trim().toLowerCase()===e.trim().toLowerCase()}))})),void 0!==r?r:o[0])}},t.isZipCode=function(e){return"string"==typeof e&&(!!Object.keys(t.ZIPCODE_CITY).includes(e)||ot.isNumber(e)&&5===e.length&&!e.includes(".")&&!e.includes("-"))},t.parse=function(e,n){void 0===n&&(n=!0);var r={};if(!U(e)){var o=e.split(",");if(o.length>=3&&n){void 0===t.COUNTRIES.find((function(t){return e.toLowerCase().includes(" "+t.toLowerCase())}))&&o.push("France");var i=o.length-1;if(r.country=o[i].trim(),o.splice(i--,1),void 0!==o[i]&&o[i].trim().includes(" ")){var a=o[i].trim().split(" ");r.zip=void 0===a[0]?void 0:a[0].trim(),a.splice(0,1),r.city=a.join(" ").trim(),o.splice(i--,1)}else isNaN(Number(o[i].trim()))?isNaN(Number(o[i-1].trim()))?(r.city=o[i].trim(),o.splice(i--,1)):(r.city=o[i].trim(),o.splice(i--,1),r.zip=o[i].trim(),o.splice(i--,1)):(r.zip=o[i].trim(),o.splice(i--,1),i>=2&&(r.city=o[i].trim(),o.splice(i--,1)));r.street=o.map((function(t){return t.trim()})).join(" ").trim()}else{var u=e.toLowerCase();Object.keys(t.ZIPCODE_CITY).forEach((function(t){if(u.includes(t)){r.zip=t;try{u=u.replace(new RegExp(Wt.escapeRegExp(t),"ig"),"")}catch(t){}}})),Object.values(t.ZIPCODE_CITY).flat().forEach((function(e){var n;if(u.includes(e.toLowerCase())&&(void 0===r.zip||(null===(n=t.ZIPCODE_CITY[r.zip])||void 0===n?void 0:n.find((function(t){return t.toLowerCase()===e.toLowerCase()}))))){r.city=e;try{u=u.replace(new RegExp(Wt.escapeRegExp(e),"ig"),"")}catch(t){}}})),t.COUNTRIES.forEach((function(t){if(u.includes(" "+t.toLowerCase())&&!u.includes("de "+t.toLowerCase())&&!u.includes("de la "+t.toLowerCase())){r.country=t;try{u=u.replace(new RegExp(Wt.escapeRegExp(" "+t),"ig"),"")}catch(t){}}})),void 0===r.street&&(r.street=(0,pt.trim)(u.split(",").map((function(t){return t.trim()})).join(" "),"-").trim())}void 0===r.country&&(r.country="France")}return void 0!==r.street&&(r.street=Zt.lower(Zt.trim(String(r.street)))),void 0!==r.zip&&(r.zip=Zt.upper(Zt.trim(String(r.zip)))),void 0!==r.city&&(r.city=t.autoCorrectCity(Zt.capitalize(Zt.trim(String(r.city))))),void 0!==r.country&&(r.country=Zt.capitalize(Zt.trim(String(r.country)))),t.complete(r)},t.complete=function(e){if(void 0===e.city||0===e.city.length){var n=t.getCityFromZipCode(e.zip,e.street);void 0!==n&&(e.city=n)}return"string"==typeof e.street&&t.REGIONS.forEach((function(t){e.street=Wt.removeText(e.street,t).trim()})),"fr"===Zt.lower(e.country)&&(e.country="France"),e},t.removeDuplicates=function(t){if("string"!=typeof t)return t;var e=[];return t.split(",").forEach((function(t){void 0===e.find((function(e){return e.trim().toLowerCase().includes(t.trim().toLowerCase())}))&&e.push(t)})),e.join(",")},t.countDiff=function(t,e){var n={add:0,remove:0};return zt(t.toLowerCase(),e.toLowerCase()).forEach((function(t){switch(t[0]){case-1:n.remove+=t[1].length;break;case 1:n.add+=t[1].length}})),n},t.ZIPCODE_CITY={78500:["Sartrouville"],78600:["Maisons-Laffitte","Le Mesnil-le-Roi"],78800:["Houilles"],95240:["Cormeilles-en-Parisis"],95530:["La Frette-sur-Seine"],78100:["Saint-Germain-en-Laye"],95100:["Argenteuil"],78630:["Orgeval","Morainvilliers"],78670:["Villennes-sur-Seine","Medan"],78240:["Chambourcy","Aigremont"],78300:["Poissy"],78510:["Triel-sur-Seine"],78570:["Andrésy","Chanteloup-les-Vignes"],78700:["Conflans-Sainte-Honorine"],78480:["Verneuil-sur-Seine"],78750:["Mareil-Marly"],78620:["L'Étang-la-Ville"],78160:["Marly-le-Roi"],78580:["Les Alluets-le-Roi"],78955:["Carrières-sous-Poissy"],78260:["Achères"],78540:["Vernouillet"],78920:["Ecquevilly"],95150:["Taverny"],95250:["Beauchamp"],95480:["Pierrelaye"],95320:["Saint-Leu-la-Forêt"],95550:["Bessancourt"],95370:["Montigny-lès-Cormeilles"],95220:["Herblay"],95740:["Frépillon"],95540:["Méry-sur-Oise"],95870:["Bezons"],78420:["Carrières-sur-Seine"],78400:["Chatou"],78110:["Le Vésinet"],78360:["Montesson"],78290:["Croissy-sur-Seine","Croissy"],78230:["Le Pecq"],95600:["Eaubonne"]},t.REGIONS=["île-de-france"],t.COUNTRIES=["France","FR"],t.STREET_TYPE=[{short:"av",long:"avenue"},{short:"rue",long:"rue"},{short:"bd",long:"boulevard"},{short:"chau",long:"chaussée"},{short:"trav",long:"traverse"},{short:"pl",long:"place"},{short:"pass",long:"passage"},{short:"sent",long:"sentier"},{short:"imp",long:"impasse"},{short:"all",long:"allée"},{short:"chem",long:"chemin"},{short:"ham",long:"hameau"},{short:"dom",long:"domaine"}],t}(),Vt=function(){function t(){}return t.getCycleDateFromFullDate=function(t,e){if("weekly"===e){var n=tt.DateTime.fromISO(t.replace(/-W([0-9])$/i,"-W0$1")).toISOWeekDate();if(null===n)return t;var r=n.split("-");return r.length>2?r[0]+"-"+r[1]:r.join("-")}return"monthly"===e?tt.DateTime.fromISO(t).toFormat("yyyy-LL"):tt.DateTime.fromISO(t).toISODate()},t.displayWeekDay=function(e){var n="";return void 0!==t.WEEK_DAYS[e]&&(n=t.WEEK_DAYS[e]),n},t.generatePeriod=function(e,n,r,o,i,a){void 0===o&&(o=!0),void 0===i&&(i=t.PERIOD_MAX_DATES),void 0===a&&(a="daily");for(var u={daily:{day:1},weekly:{week:1},monthly:{month:1}}[a],c=tt.DateTime.fromISO(e,{setZone:!0}).toISODate(),s=tt.DateTime.fromISO(n,{setZone:!0}).toISODate(),l=0,f={};c<=s&&l<i;){var p=t.getCycleDateFromFullDate(c,a);f[p]=(0,pt.cloneDeep)(r),o&&(f[p].date=p),c=tt.DateTime.fromISO(c,{setZone:!0}).plus(u).toISODate(),l++}return f},t.getOpenPeriods=function(t,e){var n=[];return t.forEach((function(t){for(var r=[t],o=function(){var t=r[0];if(void 0===e.find((function(e){return e.from<=t.from&&t.to<=e.to}))){var o=e.find((function(e){return e.from<=t.from&&t.from<e.to&&e.to<t.to}));if(void 0!==o)r.push({from:o.to,to:t.to});else{var i=e.find((function(e){return t.from<e.from&&t.to>e.from&&t.to<=e.to}));if(void 0!==i)r.push({from:t.from,to:i.from});else{var a=e.find((function(e){return t.from<e.from&&e.to<t.to}));void 0!==a?(r.push({from:t.from,to:a.from}),r.push({from:a.to,to:t.to})):n.push(t)}}}r.shift()};r.length>0;)o()})),n},t.limitDate=function(t,e,n){if(void 0===n&&(n=0),void 0!==t&&void 0!==e){var r=tt.DateTime.fromISO(t,{setZone:!0}).toISO(),o=tt.DateTime.fromISO(e,{setZone:!0}).plus({seconds:n}).toISO();return r>o?o:r}},t.localeToISO=function(t){var e,n=new RegExp("[0-9]{2}/[0-9]{2}/[0-9]{4}"),r=new RegExp("[0-9]{2}-[0-9]{2}-[0-9]{4}"),o=new RegExp("[0-9]{4}-[0-9]{2}-[0-9]{2}");if(n.test(t))e=(i=t.split("/"))[2]+"-"+i[1]+"-"+i[0];else if(r.test(t)){var i;e=(i=t.split("-"))[2]+"-"+i[1]+"-"+i[0]}else o.test(t)&&(e=t);return e},t.slotToTime=function(t){var e,n=new RegExp("^(\\s)?[0-9]{2}:[0-9]{2}(\\s)?$"),r=new RegExp("^(\\s)?[0-9]{2}:[0-9]{2}(\\s)?-(\\s)?[0-9]{2}:[0-9]{2}(\\s)?$");return t=t.trim(),n.test(t)?e=t.trim()+":00":r.test(t)&&(e=t.split("-")[0].trim()+":00"),e},t.delay=function(t,e,n){return U(t)||U(e)?0:Math.round(Math.abs(tt.DateTime.fromISO(t,{setZone:!0}).toUTC().diff(tt.DateTime.fromISO(e,{setZone:!0}).toUTC(),[n])[n]))},t.round=function(t,e){if(void 0===e&&(e=0),"string"!=typeof t)return t;var n=tt.DateTime.fromISO(t,{setZone:!0});return tt.DateTime.fromMillis(Math.round(+n.toMillis()/e)*e).setZone(n.zone).toISO()},t.min=function(t){return t.reduce((function(t,e){return"string"!=typeof t||t>e?e:t}),void 0)},t.max=function(t){return t.reduce((function(t,e){return void 0===t||t<e?e:t}),void 0)},t.PERIOD_MAX_DATES=90,t.WEEK_DAYS={1:"lundi",2:"mardi",3:"mercredi",4:"jeudi",5:"vendredi",6:"samedi",7:"dimanche"},t}(),Jt=function(){function t(){}return t.phone=function(t,e){if("string"==typeof t&&(t=t.trim().replace(/\s?\.?\-?\(?\)?/g,""),"fr"===e)){var n=new RegExp("(0[6-7][0-9]{8})","i").exec(t);if(null!==n&&n.length>0&&null!==n[0])return n[0]}},t}(),Yt=function(){function t(){}return t.avg=function(e){if(0===e.length)return 0;var n=e.reduce((function(t,e){return t+e}),0);return t.round(n/e.length,2)},t.applyVariation=function(t,e){return t*(t>=0?1+e/100:1-e/100)},t.median=function(e){if(0===e.length)return 0;if(1===e.length)return e[0];var n=e.sort((function(t,e){return t-e}));return n.length%2==0?t.avg([n[n.length/2-1],n[n.length/2]]):n[Math.floor(n.length/2)]},t.percentage=function(t,e){if("number"==typeof t&&"number"==typeof e)return 0===e?0:t/e*100},t.round=function(t,e){return"number"!=typeof t?t:0===e?Math.round(t):Math.round(t*Math.pow(10,e))/Math.pow(10,e)},t.variation=function(t,e){var n=0;return 0!==e?n=0!==t?(e-t)/Math.abs(t)*100:100*(e>0?1:-1):0!==t&&(n=-100*(t>0?1:-1)),Math.floor(n)},t}(),$t=function(){function t(){}return t.compact=function(e,n){if(void 0===n&&(n={}),(0,pt.isArray)(e)){var r=[];return e.forEach((function(e){e=t.compact(e,n),((0,pt.isArray)(e)&&e.length>0||(0,pt.isObject)(e)&&Object.keys(e).length>0||null!=e&&!(0,pt.isArray)(e)&&!(0,pt.isObject)(e))&&r.push(e)})),r}if((0,pt.isObject)(e)){var o={};return Object.keys(e).forEach((function(r){var i=e[r];(0,pt.isArray)(i)||(0,pt.isObject)(i)?(i=t.compact(i,n),((0,pt.isArray)(i)&&i.length>0||(0,pt.isObject)(i)&&Object.keys(i).length>0||null!=i&&!(0,pt.isArray)(i)&&!(0,pt.isObject)(i))&&(o[r]=i)):null!=i&&("string"!=typeof i||!1===n.removeEmptyString||i.length>0)&&(o[r]=i)})),o}return"string"!=typeof e||!1===n.removeEmptyString||e.length>0?e:void 0},t}(),Xt=function(){function t(){}return t.applyTaxes=function(t,e,n){void 0===n&&(n=2);var r=Number(t);return e.forEach((function(e){r+=Number(t)*e})),String(Yt.round(r,n))},t.calculateTaxes=function(t,e){var n=0;return e.forEach((function(e){n+=t*e})),Yt.round(n,2)},t.displayWithCurrency=function(e,n){if(null==e)return e;var r=t.currencies[n],o=e+" "+n;if(void 0!==r)switch(r.position){case"before":o=r.symbol+e;break;case"after":o=e+r.symbol}return o},t.format=function(t,e,n){if(void 0===n&&(n=2),null==t)return t;var r=Number(t.replace(/\,/gi,"")).toLocaleString("en-US",{style:"decimal",useGrouping:!0,minimumFractionDigits:n,maximumFractionDigits:n});switch(e){case"fr":return r.replace(/\,/gi," ").replace(/\./gi,",");case"us":return r}},t.round=function(t,e){void 0===e&&(e=.1);var n=100*Number(t),r=100*e,o=n%r;return String(Yt.round(n-o+(o<Math.ceil(r/2)?0:r),2)/100)},t.currencies={CAD:{symbol:"$",position:"before"},EUR:{symbol:"€",position:"after"},USD:{symbol:"$",position:"before"}},t}();return r})()));
2
2
  //# sourceMappingURL=common-api.node.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"common-api.node.min.js","mappings":"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","sources":["webpack://SmilePlayerCommon/webpack/universalModuleDefinition","webpack://SmilePlayerCommon/external commonjs \"emoji-regex\"","webpack://SmilePlayerCommon/webpack/bootstrap","webpack://SmilePlayerCommon/webpack/runtime/compat get default export","webpack://SmilePlayerCommon/webpack/runtime/define property getters","webpack://SmilePlayerCommon/webpack/runtime/hasOwnProperty shorthand","webpack://SmilePlayerCommon/webpack/runtime/make namespace object","webpack://SmilePlayerCommon/./src/constant/Path.ts","webpack://SmilePlayerCommon/./src/exception/MainException.ts","webpack://SmilePlayerCommon/./src/exception/BadParameterException.ts","webpack://SmilePlayerCommon/./src/exception/BadRequestException.ts","webpack://SmilePlayerCommon/./src/exception/ConflictException.ts","webpack://SmilePlayerCommon/./src/exception/DuplicateException.ts","webpack://SmilePlayerCommon/./src/exception/ExternalApiException.ts","webpack://SmilePlayerCommon/./src/exception/InternalException.ts","webpack://SmilePlayerCommon/./src/exception/NotImplementedException.ts","webpack://SmilePlayerCommon/./src/exception/ObjectNotFoundException.ts","webpack://SmilePlayerCommon/./src/exception/PageNotFoundException.ts","webpack://SmilePlayerCommon/./src/exception/UnauthorizedException.ts","webpack://SmilePlayerCommon/external commonjs \"@sentry/node\"","webpack://SmilePlayerCommon/external commonjs \"@sentry/profiling-node\"","webpack://SmilePlayerCommon/./src/tool/Env.ts","webpack://SmilePlayerCommon/./src/tool/Environment.ts","webpack://SmilePlayerCommon/./src/util/HelperUtil.ts","webpack://SmilePlayerCommon/./src/tool/Logger.ts","webpack://SmilePlayerCommon/./src/http/HandlerController.ts","webpack://SmilePlayerCommon/./src/http/AuthenticationMiddleware.ts","webpack://SmilePlayerCommon/./src/http/AuthorizationMiddleware.ts","webpack://SmilePlayerCommon/external node-commonjs \"crypto\"","webpack://SmilePlayerCommon/external commonjs \"express\"","webpack://SmilePlayerCommon/external commonjs \"cors\"","webpack://SmilePlayerCommon/external commonjs \"compression\"","webpack://SmilePlayerCommon/external commonjs \"helmet\"","webpack://SmilePlayerCommon/external commonjs \"connect-timeout\"","webpack://SmilePlayerCommon/./src/http/Server.ts","webpack://SmilePlayerCommon/external commonjs \"axios\"","webpack://SmilePlayerCommon/external commonjs \"luxon\"","webpack://SmilePlayerCommon/external node-commonjs \"querystring\"","webpack://SmilePlayerCommon/external commonjs \"retry\"","webpack://SmilePlayerCommon/./src/tool/Retry.ts","webpack://SmilePlayerCommon/./src/util/ValidatorUtil.ts","webpack://SmilePlayerCommon/external commonjs \"iconv-lite\"","webpack://SmilePlayerCommon/./src/util/UrlUtil.ts","webpack://SmilePlayerCommon/./src/service/sender/SmsSenderService.ts","webpack://SmilePlayerCommon/external node-commonjs \"path\"","webpack://SmilePlayerCommon/external commonjs \"mustache\"","webpack://SmilePlayerCommon/external commonjs \"lodash\"","webpack://SmilePlayerCommon/external node-commonjs \"fs\"","webpack://SmilePlayerCommon/./src/util/PromiseUtil.ts","webpack://SmilePlayerCommon/external commonjs \"color-name\"","webpack://SmilePlayerCommon/./src/util/GeneratorUtil.ts","webpack://SmilePlayerCommon/./src/tool/FileSystem.ts","webpack://SmilePlayerCommon/external commonjs \"clean-css\"","webpack://SmilePlayerCommon/external commonjs \"html-minifier-terser\"","webpack://SmilePlayerCommon/./src/templating/MinifierEngine.ts","webpack://SmilePlayerCommon/./src/templating/TemplateEngine.ts","webpack://SmilePlayerCommon/external commonjs \"node-mailjet\"","webpack://SmilePlayerCommon/./src/service/sender/EmailSenderService.ts","webpack://SmilePlayerCommon/./src/tool/Configuration.ts","webpack://SmilePlayerCommon/external commonjs \"typeorm\"","webpack://SmilePlayerCommon/./src/tool/Database.ts","webpack://SmilePlayerCommon/external commonjs \"prettyjson\"","webpack://SmilePlayerCommon/./src/tool/Displayer.ts","webpack://SmilePlayerCommon/./src/tool/Downloader.ts","webpack://SmilePlayerCommon/external commonjs \"fast-diff\"","webpack://SmilePlayerCommon/./src/util/StringUtil.ts","webpack://SmilePlayerCommon/./src/util/FormatterUtil.ts","webpack://SmilePlayerCommon/./src/util/AddressUtil.ts","webpack://SmilePlayerCommon/./src/util/DateUtil.ts","webpack://SmilePlayerCommon/./src/util/ExtractorUtil.ts","webpack://SmilePlayerCommon/./src/util/MathUtil.ts","webpack://SmilePlayerCommon/./src/util/ObjectUtil.ts","webpack://SmilePlayerCommon/./src/util/PriceUtil.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SmilePlayerCommon\"] = factory();\n\telse\n\t\troot[\"SmilePlayerCommon\"] = factory();\n})(global, () => {\nreturn ","module.exports = require(\"emoji-regex\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export class Path {\n private static BASE_PATH: string = './';\n\n public static registerBasePath(basePath: string): void {\n if (process.env.APP_HOME !== undefined) {\n Path.BASE_PATH = process.env.APP_HOME + '/';\n } else {\n Path.BASE_PATH = basePath + (basePath.endsWith('/') ? '' : '/');\n }\n }\n\n public static data(): string {\n return Path.BASE_PATH + 'data/';\n }\n\n public static db(): string {\n return Path.storage() + 'db/';\n }\n\n public static root(): string {\n return Path.BASE_PATH;\n }\n\n public static session(): string {\n return Path.storage() + 'session/';\n }\n\n public static storage(): string {\n return Path.BASE_PATH + 'storage/';\n }\n}\n","import {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class MainException extends Error implements ExceptionContract {\n public code: number;\n public data: {[key: string]: any};\n\n public constructor(message: string, code?: number, data?: {[key: string]: any}) {\n super(message);\n this.code = code;\n this.data = data;\n this.name = 'MainException';\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, MainException);\n } else {\n this.stack = (new Error(message)).stack;\n }\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class BadParameterException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 400, data);\n this.name = 'BadParameterException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class BadRequestException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 400, data);\n this.name = 'BadRequestException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class ConflictException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 409, data);\n this.name = 'ConflictException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class DuplicateException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 409, data);\n this.name = 'DuplicateException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class ExternalApiException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 502, data);\n this.name = 'ExternalApiException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class InternalException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 500, data);\n this.name = 'InternalException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class NotImplementedException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 501, data);\n this.name = 'NotImplementedException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class ObjectNotFoundException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 404, data);\n this.name = 'ObjectNotFoundException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class PageNotFoundException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 404, data);\n this.name = 'PageNotFoundException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class UnauthorizedException extends MainException implements ExceptionContract {\n public static readonly ERROR_CODE: number = 401;\n\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, UnauthorizedException.ERROR_CODE, data);\n this.name = 'UnauthorizedException';\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@sentry/node\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@sentry/profiling-node\");","/* eslint-disable no-shadow */\nexport enum Env {\n PRODUCTION = 'prod',\n DEVELOPMENT = 'dev',\n TEST = 'test'\n}\n","import {Env} from 'common/tool/Env';\n\nexport class Environment {\n public static getMode(): Env {\n switch (process.env.NODE_ENV) {\n case 'dev':\n case 'development':\n return Env.DEVELOPMENT;\n case 'prod':\n case 'production':\n return Env.PRODUCTION;\n case 'test':\n return Env.TEST;\n }\n\n return process.env.APP_ID === undefined ? Env.DEVELOPMENT : Env.PRODUCTION;\n }\n}\n","export const isNullOrUndefined: (obj: unknown) => boolean = (obj) => {\n return obj === undefined || obj === null;\n};\n","import * as Sentry from '@sentry/node';\nimport {nodeProfilingIntegration} from '@sentry/profiling-node';\nimport {Environment} from 'common/tool/Environment';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\nimport {UnauthorizedException} from 'common/exception/UnauthorizedException';\nimport {Env} from 'common/tool/Env';\nimport * as express from 'express';\nimport {isNullOrUndefined} from 'common/util/HelperUtil';\n\nexport class Logger {\n public static init(sentryToken: string, app: express.Express): void {\n if (Environment.getMode() === Env.PRODUCTION) {\n // const tracesSampleRate: number = 0.001;\n const tracesSampleRate: number = 0; // TODO enable tracing\n Sentry.init({\n dsn: sentryToken,\n integrations: [\n Sentry.captureConsoleIntegration({\n levels: ['error', 'warn', 'log']\n }),\n nodeProfilingIntegration()\n ],\n environment: Environment.getMode(),\n maxBreadcrumbs: 50,\n tracesSampleRate: tracesSampleRate,\n profilesSampleRate: tracesSampleRate\n });\n Sentry.setupExpressErrorHandler(app);\n }\n }\n\n public static trace(message: string, extra?: any): void {\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.info(message); // eslint-disable-line no-console\n } else {\n console.info(message, extra); // eslint-disable-line no-console\n }\n } else {\n Sentry.addBreadcrumb({\n category: 'info',\n message: message,\n data: extra,\n level: 'info'\n });\n }\n }\n\n public static debug(message: string, extra?: any): void {\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.log(message); // eslint-disable-line no-console\n } else {\n console.log(message, extra); // eslint-disable-line no-console\n }\n } else {\n Sentry.addBreadcrumb({\n category: 'debug',\n message: message,\n data: extra,\n level: 'debug'\n });\n }\n }\n\n public static info(message: string, extra?: any): void {\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.info(message); // eslint-disable-line no-console\n } else {\n console.info(message, extra); // eslint-disable-line no-console\n }\n } else {\n Sentry.withScope(scope => {\n if (extra !== undefined) {\n scope.setExtra('extra', JSON.stringify(extra));\n }\n Sentry.captureMessage(message);\n });\n }\n }\n\n public static warning(error: ExceptionContract, extra?: any): void {\n if(!isNullOrUndefined((error as any).response)) {\n if (typeof extra !== 'object') {\n extra = {};\n }\n extra.requestErrorData = (error as any).response.data;\n }\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.warn(error); // eslint-disable-line no-console\n } else {\n console.warn(error, extra); // eslint-disable-line no-console\n }\n } else {\n Sentry.withScope(scope => {\n if (extra !== undefined) {\n scope.setExtra('extra', JSON.stringify(extra));\n }\n if (error.data !== undefined) {\n scope.setExtra('data', JSON.stringify(error.data));\n }\n Sentry.captureException(error);\n });\n }\n }\n\n public static error(error: ExceptionContract, extra?: any): void {\n if ([UnauthorizedException.ERROR_CODE].includes(error.code)) {\n return;\n }\n if(!isNullOrUndefined((error as any).response)) {\n if (typeof extra !== 'object') {\n extra = {};\n }\n extra.requestErrorData = (error as any).response.data;\n }\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.error(error); // eslint-disable-line no-console\n } else {\n console.error(error, extra); // eslint-disable-line no-console\n }\n } else {\n Sentry.withScope(scope => {\n if (extra !== undefined) {\n scope.setExtra('extra', JSON.stringify(extra));\n }\n if (error.data !== undefined) {\n scope.setExtra('data', JSON.stringify(error.data));\n }\n Sentry.captureException(error);\n });\n }\n }\n}\n","import * as express from 'express';\nimport {Logger} from 'common/tool/Logger';\n\nexport class HandlerController {\n public static error(_request: express.Request, response: express.Response, error: any): any {\n Logger.error(error);\n const code: number = error.code !== undefined && error.code !== null ? Number(error.code) : 500;\n response.status(!isNaN(code) && Number(error.code) >= 400 && Number(error.code) <= 599 ? Number(error.code) : 500);\n response.json({code: error.code, message: error.message});\n }\n}\n","import * as express from 'express';\nimport {AuthenticationMiddlewareContract} from 'common/http/AuthenticationMiddlewareContract';\nimport {AuthentificationConfigurationContract} from 'common/http/AuthentificationConfigurationContract';\nimport {UnauthorizedException} from 'common/exception/UnauthorizedException';\nimport {HandlerController} from 'common/http/HandlerController';\n\nexport class AuthenticationMiddleware implements AuthenticationMiddlewareContract {\n private configuration: AuthentificationConfigurationContract;\n\n public constructor(configuration: AuthentificationConfigurationContract) {\n this.configuration = configuration;\n }\n\n public handler(): (request: express.Request, response: express.Response, next: () => void) => void {\n return (request: express.Request, response: express.Response, next: () => void) => {\n try {\n let authenticated: boolean = false;\n\n if (!authenticated && this.configuration.jwt !== undefined) {\n (request as any).session = {\n // TODO\n };\n\n authenticated = true;\n }\n\n if (!authenticated && this.configuration.key !== undefined) {\n authenticated = this.authApiKey(request);\n }\n\n if (!authenticated && this.configuration.session !== undefined) {\n const sessionKeys: string[] = Object.keys((request as any).session);\n if (!Array.isArray(this.configuration.session.required)) {\n throw new UnauthorizedException('session is not well formatted');\n }\n\n this.configuration.session.required.forEach((required) => {\n if (!sessionKeys.includes(required)) {\n throw new UnauthorizedException('session is incomplete');\n }\n });\n\n authenticated = true;\n }\n\n if (!authenticated && this.configuration.none !== undefined) {\n authenticated = this.authNone(request);\n }\n\n if (authenticated) {\n next();\n } else {\n throw new UnauthorizedException('request is not authenticate');\n }\n } catch (error) {\n HandlerController.error(request, response, error);\n }\n };\n }\n\n private authApiKey(request: express.Request): boolean {\n if (typeof request.headers.Authorization !== 'string' || !request.headers.Authorization.startsWith('apiKey')) {\n return false;\n }\n\n const parts: string[] = request.headers.Authorization.split(' ');\n if (parts.length !== 2) {\n throw new UnauthorizedException('api key is not well formatted');\n }\n\n if (parts[1] !== this.configuration.key.secret) {\n throw new UnauthorizedException('api key is not valid');\n }\n\n (request as any).session = {};\n\n return true;\n }\n\n private authNone(request: express.Request): boolean {\n if (Array.isArray(this.configuration.none.urlStartsWith)) {\n if (this.configuration.none.urlStartsWith.find((urlStartsWith) => request.originalUrl?.startsWith(urlStartsWith)) !== undefined) {\n (request as any).session = {};\n\n return true;\n }\n }\n\n return false;\n }\n}\n","import {AuthorizationMiddlewareContract} from 'common/http/AuthorizationMiddlewareContract';\n\nexport class AuthorizationMiddleware implements AuthorizationMiddlewareContract {\n public can(_action: string, _subject: string): void {\n // TODO\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"crypto\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"express\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"cors\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"compression\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"helmet\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"connect-timeout\");","import * as crypto from 'crypto';\nimport * as express from 'express';\nimport * as cors from 'cors';\nimport * as compression from 'compression';\nimport helmet from 'helmet';\nimport * as timeout from 'connect-timeout';\nimport {ServerContract} from 'common/http/ServerContract';\nimport {Logger} from 'common/tool/Logger';\n\nexport class Server implements ServerContract {\n public static readonly DEFAULT_PORT: number = 8080;\n public static readonly SALT: string = '03561b4a0fe7f125025';\n private app: express.Express;\n\n public async create(origins: string[], port?: number): Promise<express.Express> {\n if (this.app === undefined) {\n const backendPort: number = port || Server.DEFAULT_PORT;\n const backendLocalUrl: string = 'http://localhost:' + String(backendPort);\n Logger.debug('start server on ' + backendLocalUrl);\n this.app = express();\n this.app.set('trust proxy', true);\n this.app.use(compression({level: -1}));\n this.app.use(timeout('300s'));\n this.app.use(express.json({\n inflate: true,\n limit: '10mb',\n reviver: null,\n strict: true,\n type: 'application/json',\n verify: undefined\n }));\n this.app.use(express.urlencoded({\n limit: '10mb'\n }));\n this.app.use(cors({\n origin: [backendLocalUrl].concat(origins),\n credentials: true\n }));\n this.app.use(helmet());\n this.app.use(express.json());\n this.app.listen(backendPort, () => {\n Logger.debug('server is running on ' + backendLocalUrl);\n });\n }\n\n return this.app;\n }\n\n public getSessionSecret(sessionCookieName: string): string {\n return crypto.createHash('sha1').update(sessionCookieName + Server.SALT).digest('hex');\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"axios\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"luxon\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"querystring\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"retry\");","import * as retry from 'retry';\n\nexport class Retry {\n public static async request(process: () => Promise<void>, retries: number = 2, logger: (error: Error) => void): Promise<any> {\n const operation = retry.operation({\n retries: retries,\n factor: 1,\n minTimeout: 0,\n maxTimeout: 0,\n randomize: false\n });\n\n return new Promise<any>((resolve, reject) => {\n operation.attempt(() => {\n process().then(resolve).catch((error) => {\n if (operation.retry(error)) {\n if (typeof logger === 'function') {\n logger(error);\n }\n } else {\n reject(error);\n }\n });\n });\n });\n }\n}\n","export class ValidatorUtil {\n public static isEmail(email: string): boolean {\n if (typeof email !== 'string') {\n return false;\n }\n\n return (new RegExp('^[a-zA-Z0-9\\\\.!#$%&*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\\\.[a-zA-Z0-9-]+)*$', 'i')).test(email);\n }\n\n public static isPhone(phone: string): boolean {\n if (typeof phone !== 'string') {\n return false;\n }\n\n return (new RegExp('^([\\+\\\\s0-9]{10,}(#[0-9]+)?)$')).test(phone);\n }\n\n public static isIntMobilePhone(phone: string): boolean {\n const caRegex: RegExp = new RegExp('^\\\\+1[0-9]{10}$', 'i');\n const frRegex: RegExp = new RegExp('^\\\\+33(6|7)[0-9]{8}$', 'i');\n const usRegex: RegExp = new RegExp('^\\\\+1[0-9]{10}$', 'i');\n\n return caRegex.test(phone) || frRegex.test(phone) || usRegex.test(phone);\n }\n\n public static isNumber(num: string | number): boolean {\n if (typeof num === 'number') {\n return true;\n }\n\n if (typeof num !== 'string') {\n return false;\n }\n\n return (new RegExp('^\\-?[0-9]+\\\\.?[0-9]*$')).test(num);\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"iconv-lite\");","import {encode} from 'iconv-lite';\n\nexport class UrlUtil {\n public static isUTF8(charset: string): boolean {\n if (!charset) {\n return true;\n }\n charset = charset.toLowerCase();\n\n return charset === 'utf8' || charset === 'utf-8';\n }\n\n public static urlencode(str: string, charset: string): string {\n if (!charset || UrlUtil.isUTF8(charset)) {\n return encodeURIComponent(str);\n }\n const buf = encode(str, charset);\n let encodeStr = '';\n let ch = '';\n\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < buf.length; i++) {\n ch = buf[i].toString(16);\n if (ch.length === 1) {\n ch = '0' + ch;\n }\n encodeStr += '%' + ch;\n }\n encodeStr = encodeStr.toUpperCase();\n\n return encodeStr;\n }\n}\n","import axios from 'axios';\nimport {DateTime} from 'luxon';\nimport * as querystring from 'querystring';\nimport {SmsSenderServiceContract} from 'common/service/sender/SmsSenderServiceContract';\nimport {ExternalApiException} from 'common/exception/ExternalApiException';\nimport {Retry} from 'common/tool/Retry';\nimport {Logger} from 'common/tool/Logger';\nimport {Environment} from 'common/tool/Environment';\nimport {BadParameterException} from 'common/exception/BadParameterException';\nimport {Env} from 'common/tool/Env';\nimport {ValidatorUtil} from 'common/util/ValidatorUtil';\nimport {UrlUtil} from 'common/util/UrlUtil';\n\nexport class SmsSenderService implements SmsSenderServiceContract {\n public static readonly BASE_API_URL: string = 'https://api.smsmode.com/http/1.6/';\n public static readonly MESSAGE_MAX_LENGTH: number = 150;\n private readonly token: string;\n private readonly mode: Environment;\n\n public constructor(token: string, mode: Environment) {\n this.token = token;\n this.mode = mode;\n }\n\n public async send(senderName: string, message: string, rawPhones: string[], isCommercial: boolean = true, sendAt?: string): Promise<void> {\n let phones: string[] = this.checkPhoneFormat(rawPhones);\n if (phones.length === 0) {\n Logger.warning(new BadParameterException('no valid phone', {phones: rawPhones}));\n\n return Promise.resolve();\n }\n\n if (phones.length > 1) {\n if (message.length > SmsSenderService.MESSAGE_MAX_LENGTH * 2) {\n message = message.substring(0, SmsSenderService.MESSAGE_MAX_LENGTH * 2);\n } else if (message.length > SmsSenderService.MESSAGE_MAX_LENGTH && message.length <= SmsSenderService.MESSAGE_MAX_LENGTH * 1.33) {\n message = message.substring(0, SmsSenderService.MESSAGE_MAX_LENGTH);\n }\n }\n\n await Retry.request(async () => {\n const params: Record<string, any> = {\n accessToken: this.token,\n emetteur: senderName,\n message: UrlUtil.urlencode(message, 'ISO-8859-15'),\n numero: phones.map((phone) => phone.replace('+', '')).join(','),\n classe_msg: 2,\n nbr_msg: Math.ceil(message.length / SmsSenderService.MESSAGE_MAX_LENGTH)\n };\n\n if (isCommercial) {\n params.stop = 1;\n }\n\n if (sendAt !== undefined) {\n params.date_envoi = DateTime.fromISO(sendAt, { setZone: true }).toFormat('ddMMyyyy-HH:mm');\n }\n\n const target: DateTime = DateTime.fromISO(sendAt ?? (new Date()).toISOString(), { setZone: true }).setZone('Europe/Paris');\n if (isCommercial) { // do not send between 21h and 9h\n if (target.hour >= 21) {\n params.date_envoi = target.plus({day: 1}).set({hour: 9}).toFormat('ddMMyyyy-HH:mm');\n } else if (target.hour < 9) {\n params.date_envoi = target.set({hour: 9}).toFormat('ddMMyyyy-HH:mm');\n }\n } else { // do not send between 00h and 8h\n if (target.hour < 8) {\n params.date_envoi = target.set({hour: 8}).toFormat('ddMMyyyy-HH:mm');\n }\n }\n\n if (this.mode === Env.TEST) {\n Logger.info('Simulation Mode: SMS has been sent', {params: params});\n } else {\n if (this.mode === Env.DEVELOPMENT) {\n phones = ['+15145705214'];\n }\n\n const response: {data: string} = await axios.post(SmsSenderService.BASE_API_URL + 'sendSMS.do',\n querystring.stringify(params, '&', '=', {encodeURIComponent: (p) => p}), {\n timeout: 30000\n });\n\n if (response.data.length > 0 && response.data.trim().substring(0, 1) !== '0') {\n throw new ExternalApiException('Error: ' + response.data, params);\n }\n }\n }, 0, Logger.error.bind(Logger));\n }\n\n private checkPhoneFormat(phones: string[]): string[] {\n return phones.filter((phone) => ValidatorUtil.isIntMobilePhone(phone));\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"path\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"mustache\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"lodash\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"fs\");","export const asyncForEach: (array: any[], callback: (item: any) => Promise<void>) => Promise<void> = async (array, callback) => {\n for (let i: number = 0; i < array.length; i++) { // eslint-disable-line\n await callback(array[i]);\n }\n};\n\nexport const wait: (time: number) => Promise<void> = (time) => {\n return new Promise((resolve) => setTimeout(resolve, time));\n};\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"color-name\");","import * as colors from 'color-name';\n\nexport class GeneratorUtil {\n private static readonly symbolUpperCases: string[] = [\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'K', 'M', 'N', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'\n ];\n private static readonly symbolLowerCases: string[] = [\n 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'k', 'm', 'n', 'p', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'\n ];\n\n public static code(size: number): string {\n if (size === null || size === undefined) {\n size = 6;\n }\n\n let code: string = '';\n while (code.length < size) {\n code += GeneratorUtil.symbolUpperCases[GeneratorUtil.int(0, GeneratorUtil.symbolUpperCases.length - 1)];\n }\n\n return code;\n }\n\n public static color(alpha: number = 1): string {\n const alphaHex: string = GeneratorUtil.rgbToHex(Math.round(255 * alpha));\n const defaultColor: string = '#000000' + alphaHex;\n const colorList: number[][] = Object.values(colors);\n if (colorList.length === 0) {\n return defaultColor;\n }\n const rgb: number[] = colorList[GeneratorUtil.int(0, colorList.length - 1)];\n if (rgb.length !== 3) {\n return defaultColor;\n }\n\n return '#' + GeneratorUtil.rgbToHex(rgb[0]) + GeneratorUtil.rgbToHex(rgb[1]) + GeneratorUtil.rgbToHex(rgb[2]) + alphaHex;\n }\n\n private static rgbToHex(rgb: number): string {\n const hex: string = rgb.toString(16);\n if (hex.length === 1) {\n return '0' + hex;\n }\n\n return hex;\n }\n\n public static int(min: number, max: number): number {\n if (min === null || min === undefined) {\n min = 0;\n }\n if (max === null || max === undefined) {\n max = Number.POSITIVE_INFINITY;\n }\n\n min = Math.ceil(min);\n max = Math.floor(max);\n\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n\n public static password(size: number): string {\n if (size === null || size === undefined) {\n size = 8;\n }\n\n let code: string = '';\n while (code.length < size) {\n switch (GeneratorUtil.int(1, 3)) {\n case 1:\n code += GeneratorUtil.symbolUpperCases[GeneratorUtil.int(0, GeneratorUtil.symbolUpperCases.length - 1)];\n break;\n case 2:\n code += GeneratorUtil.symbolLowerCases[GeneratorUtil.int(0, GeneratorUtil.symbolLowerCases.length - 1)];\n break;\n default:\n code += String(GeneratorUtil.int(0, 9));\n }\n }\n\n return code;\n }\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {BadParameterException} from 'common/exception/BadParameterException';\nimport {asyncForEach} from 'common/util/PromiseUtil';\nimport {GeneratorUtil} from 'common/util/GeneratorUtil';\n\nexport class FileSystem implements FileSystemContract {\n public dirPath(filePath: string): string {\n const i: number = path.resolve(filePath).lastIndexOf(path.sep);\n if (i < 0) {\n return filePath;\n }\n\n return path.resolve(path.resolve(filePath).substr(0, i + 1)) + path.sep;\n }\n\n public async listFiles(dirPath: string): Promise<string[]> {\n if (!this.isDir(dirPath)) {\n throw new BadParameterException(String(dirPath) + ' does not exist or is not a directory');\n }\n\n const separator: string = dirPath.endsWith('/') ? '' : '/';\n const files: string[] = fs.readdirSync(dirPath);\n\n const output: string[] = [];\n await asyncForEach(files, async (fileName: string) => {\n if (this.isFile(dirPath + separator + fileName)) {\n output.push(dirPath + separator + fileName);\n }\n });\n\n return output;\n }\n\n public async randomFile(dirPath: string, suggestion?: number): Promise<string> {\n const filenames: string[] = await this.listFiles(dirPath);\n if (filenames.length === 0) {\n return undefined;\n }\n\n let index: number;\n if (suggestion !== undefined) {\n index = Math.max(suggestion, 0) % filenames.length;\n } else {\n index = GeneratorUtil.int(0, filenames.length - 1);\n }\n\n return filenames[index];\n }\n\n public async move(filePath: string, dirPath: string): Promise<void> {\n if (!this.isFile(filePath)) {\n throw new BadParameterException(String(filePath) + ' does not exist or is not a file');\n }\n\n fs.mkdirSync(dirPath, {recursive: true});\n if (!this.isDir(dirPath)) {\n throw new BadParameterException(String(dirPath) + ' does not exist or is not a directory');\n }\n\n return fs.renameSync(filePath, dirPath + path.basename(filePath));\n }\n\n public async read(filePath: string): Promise<string> {\n if (!this.isFile(filePath)) {\n throw new BadParameterException(String(filePath) + ' does not exist or is not a file');\n }\n\n return fs.readFileSync(filePath, 'utf8');\n }\n\n public async readJson(jsonPath: string): Promise<any> {\n const data: any = await this.read(jsonPath);\n if (!this.isJson(data)) {\n throw new BadParameterException(String(jsonPath) + ' does not contain JSON');\n }\n\n return JSON.parse(data);\n }\n\n public async readJsonFiles(dirPath: string): Promise<{name: string, data: any}[]> {\n if (!this.isDir(dirPath)) {\n throw new BadParameterException(String(dirPath) + ' does not exist or is not a directory');\n }\n\n const separator: string = dirPath.endsWith('/') ? '' : '/';\n const files: string[] = fs.readdirSync(dirPath);\n\n const output: {name: string, data: any}[] = [];\n await asyncForEach(files, async (fileName: string) => {\n if (this.isFile(dirPath + separator + fileName) && fileName.endsWith('.json')) {\n output.push({\n name: fileName,\n data: await this.readJson(dirPath + separator + fileName)\n });\n }\n });\n\n return output;\n }\n\n public async write(filePath: string, rawData: any): Promise<void> {\n let data: string = '';\n if (typeof rawData === 'string') {\n data = String(rawData);\n } else if (typeof rawData === 'number') {\n data = String(rawData);\n } else {\n data = JSON.stringify(rawData);\n }\n\n fs.mkdirSync(this.dirPath(filePath), {recursive: true});\n\n fs.writeFileSync(filePath, data, {encoding: 'utf8'});\n\n return Promise.resolve();\n }\n\n public async writeJson(jsonPath: string, data: any): Promise<void> {\n return this.write(jsonPath, JSON.stringify(data));\n }\n\n private isDir(dirPath: string): boolean {\n return fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();\n }\n\n private isFile(filePath: string): boolean {\n return fs.existsSync(filePath) && fs.statSync(filePath).isFile();\n }\n\n private isJson(data: any): boolean {\n try {\n JSON.parse(data);\n\n return true;\n } catch (_error) {\n return false;\n }\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"clean-css\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"html-minifier-terser\");","import {MinifierEngineContract} from 'common/templating/MinifierEngineContract';\nimport * as CleanCSS from 'clean-css';\nimport {minify as minifyHtml} from 'html-minifier-terser';\n\nexport class MinifierEngine implements MinifierEngineContract {\n public async css(content: string): Promise<string> {\n const minifier: CleanCSS.MinifierOutput = new CleanCSS({\n compatibility: 'ie7',\n format: false,\n level: 1,\n sourceMap: false\n });\n const result: CleanCSS.Output = minifier.minify(content);\n\n return result.styles;\n }\n\n public async html(content: string): Promise<string> {\n return await minifyHtml(content, {\n collapseBooleanAttributes: true,\n collapseInlineTagWhitespace: true,\n collapseWhitespace: true,\n continueOnParseError: false,\n decodeEntities: false,\n html5: true,\n minifyCSS: true,\n minifyJS: true,\n noNewlinesBeforeTagClose: true,\n preserveLineBreaks: false,\n preventAttributesEscaping: false,\n processConditionalComments: false,\n quoteCharacter: '\"',\n removeAttributeQuotes: false,\n removeComments: true,\n removeEmptyAttributes: true,\n removeEmptyElements: true,\n removeOptionalTags: false,\n removeRedundantAttributes: true,\n removeScriptTypeAttributes: false,\n removeStyleLinkTypeAttributes: false,\n removeTagWhitespace: false\n });\n }\n}\n","import * as path from 'path';\nimport {parse, render} from 'mustache';\nimport {cloneDeep} from 'lodash';\nimport {TemplateEngineContract} from 'common/templating/TemplateEngineContract';\nimport {FileSystem} from 'common/tool/FileSystem';\nimport {asyncForEach} from 'common/util/PromiseUtil';\nimport {MinifierEngineContract} from 'common/templating/MinifierEngineContract';\nimport {MinifierEngine} from 'common/templating/MinifierEngine';\nimport {ConflictException} from 'common/exception/ConflictException';\n\nexport class TemplateEngine implements TemplateEngineContract {\n private minifier: MinifierEngineContract;\n\n public constructor() {\n this.minifier = new MinifierEngine();\n }\n\n public async render(templatePath: string, data: {[key: string]: any}, baseIncludePath?: string): Promise<string> {\n if (!templatePath.endsWith('.template')) {\n templatePath += '.template';\n }\n const view: {[key: string]: any} = cloneDeep(data);\n const basePath: string = path.isAbsolute(templatePath) ? '' : __dirname + path.sep;\n const fileSystem = new FileSystem();\n const content: string = await fileSystem.read(basePath + templatePath);\n\n const includes: string[] = [];\n const results: any[][] = parse(content);\n results.forEach((result) => {\n if (result.length >= 4 && result[0] === '&' && result[1].startsWith('include:')) {\n includes.push(result[1]);\n }\n });\n\n if (includes.length > 0) {\n if (baseIncludePath === undefined) {\n baseIncludePath = path.dirname(basePath + templatePath) + path.sep;\n } else if (!path.isAbsolute(baseIncludePath)) {\n baseIncludePath = basePath + baseIncludePath;\n }\n await asyncForEach(includes, async (include) => {\n const includeParts: string[] = include.split(':');\n if (includeParts.length === 3 && view[include] !== undefined) {\n const templateName: string = includeParts[2];\n if (baseIncludePath.includes('/html')) {\n Object.keys(view[include]).forEach((key) => {\n view[include][key] = Array.isArray(view[include][key]) ? view[include][key].map((part: string) => part.replace(/(?:\\r\\n|\\r|\\n)/g, '<br>'))\n : view[include][key].replace(/(?:\\r\\n|\\r|\\n)/g, '<br>');\n });\n }\n view[include] = await this.render(path.resolve(baseIncludePath, templateName), view[include]);\n }\n });\n }\n\n const output: string = render(content, view);\n if (output.includes('{{') || output.includes('}}')) {\n throw new ConflictException('template: missing data to render template', {templatePath, data});\n }\n\n return templatePath.includes('html') ? this.minifier.html(output) : output;\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"node-mailjet\");","import {EmailSenderServiceContract} from 'common/service/sender/EmailSenderServiceContract';\nimport {TemplateEngine} from 'common/templating/TemplateEngine';\nimport {TemplateEngineContract} from 'common/templating/TemplateEngineContract';\nimport {ViewEmailTrackDeliveryContract} from 'common/templating/view/email/ViewEmailTrackDeliveryContract';\nimport {RecipientContract} from 'common/service/sender/RecipientContract';\nimport {SenderContract} from 'common/service/sender/SenderContract';\nimport {Client} from 'node-mailjet';\nimport {MainException} from 'common/exception/MainException';\nimport {Retry} from 'common/tool/Retry';\nimport {Environment} from 'common/tool/Environment';\nimport {Env} from 'common/tool/Env';\nimport {Logger} from 'common/tool/Logger';\nimport {ViewEmailUserNotificationContract} from 'common/templating/view/email/ViewEmailUserNotificationContract';\nimport {ViewEmailDiscountContract} from 'common/templating/view/email/ViewEmailDiscountContract';\nimport {asyncForEach} from 'common/util/PromiseUtil';\nimport {BadParameterException} from 'common/exception/BadParameterException';\n\nexport class EmailSenderService implements EmailSenderServiceContract {\n private readonly templateEngine: TemplateEngineContract;\n private readonly mailjet: any;\n private readonly mode: Environment;\n\n public constructor(apiPublicKey: string, apiSecretKey: string, mode: Environment) {\n this.templateEngine = new TemplateEngine();\n this.mailjet = new Client({apiKey: apiPublicKey, apiSecret: apiSecretKey});\n this.mode = mode;\n }\n\n public async sendDeliveryDelay(sender: SenderContract, recipient: RecipientContract, data: ViewEmailTrackDeliveryContract): Promise<void> {\n return await Retry.request(async () => {\n if (data.base.copyright === undefined) {\n data.base.copyright = {\n year: String((new Date()).getUTCFullYear())\n };\n }\n const text: string = await this.templateEngine.render('data/email/template/deliveryDelay', data, 'data/email/element/text');\n const html: string = await this.templateEngine.render('data/email/template/deliveryDelay', data, 'data/email/element/html');\n\n return await this.sendNotification(sender, [{recipient: recipient, subject: data.base.subject, text: text, html: html}], false);\n }, 0, Logger.error.bind(Logger));\n }\n\n public async sendTrackDelivery(sender: SenderContract, recipient: RecipientContract, data: ViewEmailTrackDeliveryContract): Promise<void> {\n return await Retry.request(async () => {\n const textContent: string = await this.templateEngine.render('data/email/template/trackDelivery', data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: data.base});\n const htmlContent: string = await this.templateEngine.render('data/email/template/trackDelivery', data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: data.base});\n\n return await this.sendNotification(sender, [{recipient: recipient, subject: data.base.subject, text: text, html: html}], false);\n }, 0, Logger.error.bind(Logger));\n }\n\n public async sendUserNotification(sender: SenderContract, recipient: RecipientContract, data: ViewEmailUserNotificationContract, isCommercial: boolean = true, customId?: string): Promise<void> {\n return await Retry.request(async () => {\n const textContent: string = await this.templateEngine.render('data/email/template/userNotification', data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: data.base, isCommercial: isCommercial});\n const htmlContent: string = await this.templateEngine.render('data/email/template/userNotification', data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: data.base, isCommercial: isCommercial});\n\n return await this.sendNotification(sender, [{recipient: recipient, subject: data.base.subject, text: text, html: html}], isCommercial, customId);\n }, 0, Logger.error.bind(Logger));\n }\n\n public async sendUsersNotifications(sender: SenderContract, messages: {recipient: RecipientContract, data: ViewEmailUserNotificationContract}[],\n isCommercial?: boolean, customId?: string): Promise<void> {\n return await Retry.request(async () => {\n const contents: {recipient: RecipientContract, subject: string, text: string, html: string}[] = [];\n await asyncForEach(messages, async (message) => {\n const textContent: string = await this.templateEngine.render('data/email/template/userNotification', message.data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: message.data.base, isCommercial: isCommercial});\n const htmlContent: string = await this.templateEngine.render('data/email/template/userNotification', message.data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: message.data.base, isCommercial: isCommercial});\n contents.push({recipient: message.recipient, subject: message.data.base.subject, text: text, html: html});\n });\n\n return await this.sendNotification(sender, contents, isCommercial, customId);\n }, 0, Logger.error.bind(Logger));\n }\n\n public async sendDiscount(sender: SenderContract, recipient: RecipientContract, data: ViewEmailDiscountContract, isCommercial: boolean = true, customId?: string): Promise<void> {\n return await Retry.request(async () => {\n const textContent: string = await this.templateEngine.render('data/email/template/discount', data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: data.base, isCommercial: isCommercial});\n const htmlContent: string = await this.templateEngine.render('data/email/template/discount', data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: data.base, isCommercial: isCommercial});\n\n return await this.sendNotification(sender, [{recipient: recipient, subject: data.base.subject, text: text, html: html}], isCommercial, customId);\n }, 0, Logger.error.bind(Logger));\n }\n\n public async sendDiscounts(sender: SenderContract, messages: {recipient: RecipientContract, data: ViewEmailDiscountContract}[], isCommercial: boolean = true, customId?: string): Promise<void> {\n return await Retry.request(async () => {\n const contents: {recipient: RecipientContract, subject: string, text: string, html: string}[] = [];\n await asyncForEach(messages, async (message) => {\n const textContent: string = await this.templateEngine.render('data/email/template/discount', message.data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: message.data.base, isCommercial: isCommercial});\n const htmlContent: string = await this.templateEngine.render('data/email/template/discount', message.data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: message.data.base, isCommercial: isCommercial});\n contents.push({recipient: message.recipient, subject: message.data.base.subject, text: text, html: html});\n });\n\n return await this.sendNotification(sender, contents, isCommercial, customId);\n }, 0, Logger.error.bind(Logger));\n }\n\n // private async sendCampaign(sender: SenderContract, recipients: RecipientContract[], subject: string, text: string, html: string): Promise<void> {\n // try {\n // await this.mailjet.post('send').request({\n // FromEmail: sender.contact,\n // FromName: sender.name,\n // Subject: subject,\n // 'Text-part': text,\n // 'Html-part': html,\n // Recipients: [\n // recipients.map((recipient) => {\n // return { Name: recipient.name, Email: recipient.contact };\n // }),\n // ],\n // });\n //\n // return Promise.resolve();\n // } catch (error) {\n // return Promise.reject(new MainException(error.message, Number(error.statusCode)));\n // }\n // }\n\n private async sendNotification(sender: SenderContract, contents: {recipient: RecipientContract, subject: string, text: string, html: string}[],\n isCommercial: boolean = false, customId?: string): Promise<void> {\n if (contents.length === 0) {\n throw new BadParameterException('email: missing messages');\n }\n\n try {\n if (this.mode === Env.TEST) {\n Logger.info('Simulation Mode: Email has been sent', {sender: sender, recipients: contents.map((content) => content.recipient)});\n } else {\n const messages: {From:{Name: string,Email: string},To:[{Name: string,Email: string}], Subject: string, TextPart: string, HTMLPart: string, Priority:0 | 1 | 2, customID: string}[] = [];\n await asyncForEach(contents, async (content) => {\n if (this.mode === Env.DEVELOPMENT) {\n content.recipient.contact = 'developer@onylab.com';\n }\n messages.push({\n 'From': {\n 'Name': sender.name,\n 'Email': sender.contact\n },\n 'To': [{\n 'Name': content.recipient.name,\n 'Email': content.recipient.contact\n }],\n 'Subject': content.subject,\n 'TextPart': content.text,\n 'HTMLPart': content.html,\n 'Priority': isCommercial ? 0 : 2,\n 'customID': customId === undefined ? undefined : String(customId)\n });\n });\n await this.mailjet.post('send', {'version': 'v3.1'}).request({ Messages: messages });\n }\n } catch (error) {\n throw new MainException(error.message, Number(error.statusCode));\n }\n }\n}\n","import {ConfigurationContract} from 'common/tool/ConfigurationContract';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {FileSystem} from 'common/tool/FileSystem';\nimport {Env} from 'common/tool/Env';\nimport {merge} from 'lodash';\nimport {Environment} from 'common/tool/Environment';\n\nexport class Configuration implements ConfigurationContract {\n private static config: any;\n private static root: string;\n private static environment: Env;\n private readonly filesystem: FileSystemContract;\n\n public constructor(root: string, environment?: Env) {\n this.filesystem = new FileSystem();\n if (Configuration.root === undefined || Configuration.root !== root) {\n Configuration.root = root;\n Configuration.config = undefined;\n }\n const currentEnvironment: string = (environment === undefined ? Environment.getMode() : environment);\n if (Configuration.environment === undefined || Configuration.environment !== currentEnvironment) {\n Configuration.environment = environment === undefined ? Environment.getMode() : environment;\n Configuration.config = undefined;\n }\n }\n\n public async full(): Promise<any> {\n await this.init();\n\n return Configuration.config;\n }\n\n private async init(): Promise<void> {\n if (Configuration.config === undefined) {\n if (Configuration.root === undefined) {\n Configuration.config = {};\n } else {\n Configuration.config = await this.filesystem.readJson(Configuration.root + 'data/config.json');\n if ([Env.DEVELOPMENT, Env.TEST].includes(Configuration.environment)) {\n try {\n Configuration.config = merge(Configuration.config, await this.filesystem.readJson(Configuration.root + 'data/config_' + String(Configuration.environment) + '.json'));\n } catch (_e) {\n // nothing\n }\n }\n\n }\n }\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"typeorm\");","import {Connection, createConnection} from 'typeorm';\nimport {DatabaseContract} from 'common/tool/DatabaseContract';\nimport {FileSystem} from 'common/tool/FileSystem';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {BadParameterException} from 'common/exception/BadParameterException';\nimport {Logger} from 'common/tool/Logger';\n\n// TypeORM documation, types: https://github.com/typeorm/typeorm/blob/master/src/driver/types/ColumnTypes.ts\nexport class Database implements DatabaseContract {\n private root: string;\n private db: any;\n private connection: Connection;\n\n public constructor(root: string) {\n this.root = root;\n }\n\n public async connect(name: string, entities: any[]): Promise<void> {\n if (this.db === undefined) {\n await this.init();\n }\n\n const con: any = this.db[name];\n if (con !== undefined) {\n con.entities = entities;\n con.logging = ['error'];\n con.logger = true;\n con.bigNumberStrings = false;\n if (con.timezone === undefined) {\n con.timezone = 'Z';\n }\n if (con.charset === undefined) {\n con.charset = 'UTF8_GENERAL_CI';\n }\n this.connection = await createConnection(con);\n } else {\n Logger.error(new BadParameterException('bad connection name'));\n }\n }\n\n public async synchronize(): Promise<void> {\n if (this.connection !== undefined) {\n await this.connection.synchronize();\n }\n }\n\n public async close(): Promise<void> {\n return this.connection.close();\n }\n\n private async init(): Promise<void> {\n if (this.root === undefined) {\n this.db = {};\n } else {\n const fileSystem: FileSystemContract = new FileSystem();\n this.db = await fileSystem.readJson(this.root + 'data/db.json');\n }\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"prettyjson\");","import * as prettyjson from 'prettyjson';\nimport {DisplayerContract} from 'common/tool/DisplayerContract';\nimport {Logger} from 'common/tool/Logger';\n\nexport class Displayer implements DisplayerContract {\n public error(error: Error): void {\n Logger.error(error);\n }\n\n public info(message: string): void {\n Logger.trace(message);\n }\n\n public json(json: any): void {\n Logger.trace(prettyjson.render(json, {}));\n }\n\n public success(message: string): void {\n Logger.trace(message);\n }\n}\n","import {DownloaderContract} from 'common/tool/DownloaderContract';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport * as crypto from 'crypto';\nimport axios from 'axios';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {FileSystem} from 'common/tool/FileSystem';\n\nexport class Downloader implements DownloaderContract {\n private readonly fileSystem: FileSystemContract;\n\n public constructor() {\n this.fileSystem = new FileSystem();\n }\n\n public async image(url: string, outputPath: string, outputName?: string): Promise<string> {\n if (outputName === undefined) {\n outputName = crypto.randomBytes(20).toString('hex') + path.extname(url);\n }\n await this.fileSystem.write(outputPath + path.sep + outputName, '');\n\n const output: string = path.resolve(outputPath + path.sep + outputName);\n const writer: any = fs.createWriteStream(output);\n\n const response: any = await axios({\n url,\n method: 'GET',\n responseType: 'stream'\n });\n\n response.data.pipe(writer);\n\n return new Promise((resolve, reject) => {\n writer.on('finish', () => resolve(output));\n writer.on('error', reject);\n });\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"fast-diff\");","/* eslint-disable no-bitwise */\nimport {deburr, toLower, trim} from 'lodash';\nimport {isNullOrUndefined} from 'common/util/HelperUtil';\n\nexport class StringUtil {\n // alternative https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex\n public static escapeRegExp(str: string): string {\n if (typeof str !== 'string') {\n return str;\n }\n\n return str.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&'); // and .replace(/-/g, '\\\\x2d');\n }\n\n public static hash(str: string, seed: number = 0): string {\n let h1 = 0xdeadbeef ^ seed;\n let h2 = 0x41c6ce57 ^ seed;\n for(let i = 0, ch; i < str.length; i++) {\n ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507);\n h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909);\n h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507);\n h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909);\n\n return (h2>>>0).toString(16).padStart(8, '0') + (h1>>>0).toString(16).padStart(8, '0');\n }\n\n public static nullable(str: string): string {\n if (isNullOrUndefined(str)) {\n return null;\n }\n\n if (typeof str === 'string' && str.length === 0) {\n return null;\n }\n\n return str;\n }\n\n public static removeMultiSpaces(data: string) {\n if (typeof data !== 'string') {\n return data;\n }\n\n return data.replace(/\\s{2,}/g, ' ');\n }\n\n public static removeText(data: string, text: string) {\n if (typeof data !== 'string' || typeof text !== 'string' || text.length === 0) {\n return data;\n }\n\n try {\n data = data.replace(new RegExp(StringUtil.escapeRegExp(text), 'ig'), '');\n data = data.replace(new RegExp(StringUtil.escapeRegExp(text).replace(new RegExp('\\\\s', 'g'), '-'), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n\n return data;\n }\n\n public static replace(str: string, targets: string[], replacers: string[]): string {\n if (typeof str !== 'string') {\n return str;\n }\n\n if (targets.length !== replacers.length) {\n return str;\n }\n\n let output: string = str;\n targets.forEach((target, index) => {\n output = output.replace(new RegExp(StringUtil.escapeRegExp(target), 'ig'), replacers[index]);\n });\n\n return output;\n }\n\n public static slugify(raw: string, separator: string = ''): string {\n if (raw === undefined) {\n return '';\n }\n\n return toLower(trim(deburr(raw)).replace(/[^0-9a-z\\-\\_]/gi, separator));\n }\n\n public static truncate(str: string, limit: number): string {\n if (isNullOrUndefined(str) || str.length <= limit) {\n return str;\n }\n\n if (limit <= 3) {\n return '';\n }\n\n return str.slice(0, limit - 3) + '...';\n }\n}\n","import {StringUtil} from 'common/util/StringUtil';\n\nexport class FormatterUtil {\n public static trim(raw: string): string {\n return typeof raw === 'string' ? raw.trim() : raw;\n }\n\n public static capitalize(raw: string): string {\n const lowraw: string = FormatterUtil.lower(raw);\n\n return typeof lowraw === 'string' ? lowraw.split(' ').map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join (' ') : raw;\n }\n\n public static ucfirst(raw: string): string {\n const lowraw: string = FormatterUtil.lower(raw);\n\n return typeof lowraw === 'string' ? lowraw.charAt(0).toUpperCase() + lowraw.slice(1) : raw;\n }\n\n public static lower(raw: string): string {\n return typeof raw === 'string' ? raw.toLocaleLowerCase() : raw;\n }\n\n public static upper(raw: string): string {\n return typeof raw === 'string' ? raw.toLocaleUpperCase() : raw;\n }\n\n public static phone(raw: string, locale: string, output: 'nat' | 'int' = 'nat'): string {\n if (typeof raw === 'string') {\n raw = FormatterUtil.preformatPhone(raw, locale);\n switch (output) {\n case 'nat': // national\n return FormatterUtil.phoneNat(raw, locale);\n break;\n case 'int': // international\n return FormatterUtil.phoneInt(raw, locale);\n break;\n }\n }\n\n return raw;\n }\n\n public static stripEmoji(raw: string): string {\n let output: string = raw;\n\n if (typeof output === 'string') {\n const emojiRegex = require('emoji-regex'); /* eslint-disable-line @typescript-eslint/no-var-requires */\n\n let match;\n while ((match = emojiRegex().exec(output)) !== null) {\n try {\n // output = output.replace(new RegExp('\\\\s' + StringUtil.escapeRegExp(match[0]), 'g'), '');\n // output = output.replace(new RegExp(StringUtil.escapeRegExp(match[0]) + '\\\\s', 'g'), '');\n output = output.replace(new RegExp(StringUtil.escapeRegExp(match[0]), 'g'), '');\n output = output.replace(new RegExp('\\\\s+', 'g'), ' ');\n output = output.trim();\n } catch (_e) {\n // ignore\n }\n }\n }\n\n return output;\n }\n\n public static stripExoticCharacters(raw: string): string {\n if (typeof raw === 'string') {\n return raw.replace('’', '\\'').replace(/[\\u0250-\\ue007]+/g, '*');\n }\n\n return raw;\n }\n\n private static preformatPhone(raw: string, locale: string): string {\n raw = raw.trim().replace(/\\s?\\.?\\-?\\(?\\)?/g, '');\n switch (locale) {\n case 'fr':\n if ((new RegExp('^[1-9]')).test(raw) && raw.length === 9) {\n return '0' + raw;\n }\n break;\n }\n\n return raw;\n }\n\n private static phoneNat(raw: string, locale: string): string {\n switch (locale) {\n case 'fr': // format: 06 11 22 33 44\n if (raw.startsWith('+330')) {\n raw = raw.substring(3);\n } else if (raw.startsWith('+33')) {\n raw = '0' + raw.substring(3);\n } else if (raw.startsWith('0033')) {\n raw = '0' + raw.substring(4);\n } else if (raw.startsWith('33') && raw.length === 11) {\n raw = '0' + raw.substring(2);\n }\n\n if (raw.length === 10) {\n let i: number = 0;\n raw = raw.split('').map((num) => {\n i++;\n\n return num + (i % 2 === 0 ? ' ' : '');\n }).join('').trim();\n }\n\n return raw;\n }\n\n return raw;\n }\n\n private static phoneInt(raw: string, locale: string): string {\n if (raw.startsWith('+')) {\n return raw;\n }\n\n switch (locale) {\n case 'fr': // format: +33611223344\n if (raw.startsWith('0')) {\n raw = raw.substring(1);\n }\n\n return '+33' + raw;\n break;\n }\n\n return raw;\n }\n}\n","/* eslint-disable max-lines */\nimport {trim} from 'lodash';\nimport {isNullOrUndefined} from 'common/util/HelperUtil';\nimport {ValidatorUtil} from 'common/util/ValidatorUtil';\nimport * as diff from 'fast-diff';\nimport {StringUtil} from 'common/util/StringUtil';\nimport {FormatterUtil} from 'common/util/FormatterUtil';\n\nexport class AddressUtil {\n private static readonly ZIPCODES: string[] = [\n '78500', '78600', '78800', '95240', '95530',\n '78630', '78670', '78240', '78580', '78300', '78955', '78260',\n '95150', '95250', '95480', '95320', '95550', '95370', '95740', '95220',\n '95870', '78420', '78400', '78110', '78360', '78290', '78230', '78540', '78920',\n '95600'\n ];\n private static readonly CITIES: string[] = [\n 'Sartrouville', 'Cormeilles-en-Parisis', 'Houilles', 'Maisons-Laffitte', 'La Frette-sur-Seine', 'Argenteuil', 'Montesson', 'Le Mesnil-le-Roi', 'Bezons',\n 'Orgeval', 'Poissy', 'Morainvilliers', 'Villennes-sur-Seine', 'Medan', 'Chambourcy', 'Aigremont', 'Les Alluets-le-Roi', 'Carrières-sous-Poissy', 'Achères',\n 'Taverny', 'Beauchamp', 'Pierrelaye', 'Saint-Leu-la-Forêt', 'Bessancourt', 'Montigny-lès-Cormeilles', 'Herblay', 'Méry-sur-Oise',\n 'Carrières-sur-Seine', 'Bezons', 'Chatou', 'Le Vésinet', 'Montesson', 'Croissy', 'Croissy-sur-Seine', 'Le Pecq', 'Vernouillet', 'Ecquevilly'\n ];\n private static readonly ZIPCODE_CITY: {[zipCode: string]: string[]} = {\n '78500': ['Sartrouville'], '78600': ['Maisons-Laffitte', 'Le Mesnil-le-Roi'], '78800': ['Houilles'], '95240': ['Cormeilles-en-Parisis'], '95530': ['La Frette-sur-Seine'],\n '78100': ['Saint-Germain-en-Laye'], '95100': ['Argenteuil'],\n '78630': ['Orgeval', 'Morainvilliers'], '78670': ['Villennes-sur-Seine', 'Medan'], '78240': ['Chambourcy', 'Aigremont'], '78300': ['Poissy'],\n '78955': ['Carrières-sous-Poissy'], '78260': ['Achères'], '78540': ['Vernouillet'], '78920': ['Ecquevilly'],\n '95150': ['Taverny'], '95250': ['Beauchamp'], '95480': ['Pierrelaye'], '95320': ['Saint-Leu-la-Forêt'], '95550': ['Bessancourt'], '95370': ['Montigny-les-Cormeilles'], '95220': ['Herblay'],\n '95740': ['Frépillon'], '95540': ['Méry-sur-Oise'],\n '95870': ['Bezons'], '78420': ['Carrières-sur-Seine'], '78400': ['Chatou'], '78110': ['Le Vésinet'], '78360': ['Montesson'], '78290': ['Croissy-sur-Seine'], '78230': ['Le Pecq'],\n '95600': ['Eaubonne']\n };\n private static readonly REGIONS: string[] = ['île-de-france'];\n private static readonly COUNTRIES: string[] = ['France', 'FR'];\n private static readonly STREET_TYPE: {short: string, long: string}[] = [\n {short: 'av', long: 'avenue'},\n {short: 'rue', long: 'rue'},\n {short: 'bd', long: 'boulevard'},\n {short: 'chau', long: 'chaussée'},\n {short: 'trav', long: 'traverse'},\n {short: 'pl', long: 'place'},\n {short: 'pass', long: 'passage'},\n {short: 'sent', long: 'sentier'},\n {short: 'imp', long: 'impasse'},\n {short: 'all', long: 'allée'},\n {short: 'chem', long: 'chemin'},\n {short: 'ham', long: 'hameau'},\n {short: 'dom', long: 'domaine'}\n ];\n\n public static autoCorrectCity(city: string): string {\n if (isNullOrUndefined(city) || typeof city !== 'string' || city.length === 0) {\n return city;\n }\n\n if (city.toLowerCase().startsWith('st-') || city.toLowerCase().startsWith('st ')) {\n city = 'Saint ' + city.substring(3);\n }\n\n const exactMatch: string = AddressUtil.CITIES.find((c) => c.toLowerCase() === city.toLowerCase());\n if (exactMatch !== undefined) {\n return exactMatch;\n }\n\n const partialMatch: string = AddressUtil.CITIES.find((c) => {\n const result: {add: number, remove: number} = AddressUtil.countDiff(city, c);\n\n return result.add <= 2 && result.remove <= 2;\n });\n if (partialMatch !== undefined) {\n return partialMatch;\n }\n\n const matchNoDash: string = AddressUtil.CITIES.find((c) => c.replace(/-/g, ' ').toLowerCase() === city.toLowerCase());\n if (matchNoDash !== undefined) {\n return matchNoDash;\n }\n\n const partialMatchNoDash: string = AddressUtil.CITIES.find((c) => {\n const result: {add: number, remove: number} = AddressUtil.countDiff(city, c.replace(/-/g, ' '));\n\n return result.add <= 2 && result.remove <= 2;\n });\n if (partialMatchNoDash !== undefined) {\n return partialMatchNoDash;\n }\n\n const startsWith: string = AddressUtil.CITIES.find((c) => c.toLowerCase().startsWith(city.toLowerCase()));\n if (startsWith !== undefined) {\n return startsWith;\n }\n\n const isIncluded: string = AddressUtil.CITIES.find((c) => city.toLowerCase().includes(c.toLowerCase()));\n if (isIncluded !== undefined) {\n return isIncluded;\n }\n\n return city;\n }\n\n public static autoCorrectStreet(street: string): string {\n if (isNullOrUndefined(street) || typeof street !== 'string' || street.length === 0) {\n return street;\n }\n\n AddressUtil.STREET_TYPE.forEach((type) => {\n if (type.short.length < type.long.length) {\n street = street.replace(new RegExp('(\\\\s' + String(type.short) + '\\\\.?\\\\s)', 'ig'), ' ' + String(type.long) + ' ');\n street = street.replace(new RegExp('(\\\\s' + String(type.short) + '\\\\.\\\\s)', 'ig'), ' ' + String(type.long) + ' ');\n }\n });\n // street = street.replace(/(\\sav\\s)/ig, ' avenue ');\n // street = street.replace(/(\\sav\\.\\s)/ig, ' avenue ');\n // street = street.replace(/(\\sbd\\s)/ig, ' boulevard ');\n // street = street.replace(/(\\sbd\\.\\s)/ig, ' boulevard ');\n // street = street.replace(/(\\schau\\.\\s)/ig, ' chaussée ');\n // street = street.replace(/(\\strav\\.\\s)/ig, ' traverse ');\n // street = street.replace(/(\\spl\\.\\s)/ig, ' place ');\n // street = street.replace(/(\\spass\\.\\s)/ig, ' passage ');\n // street = street.replace(/(\\ssent\\.\\s)/ig, ' sentier ');\n // street = street.replace(/(\\simp\\.\\s)/ig, ' impasse ');\n // street = street.replace(/(\\sall\\.\\s)/ig, ' allée ');\n // street = street.replace(/(\\schem\\.\\s)/ig, ' chemin ');\n // street = street.replace(/(\\sham\\.\\s)/ig, ' hameau ');\n // street = street.replace(/(\\sdom\\.\\s)/ig, ' domaine ');\n\n const leadingZeroRegExp: RegExp = new RegExp('^(0+)[0-9]+,?\\\\s[a-zA-Z]+');\n const leadingZeroMatches: string[] = leadingZeroRegExp.exec(street);\n if (leadingZeroMatches !== null && leadingZeroMatches.length === 2) {\n street = street.substring(leadingZeroMatches[1].length);\n }\n\n AddressUtil.STREET_TYPE.forEach((type) => {\n street = street.replace(new RegExp('([0-9]+)(' + String(type.long) + '\\\\s)', 'ig'), '$1 $2');\n street = street.replace(new RegExp('([0-9]+)(' + String(type.short) + '\\\\.?\\\\s)', 'ig'), '$1 ' + String(type.long) + ' ');\n });\n\n return street;\n }\n\n public static getZipCodeFromCity(city: string): string {\n if (isNullOrUndefined(city)) {\n return undefined;\n }\n\n return Object.keys(AddressUtil.ZIPCODE_CITY).reduce((selected, zipcode) => {\n if (AddressUtil.ZIPCODE_CITY[zipcode].find((name) => name.toLowerCase() === city.toLowerCase()) !== undefined) {\n return zipcode;\n }\n\n return selected;\n }, undefined);\n }\n\n public static getCityFromZipCode(zip: string, rawAddress: string): string {\n if (zip === undefined || rawAddress === undefined) {\n return undefined;\n }\n\n const candidates: string[] = AddressUtil.ZIPCODE_CITY[zip];\n if (candidates === undefined) {\n return undefined;\n }\n\n if (candidates.length === 1) {\n return candidates[0];\n }\n\n let city: string;\n rawAddress.split(',').forEach((part) => {\n city = candidates.find((candidate) => {\n return part.trim().toLowerCase() === candidate.trim().toLowerCase();\n });\n });\n if (city !== undefined) {\n return city;\n }\n\n return candidates[0];\n }\n\n public static isZipCode(zip: string): boolean {\n if (typeof zip !== 'string') {\n return false;\n }\n\n if (AddressUtil.ZIPCODES.includes(zip)) {\n return true;\n }\n\n return ValidatorUtil.isNumber(zip) && zip.length === 5 && !zip.includes('.') && !zip.includes('-');\n }\n\n public static parse(raw: string, isFormatted: boolean = true): { street?: string, zip?: string, city?: string, country?: string } {\n const address: { street?: string, zip?: string, city?: string, country?: string } = {};\n if (!isNullOrUndefined(raw)) {\n const rawAddressParts: string[] = raw.split(',');\n if (rawAddressParts.length >= 3 && isFormatted) {\n if (AddressUtil.COUNTRIES.find((c) => raw.toLowerCase().includes(' ' + c.toLowerCase())) === undefined) {\n rawAddressParts.push('France');\n }\n\n let i: number = rawAddressParts.length - 1;\n address.country = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n if (rawAddressParts[i] !== undefined && rawAddressParts[i].trim().includes(' ')) {\n const rawParts: string[] = rawAddressParts[i].trim().split(' ');\n address.zip = rawParts[0] === undefined ? undefined : rawParts[0].trim();\n rawParts.splice(0, 1);\n address.city = rawParts.join(' ').trim();\n rawAddressParts.splice(i--, 1);\n } else if (!isNaN(Number(rawAddressParts[i].trim()))) {\n address.zip = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n if (i >= 2) {\n address.city = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n }\n } else if (!isNaN(Number(rawAddressParts[i - 1].trim()))) {\n address.city = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n address.zip = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n } else {\n address.city = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n }\n address.street = rawAddressParts.map((part) => part.trim()).join(' ').trim();\n } else {\n let rawAddress: string = raw.toLowerCase();\n AddressUtil.ZIPCODES.forEach((zipcode) => {\n if (rawAddress.includes(zipcode)) {\n address.zip = zipcode;\n try {\n rawAddress = rawAddress.replace(new RegExp(StringUtil.escapeRegExp(zipcode), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n }\n });\n AddressUtil.CITIES.forEach((city) => {\n if (rawAddress.includes(city.toLowerCase()) && (address.zip === undefined || AddressUtil.ZIPCODE_CITY[address.zip]?.find((c) => c.toLowerCase() === city.toLowerCase()))) {\n address.city = city;\n try {\n rawAddress = rawAddress.replace(new RegExp(StringUtil.escapeRegExp(city), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n }\n });\n AddressUtil.COUNTRIES.forEach((country) => {\n if (rawAddress.includes(' ' + country.toLowerCase()) && !rawAddress.includes('de ' + country.toLowerCase()) && !rawAddress.includes('de la ' + country.toLowerCase())) {\n address.country = country;\n try {\n rawAddress = rawAddress.replace(new RegExp(StringUtil.escapeRegExp(' ' + country), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n }\n });\n\n if (address.street === undefined) {\n address.street = trim(rawAddress.split(',').map((part) => part.trim()).join(' '), '-').trim();\n }\n }\n\n if (address.country === undefined) {\n address.country = 'France';\n }\n }\n\n if (address.street !== undefined) {\n address.street = FormatterUtil.lower(FormatterUtil.trim(String(address.street)));\n }\n if (address.zip !== undefined) {\n address.zip = FormatterUtil.upper(FormatterUtil.trim(String(address.zip)));\n }\n if (address.city !== undefined) {\n address.city = AddressUtil.autoCorrectCity(FormatterUtil.capitalize(FormatterUtil.trim(String(address.city))));\n }\n if (address.country !== undefined) {\n address.country = FormatterUtil.capitalize(FormatterUtil.trim(String(address.country)));\n }\n\n return AddressUtil.complete(address);\n }\n\n public static complete(address: { street?: string, zip?: string, city?: string, country?: string }): { street?: string, zip?: string, city?: string, country?: string } {\n if (address.city === undefined || address.city.length === 0) {\n const city: string = AddressUtil.getCityFromZipCode(address.zip, address.street);\n if (city !== undefined) {\n address.city = city;\n }\n }\n if (typeof address.street === 'string') {\n AddressUtil.REGIONS.forEach((region) => {\n address.street = StringUtil.removeText(address.street, region).trim();\n });\n }\n if (FormatterUtil.lower(address.country) === 'fr') {\n address.country = 'France';\n }\n\n return address;\n }\n\n public static removeDuplicates(str: string): string {\n if (typeof str !== 'string') {\n return str;\n }\n\n const output: string[] = [];\n\n str.split(',').forEach((part) => {\n if (output.find((o) => o.trim().toLowerCase().includes(part.trim().toLowerCase())) === undefined) {\n output.push(part);\n }\n });\n\n return output.join(',');\n }\n\n private static countDiff(str: string, reference: string): { add: number, remove: number } {\n const result: { add: number, remove: number } = { add: 0, remove: 0 };\n\n diff(str.toLowerCase(), reference.toLowerCase()).forEach((value) => {\n switch (value[0]) {\n case -1:\n result.remove += value[1].length;\n break;\n case 1:\n result.add += value[1].length;\n break;\n }\n });\n\n return result;\n }\n}\n","import {DateTime} from 'luxon';\nimport {cloneDeep} from 'lodash';\nimport {isNullOrUndefined} from 'common/util/HelperUtil';\n\nexport class DateUtil {\n private static readonly PERIOD_MAX_DATES: number = 90;\n private static readonly WEEK_DAYS: {[id: number]: string} = {1: 'lundi', 2: 'mardi', 3: 'mercredi', 4: 'jeudi', 5: 'vendredi', 6: 'samedi', 7: 'dimanche'};\n\n public static getCycleDateFromFullDate(date: string, cycle: 'daily' | 'weekly' | 'monthly'): string {\n if (cycle === 'weekly') {\n const result: string = DateTime.fromISO(date.replace(/-W([0-9])$/i, '-W0$1')).toISOWeekDate();\n if (result === null) {\n return date;\n }\n\n const parts: string[] = result.split('-');\n\n return parts.length > 2 ? parts[0] + '-' + parts[1] : parts.join('-');\n } else if (cycle === 'monthly') {\n return DateTime.fromISO(date).toFormat('yyyy-LL');\n }\n\n return DateTime.fromISO(date).toISODate();\n }\n\n public static displayWeekDay(weekDay: number): string {\n let displayWeekDay: string = '';\n if (DateUtil.WEEK_DAYS[weekDay] !== undefined) {\n displayWeekDay = DateUtil.WEEK_DAYS[weekDay];\n }\n\n return displayWeekDay;\n }\n\n public static generatePeriod(fromDate: string, toDate: string, initialValue: Record<string, any>, addDate: boolean = true, MAX_DAYS: number = DateUtil.PERIOD_MAX_DATES,\n cycle: 'daily' | 'weekly' | 'monthly' = 'daily'): {[date: string]: Record<string, any>} {\n const jump: {[str: string]: number} = {'daily': {day: 1}, 'weekly': {week: 1}, 'monthly': {month: 1}}[cycle];\n let cursor: string = DateTime.fromISO(fromDate, {setZone: true}).toISODate();\n const stop: string = DateTime.fromISO(toDate, {setZone: true}).toISODate();\n let i: number = 0;\n const data: {[date: string]: Record<string, any>} = {};\n while (cursor <= stop && i < MAX_DAYS) {\n const date: string = DateUtil.getCycleDateFromFullDate(cursor, cycle);\n data[date] = cloneDeep(initialValue);\n if (addDate) {\n data[date].date = date;\n }\n cursor = DateTime.fromISO(cursor, {setZone: true}).plus(jump).toISODate();\n i++;\n }\n\n return data;\n }\n\n public static getOpenPeriods(openings: {from: string, to: string}[], closings: {from: string, to: string}[]): {from: string, to: string}[] {\n const results: {from: string, to: string}[] = [];\n\n openings.forEach((opening) => {\n const tmpOpenings: {from: string, to: string}[] = [opening];\n while (tmpOpenings.length > 0) {\n const open: {from: string, to: string} = tmpOpenings[0];\n\n const isOpen: boolean = closings.find((closing) => closing.from <= open.from && open.to <= closing.to) === undefined;\n if (isOpen) {\n const startLater: {from: string, to: string} = closings.find((closing) => closing.from <= open.from && open.from < closing.to && closing.to < open.to);\n if (startLater !== undefined) {\n tmpOpenings.push({from: startLater.to, to: open.to});\n } else {\n const endEarlier: {from: string, to: string} = closings.find((closing) => open.from < closing.from && open.to > closing.from && open.to <= closing.to);\n if (endEarlier !== undefined) {\n tmpOpenings.push({from: open.from, to: endEarlier.from});\n } else {\n const cut: {from: string, to: string} = closings.find((closing) => open.from < closing.from && closing.to < open.to);\n if (cut !== undefined) {\n tmpOpenings.push({from: open.from, to: cut.from});\n tmpOpenings.push({from: cut.to, to: open.to});\n } else {\n results.push(open);\n }\n }\n }\n }\n\n tmpOpenings.shift();\n }\n });\n\n\n return results;\n }\n\n public static limitDate(targetDate: string, baseDate: string, limitInSeconds: number = 0): string {\n if (targetDate === undefined || baseDate === undefined) {\n return undefined;\n }\n\n const target: string = DateTime.fromISO(targetDate, {setZone: true}).toISO();\n const limit: string = DateTime.fromISO(baseDate, {setZone: true}).plus({seconds: limitInSeconds}).toISO();\n\n return target > limit ? limit : target;\n }\n\n public static localeToISO(localeDate: string): string {\n const frFormat1: RegExp = new RegExp('[0-9]{2}/[0-9]{2}/[0-9]{4}');\n const frFormat2: RegExp = new RegExp('[0-9]{2}-[0-9]{2}-[0-9]{4}');\n const isoFormat: RegExp = new RegExp('[0-9]{4}-[0-9]{2}-[0-9]{2}');\n\n let isoDate: string;\n if (frFormat1.test(localeDate)) {\n const parts: string[] = localeDate.split('/');\n isoDate = parts[2] + '-' + parts[1] + '-' + parts[0];\n } else if (frFormat2.test(localeDate)) {\n const parts: string[] = localeDate.split('-');\n isoDate = parts[2] + '-' + parts[1] + '-' + parts[0];\n } else if (isoFormat.test(localeDate)) {\n isoDate = localeDate;\n }\n\n return isoDate;\n }\n\n public static slotToTime(timeSlot: string): string {\n const timeFormat: RegExp = new RegExp('^(\\\\s)?[0-9]{2}:[0-9]{2}(\\\\s)?$');\n const slotFormat: RegExp = new RegExp('^(\\\\s)?[0-9]{2}:[0-9]{2}(\\\\s)?-(\\\\s)?[0-9]{2}:[0-9]{2}(\\\\s)?$');\n\n timeSlot = timeSlot.trim();\n\n let time: string;\n if (timeFormat.test(timeSlot)) {\n time = timeSlot.trim() + ':00';\n } else if (slotFormat.test(timeSlot)) {\n const parts: string[] = timeSlot.split('-');\n time = parts[0].trim() + ':00';\n }\n\n return time;\n }\n\n public static delay(fromDate: string, toDate: string, unit: 'minutes' | 'hours' | 'days' | 'months'): number {\n if (isNullOrUndefined(fromDate) || isNullOrUndefined(toDate)) {\n return 0;\n }\n\n return Math.round(Math.abs(DateTime.fromISO(fromDate, {setZone: true}).toUTC()\n .diff(DateTime.fromISO(toDate, {setZone: true}).toUTC(), [unit])[unit]))\n }\n\n public static round(date: string, roundingInMs: number = 0): string {\n if (typeof date !== 'string') {\n return date;\n }\n\n const dateTime: DateTime = DateTime.fromISO(date, {setZone: true});\n\n return DateTime.fromMillis(Math.round((+dateTime.toMillis()) / roundingInMs) * roundingInMs).setZone(dateTime.zone).toISO();\n }\n\n public static min(dates: string[]): string {\n return dates.reduce((min, date) => {\n if (typeof min !== 'string' || min > date) {\n return date;\n }\n\n return min;\n }, undefined);\n }\n\n public static max(dates: string[]): string {\n return dates.reduce((max, date) => {\n if (max === undefined || max < date) {\n return date;\n }\n\n return max;\n }, undefined);\n }\n}\n","export class ExtractorUtil {\n public static phone(raw: string, locale: 'fr'): string {\n if (typeof raw !== 'string') {\n return undefined;\n }\n\n raw = raw.trim().replace(/\\s?\\.?\\-?\\(?\\)?/g, '');\n switch (locale) {\n case 'fr': {\n const phoneFrRegex: RegExp = new RegExp('(0[6-7][0-9]{8})', 'i');\n const result: string[] = phoneFrRegex.exec(raw);\n if (result !== null && result.length > 0 && result[0] !== null) {\n return result[0];\n }\n }\n }\n\n return undefined;\n }\n}\n","export class MathUtil {\n public static avg(values: number[]): number {\n if (values.length === 0) {\n return 0;\n }\n\n const total: number = values.reduce((accumulator, value) => {\n return accumulator + value;\n }, 0);\n\n return MathUtil.round(total / values.length, 2);\n }\n\n public static applyVariation(value: number, variation: number): number {\n let increase: number;\n if (value >= 0) {\n increase = 1 + (variation / 100);\n } else {\n increase = 1 - (variation / 100);\n }\n\n return value * increase;\n }\n\n public static median(values: number[]): number {\n if (values.length === 0) {\n return 0;\n }\n if (values.length === 1) {\n return values[0];\n }\n\n const valuesSorted: number[] = values.sort((a, b) => {\n return a - b;\n });\n\n if (valuesSorted.length % 2 === 0) {\n return MathUtil.avg([valuesSorted[(valuesSorted.length / 2) - 1], valuesSorted[(valuesSorted.length / 2)]]);\n }\n\n return valuesSorted[Math.floor(valuesSorted.length / 2)];\n }\n\n public static percentage(part: number, total: number): number {\n if (typeof part !== 'number' || typeof total !== 'number') {\n return undefined;\n }\n\n if (total === 0) {\n return 0;\n }\n\n return ((part / total) * 100);\n }\n\n public static round(value: number, decimals: number): number {\n if (typeof value !== 'number') {\n return value;\n }\n\n if (decimals === 0) {\n return Math.round(value);\n }\n\n return Math.round(value * (10 ** decimals)) / (10 ** decimals);\n }\n\n public static variation(originalValue: number, newValue: number): number {\n let percent = 0;\n if (newValue !== 0) {\n if (originalValue !== 0) {\n percent = (newValue - originalValue) / Math.abs(originalValue) * 100;\n } else {\n percent = ((newValue > 0) ? 1 : -1) * 100;\n }\n } else if (originalValue !== 0) {\n percent = ((originalValue > 0) ? 1 : -1) * -100;\n }\n\n return Math.floor(percent);\n }\n}\n","import {isArray, isObject} from 'lodash';\n\nexport class ObjectUtil {\n public static compact(obj: any, options: {removeEmptyString?: boolean} = {}): any {\n if (isArray(obj)) {\n const ouput: any[] = [];\n obj.forEach((value) => {\n value = ObjectUtil.compact(value, options);\n if ((isArray(value) && value.length > 0)\n || (isObject(value) && Object.keys(value).length > 0)\n || (value !== undefined && value !== null && !isArray(value) && !isObject(value))) {\n ouput.push(value);\n }\n });\n\n return ouput;\n } else if (isObject(obj)) {\n const ouput: any = {};\n Object.keys(obj).forEach((key) => {\n let value: any = (obj as any)[key];\n if (isArray(value) || isObject(value)) {\n value = ObjectUtil.compact(value, options);\n if ((isArray(value) && value.length > 0)\n || (isObject(value) && Object.keys(value).length > 0)\n || (value !== undefined && value !== null && !isArray(value) && !isObject(value))) {\n ouput[key] = value;\n }\n } else if (value !== undefined && value !== null\n && (typeof value !== 'string' || options.removeEmptyString === false || value.length > 0)) {\n ouput[key] = value;\n }\n });\n\n return ouput;\n }\n\n return (typeof obj !== 'string' || options.removeEmptyString === false || obj.length > 0) ? obj : undefined;\n }\n}\n","import {MathUtil} from 'common/util/MathUtil';\n\nexport class PriceUtil {\n private static readonly currencies: {[iso: string]: {symbol: string, position: string}} = {\n 'CAD': {symbol: '$', position: 'before'},\n 'EUR': {symbol: '€', position: 'after'},\n 'USD': {symbol: '$', position: 'before'}\n };\n\n public static applyTaxes(priceTaxExcluded: string, taxRates: number[], decimals: number = 2): string {\n let priceTaxIncluded: number = Number(priceTaxExcluded);\n taxRates.forEach((rate) => {\n priceTaxIncluded += Number(priceTaxExcluded) * rate;\n });\n\n return String(MathUtil.round(priceTaxIncluded, decimals));\n }\n\n public static calculateTaxes(priceTaxExcluded: number, taxRates: number[]): number {\n let taxes: number = 0;\n taxRates.forEach((rate) => {\n taxes += priceTaxExcluded * rate;\n });\n\n return MathUtil.round(taxes, 2);\n }\n\n public static displayWithCurrency(price: string, isoCurrency: string): string {\n if (price === undefined || price === null) {\n return price;\n }\n\n const currency: {symbol: string, position: string} = PriceUtil.currencies[isoCurrency];\n\n let newPrice: string = price + ' ' + isoCurrency;\n if (currency !== undefined) {\n switch (currency.position) {\n case 'before':\n newPrice = currency.symbol + price;\n break;\n case 'after':\n newPrice = price + currency.symbol;\n break;\n }\n }\n\n return newPrice;\n }\n\n public static format(price: string, locale: 'fr' | 'us', decimals: number = 2): string {\n if (price === undefined || price === null) {\n return price;\n }\n\n const priceNumber: number = Number(price.replace(/\\,/gi, ''));\n const standardPrice: string = priceNumber.toLocaleString('en-US', {\n style: 'decimal',\n useGrouping: true,\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals\n });\n\n switch (locale) {\n case 'fr':\n return standardPrice.replace(/\\,/gi, ' ').replace(/\\./gi, ',');\n case 'us':\n return standardPrice;\n }\n }\n\n public static round(price: string, precision: number = 0.10): string {\n const priceInCents: number = Number(price) * 100;\n const precisionInCents: number = precision * 100;\n const rest: number = priceInCents % precisionInCents;\n\n return String(MathUtil.round((priceInCents - rest) + (rest < Math.ceil(precisionInCents / 2) ? 0 : precisionInCents), 2) / 100);\n }\n}\n"],"names":["root","factory","exports","module","define","amd","global","require","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","n","getter","__esModule","d","a","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","registerBasePath","basePath","process","env","APP_HOME","Path","BASE_PATH","endsWith","data","db","storage","session","message","code","name","Error","captureStackTrace","MainException","stack","UnauthorizedException","ERROR_CODE","Env","getMode","NODE_ENV","DEVELOPMENT","PRODUCTION","TEST","APP_ID","isNullOrUndefined","init","sentryToken","app","Environment","dsn","integrations","levels","nodeProfilingIntegration","environment","maxBreadcrumbs","tracesSampleRate","profilesSampleRate","trace","extra","includes","console","info","category","level","debug","log","scope","setExtra","JSON","stringify","warning","error","response","requestErrorData","warn","_request","Logger","Number","status","isNaN","json","configuration","this","handler","request","next","authenticated","jwt","authApiKey","keys","Array","isArray","required","forEach","none","authNone","HandlerController","headers","Authorization","startsWith","parts","split","length","secret","urlStartsWith","find","originalUrl","can","_action","_subject","create","origins","port","backendPort","Server","DEFAULT_PORT","String","set","use","inflate","limit","reviver","strict","type","verify","origin","concat","credentials","listen","getSessionSecret","sessionCookieName","update","SALT","digest","retries","logger","operation","factor","minTimeout","maxTimeout","randomize","Promise","resolve","reject","attempt","then","catch","retry","isEmail","email","RegExp","test","isPhone","phone","isIntMobilePhone","caRegex","frRegex","usRegex","isNumber","num","isUTF8","charset","toLowerCase","urlencode","str","UrlUtil","encodeURIComponent","buf","encode","encodeStr","ch","i","toString","toUpperCase","token","mode","send","senderName","rawPhones","isCommercial","sendAt","phones","checkPhoneFormat","BadParameterException","SmsSenderService","MESSAGE_MAX_LENGTH","substring","Retry","params","accessToken","emetteur","numero","map","replace","join","classe_msg","nbr_msg","Math","ceil","stop","date_envoi","DateTime","fromISO","setZone","toFormat","target","Date","toISOString","hour","plus","day","BASE_API_URL","p","timeout","trim","ExternalApiException","bind","filter","ValidatorUtil","asyncForEach","array","callback","wait","time","setTimeout","size","GeneratorUtil","symbolUpperCases","int","color","alpha","alphaHex","rgbToHex","round","defaultColor","colorList","values","rgb","hex","min","max","POSITIVE_INFINITY","floor","random","password","symbolLowerCases","dirPath","filePath","lastIndexOf","substr","listFiles","isDir","separator","files","output","fileName","isFile","push","randomFile","suggestion","filenames","index","move","recursive","read","readJson","jsonPath","isJson","parse","readJsonFiles","write","rawData","encoding","writeJson","isDirectory","_error","css","content","compatibility","format","sourceMap","minify","styles","html","collapseBooleanAttributes","collapseInlineTagWhitespace","collapseWhitespace","continueOnParseError","decodeEntities","html5","minifyCSS","minifyJS","noNewlinesBeforeTagClose","preserveLineBreaks","preventAttributesEscaping","processConditionalComments","quoteCharacter","removeAttributeQuotes","removeComments","removeEmptyAttributes","removeEmptyElements","removeOptionalTags","removeRedundantAttributes","removeScriptTypeAttributes","removeStyleLinkTypeAttributes","removeTagWhitespace","minifier","MinifierEngine","render","templatePath","baseIncludePath","view","cloneDeep","__dirname","FileSystem","result","include","includeParts","templateName","part","ConflictException","apiPublicKey","apiSecretKey","templateEngine","TemplateEngine","mailjet","Client","apiKey","apiSecret","sendDeliveryDelay","sender","recipient","base","copyright","year","getUTCFullYear","text","sendNotification","subject","sendTrackDelivery","textContent","htmlContent","sendUserNotification","customId","sendUsersNotifications","messages","contents","sendDiscount","sendDiscounts","recipients","contact","post","Messages","statusCode","filesystem","Configuration","config","currentEnvironment","full","merge","connect","entities","con","logging","bigNumberStrings","timezone","createConnection","connection","synchronize","close","fileSystem","success","image","url","outputPath","outputName","writer","method","responseType","pipe","on","escapeRegExp","hash","seed","h1","h2","charCodeAt","imul","padStart","nullable","removeMultiSpaces","removeText","StringUtil","_e","targets","replacers","slugify","raw","toLower","deburr","truncate","slice","capitalize","lowraw","FormatterUtil","lower","word","charAt","ucfirst","toLocaleLowerCase","upper","toLocaleUpperCase","locale","preformatPhone","phoneNat","phoneInt","stripEmoji","emojiRegex","match","exec","stripExoticCharacters","autoCorrectCity","city","exactMatch","AddressUtil","CITIES","c","partialMatch","countDiff","add","remove","matchNoDash","partialMatchNoDash","isIncluded","autoCorrectStreet","street","STREET_TYPE","short","long","leadingZeroMatches","getZipCodeFromCity","ZIPCODE_CITY","reduce","selected","zipcode","getCityFromZipCode","zip","rawAddress","candidates","candidate","isZipCode","ZIPCODES","isFormatted","address","rawAddressParts","COUNTRIES","country","splice","rawParts","complete","REGIONS","region","removeDuplicates","reference","getCycleDateFromFullDate","date","cycle","toISOWeekDate","toISODate","displayWeekDay","weekDay","DateUtil","WEEK_DAYS","generatePeriod","fromDate","toDate","initialValue","addDate","MAX_DAYS","PERIOD_MAX_DATES","jump","week","month","cursor","getOpenPeriods","openings","closings","results","opening","tmpOpenings","closing","from","to","startLater","endEarlier","cut","shift","limitDate","targetDate","baseDate","limitInSeconds","toISO","seconds","localeToISO","localeDate","isoDate","frFormat1","frFormat2","isoFormat","slotToTime","timeSlot","timeFormat","slotFormat","delay","unit","abs","toUTC","diff","roundingInMs","dateTime","fromMillis","toMillis","zone","dates","avg","total","accumulator","MathUtil","applyVariation","variation","median","valuesSorted","sort","b","percentage","decimals","originalValue","newValue","percent","compact","options","ObjectUtil","isObject","removeEmptyString","applyTaxes","priceTaxExcluded","taxRates","priceTaxIncluded","rate","calculateTaxes","taxes","displayWithCurrency","price","isoCurrency","currency","PriceUtil","currencies","newPrice","position","symbol","standardPrice","toLocaleString","style","useGrouping","minimumFractionDigits","maximumFractionDigits","precision","priceInCents","precisionInCents","rest"],"sourceRoot":""}
1
+ {"version":3,"file":"common-api.node.min.js","mappings":"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","sources":["webpack://SmilePlayerCommon/webpack/universalModuleDefinition","webpack://SmilePlayerCommon/external commonjs \"emoji-regex\"","webpack://SmilePlayerCommon/webpack/bootstrap","webpack://SmilePlayerCommon/webpack/runtime/compat get default export","webpack://SmilePlayerCommon/webpack/runtime/define property getters","webpack://SmilePlayerCommon/webpack/runtime/hasOwnProperty shorthand","webpack://SmilePlayerCommon/webpack/runtime/make namespace object","webpack://SmilePlayerCommon/./src/constant/Path.ts","webpack://SmilePlayerCommon/./src/exception/MainException.ts","webpack://SmilePlayerCommon/./src/exception/BadParameterException.ts","webpack://SmilePlayerCommon/./src/exception/BadRequestException.ts","webpack://SmilePlayerCommon/./src/exception/ConflictException.ts","webpack://SmilePlayerCommon/./src/exception/DuplicateException.ts","webpack://SmilePlayerCommon/./src/exception/ExternalApiException.ts","webpack://SmilePlayerCommon/./src/exception/InternalException.ts","webpack://SmilePlayerCommon/./src/exception/NotImplementedException.ts","webpack://SmilePlayerCommon/./src/exception/ObjectNotFoundException.ts","webpack://SmilePlayerCommon/./src/exception/PageNotFoundException.ts","webpack://SmilePlayerCommon/./src/exception/UnauthorizedException.ts","webpack://SmilePlayerCommon/external commonjs \"@sentry/node\"","webpack://SmilePlayerCommon/external commonjs \"@sentry/profiling-node\"","webpack://SmilePlayerCommon/./src/tool/Env.ts","webpack://SmilePlayerCommon/./src/tool/Environment.ts","webpack://SmilePlayerCommon/./src/util/HelperUtil.ts","webpack://SmilePlayerCommon/./src/tool/Logger.ts","webpack://SmilePlayerCommon/./src/http/HandlerController.ts","webpack://SmilePlayerCommon/./src/http/AuthenticationMiddleware.ts","webpack://SmilePlayerCommon/./src/http/AuthorizationMiddleware.ts","webpack://SmilePlayerCommon/external node-commonjs \"crypto\"","webpack://SmilePlayerCommon/external commonjs \"express\"","webpack://SmilePlayerCommon/external commonjs \"cors\"","webpack://SmilePlayerCommon/external commonjs \"compression\"","webpack://SmilePlayerCommon/external commonjs \"helmet\"","webpack://SmilePlayerCommon/external commonjs \"connect-timeout\"","webpack://SmilePlayerCommon/./src/http/Server.ts","webpack://SmilePlayerCommon/external commonjs \"axios\"","webpack://SmilePlayerCommon/external commonjs \"luxon\"","webpack://SmilePlayerCommon/external node-commonjs \"querystring\"","webpack://SmilePlayerCommon/external commonjs \"retry\"","webpack://SmilePlayerCommon/./src/tool/Retry.ts","webpack://SmilePlayerCommon/./src/util/ValidatorUtil.ts","webpack://SmilePlayerCommon/external commonjs \"iconv-lite\"","webpack://SmilePlayerCommon/./src/util/UrlUtil.ts","webpack://SmilePlayerCommon/./src/service/sender/SmsSenderService.ts","webpack://SmilePlayerCommon/external node-commonjs \"path\"","webpack://SmilePlayerCommon/external commonjs \"mustache\"","webpack://SmilePlayerCommon/external commonjs \"lodash\"","webpack://SmilePlayerCommon/external node-commonjs \"fs\"","webpack://SmilePlayerCommon/./src/util/PromiseUtil.ts","webpack://SmilePlayerCommon/external commonjs \"color-name\"","webpack://SmilePlayerCommon/./src/util/GeneratorUtil.ts","webpack://SmilePlayerCommon/./src/tool/FileSystem.ts","webpack://SmilePlayerCommon/external commonjs \"clean-css\"","webpack://SmilePlayerCommon/external commonjs \"html-minifier-terser\"","webpack://SmilePlayerCommon/./src/templating/MinifierEngine.ts","webpack://SmilePlayerCommon/./src/templating/TemplateEngine.ts","webpack://SmilePlayerCommon/external commonjs \"node-mailjet\"","webpack://SmilePlayerCommon/./src/service/sender/EmailSenderService.ts","webpack://SmilePlayerCommon/./src/tool/Configuration.ts","webpack://SmilePlayerCommon/external commonjs \"typeorm\"","webpack://SmilePlayerCommon/./src/tool/Database.ts","webpack://SmilePlayerCommon/external commonjs \"prettyjson\"","webpack://SmilePlayerCommon/./src/tool/Displayer.ts","webpack://SmilePlayerCommon/./src/tool/Downloader.ts","webpack://SmilePlayerCommon/external commonjs \"fast-diff\"","webpack://SmilePlayerCommon/./src/util/StringUtil.ts","webpack://SmilePlayerCommon/./src/util/FormatterUtil.ts","webpack://SmilePlayerCommon/./src/util/AddressUtil.ts","webpack://SmilePlayerCommon/./src/util/DateUtil.ts","webpack://SmilePlayerCommon/./src/util/ExtractorUtil.ts","webpack://SmilePlayerCommon/./src/util/MathUtil.ts","webpack://SmilePlayerCommon/./src/util/ObjectUtil.ts","webpack://SmilePlayerCommon/./src/util/PriceUtil.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SmilePlayerCommon\"] = factory();\n\telse\n\t\troot[\"SmilePlayerCommon\"] = factory();\n})(global, () => {\nreturn ","module.exports = require(\"emoji-regex\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export class Path {\n private static BASE_PATH: string = './';\n\n public static registerBasePath(basePath: string): void {\n if (process.env.APP_HOME !== undefined) {\n Path.BASE_PATH = process.env.APP_HOME + '/';\n } else {\n Path.BASE_PATH = basePath + (basePath.endsWith('/') ? '' : '/');\n }\n }\n\n public static data(): string {\n return Path.BASE_PATH + 'data/';\n }\n\n public static db(): string {\n return Path.storage() + 'db/';\n }\n\n public static root(): string {\n return Path.BASE_PATH;\n }\n\n public static session(): string {\n return Path.storage() + 'session/';\n }\n\n public static storage(): string {\n return Path.BASE_PATH + 'storage/';\n }\n}\n","import {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class MainException extends Error implements ExceptionContract {\n public code: number;\n public data: {[key: string]: any};\n\n public constructor(message: string, code?: number, data?: {[key: string]: any}) {\n super(message);\n this.code = code;\n this.data = data;\n this.name = 'MainException';\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, MainException);\n } else {\n this.stack = (new Error(message)).stack;\n }\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class BadParameterException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 400, data);\n this.name = 'BadParameterException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class BadRequestException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 400, data);\n this.name = 'BadRequestException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class ConflictException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 409, data);\n this.name = 'ConflictException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class DuplicateException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 409, data);\n this.name = 'DuplicateException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class ExternalApiException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 502, data);\n this.name = 'ExternalApiException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class InternalException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 500, data);\n this.name = 'InternalException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class NotImplementedException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 501, data);\n this.name = 'NotImplementedException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class ObjectNotFoundException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 404, data);\n this.name = 'ObjectNotFoundException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class PageNotFoundException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 404, data);\n this.name = 'PageNotFoundException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class UnauthorizedException extends MainException implements ExceptionContract {\n public static readonly ERROR_CODE: number = 401;\n\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, UnauthorizedException.ERROR_CODE, data);\n this.name = 'UnauthorizedException';\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@sentry/node\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@sentry/profiling-node\");","/* eslint-disable no-shadow */\nexport enum Env {\n PRODUCTION = 'prod',\n DEVELOPMENT = 'dev',\n TEST = 'test'\n}\n","import {Env} from 'common/tool/Env';\n\nexport class Environment {\n public static getMode(): Env {\n switch (process.env.NODE_ENV) {\n case 'dev':\n case 'development':\n return Env.DEVELOPMENT;\n case 'prod':\n case 'production':\n return Env.PRODUCTION;\n case 'test':\n return Env.TEST;\n }\n\n return process.env.APP_ID === undefined ? Env.DEVELOPMENT : Env.PRODUCTION;\n }\n}\n","export const isNullOrUndefined: (obj: unknown) => boolean = (obj) => {\n return obj === undefined || obj === null;\n};\n","import * as Sentry from '@sentry/node';\nimport {nodeProfilingIntegration} from '@sentry/profiling-node';\nimport {Environment} from 'common/tool/Environment';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\nimport {UnauthorizedException} from 'common/exception/UnauthorizedException';\nimport {Env} from 'common/tool/Env';\nimport * as express from 'express';\nimport {isNullOrUndefined} from 'common/util/HelperUtil';\n\nexport class Logger {\n public static init(sentryToken: string, app: express.Express): void {\n if (Environment.getMode() === Env.PRODUCTION) {\n // const tracesSampleRate: number = 0.001;\n const tracesSampleRate: number = 0; // TODO enable tracing\n Sentry.init({\n dsn: sentryToken,\n integrations: [\n Sentry.captureConsoleIntegration({\n levels: ['error', 'warn', 'log']\n }),\n nodeProfilingIntegration()\n ],\n environment: Environment.getMode(),\n maxBreadcrumbs: 50,\n tracesSampleRate: tracesSampleRate,\n profilesSampleRate: tracesSampleRate\n });\n Sentry.setupExpressErrorHandler(app);\n }\n }\n\n public static trace(message: string, extra?: any): void {\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.info(message); // eslint-disable-line no-console\n } else {\n console.info(message, extra); // eslint-disable-line no-console\n }\n } else {\n Sentry.addBreadcrumb({\n category: 'info',\n message: message,\n data: extra,\n level: 'info'\n });\n }\n }\n\n public static debug(message: string, extra?: any): void {\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.log(message); // eslint-disable-line no-console\n } else {\n console.log(message, extra); // eslint-disable-line no-console\n }\n } else {\n Sentry.addBreadcrumb({\n category: 'debug',\n message: message,\n data: extra,\n level: 'debug'\n });\n }\n }\n\n public static info(message: string, extra?: any): void {\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.info(message); // eslint-disable-line no-console\n } else {\n console.info(message, extra); // eslint-disable-line no-console\n }\n } else {\n Sentry.withScope(scope => {\n if (extra !== undefined) {\n scope.setExtra('extra', JSON.stringify(extra));\n }\n Sentry.captureMessage(message);\n });\n }\n }\n\n public static warning(error: ExceptionContract, extra?: any): void {\n if(!isNullOrUndefined((error as any).response)) {\n if (typeof extra !== 'object') {\n extra = {};\n }\n extra.requestErrorData = (error as any).response.data;\n }\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.warn(error); // eslint-disable-line no-console\n } else {\n console.warn(error, extra); // eslint-disable-line no-console\n }\n } else {\n Sentry.withScope(scope => {\n if (extra !== undefined) {\n scope.setExtra('extra', JSON.stringify(extra));\n }\n if (error.data !== undefined) {\n scope.setExtra('data', JSON.stringify(error.data));\n }\n Sentry.captureException(error);\n });\n }\n }\n\n public static error(error: ExceptionContract, extra?: any): void {\n if ([UnauthorizedException.ERROR_CODE].includes(error.code)) {\n return;\n }\n if(!isNullOrUndefined((error as any).response)) {\n if (typeof extra !== 'object') {\n extra = {};\n }\n extra.requestErrorData = (error as any).response.data;\n }\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.error(error); // eslint-disable-line no-console\n } else {\n console.error(error, extra); // eslint-disable-line no-console\n }\n } else {\n Sentry.withScope(scope => {\n if (extra !== undefined) {\n scope.setExtra('extra', JSON.stringify(extra));\n }\n if (error.data !== undefined) {\n scope.setExtra('data', JSON.stringify(error.data));\n }\n Sentry.captureException(error);\n });\n }\n }\n}\n","import * as express from 'express';\nimport {Logger} from 'common/tool/Logger';\n\nexport class HandlerController {\n public static error(_request: express.Request, response: express.Response, error: any): any {\n Logger.error(error);\n const code: number = error.code !== undefined && error.code !== null ? Number(error.code) : 500;\n response.status(!isNaN(code) && Number(error.code) >= 400 && Number(error.code) <= 599 ? Number(error.code) : 500);\n response.json({code: error.code, message: error.message});\n }\n}\n","import * as express from 'express';\nimport {AuthenticationMiddlewareContract} from 'common/http/AuthenticationMiddlewareContract';\nimport {AuthentificationConfigurationContract} from 'common/http/AuthentificationConfigurationContract';\nimport {UnauthorizedException} from 'common/exception/UnauthorizedException';\nimport {HandlerController} from 'common/http/HandlerController';\n\nexport class AuthenticationMiddleware implements AuthenticationMiddlewareContract {\n private configuration: AuthentificationConfigurationContract;\n\n public constructor(configuration: AuthentificationConfigurationContract) {\n this.configuration = configuration;\n }\n\n public handler(): (request: express.Request, response: express.Response, next: () => void) => void {\n return (request: express.Request, response: express.Response, next: () => void) => {\n try {\n let authenticated: boolean = false;\n\n if (!authenticated && this.configuration.jwt !== undefined) {\n (request as any).session = {\n // TODO\n };\n\n authenticated = true;\n }\n\n if (!authenticated && this.configuration.key !== undefined) {\n authenticated = this.authApiKey(request);\n }\n\n if (!authenticated && this.configuration.session !== undefined) {\n const sessionKeys: string[] = Object.keys((request as any).session);\n if (!Array.isArray(this.configuration.session.required)) {\n throw new UnauthorizedException('session is not well formatted');\n }\n\n this.configuration.session.required.forEach((required) => {\n if (!sessionKeys.includes(required)) {\n throw new UnauthorizedException('session is incomplete');\n }\n });\n\n authenticated = true;\n }\n\n if (!authenticated && this.configuration.none !== undefined) {\n authenticated = this.authNone(request);\n }\n\n if (authenticated) {\n next();\n } else {\n throw new UnauthorizedException('request is not authenticate');\n }\n } catch (error) {\n HandlerController.error(request, response, error);\n }\n };\n }\n\n private authApiKey(request: express.Request): boolean {\n if (typeof request.headers.Authorization !== 'string' || !request.headers.Authorization.startsWith('apiKey')) {\n return false;\n }\n\n const parts: string[] = request.headers.Authorization.split(' ');\n if (parts.length !== 2) {\n throw new UnauthorizedException('api key is not well formatted');\n }\n\n if (parts[1] !== this.configuration.key.secret) {\n throw new UnauthorizedException('api key is not valid');\n }\n\n (request as any).session = {};\n\n return true;\n }\n\n private authNone(request: express.Request): boolean {\n if (Array.isArray(this.configuration.none.urlStartsWith)) {\n if (this.configuration.none.urlStartsWith.find((urlStartsWith) => request.originalUrl?.startsWith(urlStartsWith)) !== undefined) {\n (request as any).session = {};\n\n return true;\n }\n }\n\n return false;\n }\n}\n","import {AuthorizationMiddlewareContract} from 'common/http/AuthorizationMiddlewareContract';\n\nexport class AuthorizationMiddleware implements AuthorizationMiddlewareContract {\n public can(_action: string, _subject: string): void {\n // TODO\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"crypto\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"express\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"cors\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"compression\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"helmet\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"connect-timeout\");","import * as crypto from 'crypto';\nimport * as express from 'express';\nimport * as cors from 'cors';\nimport * as compression from 'compression';\nimport helmet from 'helmet';\nimport * as timeout from 'connect-timeout';\nimport {ServerContract} from 'common/http/ServerContract';\nimport {Logger} from 'common/tool/Logger';\n\nexport class Server implements ServerContract {\n public static readonly DEFAULT_PORT: number = 8080;\n public static readonly SALT: string = '03561b4a0fe7f125025';\n private app: express.Express;\n\n public async create(origins: string[], port?: number): Promise<express.Express> {\n if (this.app === undefined) {\n const backendPort: number = port || Server.DEFAULT_PORT;\n const backendLocalUrl: string = 'http://localhost:' + String(backendPort);\n Logger.debug('start server on ' + backendLocalUrl);\n this.app = express();\n this.app.set('trust proxy', true);\n this.app.use(compression({level: -1}));\n this.app.use(timeout('300s'));\n this.app.use(express.json({\n inflate: true,\n limit: '10mb',\n reviver: null,\n strict: true,\n type: 'application/json',\n verify: undefined\n }));\n this.app.use(express.urlencoded({\n limit: '10mb'\n }));\n this.app.use(cors({\n origin: [backendLocalUrl].concat(origins),\n credentials: true\n }));\n this.app.use(helmet());\n this.app.use(express.json());\n this.app.listen(backendPort, () => {\n Logger.debug('server is running on ' + backendLocalUrl);\n });\n }\n\n return this.app;\n }\n\n public getSessionSecret(sessionCookieName: string): string {\n return crypto.createHash('sha1').update(sessionCookieName + Server.SALT).digest('hex');\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"axios\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"luxon\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"querystring\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"retry\");","import * as retry from 'retry';\n\nexport class Retry {\n public static async request(process: () => Promise<void>, retries: number = 2, logger: (error: Error) => void): Promise<any> {\n const operation = retry.operation({\n retries: retries,\n factor: 1,\n minTimeout: 0,\n maxTimeout: 0,\n randomize: false\n });\n\n return new Promise<any>((resolve, reject) => {\n operation.attempt(() => {\n process().then(resolve).catch((error) => {\n if (operation.retry(error)) {\n if (typeof logger === 'function') {\n logger(error);\n }\n } else {\n reject(error);\n }\n });\n });\n });\n }\n}\n","export class ValidatorUtil {\n public static isEmail(email: string): boolean {\n if (typeof email !== 'string') {\n return false;\n }\n\n return (new RegExp('^[a-zA-Z0-9\\\\.!#$%&*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\\\.[a-zA-Z0-9-]+)*$', 'i')).test(email);\n }\n\n public static isPhone(phone: string): boolean {\n if (typeof phone !== 'string') {\n return false;\n }\n\n return (new RegExp('^([\\+\\\\s0-9]{10,}(#[0-9]+)?)$')).test(phone);\n }\n\n public static isIntMobilePhone(phone: string): boolean {\n const caRegex: RegExp = new RegExp('^\\\\+1[0-9]{10}$', 'i');\n const frRegex: RegExp = new RegExp('^\\\\+33(6|7)[0-9]{8}$', 'i');\n const usRegex: RegExp = new RegExp('^\\\\+1[0-9]{10}$', 'i');\n\n return caRegex.test(phone) || frRegex.test(phone) || usRegex.test(phone);\n }\n\n public static isNumber(num: string | number): boolean {\n if (typeof num === 'number') {\n return true;\n }\n\n if (typeof num !== 'string') {\n return false;\n }\n\n return (new RegExp('^\\-?[0-9]+\\\\.?[0-9]*$')).test(num);\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"iconv-lite\");","import {encode} from 'iconv-lite';\n\nexport class UrlUtil {\n public static isUTF8(charset: string): boolean {\n if (!charset) {\n return true;\n }\n charset = charset.toLowerCase();\n\n return charset === 'utf8' || charset === 'utf-8';\n }\n\n public static urlencode(str: string, charset: string): string {\n if (!charset || UrlUtil.isUTF8(charset)) {\n return encodeURIComponent(str);\n }\n const buf = encode(str, charset);\n let encodeStr = '';\n let ch = '';\n\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < buf.length; i++) {\n ch = buf[i].toString(16);\n if (ch.length === 1) {\n ch = '0' + ch;\n }\n encodeStr += '%' + ch;\n }\n encodeStr = encodeStr.toUpperCase();\n\n return encodeStr;\n }\n}\n","import axios from 'axios';\nimport {DateTime} from 'luxon';\nimport * as querystring from 'querystring';\nimport {SmsSenderServiceContract} from 'common/service/sender/SmsSenderServiceContract';\nimport {ExternalApiException} from 'common/exception/ExternalApiException';\nimport {Retry} from 'common/tool/Retry';\nimport {Logger} from 'common/tool/Logger';\nimport {Environment} from 'common/tool/Environment';\nimport {BadParameterException} from 'common/exception/BadParameterException';\nimport {Env} from 'common/tool/Env';\nimport {ValidatorUtil} from 'common/util/ValidatorUtil';\nimport {UrlUtil} from 'common/util/UrlUtil';\n\nexport class SmsSenderService implements SmsSenderServiceContract {\n public static readonly BASE_API_URL: string = 'https://api.smsmode.com/http/1.6/';\n public static readonly MESSAGE_MAX_LENGTH: number = 150;\n private readonly token: string;\n private readonly mode: Environment;\n\n public constructor(token: string, mode: Environment) {\n this.token = token;\n this.mode = mode;\n }\n\n public async send(senderName: string, message: string, rawPhones: string[], isCommercial: boolean = true, sendAt?: string): Promise<void> {\n let phones: string[] = this.checkPhoneFormat(rawPhones);\n if (phones.length === 0) {\n Logger.warning(new BadParameterException('no valid phone', {phones: rawPhones}));\n\n return Promise.resolve();\n }\n\n if (phones.length > 1) {\n if (message.length > SmsSenderService.MESSAGE_MAX_LENGTH * 2) {\n message = message.substring(0, SmsSenderService.MESSAGE_MAX_LENGTH * 2);\n } else if (message.length > SmsSenderService.MESSAGE_MAX_LENGTH && message.length <= SmsSenderService.MESSAGE_MAX_LENGTH * 1.33) {\n message = message.substring(0, SmsSenderService.MESSAGE_MAX_LENGTH);\n }\n }\n\n await Retry.request(async () => {\n const params: Record<string, any> = {\n accessToken: this.token,\n emetteur: senderName,\n message: UrlUtil.urlencode(message, 'ISO-8859-15'),\n numero: phones.map((phone) => phone.replace('+', '')).join(','),\n classe_msg: 2,\n nbr_msg: Math.ceil(message.length / SmsSenderService.MESSAGE_MAX_LENGTH)\n };\n\n if (isCommercial) {\n params.stop = 1;\n }\n\n if (sendAt !== undefined) {\n params.date_envoi = DateTime.fromISO(sendAt, { setZone: true }).toFormat('ddMMyyyy-HH:mm');\n }\n\n const target: DateTime = DateTime.fromISO(sendAt ?? (new Date()).toISOString(), { setZone: true }).setZone('Europe/Paris');\n if (isCommercial) { // do not send between 21h and 9h\n if (target.hour >= 21) {\n params.date_envoi = target.plus({day: 1}).set({hour: 9}).toFormat('ddMMyyyy-HH:mm');\n } else if (target.hour < 9) {\n params.date_envoi = target.set({hour: 9}).toFormat('ddMMyyyy-HH:mm');\n }\n } else { // do not send between 00h and 8h\n if (target.hour < 8) {\n params.date_envoi = target.set({hour: 8}).toFormat('ddMMyyyy-HH:mm');\n }\n }\n\n if (this.mode === Env.TEST) {\n Logger.info('Simulation Mode: SMS has been sent', {params: params});\n } else {\n if (this.mode === Env.DEVELOPMENT) {\n phones = ['+15145705214'];\n }\n\n const response: {data: string} = await axios.post(SmsSenderService.BASE_API_URL + 'sendSMS.do',\n querystring.stringify(params, '&', '=', {encodeURIComponent: (p) => p}), {\n timeout: 30000\n });\n\n if (response.data.length > 0 && response.data.trim().substring(0, 1) !== '0') {\n throw new ExternalApiException('Error: ' + response.data, params);\n }\n }\n }, 0, Logger.error.bind(Logger));\n }\n\n private checkPhoneFormat(phones: string[]): string[] {\n return phones.filter((phone) => ValidatorUtil.isIntMobilePhone(phone));\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"path\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"mustache\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"lodash\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"fs\");","export const asyncForEach: (array: any[], callback: (item: any) => Promise<void>) => Promise<void> = async (array, callback) => {\n for (let i: number = 0; i < array.length; i++) { // eslint-disable-line\n await callback(array[i]);\n }\n};\n\nexport const wait: (time: number) => Promise<void> = (time) => {\n return new Promise((resolve) => setTimeout(resolve, time));\n};\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"color-name\");","import * as colors from 'color-name';\n\nexport class GeneratorUtil {\n private static readonly symbolUpperCases: string[] = [\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'K', 'M', 'N', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'\n ];\n private static readonly symbolLowerCases: string[] = [\n 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'k', 'm', 'n', 'p', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'\n ];\n\n public static code(size: number): string {\n if (size === null || size === undefined) {\n size = 6;\n }\n\n let code: string = '';\n while (code.length < size) {\n code += GeneratorUtil.symbolUpperCases[GeneratorUtil.int(0, GeneratorUtil.symbolUpperCases.length - 1)];\n }\n\n return code;\n }\n\n public static color(alpha: number = 1): string {\n const alphaHex: string = GeneratorUtil.rgbToHex(Math.round(255 * alpha));\n const defaultColor: string = '#000000' + alphaHex;\n const colorList: number[][] = Object.values(colors);\n if (colorList.length === 0) {\n return defaultColor;\n }\n const rgb: number[] = colorList[GeneratorUtil.int(0, colorList.length - 1)];\n if (rgb.length !== 3) {\n return defaultColor;\n }\n\n return '#' + GeneratorUtil.rgbToHex(rgb[0]) + GeneratorUtil.rgbToHex(rgb[1]) + GeneratorUtil.rgbToHex(rgb[2]) + alphaHex;\n }\n\n private static rgbToHex(rgb: number): string {\n const hex: string = rgb.toString(16);\n if (hex.length === 1) {\n return '0' + hex;\n }\n\n return hex;\n }\n\n public static int(min: number, max: number): number {\n if (min === null || min === undefined) {\n min = 0;\n }\n if (max === null || max === undefined) {\n max = Number.POSITIVE_INFINITY;\n }\n\n min = Math.ceil(min);\n max = Math.floor(max);\n\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n\n public static password(size: number): string {\n if (size === null || size === undefined) {\n size = 8;\n }\n\n let code: string = '';\n while (code.length < size) {\n switch (GeneratorUtil.int(1, 3)) {\n case 1:\n code += GeneratorUtil.symbolUpperCases[GeneratorUtil.int(0, GeneratorUtil.symbolUpperCases.length - 1)];\n break;\n case 2:\n code += GeneratorUtil.symbolLowerCases[GeneratorUtil.int(0, GeneratorUtil.symbolLowerCases.length - 1)];\n break;\n default:\n code += String(GeneratorUtil.int(0, 9));\n }\n }\n\n return code;\n }\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {BadParameterException} from 'common/exception/BadParameterException';\nimport {asyncForEach} from 'common/util/PromiseUtil';\nimport {GeneratorUtil} from 'common/util/GeneratorUtil';\n\nexport class FileSystem implements FileSystemContract {\n public dirPath(filePath: string): string {\n const i: number = path.resolve(filePath).lastIndexOf(path.sep);\n if (i < 0) {\n return filePath;\n }\n\n return path.resolve(path.resolve(filePath).substr(0, i + 1)) + path.sep;\n }\n\n public async listFiles(dirPath: string): Promise<string[]> {\n if (!this.isDir(dirPath)) {\n throw new BadParameterException(String(dirPath) + ' does not exist or is not a directory');\n }\n\n const separator: string = dirPath.endsWith('/') ? '' : '/';\n const files: string[] = fs.readdirSync(dirPath);\n\n const output: string[] = [];\n await asyncForEach(files, async (fileName: string) => {\n if (this.isFile(dirPath + separator + fileName)) {\n output.push(dirPath + separator + fileName);\n }\n });\n\n return output;\n }\n\n public async randomFile(dirPath: string, suggestion?: number): Promise<string> {\n const filenames: string[] = await this.listFiles(dirPath);\n if (filenames.length === 0) {\n return undefined;\n }\n\n let index: number;\n if (suggestion !== undefined) {\n index = Math.max(suggestion, 0) % filenames.length;\n } else {\n index = GeneratorUtil.int(0, filenames.length - 1);\n }\n\n return filenames[index];\n }\n\n public async move(filePath: string, dirPath: string): Promise<void> {\n if (!this.isFile(filePath)) {\n throw new BadParameterException(String(filePath) + ' does not exist or is not a file');\n }\n\n fs.mkdirSync(dirPath, {recursive: true});\n if (!this.isDir(dirPath)) {\n throw new BadParameterException(String(dirPath) + ' does not exist or is not a directory');\n }\n\n return fs.renameSync(filePath, dirPath + path.basename(filePath));\n }\n\n public async read(filePath: string): Promise<string> {\n if (!this.isFile(filePath)) {\n throw new BadParameterException(String(filePath) + ' does not exist or is not a file');\n }\n\n return fs.readFileSync(filePath, 'utf8');\n }\n\n public async readJson(jsonPath: string): Promise<any> {\n const data: any = await this.read(jsonPath);\n if (!this.isJson(data)) {\n throw new BadParameterException(String(jsonPath) + ' does not contain JSON');\n }\n\n return JSON.parse(data);\n }\n\n public async readJsonFiles(dirPath: string): Promise<{name: string, data: any}[]> {\n if (!this.isDir(dirPath)) {\n throw new BadParameterException(String(dirPath) + ' does not exist or is not a directory');\n }\n\n const separator: string = dirPath.endsWith('/') ? '' : '/';\n const files: string[] = fs.readdirSync(dirPath);\n\n const output: {name: string, data: any}[] = [];\n await asyncForEach(files, async (fileName: string) => {\n if (this.isFile(dirPath + separator + fileName) && fileName.endsWith('.json')) {\n output.push({\n name: fileName,\n data: await this.readJson(dirPath + separator + fileName)\n });\n }\n });\n\n return output;\n }\n\n public async write(filePath: string, rawData: any): Promise<void> {\n let data: string = '';\n if (typeof rawData === 'string') {\n data = String(rawData);\n } else if (typeof rawData === 'number') {\n data = String(rawData);\n } else {\n data = JSON.stringify(rawData);\n }\n\n fs.mkdirSync(this.dirPath(filePath), {recursive: true});\n\n fs.writeFileSync(filePath, data, {encoding: 'utf8'});\n\n return Promise.resolve();\n }\n\n public async writeJson(jsonPath: string, data: any): Promise<void> {\n return this.write(jsonPath, JSON.stringify(data));\n }\n\n private isDir(dirPath: string): boolean {\n return fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();\n }\n\n private isFile(filePath: string): boolean {\n return fs.existsSync(filePath) && fs.statSync(filePath).isFile();\n }\n\n private isJson(data: any): boolean {\n try {\n JSON.parse(data);\n\n return true;\n } catch (_error) {\n return false;\n }\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"clean-css\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"html-minifier-terser\");","import {MinifierEngineContract} from 'common/templating/MinifierEngineContract';\nimport * as CleanCSS from 'clean-css';\nimport {minify as minifyHtml} from 'html-minifier-terser';\n\nexport class MinifierEngine implements MinifierEngineContract {\n public async css(content: string): Promise<string> {\n const minifier: CleanCSS.MinifierOutput = new CleanCSS({\n compatibility: 'ie7',\n format: false,\n level: 1,\n sourceMap: false\n });\n const result: CleanCSS.Output = minifier.minify(content);\n\n return result.styles;\n }\n\n public async html(content: string): Promise<string> {\n return await minifyHtml(content, {\n collapseBooleanAttributes: true,\n collapseInlineTagWhitespace: true,\n collapseWhitespace: true,\n continueOnParseError: false,\n decodeEntities: false,\n html5: true,\n minifyCSS: true,\n minifyJS: true,\n noNewlinesBeforeTagClose: true,\n preserveLineBreaks: false,\n preventAttributesEscaping: false,\n processConditionalComments: false,\n quoteCharacter: '\"',\n removeAttributeQuotes: false,\n removeComments: true,\n removeEmptyAttributes: true,\n removeEmptyElements: true,\n removeOptionalTags: false,\n removeRedundantAttributes: true,\n removeScriptTypeAttributes: false,\n removeStyleLinkTypeAttributes: false,\n removeTagWhitespace: false\n });\n }\n}\n","import * as path from 'path';\nimport {parse, render} from 'mustache';\nimport {cloneDeep} from 'lodash';\nimport {TemplateEngineContract} from 'common/templating/TemplateEngineContract';\nimport {FileSystem} from 'common/tool/FileSystem';\nimport {asyncForEach} from 'common/util/PromiseUtil';\nimport {MinifierEngineContract} from 'common/templating/MinifierEngineContract';\nimport {MinifierEngine} from 'common/templating/MinifierEngine';\nimport {ConflictException} from 'common/exception/ConflictException';\n\nexport class TemplateEngine implements TemplateEngineContract {\n private minifier: MinifierEngineContract;\n\n public constructor() {\n this.minifier = new MinifierEngine();\n }\n\n public async render(templatePath: string, data: {[key: string]: any}, baseIncludePath?: string): Promise<string> {\n if (!templatePath.endsWith('.template')) {\n templatePath += '.template';\n }\n const view: {[key: string]: any} = cloneDeep(data);\n const basePath: string = path.isAbsolute(templatePath) ? '' : __dirname + path.sep;\n const fileSystem = new FileSystem();\n const content: string = await fileSystem.read(basePath + templatePath);\n\n const includes: string[] = [];\n const results: any[][] = parse(content);\n results.forEach((result) => {\n if (result.length >= 4 && result[0] === '&' && result[1].startsWith('include:')) {\n includes.push(result[1]);\n }\n });\n\n if (includes.length > 0) {\n if (baseIncludePath === undefined) {\n baseIncludePath = path.dirname(basePath + templatePath) + path.sep;\n } else if (!path.isAbsolute(baseIncludePath)) {\n baseIncludePath = basePath + baseIncludePath;\n }\n await asyncForEach(includes, async (include) => {\n const includeParts: string[] = include.split(':');\n if (includeParts.length === 3 && view[include] !== undefined) {\n const templateName: string = includeParts[2];\n if (baseIncludePath.includes('/html')) {\n Object.keys(view[include]).forEach((key) => {\n view[include][key] = Array.isArray(view[include][key]) ? view[include][key].map((part: string) => part.replace(/(?:\\r\\n|\\r|\\n)/g, '<br>'))\n : view[include][key].replace(/(?:\\r\\n|\\r|\\n)/g, '<br>');\n });\n }\n view[include] = await this.render(path.resolve(baseIncludePath, templateName), view[include]);\n }\n });\n }\n\n const output: string = render(content, view);\n if (output.includes('{{') || output.includes('}}')) {\n throw new ConflictException('template: missing data to render template', {templatePath, data});\n }\n\n return templatePath.includes('html') ? this.minifier.html(output) : output;\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"node-mailjet\");","import {EmailSenderServiceContract} from 'common/service/sender/EmailSenderServiceContract';\nimport {TemplateEngine} from 'common/templating/TemplateEngine';\nimport {TemplateEngineContract} from 'common/templating/TemplateEngineContract';\nimport {ViewEmailTrackDeliveryContract} from 'common/templating/view/email/ViewEmailTrackDeliveryContract';\nimport {RecipientContract} from 'common/service/sender/RecipientContract';\nimport {SenderContract} from 'common/service/sender/SenderContract';\nimport {Client} from 'node-mailjet';\nimport {MainException} from 'common/exception/MainException';\nimport {Retry} from 'common/tool/Retry';\nimport {Environment} from 'common/tool/Environment';\nimport {Env} from 'common/tool/Env';\nimport {Logger} from 'common/tool/Logger';\nimport {ViewEmailUserNotificationContract} from 'common/templating/view/email/ViewEmailUserNotificationContract';\nimport {ViewEmailDiscountContract} from 'common/templating/view/email/ViewEmailDiscountContract';\nimport {asyncForEach} from 'common/util/PromiseUtil';\nimport {BadParameterException} from 'common/exception/BadParameterException';\n\nexport class EmailSenderService implements EmailSenderServiceContract {\n private readonly templateEngine: TemplateEngineContract;\n private readonly mailjet: any;\n private readonly mode: Environment;\n\n public constructor(apiPublicKey: string, apiSecretKey: string, mode: Environment) {\n this.templateEngine = new TemplateEngine();\n this.mailjet = new Client({apiKey: apiPublicKey, apiSecret: apiSecretKey});\n this.mode = mode;\n }\n\n public async sendDeliveryDelay(sender: SenderContract, recipient: RecipientContract, data: ViewEmailTrackDeliveryContract): Promise<void> {\n return await Retry.request(async () => {\n if (data.base.copyright === undefined) {\n data.base.copyright = {\n year: String((new Date()).getUTCFullYear())\n };\n }\n const text: string = await this.templateEngine.render('data/email/template/deliveryDelay', data, 'data/email/element/text');\n const html: string = await this.templateEngine.render('data/email/template/deliveryDelay', data, 'data/email/element/html');\n\n return await this.sendNotification(sender, [{recipient: recipient, subject: data.base.subject, text: text, html: html}], false);\n }, 0, Logger.error.bind(Logger));\n }\n\n public async sendTrackDelivery(sender: SenderContract, recipient: RecipientContract, data: ViewEmailTrackDeliveryContract): Promise<void> {\n return await Retry.request(async () => {\n const textContent: string = await this.templateEngine.render('data/email/template/trackDelivery', data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: data.base});\n const htmlContent: string = await this.templateEngine.render('data/email/template/trackDelivery', data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: data.base});\n\n return await this.sendNotification(sender, [{recipient: recipient, subject: data.base.subject, text: text, html: html}], false);\n }, 0, Logger.error.bind(Logger));\n }\n\n public async sendUserNotification(sender: SenderContract, recipient: RecipientContract, data: ViewEmailUserNotificationContract, isCommercial: boolean = true, customId?: string): Promise<void> {\n return await Retry.request(async () => {\n const textContent: string = await this.templateEngine.render('data/email/template/userNotification', data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: data.base, isCommercial: isCommercial});\n const htmlContent: string = await this.templateEngine.render('data/email/template/userNotification', data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: data.base, isCommercial: isCommercial});\n\n return await this.sendNotification(sender, [{recipient: recipient, subject: data.base.subject, text: text, html: html}], isCommercial, customId);\n }, 0, Logger.error.bind(Logger));\n }\n\n public async sendUsersNotifications(sender: SenderContract, messages: {recipient: RecipientContract, data: ViewEmailUserNotificationContract}[],\n isCommercial?: boolean, customId?: string): Promise<void> {\n return await Retry.request(async () => {\n const contents: {recipient: RecipientContract, subject: string, text: string, html: string}[] = [];\n await asyncForEach(messages, async (message) => {\n const textContent: string = await this.templateEngine.render('data/email/template/userNotification', message.data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: message.data.base, isCommercial: isCommercial});\n const htmlContent: string = await this.templateEngine.render('data/email/template/userNotification', message.data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: message.data.base, isCommercial: isCommercial});\n contents.push({recipient: message.recipient, subject: message.data.base.subject, text: text, html: html});\n });\n\n return await this.sendNotification(sender, contents, isCommercial, customId);\n }, 0, Logger.error.bind(Logger));\n }\n\n public async sendDiscount(sender: SenderContract, recipient: RecipientContract, data: ViewEmailDiscountContract, isCommercial: boolean = true, customId?: string): Promise<void> {\n return await Retry.request(async () => {\n const textContent: string = await this.templateEngine.render('data/email/template/discount', data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: data.base, isCommercial: isCommercial});\n const htmlContent: string = await this.templateEngine.render('data/email/template/discount', data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: data.base, isCommercial: isCommercial});\n\n return await this.sendNotification(sender, [{recipient: recipient, subject: data.base.subject, text: text, html: html}], isCommercial, customId);\n }, 0, Logger.error.bind(Logger));\n }\n\n public async sendDiscounts(sender: SenderContract, messages: {recipient: RecipientContract, data: ViewEmailDiscountContract}[], isCommercial: boolean = true, customId?: string): Promise<void> {\n return await Retry.request(async () => {\n const contents: {recipient: RecipientContract, subject: string, text: string, html: string}[] = [];\n await asyncForEach(messages, async (message) => {\n const textContent: string = await this.templateEngine.render('data/email/template/discount', message.data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: message.data.base, isCommercial: isCommercial});\n const htmlContent: string = await this.templateEngine.render('data/email/template/discount', message.data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: message.data.base, isCommercial: isCommercial});\n contents.push({recipient: message.recipient, subject: message.data.base.subject, text: text, html: html});\n });\n\n return await this.sendNotification(sender, contents, isCommercial, customId);\n }, 0, Logger.error.bind(Logger));\n }\n\n // private async sendCampaign(sender: SenderContract, recipients: RecipientContract[], subject: string, text: string, html: string): Promise<void> {\n // try {\n // await this.mailjet.post('send').request({\n // FromEmail: sender.contact,\n // FromName: sender.name,\n // Subject: subject,\n // 'Text-part': text,\n // 'Html-part': html,\n // Recipients: [\n // recipients.map((recipient) => {\n // return { Name: recipient.name, Email: recipient.contact };\n // }),\n // ],\n // });\n //\n // return Promise.resolve();\n // } catch (error) {\n // return Promise.reject(new MainException(error.message, Number(error.statusCode)));\n // }\n // }\n\n private async sendNotification(sender: SenderContract, contents: {recipient: RecipientContract, subject: string, text: string, html: string}[],\n isCommercial: boolean = false, customId?: string): Promise<void> {\n if (contents.length === 0) {\n throw new BadParameterException('email: missing messages');\n }\n\n try {\n if (this.mode === Env.TEST) {\n Logger.info('Simulation Mode: Email has been sent', {sender: sender, recipients: contents.map((content) => content.recipient)});\n } else {\n const messages: {From:{Name: string,Email: string},To:[{Name: string,Email: string}], Subject: string, TextPart: string, HTMLPart: string, Priority:0 | 1 | 2, customID: string}[] = [];\n await asyncForEach(contents, async (content) => {\n if (this.mode === Env.DEVELOPMENT) {\n content.recipient.contact = 'developer@onylab.com';\n }\n messages.push({\n 'From': {\n 'Name': sender.name,\n 'Email': sender.contact\n },\n 'To': [{\n 'Name': content.recipient.name,\n 'Email': content.recipient.contact\n }],\n 'Subject': content.subject,\n 'TextPart': content.text,\n 'HTMLPart': content.html,\n 'Priority': isCommercial ? 0 : 2,\n 'customID': customId === undefined ? undefined : String(customId)\n });\n });\n await this.mailjet.post('send', {'version': 'v3.1'}).request({ Messages: messages });\n }\n } catch (error) {\n throw new MainException(error.message, Number(error.statusCode));\n }\n }\n}\n","import {ConfigurationContract} from 'common/tool/ConfigurationContract';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {FileSystem} from 'common/tool/FileSystem';\nimport {Env} from 'common/tool/Env';\nimport {merge} from 'lodash';\nimport {Environment} from 'common/tool/Environment';\n\nexport class Configuration implements ConfigurationContract {\n private static config: any;\n private static root: string;\n private static environment: Env;\n private readonly filesystem: FileSystemContract;\n\n public constructor(root: string, environment?: Env) {\n this.filesystem = new FileSystem();\n if (Configuration.root === undefined || Configuration.root !== root) {\n Configuration.root = root;\n Configuration.config = undefined;\n }\n const currentEnvironment: string = (environment === undefined ? Environment.getMode() : environment);\n if (Configuration.environment === undefined || Configuration.environment !== currentEnvironment) {\n Configuration.environment = environment === undefined ? Environment.getMode() : environment;\n Configuration.config = undefined;\n }\n }\n\n public async full(): Promise<any> {\n await this.init();\n\n return Configuration.config;\n }\n\n private async init(): Promise<void> {\n if (Configuration.config === undefined) {\n if (Configuration.root === undefined) {\n Configuration.config = {};\n } else {\n Configuration.config = await this.filesystem.readJson(Configuration.root + 'data/config.json');\n if ([Env.DEVELOPMENT, Env.TEST].includes(Configuration.environment)) {\n try {\n Configuration.config = merge(Configuration.config, await this.filesystem.readJson(Configuration.root + 'data/config_' + String(Configuration.environment) + '.json'));\n } catch (_e) {\n // nothing\n }\n }\n\n }\n }\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"typeorm\");","import {Connection, createConnection} from 'typeorm';\nimport {DatabaseContract} from 'common/tool/DatabaseContract';\nimport {FileSystem} from 'common/tool/FileSystem';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {BadParameterException} from 'common/exception/BadParameterException';\nimport {Logger} from 'common/tool/Logger';\n\n// TypeORM documation, types: https://github.com/typeorm/typeorm/blob/master/src/driver/types/ColumnTypes.ts\nexport class Database implements DatabaseContract {\n private root: string;\n private db: any;\n private connection: Connection;\n\n public constructor(root: string) {\n this.root = root;\n }\n\n public async connect(name: string, entities: any[]): Promise<void> {\n if (this.db === undefined) {\n await this.init();\n }\n\n const con: any = this.db[name];\n if (con !== undefined) {\n con.entities = entities;\n con.logging = ['error'];\n con.logger = true;\n con.bigNumberStrings = false;\n if (con.timezone === undefined) {\n con.timezone = 'Z';\n }\n if (con.charset === undefined) {\n con.charset = 'UTF8_GENERAL_CI';\n }\n this.connection = await createConnection(con);\n } else {\n Logger.error(new BadParameterException('bad connection name'));\n }\n }\n\n public async synchronize(): Promise<void> {\n if (this.connection !== undefined) {\n await this.connection.synchronize();\n }\n }\n\n public async close(): Promise<void> {\n return this.connection.close();\n }\n\n private async init(): Promise<void> {\n if (this.root === undefined) {\n this.db = {};\n } else {\n const fileSystem: FileSystemContract = new FileSystem();\n this.db = await fileSystem.readJson(this.root + 'data/db.json');\n }\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"prettyjson\");","import * as prettyjson from 'prettyjson';\nimport {DisplayerContract} from 'common/tool/DisplayerContract';\nimport {Logger} from 'common/tool/Logger';\n\nexport class Displayer implements DisplayerContract {\n public error(error: Error): void {\n Logger.error(error);\n }\n\n public info(message: string): void {\n Logger.trace(message);\n }\n\n public json(json: any): void {\n Logger.trace(prettyjson.render(json, {}));\n }\n\n public success(message: string): void {\n Logger.trace(message);\n }\n}\n","import {DownloaderContract} from 'common/tool/DownloaderContract';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport * as crypto from 'crypto';\nimport axios from 'axios';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {FileSystem} from 'common/tool/FileSystem';\n\nexport class Downloader implements DownloaderContract {\n private readonly fileSystem: FileSystemContract;\n\n public constructor() {\n this.fileSystem = new FileSystem();\n }\n\n public async image(url: string, outputPath: string, outputName?: string): Promise<string> {\n if (outputName === undefined) {\n outputName = crypto.randomBytes(20).toString('hex') + path.extname(url);\n }\n await this.fileSystem.write(outputPath + path.sep + outputName, '');\n\n const output: string = path.resolve(outputPath + path.sep + outputName);\n const writer: any = fs.createWriteStream(output);\n\n const response: any = await axios({\n url,\n method: 'GET',\n responseType: 'stream'\n });\n\n response.data.pipe(writer);\n\n return new Promise((resolve, reject) => {\n writer.on('finish', () => resolve(output));\n writer.on('error', reject);\n });\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"fast-diff\");","/* eslint-disable no-bitwise */\nimport {deburr, toLower, trim} from 'lodash';\nimport {isNullOrUndefined} from 'common/util/HelperUtil';\n\nexport class StringUtil {\n // alternative https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex\n public static escapeRegExp(str: string): string {\n if (typeof str !== 'string') {\n return str;\n }\n\n return str.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&'); // and .replace(/-/g, '\\\\x2d');\n }\n\n public static hash(str: string, seed: number = 0): string {\n let h1 = 0xdeadbeef ^ seed;\n let h2 = 0x41c6ce57 ^ seed;\n for(let i = 0, ch; i < str.length; i++) {\n ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507);\n h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909);\n h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507);\n h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909);\n\n return (h2>>>0).toString(16).padStart(8, '0') + (h1>>>0).toString(16).padStart(8, '0');\n }\n\n public static nullable(str: string): string {\n if (isNullOrUndefined(str)) {\n return null;\n }\n\n if (typeof str === 'string' && str.length === 0) {\n return null;\n }\n\n return str;\n }\n\n public static removeMultiSpaces(data: string) {\n if (typeof data !== 'string') {\n return data;\n }\n\n return data.replace(/\\s{2,}/g, ' ');\n }\n\n public static removeText(data: string, text: string) {\n if (typeof data !== 'string' || typeof text !== 'string' || text.length === 0) {\n return data;\n }\n\n try {\n data = data.replace(new RegExp(StringUtil.escapeRegExp(text), 'ig'), '');\n data = data.replace(new RegExp(StringUtil.escapeRegExp(text).replace(new RegExp('\\\\s', 'g'), '-'), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n\n return data;\n }\n\n public static replace(str: string, targets: string[], replacers: string[]): string {\n if (typeof str !== 'string') {\n return str;\n }\n\n if (targets.length !== replacers.length) {\n return str;\n }\n\n let output: string = str;\n targets.forEach((target, index) => {\n output = output.replace(new RegExp(StringUtil.escapeRegExp(target), 'ig'), replacers[index]);\n });\n\n return output;\n }\n\n public static slugify(raw: string, separator: string = ''): string {\n if (raw === undefined) {\n return '';\n }\n\n return toLower(trim(deburr(raw)).replace(/[^0-9a-z\\-\\_]/gi, separator));\n }\n\n public static truncate(str: string, limit: number): string {\n if (isNullOrUndefined(str) || str.length <= limit) {\n return str;\n }\n\n if (limit <= 3) {\n return '';\n }\n\n return str.slice(0, limit - 3) + '...';\n }\n}\n","import {StringUtil} from 'common/util/StringUtil';\n\nexport class FormatterUtil {\n public static trim(raw: string): string {\n return typeof raw === 'string' ? raw.trim() : raw;\n }\n\n public static capitalize(raw: string): string {\n const lowraw: string = FormatterUtil.lower(raw);\n\n return typeof lowraw === 'string' ? lowraw.split(' ').map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join (' ') : raw;\n }\n\n public static ucfirst(raw: string): string {\n const lowraw: string = FormatterUtil.lower(raw);\n\n return typeof lowraw === 'string' ? lowraw.charAt(0).toUpperCase() + lowraw.slice(1) : raw;\n }\n\n public static lower(raw: string): string {\n return typeof raw === 'string' ? raw.toLocaleLowerCase() : raw;\n }\n\n public static upper(raw: string): string {\n return typeof raw === 'string' ? raw.toLocaleUpperCase() : raw;\n }\n\n public static phone(raw: string, locale: string, output: 'nat' | 'int' = 'nat'): string {\n if (typeof raw === 'string') {\n raw = FormatterUtil.preformatPhone(raw, locale);\n switch (output) {\n case 'nat': // national\n return FormatterUtil.phoneNat(raw, locale);\n break;\n case 'int': // international\n return FormatterUtil.phoneInt(raw, locale);\n break;\n }\n }\n\n return raw;\n }\n\n public static stripEmoji(raw: string): string {\n let output: string = raw;\n\n if (typeof output === 'string') {\n const emojiRegex = require('emoji-regex'); /* eslint-disable-line @typescript-eslint/no-var-requires */\n\n let match;\n while ((match = emojiRegex().exec(output)) !== null) {\n try {\n // output = output.replace(new RegExp('\\\\s' + StringUtil.escapeRegExp(match[0]), 'g'), '');\n // output = output.replace(new RegExp(StringUtil.escapeRegExp(match[0]) + '\\\\s', 'g'), '');\n output = output.replace(new RegExp(StringUtil.escapeRegExp(match[0]), 'g'), '');\n output = output.replace(new RegExp('\\\\s+', 'g'), ' ');\n output = output.trim();\n } catch (_e) {\n // ignore\n }\n }\n }\n\n return output;\n }\n\n public static stripExoticCharacters(raw: string): string {\n if (typeof raw === 'string') {\n return raw.replace('’', '\\'').replace(/[\\u0250-\\ue007]+/g, '*');\n }\n\n return raw;\n }\n\n private static preformatPhone(raw: string, locale: string): string {\n raw = raw.trim().replace(/\\s?\\.?\\-?\\(?\\)?/g, '');\n switch (locale) {\n case 'fr':\n if ((new RegExp('^[1-9]')).test(raw) && raw.length === 9) {\n return '0' + raw;\n }\n break;\n }\n\n return raw;\n }\n\n private static phoneNat(raw: string, locale: string): string {\n switch (locale) {\n case 'fr': // format: 06 11 22 33 44\n if (raw.startsWith('+330')) {\n raw = raw.substring(3);\n } else if (raw.startsWith('+33')) {\n raw = '0' + raw.substring(3);\n } else if (raw.startsWith('0033')) {\n raw = '0' + raw.substring(4);\n } else if (raw.startsWith('33') && raw.length === 11) {\n raw = '0' + raw.substring(2);\n }\n\n if (raw.length === 10) {\n let i: number = 0;\n raw = raw.split('').map((num) => {\n i++;\n\n return num + (i % 2 === 0 ? ' ' : '');\n }).join('').trim();\n }\n\n return raw;\n }\n\n return raw;\n }\n\n private static phoneInt(raw: string, locale: string): string {\n if (raw.startsWith('+')) {\n return raw;\n }\n\n switch (locale) {\n case 'fr': // format: +33611223344\n if (raw.startsWith('0')) {\n raw = raw.substring(1);\n }\n\n return '+33' + raw;\n break;\n }\n\n return raw;\n }\n}\n","/* eslint-disable max-lines */\nimport {trim} from 'lodash';\nimport {isNullOrUndefined} from 'common/util/HelperUtil';\nimport {ValidatorUtil} from 'common/util/ValidatorUtil';\nimport * as diff from 'fast-diff';\nimport {StringUtil} from 'common/util/StringUtil';\nimport {FormatterUtil} from 'common/util/FormatterUtil';\n\nexport class AddressUtil {\n private static readonly ZIPCODE_CITY: {[zipCode: string]: string[]} = {\n '78500': ['Sartrouville'], '78600': ['Maisons-Laffitte', 'Le Mesnil-le-Roi'], '78800': ['Houilles'], '95240': ['Cormeilles-en-Parisis'], '95530': ['La Frette-sur-Seine'],\n '78100': ['Saint-Germain-en-Laye'], '95100': ['Argenteuil'],\n '78630': ['Orgeval', 'Morainvilliers'], '78670': ['Villennes-sur-Seine', 'Medan'], '78240': ['Chambourcy', 'Aigremont'], '78300': ['Poissy'], '78510': ['Triel-sur-Seine'],\n '78570': ['Andrésy', 'Chanteloup-les-Vignes'], '78700': ['Conflans-Sainte-Honorine'], '78480': ['Verneuil-sur-Seine'], '78750': ['Mareil-Marly'], '78620': ['L\\'Étang-la-Ville'],\n '78160': ['Marly-le-Roi'], '78580': ['Les Alluets-le-Roi'],\n '78955': ['Carrières-sous-Poissy'], '78260': ['Achères'], '78540': ['Vernouillet'], '78920': ['Ecquevilly'],\n '95150': ['Taverny'], '95250': ['Beauchamp'], '95480': ['Pierrelaye'], '95320': ['Saint-Leu-la-Forêt'], '95550': ['Bessancourt'], '95370': ['Montigny-lès-Cormeilles'], '95220': ['Herblay'],\n '95740': ['Frépillon'], '95540': ['Méry-sur-Oise'],\n '95870': ['Bezons'], '78420': ['Carrières-sur-Seine'], '78400': ['Chatou'], '78110': ['Le Vésinet'], '78360': ['Montesson'], '78290': ['Croissy-sur-Seine', 'Croissy'], '78230': ['Le Pecq'],\n '95600': ['Eaubonne']\n };\n private static readonly REGIONS: string[] = ['île-de-france'];\n private static readonly COUNTRIES: string[] = ['France', 'FR'];\n private static readonly STREET_TYPE: {short: string, long: string}[] = [\n {short: 'av', long: 'avenue'},\n {short: 'rue', long: 'rue'},\n {short: 'bd', long: 'boulevard'},\n {short: 'chau', long: 'chaussée'},\n {short: 'trav', long: 'traverse'},\n {short: 'pl', long: 'place'},\n {short: 'pass', long: 'passage'},\n {short: 'sent', long: 'sentier'},\n {short: 'imp', long: 'impasse'},\n {short: 'all', long: 'allée'},\n {short: 'chem', long: 'chemin'},\n {short: 'ham', long: 'hameau'},\n {short: 'dom', long: 'domaine'}\n ];\n\n public static autoCorrectCity(city: string): string {\n if (isNullOrUndefined(city) || typeof city !== 'string' || city.length === 0) {\n return city;\n }\n\n if (city.toLowerCase().startsWith('st-') || city.toLowerCase().startsWith('st ')) {\n city = 'Saint ' + city.substring(3);\n }\n\n const CITIES: string[] = Object.values(AddressUtil.ZIPCODE_CITY).flat();\n\n const exactMatch: string = CITIES.find((c) => c.toLowerCase() === city.toLowerCase());\n if (exactMatch !== undefined) {\n return exactMatch;\n }\n\n const partialMatch: string = CITIES.find((c) => {\n const result: {add: number, remove: number} = AddressUtil.countDiff(city, c);\n\n return result.add <= 2 && result.remove <= 2;\n });\n if (partialMatch !== undefined) {\n return partialMatch;\n }\n\n const matchNoDash: string = CITIES.find((c) => c.replace(/-/g, ' ').toLowerCase() === city.toLowerCase());\n if (matchNoDash !== undefined) {\n return matchNoDash;\n }\n\n const partialMatchNoDash: string = CITIES.find((c) => {\n const result: {add: number, remove: number} = AddressUtil.countDiff(city, c.replace(/-/g, ' '));\n\n return result.add <= 2 && result.remove <= 2;\n });\n if (partialMatchNoDash !== undefined) {\n return partialMatchNoDash;\n }\n\n const startsWith: string = CITIES.find((c) => c.toLowerCase().startsWith(city.toLowerCase()));\n if (startsWith !== undefined) {\n return startsWith;\n }\n\n const isIncluded: string = CITIES.find((c) => city.toLowerCase().includes(c.toLowerCase()));\n if (isIncluded !== undefined) {\n return isIncluded;\n }\n\n return city;\n }\n\n public static autoCorrectStreet(street: string): string {\n if (isNullOrUndefined(street) || typeof street !== 'string' || street.length === 0) {\n return street;\n }\n\n AddressUtil.STREET_TYPE.forEach((type) => {\n if (type.short.length < type.long.length) {\n street = street.replace(new RegExp('(\\\\s' + String(type.short) + '\\\\.?\\\\s)', 'ig'), ' ' + String(type.long) + ' ');\n street = street.replace(new RegExp('(\\\\s' + String(type.short) + '\\\\.\\\\s)', 'ig'), ' ' + String(type.long) + ' ');\n }\n });\n // street = street.replace(/(\\sav\\s)/ig, ' avenue ');\n // street = street.replace(/(\\sav\\.\\s)/ig, ' avenue ');\n // street = street.replace(/(\\sbd\\s)/ig, ' boulevard ');\n // street = street.replace(/(\\sbd\\.\\s)/ig, ' boulevard ');\n // street = street.replace(/(\\schau\\.\\s)/ig, ' chaussée ');\n // street = street.replace(/(\\strav\\.\\s)/ig, ' traverse ');\n // street = street.replace(/(\\spl\\.\\s)/ig, ' place ');\n // street = street.replace(/(\\spass\\.\\s)/ig, ' passage ');\n // street = street.replace(/(\\ssent\\.\\s)/ig, ' sentier ');\n // street = street.replace(/(\\simp\\.\\s)/ig, ' impasse ');\n // street = street.replace(/(\\sall\\.\\s)/ig, ' allée ');\n // street = street.replace(/(\\schem\\.\\s)/ig, ' chemin ');\n // street = street.replace(/(\\sham\\.\\s)/ig, ' hameau ');\n // street = street.replace(/(\\sdom\\.\\s)/ig, ' domaine ');\n\n const leadingZeroRegExp: RegExp = new RegExp('^(0+)[0-9]+,?\\\\s[a-zA-Z]+');\n const leadingZeroMatches: string[] = leadingZeroRegExp.exec(street);\n if (leadingZeroMatches !== null && leadingZeroMatches.length === 2) {\n street = street.substring(leadingZeroMatches[1].length);\n }\n\n AddressUtil.STREET_TYPE.forEach((type) => {\n street = street.replace(new RegExp('([0-9]+)(' + String(type.long) + '\\\\s)', 'ig'), '$1 $2');\n street = street.replace(new RegExp('([0-9]+)(' + String(type.short) + '\\\\.?\\\\s)', 'ig'), '$1 ' + String(type.long) + ' ');\n });\n\n return street;\n }\n\n public static getZipCodeFromCity(city: string): string {\n if (isNullOrUndefined(city)) {\n return undefined;\n }\n\n return Object.keys(AddressUtil.ZIPCODE_CITY).reduce((selected, zipcode) => {\n if (AddressUtil.ZIPCODE_CITY[zipcode].find((name) => name.toLowerCase() === city.toLowerCase()) !== undefined) {\n return zipcode;\n }\n\n return selected;\n }, undefined);\n }\n\n public static getCityFromZipCode(zip: string, rawAddress: string): string {\n if (zip === undefined || rawAddress === undefined) {\n return undefined;\n }\n\n const candidates: string[] = AddressUtil.ZIPCODE_CITY[zip];\n if (candidates === undefined) {\n return undefined;\n }\n\n if (candidates.length === 1) {\n return candidates[0];\n }\n\n let city: string;\n rawAddress.split(',').forEach((part) => {\n city = candidates.find((candidate) => {\n return part.trim().toLowerCase() === candidate.trim().toLowerCase();\n });\n });\n if (city !== undefined) {\n return city;\n }\n\n return candidates[0];\n }\n\n public static isZipCode(zip: string): boolean {\n if (typeof zip !== 'string') {\n return false;\n }\n\n if (Object.keys(AddressUtil.ZIPCODE_CITY).includes(zip)) {\n return true;\n }\n\n return ValidatorUtil.isNumber(zip) && zip.length === 5 && !zip.includes('.') && !zip.includes('-');\n }\n\n public static parse(raw: string, isFormatted: boolean = true): { street?: string, zip?: string, city?: string, country?: string } {\n const address: { street?: string, zip?: string, city?: string, country?: string } = {};\n if (!isNullOrUndefined(raw)) {\n const rawAddressParts: string[] = raw.split(',');\n if (rawAddressParts.length >= 3 && isFormatted) {\n if (AddressUtil.COUNTRIES.find((c) => raw.toLowerCase().includes(' ' + c.toLowerCase())) === undefined) {\n rawAddressParts.push('France');\n }\n\n let i: number = rawAddressParts.length - 1;\n address.country = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n if (rawAddressParts[i] !== undefined && rawAddressParts[i].trim().includes(' ')) {\n const rawParts: string[] = rawAddressParts[i].trim().split(' ');\n address.zip = rawParts[0] === undefined ? undefined : rawParts[0].trim();\n rawParts.splice(0, 1);\n address.city = rawParts.join(' ').trim();\n rawAddressParts.splice(i--, 1);\n } else if (!isNaN(Number(rawAddressParts[i].trim()))) {\n address.zip = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n if (i >= 2) {\n address.city = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n }\n } else if (!isNaN(Number(rawAddressParts[i - 1].trim()))) {\n address.city = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n address.zip = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n } else {\n address.city = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n }\n address.street = rawAddressParts.map((part) => part.trim()).join(' ').trim();\n } else {\n let rawAddress: string = raw.toLowerCase();\n Object.keys(AddressUtil.ZIPCODE_CITY).forEach((zipcode) => {\n if (rawAddress.includes(zipcode)) {\n address.zip = zipcode;\n try {\n rawAddress = rawAddress.replace(new RegExp(StringUtil.escapeRegExp(zipcode), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n }\n });\n Object.values(AddressUtil.ZIPCODE_CITY).flat().forEach((city) => {\n if (rawAddress.includes(city.toLowerCase()) && (address.zip === undefined || AddressUtil.ZIPCODE_CITY[address.zip]?.find((c) => c.toLowerCase() === city.toLowerCase()))) {\n address.city = city;\n try {\n rawAddress = rawAddress.replace(new RegExp(StringUtil.escapeRegExp(city), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n }\n });\n AddressUtil.COUNTRIES.forEach((country) => {\n if (rawAddress.includes(' ' + country.toLowerCase()) && !rawAddress.includes('de ' + country.toLowerCase()) && !rawAddress.includes('de la ' + country.toLowerCase())) {\n address.country = country;\n try {\n rawAddress = rawAddress.replace(new RegExp(StringUtil.escapeRegExp(' ' + country), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n }\n });\n\n if (address.street === undefined) {\n address.street = trim(rawAddress.split(',').map((part) => part.trim()).join(' '), '-').trim();\n }\n }\n\n if (address.country === undefined) {\n address.country = 'France';\n }\n }\n\n if (address.street !== undefined) {\n address.street = FormatterUtil.lower(FormatterUtil.trim(String(address.street)));\n }\n if (address.zip !== undefined) {\n address.zip = FormatterUtil.upper(FormatterUtil.trim(String(address.zip)));\n }\n if (address.city !== undefined) {\n address.city = AddressUtil.autoCorrectCity(FormatterUtil.capitalize(FormatterUtil.trim(String(address.city))));\n }\n if (address.country !== undefined) {\n address.country = FormatterUtil.capitalize(FormatterUtil.trim(String(address.country)));\n }\n\n return AddressUtil.complete(address);\n }\n\n public static complete(address: { street?: string, zip?: string, city?: string, country?: string }): { street?: string, zip?: string, city?: string, country?: string } {\n if (address.city === undefined || address.city.length === 0) {\n const city: string = AddressUtil.getCityFromZipCode(address.zip, address.street);\n if (city !== undefined) {\n address.city = city;\n }\n }\n if (typeof address.street === 'string') {\n AddressUtil.REGIONS.forEach((region) => {\n address.street = StringUtil.removeText(address.street, region).trim();\n });\n }\n if (FormatterUtil.lower(address.country) === 'fr') {\n address.country = 'France';\n }\n\n return address;\n }\n\n public static removeDuplicates(str: string): string {\n if (typeof str !== 'string') {\n return str;\n }\n\n const output: string[] = [];\n\n str.split(',').forEach((part) => {\n if (output.find((o) => o.trim().toLowerCase().includes(part.trim().toLowerCase())) === undefined) {\n output.push(part);\n }\n });\n\n return output.join(',');\n }\n\n private static countDiff(str: string, reference: string): { add: number, remove: number } {\n const result: { add: number, remove: number } = { add: 0, remove: 0 };\n\n diff(str.toLowerCase(), reference.toLowerCase()).forEach((value) => {\n switch (value[0]) {\n case -1:\n result.remove += value[1].length;\n break;\n case 1:\n result.add += value[1].length;\n break;\n }\n });\n\n return result;\n }\n}\n","import {DateTime} from 'luxon';\nimport {cloneDeep} from 'lodash';\nimport {isNullOrUndefined} from 'common/util/HelperUtil';\n\nexport class DateUtil {\n private static readonly PERIOD_MAX_DATES: number = 90;\n private static readonly WEEK_DAYS: {[id: number]: string} = {1: 'lundi', 2: 'mardi', 3: 'mercredi', 4: 'jeudi', 5: 'vendredi', 6: 'samedi', 7: 'dimanche'};\n\n public static getCycleDateFromFullDate(date: string, cycle: 'daily' | 'weekly' | 'monthly'): string {\n if (cycle === 'weekly') {\n const result: string = DateTime.fromISO(date.replace(/-W([0-9])$/i, '-W0$1')).toISOWeekDate();\n if (result === null) {\n return date;\n }\n\n const parts: string[] = result.split('-');\n\n return parts.length > 2 ? parts[0] + '-' + parts[1] : parts.join('-');\n } else if (cycle === 'monthly') {\n return DateTime.fromISO(date).toFormat('yyyy-LL');\n }\n\n return DateTime.fromISO(date).toISODate();\n }\n\n public static displayWeekDay(weekDay: number): string {\n let displayWeekDay: string = '';\n if (DateUtil.WEEK_DAYS[weekDay] !== undefined) {\n displayWeekDay = DateUtil.WEEK_DAYS[weekDay];\n }\n\n return displayWeekDay;\n }\n\n public static generatePeriod(fromDate: string, toDate: string, initialValue: Record<string, any>, addDate: boolean = true, MAX_DAYS: number = DateUtil.PERIOD_MAX_DATES,\n cycle: 'daily' | 'weekly' | 'monthly' = 'daily'): {[date: string]: Record<string, any>} {\n const jump: {[str: string]: number} = {'daily': {day: 1}, 'weekly': {week: 1}, 'monthly': {month: 1}}[cycle];\n let cursor: string = DateTime.fromISO(fromDate, {setZone: true}).toISODate();\n const stop: string = DateTime.fromISO(toDate, {setZone: true}).toISODate();\n let i: number = 0;\n const data: {[date: string]: Record<string, any>} = {};\n while (cursor <= stop && i < MAX_DAYS) {\n const date: string = DateUtil.getCycleDateFromFullDate(cursor, cycle);\n data[date] = cloneDeep(initialValue);\n if (addDate) {\n data[date].date = date;\n }\n cursor = DateTime.fromISO(cursor, {setZone: true}).plus(jump).toISODate();\n i++;\n }\n\n return data;\n }\n\n public static getOpenPeriods(openings: {from: string, to: string}[], closings: {from: string, to: string}[]): {from: string, to: string}[] {\n const results: {from: string, to: string}[] = [];\n\n openings.forEach((opening) => {\n const tmpOpenings: {from: string, to: string}[] = [opening];\n while (tmpOpenings.length > 0) {\n const open: {from: string, to: string} = tmpOpenings[0];\n\n const isOpen: boolean = closings.find((closing) => closing.from <= open.from && open.to <= closing.to) === undefined;\n if (isOpen) {\n const startLater: {from: string, to: string} = closings.find((closing) => closing.from <= open.from && open.from < closing.to && closing.to < open.to);\n if (startLater !== undefined) {\n tmpOpenings.push({from: startLater.to, to: open.to});\n } else {\n const endEarlier: {from: string, to: string} = closings.find((closing) => open.from < closing.from && open.to > closing.from && open.to <= closing.to);\n if (endEarlier !== undefined) {\n tmpOpenings.push({from: open.from, to: endEarlier.from});\n } else {\n const cut: {from: string, to: string} = closings.find((closing) => open.from < closing.from && closing.to < open.to);\n if (cut !== undefined) {\n tmpOpenings.push({from: open.from, to: cut.from});\n tmpOpenings.push({from: cut.to, to: open.to});\n } else {\n results.push(open);\n }\n }\n }\n }\n\n tmpOpenings.shift();\n }\n });\n\n\n return results;\n }\n\n public static limitDate(targetDate: string, baseDate: string, limitInSeconds: number = 0): string {\n if (targetDate === undefined || baseDate === undefined) {\n return undefined;\n }\n\n const target: string = DateTime.fromISO(targetDate, {setZone: true}).toISO();\n const limit: string = DateTime.fromISO(baseDate, {setZone: true}).plus({seconds: limitInSeconds}).toISO();\n\n return target > limit ? limit : target;\n }\n\n public static localeToISO(localeDate: string): string {\n const frFormat1: RegExp = new RegExp('[0-9]{2}/[0-9]{2}/[0-9]{4}');\n const frFormat2: RegExp = new RegExp('[0-9]{2}-[0-9]{2}-[0-9]{4}');\n const isoFormat: RegExp = new RegExp('[0-9]{4}-[0-9]{2}-[0-9]{2}');\n\n let isoDate: string;\n if (frFormat1.test(localeDate)) {\n const parts: string[] = localeDate.split('/');\n isoDate = parts[2] + '-' + parts[1] + '-' + parts[0];\n } else if (frFormat2.test(localeDate)) {\n const parts: string[] = localeDate.split('-');\n isoDate = parts[2] + '-' + parts[1] + '-' + parts[0];\n } else if (isoFormat.test(localeDate)) {\n isoDate = localeDate;\n }\n\n return isoDate;\n }\n\n public static slotToTime(timeSlot: string): string {\n const timeFormat: RegExp = new RegExp('^(\\\\s)?[0-9]{2}:[0-9]{2}(\\\\s)?$');\n const slotFormat: RegExp = new RegExp('^(\\\\s)?[0-9]{2}:[0-9]{2}(\\\\s)?-(\\\\s)?[0-9]{2}:[0-9]{2}(\\\\s)?$');\n\n timeSlot = timeSlot.trim();\n\n let time: string;\n if (timeFormat.test(timeSlot)) {\n time = timeSlot.trim() + ':00';\n } else if (slotFormat.test(timeSlot)) {\n const parts: string[] = timeSlot.split('-');\n time = parts[0].trim() + ':00';\n }\n\n return time;\n }\n\n public static delay(fromDate: string, toDate: string, unit: 'minutes' | 'hours' | 'days' | 'months'): number {\n if (isNullOrUndefined(fromDate) || isNullOrUndefined(toDate)) {\n return 0;\n }\n\n return Math.round(Math.abs(DateTime.fromISO(fromDate, {setZone: true}).toUTC()\n .diff(DateTime.fromISO(toDate, {setZone: true}).toUTC(), [unit])[unit]))\n }\n\n public static round(date: string, roundingInMs: number = 0): string {\n if (typeof date !== 'string') {\n return date;\n }\n\n const dateTime: DateTime = DateTime.fromISO(date, {setZone: true});\n\n return DateTime.fromMillis(Math.round((+dateTime.toMillis()) / roundingInMs) * roundingInMs).setZone(dateTime.zone).toISO();\n }\n\n public static min(dates: string[]): string {\n return dates.reduce((min, date) => {\n if (typeof min !== 'string' || min > date) {\n return date;\n }\n\n return min;\n }, undefined);\n }\n\n public static max(dates: string[]): string {\n return dates.reduce((max, date) => {\n if (max === undefined || max < date) {\n return date;\n }\n\n return max;\n }, undefined);\n }\n}\n","export class ExtractorUtil {\n public static phone(raw: string, locale: 'fr'): string {\n if (typeof raw !== 'string') {\n return undefined;\n }\n\n raw = raw.trim().replace(/\\s?\\.?\\-?\\(?\\)?/g, '');\n switch (locale) {\n case 'fr': {\n const phoneFrRegex: RegExp = new RegExp('(0[6-7][0-9]{8})', 'i');\n const result: string[] = phoneFrRegex.exec(raw);\n if (result !== null && result.length > 0 && result[0] !== null) {\n return result[0];\n }\n }\n }\n\n return undefined;\n }\n}\n","export class MathUtil {\n public static avg(values: number[]): number {\n if (values.length === 0) {\n return 0;\n }\n\n const total: number = values.reduce((accumulator, value) => {\n return accumulator + value;\n }, 0);\n\n return MathUtil.round(total / values.length, 2);\n }\n\n public static applyVariation(value: number, variation: number): number {\n let increase: number;\n if (value >= 0) {\n increase = 1 + (variation / 100);\n } else {\n increase = 1 - (variation / 100);\n }\n\n return value * increase;\n }\n\n public static median(values: number[]): number {\n if (values.length === 0) {\n return 0;\n }\n if (values.length === 1) {\n return values[0];\n }\n\n const valuesSorted: number[] = values.sort((a, b) => {\n return a - b;\n });\n\n if (valuesSorted.length % 2 === 0) {\n return MathUtil.avg([valuesSorted[(valuesSorted.length / 2) - 1], valuesSorted[(valuesSorted.length / 2)]]);\n }\n\n return valuesSorted[Math.floor(valuesSorted.length / 2)];\n }\n\n public static percentage(part: number, total: number): number {\n if (typeof part !== 'number' || typeof total !== 'number') {\n return undefined;\n }\n\n if (total === 0) {\n return 0;\n }\n\n return ((part / total) * 100);\n }\n\n public static round(value: number, decimals: number): number {\n if (typeof value !== 'number') {\n return value;\n }\n\n if (decimals === 0) {\n return Math.round(value);\n }\n\n return Math.round(value * (10 ** decimals)) / (10 ** decimals);\n }\n\n public static variation(originalValue: number, newValue: number): number {\n let percent = 0;\n if (newValue !== 0) {\n if (originalValue !== 0) {\n percent = (newValue - originalValue) / Math.abs(originalValue) * 100;\n } else {\n percent = ((newValue > 0) ? 1 : -1) * 100;\n }\n } else if (originalValue !== 0) {\n percent = ((originalValue > 0) ? 1 : -1) * -100;\n }\n\n return Math.floor(percent);\n }\n}\n","import {isArray, isObject} from 'lodash';\n\nexport class ObjectUtil {\n public static compact(obj: any, options: {removeEmptyString?: boolean} = {}): any {\n if (isArray(obj)) {\n const ouput: any[] = [];\n obj.forEach((value) => {\n value = ObjectUtil.compact(value, options);\n if ((isArray(value) && value.length > 0)\n || (isObject(value) && Object.keys(value).length > 0)\n || (value !== undefined && value !== null && !isArray(value) && !isObject(value))) {\n ouput.push(value);\n }\n });\n\n return ouput;\n } else if (isObject(obj)) {\n const ouput: any = {};\n Object.keys(obj).forEach((key) => {\n let value: any = (obj as any)[key];\n if (isArray(value) || isObject(value)) {\n value = ObjectUtil.compact(value, options);\n if ((isArray(value) && value.length > 0)\n || (isObject(value) && Object.keys(value).length > 0)\n || (value !== undefined && value !== null && !isArray(value) && !isObject(value))) {\n ouput[key] = value;\n }\n } else if (value !== undefined && value !== null\n && (typeof value !== 'string' || options.removeEmptyString === false || value.length > 0)) {\n ouput[key] = value;\n }\n });\n\n return ouput;\n }\n\n return (typeof obj !== 'string' || options.removeEmptyString === false || obj.length > 0) ? obj : undefined;\n }\n}\n","import {MathUtil} from 'common/util/MathUtil';\n\nexport class PriceUtil {\n private static readonly currencies: {[iso: string]: {symbol: string, position: string}} = {\n 'CAD': {symbol: '$', position: 'before'},\n 'EUR': {symbol: '€', position: 'after'},\n 'USD': {symbol: '$', position: 'before'}\n };\n\n public static applyTaxes(priceTaxExcluded: string, taxRates: number[], decimals: number = 2): string {\n let priceTaxIncluded: number = Number(priceTaxExcluded);\n taxRates.forEach((rate) => {\n priceTaxIncluded += Number(priceTaxExcluded) * rate;\n });\n\n return String(MathUtil.round(priceTaxIncluded, decimals));\n }\n\n public static calculateTaxes(priceTaxExcluded: number, taxRates: number[]): number {\n let taxes: number = 0;\n taxRates.forEach((rate) => {\n taxes += priceTaxExcluded * rate;\n });\n\n return MathUtil.round(taxes, 2);\n }\n\n public static displayWithCurrency(price: string, isoCurrency: string): string {\n if (price === undefined || price === null) {\n return price;\n }\n\n const currency: {symbol: string, position: string} = PriceUtil.currencies[isoCurrency];\n\n let newPrice: string = price + ' ' + isoCurrency;\n if (currency !== undefined) {\n switch (currency.position) {\n case 'before':\n newPrice = currency.symbol + price;\n break;\n case 'after':\n newPrice = price + currency.symbol;\n break;\n }\n }\n\n return newPrice;\n }\n\n public static format(price: string, locale: 'fr' | 'us', decimals: number = 2): string {\n if (price === undefined || price === null) {\n return price;\n }\n\n const priceNumber: number = Number(price.replace(/\\,/gi, ''));\n const standardPrice: string = priceNumber.toLocaleString('en-US', {\n style: 'decimal',\n useGrouping: true,\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals\n });\n\n switch (locale) {\n case 'fr':\n return standardPrice.replace(/\\,/gi, ' ').replace(/\\./gi, ',');\n case 'us':\n return standardPrice;\n }\n }\n\n public static round(price: string, precision: number = 0.10): string {\n const priceInCents: number = Number(price) * 100;\n const precisionInCents: number = precision * 100;\n const rest: number = priceInCents % precisionInCents;\n\n return String(MathUtil.round((priceInCents - rest) + (rest < Math.ceil(precisionInCents / 2) ? 0 : precisionInCents), 2) / 100);\n }\n}\n"],"names":["root","factory","exports","module","define","amd","global","require","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","n","getter","__esModule","d","a","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","registerBasePath","basePath","process","env","APP_HOME","Path","BASE_PATH","endsWith","data","db","storage","session","message","code","name","Error","captureStackTrace","MainException","stack","UnauthorizedException","ERROR_CODE","Env","getMode","NODE_ENV","DEVELOPMENT","PRODUCTION","TEST","APP_ID","isNullOrUndefined","init","sentryToken","app","Environment","dsn","integrations","levels","nodeProfilingIntegration","environment","maxBreadcrumbs","tracesSampleRate","profilesSampleRate","trace","extra","includes","console","info","category","level","debug","log","scope","setExtra","JSON","stringify","warning","error","response","requestErrorData","warn","_request","Logger","Number","status","isNaN","json","configuration","this","handler","request","next","authenticated","jwt","authApiKey","keys","Array","isArray","required","forEach","none","authNone","HandlerController","headers","Authorization","startsWith","parts","split","length","secret","urlStartsWith","find","originalUrl","can","_action","_subject","create","origins","port","backendPort","Server","DEFAULT_PORT","String","set","use","inflate","limit","reviver","strict","type","verify","origin","concat","credentials","listen","getSessionSecret","sessionCookieName","update","SALT","digest","retries","logger","operation","factor","minTimeout","maxTimeout","randomize","Promise","resolve","reject","attempt","then","catch","retry","isEmail","email","RegExp","test","isPhone","phone","isIntMobilePhone","caRegex","frRegex","usRegex","isNumber","num","isUTF8","charset","toLowerCase","urlencode","str","UrlUtil","encodeURIComponent","buf","encode","encodeStr","ch","i","toString","toUpperCase","token","mode","send","senderName","rawPhones","isCommercial","sendAt","phones","checkPhoneFormat","BadParameterException","SmsSenderService","MESSAGE_MAX_LENGTH","substring","Retry","params","accessToken","emetteur","numero","map","replace","join","classe_msg","nbr_msg","Math","ceil","stop","date_envoi","DateTime","fromISO","setZone","toFormat","target","Date","toISOString","hour","plus","day","BASE_API_URL","p","timeout","trim","ExternalApiException","bind","filter","ValidatorUtil","asyncForEach","array","callback","wait","time","setTimeout","size","GeneratorUtil","symbolUpperCases","int","color","alpha","alphaHex","rgbToHex","round","defaultColor","colorList","values","rgb","hex","min","max","POSITIVE_INFINITY","floor","random","password","symbolLowerCases","dirPath","filePath","lastIndexOf","substr","listFiles","isDir","separator","files","output","fileName","isFile","push","randomFile","suggestion","filenames","index","move","recursive","read","readJson","jsonPath","isJson","parse","readJsonFiles","write","rawData","encoding","writeJson","isDirectory","_error","css","content","compatibility","format","sourceMap","minify","styles","html","collapseBooleanAttributes","collapseInlineTagWhitespace","collapseWhitespace","continueOnParseError","decodeEntities","html5","minifyCSS","minifyJS","noNewlinesBeforeTagClose","preserveLineBreaks","preventAttributesEscaping","processConditionalComments","quoteCharacter","removeAttributeQuotes","removeComments","removeEmptyAttributes","removeEmptyElements","removeOptionalTags","removeRedundantAttributes","removeScriptTypeAttributes","removeStyleLinkTypeAttributes","removeTagWhitespace","minifier","MinifierEngine","render","templatePath","baseIncludePath","view","cloneDeep","__dirname","FileSystem","result","include","includeParts","templateName","part","ConflictException","apiPublicKey","apiSecretKey","templateEngine","TemplateEngine","mailjet","Client","apiKey","apiSecret","sendDeliveryDelay","sender","recipient","base","copyright","year","getUTCFullYear","text","sendNotification","subject","sendTrackDelivery","textContent","htmlContent","sendUserNotification","customId","sendUsersNotifications","messages","contents","sendDiscount","sendDiscounts","recipients","contact","post","Messages","statusCode","filesystem","Configuration","config","currentEnvironment","full","merge","connect","entities","con","logging","bigNumberStrings","timezone","createConnection","connection","synchronize","close","fileSystem","success","image","url","outputPath","outputName","writer","method","responseType","pipe","on","escapeRegExp","hash","seed","h1","h2","charCodeAt","imul","padStart","nullable","removeMultiSpaces","removeText","StringUtil","_e","targets","replacers","slugify","raw","toLower","deburr","truncate","slice","capitalize","lowraw","FormatterUtil","lower","word","charAt","ucfirst","toLocaleLowerCase","upper","toLocaleUpperCase","locale","preformatPhone","phoneNat","phoneInt","stripEmoji","emojiRegex","match","exec","stripExoticCharacters","autoCorrectCity","city","CITIES","AddressUtil","ZIPCODE_CITY","flat","exactMatch","c","partialMatch","countDiff","add","remove","matchNoDash","partialMatchNoDash","isIncluded","autoCorrectStreet","street","STREET_TYPE","short","long","leadingZeroMatches","getZipCodeFromCity","reduce","selected","zipcode","getCityFromZipCode","zip","rawAddress","candidates","candidate","isZipCode","isFormatted","address","rawAddressParts","COUNTRIES","country","splice","rawParts","complete","REGIONS","region","removeDuplicates","reference","getCycleDateFromFullDate","date","cycle","toISOWeekDate","toISODate","displayWeekDay","weekDay","DateUtil","WEEK_DAYS","generatePeriod","fromDate","toDate","initialValue","addDate","MAX_DAYS","PERIOD_MAX_DATES","jump","week","month","cursor","getOpenPeriods","openings","closings","results","opening","tmpOpenings","closing","from","to","startLater","endEarlier","cut","shift","limitDate","targetDate","baseDate","limitInSeconds","toISO","seconds","localeToISO","localeDate","isoDate","frFormat1","frFormat2","isoFormat","slotToTime","timeSlot","timeFormat","slotFormat","delay","unit","abs","toUTC","diff","roundingInMs","dateTime","fromMillis","toMillis","zone","dates","avg","total","accumulator","MathUtil","applyVariation","variation","median","valuesSorted","sort","b","percentage","decimals","originalValue","newValue","percent","compact","options","ObjectUtil","isObject","removeEmptyString","applyTaxes","priceTaxExcluded","taxRates","priceTaxIncluded","rate","calculateTaxes","taxes","displayWithCurrency","price","isoCurrency","currency","PriceUtil","currencies","newPrice","position","symbol","standardPrice","toLocaleString","style","useGrouping","minimumFractionDigits","maximumFractionDigits","precision","priceInCents","precisionInCents","rest"],"sourceRoot":""}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Common API",
4
4
  "main": "dist/common-api.node.min.js",
5
5
  "types": "dist/common-api.d.ts",
6
- "version": "1.1.3",
6
+ "version": "1.1.4",
7
7
  "author": "Paul M.",
8
8
  "license": "NO LICENSE",
9
9
  "engines": {