@blackcode_sa/metaestetics-api 1.15.3 → 1.15.5

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.
@@ -2003,7 +2003,7 @@ var patientAppointmentConfirmedTemplate = `
2003
2003
  <table role="presentation" width="100%" cellspacing="0" cellpadding="0" border="0">
2004
2004
  <tr>
2005
2005
  <td>
2006
- <h1 style="margin: 0; font-size: 24px; font-weight: 400; color: #67574A; letter-spacing: 2px; text-transform: uppercase; font-family: Georgia, 'Times New Roman', serif;">MetaEstetics</h1>
2006
+ <h1 style="margin: 0; font-size: 24px; font-weight: 400; color: #67574A; letter-spacing: 2px; text-transform: uppercase; font-family: Georgia, 'Times New Roman', serif;">Metaesthetics</h1>
2007
2007
  </td>
2008
2008
  </tr>
2009
2009
  </table>
@@ -2061,6 +2061,7 @@ var patientAppointmentConfirmedTemplate = `
2061
2061
  <td>
2062
2062
  <p style="margin: 0 0 2px 0; font-size: 11px; color: #868686; text-transform: uppercase; letter-spacing: 0.5px; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">Location</p>
2063
2063
  <p style="margin: 0; font-size: 15px; color: #333333; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">{{clinicName}}</p>
2064
+ <p style="margin: 4px 0 0 0; font-size: 13px; color: #555555; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">{{clinicAddress}}</p>
2064
2065
  </td>
2065
2066
  </tr>
2066
2067
  </table>
@@ -2081,7 +2082,7 @@ var patientAppointmentConfirmedTemplate = `
2081
2082
  <td style="padding: 20px 24px; background-color: #faf9f7; border-left: 3px solid #a48a76;">
2082
2083
  <p style="margin: 0 0 8px 0; font-size: 13px; font-weight: 600; color: #67574A; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">Before Your Visit</p>
2083
2084
  <p style="margin: 0; font-size: 14px; color: #555555; line-height: 1.6; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">
2084
- Please arrive 15 minutes early. If you need to reschedule or cancel, contact us through the MetaEstetics app.
2085
+ Please arrive 15 minutes early. If you need to reschedule or cancel, contact us through the Metaesthetics app.
2085
2086
  </p>
2086
2087
  </td>
2087
2088
  </tr>
@@ -2103,7 +2104,7 @@ var patientAppointmentConfirmedTemplate = `
2103
2104
  <td>
2104
2105
  <p style="margin: 0 0 8px 0; font-size: 14px; font-weight: 500; color: #67574A; font-family: Georgia, 'Times New Roman', serif;">{{clinicName}}</p>
2105
2106
  <p style="margin: 0 0 16px 0; font-size: 13px; color: #868686; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">Premium Aesthetic Services</p>
2106
- <p style="margin: 0; font-size: 11px; color: #aaaaaa; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">This is an automated message from MetaEstetics. Please do not reply directly to this email.</p>
2107
+ <p style="margin: 0; font-size: 11px; color: #aaaaaa; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">This is an automated message from Metaesthetics. Please do not reply directly to this email.</p>
2107
2108
  </td>
2108
2109
  </tr>
2109
2110
  </table>
@@ -2255,7 +2256,7 @@ var clinicAppointmentRequestedTemplate = `
2255
2256
  <body>
2256
2257
  <div class="email-container">
2257
2258
  <div class="header">
2258
- <div class="logo">MetaEstetics</div>
2259
+ <div class="logo">Metaesthetics</div>
2259
2260
  <h1>New Appointment Request</h1>
2260
2261
  <div class="subtitle">Requires Your Attention</div>
2261
2262
  </div>
@@ -2308,7 +2309,7 @@ var clinicAppointmentRequestedTemplate = `
2308
2309
 
2309
2310
  <div class="footer">
2310
2311
  <p style="margin: 0 0 10px 0;">
2311
- <strong>MetaEstetics</strong> - Premium Aesthetic Services
2312
+ <strong>Metaesthetics</strong> - Premium Aesthetic Services
2312
2313
  </p>
2313
2314
  <p style="margin: 0; font-size: 12px; color: #999;">
2314
2315
  This is an automated message. Please do not reply to this email.
@@ -2347,7 +2348,7 @@ var appointmentCancelledTemplate = `
2347
2348
  <table role="presentation" width="100%" cellspacing="0" cellpadding="0" border="0">
2348
2349
  <tr>
2349
2350
  <td>
2350
- <h1 style="margin: 0; font-size: 24px; font-weight: 400; color: #67574A; letter-spacing: 2px; text-transform: uppercase; font-family: Georgia, 'Times New Roman', serif;">MetaEstetics</h1>
2351
+ <h1 style="margin: 0; font-size: 24px; font-weight: 400; color: #67574A; letter-spacing: 2px; text-transform: uppercase; font-family: Georgia, 'Times New Roman', serif;">Metaesthetics</h1>
2351
2352
  </td>
2352
2353
  </tr>
2353
2354
  </table>
@@ -2431,6 +2432,7 @@ var appointmentCancelledTemplate = `
2431
2432
  <td>
2432
2433
  <p style="margin: 0 0 2px 0; font-size: 11px; color: #999999; text-transform: uppercase; letter-spacing: 0.5px; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">Location</p>
2433
2434
  <p style="margin: 0; font-size: 15px; color: #888888; text-decoration: line-through; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">{{clinicName}}</p>
2435
+ <p style="margin: 4px 0 0 0; font-size: 13px; color: #999999; text-decoration: line-through; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">{{clinicAddress}}</p>
2434
2436
  </td>
2435
2437
  </tr>
2436
2438
  </table>
@@ -2451,7 +2453,7 @@ var appointmentCancelledTemplate = `
2451
2453
  <td style="padding: 24px;">
2452
2454
  <p style="margin: 0 0 8px 0; font-size: 14px; font-weight: 600; color: #00BB38; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">Book a New Appointment</p>
2453
2455
  <p style="margin: 0; font-size: 14px; color: #555555; line-height: 1.6; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">
2454
- We'd love to see you again. Open the MetaEstetics app to browse available times and book a new appointment.
2456
+ We'd love to see you again. Open the Metaesthetics app to browse available times and book a new appointment.
2455
2457
  </p>
2456
2458
  </td>
2457
2459
  </tr>
@@ -2459,7 +2461,7 @@ var appointmentCancelledTemplate = `
2459
2461
 
2460
2462
  <!-- Support Info -->
2461
2463
  <p style="margin: 0; font-size: 13px; color: #868686; line-height: 1.7; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">
2462
- If you have any questions about this cancellation, please contact {{clinicName}} through the MetaEstetics app.
2464
+ If you have any questions about this cancellation, please contact {{clinicName}} through the Metaesthetics app.
2463
2465
  </p>
2464
2466
 
2465
2467
  </td>
@@ -2473,7 +2475,7 @@ var appointmentCancelledTemplate = `
2473
2475
  <td>
2474
2476
  <p style="margin: 0 0 8px 0; font-size: 14px; font-weight: 500; color: #67574A; font-family: Georgia, 'Times New Roman', serif;">{{clinicName}}</p>
2475
2477
  <p style="margin: 0 0 16px 0; font-size: 13px; color: #868686; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">Premium Aesthetic Services</p>
2476
- <p style="margin: 0; font-size: 11px; color: #aaaaaa; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">This is an automated message from MetaEstetics. Please do not reply directly to this email.</p>
2478
+ <p style="margin: 0; font-size: 11px; color: #aaaaaa; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">This is an automated message from Metaesthetics. Please do not reply directly to this email.</p>
2477
2479
  </td>
2478
2480
  </tr>
2479
2481
  </table>
@@ -2516,7 +2518,7 @@ var appointmentRescheduledProposalTemplate = `
2516
2518
  <table role="presentation" width="100%" cellspacing="0" cellpadding="0" border="0">
2517
2519
  <tr>
2518
2520
  <td>
2519
- <h1 style="margin: 0; font-size: 24px; font-weight: 400; color: #67574A; letter-spacing: 2px; text-transform: uppercase; font-family: Georgia, 'Times New Roman', serif;">MetaEstetics</h1>
2521
+ <h1 style="margin: 0; font-size: 24px; font-weight: 400; color: #67574A; letter-spacing: 2px; text-transform: uppercase; font-family: Georgia, 'Times New Roman', serif;">Metaesthetics</h1>
2520
2522
  </td>
2521
2523
  </tr>
2522
2524
  </table>
@@ -2601,7 +2603,7 @@ var appointmentRescheduledProposalTemplate = `
2601
2603
  <td style="padding: 28px;">
2602
2604
  <p style="margin: 0 0 8px 0; font-size: 14px; font-weight: 600; color: #67574A; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">How to Respond</p>
2603
2605
  <p style="margin: 0; font-size: 14px; color: #555555; line-height: 1.6; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">
2604
- Open the MetaEstetics app to accept or decline this reschedule request. Your appointment will remain pending until you respond.
2606
+ Open the Metaesthetics app to accept or decline this reschedule request. Your appointment will remain pending until you respond.
2605
2607
  </p>
2606
2608
  </td>
2607
2609
  </tr>
@@ -2623,7 +2625,7 @@ var appointmentRescheduledProposalTemplate = `
2623
2625
  <td>
2624
2626
  <p style="margin: 0 0 8px 0; font-size: 14px; font-weight: 500; color: #67574A; font-family: Georgia, 'Times New Roman', serif;">{{clinicName}}</p>
2625
2627
  <p style="margin: 0 0 16px 0; font-size: 13px; color: #868686; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">Premium Aesthetic Services</p>
2626
- <p style="margin: 0; font-size: 11px; color: #aaaaaa; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">This is an automated message from MetaEstetics. Please do not reply directly to this email.</p>
2628
+ <p style="margin: 0; font-size: 11px; color: #aaaaaa; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">This is an automated message from Metaesthetics. Please do not reply directly to this email.</p>
2627
2629
  </td>
2628
2630
  </tr>
2629
2631
  </table>
@@ -2699,6 +2701,13 @@ var AppointmentMailingService = class extends BaseMailingService {
2699
2701
  return `Clinic Time - ${timezone}`;
2700
2702
  }
2701
2703
  }
2704
+ formatClinicAddress(appointment) {
2705
+ var _a;
2706
+ const loc = (_a = appointment.clinicInfo) == null ? void 0 : _a.location;
2707
+ if (!loc) return "";
2708
+ const parts = [loc.address, loc.postalCode, loc.city, loc.country].filter(Boolean);
2709
+ return parts.join(", ");
2710
+ }
2702
2711
  async sendAppointmentConfirmedEmail(data) {
2703
2712
  var _a, _b, _c, _d, _e;
2704
2713
  Logger.info(
@@ -2733,11 +2742,12 @@ var AppointmentMailingService = class extends BaseMailingService {
2733
2742
  ),
2734
2743
  appointmentTime: `${formattedTime} (${timezoneName})`,
2735
2744
  practitionerName: data.appointment.practitionerInfo.name,
2736
- clinicName: data.appointment.clinicInfo.name
2745
+ clinicName: data.appointment.clinicInfo.name,
2746
+ clinicAddress: this.formatClinicAddress(data.appointment)
2737
2747
  };
2738
2748
  const html = this.renderTemplate(patientAppointmentConfirmedTemplate, templateVariables);
2739
2749
  const subject = ((_a = data.options) == null ? void 0 : _a.customSubject) || "Your Appointment is Confirmed!";
2740
- const fromAddress = ((_b = data.options) == null ? void 0 : _b.fromAddress) || `MetaEstetics <no-reply@${((_c = data.options) == null ? void 0 : _c.mailgunDomain) || this.DEFAULT_MAILGUN_DOMAIN}>`;
2750
+ const fromAddress = ((_b = data.options) == null ? void 0 : _b.fromAddress) || `Metaesthetics <no-reply@${((_c = data.options) == null ? void 0 : _c.mailgunDomain) || this.DEFAULT_MAILGUN_DOMAIN}>`;
2741
2751
  const domainToSendFrom = ((_d = data.options) == null ? void 0 : _d.mailgunDomain) || this.DEFAULT_MAILGUN_DOMAIN;
2742
2752
  const mailgunSendData = {
2743
2753
  to: recipientEmail,
@@ -2803,7 +2813,7 @@ var AppointmentMailingService = class extends BaseMailingService {
2803
2813
  };
2804
2814
  const html = this.renderTemplate(clinicAppointmentRequestedTemplate, templateVariables);
2805
2815
  const subject = ((_b = data.options) == null ? void 0 : _b.customSubject) || "New Appointment Request Received";
2806
- const fromAddress = ((_c = data.options) == null ? void 0 : _c.fromAddress) || `MetaEstetics <no-reply@${((_d = data.options) == null ? void 0 : _d.mailgunDomain) || this.DEFAULT_MAILGUN_DOMAIN}>`;
2816
+ const fromAddress = ((_c = data.options) == null ? void 0 : _c.fromAddress) || `Metaesthetics <no-reply@${((_d = data.options) == null ? void 0 : _d.mailgunDomain) || this.DEFAULT_MAILGUN_DOMAIN}>`;
2807
2817
  const domainToSendFrom = ((_e = data.options) == null ? void 0 : _e.mailgunDomain) || this.DEFAULT_MAILGUN_DOMAIN;
2808
2818
  const mailgunSendData = {
2809
2819
  to: clinicEmail,
@@ -2901,6 +2911,7 @@ var AppointmentMailingService = class extends BaseMailingService {
2901
2911
  appointmentTime: `${formattedTime} (${timezoneName})`,
2902
2912
  practitionerName: data.appointment.practitionerInfo.name,
2903
2913
  clinicName: data.appointment.clinicInfo.name,
2914
+ clinicAddress: this.formatClinicAddress(data.appointment),
2904
2915
  cancelledByDisplay
2905
2916
  };
2906
2917
  const cancellationReason = data.cancellationReason || data.appointment.cancellationReason;
@@ -2916,7 +2927,7 @@ var AppointmentMailingService = class extends BaseMailingService {
2916
2927
  }
2917
2928
  html = this.renderTemplate(html, templateVariables);
2918
2929
  const subject = ((_a = data.options) == null ? void 0 : _a.customSubject) || `Appointment Cancelled: ${data.appointment.procedureInfo.name}`;
2919
- const fromAddress = ((_b = data.options) == null ? void 0 : _b.fromAddress) || `MetaEstetics <no-reply@${((_c = data.options) == null ? void 0 : _c.mailgunDomain) || this.DEFAULT_MAILGUN_DOMAIN}>`;
2930
+ const fromAddress = ((_b = data.options) == null ? void 0 : _b.fromAddress) || `Metaesthetics <no-reply@${((_c = data.options) == null ? void 0 : _c.mailgunDomain) || this.DEFAULT_MAILGUN_DOMAIN}>`;
2920
2931
  const domainToSendFrom = ((_d = data.options) == null ? void 0 : _d.mailgunDomain) || this.DEFAULT_MAILGUN_DOMAIN;
2921
2932
  const mailgunSendData = {
2922
2933
  to: recipientEmail,
@@ -3001,6 +3012,7 @@ var AppointmentMailingService = class extends BaseMailingService {
3001
3012
  procedureName: data.appointment.procedureInfo.name,
3002
3013
  practitionerName: data.appointment.practitionerInfo.name,
3003
3014
  clinicName: data.appointment.clinicInfo.name,
3015
+ clinicAddress: this.formatClinicAddress(data.appointment),
3004
3016
  previousDate: previousFormattedDate,
3005
3017
  previousTime: `${previousFormattedTime} (${previousTimezoneName})`,
3006
3018
  newDate: newFormattedDate,
@@ -3008,7 +3020,7 @@ var AppointmentMailingService = class extends BaseMailingService {
3008
3020
  };
3009
3021
  const html = this.renderTemplate(appointmentRescheduledProposalTemplate, templateVariables);
3010
3022
  const subject = ((_a = data.options) == null ? void 0 : _a.customSubject) || `Action Required: Reschedule Proposal for Your ${data.appointment.procedureInfo.name} Appointment`;
3011
- const fromAddress = ((_b = data.options) == null ? void 0 : _b.fromAddress) || `MetaEstetics <no-reply@${((_c = data.options) == null ? void 0 : _c.mailgunDomain) || this.DEFAULT_MAILGUN_DOMAIN}>`;
3023
+ const fromAddress = ((_b = data.options) == null ? void 0 : _b.fromAddress) || `Metaesthetics <no-reply@${((_c = data.options) == null ? void 0 : _c.mailgunDomain) || this.DEFAULT_MAILGUN_DOMAIN}>`;
3012
3024
  const domainToSendFrom = ((_d = data.options) == null ? void 0 : _d.mailgunDomain) || this.DEFAULT_MAILGUN_DOMAIN;
3013
3025
  const mailgunSendData = {
3014
3026
  to: recipientEmail,
@@ -12493,7 +12505,7 @@ var PractitionerInviteMailingService = class extends BaseMailingService {
12493
12505
  const contactName = data.clinic.contactName || "Clinic Administrator";
12494
12506
  const contactEmail = data.clinic.contactEmail;
12495
12507
  const subject = ((_b = data.options) == null ? void 0 : _b.customSubject) || this.DEFAULT_SUBJECT;
12496
- const fromAddress = ((_c = data.options) == null ? void 0 : _c.fromAddress) || `MetaEstetics <no-reply@${((_d = data.options) == null ? void 0 : _d.mailgunDomain) || this.DEFAULT_MAILGUN_DOMAIN}>`;
12508
+ const fromAddress = ((_c = data.options) == null ? void 0 : _c.fromAddress) || `Metaesthetics <no-reply@${((_d = data.options) == null ? void 0 : _d.mailgunDomain) || this.DEFAULT_MAILGUN_DOMAIN}>`;
12497
12509
  const currentYear = (/* @__PURE__ */ new Date()).getFullYear().toString();
12498
12510
  const practitionerName = `${data.practitioner.firstName} ${data.practitioner.lastName}`;
12499
12511
  const templateVariables = {
@@ -12653,7 +12665,7 @@ var PractitionerInviteMailingService = class extends BaseMailingService {
12653
12665
  Logger.warn(
12654
12666
  "[PractitionerInviteMailingService] No fromAddress provided, using default"
12655
12667
  );
12656
- mailgunConfig.fromAddress = `MetaEstetics <no-reply@${this.DEFAULT_MAILGUN_DOMAIN}>`;
12668
+ mailgunConfig.fromAddress = `Metaesthetics <no-reply@${this.DEFAULT_MAILGUN_DOMAIN}>`;
12657
12669
  }
12658
12670
  const emailData = {
12659
12671
  token: {
@@ -12799,7 +12811,7 @@ var existingPractitionerInvitationTemplate = `
12799
12811
  <body>
12800
12812
  <div class="container">
12801
12813
  <div class="header">
12802
- <div class="logo">MetaEstetics</div>
12814
+ <div class="logo">Metaesthetics</div>
12803
12815
  <p>Professional Medical Network</p>
12804
12816
  </div>
12805
12817
 
@@ -12843,12 +12855,12 @@ var existingPractitionerInvitationTemplate = `
12843
12855
 
12844
12856
  <div class="footer">
12845
12857
  <p>Best regards,<br>
12846
- <strong>The MetaEstetics Team</strong></p>
12858
+ <strong>The Metaesthetics Team</strong></p>
12847
12859
  <p>This invitation will expire on {{expirationDate}}. Please respond before this date.</p>
12848
12860
  <hr>
12849
12861
  <p style="font-size: 12px; color: #999;">
12850
- This is an automated message from MetaEstetics. If you received this email in error, please ignore it.
12851
- <br>\xA9 {{currentYear}} MetaEstetics. All rights reserved.
12862
+ This is an automated message from Metaesthetics. If you received this email in error, please ignore it.
12863
+ <br>\xA9 {{currentYear}} Metaesthetics. All rights reserved.
12852
12864
  </p>
12853
12865
  </div>
12854
12866
  </div>
@@ -13003,7 +13015,7 @@ var inviteAcceptedNotificationTemplate = `
13003
13015
  <body>
13004
13016
  <div class="container">
13005
13017
  <div class="header">
13006
- <div class="logo">MetaEstetics</div>
13018
+ <div class="logo">Metaesthetics</div>
13007
13019
  <p>Clinic Management System</p>
13008
13020
  </div>
13009
13021
 
@@ -13070,11 +13082,11 @@ var inviteAcceptedNotificationTemplate = `
13070
13082
 
13071
13083
  <div class="footer">
13072
13084
  <p>Best regards,<br>
13073
- <strong>The MetaEstetics Team</strong></p>
13085
+ <strong>The Metaesthetics Team</strong></p>
13074
13086
  <hr>
13075
13087
  <p style="font-size: 12px; color: #999;">
13076
- This is an automated notification from MetaEstetics.
13077
- <br>\xA9 {{currentYear}} MetaEstetics. All rights reserved.
13088
+ This is an automated notification from Metaesthetics.
13089
+ <br>\xA9 {{currentYear}} Metaesthetics. All rights reserved.
13078
13090
  </p>
13079
13091
  </div>
13080
13092
  </div>
@@ -13239,7 +13251,7 @@ var inviteRejectedNotificationTemplate = `
13239
13251
  <body>
13240
13252
  <div class="container">
13241
13253
  <div class="header">
13242
- <div class="logo">MetaEstetics</div>
13254
+ <div class="logo">Metaesthetics</div>
13243
13255
  <p>Clinic Management System</p>
13244
13256
  </div>
13245
13257
 
@@ -13307,11 +13319,11 @@ var inviteRejectedNotificationTemplate = `
13307
13319
 
13308
13320
  <div class="footer">
13309
13321
  <p>Best regards,<br>
13310
- <strong>The MetaEstetics Team</strong></p>
13322
+ <strong>The Metaesthetics Team</strong></p>
13311
13323
  <hr>
13312
13324
  <p style="font-size: 12px; color: #999;">
13313
- This is an automated notification from MetaEstetics.
13314
- <br>\xA9 {{currentYear}} MetaEstetics. All rights reserved.
13325
+ This is an automated notification from Metaesthetics.
13326
+ <br>\xA9 {{currentYear}} Metaesthetics. All rights reserved.
13315
13327
  </p>
13316
13328
  <p style="font-size: 12px; color: #999;">
13317
13329
  <strong>Note:</strong> Practitioner contact information is not shared without their consent.
@@ -13332,7 +13344,7 @@ var ExistingPractitionerInviteMailingService = class extends BaseMailingService
13332
13344
  constructor(firestore19, mailgunClient) {
13333
13345
  super(firestore19, mailgunClient);
13334
13346
  this.DEFAULT_MAILGUN_DOMAIN = "mg.metaesthetics.net";
13335
- this.DEFAULT_FROM_ADDRESS = "MetaEstetics <no-reply@mg.metaesthetics.net>";
13347
+ this.DEFAULT_FROM_ADDRESS = "Metaesthetics <no-reply@mg.metaesthetics.net>";
13336
13348
  }
13337
13349
  /**
13338
13350
  * Sends an invitation email to an existing practitioner
@@ -13761,7 +13773,7 @@ var patientInvitationTemplate = `
13761
13773
  <body>
13762
13774
  <div class="container">
13763
13775
  <div class="header">
13764
- <h1>Welcome to MetaEsthetics</h1>
13776
+ <h1>Welcome to Metaesthetics</h1>
13765
13777
  </div>
13766
13778
  <div class="content">
13767
13779
  <p>Hello {{patientName}},</p>
@@ -13788,7 +13800,7 @@ var patientInvitationTemplate = `
13788
13800
 
13789
13801
  <p>To create your account:</p>
13790
13802
  <ol>
13791
- <li>Download the <strong>MetaEsthetics</strong> app from the App Store (iOS) or Google Play Store (Android)</li>
13803
+ <li>Download the <strong>Metaesthetics</strong> app from the App Store (iOS) or Google Play Store (Android)</li>
13792
13804
  <li>Open the app and create an account using your email address</li>
13793
13805
  <li>When prompted, enter the token shown above</li>
13794
13806
  <li>Your profile will be automatically linked to your new account</li>
@@ -13798,7 +13810,7 @@ var patientInvitationTemplate = `
13798
13810
  </div>
13799
13811
  <div class="footer">
13800
13812
  <p>This is an automated message from {{clinicName}}. Please do not reply to this email.</p>
13801
- <p>&copy; {{currentYear}} MetaEsthetics. All rights reserved.</p>
13813
+ <p>&copy; {{currentYear}} Metaesthetics. All rights reserved.</p>
13802
13814
  </div>
13803
13815
  </div>
13804
13816
  </body>
@@ -13815,7 +13827,7 @@ var PatientInviteMailingService = class extends BaseMailingService {
13815
13827
  constructor(firestore19, mailgunClient) {
13816
13828
  super(firestore19, mailgunClient);
13817
13829
  this.DEFAULT_REGISTRATION_URL = "https://metaesthetics.net/patient/register";
13818
- this.DEFAULT_SUBJECT = "Claim Your Patient Profile - MetaEsthetics";
13830
+ this.DEFAULT_SUBJECT = "Claim Your Patient Profile - Metaesthetics";
13819
13831
  this.DEFAULT_MAILGUN_DOMAIN = "mg.metaesthetics.net";
13820
13832
  }
13821
13833
  /**
@@ -13840,7 +13852,7 @@ var PatientInviteMailingService = class extends BaseMailingService {
13840
13852
  const contactName = data.clinic.contactName || "Clinic Administrator";
13841
13853
  const contactEmail = data.clinic.contactEmail;
13842
13854
  const subject = ((_b = data.options) == null ? void 0 : _b.customSubject) || this.DEFAULT_SUBJECT;
13843
- const fromAddress = ((_c = data.options) == null ? void 0 : _c.fromAddress) || `MetaEsthetics <no-reply@${((_d = data.options) == null ? void 0 : _d.mailgunDomain) || this.DEFAULT_MAILGUN_DOMAIN}>`;
13855
+ const fromAddress = ((_c = data.options) == null ? void 0 : _c.fromAddress) || `Metaesthetics <no-reply@${((_d = data.options) == null ? void 0 : _d.mailgunDomain) || this.DEFAULT_MAILGUN_DOMAIN}>`;
13844
13856
  const currentYear = (/* @__PURE__ */ new Date()).getFullYear().toString();
13845
13857
  const patientName = `${data.patient.firstName} ${data.patient.lastName}`;
13846
13858
  const templateVariables = {
@@ -14010,7 +14022,7 @@ var PatientInviteMailingService = class extends BaseMailingService {
14010
14022
  Logger.warn(
14011
14023
  "[PatientInviteMailingService] No fromAddress provided, using default"
14012
14024
  );
14013
- mailgunConfig.fromAddress = `MetaEsthetics <no-reply@${this.DEFAULT_MAILGUN_DOMAIN}>`;
14025
+ mailgunConfig.fromAddress = `Metaesthetics <no-reply@${this.DEFAULT_MAILGUN_DOMAIN}>`;
14014
14026
  }
14015
14027
  const emailData = {
14016
14028
  token: {
@@ -14066,7 +14078,7 @@ var clinicWelcomeTemplate = `
14066
14078
  <head>
14067
14079
  <meta charset="UTF-8">
14068
14080
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
14069
- <title>Welcome to MetaEsthetics</title>
14081
+ <title>Welcome to Metaesthetics</title>
14070
14082
  <!--[if mso]>
14071
14083
  <noscript>
14072
14084
  <xml>
@@ -14089,7 +14101,7 @@ var clinicWelcomeTemplate = `
14089
14101
  <table role="presentation" width="100%" cellspacing="0" cellpadding="0" border="0">
14090
14102
  <tr>
14091
14103
  <td>
14092
- <h1 style="margin: 0; font-size: 24px; font-weight: 400; color: #67574A; letter-spacing: 2px; text-transform: uppercase; font-family: Georgia, 'Times New Roman', serif;">MetaEsthetics</h1>
14104
+ <h1 style="margin: 0; font-size: 24px; font-weight: 400; color: #67574A; letter-spacing: 2px; text-transform: uppercase; font-family: Georgia, 'Times New Roman', serif;">Metaesthetics</h1>
14093
14105
  </td>
14094
14106
  </tr>
14095
14107
  </table>
@@ -14102,7 +14114,7 @@ var clinicWelcomeTemplate = `
14102
14114
  <table role="presentation" width="100%" cellspacing="0" cellpadding="0" border="0" style="background-color: #00BB38;">
14103
14115
  <tr>
14104
14116
  <td style="padding: 20px 48px;">
14105
- <p style="margin: 0; font-size: 13px; font-weight: 600; color: #ffffff; letter-spacing: 1.5px; text-transform: uppercase; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">Welcome to MetaEsthetics</p>
14117
+ <p style="margin: 0; font-size: 13px; font-weight: 600; color: #ffffff; letter-spacing: 1.5px; text-transform: uppercase; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">Welcome to Metaesthetics</p>
14106
14118
  </td>
14107
14119
  </tr>
14108
14120
  </table>
@@ -14119,7 +14131,7 @@ var clinicWelcomeTemplate = `
14119
14131
  </p>
14120
14132
 
14121
14133
  <p style="margin: 0 0 32px 0; font-size: 16px; color: #555555; line-height: 1.7; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">
14122
- Thank you for registering <strong style="color: #67574A;">{{clinicGroupName}}</strong> with MetaEsthetics. Your account has been successfully created and you're now ready to start managing your aesthetic practice.
14134
+ Thank you for registering <strong style="color: #67574A;">{{clinicGroupName}}</strong> with Metaesthetics. Your account has been successfully created and you're now ready to start managing your aesthetic practice.
14123
14135
  </p>
14124
14136
 
14125
14137
  <!-- Account Details Card -->
@@ -14242,7 +14254,7 @@ var clinicWelcomeTemplate = `
14242
14254
 
14243
14255
  <!-- Thank You -->
14244
14256
  <p style="margin: 0; font-size: 14px; color: #868686; line-height: 1.7; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">
14245
- Thank you for choosing MetaEsthetics. We look forward to supporting your practice.
14257
+ Thank you for choosing Metaesthetics. We look forward to supporting your practice.
14246
14258
  </p>
14247
14259
 
14248
14260
  </td>
@@ -14254,9 +14266,9 @@ var clinicWelcomeTemplate = `
14254
14266
  <table role="presentation" width="100%" cellspacing="0" cellpadding="0" border="0">
14255
14267
  <tr>
14256
14268
  <td>
14257
- <p style="margin: 0 0 8px 0; font-size: 14px; font-weight: 500; color: #67574A; font-family: Georgia, 'Times New Roman', serif;">MetaEsthetics</p>
14269
+ <p style="margin: 0 0 8px 0; font-size: 14px; font-weight: 500; color: #67574A; font-family: Georgia, 'Times New Roman', serif;">Metaesthetics</p>
14258
14270
  <p style="margin: 0 0 16px 0; font-size: 13px; color: #868686; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">Premium Aesthetic Services Platform</p>
14259
- <p style="margin: 0; font-size: 11px; color: #aaaaaa; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">This is an automated message from MetaEsthetics. Please do not reply directly to this email.</p>
14271
+ <p style="margin: 0; font-size: 11px; color: #aaaaaa; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">This is an automated message from Metaesthetics. Please do not reply directly to this email.</p>
14260
14272
  </td>
14261
14273
  </tr>
14262
14274
  </table>
@@ -14269,7 +14281,7 @@ var clinicWelcomeTemplate = `
14269
14281
  <table role="presentation" width="600" cellspacing="0" cellpadding="0" border="0" style="max-width: 600px;">
14270
14282
  <tr>
14271
14283
  <td style="padding: 24px 48px; text-align: center;">
14272
- <p style="margin: 0; font-size: 11px; color: #aaaaaa; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">&copy; {{currentYear}} MetaEsthetics. All rights reserved.</p>
14284
+ <p style="margin: 0; font-size: 11px; color: #aaaaaa; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;">&copy; {{currentYear}} Metaesthetics. All rights reserved.</p>
14273
14285
  </td>
14274
14286
  </tr>
14275
14287
  </table>
@@ -14292,7 +14304,7 @@ var ClinicWelcomeMailingService = class extends BaseMailingService {
14292
14304
  super(firestore19, mailgunClient);
14293
14305
  this.DEFAULT_DASHBOARD_URL = "https://app.metaesthetics.net/dashboard";
14294
14306
  this.DEFAULT_SUPPORT_EMAIL = "support@metaesthetics.net";
14295
- this.DEFAULT_SUBJECT = "Welcome to MetaEsthetics - Your Clinic Registration is Complete";
14307
+ this.DEFAULT_SUBJECT = "Welcome to Metaesthetics - Your Clinic Registration is Complete";
14296
14308
  this.DEFAULT_MAILGUN_DOMAIN = "mg.metaesthetics.net";
14297
14309
  }
14298
14310
  /**
@@ -14316,7 +14328,7 @@ var ClinicWelcomeMailingService = class extends BaseMailingService {
14316
14328
  const dashboardUrl = ((_a = data.options) == null ? void 0 : _a.dashboardUrl) || this.DEFAULT_DASHBOARD_URL;
14317
14329
  const supportEmail = ((_b = data.options) == null ? void 0 : _b.supportEmail) || this.DEFAULT_SUPPORT_EMAIL;
14318
14330
  const subject = ((_c = data.options) == null ? void 0 : _c.customSubject) || this.DEFAULT_SUBJECT;
14319
- const fromAddress = ((_d = data.options) == null ? void 0 : _d.fromAddress) || `MetaEsthetics <no-reply@${((_e = data.options) == null ? void 0 : _e.mailgunDomain) || this.DEFAULT_MAILGUN_DOMAIN}>`;
14331
+ const fromAddress = ((_d = data.options) == null ? void 0 : _d.fromAddress) || `Metaesthetics <no-reply@${((_e = data.options) == null ? void 0 : _e.mailgunDomain) || this.DEFAULT_MAILGUN_DOMAIN}>`;
14320
14332
  const currentYear = (/* @__PURE__ */ new Date()).getFullYear().toString();
14321
14333
  const templateVariables = {
14322
14334
  adminName: data.admin.name,
@@ -14417,7 +14429,7 @@ var ClinicWelcomeMailingService = class extends BaseMailingService {
14417
14429
  Logger.warn(
14418
14430
  "[ClinicWelcomeMailingService] No fromAddress provided, using default"
14419
14431
  );
14420
- mailgunConfig.fromAddress = `MetaEsthetics <no-reply@${this.DEFAULT_MAILGUN_DOMAIN}>`;
14432
+ mailgunConfig.fromAddress = `Metaesthetics <no-reply@${this.DEFAULT_MAILGUN_DOMAIN}>`;
14421
14433
  }
14422
14434
  const emailData = {
14423
14435
  admin: {
@@ -1355,6 +1355,8 @@ interface PractitionerCertification {
1355
1355
  issueDate: Timestamp | Date;
1356
1356
  expiryDate?: Timestamp | Date | null;
1357
1357
  verificationStatus: "pending" | "verified" | "rejected";
1358
+ diploma?: string;
1359
+ diplomaNumber?: string;
1358
1360
  }
1359
1361
  /**
1360
1362
  * Interfejs za radno vreme zdravstvenog radnika u klinici
@@ -1355,6 +1355,8 @@ interface PractitionerCertification {
1355
1355
  issueDate: Timestamp | Date;
1356
1356
  expiryDate?: Timestamp | Date | null;
1357
1357
  verificationStatus: "pending" | "verified" | "rejected";
1358
+ diploma?: string;
1359
+ diplomaNumber?: string;
1358
1360
  }
1359
1361
  /**
1360
1362
  * Interfejs za radno vreme zdravstvenog radnika u klinici
package/dist/index.d.mts CHANGED
@@ -2020,6 +2020,8 @@ interface PractitionerCertification {
2020
2020
  issueDate: Timestamp | Date;
2021
2021
  expiryDate?: Timestamp | Date | null;
2022
2022
  verificationStatus: "pending" | "verified" | "rejected";
2023
+ diploma?: string;
2024
+ diplomaNumber?: string;
2023
2025
  }
2024
2026
  /**
2025
2027
  * Interfejs za radno vreme zdravstvenog radnika u klinici
package/dist/index.d.ts CHANGED
@@ -2020,6 +2020,8 @@ interface PractitionerCertification {
2020
2020
  issueDate: Timestamp | Date;
2021
2021
  expiryDate?: Timestamp | Date | null;
2022
2022
  verificationStatus: "pending" | "verified" | "rejected";
2023
+ diploma?: string;
2024
+ diplomaNumber?: string;
2023
2025
  }
2024
2026
  /**
2025
2027
  * Interfejs za radno vreme zdravstvenog radnika u klinici
package/dist/index.js CHANGED
@@ -3929,6 +3929,12 @@ var billingPerZoneSchema = import_zod3.z.object({
3929
3929
  });
3930
3930
  var finalBillingSchema = import_zod3.z.object({
3931
3931
  subtotalAll: import_zod3.z.number().min(0, "Subtotal all must be non-negative"),
3932
+ discount: import_zod3.z.object({
3933
+ type: import_zod3.z.enum(["percentage", "fixed"]),
3934
+ value: import_zod3.z.number().min(0),
3935
+ amount: import_zod3.z.number().min(0)
3936
+ }).optional(),
3937
+ discountedSubtotal: import_zod3.z.number().min(0).optional(),
3932
3938
  taxRate: import_zod3.z.number().min(0).max(1, "Tax rate must be between 0 and 1"),
3933
3939
  taxPrice: import_zod3.z.number().min(0, "Tax price must be non-negative"),
3934
3940
  finalPrice: import_zod3.z.number().min(0, "Final price must be non-negative"),
@@ -12703,7 +12709,9 @@ var practitionerCertificationSchema = import_zod20.z.object({
12703
12709
  issuingAuthority: import_zod20.z.string().min(2).max(100),
12704
12710
  issueDate: import_zod20.z.instanceof(import_firestore35.Timestamp).or(import_zod20.z.date()),
12705
12711
  expiryDate: import_zod20.z.instanceof(import_firestore35.Timestamp).or(import_zod20.z.date()).optional().nullable(),
12706
- verificationStatus: import_zod20.z.enum(["pending", "verified", "rejected"])
12712
+ verificationStatus: import_zod20.z.enum(["pending", "verified", "rejected"]),
12713
+ diploma: import_zod20.z.string().max(200).optional(),
12714
+ diplomaNumber: import_zod20.z.string().max(100).optional()
12707
12715
  });
12708
12716
  var timeSlotSchema = import_zod20.z.object({
12709
12717
  start: import_zod20.z.string().regex(/^([01]\d|2[0-3]):([0-5]\d)$/, "Invalid time format"),
package/dist/index.mjs CHANGED
@@ -3782,6 +3782,12 @@ var billingPerZoneSchema = z3.object({
3782
3782
  });
3783
3783
  var finalBillingSchema = z3.object({
3784
3784
  subtotalAll: z3.number().min(0, "Subtotal all must be non-negative"),
3785
+ discount: z3.object({
3786
+ type: z3.enum(["percentage", "fixed"]),
3787
+ value: z3.number().min(0),
3788
+ amount: z3.number().min(0)
3789
+ }).optional(),
3790
+ discountedSubtotal: z3.number().min(0).optional(),
3785
3791
  taxRate: z3.number().min(0).max(1, "Tax rate must be between 0 and 1"),
3786
3792
  taxPrice: z3.number().min(0, "Tax price must be non-negative"),
3787
3793
  finalPrice: z3.number().min(0, "Final price must be non-negative"),
@@ -12724,7 +12730,9 @@ var practitionerCertificationSchema = z20.object({
12724
12730
  issuingAuthority: z20.string().min(2).max(100),
12725
12731
  issueDate: z20.instanceof(Timestamp17).or(z20.date()),
12726
12732
  expiryDate: z20.instanceof(Timestamp17).or(z20.date()).optional().nullable(),
12727
- verificationStatus: z20.enum(["pending", "verified", "rejected"])
12733
+ verificationStatus: z20.enum(["pending", "verified", "rejected"]),
12734
+ diploma: z20.string().max(200).optional(),
12735
+ diplomaNumber: z20.string().max(100).optional()
12728
12736
  });
12729
12737
  var timeSlotSchema = z20.object({
12730
12738
  start: z20.string().regex(/^([01]\d|2[0-3]):([0-5]\d)$/, "Invalid time format"),
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@blackcode_sa/metaestetics-api",
3
3
  "private": false,
4
- "version": "1.15.3",
4
+ "version": "1.15.5",
5
5
  "description": "Firebase authentication service with anonymous upgrade support",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.mjs",