@onylab/common-api 0.1.227 → 0.1.229
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
|
@@ -176,6 +176,9 @@ declare module "tool/Environment" {
|
|
|
176
176
|
static getMode(): Env;
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
|
+
declare module "util/HelperUtil" {
|
|
180
|
+
export const isNullOrUndefined: (obj: unknown) => boolean;
|
|
181
|
+
}
|
|
179
182
|
declare module "tool/Logger" {
|
|
180
183
|
import { ExceptionContract } from "exception/ExceptionContract";
|
|
181
184
|
import * as express from 'express';
|
|
@@ -631,9 +634,6 @@ declare module "tool/index" {
|
|
|
631
634
|
export * from "tool/Logger";
|
|
632
635
|
export * from "tool/Retry";
|
|
633
636
|
}
|
|
634
|
-
declare module "util/HelperUtil" {
|
|
635
|
-
export const isNullOrUndefined: (obj: unknown) => boolean;
|
|
636
|
-
}
|
|
637
637
|
declare module "util/StringUtil" {
|
|
638
638
|
export class StringUtil {
|
|
639
639
|
static escapeRegExp(str: string): string;
|
|
@@ -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={893:e=>{e.exports=require("emoji-regex")}},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:()=>s,Util:()=>u});var e={};n.r(e),n.d(e,{Path:()=>l});var t={};n.r(t),n.d(t,{BadParameterException:()=>h,BadRequestException:()=>y,ConflictException:()=>b,DuplicateException:()=>w,ExternalApiException:()=>S,InternalException:()=>O,MainException:()=>p,NotImplementedException:()=>_,ObjectNotFoundException:()=>P,PageNotFoundException:()=>A,UnauthorizedException:()=>j});var o={};n.r(o),n.d(o,{AuthenticationMiddleware:()=>H,AuthorizationMiddleware:()=>U,HandlerController:()=>q,Server:()=>J});var i={};n.r(i),n.d(i,{EmailSenderService:()=>Pe,SmsSenderService:()=>ie});var a={};n.r(a),n.d(a,{TemplateEngine:()=>Oe});var s={};n.r(s),n.d(s,{Configuration:()=>De,Database:()=>ke,Displayer:()=>Re,Downloader:()=>Fe,Env:()=>L,Environment:()=>R,FileSystem:()=>ye,Logger:()=>F,Retry:()=>ee});var u={};n.r(u),n.d(u,{AddressUtil:()=>Ge,DateUtil:()=>We,ExtractorUtil:()=>Ze,FormatterUtil:()=>ze,GeneratorUtil:()=>de,MathUtil:()=>Be,ObjectUtil:()=>Ve,PriceUtil:()=>Je,StringUtil:()=>Ue,ValidatorUtil:()=>ne,asyncForEach:()=>le,isNullOrUndefined:()=>qe,wait:()=>fe});var c,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=(c=function(e,t){return c=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])},c(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}c(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),d=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)}}(),h=function(e){function t(t,n){var r=e.call(this,t,400,n)||this;return r.name="BadParameterException",r}return d(t,e),t}(p),v=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)}}(),y=function(e){function t(t,n){var r=e.call(this,t,400,n)||this;return r.name="BadRequestException",r}return v(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)}}(),b=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),g=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 g(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),T=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)}}(),_=function(e){function t(t,n){var r=e.call(this,t,501,n)||this;return r.name="NotImplementedException",r}return T(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),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)}}(),A=function(e){function t(t,n){var r=e.call(this,t,404,n)||this;return r.name="PageNotFoundException",r}return M(t,e),t}(p),D=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 D(t,e),t.ERROR_CODE=401,t}(p);const N=require("@sentry/node"),I=require("@sentry/tracing"),k=require("@sentry/integrations");var L;!function(e){e.PRODUCTION="prod",e.DEVELOPMENT="dev",e.TEST="test"}(L||(L={}));var R=function(){function e(){}return e.getMode=function(){switch(process.env.NODE_ENV){case"dev":case"development":return L.DEVELOPMENT;case"prod":case"production":return L.PRODUCTION;case"test":return L.TEST}return void 0===process.env.APP_ID?L.DEVELOPMENT:L.PRODUCTION},e}(),F=function(){function e(){}return e.init=function(e,t){R.getMode()===L.PRODUCTION&&N.init({dsn:e,integrations:[new k.CaptureConsole({levels:["error","warn","log"]}),new N.Integrations.Http({tracing:!0}),new I.Integrations.Express({app:t})],environment:R.getMode(),maxBreadcrumbs:50,tracesSampleRate:0,tracesSampler:function(e){var t,n;return"number"!=typeof(null===(t=e.transactionContext)||void 0===t?void 0:t.startTimestamp)||"number"!=typeof(null===(n=e.transactionContext)||void 0===n?void 0:n.endTimestamp)||(e.transactionContext.endTimestamp,e.transactionContext.startTimestamp),0}})},e.trace=function(e,t){[L.DEVELOPMENT,L.TEST].includes(R.getMode())?void 0===t?console.info(e):console.info(e,t):N.addBreadcrumb({category:"info",message:e,data:t,level:"info"})},e.debug=function(e,t){[L.DEVELOPMENT,L.TEST].includes(R.getMode())?void 0===t?console.log(e):console.log(e,t):N.addBreadcrumb({category:"debug",message:e,data:t,level:"debug"})},e.info=function(e,t){[L.DEVELOPMENT,L.TEST].includes(R.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){void 0!==e.response&&("object"!=typeof t&&(t={}),t.requestErrorData=e.response.data),[L.DEVELOPMENT,L.TEST].includes(R.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)||(void 0!==e.response&&("object"!=typeof t&&(t={}),t.requestErrorData=e.response.data),[L.DEVELOPMENT,L.TEST].includes(R.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.tracingHandler=function(){return N.Handlers.tracingHandler()},e.errorHandler=function(){return N.Handlers.errorHandler()},e}(),q=function(){function e(){}return e.error=function(e,t,n){F.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}(),H=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||void 0===e.configuration.none||(o=e.authNone(t)),!o)throw new j("request is not authenticate");r()}catch(e){q.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.prototype.authNone=function(e){return!(!Array.isArray(this.configuration.none.urlStartsWith)||void 0===this.configuration.none.urlStartsWith.find((function(t){var n;return null===(n=e.originalUrl)||void 0===n?void 0:n.startsWith(t)}))||(e.session={},0))},e}(),U=function(){function e(){}return e.prototype.can=function(e,t){},e}();const z=require("crypto"),G=require("express"),W=require("cors"),Z=require("compression"),B=require("helmet"),V=require("connect-timeout");var J=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:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){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,s])}}}(this,(function(i){return void 0===this.app&&(r=n||e.DEFAULT_PORT,o="http://localhost:"+String(r),F.debug("start server on "+o),this.app=G(),this.app.set("trust proxy",!0),this.app.use(Z({level:-1})),this.app.use(V("300s")),this.app.use(G.json({inflate:!0,limit:"10mb",reviver:null,strict:!0,type:"application/json",verify:void 0})),this.app.use(G.urlencoded({limit:"10mb"})),this.app.use(W({origin:[o].concat(t),credentials:!0})),this.app.use(B()),this.app.use(G.json()),this.app.listen(r,(function(){F.debug("server is running on "+o)}))),[2,this.app]}))},new((i=void 0)||(i=Promise))((function(e,t){function n(e){try{u(a.next(e))}catch(e){t(e)}}function s(e){try{u(a.throw(e))}catch(e){t(e)}}function u(t){var r;t.done?e(t.value):(r=t.value,r instanceof i?r:new i((function(e){e(r)}))).then(n,s)}u((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 $=require("axios");var Y=n.n($);const X=require("luxon"),K=require("querystring"),Q=require("retry");var ee=function(){function e(){}return e.request=function(e,t,n){return void 0===t&&(t=2),r=this,o=void 0,a=function(){var r;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:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){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,s])}}}(this,(function(o){return r=Q.operation({retries:t,factor:1,minTimeout:0,maxTimeout:0,randomize:!1}),[2,new Promise((function(t,o){r.attempt((function(){e().then(t).catch((function(e){r.retry(e)||("function"==typeof n&&n(e),o(e))}))}))}))]}))},new((i=void 0)||(i=Promise))((function(e,t){function n(e){try{u(a.next(e))}catch(e){t(e)}}function s(e){try{u(a.throw(e))}catch(e){t(e)}}function u(t){var r;t.done?e(t.value):(r=t.value,r instanceof i?r:new i((function(e){e(r)}))).then(n,s)}u((a=a.apply(r,o||[])).next())}));var r,o,i,a},e}();const te=require("urlencode");var ne=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}(),re=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},oe=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:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){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,s])}}},ie=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),re(this,void 0,void 0,(function(){var a,s=this;return oe(this,(function(u){switch(u.label){case 0:return 0===(a=this.checkPhoneFormat(r)).length?(F.warning(new h("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,ee.request((function(){return re(s,void 0,void 0,(function(){var r,s,u;return oe(this,(function(c){switch(c.label){case 0:return r={accessToken:this.token,emetteur:t,message:te(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=X.DateTime.fromISO(i,{setZone:!0}).toFormat("ddMMyyyy-HH:mm")),s=X.DateTime.fromISO(null!=i?i:(new Date).toISOString(),{setZone:!0}).setZone("Europe/Paris"),o?s.hour>=21?r.date_envoi=s.plus({day:1}).set({hour:9}).toFormat("ddMMyyyy-HH:mm"):s.hour<9&&(r.date_envoi=s.set({hour:9}).toFormat("ddMMyyyy-HH:mm")):s.hour<8&&(r.date_envoi=s.set({hour:8}).toFormat("ddMMyyyy-HH:mm")),this.mode!==L.TEST?[3,1]:(F.info("Simulation Mode: SMS has been sent",{params:r}),[3,3]);case 1:return this.mode===L.DEVELOPMENT&&(a=["+15145705214"]),[4,Y().post(e.BASE_API_URL+"sendSMS.do",K.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]}}))}))}),0,F.error.bind(F))]);case 1:return u.sent(),[2]}}))}))},e.prototype.checkPhoneFormat=function(e){return e.filter((function(e){return ne.isIntMobilePhone(e)}))},e.BASE_API_URL="https://api.smsmode.com/http/1.6/",e.MESSAGE_MAX_LENGTH=150,e}();const ae=require("path"),se=require("mustache"),ue=require("lodash"),ce=require("fs");var le=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:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){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,s])}}}(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{u(i.next(e))}catch(e){t(e)}}function s(e){try{u(i.throw(e))}catch(e){t(e)}}function u(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o((function(e){e(n)}))).then(a,s)}u((i=i.apply(n,r||[])).next())}));var n,r,o,i},fe=function(e){return new Promise((function(t){return setTimeout(t,e)}))};const pe=require("color-name");var de=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.color=function(t){void 0===t&&(t=1);var n=e.rgbToHex(Math.round(255*t)),r="#000000"+n,o=Object.values(pe);if(0===o.length)return r;var i=o[e.int(0,o.length-1)];return 3!==i.length?r:"#"+e.rgbToHex(i[0])+e.rgbToHex(i[1])+e.rgbToHex(i[2])+n},e.rgbToHex=function(e){var t=e.toString(16);return 1===t.length?"0"+t:t},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}(),he=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},ve=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:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){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,s])}}},ye=function(){function e(){}return e.prototype.dirPath=function(e){var t=ae.resolve(e).lastIndexOf(ae.sep);return t<0?e:ae.resolve(ae.resolve(e).substr(0,t+1))+ae.sep},e.prototype.listFiles=function(e){return he(this,void 0,void 0,(function(){var t,n,r,o=this;return ve(this,(function(i){switch(i.label){case 0:if(!this.isDir(e))throw new h(String(e)+" does not exist or is not a directory");return t=e.endsWith("/")?"":"/",n=ce.readdirSync(e),r=[],[4,le(n,(function(n){return he(o,void 0,void 0,(function(){return ve(this,(function(o){return this.isFile(e+t+n)&&r.push(e+t+n),[2]}))}))}))];case 1:return i.sent(),[2,r]}}))}))},e.prototype.randomFile=function(e,t){return he(this,void 0,void 0,(function(){var n,r;return ve(this,(function(o){switch(o.label){case 0:return[4,this.listFiles(e)];case 1:return 0===(n=o.sent()).length?[2,void 0]:(r=void 0!==t?Math.max(t,0)%n.length:de.int(0,n.length-1),[2,n[r]])}}))}))},e.prototype.move=function(e,t){return he(this,void 0,void 0,(function(){return ve(this,(function(n){if(!this.isFile(e))throw new h(String(e)+" does not exist or is not a file");if(ce.mkdirSync(t,{recursive:!0}),!this.isDir(t))throw new h(String(t)+" does not exist or is not a directory");return[2,ce.renameSync(e,t+ae.basename(e))]}))}))},e.prototype.read=function(e){return he(this,void 0,void 0,(function(){return ve(this,(function(t){if(!this.isFile(e))throw new h(String(e)+" does not exist or is not a file");return[2,ce.readFileSync(e,"utf8")]}))}))},e.prototype.readJson=function(e){return he(this,void 0,void 0,(function(){var t;return ve(this,(function(n){switch(n.label){case 0:return[4,this.read(e)];case 1:if(t=n.sent(),!this.isJson(t))throw new h(String(e)+" does not contain JSON");return[2,JSON.parse(t)]}}))}))},e.prototype.readJsonFiles=function(e){return he(this,void 0,void 0,(function(){var t,n,r,o=this;return ve(this,(function(i){switch(i.label){case 0:if(!this.isDir(e))throw new h(String(e)+" does not exist or is not a directory");return t=e.endsWith("/")?"":"/",n=ce.readdirSync(e),r=[],[4,le(n,(function(n){return he(o,void 0,void 0,(function(){var o,i,a;return ve(this,(function(s){switch(s.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=s.sent(),a)]),s.label=2;case 2:return[2]}}))}))}))];case 1:return i.sent(),[2,r]}}))}))},e.prototype.write=function(e,t){return he(this,void 0,void 0,(function(){var n;return ve(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 he(this,void 0,void 0,(function(){return ve(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}();const me=require("clean-css"),be=require("html-minifier-terser");var ge=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},we=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:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){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,s])}}},Ee=function(){function e(){}return e.prototype.css=function(e){return ge(this,void 0,void 0,(function(){return we(this,(function(t){return[2,new me({compatibility:"ie7",format:!1,level:1,sourceMap:!1}).minify(e).styles]}))}))},e.prototype.html=function(e){return ge(this,void 0,void 0,(function(){return we(this,(function(t){switch(t.label){case 0:return[4,(0,be.minify)(e,{collapseBooleanAttributes:!0,collapseInlineTagWhitespace:!0,collapseWhitespace:!0,continueOnParseError:!1,decodeEntities:!1,html5:!0,minifyCSS:!0,minifyJS:!0,noNewlinesBeforeTagClose:!0,preserveLineBreaks:!1,preventAttributesEscaping:!1,processConditionalComments:!1,quoteCharacter:'"',removeAttributeQuotes:!1,removeComments:!0,removeEmptyAttributes:!0,removeEmptyElements:!0,removeOptionalTags:!1,removeRedundantAttributes:!0,removeScriptTypeAttributes:!1,removeStyleLinkTypeAttributes:!1,removeTagWhitespace:!1})];case 1:return[2,t.sent()]}}))}))},e}(),Se=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},xe=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:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){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,s])}}},Oe=function(){function e(){this.minifier=new Ee}return e.prototype.render=function(e,t,n){return Se(this,void 0,void 0,(function(){var r,o,i,a,s,u=this;return xe(this,(function(c){switch(c.label){case 0:return e.endsWith(".template")||(e+=".template"),r=(0,ue.cloneDeep)(t),o=ae.isAbsolute(e)?"":__dirname+ae.sep,[4,(new ye).read(o+e)];case 1:return i=c.sent(),a=[],(0,se.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=ae.dirname(o+e)+ae.sep:ae.isAbsolute(n)||(n=o+n),[4,le(a,(function(e){return Se(u,void 0,void 0,(function(){var t,o,i,a;return xe(this,(function(s){switch(s.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]=Array.isArray(r[e][t])?r[e][t].map((function(e){return e.replace(/(?:\r\n|\r|\n)/g,"<br>")})):r[e][t].replace(/(?:\r\n|\r|\n)/g,"<br>")})),i=r,a=e,[4,this.render(ae.resolve(n,o),r[e])]);case 1:i[a]=s.sent(),s.label=2;case 2:return[2]}}))}))}))]):[3,3];case 2:c.sent(),c.label=3;case 3:if((s=(0,se.render)(i,r)).includes("{{")||s.includes("}}"))throw new b("template: missing data to render template",{templatePath:e,data:t});return[2,e.includes("html")?this.minifier.html(s):s]}}))}))},e}();const Te=require("node-mailjet");var _e=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},Ce=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:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){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,s])}}},Pe=function(){function e(e,t,n){this.templateEngine=new Oe,this.mailjet=Te.connect(e,t),this.mode=n}return e.prototype.sendDeliveryDelay=function(e,t,n){return _e(this,void 0,void 0,(function(){var r=this;return Ce(this,(function(o){switch(o.label){case 0:return[4,ee.request((function(){return _e(r,void 0,void 0,(function(){var r,o;return Ce(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,[{recipient:t,subject:n.base.subject,text:r,html:o}],!1)];case 3:return[2,i.sent()]}}))}))}),0,F.error.bind(F))];case 1:return[2,o.sent()]}}))}))},e.prototype.sendTrackDelivery=function(e,t,n){return _e(this,void 0,void 0,(function(){var r=this;return Ce(this,(function(o){switch(o.label){case 0:return[4,ee.request((function(){return _e(r,void 0,void 0,(function(){var r,o,i,a;return Ce(this,(function(s){switch(s.label){case 0:return[4,this.templateEngine.render("data/email/template/trackDelivery",n,"data/email/element/text")];case 1:return r=s.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:r,base:n.base})];case 2:return o=s.sent(),[4,this.templateEngine.render("data/email/template/trackDelivery",n,"data/email/element/html")];case 3:return i=s.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:i,base:n.base})];case 4:return a=s.sent(),[4,this.sendNotification(e,[{recipient:t,subject:n.base.subject,text:o,html:a}],!1)];case 5:return[2,s.sent()]}}))}))}),0,F.error.bind(F))];case 1:return[2,o.sent()]}}))}))},e.prototype.sendUserNotification=function(e,t,n,r,o){return void 0===r&&(r=!0),_e(this,void 0,void 0,(function(){var i=this;return Ce(this,(function(a){switch(a.label){case 0:return[4,ee.request((function(){return _e(i,void 0,void 0,(function(){var i,a,s,u;return Ce(this,(function(c){switch(c.label){case 0:return[4,this.templateEngine.render("data/email/template/userNotification",n,"data/email/element/text")];case 1:return i=c.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:i,base:n.base,isCommercial:r})];case 2:return a=c.sent(),[4,this.templateEngine.render("data/email/template/userNotification",n,"data/email/element/html")];case 3:return s=c.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:s,base:n.base,isCommercial:r})];case 4:return u=c.sent(),[4,this.sendNotification(e,[{recipient:t,subject:n.base.subject,text:a,html:u}],r,o)];case 5:return[2,c.sent()]}}))}))}),0,F.error.bind(F))];case 1:return[2,a.sent()]}}))}))},e.prototype.sendUsersNotifications=function(e,t,n,r){return _e(this,void 0,void 0,(function(){var o=this;return Ce(this,(function(i){switch(i.label){case 0:return[4,ee.request((function(){return _e(o,void 0,void 0,(function(){var o,i=this;return Ce(this,(function(a){switch(a.label){case 0:return o=[],[4,le(t,(function(e){return _e(i,void 0,void 0,(function(){var t,r,i,a;return Ce(this,(function(s){switch(s.label){case 0:return[4,this.templateEngine.render("data/email/template/userNotification",e.data,"data/email/element/text")];case 1:return t=s.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:t,base:e.data.base,isCommercial:n})];case 2:return r=s.sent(),[4,this.templateEngine.render("data/email/template/userNotification",e.data,"data/email/element/html")];case 3:return i=s.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:i,base:e.data.base,isCommercial:n})];case 4:return a=s.sent(),o.push({recipient:e.recipient,subject:e.data.base.subject,text:r,html:a}),[2]}}))}))}))];case 1:return a.sent(),[4,this.sendNotification(e,o,n,r)];case 2:return[2,a.sent()]}}))}))}),0,F.error.bind(F))];case 1:return[2,i.sent()]}}))}))},e.prototype.sendDiscount=function(e,t,n,r,o){return void 0===r&&(r=!0),_e(this,void 0,void 0,(function(){var i=this;return Ce(this,(function(a){switch(a.label){case 0:return[4,ee.request((function(){return _e(i,void 0,void 0,(function(){var i,a,s,u;return Ce(this,(function(c){switch(c.label){case 0:return[4,this.templateEngine.render("data/email/template/discount",n,"data/email/element/text")];case 1:return i=c.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:i,base:n.base,isCommercial:r})];case 2:return a=c.sent(),[4,this.templateEngine.render("data/email/template/discount",n,"data/email/element/html")];case 3:return s=c.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:s,base:n.base,isCommercial:r})];case 4:return u=c.sent(),[4,this.sendNotification(e,[{recipient:t,subject:n.base.subject,text:a,html:u}],r,o)];case 5:return[2,c.sent()]}}))}))}),0,F.error.bind(F))];case 1:return[2,a.sent()]}}))}))},e.prototype.sendDiscounts=function(e,t,n,r){return void 0===n&&(n=!0),_e(this,void 0,void 0,(function(){var o=this;return Ce(this,(function(i){switch(i.label){case 0:return[4,ee.request((function(){return _e(o,void 0,void 0,(function(){var o,i=this;return Ce(this,(function(a){switch(a.label){case 0:return o=[],[4,le(t,(function(e){return _e(i,void 0,void 0,(function(){var t,r,i,a;return Ce(this,(function(s){switch(s.label){case 0:return[4,this.templateEngine.render("data/email/template/discount",e.data,"data/email/element/text")];case 1:return t=s.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:t,base:e.data.base,isCommercial:n})];case 2:return r=s.sent(),[4,this.templateEngine.render("data/email/template/discount",e.data,"data/email/element/html")];case 3:return i=s.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:i,base:e.data.base,isCommercial:n})];case 4:return a=s.sent(),o.push({recipient:e.recipient,subject:e.data.base.subject,text:r,html:a}),[2]}}))}))}))];case 1:return a.sent(),[4,this.sendNotification(e,o,n,r)];case 2:return[2,a.sent()]}}))}))}),0,F.error.bind(F))];case 1:return[2,i.sent()]}}))}))},e.prototype.sendNotification=function(e,t,n,r){return void 0===n&&(n=!1),_e(this,void 0,void 0,(function(){var o,i,a=this;return Ce(this,(function(s){switch(s.label){case 0:if(0===t.length)throw new h("email: missing messages");s.label=1;case 1:return s.trys.push([1,6,,7]),this.mode!==L.TEST?[3,2]:(F.info("Simulation Mode: Email has been sent",{sender:e,recipients:t.map((function(e){return e.recipient}))}),[3,5]);case 2:return o=[],[4,le(t,(function(t){return _e(a,void 0,void 0,(function(){return Ce(this,(function(i){return this.mode===L.DEVELOPMENT&&(t.recipient.contact="developer@onylab.com"),o.push({From:{Name:e.name,Email:e.contact},To:[{Name:t.recipient.name,Email:t.recipient.contact}],Subject:t.subject,TextPart:t.text,HTMLPart:t.html,Priority:n?0:2,customID:void 0===r?void 0:String(r)}),[2]}))}))}))];case 3:return s.sent(),[4,this.mailjet.post("send",{version:"v3.1"}).request({Messages:o})];case 4:s.sent(),s.label=5;case 5:return[3,7];case 6:throw i=s.sent(),new p(i.message,Number(i.statusCode));case 7:return[2]}}))}))},e}(),Me=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},Ae=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:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){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,s])}}},De=function(){function e(t,n){this.filesystem=new ye,void 0!==e.root&&e.root===t||(e.root=t,e.config=void 0);var r=void 0===n?R.getMode():n;void 0!==e.environment&&e.environment===r||(e.environment=void 0===n?R.getMode():n,e.config=void 0)}return e.prototype.full=function(){return Me(this,void 0,void 0,(function(){return Ae(this,(function(t){switch(t.label){case 0:return[4,this.init()];case 1:return t.sent(),[2,e.config]}}))}))},e.prototype.init=function(){return Me(this,void 0,void 0,(function(){var t,n,r,o;return Ae(this,(function(i){switch(i.label){case 0:return void 0!==e.config?[3,6]:void 0!==e.root?[3,1]:(e.config={},[3,6]);case 1:return t=e,[4,this.filesystem.readJson(e.root+"data/config.json")];case 2:if(t.config=i.sent(),![L.DEVELOPMENT,L.TEST].includes(e.environment))return[3,6];i.label=3;case 3:return i.trys.push([3,5,,6]),n=e,r=ue.merge,o=[e.config],[4,this.filesystem.readJson(e.root+"data/config_"+String(e.environment)+".json")];case 4:return n.config=r.apply(void 0,o.concat([i.sent()])),[3,6];case 5:return i.sent(),[3,6];case 6:return[2]}}))}))},e}();const je=require("typeorm");var Ne=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},Ie=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:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){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,s])}}},ke=function(){function e(e){this.root=e}return e.prototype.connect=function(e,t){return Ne(this,void 0,void 0,(function(){var n,r;return Ie(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,je.createConnection)(n)]);case 3:return r.connection=o.sent(),[3,5];case 4:F.error(new h("bad connection name")),o.label=5;case 5:return[2]}}))}))},e.prototype.synchronize=function(){return Ne(this,void 0,void 0,(function(){return Ie(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 Ne(this,void 0,void 0,(function(){return Ie(this,(function(e){return[2,this.connection.close()]}))}))},e.prototype.init=function(){return Ne(this,void 0,void 0,(function(){var e,t;return Ie(this,(function(n){switch(n.label){case 0:return void 0!==this.root?[3,1]:(this.db={},[3,3]);case 1:return e=new ye,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 Le=require("prettyjson");var Re=function(){function e(){}return e.prototype.error=function(e){F.error(e)},e.prototype.info=function(e){F.trace(e)},e.prototype.json=function(e){F.trace(Le.render(e,{}))},e.prototype.success=function(e){F.trace(e)},e}(),Fe=function(){function e(){this.fileSystem=new ye}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:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){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,s])}}}(this,(function(i){switch(i.label){case 0:return void 0===n&&(n=z.randomBytes(20).toString("hex")+ae.extname(e)),[4,this.fileSystem.write(t+ae.sep+n,"")];case 1:return i.sent(),r=ae.resolve(t+ae.sep+n),o=ce.createWriteStream(r),[4,Y()({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{u(a.next(e))}catch(e){t(e)}}function s(e){try{u(a.throw(e))}catch(e){t(e)}}function u(t){var r;t.done?e(t.value):(r=t.value,r instanceof i?r:new i((function(e){e(r)}))).then(n,s)}u((a=a.apply(r,o||[])).next())}));var r,o,i,a},e}(),qe=function(e){return null==e};const He=require("fast-diff");var Ue=function(){function e(){}return e.escapeRegExp=function(e){return"string"!=typeof e?e:e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")},e.hash=function(e,t){void 0===t&&(t=0);for(var n=3735928559^t,r=1103547991^t,o=0,i=void 0;o<e.length;o++)i=e.charCodeAt(o),n=Math.imul(n^i,2654435761),r=Math.imul(r^i,1597334677);return n=Math.imul(n^n>>>16,2246822507),n^=Math.imul(r^r>>>13,3266489909),r=Math.imul(r^r>>>16,2246822507),((r^=Math.imul(n^n>>>13,3266489909))>>>0).toString(16).padStart(8,"0")+(n>>>0).toString(16).padStart(8,"0")},e.nullable=function(e){return qe(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 qe(e)||e.length<=t?e:t<=3?"":e.slice(0,t-3)+"..."},e}(),ze=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(893),o=void 0;null!==(o=r().exec(t));)try{t=(t=(t=t.replace(new RegExp("\\s"+Ue.escapeRegExp(o[0]),"g"),"")).replace(new RegExp(Ue.escapeRegExp(o[0])+"\\s","g"),"")).replace(new RegExp(Ue.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.substring(3):e.startsWith("+33")?e="0"+e.substring(3):e.startsWith("0033")?e="0"+e.substring(4):e.startsWith("33")&&11===e.length&&(e="0"+e.substring(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.substring(1)),"+33"+e):e},e}(),Ge=function(){function e(){}return e.autoCorrectCity=function(t){if(qe(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 s=e.CITIES.find((function(e){return t.toLowerCase().includes(e.toLowerCase())}));return void 0!==s?s:t},e.autoCorrectStreet=function(e){if(qe(e)||"string"!=typeof e||0===e.length)return e;e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=e.replace(/(\sav\s)/gi," avenue ")).replace(/(\sav\.\s)/gi," avenue ")).replace(/(\sbd\s)/gi," boulevard ")).replace(/(\sbd\.\s)/gi," boulevard ")).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 ")).replace(/(\sham\.\s)/gi," hameau ")).replace(/(\sdom\.\s)/gi," domaine ");var t=new RegExp("^(0+)[0-9]+,?\\s[a-zA-Z]+"),n=e.match(t);return null!==n&&2===n.length&&(e=e.substring(n[1].length)),e},e.getZipCodeFromCity=function(t){if(!qe(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)||ne.isNumber(t)&&5===t.length&&!t.includes(".")&&!t.includes("-"))},e.parse=function(t,n){void 0===n&&(n=!0);var r={};if(!qe(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 s=t.toLowerCase();e.ZIPCODES.forEach((function(e){if(s.includes(e)){r.zip=e;try{s=s.replace(new RegExp(Ue.escapeRegExp(e),"ig"),"")}catch(e){}}})),e.CITIES.forEach((function(t){var n;if(s.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{s=s.replace(new RegExp(Ue.escapeRegExp(t),"ig"),"")}catch(e){}}})),e.COUNTRIES.forEach((function(e){if(s.includes(" "+e.toLowerCase())&&!s.includes("de "+e.toLowerCase())&&!s.includes("de la "+e.toLowerCase())){r.country=e;try{s=s.replace(new RegExp(Ue.escapeRegExp(" "+e),"ig"),"")}catch(e){}}})),void 0===r.street&&(r.street=(0,ue.trim)(s.split(",").map((function(e){return e.trim()})).join(" "),"-").trim())}void 0===r.country&&(r.country="France")}return void 0!==r.street&&(r.street=ze.lower(ze.trim(String(r.street)))),void 0!==r.zip&&(r.zip=ze.upper(ze.trim(String(r.zip)))),void 0!==r.city&&(r.city=e.autoCorrectCity(ze.capitalize(ze.trim(String(r.city))))),void 0!==r.country&&(r.country=ze.capitalize(ze.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=Ue.removeText(t.street,e).trim()})),"fr"===ze.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 He(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","95600"],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"],78100:["Saint-Germain-en-Laye"],95100:["Argenteuil"],78630:["Orgeval","Morainvilliers"],78670:["Villennes-sur-Seine","Medan"],78240:["Chambourcy","Aigremont"],78300:["Poissy"],78955:["Carrières-sous-Poissy"],78260:["Achères"],78540:["Vernouillet"],78920:["Ecquevilly"],95150:["Taverny"],95250:["Beauchamp"],95480:["Pierrelaye"],95320:["Saint-Leu-la-Forêt"],95550:["Bessancourt"],95370:["Montigny-les-Cormeilles"],95220:["Herblay"],95740:["Frépillon"],95540:["Méry-sur-Oise"],95870:["Bezons"],78420:["Carrières-sur-Seine"],78400:["Chatou"],78110:["Le Vésinet"],78360:["Montesson"],78290:["Croissy-sur-Seine"],78230:["Le Pecq"],95600:["Eaubonne"]},e.REGIONS=["île-de-france"],e.COUNTRIES=["France","FR"],e}(),We=function(){function e(){}return e.getCycleDateFromFullDate=function(e,t){if("weekly"===t){var n=X.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?X.DateTime.fromISO(e).toFormat("yyyy-LL"):X.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 s={daily:{day:1},weekly:{week:1},monthly:{month:1}}[a],u=X.DateTime.fromISO(t,{setZone:!0}).toISODate(),c=X.DateTime.fromISO(n,{setZone:!0}).toISODate(),l=0,f={};u<=c&&l<i;){var p=e.getCycleDateFromFullDate(u,a);f[p]=(0,ue.cloneDeep)(r),o&&(f[p].date=p),u=X.DateTime.fromISO(u,{setZone:!0}).plus(s).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=X.DateTime.fromISO(e,{setZone:!0}).toISO(),o=X.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.delay=function(e,t,n){return qe(e)||qe(t)?0:Math.round(Math.abs(X.DateTime.fromISO(e,{setZone:!0}).toUTC().diff(X.DateTime.fromISO(t,{setZone:!0}).toUTC(),[n])[n]))},e.round=function(e,t){if(void 0===t&&(t=0),"string"!=typeof e)return e;var n=X.DateTime.fromISO(e,{setZone:!0});return X.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}(),Ze=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}(),Be=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):Math.round(e*Math.pow(10,t))/Math.pow(10,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}(),Ve=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}(),Je=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(Be.round(r,n))},e.calculateTaxes=function(e,t){var n=0;return t.forEach((function(t){n+=e*t})),Be.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(Be.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(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={893:e=>{e.exports=require("emoji-regex")}},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:()=>s,Util:()=>u});var e={};n.r(e),n.d(e,{Path:()=>l});var t={};n.r(t),n.d(t,{BadParameterException:()=>h,BadRequestException:()=>y,ConflictException:()=>b,DuplicateException:()=>w,ExternalApiException:()=>S,InternalException:()=>O,MainException:()=>p,NotImplementedException:()=>_,ObjectNotFoundException:()=>P,PageNotFoundException:()=>A,UnauthorizedException:()=>j});var o={};n.r(o),n.d(o,{AuthenticationMiddleware:()=>U,AuthorizationMiddleware:()=>z,HandlerController:()=>H,Server:()=>$});var i={};n.r(i),n.d(i,{EmailSenderService:()=>Me,SmsSenderService:()=>ae});var a={};n.r(a),n.d(a,{TemplateEngine:()=>Te});var s={};n.r(s),n.d(s,{Configuration:()=>je,Database:()=>Le,Displayer:()=>Fe,Downloader:()=>qe,Env:()=>L,Environment:()=>R,FileSystem:()=>me,Logger:()=>q,Retry:()=>te});var u={};n.r(u),n.d(u,{AddressUtil:()=>Ge,DateUtil:()=>We,ExtractorUtil:()=>Ze,FormatterUtil:()=>ze,GeneratorUtil:()=>he,MathUtil:()=>Be,ObjectUtil:()=>Ve,PriceUtil:()=>Je,StringUtil:()=>Ue,ValidatorUtil:()=>re,asyncForEach:()=>fe,isNullOrUndefined:()=>F,wait:()=>pe});var c,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=(c=function(e,t){return c=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])},c(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}c(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),d=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)}}(),h=function(e){function t(t,n){var r=e.call(this,t,400,n)||this;return r.name="BadParameterException",r}return d(t,e),t}(p),v=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)}}(),y=function(e){function t(t,n){var r=e.call(this,t,400,n)||this;return r.name="BadRequestException",r}return v(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)}}(),b=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),g=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 g(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),T=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)}}(),_=function(e){function t(t,n){var r=e.call(this,t,501,n)||this;return r.name="NotImplementedException",r}return T(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),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)}}(),A=function(e){function t(t,n){var r=e.call(this,t,404,n)||this;return r.name="PageNotFoundException",r}return M(t,e),t}(p),D=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 D(t,e),t.ERROR_CODE=401,t}(p);const N=require("@sentry/node"),I=require("@sentry/tracing"),k=require("@sentry/integrations");var L;!function(e){e.PRODUCTION="prod",e.DEVELOPMENT="dev",e.TEST="test"}(L||(L={}));var R=function(){function e(){}return e.getMode=function(){switch(process.env.NODE_ENV){case"dev":case"development":return L.DEVELOPMENT;case"prod":case"production":return L.PRODUCTION;case"test":return L.TEST}return void 0===process.env.APP_ID?L.DEVELOPMENT:L.PRODUCTION},e}(),F=function(e){return null==e},q=function(){function e(){}return e.init=function(e,t){R.getMode()===L.PRODUCTION&&N.init({dsn:e,integrations:[new k.CaptureConsole({levels:["error","warn","log"]}),new N.Integrations.Http({tracing:!0}),new I.Integrations.Express({app:t})],environment:R.getMode(),maxBreadcrumbs:50,tracesSampleRate:0,tracesSampler:function(e){var t,n;return"number"!=typeof(null===(t=e.transactionContext)||void 0===t?void 0:t.startTimestamp)||"number"!=typeof(null===(n=e.transactionContext)||void 0===n?void 0:n.endTimestamp)||(e.transactionContext.endTimestamp,e.transactionContext.startTimestamp),0}})},e.trace=function(e,t){[L.DEVELOPMENT,L.TEST].includes(R.getMode())?void 0===t?console.info(e):console.info(e,t):N.addBreadcrumb({category:"info",message:e,data:t,level:"info"})},e.debug=function(e,t){[L.DEVELOPMENT,L.TEST].includes(R.getMode())?void 0===t?console.log(e):console.log(e,t):N.addBreadcrumb({category:"debug",message:e,data:t,level:"debug"})},e.info=function(e,t){[L.DEVELOPMENT,L.TEST].includes(R.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){F(e.response)||("object"!=typeof t&&(t={}),t.requestErrorData=e.response.data),[L.DEVELOPMENT,L.TEST].includes(R.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)||(F(e.response)||("object"!=typeof t&&(t={}),t.requestErrorData=e.response.data),[L.DEVELOPMENT,L.TEST].includes(R.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.tracingHandler=function(){return N.Handlers.tracingHandler()},e.errorHandler=function(){return N.Handlers.errorHandler()},e}(),H=function(){function e(){}return e.error=function(e,t,n){q.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||void 0===e.configuration.none||(o=e.authNone(t)),!o)throw new j("request is not authenticate");r()}catch(e){H.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.prototype.authNone=function(e){return!(!Array.isArray(this.configuration.none.urlStartsWith)||void 0===this.configuration.none.urlStartsWith.find((function(t){var n;return null===(n=e.originalUrl)||void 0===n?void 0:n.startsWith(t)}))||(e.session={},0))},e}(),z=function(){function e(){}return e.prototype.can=function(e,t){},e}();const G=require("crypto"),W=require("express"),Z=require("cors"),B=require("compression"),V=require("helmet"),J=require("connect-timeout");var $=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:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){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,s])}}}(this,(function(i){return void 0===this.app&&(r=n||e.DEFAULT_PORT,o="http://localhost:"+String(r),q.debug("start server on "+o),this.app=W(),this.app.set("trust proxy",!0),this.app.use(B({level:-1})),this.app.use(J("300s")),this.app.use(W.json({inflate:!0,limit:"10mb",reviver:null,strict:!0,type:"application/json",verify:void 0})),this.app.use(W.urlencoded({limit:"10mb"})),this.app.use(Z({origin:[o].concat(t),credentials:!0})),this.app.use(V()),this.app.use(W.json()),this.app.listen(r,(function(){q.debug("server is running on "+o)}))),[2,this.app]}))},new((i=void 0)||(i=Promise))((function(e,t){function n(e){try{u(a.next(e))}catch(e){t(e)}}function s(e){try{u(a.throw(e))}catch(e){t(e)}}function u(t){var r;t.done?e(t.value):(r=t.value,r instanceof i?r:new i((function(e){e(r)}))).then(n,s)}u((a=a.apply(r,o||[])).next())}));var r,o,i,a},e.prototype.getSessionSecret=function(t){return G.createHash("sha1").update(t+e.SALT).digest("hex")},e.DEFAULT_PORT=8080,e.SALT="03561b4a0fe7f125025",e}();const Y=require("axios");var X=n.n(Y);const K=require("luxon"),Q=require("querystring"),ee=require("retry");var te=function(){function e(){}return e.request=function(e,t,n){return void 0===t&&(t=2),r=this,o=void 0,a=function(){var r;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:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){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,s])}}}(this,(function(o){return r=ee.operation({retries:t,factor:1,minTimeout:0,maxTimeout:0,randomize:!1}),[2,new Promise((function(t,o){r.attempt((function(){e().then(t).catch((function(e){r.retry(e)?"function"==typeof n&&n(e):o(e)}))}))}))]}))},new((i=void 0)||(i=Promise))((function(e,t){function n(e){try{u(a.next(e))}catch(e){t(e)}}function s(e){try{u(a.throw(e))}catch(e){t(e)}}function u(t){var r;t.done?e(t.value):(r=t.value,r instanceof i?r:new i((function(e){e(r)}))).then(n,s)}u((a=a.apply(r,o||[])).next())}));var r,o,i,a},e}();const ne=require("urlencode");var re=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}(),oe=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},ie=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:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){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,s])}}},ae=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),oe(this,void 0,void 0,(function(){var a,s=this;return ie(this,(function(u){switch(u.label){case 0:return 0===(a=this.checkPhoneFormat(r)).length?(q.warning(new h("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,te.request((function(){return oe(s,void 0,void 0,(function(){var r,s,u;return ie(this,(function(c){switch(c.label){case 0:return r={accessToken:this.token,emetteur:t,message:ne(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=K.DateTime.fromISO(i,{setZone:!0}).toFormat("ddMMyyyy-HH:mm")),s=K.DateTime.fromISO(null!=i?i:(new Date).toISOString(),{setZone:!0}).setZone("Europe/Paris"),o?s.hour>=21?r.date_envoi=s.plus({day:1}).set({hour:9}).toFormat("ddMMyyyy-HH:mm"):s.hour<9&&(r.date_envoi=s.set({hour:9}).toFormat("ddMMyyyy-HH:mm")):s.hour<8&&(r.date_envoi=s.set({hour:8}).toFormat("ddMMyyyy-HH:mm")),this.mode!==L.TEST?[3,1]:(q.info("Simulation Mode: SMS has been sent",{params:r}),[3,3]);case 1:return this.mode===L.DEVELOPMENT&&(a=["+15145705214"]),[4,X().post(e.BASE_API_URL+"sendSMS.do",Q.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]}}))}))}),0,q.error.bind(q))]);case 1:return u.sent(),[2]}}))}))},e.prototype.checkPhoneFormat=function(e){return e.filter((function(e){return re.isIntMobilePhone(e)}))},e.BASE_API_URL="https://api.smsmode.com/http/1.6/",e.MESSAGE_MAX_LENGTH=150,e}();const se=require("path"),ue=require("mustache"),ce=require("lodash"),le=require("fs");var fe=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:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){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,s])}}}(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{u(i.next(e))}catch(e){t(e)}}function s(e){try{u(i.throw(e))}catch(e){t(e)}}function u(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o((function(e){e(n)}))).then(a,s)}u((i=i.apply(n,r||[])).next())}));var n,r,o,i},pe=function(e){return new Promise((function(t){return setTimeout(t,e)}))};const de=require("color-name");var he=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.color=function(t){void 0===t&&(t=1);var n=e.rgbToHex(Math.round(255*t)),r="#000000"+n,o=Object.values(de);if(0===o.length)return r;var i=o[e.int(0,o.length-1)];return 3!==i.length?r:"#"+e.rgbToHex(i[0])+e.rgbToHex(i[1])+e.rgbToHex(i[2])+n},e.rgbToHex=function(e){var t=e.toString(16);return 1===t.length?"0"+t:t},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}(),ve=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((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:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){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,s])}}},me=function(){function e(){}return e.prototype.dirPath=function(e){var t=se.resolve(e).lastIndexOf(se.sep);return t<0?e:se.resolve(se.resolve(e).substr(0,t+1))+se.sep},e.prototype.listFiles=function(e){return ve(this,void 0,void 0,(function(){var t,n,r,o=this;return ye(this,(function(i){switch(i.label){case 0:if(!this.isDir(e))throw new h(String(e)+" does not exist or is not a directory");return t=e.endsWith("/")?"":"/",n=le.readdirSync(e),r=[],[4,fe(n,(function(n){return ve(o,void 0,void 0,(function(){return ye(this,(function(o){return this.isFile(e+t+n)&&r.push(e+t+n),[2]}))}))}))];case 1:return i.sent(),[2,r]}}))}))},e.prototype.randomFile=function(e,t){return ve(this,void 0,void 0,(function(){var n,r;return ye(this,(function(o){switch(o.label){case 0:return[4,this.listFiles(e)];case 1:return 0===(n=o.sent()).length?[2,void 0]:(r=void 0!==t?Math.max(t,0)%n.length:he.int(0,n.length-1),[2,n[r]])}}))}))},e.prototype.move=function(e,t){return ve(this,void 0,void 0,(function(){return ye(this,(function(n){if(!this.isFile(e))throw new h(String(e)+" does not exist or is not a file");if(le.mkdirSync(t,{recursive:!0}),!this.isDir(t))throw new h(String(t)+" does not exist or is not a directory");return[2,le.renameSync(e,t+se.basename(e))]}))}))},e.prototype.read=function(e){return ve(this,void 0,void 0,(function(){return ye(this,(function(t){if(!this.isFile(e))throw new h(String(e)+" does not exist or is not a file");return[2,le.readFileSync(e,"utf8")]}))}))},e.prototype.readJson=function(e){return ve(this,void 0,void 0,(function(){var t;return ye(this,(function(n){switch(n.label){case 0:return[4,this.read(e)];case 1:if(t=n.sent(),!this.isJson(t))throw new h(String(e)+" does not contain JSON");return[2,JSON.parse(t)]}}))}))},e.prototype.readJsonFiles=function(e){return ve(this,void 0,void 0,(function(){var t,n,r,o=this;return ye(this,(function(i){switch(i.label){case 0:if(!this.isDir(e))throw new h(String(e)+" does not exist or is not a directory");return t=e.endsWith("/")?"":"/",n=le.readdirSync(e),r=[],[4,fe(n,(function(n){return ve(o,void 0,void 0,(function(){var o,i,a;return ye(this,(function(s){switch(s.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=s.sent(),a)]),s.label=2;case 2:return[2]}}))}))}))];case 1:return i.sent(),[2,r]}}))}))},e.prototype.write=function(e,t){return ve(this,void 0,void 0,(function(){var n;return ye(this,(function(r){return"",n="string"==typeof t||"number"==typeof t?String(t):JSON.stringify(t),le.mkdirSync(this.dirPath(e),{recursive:!0}),le.writeFileSync(e,n,{encoding:"utf8"}),[2,Promise.resolve()]}))}))},e.prototype.writeJson=function(e,t){return ve(this,void 0,void 0,(function(){return ye(this,(function(n){return[2,this.write(e,JSON.stringify(t))]}))}))},e.prototype.isDir=function(e){return le.existsSync(e)&&le.statSync(e).isDirectory()},e.prototype.isFile=function(e){return le.existsSync(e)&&le.statSync(e).isFile()},e.prototype.isJson=function(e){try{return JSON.parse(e),!0}catch(e){return!1}},e}();const be=require("clean-css"),ge=require("html-minifier-terser");var we=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},Ee=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:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){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,s])}}},Se=function(){function e(){}return e.prototype.css=function(e){return we(this,void 0,void 0,(function(){return Ee(this,(function(t){return[2,new be({compatibility:"ie7",format:!1,level:1,sourceMap:!1}).minify(e).styles]}))}))},e.prototype.html=function(e){return we(this,void 0,void 0,(function(){return Ee(this,(function(t){switch(t.label){case 0:return[4,(0,ge.minify)(e,{collapseBooleanAttributes:!0,collapseInlineTagWhitespace:!0,collapseWhitespace:!0,continueOnParseError:!1,decodeEntities:!1,html5:!0,minifyCSS:!0,minifyJS:!0,noNewlinesBeforeTagClose:!0,preserveLineBreaks:!1,preventAttributesEscaping:!1,processConditionalComments:!1,quoteCharacter:'"',removeAttributeQuotes:!1,removeComments:!0,removeEmptyAttributes:!0,removeEmptyElements:!0,removeOptionalTags:!1,removeRedundantAttributes:!0,removeScriptTypeAttributes:!1,removeStyleLinkTypeAttributes:!1,removeTagWhitespace:!1})];case 1:return[2,t.sent()]}}))}))},e}(),xe=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},Oe=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:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){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,s])}}},Te=function(){function e(){this.minifier=new Se}return e.prototype.render=function(e,t,n){return xe(this,void 0,void 0,(function(){var r,o,i,a,s,u=this;return Oe(this,(function(c){switch(c.label){case 0:return e.endsWith(".template")||(e+=".template"),r=(0,ce.cloneDeep)(t),o=se.isAbsolute(e)?"":__dirname+se.sep,[4,(new me).read(o+e)];case 1:return i=c.sent(),a=[],(0,ue.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=se.dirname(o+e)+se.sep:se.isAbsolute(n)||(n=o+n),[4,fe(a,(function(e){return xe(u,void 0,void 0,(function(){var t,o,i,a;return Oe(this,(function(s){switch(s.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]=Array.isArray(r[e][t])?r[e][t].map((function(e){return e.replace(/(?:\r\n|\r|\n)/g,"<br>")})):r[e][t].replace(/(?:\r\n|\r|\n)/g,"<br>")})),i=r,a=e,[4,this.render(se.resolve(n,o),r[e])]);case 1:i[a]=s.sent(),s.label=2;case 2:return[2]}}))}))}))]):[3,3];case 2:c.sent(),c.label=3;case 3:if((s=(0,ue.render)(i,r)).includes("{{")||s.includes("}}"))throw new b("template: missing data to render template",{templatePath:e,data:t});return[2,e.includes("html")?this.minifier.html(s):s]}}))}))},e}();const _e=require("node-mailjet");var Ce=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((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:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){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,s])}}},Me=function(){function e(e,t,n){this.templateEngine=new Te,this.mailjet=_e.connect(e,t),this.mode=n}return e.prototype.sendDeliveryDelay=function(e,t,n){return Ce(this,void 0,void 0,(function(){var r=this;return Pe(this,(function(o){switch(o.label){case 0:return[4,te.request((function(){return Ce(r,void 0,void 0,(function(){var r,o;return Pe(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,[{recipient:t,subject:n.base.subject,text:r,html:o}],!1)];case 3:return[2,i.sent()]}}))}))}),0,q.error.bind(q))];case 1:return[2,o.sent()]}}))}))},e.prototype.sendTrackDelivery=function(e,t,n){return Ce(this,void 0,void 0,(function(){var r=this;return Pe(this,(function(o){switch(o.label){case 0:return[4,te.request((function(){return Ce(r,void 0,void 0,(function(){var r,o,i,a;return Pe(this,(function(s){switch(s.label){case 0:return[4,this.templateEngine.render("data/email/template/trackDelivery",n,"data/email/element/text")];case 1:return r=s.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:r,base:n.base})];case 2:return o=s.sent(),[4,this.templateEngine.render("data/email/template/trackDelivery",n,"data/email/element/html")];case 3:return i=s.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:i,base:n.base})];case 4:return a=s.sent(),[4,this.sendNotification(e,[{recipient:t,subject:n.base.subject,text:o,html:a}],!1)];case 5:return[2,s.sent()]}}))}))}),0,q.error.bind(q))];case 1:return[2,o.sent()]}}))}))},e.prototype.sendUserNotification=function(e,t,n,r,o){return void 0===r&&(r=!0),Ce(this,void 0,void 0,(function(){var i=this;return Pe(this,(function(a){switch(a.label){case 0:return[4,te.request((function(){return Ce(i,void 0,void 0,(function(){var i,a,s,u;return Pe(this,(function(c){switch(c.label){case 0:return[4,this.templateEngine.render("data/email/template/userNotification",n,"data/email/element/text")];case 1:return i=c.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:i,base:n.base,isCommercial:r})];case 2:return a=c.sent(),[4,this.templateEngine.render("data/email/template/userNotification",n,"data/email/element/html")];case 3:return s=c.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:s,base:n.base,isCommercial:r})];case 4:return u=c.sent(),[4,this.sendNotification(e,[{recipient:t,subject:n.base.subject,text:a,html:u}],r,o)];case 5:return[2,c.sent()]}}))}))}),0,q.error.bind(q))];case 1:return[2,a.sent()]}}))}))},e.prototype.sendUsersNotifications=function(e,t,n,r){return Ce(this,void 0,void 0,(function(){var o=this;return Pe(this,(function(i){switch(i.label){case 0:return[4,te.request((function(){return Ce(o,void 0,void 0,(function(){var o,i=this;return Pe(this,(function(a){switch(a.label){case 0:return o=[],[4,fe(t,(function(e){return Ce(i,void 0,void 0,(function(){var t,r,i,a;return Pe(this,(function(s){switch(s.label){case 0:return[4,this.templateEngine.render("data/email/template/userNotification",e.data,"data/email/element/text")];case 1:return t=s.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:t,base:e.data.base,isCommercial:n})];case 2:return r=s.sent(),[4,this.templateEngine.render("data/email/template/userNotification",e.data,"data/email/element/html")];case 3:return i=s.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:i,base:e.data.base,isCommercial:n})];case 4:return a=s.sent(),o.push({recipient:e.recipient,subject:e.data.base.subject,text:r,html:a}),[2]}}))}))}))];case 1:return a.sent(),[4,this.sendNotification(e,o,n,r)];case 2:return[2,a.sent()]}}))}))}),0,q.error.bind(q))];case 1:return[2,i.sent()]}}))}))},e.prototype.sendDiscount=function(e,t,n,r,o){return void 0===r&&(r=!0),Ce(this,void 0,void 0,(function(){var i=this;return Pe(this,(function(a){switch(a.label){case 0:return[4,te.request((function(){return Ce(i,void 0,void 0,(function(){var i,a,s,u;return Pe(this,(function(c){switch(c.label){case 0:return[4,this.templateEngine.render("data/email/template/discount",n,"data/email/element/text")];case 1:return i=c.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:i,base:n.base,isCommercial:r})];case 2:return a=c.sent(),[4,this.templateEngine.render("data/email/template/discount",n,"data/email/element/html")];case 3:return s=c.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:s,base:n.base,isCommercial:r})];case 4:return u=c.sent(),[4,this.sendNotification(e,[{recipient:t,subject:n.base.subject,text:a,html:u}],r,o)];case 5:return[2,c.sent()]}}))}))}),0,q.error.bind(q))];case 1:return[2,a.sent()]}}))}))},e.prototype.sendDiscounts=function(e,t,n,r){return void 0===n&&(n=!0),Ce(this,void 0,void 0,(function(){var o=this;return Pe(this,(function(i){switch(i.label){case 0:return[4,te.request((function(){return Ce(o,void 0,void 0,(function(){var o,i=this;return Pe(this,(function(a){switch(a.label){case 0:return o=[],[4,fe(t,(function(e){return Ce(i,void 0,void 0,(function(){var t,r,i,a;return Pe(this,(function(s){switch(s.label){case 0:return[4,this.templateEngine.render("data/email/template/discount",e.data,"data/email/element/text")];case 1:return t=s.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:t,base:e.data.base,isCommercial:n})];case 2:return r=s.sent(),[4,this.templateEngine.render("data/email/template/discount",e.data,"data/email/element/html")];case 3:return i=s.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:i,base:e.data.base,isCommercial:n})];case 4:return a=s.sent(),o.push({recipient:e.recipient,subject:e.data.base.subject,text:r,html:a}),[2]}}))}))}))];case 1:return a.sent(),[4,this.sendNotification(e,o,n,r)];case 2:return[2,a.sent()]}}))}))}),0,q.error.bind(q))];case 1:return[2,i.sent()]}}))}))},e.prototype.sendNotification=function(e,t,n,r){return void 0===n&&(n=!1),Ce(this,void 0,void 0,(function(){var o,i,a=this;return Pe(this,(function(s){switch(s.label){case 0:if(0===t.length)throw new h("email: missing messages");s.label=1;case 1:return s.trys.push([1,6,,7]),this.mode!==L.TEST?[3,2]:(q.info("Simulation Mode: Email has been sent",{sender:e,recipients:t.map((function(e){return e.recipient}))}),[3,5]);case 2:return o=[],[4,fe(t,(function(t){return Ce(a,void 0,void 0,(function(){return Pe(this,(function(i){return this.mode===L.DEVELOPMENT&&(t.recipient.contact="developer@onylab.com"),o.push({From:{Name:e.name,Email:e.contact},To:[{Name:t.recipient.name,Email:t.recipient.contact}],Subject:t.subject,TextPart:t.text,HTMLPart:t.html,Priority:n?0:2,customID:void 0===r?void 0:String(r)}),[2]}))}))}))];case 3:return s.sent(),[4,this.mailjet.post("send",{version:"v3.1"}).request({Messages:o})];case 4:s.sent(),s.label=5;case 5:return[3,7];case 6:throw i=s.sent(),new p(i.message,Number(i.statusCode));case 7:return[2]}}))}))},e}(),Ae=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},De=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:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){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,s])}}},je=function(){function e(t,n){this.filesystem=new me,void 0!==e.root&&e.root===t||(e.root=t,e.config=void 0);var r=void 0===n?R.getMode():n;void 0!==e.environment&&e.environment===r||(e.environment=void 0===n?R.getMode():n,e.config=void 0)}return e.prototype.full=function(){return Ae(this,void 0,void 0,(function(){return De(this,(function(t){switch(t.label){case 0:return[4,this.init()];case 1:return t.sent(),[2,e.config]}}))}))},e.prototype.init=function(){return Ae(this,void 0,void 0,(function(){var t,n,r,o;return De(this,(function(i){switch(i.label){case 0:return void 0!==e.config?[3,6]:void 0!==e.root?[3,1]:(e.config={},[3,6]);case 1:return t=e,[4,this.filesystem.readJson(e.root+"data/config.json")];case 2:if(t.config=i.sent(),![L.DEVELOPMENT,L.TEST].includes(e.environment))return[3,6];i.label=3;case 3:return i.trys.push([3,5,,6]),n=e,r=ce.merge,o=[e.config],[4,this.filesystem.readJson(e.root+"data/config_"+String(e.environment)+".json")];case 4:return n.config=r.apply(void 0,o.concat([i.sent()])),[3,6];case 5:return i.sent(),[3,6];case 6:return[2]}}))}))},e}();const Ne=require("typeorm");var Ie=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},ke=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:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){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,s])}}},Le=function(){function e(e){this.root=e}return e.prototype.connect=function(e,t){return Ie(this,void 0,void 0,(function(){var n,r;return ke(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,Ne.createConnection)(n)]);case 3:return r.connection=o.sent(),[3,5];case 4:q.error(new h("bad connection name")),o.label=5;case 5:return[2]}}))}))},e.prototype.synchronize=function(){return Ie(this,void 0,void 0,(function(){return ke(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 Ie(this,void 0,void 0,(function(){return ke(this,(function(e){return[2,this.connection.close()]}))}))},e.prototype.init=function(){return Ie(this,void 0,void 0,(function(){var e,t;return ke(this,(function(n){switch(n.label){case 0:return void 0!==this.root?[3,1]:(this.db={},[3,3]);case 1:return e=new me,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 Re=require("prettyjson");var Fe=function(){function e(){}return e.prototype.error=function(e){q.error(e)},e.prototype.info=function(e){q.trace(e)},e.prototype.json=function(e){q.trace(Re.render(e,{}))},e.prototype.success=function(e){q.trace(e)},e}(),qe=function(){function e(){this.fileSystem=new me}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:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){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,s])}}}(this,(function(i){switch(i.label){case 0:return void 0===n&&(n=G.randomBytes(20).toString("hex")+se.extname(e)),[4,this.fileSystem.write(t+se.sep+n,"")];case 1:return i.sent(),r=se.resolve(t+se.sep+n),o=le.createWriteStream(r),[4,X()({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{u(a.next(e))}catch(e){t(e)}}function s(e){try{u(a.throw(e))}catch(e){t(e)}}function u(t){var r;t.done?e(t.value):(r=t.value,r instanceof i?r:new i((function(e){e(r)}))).then(n,s)}u((a=a.apply(r,o||[])).next())}));var r,o,i,a},e}();const He=require("fast-diff");var Ue=function(){function e(){}return e.escapeRegExp=function(e){return"string"!=typeof e?e:e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")},e.hash=function(e,t){void 0===t&&(t=0);for(var n=3735928559^t,r=1103547991^t,o=0,i=void 0;o<e.length;o++)i=e.charCodeAt(o),n=Math.imul(n^i,2654435761),r=Math.imul(r^i,1597334677);return n=Math.imul(n^n>>>16,2246822507),n^=Math.imul(r^r>>>13,3266489909),r=Math.imul(r^r>>>16,2246822507),((r^=Math.imul(n^n>>>13,3266489909))>>>0).toString(16).padStart(8,"0")+(n>>>0).toString(16).padStart(8,"0")},e.nullable=function(e){return F(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,ce.toLower)((0,ce.trim)((0,ce.deburr)(e)).replace(/[^0-9a-z\-\_]/gi,t))},e.truncate=function(e,t){return F(e)||e.length<=t?e:t<=3?"":e.slice(0,t-3)+"..."},e}(),ze=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(893),o=void 0;null!==(o=r().exec(t));)try{t=(t=(t=t.replace(new RegExp("\\s"+Ue.escapeRegExp(o[0]),"g"),"")).replace(new RegExp(Ue.escapeRegExp(o[0])+"\\s","g"),"")).replace(new RegExp(Ue.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.substring(3):e.startsWith("+33")?e="0"+e.substring(3):e.startsWith("0033")?e="0"+e.substring(4):e.startsWith("33")&&11===e.length&&(e="0"+e.substring(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.substring(1)),"+33"+e):e},e}(),Ge=function(){function e(){}return e.autoCorrectCity=function(t){if(F(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 s=e.CITIES.find((function(e){return t.toLowerCase().includes(e.toLowerCase())}));return void 0!==s?s:t},e.autoCorrectStreet=function(e){if(F(e)||"string"!=typeof e||0===e.length)return e;e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=e.replace(/(\sav\s)/gi," avenue ")).replace(/(\sav\.\s)/gi," avenue ")).replace(/(\sbd\s)/gi," boulevard ")).replace(/(\sbd\.\s)/gi," boulevard ")).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 ")).replace(/(\sham\.\s)/gi," hameau ")).replace(/(\sdom\.\s)/gi," domaine ");var t=new RegExp("^(0+)[0-9]+,?\\s[a-zA-Z]+"),n=e.match(t);return null!==n&&2===n.length&&(e=e.substring(n[1].length)),e},e.getZipCodeFromCity=function(t){if(!F(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)||re.isNumber(t)&&5===t.length&&!t.includes(".")&&!t.includes("-"))},e.parse=function(t,n){void 0===n&&(n=!0);var r={};if(!F(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 s=t.toLowerCase();e.ZIPCODES.forEach((function(e){if(s.includes(e)){r.zip=e;try{s=s.replace(new RegExp(Ue.escapeRegExp(e),"ig"),"")}catch(e){}}})),e.CITIES.forEach((function(t){var n;if(s.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{s=s.replace(new RegExp(Ue.escapeRegExp(t),"ig"),"")}catch(e){}}})),e.COUNTRIES.forEach((function(e){if(s.includes(" "+e.toLowerCase())&&!s.includes("de "+e.toLowerCase())&&!s.includes("de la "+e.toLowerCase())){r.country=e;try{s=s.replace(new RegExp(Ue.escapeRegExp(" "+e),"ig"),"")}catch(e){}}})),void 0===r.street&&(r.street=(0,ce.trim)(s.split(",").map((function(e){return e.trim()})).join(" "),"-").trim())}void 0===r.country&&(r.country="France")}return void 0!==r.street&&(r.street=ze.lower(ze.trim(String(r.street)))),void 0!==r.zip&&(r.zip=ze.upper(ze.trim(String(r.zip)))),void 0!==r.city&&(r.city=e.autoCorrectCity(ze.capitalize(ze.trim(String(r.city))))),void 0!==r.country&&(r.country=ze.capitalize(ze.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=Ue.removeText(t.street,e).trim()})),"fr"===ze.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 He(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","95600"],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"],78100:["Saint-Germain-en-Laye"],95100:["Argenteuil"],78630:["Orgeval","Morainvilliers"],78670:["Villennes-sur-Seine","Medan"],78240:["Chambourcy","Aigremont"],78300:["Poissy"],78955:["Carrières-sous-Poissy"],78260:["Achères"],78540:["Vernouillet"],78920:["Ecquevilly"],95150:["Taverny"],95250:["Beauchamp"],95480:["Pierrelaye"],95320:["Saint-Leu-la-Forêt"],95550:["Bessancourt"],95370:["Montigny-les-Cormeilles"],95220:["Herblay"],95740:["Frépillon"],95540:["Méry-sur-Oise"],95870:["Bezons"],78420:["Carrières-sur-Seine"],78400:["Chatou"],78110:["Le Vésinet"],78360:["Montesson"],78290:["Croissy-sur-Seine"],78230:["Le Pecq"],95600:["Eaubonne"]},e.REGIONS=["île-de-france"],e.COUNTRIES=["France","FR"],e}(),We=function(){function e(){}return e.getCycleDateFromFullDate=function(e,t){if("weekly"===t){var n=K.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?K.DateTime.fromISO(e).toFormat("yyyy-LL"):K.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 s={daily:{day:1},weekly:{week:1},monthly:{month:1}}[a],u=K.DateTime.fromISO(t,{setZone:!0}).toISODate(),c=K.DateTime.fromISO(n,{setZone:!0}).toISODate(),l=0,f={};u<=c&&l<i;){var p=e.getCycleDateFromFullDate(u,a);f[p]=(0,ce.cloneDeep)(r),o&&(f[p].date=p),u=K.DateTime.fromISO(u,{setZone:!0}).plus(s).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=K.DateTime.fromISO(e,{setZone:!0}).toISO(),o=K.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.delay=function(e,t,n){return F(e)||F(t)?0:Math.round(Math.abs(K.DateTime.fromISO(e,{setZone:!0}).toUTC().diff(K.DateTime.fromISO(t,{setZone:!0}).toUTC(),[n])[n]))},e.round=function(e,t){if(void 0===t&&(t=0),"string"!=typeof e)return e;var n=K.DateTime.fromISO(e,{setZone:!0});return K.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}(),Ze=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}(),Be=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):Math.round(e*Math.pow(10,t))/Math.pow(10,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}(),Ve=function(){function e(){}return e.compact=function(t,n){if(void 0===n&&(n={}),(0,ce.isArray)(t)){var r=[];return t.forEach((function(t){t=e.compact(t,n),((0,ce.isArray)(t)&&t.length>0||(0,ce.isObject)(t)&&Object.keys(t).length>0||null!=t&&!(0,ce.isArray)(t)&&!(0,ce.isObject)(t))&&r.push(t)})),r}if((0,ce.isObject)(t)){var o={};return Object.keys(t).forEach((function(r){var i=t[r];(0,ce.isArray)(i)||(0,ce.isObject)(i)?(i=e.compact(i,n),((0,ce.isArray)(i)&&i.length>0||(0,ce.isObject)(i)&&Object.keys(i).length>0||null!=i&&!(0,ce.isArray)(i)&&!(0,ce.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}(),Je=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(Be.round(r,n))},e.calculateTaxes=function(e,t){var n=0;return t.forEach((function(t){n+=e*t})),Be.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(Be.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})()}));
|
|
2
2
|
//# sourceMappingURL=common-api.node.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common-api.node.min.js","mappings":"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","sources":["webpack://SmilePlayerCommon/webpack/universalModuleDefinition","webpack://SmilePlayerCommon/external commonjs \"emoji-regex\"","webpack://SmilePlayerCommon/webpack/bootstrap","webpack://SmilePlayerCommon/webpack/runtime/compat get default export","webpack://SmilePlayerCommon/webpack/runtime/define property getters","webpack://SmilePlayerCommon/webpack/runtime/hasOwnProperty shorthand","webpack://SmilePlayerCommon/webpack/runtime/make namespace object","webpack://SmilePlayerCommon/./src/constant/Path.ts","webpack://SmilePlayerCommon/./src/exception/MainException.ts","webpack://SmilePlayerCommon/./src/exception/BadParameterException.ts","webpack://SmilePlayerCommon/./src/exception/BadRequestException.ts","webpack://SmilePlayerCommon/./src/exception/ConflictException.ts","webpack://SmilePlayerCommon/./src/exception/DuplicateException.ts","webpack://SmilePlayerCommon/./src/exception/ExternalApiException.ts","webpack://SmilePlayerCommon/./src/exception/InternalException.ts","webpack://SmilePlayerCommon/./src/exception/NotImplementedException.ts","webpack://SmilePlayerCommon/./src/exception/ObjectNotFoundException.ts","webpack://SmilePlayerCommon/./src/exception/PageNotFoundException.ts","webpack://SmilePlayerCommon/./src/exception/UnauthorizedException.ts","webpack://SmilePlayerCommon/external commonjs \"@sentry/node\"","webpack://SmilePlayerCommon/external commonjs \"@sentry/tracing\"","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/external commonjs \"color-name\"","webpack://SmilePlayerCommon/./src/util/GeneratorUtil.ts","webpack://SmilePlayerCommon/./src/tool/FileSystem.ts","webpack://SmilePlayerCommon/external commonjs \"clean-css\"","webpack://SmilePlayerCommon/external commonjs \"html-minifier-terser\"","webpack://SmilePlayerCommon/./src/templating/MinifierEngine.ts","webpack://SmilePlayerCommon/./src/templating/TemplateEngine.ts","webpack://SmilePlayerCommon/external commonjs \"node-mailjet\"","webpack://SmilePlayerCommon/./src/service/sender/EmailSenderService.ts","webpack://SmilePlayerCommon/./src/tool/Configuration.ts","webpack://SmilePlayerCommon/external commonjs \"typeorm\"","webpack://SmilePlayerCommon/./src/tool/Database.ts","webpack://SmilePlayerCommon/external commonjs \"prettyjson\"","webpack://SmilePlayerCommon/./src/tool/Displayer.ts","webpack://SmilePlayerCommon/./src/tool/Downloader.ts","webpack://SmilePlayerCommon/./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/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\");","// 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/tracing\");","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 * as Tracing from '@sentry/tracing';\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';\nimport * as express from 'express';\n\nexport class Logger {\n public static init(sentryToken: string, app: express.Express): void {\n if (Environment.getMode() === Env.PRODUCTION) {\n // const tracesSampleRate: number = 0.001;\n const tracesSampleRate: number = 0; // TODO enable tracing\n Sentry.init({\n dsn: sentryToken,\n integrations: [\n new CaptureConsole({\n levels: ['error', 'warn', 'log']\n }),\n // enable HTTP calls tracing\n new Sentry.Integrations.Http({ tracing: true }),\n // enable Express.js middleware tracing\n new Tracing.Integrations.Express({\n // to trace all requests to the default router\n app\n // alternatively, you can specify the routes you want to trace:\n // router: someRouter,\n })\n ],\n environment: Environment.getMode(),\n maxBreadcrumbs: 50,\n tracesSampleRate: tracesSampleRate,\n tracesSampler: (samplingContext) => {\n if (typeof samplingContext.transactionContext?.startTimestamp !== 'number' || typeof samplingContext.transactionContext?.endTimestamp !== 'number') {\n return tracesSampleRate;\n }\n if (samplingContext.transactionContext.endTimestamp - samplingContext.transactionContext.startTimestamp > 0.75) {\n return tracesSampleRate;\n }\n\n return 0;\n }\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 } else {\n Sentry.addBreadcrumb({\n category: 'info',\n message: message,\n data: extra,\n level: 'info'\n });\n }\n }\n\n public static debug(message: string, extra?: any): void {\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.log(message); // eslint-disable-line no-console\n } else {\n console.log(message, extra); // eslint-disable-line no-console\n }\n } else {\n Sentry.addBreadcrumb({\n category: 'debug',\n message: message,\n data: extra,\n level: 'debug'\n });\n }\n }\n\n public static info(message: string, extra?: any): void {\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.info(message); // eslint-disable-line no-console\n } else {\n console.info(message, extra); // eslint-disable-line no-console\n }\n } else {\n Sentry.withScope(scope => {\n if (extra !== undefined) {\n scope.setExtra('extra', JSON.stringify(extra));\n }\n Sentry.captureMessage(message);\n });\n }\n }\n\n public static warning(error: ExceptionContract, extra?: any): void {\n if((error as any).response !== undefined) {\n if (typeof extra !== 'object') {\n extra = {};\n }\n extra.requestErrorData = (error as any).response.data;\n }\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.warn(error); // eslint-disable-line no-console\n } else {\n console.warn(error, extra); // eslint-disable-line no-console\n }\n } else {\n Sentry.withScope(scope => {\n if (extra !== undefined) {\n scope.setExtra('extra', JSON.stringify(extra));\n }\n if (error.data !== undefined) {\n scope.setExtra('data', JSON.stringify(error.data));\n }\n Sentry.captureException(error);\n });\n }\n }\n\n public static error(error: ExceptionContract, extra?: any): void {\n if ([UnauthorizedException.ERROR_CODE].includes(error.code)) {\n return;\n }\n if((error as any).response !== undefined) {\n if (typeof extra !== 'object') {\n extra = {};\n }\n extra.requestErrorData = (error as any).response.data;\n }\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.error(error); // eslint-disable-line no-console\n } else {\n console.error(error, extra); // eslint-disable-line no-console\n }\n } else {\n Sentry.withScope(scope => {\n if (extra !== undefined) {\n scope.setExtra('extra', JSON.stringify(extra));\n }\n if (error.data !== undefined) {\n scope.setExtra('data', JSON.stringify(error.data));\n }\n Sentry.captureException(error);\n });\n }\n }\n\n public static requestHandler(): any {\n return Sentry.Handlers.requestHandler();\n }\n\n public static tracingHandler(): any {\n return Sentry.Handlers.tracingHandler();\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.set('trust proxy', true);\n this.app.use(compression({level: -1}));\n this.app.use(timeout('300s'));\n this.app.use(express.json({\n inflate: true,\n limit: '10mb',\n reviver: null,\n strict: true,\n type: 'application/json',\n verify: undefined\n }));\n this.app.use(express.urlencoded({\n limit: '10mb'\n }));\n this.app.use(cors({\n origin: [backendLocalUrl].concat(origins),\n credentials: true\n }));\n this.app.use(helmet());\n this.app.use(express.json());\n this.app.listen(backendPort, () => {\n Logger.debug('server is running on ' + backendLocalUrl);\n });\n }\n\n return this.app;\n }\n\n public getSessionSecret(sessionCookieName: string): string {\n return crypto.createHash('sha1').update(sessionCookieName + Server.SALT).digest('hex');\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"axios\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"luxon\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"querystring\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"retry\");","import * as retry from 'retry';\n\nexport class Retry {\n public static async request(process: () => Promise<void>, retries: number = 2, logger: (error: Error) => void): Promise<any> {\n const operation = retry.operation({\n retries: retries,\n factor: 1,\n minTimeout: 0,\n maxTimeout: 0,\n randomize: false\n });\n\n return new Promise<any>((resolve, reject) => {\n operation.attempt(() => {\n process().then(resolve).catch((error) => {\n if (!operation.retry(error)) {\n if (typeof logger === 'function') {\n logger(error);\n }\n 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: Record<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 const target: DateTime = DateTime.fromISO(sendAt ?? (new Date()).toISOString(), { setZone: true }).setZone('Europe/Paris');\n if (isCommercial) { // do not send between 21h and 9h\n if (target.hour >= 21) {\n params.date_envoi = target.plus({day: 1}).set({hour: 9}).toFormat('ddMMyyyy-HH:mm');\n } else if (target.hour < 9) {\n params.date_envoi = target.set({hour: 9}).toFormat('ddMMyyyy-HH:mm');\n }\n } else { // do not send between 00h and 8h\n if (target.hour < 8) {\n params.date_envoi = target.set({hour: 8}).toFormat('ddMMyyyy-HH:mm');\n }\n }\n\n if (this.mode === Env.TEST) {\n Logger.info('Simulation Mode: SMS has been sent', {params: params});\n } else {\n if (this.mode === Env.DEVELOPMENT) {\n phones = ['+15145705214'];\n }\n\n const response: {data: string} = await axios.post(SmsSenderService.BASE_API_URL + 'sendSMS.do',\n querystring.stringify(params, '&', '=', {encodeURIComponent: (p) => p}), {\n timeout: 30000\n });\n\n if (response.data.length > 0 && response.data.trim().substring(0, 1) !== '0') {\n throw new ExternalApiException('Error: ' + response.data, params);\n }\n }\n }, 0, Logger.error.bind(Logger));\n }\n\n private checkPhoneFormat(phones: string[]): string[] {\n return phones.filter((phone) => ValidatorUtil.isIntMobilePhone(phone));\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"path\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"mustache\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"lodash\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"fs\");","export const asyncForEach: (array: any[], callback: (item: any) => Promise<void>) => Promise<void> = async (array, callback) => {\n for (let i: number = 0; i < array.length; i++) { // eslint-disable-line\n await callback(array[i]);\n }\n};\n\nexport const wait: (time: number) => Promise<void> = (time) => {\n return new Promise((resolve) => setTimeout(resolve, time));\n};\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"color-name\");","import * as colors from 'color-name';\n\nexport class GeneratorUtil {\n private static readonly symbolUpperCases: string[] = [\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'K', 'M', 'N', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'\n ];\n private static readonly symbolLowerCases: string[] = [\n 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'k', 'm', 'n', 'p', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'\n ];\n\n public static code(size: number): string {\n if (size === null || size === undefined) {\n size = 6;\n }\n\n let code: string = '';\n while (code.length < size) {\n code += GeneratorUtil.symbolUpperCases[GeneratorUtil.int(0, GeneratorUtil.symbolUpperCases.length - 1)];\n }\n\n return code;\n }\n\n public static color(alpha: number = 1): string {\n const alphaHex: string = GeneratorUtil.rgbToHex(Math.round(255 * alpha));\n const defaultColor: string = '#000000' + alphaHex;\n const colorList: number[][] = Object.values(colors);\n if (colorList.length === 0) {\n return defaultColor;\n }\n const rgb: number[] = colorList[GeneratorUtil.int(0, colorList.length - 1)];\n if (rgb.length !== 3) {\n return defaultColor;\n }\n\n return '#' + GeneratorUtil.rgbToHex(rgb[0]) + GeneratorUtil.rgbToHex(rgb[1]) + GeneratorUtil.rgbToHex(rgb[2]) + alphaHex;\n }\n\n private static rgbToHex(rgb: number): string {\n const hex: string = rgb.toString(16);\n if (hex.length === 1) {\n return '0' + hex;\n }\n\n return hex;\n }\n\n public static int(min: number, max: number): number {\n if (min === null || min === undefined) {\n min = 0;\n }\n if (max === null || max === undefined) {\n max = Number.POSITIVE_INFINITY;\n }\n\n min = Math.ceil(min);\n max = Math.floor(max);\n\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n\n public static password(size: number): string {\n if (size === null || size === undefined) {\n size = 8;\n }\n\n let code: string = '';\n while (code.length < size) {\n switch (GeneratorUtil.int(1, 3)) {\n case 1:\n code += GeneratorUtil.symbolUpperCases[GeneratorUtil.int(0, GeneratorUtil.symbolUpperCases.length - 1)];\n break;\n case 2:\n code += GeneratorUtil.symbolLowerCases[GeneratorUtil.int(0, GeneratorUtil.symbolLowerCases.length - 1)];\n break;\n default:\n code += String(GeneratorUtil.int(0, 9));\n }\n }\n\n return code;\n }\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {BadParameterException} from 'common/exception/BadParameterException';\nimport {asyncForEach} from 'common/util/PromiseUtil';\nimport {GeneratorUtil} from 'common/util/GeneratorUtil';\n\nexport class FileSystem implements FileSystemContract {\n public dirPath(filePath: string): string {\n const i: number = path.resolve(filePath).lastIndexOf(path.sep);\n if (i < 0) {\n return filePath;\n }\n\n return path.resolve(path.resolve(filePath).substr(0, i + 1)) + path.sep;\n }\n\n public async listFiles(dirPath: string): Promise<string[]> {\n if (!this.isDir(dirPath)) {\n throw new BadParameterException(String(dirPath) + ' does not exist or is not a directory');\n }\n\n const separator: string = dirPath.endsWith('/') ? '' : '/';\n const files: string[] = fs.readdirSync(dirPath);\n\n const output: string[] = [];\n await asyncForEach(files, async (fileName: string) => {\n if (this.isFile(dirPath + separator + fileName)) {\n output.push(dirPath + separator + fileName);\n }\n });\n\n return output;\n }\n\n public async randomFile(dirPath: string, suggestion?: number): Promise<string> {\n const filenames: string[] = await this.listFiles(dirPath);\n if (filenames.length === 0) {\n return undefined;\n }\n\n let index: number;\n if (suggestion !== undefined) {\n index = Math.max(suggestion, 0) % filenames.length;\n } else {\n index = GeneratorUtil.int(0, filenames.length - 1);\n }\n\n return filenames[index];\n }\n\n public async move(filePath: string, dirPath: string): Promise<void> {\n if (!this.isFile(filePath)) {\n throw new BadParameterException(String(filePath) + ' does not exist or is not a file');\n }\n\n fs.mkdirSync(dirPath, {recursive: true});\n if (!this.isDir(dirPath)) {\n throw new BadParameterException(String(dirPath) + ' does not exist or is not a directory');\n }\n\n return fs.renameSync(filePath, dirPath + path.basename(filePath));\n }\n\n public async read(filePath: string): Promise<string> {\n if (!this.isFile(filePath)) {\n throw new BadParameterException(String(filePath) + ' does not exist or is not a file');\n }\n\n return fs.readFileSync(filePath, 'utf8');\n }\n\n public async readJson(jsonPath: string): Promise<any> {\n const data: any = await this.read(jsonPath);\n if (!this.isJson(data)) {\n throw new BadParameterException(String(jsonPath) + ' does not contain JSON');\n }\n\n return JSON.parse(data);\n }\n\n public async readJsonFiles(dirPath: string): Promise<{name: string, data: any}[]> {\n if (!this.isDir(dirPath)) {\n throw new BadParameterException(String(dirPath) + ' does not exist or is not a directory');\n }\n\n const separator: string = dirPath.endsWith('/') ? '' : '/';\n const files: string[] = fs.readdirSync(dirPath);\n\n const output: {name: string, data: any}[] = [];\n await asyncForEach(files, async (fileName: string) => {\n if (this.isFile(dirPath + separator + fileName) && fileName.endsWith('.json')) {\n output.push({\n name: fileName,\n data: await this.readJson(dirPath + separator + fileName)\n });\n }\n });\n\n return output;\n }\n\n public async write(filePath: string, rawData: any): Promise<void> {\n let data: string = '';\n if (typeof rawData === 'string') {\n data = String(rawData);\n } else if (typeof rawData === 'number') {\n data = String(rawData);\n } else {\n data = JSON.stringify(rawData);\n }\n\n fs.mkdirSync(this.dirPath(filePath), {recursive: true});\n\n fs.writeFileSync(filePath, data, {encoding: 'utf8'});\n\n return Promise.resolve();\n }\n\n public async writeJson(jsonPath: string, data: any): Promise<void> {\n return this.write(jsonPath, JSON.stringify(data));\n }\n\n private isDir(dirPath: string): boolean {\n return fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();\n }\n\n private isFile(filePath: string): boolean {\n return fs.existsSync(filePath) && fs.statSync(filePath).isFile();\n }\n\n private isJson(data: any): boolean {\n try {\n JSON.parse(data);\n\n return true;\n } catch (_error) {\n return false;\n }\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"clean-css\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"html-minifier-terser\");","import {MinifierEngineContract} from 'common/templating/MinifierEngineContract';\nimport * as CleanCSS from 'clean-css';\nimport {minify as minifyHtml} from 'html-minifier-terser';\n\nexport class MinifierEngine implements MinifierEngineContract {\n public async css(content: string): Promise<string> {\n const minifier: CleanCSS.MinifierOutput = new CleanCSS({\n compatibility: 'ie7',\n format: false,\n level: 1,\n sourceMap: false\n });\n const result: CleanCSS.Output = minifier.minify(content);\n\n return result.styles;\n }\n\n public async html(content: string): Promise<string> {\n return await minifyHtml(content, {\n collapseBooleanAttributes: true,\n collapseInlineTagWhitespace: true,\n collapseWhitespace: true,\n continueOnParseError: false,\n decodeEntities: false,\n html5: true,\n minifyCSS: true,\n minifyJS: true,\n noNewlinesBeforeTagClose: true,\n preserveLineBreaks: false,\n preventAttributesEscaping: false,\n processConditionalComments: false,\n quoteCharacter: '\"',\n removeAttributeQuotes: false,\n removeComments: true,\n removeEmptyAttributes: true,\n removeEmptyElements: true,\n removeOptionalTags: false,\n removeRedundantAttributes: true,\n removeScriptTypeAttributes: false,\n removeStyleLinkTypeAttributes: false,\n removeTagWhitespace: false\n });\n }\n}\n","import * as path from 'path';\nimport {parse, render} from 'mustache';\nimport {cloneDeep} from 'lodash';\nimport {TemplateEngineContract} from 'common/templating/TemplateEngineContract';\nimport {FileSystem} from 'common/tool/FileSystem';\nimport {asyncForEach} from 'common/util/PromiseUtil';\nimport {MinifierEngineContract} from 'common/templating/MinifierEngineContract';\nimport {MinifierEngine} from 'common/templating/MinifierEngine';\nimport {ConflictException} from 'common/exception/ConflictException';\n\nexport class TemplateEngine implements TemplateEngineContract {\n private minifier: MinifierEngineContract;\n\n public constructor() {\n this.minifier = new MinifierEngine();\n }\n\n public async render(templatePath: string, data: {[key: string]: any}, baseIncludePath?: string): Promise<string> {\n if (!templatePath.endsWith('.template')) {\n templatePath += '.template';\n }\n const view: {[key: string]: any} = cloneDeep(data);\n const basePath: string = path.isAbsolute(templatePath) ? '' : __dirname + path.sep;\n const fileSystem = new FileSystem();\n const content: string = await fileSystem.read(basePath + templatePath);\n\n const includes: string[] = [];\n const results: any[][] = parse(content);\n results.forEach((result) => {\n if (result.length >= 4 && result[0] === '&' && result[1].startsWith('include:')) {\n includes.push(result[1]);\n }\n });\n\n if (includes.length > 0) {\n if (baseIncludePath === undefined) {\n baseIncludePath = path.dirname(basePath + templatePath) + path.sep;\n } else if (!path.isAbsolute(baseIncludePath)) {\n baseIncludePath = basePath + baseIncludePath;\n }\n await asyncForEach(includes, async (include) => {\n const includeParts: string[] = include.split(':');\n if (includeParts.length === 3 && view[include] !== undefined) {\n const templateName: string = includeParts[2];\n if (baseIncludePath.includes('/html')) {\n Object.keys(view[include]).forEach((key) => {\n view[include][key] = Array.isArray(view[include][key]) ? view[include][key].map((part: string) => part.replace(/(?:\\r\\n|\\r|\\n)/g, '<br>'))\n : view[include][key].replace(/(?:\\r\\n|\\r|\\n)/g, '<br>');\n });\n }\n view[include] = await this.render(path.resolve(baseIncludePath, templateName), view[include]);\n }\n });\n }\n\n const output: string = render(content, view);\n if (output.includes('{{') || output.includes('}}')) {\n throw new ConflictException('template: missing data to render template', {templatePath, data});\n }\n\n return templatePath.includes('html') ? this.minifier.html(output) : output;\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"node-mailjet\");","import {EmailSenderServiceContract} from 'common/service/sender/EmailSenderServiceContract';\nimport {TemplateEngine} from 'common/templating/TemplateEngine';\nimport {TemplateEngineContract} from 'common/templating/TemplateEngineContract';\nimport {ViewEmailTrackDeliveryContract} from 'common/templating/view/email/ViewEmailTrackDeliveryContract';\nimport {RecipientContract} from 'common/service/sender/RecipientContract';\nimport {SenderContract} from 'common/service/sender/SenderContract';\nimport * 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';\nimport {ViewEmailDiscountContract} from 'common/templating/view/email/ViewEmailDiscountContract';\nimport {asyncForEach} from 'common/util/PromiseUtil';\nimport {BadParameterException} from 'common/exception/BadParameterException';\n\nexport class EmailSenderService implements EmailSenderServiceContract {\n private readonly templateEngine: TemplateEngineContract;\n private readonly mailjet: any;\n private readonly mode: Environment;\n\n public constructor(apiPublicKey: string, apiSecretKey: string, mode: Environment) {\n this.templateEngine = new TemplateEngine();\n this.mailjet = 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: recipient, subject: data.base.subject, text: text, html: html}], false);\n }, 0, Logger.error.bind(Logger));\n }\n\n public async sendTrackDelivery(sender: SenderContract, recipient: RecipientContract, data: ViewEmailTrackDeliveryContract): Promise<void> {\n return await Retry.request(async () => {\n const textContent: string = await this.templateEngine.render('data/email/template/trackDelivery', data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: data.base});\n const htmlContent: string = await this.templateEngine.render('data/email/template/trackDelivery', data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: data.base});\n\n return await this.sendNotification(sender, [{recipient: recipient, subject: data.base.subject, text: text, html: html}], false);\n }, 0, Logger.error.bind(Logger));\n }\n\n public async sendUserNotification(sender: SenderContract, recipient: RecipientContract, data: ViewEmailUserNotificationContract, isCommercial: boolean = true, customId?: string): Promise<void> {\n return await Retry.request(async () => {\n const textContent: string = await this.templateEngine.render('data/email/template/userNotification', data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: data.base, isCommercial: isCommercial});\n const htmlContent: string = await this.templateEngine.render('data/email/template/userNotification', data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: data.base, isCommercial: isCommercial});\n\n return await this.sendNotification(sender, [{recipient: recipient, subject: data.base.subject, text: text, html: html}], isCommercial, customId);\n }, 0, Logger.error.bind(Logger));\n }\n\n public async sendUsersNotifications(sender: SenderContract, messages: {recipient: RecipientContract, data: ViewEmailUserNotificationContract}[],\n isCommercial?: boolean, customId?: string): Promise<void> {\n return await Retry.request(async () => {\n const contents: {recipient: RecipientContract, subject: string, text: string, html: string}[] = [];\n await asyncForEach(messages, async (message) => {\n const textContent: string = await this.templateEngine.render('data/email/template/userNotification', message.data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: message.data.base, isCommercial: isCommercial});\n const htmlContent: string = await this.templateEngine.render('data/email/template/userNotification', message.data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: message.data.base, isCommercial: isCommercial});\n contents.push({recipient: message.recipient, subject: message.data.base.subject, text: text, html: html});\n });\n\n return await this.sendNotification(sender, contents, isCommercial, customId);\n }, 0, Logger.error.bind(Logger));\n }\n\n public async sendDiscount(sender: SenderContract, recipient: RecipientContract, data: ViewEmailDiscountContract, isCommercial: boolean = true, customId?: string): Promise<void> {\n return await Retry.request(async () => {\n const textContent: string = await this.templateEngine.render('data/email/template/discount', data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: data.base, isCommercial: isCommercial});\n const htmlContent: string = await this.templateEngine.render('data/email/template/discount', data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: data.base, isCommercial: isCommercial});\n\n return await this.sendNotification(sender, [{recipient: recipient, subject: data.base.subject, text: text, html: html}], isCommercial, customId);\n }, 0, Logger.error.bind(Logger));\n }\n\n public async sendDiscounts(sender: SenderContract, messages: {recipient: RecipientContract, data: ViewEmailDiscountContract}[], isCommercial: boolean = true, customId?: string): Promise<void> {\n return await Retry.request(async () => {\n const contents: {recipient: RecipientContract, subject: string, text: string, html: string}[] = [];\n await asyncForEach(messages, async (message) => {\n const textContent: string = await this.templateEngine.render('data/email/template/discount', message.data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: message.data.base, isCommercial: isCommercial});\n const htmlContent: string = await this.templateEngine.render('data/email/template/discount', message.data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: message.data.base, isCommercial: isCommercial});\n contents.push({recipient: message.recipient, subject: message.data.base.subject, text: text, html: html});\n });\n\n return await this.sendNotification(sender, contents, isCommercial, customId);\n }, 0, Logger.error.bind(Logger));\n }\n\n // private async sendCampaign(sender: SenderContract, recipients: RecipientContract[], subject: string, text: string, html: string): Promise<void> {\n // try {\n // await this.mailjet.post('send').request({\n // FromEmail: sender.contact,\n // FromName: sender.name,\n // Subject: subject,\n // 'Text-part': text,\n // 'Html-part': html,\n // Recipients: [\n // recipients.map((recipient) => {\n // return { Name: recipient.name, Email: recipient.contact };\n // }),\n // ],\n // });\n //\n // return Promise.resolve();\n // } catch (error) {\n // return Promise.reject(new MainException(error.message, Number(error.statusCode)));\n // }\n // }\n\n private async sendNotification(sender: SenderContract, contents: {recipient: RecipientContract, subject: string, text: string, html: string}[],\n isCommercial: boolean = false, customId?: string): Promise<void> {\n if (contents.length === 0) {\n throw new BadParameterException('email: missing messages');\n }\n\n try {\n if (this.mode === Env.TEST) {\n Logger.info('Simulation Mode: Email has been sent', {sender: sender, recipients: contents.map((content) => content.recipient)});\n } else {\n const messages: {From:{Name: string,Email: string},To:[{Name: string,Email: string}], Subject: string, TextPart: string, HTMLPart: string, Priority:0 | 1 | 2, customID: string}[] = [];\n await asyncForEach(contents, async (content) => {\n if (this.mode === Env.DEVELOPMENT) {\n content.recipient.contact = 'developer@onylab.com';\n }\n messages.push({\n 'From': {\n 'Name': sender.name,\n 'Email': sender.contact\n },\n 'To': [{\n 'Name': content.recipient.name,\n 'Email': content.recipient.contact\n }],\n 'Subject': content.subject,\n 'TextPart': content.text,\n 'HTMLPart': content.html,\n 'Priority': isCommercial ? 0 : 2,\n 'customID': customId === undefined ? undefined : String(customId)\n });\n });\n await this.mailjet.post('send', {'version': 'v3.1'}).request({ Messages: messages });\n }\n } catch (error) {\n throw new MainException(error.message, Number(error.statusCode));\n }\n }\n}\n","import {ConfigurationContract} from 'common/tool/ConfigurationContract';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {FileSystem} from 'common/tool/FileSystem';\nimport {Env} from 'common/tool/Env';\nimport {merge} from 'lodash';\nimport {Environment} from 'common/tool/Environment';\n\nexport class Configuration implements ConfigurationContract {\n private static config: any;\n private static root: string;\n private static environment: Env;\n private readonly filesystem: FileSystemContract;\n\n public constructor(root: string, environment?: Env) {\n this.filesystem = new FileSystem();\n if (Configuration.root === undefined || Configuration.root !== root) {\n Configuration.root = root;\n Configuration.config = undefined;\n }\n const currentEnvironment: string = (environment === undefined ? Environment.getMode() : environment);\n if (Configuration.environment === undefined || Configuration.environment !== currentEnvironment) {\n Configuration.environment = environment === undefined ? Environment.getMode() : environment;\n Configuration.config = undefined;\n }\n }\n\n public async full(): Promise<any> {\n await this.init();\n\n return Configuration.config;\n }\n\n private async init(): Promise<void> {\n if (Configuration.config === undefined) {\n if (Configuration.root === undefined) {\n Configuration.config = {};\n } else {\n Configuration.config = await this.filesystem.readJson(Configuration.root + 'data/config.json');\n if ([Env.DEVELOPMENT, Env.TEST].includes(Configuration.environment)) {\n try {\n Configuration.config = merge(Configuration.config, await this.filesystem.readJson(Configuration.root + 'data/config_' + String(Configuration.environment) + '.json'));\n } catch (_e) {\n // nothing\n }\n }\n\n }\n }\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"typeorm\");","import {Connection, createConnection} from 'typeorm';\nimport {DatabaseContract} from 'common/tool/DatabaseContract';\nimport {FileSystem} from 'common/tool/FileSystem';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {BadParameterException} from 'common/exception/BadParameterException';\nimport {Logger} from 'common/tool/Logger';\n\n// TypeORM documation, types: https://github.com/typeorm/typeorm/blob/master/src/driver/types/ColumnTypes.ts\nexport class Database implements DatabaseContract {\n private root: string;\n private db: any;\n private connection: Connection;\n\n public constructor(root: string) {\n this.root = root;\n }\n\n public async connect(name: string, entities: any[]): Promise<void> {\n if (this.db === undefined) {\n await this.init();\n }\n\n const con: any = this.db[name];\n if (con !== undefined) {\n con.entities = entities;\n con.logging = ['error'];\n con.logger = true;\n con.bigNumberStrings = false;\n if (con.timezone === undefined) {\n con.timezone = 'Z';\n }\n if (con.charset === undefined) {\n con.charset = 'UTF8_GENERAL_CI';\n }\n this.connection = await createConnection(con);\n } else {\n Logger.error(new BadParameterException('bad connection name'));\n }\n }\n\n public async synchronize(): Promise<void> {\n if (this.connection !== undefined) {\n await this.connection.synchronize();\n }\n }\n\n public async close(): Promise<void> {\n return this.connection.close();\n }\n\n private async init(): Promise<void> {\n if (this.root === undefined) {\n this.db = {};\n } else {\n const fileSystem: FileSystemContract = new FileSystem();\n this.db = await fileSystem.readJson(this.root + 'data/db.json');\n }\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"prettyjson\");","import * as prettyjson from 'prettyjson';\nimport {DisplayerContract} from 'common/tool/DisplayerContract';\nimport {Logger} from 'common/tool/Logger';\n\nexport class Displayer implements DisplayerContract {\n public error(error: Error): void {\n Logger.error(error);\n }\n\n public info(message: string): void {\n Logger.trace(message);\n }\n\n public json(json: any): void {\n Logger.trace(prettyjson.render(json, {}));\n }\n\n public success(message: string): void {\n Logger.trace(message);\n }\n}\n","import {DownloaderContract} from 'common/tool/DownloaderContract';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport * as crypto from 'crypto';\nimport axios from 'axios';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {FileSystem} from 'common/tool/FileSystem';\n\nexport class Downloader implements DownloaderContract {\n private readonly fileSystem: FileSystemContract;\n\n public constructor() {\n this.fileSystem = new FileSystem();\n }\n\n public async image(url: string, outputPath: string, outputName?: string): Promise<string> {\n if (outputName === undefined) {\n outputName = crypto.randomBytes(20).toString('hex') + path.extname(url);\n }\n await this.fileSystem.write(outputPath + path.sep + outputName, '');\n\n const output: string = path.resolve(outputPath + path.sep + outputName);\n const writer: any = fs.createWriteStream(output);\n\n const response: any = await axios({\n url,\n method: 'GET',\n responseType: 'stream'\n });\n\n response.data.pipe(writer);\n\n return new Promise((resolve, reject) => {\n writer.on('finish', () => resolve(output));\n writer.on('error', reject);\n });\n }\n}\n","export const isNullOrUndefined: (obj: unknown) => boolean = (obj) => {\n return obj === undefined || obj === null;\n};\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"fast-diff\");","/* eslint-disable no-bitwise */\nimport {deburr, toLower, trim} from 'lodash';\nimport {isNullOrUndefined} from 'common/util/HelperUtil';\n\nexport class StringUtil {\n // alternative https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex\n public static escapeRegExp(str: string): string {\n if (typeof str !== 'string') {\n return str;\n }\n\n return str.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&'); // and .replace(/-/g, '\\\\x2d');\n }\n\n public static hash(str: string, seed: number = 0): string {\n let h1 = 0xdeadbeef ^ seed;\n let h2 = 0x41c6ce57 ^ seed;\n for(let i = 0, ch; i < str.length; i++) {\n ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507);\n h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909);\n h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507);\n h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909);\n\n return (h2>>>0).toString(16).padStart(8, '0') + (h1>>>0).toString(16).padStart(8, '0');\n }\n\n public static nullable(str: string): string {\n if (isNullOrUndefined(str)) {\n return null;\n }\n\n if (typeof str === 'string' && str.length === 0) {\n return null;\n }\n\n return str;\n }\n\n public static removeMultiSpaces(data: string) {\n if (typeof data !== 'string') {\n return data;\n }\n\n return data.replace(/\\s{2,}/g, ' ');\n }\n\n public static removeText(data: string, text: string) {\n if (typeof data !== 'string' || typeof text !== 'string' || text.length === 0) {\n return data;\n }\n\n try {\n data = data.replace(new RegExp(StringUtil.escapeRegExp(text), 'ig'), '');\n data = data.replace(new RegExp(StringUtil.escapeRegExp(text).replace(new RegExp('\\\\s', 'g'), '-'), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n\n return data;\n }\n\n public static replace(str: string, targets: string[], replacers: string[]): string {\n if (typeof str !== 'string') {\n return str;\n }\n\n if (targets.length !== replacers.length) {\n return str;\n }\n\n let output: string = str;\n targets.forEach((target, index) => {\n output = output.replace(new RegExp(StringUtil.escapeRegExp(target), 'ig'), replacers[index]);\n });\n\n return output;\n }\n\n public static slugify(raw: string, separator?: string): string {\n if (raw === undefined) {\n return '';\n }\n\n return toLower(trim(deburr(raw)).replace(/[^0-9a-z\\-\\_]/gi, separator));\n }\n\n public static truncate(str: string, limit: number): string {\n if (isNullOrUndefined(str) || str.length <= limit) {\n return str;\n }\n\n if (limit <= 3) {\n return '';\n }\n\n return str.slice(0, limit - 3) + '...';\n }\n}\n","import {StringUtil} from 'common/util/StringUtil';\n\nexport class FormatterUtil {\n public static trim(raw: string): string {\n return typeof raw === 'string' ? raw.trim() : raw;\n }\n\n public static capitalize(raw: string): string {\n const lowraw: string = FormatterUtil.lower(raw);\n\n return typeof lowraw === 'string' ? lowraw.split(' ').map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join (' ') : raw;\n }\n\n public static ucfirst(raw: string): string {\n const lowraw: string = FormatterUtil.lower(raw);\n\n return typeof lowraw === 'string' ? lowraw.charAt(0).toUpperCase() + lowraw.slice(1) : raw;\n }\n\n public static lower(raw: string): string {\n return typeof raw === 'string' ? raw.toLocaleLowerCase() : raw;\n }\n\n public static upper(raw: string): string {\n return typeof raw === 'string' ? raw.toLocaleUpperCase() : raw;\n }\n\n public static phone(raw: string, locale: string, output: 'nat' | 'int' = 'nat'): string {\n if (typeof raw === 'string') {\n raw = FormatterUtil.preformatPhone(raw, locale);\n switch (output) {\n case 'nat': // national\n return FormatterUtil.phoneNat(raw, locale);\n break;\n case 'int': // international\n return FormatterUtil.phoneInt(raw, locale);\n break;\n }\n }\n\n return raw;\n }\n\n public static stripEmoji(raw: string): string {\n let output: string = raw;\n\n if (typeof output === 'string') {\n const emojiRegex = require('emoji-regex'); /* eslint-disable-line @typescript-eslint/no-var-requires */\n\n let match;\n while ((match = emojiRegex().exec(output)) !== null) {\n try {\n output = output.replace(new RegExp('\\\\s' + StringUtil.escapeRegExp(match[0]), 'g'), '');\n output = output.replace(new RegExp(StringUtil.escapeRegExp(match[0]) + '\\\\s', 'g'), '');\n output = output.replace(new RegExp(StringUtil.escapeRegExp(match[0]), 'g'), '');\n } catch (_e) {\n // ignore\n }\n }\n }\n\n return output;\n }\n\n public static stripExoticCharacters(raw: string): string {\n if (typeof raw === 'string') {\n return raw.replace('’', '\\'').replace(/[\\u0250-\\ue007]+/g, '*');\n }\n\n return raw;\n }\n\n private static preformatPhone(raw: string, locale: string): string {\n raw = raw.trim().replace(/\\s?\\.?\\-?\\(?\\)?/g, '');\n switch (locale) {\n case 'fr':\n if ((new RegExp('^[1-9]')).test(raw) && raw.length === 9) {\n return '0' + raw;\n }\n break;\n }\n\n return raw;\n }\n\n private static phoneNat(raw: string, locale: string): string {\n switch (locale) {\n case 'fr': // format: 06 11 22 33 44\n if (raw.startsWith('+330')) {\n raw = raw.substring(3);\n } else if (raw.startsWith('+33')) {\n raw = '0' + raw.substring(3);\n } else if (raw.startsWith('0033')) {\n raw = '0' + raw.substring(4);\n } else if (raw.startsWith('33') && raw.length === 11) {\n raw = '0' + raw.substring(2);\n }\n\n if (raw.length === 10) {\n let i: number = 0;\n raw = raw.split('').map((num) => {\n i++;\n\n return num + (i % 2 === 0 ? ' ' : '');\n }).join('').trim();\n }\n\n return raw;\n }\n\n return raw;\n }\n\n private static phoneInt(raw: string, locale: string): string {\n if (raw.startsWith('+')) {\n return raw;\n }\n\n switch (locale) {\n case 'fr': // format: +33611223344\n if (raw.startsWith('0')) {\n raw = raw.substring(1);\n }\n\n return '+33' + raw;\n break;\n }\n\n return raw;\n }\n}\n","/* eslint-disable max-lines */\nimport {trim} from 'lodash';\nimport {isNullOrUndefined} from 'common/util/HelperUtil';\nimport {ValidatorUtil} from 'common/util/ValidatorUtil';\nimport * as diff from 'fast-diff';\nimport {StringUtil} from 'common/util/StringUtil';\nimport {FormatterUtil} from 'common/util/FormatterUtil';\n\nexport class AddressUtil {\n private static readonly ZIPCODES: string[] = [\n '78500', '78600', '78800', '95240', '95530',\n '78630', '78670', '78240', '78580', '78300', '78955', '78260',\n '95150', '95250', '95480', '95320', '95550', '95370', '95740', '95220',\n '95870', '78420', '78400', '78110', '78360', '78290', '78230', '78540', '78920',\n '95600'\n ];\n private static readonly CITIES: string[] = [\n 'Sartrouville', 'Cormeilles-en-Parisis', 'Houilles', 'Maisons-Laffitte', 'La Frette-sur-Seine', 'Argenteuil', 'Montesson', 'Le Mesnil-le-Roi', 'Bezons',\n 'Orgeval', 'Poissy', 'Morainvilliers', 'Villennes-sur-Seine', 'Medan', 'Chambourcy', 'Aigremont', 'Les Alluets-le-Roi', 'Carrières-sous-Poissy', 'Achères',\n 'Taverny', 'Beauchamp', 'Pierrelaye', 'Saint-Leu-la-Forêt', 'Bessancourt', 'Montigny-lès-Cormeilles', 'Herblay', 'Méry-sur-Oise',\n 'Carrières-sur-Seine', 'Bezons', 'Chatou', 'Le Vésinet', 'Montesson', 'Croissy', 'Croissy-sur-Seine', 'Le Pecq', 'Vernouillet', 'Ecquevilly'\n ];\n private static readonly ZIPCODE_CITY: {[zipCode: string]: string[]} = {\n '78500': ['Sartrouville'], '78600': ['Maisons-Laffitte', 'Le Mesnil-le-Roi'], '78800': ['Houilles'], '95240': ['Cormeilles-en-Parisis'], '95530': ['La Frette-sur-Seine'],\n '78100': ['Saint-Germain-en-Laye'], '95100': ['Argenteuil'],\n '78630': ['Orgeval', 'Morainvilliers'], '78670': ['Villennes-sur-Seine', 'Medan'], '78240': ['Chambourcy', 'Aigremont'], '78300': ['Poissy'],\n '78955': ['Carrières-sous-Poissy'], '78260': ['Achères'], '78540': ['Vernouillet'], '78920': ['Ecquevilly'],\n '95150': ['Taverny'], '95250': ['Beauchamp'], '95480': ['Pierrelaye'], '95320': ['Saint-Leu-la-Forêt'], '95550': ['Bessancourt'], '95370': ['Montigny-les-Cormeilles'], '95220': ['Herblay'],\n '95740': ['Frépillon'], '95540': ['Méry-sur-Oise'],\n '95870': ['Bezons'], '78420': ['Carrières-sur-Seine'], '78400': ['Chatou'], '78110': ['Le Vésinet'], '78360': ['Montesson'], '78290': ['Croissy-sur-Seine'], '78230': ['Le Pecq'],\n '95600': ['Eaubonne']\n };\n private static readonly REGIONS: string[] = ['île-de-france'];\n private static readonly COUNTRIES: string[] = ['France', 'FR'];\n\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(/(\\sbd\\s)/ig, ' boulevard ');\n street = street.replace(/(\\sbd\\.\\s)/ig, ' boulevard ');\n street = street.replace(/(\\schau\\.\\s)/ig, ' chaussée ');\n street = street.replace(/(\\strav\\.\\s)/ig, ' traverse ');\n street = street.replace(/(\\spl\\.\\s)/ig, ' place ');\n street = street.replace(/(\\spass\\.\\s)/ig, ' passage ');\n street = street.replace(/(\\ssent\\.\\s)/ig, ' sentier ');\n street = street.replace(/(\\simp\\.\\s)/ig, ' impasse ');\n street = street.replace(/(\\sall\\.\\s)/ig, ' allée ');\n street = street.replace(/(\\schem\\.\\s)/ig, ' chemin ');\n street = street.replace(/(\\sham\\.\\s)/ig, ' hameau ');\n street = street.replace(/(\\sdom\\.\\s)/ig, ' domaine ');\n\n const leadingZeroRegExp: RegExp = new RegExp('^(0+)[0-9]+,?\\\\s[a-zA-Z]+');\n const leadingZeroMatches: string[] = street.match(leadingZeroRegExp);\n if (leadingZeroMatches !== null && leadingZeroMatches.length === 2) {\n street = street.substring(leadingZeroMatches[1].length);\n }\n\n return street;\n }\n\n public static getZipCodeFromCity(city: string): string {\n if (isNullOrUndefined(city)) {\n return undefined;\n }\n\n return Object.keys(AddressUtil.ZIPCODE_CITY).reduce((selected, zipcode) => {\n if (AddressUtil.ZIPCODE_CITY[zipcode].find((name) => name.toLowerCase() === city.toLowerCase()) !== undefined) {\n return zipcode;\n }\n\n return selected;\n }, undefined);\n }\n\n public static getCityFromZipCode(zip: string, rawAddress: string): string {\n if (zip === undefined || rawAddress === undefined) {\n return undefined;\n }\n\n const candidates: string[] = AddressUtil.ZIPCODE_CITY[zip];\n if (candidates === undefined) {\n return undefined;\n }\n\n if (candidates.length === 1) {\n return candidates[0];\n }\n\n let city: string;\n rawAddress.split(',').forEach((part) => {\n city = candidates.find((candidate) => {\n return part.trim().toLowerCase() === candidate.trim().toLowerCase();\n });\n });\n if (city !== undefined) {\n return city;\n }\n\n return candidates[0];\n }\n\n public static isZipCode(zip: string): boolean {\n if (typeof zip !== 'string') {\n return false;\n }\n\n if (AddressUtil.ZIPCODES.includes(zip)) {\n return true;\n }\n\n return ValidatorUtil.isNumber(zip) && zip.length === 5 && !zip.includes('.') && !zip.includes('-');\n }\n\n public static parse(raw: string, isFormatted: boolean = true): { street?: string, zip?: string, city?: string, country?: string } {\n const address: { street?: string, zip?: string, city?: string, country?: string } = {};\n if (!isNullOrUndefined(raw)) {\n const rawAddressParts: string[] = raw.split(',');\n if (rawAddressParts.length >= 3 && isFormatted) {\n if (AddressUtil.COUNTRIES.find((c) => raw.toLowerCase().includes(' ' + c.toLowerCase())) === undefined) {\n rawAddressParts.push('France');\n }\n\n let i: number = rawAddressParts.length - 1;\n address.country = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n if (rawAddressParts[i] !== undefined && rawAddressParts[i].trim().includes(' ')) {\n const rawParts: string[] = rawAddressParts[i].trim().split(' ');\n address.zip = rawParts[0] === undefined ? undefined : rawParts[0].trim();\n rawParts.splice(0, 1);\n address.city = rawParts.join(' ').trim();\n rawAddressParts.splice(i--, 1);\n } else if (!isNaN(Number(rawAddressParts[i].trim()))) {\n address.zip = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n if (i >= 2) {\n address.city = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n }\n } else if (!isNaN(Number(rawAddressParts[i - 1].trim()))) {\n address.city = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n address.zip = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n } else {\n address.city = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n }\n address.street = rawAddressParts.map((part) => part.trim()).join(' ').trim();\n } else {\n let rawAddress: string = raw.toLowerCase();\n AddressUtil.ZIPCODES.forEach((zipcode) => {\n if (rawAddress.includes(zipcode)) {\n address.zip = zipcode;\n try {\n rawAddress = rawAddress.replace(new RegExp(StringUtil.escapeRegExp(zipcode), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n }\n });\n AddressUtil.CITIES.forEach((city) => {\n if (rawAddress.includes(city.toLowerCase()) && (address.zip === undefined || AddressUtil.ZIPCODE_CITY[address.zip]?.find((c) => c.toLowerCase() === city.toLowerCase()))) {\n address.city = city;\n try {\n rawAddress = rawAddress.replace(new RegExp(StringUtil.escapeRegExp(city), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n }\n });\n AddressUtil.COUNTRIES.forEach((country) => {\n if (rawAddress.includes(' ' + country.toLowerCase()) && !rawAddress.includes('de ' + country.toLowerCase()) && !rawAddress.includes('de la ' + country.toLowerCase())) {\n address.country = country;\n try {\n rawAddress = rawAddress.replace(new RegExp(StringUtil.escapeRegExp(' ' + country), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n }\n });\n\n if (address.street === undefined) {\n address.street = trim(rawAddress.split(',').map((part) => part.trim()).join(' '), '-').trim();\n }\n }\n\n if (address.country === undefined) {\n address.country = 'France';\n }\n }\n\n if (address.street !== undefined) {\n address.street = FormatterUtil.lower(FormatterUtil.trim(String(address.street)));\n }\n if (address.zip !== undefined) {\n address.zip = FormatterUtil.upper(FormatterUtil.trim(String(address.zip)));\n }\n if (address.city !== undefined) {\n address.city = AddressUtil.autoCorrectCity(FormatterUtil.capitalize(FormatterUtil.trim(String(address.city))));\n }\n if (address.country !== undefined) {\n address.country = FormatterUtil.capitalize(FormatterUtil.trim(String(address.country)));\n }\n\n return AddressUtil.complete(address);\n }\n\n public static complete(address: { street?: string, zip?: string, city?: string, country?: string }): { street?: string, zip?: string, city?: string, country?: string } {\n if (address.city === undefined || address.city.length === 0) {\n const city: string = AddressUtil.getCityFromZipCode(address.zip, address.street);\n if (city !== undefined) {\n address.city = city;\n }\n }\n if (typeof address.street === 'string') {\n AddressUtil.REGIONS.forEach((region) => {\n address.street = StringUtil.removeText(address.street, region).trim();\n });\n }\n if (FormatterUtil.lower(address.country) === 'fr') {\n address.country = 'France';\n }\n\n return address;\n }\n\n public static removeDuplicates(str: string): string {\n if (typeof str !== 'string') {\n return str;\n }\n\n const output: string[] = [];\n\n str.split(',').forEach((part) => {\n if (output.find((o) => o.trim().toLowerCase().includes(part.trim().toLowerCase())) === undefined) {\n output.push(part);\n }\n });\n\n return output.join(',');\n }\n\n private static countDiff(str: string, reference: string): { add: number, remove: number } {\n const result: { add: number, remove: number } = { add: 0, remove: 0 };\n\n diff(str.toLowerCase(), reference.toLowerCase()).forEach((value) => {\n switch (value[0]) {\n case -1:\n result.remove += value[1].length;\n break;\n case 1:\n result.add += value[1].length;\n break;\n }\n });\n\n return result;\n }\n}\n","import {DateTime} from 'luxon';\nimport {cloneDeep} from 'lodash';\nimport {isNullOrUndefined} from 'common/util/HelperUtil';\n\nexport class DateUtil {\n private static readonly PERIOD_MAX_DATES: number = 90;\n private static readonly WEEK_DAYS: {[id: number]: string} = {1: 'lundi', 2: 'mardi', 3: 'mercredi', 4: 'jeudi', 5: 'vendredi', 6: 'samedi', 7: 'dimanche'};\n\n public static getCycleDateFromFullDate(date: string, cycle: 'daily' | 'weekly' | 'monthly'): string {\n if (cycle === 'weekly') {\n const result: string = DateTime.fromISO(date.replace(/-W([0-9])$/i, '-W0$1')).toISOWeekDate();\n if (result === null) {\n return date;\n }\n\n const parts: string[] = result.split('-');\n\n return parts.length > 2 ? parts[0] + '-' + parts[1] : parts.join('-');\n } else if (cycle === 'monthly') {\n return DateTime.fromISO(date).toFormat('yyyy-LL');\n }\n\n return DateTime.fromISO(date).toISODate();\n }\n\n public static displayWeekDay(weekDay: number): string {\n let displayWeekDay: string = '';\n if (DateUtil.WEEK_DAYS[weekDay] !== undefined) {\n displayWeekDay = DateUtil.WEEK_DAYS[weekDay];\n }\n\n return displayWeekDay;\n }\n\n public static generatePeriod(fromDate: string, toDate: string, initialValue: Record<string, any>, addDate: boolean = true, MAX_DAYS: number = DateUtil.PERIOD_MAX_DATES,\n cycle: 'daily' | 'weekly' | 'monthly' = 'daily'): {[date: string]: Record<string, any>} {\n const jump: {[str: string]: number} = {'daily': {day: 1}, 'weekly': {week: 1}, 'monthly': {month: 1}}[cycle];\n let cursor: string = DateTime.fromISO(fromDate, {setZone: true}).toISODate();\n const stop: string = DateTime.fromISO(toDate, {setZone: true}).toISODate();\n let i: number = 0;\n const data: {[date: string]: Record<string, any>} = {};\n while (cursor <= stop && i < MAX_DAYS) {\n const date: string = DateUtil.getCycleDateFromFullDate(cursor, cycle);\n data[date] = cloneDeep(initialValue);\n if (addDate) {\n data[date].date = date;\n }\n cursor = DateTime.fromISO(cursor, {setZone: true}).plus(jump).toISODate();\n i++;\n }\n\n return data;\n }\n\n public static getOpenPeriods(openings: {from: string, to: string}[], closings: {from: string, to: string}[]): {from: string, to: string}[] {\n const results: {from: string, to: string}[] = [];\n\n openings.forEach((opening) => {\n const tmpOpenings: {from: string, to: string}[] = [opening];\n while (tmpOpenings.length > 0) {\n const open: {from: string, to: string} = tmpOpenings[0];\n\n const isOpen: boolean = closings.find((closing) => closing.from <= open.from && open.to <= closing.to) === undefined;\n if (isOpen) {\n const startLater: {from: string, to: string} = closings.find((closing) => closing.from <= open.from && open.from < closing.to && closing.to < open.to);\n if (startLater !== undefined) {\n tmpOpenings.push({from: startLater.to, to: open.to});\n } else {\n const endEarlier: {from: string, to: string} = closings.find((closing) => open.from < closing.from && open.to > closing.from && open.to <= closing.to);\n if (endEarlier !== undefined) {\n tmpOpenings.push({from: open.from, to: endEarlier.from});\n } else {\n const cut: {from: string, to: string} = closings.find((closing) => open.from < closing.from && closing.to < open.to);\n if (cut !== undefined) {\n tmpOpenings.push({from: open.from, to: cut.from});\n tmpOpenings.push({from: cut.to, to: open.to});\n } else {\n results.push(open);\n }\n }\n }\n }\n\n tmpOpenings.shift();\n }\n });\n\n\n return results;\n }\n\n public static limitDate(targetDate: string, baseDate: string, limitInSeconds: number = 0): string {\n if (targetDate === undefined || baseDate === undefined) {\n return undefined;\n }\n\n const target: string = DateTime.fromISO(targetDate, {setZone: true}).toISO();\n const limit: string = DateTime.fromISO(baseDate, {setZone: true}).plus({seconds: limitInSeconds}).toISO();\n\n return target > limit ? limit : target;\n }\n\n public static localeToISO(localeDate: string): string {\n const frFormat1: RegExp = new RegExp('[0-9]{2}/[0-9]{2}/[0-9]{4}');\n const frFormat2: RegExp = new RegExp('[0-9]{2}-[0-9]{2}-[0-9]{4}');\n const isoFormat: RegExp = new RegExp('[0-9]{4}-[0-9]{2}-[0-9]{2}');\n\n let isoDate: string;\n if (frFormat1.test(localeDate)) {\n const parts: string[] = localeDate.split('/');\n isoDate = parts[2] + '-' + parts[1] + '-' + parts[0];\n } else if (frFormat2.test(localeDate)) {\n const parts: string[] = localeDate.split('-');\n isoDate = parts[2] + '-' + parts[1] + '-' + parts[0];\n } else if (isoFormat.test(localeDate)) {\n isoDate = localeDate;\n }\n\n return isoDate;\n }\n\n public static slotToTime(timeSlot: string): string {\n const timeFormat: RegExp = new RegExp('^(\\\\s)?[0-9]{2}:[0-9]{2}(\\\\s)?$');\n const slotFormat: RegExp = new RegExp('^(\\\\s)?[0-9]{2}:[0-9]{2}(\\\\s)?-(\\\\s)?[0-9]{2}:[0-9]{2}(\\\\s)?$');\n\n timeSlot = timeSlot.trim();\n\n let time: string;\n if (timeFormat.test(timeSlot)) {\n time = timeSlot.trim() + ':00';\n } else if (slotFormat.test(timeSlot)) {\n const parts: string[] = timeSlot.split('-');\n time = parts[0].trim() + ':00';\n }\n\n return time;\n }\n\n public static delay(fromDate: string, toDate: string, unit: 'minutes' | 'hours' | 'days' | 'months'): number {\n if (isNullOrUndefined(fromDate) || isNullOrUndefined(toDate)) {\n return 0;\n }\n\n return Math.round(Math.abs(DateTime.fromISO(fromDate, {setZone: true}).toUTC()\n .diff(DateTime.fromISO(toDate, {setZone: true}).toUTC(), [unit])[unit]))\n }\n\n public static round(date: string, roundingInMs: number = 0): string {\n if (typeof date !== 'string') {\n return date;\n }\n\n const dateTime: DateTime = DateTime.fromISO(date, {setZone: true});\n\n return DateTime.fromMillis(Math.round((+dateTime.toMillis()) / roundingInMs) * roundingInMs).setZone(dateTime.zone).toISO();\n }\n}\n","export class ExtractorUtil {\n public static phone(raw: string, locale: 'fr'): string {\n if (typeof raw !== 'string') {\n return undefined;\n }\n\n raw = raw.trim().replace(/\\s?\\.?\\-?\\(?\\)?/g, '');\n switch (locale) {\n case 'fr': {\n const phoneFrRegex: RegExp = new RegExp('(0[6-7][0-9]{8})', 'i');\n const result: string[] = phoneFrRegex.exec(raw);\n if (result !== null && result.length > 0 && result[0] !== null) {\n return result[0];\n }\n }\n }\n\n return undefined;\n }\n}\n","export class MathUtil {\n public static avg(values: number[]): number {\n if (values.length === 0) {\n return 0;\n }\n\n const total: number = values.reduce((accumulator, value) => {\n return accumulator + value;\n }, 0);\n\n return MathUtil.round(total / values.length, 2);\n }\n\n public static applyVariation(value: number, variation: number): number {\n let increase: number;\n if (value >= 0) {\n increase = 1 + (variation / 100);\n } else {\n increase = 1 - (variation / 100);\n }\n\n return value * increase;\n }\n\n public static median(values: number[]): number {\n if (values.length === 0) {\n return 0;\n }\n if (values.length === 1) {\n return values[0];\n }\n\n const valuesSorted: number[] = values.sort((a, b) => {\n return a - b;\n });\n\n if (valuesSorted.length % 2 === 0) {\n return MathUtil.avg([valuesSorted[(valuesSorted.length / 2) - 1], valuesSorted[(valuesSorted.length / 2)]]);\n }\n\n return valuesSorted[Math.floor(valuesSorted.length / 2)];\n }\n\n public static percentage(part: number, total: number): number {\n if (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 Math.round(value * (10 ** decimals)) / (10 ** decimals);\n }\n\n public static variation(originalValue: number, newValue: number): number {\n let percent = 0;\n if (newValue !== 0) {\n if (originalValue !== 0) {\n percent = (newValue - originalValue) / Math.abs(originalValue) * 100;\n } else {\n percent = ((newValue > 0) ? 1 : -1) * 100;\n }\n } else if (originalValue !== 0) {\n percent = ((originalValue > 0) ? 1 : -1) * -100;\n }\n\n return Math.floor(percent);\n }\n}\n","import {isArray, isObject} from 'lodash';\n\nexport class ObjectUtil {\n public static compact(obj: any, options: {removeEmptyString?: boolean} = {}): any {\n if (isArray(obj)) {\n const ouput: any[] = [];\n obj.forEach((value) => {\n value = ObjectUtil.compact(value, options);\n if ((isArray(value) && value.length > 0)\n || (isObject(value) && Object.keys(value).length > 0)\n || (value !== undefined && value !== null && !isArray(value) && !isObject(value))) {\n ouput.push(value);\n }\n });\n\n return ouput;\n } else if (isObject(obj)) {\n const ouput: any = {};\n Object.keys(obj).forEach((key) => {\n let value: any = (obj as any)[key];\n if (isArray(value) || isObject(value)) {\n value = ObjectUtil.compact(value, options);\n if ((isArray(value) && value.length > 0)\n || (isObject(value) && Object.keys(value).length > 0)\n || (value !== undefined && value !== null && !isArray(value) && !isObject(value))) {\n ouput[key] = value;\n }\n } else if (value !== undefined && value !== null\n && (typeof value !== 'string' || options.removeEmptyString === false || value.length > 0)) {\n ouput[key] = value;\n }\n });\n\n return ouput;\n }\n\n return (typeof obj !== 'string' || options.removeEmptyString === false || obj.length > 0) ? obj : undefined;\n }\n}\n","import {MathUtil} from 'common/util/MathUtil';\n\nexport class PriceUtil {\n private static readonly currencies: {[iso: string]: {symbol: string, position: string}} = {\n 'CAD': {symbol: '$', position: 'before'},\n 'EUR': {symbol: '€', position: 'after'},\n 'USD': {symbol: '$', position: 'before'}\n };\n\n public static applyTaxes(priceTaxExcluded: string, taxRates: number[], decimals: number = 2): string {\n let priceTaxIncluded: number = Number(priceTaxExcluded);\n taxRates.forEach((rate) => {\n priceTaxIncluded += Number(priceTaxExcluded) * rate;\n });\n\n return String(MathUtil.round(priceTaxIncluded, decimals));\n }\n\n public static calculateTaxes(priceTaxExcluded: number, taxRates: number[]): number {\n let taxes: number = 0;\n taxRates.forEach((rate) => {\n taxes += priceTaxExcluded * rate;\n });\n\n return MathUtil.round(taxes, 2);\n }\n\n public static displayWithCurrency(price: string, isoCurrency: string): string {\n if (price === undefined || price === null) {\n return price;\n }\n\n const currency: {symbol: string, position: string} = PriceUtil.currencies[isoCurrency];\n\n let newPrice: string = price + ' ' + isoCurrency;\n if (currency !== undefined) {\n switch (currency.position) {\n case 'before':\n newPrice = currency.symbol + price;\n break;\n case 'after':\n newPrice = price + currency.symbol;\n break;\n }\n }\n\n return newPrice;\n }\n\n public static format(price: string, locale: 'fr' | 'us', decimals: number = 2): string {\n if (price === undefined || price === null) {\n return price;\n }\n\n const priceNumber: number = Number(price.replace(/\\,/gi, ''));\n const standardPrice: string = priceNumber.toLocaleString('en-US', {\n style: 'decimal',\n useGrouping: true,\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals\n });\n\n switch (locale) {\n case 'fr':\n return standardPrice.replace(/\\,/gi, ' ').replace(/\\./gi, ',');\n case 'us':\n return standardPrice;\n }\n }\n\n public static round(price: string, precision: number = 0.10): string {\n const priceInCents: number = Number(price) * 100;\n const precisionInCents: number = precision * 100;\n const rest: number = priceInCents % precisionInCents;\n\n return String(MathUtil.round((priceInCents - rest) + (rest < Math.ceil(precisionInCents / 2) ? 0 : precisionInCents), 2) / 100);\n }\n}\n"],"names":["root","factory","exports","module","define","amd","global","require","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","n","getter","__esModule","d","a","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","registerBasePath","basePath","process","env","APP_HOME","Path","BASE_PATH","endsWith","data","db","storage","session","message","code","name","Error","captureStackTrace","MainException","stack","UnauthorizedException","ERROR_CODE","Env","getMode","NODE_ENV","DEVELOPMENT","PRODUCTION","TEST","APP_ID","init","sentryToken","app","Environment","dsn","integrations","CaptureConsole","levels","tracing","environment","maxBreadcrumbs","tracesSampleRate","tracesSampler","samplingContext","transactionContext","startTimestamp","endTimestamp","trace","extra","includes","console","info","category","level","debug","log","scope","setExtra","JSON","stringify","warning","error","response","requestErrorData","warn","requestHandler","tracingHandler","errorHandler","_request","Logger","Number","status","isNaN","json","configuration","this","handler","request","next","authenticated","jwt","authApiKey","keys","Array","isArray","required","forEach","none","authNone","HandlerController","headers","Authorization","startsWith","parts","split","length","secret","urlStartsWith","find","originalUrl","can","_action","_subject","create","origins","port","backendPort","Server","DEFAULT_PORT","String","set","use","inflate","limit","reviver","strict","type","verify","origin","concat","credentials","listen","getSessionSecret","sessionCookieName","update","SALT","digest","retries","logger","operation","factor","minTimeout","maxTimeout","randomize","Promise","resolve","reject","attempt","then","catch","retry","isEmail","email","RegExp","test","isPhone","phone","isIntMobilePhone","caRegex","frRegex","usRegex","isNumber","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","target","Date","toISOString","hour","plus","day","BASE_API_URL","encodeURIComponent","p","timeout","trim","ExternalApiException","bind","filter","ValidatorUtil","asyncForEach","array","callback","i","wait","time","setTimeout","size","GeneratorUtil","symbolUpperCases","int","color","alpha","alphaHex","rgbToHex","round","defaultColor","colorList","values","rgb","hex","toString","min","max","POSITIVE_INFINITY","floor","random","password","symbolLowerCases","dirPath","filePath","lastIndexOf","substr","listFiles","isDir","separator","files","output","fileName","isFile","push","randomFile","suggestion","filenames","index","move","recursive","read","readJson","jsonPath","isJson","parse","readJsonFiles","write","rawData","encoding","writeJson","isDirectory","_error","css","content","compatibility","format","sourceMap","minify","styles","html","collapseBooleanAttributes","collapseInlineTagWhitespace","collapseWhitespace","continueOnParseError","decodeEntities","html5","minifyCSS","minifyJS","noNewlinesBeforeTagClose","preserveLineBreaks","preventAttributesEscaping","processConditionalComments","quoteCharacter","removeAttributeQuotes","removeComments","removeEmptyAttributes","removeEmptyElements","removeOptionalTags","removeRedundantAttributes","removeScriptTypeAttributes","removeStyleLinkTypeAttributes","removeTagWhitespace","minifier","MinifierEngine","render","templatePath","baseIncludePath","view","cloneDeep","__dirname","FileSystem","result","include","includeParts","templateName","part","ConflictException","apiPublicKey","apiSecretKey","templateEngine","TemplateEngine","mailjet","sendDeliveryDelay","sender","recipient","base","copyright","year","getUTCFullYear","text","sendNotification","subject","sendTrackDelivery","textContent","htmlContent","sendUserNotification","customId","sendUsersNotifications","messages","contents","sendDiscount","sendDiscounts","recipients","contact","post","Messages","statusCode","filesystem","Configuration","config","currentEnvironment","full","merge","connect","entities","con","logging","bigNumberStrings","timezone","charset","createConnection","connection","synchronize","close","fileSystem","success","image","url","outputPath","outputName","writer","method","responseType","pipe","on","isNullOrUndefined","escapeRegExp","str","hash","seed","h1","h2","ch","charCodeAt","imul","padStart","nullable","removeMultiSpaces","removeText","StringUtil","_e","targets","replacers","slugify","raw","toLower","deburr","truncate","slice","capitalize","lowraw","FormatterUtil","lower","word","charAt","toUpperCase","ucfirst","toLocaleLowerCase","upper","toLocaleUpperCase","locale","preformatPhone","phoneNat","phoneInt","stripEmoji","emojiRegex","match","exec","stripExoticCharacters","num","autoCorrectCity","city","toLowerCase","exactMatch","AddressUtil","CITIES","c","partialMatch","countDiff","add","remove","matchNoDash","partialMatchNoDash","isIncluded","autoCorrectStreet","street","leadingZeroRegExp","leadingZeroMatches","getZipCodeFromCity","ZIPCODE_CITY","reduce","selected","zipcode","getCityFromZipCode","zip","rawAddress","candidates","candidate","isZipCode","ZIPCODES","isFormatted","address","rawAddressParts","COUNTRIES","country","splice","rawParts","complete","REGIONS","region","removeDuplicates","reference","getCycleDateFromFullDate","date","cycle","toISOWeekDate","toISODate","displayWeekDay","weekDay","DateUtil","WEEK_DAYS","generatePeriod","fromDate","toDate","initialValue","addDate","MAX_DAYS","PERIOD_MAX_DATES","jump","week","month","cursor","getOpenPeriods","openings","closings","results","opening","tmpOpenings","closing","from","to","startLater","endEarlier","cut","shift","limitDate","targetDate","baseDate","limitInSeconds","toISO","seconds","localeToISO","localeDate","isoDate","frFormat1","frFormat2","isoFormat","slotToTime","timeSlot","timeFormat","slotFormat","delay","unit","abs","toUTC","diff","roundingInMs","dateTime","toMillis","zone","avg","total","accumulator","MathUtil","applyVariation","variation","median","valuesSorted","sort","b","percentage","decimals","originalValue","newValue","percent","compact","options","ObjectUtil","isObject","removeEmptyString","applyTaxes","priceTaxExcluded","taxRates","priceTaxIncluded","rate","calculateTaxes","taxes","displayWithCurrency","price","isoCurrency","currency","PriceUtil","currencies","newPrice","position","symbol","standardPrice","toLocaleString","style","useGrouping","minimumFractionDigits","maximumFractionDigits","precision","priceInCents","precisionInCents","rest"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"common-api.node.min.js","mappings":"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","sources":["webpack://SmilePlayerCommon/webpack/universalModuleDefinition","webpack://SmilePlayerCommon/external commonjs \"emoji-regex\"","webpack://SmilePlayerCommon/webpack/bootstrap","webpack://SmilePlayerCommon/webpack/runtime/compat get default export","webpack://SmilePlayerCommon/webpack/runtime/define property getters","webpack://SmilePlayerCommon/webpack/runtime/hasOwnProperty shorthand","webpack://SmilePlayerCommon/webpack/runtime/make namespace object","webpack://SmilePlayerCommon/./src/constant/Path.ts","webpack://SmilePlayerCommon/./src/exception/MainException.ts","webpack://SmilePlayerCommon/./src/exception/BadParameterException.ts","webpack://SmilePlayerCommon/./src/exception/BadRequestException.ts","webpack://SmilePlayerCommon/./src/exception/ConflictException.ts","webpack://SmilePlayerCommon/./src/exception/DuplicateException.ts","webpack://SmilePlayerCommon/./src/exception/ExternalApiException.ts","webpack://SmilePlayerCommon/./src/exception/InternalException.ts","webpack://SmilePlayerCommon/./src/exception/NotImplementedException.ts","webpack://SmilePlayerCommon/./src/exception/ObjectNotFoundException.ts","webpack://SmilePlayerCommon/./src/exception/PageNotFoundException.ts","webpack://SmilePlayerCommon/./src/exception/UnauthorizedException.ts","webpack://SmilePlayerCommon/external commonjs \"@sentry/node\"","webpack://SmilePlayerCommon/external commonjs \"@sentry/tracing\"","webpack://SmilePlayerCommon/external commonjs \"@sentry/integrations\"","webpack://SmilePlayerCommon/./src/tool/Env.ts","webpack://SmilePlayerCommon/./src/tool/Environment.ts","webpack://SmilePlayerCommon/./src/util/HelperUtil.ts","webpack://SmilePlayerCommon/./src/tool/Logger.ts","webpack://SmilePlayerCommon/./src/http/HandlerController.ts","webpack://SmilePlayerCommon/./src/http/AuthenticationMiddleware.ts","webpack://SmilePlayerCommon/./src/http/AuthorizationMiddleware.ts","webpack://SmilePlayerCommon/external node-commonjs \"crypto\"","webpack://SmilePlayerCommon/external commonjs \"express\"","webpack://SmilePlayerCommon/external commonjs \"cors\"","webpack://SmilePlayerCommon/external commonjs \"compression\"","webpack://SmilePlayerCommon/external commonjs \"helmet\"","webpack://SmilePlayerCommon/external commonjs \"connect-timeout\"","webpack://SmilePlayerCommon/./src/http/Server.ts","webpack://SmilePlayerCommon/external commonjs \"axios\"","webpack://SmilePlayerCommon/external commonjs \"luxon\"","webpack://SmilePlayerCommon/external node-commonjs \"querystring\"","webpack://SmilePlayerCommon/external commonjs \"retry\"","webpack://SmilePlayerCommon/./src/tool/Retry.ts","webpack://SmilePlayerCommon/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/external commonjs \"color-name\"","webpack://SmilePlayerCommon/./src/util/GeneratorUtil.ts","webpack://SmilePlayerCommon/./src/tool/FileSystem.ts","webpack://SmilePlayerCommon/external commonjs \"clean-css\"","webpack://SmilePlayerCommon/external commonjs \"html-minifier-terser\"","webpack://SmilePlayerCommon/./src/templating/MinifierEngine.ts","webpack://SmilePlayerCommon/./src/templating/TemplateEngine.ts","webpack://SmilePlayerCommon/external commonjs \"node-mailjet\"","webpack://SmilePlayerCommon/./src/service/sender/EmailSenderService.ts","webpack://SmilePlayerCommon/./src/tool/Configuration.ts","webpack://SmilePlayerCommon/external commonjs \"typeorm\"","webpack://SmilePlayerCommon/./src/tool/Database.ts","webpack://SmilePlayerCommon/external commonjs \"prettyjson\"","webpack://SmilePlayerCommon/./src/tool/Displayer.ts","webpack://SmilePlayerCommon/./src/tool/Downloader.ts","webpack://SmilePlayerCommon/external commonjs \"fast-diff\"","webpack://SmilePlayerCommon/./src/util/StringUtil.ts","webpack://SmilePlayerCommon/./src/util/FormatterUtil.ts","webpack://SmilePlayerCommon/./src/util/AddressUtil.ts","webpack://SmilePlayerCommon/./src/util/DateUtil.ts","webpack://SmilePlayerCommon/./src/util/ExtractorUtil.ts","webpack://SmilePlayerCommon/./src/util/MathUtil.ts","webpack://SmilePlayerCommon/./src/util/ObjectUtil.ts","webpack://SmilePlayerCommon/./src/util/PriceUtil.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SmilePlayerCommon\"] = factory();\n\telse\n\t\troot[\"SmilePlayerCommon\"] = factory();\n})(global, function() {\nreturn ","module.exports = require(\"emoji-regex\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export class Path {\n private static BASE_PATH: string = './';\n\n public static registerBasePath(basePath: string): void {\n if (process.env.APP_HOME !== undefined) {\n Path.BASE_PATH = process.env.APP_HOME + '/';\n } else {\n Path.BASE_PATH = basePath + (basePath.endsWith('/') ? '' : '/');\n }\n }\n\n public static data(): string {\n return Path.BASE_PATH + 'data/';\n }\n\n public static db(): string {\n return Path.storage() + 'db/';\n }\n\n public static root(): string {\n return Path.BASE_PATH;\n }\n\n public static session(): string {\n return Path.storage() + 'session/';\n }\n\n public static storage(): string {\n return Path.BASE_PATH + 'storage/';\n }\n}\n","import {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class MainException extends Error implements ExceptionContract {\n public code: number;\n public data: {[key: string]: any};\n\n public constructor(message: string, code?: number, data?: {[key: string]: any}) {\n super(message);\n this.code = code;\n this.data = data;\n this.name = 'MainException';\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, MainException);\n } else {\n this.stack = (new Error(message)).stack;\n }\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class BadParameterException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 400, data);\n this.name = 'BadParameterException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class BadRequestException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 400, data);\n this.name = 'BadRequestException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class ConflictException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 409, data);\n this.name = 'ConflictException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class DuplicateException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 409, data);\n this.name = 'DuplicateException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class ExternalApiException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 502, data);\n this.name = 'ExternalApiException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class InternalException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 500, data);\n this.name = 'InternalException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class NotImplementedException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 501, data);\n this.name = 'NotImplementedException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class ObjectNotFoundException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 404, data);\n this.name = 'ObjectNotFoundException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class PageNotFoundException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 404, data);\n this.name = 'PageNotFoundException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class UnauthorizedException extends MainException implements ExceptionContract {\n public static readonly ERROR_CODE: number = 401;\n\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, UnauthorizedException.ERROR_CODE, data);\n this.name = 'UnauthorizedException';\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@sentry/node\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@sentry/tracing\");","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","export const isNullOrUndefined: (obj: unknown) => boolean = (obj) => {\n return obj === undefined || obj === null;\n};\n","import * as Sentry from '@sentry/node';\nimport * as Tracing from '@sentry/tracing';\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';\nimport * as express from 'express';\nimport {isNullOrUndefined} from 'common/util/HelperUtil';\n\nexport class Logger {\n public static init(sentryToken: string, app: express.Express): void {\n if (Environment.getMode() === Env.PRODUCTION) {\n // const tracesSampleRate: number = 0.001;\n const tracesSampleRate: number = 0; // TODO enable tracing\n Sentry.init({\n dsn: sentryToken,\n integrations: [\n new CaptureConsole({\n levels: ['error', 'warn', 'log']\n }),\n // enable HTTP calls tracing\n new Sentry.Integrations.Http({ tracing: true }),\n // enable Express.js middleware tracing\n new Tracing.Integrations.Express({\n // to trace all requests to the default router\n app\n // alternatively, you can specify the routes you want to trace:\n // router: someRouter,\n })\n ],\n environment: Environment.getMode(),\n maxBreadcrumbs: 50,\n tracesSampleRate: tracesSampleRate,\n tracesSampler: (samplingContext) => {\n if (typeof samplingContext.transactionContext?.startTimestamp !== 'number' || typeof samplingContext.transactionContext?.endTimestamp !== 'number') {\n return tracesSampleRate;\n }\n if (samplingContext.transactionContext.endTimestamp - samplingContext.transactionContext.startTimestamp > 0.75) {\n return tracesSampleRate;\n }\n\n return 0;\n }\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 } else {\n Sentry.addBreadcrumb({\n category: 'info',\n message: message,\n data: extra,\n level: 'info'\n });\n }\n }\n\n public static debug(message: string, extra?: any): void {\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.log(message); // eslint-disable-line no-console\n } else {\n console.log(message, extra); // eslint-disable-line no-console\n }\n } else {\n Sentry.addBreadcrumb({\n category: 'debug',\n message: message,\n data: extra,\n level: 'debug'\n });\n }\n }\n\n public static info(message: string, extra?: any): void {\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.info(message); // eslint-disable-line no-console\n } else {\n console.info(message, extra); // eslint-disable-line no-console\n }\n } else {\n Sentry.withScope(scope => {\n if (extra !== undefined) {\n scope.setExtra('extra', JSON.stringify(extra));\n }\n Sentry.captureMessage(message);\n });\n }\n }\n\n public static warning(error: ExceptionContract, extra?: any): void {\n if(!isNullOrUndefined((error as any).response)) {\n if (typeof extra !== 'object') {\n extra = {};\n }\n extra.requestErrorData = (error as any).response.data;\n }\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.warn(error); // eslint-disable-line no-console\n } else {\n console.warn(error, extra); // eslint-disable-line no-console\n }\n } else {\n Sentry.withScope(scope => {\n if (extra !== undefined) {\n scope.setExtra('extra', JSON.stringify(extra));\n }\n if (error.data !== undefined) {\n scope.setExtra('data', JSON.stringify(error.data));\n }\n Sentry.captureException(error);\n });\n }\n }\n\n public static error(error: ExceptionContract, extra?: any): void {\n if ([UnauthorizedException.ERROR_CODE].includes(error.code)) {\n return;\n }\n if(!isNullOrUndefined((error as any).response)) {\n if (typeof extra !== 'object') {\n extra = {};\n }\n extra.requestErrorData = (error as any).response.data;\n }\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.error(error); // eslint-disable-line no-console\n } else {\n console.error(error, extra); // eslint-disable-line no-console\n }\n } else {\n Sentry.withScope(scope => {\n if (extra !== undefined) {\n scope.setExtra('extra', JSON.stringify(extra));\n }\n if (error.data !== undefined) {\n scope.setExtra('data', JSON.stringify(error.data));\n }\n Sentry.captureException(error);\n });\n }\n }\n\n public static requestHandler(): any {\n return Sentry.Handlers.requestHandler();\n }\n\n public static tracingHandler(): any {\n return Sentry.Handlers.tracingHandler();\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.set('trust proxy', true);\n this.app.use(compression({level: -1}));\n this.app.use(timeout('300s'));\n this.app.use(express.json({\n inflate: true,\n limit: '10mb',\n reviver: null,\n strict: true,\n type: 'application/json',\n verify: undefined\n }));\n this.app.use(express.urlencoded({\n limit: '10mb'\n }));\n this.app.use(cors({\n origin: [backendLocalUrl].concat(origins),\n credentials: true\n }));\n this.app.use(helmet());\n this.app.use(express.json());\n this.app.listen(backendPort, () => {\n Logger.debug('server is running on ' + backendLocalUrl);\n });\n }\n\n return this.app;\n }\n\n public getSessionSecret(sessionCookieName: string): string {\n return crypto.createHash('sha1').update(sessionCookieName + Server.SALT).digest('hex');\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"axios\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"luxon\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"querystring\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"retry\");","import * as retry from 'retry';\n\nexport class Retry {\n public static async request(process: () => Promise<void>, retries: number = 2, logger: (error: Error) => void): Promise<any> {\n const operation = retry.operation({\n retries: retries,\n factor: 1,\n minTimeout: 0,\n maxTimeout: 0,\n randomize: false\n });\n\n return new Promise<any>((resolve, reject) => {\n operation.attempt(() => {\n process().then(resolve).catch((error) => {\n if (operation.retry(error)) {\n if (typeof logger === 'function') {\n logger(error);\n }\n } else {\n reject(error);\n }\n });\n });\n });\n }\n}\n","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: Record<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 const target: DateTime = DateTime.fromISO(sendAt ?? (new Date()).toISOString(), { setZone: true }).setZone('Europe/Paris');\n if (isCommercial) { // do not send between 21h and 9h\n if (target.hour >= 21) {\n params.date_envoi = target.plus({day: 1}).set({hour: 9}).toFormat('ddMMyyyy-HH:mm');\n } else if (target.hour < 9) {\n params.date_envoi = target.set({hour: 9}).toFormat('ddMMyyyy-HH:mm');\n }\n } else { // do not send between 00h and 8h\n if (target.hour < 8) {\n params.date_envoi = target.set({hour: 8}).toFormat('ddMMyyyy-HH:mm');\n }\n }\n\n if (this.mode === Env.TEST) {\n Logger.info('Simulation Mode: SMS has been sent', {params: params});\n } else {\n if (this.mode === Env.DEVELOPMENT) {\n phones = ['+15145705214'];\n }\n\n const response: {data: string} = await axios.post(SmsSenderService.BASE_API_URL + 'sendSMS.do',\n querystring.stringify(params, '&', '=', {encodeURIComponent: (p) => p}), {\n timeout: 30000\n });\n\n if (response.data.length > 0 && response.data.trim().substring(0, 1) !== '0') {\n throw new ExternalApiException('Error: ' + response.data, params);\n }\n }\n }, 0, Logger.error.bind(Logger));\n }\n\n private checkPhoneFormat(phones: string[]): string[] {\n return phones.filter((phone) => ValidatorUtil.isIntMobilePhone(phone));\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"path\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"mustache\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"lodash\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"fs\");","export const asyncForEach: (array: any[], callback: (item: any) => Promise<void>) => Promise<void> = async (array, callback) => {\n for (let i: number = 0; i < array.length; i++) { // eslint-disable-line\n await callback(array[i]);\n }\n};\n\nexport const wait: (time: number) => Promise<void> = (time) => {\n return new Promise((resolve) => setTimeout(resolve, time));\n};\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"color-name\");","import * as colors from 'color-name';\n\nexport class GeneratorUtil {\n private static readonly symbolUpperCases: string[] = [\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'K', 'M', 'N', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'\n ];\n private static readonly symbolLowerCases: string[] = [\n 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'k', 'm', 'n', 'p', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'\n ];\n\n public static code(size: number): string {\n if (size === null || size === undefined) {\n size = 6;\n }\n\n let code: string = '';\n while (code.length < size) {\n code += GeneratorUtil.symbolUpperCases[GeneratorUtil.int(0, GeneratorUtil.symbolUpperCases.length - 1)];\n }\n\n return code;\n }\n\n public static color(alpha: number = 1): string {\n const alphaHex: string = GeneratorUtil.rgbToHex(Math.round(255 * alpha));\n const defaultColor: string = '#000000' + alphaHex;\n const colorList: number[][] = Object.values(colors);\n if (colorList.length === 0) {\n return defaultColor;\n }\n const rgb: number[] = colorList[GeneratorUtil.int(0, colorList.length - 1)];\n if (rgb.length !== 3) {\n return defaultColor;\n }\n\n return '#' + GeneratorUtil.rgbToHex(rgb[0]) + GeneratorUtil.rgbToHex(rgb[1]) + GeneratorUtil.rgbToHex(rgb[2]) + alphaHex;\n }\n\n private static rgbToHex(rgb: number): string {\n const hex: string = rgb.toString(16);\n if (hex.length === 1) {\n return '0' + hex;\n }\n\n return hex;\n }\n\n public static int(min: number, max: number): number {\n if (min === null || min === undefined) {\n min = 0;\n }\n if (max === null || max === undefined) {\n max = Number.POSITIVE_INFINITY;\n }\n\n min = Math.ceil(min);\n max = Math.floor(max);\n\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n\n public static password(size: number): string {\n if (size === null || size === undefined) {\n size = 8;\n }\n\n let code: string = '';\n while (code.length < size) {\n switch (GeneratorUtil.int(1, 3)) {\n case 1:\n code += GeneratorUtil.symbolUpperCases[GeneratorUtil.int(0, GeneratorUtil.symbolUpperCases.length - 1)];\n break;\n case 2:\n code += GeneratorUtil.symbolLowerCases[GeneratorUtil.int(0, GeneratorUtil.symbolLowerCases.length - 1)];\n break;\n default:\n code += String(GeneratorUtil.int(0, 9));\n }\n }\n\n return code;\n }\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {BadParameterException} from 'common/exception/BadParameterException';\nimport {asyncForEach} from 'common/util/PromiseUtil';\nimport {GeneratorUtil} from 'common/util/GeneratorUtil';\n\nexport class FileSystem implements FileSystemContract {\n public dirPath(filePath: string): string {\n const i: number = path.resolve(filePath).lastIndexOf(path.sep);\n if (i < 0) {\n return filePath;\n }\n\n return path.resolve(path.resolve(filePath).substr(0, i + 1)) + path.sep;\n }\n\n public async listFiles(dirPath: string): Promise<string[]> {\n if (!this.isDir(dirPath)) {\n throw new BadParameterException(String(dirPath) + ' does not exist or is not a directory');\n }\n\n const separator: string = dirPath.endsWith('/') ? '' : '/';\n const files: string[] = fs.readdirSync(dirPath);\n\n const output: string[] = [];\n await asyncForEach(files, async (fileName: string) => {\n if (this.isFile(dirPath + separator + fileName)) {\n output.push(dirPath + separator + fileName);\n }\n });\n\n return output;\n }\n\n public async randomFile(dirPath: string, suggestion?: number): Promise<string> {\n const filenames: string[] = await this.listFiles(dirPath);\n if (filenames.length === 0) {\n return undefined;\n }\n\n let index: number;\n if (suggestion !== undefined) {\n index = Math.max(suggestion, 0) % filenames.length;\n } else {\n index = GeneratorUtil.int(0, filenames.length - 1);\n }\n\n return filenames[index];\n }\n\n public async move(filePath: string, dirPath: string): Promise<void> {\n if (!this.isFile(filePath)) {\n throw new BadParameterException(String(filePath) + ' does not exist or is not a file');\n }\n\n fs.mkdirSync(dirPath, {recursive: true});\n if (!this.isDir(dirPath)) {\n throw new BadParameterException(String(dirPath) + ' does not exist or is not a directory');\n }\n\n return fs.renameSync(filePath, dirPath + path.basename(filePath));\n }\n\n public async read(filePath: string): Promise<string> {\n if (!this.isFile(filePath)) {\n throw new BadParameterException(String(filePath) + ' does not exist or is not a file');\n }\n\n return fs.readFileSync(filePath, 'utf8');\n }\n\n public async readJson(jsonPath: string): Promise<any> {\n const data: any = await this.read(jsonPath);\n if (!this.isJson(data)) {\n throw new BadParameterException(String(jsonPath) + ' does not contain JSON');\n }\n\n return JSON.parse(data);\n }\n\n public async readJsonFiles(dirPath: string): Promise<{name: string, data: any}[]> {\n if (!this.isDir(dirPath)) {\n throw new BadParameterException(String(dirPath) + ' does not exist or is not a directory');\n }\n\n const separator: string = dirPath.endsWith('/') ? '' : '/';\n const files: string[] = fs.readdirSync(dirPath);\n\n const output: {name: string, data: any}[] = [];\n await asyncForEach(files, async (fileName: string) => {\n if (this.isFile(dirPath + separator + fileName) && fileName.endsWith('.json')) {\n output.push({\n name: fileName,\n data: await this.readJson(dirPath + separator + fileName)\n });\n }\n });\n\n return output;\n }\n\n public async write(filePath: string, rawData: any): Promise<void> {\n let data: string = '';\n if (typeof rawData === 'string') {\n data = String(rawData);\n } else if (typeof rawData === 'number') {\n data = String(rawData);\n } else {\n data = JSON.stringify(rawData);\n }\n\n fs.mkdirSync(this.dirPath(filePath), {recursive: true});\n\n fs.writeFileSync(filePath, data, {encoding: 'utf8'});\n\n return Promise.resolve();\n }\n\n public async writeJson(jsonPath: string, data: any): Promise<void> {\n return this.write(jsonPath, JSON.stringify(data));\n }\n\n private isDir(dirPath: string): boolean {\n return fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();\n }\n\n private isFile(filePath: string): boolean {\n return fs.existsSync(filePath) && fs.statSync(filePath).isFile();\n }\n\n private isJson(data: any): boolean {\n try {\n JSON.parse(data);\n\n return true;\n } catch (_error) {\n return false;\n }\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"clean-css\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"html-minifier-terser\");","import {MinifierEngineContract} from 'common/templating/MinifierEngineContract';\nimport * as CleanCSS from 'clean-css';\nimport {minify as minifyHtml} from 'html-minifier-terser';\n\nexport class MinifierEngine implements MinifierEngineContract {\n public async css(content: string): Promise<string> {\n const minifier: CleanCSS.MinifierOutput = new CleanCSS({\n compatibility: 'ie7',\n format: false,\n level: 1,\n sourceMap: false\n });\n const result: CleanCSS.Output = minifier.minify(content);\n\n return result.styles;\n }\n\n public async html(content: string): Promise<string> {\n return await minifyHtml(content, {\n collapseBooleanAttributes: true,\n collapseInlineTagWhitespace: true,\n collapseWhitespace: true,\n continueOnParseError: false,\n decodeEntities: false,\n html5: true,\n minifyCSS: true,\n minifyJS: true,\n noNewlinesBeforeTagClose: true,\n preserveLineBreaks: false,\n preventAttributesEscaping: false,\n processConditionalComments: false,\n quoteCharacter: '\"',\n removeAttributeQuotes: false,\n removeComments: true,\n removeEmptyAttributes: true,\n removeEmptyElements: true,\n removeOptionalTags: false,\n removeRedundantAttributes: true,\n removeScriptTypeAttributes: false,\n removeStyleLinkTypeAttributes: false,\n removeTagWhitespace: false\n });\n }\n}\n","import * as path from 'path';\nimport {parse, render} from 'mustache';\nimport {cloneDeep} from 'lodash';\nimport {TemplateEngineContract} from 'common/templating/TemplateEngineContract';\nimport {FileSystem} from 'common/tool/FileSystem';\nimport {asyncForEach} from 'common/util/PromiseUtil';\nimport {MinifierEngineContract} from 'common/templating/MinifierEngineContract';\nimport {MinifierEngine} from 'common/templating/MinifierEngine';\nimport {ConflictException} from 'common/exception/ConflictException';\n\nexport class TemplateEngine implements TemplateEngineContract {\n private minifier: MinifierEngineContract;\n\n public constructor() {\n this.minifier = new MinifierEngine();\n }\n\n public async render(templatePath: string, data: {[key: string]: any}, baseIncludePath?: string): Promise<string> {\n if (!templatePath.endsWith('.template')) {\n templatePath += '.template';\n }\n const view: {[key: string]: any} = cloneDeep(data);\n const basePath: string = path.isAbsolute(templatePath) ? '' : __dirname + path.sep;\n const fileSystem = new FileSystem();\n const content: string = await fileSystem.read(basePath + templatePath);\n\n const includes: string[] = [];\n const results: any[][] = parse(content);\n results.forEach((result) => {\n if (result.length >= 4 && result[0] === '&' && result[1].startsWith('include:')) {\n includes.push(result[1]);\n }\n });\n\n if (includes.length > 0) {\n if (baseIncludePath === undefined) {\n baseIncludePath = path.dirname(basePath + templatePath) + path.sep;\n } else if (!path.isAbsolute(baseIncludePath)) {\n baseIncludePath = basePath + baseIncludePath;\n }\n await asyncForEach(includes, async (include) => {\n const includeParts: string[] = include.split(':');\n if (includeParts.length === 3 && view[include] !== undefined) {\n const templateName: string = includeParts[2];\n if (baseIncludePath.includes('/html')) {\n Object.keys(view[include]).forEach((key) => {\n view[include][key] = Array.isArray(view[include][key]) ? view[include][key].map((part: string) => part.replace(/(?:\\r\\n|\\r|\\n)/g, '<br>'))\n : view[include][key].replace(/(?:\\r\\n|\\r|\\n)/g, '<br>');\n });\n }\n view[include] = await this.render(path.resolve(baseIncludePath, templateName), view[include]);\n }\n });\n }\n\n const output: string = render(content, view);\n if (output.includes('{{') || output.includes('}}')) {\n throw new ConflictException('template: missing data to render template', {templatePath, data});\n }\n\n return templatePath.includes('html') ? this.minifier.html(output) : output;\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"node-mailjet\");","import {EmailSenderServiceContract} from 'common/service/sender/EmailSenderServiceContract';\nimport {TemplateEngine} from 'common/templating/TemplateEngine';\nimport {TemplateEngineContract} from 'common/templating/TemplateEngineContract';\nimport {ViewEmailTrackDeliveryContract} from 'common/templating/view/email/ViewEmailTrackDeliveryContract';\nimport {RecipientContract} from 'common/service/sender/RecipientContract';\nimport {SenderContract} from 'common/service/sender/SenderContract';\nimport * 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';\nimport {ViewEmailDiscountContract} from 'common/templating/view/email/ViewEmailDiscountContract';\nimport {asyncForEach} from 'common/util/PromiseUtil';\nimport {BadParameterException} from 'common/exception/BadParameterException';\n\nexport class EmailSenderService implements EmailSenderServiceContract {\n private readonly templateEngine: TemplateEngineContract;\n private readonly mailjet: any;\n private readonly mode: Environment;\n\n public constructor(apiPublicKey: string, apiSecretKey: string, mode: Environment) {\n this.templateEngine = new TemplateEngine();\n this.mailjet = 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: recipient, subject: data.base.subject, text: text, html: html}], false);\n }, 0, Logger.error.bind(Logger));\n }\n\n public async sendTrackDelivery(sender: SenderContract, recipient: RecipientContract, data: ViewEmailTrackDeliveryContract): Promise<void> {\n return await Retry.request(async () => {\n const textContent: string = await this.templateEngine.render('data/email/template/trackDelivery', data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: data.base});\n const htmlContent: string = await this.templateEngine.render('data/email/template/trackDelivery', data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: data.base});\n\n return await this.sendNotification(sender, [{recipient: recipient, subject: data.base.subject, text: text, html: html}], false);\n }, 0, Logger.error.bind(Logger));\n }\n\n public async sendUserNotification(sender: SenderContract, recipient: RecipientContract, data: ViewEmailUserNotificationContract, isCommercial: boolean = true, customId?: string): Promise<void> {\n return await Retry.request(async () => {\n const textContent: string = await this.templateEngine.render('data/email/template/userNotification', data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: data.base, isCommercial: isCommercial});\n const htmlContent: string = await this.templateEngine.render('data/email/template/userNotification', data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: data.base, isCommercial: isCommercial});\n\n return await this.sendNotification(sender, [{recipient: recipient, subject: data.base.subject, text: text, html: html}], isCommercial, customId);\n }, 0, Logger.error.bind(Logger));\n }\n\n public async sendUsersNotifications(sender: SenderContract, messages: {recipient: RecipientContract, data: ViewEmailUserNotificationContract}[],\n isCommercial?: boolean, customId?: string): Promise<void> {\n return await Retry.request(async () => {\n const contents: {recipient: RecipientContract, subject: string, text: string, html: string}[] = [];\n await asyncForEach(messages, async (message) => {\n const textContent: string = await this.templateEngine.render('data/email/template/userNotification', message.data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: message.data.base, isCommercial: isCommercial});\n const htmlContent: string = await this.templateEngine.render('data/email/template/userNotification', message.data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: message.data.base, isCommercial: isCommercial});\n contents.push({recipient: message.recipient, subject: message.data.base.subject, text: text, html: html});\n });\n\n return await this.sendNotification(sender, contents, isCommercial, customId);\n }, 0, Logger.error.bind(Logger));\n }\n\n public async sendDiscount(sender: SenderContract, recipient: RecipientContract, data: ViewEmailDiscountContract, isCommercial: boolean = true, customId?: string): Promise<void> {\n return await Retry.request(async () => {\n const textContent: string = await this.templateEngine.render('data/email/template/discount', data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: data.base, isCommercial: isCommercial});\n const htmlContent: string = await this.templateEngine.render('data/email/template/discount', data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: data.base, isCommercial: isCommercial});\n\n return await this.sendNotification(sender, [{recipient: recipient, subject: data.base.subject, text: text, html: html}], isCommercial, customId);\n }, 0, Logger.error.bind(Logger));\n }\n\n public async sendDiscounts(sender: SenderContract, messages: {recipient: RecipientContract, data: ViewEmailDiscountContract}[], isCommercial: boolean = true, customId?: string): Promise<void> {\n return await Retry.request(async () => {\n const contents: {recipient: RecipientContract, subject: string, text: string, html: string}[] = [];\n await asyncForEach(messages, async (message) => {\n const textContent: string = await this.templateEngine.render('data/email/template/discount', message.data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: message.data.base, isCommercial: isCommercial});\n const htmlContent: string = await this.templateEngine.render('data/email/template/discount', message.data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: message.data.base, isCommercial: isCommercial});\n contents.push({recipient: message.recipient, subject: message.data.base.subject, text: text, html: html});\n });\n\n return await this.sendNotification(sender, contents, isCommercial, customId);\n }, 0, Logger.error.bind(Logger));\n }\n\n // private async sendCampaign(sender: SenderContract, recipients: RecipientContract[], subject: string, text: string, html: string): Promise<void> {\n // try {\n // await this.mailjet.post('send').request({\n // FromEmail: sender.contact,\n // FromName: sender.name,\n // Subject: subject,\n // 'Text-part': text,\n // 'Html-part': html,\n // Recipients: [\n // recipients.map((recipient) => {\n // return { Name: recipient.name, Email: recipient.contact };\n // }),\n // ],\n // });\n //\n // return Promise.resolve();\n // } catch (error) {\n // return Promise.reject(new MainException(error.message, Number(error.statusCode)));\n // }\n // }\n\n private async sendNotification(sender: SenderContract, contents: {recipient: RecipientContract, subject: string, text: string, html: string}[],\n isCommercial: boolean = false, customId?: string): Promise<void> {\n if (contents.length === 0) {\n throw new BadParameterException('email: missing messages');\n }\n\n try {\n if (this.mode === Env.TEST) {\n Logger.info('Simulation Mode: Email has been sent', {sender: sender, recipients: contents.map((content) => content.recipient)});\n } else {\n const messages: {From:{Name: string,Email: string},To:[{Name: string,Email: string}], Subject: string, TextPart: string, HTMLPart: string, Priority:0 | 1 | 2, customID: string}[] = [];\n await asyncForEach(contents, async (content) => {\n if (this.mode === Env.DEVELOPMENT) {\n content.recipient.contact = 'developer@onylab.com';\n }\n messages.push({\n 'From': {\n 'Name': sender.name,\n 'Email': sender.contact\n },\n 'To': [{\n 'Name': content.recipient.name,\n 'Email': content.recipient.contact\n }],\n 'Subject': content.subject,\n 'TextPart': content.text,\n 'HTMLPart': content.html,\n 'Priority': isCommercial ? 0 : 2,\n 'customID': customId === undefined ? undefined : String(customId)\n });\n });\n await this.mailjet.post('send', {'version': 'v3.1'}).request({ Messages: messages });\n }\n } catch (error) {\n throw new MainException(error.message, Number(error.statusCode));\n }\n }\n}\n","import {ConfigurationContract} from 'common/tool/ConfigurationContract';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {FileSystem} from 'common/tool/FileSystem';\nimport {Env} from 'common/tool/Env';\nimport {merge} from 'lodash';\nimport {Environment} from 'common/tool/Environment';\n\nexport class Configuration implements ConfigurationContract {\n private static config: any;\n private static root: string;\n private static environment: Env;\n private readonly filesystem: FileSystemContract;\n\n public constructor(root: string, environment?: Env) {\n this.filesystem = new FileSystem();\n if (Configuration.root === undefined || Configuration.root !== root) {\n Configuration.root = root;\n Configuration.config = undefined;\n }\n const currentEnvironment: string = (environment === undefined ? Environment.getMode() : environment);\n if (Configuration.environment === undefined || Configuration.environment !== currentEnvironment) {\n Configuration.environment = environment === undefined ? Environment.getMode() : environment;\n Configuration.config = undefined;\n }\n }\n\n public async full(): Promise<any> {\n await this.init();\n\n return Configuration.config;\n }\n\n private async init(): Promise<void> {\n if (Configuration.config === undefined) {\n if (Configuration.root === undefined) {\n Configuration.config = {};\n } else {\n Configuration.config = await this.filesystem.readJson(Configuration.root + 'data/config.json');\n if ([Env.DEVELOPMENT, Env.TEST].includes(Configuration.environment)) {\n try {\n Configuration.config = merge(Configuration.config, await this.filesystem.readJson(Configuration.root + 'data/config_' + String(Configuration.environment) + '.json'));\n } catch (_e) {\n // nothing\n }\n }\n\n }\n }\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"typeorm\");","import {Connection, createConnection} from 'typeorm';\nimport {DatabaseContract} from 'common/tool/DatabaseContract';\nimport {FileSystem} from 'common/tool/FileSystem';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {BadParameterException} from 'common/exception/BadParameterException';\nimport {Logger} from 'common/tool/Logger';\n\n// TypeORM documation, types: https://github.com/typeorm/typeorm/blob/master/src/driver/types/ColumnTypes.ts\nexport class Database implements DatabaseContract {\n private root: string;\n private db: any;\n private connection: Connection;\n\n public constructor(root: string) {\n this.root = root;\n }\n\n public async connect(name: string, entities: any[]): Promise<void> {\n if (this.db === undefined) {\n await this.init();\n }\n\n const con: any = this.db[name];\n if (con !== undefined) {\n con.entities = entities;\n con.logging = ['error'];\n con.logger = true;\n con.bigNumberStrings = false;\n if (con.timezone === undefined) {\n con.timezone = 'Z';\n }\n if (con.charset === undefined) {\n con.charset = 'UTF8_GENERAL_CI';\n }\n this.connection = await createConnection(con);\n } else {\n Logger.error(new BadParameterException('bad connection name'));\n }\n }\n\n public async synchronize(): Promise<void> {\n if (this.connection !== undefined) {\n await this.connection.synchronize();\n }\n }\n\n public async close(): Promise<void> {\n return this.connection.close();\n }\n\n private async init(): Promise<void> {\n if (this.root === undefined) {\n this.db = {};\n } else {\n const fileSystem: FileSystemContract = new FileSystem();\n this.db = await fileSystem.readJson(this.root + 'data/db.json');\n }\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"prettyjson\");","import * as prettyjson from 'prettyjson';\nimport {DisplayerContract} from 'common/tool/DisplayerContract';\nimport {Logger} from 'common/tool/Logger';\n\nexport class Displayer implements DisplayerContract {\n public error(error: Error): void {\n Logger.error(error);\n }\n\n public info(message: string): void {\n Logger.trace(message);\n }\n\n public json(json: any): void {\n Logger.trace(prettyjson.render(json, {}));\n }\n\n public success(message: string): void {\n Logger.trace(message);\n }\n}\n","import {DownloaderContract} from 'common/tool/DownloaderContract';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport * as crypto from 'crypto';\nimport axios from 'axios';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {FileSystem} from 'common/tool/FileSystem';\n\nexport class Downloader implements DownloaderContract {\n private readonly fileSystem: FileSystemContract;\n\n public constructor() {\n this.fileSystem = new FileSystem();\n }\n\n public async image(url: string, outputPath: string, outputName?: string): Promise<string> {\n if (outputName === undefined) {\n outputName = crypto.randomBytes(20).toString('hex') + path.extname(url);\n }\n await this.fileSystem.write(outputPath + path.sep + outputName, '');\n\n const output: string = path.resolve(outputPath + path.sep + outputName);\n const writer: any = fs.createWriteStream(output);\n\n const response: any = await axios({\n url,\n method: 'GET',\n responseType: 'stream'\n });\n\n response.data.pipe(writer);\n\n return new Promise((resolve, reject) => {\n writer.on('finish', () => resolve(output));\n writer.on('error', reject);\n });\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"fast-diff\");","/* eslint-disable no-bitwise */\nimport {deburr, toLower, trim} from 'lodash';\nimport {isNullOrUndefined} from 'common/util/HelperUtil';\n\nexport class StringUtil {\n // alternative https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex\n public static escapeRegExp(str: string): string {\n if (typeof str !== 'string') {\n return str;\n }\n\n return str.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&'); // and .replace(/-/g, '\\\\x2d');\n }\n\n public static hash(str: string, seed: number = 0): string {\n let h1 = 0xdeadbeef ^ seed;\n let h2 = 0x41c6ce57 ^ seed;\n for(let i = 0, ch; i < str.length; i++) {\n ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507);\n h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909);\n h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507);\n h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909);\n\n return (h2>>>0).toString(16).padStart(8, '0') + (h1>>>0).toString(16).padStart(8, '0');\n }\n\n public static nullable(str: string): string {\n if (isNullOrUndefined(str)) {\n return null;\n }\n\n if (typeof str === 'string' && str.length === 0) {\n return null;\n }\n\n return str;\n }\n\n public static removeMultiSpaces(data: string) {\n if (typeof data !== 'string') {\n return data;\n }\n\n return data.replace(/\\s{2,}/g, ' ');\n }\n\n public static removeText(data: string, text: string) {\n if (typeof data !== 'string' || typeof text !== 'string' || text.length === 0) {\n return data;\n }\n\n try {\n data = data.replace(new RegExp(StringUtil.escapeRegExp(text), 'ig'), '');\n data = data.replace(new RegExp(StringUtil.escapeRegExp(text).replace(new RegExp('\\\\s', 'g'), '-'), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n\n return data;\n }\n\n public static replace(str: string, targets: string[], replacers: string[]): string {\n if (typeof str !== 'string') {\n return str;\n }\n\n if (targets.length !== replacers.length) {\n return str;\n }\n\n let output: string = str;\n targets.forEach((target, index) => {\n output = output.replace(new RegExp(StringUtil.escapeRegExp(target), 'ig'), replacers[index]);\n });\n\n return output;\n }\n\n public static slugify(raw: string, separator?: string): string {\n if (raw === undefined) {\n return '';\n }\n\n return toLower(trim(deburr(raw)).replace(/[^0-9a-z\\-\\_]/gi, separator));\n }\n\n public static truncate(str: string, limit: number): string {\n if (isNullOrUndefined(str) || str.length <= limit) {\n return str;\n }\n\n if (limit <= 3) {\n return '';\n }\n\n return str.slice(0, limit - 3) + '...';\n }\n}\n","import {StringUtil} from 'common/util/StringUtil';\n\nexport class FormatterUtil {\n public static trim(raw: string): string {\n return typeof raw === 'string' ? raw.trim() : raw;\n }\n\n public static capitalize(raw: string): string {\n const lowraw: string = FormatterUtil.lower(raw);\n\n return typeof lowraw === 'string' ? lowraw.split(' ').map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join (' ') : raw;\n }\n\n public static ucfirst(raw: string): string {\n const lowraw: string = FormatterUtil.lower(raw);\n\n return typeof lowraw === 'string' ? lowraw.charAt(0).toUpperCase() + lowraw.slice(1) : raw;\n }\n\n public static lower(raw: string): string {\n return typeof raw === 'string' ? raw.toLocaleLowerCase() : raw;\n }\n\n public static upper(raw: string): string {\n return typeof raw === 'string' ? raw.toLocaleUpperCase() : raw;\n }\n\n public static phone(raw: string, locale: string, output: 'nat' | 'int' = 'nat'): string {\n if (typeof raw === 'string') {\n raw = FormatterUtil.preformatPhone(raw, locale);\n switch (output) {\n case 'nat': // national\n return FormatterUtil.phoneNat(raw, locale);\n break;\n case 'int': // international\n return FormatterUtil.phoneInt(raw, locale);\n break;\n }\n }\n\n return raw;\n }\n\n public static stripEmoji(raw: string): string {\n let output: string = raw;\n\n if (typeof output === 'string') {\n const emojiRegex = require('emoji-regex'); /* eslint-disable-line @typescript-eslint/no-var-requires */\n\n let match;\n while ((match = emojiRegex().exec(output)) !== null) {\n try {\n output = output.replace(new RegExp('\\\\s' + StringUtil.escapeRegExp(match[0]), 'g'), '');\n output = output.replace(new RegExp(StringUtil.escapeRegExp(match[0]) + '\\\\s', 'g'), '');\n output = output.replace(new RegExp(StringUtil.escapeRegExp(match[0]), 'g'), '');\n } catch (_e) {\n // ignore\n }\n }\n }\n\n return output;\n }\n\n public static stripExoticCharacters(raw: string): string {\n if (typeof raw === 'string') {\n return raw.replace('’', '\\'').replace(/[\\u0250-\\ue007]+/g, '*');\n }\n\n return raw;\n }\n\n private static preformatPhone(raw: string, locale: string): string {\n raw = raw.trim().replace(/\\s?\\.?\\-?\\(?\\)?/g, '');\n switch (locale) {\n case 'fr':\n if ((new RegExp('^[1-9]')).test(raw) && raw.length === 9) {\n return '0' + raw;\n }\n break;\n }\n\n return raw;\n }\n\n private static phoneNat(raw: string, locale: string): string {\n switch (locale) {\n case 'fr': // format: 06 11 22 33 44\n if (raw.startsWith('+330')) {\n raw = raw.substring(3);\n } else if (raw.startsWith('+33')) {\n raw = '0' + raw.substring(3);\n } else if (raw.startsWith('0033')) {\n raw = '0' + raw.substring(4);\n } else if (raw.startsWith('33') && raw.length === 11) {\n raw = '0' + raw.substring(2);\n }\n\n if (raw.length === 10) {\n let i: number = 0;\n raw = raw.split('').map((num) => {\n i++;\n\n return num + (i % 2 === 0 ? ' ' : '');\n }).join('').trim();\n }\n\n return raw;\n }\n\n return raw;\n }\n\n private static phoneInt(raw: string, locale: string): string {\n if (raw.startsWith('+')) {\n return raw;\n }\n\n switch (locale) {\n case 'fr': // format: +33611223344\n if (raw.startsWith('0')) {\n raw = raw.substring(1);\n }\n\n return '+33' + raw;\n break;\n }\n\n return raw;\n }\n}\n","/* eslint-disable max-lines */\nimport {trim} from 'lodash';\nimport {isNullOrUndefined} from 'common/util/HelperUtil';\nimport {ValidatorUtil} from 'common/util/ValidatorUtil';\nimport * as diff from 'fast-diff';\nimport {StringUtil} from 'common/util/StringUtil';\nimport {FormatterUtil} from 'common/util/FormatterUtil';\n\nexport class AddressUtil {\n private static readonly ZIPCODES: string[] = [\n '78500', '78600', '78800', '95240', '95530',\n '78630', '78670', '78240', '78580', '78300', '78955', '78260',\n '95150', '95250', '95480', '95320', '95550', '95370', '95740', '95220',\n '95870', '78420', '78400', '78110', '78360', '78290', '78230', '78540', '78920',\n '95600'\n ];\n private static readonly CITIES: string[] = [\n 'Sartrouville', 'Cormeilles-en-Parisis', 'Houilles', 'Maisons-Laffitte', 'La Frette-sur-Seine', 'Argenteuil', 'Montesson', 'Le Mesnil-le-Roi', 'Bezons',\n 'Orgeval', 'Poissy', 'Morainvilliers', 'Villennes-sur-Seine', 'Medan', 'Chambourcy', 'Aigremont', 'Les Alluets-le-Roi', 'Carrières-sous-Poissy', 'Achères',\n 'Taverny', 'Beauchamp', 'Pierrelaye', 'Saint-Leu-la-Forêt', 'Bessancourt', 'Montigny-lès-Cormeilles', 'Herblay', 'Méry-sur-Oise',\n 'Carrières-sur-Seine', 'Bezons', 'Chatou', 'Le Vésinet', 'Montesson', 'Croissy', 'Croissy-sur-Seine', 'Le Pecq', 'Vernouillet', 'Ecquevilly'\n ];\n private static readonly ZIPCODE_CITY: {[zipCode: string]: string[]} = {\n '78500': ['Sartrouville'], '78600': ['Maisons-Laffitte', 'Le Mesnil-le-Roi'], '78800': ['Houilles'], '95240': ['Cormeilles-en-Parisis'], '95530': ['La Frette-sur-Seine'],\n '78100': ['Saint-Germain-en-Laye'], '95100': ['Argenteuil'],\n '78630': ['Orgeval', 'Morainvilliers'], '78670': ['Villennes-sur-Seine', 'Medan'], '78240': ['Chambourcy', 'Aigremont'], '78300': ['Poissy'],\n '78955': ['Carrières-sous-Poissy'], '78260': ['Achères'], '78540': ['Vernouillet'], '78920': ['Ecquevilly'],\n '95150': ['Taverny'], '95250': ['Beauchamp'], '95480': ['Pierrelaye'], '95320': ['Saint-Leu-la-Forêt'], '95550': ['Bessancourt'], '95370': ['Montigny-les-Cormeilles'], '95220': ['Herblay'],\n '95740': ['Frépillon'], '95540': ['Méry-sur-Oise'],\n '95870': ['Bezons'], '78420': ['Carrières-sur-Seine'], '78400': ['Chatou'], '78110': ['Le Vésinet'], '78360': ['Montesson'], '78290': ['Croissy-sur-Seine'], '78230': ['Le Pecq'],\n '95600': ['Eaubonne']\n };\n private static readonly REGIONS: string[] = ['île-de-france'];\n private static readonly COUNTRIES: string[] = ['France', 'FR'];\n\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(/(\\sbd\\s)/ig, ' boulevard ');\n street = street.replace(/(\\sbd\\.\\s)/ig, ' boulevard ');\n street = street.replace(/(\\schau\\.\\s)/ig, ' chaussée ');\n street = street.replace(/(\\strav\\.\\s)/ig, ' traverse ');\n street = street.replace(/(\\spl\\.\\s)/ig, ' place ');\n street = street.replace(/(\\spass\\.\\s)/ig, ' passage ');\n street = street.replace(/(\\ssent\\.\\s)/ig, ' sentier ');\n street = street.replace(/(\\simp\\.\\s)/ig, ' impasse ');\n street = street.replace(/(\\sall\\.\\s)/ig, ' allée ');\n street = street.replace(/(\\schem\\.\\s)/ig, ' chemin ');\n street = street.replace(/(\\sham\\.\\s)/ig, ' hameau ');\n street = street.replace(/(\\sdom\\.\\s)/ig, ' domaine ');\n\n const leadingZeroRegExp: RegExp = new RegExp('^(0+)[0-9]+,?\\\\s[a-zA-Z]+');\n const leadingZeroMatches: string[] = street.match(leadingZeroRegExp);\n if (leadingZeroMatches !== null && leadingZeroMatches.length === 2) {\n street = street.substring(leadingZeroMatches[1].length);\n }\n\n return street;\n }\n\n public static getZipCodeFromCity(city: string): string {\n if (isNullOrUndefined(city)) {\n return undefined;\n }\n\n return Object.keys(AddressUtil.ZIPCODE_CITY).reduce((selected, zipcode) => {\n if (AddressUtil.ZIPCODE_CITY[zipcode].find((name) => name.toLowerCase() === city.toLowerCase()) !== undefined) {\n return zipcode;\n }\n\n return selected;\n }, undefined);\n }\n\n public static getCityFromZipCode(zip: string, rawAddress: string): string {\n if (zip === undefined || rawAddress === undefined) {\n return undefined;\n }\n\n const candidates: string[] = AddressUtil.ZIPCODE_CITY[zip];\n if (candidates === undefined) {\n return undefined;\n }\n\n if (candidates.length === 1) {\n return candidates[0];\n }\n\n let city: string;\n rawAddress.split(',').forEach((part) => {\n city = candidates.find((candidate) => {\n return part.trim().toLowerCase() === candidate.trim().toLowerCase();\n });\n });\n if (city !== undefined) {\n return city;\n }\n\n return candidates[0];\n }\n\n public static isZipCode(zip: string): boolean {\n if (typeof zip !== 'string') {\n return false;\n }\n\n if (AddressUtil.ZIPCODES.includes(zip)) {\n return true;\n }\n\n return ValidatorUtil.isNumber(zip) && zip.length === 5 && !zip.includes('.') && !zip.includes('-');\n }\n\n public static parse(raw: string, isFormatted: boolean = true): { street?: string, zip?: string, city?: string, country?: string } {\n const address: { street?: string, zip?: string, city?: string, country?: string } = {};\n if (!isNullOrUndefined(raw)) {\n const rawAddressParts: string[] = raw.split(',');\n if (rawAddressParts.length >= 3 && isFormatted) {\n if (AddressUtil.COUNTRIES.find((c) => raw.toLowerCase().includes(' ' + c.toLowerCase())) === undefined) {\n rawAddressParts.push('France');\n }\n\n let i: number = rawAddressParts.length - 1;\n address.country = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n if (rawAddressParts[i] !== undefined && rawAddressParts[i].trim().includes(' ')) {\n const rawParts: string[] = rawAddressParts[i].trim().split(' ');\n address.zip = rawParts[0] === undefined ? undefined : rawParts[0].trim();\n rawParts.splice(0, 1);\n address.city = rawParts.join(' ').trim();\n rawAddressParts.splice(i--, 1);\n } else if (!isNaN(Number(rawAddressParts[i].trim()))) {\n address.zip = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n if (i >= 2) {\n address.city = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n }\n } else if (!isNaN(Number(rawAddressParts[i - 1].trim()))) {\n address.city = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n address.zip = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n } else {\n address.city = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n }\n address.street = rawAddressParts.map((part) => part.trim()).join(' ').trim();\n } else {\n let rawAddress: string = raw.toLowerCase();\n AddressUtil.ZIPCODES.forEach((zipcode) => {\n if (rawAddress.includes(zipcode)) {\n address.zip = zipcode;\n try {\n rawAddress = rawAddress.replace(new RegExp(StringUtil.escapeRegExp(zipcode), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n }\n });\n AddressUtil.CITIES.forEach((city) => {\n if (rawAddress.includes(city.toLowerCase()) && (address.zip === undefined || AddressUtil.ZIPCODE_CITY[address.zip]?.find((c) => c.toLowerCase() === city.toLowerCase()))) {\n address.city = city;\n try {\n rawAddress = rawAddress.replace(new RegExp(StringUtil.escapeRegExp(city), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n }\n });\n AddressUtil.COUNTRIES.forEach((country) => {\n if (rawAddress.includes(' ' + country.toLowerCase()) && !rawAddress.includes('de ' + country.toLowerCase()) && !rawAddress.includes('de la ' + country.toLowerCase())) {\n address.country = country;\n try {\n rawAddress = rawAddress.replace(new RegExp(StringUtil.escapeRegExp(' ' + country), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n }\n });\n\n if (address.street === undefined) {\n address.street = trim(rawAddress.split(',').map((part) => part.trim()).join(' '), '-').trim();\n }\n }\n\n if (address.country === undefined) {\n address.country = 'France';\n }\n }\n\n if (address.street !== undefined) {\n address.street = FormatterUtil.lower(FormatterUtil.trim(String(address.street)));\n }\n if (address.zip !== undefined) {\n address.zip = FormatterUtil.upper(FormatterUtil.trim(String(address.zip)));\n }\n if (address.city !== undefined) {\n address.city = AddressUtil.autoCorrectCity(FormatterUtil.capitalize(FormatterUtil.trim(String(address.city))));\n }\n if (address.country !== undefined) {\n address.country = FormatterUtil.capitalize(FormatterUtil.trim(String(address.country)));\n }\n\n return AddressUtil.complete(address);\n }\n\n public static complete(address: { street?: string, zip?: string, city?: string, country?: string }): { street?: string, zip?: string, city?: string, country?: string } {\n if (address.city === undefined || address.city.length === 0) {\n const city: string = AddressUtil.getCityFromZipCode(address.zip, address.street);\n if (city !== undefined) {\n address.city = city;\n }\n }\n if (typeof address.street === 'string') {\n AddressUtil.REGIONS.forEach((region) => {\n address.street = StringUtil.removeText(address.street, region).trim();\n });\n }\n if (FormatterUtil.lower(address.country) === 'fr') {\n address.country = 'France';\n }\n\n return address;\n }\n\n public static removeDuplicates(str: string): string {\n if (typeof str !== 'string') {\n return str;\n }\n\n const output: string[] = [];\n\n str.split(',').forEach((part) => {\n if (output.find((o) => o.trim().toLowerCase().includes(part.trim().toLowerCase())) === undefined) {\n output.push(part);\n }\n });\n\n return output.join(',');\n }\n\n private static countDiff(str: string, reference: string): { add: number, remove: number } {\n const result: { add: number, remove: number } = { add: 0, remove: 0 };\n\n diff(str.toLowerCase(), reference.toLowerCase()).forEach((value) => {\n switch (value[0]) {\n case -1:\n result.remove += value[1].length;\n break;\n case 1:\n result.add += value[1].length;\n break;\n }\n });\n\n return result;\n }\n}\n","import {DateTime} from 'luxon';\nimport {cloneDeep} from 'lodash';\nimport {isNullOrUndefined} from 'common/util/HelperUtil';\n\nexport class DateUtil {\n private static readonly PERIOD_MAX_DATES: number = 90;\n private static readonly WEEK_DAYS: {[id: number]: string} = {1: 'lundi', 2: 'mardi', 3: 'mercredi', 4: 'jeudi', 5: 'vendredi', 6: 'samedi', 7: 'dimanche'};\n\n public static getCycleDateFromFullDate(date: string, cycle: 'daily' | 'weekly' | 'monthly'): string {\n if (cycle === 'weekly') {\n const result: string = DateTime.fromISO(date.replace(/-W([0-9])$/i, '-W0$1')).toISOWeekDate();\n if (result === null) {\n return date;\n }\n\n const parts: string[] = result.split('-');\n\n return parts.length > 2 ? parts[0] + '-' + parts[1] : parts.join('-');\n } else if (cycle === 'monthly') {\n return DateTime.fromISO(date).toFormat('yyyy-LL');\n }\n\n return DateTime.fromISO(date).toISODate();\n }\n\n public static displayWeekDay(weekDay: number): string {\n let displayWeekDay: string = '';\n if (DateUtil.WEEK_DAYS[weekDay] !== undefined) {\n displayWeekDay = DateUtil.WEEK_DAYS[weekDay];\n }\n\n return displayWeekDay;\n }\n\n public static generatePeriod(fromDate: string, toDate: string, initialValue: Record<string, any>, addDate: boolean = true, MAX_DAYS: number = DateUtil.PERIOD_MAX_DATES,\n cycle: 'daily' | 'weekly' | 'monthly' = 'daily'): {[date: string]: Record<string, any>} {\n const jump: {[str: string]: number} = {'daily': {day: 1}, 'weekly': {week: 1}, 'monthly': {month: 1}}[cycle];\n let cursor: string = DateTime.fromISO(fromDate, {setZone: true}).toISODate();\n const stop: string = DateTime.fromISO(toDate, {setZone: true}).toISODate();\n let i: number = 0;\n const data: {[date: string]: Record<string, any>} = {};\n while (cursor <= stop && i < MAX_DAYS) {\n const date: string = DateUtil.getCycleDateFromFullDate(cursor, cycle);\n data[date] = cloneDeep(initialValue);\n if (addDate) {\n data[date].date = date;\n }\n cursor = DateTime.fromISO(cursor, {setZone: true}).plus(jump).toISODate();\n i++;\n }\n\n return data;\n }\n\n public static getOpenPeriods(openings: {from: string, to: string}[], closings: {from: string, to: string}[]): {from: string, to: string}[] {\n const results: {from: string, to: string}[] = [];\n\n openings.forEach((opening) => {\n const tmpOpenings: {from: string, to: string}[] = [opening];\n while (tmpOpenings.length > 0) {\n const open: {from: string, to: string} = tmpOpenings[0];\n\n const isOpen: boolean = closings.find((closing) => closing.from <= open.from && open.to <= closing.to) === undefined;\n if (isOpen) {\n const startLater: {from: string, to: string} = closings.find((closing) => closing.from <= open.from && open.from < closing.to && closing.to < open.to);\n if (startLater !== undefined) {\n tmpOpenings.push({from: startLater.to, to: open.to});\n } else {\n const endEarlier: {from: string, to: string} = closings.find((closing) => open.from < closing.from && open.to > closing.from && open.to <= closing.to);\n if (endEarlier !== undefined) {\n tmpOpenings.push({from: open.from, to: endEarlier.from});\n } else {\n const cut: {from: string, to: string} = closings.find((closing) => open.from < closing.from && closing.to < open.to);\n if (cut !== undefined) {\n tmpOpenings.push({from: open.from, to: cut.from});\n tmpOpenings.push({from: cut.to, to: open.to});\n } else {\n results.push(open);\n }\n }\n }\n }\n\n tmpOpenings.shift();\n }\n });\n\n\n return results;\n }\n\n public static limitDate(targetDate: string, baseDate: string, limitInSeconds: number = 0): string {\n if (targetDate === undefined || baseDate === undefined) {\n return undefined;\n }\n\n const target: string = DateTime.fromISO(targetDate, {setZone: true}).toISO();\n const limit: string = DateTime.fromISO(baseDate, {setZone: true}).plus({seconds: limitInSeconds}).toISO();\n\n return target > limit ? limit : target;\n }\n\n public static localeToISO(localeDate: string): string {\n const frFormat1: RegExp = new RegExp('[0-9]{2}/[0-9]{2}/[0-9]{4}');\n const frFormat2: RegExp = new RegExp('[0-9]{2}-[0-9]{2}-[0-9]{4}');\n const isoFormat: RegExp = new RegExp('[0-9]{4}-[0-9]{2}-[0-9]{2}');\n\n let isoDate: string;\n if (frFormat1.test(localeDate)) {\n const parts: string[] = localeDate.split('/');\n isoDate = parts[2] + '-' + parts[1] + '-' + parts[0];\n } else if (frFormat2.test(localeDate)) {\n const parts: string[] = localeDate.split('-');\n isoDate = parts[2] + '-' + parts[1] + '-' + parts[0];\n } else if (isoFormat.test(localeDate)) {\n isoDate = localeDate;\n }\n\n return isoDate;\n }\n\n public static slotToTime(timeSlot: string): string {\n const timeFormat: RegExp = new RegExp('^(\\\\s)?[0-9]{2}:[0-9]{2}(\\\\s)?$');\n const slotFormat: RegExp = new RegExp('^(\\\\s)?[0-9]{2}:[0-9]{2}(\\\\s)?-(\\\\s)?[0-9]{2}:[0-9]{2}(\\\\s)?$');\n\n timeSlot = timeSlot.trim();\n\n let time: string;\n if (timeFormat.test(timeSlot)) {\n time = timeSlot.trim() + ':00';\n } else if (slotFormat.test(timeSlot)) {\n const parts: string[] = timeSlot.split('-');\n time = parts[0].trim() + ':00';\n }\n\n return time;\n }\n\n public static delay(fromDate: string, toDate: string, unit: 'minutes' | 'hours' | 'days' | 'months'): number {\n if (isNullOrUndefined(fromDate) || isNullOrUndefined(toDate)) {\n return 0;\n }\n\n return Math.round(Math.abs(DateTime.fromISO(fromDate, {setZone: true}).toUTC()\n .diff(DateTime.fromISO(toDate, {setZone: true}).toUTC(), [unit])[unit]))\n }\n\n public static round(date: string, roundingInMs: number = 0): string {\n if (typeof date !== 'string') {\n return date;\n }\n\n const dateTime: DateTime = DateTime.fromISO(date, {setZone: true});\n\n return DateTime.fromMillis(Math.round((+dateTime.toMillis()) / roundingInMs) * roundingInMs).setZone(dateTime.zone).toISO();\n }\n}\n","export class ExtractorUtil {\n public static phone(raw: string, locale: 'fr'): string {\n if (typeof raw !== 'string') {\n return undefined;\n }\n\n raw = raw.trim().replace(/\\s?\\.?\\-?\\(?\\)?/g, '');\n switch (locale) {\n case 'fr': {\n const phoneFrRegex: RegExp = new RegExp('(0[6-7][0-9]{8})', 'i');\n const result: string[] = phoneFrRegex.exec(raw);\n if (result !== null && result.length > 0 && result[0] !== null) {\n return result[0];\n }\n }\n }\n\n return undefined;\n }\n}\n","export class MathUtil {\n public static avg(values: number[]): number {\n if (values.length === 0) {\n return 0;\n }\n\n const total: number = values.reduce((accumulator, value) => {\n return accumulator + value;\n }, 0);\n\n return MathUtil.round(total / values.length, 2);\n }\n\n public static applyVariation(value: number, variation: number): number {\n let increase: number;\n if (value >= 0) {\n increase = 1 + (variation / 100);\n } else {\n increase = 1 - (variation / 100);\n }\n\n return value * increase;\n }\n\n public static median(values: number[]): number {\n if (values.length === 0) {\n return 0;\n }\n if (values.length === 1) {\n return values[0];\n }\n\n const valuesSorted: number[] = values.sort((a, b) => {\n return a - b;\n });\n\n if (valuesSorted.length % 2 === 0) {\n return MathUtil.avg([valuesSorted[(valuesSorted.length / 2) - 1], valuesSorted[(valuesSorted.length / 2)]]);\n }\n\n return valuesSorted[Math.floor(valuesSorted.length / 2)];\n }\n\n public static percentage(part: number, total: number): number {\n if (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 Math.round(value * (10 ** decimals)) / (10 ** decimals);\n }\n\n public static variation(originalValue: number, newValue: number): number {\n let percent = 0;\n if (newValue !== 0) {\n if (originalValue !== 0) {\n percent = (newValue - originalValue) / Math.abs(originalValue) * 100;\n } else {\n percent = ((newValue > 0) ? 1 : -1) * 100;\n }\n } else if (originalValue !== 0) {\n percent = ((originalValue > 0) ? 1 : -1) * -100;\n }\n\n return Math.floor(percent);\n }\n}\n","import {isArray, isObject} from 'lodash';\n\nexport class ObjectUtil {\n public static compact(obj: any, options: {removeEmptyString?: boolean} = {}): any {\n if (isArray(obj)) {\n const ouput: any[] = [];\n obj.forEach((value) => {\n value = ObjectUtil.compact(value, options);\n if ((isArray(value) && value.length > 0)\n || (isObject(value) && Object.keys(value).length > 0)\n || (value !== undefined && value !== null && !isArray(value) && !isObject(value))) {\n ouput.push(value);\n }\n });\n\n return ouput;\n } else if (isObject(obj)) {\n const ouput: any = {};\n Object.keys(obj).forEach((key) => {\n let value: any = (obj as any)[key];\n if (isArray(value) || isObject(value)) {\n value = ObjectUtil.compact(value, options);\n if ((isArray(value) && value.length > 0)\n || (isObject(value) && Object.keys(value).length > 0)\n || (value !== undefined && value !== null && !isArray(value) && !isObject(value))) {\n ouput[key] = value;\n }\n } else if (value !== undefined && value !== null\n && (typeof value !== 'string' || options.removeEmptyString === false || value.length > 0)) {\n ouput[key] = value;\n }\n });\n\n return ouput;\n }\n\n return (typeof obj !== 'string' || options.removeEmptyString === false || obj.length > 0) ? obj : undefined;\n }\n}\n","import {MathUtil} from 'common/util/MathUtil';\n\nexport class PriceUtil {\n private static readonly currencies: {[iso: string]: {symbol: string, position: string}} = {\n 'CAD': {symbol: '$', position: 'before'},\n 'EUR': {symbol: '€', position: 'after'},\n 'USD': {symbol: '$', position: 'before'}\n };\n\n public static applyTaxes(priceTaxExcluded: string, taxRates: number[], decimals: number = 2): string {\n let priceTaxIncluded: number = Number(priceTaxExcluded);\n taxRates.forEach((rate) => {\n priceTaxIncluded += Number(priceTaxExcluded) * rate;\n });\n\n return String(MathUtil.round(priceTaxIncluded, decimals));\n }\n\n public static calculateTaxes(priceTaxExcluded: number, taxRates: number[]): number {\n let taxes: number = 0;\n taxRates.forEach((rate) => {\n taxes += priceTaxExcluded * rate;\n });\n\n return MathUtil.round(taxes, 2);\n }\n\n public static displayWithCurrency(price: string, isoCurrency: string): string {\n if (price === undefined || price === null) {\n return price;\n }\n\n const currency: {symbol: string, position: string} = PriceUtil.currencies[isoCurrency];\n\n let newPrice: string = price + ' ' + isoCurrency;\n if (currency !== undefined) {\n switch (currency.position) {\n case 'before':\n newPrice = currency.symbol + price;\n break;\n case 'after':\n newPrice = price + currency.symbol;\n break;\n }\n }\n\n return newPrice;\n }\n\n public static format(price: string, locale: 'fr' | 'us', decimals: number = 2): string {\n if (price === undefined || price === null) {\n return price;\n }\n\n const priceNumber: number = Number(price.replace(/\\,/gi, ''));\n const standardPrice: string = priceNumber.toLocaleString('en-US', {\n style: 'decimal',\n useGrouping: true,\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals\n });\n\n switch (locale) {\n case 'fr':\n return standardPrice.replace(/\\,/gi, ' ').replace(/\\./gi, ',');\n case 'us':\n return standardPrice;\n }\n }\n\n public static round(price: string, precision: number = 0.10): string {\n const priceInCents: number = Number(price) * 100;\n const precisionInCents: number = precision * 100;\n const rest: number = priceInCents % precisionInCents;\n\n return String(MathUtil.round((priceInCents - rest) + (rest < Math.ceil(precisionInCents / 2) ? 0 : precisionInCents), 2) / 100);\n }\n}\n"],"names":["root","factory","exports","module","define","amd","global","require","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","n","getter","__esModule","d","a","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","registerBasePath","basePath","process","env","APP_HOME","Path","BASE_PATH","endsWith","data","db","storage","session","message","code","name","Error","captureStackTrace","MainException","stack","UnauthorizedException","ERROR_CODE","Env","getMode","NODE_ENV","DEVELOPMENT","PRODUCTION","TEST","APP_ID","isNullOrUndefined","init","sentryToken","app","Environment","dsn","integrations","CaptureConsole","levels","tracing","environment","maxBreadcrumbs","tracesSampleRate","tracesSampler","samplingContext","transactionContext","startTimestamp","endTimestamp","trace","extra","includes","console","info","category","level","debug","log","scope","setExtra","JSON","stringify","warning","error","response","requestErrorData","warn","requestHandler","tracingHandler","errorHandler","_request","Logger","Number","status","isNaN","json","configuration","this","handler","request","next","authenticated","jwt","authApiKey","keys","Array","isArray","required","forEach","none","authNone","HandlerController","headers","Authorization","startsWith","parts","split","length","secret","urlStartsWith","find","originalUrl","can","_action","_subject","create","origins","port","backendPort","Server","DEFAULT_PORT","String","set","use","inflate","limit","reviver","strict","type","verify","origin","concat","credentials","listen","getSessionSecret","sessionCookieName","update","SALT","digest","retries","logger","operation","factor","minTimeout","maxTimeout","randomize","Promise","resolve","reject","attempt","then","catch","retry","isEmail","email","RegExp","test","isPhone","phone","isIntMobilePhone","caRegex","frRegex","usRegex","isNumber","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","target","Date","toISOString","hour","plus","day","BASE_API_URL","encodeURIComponent","p","timeout","trim","ExternalApiException","bind","filter","ValidatorUtil","asyncForEach","array","callback","i","wait","time","setTimeout","size","GeneratorUtil","symbolUpperCases","int","color","alpha","alphaHex","rgbToHex","round","defaultColor","colorList","values","rgb","hex","toString","min","max","POSITIVE_INFINITY","floor","random","password","symbolLowerCases","dirPath","filePath","lastIndexOf","substr","listFiles","isDir","separator","files","output","fileName","isFile","push","randomFile","suggestion","filenames","index","move","recursive","read","readJson","jsonPath","isJson","parse","readJsonFiles","write","rawData","encoding","writeJson","isDirectory","_error","css","content","compatibility","format","sourceMap","minify","styles","html","collapseBooleanAttributes","collapseInlineTagWhitespace","collapseWhitespace","continueOnParseError","decodeEntities","html5","minifyCSS","minifyJS","noNewlinesBeforeTagClose","preserveLineBreaks","preventAttributesEscaping","processConditionalComments","quoteCharacter","removeAttributeQuotes","removeComments","removeEmptyAttributes","removeEmptyElements","removeOptionalTags","removeRedundantAttributes","removeScriptTypeAttributes","removeStyleLinkTypeAttributes","removeTagWhitespace","minifier","MinifierEngine","render","templatePath","baseIncludePath","view","cloneDeep","__dirname","FileSystem","result","include","includeParts","templateName","part","ConflictException","apiPublicKey","apiSecretKey","templateEngine","TemplateEngine","mailjet","sendDeliveryDelay","sender","recipient","base","copyright","year","getUTCFullYear","text","sendNotification","subject","sendTrackDelivery","textContent","htmlContent","sendUserNotification","customId","sendUsersNotifications","messages","contents","sendDiscount","sendDiscounts","recipients","contact","post","Messages","statusCode","filesystem","Configuration","config","currentEnvironment","full","merge","connect","entities","con","logging","bigNumberStrings","timezone","charset","createConnection","connection","synchronize","close","fileSystem","success","image","url","outputPath","outputName","writer","method","responseType","pipe","on","escapeRegExp","str","hash","seed","h1","h2","ch","charCodeAt","imul","padStart","nullable","removeMultiSpaces","removeText","StringUtil","_e","targets","replacers","slugify","raw","toLower","deburr","truncate","slice","capitalize","lowraw","FormatterUtil","lower","word","charAt","toUpperCase","ucfirst","toLocaleLowerCase","upper","toLocaleUpperCase","locale","preformatPhone","phoneNat","phoneInt","stripEmoji","emojiRegex","match","exec","stripExoticCharacters","num","autoCorrectCity","city","toLowerCase","exactMatch","AddressUtil","CITIES","c","partialMatch","countDiff","add","remove","matchNoDash","partialMatchNoDash","isIncluded","autoCorrectStreet","street","leadingZeroRegExp","leadingZeroMatches","getZipCodeFromCity","ZIPCODE_CITY","reduce","selected","zipcode","getCityFromZipCode","zip","rawAddress","candidates","candidate","isZipCode","ZIPCODES","isFormatted","address","rawAddressParts","COUNTRIES","country","splice","rawParts","complete","REGIONS","region","removeDuplicates","reference","getCycleDateFromFullDate","date","cycle","toISOWeekDate","toISODate","displayWeekDay","weekDay","DateUtil","WEEK_DAYS","generatePeriod","fromDate","toDate","initialValue","addDate","MAX_DAYS","PERIOD_MAX_DATES","jump","week","month","cursor","getOpenPeriods","openings","closings","results","opening","tmpOpenings","closing","from","to","startLater","endEarlier","cut","shift","limitDate","targetDate","baseDate","limitInSeconds","toISO","seconds","localeToISO","localeDate","isoDate","frFormat1","frFormat2","isoFormat","slotToTime","timeSlot","timeFormat","slotFormat","delay","unit","abs","toUTC","diff","roundingInMs","dateTime","toMillis","zone","avg","total","accumulator","MathUtil","applyVariation","variation","median","valuesSorted","sort","b","percentage","decimals","originalValue","newValue","percent","compact","options","ObjectUtil","isObject","removeEmptyString","applyTaxes","priceTaxExcluded","taxRates","priceTaxIncluded","rate","calculateTaxes","taxes","displayWithCurrency","price","isoCurrency","currency","PriceUtil","currencies","newPrice","position","symbol","standardPrice","toLocaleString","style","useGrouping","minimumFractionDigits","maximumFractionDigits","precision","priceInCents","precisionInCents","rest"],"sourceRoot":""}
|