@onylab/common-api 0.1.180 → 0.1.181
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.
package/dist/common-api.d.ts
CHANGED
|
@@ -149,10 +149,15 @@ declare module "http/AuthenticationMiddlewareContract" {
|
|
|
149
149
|
}
|
|
150
150
|
declare module "http/AuthentificationConfigurationContract" {
|
|
151
151
|
export interface AuthentificationConfigurationContract {
|
|
152
|
-
jwt?: {
|
|
152
|
+
jwt?: {
|
|
153
|
+
required: string[];
|
|
154
|
+
};
|
|
153
155
|
key?: {
|
|
154
156
|
secret: string;
|
|
155
157
|
};
|
|
158
|
+
none?: {
|
|
159
|
+
urlStartsWith: string[];
|
|
160
|
+
};
|
|
156
161
|
session?: {
|
|
157
162
|
required: string[];
|
|
158
163
|
};
|
|
@@ -199,6 +204,7 @@ declare module "http/AuthenticationMiddleware" {
|
|
|
199
204
|
constructor(configuration: AuthentificationConfigurationContract);
|
|
200
205
|
handler(): (request: express.Request, response: express.Response, next: () => void) => void;
|
|
201
206
|
private authApiKey;
|
|
207
|
+
private authNone;
|
|
202
208
|
}
|
|
203
209
|
}
|
|
204
210
|
declare module "http/AuthorizationMiddlewareContract" {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.SmilePlayerCommon=t():e.SmilePlayerCommon=t()}(global,(function(){return(()=>{"use strict";var e={525:e=>{e.exports=require("emoji-regex/RGI_Emoji.js")}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};return(()=>{n.r(r),n.d(r,{Constant:()=>e,Exception:()=>t,Http:()=>o,Service:()=>i,Template:()=>a,Tool:()=>u,Util:()=>c});var e={};n.r(e),n.d(e,{Path:()=>l});var t={};n.r(t),n.d(t,{BadParameterException:()=>d,BadRequestException:()=>v,ConflictException:()=>g,DuplicateException:()=>w,ExternalApiException:()=>S,InternalException:()=>O,MainException:()=>p,NotImplementedException:()=>T,ObjectNotFoundException:()=>P,PageNotFoundException:()=>D,UnauthorizedException:()=>j});var o={};n.r(o),n.d(o,{AuthenticationMiddleware:()=>U,AuthorizationMiddleware:()=>q,HandlerController:()=>F,Server:()=>V});var i={};n.r(i),n.d(i,{EmailSenderService:()=>we,SmsSenderService:()=>oe});var a={};n.r(a),n.d(a,{TemplateEngine:()=>ve});var u={};n.r(u),n.d(u,{Configuration:()=>xe,Database:()=>Ce,Displayer:()=>Ae,Downloader:()=>De,Env:()=>k,Environment:()=>L,FileSystem:()=>he,Logger:()=>R,Retry:()=>Q});var c={};n.r(c),n.d(c,{AddressUtil:()=>ke,DateUtil:()=>Le,ExtractorUtil:()=>Re,FormatterUtil:()=>Ie,GeneratorUtil:()=>Fe,MathUtil:()=>Ue,ObjectUtil:()=>qe,PriceUtil:()=>ze,StringUtil:()=>Ne,ValidatorUtil:()=>te,asyncForEach:()=>se,isNullOrUndefined:()=>Me,wait:()=>le});var s,l=function(){function e(){}return e.registerBasePath=function(t){void 0!==process.env.APP_HOME?e.BASE_PATH=process.env.APP_HOME+"/":e.BASE_PATH=t+(t.endsWith("/")?"":"/")},e.data=function(){return e.BASE_PATH+"data/"},e.db=function(){return e.storage()+"db/"},e.root=function(){return e.BASE_PATH},e.session=function(){return e.storage()+"session/"},e.storage=function(){return e.BASE_PATH+"storage/"},e.BASE_PATH="./",e}(),f=(s=function(e,t){return s=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},s(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}s(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),p=function(e){function t(n,r,o){var i=e.call(this,n)||this;return i.code=r,i.data=o,i.name="MainException","function"==typeof Error.captureStackTrace?Error.captureStackTrace(i,t):i.stack=new Error(n).stack,i}return f(t,e),t}(Error),h=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,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=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),d=function(e){function t(t,n){var r=e.call(this,t,400,n)||this;return r.name="BadParameterException",r}return h(t,e),t}(p),y=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,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=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),v=function(e){function t(t,n){var r=e.call(this,t,400,n)||this;return r.name="BadRequestException",r}return y(t,e),t}(p),m=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,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=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),g=function(e){function t(t,n){var r=e.call(this,t,409,n)||this;return r.name="ConflictException",r}return m(t,e),t}(p),b=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,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=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),w=function(e){function t(t,n){var r=e.call(this,t,409,n)||this;return r.name="DuplicateException",r}return b(t,e),t}(p),E=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,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=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),S=function(e){function t(t,n){var r=e.call(this,t,502,n)||this;return r.name="ExternalApiException",r}return E(t,e),t}(p),x=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,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=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),O=function(e){function t(t,n){var r=e.call(this,t,500,n)||this;return r.name="InternalException",r}return x(t,e),t}(p),_=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,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=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),T=function(e){function t(t,n){var r=e.call(this,t,501,n)||this;return r.name="NotImplementedException",r}return _(t,e),t}(p),C=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,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=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),P=function(e){function t(t,n){var r=e.call(this,t,404,n)||this;return r.name="ObjectNotFoundException",r}return C(t,e),t}(p),A=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,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=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),D=function(e){function t(t,n){var r=e.call(this,t,404,n)||this;return r.name="PageNotFoundException",r}return A(t,e),t}(p),M=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,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=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),j=function(e){function t(n,r){var o=e.call(this,n,t.ERROR_CODE,r)||this;return o.name="UnauthorizedException",o}return M(t,e),t.ERROR_CODE=401,t}(p);const N=require("@sentry/node"),I=require("@sentry/integrations");var k;!function(e){e.PRODUCTION="prod",e.DEVELOPMENT="dev",e.TEST="test"}(k||(k={}));var L=function(){function e(){}return e.getMode=function(){switch(process.env.NODE_ENV){case"dev":case"development":return k.DEVELOPMENT;case"prod":case"production":return k.PRODUCTION;case"test":return k.TEST}return void 0===process.env.APP_ID?k.DEVELOPMENT:k.PRODUCTION},e}(),R=function(){function e(){}return e.init=function(e){L.getMode()===k.PRODUCTION&&N.init({dsn:e,integrations:[new I.CaptureConsole({levels:["error","warn","log"]})],environment:L.getMode(),maxBreadcrumbs:50})},e.trace=function(e,t){[k.DEVELOPMENT,k.TEST].includes(L.getMode())&&(void 0===t?console.info(e):console.info(e,t)),N.addBreadcrumb({category:"info",message:e,data:t,level:N.Severity.Info})},e.debug=function(e,t){[k.DEVELOPMENT,k.TEST].includes(L.getMode())&&(void 0===t?console.log(e):console.log(e,t)),N.addBreadcrumb({category:"debug",message:e,data:t,level:N.Severity.Debug})},e.info=function(e,t){[k.DEVELOPMENT,k.TEST].includes(L.getMode())&&(void 0===t?console.info(e):console.info(e,t)),N.withScope((function(n){void 0!==t&&n.setExtra("extra",JSON.stringify(t)),N.captureMessage(e)}))},e.warning=function(e,t){[k.DEVELOPMENT,k.TEST].includes(L.getMode())&&(void 0===t?console.warn(e):console.warn(e,t)),N.withScope((function(n){void 0!==t&&n.setExtra("extra",JSON.stringify(t)),void 0!==e.data&&n.setExtra("data",JSON.stringify(e.data)),N.captureException(e)}))},e.error=function(e,t){[j.ERROR_CODE].includes(e.code)||([k.DEVELOPMENT,k.TEST].includes(L.getMode())&&(void 0===t?console.error(e):console.error(e,t)),N.withScope((function(n){void 0!==t&&n.setExtra("extra",JSON.stringify(t)),void 0!==e.data&&n.setExtra("data",JSON.stringify(e.data)),N.captureException(e)})))},e.requestHandler=function(){return N.Handlers.requestHandler()},e.errorHandler=function(){return N.Handlers.errorHandler()},e}(),F=function(){function e(){}return e.error=function(e,t,n){R.error(n);var r=void 0!==n.code&&null!==n.code?Number(n.code):500;t.status(!isNaN(r)&&Number(n.code)>=400&&Number(n.code)<=599?Number(n.code):500),t.json({code:n.code,message:n.message})},e}(),U=function(){function e(e){this.configuration=e}return e.prototype.handler=function(){var e=this;return function(t,n,r){try{var o=!1;if(o||void 0===e.configuration.jwt||(t.session={},o=!0),o||void 0===e.configuration.key||(o=e.authApiKey(t)),!o&&void 0!==e.configuration.session){var i=Object.keys(t.session);if(!Array.isArray(e.configuration.session.required))throw new j("session is not well formatted");e.configuration.session.required.forEach((function(e){if(!i.includes(e))throw new j("session is incomplete")})),o=!0}if(!o)throw new j("request is not authenticate");r()}catch(e){F.error(t,n,e)}}},e.prototype.authApiKey=function(e){if("string"!=typeof e.headers.Authorization||!e.headers.Authorization.startsWith("apiKey"))return!1;var t=e.headers.Authorization.split(" ");if(2!==t.length)throw new j("api key is not well formatted");if(t[1]!==this.configuration.key.secret)throw new j("api key is not valid");return e.session={},!0},e}(),q=function(){function e(){}return e.prototype.can=function(e,t){},e}();const z=require("crypto"),G=require("express"),H=require("cors"),B=require("compression"),W=require("helmet"),Z=require("connect-timeout");var V=function(){function e(){}return e.prototype.create=function(t,n){return r=this,o=void 0,a=function(){var r,o;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}(this,(function(i){return void 0===this.app&&(r=n||e.DEFAULT_PORT,o="http://localhost:"+String(r),R.debug("start server on "+o),this.app=G(),this.app.use(B({level:-1})),this.app.use(Z("300s")),this.app.use(G.json({inflate:!0,limit:"100kb",reviver:null,strict:!0,type:"application/json",verify:void 0})),this.app.use(H({origin:[o].concat(t),credentials:!0})),this.app.use(W()),this.app.use(G.json()),this.app.listen(r,(function(){R.debug("server is running on "+o)}))),[2,this.app]}))},new((i=void 0)||(i=Promise))((function(e,t){function n(e){try{c(a.next(e))}catch(e){t(e)}}function u(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var r;t.done?e(t.value):(r=t.value,r instanceof i?r:new i((function(e){e(r)}))).then(n,u)}c((a=a.apply(r,o||[])).next())}));var r,o,i,a},e.prototype.getSessionSecret=function(t){return z.createHash("sha1").update(t+e.SALT).digest("hex")},e.DEFAULT_PORT=8080,e.SALT="03561b4a0fe7f125025",e}();const J=require("axios");var $=n.n(J);const Y=require("luxon"),X=require("querystring"),K=require("retry");var Q=function(){function e(){}return e.request=function(e,t){return void 0===t&&(t=2),n=this,r=void 0,i=function(){var n;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}(this,(function(r){return n=K.operation({retries:t,factor:1,minTimeout:0,maxTimeout:0,randomize:!1}),[2,new Promise((function(t,r){n.attempt((function(){e().then(t).catch((function(e){n.retry(e)||(R.error(e),r(e))}))}))}))]}))},new((o=void 0)||(o=Promise))((function(e,t){function a(e){try{c(i.next(e))}catch(e){t(e)}}function u(e){try{c(i.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o((function(e){e(n)}))).then(a,u)}c((i=i.apply(n,r||[])).next())}));var n,r,o,i},e}();const ee=require("urlencode");var te=function(){function e(){}return e.isEmail=function(e){return"string"==typeof e&&new RegExp("^[a-zA-Z0-9\\.!#$%&*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$","i").test(e)},e.isPhone=function(e){return"string"==typeof e&&new RegExp("^([+\\s0-9]{10,}(#[0-9]+)?)$").test(e)},e.isIntMobilePhone=function(e){var t=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 t.test(e)||n.test(e)||r.test(e)},e.isNumber=function(e){return"number"==typeof e||"string"==typeof e&&new RegExp("^-?[0-9]+\\.?[0-9]*$").test(e)},e}(),ne=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function u(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))},re=function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},oe=function(){function e(e,t){this.token=e,this.mode=t}return e.prototype.send=function(t,n,r,o,i){return void 0===o&&(o=!0),ne(this,void 0,void 0,(function(){var a,u=this;return re(this,(function(c){switch(c.label){case 0:return 0===(a=this.checkPhoneFormat(r)).length?(R.warning(new d("no valid phone",{phones:r})),[2,Promise.resolve()]):(a.length>1&&(n.length>2*e.MESSAGE_MAX_LENGTH?n=n.substring(0,2*e.MESSAGE_MAX_LENGTH):n.length>e.MESSAGE_MAX_LENGTH&&n.length<=1.33*e.MESSAGE_MAX_LENGTH&&(n=n.substring(0,e.MESSAGE_MAX_LENGTH))),[4,Q.request((function(){return ne(u,void 0,void 0,(function(){var r,u;return re(this,(function(c){switch(c.label){case 0:return r={accessToken:this.token,emetteur:t,message:ee(n,"ISO-8859-15"),numero:a.map((function(e){return e.replace("+","")})).join(","),classe_msg:2,nbr_msg:Math.ceil(n.length/e.MESSAGE_MAX_LENGTH)},o&&(r.stop=1),void 0!==i&&(r.date_envoi=Y.DateTime.fromISO(i,{setZone:!0}).toFormat("ddMMyyyy-HH:mm")),this.mode!==k.TEST?[3,1]:(R.info("Simulation Mode: SMS has been sent",{params:r}),[3,3]);case 1:return this.mode===k.DEVELOPMENT&&(a=["+15145705214"]),[4,$().post(e.BASE_API_URL+"sendSMS.do",X.stringify(r,"&","=",{encodeURIComponent:function(e){return e}}),{timeout:3e4})];case 2:if((u=c.sent()).data.length>0&&"0"!==u.data.trim().substring(0,1))throw new S("Error: "+u.data,r);c.label=3;case 3:return[2]}}))}))}),1)]);case 1:return c.sent(),[2]}}))}))},e.prototype.checkPhoneFormat=function(e){return e.filter((function(e){return te.isIntMobilePhone(e)}))},e.BASE_API_URL="https://api.smsmode.com/http/1.6/",e.MESSAGE_MAX_LENGTH=150,e}();const ie=require("path"),ae=require("mustache"),ue=require("lodash"),ce=require("fs");var se=function(e,t){return n=void 0,r=void 0,i=function(){var n;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}(this,(function(r){switch(r.label){case 0:n=0,r.label=1;case 1:return n<e.length?[4,t(e[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(e,t){function a(e){try{c(i.next(e))}catch(e){t(e)}}function u(e){try{c(i.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o((function(e){e(n)}))).then(a,u)}c((i=i.apply(n,r||[])).next())}));var n,r,o,i},le=function(e){return new Promise((function(t){return setTimeout(t,e)}))},fe=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function u(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))},pe=function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},he=function(){function e(){}return e.prototype.dirPath=function(e){var t=ie.resolve(e).lastIndexOf(ie.sep);return t<0?e:ie.resolve(ie.resolve(e).substr(0,t+1))+ie.sep},e.prototype.move=function(e,t){return fe(this,void 0,void 0,(function(){return pe(this,(function(n){if(!this.isFile(e))throw new d(String(e)+" does not exist or is not a file");if(ce.mkdirSync(t,{recursive:!0}),!this.isDir(t))throw new d(String(t)+" does not exist or is not a directory");return[2,ce.renameSync(e,t+ie.basename(e))]}))}))},e.prototype.read=function(e){return fe(this,void 0,void 0,(function(){return pe(this,(function(t){if(!this.isFile(e))throw new d(String(e)+" does not exist or is not a file");return[2,ce.readFileSync(e,"utf8")]}))}))},e.prototype.readJson=function(e){return fe(this,void 0,void 0,(function(){var t;return pe(this,(function(n){switch(n.label){case 0:return[4,this.read(e)];case 1:if(t=n.sent(),!this.isJson(t))throw new d(String(e)+" does not contain JSON");return[2,JSON.parse(t)]}}))}))},e.prototype.readJsonFiles=function(e){return fe(this,void 0,void 0,(function(){var t,n,r,o=this;return pe(this,(function(i){switch(i.label){case 0:if(!this.isDir(e))throw new d(String(e)+" does not exist or is not a directory");return t=e.endsWith("/")?"":"/",n=ce.readdirSync(e),r=[],[4,se(n,(function(n){return fe(o,void 0,void 0,(function(){var o,i,a;return pe(this,(function(u){switch(u.label){case 0:return this.isFile(e+t+n)&&n.endsWith(".json")?(i=(o=r).push,a={name:n},[4,this.readJson(e+t+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]}}))}))},e.prototype.write=function(e,t){return fe(this,void 0,void 0,(function(){var n;return pe(this,(function(r){return"",n="string"==typeof t||"number"==typeof t?String(t):JSON.stringify(t),ce.mkdirSync(this.dirPath(e),{recursive:!0}),ce.writeFileSync(e,n,{encoding:"utf8"}),[2,Promise.resolve()]}))}))},e.prototype.writeJson=function(e,t){return fe(this,void 0,void 0,(function(){return pe(this,(function(n){return[2,this.write(e,JSON.stringify(t))]}))}))},e.prototype.isDir=function(e){return ce.existsSync(e)&&ce.statSync(e).isDirectory()},e.prototype.isFile=function(e){return ce.existsSync(e)&&ce.statSync(e).isFile()},e.prototype.isJson=function(e){try{return JSON.parse(e),!0}catch(e){return!1}},e}(),de=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function u(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))},ye=function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},ve=function(){function e(){}return e.prototype.render=function(e,t,n){return de(this,void 0,void 0,(function(){var r,o,i,a,u=this;return ye(this,(function(c){switch(c.label){case 0:return e.endsWith(".template")||(e+=".template"),r=(0,ue.cloneDeep)(t),o=ie.isAbsolute(e)?"":__dirname+ie.sep,[4,(new he).read(o+e)];case 1:return i=c.sent(),a=[],(0,ae.parse)(i).forEach((function(e){e.length>=4&&"&"===e[0]&&e[1].startsWith("include:")&&a.push(e[1])})),a.length>0?(void 0===n?n=ie.dirname(o+e)+ie.sep:ie.isAbsolute(n)||(n=o+n),[4,se(a,(function(e){return de(u,void 0,void 0,(function(){var t,o,i,a;return ye(this,(function(u){switch(u.label){case 0:return 3!==(t=e.split(":")).length||void 0===r[e]?[3,2]:(o=t[2],n.includes("/html")&&Object.keys(r[e]).forEach((function(t){r[e][t]=r[e][t].replace(/(?:\r\n|\r|\n)/g,"<br>")})),i=r,a=e,[4,this.render(ie.resolve(n,o),r[e])]);case 1:i[a]=u.sent(),u.label=2;case 2:return[2]}}))}))}))]):[3,3];case 2:c.sent(),c.label=3;case 3:return[2,(0,ae.render)(i,r)]}}))}))},e}();const me=require("node-mailjet");var ge=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function u(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))},be=function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},we=function(){function e(e,t,n){this.templateEngine=new ve,this.mailjet=me.connect(e,t),this.mode=n}return e.prototype.sendDeliveryDelay=function(e,t,n){return ge(this,void 0,void 0,(function(){var r=this;return be(this,(function(o){switch(o.label){case 0:return[4,Q.request((function(){return ge(r,void 0,void 0,(function(){var r,o;return be(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(e,t,n.base.subject,r,o)];case 3:return[2,i.sent()]}}))}))}),1)];case 1:return[2,o.sent()]}}))}))},e.prototype.sendTrackDelivery=function(e,t,n){return ge(this,void 0,void 0,(function(){var r=this;return be(this,(function(o){switch(o.label){case 0:return[4,Q.request((function(){return ge(r,void 0,void 0,(function(){var r,o,i,a;return be(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(e,t,n.base.subject,o,a)];case 5:return[2,u.sent()]}}))}))}),1)];case 1:return[2,o.sent()]}}))}))},e.prototype.sendUserNotification=function(e,t,n){return ge(this,void 0,void 0,(function(){var r=this;return be(this,(function(o){switch(o.label){case 0:return[4,Q.request((function(){return ge(r,void 0,void 0,(function(){var r,o,i,a;return be(this,(function(u){switch(u.label){case 0:return[4,this.templateEngine.render("data/email/template/userNotification",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/userNotification",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(e,t,n.base.subject,o,a)];case 5:return[2,u.sent()]}}))}))}),1)];case 1:return[2,o.sent()]}}))}))},e.prototype.sendNotification=function(e,t,n,r,o){return ge(this,void 0,void 0,(function(){var i;return be(this,(function(a){switch(a.label){case 0:return a.trys.push([0,4,,5]),this.mode!==k.TEST?[3,1]:(R.info("Simulation Mode: Email has been sent",{sender:e,recipient:t}),[3,3]);case 1:return this.mode===k.DEVELOPMENT&&(t.contact="developer@onylab.com"),[4,this.mailjet.post("send",{version:"v3.1"}).request({Messages:[{From:{Name:e.name,Email:e.contact},To:[{Name:t.name,Email:t.contact}],Subject:n,TextPart:r,HTMLPart:o}]})];case 2:a.sent(),a.label=3;case 3:return[3,5];case 4:throw i=a.sent(),new p(i.message,Number(i.statusCode));case 5:return[2]}}))}))},e}(),Ee=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function u(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))},Se=function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},xe=function(){function e(e,t){this.filesystem=new he,this.root=e,this.environment=void 0===t?L.getMode():t}return e.prototype.full=function(){return Ee(this,void 0,void 0,(function(){return Se(this,(function(e){switch(e.label){case 0:return[4,this.init()];case 1:return e.sent(),[2,this.config]}}))}))},e.prototype.init=function(){return Ee(this,void 0,void 0,(function(){var e,t,n,r;return Se(this,(function(o){switch(o.label){case 0:return void 0!==this.config?[3,6]:void 0!==this.root?[3,1]:(this.config={},[3,6]);case 1:return e=this,[4,this.filesystem.readJson(this.root+"data/config.json")];case 2:if(e.config=o.sent(),![k.DEVELOPMENT,k.TEST].includes(this.environment))return[3,6];o.label=3;case 3:return o.trys.push([3,5,,6]),t=this,n=ue.merge,r=[this.config],[4,this.filesystem.readJson(this.root+"data/config_"+String(this.environment)+".json")];case 4:return t.config=n.apply(void 0,r.concat([o.sent()])),[3,6];case 5:return o.sent(),[3,6];case 6:return[2]}}))}))},e}();const Oe=require("typeorm");var _e=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function u(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))},Te=function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},Ce=function(){function e(e){this.root=e}return e.prototype.connect=function(e,t){return _e(this,void 0,void 0,(function(){var n,r;return Te(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[e])?[3,4]:(n.entities=t,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,Oe.createConnection)(n)]);case 3:return r.connection=o.sent(),[3,5];case 4:R.error(new d("bad connection name")),o.label=5;case 5:return[2]}}))}))},e.prototype.synchronize=function(){return _e(this,void 0,void 0,(function(){return Te(this,(function(e){switch(e.label){case 0:return void 0===this.connection?[3,2]:[4,this.connection.synchronize()];case 1:e.sent(),e.label=2;case 2:return[2]}}))}))},e.prototype.close=function(){return _e(this,void 0,void 0,(function(){return Te(this,(function(e){return[2,this.connection.close()]}))}))},e.prototype.init=function(){return _e(this,void 0,void 0,(function(){var e,t;return Te(this,(function(n){switch(n.label){case 0:return void 0!==this.root?[3,1]:(this.db={},[3,3]);case 1:return e=new he,t=this,[4,e.readJson(this.root+"data/db.json")];case 2:t.db=n.sent(),n.label=3;case 3:return[2]}}))}))},e}();const Pe=require("prettyjson");var Ae=function(){function e(){}return e.prototype.error=function(e){R.error(e)},e.prototype.info=function(e){R.trace(e)},e.prototype.json=function(e){R.trace(Pe.render(e,{}))},e.prototype.success=function(e){R.trace(e)},e}(),De=function(){function e(){this.fileSystem=new he}return e.prototype.image=function(e,t,n){return r=this,o=void 0,a=function(){var r,o;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}(this,(function(i){switch(i.label){case 0:return void 0===n&&(n=z.randomBytes(20).toString("hex")+ie.extname(e)),[4,this.fileSystem.write(t+ie.sep+n,"")];case 1:return i.sent(),r=ie.resolve(t+ie.sep+n),o=ce.createWriteStream(r),[4,$()({url:e,method:"GET",responseType:"stream"})];case 2:return i.sent().data.pipe(o),[2,new Promise((function(e,t){o.on("finish",(function(){return e(r)})),o.on("error",t)}))]}}))},new((i=void 0)||(i=Promise))((function(e,t){function n(e){try{c(a.next(e))}catch(e){t(e)}}function u(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var r;t.done?e(t.value):(r=t.value,r instanceof i?r:new i((function(e){e(r)}))).then(n,u)}c((a=a.apply(r,o||[])).next())}));var r,o,i,a},e}(),Me=function(e){return null==e};const je=require("fast-diff");var Ne=function(){function e(){}return e.escapeRegExp=function(e){return"string"!=typeof e?e:e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")},e.nullable=function(e){return Me(e)||"string"==typeof e&&0===e.length?null:e},e.removeMultiSpaces=function(e){return"string"!=typeof e?e:e.replace(/\s{2,}/g," ")},e.removeText=function(t,n){if("string"!=typeof t||"string"!=typeof n||0===n.length)return t;try{t=(t=t.replace(new RegExp(e.escapeRegExp(n),"ig"),"")).replace(new RegExp(e.escapeRegExp(n).replace(new RegExp("\\s","g"),"-"),"ig"),"")}catch(e){}return t},e.replace=function(t,n,r){if("string"!=typeof t)return t;if(n.length!==r.length)return t;var o=t;return n.forEach((function(t,n){o=o.replace(new RegExp(e.escapeRegExp(t),"ig"),r[n])})),o},e.slugify=function(e,t){return void 0===e?"":(0,ue.toLower)((0,ue.trim)((0,ue.deburr)(e)).replace(/[^0-9a-z\-\_]/gi,t))},e.truncate=function(e,t){return Me(e)||e.length<=t?e:t<=3?"":e.slice(0,t-3)+"..."},e}(),Ie=function(){function e(){}return e.trim=function(e){return"string"==typeof e?e.trim():e},e.capitalize=function(t){var n=e.lower(t);return"string"==typeof n?n.split(" ").map((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})).join(" "):t},e.ucfirst=function(t){var n=e.lower(t);return"string"==typeof n?n.charAt(0).toUpperCase()+n.slice(1):t},e.lower=function(e){return"string"==typeof e?e.toLocaleLowerCase():e},e.upper=function(e){return"string"==typeof e?e.toLocaleUpperCase():e},e.phone=function(t,n,r){if(void 0===r&&(r="nat"),"string"==typeof t)switch(t=e.preformatPhone(t,n),r){case"nat":return e.phoneNat(t,n);case"int":return e.phoneInt(t,n)}return t},e.stripEmoji=function(e){var t=e;if("string"==typeof t){for(var r=n(525)(),o=void 0;null!==(o=r.exec(t));)try{t=(t=(t=t.replace(new RegExp("\\s"+Ne.escapeRegExp(o[0]),"g"),"")).replace(new RegExp(Ne.escapeRegExp(o[0])+"\\s","g"),"")).replace(new RegExp(Ne.escapeRegExp(o[0]),"g"),"")}catch(e){}for(;null!==(o=r.exec(t));)try{t=(t=(t=t.replace(new RegExp("\\s"+Ne.escapeRegExp(o[0]),"g"),"")).replace(new RegExp(Ne.escapeRegExp(o[0])+"\\s","g"),"")).replace(new RegExp(Ne.escapeRegExp(o[0]),"g"),"")}catch(e){}}return t},e.stripExoticCharacters=function(e){return"string"==typeof e?e.replace("’","'").replace(/[\u0250-\ue007]+/g,"*"):e},e.preformatPhone=function(e,t){return e=e.trim().replace(/\s?\.?\-?\(?\)?/g,""),"fr"===t&&new RegExp("^[1-9]").test(e)&&9===e.length?"0"+e:e},e.phoneNat=function(e,t){if("fr"===t){if(e.startsWith("+330")?e=e.substr(3):e.startsWith("+33")?e="0"+e.substr(3):e.startsWith("0033")?e="0"+e.substr(4):e.startsWith("33")&&11===e.length&&(e="0"+e.substr(2)),10===e.length){var n=0;e=e.split("").map((function(e){return e+(++n%2==0?" ":"")})).join("").trim()}return e}return e},e.phoneInt=function(e,t){return e.startsWith("+")?e:"fr"===t?(e.startsWith("0")&&(e=e.substr(1)),"+33"+e):e},e}(),ke=function(){function e(){}return e.autoCorrectCity=function(t){if(Me(t)||"string"!=typeof t||0===t.length)return t;(t.toLowerCase().startsWith("st-")||t.toLowerCase().startsWith("st "))&&(t="Saint "+t.substring(3));var n=e.CITIES.find((function(e){return e.toLowerCase()===t.toLowerCase()}));if(void 0!==n)return n;var r=e.CITIES.find((function(n){var r=e.countDiff(t,n);return r.add<=2&&r.remove<=2}));if(void 0!==r)return r;var o=e.CITIES.find((function(e){return e.replace(/-/g," ").toLowerCase()===t.toLowerCase()}));if(void 0!==o)return o;var i=e.CITIES.find((function(n){var r=e.countDiff(t,n.replace(/-/g," "));return r.add<=2&&r.remove<=2}));if(void 0!==i)return i;var a=e.CITIES.find((function(e){return e.toLowerCase().startsWith(t.toLowerCase())}));if(void 0!==a)return a;var u=e.CITIES.find((function(e){return t.toLowerCase().includes(e.toLowerCase())}));return void 0!==u?u:t},e.autoCorrectStreet=function(e){return Me(e)||"string"!=typeof e||0===e.length?e:e=(e=(e=(e=(e=(e=(e=(e=(e=(e=e.replace(/(\sav\s)/gi," avenue ")).replace(/(\sav\.\s)/gi," avenue ")).replace(/(\schau\.\s)/gi," chaussée ")).replace(/(\strav\.\s)/gi," traverse ")).replace(/(\spl\.\s)/gi," place ")).replace(/(\spass\.\s)/gi," passage ")).replace(/(\ssent\.\s)/gi," sentier ")).replace(/(\simp\.\s)/gi," impasse ")).replace(/(\sall\.\s)/gi," allée ")).replace(/(\schem\.\s)/gi," chemin ")},e.getZipCodeFromCity=function(t){if(!Me(t))return Object.keys(e.ZIPCODE_CITY).reduce((function(n,r){return void 0!==e.ZIPCODE_CITY[r].find((function(e){return e.toLowerCase()===t.toLowerCase()}))?r:n}),void 0)},e.getCityFromZipCode=function(t,n){if(void 0!==t&&void 0!==n){var r,o=e.ZIPCODE_CITY[t];if(void 0!==o)return 1===o.length?o[0]:(n.split(",").forEach((function(e){r=o.find((function(t){return e.trim().toLowerCase()===t.trim().toLowerCase()}))})),void 0!==r?r:o[0])}},e.isZipCode=function(t){return"string"==typeof t&&(!!e.ZIPCODES.includes(t)||te.isNumber(t)&&5===t.length&&!t.includes(".")&&!t.includes("-"))},e.parse=function(t,n){void 0===n&&(n=!0);var r={};if(!Me(t)){var o=t.split(",");if(o.length>=3&&n){void 0===e.COUNTRIES.find((function(e){return t.toLowerCase().includes(" "+e.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(e){return e.trim()})).join(" ").trim()}else{var u=t.toLowerCase();e.ZIPCODES.forEach((function(e){if(u.includes(e)){r.zip=e;try{u=u.replace(new RegExp(Ne.escapeRegExp(e),"ig"),"")}catch(e){}}})),e.CITIES.forEach((function(t){var n;if(u.includes(t.toLowerCase())&&(void 0===r.zip||(null===(n=e.ZIPCODE_CITY[r.zip])||void 0===n?void 0:n.find((function(e){return e.toLowerCase()===t.toLowerCase()}))))){r.city=t;try{u=u.replace(new RegExp(Ne.escapeRegExp(t),"ig"),"")}catch(e){}}})),e.COUNTRIES.forEach((function(e){if(u.includes(" "+e.toLowerCase())){r.country=e;try{u=u.replace(new RegExp(Ne.escapeRegExp(" "+e),"ig"),"")}catch(e){}}})),void 0===r.street&&(r.street=u.split(",").map((function(e){return e.trim()})).join(" ").trim())}void 0===r.country&&(r.country="France")}return void 0!==r.street&&(r.street=Ie.lower(Ie.trim(String(r.street)))),void 0!==r.zip&&(r.zip=Ie.upper(Ie.trim(String(r.zip)))),void 0!==r.city&&(r.city=e.autoCorrectCity(Ie.capitalize(Ie.trim(String(r.city))))),void 0!==r.country&&(r.country=Ie.capitalize(Ie.trim(String(r.country)))),e.complete(r)},e.complete=function(t){if(void 0===t.city||0===t.city.length){var n=e.getCityFromZipCode(t.zip,t.street);void 0!==n&&(t.city=n)}return"string"==typeof t.street&&e.REGIONS.forEach((function(e){t.street=Ne.removeText(t.street,e).trim()})),"fr"===Ie.lower(t.country)&&(t.country="France"),t},e.removeDuplicates=function(e){if("string"!=typeof e)return e;var t=[];return e.split(",").forEach((function(e){void 0===t.find((function(t){return t.trim().toLowerCase().includes(e.trim().toLowerCase())}))&&t.push(e)})),t.join(",")},e.countDiff=function(e,t){var n={add:0,remove:0};return je(e.toLowerCase(),t.toLowerCase()).forEach((function(e){switch(e[0]){case-1:n.remove+=e[1].length;break;case 1:n.add+=e[1].length}})),n},e.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"],e.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"],e.ZIPCODE_CITY={78500:["Sartrouville"],78600:["Maisons-Laffitte","Le Mesnil-le-Roi"],78800:["Houilles"],95240:["Cormeilles-en-Parisis"],95530:["La Frette-sur-Seine"],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"]},e.REGIONS=["île-de-france"],e.COUNTRIES=["France","FR"],e}(),Le=function(){function e(){}return e.getCycleDateFromFullDate=function(e,t){if("weekly"===t){var n=Y.DateTime.fromISO(e.replace(/-W([0-9])$/i,"-W0$1")).toISOWeekDate();if(null===n)return e;var r=n.split("-");return r.length>2?r[0]+"-"+r[1]:r.join("-")}return"monthly"===t?Y.DateTime.fromISO(e).toFormat("yyyy-LL"):Y.DateTime.fromISO(e).toISODate()},e.displayWeekDay=function(t){var n="";return void 0!==e.WEEK_DAYS[t]&&(n=e.WEEK_DAYS[t]),n},e.generatePeriod=function(t,n,r,o,i,a){void 0===o&&(o=!0),void 0===i&&(i=e.PERIOD_MAX_DATES),void 0===a&&(a="daily");for(var u={daily:{day:1},weekly:{week:1},monthly:{month:1}}[a],c=Y.DateTime.fromISO(t,{setZone:!0}).toISODate(),s=Y.DateTime.fromISO(n,{setZone:!0}).toISODate(),l=0,f={};c<=s&&l<i;){var p=e.getCycleDateFromFullDate(c,a);f[p]=(0,ue.cloneDeep)(r),o&&(f[p].date=p),c=Y.DateTime.fromISO(c,{setZone:!0}).plus(u).toISODate(),l++}return f},e.getOpenPeriods=function(e,t){var n=[];return e.forEach((function(e){for(var r=[e],o=function(){var e=r[0];if(void 0===t.find((function(t){return t.from<=e.from&&e.to<=t.to}))){var o=t.find((function(t){return t.from<=e.from&&e.from<t.to&&t.to<e.to}));if(void 0!==o)r.push({from:o.to,to:e.to});else{var i=t.find((function(t){return e.from<t.from&&e.to>t.from&&e.to<=t.to}));if(void 0!==i)r.push({from:e.from,to:i.from});else{var a=t.find((function(t){return e.from<t.from&&t.to<e.to}));void 0!==a?(r.push({from:e.from,to:a.from}),r.push({from:a.to,to:e.to})):n.push(e)}}}r.shift()};r.length>0;)o()})),n},e.limitDate=function(e,t,n){if(void 0===n&&(n=0),void 0!==e&&void 0!==t){var r=Y.DateTime.fromISO(e,{setZone:!0}).toISO(),o=Y.DateTime.fromISO(t,{setZone:!0}).plus({seconds:n}).toISO();return r>o?o:r}},e.localeToISO=function(e){var t,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(e))t=(i=e.split("/"))[2]+"-"+i[1]+"-"+i[0];else if(r.test(e)){var i;t=(i=e.split("-"))[2]+"-"+i[1]+"-"+i[0]}else o.test(e)&&(t=e);return t},e.slotToTime=function(e){var t,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 e=e.trim(),n.test(e)?t=e.trim()+":00":r.test(e)&&(t=e.split("-")[0].trim()+":00"),t},e.round=function(e,t){if(void 0===t&&(t=0),"string"!=typeof e)return e;var n=Y.DateTime.fromISO(e,{setZone:!0});return Y.DateTime.fromMillis(Math.round(+n.toMillis()/t)*t).setZone(n.zone).toISO()},e.PERIOD_MAX_DATES=90,e.WEEK_DAYS={1:"lundi",2:"mardi",3:"mercredi",4:"jeudi",5:"vendredi",6:"samedi",7:"dimanche"},e}(),Re=function(){function e(){}return e.phone=function(e,t){if("string"==typeof e&&(e=e.trim().replace(/\s?\.?\-?\(?\)?/g,""),"fr"===t)){var n=new RegExp("(0[6-7][0-9]{8})","i").exec(e);if(null!==n&&n.length>0&&null!==n[0])return n[0]}},e}(),Fe=function(){function e(){}return e.code=function(t){null==t&&(t=6);for(var n="";n.length<t;)n+=e.symbolUpperCases[e.int(0,e.symbolUpperCases.length-1)];return n},e.int=function(e,t){return null==e&&(e=0),null==t&&(t=Number.POSITIVE_INFINITY),e=Math.ceil(e),t=Math.floor(t),Math.floor(Math.random()*(t-e+1))+e},e.password=function(t){null==t&&(t=8);for(var n="";n.length<t;)switch(e.int(1,3)){case 1:n+=e.symbolUpperCases[e.int(0,e.symbolUpperCases.length-1)];break;case 2:n+=e.symbolLowerCases[e.int(0,e.symbolLowerCases.length-1)];break;default:n+=String(e.int(0,9))}return n},e.symbolUpperCases=["A","B","C","D","E","F","G","H","K","M","N","P","R","S","T","U","V","W","X","Y","Z"],e.symbolLowerCases=["a","b","c","d","e","f","g","h","k","m","n","p","r","s","t","u","v","w","x","y","z"],e}(),Ue=function(){function e(){}return e.avg=function(t){if(0===t.length)return 0;var n=t.reduce((function(e,t){return e+t}),0);return e.round(n/t.length,2)},e.applyVariation=function(e,t){return e*(e>=0?1+t/100:1-t/100)},e.median=function(t){if(0===t.length)return 0;if(1===t.length)return t[0];var n=t.sort((function(e,t){return e-t}));return n.length%2==0?e.avg([n[n.length/2-1],n[n.length/2]]):n[Math.floor(n.length/2)]},e.percentage=function(e,t){return 0===t?0:e/t*100},e.round=function(e,t){return 0===t?Math.round(e):Number(e.toFixed(t))},e.variation=function(e,t){var n=0;return 0!==t?n=0!==e?(t-e)/Math.abs(e)*100:100*(t>0?1:-1):0!==e&&(n=-100*(e>0?1:-1)),Math.floor(n)},e}(),qe=function(){function e(){}return e.compact=function(t,n){if(void 0===n&&(n={}),(0,ue.isArray)(t)){var r=[];return t.forEach((function(t){t=e.compact(t,n),((0,ue.isArray)(t)&&t.length>0||(0,ue.isObject)(t)&&Object.keys(t).length>0||null!=t&&!(0,ue.isArray)(t)&&!(0,ue.isObject)(t))&&r.push(t)})),r}if((0,ue.isObject)(t)){var o={};return Object.keys(t).forEach((function(r){var i=t[r];(0,ue.isArray)(i)||(0,ue.isObject)(i)?(i=e.compact(i,n),((0,ue.isArray)(i)&&i.length>0||(0,ue.isObject)(i)&&Object.keys(i).length>0||null!=i&&!(0,ue.isArray)(i)&&!(0,ue.isObject)(i))&&(o[r]=i)):null!=i&&("string"!=typeof i||!1===n.removeEmptyString||i.length>0)&&(o[r]=i)})),o}return"string"!=typeof t||!1===n.removeEmptyString||t.length>0?t:void 0},e}(),ze=function(){function e(){}return e.applyTaxes=function(e,t,n){void 0===n&&(n=2);var r=Number(e);return t.forEach((function(t){r+=Number(e)*t})),String(Ue.round(r,n))},e.calculateTaxes=function(e,t){var n=0;return t.forEach((function(t){n+=e*t})),Ue.round(n,2)},e.displayWithCurrency=function(t,n){if(null==t)return t;var r=e.currencies[n],o=t+" "+n;if(void 0!==r)switch(r.position){case"before":o=r.symbol+t;break;case"after":o=t+r.symbol}return o},e.format=function(e,t,n){if(void 0===n&&(n=2),null==e)return e;var r=Number(e.replace(/\,/gi,"")).toLocaleString("en-US",{style:"decimal",useGrouping:!0,minimumFractionDigits:n,maximumFractionDigits:n});switch(t){case"fr":return r.replace(/\,/gi," ").replace(/\./gi,",");case"us":return r}},e.round=function(e,t){void 0===t&&(t=.1);var n=100*Number(e),r=100*t,o=n%r;return String(Ue.round(n-o+(o<Math.ceil(r/2)?0:r),2)/100)},e.currencies={CAD:{symbol:"$",position:"before"},EUR:{symbol:"€",position:"after"},USD:{symbol:"$",position:"before"}},e}()})(),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,(function(){return(()=>{"use strict";var t={525:t=>{t.exports=require("emoji-regex/RGI_Emoji.js")}},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={};return(()=>{n.r(r),n.d(r,{Constant:()=>t,Exception:()=>e,Http:()=>o,Service:()=>i,Template:()=>a,Tool:()=>u,Util:()=>c});var t={};n.r(t),n.d(t,{Path:()=>l});var e={};n.r(e),n.d(e,{BadParameterException:()=>d,BadRequestException:()=>v,ConflictException:()=>g,DuplicateException:()=>w,ExternalApiException:()=>S,InternalException:()=>O,MainException:()=>p,NotImplementedException:()=>T,ObjectNotFoundException:()=>P,PageNotFoundException:()=>D,UnauthorizedException:()=>j});var o={};n.r(o),n.d(o,{AuthenticationMiddleware:()=>U,AuthorizationMiddleware:()=>q,HandlerController:()=>F,Server:()=>V});var i={};n.r(i),n.d(i,{EmailSenderService:()=>wt,SmsSenderService:()=>ot});var a={};n.r(a),n.d(a,{TemplateEngine:()=>vt});var u={};n.r(u),n.d(u,{Configuration:()=>xt,Database:()=>Ct,Displayer:()=>At,Downloader:()=>Dt,Env:()=>k,Environment:()=>L,FileSystem:()=>ht,Logger:()=>R,Retry:()=>Q});var c={};n.r(c),n.d(c,{AddressUtil:()=>kt,DateUtil:()=>Lt,ExtractorUtil:()=>Rt,FormatterUtil:()=>It,GeneratorUtil:()=>Ft,MathUtil:()=>Ut,ObjectUtil:()=>qt,PriceUtil:()=>zt,StringUtil:()=>Nt,ValidatorUtil:()=>et,asyncForEach:()=>st,isNullOrUndefined:()=>Mt,wait:()=>lt});var s,l=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}(),f=(s=function(t,e){return s=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])},s(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}s(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),p=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 f(e,t),e}(Error),h=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,400,n)||this;return r.name="BadParameterException",r}return h(e,t),e}(p),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="BadRequestException",r}return y(e,t),e}(p),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)}}(),g=function(t){function e(e,n){var r=t.call(this,e,409,n)||this;return r.name="ConflictException",r}return m(e,t),e}(p),b=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="DuplicateException",r}return b(e,t),e}(p),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,502,n)||this;return r.name="ExternalApiException",r}return E(e,t),e}(p),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,500,n)||this;return r.name="InternalException",r}return x(e,t),e}(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)}}(),T=function(t){function e(e,n){var r=t.call(this,e,501,n)||this;return r.name="NotImplementedException",r}return _(e,t),e}(p),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,404,n)||this;return r.name="ObjectNotFoundException",r}return C(e,t),e}(p),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}(p),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)}}(),j=function(t){function e(n,r){var o=t.call(this,n,e.ERROR_CODE,r)||this;return o.name="UnauthorizedException",o}return M(e,t),e.ERROR_CODE=401,e}(p);const N=require("@sentry/node"),I=require("@sentry/integrations");var k;!function(t){t.PRODUCTION="prod",t.DEVELOPMENT="dev",t.TEST="test"}(k||(k={}));var L=function(){function t(){}return t.getMode=function(){switch(process.env.NODE_ENV){case"dev":case"development":return k.DEVELOPMENT;case"prod":case"production":return k.PRODUCTION;case"test":return k.TEST}return void 0===process.env.APP_ID?k.DEVELOPMENT:k.PRODUCTION},t}(),R=function(){function t(){}return t.init=function(t){L.getMode()===k.PRODUCTION&&N.init({dsn:t,integrations:[new I.CaptureConsole({levels:["error","warn","log"]})],environment:L.getMode(),maxBreadcrumbs:50})},t.trace=function(t,e){[k.DEVELOPMENT,k.TEST].includes(L.getMode())&&(void 0===e?console.info(t):console.info(t,e)),N.addBreadcrumb({category:"info",message:t,data:e,level:N.Severity.Info})},t.debug=function(t,e){[k.DEVELOPMENT,k.TEST].includes(L.getMode())&&(void 0===e?console.log(t):console.log(t,e)),N.addBreadcrumb({category:"debug",message:t,data:e,level:N.Severity.Debug})},t.info=function(t,e){[k.DEVELOPMENT,k.TEST].includes(L.getMode())&&(void 0===e?console.info(t):console.info(t,e)),N.withScope((function(n){void 0!==e&&n.setExtra("extra",JSON.stringify(e)),N.captureMessage(t)}))},t.warning=function(t,e){[k.DEVELOPMENT,k.TEST].includes(L.getMode())&&(void 0===e?console.warn(t):console.warn(t,e)),N.withScope((function(n){void 0!==e&&n.setExtra("extra",JSON.stringify(e)),void 0!==t.data&&n.setExtra("data",JSON.stringify(t.data)),N.captureException(t)}))},t.error=function(t,e){[j.ERROR_CODE].includes(t.code)||([k.DEVELOPMENT,k.TEST].includes(L.getMode())&&(void 0===e?console.error(t):console.error(t,e)),N.withScope((function(n){void 0!==e&&n.setExtra("extra",JSON.stringify(e)),void 0!==t.data&&n.setExtra("data",JSON.stringify(t.data)),N.captureException(t)})))},t.requestHandler=function(){return N.Handlers.requestHandler()},t.errorHandler=function(){return N.Handlers.errorHandler()},t}(),F=function(){function t(){}return t.error=function(t,e,n){R.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}(),U=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 j("session is not well formatted");t.configuration.session.required.forEach((function(t){if(!i.includes(t))throw new j("session is incomplete")})),o=!0}if(o||void 0===t.configuration.none||(o=t.authNone(e)),!o)throw new j("request is not authenticate");r()}catch(t){F.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 j("api key is not well formatted");if(e[1]!==this.configuration.key.secret)throw new j("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}(),q=function(){function t(){}return t.prototype.can=function(t,e){},t}();const z=require("crypto"),G=require("express"),H=require("cors"),W=require("compression"),B=require("helmet"),Z=require("connect-timeout");var V=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,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=e.call(t,a)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}(this,(function(i){return void 0===this.app&&(r=n||t.DEFAULT_PORT,o="http://localhost:"+String(r),R.debug("start server on "+o),this.app=G(),this.app.use(W({level:-1})),this.app.use(Z("300s")),this.app.use(G.json({inflate:!0,limit:"100kb",reviver:null,strict:!0,type:"application/json",verify:void 0})),this.app.use(H({origin:[o].concat(e),credentials:!0})),this.app.use(B()),this.app.use(G.json()),this.app.listen(r,(function(){R.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 z.createHash("sha1").update(e+t.SALT).digest("hex")},t.DEFAULT_PORT=8080,t.SALT="03561b4a0fe7f125025",t}();const J=require("axios");var $=n.n(J);const Y=require("luxon"),X=require("querystring"),K=require("retry");var Q=function(){function t(){}return t.request=function(t,e){return void 0===e&&(e=2),n=this,r=void 0,i=function(){var n;return function(t,e){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=e.call(t,a)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}(this,(function(r){return n=K.operation({retries:e,factor:1,minTimeout:0,maxTimeout:0,randomize:!1}),[2,new Promise((function(e,r){n.attempt((function(){t().then(e).catch((function(t){n.retry(t)||(R.error(t),r(t))}))}))}))]}))},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},t}();const tt=require("urlencode");var et=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}(),nt=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())}))},rt=function(t,e){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=e.call(t,a)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},ot=function(){function t(t,e){this.token=t,this.mode=e}return t.prototype.send=function(e,n,r,o,i){return void 0===o&&(o=!0),nt(this,void 0,void 0,(function(){var a,u=this;return rt(this,(function(c){switch(c.label){case 0:return 0===(a=this.checkPhoneFormat(r)).length?(R.warning(new d("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,Q.request((function(){return nt(u,void 0,void 0,(function(){var r,u;return rt(this,(function(c){switch(c.label){case 0:return r={accessToken:this.token,emetteur:e,message:tt(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=Y.DateTime.fromISO(i,{setZone:!0}).toFormat("ddMMyyyy-HH:mm")),this.mode!==k.TEST?[3,1]:(R.info("Simulation Mode: SMS has been sent",{params:r}),[3,3]);case 1:return this.mode===k.DEVELOPMENT&&(a=["+15145705214"]),[4,$().post(t.BASE_API_URL+"sendSMS.do",X.stringify(r,"&","=",{encodeURIComponent:function(t){return t}}),{timeout:3e4})];case 2:if((u=c.sent()).data.length>0&&"0"!==u.data.trim().substring(0,1))throw new S("Error: "+u.data,r);c.label=3;case 3:return[2]}}))}))}),1)]);case 1:return c.sent(),[2]}}))}))},t.prototype.checkPhoneFormat=function(t){return t.filter((function(t){return et.isIntMobilePhone(t)}))},t.BASE_API_URL="https://api.smsmode.com/http/1.6/",t.MESSAGE_MAX_LENGTH=150,t}();const it=require("path"),at=require("mustache"),ut=require("lodash"),ct=require("fs");var st=function(t,e){return n=void 0,r=void 0,i=function(){var n;return function(t,e){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=e.call(t,a)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}(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},lt=function(t){return new Promise((function(e){return setTimeout(e,t)}))},ft=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())}))},pt=function(t,e){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=e.call(t,a)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},ht=function(){function t(){}return t.prototype.dirPath=function(t){var e=it.resolve(t).lastIndexOf(it.sep);return e<0?t:it.resolve(it.resolve(t).substr(0,e+1))+it.sep},t.prototype.move=function(t,e){return ft(this,void 0,void 0,(function(){return pt(this,(function(n){if(!this.isFile(t))throw new d(String(t)+" does not exist or is not a file");if(ct.mkdirSync(e,{recursive:!0}),!this.isDir(e))throw new d(String(e)+" does not exist or is not a directory");return[2,ct.renameSync(t,e+it.basename(t))]}))}))},t.prototype.read=function(t){return ft(this,void 0,void 0,(function(){return pt(this,(function(e){if(!this.isFile(t))throw new d(String(t)+" does not exist or is not a file");return[2,ct.readFileSync(t,"utf8")]}))}))},t.prototype.readJson=function(t){return ft(this,void 0,void 0,(function(){var e;return pt(this,(function(n){switch(n.label){case 0:return[4,this.read(t)];case 1:if(e=n.sent(),!this.isJson(e))throw new d(String(t)+" does not contain JSON");return[2,JSON.parse(e)]}}))}))},t.prototype.readJsonFiles=function(t){return ft(this,void 0,void 0,(function(){var e,n,r,o=this;return pt(this,(function(i){switch(i.label){case 0:if(!this.isDir(t))throw new d(String(t)+" does not exist or is not a directory");return e=t.endsWith("/")?"":"/",n=ct.readdirSync(t),r=[],[4,st(n,(function(n){return ft(o,void 0,void 0,(function(){var o,i,a;return pt(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 ft(this,void 0,void 0,(function(){var n;return pt(this,(function(r){return"",n="string"==typeof e||"number"==typeof e?String(e):JSON.stringify(e),ct.mkdirSync(this.dirPath(t),{recursive:!0}),ct.writeFileSync(t,n,{encoding:"utf8"}),[2,Promise.resolve()]}))}))},t.prototype.writeJson=function(t,e){return ft(this,void 0,void 0,(function(){return pt(this,(function(n){return[2,this.write(t,JSON.stringify(e))]}))}))},t.prototype.isDir=function(t){return ct.existsSync(t)&&ct.statSync(t).isDirectory()},t.prototype.isFile=function(t){return ct.existsSync(t)&&ct.statSync(t).isFile()},t.prototype.isJson=function(t){try{return JSON.parse(t),!0}catch(t){return!1}},t}(),dt=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())}))},yt=function(t,e){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=e.call(t,a)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},vt=function(){function t(){}return t.prototype.render=function(t,e,n){return dt(this,void 0,void 0,(function(){var r,o,i,a,u=this;return yt(this,(function(c){switch(c.label){case 0:return t.endsWith(".template")||(t+=".template"),r=(0,ut.cloneDeep)(e),o=it.isAbsolute(t)?"":__dirname+it.sep,[4,(new ht).read(o+t)];case 1:return i=c.sent(),a=[],(0,at.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=it.dirname(o+t)+it.sep:it.isAbsolute(n)||(n=o+n),[4,st(a,(function(t){return dt(u,void 0,void 0,(function(){var e,o,i,a;return yt(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]=r[t][e].replace(/(?:\r\n|\r|\n)/g,"<br>")})),i=r,a=t,[4,this.render(it.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:return[2,(0,at.render)(i,r)]}}))}))},t}();const mt=require("node-mailjet");var gt=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())}))},bt=function(t,e){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=e.call(t,a)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},wt=function(){function t(t,e,n){this.templateEngine=new vt,this.mailjet=mt.connect(t,e),this.mode=n}return t.prototype.sendDeliveryDelay=function(t,e,n){return gt(this,void 0,void 0,(function(){var r=this;return bt(this,(function(o){switch(o.label){case 0:return[4,Q.request((function(){return gt(r,void 0,void 0,(function(){var r,o;return bt(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,e,n.base.subject,r,o)];case 3:return[2,i.sent()]}}))}))}),1)];case 1:return[2,o.sent()]}}))}))},t.prototype.sendTrackDelivery=function(t,e,n){return gt(this,void 0,void 0,(function(){var r=this;return bt(this,(function(o){switch(o.label){case 0:return[4,Q.request((function(){return gt(r,void 0,void 0,(function(){var r,o,i,a;return bt(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,e,n.base.subject,o,a)];case 5:return[2,u.sent()]}}))}))}),1)];case 1:return[2,o.sent()]}}))}))},t.prototype.sendUserNotification=function(t,e,n){return gt(this,void 0,void 0,(function(){var r=this;return bt(this,(function(o){switch(o.label){case 0:return[4,Q.request((function(){return gt(r,void 0,void 0,(function(){var r,o,i,a;return bt(this,(function(u){switch(u.label){case 0:return[4,this.templateEngine.render("data/email/template/userNotification",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/userNotification",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,e,n.base.subject,o,a)];case 5:return[2,u.sent()]}}))}))}),1)];case 1:return[2,o.sent()]}}))}))},t.prototype.sendNotification=function(t,e,n,r,o){return gt(this,void 0,void 0,(function(){var i;return bt(this,(function(a){switch(a.label){case 0:return a.trys.push([0,4,,5]),this.mode!==k.TEST?[3,1]:(R.info("Simulation Mode: Email has been sent",{sender:t,recipient:e}),[3,3]);case 1:return this.mode===k.DEVELOPMENT&&(e.contact="developer@onylab.com"),[4,this.mailjet.post("send",{version:"v3.1"}).request({Messages:[{From:{Name:t.name,Email:t.contact},To:[{Name:e.name,Email:e.contact}],Subject:n,TextPart:r,HTMLPart:o}]})];case 2:a.sent(),a.label=3;case 3:return[3,5];case 4:throw i=a.sent(),new p(i.message,Number(i.statusCode));case 5:return[2]}}))}))},t}(),Et=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())}))},St=function(t,e){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=e.call(t,a)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},xt=function(){function t(t,e){this.filesystem=new ht,this.root=t,this.environment=void 0===e?L.getMode():e}return t.prototype.full=function(){return Et(this,void 0,void 0,(function(){return St(this,(function(t){switch(t.label){case 0:return[4,this.init()];case 1:return t.sent(),[2,this.config]}}))}))},t.prototype.init=function(){return Et(this,void 0,void 0,(function(){var t,e,n,r;return St(this,(function(o){switch(o.label){case 0:return void 0!==this.config?[3,6]:void 0!==this.root?[3,1]:(this.config={},[3,6]);case 1:return t=this,[4,this.filesystem.readJson(this.root+"data/config.json")];case 2:if(t.config=o.sent(),![k.DEVELOPMENT,k.TEST].includes(this.environment))return[3,6];o.label=3;case 3:return o.trys.push([3,5,,6]),e=this,n=ut.merge,r=[this.config],[4,this.filesystem.readJson(this.root+"data/config_"+String(this.environment)+".json")];case 4:return e.config=n.apply(void 0,r.concat([o.sent()])),[3,6];case 5:return o.sent(),[3,6];case 6:return[2]}}))}))},t}();const Ot=require("typeorm");var _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())}))},Tt=function(t,e){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=e.call(t,a)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},Ct=function(){function t(t){this.root=t}return t.prototype.connect=function(t,e){return _t(this,void 0,void 0,(function(){var n,r;return Tt(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,Ot.createConnection)(n)]);case 3:return r.connection=o.sent(),[3,5];case 4:R.error(new d("bad connection name")),o.label=5;case 5:return[2]}}))}))},t.prototype.synchronize=function(){return _t(this,void 0,void 0,(function(){return Tt(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 _t(this,void 0,void 0,(function(){return Tt(this,(function(t){return[2,this.connection.close()]}))}))},t.prototype.init=function(){return _t(this,void 0,void 0,(function(){var t,e;return Tt(this,(function(n){switch(n.label){case 0:return void 0!==this.root?[3,1]:(this.db={},[3,3]);case 1:return t=new ht,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 Pt=require("prettyjson");var At=function(){function t(){}return t.prototype.error=function(t){R.error(t)},t.prototype.info=function(t){R.trace(t)},t.prototype.json=function(t){R.trace(Pt.render(t,{}))},t.prototype.success=function(t){R.trace(t)},t}(),Dt=function(){function t(){this.fileSystem=new ht}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,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=e.call(t,a)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}(this,(function(i){switch(i.label){case 0:return void 0===n&&(n=z.randomBytes(20).toString("hex")+it.extname(t)),[4,this.fileSystem.write(e+it.sep+n,"")];case 1:return i.sent(),r=it.resolve(e+it.sep+n),o=ct.createWriteStream(r),[4,$()({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}(),Mt=function(t){return null==t};const jt=require("fast-diff");var Nt=function(){function t(){}return t.escapeRegExp=function(t){return"string"!=typeof t?t:t.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")},t.nullable=function(t){return Mt(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===t?"":(0,ut.toLower)((0,ut.trim)((0,ut.deburr)(t)).replace(/[^0-9a-z\-\_]/gi,e))},t.truncate=function(t,e){return Mt(t)||t.length<=e?t:e<=3?"":t.slice(0,e-3)+"..."},t}(),It=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(525)(),o=void 0;null!==(o=r.exec(e));)try{e=(e=(e=e.replace(new RegExp("\\s"+Nt.escapeRegExp(o[0]),"g"),"")).replace(new RegExp(Nt.escapeRegExp(o[0])+"\\s","g"),"")).replace(new RegExp(Nt.escapeRegExp(o[0]),"g"),"")}catch(t){}for(;null!==(o=r.exec(e));)try{e=(e=(e=e.replace(new RegExp("\\s"+Nt.escapeRegExp(o[0]),"g"),"")).replace(new RegExp(Nt.escapeRegExp(o[0])+"\\s","g"),"")).replace(new RegExp(Nt.escapeRegExp(o[0]),"g"),"")}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.substr(3):t.startsWith("+33")?t="0"+t.substr(3):t.startsWith("0033")?t="0"+t.substr(4):t.startsWith("33")&&11===t.length&&(t="0"+t.substr(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.substr(1)),"+33"+t):t},t}(),kt=function(){function t(){}return t.autoCorrectCity=function(e){if(Mt(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(t){return Mt(t)||"string"!=typeof t||0===t.length?t:t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace(/(\sav\s)/gi," avenue ")).replace(/(\sav\.\s)/gi," avenue ")).replace(/(\schau\.\s)/gi," chaussée ")).replace(/(\strav\.\s)/gi," traverse ")).replace(/(\spl\.\s)/gi," place ")).replace(/(\spass\.\s)/gi," passage ")).replace(/(\ssent\.\s)/gi," sentier ")).replace(/(\simp\.\s)/gi," impasse ")).replace(/(\sall\.\s)/gi," allée ")).replace(/(\schem\.\s)/gi," chemin ")},t.getZipCodeFromCity=function(e){if(!Mt(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)||et.isNumber(e)&&5===e.length&&!e.includes(".")&&!e.includes("-"))},t.parse=function(e,n){void 0===n&&(n=!0);var r={};if(!Mt(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(Nt.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(Nt.escapeRegExp(e),"ig"),"")}catch(t){}}})),t.COUNTRIES.forEach((function(t){if(u.includes(" "+t.toLowerCase())){r.country=t;try{u=u.replace(new RegExp(Nt.escapeRegExp(" "+t),"ig"),"")}catch(t){}}})),void 0===r.street&&(r.street=u.split(",").map((function(t){return t.trim()})).join(" ").trim())}void 0===r.country&&(r.country="France")}return void 0!==r.street&&(r.street=It.lower(It.trim(String(r.street)))),void 0!==r.zip&&(r.zip=It.upper(It.trim(String(r.zip)))),void 0!==r.city&&(r.city=t.autoCorrectCity(It.capitalize(It.trim(String(r.city))))),void 0!==r.country&&(r.country=It.capitalize(It.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=Nt.removeText(e.street,t).trim()})),"fr"===It.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 jt(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"],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"],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"]},t.REGIONS=["île-de-france"],t.COUNTRIES=["France","FR"],t}(),Lt=function(){function t(){}return t.getCycleDateFromFullDate=function(t,e){if("weekly"===e){var n=Y.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?Y.DateTime.fromISO(t).toFormat("yyyy-LL"):Y.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=Y.DateTime.fromISO(e,{setZone:!0}).toISODate(),s=Y.DateTime.fromISO(n,{setZone:!0}).toISODate(),l=0,f={};c<=s&&l<i;){var p=t.getCycleDateFromFullDate(c,a);f[p]=(0,ut.cloneDeep)(r),o&&(f[p].date=p),c=Y.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=Y.DateTime.fromISO(t,{setZone:!0}).toISO(),o=Y.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.round=function(t,e){if(void 0===e&&(e=0),"string"!=typeof t)return t;var n=Y.DateTime.fromISO(t,{setZone:!0});return Y.DateTime.fromMillis(Math.round(+n.toMillis()/e)*e).setZone(n.zone).toISO()},t.PERIOD_MAX_DATES=90,t.WEEK_DAYS={1:"lundi",2:"mardi",3:"mercredi",4:"jeudi",5:"vendredi",6:"samedi",7:"dimanche"},t}(),Rt=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}(),Ft=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.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}(),Ut=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){return 0===e?0:t/e*100},t.round=function(t,e){return 0===e?Math.round(t):Number(t.toFixed(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}(),qt=function(){function t(){}return t.compact=function(e,n){if(void 0===n&&(n={}),(0,ut.isArray)(e)){var r=[];return e.forEach((function(e){e=t.compact(e,n),((0,ut.isArray)(e)&&e.length>0||(0,ut.isObject)(e)&&Object.keys(e).length>0||null!=e&&!(0,ut.isArray)(e)&&!(0,ut.isObject)(e))&&r.push(e)})),r}if((0,ut.isObject)(e)){var o={};return Object.keys(e).forEach((function(r){var i=e[r];(0,ut.isArray)(i)||(0,ut.isObject)(i)?(i=t.compact(i,n),((0,ut.isArray)(i)&&i.length>0||(0,ut.isObject)(i)&&Object.keys(i).length>0||null!=i&&!(0,ut.isArray)(i)&&!(0,ut.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}(),zt=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(Ut.round(r,n))},t.calculateTaxes=function(t,e){var n=0;return e.forEach((function(e){n+=t*e})),Ut.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(Ut.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}()})(),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/RGI_Emoji.js\"","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/integrations\"","webpack://SmilePlayerCommon/./src/tool/Env.ts","webpack://SmilePlayerCommon/./src/tool/Environment.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/external commonjs \"urlencode\"","webpack://SmilePlayerCommon/./src/util/ValidatorUtil.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/./src/tool/FileSystem.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/./src/util/HelperUtil.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/GeneratorUtil.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, function() {\nreturn ","module.exports = require(\"emoji-regex/RGI_Emoji.js\");","// 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/integrations\");","/* 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","import * as Sentry from '@sentry/node';\nimport { CaptureConsole } from '@sentry/integrations';\nimport {Environment} from 'common/tool/Environment';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\nimport {UnauthorizedException} from 'common/exception/UnauthorizedException';\nimport {Env} from 'common/tool/Env';\n\nexport class Logger {\n public static init(sentryToken: string): void {\n if (Environment.getMode() === Env.PRODUCTION) {\n Sentry.init({\n dsn: sentryToken,\n integrations: [\n new CaptureConsole({\n levels: ['error', 'warn', 'log']\n })\n ],\n environment: Environment.getMode(),\n maxBreadcrumbs: 50\n });\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 }\n Sentry.addBreadcrumb({\n category: 'info',\n message: message,\n data: extra,\n level: Sentry.Severity.Info\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 }\n Sentry.addBreadcrumb({\n category: 'debug',\n message: message,\n data: extra,\n level: Sentry.Severity.Debug\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 }\n Sentry.withScope(scope => {\n if (extra !== undefined) {\n scope.setExtra('extra', JSON.stringify(extra));\n }\n Sentry.captureMessage(message);\n });\n }\n\n public static warning(error: ExceptionContract, extra?: any): void {\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 }\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 public static error(error: ExceptionContract, extra?: any): void {\n if ([UnauthorizedException.ERROR_CODE].includes(error.code)) {\n return;\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 }\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 public static requestHandler(): any {\n return Sentry.Handlers.requestHandler();\n }\n\n public static errorHandler(): any {\n return Sentry.Handlers.errorHandler();\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) {\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","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 * as 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.use(compression({level: -1}));\n this.app.use(timeout('300s'));\n this.app.use(express.json({\n inflate: true,\n limit: '100kb',\n reviver: null,\n strict: true,\n type: 'application/json',\n verify: undefined\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';\nimport {Logger} from 'common/tool/Logger';\n\nexport class Retry {\n public static async request(process: () => Promise<void>, retries: number = 2): 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 Logger.error(error);\n reject(error);\n }\n });\n });\n });\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"urlencode\");","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(number: string | number): boolean {\n if (typeof number === 'number') {\n return true;\n }\n\n if (typeof number !== 'string') {\n return false;\n }\n\n return (new RegExp('^\\-?[0-9]+\\\\.?[0-9]*$')).test(number);\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 * as urlencode from 'urlencode';\nimport {BadParameterException} from 'common/exception/BadParameterException';\nimport {Env} from 'common/tool/Env';\nimport {ValidatorUtil} from 'common/util/ValidatorUtil';\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: {[param: string]: any} = {\n accessToken: this.token,\n emetteur: senderName,\n message: 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 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 }, 1);\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) => void = (time) => {\n return new Promise((resolve) => setTimeout(resolve, time));\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';\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 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","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';\n\nexport class TemplateEngine implements TemplateEngineContract {\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] = 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 return render(content, view);\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 * as Mailjet 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';\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 = Mailjet.connect(apiPublicKey, 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, data.base.subject, text, html);\n }, 1);\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, data.base.subject, text, html);\n }, 1);\n }\n\n public async sendUserNotification(sender: SenderContract, recipient: RecipientContract, data: ViewEmailUserNotificationContract): 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});\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});\n\n return await this.sendNotification(sender, recipient, data.base.subject, text, html);\n }, 1);\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, recipient: RecipientContract, subject: string, text: string, html: string): Promise<void> {\n try {\n if (this.mode === Env.TEST) {\n Logger.info('Simulation Mode: Email has been sent', {sender: sender, recipient: recipient});\n } else {\n if (this.mode === Env.DEVELOPMENT) {\n recipient.contact = 'developer@onylab.com';\n }\n\n await this.mailjet.post('send', {'version': 'v3.1'})\n .request({\n 'Messages': [\n {\n 'From': {\n 'Name': sender.name,\n 'Email': sender.contact\n },\n 'To': [{\n 'Name': recipient.name,\n 'Email': recipient.contact\n }],\n 'Subject': subject,\n 'TextPart': text,\n 'HTMLPart': html\n }\n ]\n });\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 readonly filesystem: FileSystemContract;\n private root: string;\n private environment: Env;\n private config: any;\n\n public constructor(root: string, environment?: Env) {\n this.filesystem = new FileSystem();\n this.root = root;\n this.environment = environment === undefined ? Environment.getMode() : environment;\n }\n\n public async full(): Promise<any> {\n await this.init();\n\n return this.config;\n }\n\n private async init(): Promise<void> {\n if (this.config === undefined) {\n if (this.root === undefined) {\n this.config = {};\n } else {\n this.config = await this.filesystem.readJson(this.root + 'data/config.json');\n if ([Env.DEVELOPMENT, Env.TEST].includes(this.environment)) {\n try {\n this.config = merge(this.config, await this.filesystem.readJson(this.root + 'data/config_' + String(this.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","export const isNullOrUndefined: (obj: unknown) => boolean = (obj) => {\n return obj === undefined || obj === null;\n};\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"fast-diff\");","import {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 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/RGI_Emoji.js'); /* eslint-disable-line @typescript-eslint/no-var-requires */\n const regex: RegExp = emojiRegex();\n\n let match;\n while ((match = regex.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 } catch (_e) {\n // ignore\n }\n }\n while ((match = regex.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 } 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.substr(3);\n } else if (raw.startsWith('+33')) {\n raw = '0' + raw.substr(3);\n } else if (raw.startsWith('0033')) {\n raw = '0' + raw.substr(4);\n } else if (raw.startsWith('33') && raw.length === 11) {\n raw = '0' + raw.substr(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 break;\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.substr(1);\n }\n\n return '+33' + raw;\n break;\n }\n\n return raw;\n }\n}\n","/* eslint-disable max-lines */\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 ];\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 '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 };\n private static readonly REGIONS: string[] = ['île-de-france'];\n private static readonly COUNTRIES: string[] = ['France', 'FR'];\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 street = street.replace(/(\\sav\\s)/ig, ' avenue ');\n street = street.replace(/(\\sav\\.\\s)/ig, ' avenue ');\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\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())) {\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 = 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';\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 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","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 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 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","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 (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 (decimals === 0) {\n return Math.round(value);\n }\n\n return Number(value.toFixed(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","init","sentryToken","Environment","dsn","integrations","CaptureConsole","levels","environment","maxBreadcrumbs","trace","extra","includes","console","info","category","level","debug","log","scope","setExtra","JSON","stringify","warning","error","warn","requestHandler","errorHandler","_request","response","Logger","Number","status","isNaN","json","configuration","this","handler","request","next","authenticated","jwt","authApiKey","keys","Array","isArray","required","forEach","HandlerController","headers","Authorization","startsWith","parts","split","length","secret","can","_action","_subject","create","origins","port","app","backendPort","Server","DEFAULT_PORT","String","use","inflate","limit","reviver","strict","type","verify","origin","concat","credentials","listen","getSessionSecret","sessionCookieName","update","SALT","digest","retries","operation","factor","minTimeout","maxTimeout","randomize","Promise","resolve","reject","attempt","then","catch","retry","isEmail","email","RegExp","test","isPhone","phone","isIntMobilePhone","caRegex","frRegex","usRegex","isNumber","number","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","setZone","toFormat","BASE_API_URL","encodeURIComponent","p","timeout","trim","ExternalApiException","filter","ValidatorUtil","asyncForEach","array","callback","i","wait","time","setTimeout","dirPath","filePath","lastIndexOf","substr","move","isFile","recursive","isDir","read","readJson","jsonPath","isJson","parse","readJsonFiles","separator","files","output","fileName","push","write","rawData","encoding","writeJson","isDirectory","_error","render","templatePath","baseIncludePath","view","cloneDeep","__dirname","FileSystem","content","result","include","includeParts","templateName","apiPublicKey","apiSecretKey","templateEngine","TemplateEngine","mailjet","sendDeliveryDelay","sender","recipient","base","copyright","year","Date","getUTCFullYear","text","html","sendNotification","subject","sendTrackDelivery","textContent","htmlContent","sendUserNotification","contact","post","statusCode","filesystem","full","config","merge","connect","entities","con","logging","logger","bigNumberStrings","timezone","charset","createConnection","connection","synchronize","close","fileSystem","success","image","url","outputPath","outputName","toString","writer","method","responseType","pipe","on","isNullOrUndefined","escapeRegExp","str","nullable","removeMultiSpaces","removeText","StringUtil","_e","targets","replacers","target","index","slugify","raw","toLower","deburr","truncate","slice","capitalize","lowraw","FormatterUtil","lower","word","charAt","toUpperCase","ucfirst","toLocaleLowerCase","upper","toLocaleUpperCase","locale","preformatPhone","phoneNat","phoneInt","stripEmoji","regex","emojiRegex","match","exec","stripExoticCharacters","num","autoCorrectCity","city","toLowerCase","exactMatch","AddressUtil","CITIES","find","c","partialMatch","countDiff","add","remove","matchNoDash","partialMatchNoDash","isIncluded","autoCorrectStreet","street","getZipCodeFromCity","ZIPCODE_CITY","reduce","selected","zipcode","getCityFromZipCode","zip","rawAddress","candidates","part","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","day","week","month","cursor","plus","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","round","roundingInMs","dateTime","toMillis","zone","size","GeneratorUtil","symbolUpperCases","int","min","max","POSITIVE_INFINITY","floor","random","password","symbolLowerCases","avg","values","total","accumulator","MathUtil","applyVariation","variation","median","valuesSorted","sort","b","percentage","decimals","toFixed","originalValue","newValue","percent","abs","compact","options","ObjectUtil","isObject","removeEmptyString","applyTaxes","priceTaxExcluded","taxRates","priceTaxIncluded","rate","calculateTaxes","taxes","displayWithCurrency","price","isoCurrency","currency","PriceUtil","currencies","newPrice","position","symbol","format","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/RGI_Emoji.js\"","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/integrations\"","webpack://SmilePlayerCommon/./src/tool/Env.ts","webpack://SmilePlayerCommon/./src/tool/Environment.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/external commonjs \"urlencode\"","webpack://SmilePlayerCommon/./src/util/ValidatorUtil.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/./src/tool/FileSystem.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/./src/util/HelperUtil.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/GeneratorUtil.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, function() {\nreturn ","module.exports = require(\"emoji-regex/RGI_Emoji.js\");","// 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/integrations\");","/* 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","import * as Sentry from '@sentry/node';\nimport { CaptureConsole } from '@sentry/integrations';\nimport {Environment} from 'common/tool/Environment';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\nimport {UnauthorizedException} from 'common/exception/UnauthorizedException';\nimport {Env} from 'common/tool/Env';\n\nexport class Logger {\n public static init(sentryToken: string): void {\n if (Environment.getMode() === Env.PRODUCTION) {\n Sentry.init({\n dsn: sentryToken,\n integrations: [\n new CaptureConsole({\n levels: ['error', 'warn', 'log']\n })\n ],\n environment: Environment.getMode(),\n maxBreadcrumbs: 50\n });\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 }\n Sentry.addBreadcrumb({\n category: 'info',\n message: message,\n data: extra,\n level: Sentry.Severity.Info\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 }\n Sentry.addBreadcrumb({\n category: 'debug',\n message: message,\n data: extra,\n level: Sentry.Severity.Debug\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 }\n Sentry.withScope(scope => {\n if (extra !== undefined) {\n scope.setExtra('extra', JSON.stringify(extra));\n }\n Sentry.captureMessage(message);\n });\n }\n\n public static warning(error: ExceptionContract, extra?: any): void {\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 }\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 public static error(error: ExceptionContract, extra?: any): void {\n if ([UnauthorizedException.ERROR_CODE].includes(error.code)) {\n return;\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 }\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 public static requestHandler(): any {\n return Sentry.Handlers.requestHandler();\n }\n\n public static errorHandler(): any {\n return Sentry.Handlers.errorHandler();\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 * as 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.use(compression({level: -1}));\n this.app.use(timeout('300s'));\n this.app.use(express.json({\n inflate: true,\n limit: '100kb',\n reviver: null,\n strict: true,\n type: 'application/json',\n verify: undefined\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';\nimport {Logger} from 'common/tool/Logger';\n\nexport class Retry {\n public static async request(process: () => Promise<void>, retries: number = 2): 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 Logger.error(error);\n reject(error);\n }\n });\n });\n });\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"urlencode\");","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(number: string | number): boolean {\n if (typeof number === 'number') {\n return true;\n }\n\n if (typeof number !== 'string') {\n return false;\n }\n\n return (new RegExp('^\\-?[0-9]+\\\\.?[0-9]*$')).test(number);\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 * as urlencode from 'urlencode';\nimport {BadParameterException} from 'common/exception/BadParameterException';\nimport {Env} from 'common/tool/Env';\nimport {ValidatorUtil} from 'common/util/ValidatorUtil';\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: {[param: string]: any} = {\n accessToken: this.token,\n emetteur: senderName,\n message: 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 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 }, 1);\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) => void = (time) => {\n return new Promise((resolve) => setTimeout(resolve, time));\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';\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 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","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';\n\nexport class TemplateEngine implements TemplateEngineContract {\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] = 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 return render(content, view);\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 * as Mailjet 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';\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 = Mailjet.connect(apiPublicKey, 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, data.base.subject, text, html);\n }, 1);\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, data.base.subject, text, html);\n }, 1);\n }\n\n public async sendUserNotification(sender: SenderContract, recipient: RecipientContract, data: ViewEmailUserNotificationContract): 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});\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});\n\n return await this.sendNotification(sender, recipient, data.base.subject, text, html);\n }, 1);\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, recipient: RecipientContract, subject: string, text: string, html: string): Promise<void> {\n try {\n if (this.mode === Env.TEST) {\n Logger.info('Simulation Mode: Email has been sent', {sender: sender, recipient: recipient});\n } else {\n if (this.mode === Env.DEVELOPMENT) {\n recipient.contact = 'developer@onylab.com';\n }\n\n await this.mailjet.post('send', {'version': 'v3.1'})\n .request({\n 'Messages': [\n {\n 'From': {\n 'Name': sender.name,\n 'Email': sender.contact\n },\n 'To': [{\n 'Name': recipient.name,\n 'Email': recipient.contact\n }],\n 'Subject': subject,\n 'TextPart': text,\n 'HTMLPart': html\n }\n ]\n });\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 readonly filesystem: FileSystemContract;\n private root: string;\n private environment: Env;\n private config: any;\n\n public constructor(root: string, environment?: Env) {\n this.filesystem = new FileSystem();\n this.root = root;\n this.environment = environment === undefined ? Environment.getMode() : environment;\n }\n\n public async full(): Promise<any> {\n await this.init();\n\n return this.config;\n }\n\n private async init(): Promise<void> {\n if (this.config === undefined) {\n if (this.root === undefined) {\n this.config = {};\n } else {\n this.config = await this.filesystem.readJson(this.root + 'data/config.json');\n if ([Env.DEVELOPMENT, Env.TEST].includes(this.environment)) {\n try {\n this.config = merge(this.config, await this.filesystem.readJson(this.root + 'data/config_' + String(this.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","export const isNullOrUndefined: (obj: unknown) => boolean = (obj) => {\n return obj === undefined || obj === null;\n};\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"fast-diff\");","import {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 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/RGI_Emoji.js'); /* eslint-disable-line @typescript-eslint/no-var-requires */\n const regex: RegExp = emojiRegex();\n\n let match;\n while ((match = regex.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 } catch (_e) {\n // ignore\n }\n }\n while ((match = regex.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 } 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.substr(3);\n } else if (raw.startsWith('+33')) {\n raw = '0' + raw.substr(3);\n } else if (raw.startsWith('0033')) {\n raw = '0' + raw.substr(4);\n } else if (raw.startsWith('33') && raw.length === 11) {\n raw = '0' + raw.substr(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 break;\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.substr(1);\n }\n\n return '+33' + raw;\n break;\n }\n\n return raw;\n }\n}\n","/* eslint-disable max-lines */\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 ];\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 '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 };\n private static readonly REGIONS: string[] = ['île-de-france'];\n private static readonly COUNTRIES: string[] = ['France', 'FR'];\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 street = street.replace(/(\\sav\\s)/ig, ' avenue ');\n street = street.replace(/(\\sav\\.\\s)/ig, ' avenue ');\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\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())) {\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 = 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';\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 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","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 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 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","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 (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 (decimals === 0) {\n return Math.round(value);\n }\n\n return Number(value.toFixed(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","init","sentryToken","Environment","dsn","integrations","CaptureConsole","levels","environment","maxBreadcrumbs","trace","extra","includes","console","info","category","level","debug","log","scope","setExtra","JSON","stringify","warning","error","warn","requestHandler","errorHandler","_request","response","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","app","backendPort","Server","DEFAULT_PORT","String","use","inflate","limit","reviver","strict","type","verify","origin","concat","credentials","listen","getSessionSecret","sessionCookieName","update","SALT","digest","retries","operation","factor","minTimeout","maxTimeout","randomize","Promise","resolve","reject","attempt","then","catch","retry","isEmail","email","RegExp","test","isPhone","phone","isIntMobilePhone","caRegex","frRegex","usRegex","isNumber","number","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","setZone","toFormat","BASE_API_URL","encodeURIComponent","p","timeout","trim","ExternalApiException","filter","ValidatorUtil","asyncForEach","array","callback","i","wait","time","setTimeout","dirPath","filePath","lastIndexOf","substr","move","isFile","recursive","isDir","read","readJson","jsonPath","isJson","parse","readJsonFiles","separator","files","output","fileName","push","write","rawData","encoding","writeJson","isDirectory","_error","render","templatePath","baseIncludePath","view","cloneDeep","__dirname","FileSystem","content","result","include","includeParts","templateName","apiPublicKey","apiSecretKey","templateEngine","TemplateEngine","mailjet","sendDeliveryDelay","sender","recipient","base","copyright","year","Date","getUTCFullYear","text","html","sendNotification","subject","sendTrackDelivery","textContent","htmlContent","sendUserNotification","contact","post","statusCode","filesystem","full","config","merge","connect","entities","con","logging","logger","bigNumberStrings","timezone","charset","createConnection","connection","synchronize","close","fileSystem","success","image","url","outputPath","outputName","toString","writer","method","responseType","pipe","on","isNullOrUndefined","escapeRegExp","str","nullable","removeMultiSpaces","removeText","StringUtil","_e","targets","replacers","target","index","slugify","raw","toLower","deburr","truncate","slice","capitalize","lowraw","FormatterUtil","lower","word","charAt","toUpperCase","ucfirst","toLocaleLowerCase","upper","toLocaleUpperCase","locale","preformatPhone","phoneNat","phoneInt","stripEmoji","regex","emojiRegex","match","exec","stripExoticCharacters","num","autoCorrectCity","city","toLowerCase","exactMatch","AddressUtil","CITIES","c","partialMatch","countDiff","add","remove","matchNoDash","partialMatchNoDash","isIncluded","autoCorrectStreet","street","getZipCodeFromCity","ZIPCODE_CITY","reduce","selected","zipcode","getCityFromZipCode","zip","rawAddress","candidates","part","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","day","week","month","cursor","plus","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","round","roundingInMs","dateTime","toMillis","zone","size","GeneratorUtil","symbolUpperCases","int","min","max","POSITIVE_INFINITY","floor","random","password","symbolLowerCases","avg","values","total","accumulator","MathUtil","applyVariation","variation","median","valuesSorted","sort","b","percentage","decimals","toFixed","originalValue","newValue","percent","abs","compact","options","ObjectUtil","isObject","removeEmptyString","applyTaxes","priceTaxExcluded","taxRates","priceTaxIncluded","rate","calculateTaxes","taxes","displayWithCurrency","price","isoCurrency","currency","PriceUtil","currencies","newPrice","position","symbol","format","standardPrice","toLocaleString","style","useGrouping","minimumFractionDigits","maximumFractionDigits","precision","priceInCents","precisionInCents","rest"],"sourceRoot":""}
|