@onylab/common-api 0.1.172 → 0.1.175

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.
@@ -206,6 +206,14 @@ declare module "tool/Retry" {
206
206
  static request(process: () => Promise<void>, retries?: number): Promise<any>;
207
207
  }
208
208
  }
209
+ declare module "util/ValidatorUtil" {
210
+ export class ValidatorUtil {
211
+ static isEmail(email: string): boolean;
212
+ static isPhone(phone: string): boolean;
213
+ static isIntMobilePhone(phone: string): boolean;
214
+ static isNumber(number: string | number): boolean;
215
+ }
216
+ }
209
217
  declare module "service/sender/SmsSenderService" {
210
218
  import { SmsSenderServiceContract } from "service/sender/SmsSenderServiceContract";
211
219
  import { Environment } from "tool/Environment";
@@ -296,10 +304,14 @@ declare module "templating/view/email/ViewEmailUserNotificationContract" {
296
304
  import { ViewEmailElementH2Contract } from "templating/view/email/ViewEmailElementH2Contract";
297
305
  import { ViewEmailElementParagraphContract } from "templating/view/email/ViewEmailElementParagraphContract";
298
306
  import { ViewEmailElementBaseContract } from "templating/view/email/ViewEmailElementBaseContract";
307
+ import { ViewEmailElementButtonContract } from "templating/view/email/ViewEmailElementButtonContract";
299
308
  export interface ViewEmailUserNotificationContract {
300
309
  base: ViewEmailElementBaseContract;
301
310
  'include:0:h2': ViewEmailElementH2Contract;
302
311
  'include:0:p': ViewEmailElementParagraphContract;
312
+ 'include:0:button'?: ViewEmailElementButtonContract;
313
+ 'include:1:p'?: ViewEmailElementParagraphContract;
314
+ 'include:0:signature'?: ViewEmailElementParagraphContract;
303
315
  }
304
316
  }
305
317
  declare module "service/sender/EmailSenderServiceContract" {
@@ -484,13 +496,6 @@ declare module "tool/index" {
484
496
  declare module "util/HelperUtil" {
485
497
  export const isNullOrUndefined: (obj: unknown) => boolean;
486
498
  }
487
- declare module "util/ValidatorUtil" {
488
- export class ValidatorUtil {
489
- static isEmail(email: string): boolean;
490
- static isPhone(phone: string): boolean;
491
- static isNumber(number: string | number): boolean;
492
- }
493
- }
494
499
  declare module "util/StringUtil" {
495
500
  export class StringUtil {
496
501
  static escapeRegExp(str: string): string;
@@ -664,3 +669,8 @@ declare module "templating/view/email/ViewEmailElementImageContract" {
664
669
  url: string;
665
670
  }
666
671
  }
672
+ declare module "templating/view/email/ViewEmailElementSignatureContract" {
673
+ export interface ViewEmailElementSignatureContract {
674
+ content: string;
675
+ }
676
+ }
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.SmilePlayerCommon=t():e.SmilePlayerCommon=t()}(global,(function(){return(()=>{"use strict";var e={525:e=>{e.exports=require("emoji-regex/RGI_Emoji.js")}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};return(()=>{n.r(r),n.d(r,{Constant:()=>e,Exception:()=>t,Http:()=>o,Service:()=>i,Template:()=>a,Tool:()=>u,Util:()=>c});var e={};n.r(e),n.d(e,{Path:()=>l});var t={};n.r(t),n.d(t,{BadParameterException:()=>d,BadRequestException:()=>v,ConflictException:()=>g,DuplicateException:()=>w,ExternalApiException:()=>S,InternalException:()=>O,MainException:()=>p,NotImplementedException:()=>T,ObjectNotFoundException:()=>P,PageNotFoundException:()=>M,UnauthorizedException:()=>j});var o={};n.r(o),n.d(o,{HandlerController:()=>B,Server:()=>z});var i={};n.r(i),n.d(i,{EmailSenderService:()=>ye,SmsSenderService:()=>ee});var a={};n.r(a),n.d(a,{TemplateEngine:()=>fe});var u={};n.r(u),n.d(u,{Configuration:()=>ge,Database:()=>Se,Displayer:()=>Oe,Downloader:()=>_e,Env:()=>q,Environment:()=>G,FileSystem:()=>ce,Logger:()=>H,Retry:()=>X});var c={};n.r(c),n.d(c,{AddressUtil:()=>Ne,DateUtil:()=>je,ExtractorUtil:()=>Ae,FormatterUtil:()=>Me,GeneratorUtil:()=>Ie,MathUtil:()=>Re,ObjectUtil:()=>Le,PriceUtil:()=>ke,StringUtil:()=>De,ValidatorUtil:()=>Ce,asyncForEach:()=>ie,isNullOrUndefined:()=>Te});var s,l=function(){function e(){}return e.registerBasePath=function(t){void 0!==process.env.APP_HOME?e.BASE_PATH=process.env.APP_HOME+"/":e.BASE_PATH=t+(t.endsWith("/")?"":"/")},e.data=function(){return e.BASE_PATH+"data/"},e.db=function(){return e.storage()+"db/"},e.root=function(){return e.BASE_PATH},e.session=function(){return e.storage()+"session/"},e.storage=function(){return e.BASE_PATH+"storage/"},e.BASE_PATH="./",e}(),f=(s=function(e,t){return s=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},s(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}s(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),p=function(e){function t(n,r,o){var i=e.call(this,n)||this;return i.code=r,i.data=o,i.name="MainException","function"==typeof Error.captureStackTrace?Error.captureStackTrace(i,t):i.stack=new Error(n).stack,i}return f(t,e),t}(Error),h=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),d=function(e){function t(t,n){var r=e.call(this,t,400,n)||this;return r.name="BadParameterException",r}return h(t,e),t}(p),y=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),v=function(e){function t(t,n){var r=e.call(this,t,400,n)||this;return r.name="BadRequestException",r}return y(t,e),t}(p),m=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),g=function(e){function t(t,n){var r=e.call(this,t,409,n)||this;return r.name="ConflictException",r}return m(t,e),t}(p),b=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),w=function(e){function t(t,n){var r=e.call(this,t,409,n)||this;return r.name="DuplicateException",r}return b(t,e),t}(p),E=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),S=function(e){function t(t,n){var r=e.call(this,t,502,n)||this;return r.name="ExternalApiException",r}return E(t,e),t}(p),x=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),O=function(e){function t(t,n){var r=e.call(this,t,500,n)||this;return r.name="InternalException",r}return x(t,e),t}(p),_=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),T=function(e){function t(t,n){var r=e.call(this,t,501,n)||this;return r.name="NotImplementedException",r}return _(t,e),t}(p),C=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),P=function(e){function t(t,n){var r=e.call(this,t,404,n)||this;return r.name="ObjectNotFoundException",r}return C(t,e),t}(p),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)}}(),M=function(e){function t(t,n){var r=e.call(this,t,404,n)||this;return r.name="PageNotFoundException",r}return D(t,e),t}(p),N=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 N(t,e),t.ERROR_CODE=401,t}(p);const A=require("crypto"),I=require("express"),R=require("cors"),L=require("helmet"),k=require("connect-timeout"),F=require("@sentry/node"),U=require("@sentry/integrations");var q;!function(e){e.PRODUCTION="prod",e.DEVELOPMENT="dev",e.TEST="test"}(q||(q={}));var G=function(){function e(){}return e.getMode=function(){switch(process.env.NODE_ENV){case"dev":case"development":return q.DEVELOPMENT;case"prod":case"production":return q.PRODUCTION;case"test":return q.TEST}return void 0===process.env.APP_ID?q.DEVELOPMENT:q.PRODUCTION},e}(),H=function(){function e(){}return e.init=function(e){G.getMode()===q.PRODUCTION&&F.init({dsn:e,integrations:[new U.CaptureConsole({levels:["error","warn","log"]})],environment:G.getMode(),maxBreadcrumbs:50})},e.trace=function(e,t){[q.DEVELOPMENT,q.TEST].includes(G.getMode())&&(void 0===t?console.info(e):console.info(e,t)),F.addBreadcrumb({category:"info",message:e,data:t,level:F.Severity.Info})},e.debug=function(e,t){[q.DEVELOPMENT,q.TEST].includes(G.getMode())&&(void 0===t?console.log(e):console.log(e,t)),F.addBreadcrumb({category:"debug",message:e,data:t,level:F.Severity.Debug})},e.info=function(e,t){[q.DEVELOPMENT,q.TEST].includes(G.getMode())&&(void 0===t?console.info(e):console.info(e,t)),F.withScope((function(n){void 0!==t&&n.setExtra("extra",JSON.stringify(t)),F.captureMessage(e)}))},e.warning=function(e,t){[q.DEVELOPMENT,q.TEST].includes(G.getMode())&&(void 0===t?console.warn(e):console.warn(e,t)),F.withScope((function(n){void 0!==t&&n.setExtra("extra",JSON.stringify(t)),void 0!==e.data&&n.setExtra("data",JSON.stringify(e.data)),F.captureException(e)}))},e.error=function(e,t){[j.ERROR_CODE].includes(e.code)||([q.DEVELOPMENT,q.TEST].includes(G.getMode())&&(void 0===t?console.error(e):console.error(e,t)),F.withScope((function(n){void 0!==t&&n.setExtra("extra",JSON.stringify(t)),void 0!==e.data&&n.setExtra("data",JSON.stringify(e.data)),F.captureException(e)})))},e.requestHandler=function(){return F.Handlers.requestHandler()},e.errorHandler=function(){return F.Handlers.errorHandler()},e}(),z=function(){function e(){}return e.prototype.create=function(t,n){return r=this,o=void 0,a=function(){var r,o;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}(this,(function(i){return void 0===this.app&&(r=n||e.DEFAULT_PORT,o="http://localhost:"+String(r),H.debug("start server on "+o),this.app=I(),this.app.use(k("300s")),this.app.use(I.json({inflate:!0,limit:"100kb",reviver:null,strict:!0,type:"application/json",verify:void 0})),this.app.use(R({origin:[o].concat(t),credentials:!0})),this.app.use(L()),this.app.use(I.json()),this.app.listen(r,(function(){H.debug("server is running on "+o)}))),[2,this.app]}))},new((i=void 0)||(i=Promise))((function(e,t){function n(e){try{c(a.next(e))}catch(e){t(e)}}function u(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var r;t.done?e(t.value):(r=t.value,r instanceof i?r:new i((function(e){e(r)}))).then(n,u)}c((a=a.apply(r,o||[])).next())}));var r,o,i,a},e.prototype.getSessionSecret=function(t){return A.createHash("sha1").update(t+e.SALT).digest("hex")},e.DEFAULT_PORT=8080,e.SALT="03561b4a0fe7f125025",e}(),B=function(){function e(){}return e.error=function(e,t,n){H.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}();const W=require("axios");var V=n.n(W);const Z=require("luxon"),J=require("querystring"),$=require("retry");var X=function(){function e(){}return e.request=function(e,t){return void 0===t&&(t=2),n=this,r=void 0,i=function(){var n;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}(this,(function(r){return n=$.operation({retries:t,factor:1,minTimeout:0,maxTimeout:0,randomize:!1}),[2,new Promise((function(t,r){n.attempt((function(){e().then(t).catch((function(e){n.retry(e)||(H.error(e),r(e))}))}))}))]}))},new((o=void 0)||(o=Promise))((function(e,t){function a(e){try{c(i.next(e))}catch(e){t(e)}}function u(e){try{c(i.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o((function(e){e(n)}))).then(a,u)}c((i=i.apply(n,r||[])).next())}));var n,r,o,i},e}();const Y=require("urlencode");var K=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function u(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))},Q=function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},ee=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),K(this,void 0,void 0,(function(){var a,u=this;return Q(this,(function(c){switch(c.label){case 0:return 0===(a=this.checkPhoneFormat(r)).length?(H.warning(new d("no valid phone",{phones:r})),[2,Promise.resolve()]):(a.length>1&&(n.length>2*e.MESSAGE_MAX_LENGTH?n=n.substring(0,2*e.MESSAGE_MAX_LENGTH):n.length>e.MESSAGE_MAX_LENGTH&&n.length<=1.33*e.MESSAGE_MAX_LENGTH&&(n=n.substring(0,e.MESSAGE_MAX_LENGTH))),[4,X.request((function(){return K(u,void 0,void 0,(function(){var r,u;return Q(this,(function(c){switch(c.label){case 0:return r={accessToken:this.token,emetteur:t,message:Y(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=Z.DateTime.fromISO(i,{setZone:!0}).toFormat("ddMMyyyy-HH:mm")),this.mode!==q.TEST?[3,1]:(H.info("Simulation Mode: SMS has been sent",{params:r}),[3,3]);case 1:return this.mode===q.DEVELOPMENT&&(a=["+15145705214"]),[4,V().post(e.BASE_API_URL+"sendSMS.do",J.stringify(r,"&","=",{encodeURIComponent:function(e){return e}}),{timeout:3e4})];case 2:if((u=c.sent()).data.length>0&&"0"!==u.data.trim().substring(0,1))throw new S("Error: "+u.data,r);c.label=3;case 3:return[2]}}))}))}),1)]);case 1:return c.sent(),[2]}}))}))},e.prototype.checkPhoneFormat=function(e){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 e.filter((function(e){return t.test(e)||n.test(e)||r.test(e)}))},e.BASE_API_URL="https://api.smsmode.com/http/1.6/",e.MESSAGE_MAX_LENGTH=150,e}();const te=require("path"),ne=require("mustache"),re=require("lodash"),oe=require("fs");var ie=function(e,t){return n=void 0,r=void 0,i=function(){var n;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}(this,(function(r){switch(r.label){case 0:n=0,r.label=1;case 1:return n<e.length?[4,t(e[n])]:[3,4];case 2:r.sent(),r.label=3;case 3:return n++,[3,1];case 4:return[2]}}))},new((o=void 0)||(o=Promise))((function(e,t){function a(e){try{c(i.next(e))}catch(e){t(e)}}function u(e){try{c(i.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o((function(e){e(n)}))).then(a,u)}c((i=i.apply(n,r||[])).next())}));var n,r,o,i},ae=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function u(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))},ue=function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},ce=function(){function e(){}return e.prototype.dirPath=function(e){var t=te.resolve(e).lastIndexOf(te.sep);return t<0?e:te.resolve(te.resolve(e).substr(0,t+1))+te.sep},e.prototype.move=function(e,t){return ae(this,void 0,void 0,(function(){return ue(this,(function(n){if(!this.isFile(e))throw new d(String(e)+" does not exist or is not a file");if(oe.mkdirSync(t,{recursive:!0}),!this.isDir(t))throw new d(String(t)+" does not exist or is not a directory");return[2,oe.renameSync(e,t+te.basename(e))]}))}))},e.prototype.read=function(e){return ae(this,void 0,void 0,(function(){return ue(this,(function(t){if(!this.isFile(e))throw new d(String(e)+" does not exist or is not a file");return[2,oe.readFileSync(e,"utf8")]}))}))},e.prototype.readJson=function(e){return ae(this,void 0,void 0,(function(){var t;return ue(this,(function(n){switch(n.label){case 0:return[4,this.read(e)];case 1:if(t=n.sent(),!this.isJson(t))throw new d(String(e)+" does not contain JSON");return[2,JSON.parse(t)]}}))}))},e.prototype.readJsonFiles=function(e){return ae(this,void 0,void 0,(function(){var t,n,r,o=this;return ue(this,(function(i){switch(i.label){case 0:if(!this.isDir(e))throw new d(String(e)+" does not exist or is not a directory");return t=e.endsWith("/")?"":"/",n=oe.readdirSync(e),r=[],[4,ie(n,(function(n){return ae(o,void 0,void 0,(function(){var o,i,a;return ue(this,(function(u){switch(u.label){case 0:return this.isFile(e+t+n)&&n.endsWith(".json")?(i=(o=r).push,a={name:n},[4,this.readJson(e+t+n)]):[3,2];case 1:i.apply(o,[(a.data=u.sent(),a)]),u.label=2;case 2:return[2]}}))}))}))];case 1:return i.sent(),[2,r]}}))}))},e.prototype.write=function(e,t){return ae(this,void 0,void 0,(function(){var n;return ue(this,(function(r){return"",n="string"==typeof t||"number"==typeof t?String(t):JSON.stringify(t),oe.mkdirSync(this.dirPath(e),{recursive:!0}),oe.writeFileSync(e,n,{encoding:"utf8"}),[2,Promise.resolve()]}))}))},e.prototype.writeJson=function(e,t){return ae(this,void 0,void 0,(function(){return ue(this,(function(n){return[2,this.write(e,JSON.stringify(t))]}))}))},e.prototype.isDir=function(e){return oe.existsSync(e)&&oe.statSync(e).isDirectory()},e.prototype.isFile=function(e){return oe.existsSync(e)&&oe.statSync(e).isFile()},e.prototype.isJson=function(e){try{return JSON.parse(e),!0}catch(e){return!1}},e}(),se=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function u(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))},le=function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},fe=function(){function e(){}return e.prototype.render=function(e,t,n){return se(this,void 0,void 0,(function(){var r,o,i,a,u=this;return le(this,(function(c){switch(c.label){case 0:return e.endsWith(".template")||(e+=".template"),r=(0,re.cloneDeep)(t),o=te.isAbsolute(e)?"":__dirname+te.sep,[4,(new ce).read(o+e)];case 1:return i=c.sent(),a=[],(0,ne.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=te.dirname(o+e)+te.sep:te.isAbsolute(n)||(n=o+n),[4,ie(a,(function(e){return se(u,void 0,void 0,(function(){var t,o,i,a;return le(this,(function(u){switch(u.label){case 0:return 3!==(t=e.split(":")).length?[3,2]:(o=t[2],i=r,a=e,[4,this.render(te.resolve(n,o),r[e])]);case 1:i[a]=u.sent(),u.label=2;case 2:return[2]}}))}))}))]):[3,3];case 2:c.sent(),c.label=3;case 3:return[2,(0,ne.render)(i,r)]}}))}))},e}();const pe=require("node-mailjet");var he=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function u(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))},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:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},ye=function(){function e(e,t,n){this.templateEngine=new fe,this.mailjet=pe.connect(e,t),this.mode=n}return e.prototype.sendDeliveryDelay=function(e,t,n){return he(this,void 0,void 0,(function(){var r=this;return de(this,(function(o){switch(o.label){case 0:return[4,X.request((function(){return he(r,void 0,void 0,(function(){var r,o;return de(this,(function(i){switch(i.label){case 0:return void 0===n.base.copyright&&(n.base.copyright={year:String((new Date).getUTCFullYear())}),[4,this.templateEngine.render("data/email/template/deliveryDelay",n,"data/email/element/text")];case 1:return r=i.sent(),[4,this.templateEngine.render("data/email/template/deliveryDelay",n,"data/email/element/html")];case 2:return o=i.sent(),[4,this.sendNotification(e,t,n.base.subject,r,o)];case 3:return[2,i.sent()]}}))}))}),1)];case 1:return[2,o.sent()]}}))}))},e.prototype.sendTrackDelivery=function(e,t,n){return he(this,void 0,void 0,(function(){var r=this;return de(this,(function(o){switch(o.label){case 0:return[4,X.request((function(){return he(r,void 0,void 0,(function(){var r,o,i,a;return de(this,(function(u){switch(u.label){case 0:return[4,this.templateEngine.render("data/email/template/trackDelivery",n,"data/email/element/text")];case 1:return r=u.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:r,base:n.base})];case 2:return o=u.sent(),[4,this.templateEngine.render("data/email/template/trackDelivery",n,"data/email/element/html")];case 3:return i=u.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:i,base:n.base})];case 4:return a=u.sent(),[4,this.sendNotification(e,t,n.base.subject,o,a)];case 5:return[2,u.sent()]}}))}))}),1)];case 1:return[2,o.sent()]}}))}))},e.prototype.sendUserNotification=function(e,t,n){return he(this,void 0,void 0,(function(){var r=this;return de(this,(function(o){switch(o.label){case 0:return[4,X.request((function(){return he(r,void 0,void 0,(function(){var r,o,i,a;return de(this,(function(u){switch(u.label){case 0:return[4,this.templateEngine.render("data/email/template/userNotification",n,"data/email/element/text")];case 1:return r=u.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:r,base:n.base})];case 2:return o=u.sent(),[4,this.templateEngine.render("data/email/template/userNotification",n,"data/email/element/html")];case 3:return i=u.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:i,base:n.base})];case 4:return a=u.sent(),[4,this.sendNotification(e,t,n.base.subject,o,a)];case 5:return[2,u.sent()]}}))}))}),1)];case 1:return[2,o.sent()]}}))}))},e.prototype.sendNotification=function(e,t,n,r,o){return he(this,void 0,void 0,(function(){var i;return de(this,(function(a){switch(a.label){case 0:return a.trys.push([0,4,,5]),this.mode!==q.TEST?[3,1]:(H.info("Simulation Mode: Email has been sent",{sender:e,recipient:t}),[3,3]);case 1:return this.mode===q.DEVELOPMENT&&(t.contact="developer@onylab.com"),[4,this.mailjet.post("send",{version:"v3.1"}).request({Messages:[{From:{Name:e.name,Email:e.contact},To:[{Name:t.name,Email:t.contact}],Subject:n,TextPart:r,HTMLPart:o}]})];case 2:a.sent(),a.label=3;case 3:return[3,5];case 4:throw i=a.sent(),new p(i.message,Number(i.statusCode));case 5:return[2]}}))}))},e}(),ve=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function u(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))},me=function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},ge=function(){function e(e,t){this.filesystem=new ce,this.root=e,this.environment=void 0===t?G.getMode():t}return e.prototype.full=function(){return ve(this,void 0,void 0,(function(){return me(this,(function(e){switch(e.label){case 0:return[4,this.init()];case 1:return e.sent(),[2,this.config]}}))}))},e.prototype.init=function(){return ve(this,void 0,void 0,(function(){var e,t,n,r;return me(this,(function(o){switch(o.label){case 0:return void 0!==this.config?[3,6]:void 0!==this.root?[3,1]:(this.config={},[3,6]);case 1:return e=this,[4,this.filesystem.readJson(this.root+"data/config.json")];case 2:if(e.config=o.sent(),![q.DEVELOPMENT,q.TEST].includes(this.environment))return[3,6];o.label=3;case 3:return o.trys.push([3,5,,6]),t=this,n=re.merge,r=[this.config],[4,this.filesystem.readJson(this.root+"data/config_"+String(this.environment)+".json")];case 4:return t.config=n.apply(void 0,r.concat([o.sent()])),[3,6];case 5:return o.sent(),[3,6];case 6:return[2]}}))}))},e}();const be=require("typeorm");var we=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function u(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))},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:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},Se=function(){function e(e){this.root=e}return e.prototype.connect=function(e,t){return we(this,void 0,void 0,(function(){var n,r;return Ee(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,be.createConnection)(n)]);case 3:return r.connection=o.sent(),[3,5];case 4:H.error(new d("bad connection name")),o.label=5;case 5:return[2]}}))}))},e.prototype.synchronize=function(){return we(this,void 0,void 0,(function(){return Ee(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 we(this,void 0,void 0,(function(){return Ee(this,(function(e){return[2,this.connection.close()]}))}))},e.prototype.init=function(){return we(this,void 0,void 0,(function(){var e,t;return Ee(this,(function(n){switch(n.label){case 0:return void 0!==this.root?[3,1]:(this.db={},[3,3]);case 1:return e=new ce,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 xe=require("prettyjson");var Oe=function(){function e(){}return e.prototype.error=function(e){H.error(e)},e.prototype.info=function(e){H.trace(e)},e.prototype.json=function(e){H.trace(xe.render(e,{}))},e.prototype.success=function(e){H.trace(e)},e}(),_e=function(){function e(){this.fileSystem=new ce}return e.prototype.image=function(e,t,n){return r=this,o=void 0,a=function(){var r,o;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}(this,(function(i){switch(i.label){case 0:return void 0===n&&(n=A.randomBytes(20).toString("hex")+te.extname(e)),[4,this.fileSystem.write(t+te.sep+n,"")];case 1:return i.sent(),r=te.resolve(t+te.sep+n),o=oe.createWriteStream(r),[4,V()({url:e,method:"GET",responseType:"stream"})];case 2:return i.sent().data.pipe(o),[2,new Promise((function(e,t){o.on("finish",(function(){return e(r)})),o.on("error",t)}))]}}))},new((i=void 0)||(i=Promise))((function(e,t){function n(e){try{c(a.next(e))}catch(e){t(e)}}function u(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var r;t.done?e(t.value):(r=t.value,r instanceof i?r:new i((function(e){e(r)}))).then(n,u)}c((a=a.apply(r,o||[])).next())}));var r,o,i,a},e}(),Te=function(e){return null==e},Ce=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.isNumber=function(e){return"number"==typeof e||"string"==typeof e&&new RegExp("^-?[0-9]+\\.?[0-9]*$").test(e)},e}();const Pe=require("fast-diff");var De=function(){function e(){}return e.escapeRegExp=function(e){return"string"!=typeof e?e:e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")},e.nullable=function(e){return Te(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,re.toLower)((0,re.trim)((0,re.deburr)(e)).replace(/[^0-9a-z\-\_]/gi,t))},e.truncate=function(e,t){return Te(e)||e.length<=t?e:t<=3?"":e.slice(0,t-3)+"..."},e}(),Me=function(){function e(){}return e.trim=function(e){return"string"==typeof e?e.trim():e},e.capitalize=function(t){var n=e.lower(t);return"string"==typeof n?n.split(" ").map((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})).join(" "):t},e.ucfirst=function(t){var n=e.lower(t);return"string"==typeof n?n.charAt(0).toUpperCase()+n.slice(1):t},e.lower=function(e){return"string"==typeof e?e.toLocaleLowerCase():e},e.upper=function(e){return"string"==typeof e?e.toLocaleUpperCase():e},e.phone=function(t,n,r){if(void 0===r&&(r="nat"),"string"==typeof t)switch(t=e.preformatPhone(t,n),r){case"nat":return e.phoneNat(t,n);case"int":return e.phoneInt(t,n)}return t},e.stripEmoji=function(e){var t=e;if("string"==typeof t){for(var r=n(525)(),o=void 0;null!==(o=r.exec(t));)try{t=(t=(t=t.replace(new RegExp("\\s"+De.escapeRegExp(o[0]),"g"),"")).replace(new RegExp(De.escapeRegExp(o[0])+"\\s","g"),"")).replace(new RegExp(De.escapeRegExp(o[0]),"g"),"")}catch(e){}for(;null!==(o=r.exec(t));)try{t=(t=(t=t.replace(new RegExp("\\s"+De.escapeRegExp(o[0]),"g"),"")).replace(new RegExp(De.escapeRegExp(o[0])+"\\s","g"),"")).replace(new RegExp(De.escapeRegExp(o[0]),"g"),"")}catch(e){}}return t},e.stripExoticCharacters=function(e){return"string"==typeof e?e.replace("’","'").replace(/[\u0250-\ue007]+/g,"*"):e},e.preformatPhone=function(e,t){return e=e.trim().replace(/\s?\.?\-?\(?\)?/g,""),"fr"===t&&new RegExp("^[1-9]").test(e)&&9===e.length?"0"+e:e},e.phoneNat=function(e,t){if("fr"===t){if(e.startsWith("+330")?e=e.substr(3):e.startsWith("+33")?e="0"+e.substr(3):e.startsWith("0033")?e="0"+e.substr(4):e.startsWith("33")&&11===e.length&&(e="0"+e.substr(2)),10===e.length){var n=0;e=e.split("").map((function(e){return e+(++n%2==0?" ":"")})).join("").trim()}return e}return e},e.phoneInt=function(e,t){return e.startsWith("+")?e:"fr"===t?(e.startsWith("0")&&(e=e.substr(1)),"+33"+e):e},e}(),Ne=function(){function e(){}return e.autoCorrectCity=function(t){if(Te(t)||"string"!=typeof t||0===t.length)return t;(t.toLowerCase().startsWith("st-")||t.toLowerCase().startsWith("st "))&&(t="Saint "+t.substring(3));var n=e.CITIES.find((function(e){return e.toLowerCase()===t.toLowerCase()}));if(void 0!==n)return n;var r=e.CITIES.find((function(n){var r=e.countDiff(t,n);return r.add<=2&&r.remove<=2}));if(void 0!==r)return r;var o=e.CITIES.find((function(e){return e.replace(/-/g," ").toLowerCase()===t.toLowerCase()}));if(void 0!==o)return o;var i=e.CITIES.find((function(n){var r=e.countDiff(t,n.replace(/-/g," "));return r.add<=2&&r.remove<=2}));if(void 0!==i)return i;var a=e.CITIES.find((function(e){return e.toLowerCase().startsWith(t.toLowerCase())}));if(void 0!==a)return a;var u=e.CITIES.find((function(e){return t.toLowerCase().includes(e.toLowerCase())}));return void 0!==u?u:t},e.autoCorrectStreet=function(e){return Te(e)||"string"!=typeof e||0===e.length?e:e=(e=(e=(e=(e=(e=(e=(e=(e=(e=e.replace(/(\sav\s)/gi," avenue ")).replace(/(\sav\.\s)/gi," avenue ")).replace(/(\schau\.\s)/gi," chaussée ")).replace(/(\strav\.\s)/gi," traverse ")).replace(/(\spl\.\s)/gi," place ")).replace(/(\spass\.\s)/gi," passage ")).replace(/(\ssent\.\s)/gi," sentier ")).replace(/(\simp\.\s)/gi," impasse ")).replace(/(\sall\.\s)/gi," allée ")).replace(/(\schem\.\s)/gi," chemin ")},e.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)||Ce.isNumber(t)&&5===t.length&&!t.includes(".")&&!t.includes("-"))},e.parse=function(t,n){void 0===n&&(n=!0);var r={};if(!Te(t)){var o=t.split(",");if(o.length>=3&&n){void 0===e.COUNTRIES.find((function(e){return t.toLowerCase().includes(" "+e.toLowerCase())}))&&o.push("France");var i=o.length-1;if(r.country=o[i].trim(),o.splice(i--,1),void 0!==o[i]&&o[i].trim().includes(" ")){var a=o[i].trim().split(" ");r.zip=void 0===a[0]?void 0:a[0].trim(),a.splice(0,1),r.city=a.join(" ").trim(),o.splice(i--,1)}else isNaN(Number(o[i].trim()))?isNaN(Number(o[i-1].trim()))?(r.city=o[i].trim(),o.splice(i--,1)):(r.city=o[i].trim(),o.splice(i--,1),r.zip=o[i].trim(),o.splice(i--,1)):(r.zip=o[i].trim(),o.splice(i--,1),i>=2&&(r.city=o[i].trim(),o.splice(i--,1)));r.street=o.map((function(e){return e.trim()})).join(" ").trim()}else{var u=t.toLowerCase();e.ZIPCODES.forEach((function(e){if(u.includes(e)){r.zip=e;try{u=u.replace(new RegExp(De.escapeRegExp(e),"ig"),"")}catch(e){}}})),e.CITIES.forEach((function(t){var n;if(u.includes(t.toLowerCase())&&(void 0===r.zip||(null===(n=e.ZIPCODE_CITY[r.zip])||void 0===n?void 0:n.find((function(e){return e.toLowerCase()===t.toLowerCase()}))))){r.city=t;try{u=u.replace(new RegExp(De.escapeRegExp(t),"ig"),"")}catch(e){}}})),e.COUNTRIES.forEach((function(e){if(u.includes(" "+e.toLowerCase())){r.country=e;try{u=u.replace(new RegExp(De.escapeRegExp(" "+e),"ig"),"")}catch(e){}}})),void 0===r.street&&(r.street=u.split(",").map((function(e){return e.trim()})).join(" ").trim())}void 0===r.country&&(r.country="France")}return void 0!==r.street&&(r.street=Me.lower(Me.trim(String(r.street)))),void 0!==r.zip&&(r.zip=Me.upper(Me.trim(String(r.zip)))),void 0!==r.city&&(r.city=e.autoCorrectCity(Me.capitalize(Me.trim(String(r.city))))),void 0!==r.country&&(r.country=Me.capitalize(Me.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=De.removeText(t.street,e).trim()})),"fr"===Me.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 Pe(e.toLowerCase(),t.toLowerCase()).forEach((function(e){switch(e[0]){case-1:n.remove+=e[1].length;break;case 1:n.add+=e[1].length}})),n},e.ZIPCODES=["78500","78600","78800","95240","95530","78630","78670","78240","78580","78300","78955","78260","95150","95250","95480","95320","95550","95370","95740","95220","95870","78420","78400","78110","78360","78290","78230","78540","78920"],e.CITIES=["Sartrouville","Cormeilles-en-Parisis","Houilles","Maisons-Laffitte","La Frette-sur-Seine","Argenteuil","Montesson","Le Mesnil-le-Roi","Bezons","Orgeval","Poissy","Morainvilliers","Villennes-sur-Seine","Medan","Chambourcy","Aigremont","Les Alluets-le-Roi","Carrières-sous-Poissy","Achères","Taverny","Beauchamp","Pierrelaye","Saint-Leu-la-Forêt","Bessancourt","Montigny-lès-Cormeilles","Herblay","Méry-sur-Oise","Carrières-sur-Seine","Bezons","Chatou","Le Vésinet","Montesson","Croissy","Croissy-sur-Seine","Le Pecq","Vernouillet","Ecquevilly"],e.ZIPCODE_CITY={78500:["Sartrouville"],78600:["Maisons-Laffitte","Le Mesnil-le-Roi"],78800:["Houilles"],95240:["Cormeilles-en-Parisis"],95530:["La Frette-sur-Seine"],78630:["Orgeval","Morainvilliers"],78670:["Villennes-sur-Seine","Medan"],78240:["Chambourcy","Aigremont"],78300:["Poissy"],78955:["Carrières-sous-Poissy"],78260:["Achères"],78540:["Vernouillet"],78920:["Ecquevilly"],95150:["Taverny"],95250:["Beauchamp"],95480:["Pierrelaye"],95320:["Saint-Leu-la-Forêt"],95550:["Bessancourt"],95370:["Montigny-les-Cormeilles"],95220:["Herblay"],95740:["Frépillon"],95540:["Méry-sur-Oise"],95870:["Bezons"],78420:["Carrières-sur-Seine"],78400:["Chatou"],78110:["Le Vésinet"],78360:["Montesson"],78290:["Croissy-sur-Seine"],"78230 ":["Le Pecq"]},e.REGIONS=["île-de-france"],e.COUNTRIES=["France","FR"],e}(),je=function(){function e(){}return e.getCycleDateFromFullDate=function(e,t){if("weekly"===t){var n=Z.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?Z.DateTime.fromISO(e).toFormat("yyyy-LL"):Z.DateTime.fromISO(e).toISODate()},e.displayWeekDay=function(t){var n="";return void 0!==e.WEEK_DAYS[t]&&(n=e.WEEK_DAYS[t]),n},e.generatePeriod=function(t,n,r,o,i,a){void 0===o&&(o=!0),void 0===i&&(i=e.PERIOD_MAX_DATES),void 0===a&&(a="daily");for(var u={daily:{day:1},weekly:{week:1},monthly:{month:1}}[a],c=Z.DateTime.fromISO(t,{setZone:!0}).toISODate(),s=Z.DateTime.fromISO(n,{setZone:!0}).toISODate(),l=0,f={};c<=s&&l<i;){var p=e.getCycleDateFromFullDate(c,a);f[p]=(0,re.cloneDeep)(r),o&&(f[p].date=p),c=Z.DateTime.fromISO(c,{setZone:!0}).plus(u).toISODate(),l++}return f},e.getOpenPeriods=function(e,t){var n=[];return e.forEach((function(e){for(var r=[e],o=function(){var e=r[0];if(void 0===t.find((function(t){return t.from<=e.from&&e.to<=t.to}))){var o=t.find((function(t){return t.from<=e.from&&e.from<t.to&&t.to<e.to}));if(void 0!==o)r.push({from:o.to,to:e.to});else{var i=t.find((function(t){return e.from<t.from&&e.to>t.from&&e.to<=t.to}));if(void 0!==i)r.push({from:e.from,to:i.from});else{var a=t.find((function(t){return e.from<t.from&&t.to<e.to}));void 0!==a?(r.push({from:e.from,to:a.from}),r.push({from:a.to,to:e.to})):n.push(e)}}}r.shift()};r.length>0;)o()})),n},e.limitDate=function(e,t,n){if(void 0===n&&(n=0),void 0!==e&&void 0!==t){var r=Z.DateTime.fromISO(e,{setZone:!0}).toISO(),o=Z.DateTime.fromISO(t,{setZone:!0}).plus({seconds:n}).toISO();return r>o?o:r}},e.localeToISO=function(e){var t,n=new RegExp("[0-9]{2}/[0-9]{2}/[0-9]{4}"),r=new RegExp("[0-9]{2}-[0-9]{2}-[0-9]{4}"),o=new RegExp("[0-9]{4}-[0-9]{2}-[0-9]{2}");if(n.test(e))t=(i=e.split("/"))[2]+"-"+i[1]+"-"+i[0];else if(r.test(e)){var i;t=(i=e.split("-"))[2]+"-"+i[1]+"-"+i[0]}else o.test(e)&&(t=e);return t},e.slotToTime=function(e){var t,n=new RegExp("^(\\s)?[0-9]{2}:[0-9]{2}(\\s)?$"),r=new RegExp("^(\\s)?[0-9]{2}:[0-9]{2}(\\s)?-(\\s)?[0-9]{2}:[0-9]{2}(\\s)?$");return e=e.trim(),n.test(e)?t=e.trim()+":00":r.test(e)&&(t=e.split("-")[0].trim()+":00"),t},e.round=function(e,t){if(void 0===t&&(t=0),"string"!=typeof e)return e;var n=Z.DateTime.fromISO(e,{setZone:!0});return Z.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}(),Ae=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}(),Ie=function(){function e(){}return e.code=function(t){null==t&&(t=6);for(var n="";n.length<t;)n+=e.symbolUpperCases[e.int(0,e.symbolUpperCases.length-1)];return n},e.int=function(e,t){return null==e&&(e=0),null==t&&(t=Number.POSITIVE_INFINITY),e=Math.ceil(e),t=Math.floor(t),Math.floor(Math.random()*(t-e+1))+e},e.password=function(t){null==t&&(t=8);for(var n="";n.length<t;)switch(e.int(1,3)){case 1:n+=e.symbolUpperCases[e.int(0,e.symbolUpperCases.length-1)];break;case 2:n+=e.symbolLowerCases[e.int(0,e.symbolLowerCases.length-1)];break;default:n+=String(e.int(0,9))}return n},e.symbolUpperCases=["A","B","C","D","E","F","G","H","K","M","N","P","R","S","T","U","V","W","X","Y","Z"],e.symbolLowerCases=["a","b","c","d","e","f","g","h","k","m","n","p","r","s","t","u","v","w","x","y","z"],e}(),Re=function(){function e(){}return e.avg=function(t){if(0===t.length)return 0;var n=t.reduce((function(e,t){return e+t}),0);return e.round(n/t.length,2)},e.applyVariation=function(e,t){return e*(e>=0?1+t/100:1-t/100)},e.median=function(t){if(0===t.length)return 0;if(1===t.length)return t[0];var n=t.sort((function(e,t){return e-t}));return n.length%2==0?e.avg([n[n.length/2-1],n[n.length/2]]):n[Math.floor(n.length/2)]},e.percentage=function(e,t){return 0===t?0:e/t*100},e.round=function(e,t){return 0===t?Math.round(e):Number(e.toFixed(t))},e.variation=function(e,t){var n=0;return 0!==t?n=0!==e?(t-e)/Math.abs(e)*100:100*(t>0?1:-1):0!==e&&(n=-100*(e>0?1:-1)),Math.floor(n)},e}(),Le=function(){function e(){}return e.compact=function(t,n){if(void 0===n&&(n={}),(0,re.isArray)(t)){var r=[];return t.forEach((function(t){t=e.compact(t,n),((0,re.isArray)(t)&&t.length>0||(0,re.isObject)(t)&&Object.keys(t).length>0||null!=t&&!(0,re.isArray)(t)&&!(0,re.isObject)(t))&&r.push(t)})),r}if((0,re.isObject)(t)){var o={};return Object.keys(t).forEach((function(r){var i=t[r];(0,re.isArray)(i)||(0,re.isObject)(i)?(i=e.compact(i,n),((0,re.isArray)(i)&&i.length>0||(0,re.isObject)(i)&&Object.keys(i).length>0||null!=i&&!(0,re.isArray)(i)&&!(0,re.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}(),ke=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(Re.round(r,n))},e.calculateTaxes=function(e,t){var n=0;return t.forEach((function(t){n+=e*t})),Re.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(Re.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={525:e=>{e.exports=require("emoji-regex/RGI_Emoji.js")}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};return(()=>{n.r(r),n.d(r,{Constant:()=>e,Exception:()=>t,Http:()=>o,Service:()=>i,Template:()=>a,Tool:()=>u,Util:()=>c});var e={};n.r(e),n.d(e,{Path:()=>l});var t={};n.r(t),n.d(t,{BadParameterException:()=>d,BadRequestException:()=>v,ConflictException:()=>g,DuplicateException:()=>w,ExternalApiException:()=>S,InternalException:()=>O,MainException:()=>p,NotImplementedException:()=>T,ObjectNotFoundException:()=>P,PageNotFoundException:()=>M,UnauthorizedException:()=>N});var o={};n.r(o),n.d(o,{HandlerController:()=>W,Server:()=>B});var i={};n.r(i),n.d(i,{EmailSenderService:()=>me,SmsSenderService:()=>ne});var a={};n.r(a),n.d(a,{TemplateEngine:()=>he});var u={};n.r(u),n.d(u,{Configuration:()=>we,Database:()=>Oe,Displayer:()=>Te,Downloader:()=>Ce,Env:()=>G,Environment:()=>H,FileSystem:()=>le,Logger:()=>z,Retry:()=>Y});var c={};n.r(c),n.d(c,{AddressUtil:()=>Ne,DateUtil:()=>Ae,ExtractorUtil:()=>Ie,FormatterUtil:()=>je,GeneratorUtil:()=>Re,MathUtil:()=>Le,ObjectUtil:()=>ke,PriceUtil:()=>Fe,StringUtil:()=>Me,ValidatorUtil:()=>Q,asyncForEach:()=>ue,isNullOrUndefined:()=>Pe});var s,l=function(){function e(){}return e.registerBasePath=function(t){void 0!==process.env.APP_HOME?e.BASE_PATH=process.env.APP_HOME+"/":e.BASE_PATH=t+(t.endsWith("/")?"":"/")},e.data=function(){return e.BASE_PATH+"data/"},e.db=function(){return e.storage()+"db/"},e.root=function(){return e.BASE_PATH},e.session=function(){return e.storage()+"session/"},e.storage=function(){return e.BASE_PATH+"storage/"},e.BASE_PATH="./",e}(),f=(s=function(e,t){return s=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},s(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}s(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),p=function(e){function t(n,r,o){var i=e.call(this,n)||this;return i.code=r,i.data=o,i.name="MainException","function"==typeof Error.captureStackTrace?Error.captureStackTrace(i,t):i.stack=new Error(n).stack,i}return f(t,e),t}(Error),h=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),d=function(e){function t(t,n){var r=e.call(this,t,400,n)||this;return r.name="BadParameterException",r}return h(t,e),t}(p),y=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),v=function(e){function t(t,n){var r=e.call(this,t,400,n)||this;return r.name="BadRequestException",r}return y(t,e),t}(p),m=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),g=function(e){function t(t,n){var r=e.call(this,t,409,n)||this;return r.name="ConflictException",r}return m(t,e),t}(p),b=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),w=function(e){function t(t,n){var r=e.call(this,t,409,n)||this;return r.name="DuplicateException",r}return b(t,e),t}(p),E=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),S=function(e){function t(t,n){var r=e.call(this,t,502,n)||this;return r.name="ExternalApiException",r}return E(t,e),t}(p),x=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),O=function(e){function t(t,n){var r=e.call(this,t,500,n)||this;return r.name="InternalException",r}return x(t,e),t}(p),_=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),T=function(e){function t(t,n){var r=e.call(this,t,501,n)||this;return r.name="NotImplementedException",r}return _(t,e),t}(p),C=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),P=function(e){function t(t,n){var r=e.call(this,t,404,n)||this;return r.name="ObjectNotFoundException",r}return C(t,e),t}(p),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)}}(),M=function(e){function t(t,n){var r=e.call(this,t,404,n)||this;return r.name="PageNotFoundException",r}return D(t,e),t}(p),j=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)}}(),N=function(e){function t(n,r){var o=e.call(this,n,t.ERROR_CODE,r)||this;return o.name="UnauthorizedException",o}return j(t,e),t.ERROR_CODE=401,t}(p);const A=require("crypto"),I=require("express"),R=require("cors"),L=require("compression"),k=require("helmet"),F=require("connect-timeout"),U=require("@sentry/node"),q=require("@sentry/integrations");var G;!function(e){e.PRODUCTION="prod",e.DEVELOPMENT="dev",e.TEST="test"}(G||(G={}));var H=function(){function e(){}return e.getMode=function(){switch(process.env.NODE_ENV){case"dev":case"development":return G.DEVELOPMENT;case"prod":case"production":return G.PRODUCTION;case"test":return G.TEST}return void 0===process.env.APP_ID?G.DEVELOPMENT:G.PRODUCTION},e}(),z=function(){function e(){}return e.init=function(e){H.getMode()===G.PRODUCTION&&U.init({dsn:e,integrations:[new q.CaptureConsole({levels:["error","warn","log"]})],environment:H.getMode(),maxBreadcrumbs:50})},e.trace=function(e,t){[G.DEVELOPMENT,G.TEST].includes(H.getMode())&&(void 0===t?console.info(e):console.info(e,t)),U.addBreadcrumb({category:"info",message:e,data:t,level:U.Severity.Info})},e.debug=function(e,t){[G.DEVELOPMENT,G.TEST].includes(H.getMode())&&(void 0===t?console.log(e):console.log(e,t)),U.addBreadcrumb({category:"debug",message:e,data:t,level:U.Severity.Debug})},e.info=function(e,t){[G.DEVELOPMENT,G.TEST].includes(H.getMode())&&(void 0===t?console.info(e):console.info(e,t)),U.withScope((function(n){void 0!==t&&n.setExtra("extra",JSON.stringify(t)),U.captureMessage(e)}))},e.warning=function(e,t){[G.DEVELOPMENT,G.TEST].includes(H.getMode())&&(void 0===t?console.warn(e):console.warn(e,t)),U.withScope((function(n){void 0!==t&&n.setExtra("extra",JSON.stringify(t)),void 0!==e.data&&n.setExtra("data",JSON.stringify(e.data)),U.captureException(e)}))},e.error=function(e,t){[N.ERROR_CODE].includes(e.code)||([G.DEVELOPMENT,G.TEST].includes(H.getMode())&&(void 0===t?console.error(e):console.error(e,t)),U.withScope((function(n){void 0!==t&&n.setExtra("extra",JSON.stringify(t)),void 0!==e.data&&n.setExtra("data",JSON.stringify(e.data)),U.captureException(e)})))},e.requestHandler=function(){return U.Handlers.requestHandler()},e.errorHandler=function(){return U.Handlers.errorHandler()},e}(),B=function(){function e(){}return e.prototype.create=function(t,n){return r=this,o=void 0,a=function(){var r,o;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}(this,(function(i){return void 0===this.app&&(r=n||e.DEFAULT_PORT,o="http://localhost:"+String(r),z.debug("start server on "+o),this.app=I(),this.app.use(L({level:-1})),this.app.use(F("300s")),this.app.use(I.json({inflate:!0,limit:"100kb",reviver:null,strict:!0,type:"application/json",verify:void 0})),this.app.use(R({origin:[o].concat(t),credentials:!0})),this.app.use(k()),this.app.use(I.json()),this.app.listen(r,(function(){z.debug("server is running on "+o)}))),[2,this.app]}))},new((i=void 0)||(i=Promise))((function(e,t){function n(e){try{c(a.next(e))}catch(e){t(e)}}function u(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var r;t.done?e(t.value):(r=t.value,r instanceof i?r:new i((function(e){e(r)}))).then(n,u)}c((a=a.apply(r,o||[])).next())}));var r,o,i,a},e.prototype.getSessionSecret=function(t){return A.createHash("sha1").update(t+e.SALT).digest("hex")},e.DEFAULT_PORT=8080,e.SALT="03561b4a0fe7f125025",e}(),W=function(){function e(){}return e.error=function(e,t,n){z.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}();const V=require("axios");var Z=n.n(V);const J=require("luxon"),$=require("querystring"),X=require("retry");var Y=function(){function e(){}return e.request=function(e,t){return void 0===t&&(t=2),n=this,r=void 0,i=function(){var n;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}(this,(function(r){return n=X.operation({retries:t,factor:1,minTimeout:0,maxTimeout:0,randomize:!1}),[2,new Promise((function(t,r){n.attempt((function(){e().then(t).catch((function(e){n.retry(e)||(z.error(e),r(e))}))}))}))]}))},new((o=void 0)||(o=Promise))((function(e,t){function a(e){try{c(i.next(e))}catch(e){t(e)}}function u(e){try{c(i.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o((function(e){e(n)}))).then(a,u)}c((i=i.apply(n,r||[])).next())}));var n,r,o,i},e}();const K=require("urlencode");var Q=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}(),ee=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function u(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))},te=function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},ne=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),ee(this,void 0,void 0,(function(){var a,u=this;return te(this,(function(c){switch(c.label){case 0:return 0===(a=this.checkPhoneFormat(r)).length?(z.warning(new d("no valid phone",{phones:r})),[2,Promise.resolve()]):(a.length>1&&(n.length>2*e.MESSAGE_MAX_LENGTH?n=n.substring(0,2*e.MESSAGE_MAX_LENGTH):n.length>e.MESSAGE_MAX_LENGTH&&n.length<=1.33*e.MESSAGE_MAX_LENGTH&&(n=n.substring(0,e.MESSAGE_MAX_LENGTH))),[4,Y.request((function(){return ee(u,void 0,void 0,(function(){var r,u;return te(this,(function(c){switch(c.label){case 0:return r={accessToken:this.token,emetteur:t,message:K(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=J.DateTime.fromISO(i,{setZone:!0}).toFormat("ddMMyyyy-HH:mm")),this.mode!==G.TEST?[3,1]:(z.info("Simulation Mode: SMS has been sent",{params:r}),[3,3]);case 1:return this.mode===G.DEVELOPMENT&&(a=["+15145705214"]),[4,Z().post(e.BASE_API_URL+"sendSMS.do",$.stringify(r,"&","=",{encodeURIComponent:function(e){return e}}),{timeout:3e4})];case 2:if((u=c.sent()).data.length>0&&"0"!==u.data.trim().substring(0,1))throw new S("Error: "+u.data,r);c.label=3;case 3:return[2]}}))}))}),1)]);case 1:return c.sent(),[2]}}))}))},e.prototype.checkPhoneFormat=function(e){return e.filter((function(e){return Q.isIntMobilePhone(e)}))},e.BASE_API_URL="https://api.smsmode.com/http/1.6/",e.MESSAGE_MAX_LENGTH=150,e}();const re=require("path"),oe=require("mustache"),ie=require("lodash"),ae=require("fs");var ue=function(e,t){return n=void 0,r=void 0,i=function(){var n;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}(this,(function(r){switch(r.label){case 0:n=0,r.label=1;case 1:return n<e.length?[4,t(e[n])]:[3,4];case 2:r.sent(),r.label=3;case 3:return n++,[3,1];case 4:return[2]}}))},new((o=void 0)||(o=Promise))((function(e,t){function a(e){try{c(i.next(e))}catch(e){t(e)}}function u(e){try{c(i.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o((function(e){e(n)}))).then(a,u)}c((i=i.apply(n,r||[])).next())}));var n,r,o,i},ce=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function u(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))},se=function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},le=function(){function e(){}return e.prototype.dirPath=function(e){var t=re.resolve(e).lastIndexOf(re.sep);return t<0?e:re.resolve(re.resolve(e).substr(0,t+1))+re.sep},e.prototype.move=function(e,t){return ce(this,void 0,void 0,(function(){return se(this,(function(n){if(!this.isFile(e))throw new d(String(e)+" does not exist or is not a file");if(ae.mkdirSync(t,{recursive:!0}),!this.isDir(t))throw new d(String(t)+" does not exist or is not a directory");return[2,ae.renameSync(e,t+re.basename(e))]}))}))},e.prototype.read=function(e){return ce(this,void 0,void 0,(function(){return se(this,(function(t){if(!this.isFile(e))throw new d(String(e)+" does not exist or is not a file");return[2,ae.readFileSync(e,"utf8")]}))}))},e.prototype.readJson=function(e){return ce(this,void 0,void 0,(function(){var t;return se(this,(function(n){switch(n.label){case 0:return[4,this.read(e)];case 1:if(t=n.sent(),!this.isJson(t))throw new d(String(e)+" does not contain JSON");return[2,JSON.parse(t)]}}))}))},e.prototype.readJsonFiles=function(e){return ce(this,void 0,void 0,(function(){var t,n,r,o=this;return se(this,(function(i){switch(i.label){case 0:if(!this.isDir(e))throw new d(String(e)+" does not exist or is not a directory");return t=e.endsWith("/")?"":"/",n=ae.readdirSync(e),r=[],[4,ue(n,(function(n){return ce(o,void 0,void 0,(function(){var o,i,a;return se(this,(function(u){switch(u.label){case 0:return this.isFile(e+t+n)&&n.endsWith(".json")?(i=(o=r).push,a={name:n},[4,this.readJson(e+t+n)]):[3,2];case 1:i.apply(o,[(a.data=u.sent(),a)]),u.label=2;case 2:return[2]}}))}))}))];case 1:return i.sent(),[2,r]}}))}))},e.prototype.write=function(e,t){return ce(this,void 0,void 0,(function(){var n;return se(this,(function(r){return"",n="string"==typeof t||"number"==typeof t?String(t):JSON.stringify(t),ae.mkdirSync(this.dirPath(e),{recursive:!0}),ae.writeFileSync(e,n,{encoding:"utf8"}),[2,Promise.resolve()]}))}))},e.prototype.writeJson=function(e,t){return ce(this,void 0,void 0,(function(){return se(this,(function(n){return[2,this.write(e,JSON.stringify(t))]}))}))},e.prototype.isDir=function(e){return ae.existsSync(e)&&ae.statSync(e).isDirectory()},e.prototype.isFile=function(e){return ae.existsSync(e)&&ae.statSync(e).isFile()},e.prototype.isJson=function(e){try{return JSON.parse(e),!0}catch(e){return!1}},e}(),fe=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function u(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))},pe=function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},he=function(){function e(){}return e.prototype.render=function(e,t,n){return fe(this,void 0,void 0,(function(){var r,o,i,a,u=this;return pe(this,(function(c){switch(c.label){case 0:return e.endsWith(".template")||(e+=".template"),r=(0,ie.cloneDeep)(t),o=re.isAbsolute(e)?"":__dirname+re.sep,[4,(new le).read(o+e)];case 1:return i=c.sent(),a=[],(0,oe.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=re.dirname(o+e)+re.sep:re.isAbsolute(n)||(n=o+n),[4,ue(a,(function(e){return fe(u,void 0,void 0,(function(){var t,o,i,a;return pe(this,(function(u){switch(u.label){case 0:return 3!==(t=e.split(":")).length||void 0===r[e]?[3,2]:(o=t[2],n.includes("/html")&&Object.keys(r[e]).forEach((function(t){r[e][t]=r[e][t].replace(/(?:\r\n|\r|\n)/g,"<br>")})),i=r,a=e,[4,this.render(re.resolve(n,o),r[e])]);case 1:i[a]=u.sent(),u.label=2;case 2:return[2]}}))}))}))]):[3,3];case 2:c.sent(),c.label=3;case 3:return[2,(0,oe.render)(i,r)]}}))}))},e}();const de=require("node-mailjet");var ye=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function u(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))},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:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},me=function(){function e(e,t,n){this.templateEngine=new he,this.mailjet=de.connect(e,t),this.mode=n}return e.prototype.sendDeliveryDelay=function(e,t,n){return ye(this,void 0,void 0,(function(){var r=this;return ve(this,(function(o){switch(o.label){case 0:return[4,Y.request((function(){return ye(r,void 0,void 0,(function(){var r,o;return ve(this,(function(i){switch(i.label){case 0:return void 0===n.base.copyright&&(n.base.copyright={year:String((new Date).getUTCFullYear())}),[4,this.templateEngine.render("data/email/template/deliveryDelay",n,"data/email/element/text")];case 1:return r=i.sent(),[4,this.templateEngine.render("data/email/template/deliveryDelay",n,"data/email/element/html")];case 2:return o=i.sent(),[4,this.sendNotification(e,t,n.base.subject,r,o)];case 3:return[2,i.sent()]}}))}))}),1)];case 1:return[2,o.sent()]}}))}))},e.prototype.sendTrackDelivery=function(e,t,n){return ye(this,void 0,void 0,(function(){var r=this;return ve(this,(function(o){switch(o.label){case 0:return[4,Y.request((function(){return ye(r,void 0,void 0,(function(){var r,o,i,a;return ve(this,(function(u){switch(u.label){case 0:return[4,this.templateEngine.render("data/email/template/trackDelivery",n,"data/email/element/text")];case 1:return r=u.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:r,base:n.base})];case 2:return o=u.sent(),[4,this.templateEngine.render("data/email/template/trackDelivery",n,"data/email/element/html")];case 3:return i=u.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:i,base:n.base})];case 4:return a=u.sent(),[4,this.sendNotification(e,t,n.base.subject,o,a)];case 5:return[2,u.sent()]}}))}))}),1)];case 1:return[2,o.sent()]}}))}))},e.prototype.sendUserNotification=function(e,t,n){return ye(this,void 0,void 0,(function(){var r=this;return ve(this,(function(o){switch(o.label){case 0:return[4,Y.request((function(){return ye(r,void 0,void 0,(function(){var r,o,i,a;return ve(this,(function(u){switch(u.label){case 0:return[4,this.templateEngine.render("data/email/template/userNotification",n,"data/email/element/text")];case 1:return r=u.sent(),[4,this.templateEngine.render("data/email/element/text/index",{content:r,base:n.base})];case 2:return o=u.sent(),[4,this.templateEngine.render("data/email/template/userNotification",n,"data/email/element/html")];case 3:return i=u.sent(),[4,this.templateEngine.render("data/email/element/html/index",{content:i,base:n.base})];case 4:return a=u.sent(),[4,this.sendNotification(e,t,n.base.subject,o,a)];case 5:return[2,u.sent()]}}))}))}),1)];case 1:return[2,o.sent()]}}))}))},e.prototype.sendNotification=function(e,t,n,r,o){return ye(this,void 0,void 0,(function(){var i;return ve(this,(function(a){switch(a.label){case 0:return a.trys.push([0,4,,5]),this.mode!==G.TEST?[3,1]:(z.info("Simulation Mode: Email has been sent",{sender:e,recipient:t}),[3,3]);case 1:return this.mode===G.DEVELOPMENT&&(t.contact="developer@onylab.com"),[4,this.mailjet.post("send",{version:"v3.1"}).request({Messages:[{From:{Name:e.name,Email:e.contact},To:[{Name:t.name,Email:t.contact}],Subject:n,TextPart:r,HTMLPart:o}]})];case 2:a.sent(),a.label=3;case 3:return[3,5];case 4:throw i=a.sent(),new p(i.message,Number(i.statusCode));case 5:return[2]}}))}))},e}(),ge=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function u(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))},be=function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},we=function(){function e(e,t){this.filesystem=new le,this.root=e,this.environment=void 0===t?H.getMode():t}return e.prototype.full=function(){return ge(this,void 0,void 0,(function(){return be(this,(function(e){switch(e.label){case 0:return[4,this.init()];case 1:return e.sent(),[2,this.config]}}))}))},e.prototype.init=function(){return ge(this,void 0,void 0,(function(){var e,t,n,r;return be(this,(function(o){switch(o.label){case 0:return void 0!==this.config?[3,6]:void 0!==this.root?[3,1]:(this.config={},[3,6]);case 1:return e=this,[4,this.filesystem.readJson(this.root+"data/config.json")];case 2:if(e.config=o.sent(),![G.DEVELOPMENT,G.TEST].includes(this.environment))return[3,6];o.label=3;case 3:return o.trys.push([3,5,,6]),t=this,n=ie.merge,r=[this.config],[4,this.filesystem.readJson(this.root+"data/config_"+String(this.environment)+".json")];case 4:return t.config=n.apply(void 0,r.concat([o.sent()])),[3,6];case 5:return o.sent(),[3,6];case 6:return[2]}}))}))},e}();const Ee=require("typeorm");var Se=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function u(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))},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:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}},Oe=function(){function e(e){this.root=e}return e.prototype.connect=function(e,t){return Se(this,void 0,void 0,(function(){var n,r;return xe(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,Ee.createConnection)(n)]);case 3:return r.connection=o.sent(),[3,5];case 4:z.error(new d("bad connection name")),o.label=5;case 5:return[2]}}))}))},e.prototype.synchronize=function(){return Se(this,void 0,void 0,(function(){return xe(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 Se(this,void 0,void 0,(function(){return xe(this,(function(e){return[2,this.connection.close()]}))}))},e.prototype.init=function(){return Se(this,void 0,void 0,(function(){var e,t;return xe(this,(function(n){switch(n.label){case 0:return void 0!==this.root?[3,1]:(this.db={},[3,3]);case 1:return e=new le,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 _e=require("prettyjson");var Te=function(){function e(){}return e.prototype.error=function(e){z.error(e)},e.prototype.info=function(e){z.trace(e)},e.prototype.json=function(e){z.trace(_e.render(e,{}))},e.prototype.success=function(e){z.trace(e)},e}(),Ce=function(){function e(){this.fileSystem=new le}return e.prototype.image=function(e,t,n){return r=this,o=void 0,a=function(){var r,o;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}(this,(function(i){switch(i.label){case 0:return void 0===n&&(n=A.randomBytes(20).toString("hex")+re.extname(e)),[4,this.fileSystem.write(t+re.sep+n,"")];case 1:return i.sent(),r=re.resolve(t+re.sep+n),o=ae.createWriteStream(r),[4,Z()({url:e,method:"GET",responseType:"stream"})];case 2:return i.sent().data.pipe(o),[2,new Promise((function(e,t){o.on("finish",(function(){return e(r)})),o.on("error",t)}))]}}))},new((i=void 0)||(i=Promise))((function(e,t){function n(e){try{c(a.next(e))}catch(e){t(e)}}function u(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var r;t.done?e(t.value):(r=t.value,r instanceof i?r:new i((function(e){e(r)}))).then(n,u)}c((a=a.apply(r,o||[])).next())}));var r,o,i,a},e}(),Pe=function(e){return null==e};const De=require("fast-diff");var Me=function(){function e(){}return e.escapeRegExp=function(e){return"string"!=typeof e?e:e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")},e.nullable=function(e){return Pe(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,ie.toLower)((0,ie.trim)((0,ie.deburr)(e)).replace(/[^0-9a-z\-\_]/gi,t))},e.truncate=function(e,t){return Pe(e)||e.length<=t?e:t<=3?"":e.slice(0,t-3)+"..."},e}(),je=function(){function e(){}return e.trim=function(e){return"string"==typeof e?e.trim():e},e.capitalize=function(t){var n=e.lower(t);return"string"==typeof n?n.split(" ").map((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})).join(" "):t},e.ucfirst=function(t){var n=e.lower(t);return"string"==typeof n?n.charAt(0).toUpperCase()+n.slice(1):t},e.lower=function(e){return"string"==typeof e?e.toLocaleLowerCase():e},e.upper=function(e){return"string"==typeof e?e.toLocaleUpperCase():e},e.phone=function(t,n,r){if(void 0===r&&(r="nat"),"string"==typeof t)switch(t=e.preformatPhone(t,n),r){case"nat":return e.phoneNat(t,n);case"int":return e.phoneInt(t,n)}return t},e.stripEmoji=function(e){var t=e;if("string"==typeof t){for(var r=n(525)(),o=void 0;null!==(o=r.exec(t));)try{t=(t=(t=t.replace(new RegExp("\\s"+Me.escapeRegExp(o[0]),"g"),"")).replace(new RegExp(Me.escapeRegExp(o[0])+"\\s","g"),"")).replace(new RegExp(Me.escapeRegExp(o[0]),"g"),"")}catch(e){}for(;null!==(o=r.exec(t));)try{t=(t=(t=t.replace(new RegExp("\\s"+Me.escapeRegExp(o[0]),"g"),"")).replace(new RegExp(Me.escapeRegExp(o[0])+"\\s","g"),"")).replace(new RegExp(Me.escapeRegExp(o[0]),"g"),"")}catch(e){}}return t},e.stripExoticCharacters=function(e){return"string"==typeof e?e.replace("’","'").replace(/[\u0250-\ue007]+/g,"*"):e},e.preformatPhone=function(e,t){return e=e.trim().replace(/\s?\.?\-?\(?\)?/g,""),"fr"===t&&new RegExp("^[1-9]").test(e)&&9===e.length?"0"+e:e},e.phoneNat=function(e,t){if("fr"===t){if(e.startsWith("+330")?e=e.substr(3):e.startsWith("+33")?e="0"+e.substr(3):e.startsWith("0033")?e="0"+e.substr(4):e.startsWith("33")&&11===e.length&&(e="0"+e.substr(2)),10===e.length){var n=0;e=e.split("").map((function(e){return e+(++n%2==0?" ":"")})).join("").trim()}return e}return e},e.phoneInt=function(e,t){return e.startsWith("+")?e:"fr"===t?(e.startsWith("0")&&(e=e.substr(1)),"+33"+e):e},e}(),Ne=function(){function e(){}return e.autoCorrectCity=function(t){if(Pe(t)||"string"!=typeof t||0===t.length)return t;(t.toLowerCase().startsWith("st-")||t.toLowerCase().startsWith("st "))&&(t="Saint "+t.substring(3));var n=e.CITIES.find((function(e){return e.toLowerCase()===t.toLowerCase()}));if(void 0!==n)return n;var r=e.CITIES.find((function(n){var r=e.countDiff(t,n);return r.add<=2&&r.remove<=2}));if(void 0!==r)return r;var o=e.CITIES.find((function(e){return e.replace(/-/g," ").toLowerCase()===t.toLowerCase()}));if(void 0!==o)return o;var i=e.CITIES.find((function(n){var r=e.countDiff(t,n.replace(/-/g," "));return r.add<=2&&r.remove<=2}));if(void 0!==i)return i;var a=e.CITIES.find((function(e){return e.toLowerCase().startsWith(t.toLowerCase())}));if(void 0!==a)return a;var u=e.CITIES.find((function(e){return t.toLowerCase().includes(e.toLowerCase())}));return void 0!==u?u:t},e.autoCorrectStreet=function(e){return Pe(e)||"string"!=typeof e||0===e.length?e:e=(e=(e=(e=(e=(e=(e=(e=(e=(e=e.replace(/(\sav\s)/gi," avenue ")).replace(/(\sav\.\s)/gi," avenue ")).replace(/(\schau\.\s)/gi," chaussée ")).replace(/(\strav\.\s)/gi," traverse ")).replace(/(\spl\.\s)/gi," place ")).replace(/(\spass\.\s)/gi," passage ")).replace(/(\ssent\.\s)/gi," sentier ")).replace(/(\simp\.\s)/gi," impasse ")).replace(/(\sall\.\s)/gi," allée ")).replace(/(\schem\.\s)/gi," chemin ")},e.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)||Q.isNumber(t)&&5===t.length&&!t.includes(".")&&!t.includes("-"))},e.parse=function(t,n){void 0===n&&(n=!0);var r={};if(!Pe(t)){var o=t.split(",");if(o.length>=3&&n){void 0===e.COUNTRIES.find((function(e){return t.toLowerCase().includes(" "+e.toLowerCase())}))&&o.push("France");var i=o.length-1;if(r.country=o[i].trim(),o.splice(i--,1),void 0!==o[i]&&o[i].trim().includes(" ")){var a=o[i].trim().split(" ");r.zip=void 0===a[0]?void 0:a[0].trim(),a.splice(0,1),r.city=a.join(" ").trim(),o.splice(i--,1)}else isNaN(Number(o[i].trim()))?isNaN(Number(o[i-1].trim()))?(r.city=o[i].trim(),o.splice(i--,1)):(r.city=o[i].trim(),o.splice(i--,1),r.zip=o[i].trim(),o.splice(i--,1)):(r.zip=o[i].trim(),o.splice(i--,1),i>=2&&(r.city=o[i].trim(),o.splice(i--,1)));r.street=o.map((function(e){return e.trim()})).join(" ").trim()}else{var u=t.toLowerCase();e.ZIPCODES.forEach((function(e){if(u.includes(e)){r.zip=e;try{u=u.replace(new RegExp(Me.escapeRegExp(e),"ig"),"")}catch(e){}}})),e.CITIES.forEach((function(t){var n;if(u.includes(t.toLowerCase())&&(void 0===r.zip||(null===(n=e.ZIPCODE_CITY[r.zip])||void 0===n?void 0:n.find((function(e){return e.toLowerCase()===t.toLowerCase()}))))){r.city=t;try{u=u.replace(new RegExp(Me.escapeRegExp(t),"ig"),"")}catch(e){}}})),e.COUNTRIES.forEach((function(e){if(u.includes(" "+e.toLowerCase())){r.country=e;try{u=u.replace(new RegExp(Me.escapeRegExp(" "+e),"ig"),"")}catch(e){}}})),void 0===r.street&&(r.street=u.split(",").map((function(e){return e.trim()})).join(" ").trim())}void 0===r.country&&(r.country="France")}return void 0!==r.street&&(r.street=je.lower(je.trim(String(r.street)))),void 0!==r.zip&&(r.zip=je.upper(je.trim(String(r.zip)))),void 0!==r.city&&(r.city=e.autoCorrectCity(je.capitalize(je.trim(String(r.city))))),void 0!==r.country&&(r.country=je.capitalize(je.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=Me.removeText(t.street,e).trim()})),"fr"===je.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 De(e.toLowerCase(),t.toLowerCase()).forEach((function(e){switch(e[0]){case-1:n.remove+=e[1].length;break;case 1:n.add+=e[1].length}})),n},e.ZIPCODES=["78500","78600","78800","95240","95530","78630","78670","78240","78580","78300","78955","78260","95150","95250","95480","95320","95550","95370","95740","95220","95870","78420","78400","78110","78360","78290","78230","78540","78920"],e.CITIES=["Sartrouville","Cormeilles-en-Parisis","Houilles","Maisons-Laffitte","La Frette-sur-Seine","Argenteuil","Montesson","Le Mesnil-le-Roi","Bezons","Orgeval","Poissy","Morainvilliers","Villennes-sur-Seine","Medan","Chambourcy","Aigremont","Les Alluets-le-Roi","Carrières-sous-Poissy","Achères","Taverny","Beauchamp","Pierrelaye","Saint-Leu-la-Forêt","Bessancourt","Montigny-lès-Cormeilles","Herblay","Méry-sur-Oise","Carrières-sur-Seine","Bezons","Chatou","Le Vésinet","Montesson","Croissy","Croissy-sur-Seine","Le Pecq","Vernouillet","Ecquevilly"],e.ZIPCODE_CITY={78500:["Sartrouville"],78600:["Maisons-Laffitte","Le Mesnil-le-Roi"],78800:["Houilles"],95240:["Cormeilles-en-Parisis"],95530:["La Frette-sur-Seine"],78630:["Orgeval","Morainvilliers"],78670:["Villennes-sur-Seine","Medan"],78240:["Chambourcy","Aigremont"],78300:["Poissy"],78955:["Carrières-sous-Poissy"],78260:["Achères"],78540:["Vernouillet"],78920:["Ecquevilly"],95150:["Taverny"],95250:["Beauchamp"],95480:["Pierrelaye"],95320:["Saint-Leu-la-Forêt"],95550:["Bessancourt"],95370:["Montigny-les-Cormeilles"],95220:["Herblay"],95740:["Frépillon"],95540:["Méry-sur-Oise"],95870:["Bezons"],78420:["Carrières-sur-Seine"],78400:["Chatou"],78110:["Le Vésinet"],78360:["Montesson"],78290:["Croissy-sur-Seine"],"78230 ":["Le Pecq"]},e.REGIONS=["île-de-france"],e.COUNTRIES=["France","FR"],e}(),Ae=function(){function e(){}return e.getCycleDateFromFullDate=function(e,t){if("weekly"===t){var n=J.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?J.DateTime.fromISO(e).toFormat("yyyy-LL"):J.DateTime.fromISO(e).toISODate()},e.displayWeekDay=function(t){var n="";return void 0!==e.WEEK_DAYS[t]&&(n=e.WEEK_DAYS[t]),n},e.generatePeriod=function(t,n,r,o,i,a){void 0===o&&(o=!0),void 0===i&&(i=e.PERIOD_MAX_DATES),void 0===a&&(a="daily");for(var u={daily:{day:1},weekly:{week:1},monthly:{month:1}}[a],c=J.DateTime.fromISO(t,{setZone:!0}).toISODate(),s=J.DateTime.fromISO(n,{setZone:!0}).toISODate(),l=0,f={};c<=s&&l<i;){var p=e.getCycleDateFromFullDate(c,a);f[p]=(0,ie.cloneDeep)(r),o&&(f[p].date=p),c=J.DateTime.fromISO(c,{setZone:!0}).plus(u).toISODate(),l++}return f},e.getOpenPeriods=function(e,t){var n=[];return e.forEach((function(e){for(var r=[e],o=function(){var e=r[0];if(void 0===t.find((function(t){return t.from<=e.from&&e.to<=t.to}))){var o=t.find((function(t){return t.from<=e.from&&e.from<t.to&&t.to<e.to}));if(void 0!==o)r.push({from:o.to,to:e.to});else{var i=t.find((function(t){return e.from<t.from&&e.to>t.from&&e.to<=t.to}));if(void 0!==i)r.push({from:e.from,to:i.from});else{var a=t.find((function(t){return e.from<t.from&&t.to<e.to}));void 0!==a?(r.push({from:e.from,to:a.from}),r.push({from:a.to,to:e.to})):n.push(e)}}}r.shift()};r.length>0;)o()})),n},e.limitDate=function(e,t,n){if(void 0===n&&(n=0),void 0!==e&&void 0!==t){var r=J.DateTime.fromISO(e,{setZone:!0}).toISO(),o=J.DateTime.fromISO(t,{setZone:!0}).plus({seconds:n}).toISO();return r>o?o:r}},e.localeToISO=function(e){var t,n=new RegExp("[0-9]{2}/[0-9]{2}/[0-9]{4}"),r=new RegExp("[0-9]{2}-[0-9]{2}-[0-9]{4}"),o=new RegExp("[0-9]{4}-[0-9]{2}-[0-9]{2}");if(n.test(e))t=(i=e.split("/"))[2]+"-"+i[1]+"-"+i[0];else if(r.test(e)){var i;t=(i=e.split("-"))[2]+"-"+i[1]+"-"+i[0]}else o.test(e)&&(t=e);return t},e.slotToTime=function(e){var t,n=new RegExp("^(\\s)?[0-9]{2}:[0-9]{2}(\\s)?$"),r=new RegExp("^(\\s)?[0-9]{2}:[0-9]{2}(\\s)?-(\\s)?[0-9]{2}:[0-9]{2}(\\s)?$");return e=e.trim(),n.test(e)?t=e.trim()+":00":r.test(e)&&(t=e.split("-")[0].trim()+":00"),t},e.round=function(e,t){if(void 0===t&&(t=0),"string"!=typeof e)return e;var n=J.DateTime.fromISO(e,{setZone:!0});return J.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}(),Ie=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}(),Re=function(){function e(){}return e.code=function(t){null==t&&(t=6);for(var n="";n.length<t;)n+=e.symbolUpperCases[e.int(0,e.symbolUpperCases.length-1)];return n},e.int=function(e,t){return null==e&&(e=0),null==t&&(t=Number.POSITIVE_INFINITY),e=Math.ceil(e),t=Math.floor(t),Math.floor(Math.random()*(t-e+1))+e},e.password=function(t){null==t&&(t=8);for(var n="";n.length<t;)switch(e.int(1,3)){case 1:n+=e.symbolUpperCases[e.int(0,e.symbolUpperCases.length-1)];break;case 2:n+=e.symbolLowerCases[e.int(0,e.symbolLowerCases.length-1)];break;default:n+=String(e.int(0,9))}return n},e.symbolUpperCases=["A","B","C","D","E","F","G","H","K","M","N","P","R","S","T","U","V","W","X","Y","Z"],e.symbolLowerCases=["a","b","c","d","e","f","g","h","k","m","n","p","r","s","t","u","v","w","x","y","z"],e}(),Le=function(){function e(){}return e.avg=function(t){if(0===t.length)return 0;var n=t.reduce((function(e,t){return e+t}),0);return e.round(n/t.length,2)},e.applyVariation=function(e,t){return e*(e>=0?1+t/100:1-t/100)},e.median=function(t){if(0===t.length)return 0;if(1===t.length)return t[0];var n=t.sort((function(e,t){return e-t}));return n.length%2==0?e.avg([n[n.length/2-1],n[n.length/2]]):n[Math.floor(n.length/2)]},e.percentage=function(e,t){return 0===t?0:e/t*100},e.round=function(e,t){return 0===t?Math.round(e):Number(e.toFixed(t))},e.variation=function(e,t){var n=0;return 0!==t?n=0!==e?(t-e)/Math.abs(e)*100:100*(t>0?1:-1):0!==e&&(n=-100*(e>0?1:-1)),Math.floor(n)},e}(),ke=function(){function e(){}return e.compact=function(t,n){if(void 0===n&&(n={}),(0,ie.isArray)(t)){var r=[];return t.forEach((function(t){t=e.compact(t,n),((0,ie.isArray)(t)&&t.length>0||(0,ie.isObject)(t)&&Object.keys(t).length>0||null!=t&&!(0,ie.isArray)(t)&&!(0,ie.isObject)(t))&&r.push(t)})),r}if((0,ie.isObject)(t)){var o={};return Object.keys(t).forEach((function(r){var i=t[r];(0,ie.isArray)(i)||(0,ie.isObject)(i)?(i=e.compact(i,n),((0,ie.isArray)(i)&&i.length>0||(0,ie.isObject)(i)&&Object.keys(i).length>0||null!=i&&!(0,ie.isArray)(i)&&!(0,ie.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}(),Fe=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(Le.round(r,n))},e.calculateTaxes=function(e,t){var n=0;return t.forEach((function(t){n+=e*t})),Le.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(Le.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/RGI_Emoji.js\"","webpack://SmilePlayerCommon/webpack/bootstrap","webpack://SmilePlayerCommon/webpack/runtime/compat get default export","webpack://SmilePlayerCommon/webpack/runtime/define property getters","webpack://SmilePlayerCommon/webpack/runtime/hasOwnProperty shorthand","webpack://SmilePlayerCommon/webpack/runtime/make namespace object","webpack://SmilePlayerCommon/./src/constant/Path.ts","webpack://SmilePlayerCommon/./src/exception/MainException.ts","webpack://SmilePlayerCommon/./src/exception/BadParameterException.ts","webpack://SmilePlayerCommon/./src/exception/BadRequestException.ts","webpack://SmilePlayerCommon/./src/exception/ConflictException.ts","webpack://SmilePlayerCommon/./src/exception/DuplicateException.ts","webpack://SmilePlayerCommon/./src/exception/ExternalApiException.ts","webpack://SmilePlayerCommon/./src/exception/InternalException.ts","webpack://SmilePlayerCommon/./src/exception/NotImplementedException.ts","webpack://SmilePlayerCommon/./src/exception/ObjectNotFoundException.ts","webpack://SmilePlayerCommon/./src/exception/PageNotFoundException.ts","webpack://SmilePlayerCommon/./src/exception/UnauthorizedException.ts","webpack://SmilePlayerCommon/external node-commonjs \"crypto\"","webpack://SmilePlayerCommon/external commonjs \"express\"","webpack://SmilePlayerCommon/external commonjs \"cors\"","webpack://SmilePlayerCommon/external commonjs \"helmet\"","webpack://SmilePlayerCommon/external commonjs \"connect-timeout\"","webpack://SmilePlayerCommon/external commonjs \"@sentry/node\"","webpack://SmilePlayerCommon/external commonjs \"@sentry/integrations\"","webpack://SmilePlayerCommon/./src/tool/Env.ts","webpack://SmilePlayerCommon/./src/tool/Environment.ts","webpack://SmilePlayerCommon/./src/tool/Logger.ts","webpack://SmilePlayerCommon/./src/http/Server.ts","webpack://SmilePlayerCommon/./src/http/HandlerController.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/service/sender/SmsSenderService.ts","webpack://SmilePlayerCommon/external node-commonjs \"path\"","webpack://SmilePlayerCommon/external commonjs \"mustache\"","webpack://SmilePlayerCommon/external commonjs \"lodash\"","webpack://SmilePlayerCommon/external node-commonjs \"fs\"","webpack://SmilePlayerCommon/./src/util/PromiseUtil.ts","webpack://SmilePlayerCommon/./src/tool/FileSystem.ts","webpack://SmilePlayerCommon/./src/templating/TemplateEngine.ts","webpack://SmilePlayerCommon/external commonjs \"node-mailjet\"","webpack://SmilePlayerCommon/./src/service/sender/EmailSenderService.ts","webpack://SmilePlayerCommon/./src/tool/Configuration.ts","webpack://SmilePlayerCommon/external commonjs \"typeorm\"","webpack://SmilePlayerCommon/./src/tool/Database.ts","webpack://SmilePlayerCommon/external commonjs \"prettyjson\"","webpack://SmilePlayerCommon/./src/tool/Displayer.ts","webpack://SmilePlayerCommon/./src/tool/Downloader.ts","webpack://SmilePlayerCommon/./src/util/HelperUtil.ts","webpack://SmilePlayerCommon/./src/util/ValidatorUtil.ts","webpack://SmilePlayerCommon/external commonjs \"fast-diff\"","webpack://SmilePlayerCommon/./src/util/StringUtil.ts","webpack://SmilePlayerCommon/./src/util/FormatterUtil.ts","webpack://SmilePlayerCommon/./src/util/AddressUtil.ts","webpack://SmilePlayerCommon/./src/util/DateUtil.ts","webpack://SmilePlayerCommon/./src/util/ExtractorUtil.ts","webpack://SmilePlayerCommon/./src/util/GeneratorUtil.ts","webpack://SmilePlayerCommon/./src/util/MathUtil.ts","webpack://SmilePlayerCommon/./src/util/ObjectUtil.ts","webpack://SmilePlayerCommon/./src/util/PriceUtil.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SmilePlayerCommon\"] = factory();\n\telse\n\t\troot[\"SmilePlayerCommon\"] = factory();\n})(global, function() {\nreturn ","module.exports = require(\"emoji-regex/RGI_Emoji.js\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export class Path {\n private static BASE_PATH: string = './';\n\n public static registerBasePath(basePath: string): void {\n if (process.env.APP_HOME !== undefined) {\n Path.BASE_PATH = process.env.APP_HOME + '/';\n } else {\n Path.BASE_PATH = basePath + (basePath.endsWith('/') ? '' : '/');\n }\n }\n\n public static data(): string {\n return Path.BASE_PATH + 'data/';\n }\n\n public static db(): string {\n return Path.storage() + 'db/';\n }\n\n public static root(): string {\n return Path.BASE_PATH;\n }\n\n public static session(): string {\n return Path.storage() + 'session/';\n }\n\n public static storage(): string {\n return Path.BASE_PATH + 'storage/';\n }\n}\n","import {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class MainException extends Error implements ExceptionContract {\n public code: number;\n public data: {[key: string]: any};\n\n public constructor(message: string, code?: number, data?: {[key: string]: any}) {\n super(message);\n this.code = code;\n this.data = data;\n this.name = 'MainException';\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, MainException);\n } else {\n this.stack = (new Error(message)).stack;\n }\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class BadParameterException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 400, data);\n this.name = 'BadParameterException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class BadRequestException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 400, data);\n this.name = 'BadRequestException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class ConflictException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 409, data);\n this.name = 'ConflictException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class DuplicateException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 409, data);\n this.name = 'DuplicateException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class ExternalApiException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 502, data);\n this.name = 'ExternalApiException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class InternalException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 500, data);\n this.name = 'InternalException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class NotImplementedException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 501, data);\n this.name = 'NotImplementedException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class ObjectNotFoundException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 404, data);\n this.name = 'ObjectNotFoundException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class PageNotFoundException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 404, data);\n this.name = 'PageNotFoundException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class UnauthorizedException extends MainException implements ExceptionContract {\n public static readonly ERROR_CODE: number = 401;\n\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, UnauthorizedException.ERROR_CODE, data);\n this.name = 'UnauthorizedException';\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"crypto\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"express\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"cors\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"helmet\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"connect-timeout\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@sentry/node\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@sentry/integrations\");","/* eslint-disable no-shadow */\nexport enum Env {\n PRODUCTION = 'prod',\n DEVELOPMENT = 'dev',\n TEST = 'test'\n}\n","import {Env} from 'common/tool/Env';\n\nexport class Environment {\n public static getMode(): Env {\n switch (process.env.NODE_ENV) {\n case 'dev':\n case 'development':\n return Env.DEVELOPMENT;\n case 'prod':\n case 'production':\n return Env.PRODUCTION;\n case 'test':\n return Env.TEST;\n }\n\n return process.env.APP_ID === undefined ? Env.DEVELOPMENT : Env.PRODUCTION;\n }\n}\n","import * as Sentry from '@sentry/node';\nimport { CaptureConsole } from '@sentry/integrations';\nimport {Environment} from 'common/tool/Environment';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\nimport {UnauthorizedException} from 'common/exception/UnauthorizedException';\nimport {Env} from 'common/tool/Env';\n\nexport class Logger {\n public static init(sentryToken: string): void {\n if (Environment.getMode() === Env.PRODUCTION) {\n Sentry.init({\n dsn: sentryToken,\n integrations: [\n new CaptureConsole({\n levels: ['error', 'warn', 'log']\n })\n ],\n environment: Environment.getMode(),\n maxBreadcrumbs: 50\n });\n }\n }\n\n public static trace(message: string, extra?: any): void {\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.info(message); // eslint-disable-line no-console\n } else {\n console.info(message, extra); // eslint-disable-line no-console\n }\n }\n Sentry.addBreadcrumb({\n category: 'info',\n message: message,\n data: extra,\n level: Sentry.Severity.Info\n });\n }\n\n public static debug(message: string, extra?: any): void {\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.log(message); // eslint-disable-line no-console\n } else {\n console.log(message, extra); // eslint-disable-line no-console\n }\n }\n Sentry.addBreadcrumb({\n category: 'debug',\n message: message,\n data: extra,\n level: Sentry.Severity.Debug\n });\n }\n\n public static info(message: string, extra?: any): void {\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.info(message); // eslint-disable-line no-console\n } else {\n console.info(message, extra); // eslint-disable-line no-console\n }\n }\n Sentry.withScope(scope => {\n if (extra !== undefined) {\n scope.setExtra('extra', JSON.stringify(extra));\n }\n Sentry.captureMessage(message);\n });\n }\n\n public static warning(error: ExceptionContract, extra?: any): void {\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.warn(error); // eslint-disable-line no-console\n } else {\n console.warn(error, extra); // eslint-disable-line no-console\n }\n }\n Sentry.withScope(scope => {\n if (extra !== undefined) {\n scope.setExtra('extra', JSON.stringify(extra));\n }\n if (error.data !== undefined) {\n scope.setExtra('data', JSON.stringify(error.data));\n }\n Sentry.captureException(error);\n });\n }\n\n public static error(error: ExceptionContract, extra?: any): void {\n if ([UnauthorizedException.ERROR_CODE].includes(error.code)) {\n return;\n }\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.error(error); // eslint-disable-line no-console\n } else {\n console.error(error, extra); // eslint-disable-line no-console\n }\n }\n Sentry.withScope(scope => {\n if (extra !== undefined) {\n scope.setExtra('extra', JSON.stringify(extra));\n }\n if (error.data !== undefined) {\n scope.setExtra('data', JSON.stringify(error.data));\n }\n Sentry.captureException(error);\n });\n }\n\n public static requestHandler(): any {\n return Sentry.Handlers.requestHandler();\n }\n\n public static errorHandler(): any {\n return Sentry.Handlers.errorHandler();\n }\n}\n","import * as crypto from 'crypto';\nimport * as express from 'express';\nimport * as cors from 'cors';\nimport * as helmet from 'helmet';\nimport * as timeout from 'connect-timeout';\nimport {ServerContract} from 'common/http/ServerContract';\nimport {Logger} from 'common/tool/Logger';\n\nexport class Server implements ServerContract {\n public static readonly DEFAULT_PORT: number = 8080;\n public static readonly SALT: string = '03561b4a0fe7f125025';\n private app: express.Express;\n\n public async create(origins: string[], port?: number): Promise<express.Express> {\n if (this.app === undefined) {\n const backendPort: number = port || Server.DEFAULT_PORT;\n const backendLocalUrl: string = 'http://localhost:' + String(backendPort);\n Logger.debug('start server on ' + backendLocalUrl);\n this.app = express();\n this.app.use(timeout('300s'));\n this.app.use(express.json({\n inflate: true,\n limit: '100kb',\n reviver: null,\n strict: true,\n type: 'application/json',\n verify: undefined\n }));\n this.app.use(cors({\n origin: [backendLocalUrl].concat(origins),\n credentials: true\n }));\n this.app.use(helmet());\n this.app.use(express.json());\n this.app.listen(backendPort, () => {\n Logger.debug('server is running on ' + backendLocalUrl);\n });\n }\n\n return this.app;\n }\n\n public getSessionSecret(sessionCookieName: string): string {\n return crypto.createHash('sha1').update(sessionCookieName + Server.SALT).digest('hex');\n }\n}\n","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","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"axios\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"luxon\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"querystring\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"retry\");","import * as retry from 'retry';\nimport {Logger} from 'common/tool/Logger';\n\nexport class Retry {\n public static async request(process: () => Promise<void>, retries: number = 2): Promise<any> {\n const operation = retry.operation({\n retries: retries,\n factor: 1,\n minTimeout: 0,\n maxTimeout: 0,\n randomize: false\n });\n\n return new Promise<any>((resolve, reject) => {\n operation.attempt(() => {\n process().then(resolve).catch((error) => {\n if (!operation.retry(error)) {\n Logger.error(error);\n reject(error);\n }\n });\n });\n });\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"urlencode\");","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';\n\nexport class SmsSenderService implements SmsSenderServiceContract {\n public static readonly BASE_API_URL: string = 'https://api.smsmode.com/http/1.6/';\n public static readonly MESSAGE_MAX_LENGTH: number = 150;\n private readonly token: string;\n private readonly mode: Environment;\n\n public constructor(token: string, mode: Environment) {\n this.token = token;\n this.mode = mode;\n }\n\n public async send(senderName: string, message: string, rawPhones: string[], isCommercial: boolean = true, sendAt?: string): Promise<void> {\n let phones: string[] = this.checkPhoneFormat(rawPhones);\n if (phones.length === 0) {\n Logger.warning(new BadParameterException('no valid phone', {phones: rawPhones}));\n\n return Promise.resolve();\n }\n\n if (phones.length > 1) {\n if (message.length > SmsSenderService.MESSAGE_MAX_LENGTH * 2) {\n message = message.substring(0, SmsSenderService.MESSAGE_MAX_LENGTH * 2);\n } else if (message.length > SmsSenderService.MESSAGE_MAX_LENGTH && message.length <= SmsSenderService.MESSAGE_MAX_LENGTH * 1.33) {\n message = message.substring(0, SmsSenderService.MESSAGE_MAX_LENGTH);\n }\n }\n\n await Retry.request(async () => {\n const params: {[param: string]: any} = {\n accessToken: this.token,\n emetteur: senderName,\n message: urlencode(message, 'ISO-8859-15'),\n numero: phones.map((phone) => phone.replace('+', '')).join(','),\n classe_msg: 2,\n nbr_msg: Math.ceil(message.length / SmsSenderService.MESSAGE_MAX_LENGTH)\n };\n\n if (isCommercial) {\n params.stop = 1;\n }\n\n if (sendAt !== undefined) {\n params.date_envoi = DateTime.fromISO(sendAt, { setZone: true }).toFormat('ddMMyyyy-HH:mm');\n }\n\n if (this.mode === Env.TEST) {\n Logger.info('Simulation Mode: SMS has been sent', {params: params});\n } else {\n if (this.mode === Env.DEVELOPMENT) {\n phones = ['+15145705214'];\n }\n\n const response: {data: string} = await axios.post(SmsSenderService.BASE_API_URL + 'sendSMS.do',\n querystring.stringify(params, '&', '=', {encodeURIComponent: (p) => p}), {\n timeout: 30000\n });\n\n if (response.data.length > 0 && response.data.trim().substring(0, 1) !== '0') {\n throw new ExternalApiException('Error: ' + response.data, params);\n }\n }\n }, 1);\n }\n\n private checkPhoneFormat(phones: string[]): string[] {\n 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 phones.filter((phone) => caRegex.test(phone) || frRegex.test(phone) || usRegex.test(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","import * as fs from 'fs';\nimport * as path from 'path';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {BadParameterException} from 'common/exception/BadParameterException';\nimport {asyncForEach} from 'common/util/PromiseUtil';\n\nexport class FileSystem implements FileSystemContract {\n public dirPath(filePath: string): string {\n const i: number = path.resolve(filePath).lastIndexOf(path.sep);\n if (i < 0) {\n return filePath;\n }\n\n return path.resolve(path.resolve(filePath).substr(0, i + 1)) + path.sep;\n }\n\n public async move(filePath: string, dirPath: string): Promise<void> {\n if (!this.isFile(filePath)) {\n throw new BadParameterException(String(filePath) + ' does not exist or is not a file');\n }\n\n fs.mkdirSync(dirPath, {recursive: true});\n if (!this.isDir(dirPath)) {\n throw new BadParameterException(String(dirPath) + ' does not exist or is not a directory');\n }\n\n return fs.renameSync(filePath, dirPath + path.basename(filePath));\n }\n\n public async read(filePath: string): Promise<string> {\n if (!this.isFile(filePath)) {\n throw new BadParameterException(String(filePath) + ' does not exist or is not a file');\n }\n\n return fs.readFileSync(filePath, 'utf8');\n }\n\n public async readJson(jsonPath: string): Promise<any> {\n const data: any = await this.read(jsonPath);\n if (!this.isJson(data)) {\n throw new BadParameterException(String(jsonPath) + ' does not contain JSON');\n }\n\n return JSON.parse(data);\n }\n\n public async readJsonFiles(dirPath: string): Promise<{name: string, data: any}[]> {\n if (!this.isDir(dirPath)) {\n throw new BadParameterException(String(dirPath) + ' does not exist or is not a directory');\n }\n\n const separator: string = dirPath.endsWith('/') ? '' : '/';\n const files: string[] = fs.readdirSync(dirPath);\n\n const output: {name: string, data: any}[] = [];\n await asyncForEach(files, async (fileName: string) => {\n if (this.isFile(dirPath + separator + fileName) && fileName.endsWith('.json')) {\n output.push({\n name: fileName,\n data: await this.readJson(dirPath + separator + fileName)\n });\n }\n });\n\n return output;\n }\n\n public async write(filePath: string, rawData: any): Promise<void> {\n let data: string = '';\n if (typeof rawData === 'string') {\n data = String(rawData);\n } else if (typeof rawData === 'number') {\n data = String(rawData);\n } else {\n data = JSON.stringify(rawData);\n }\n\n fs.mkdirSync(this.dirPath(filePath), {recursive: true});\n\n fs.writeFileSync(filePath, data, {encoding: 'utf8'});\n\n return Promise.resolve();\n }\n\n public async writeJson(jsonPath: string, data: any): Promise<void> {\n return this.write(jsonPath, JSON.stringify(data));\n }\n\n private isDir(dirPath: string): boolean {\n return fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();\n }\n\n private isFile(filePath: string): boolean {\n return fs.existsSync(filePath) && fs.statSync(filePath).isFile();\n }\n\n private isJson(data: any): boolean {\n try {\n JSON.parse(data);\n\n return true;\n } catch (_error) {\n return false;\n }\n }\n}\n","import * as path from 'path';\nimport {parse, render} from 'mustache';\nimport {cloneDeep} from 'lodash';\nimport {TemplateEngineContract} from 'common/templating/TemplateEngineContract';\nimport {FileSystem} from 'common/tool/FileSystem';\nimport {asyncForEach} from 'common/util/PromiseUtil';\n\nexport class TemplateEngine implements TemplateEngineContract {\n public async render(templatePath: string, data: {[key: string]: any}, baseIncludePath?: string): Promise<string> {\n if (!templatePath.endsWith('.template')) {\n templatePath += '.template';\n }\n const view: {[key: string]: any} = cloneDeep(data);\n const basePath: string = path.isAbsolute(templatePath) ? '' : __dirname + path.sep;\n const fileSystem = new FileSystem();\n const content: string = await fileSystem.read(basePath + templatePath);\n\n const includes: string[] = [];\n const results: any[][] = parse(content);\n results.forEach((result) => {\n if (result.length >= 4 && result[0] === '&' && result[1].startsWith('include:')) {\n includes.push(result[1]);\n }\n });\n\n if (includes.length > 0) {\n if (baseIncludePath === undefined) {\n baseIncludePath = path.dirname(basePath + templatePath) + path.sep;\n } else if (!path.isAbsolute(baseIncludePath)) {\n baseIncludePath = basePath + baseIncludePath;\n }\n await asyncForEach(includes, async (include) => {\n const includeParts: string[] = include.split(':');\n if (includeParts.length === 3) {\n const templateName: string = includeParts[2];\n view[include] = await this.render(path.resolve(baseIncludePath, templateName), view[include]);\n }\n });\n }\n\n return render(content, view);\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"node-mailjet\");","import {EmailSenderServiceContract} from 'common/service/sender/EmailSenderServiceContract';\nimport {TemplateEngine} from 'common/templating/TemplateEngine';\nimport {TemplateEngineContract} from 'common/templating/TemplateEngineContract';\nimport {ViewEmailTrackDeliveryContract} from 'common/templating/view/email/ViewEmailTrackDeliveryContract';\nimport {RecipientContract} from 'common/service/sender/RecipientContract';\nimport {SenderContract} from 'common/service/sender/SenderContract';\nimport * as Mailjet from 'node-mailjet';\nimport {MainException} from 'common/exception/MainException';\nimport {Retry} from 'common/tool/Retry';\nimport {Environment} from 'common/tool/Environment';\nimport {Env} from 'common/tool/Env';\nimport {Logger} from 'common/tool/Logger';\nimport {ViewEmailUserNotificationContract} from 'common/templating/view/email/ViewEmailUserNotificationContract';\n\nexport class EmailSenderService implements EmailSenderServiceContract {\n private readonly templateEngine: TemplateEngineContract;\n private readonly mailjet: any;\n private readonly mode: Environment;\n\n public constructor(apiPublicKey: string, apiSecretKey: string, mode: Environment) {\n this.templateEngine = new TemplateEngine();\n this.mailjet = Mailjet.connect(apiPublicKey, apiSecretKey);\n this.mode = mode;\n }\n\n public async sendDeliveryDelay(sender: SenderContract, recipient: RecipientContract, data: ViewEmailTrackDeliveryContract): Promise<void> {\n return await Retry.request(async () => {\n if (data.base.copyright === undefined) {\n data.base.copyright = {\n year: String((new Date()).getUTCFullYear())\n };\n }\n const text: string = await this.templateEngine.render('data/email/template/deliveryDelay', data, 'data/email/element/text');\n const html: string = await this.templateEngine.render('data/email/template/deliveryDelay', data, 'data/email/element/html');\n\n return await this.sendNotification(sender, recipient, data.base.subject, text, html);\n }, 1);\n }\n\n public async sendTrackDelivery(sender: SenderContract, recipient: RecipientContract, data: ViewEmailTrackDeliveryContract): Promise<void> {\n return await Retry.request(async () => {\n const textContent: string = await this.templateEngine.render('data/email/template/trackDelivery', data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: data.base});\n const htmlContent: string = await this.templateEngine.render('data/email/template/trackDelivery', data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: data.base});\n\n return await this.sendNotification(sender, recipient, data.base.subject, text, html);\n }, 1);\n }\n\n public async sendUserNotification(sender: SenderContract, recipient: RecipientContract, data: ViewEmailUserNotificationContract): Promise<void> {\n return await Retry.request(async () => {\n const textContent: string = await this.templateEngine.render('data/email/template/userNotification', data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: data.base});\n const htmlContent: string = await this.templateEngine.render('data/email/template/userNotification', data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: data.base});\n\n return await this.sendNotification(sender, recipient, data.base.subject, text, html);\n }, 1);\n }\n\n // private async sendCampaign(sender: SenderContract, recipients: RecipientContract[], subject: string, text: string, html: string): Promise<void> {\n // try {\n // await this.mailjet.post('send').request({\n // FromEmail: sender.contact,\n // FromName: sender.name,\n // Subject: subject,\n // 'Text-part': text,\n // 'Html-part': html,\n // Recipients: [\n // recipients.map((recipient) => {\n // return { Name: recipient.name, Email: recipient.contact };\n // }),\n // ],\n // });\n //\n // return Promise.resolve();\n // } catch (error) {\n // return Promise.reject(new MainException(error.message, Number(error.statusCode)));\n // }\n // }\n\n private async sendNotification(sender: SenderContract, recipient: RecipientContract, subject: string, text: string, html: string): Promise<void> {\n try {\n if (this.mode === Env.TEST) {\n Logger.info('Simulation Mode: Email has been sent', {sender: sender, recipient: recipient});\n } else {\n if (this.mode === Env.DEVELOPMENT) {\n recipient.contact = 'developer@onylab.com';\n }\n\n await this.mailjet.post('send', {'version': 'v3.1'})\n .request({\n 'Messages': [\n {\n 'From': {\n 'Name': sender.name,\n 'Email': sender.contact\n },\n 'To': [{\n 'Name': recipient.name,\n 'Email': recipient.contact\n }],\n 'Subject': subject,\n 'TextPart': text,\n 'HTMLPart': html\n }\n ]\n });\n }\n } catch (error) {\n throw new MainException(error.message, Number(error.statusCode));\n }\n }\n}\n","import {ConfigurationContract} from 'common/tool/ConfigurationContract';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {FileSystem} from 'common/tool/FileSystem';\nimport {Env} from 'common/tool/Env';\nimport {merge} from 'lodash';\nimport {Environment} from 'common/tool/Environment';\n\nexport class Configuration implements ConfigurationContract {\n private readonly filesystem: FileSystemContract;\n private root: string;\n private environment: Env;\n private config: any;\n\n public constructor(root: string, environment?: Env) {\n this.filesystem = new FileSystem();\n this.root = root;\n this.environment = environment === undefined ? Environment.getMode() : environment;\n }\n\n public async full(): Promise<any> {\n await this.init();\n\n return this.config;\n }\n\n private async init(): Promise<void> {\n if (this.config === undefined) {\n if (this.root === undefined) {\n this.config = {};\n } else {\n this.config = await this.filesystem.readJson(this.root + 'data/config.json');\n if ([Env.DEVELOPMENT, Env.TEST].includes(this.environment)) {\n try {\n this.config = merge(this.config, await this.filesystem.readJson(this.root + 'data/config_' + String(this.environment) + '.json'));\n } catch (_e) {\n // nothing\n }\n }\n\n }\n }\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"typeorm\");","import {Connection, createConnection} from 'typeorm';\nimport {DatabaseContract} from 'common/tool/DatabaseContract';\nimport {FileSystem} from 'common/tool/FileSystem';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {BadParameterException} from 'common/exception/BadParameterException';\nimport {Logger} from 'common/tool/Logger';\n\n// TypeORM documation, types: https://github.com/typeorm/typeorm/blob/master/src/driver/types/ColumnTypes.ts\nexport class Database implements DatabaseContract {\n private root: string;\n private db: any;\n private connection: Connection;\n\n public constructor(root: string) {\n this.root = root;\n }\n\n public async connect(name: string, entities: any[]): Promise<void> {\n if (this.db === undefined) {\n await this.init();\n }\n\n const con: any = this.db[name];\n if (con !== undefined) {\n con.entities = entities;\n con.logging = ['error'];\n con.logger = true;\n con.bigNumberStrings = false;\n if (con.timezone === undefined) {\n con.timezone = 'Z';\n }\n if (con.charset === undefined) {\n con.charset = 'UTF8_GENERAL_CI';\n }\n this.connection = await createConnection(con);\n } else {\n Logger.error(new BadParameterException('bad connection name'));\n }\n }\n\n public async synchronize(): Promise<void> {\n if (this.connection !== undefined) {\n await this.connection.synchronize();\n }\n }\n\n public async close(): Promise<void> {\n return this.connection.close();\n }\n\n private async init(): Promise<void> {\n if (this.root === undefined) {\n this.db = {};\n } else {\n const fileSystem: FileSystemContract = new FileSystem();\n this.db = await fileSystem.readJson(this.root + 'data/db.json');\n }\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"prettyjson\");","import * as prettyjson from 'prettyjson';\nimport {DisplayerContract} from 'common/tool/DisplayerContract';\nimport {Logger} from 'common/tool/Logger';\n\nexport class Displayer implements DisplayerContract {\n public error(error: Error): void {\n Logger.error(error);\n }\n\n public info(message: string): void {\n Logger.trace(message);\n }\n\n public json(json: any): void {\n Logger.trace(prettyjson.render(json, {}));\n }\n\n public success(message: string): void {\n Logger.trace(message);\n }\n}\n","import {DownloaderContract} from 'common/tool/DownloaderContract';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport * as crypto from 'crypto';\nimport axios from 'axios';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {FileSystem} from 'common/tool/FileSystem';\n\nexport class Downloader implements DownloaderContract {\n private readonly fileSystem: FileSystemContract;\n\n public constructor() {\n this.fileSystem = new FileSystem();\n }\n\n public async image(url: string, outputPath: string, outputName?: string): Promise<string> {\n if (outputName === undefined) {\n outputName = crypto.randomBytes(20).toString('hex') + path.extname(url);\n }\n await this.fileSystem.write(outputPath + path.sep + outputName, '');\n\n const output: string = path.resolve(outputPath + path.sep + outputName);\n const writer: any = fs.createWriteStream(output);\n\n const response: any = await axios({\n url,\n method: 'GET',\n responseType: 'stream'\n });\n\n response.data.pipe(writer);\n\n return new Promise((resolve, reject) => {\n writer.on('finish', () => resolve(output));\n writer.on('error', reject);\n });\n }\n}\n","export const isNullOrUndefined: (obj: unknown) => boolean = (obj) => {\n return obj === undefined || obj === null;\n};\n","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 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","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"fast-diff\");","import {deburr, toLower, trim} from 'lodash';\nimport {isNullOrUndefined} from 'common/util/HelperUtil';\n\nexport class StringUtil {\n // alternative https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex\n public static escapeRegExp(str: string): string {\n if (typeof str !== 'string') {\n return str;\n }\n\n return str.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&'); // and .replace(/-/g, '\\\\x2d');\n }\n\n public static nullable(str: string): string {\n if (isNullOrUndefined(str)) {\n return null;\n }\n\n if (typeof str === 'string' && str.length === 0) {\n return null;\n }\n\n return str;\n }\n\n public static removeMultiSpaces(data: string) {\n if (typeof data !== 'string') {\n return data;\n }\n\n return data.replace(/\\s{2,}/g, ' ');\n }\n\n public static removeText(data: string, text: string) {\n if (typeof data !== 'string' || typeof text !== 'string' || text.length === 0) {\n return data;\n }\n\n try {\n data = data.replace(new RegExp(StringUtil.escapeRegExp(text), 'ig'), '');\n data = data.replace(new RegExp(StringUtil.escapeRegExp(text).replace(new RegExp('\\\\s', 'g'), '-'), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n\n return data;\n }\n\n public static replace(str: string, targets: string[], replacers: string[]): string {\n if (typeof str !== 'string') {\n return str;\n }\n\n if (targets.length !== replacers.length) {\n return str;\n }\n\n let output: string = str;\n targets.forEach((target, index) => {\n output = output.replace(new RegExp(StringUtil.escapeRegExp(target), 'ig'), replacers[index]);\n });\n\n return output;\n }\n\n public static slugify(raw: string, separator?: string): string {\n if (raw === undefined) {\n return '';\n }\n\n return toLower(trim(deburr(raw)).replace(/[^0-9a-z\\-\\_]/gi, separator));\n }\n\n public static truncate(str: string, limit: number): string {\n if (isNullOrUndefined(str) || str.length <= limit) {\n return str;\n }\n\n if (limit <= 3) {\n return '';\n }\n\n return str.slice(0, limit - 3) + '...';\n }\n}\n","import {StringUtil} from 'common/util/StringUtil';\n\nexport class FormatterUtil {\n public static trim(raw: string): string {\n return typeof raw === 'string' ? raw.trim() : raw;\n }\n\n public static capitalize(raw: string): string {\n const lowraw: string = FormatterUtil.lower(raw);\n\n return typeof lowraw === 'string' ? lowraw.split(' ').map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join (' ') : raw;\n }\n\n public static ucfirst(raw: string): string {\n const lowraw: string = FormatterUtil.lower(raw);\n\n return typeof lowraw === 'string' ? lowraw.charAt(0).toUpperCase() + lowraw.slice(1) : raw;\n }\n\n public static lower(raw: string): string {\n return typeof raw === 'string' ? raw.toLocaleLowerCase() : raw;\n }\n\n public static upper(raw: string): string {\n return typeof raw === 'string' ? raw.toLocaleUpperCase() : raw;\n }\n\n public static phone(raw: string, locale: string, output: 'nat' | 'int' = 'nat'): string {\n if (typeof raw === 'string') {\n raw = FormatterUtil.preformatPhone(raw, locale);\n switch (output) {\n case 'nat': // national\n return FormatterUtil.phoneNat(raw, locale);\n break;\n case 'int': // international\n return FormatterUtil.phoneInt(raw, locale);\n break;\n }\n }\n\n return raw;\n }\n\n public static stripEmoji(raw: string): string {\n let output: string = raw;\n\n if (typeof output === 'string') {\n const emojiRegex = require('emoji-regex/RGI_Emoji.js'); /* eslint-disable-line @typescript-eslint/no-var-requires */\n const regex: RegExp = emojiRegex();\n\n let match;\n while ((match = regex.exec(output)) !== null) {\n try {\n output = output.replace(new RegExp('\\\\s' + StringUtil.escapeRegExp(match[0]), 'g'), '');\n output = output.replace(new RegExp(StringUtil.escapeRegExp(match[0]) + '\\\\s', 'g'), '');\n output = output.replace(new RegExp(StringUtil.escapeRegExp(match[0]), 'g'), '');\n } catch (_e) {\n // ignore\n }\n }\n while ((match = regex.exec(output)) !== null) {\n try {\n output = output.replace(new RegExp('\\\\s' + StringUtil.escapeRegExp(match[0]), 'g'), '');\n output = output.replace(new RegExp(StringUtil.escapeRegExp(match[0]) + '\\\\s', 'g'), '');\n output = output.replace(new RegExp(StringUtil.escapeRegExp(match[0]), 'g'), '');\n } catch (_e) {\n // ignore\n }\n }\n }\n\n return output;\n }\n\n public static stripExoticCharacters(raw: string): string {\n if (typeof raw === 'string') {\n return raw.replace('’', '\\'').replace(/[\\u0250-\\ue007]+/g, '*');\n }\n\n return raw;\n }\n\n private static preformatPhone(raw: string, locale: string): string {\n raw = raw.trim().replace(/\\s?\\.?\\-?\\(?\\)?/g, '');\n switch (locale) {\n case 'fr':\n if ((new RegExp('^[1-9]')).test(raw) && raw.length === 9) {\n return '0' + raw;\n }\n break;\n }\n\n return raw;\n }\n\n private static phoneNat(raw: string, locale: string): string {\n switch (locale) {\n case 'fr': // format: 06 11 22 33 44\n if (raw.startsWith('+330')) {\n raw = raw.substr(3);\n } else if (raw.startsWith('+33')) {\n raw = '0' + raw.substr(3);\n } else if (raw.startsWith('0033')) {\n raw = '0' + raw.substr(4);\n } else if (raw.startsWith('33') && raw.length === 11) {\n raw = '0' + raw.substr(2);\n }\n\n if (raw.length === 10) {\n let i: number = 0;\n raw = raw.split('').map((num) => {\n i++;\n\n return num + (i % 2 === 0 ? ' ' : '');\n }).join('').trim();\n }\n\n return raw;\n break;\n }\n\n return raw;\n }\n\n private static phoneInt(raw: string, locale: string): string {\n if (raw.startsWith('+')) {\n return raw;\n }\n\n switch (locale) {\n case 'fr': // format: +33611223344\n if (raw.startsWith('0')) {\n raw = raw.substr(1);\n }\n\n return '+33' + raw;\n break;\n }\n\n return raw;\n }\n}\n","/* eslint-disable max-lines */\nimport {isNullOrUndefined} from 'common/util/HelperUtil';\nimport {ValidatorUtil} from 'common/util/ValidatorUtil';\nimport * as diff from 'fast-diff';\nimport {StringUtil} from 'common/util/StringUtil';\nimport {FormatterUtil} from 'common/util/FormatterUtil';\n\nexport class AddressUtil {\n private static readonly ZIPCODES: string[] = [\n '78500', '78600', '78800', '95240', '95530',\n '78630', '78670', '78240', '78580', '78300', '78955', '78260',\n '95150', '95250', '95480', '95320', '95550', '95370', '95740', '95220',\n '95870', '78420', '78400', '78110', '78360', '78290', '78230', '78540', '78920'\n ];\n private static readonly CITIES: string[] = [\n 'Sartrouville', 'Cormeilles-en-Parisis', 'Houilles', 'Maisons-Laffitte', 'La Frette-sur-Seine', 'Argenteuil', 'Montesson', 'Le Mesnil-le-Roi', 'Bezons',\n 'Orgeval', 'Poissy', 'Morainvilliers', 'Villennes-sur-Seine', 'Medan', 'Chambourcy', 'Aigremont', 'Les Alluets-le-Roi', 'Carrières-sous-Poissy', 'Achères',\n 'Taverny', 'Beauchamp', 'Pierrelaye', 'Saint-Leu-la-Forêt', 'Bessancourt', 'Montigny-lès-Cormeilles', 'Herblay', 'Méry-sur-Oise',\n 'Carrières-sur-Seine', 'Bezons', 'Chatou', 'Le Vésinet', 'Montesson', 'Croissy', 'Croissy-sur-Seine', 'Le Pecq', 'Vernouillet', 'Ecquevilly'\n ];\n private static readonly ZIPCODE_CITY: {[zipCode: string]: string[]} = {\n '78500': ['Sartrouville'], '78600': ['Maisons-Laffitte', 'Le Mesnil-le-Roi'], '78800': ['Houilles'], '95240': ['Cormeilles-en-Parisis'], '95530': ['La Frette-sur-Seine'],\n '78630': ['Orgeval', 'Morainvilliers'], '78670': ['Villennes-sur-Seine', 'Medan'], '78240': ['Chambourcy', 'Aigremont'], '78300': ['Poissy'],\n '78955': ['Carrières-sous-Poissy'], '78260': ['Achères'], '78540': ['Vernouillet'], '78920': ['Ecquevilly'],\n '95150': ['Taverny'], '95250': ['Beauchamp'], '95480': ['Pierrelaye'], '95320': ['Saint-Leu-la-Forêt'], '95550': ['Bessancourt'], '95370': ['Montigny-les-Cormeilles'], '95220': ['Herblay'],\n '95740': ['Frépillon'], '95540': ['Méry-sur-Oise'],\n '95870': ['Bezons'], '78420': ['Carrières-sur-Seine'], '78400': ['Chatou'], '78110': ['Le Vésinet'], '78360': ['Montesson'], '78290': ['Croissy-sur-Seine'], '78230 ': ['Le Pecq']\n };\n private static readonly REGIONS: string[] = ['île-de-france'];\n private static readonly COUNTRIES: string[] = ['France', 'FR'];\n\n public static autoCorrectCity(city: string): string {\n if (isNullOrUndefined(city) || typeof city !== 'string' || city.length === 0) {\n return city;\n }\n\n if (city.toLowerCase().startsWith('st-') || city.toLowerCase().startsWith('st ')) {\n city = 'Saint ' + city.substring(3);\n }\n\n const exactMatch: string = AddressUtil.CITIES.find((c) => c.toLowerCase() === city.toLowerCase());\n if (exactMatch !== undefined) {\n return exactMatch;\n }\n\n const partialMatch: string = AddressUtil.CITIES.find((c) => {\n const result: {add: number, remove: number} = AddressUtil.countDiff(city, c);\n\n return result.add <= 2 && result.remove <= 2;\n });\n if (partialMatch !== undefined) {\n return partialMatch;\n }\n\n const matchNoDash: string = AddressUtil.CITIES.find((c) => c.replace(/-/g, ' ').toLowerCase() === city.toLowerCase());\n if (matchNoDash !== undefined) {\n return matchNoDash;\n }\n\n const partialMatchNoDash: string = AddressUtil.CITIES.find((c) => {\n const result: {add: number, remove: number} = AddressUtil.countDiff(city, c.replace(/-/g, ' '));\n\n return result.add <= 2 && result.remove <= 2;\n });\n if (partialMatchNoDash !== undefined) {\n return partialMatchNoDash;\n }\n\n const startsWith: string = AddressUtil.CITIES.find((c) => c.toLowerCase().startsWith(city.toLowerCase()));\n if (startsWith !== undefined) {\n return startsWith;\n }\n\n const isIncluded: string = AddressUtil.CITIES.find((c) => city.toLowerCase().includes(c.toLowerCase()));\n if (isIncluded !== undefined) {\n return isIncluded;\n }\n\n return city;\n }\n\n public static autoCorrectStreet(street: string): string {\n if (isNullOrUndefined(street) || typeof street !== 'string' || street.length === 0) {\n return street;\n }\n\n street = street.replace(/(\\sav\\s)/ig, ' avenue ');\n street = street.replace(/(\\sav\\.\\s)/ig, ' avenue ');\n street = street.replace(/(\\schau\\.\\s)/ig, ' chaussée ');\n street = street.replace(/(\\strav\\.\\s)/ig, ' traverse ');\n street = street.replace(/(\\spl\\.\\s)/ig, ' place ');\n street = street.replace(/(\\spass\\.\\s)/ig, ' passage ');\n street = street.replace(/(\\ssent\\.\\s)/ig, ' sentier ');\n street = street.replace(/(\\simp\\.\\s)/ig, ' impasse ');\n street = street.replace(/(\\sall\\.\\s)/ig, ' allée ');\n street = street.replace(/(\\schem\\.\\s)/ig, ' chemin ');\n\n return street;\n }\n\n public static getCityFromZipCode(zip: string, rawAddress: string): string {\n if (zip === undefined || rawAddress === undefined) {\n return undefined;\n }\n\n const candidates: string[] = AddressUtil.ZIPCODE_CITY[zip];\n if (candidates === undefined) {\n return undefined;\n }\n\n if (candidates.length === 1) {\n return candidates[0];\n }\n\n let city: string;\n rawAddress.split(',').forEach((part) => {\n city = candidates.find((candidate) => {\n return part.trim().toLowerCase() === candidate.trim().toLowerCase();\n });\n });\n if (city !== undefined) {\n return city;\n }\n\n return candidates[0];\n }\n\n public static isZipCode(zip: string): boolean {\n if (typeof zip !== 'string') {\n return false;\n }\n\n if (AddressUtil.ZIPCODES.includes(zip)) {\n return true;\n }\n\n return ValidatorUtil.isNumber(zip) && zip.length === 5 && !zip.includes('.') && !zip.includes('-');\n }\n\n public static parse(raw: string, isFormatted: boolean = true): { street?: string, zip?: string, city?: string, country?: string } {\n const address: { street?: string, zip?: string, city?: string, country?: string } = {};\n if (!isNullOrUndefined(raw)) {\n const rawAddressParts: string[] = raw.split(',');\n if (rawAddressParts.length >= 3 && isFormatted) {\n if (AddressUtil.COUNTRIES.find((c) => raw.toLowerCase().includes(' ' + c.toLowerCase())) === undefined) {\n rawAddressParts.push('France');\n }\n\n let i: number = rawAddressParts.length - 1;\n address.country = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n if (rawAddressParts[i] !== undefined && rawAddressParts[i].trim().includes(' ')) {\n const rawParts: string[] = rawAddressParts[i].trim().split(' ');\n address.zip = rawParts[0] === undefined ? undefined : rawParts[0].trim();\n rawParts.splice(0, 1);\n address.city = rawParts.join(' ').trim();\n rawAddressParts.splice(i--, 1);\n } else if (!isNaN(Number(rawAddressParts[i].trim()))) {\n address.zip = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n if (i >= 2) {\n address.city = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n }\n } else if (!isNaN(Number(rawAddressParts[i - 1].trim()))) {\n address.city = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n address.zip = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n } else {\n address.city = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n }\n address.street = rawAddressParts.map((part) => part.trim()).join(' ').trim();\n } else {\n let rawAddress: string = raw.toLowerCase();\n AddressUtil.ZIPCODES.forEach((zipcode) => {\n if (rawAddress.includes(zipcode)) {\n address.zip = zipcode;\n try {\n rawAddress = rawAddress.replace(new RegExp(StringUtil.escapeRegExp(zipcode), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n }\n });\n AddressUtil.CITIES.forEach((city) => {\n if (rawAddress.includes(city.toLowerCase()) && (address.zip === undefined || AddressUtil.ZIPCODE_CITY[address.zip]?.find((c) => c.toLowerCase() === city.toLowerCase()))) {\n address.city = city;\n try {\n rawAddress = rawAddress.replace(new RegExp(StringUtil.escapeRegExp(city), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n }\n });\n AddressUtil.COUNTRIES.forEach((country) => {\n if (rawAddress.includes(' ' + country.toLowerCase())) {\n address.country = country;\n try {\n rawAddress = rawAddress.replace(new RegExp(StringUtil.escapeRegExp(' ' + country), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n }\n });\n\n if (address.street === undefined) {\n address.street = rawAddress.split(',').map((part) => part.trim()).join(' ').trim();\n }\n }\n\n if (address.country === undefined) {\n address.country = 'France';\n }\n }\n\n if (address.street !== undefined) {\n address.street = FormatterUtil.lower(FormatterUtil.trim(String(address.street)));\n }\n if (address.zip !== undefined) {\n address.zip = FormatterUtil.upper(FormatterUtil.trim(String(address.zip)));\n }\n if (address.city !== undefined) {\n address.city = AddressUtil.autoCorrectCity(FormatterUtil.capitalize(FormatterUtil.trim(String(address.city))));\n }\n if (address.country !== undefined) {\n address.country = FormatterUtil.capitalize(FormatterUtil.trim(String(address.country)));\n }\n\n return AddressUtil.complete(address);\n }\n\n public static complete(address: { street?: string, zip?: string, city?: string, country?: string }): { street?: string, zip?: string, city?: string, country?: string } {\n if (address.city === undefined || address.city.length === 0) {\n const city: string = AddressUtil.getCityFromZipCode(address.zip, address.street);\n if (city !== undefined) {\n address.city = city;\n }\n }\n if (typeof address.street === 'string') {\n AddressUtil.REGIONS.forEach((region) => {\n address.street = StringUtil.removeText(address.street, region).trim();\n });\n }\n if (FormatterUtil.lower(address.country) === 'fr') {\n address.country = 'France';\n }\n\n return address;\n }\n\n public static removeDuplicates(str: string): string {\n if (typeof str !== 'string') {\n return str;\n }\n\n const output: string[] = [];\n\n str.split(',').forEach((part) => {\n if (output.find((o) => o.trim().toLowerCase().includes(part.trim().toLowerCase())) === undefined) {\n output.push(part);\n }\n });\n\n return output.join(',');\n }\n\n private static countDiff(str: string, reference: string): { add: number, remove: number } {\n const result: { add: number, remove: number } = { add: 0, remove: 0 };\n\n diff(str.toLowerCase(), reference.toLowerCase()).forEach((value) => {\n switch (value[0]) {\n case -1:\n result.remove += value[1].length;\n break;\n case 1:\n result.add += value[1].length;\n break;\n }\n });\n\n return result;\n }\n}\n","import {DateTime} from 'luxon';\nimport {cloneDeep} from 'lodash';\n\nexport class DateUtil {\n private static readonly PERIOD_MAX_DATES: number = 90;\n private static readonly WEEK_DAYS: {[id: number]: string} = {1: 'lundi', 2: 'mardi', 3: 'mercredi', 4: 'jeudi', 5: 'vendredi', 6: 'samedi', 7: 'dimanche'};\n\n public static getCycleDateFromFullDate(date: string, cycle: 'daily' | 'weekly' | 'monthly'): string {\n if (cycle === 'weekly') {\n const result: string = DateTime.fromISO(date.replace(/-W([0-9])$/i, '-W0$1')).toISOWeekDate();\n if (result === null) {\n return date;\n }\n\n const parts: string[] = result.split('-');\n\n return parts.length > 2 ? parts[0] + '-' + parts[1] : parts.join('-');\n } else if (cycle === 'monthly') {\n return DateTime.fromISO(date).toFormat('yyyy-LL');\n }\n\n return DateTime.fromISO(date).toISODate();\n }\n\n public static displayWeekDay(weekDay: number): string {\n let displayWeekDay: string = '';\n if (DateUtil.WEEK_DAYS[weekDay] !== undefined) {\n displayWeekDay = DateUtil.WEEK_DAYS[weekDay];\n }\n\n return displayWeekDay;\n }\n\n public static generatePeriod(fromDate: string, toDate: string, initialValue: Record<string, any>, addDate: boolean = true, MAX_DAYS: number = DateUtil.PERIOD_MAX_DATES,\n cycle: 'daily' | 'weekly' | 'monthly' = 'daily'): {[date: string]: Record<string, any>} {\n const jump: {[str: string]: number} = {'daily': {day: 1}, 'weekly': {week: 1}, 'monthly': {month: 1}}[cycle];\n let cursor: string = DateTime.fromISO(fromDate, {setZone: true}).toISODate();\n const stop: string = DateTime.fromISO(toDate, {setZone: true}).toISODate();\n let i: number = 0;\n const data: {[date: string]: Record<string, any>} = {};\n while (cursor <= stop && i < MAX_DAYS) {\n const date: string = DateUtil.getCycleDateFromFullDate(cursor, cycle);\n data[date] = cloneDeep(initialValue);\n if (addDate) {\n data[date].date = date;\n }\n cursor = DateTime.fromISO(cursor, {setZone: true}).plus(jump).toISODate();\n i++;\n }\n\n return data;\n }\n\n public static getOpenPeriods(openings: {from: string, to: string}[], closings: {from: string, to: string}[]): {from: string, to: string}[] {\n const results: {from: string, to: string}[] = [];\n\n openings.forEach((opening) => {\n const tmpOpenings: {from: string, to: string}[] = [opening];\n while (tmpOpenings.length > 0) {\n const open: {from: string, to: string} = tmpOpenings[0];\n\n const isOpen: boolean = closings.find((closing) => closing.from <= open.from && open.to <= closing.to) === undefined;\n if (isOpen) {\n const startLater: {from: string, to: string} = closings.find((closing) => closing.from <= open.from && open.from < closing.to && closing.to < open.to);\n if (startLater !== undefined) {\n tmpOpenings.push({from: startLater.to, to: open.to});\n } else {\n const endEarlier: {from: string, to: string} = closings.find((closing) => open.from < closing.from && open.to > closing.from && open.to <= closing.to);\n if (endEarlier !== undefined) {\n tmpOpenings.push({from: open.from, to: endEarlier.from});\n } else {\n const cut: {from: string, to: string} = closings.find((closing) => open.from < closing.from && closing.to < open.to);\n if (cut !== undefined) {\n tmpOpenings.push({from: open.from, to: cut.from});\n tmpOpenings.push({from: cut.to, to: open.to});\n } else {\n results.push(open);\n }\n }\n }\n }\n\n tmpOpenings.shift();\n }\n });\n\n\n return results;\n }\n\n public static limitDate(targetDate: string, baseDate: string, limitInSeconds: number = 0): string {\n if (targetDate === undefined || baseDate === undefined) {\n return undefined;\n }\n\n const target: string = DateTime.fromISO(targetDate, {setZone: true}).toISO();\n const limit: string = DateTime.fromISO(baseDate, {setZone: true}).plus({seconds: limitInSeconds}).toISO();\n\n return target > limit ? limit : target;\n }\n\n public static localeToISO(localeDate: string): string {\n const frFormat1: RegExp = new RegExp('[0-9]{2}/[0-9]{2}/[0-9]{4}');\n const frFormat2: RegExp = new RegExp('[0-9]{2}-[0-9]{2}-[0-9]{4}');\n const isoFormat: RegExp = new RegExp('[0-9]{4}-[0-9]{2}-[0-9]{2}');\n\n let isoDate: string;\n if (frFormat1.test(localeDate)) {\n const parts: string[] = localeDate.split('/');\n isoDate = parts[2] + '-' + parts[1] + '-' + parts[0];\n } else if (frFormat2.test(localeDate)) {\n const parts: string[] = localeDate.split('-');\n isoDate = parts[2] + '-' + parts[1] + '-' + parts[0];\n } else if (isoFormat.test(localeDate)) {\n isoDate = localeDate;\n }\n\n return isoDate;\n }\n\n public static slotToTime(timeSlot: string): string {\n const timeFormat: RegExp = new RegExp('^(\\\\s)?[0-9]{2}:[0-9]{2}(\\\\s)?$');\n const slotFormat: RegExp = new RegExp('^(\\\\s)?[0-9]{2}:[0-9]{2}(\\\\s)?-(\\\\s)?[0-9]{2}:[0-9]{2}(\\\\s)?$');\n\n timeSlot = timeSlot.trim();\n\n let time: string;\n if (timeFormat.test(timeSlot)) {\n time = timeSlot.trim() + ':00';\n } else if (slotFormat.test(timeSlot)) {\n const parts: string[] = timeSlot.split('-');\n time = parts[0].trim() + ':00';\n }\n\n return time;\n }\n\n public static round(date: string, roundingInMs: number = 0): string {\n if (typeof date !== 'string') {\n return date;\n }\n\n const dateTime: DateTime = DateTime.fromISO(date, {setZone: true});\n\n return DateTime.fromMillis(Math.round((+dateTime.toMillis()) / roundingInMs) * roundingInMs).setZone(dateTime.zone).toISO();\n }\n}\n","export class ExtractorUtil {\n public static phone(raw: string, locale: 'fr'): string {\n if (typeof raw !== 'string') {\n return undefined;\n }\n\n raw = raw.trim().replace(/\\s?\\.?\\-?\\(?\\)?/g, '');\n switch (locale) {\n case 'fr': {\n const phoneFrRegex: RegExp = new RegExp('(0[6-7][0-9]{8})', 'i');\n const result: string[] = phoneFrRegex.exec(raw);\n if (result !== null && result.length > 0 && result[0] !== null) {\n return result[0];\n }\n }\n }\n\n return undefined;\n }\n}\n","export class GeneratorUtil {\n private static readonly symbolUpperCases: string[] = [\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'K', 'M', 'N', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'\n ];\n private static readonly symbolLowerCases: string[] = [\n 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'k', 'm', 'n', 'p', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'\n ];\n\n public static code(size: number): string {\n if (size === null || size === undefined) {\n size = 6;\n }\n\n let code: string = '';\n while (code.length < size) {\n code += GeneratorUtil.symbolUpperCases[GeneratorUtil.int(0, GeneratorUtil.symbolUpperCases.length - 1)];\n }\n\n return code;\n }\n\n public static int(min: number, max: number): number {\n if (min === null || min === undefined) {\n min = 0;\n }\n if (max === null || max === undefined) {\n max = Number.POSITIVE_INFINITY;\n }\n\n min = Math.ceil(min);\n max = Math.floor(max);\n\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n\n public static password(size: number): string {\n if (size === null || size === undefined) {\n size = 8;\n }\n\n let code: string = '';\n while (code.length < size) {\n switch (GeneratorUtil.int(1, 3)) {\n case 1:\n code += GeneratorUtil.symbolUpperCases[GeneratorUtil.int(0, GeneratorUtil.symbolUpperCases.length - 1)];\n break;\n case 2:\n code += GeneratorUtil.symbolLowerCases[GeneratorUtil.int(0, GeneratorUtil.symbolLowerCases.length - 1)];\n break;\n default:\n code += String(GeneratorUtil.int(0, 9));\n }\n }\n\n return code;\n }\n}\n","export class MathUtil {\n public static avg(values: number[]): number {\n if (values.length === 0) {\n return 0;\n }\n\n const total: number = values.reduce((accumulator, value) => {\n return accumulator + value;\n }, 0);\n\n return MathUtil.round(total / values.length, 2);\n }\n\n public static applyVariation(value: number, variation: number): number {\n let increase: number;\n if (value >= 0) {\n increase = 1 + (variation / 100);\n } else {\n increase = 1 - (variation / 100);\n }\n\n return value * increase;\n }\n\n public static median(values: number[]): number {\n if (values.length === 0) {\n return 0;\n }\n if (values.length === 1) {\n return values[0];\n }\n\n const valuesSorted: number[] = values.sort((a, b) => {\n return a - b;\n });\n\n if (valuesSorted.length % 2 === 0) {\n return MathUtil.avg([valuesSorted[(valuesSorted.length / 2) - 1], valuesSorted[(valuesSorted.length / 2)]]);\n }\n\n return valuesSorted[Math.floor(valuesSorted.length / 2)];\n }\n\n public static percentage(part: number, total: number): number {\n if (total === 0) {\n return 0;\n }\n\n return ((part / total) * 100);\n }\n\n public static round(value: number, decimals: number): number {\n if (decimals === 0) {\n return Math.round(value);\n }\n\n return Number(value.toFixed(decimals));\n }\n\n public static variation(originalValue: number, newValue: number): number {\n let percent = 0;\n if (newValue !== 0) {\n if (originalValue !== 0) {\n percent = (newValue - originalValue) / Math.abs(originalValue) * 100;\n } else {\n percent = ((newValue > 0) ? 1 : -1) * 100;\n }\n } else if (originalValue !== 0) {\n percent = ((originalValue > 0) ? 1 : -1) * -100;\n }\n\n return Math.floor(percent);\n }\n}\n","import {isArray, isObject} from 'lodash';\n\nexport class ObjectUtil {\n public static compact(obj: any, options: {removeEmptyString?: boolean} = {}): any {\n if (isArray(obj)) {\n const ouput: any[] = [];\n obj.forEach((value) => {\n value = ObjectUtil.compact(value, options);\n if ((isArray(value) && value.length > 0)\n || (isObject(value) && Object.keys(value).length > 0)\n || (value !== undefined && value !== null && !isArray(value) && !isObject(value))) {\n ouput.push(value);\n }\n });\n\n return ouput;\n } else if (isObject(obj)) {\n const ouput: any = {};\n Object.keys(obj).forEach((key) => {\n let value: any = (obj as any)[key];\n if (isArray(value) || isObject(value)) {\n value = ObjectUtil.compact(value, options);\n if ((isArray(value) && value.length > 0)\n || (isObject(value) && Object.keys(value).length > 0)\n || (value !== undefined && value !== null && !isArray(value) && !isObject(value))) {\n ouput[key] = value;\n }\n } else if (value !== undefined && value !== null\n && (typeof value !== 'string' || options.removeEmptyString === false || value.length > 0)) {\n ouput[key] = value;\n }\n });\n\n return ouput;\n }\n\n return (typeof obj !== 'string' || options.removeEmptyString === false || obj.length > 0) ? obj : undefined;\n }\n}\n","import {MathUtil} from 'common/util/MathUtil';\n\nexport class PriceUtil {\n private static readonly currencies: {[iso: string]: {symbol: string, position: string}} = {\n 'CAD': {symbol: '$', position: 'before'},\n 'EUR': {symbol: '€', position: 'after'},\n 'USD': {symbol: '$', position: 'before'}\n };\n\n public static applyTaxes(priceTaxExcluded: string, taxRates: number[], decimals: number = 2): string {\n let priceTaxIncluded: number = Number(priceTaxExcluded);\n taxRates.forEach((rate) => {\n priceTaxIncluded += Number(priceTaxExcluded) * rate;\n });\n\n return String(MathUtil.round(priceTaxIncluded, decimals));\n }\n\n public static calculateTaxes(priceTaxExcluded: number, taxRates: number[]): number {\n let taxes: number = 0;\n taxRates.forEach((rate) => {\n taxes += priceTaxExcluded * rate;\n });\n\n return MathUtil.round(taxes, 2);\n }\n\n public static displayWithCurrency(price: string, isoCurrency: string): string {\n if (price === undefined || price === null) {\n return price;\n }\n\n const currency: {symbol: string, position: string} = PriceUtil.currencies[isoCurrency];\n\n let newPrice: string = price + ' ' + isoCurrency;\n if (currency !== undefined) {\n switch (currency.position) {\n case 'before':\n newPrice = currency.symbol + price;\n break;\n case 'after':\n newPrice = price + currency.symbol;\n break;\n }\n }\n\n return newPrice;\n }\n\n public static format(price: string, locale: 'fr' | 'us', decimals: number = 2): string {\n if (price === undefined || price === null) {\n return price;\n }\n\n const priceNumber: number = Number(price.replace(/\\,/gi, ''));\n const standardPrice: string = priceNumber.toLocaleString('en-US', {\n style: 'decimal',\n useGrouping: true,\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals\n });\n\n switch (locale) {\n case 'fr':\n return standardPrice.replace(/\\,/gi, ' ').replace(/\\./gi, ',');\n case 'us':\n return standardPrice;\n }\n }\n\n public static round(price: string, precision: number = 0.10): string {\n const priceInCents: number = Number(price) * 100;\n const precisionInCents: number = precision * 100;\n const rest: number = priceInCents % precisionInCents;\n\n return String(MathUtil.round((priceInCents - rest) + (rest < Math.ceil(precisionInCents / 2) ? 0 : precisionInCents), 2) / 100);\n }\n}\n"],"names":["root","factory","exports","module","define","amd","global","require","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","n","getter","__esModule","d","a","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","registerBasePath","basePath","process","env","APP_HOME","Path","BASE_PATH","endsWith","data","db","storage","session","message","code","name","Error","captureStackTrace","MainException","stack","UnauthorizedException","ERROR_CODE","Env","getMode","NODE_ENV","DEVELOPMENT","PRODUCTION","TEST","APP_ID","init","sentryToken","Environment","dsn","integrations","CaptureConsole","levels","environment","maxBreadcrumbs","trace","extra","includes","console","info","category","level","debug","log","scope","setExtra","JSON","stringify","warning","error","warn","requestHandler","errorHandler","create","origins","port","this","app","backendPort","Server","DEFAULT_PORT","String","Logger","use","inflate","limit","reviver","strict","type","verify","origin","concat","credentials","listen","getSessionSecret","sessionCookieName","update","SALT","digest","_request","response","Number","status","isNaN","json","request","retries","operation","factor","minTimeout","maxTimeout","randomize","Promise","resolve","reject","attempt","then","catch","retry","token","mode","send","senderName","rawPhones","isCommercial","sendAt","phones","checkPhoneFormat","length","BadParameterException","SmsSenderService","MESSAGE_MAX_LENGTH","substring","Retry","params","accessToken","emetteur","numero","map","phone","replace","join","classe_msg","nbr_msg","Math","ceil","stop","date_envoi","DateTime","setZone","toFormat","BASE_API_URL","encodeURIComponent","p","timeout","trim","ExternalApiException","caRegex","RegExp","frRegex","usRegex","filter","test","asyncForEach","array","callback","i","dirPath","filePath","lastIndexOf","substr","move","isFile","recursive","isDir","read","readJson","jsonPath","isJson","parse","readJsonFiles","separator","files","output","fileName","push","write","rawData","encoding","writeJson","isDirectory","_error","render","templatePath","baseIncludePath","view","cloneDeep","__dirname","FileSystem","content","forEach","result","startsWith","include","includeParts","split","templateName","apiPublicKey","apiSecretKey","templateEngine","TemplateEngine","mailjet","sendDeliveryDelay","sender","recipient","base","copyright","year","Date","getUTCFullYear","text","html","sendNotification","subject","sendTrackDelivery","textContent","htmlContent","sendUserNotification","contact","post","statusCode","filesystem","full","config","merge","connect","entities","con","logging","logger","bigNumberStrings","timezone","charset","createConnection","connection","synchronize","close","fileSystem","success","image","url","outputPath","outputName","toString","writer","method","responseType","pipe","on","isNullOrUndefined","isEmail","email","isPhone","isNumber","number","escapeRegExp","str","nullable","removeMultiSpaces","removeText","StringUtil","_e","targets","replacers","target","index","slugify","raw","toLower","deburr","truncate","slice","capitalize","lowraw","FormatterUtil","lower","word","charAt","toUpperCase","ucfirst","toLocaleLowerCase","upper","toLocaleUpperCase","locale","preformatPhone","phoneNat","phoneInt","stripEmoji","regex","emojiRegex","match","exec","stripExoticCharacters","num","autoCorrectCity","city","toLowerCase","exactMatch","AddressUtil","CITIES","find","c","partialMatch","countDiff","add","remove","matchNoDash","partialMatchNoDash","isIncluded","autoCorrectStreet","street","getCityFromZipCode","zip","rawAddress","candidates","ZIPCODE_CITY","part","candidate","isZipCode","ZIPCODES","ValidatorUtil","isFormatted","address","rawAddressParts","COUNTRIES","country","splice","rawParts","zipcode","complete","REGIONS","region","removeDuplicates","reference","getCycleDateFromFullDate","date","cycle","toISOWeekDate","parts","toISODate","displayWeekDay","weekDay","DateUtil","WEEK_DAYS","generatePeriod","fromDate","toDate","initialValue","addDate","MAX_DAYS","PERIOD_MAX_DATES","jump","day","week","month","cursor","plus","getOpenPeriods","openings","closings","results","opening","tmpOpenings","closing","from","to","startLater","endEarlier","cut","shift","limitDate","targetDate","baseDate","limitInSeconds","toISO","seconds","localeToISO","localeDate","isoDate","frFormat1","frFormat2","isoFormat","slotToTime","timeSlot","time","timeFormat","slotFormat","round","roundingInMs","dateTime","toMillis","zone","size","GeneratorUtil","symbolUpperCases","int","min","max","POSITIVE_INFINITY","floor","random","password","symbolLowerCases","avg","values","total","reduce","accumulator","MathUtil","applyVariation","variation","median","valuesSorted","sort","b","percentage","decimals","toFixed","originalValue","newValue","percent","abs","compact","options","isArray","ObjectUtil","isObject","keys","removeEmptyString","applyTaxes","priceTaxExcluded","taxRates","priceTaxIncluded","rate","calculateTaxes","taxes","displayWithCurrency","price","isoCurrency","currency","PriceUtil","currencies","newPrice","position","symbol","format","standardPrice","toLocaleString","style","useGrouping","minimumFractionDigits","maximumFractionDigits","precision","priceInCents","precisionInCents","rest"],"sourceRoot":""}
1
+ {"version":3,"file":"common-api.node.min.js","mappings":"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","sources":["webpack://SmilePlayerCommon/webpack/universalModuleDefinition","webpack://SmilePlayerCommon/external commonjs \"emoji-regex/RGI_Emoji.js\"","webpack://SmilePlayerCommon/webpack/bootstrap","webpack://SmilePlayerCommon/webpack/runtime/compat get default export","webpack://SmilePlayerCommon/webpack/runtime/define property getters","webpack://SmilePlayerCommon/webpack/runtime/hasOwnProperty shorthand","webpack://SmilePlayerCommon/webpack/runtime/make namespace object","webpack://SmilePlayerCommon/./src/constant/Path.ts","webpack://SmilePlayerCommon/./src/exception/MainException.ts","webpack://SmilePlayerCommon/./src/exception/BadParameterException.ts","webpack://SmilePlayerCommon/./src/exception/BadRequestException.ts","webpack://SmilePlayerCommon/./src/exception/ConflictException.ts","webpack://SmilePlayerCommon/./src/exception/DuplicateException.ts","webpack://SmilePlayerCommon/./src/exception/ExternalApiException.ts","webpack://SmilePlayerCommon/./src/exception/InternalException.ts","webpack://SmilePlayerCommon/./src/exception/NotImplementedException.ts","webpack://SmilePlayerCommon/./src/exception/ObjectNotFoundException.ts","webpack://SmilePlayerCommon/./src/exception/PageNotFoundException.ts","webpack://SmilePlayerCommon/./src/exception/UnauthorizedException.ts","webpack://SmilePlayerCommon/external 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/external commonjs \"@sentry/node\"","webpack://SmilePlayerCommon/external commonjs \"@sentry/integrations\"","webpack://SmilePlayerCommon/./src/tool/Env.ts","webpack://SmilePlayerCommon/./src/tool/Environment.ts","webpack://SmilePlayerCommon/./src/tool/Logger.ts","webpack://SmilePlayerCommon/./src/http/Server.ts","webpack://SmilePlayerCommon/./src/http/HandlerController.ts","webpack://SmilePlayerCommon/external commonjs \"axios\"","webpack://SmilePlayerCommon/external commonjs \"luxon\"","webpack://SmilePlayerCommon/external node-commonjs \"querystring\"","webpack://SmilePlayerCommon/external commonjs \"retry\"","webpack://SmilePlayerCommon/./src/tool/Retry.ts","webpack://SmilePlayerCommon/external commonjs \"urlencode\"","webpack://SmilePlayerCommon/./src/util/ValidatorUtil.ts","webpack://SmilePlayerCommon/./src/service/sender/SmsSenderService.ts","webpack://SmilePlayerCommon/external node-commonjs \"path\"","webpack://SmilePlayerCommon/external commonjs \"mustache\"","webpack://SmilePlayerCommon/external commonjs \"lodash\"","webpack://SmilePlayerCommon/external node-commonjs \"fs\"","webpack://SmilePlayerCommon/./src/util/PromiseUtil.ts","webpack://SmilePlayerCommon/./src/tool/FileSystem.ts","webpack://SmilePlayerCommon/./src/templating/TemplateEngine.ts","webpack://SmilePlayerCommon/external commonjs \"node-mailjet\"","webpack://SmilePlayerCommon/./src/service/sender/EmailSenderService.ts","webpack://SmilePlayerCommon/./src/tool/Configuration.ts","webpack://SmilePlayerCommon/external commonjs \"typeorm\"","webpack://SmilePlayerCommon/./src/tool/Database.ts","webpack://SmilePlayerCommon/external commonjs \"prettyjson\"","webpack://SmilePlayerCommon/./src/tool/Displayer.ts","webpack://SmilePlayerCommon/./src/tool/Downloader.ts","webpack://SmilePlayerCommon/./src/util/HelperUtil.ts","webpack://SmilePlayerCommon/external commonjs \"fast-diff\"","webpack://SmilePlayerCommon/./src/util/StringUtil.ts","webpack://SmilePlayerCommon/./src/util/FormatterUtil.ts","webpack://SmilePlayerCommon/./src/util/AddressUtil.ts","webpack://SmilePlayerCommon/./src/util/DateUtil.ts","webpack://SmilePlayerCommon/./src/util/ExtractorUtil.ts","webpack://SmilePlayerCommon/./src/util/GeneratorUtil.ts","webpack://SmilePlayerCommon/./src/util/MathUtil.ts","webpack://SmilePlayerCommon/./src/util/ObjectUtil.ts","webpack://SmilePlayerCommon/./src/util/PriceUtil.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SmilePlayerCommon\"] = factory();\n\telse\n\t\troot[\"SmilePlayerCommon\"] = factory();\n})(global, function() {\nreturn ","module.exports = require(\"emoji-regex/RGI_Emoji.js\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export class Path {\n private static BASE_PATH: string = './';\n\n public static registerBasePath(basePath: string): void {\n if (process.env.APP_HOME !== undefined) {\n Path.BASE_PATH = process.env.APP_HOME + '/';\n } else {\n Path.BASE_PATH = basePath + (basePath.endsWith('/') ? '' : '/');\n }\n }\n\n public static data(): string {\n return Path.BASE_PATH + 'data/';\n }\n\n public static db(): string {\n return Path.storage() + 'db/';\n }\n\n public static root(): string {\n return Path.BASE_PATH;\n }\n\n public static session(): string {\n return Path.storage() + 'session/';\n }\n\n public static storage(): string {\n return Path.BASE_PATH + 'storage/';\n }\n}\n","import {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class MainException extends Error implements ExceptionContract {\n public code: number;\n public data: {[key: string]: any};\n\n public constructor(message: string, code?: number, data?: {[key: string]: any}) {\n super(message);\n this.code = code;\n this.data = data;\n this.name = 'MainException';\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, MainException);\n } else {\n this.stack = (new Error(message)).stack;\n }\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class BadParameterException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 400, data);\n this.name = 'BadParameterException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class BadRequestException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 400, data);\n this.name = 'BadRequestException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class ConflictException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 409, data);\n this.name = 'ConflictException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class DuplicateException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 409, data);\n this.name = 'DuplicateException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class ExternalApiException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 502, data);\n this.name = 'ExternalApiException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class InternalException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 500, data);\n this.name = 'InternalException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class NotImplementedException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 501, data);\n this.name = 'NotImplementedException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class ObjectNotFoundException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 404, data);\n this.name = 'ObjectNotFoundException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class PageNotFoundException extends MainException implements ExceptionContract {\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, 404, data);\n this.name = 'PageNotFoundException';\n }\n}\n","import {MainException} from 'common/exception/MainException';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\n\nexport class UnauthorizedException extends MainException implements ExceptionContract {\n public static readonly ERROR_CODE: number = 401;\n\n public constructor(message: string, data?: {[key: string]: any}) {\n super(message, UnauthorizedException.ERROR_CODE, data);\n this.name = 'UnauthorizedException';\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"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\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@sentry/node\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@sentry/integrations\");","/* eslint-disable no-shadow */\nexport enum Env {\n PRODUCTION = 'prod',\n DEVELOPMENT = 'dev',\n TEST = 'test'\n}\n","import {Env} from 'common/tool/Env';\n\nexport class Environment {\n public static getMode(): Env {\n switch (process.env.NODE_ENV) {\n case 'dev':\n case 'development':\n return Env.DEVELOPMENT;\n case 'prod':\n case 'production':\n return Env.PRODUCTION;\n case 'test':\n return Env.TEST;\n }\n\n return process.env.APP_ID === undefined ? Env.DEVELOPMENT : Env.PRODUCTION;\n }\n}\n","import * as Sentry from '@sentry/node';\nimport { CaptureConsole } from '@sentry/integrations';\nimport {Environment} from 'common/tool/Environment';\nimport {ExceptionContract} from 'common/exception/ExceptionContract';\nimport {UnauthorizedException} from 'common/exception/UnauthorizedException';\nimport {Env} from 'common/tool/Env';\n\nexport class Logger {\n public static init(sentryToken: string): void {\n if (Environment.getMode() === Env.PRODUCTION) {\n Sentry.init({\n dsn: sentryToken,\n integrations: [\n new CaptureConsole({\n levels: ['error', 'warn', 'log']\n })\n ],\n environment: Environment.getMode(),\n maxBreadcrumbs: 50\n });\n }\n }\n\n public static trace(message: string, extra?: any): void {\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.info(message); // eslint-disable-line no-console\n } else {\n console.info(message, extra); // eslint-disable-line no-console\n }\n }\n Sentry.addBreadcrumb({\n category: 'info',\n message: message,\n data: extra,\n level: Sentry.Severity.Info\n });\n }\n\n public static debug(message: string, extra?: any): void {\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.log(message); // eslint-disable-line no-console\n } else {\n console.log(message, extra); // eslint-disable-line no-console\n }\n }\n Sentry.addBreadcrumb({\n category: 'debug',\n message: message,\n data: extra,\n level: Sentry.Severity.Debug\n });\n }\n\n public static info(message: string, extra?: any): void {\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.info(message); // eslint-disable-line no-console\n } else {\n console.info(message, extra); // eslint-disable-line no-console\n }\n }\n Sentry.withScope(scope => {\n if (extra !== undefined) {\n scope.setExtra('extra', JSON.stringify(extra));\n }\n Sentry.captureMessage(message);\n });\n }\n\n public static warning(error: ExceptionContract, extra?: any): void {\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.warn(error); // eslint-disable-line no-console\n } else {\n console.warn(error, extra); // eslint-disable-line no-console\n }\n }\n Sentry.withScope(scope => {\n if (extra !== undefined) {\n scope.setExtra('extra', JSON.stringify(extra));\n }\n if (error.data !== undefined) {\n scope.setExtra('data', JSON.stringify(error.data));\n }\n Sentry.captureException(error);\n });\n }\n\n public static error(error: ExceptionContract, extra?: any): void {\n if ([UnauthorizedException.ERROR_CODE].includes(error.code)) {\n return;\n }\n if ([Env.DEVELOPMENT, Env.TEST].includes(Environment.getMode())) {\n if (extra === undefined) {\n console.error(error); // eslint-disable-line no-console\n } else {\n console.error(error, extra); // eslint-disable-line no-console\n }\n }\n Sentry.withScope(scope => {\n if (extra !== undefined) {\n scope.setExtra('extra', JSON.stringify(extra));\n }\n if (error.data !== undefined) {\n scope.setExtra('data', JSON.stringify(error.data));\n }\n Sentry.captureException(error);\n });\n }\n\n public static requestHandler(): any {\n return Sentry.Handlers.requestHandler();\n }\n\n public static errorHandler(): any {\n return Sentry.Handlers.errorHandler();\n }\n}\n","import * as crypto from 'crypto';\nimport * as express from 'express';\nimport * as cors from 'cors';\nimport * as compression from 'compression';\nimport * as helmet from 'helmet';\nimport * as timeout from 'connect-timeout';\nimport {ServerContract} from 'common/http/ServerContract';\nimport {Logger} from 'common/tool/Logger';\n\nexport class Server implements ServerContract {\n public static readonly DEFAULT_PORT: number = 8080;\n public static readonly SALT: string = '03561b4a0fe7f125025';\n private app: express.Express;\n\n public async create(origins: string[], port?: number): Promise<express.Express> {\n if (this.app === undefined) {\n const backendPort: number = port || Server.DEFAULT_PORT;\n const backendLocalUrl: string = 'http://localhost:' + String(backendPort);\n Logger.debug('start server on ' + backendLocalUrl);\n this.app = express();\n this.app.use(compression({level: -1}));\n this.app.use(timeout('300s'));\n this.app.use(express.json({\n inflate: true,\n limit: '100kb',\n reviver: null,\n strict: true,\n type: 'application/json',\n verify: undefined\n }));\n this.app.use(cors({\n origin: [backendLocalUrl].concat(origins),\n credentials: true\n }));\n this.app.use(helmet());\n this.app.use(express.json());\n this.app.listen(backendPort, () => {\n Logger.debug('server is running on ' + backendLocalUrl);\n });\n }\n\n return this.app;\n }\n\n public getSessionSecret(sessionCookieName: string): string {\n return crypto.createHash('sha1').update(sessionCookieName + Server.SALT).digest('hex');\n }\n}\n","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","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"axios\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"luxon\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"querystring\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"retry\");","import * as retry from 'retry';\nimport {Logger} from 'common/tool/Logger';\n\nexport class Retry {\n public static async request(process: () => Promise<void>, retries: number = 2): Promise<any> {\n const operation = retry.operation({\n retries: retries,\n factor: 1,\n minTimeout: 0,\n maxTimeout: 0,\n randomize: false\n });\n\n return new Promise<any>((resolve, reject) => {\n operation.attempt(() => {\n process().then(resolve).catch((error) => {\n if (!operation.retry(error)) {\n Logger.error(error);\n reject(error);\n }\n });\n });\n });\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"urlencode\");","export class ValidatorUtil {\n public static isEmail(email: string): boolean {\n if (typeof email !== 'string') {\n return false;\n }\n\n return (new RegExp('^[a-zA-Z0-9\\\\.!#$%&*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\\\.[a-zA-Z0-9-]+)*$', 'i')).test(email);\n }\n\n public static isPhone(phone: string): boolean {\n if (typeof phone !== 'string') {\n return false;\n }\n\n return (new RegExp('^([\\+\\\\s0-9]{10,}(#[0-9]+)?)$')).test(phone);\n }\n\n public static isIntMobilePhone(phone: string): boolean {\n const caRegex: RegExp = new RegExp('^\\\\+1[0-9]{10}$', 'i');\n const frRegex: RegExp = new RegExp('^\\\\+33(6|7)[0-9]{8}$', 'i');\n const usRegex: RegExp = new RegExp('^\\\\+1[0-9]{10}$', 'i');\n\n return caRegex.test(phone) || frRegex.test(phone) || usRegex.test(phone);\n }\n\n public static isNumber(number: string | number): boolean {\n if (typeof number === 'number') {\n return true;\n }\n\n if (typeof number !== 'string') {\n return false;\n }\n\n return (new RegExp('^\\-?[0-9]+\\\\.?[0-9]*$')).test(number);\n }\n}\n","import axios from 'axios';\nimport {DateTime} from 'luxon';\nimport * as querystring from 'querystring';\nimport {SmsSenderServiceContract} from 'common/service/sender/SmsSenderServiceContract';\nimport {ExternalApiException} from 'common/exception/ExternalApiException';\nimport {Retry} from 'common/tool/Retry';\nimport {Logger} from 'common/tool/Logger';\nimport {Environment} from 'common/tool/Environment';\nimport * as urlencode from 'urlencode';\nimport {BadParameterException} from 'common/exception/BadParameterException';\nimport {Env} from 'common/tool/Env';\nimport {ValidatorUtil} from 'common/util/ValidatorUtil';\n\nexport class SmsSenderService implements SmsSenderServiceContract {\n public static readonly BASE_API_URL: string = 'https://api.smsmode.com/http/1.6/';\n public static readonly MESSAGE_MAX_LENGTH: number = 150;\n private readonly token: string;\n private readonly mode: Environment;\n\n public constructor(token: string, mode: Environment) {\n this.token = token;\n this.mode = mode;\n }\n\n public async send(senderName: string, message: string, rawPhones: string[], isCommercial: boolean = true, sendAt?: string): Promise<void> {\n let phones: string[] = this.checkPhoneFormat(rawPhones);\n if (phones.length === 0) {\n Logger.warning(new BadParameterException('no valid phone', {phones: rawPhones}));\n\n return Promise.resolve();\n }\n\n if (phones.length > 1) {\n if (message.length > SmsSenderService.MESSAGE_MAX_LENGTH * 2) {\n message = message.substring(0, SmsSenderService.MESSAGE_MAX_LENGTH * 2);\n } else if (message.length > SmsSenderService.MESSAGE_MAX_LENGTH && message.length <= SmsSenderService.MESSAGE_MAX_LENGTH * 1.33) {\n message = message.substring(0, SmsSenderService.MESSAGE_MAX_LENGTH);\n }\n }\n\n await Retry.request(async () => {\n const params: {[param: string]: any} = {\n accessToken: this.token,\n emetteur: senderName,\n message: urlencode(message, 'ISO-8859-15'),\n numero: phones.map((phone) => phone.replace('+', '')).join(','),\n classe_msg: 2,\n nbr_msg: Math.ceil(message.length / SmsSenderService.MESSAGE_MAX_LENGTH)\n };\n\n if (isCommercial) {\n params.stop = 1;\n }\n\n if (sendAt !== undefined) {\n params.date_envoi = DateTime.fromISO(sendAt, { setZone: true }).toFormat('ddMMyyyy-HH:mm');\n }\n\n if (this.mode === Env.TEST) {\n Logger.info('Simulation Mode: SMS has been sent', {params: params});\n } else {\n if (this.mode === Env.DEVELOPMENT) {\n phones = ['+15145705214'];\n }\n\n const response: {data: string} = await axios.post(SmsSenderService.BASE_API_URL + 'sendSMS.do',\n querystring.stringify(params, '&', '=', {encodeURIComponent: (p) => p}), {\n timeout: 30000\n });\n\n if (response.data.length > 0 && response.data.trim().substring(0, 1) !== '0') {\n throw new ExternalApiException('Error: ' + response.data, params);\n }\n }\n }, 1);\n }\n\n private checkPhoneFormat(phones: string[]): string[] {\n return phones.filter((phone) => ValidatorUtil.isIntMobilePhone(phone));\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"path\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"mustache\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"lodash\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"fs\");","export const asyncForEach: (array: any[], callback: (item: any) => Promise<void>) => Promise<void> = async (array, callback) => {\n for (let i: number = 0; i < array.length; i++) { // eslint-disable-line\n await callback(array[i]);\n }\n};\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {BadParameterException} from 'common/exception/BadParameterException';\nimport {asyncForEach} from 'common/util/PromiseUtil';\n\nexport class FileSystem implements FileSystemContract {\n public dirPath(filePath: string): string {\n const i: number = path.resolve(filePath).lastIndexOf(path.sep);\n if (i < 0) {\n return filePath;\n }\n\n return path.resolve(path.resolve(filePath).substr(0, i + 1)) + path.sep;\n }\n\n public async move(filePath: string, dirPath: string): Promise<void> {\n if (!this.isFile(filePath)) {\n throw new BadParameterException(String(filePath) + ' does not exist or is not a file');\n }\n\n fs.mkdirSync(dirPath, {recursive: true});\n if (!this.isDir(dirPath)) {\n throw new BadParameterException(String(dirPath) + ' does not exist or is not a directory');\n }\n\n return fs.renameSync(filePath, dirPath + path.basename(filePath));\n }\n\n public async read(filePath: string): Promise<string> {\n if (!this.isFile(filePath)) {\n throw new BadParameterException(String(filePath) + ' does not exist or is not a file');\n }\n\n return fs.readFileSync(filePath, 'utf8');\n }\n\n public async readJson(jsonPath: string): Promise<any> {\n const data: any = await this.read(jsonPath);\n if (!this.isJson(data)) {\n throw new BadParameterException(String(jsonPath) + ' does not contain JSON');\n }\n\n return JSON.parse(data);\n }\n\n public async readJsonFiles(dirPath: string): Promise<{name: string, data: any}[]> {\n if (!this.isDir(dirPath)) {\n throw new BadParameterException(String(dirPath) + ' does not exist or is not a directory');\n }\n\n const separator: string = dirPath.endsWith('/') ? '' : '/';\n const files: string[] = fs.readdirSync(dirPath);\n\n const output: {name: string, data: any}[] = [];\n await asyncForEach(files, async (fileName: string) => {\n if (this.isFile(dirPath + separator + fileName) && fileName.endsWith('.json')) {\n output.push({\n name: fileName,\n data: await this.readJson(dirPath + separator + fileName)\n });\n }\n });\n\n return output;\n }\n\n public async write(filePath: string, rawData: any): Promise<void> {\n let data: string = '';\n if (typeof rawData === 'string') {\n data = String(rawData);\n } else if (typeof rawData === 'number') {\n data = String(rawData);\n } else {\n data = JSON.stringify(rawData);\n }\n\n fs.mkdirSync(this.dirPath(filePath), {recursive: true});\n\n fs.writeFileSync(filePath, data, {encoding: 'utf8'});\n\n return Promise.resolve();\n }\n\n public async writeJson(jsonPath: string, data: any): Promise<void> {\n return this.write(jsonPath, JSON.stringify(data));\n }\n\n private isDir(dirPath: string): boolean {\n return fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();\n }\n\n private isFile(filePath: string): boolean {\n return fs.existsSync(filePath) && fs.statSync(filePath).isFile();\n }\n\n private isJson(data: any): boolean {\n try {\n JSON.parse(data);\n\n return true;\n } catch (_error) {\n return false;\n }\n }\n}\n","import * as path from 'path';\nimport {parse, render} from 'mustache';\nimport {cloneDeep} from 'lodash';\nimport {TemplateEngineContract} from 'common/templating/TemplateEngineContract';\nimport {FileSystem} from 'common/tool/FileSystem';\nimport {asyncForEach} from 'common/util/PromiseUtil';\n\nexport class TemplateEngine implements TemplateEngineContract {\n public async render(templatePath: string, data: {[key: string]: any}, baseIncludePath?: string): Promise<string> {\n if (!templatePath.endsWith('.template')) {\n templatePath += '.template';\n }\n const view: {[key: string]: any} = cloneDeep(data);\n const basePath: string = path.isAbsolute(templatePath) ? '' : __dirname + path.sep;\n const fileSystem = new FileSystem();\n const content: string = await fileSystem.read(basePath + templatePath);\n\n const includes: string[] = [];\n const results: any[][] = parse(content);\n results.forEach((result) => {\n if (result.length >= 4 && result[0] === '&' && result[1].startsWith('include:')) {\n includes.push(result[1]);\n }\n });\n\n if (includes.length > 0) {\n if (baseIncludePath === undefined) {\n baseIncludePath = path.dirname(basePath + templatePath) + path.sep;\n } else if (!path.isAbsolute(baseIncludePath)) {\n baseIncludePath = basePath + baseIncludePath;\n }\n await asyncForEach(includes, async (include) => {\n const includeParts: string[] = include.split(':');\n if (includeParts.length === 3 && view[include] !== undefined) {\n const templateName: string = includeParts[2];\n if (baseIncludePath.includes('/html')) {\n Object.keys(view[include]).forEach((key) => {\n view[include][key] = view[include][key].replace(/(?:\\r\\n|\\r|\\n)/g, '<br>');\n });\n }\n view[include] = await this.render(path.resolve(baseIncludePath, templateName), view[include]);\n }\n });\n }\n\n return render(content, view);\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"node-mailjet\");","import {EmailSenderServiceContract} from 'common/service/sender/EmailSenderServiceContract';\nimport {TemplateEngine} from 'common/templating/TemplateEngine';\nimport {TemplateEngineContract} from 'common/templating/TemplateEngineContract';\nimport {ViewEmailTrackDeliveryContract} from 'common/templating/view/email/ViewEmailTrackDeliveryContract';\nimport {RecipientContract} from 'common/service/sender/RecipientContract';\nimport {SenderContract} from 'common/service/sender/SenderContract';\nimport * as Mailjet from 'node-mailjet';\nimport {MainException} from 'common/exception/MainException';\nimport {Retry} from 'common/tool/Retry';\nimport {Environment} from 'common/tool/Environment';\nimport {Env} from 'common/tool/Env';\nimport {Logger} from 'common/tool/Logger';\nimport {ViewEmailUserNotificationContract} from 'common/templating/view/email/ViewEmailUserNotificationContract';\n\nexport class EmailSenderService implements EmailSenderServiceContract {\n private readonly templateEngine: TemplateEngineContract;\n private readonly mailjet: any;\n private readonly mode: Environment;\n\n public constructor(apiPublicKey: string, apiSecretKey: string, mode: Environment) {\n this.templateEngine = new TemplateEngine();\n this.mailjet = Mailjet.connect(apiPublicKey, apiSecretKey);\n this.mode = mode;\n }\n\n public async sendDeliveryDelay(sender: SenderContract, recipient: RecipientContract, data: ViewEmailTrackDeliveryContract): Promise<void> {\n return await Retry.request(async () => {\n if (data.base.copyright === undefined) {\n data.base.copyright = {\n year: String((new Date()).getUTCFullYear())\n };\n }\n const text: string = await this.templateEngine.render('data/email/template/deliveryDelay', data, 'data/email/element/text');\n const html: string = await this.templateEngine.render('data/email/template/deliveryDelay', data, 'data/email/element/html');\n\n return await this.sendNotification(sender, recipient, data.base.subject, text, html);\n }, 1);\n }\n\n public async sendTrackDelivery(sender: SenderContract, recipient: RecipientContract, data: ViewEmailTrackDeliveryContract): Promise<void> {\n return await Retry.request(async () => {\n const textContent: string = await this.templateEngine.render('data/email/template/trackDelivery', data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: data.base});\n const htmlContent: string = await this.templateEngine.render('data/email/template/trackDelivery', data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: data.base});\n\n return await this.sendNotification(sender, recipient, data.base.subject, text, html);\n }, 1);\n }\n\n public async sendUserNotification(sender: SenderContract, recipient: RecipientContract, data: ViewEmailUserNotificationContract): Promise<void> {\n return await Retry.request(async () => {\n const textContent: string = await this.templateEngine.render('data/email/template/userNotification', data, 'data/email/element/text');\n const text: string = await this.templateEngine.render('data/email/element/text/index', {content: textContent, base: data.base});\n const htmlContent: string = await this.templateEngine.render('data/email/template/userNotification', data, 'data/email/element/html');\n const html: string = await this.templateEngine.render('data/email/element/html/index', {content: htmlContent, base: data.base});\n\n return await this.sendNotification(sender, recipient, data.base.subject, text, html);\n }, 1);\n }\n\n // private async sendCampaign(sender: SenderContract, recipients: RecipientContract[], subject: string, text: string, html: string): Promise<void> {\n // try {\n // await this.mailjet.post('send').request({\n // FromEmail: sender.contact,\n // FromName: sender.name,\n // Subject: subject,\n // 'Text-part': text,\n // 'Html-part': html,\n // Recipients: [\n // recipients.map((recipient) => {\n // return { Name: recipient.name, Email: recipient.contact };\n // }),\n // ],\n // });\n //\n // return Promise.resolve();\n // } catch (error) {\n // return Promise.reject(new MainException(error.message, Number(error.statusCode)));\n // }\n // }\n\n private async sendNotification(sender: SenderContract, recipient: RecipientContract, subject: string, text: string, html: string): Promise<void> {\n try {\n if (this.mode === Env.TEST) {\n Logger.info('Simulation Mode: Email has been sent', {sender: sender, recipient: recipient});\n } else {\n if (this.mode === Env.DEVELOPMENT) {\n recipient.contact = 'developer@onylab.com';\n }\n\n await this.mailjet.post('send', {'version': 'v3.1'})\n .request({\n 'Messages': [\n {\n 'From': {\n 'Name': sender.name,\n 'Email': sender.contact\n },\n 'To': [{\n 'Name': recipient.name,\n 'Email': recipient.contact\n }],\n 'Subject': subject,\n 'TextPart': text,\n 'HTMLPart': html\n }\n ]\n });\n }\n } catch (error) {\n throw new MainException(error.message, Number(error.statusCode));\n }\n }\n}\n","import {ConfigurationContract} from 'common/tool/ConfigurationContract';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {FileSystem} from 'common/tool/FileSystem';\nimport {Env} from 'common/tool/Env';\nimport {merge} from 'lodash';\nimport {Environment} from 'common/tool/Environment';\n\nexport class Configuration implements ConfigurationContract {\n private readonly filesystem: FileSystemContract;\n private root: string;\n private environment: Env;\n private config: any;\n\n public constructor(root: string, environment?: Env) {\n this.filesystem = new FileSystem();\n this.root = root;\n this.environment = environment === undefined ? Environment.getMode() : environment;\n }\n\n public async full(): Promise<any> {\n await this.init();\n\n return this.config;\n }\n\n private async init(): Promise<void> {\n if (this.config === undefined) {\n if (this.root === undefined) {\n this.config = {};\n } else {\n this.config = await this.filesystem.readJson(this.root + 'data/config.json');\n if ([Env.DEVELOPMENT, Env.TEST].includes(this.environment)) {\n try {\n this.config = merge(this.config, await this.filesystem.readJson(this.root + 'data/config_' + String(this.environment) + '.json'));\n } catch (_e) {\n // nothing\n }\n }\n\n }\n }\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"typeorm\");","import {Connection, createConnection} from 'typeorm';\nimport {DatabaseContract} from 'common/tool/DatabaseContract';\nimport {FileSystem} from 'common/tool/FileSystem';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {BadParameterException} from 'common/exception/BadParameterException';\nimport {Logger} from 'common/tool/Logger';\n\n// TypeORM documation, types: https://github.com/typeorm/typeorm/blob/master/src/driver/types/ColumnTypes.ts\nexport class Database implements DatabaseContract {\n private root: string;\n private db: any;\n private connection: Connection;\n\n public constructor(root: string) {\n this.root = root;\n }\n\n public async connect(name: string, entities: any[]): Promise<void> {\n if (this.db === undefined) {\n await this.init();\n }\n\n const con: any = this.db[name];\n if (con !== undefined) {\n con.entities = entities;\n con.logging = ['error'];\n con.logger = true;\n con.bigNumberStrings = false;\n if (con.timezone === undefined) {\n con.timezone = 'Z';\n }\n if (con.charset === undefined) {\n con.charset = 'UTF8_GENERAL_CI';\n }\n this.connection = await createConnection(con);\n } else {\n Logger.error(new BadParameterException('bad connection name'));\n }\n }\n\n public async synchronize(): Promise<void> {\n if (this.connection !== undefined) {\n await this.connection.synchronize();\n }\n }\n\n public async close(): Promise<void> {\n return this.connection.close();\n }\n\n private async init(): Promise<void> {\n if (this.root === undefined) {\n this.db = {};\n } else {\n const fileSystem: FileSystemContract = new FileSystem();\n this.db = await fileSystem.readJson(this.root + 'data/db.json');\n }\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"prettyjson\");","import * as prettyjson from 'prettyjson';\nimport {DisplayerContract} from 'common/tool/DisplayerContract';\nimport {Logger} from 'common/tool/Logger';\n\nexport class Displayer implements DisplayerContract {\n public error(error: Error): void {\n Logger.error(error);\n }\n\n public info(message: string): void {\n Logger.trace(message);\n }\n\n public json(json: any): void {\n Logger.trace(prettyjson.render(json, {}));\n }\n\n public success(message: string): void {\n Logger.trace(message);\n }\n}\n","import {DownloaderContract} from 'common/tool/DownloaderContract';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport * as crypto from 'crypto';\nimport axios from 'axios';\nimport {FileSystemContract} from 'common/tool/FileSystemContract';\nimport {FileSystem} from 'common/tool/FileSystem';\n\nexport class Downloader implements DownloaderContract {\n private readonly fileSystem: FileSystemContract;\n\n public constructor() {\n this.fileSystem = new FileSystem();\n }\n\n public async image(url: string, outputPath: string, outputName?: string): Promise<string> {\n if (outputName === undefined) {\n outputName = crypto.randomBytes(20).toString('hex') + path.extname(url);\n }\n await this.fileSystem.write(outputPath + path.sep + outputName, '');\n\n const output: string = path.resolve(outputPath + path.sep + outputName);\n const writer: any = fs.createWriteStream(output);\n\n const response: any = await axios({\n url,\n method: 'GET',\n responseType: 'stream'\n });\n\n response.data.pipe(writer);\n\n return new Promise((resolve, reject) => {\n writer.on('finish', () => resolve(output));\n writer.on('error', reject);\n });\n }\n}\n","export const isNullOrUndefined: (obj: unknown) => boolean = (obj) => {\n return obj === undefined || obj === null;\n};\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"fast-diff\");","import {deburr, toLower, trim} from 'lodash';\nimport {isNullOrUndefined} from 'common/util/HelperUtil';\n\nexport class StringUtil {\n // alternative https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex\n public static escapeRegExp(str: string): string {\n if (typeof str !== 'string') {\n return str;\n }\n\n return str.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&'); // and .replace(/-/g, '\\\\x2d');\n }\n\n public static nullable(str: string): string {\n if (isNullOrUndefined(str)) {\n return null;\n }\n\n if (typeof str === 'string' && str.length === 0) {\n return null;\n }\n\n return str;\n }\n\n public static removeMultiSpaces(data: string) {\n if (typeof data !== 'string') {\n return data;\n }\n\n return data.replace(/\\s{2,}/g, ' ');\n }\n\n public static removeText(data: string, text: string) {\n if (typeof data !== 'string' || typeof text !== 'string' || text.length === 0) {\n return data;\n }\n\n try {\n data = data.replace(new RegExp(StringUtil.escapeRegExp(text), 'ig'), '');\n data = data.replace(new RegExp(StringUtil.escapeRegExp(text).replace(new RegExp('\\\\s', 'g'), '-'), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n\n return data;\n }\n\n public static replace(str: string, targets: string[], replacers: string[]): string {\n if (typeof str !== 'string') {\n return str;\n }\n\n if (targets.length !== replacers.length) {\n return str;\n }\n\n let output: string = str;\n targets.forEach((target, index) => {\n output = output.replace(new RegExp(StringUtil.escapeRegExp(target), 'ig'), replacers[index]);\n });\n\n return output;\n }\n\n public static slugify(raw: string, separator?: string): string {\n if (raw === undefined) {\n return '';\n }\n\n return toLower(trim(deburr(raw)).replace(/[^0-9a-z\\-\\_]/gi, separator));\n }\n\n public static truncate(str: string, limit: number): string {\n if (isNullOrUndefined(str) || str.length <= limit) {\n return str;\n }\n\n if (limit <= 3) {\n return '';\n }\n\n return str.slice(0, limit - 3) + '...';\n }\n}\n","import {StringUtil} from 'common/util/StringUtil';\n\nexport class FormatterUtil {\n public static trim(raw: string): string {\n return typeof raw === 'string' ? raw.trim() : raw;\n }\n\n public static capitalize(raw: string): string {\n const lowraw: string = FormatterUtil.lower(raw);\n\n return typeof lowraw === 'string' ? lowraw.split(' ').map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join (' ') : raw;\n }\n\n public static ucfirst(raw: string): string {\n const lowraw: string = FormatterUtil.lower(raw);\n\n return typeof lowraw === 'string' ? lowraw.charAt(0).toUpperCase() + lowraw.slice(1) : raw;\n }\n\n public static lower(raw: string): string {\n return typeof raw === 'string' ? raw.toLocaleLowerCase() : raw;\n }\n\n public static upper(raw: string): string {\n return typeof raw === 'string' ? raw.toLocaleUpperCase() : raw;\n }\n\n public static phone(raw: string, locale: string, output: 'nat' | 'int' = 'nat'): string {\n if (typeof raw === 'string') {\n raw = FormatterUtil.preformatPhone(raw, locale);\n switch (output) {\n case 'nat': // national\n return FormatterUtil.phoneNat(raw, locale);\n break;\n case 'int': // international\n return FormatterUtil.phoneInt(raw, locale);\n break;\n }\n }\n\n return raw;\n }\n\n public static stripEmoji(raw: string): string {\n let output: string = raw;\n\n if (typeof output === 'string') {\n const emojiRegex = require('emoji-regex/RGI_Emoji.js'); /* eslint-disable-line @typescript-eslint/no-var-requires */\n const regex: RegExp = emojiRegex();\n\n let match;\n while ((match = regex.exec(output)) !== null) {\n try {\n output = output.replace(new RegExp('\\\\s' + StringUtil.escapeRegExp(match[0]), 'g'), '');\n output = output.replace(new RegExp(StringUtil.escapeRegExp(match[0]) + '\\\\s', 'g'), '');\n output = output.replace(new RegExp(StringUtil.escapeRegExp(match[0]), 'g'), '');\n } catch (_e) {\n // ignore\n }\n }\n while ((match = regex.exec(output)) !== null) {\n try {\n output = output.replace(new RegExp('\\\\s' + StringUtil.escapeRegExp(match[0]), 'g'), '');\n output = output.replace(new RegExp(StringUtil.escapeRegExp(match[0]) + '\\\\s', 'g'), '');\n output = output.replace(new RegExp(StringUtil.escapeRegExp(match[0]), 'g'), '');\n } catch (_e) {\n // ignore\n }\n }\n }\n\n return output;\n }\n\n public static stripExoticCharacters(raw: string): string {\n if (typeof raw === 'string') {\n return raw.replace('’', '\\'').replace(/[\\u0250-\\ue007]+/g, '*');\n }\n\n return raw;\n }\n\n private static preformatPhone(raw: string, locale: string): string {\n raw = raw.trim().replace(/\\s?\\.?\\-?\\(?\\)?/g, '');\n switch (locale) {\n case 'fr':\n if ((new RegExp('^[1-9]')).test(raw) && raw.length === 9) {\n return '0' + raw;\n }\n break;\n }\n\n return raw;\n }\n\n private static phoneNat(raw: string, locale: string): string {\n switch (locale) {\n case 'fr': // format: 06 11 22 33 44\n if (raw.startsWith('+330')) {\n raw = raw.substr(3);\n } else if (raw.startsWith('+33')) {\n raw = '0' + raw.substr(3);\n } else if (raw.startsWith('0033')) {\n raw = '0' + raw.substr(4);\n } else if (raw.startsWith('33') && raw.length === 11) {\n raw = '0' + raw.substr(2);\n }\n\n if (raw.length === 10) {\n let i: number = 0;\n raw = raw.split('').map((num) => {\n i++;\n\n return num + (i % 2 === 0 ? ' ' : '');\n }).join('').trim();\n }\n\n return raw;\n break;\n }\n\n return raw;\n }\n\n private static phoneInt(raw: string, locale: string): string {\n if (raw.startsWith('+')) {\n return raw;\n }\n\n switch (locale) {\n case 'fr': // format: +33611223344\n if (raw.startsWith('0')) {\n raw = raw.substr(1);\n }\n\n return '+33' + raw;\n break;\n }\n\n return raw;\n }\n}\n","/* eslint-disable max-lines */\nimport {isNullOrUndefined} from 'common/util/HelperUtil';\nimport {ValidatorUtil} from 'common/util/ValidatorUtil';\nimport * as diff from 'fast-diff';\nimport {StringUtil} from 'common/util/StringUtil';\nimport {FormatterUtil} from 'common/util/FormatterUtil';\n\nexport class AddressUtil {\n private static readonly ZIPCODES: string[] = [\n '78500', '78600', '78800', '95240', '95530',\n '78630', '78670', '78240', '78580', '78300', '78955', '78260',\n '95150', '95250', '95480', '95320', '95550', '95370', '95740', '95220',\n '95870', '78420', '78400', '78110', '78360', '78290', '78230', '78540', '78920'\n ];\n private static readonly CITIES: string[] = [\n 'Sartrouville', 'Cormeilles-en-Parisis', 'Houilles', 'Maisons-Laffitte', 'La Frette-sur-Seine', 'Argenteuil', 'Montesson', 'Le Mesnil-le-Roi', 'Bezons',\n 'Orgeval', 'Poissy', 'Morainvilliers', 'Villennes-sur-Seine', 'Medan', 'Chambourcy', 'Aigremont', 'Les Alluets-le-Roi', 'Carrières-sous-Poissy', 'Achères',\n 'Taverny', 'Beauchamp', 'Pierrelaye', 'Saint-Leu-la-Forêt', 'Bessancourt', 'Montigny-lès-Cormeilles', 'Herblay', 'Méry-sur-Oise',\n 'Carrières-sur-Seine', 'Bezons', 'Chatou', 'Le Vésinet', 'Montesson', 'Croissy', 'Croissy-sur-Seine', 'Le Pecq', 'Vernouillet', 'Ecquevilly'\n ];\n private static readonly ZIPCODE_CITY: {[zipCode: string]: string[]} = {\n '78500': ['Sartrouville'], '78600': ['Maisons-Laffitte', 'Le Mesnil-le-Roi'], '78800': ['Houilles'], '95240': ['Cormeilles-en-Parisis'], '95530': ['La Frette-sur-Seine'],\n '78630': ['Orgeval', 'Morainvilliers'], '78670': ['Villennes-sur-Seine', 'Medan'], '78240': ['Chambourcy', 'Aigremont'], '78300': ['Poissy'],\n '78955': ['Carrières-sous-Poissy'], '78260': ['Achères'], '78540': ['Vernouillet'], '78920': ['Ecquevilly'],\n '95150': ['Taverny'], '95250': ['Beauchamp'], '95480': ['Pierrelaye'], '95320': ['Saint-Leu-la-Forêt'], '95550': ['Bessancourt'], '95370': ['Montigny-les-Cormeilles'], '95220': ['Herblay'],\n '95740': ['Frépillon'], '95540': ['Méry-sur-Oise'],\n '95870': ['Bezons'], '78420': ['Carrières-sur-Seine'], '78400': ['Chatou'], '78110': ['Le Vésinet'], '78360': ['Montesson'], '78290': ['Croissy-sur-Seine'], '78230 ': ['Le Pecq']\n };\n private static readonly REGIONS: string[] = ['île-de-france'];\n private static readonly COUNTRIES: string[] = ['France', 'FR'];\n\n public static autoCorrectCity(city: string): string {\n if (isNullOrUndefined(city) || typeof city !== 'string' || city.length === 0) {\n return city;\n }\n\n if (city.toLowerCase().startsWith('st-') || city.toLowerCase().startsWith('st ')) {\n city = 'Saint ' + city.substring(3);\n }\n\n const exactMatch: string = AddressUtil.CITIES.find((c) => c.toLowerCase() === city.toLowerCase());\n if (exactMatch !== undefined) {\n return exactMatch;\n }\n\n const partialMatch: string = AddressUtil.CITIES.find((c) => {\n const result: {add: number, remove: number} = AddressUtil.countDiff(city, c);\n\n return result.add <= 2 && result.remove <= 2;\n });\n if (partialMatch !== undefined) {\n return partialMatch;\n }\n\n const matchNoDash: string = AddressUtil.CITIES.find((c) => c.replace(/-/g, ' ').toLowerCase() === city.toLowerCase());\n if (matchNoDash !== undefined) {\n return matchNoDash;\n }\n\n const partialMatchNoDash: string = AddressUtil.CITIES.find((c) => {\n const result: {add: number, remove: number} = AddressUtil.countDiff(city, c.replace(/-/g, ' '));\n\n return result.add <= 2 && result.remove <= 2;\n });\n if (partialMatchNoDash !== undefined) {\n return partialMatchNoDash;\n }\n\n const startsWith: string = AddressUtil.CITIES.find((c) => c.toLowerCase().startsWith(city.toLowerCase()));\n if (startsWith !== undefined) {\n return startsWith;\n }\n\n const isIncluded: string = AddressUtil.CITIES.find((c) => city.toLowerCase().includes(c.toLowerCase()));\n if (isIncluded !== undefined) {\n return isIncluded;\n }\n\n return city;\n }\n\n public static autoCorrectStreet(street: string): string {\n if (isNullOrUndefined(street) || typeof street !== 'string' || street.length === 0) {\n return street;\n }\n\n street = street.replace(/(\\sav\\s)/ig, ' avenue ');\n street = street.replace(/(\\sav\\.\\s)/ig, ' avenue ');\n street = street.replace(/(\\schau\\.\\s)/ig, ' chaussée ');\n street = street.replace(/(\\strav\\.\\s)/ig, ' traverse ');\n street = street.replace(/(\\spl\\.\\s)/ig, ' place ');\n street = street.replace(/(\\spass\\.\\s)/ig, ' passage ');\n street = street.replace(/(\\ssent\\.\\s)/ig, ' sentier ');\n street = street.replace(/(\\simp\\.\\s)/ig, ' impasse ');\n street = street.replace(/(\\sall\\.\\s)/ig, ' allée ');\n street = street.replace(/(\\schem\\.\\s)/ig, ' chemin ');\n\n return street;\n }\n\n public static getCityFromZipCode(zip: string, rawAddress: string): string {\n if (zip === undefined || rawAddress === undefined) {\n return undefined;\n }\n\n const candidates: string[] = AddressUtil.ZIPCODE_CITY[zip];\n if (candidates === undefined) {\n return undefined;\n }\n\n if (candidates.length === 1) {\n return candidates[0];\n }\n\n let city: string;\n rawAddress.split(',').forEach((part) => {\n city = candidates.find((candidate) => {\n return part.trim().toLowerCase() === candidate.trim().toLowerCase();\n });\n });\n if (city !== undefined) {\n return city;\n }\n\n return candidates[0];\n }\n\n public static isZipCode(zip: string): boolean {\n if (typeof zip !== 'string') {\n return false;\n }\n\n if (AddressUtil.ZIPCODES.includes(zip)) {\n return true;\n }\n\n return ValidatorUtil.isNumber(zip) && zip.length === 5 && !zip.includes('.') && !zip.includes('-');\n }\n\n public static parse(raw: string, isFormatted: boolean = true): { street?: string, zip?: string, city?: string, country?: string } {\n const address: { street?: string, zip?: string, city?: string, country?: string } = {};\n if (!isNullOrUndefined(raw)) {\n const rawAddressParts: string[] = raw.split(',');\n if (rawAddressParts.length >= 3 && isFormatted) {\n if (AddressUtil.COUNTRIES.find((c) => raw.toLowerCase().includes(' ' + c.toLowerCase())) === undefined) {\n rawAddressParts.push('France');\n }\n\n let i: number = rawAddressParts.length - 1;\n address.country = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n if (rawAddressParts[i] !== undefined && rawAddressParts[i].trim().includes(' ')) {\n const rawParts: string[] = rawAddressParts[i].trim().split(' ');\n address.zip = rawParts[0] === undefined ? undefined : rawParts[0].trim();\n rawParts.splice(0, 1);\n address.city = rawParts.join(' ').trim();\n rawAddressParts.splice(i--, 1);\n } else if (!isNaN(Number(rawAddressParts[i].trim()))) {\n address.zip = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n if (i >= 2) {\n address.city = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n }\n } else if (!isNaN(Number(rawAddressParts[i - 1].trim()))) {\n address.city = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n address.zip = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n } else {\n address.city = rawAddressParts[i].trim();\n rawAddressParts.splice(i--, 1);\n }\n address.street = rawAddressParts.map((part) => part.trim()).join(' ').trim();\n } else {\n let rawAddress: string = raw.toLowerCase();\n AddressUtil.ZIPCODES.forEach((zipcode) => {\n if (rawAddress.includes(zipcode)) {\n address.zip = zipcode;\n try {\n rawAddress = rawAddress.replace(new RegExp(StringUtil.escapeRegExp(zipcode), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n }\n });\n AddressUtil.CITIES.forEach((city) => {\n if (rawAddress.includes(city.toLowerCase()) && (address.zip === undefined || AddressUtil.ZIPCODE_CITY[address.zip]?.find((c) => c.toLowerCase() === city.toLowerCase()))) {\n address.city = city;\n try {\n rawAddress = rawAddress.replace(new RegExp(StringUtil.escapeRegExp(city), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n }\n });\n AddressUtil.COUNTRIES.forEach((country) => {\n if (rawAddress.includes(' ' + country.toLowerCase())) {\n address.country = country;\n try {\n rawAddress = rawAddress.replace(new RegExp(StringUtil.escapeRegExp(' ' + country), 'ig'), '');\n } catch (_e) {\n // ignore\n }\n }\n });\n\n if (address.street === undefined) {\n address.street = rawAddress.split(',').map((part) => part.trim()).join(' ').trim();\n }\n }\n\n if (address.country === undefined) {\n address.country = 'France';\n }\n }\n\n if (address.street !== undefined) {\n address.street = FormatterUtil.lower(FormatterUtil.trim(String(address.street)));\n }\n if (address.zip !== undefined) {\n address.zip = FormatterUtil.upper(FormatterUtil.trim(String(address.zip)));\n }\n if (address.city !== undefined) {\n address.city = AddressUtil.autoCorrectCity(FormatterUtil.capitalize(FormatterUtil.trim(String(address.city))));\n }\n if (address.country !== undefined) {\n address.country = FormatterUtil.capitalize(FormatterUtil.trim(String(address.country)));\n }\n\n return AddressUtil.complete(address);\n }\n\n public static complete(address: { street?: string, zip?: string, city?: string, country?: string }): { street?: string, zip?: string, city?: string, country?: string } {\n if (address.city === undefined || address.city.length === 0) {\n const city: string = AddressUtil.getCityFromZipCode(address.zip, address.street);\n if (city !== undefined) {\n address.city = city;\n }\n }\n if (typeof address.street === 'string') {\n AddressUtil.REGIONS.forEach((region) => {\n address.street = StringUtil.removeText(address.street, region).trim();\n });\n }\n if (FormatterUtil.lower(address.country) === 'fr') {\n address.country = 'France';\n }\n\n return address;\n }\n\n public static removeDuplicates(str: string): string {\n if (typeof str !== 'string') {\n return str;\n }\n\n const output: string[] = [];\n\n str.split(',').forEach((part) => {\n if (output.find((o) => o.trim().toLowerCase().includes(part.trim().toLowerCase())) === undefined) {\n output.push(part);\n }\n });\n\n return output.join(',');\n }\n\n private static countDiff(str: string, reference: string): { add: number, remove: number } {\n const result: { add: number, remove: number } = { add: 0, remove: 0 };\n\n diff(str.toLowerCase(), reference.toLowerCase()).forEach((value) => {\n switch (value[0]) {\n case -1:\n result.remove += value[1].length;\n break;\n case 1:\n result.add += value[1].length;\n break;\n }\n });\n\n return result;\n }\n}\n","import {DateTime} from 'luxon';\nimport {cloneDeep} from 'lodash';\n\nexport class DateUtil {\n private static readonly PERIOD_MAX_DATES: number = 90;\n private static readonly WEEK_DAYS: {[id: number]: string} = {1: 'lundi', 2: 'mardi', 3: 'mercredi', 4: 'jeudi', 5: 'vendredi', 6: 'samedi', 7: 'dimanche'};\n\n public static getCycleDateFromFullDate(date: string, cycle: 'daily' | 'weekly' | 'monthly'): string {\n if (cycle === 'weekly') {\n const result: string = DateTime.fromISO(date.replace(/-W([0-9])$/i, '-W0$1')).toISOWeekDate();\n if (result === null) {\n return date;\n }\n\n const parts: string[] = result.split('-');\n\n return parts.length > 2 ? parts[0] + '-' + parts[1] : parts.join('-');\n } else if (cycle === 'monthly') {\n return DateTime.fromISO(date).toFormat('yyyy-LL');\n }\n\n return DateTime.fromISO(date).toISODate();\n }\n\n public static displayWeekDay(weekDay: number): string {\n let displayWeekDay: string = '';\n if (DateUtil.WEEK_DAYS[weekDay] !== undefined) {\n displayWeekDay = DateUtil.WEEK_DAYS[weekDay];\n }\n\n return displayWeekDay;\n }\n\n public static generatePeriod(fromDate: string, toDate: string, initialValue: Record<string, any>, addDate: boolean = true, MAX_DAYS: number = DateUtil.PERIOD_MAX_DATES,\n cycle: 'daily' | 'weekly' | 'monthly' = 'daily'): {[date: string]: Record<string, any>} {\n const jump: {[str: string]: number} = {'daily': {day: 1}, 'weekly': {week: 1}, 'monthly': {month: 1}}[cycle];\n let cursor: string = DateTime.fromISO(fromDate, {setZone: true}).toISODate();\n const stop: string = DateTime.fromISO(toDate, {setZone: true}).toISODate();\n let i: number = 0;\n const data: {[date: string]: Record<string, any>} = {};\n while (cursor <= stop && i < MAX_DAYS) {\n const date: string = DateUtil.getCycleDateFromFullDate(cursor, cycle);\n data[date] = cloneDeep(initialValue);\n if (addDate) {\n data[date].date = date;\n }\n cursor = DateTime.fromISO(cursor, {setZone: true}).plus(jump).toISODate();\n i++;\n }\n\n return data;\n }\n\n public static getOpenPeriods(openings: {from: string, to: string}[], closings: {from: string, to: string}[]): {from: string, to: string}[] {\n const results: {from: string, to: string}[] = [];\n\n openings.forEach((opening) => {\n const tmpOpenings: {from: string, to: string}[] = [opening];\n while (tmpOpenings.length > 0) {\n const open: {from: string, to: string} = tmpOpenings[0];\n\n const isOpen: boolean = closings.find((closing) => closing.from <= open.from && open.to <= closing.to) === undefined;\n if (isOpen) {\n const startLater: {from: string, to: string} = closings.find((closing) => closing.from <= open.from && open.from < closing.to && closing.to < open.to);\n if (startLater !== undefined) {\n tmpOpenings.push({from: startLater.to, to: open.to});\n } else {\n const endEarlier: {from: string, to: string} = closings.find((closing) => open.from < closing.from && open.to > closing.from && open.to <= closing.to);\n if (endEarlier !== undefined) {\n tmpOpenings.push({from: open.from, to: endEarlier.from});\n } else {\n const cut: {from: string, to: string} = closings.find((closing) => open.from < closing.from && closing.to < open.to);\n if (cut !== undefined) {\n tmpOpenings.push({from: open.from, to: cut.from});\n tmpOpenings.push({from: cut.to, to: open.to});\n } else {\n results.push(open);\n }\n }\n }\n }\n\n tmpOpenings.shift();\n }\n });\n\n\n return results;\n }\n\n public static limitDate(targetDate: string, baseDate: string, limitInSeconds: number = 0): string {\n if (targetDate === undefined || baseDate === undefined) {\n return undefined;\n }\n\n const target: string = DateTime.fromISO(targetDate, {setZone: true}).toISO();\n const limit: string = DateTime.fromISO(baseDate, {setZone: true}).plus({seconds: limitInSeconds}).toISO();\n\n return target > limit ? limit : target;\n }\n\n public static localeToISO(localeDate: string): string {\n const frFormat1: RegExp = new RegExp('[0-9]{2}/[0-9]{2}/[0-9]{4}');\n const frFormat2: RegExp = new RegExp('[0-9]{2}-[0-9]{2}-[0-9]{4}');\n const isoFormat: RegExp = new RegExp('[0-9]{4}-[0-9]{2}-[0-9]{2}');\n\n let isoDate: string;\n if (frFormat1.test(localeDate)) {\n const parts: string[] = localeDate.split('/');\n isoDate = parts[2] + '-' + parts[1] + '-' + parts[0];\n } else if (frFormat2.test(localeDate)) {\n const parts: string[] = localeDate.split('-');\n isoDate = parts[2] + '-' + parts[1] + '-' + parts[0];\n } else if (isoFormat.test(localeDate)) {\n isoDate = localeDate;\n }\n\n return isoDate;\n }\n\n public static slotToTime(timeSlot: string): string {\n const timeFormat: RegExp = new RegExp('^(\\\\s)?[0-9]{2}:[0-9]{2}(\\\\s)?$');\n const slotFormat: RegExp = new RegExp('^(\\\\s)?[0-9]{2}:[0-9]{2}(\\\\s)?-(\\\\s)?[0-9]{2}:[0-9]{2}(\\\\s)?$');\n\n timeSlot = timeSlot.trim();\n\n let time: string;\n if (timeFormat.test(timeSlot)) {\n time = timeSlot.trim() + ':00';\n } else if (slotFormat.test(timeSlot)) {\n const parts: string[] = timeSlot.split('-');\n time = parts[0].trim() + ':00';\n }\n\n return time;\n }\n\n public static round(date: string, roundingInMs: number = 0): string {\n if (typeof date !== 'string') {\n return date;\n }\n\n const dateTime: DateTime = DateTime.fromISO(date, {setZone: true});\n\n return DateTime.fromMillis(Math.round((+dateTime.toMillis()) / roundingInMs) * roundingInMs).setZone(dateTime.zone).toISO();\n }\n}\n","export class ExtractorUtil {\n public static phone(raw: string, locale: 'fr'): string {\n if (typeof raw !== 'string') {\n return undefined;\n }\n\n raw = raw.trim().replace(/\\s?\\.?\\-?\\(?\\)?/g, '');\n switch (locale) {\n case 'fr': {\n const phoneFrRegex: RegExp = new RegExp('(0[6-7][0-9]{8})', 'i');\n const result: string[] = phoneFrRegex.exec(raw);\n if (result !== null && result.length > 0 && result[0] !== null) {\n return result[0];\n }\n }\n }\n\n return undefined;\n }\n}\n","export class GeneratorUtil {\n private static readonly symbolUpperCases: string[] = [\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'K', 'M', 'N', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'\n ];\n private static readonly symbolLowerCases: string[] = [\n 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'k', 'm', 'n', 'p', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'\n ];\n\n public static code(size: number): string {\n if (size === null || size === undefined) {\n size = 6;\n }\n\n let code: string = '';\n while (code.length < size) {\n code += GeneratorUtil.symbolUpperCases[GeneratorUtil.int(0, GeneratorUtil.symbolUpperCases.length - 1)];\n }\n\n return code;\n }\n\n public static int(min: number, max: number): number {\n if (min === null || min === undefined) {\n min = 0;\n }\n if (max === null || max === undefined) {\n max = Number.POSITIVE_INFINITY;\n }\n\n min = Math.ceil(min);\n max = Math.floor(max);\n\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n\n public static password(size: number): string {\n if (size === null || size === undefined) {\n size = 8;\n }\n\n let code: string = '';\n while (code.length < size) {\n switch (GeneratorUtil.int(1, 3)) {\n case 1:\n code += GeneratorUtil.symbolUpperCases[GeneratorUtil.int(0, GeneratorUtil.symbolUpperCases.length - 1)];\n break;\n case 2:\n code += GeneratorUtil.symbolLowerCases[GeneratorUtil.int(0, GeneratorUtil.symbolLowerCases.length - 1)];\n break;\n default:\n code += String(GeneratorUtil.int(0, 9));\n }\n }\n\n return code;\n }\n}\n","export class MathUtil {\n public static avg(values: number[]): number {\n if (values.length === 0) {\n return 0;\n }\n\n const total: number = values.reduce((accumulator, value) => {\n return accumulator + value;\n }, 0);\n\n return MathUtil.round(total / values.length, 2);\n }\n\n public static applyVariation(value: number, variation: number): number {\n let increase: number;\n if (value >= 0) {\n increase = 1 + (variation / 100);\n } else {\n increase = 1 - (variation / 100);\n }\n\n return value * increase;\n }\n\n public static median(values: number[]): number {\n if (values.length === 0) {\n return 0;\n }\n if (values.length === 1) {\n return values[0];\n }\n\n const valuesSorted: number[] = values.sort((a, b) => {\n return a - b;\n });\n\n if (valuesSorted.length % 2 === 0) {\n return MathUtil.avg([valuesSorted[(valuesSorted.length / 2) - 1], valuesSorted[(valuesSorted.length / 2)]]);\n }\n\n return valuesSorted[Math.floor(valuesSorted.length / 2)];\n }\n\n public static percentage(part: number, total: number): number {\n if (total === 0) {\n return 0;\n }\n\n return ((part / total) * 100);\n }\n\n public static round(value: number, decimals: number): number {\n if (decimals === 0) {\n return Math.round(value);\n }\n\n return Number(value.toFixed(decimals));\n }\n\n public static variation(originalValue: number, newValue: number): number {\n let percent = 0;\n if (newValue !== 0) {\n if (originalValue !== 0) {\n percent = (newValue - originalValue) / Math.abs(originalValue) * 100;\n } else {\n percent = ((newValue > 0) ? 1 : -1) * 100;\n }\n } else if (originalValue !== 0) {\n percent = ((originalValue > 0) ? 1 : -1) * -100;\n }\n\n return Math.floor(percent);\n }\n}\n","import {isArray, isObject} from 'lodash';\n\nexport class ObjectUtil {\n public static compact(obj: any, options: {removeEmptyString?: boolean} = {}): any {\n if (isArray(obj)) {\n const ouput: any[] = [];\n obj.forEach((value) => {\n value = ObjectUtil.compact(value, options);\n if ((isArray(value) && value.length > 0)\n || (isObject(value) && Object.keys(value).length > 0)\n || (value !== undefined && value !== null && !isArray(value) && !isObject(value))) {\n ouput.push(value);\n }\n });\n\n return ouput;\n } else if (isObject(obj)) {\n const ouput: any = {};\n Object.keys(obj).forEach((key) => {\n let value: any = (obj as any)[key];\n if (isArray(value) || isObject(value)) {\n value = ObjectUtil.compact(value, options);\n if ((isArray(value) && value.length > 0)\n || (isObject(value) && Object.keys(value).length > 0)\n || (value !== undefined && value !== null && !isArray(value) && !isObject(value))) {\n ouput[key] = value;\n }\n } else if (value !== undefined && value !== null\n && (typeof value !== 'string' || options.removeEmptyString === false || value.length > 0)) {\n ouput[key] = value;\n }\n });\n\n return ouput;\n }\n\n return (typeof obj !== 'string' || options.removeEmptyString === false || obj.length > 0) ? obj : undefined;\n }\n}\n","import {MathUtil} from 'common/util/MathUtil';\n\nexport class PriceUtil {\n private static readonly currencies: {[iso: string]: {symbol: string, position: string}} = {\n 'CAD': {symbol: '$', position: 'before'},\n 'EUR': {symbol: '€', position: 'after'},\n 'USD': {symbol: '$', position: 'before'}\n };\n\n public static applyTaxes(priceTaxExcluded: string, taxRates: number[], decimals: number = 2): string {\n let priceTaxIncluded: number = Number(priceTaxExcluded);\n taxRates.forEach((rate) => {\n priceTaxIncluded += Number(priceTaxExcluded) * rate;\n });\n\n return String(MathUtil.round(priceTaxIncluded, decimals));\n }\n\n public static calculateTaxes(priceTaxExcluded: number, taxRates: number[]): number {\n let taxes: number = 0;\n taxRates.forEach((rate) => {\n taxes += priceTaxExcluded * rate;\n });\n\n return MathUtil.round(taxes, 2);\n }\n\n public static displayWithCurrency(price: string, isoCurrency: string): string {\n if (price === undefined || price === null) {\n return price;\n }\n\n const currency: {symbol: string, position: string} = PriceUtil.currencies[isoCurrency];\n\n let newPrice: string = price + ' ' + isoCurrency;\n if (currency !== undefined) {\n switch (currency.position) {\n case 'before':\n newPrice = currency.symbol + price;\n break;\n case 'after':\n newPrice = price + currency.symbol;\n break;\n }\n }\n\n return newPrice;\n }\n\n public static format(price: string, locale: 'fr' | 'us', decimals: number = 2): string {\n if (price === undefined || price === null) {\n return price;\n }\n\n const priceNumber: number = Number(price.replace(/\\,/gi, ''));\n const standardPrice: string = priceNumber.toLocaleString('en-US', {\n style: 'decimal',\n useGrouping: true,\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals\n });\n\n switch (locale) {\n case 'fr':\n return standardPrice.replace(/\\,/gi, ' ').replace(/\\./gi, ',');\n case 'us':\n return standardPrice;\n }\n }\n\n public static round(price: string, precision: number = 0.10): string {\n const priceInCents: number = Number(price) * 100;\n const precisionInCents: number = precision * 100;\n const rest: number = priceInCents % precisionInCents;\n\n return String(MathUtil.round((priceInCents - rest) + (rest < Math.ceil(precisionInCents / 2) ? 0 : precisionInCents), 2) / 100);\n }\n}\n"],"names":["root","factory","exports","module","define","amd","global","require","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","n","getter","__esModule","d","a","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","registerBasePath","basePath","process","env","APP_HOME","Path","BASE_PATH","endsWith","data","db","storage","session","message","code","name","Error","captureStackTrace","MainException","stack","UnauthorizedException","ERROR_CODE","Env","getMode","NODE_ENV","DEVELOPMENT","PRODUCTION","TEST","APP_ID","init","sentryToken","Environment","dsn","integrations","CaptureConsole","levels","environment","maxBreadcrumbs","trace","extra","includes","console","info","category","level","debug","log","scope","setExtra","JSON","stringify","warning","error","warn","requestHandler","errorHandler","create","origins","port","this","app","backendPort","Server","DEFAULT_PORT","String","Logger","use","inflate","limit","reviver","strict","type","verify","origin","concat","credentials","listen","getSessionSecret","sessionCookieName","update","SALT","digest","_request","response","Number","status","isNaN","json","request","retries","operation","factor","minTimeout","maxTimeout","randomize","Promise","resolve","reject","attempt","then","catch","retry","isEmail","email","RegExp","test","isPhone","phone","isIntMobilePhone","caRegex","frRegex","usRegex","isNumber","number","token","mode","send","senderName","rawPhones","isCommercial","sendAt","phones","checkPhoneFormat","length","BadParameterException","SmsSenderService","MESSAGE_MAX_LENGTH","substring","Retry","params","accessToken","emetteur","numero","map","replace","join","classe_msg","nbr_msg","Math","ceil","stop","date_envoi","DateTime","setZone","toFormat","BASE_API_URL","encodeURIComponent","p","timeout","trim","ExternalApiException","filter","ValidatorUtil","asyncForEach","array","callback","i","dirPath","filePath","lastIndexOf","substr","move","isFile","recursive","isDir","read","readJson","jsonPath","isJson","parse","readJsonFiles","separator","files","output","fileName","push","write","rawData","encoding","writeJson","isDirectory","_error","render","templatePath","baseIncludePath","view","cloneDeep","__dirname","FileSystem","content","forEach","result","startsWith","include","includeParts","split","templateName","keys","apiPublicKey","apiSecretKey","templateEngine","TemplateEngine","mailjet","sendDeliveryDelay","sender","recipient","base","copyright","year","Date","getUTCFullYear","text","html","sendNotification","subject","sendTrackDelivery","textContent","htmlContent","sendUserNotification","contact","post","statusCode","filesystem","full","config","merge","connect","entities","con","logging","logger","bigNumberStrings","timezone","charset","createConnection","connection","synchronize","close","fileSystem","success","image","url","outputPath","outputName","toString","writer","method","responseType","pipe","on","isNullOrUndefined","escapeRegExp","str","nullable","removeMultiSpaces","removeText","StringUtil","_e","targets","replacers","target","index","slugify","raw","toLower","deburr","truncate","slice","capitalize","lowraw","FormatterUtil","lower","word","charAt","toUpperCase","ucfirst","toLocaleLowerCase","upper","toLocaleUpperCase","locale","preformatPhone","phoneNat","phoneInt","stripEmoji","regex","emojiRegex","match","exec","stripExoticCharacters","num","autoCorrectCity","city","toLowerCase","exactMatch","AddressUtil","CITIES","find","c","partialMatch","countDiff","add","remove","matchNoDash","partialMatchNoDash","isIncluded","autoCorrectStreet","street","getCityFromZipCode","zip","rawAddress","candidates","ZIPCODE_CITY","part","candidate","isZipCode","ZIPCODES","isFormatted","address","rawAddressParts","COUNTRIES","country","splice","rawParts","zipcode","complete","REGIONS","region","removeDuplicates","reference","getCycleDateFromFullDate","date","cycle","toISOWeekDate","parts","toISODate","displayWeekDay","weekDay","DateUtil","WEEK_DAYS","generatePeriod","fromDate","toDate","initialValue","addDate","MAX_DAYS","PERIOD_MAX_DATES","jump","day","week","month","cursor","plus","getOpenPeriods","openings","closings","results","opening","tmpOpenings","closing","from","to","startLater","endEarlier","cut","shift","limitDate","targetDate","baseDate","limitInSeconds","toISO","seconds","localeToISO","localeDate","isoDate","frFormat1","frFormat2","isoFormat","slotToTime","timeSlot","time","timeFormat","slotFormat","round","roundingInMs","dateTime","toMillis","zone","size","GeneratorUtil","symbolUpperCases","int","min","max","POSITIVE_INFINITY","floor","random","password","symbolLowerCases","avg","values","total","reduce","accumulator","MathUtil","applyVariation","variation","median","valuesSorted","sort","b","percentage","decimals","toFixed","originalValue","newValue","percent","abs","compact","options","isArray","ObjectUtil","isObject","removeEmptyString","applyTaxes","priceTaxExcluded","taxRates","priceTaxIncluded","rate","calculateTaxes","taxes","displayWithCurrency","price","isoCurrency","currency","PriceUtil","currencies","newPrice","position","symbol","format","standardPrice","toLocaleString","style","useGrouping","minimumFractionDigits","maximumFractionDigits","precision","priceInCents","precisionInCents","rest"],"sourceRoot":""}
@@ -576,7 +576,6 @@
576
576
  </td>
577
577
  <td class="Footer-legal Font Font-caption Delink"
578
578
  style="border-width:0;border-collapse:collapse;margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;mso-line-height-rule:exactly;vertical-align:middle;color:#e3e3e3;font-size:12px;line-height:16px;">
579
- &copy; {{ base.copyright.year }}
580
579
  {{ #base.shop.url }}
581
580
  <a href="{{ base.shop.url }}" style="-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;outline-color:0;text-decoration:none;color:#e3e3e3;">
582
581
  {{{ base.shop.name }}}
@@ -610,11 +609,23 @@
610
609
  <tbody>
611
610
  <tr>
612
611
  <td class="Footer-logo"
613
- style="border-width:0;border-collapse:collapse;margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;">
612
+ style="border-width:0;border-collapse:collapse;margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:white;">
614
613
  <!--<a href="{{ base.shop.url }}" class="Footer-logoArea Target"
615
614
  style="-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;outline-color:0;text-decoration:none;font-size:0;line-height:0px;mso-line-height-rule:exactly;background-size:100% 100%;display:block;">
616
615
  <img alt="logo" height="20" width="42" src="{{ base.shop.logo }}" style="display:block;line-height:100%;border-width:0;"/>
617
- </a>-->
616
+ </a>
617
+ <br>-->
618
+ <a href="https://burgerbreton.com/policies/terms-of-service" style="-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;outline-color:0;text-decoration:none;color:white;">
619
+ Conditions
620
+ </a>
621
+ &nbsp;|&nbsp;
622
+ <a href="mailto:bonjour@burgerbreton.com" style="-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;outline-color:0;text-decoration:none;color:white;">
623
+ Service Client
624
+ </a>
625
+ &nbsp;|&nbsp;
626
+ <a href="mailto:stop@burgerbreton.com?subject=stop&body=stop" style="-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;outline-color:0;text-decoration:none;color:white;">
627
+ Se d&eacute;sinscrire
628
+ </a>
618
629
  </td>
619
630
  <td align="right"
620
631
  style="border-width:0;border-collapse:collapse;margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;">
@@ -0,0 +1,22 @@
1
+ <tr class="Section Body">
2
+ <td class="Spacer Spacer-gutter" width="64"
3
+ style="border-width:0;border-collapse:collapse;margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#ffffff;font-size:1px;line-height:1px;mso-line-height-rule:exactly;">
4
+ &ensp;
5
+ </td>
6
+ <td class="Body-area Font Font-body"
7
+ style="border-width:0;border-collapse:collapse;margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;mso-line-height-rule:exactly;vertical-align:middle;color:#525f7f;font-size:14px;line-height:20px;">
8
+ <p style="text-align:inherit !important;margin-bottom:20px;margin-left:0;margin-right:0;margin-top:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;color:inherit !important;font-size:inherit !important;line-height:inherit !important;">
9
+ {{{ content }}}
10
+ </p>
11
+ </td>
12
+ <td class="Spacer Spacer-gutter" width="64"
13
+ style="border-width:0;border-collapse:collapse;margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#ffffff;font-size:1px;line-height:1px;mso-line-height-rule:exactly;">
14
+ &ensp;
15
+ </td>
16
+ </tr>
17
+ <tr>
18
+ <td class="Spacer Spacer-divider" colspan="3" height="12"
19
+ style="border-width:0;border-collapse:collapse;margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#ffffff;font-size:1px;line-height:1px;mso-line-height-rule:exactly;">
20
+ &ensp;
21
+ </td>
22
+ </tr>
@@ -0,0 +1 @@
1
+ {{{ content }}}
@@ -1,3 +1,9 @@
1
1
  {{{include:0:h2}}}
2
2
 
3
3
  {{{include:0:p}}}
4
+
5
+ {{{include:0:button}}}
6
+
7
+ {{{include:1:p}}}
8
+
9
+ {{{include:0:signature}}}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Common API",
4
4
  "main": "dist/common-api.node.min.js",
5
5
  "types": "dist/common-api.d.ts",
6
- "version": "0.1.172",
6
+ "version": "0.1.175",
7
7
  "author": "Paul M.",
8
8
  "license": "NO LICENSE",
9
9
  "engines": {
@@ -26,7 +26,9 @@
26
26
  "dependencies": {
27
27
  "@sentry/integrations": "^6.12.0",
28
28
  "@sentry/node": "^6.12.0",
29
+ "@types/compression": "^1.7.2",
29
30
  "axios": "^0.24.0",
31
+ "compression": "^1.7.4",
30
32
  "connect-timeout": "^1.9.0",
31
33
  "cors": "^2.8.5",
32
34
  "emoji-regex": "^9.2.2",