@starklabs/forge 1.3.24-beta.0 → 1.3.24-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/js/auth/builtin/auth.collection.d.ts.map +1 -1
- package/dist/js/auth/builtin/auth.collection.js +10 -0
- package/dist/js/auth/builtin/auth.collection.js.map +1 -1
- package/dist/js/auth/utils/handleGetToken.d.ts.map +1 -1
- package/dist/js/auth/utils/handleGetToken.js +2 -2
- package/dist/js/auth/utils/handleGetToken.js.map +1 -1
- package/dist/js/auth/utils/sendOTP.d.ts.map +1 -1
- package/dist/js/auth/utils/sendOTP.js +15 -14
- package/dist/js/auth/utils/sendOTP.js.map +1 -1
- package/dist/js/config/auth.envs.d.ts +4 -0
- package/dist/js/config/auth.envs.d.ts.map +1 -0
- package/dist/js/config/auth.envs.js +79 -0
- package/dist/js/config/auth.envs.js.map +1 -0
- package/dist/js/config/email.envs.d.ts +4 -0
- package/dist/js/config/email.envs.d.ts.map +1 -0
- package/dist/js/config/email.envs.js +50 -0
- package/dist/js/config/email.envs.js.map +1 -0
- package/dist/js/config/envs.d.ts.map +1 -1
- package/dist/js/config/envs.js +6 -76
- package/dist/js/config/envs.js.map +1 -1
- package/dist/js/config/sendEmail.d.ts.map +1 -1
- package/dist/js/config/sendEmail.js +3 -1
- package/dist/js/config/sendEmail.js.map +1 -1
- package/dist/js/crud/read.d.ts.map +1 -1
- package/dist/js/crud/read.js +3 -4
- package/dist/js/crud/read.js.map +1 -1
- package/dist/js/crud/readAll.d.ts.map +1 -1
- package/dist/js/crud/readAll.js.map +1 -1
- package/dist/js/crud/utils/runActions.d.ts +2 -3
- package/dist/js/crud/utils/runActions.d.ts.map +1 -1
- package/dist/js/crud/utils/runActions.js +14 -4
- package/dist/js/crud/utils/runActions.js.map +1 -1
- package/dist/js/email/index.d.ts +4 -0
- package/dist/js/email/index.d.ts.map +1 -0
- package/dist/js/email/index.js +180 -0
- package/dist/js/email/index.js.map +1 -0
- package/dist/js/email/templates/account.created.d.ts +4 -0
- package/dist/js/email/templates/account.created.d.ts.map +1 -0
- package/dist/js/email/templates/account.created.email.d.ts +4 -0
- package/dist/js/email/templates/account.created.email.d.ts.map +1 -0
- package/dist/js/email/templates/account.created.email.js +165 -0
- package/dist/js/email/templates/account.created.email.js.map +1 -0
- package/dist/js/email/templates/account.created.js +122 -0
- package/dist/js/email/templates/account.created.js.map +1 -0
- package/dist/js/email/templates/account.deleted.d.ts +4 -0
- package/dist/js/email/templates/account.deleted.d.ts.map +1 -0
- package/dist/js/email/templates/account.deleted.js +111 -0
- package/dist/js/email/templates/account.deleted.js.map +1 -0
- package/dist/js/email/templates/account.updated.d.ts +4 -0
- package/dist/js/email/templates/account.updated.d.ts.map +1 -0
- package/dist/js/email/templates/account.updated.js +128 -0
- package/dist/js/email/templates/account.updated.js.map +1 -0
- package/dist/js/email/templates/announcement.d.ts +4 -0
- package/dist/js/email/templates/announcement.d.ts.map +1 -0
- package/dist/js/email/templates/announcement.js +122 -0
- package/dist/js/email/templates/announcement.js.map +1 -0
- package/dist/js/email/templates/api.key.created.d.ts +4 -0
- package/dist/js/email/templates/api.key.created.d.ts.map +1 -0
- package/dist/js/email/templates/api.key.created.js +159 -0
- package/dist/js/email/templates/api.key.created.js.map +1 -0
- package/dist/js/email/templates/api.key.revoked.d.ts +4 -0
- package/dist/js/email/templates/api.key.revoked.d.ts.map +1 -0
- package/dist/js/email/templates/api.key.revoked.js +134 -0
- package/dist/js/email/templates/api.key.revoked.js.map +1 -0
- package/dist/js/email/templates/contact.form.d.ts +4 -0
- package/dist/js/email/templates/contact.form.d.ts.map +1 -0
- package/dist/js/email/templates/contact.form.js +134 -0
- package/dist/js/email/templates/contact.form.js.map +1 -0
- package/dist/js/email/templates/daily.report.d.ts +4 -0
- package/dist/js/email/templates/daily.report.d.ts.map +1 -0
- package/dist/js/email/templates/daily.report.js +143 -0
- package/dist/js/email/templates/daily.report.js.map +1 -0
- package/dist/js/email/templates/email.changed.d.ts +4 -0
- package/dist/js/email/templates/email.changed.d.ts.map +1 -0
- package/dist/js/email/templates/email.changed.js +122 -0
- package/dist/js/email/templates/email.changed.js.map +1 -0
- package/dist/js/email/templates/feedback.d.ts +4 -0
- package/dist/js/email/templates/feedback.d.ts.map +1 -0
- package/dist/js/email/templates/feedback.js +136 -0
- package/dist/js/email/templates/feedback.js.map +1 -0
- package/dist/js/email/templates/index.d.ts +46 -0
- package/dist/js/email/templates/index.d.ts.map +1 -0
- package/dist/js/email/templates/index.js +46 -0
- package/dist/js/email/templates/index.js.map +1 -0
- package/dist/js/email/templates/invoice.d.ts +4 -0
- package/dist/js/email/templates/invoice.d.ts.map +1 -0
- package/dist/js/email/templates/invoice.js +147 -0
- package/dist/js/email/templates/invoice.js.map +1 -0
- package/dist/js/email/templates/login.alert.d.ts +4 -0
- package/dist/js/email/templates/login.alert.d.ts.map +1 -0
- package/dist/js/email/templates/login.alert.js +147 -0
- package/dist/js/email/templates/login.alert.js.map +1 -0
- package/dist/js/email/templates/magic.link.d.ts +4 -0
- package/dist/js/email/templates/magic.link.d.ts.map +1 -0
- package/dist/js/email/templates/magic.link.js +126 -0
- package/dist/js/email/templates/magic.link.js.map +1 -0
- package/dist/js/email/templates/maintenance.d.ts +4 -0
- package/dist/js/email/templates/maintenance.d.ts.map +1 -0
- package/dist/js/email/templates/maintenance.js +132 -0
- package/dist/js/email/templates/maintenance.js.map +1 -0
- package/dist/js/email/templates/member.added.d.ts +4 -0
- package/dist/js/email/templates/member.added.d.ts.map +1 -0
- package/dist/js/email/templates/member.added.js +122 -0
- package/dist/js/email/templates/member.added.js.map +1 -0
- package/dist/js/email/templates/member.removed.d.ts +4 -0
- package/dist/js/email/templates/member.removed.d.ts.map +1 -0
- package/dist/js/email/templates/member.removed.js +122 -0
- package/dist/js/email/templates/member.removed.js.map +1 -0
- package/dist/js/email/templates/mention.d.ts +4 -0
- package/dist/js/email/templates/mention.d.ts.map +1 -0
- package/dist/js/email/templates/mention.js +134 -0
- package/dist/js/email/templates/mention.js.map +1 -0
- package/dist/js/email/templates/monthly.report.d.ts +4 -0
- package/dist/js/email/templates/monthly.report.d.ts.map +1 -0
- package/dist/js/email/templates/monthly.report.js +143 -0
- package/dist/js/email/templates/monthly.report.js.map +1 -0
- package/dist/js/email/templates/new.comment.d.ts +4 -0
- package/dist/js/email/templates/new.comment.d.ts.map +1 -0
- package/dist/js/email/templates/new.comment.js +134 -0
- package/dist/js/email/templates/new.comment.js.map +1 -0
- package/dist/js/email/templates/new.device.login.d.ts +4 -0
- package/dist/js/email/templates/new.device.login.d.ts.map +1 -0
- package/dist/js/email/templates/new.device.login.js +147 -0
- package/dist/js/email/templates/new.device.login.js.map +1 -0
- package/dist/js/email/templates/new.message.d.ts +4 -0
- package/dist/js/email/templates/new.message.d.ts.map +1 -0
- package/dist/js/email/templates/new.message.js +134 -0
- package/dist/js/email/templates/new.message.js.map +1 -0
- package/dist/js/email/templates/notification.d.ts +4 -0
- package/dist/js/email/templates/notification.d.ts.map +1 -0
- package/dist/js/email/templates/notification.js +122 -0
- package/dist/js/email/templates/notification.js.map +1 -0
- package/dist/js/email/templates/order.cancelled.d.ts +4 -0
- package/dist/js/email/templates/order.cancelled.d.ts.map +1 -0
- package/dist/js/email/templates/order.cancelled.js +132 -0
- package/dist/js/email/templates/order.cancelled.js.map +1 -0
- package/dist/js/email/templates/order.confirmation.d.ts +4 -0
- package/dist/js/email/templates/order.confirmation.d.ts.map +1 -0
- package/dist/js/email/templates/order.confirmation.js +143 -0
- package/dist/js/email/templates/order.confirmation.js.map +1 -0
- package/dist/js/email/templates/order.delivered.d.ts +4 -0
- package/dist/js/email/templates/order.delivered.d.ts.map +1 -0
- package/dist/js/email/templates/order.delivered.js +122 -0
- package/dist/js/email/templates/order.delivered.js.map +1 -0
- package/dist/js/email/templates/order.shipped.d.ts +4 -0
- package/dist/js/email/templates/order.shipped.d.ts.map +1 -0
- package/dist/js/email/templates/order.shipped.js +143 -0
- package/dist/js/email/templates/order.shipped.js.map +1 -0
- package/dist/js/email/templates/organization.invitation.d.ts +4 -0
- package/dist/js/email/templates/organization.invitation.d.ts.map +1 -0
- package/dist/js/email/templates/organization.invitation.js +126 -0
- package/dist/js/email/templates/organization.invitation.js.map +1 -0
- package/dist/js/email/templates/otp.verfication.d.ts +4 -0
- package/dist/js/email/templates/otp.verfication.d.ts.map +1 -0
- package/dist/js/email/templates/otp.verfication.js +117 -0
- package/dist/js/email/templates/otp.verfication.js.map +1 -0
- package/dist/js/email/templates/password.changed.d.ts +4 -0
- package/dist/js/email/templates/password.changed.d.ts.map +1 -0
- package/dist/js/email/templates/password.changed.js +155 -0
- package/dist/js/email/templates/password.changed.js.map +1 -0
- package/dist/js/email/templates/password.expiring.d.ts +4 -0
- package/dist/js/email/templates/password.expiring.d.ts.map +1 -0
- package/dist/js/email/templates/password.expiring.js +122 -0
- package/dist/js/email/templates/password.expiring.js.map +1 -0
- package/dist/js/email/templates/password.reset.d.ts +4 -0
- package/dist/js/email/templates/password.reset.d.ts.map +1 -0
- package/dist/js/email/templates/password.reset.js +138 -0
- package/dist/js/email/templates/password.reset.js.map +1 -0
- package/dist/js/email/templates/payment.failed.d.ts +4 -0
- package/dist/js/email/templates/payment.failed.d.ts.map +1 -0
- package/dist/js/email/templates/payment.failed.js +155 -0
- package/dist/js/email/templates/payment.failed.js.map +1 -0
- package/dist/js/email/templates/payment.success.d.ts +4 -0
- package/dist/js/email/templates/payment.success.d.ts.map +1 -0
- package/dist/js/email/templates/payment.success.js +143 -0
- package/dist/js/email/templates/payment.success.js.map +1 -0
- package/dist/js/email/templates/receipt.d.ts +4 -0
- package/dist/js/email/templates/receipt.d.ts.map +1 -0
- package/dist/js/email/templates/receipt.js +147 -0
- package/dist/js/email/templates/receipt.js.map +1 -0
- package/dist/js/email/templates/reminder.d.ts +4 -0
- package/dist/js/email/templates/reminder.d.ts.map +1 -0
- package/dist/js/email/templates/reminder.js +122 -0
- package/dist/js/email/templates/reminder.js.map +1 -0
- package/dist/js/email/templates/security.alert.d.ts +4 -0
- package/dist/js/email/templates/security.alert.d.ts.map +1 -0
- package/dist/js/email/templates/security.alert.js +155 -0
- package/dist/js/email/templates/security.alert.js.map +1 -0
- package/dist/js/email/templates/subscription.cancelled.d.ts +4 -0
- package/dist/js/email/templates/subscription.cancelled.d.ts.map +1 -0
- package/dist/js/email/templates/subscription.cancelled.js +122 -0
- package/dist/js/email/templates/subscription.cancelled.js.map +1 -0
- package/dist/js/email/templates/subscription.created.d.ts +4 -0
- package/dist/js/email/templates/subscription.created.d.ts.map +1 -0
- package/dist/js/email/templates/subscription.created.js +143 -0
- package/dist/js/email/templates/subscription.created.js.map +1 -0
- package/dist/js/email/templates/subscription.renewed.d.ts +4 -0
- package/dist/js/email/templates/subscription.renewed.d.ts.map +1 -0
- package/dist/js/email/templates/subscription.renewed.js +143 -0
- package/dist/js/email/templates/subscription.renewed.js.map +1 -0
- package/dist/js/email/templates/support.ticket.d.ts +4 -0
- package/dist/js/email/templates/support.ticket.d.ts.map +1 -0
- package/dist/js/email/templates/support.ticket.js +143 -0
- package/dist/js/email/templates/support.ticket.js.map +1 -0
- package/dist/js/email/templates/team.invitation.d.ts +4 -0
- package/dist/js/email/templates/team.invitation.d.ts.map +1 -0
- package/dist/js/email/templates/team.invitation.js +126 -0
- package/dist/js/email/templates/team.invitation.js.map +1 -0
- package/dist/js/email/templates/trial.ending.d.ts +4 -0
- package/dist/js/email/templates/trial.ending.d.ts.map +1 -0
- package/dist/js/email/templates/trial.ending.js +122 -0
- package/dist/js/email/templates/trial.ending.js.map +1 -0
- package/dist/js/email/templates/two.factor.code.d.ts +4 -0
- package/dist/js/email/templates/two.factor.code.d.ts.map +1 -0
- package/dist/js/email/templates/two.factor.code.js +121 -0
- package/dist/js/email/templates/two.factor.code.js.map +1 -0
- package/dist/js/email/templates/verify.email.d.ts +4 -0
- package/dist/js/email/templates/verify.email.d.ts.map +1 -0
- package/dist/js/email/templates/verify.email.js +126 -0
- package/dist/js/email/templates/verify.email.js.map +1 -0
- package/dist/js/email/templates/weekly.report.d.ts +4 -0
- package/dist/js/email/templates/weekly.report.d.ts.map +1 -0
- package/dist/js/email/templates/weekly.report.js +143 -0
- package/dist/js/email/templates/weekly.report.js.map +1 -0
- package/dist/js/email/templates/welcome.d.ts +4 -0
- package/dist/js/email/templates/welcome.d.ts.map +1 -0
- package/dist/js/email/templates/welcome.email.d.ts +4 -0
- package/dist/js/email/templates/welcome.email.d.ts.map +1 -0
- package/dist/js/email/templates/welcome.email.js +417 -0
- package/dist/js/email/templates/welcome.email.js.map +1 -0
- package/dist/js/email/templates/welcome.js +122 -0
- package/dist/js/email/templates/welcome.js.map +1 -0
- package/dist/js/email/utils/auto-fields.d.ts +68 -0
- package/dist/js/email/utils/auto-fields.d.ts.map +1 -0
- package/dist/js/email/utils/auto-fields.js +232 -0
- package/dist/js/email/utils/auto-fields.js.map +1 -0
- package/dist/js/email/utils/auto-fields.type.d.ts +18 -0
- package/dist/js/email/utils/auto-fields.type.d.ts.map +1 -0
- package/dist/js/email/utils/auto-fields.type.js +2 -0
- package/dist/js/email/utils/auto-fields.type.js.map +1 -0
- package/dist/js/email/utils/emailTemplates.d.ts +2 -0
- package/dist/js/email/utils/emailTemplates.d.ts.map +1 -0
- package/dist/js/email/utils/emailTemplates.js +49 -0
- package/dist/js/email/utils/emailTemplates.js.map +1 -0
- package/dist/js/email/utils/handleEmailTemplateConfig.d.ts +4 -0
- package/dist/js/email/utils/handleEmailTemplateConfig.d.ts.map +1 -0
- package/dist/js/email/utils/handleEmailTemplateConfig.js +47 -0
- package/dist/js/email/utils/handleEmailTemplateConfig.js.map +1 -0
- package/dist/js/types/ActionHandler.d.ts +49 -56
- package/dist/js/types/ActionHandler.d.ts.map +1 -1
- package/dist/js/types/Constructor.d.ts +3 -1
- package/dist/js/types/Constructor.d.ts.map +1 -1
- package/dist/js/types/EmailActionTemplate.d.ts +52 -0
- package/dist/js/types/EmailActionTemplate.d.ts.map +1 -0
- package/dist/js/types/EmailActionTemplate.js +2 -0
- package/dist/js/types/EmailActionTemplate.js.map +1 -0
- package/dist/js/types/Route.d.ts +1 -1
- package/dist/js/types/Route.d.ts.map +1 -1
- package/dist/js/types/email/account.created.type.d.ts +10 -0
- package/dist/js/types/email/account.created.type.d.ts.map +1 -0
- package/dist/js/types/email/account.created.type.js +2 -0
- package/dist/js/types/email/account.created.type.js.map +1 -0
- package/dist/js/types/email/account.deleted.type.d.ts +10 -0
- package/dist/js/types/email/account.deleted.type.d.ts.map +1 -0
- package/dist/js/types/email/account.deleted.type.js +2 -0
- package/dist/js/types/email/account.deleted.type.js.map +1 -0
- package/dist/js/types/email/account.updated.type.d.ts +12 -0
- package/dist/js/types/email/account.updated.type.d.ts.map +1 -0
- package/dist/js/types/email/account.updated.type.js +2 -0
- package/dist/js/types/email/account.updated.type.js.map +1 -0
- package/dist/js/types/email/announcement.type.d.ts +13 -0
- package/dist/js/types/email/announcement.type.d.ts.map +1 -0
- package/dist/js/types/email/announcement.type.js +2 -0
- package/dist/js/types/email/announcement.type.js.map +1 -0
- package/dist/js/types/email/api.key.created.type.d.ts +14 -0
- package/dist/js/types/email/api.key.created.type.d.ts.map +1 -0
- package/dist/js/types/email/api.key.created.type.js +2 -0
- package/dist/js/types/email/api.key.created.type.js.map +1 -0
- package/dist/js/types/email/api.key.revoked.type.d.ts +14 -0
- package/dist/js/types/email/api.key.revoked.type.d.ts.map +1 -0
- package/dist/js/types/email/api.key.revoked.type.js +2 -0
- package/dist/js/types/email/api.key.revoked.type.js.map +1 -0
- package/dist/js/types/email/contact.form.type.d.ts +11 -0
- package/dist/js/types/email/contact.form.type.d.ts.map +1 -0
- package/dist/js/types/email/contact.form.type.js +2 -0
- package/dist/js/types/email/contact.form.type.js.map +1 -0
- package/dist/js/types/email/daily.report.type.d.ts +14 -0
- package/dist/js/types/email/daily.report.type.d.ts.map +1 -0
- package/dist/js/types/email/daily.report.type.js +2 -0
- package/dist/js/types/email/daily.report.type.js.map +1 -0
- package/dist/js/types/email/email.changed.type.d.ts +12 -0
- package/dist/js/types/email/email.changed.type.d.ts.map +1 -0
- package/dist/js/types/email/email.changed.type.js +2 -0
- package/dist/js/types/email/email.changed.type.js.map +1 -0
- package/dist/js/types/email/feedback.type.d.ts +11 -0
- package/dist/js/types/email/feedback.type.d.ts.map +1 -0
- package/dist/js/types/email/feedback.type.js +2 -0
- package/dist/js/types/email/feedback.type.js.map +1 -0
- package/dist/js/types/email/index.d.ts +46 -0
- package/dist/js/types/email/index.d.ts.map +1 -0
- package/dist/js/types/email/index.js +2 -0
- package/dist/js/types/email/index.js.map +1 -0
- package/dist/js/types/email/invoice.type.d.ts +14 -0
- package/dist/js/types/email/invoice.type.d.ts.map +1 -0
- package/dist/js/types/email/invoice.type.js +2 -0
- package/dist/js/types/email/invoice.type.js.map +1 -0
- package/dist/js/types/email/login.alert.type.d.ts +12 -0
- package/dist/js/types/email/login.alert.type.d.ts.map +1 -0
- package/dist/js/types/email/login.alert.type.js +2 -0
- package/dist/js/types/email/login.alert.type.js.map +1 -0
- package/dist/js/types/email/magic.link.type.d.ts +11 -0
- package/dist/js/types/email/magic.link.type.d.ts.map +1 -0
- package/dist/js/types/email/magic.link.type.js +2 -0
- package/dist/js/types/email/magic.link.type.js.map +1 -0
- package/dist/js/types/email/maintenance.type.d.ts +13 -0
- package/dist/js/types/email/maintenance.type.d.ts.map +1 -0
- package/dist/js/types/email/maintenance.type.js +2 -0
- package/dist/js/types/email/maintenance.type.js.map +1 -0
- package/dist/js/types/email/member.added.type.d.ts +14 -0
- package/dist/js/types/email/member.added.type.d.ts.map +1 -0
- package/dist/js/types/email/member.added.type.js +2 -0
- package/dist/js/types/email/member.added.type.js.map +1 -0
- package/dist/js/types/email/member.removed.type.d.ts +14 -0
- package/dist/js/types/email/member.removed.type.d.ts.map +1 -0
- package/dist/js/types/email/member.removed.type.js +2 -0
- package/dist/js/types/email/member.removed.type.js.map +1 -0
- package/dist/js/types/email/mention.type.d.ts +12 -0
- package/dist/js/types/email/mention.type.d.ts.map +1 -0
- package/dist/js/types/email/mention.type.js +2 -0
- package/dist/js/types/email/mention.type.js.map +1 -0
- package/dist/js/types/email/monthly.report.type.d.ts +14 -0
- package/dist/js/types/email/monthly.report.type.d.ts.map +1 -0
- package/dist/js/types/email/monthly.report.type.js +2 -0
- package/dist/js/types/email/monthly.report.type.js.map +1 -0
- package/dist/js/types/email/new.comment.type.d.ts +12 -0
- package/dist/js/types/email/new.comment.type.d.ts.map +1 -0
- package/dist/js/types/email/new.comment.type.js +2 -0
- package/dist/js/types/email/new.comment.type.js.map +1 -0
- package/dist/js/types/email/new.device.login.type.d.ts +11 -0
- package/dist/js/types/email/new.device.login.type.d.ts.map +1 -0
- package/dist/js/types/email/new.device.login.type.js +2 -0
- package/dist/js/types/email/new.device.login.type.js.map +1 -0
- package/dist/js/types/email/new.message.type.d.ts +11 -0
- package/dist/js/types/email/new.message.type.d.ts.map +1 -0
- package/dist/js/types/email/new.message.type.js +2 -0
- package/dist/js/types/email/new.message.type.js.map +1 -0
- package/dist/js/types/email/notification.type.d.ts +13 -0
- package/dist/js/types/email/notification.type.d.ts.map +1 -0
- package/dist/js/types/email/notification.type.js +2 -0
- package/dist/js/types/email/notification.type.js.map +1 -0
- package/dist/js/types/email/order.cancelled.type.d.ts +12 -0
- package/dist/js/types/email/order.cancelled.type.d.ts.map +1 -0
- package/dist/js/types/email/order.cancelled.type.js +2 -0
- package/dist/js/types/email/order.cancelled.type.js.map +1 -0
- package/dist/js/types/email/order.confirmation.type.d.ts +13 -0
- package/dist/js/types/email/order.confirmation.type.d.ts.map +1 -0
- package/dist/js/types/email/order.confirmation.type.js +2 -0
- package/dist/js/types/email/order.confirmation.type.js.map +1 -0
- package/dist/js/types/email/order.delivered.type.d.ts +12 -0
- package/dist/js/types/email/order.delivered.type.d.ts.map +1 -0
- package/dist/js/types/email/order.delivered.type.js +2 -0
- package/dist/js/types/email/order.delivered.type.js.map +1 -0
- package/dist/js/types/email/order.shipped.type.d.ts +14 -0
- package/dist/js/types/email/order.shipped.type.d.ts.map +1 -0
- package/dist/js/types/email/order.shipped.type.js +2 -0
- package/dist/js/types/email/order.shipped.type.js.map +1 -0
- package/dist/js/types/email/organization.invitation.type.d.ts +13 -0
- package/dist/js/types/email/organization.invitation.type.d.ts.map +1 -0
- package/dist/js/types/email/organization.invitation.type.js +2 -0
- package/dist/js/types/email/organization.invitation.type.js.map +1 -0
- package/dist/js/types/email/otp.verification.type.d.ts +11 -0
- package/dist/js/types/email/otp.verification.type.d.ts.map +1 -0
- package/dist/js/types/email/otp.verification.type.js +2 -0
- package/dist/js/types/email/otp.verification.type.js.map +1 -0
- package/dist/js/types/email/password.changed.type.d.ts +12 -0
- package/dist/js/types/email/password.changed.type.d.ts.map +1 -0
- package/dist/js/types/email/password.changed.type.js +2 -0
- package/dist/js/types/email/password.changed.type.js.map +1 -0
- package/dist/js/types/email/password.expiring.type.d.ts +12 -0
- package/dist/js/types/email/password.expiring.type.d.ts.map +1 -0
- package/dist/js/types/email/password.expiring.type.js +2 -0
- package/dist/js/types/email/password.expiring.type.js.map +1 -0
- package/dist/js/types/email/password.reset.type.d.ts +11 -0
- package/dist/js/types/email/password.reset.type.d.ts.map +1 -0
- package/dist/js/types/email/password.reset.type.js +2 -0
- package/dist/js/types/email/password.reset.type.js.map +1 -0
- package/dist/js/types/email/payment.failed.type.d.ts +14 -0
- package/dist/js/types/email/payment.failed.type.d.ts.map +1 -0
- package/dist/js/types/email/payment.failed.type.js +2 -0
- package/dist/js/types/email/payment.failed.type.js.map +1 -0
- package/dist/js/types/email/payment.success.type.d.ts +13 -0
- package/dist/js/types/email/payment.success.type.d.ts.map +1 -0
- package/dist/js/types/email/payment.success.type.js +2 -0
- package/dist/js/types/email/payment.success.type.js.map +1 -0
- package/dist/js/types/email/receipt.type.d.ts +14 -0
- package/dist/js/types/email/receipt.type.d.ts.map +1 -0
- package/dist/js/types/email/receipt.type.js +2 -0
- package/dist/js/types/email/receipt.type.js.map +1 -0
- package/dist/js/types/email/reminder.type.d.ts +12 -0
- package/dist/js/types/email/reminder.type.d.ts.map +1 -0
- package/dist/js/types/email/reminder.type.js +2 -0
- package/dist/js/types/email/reminder.type.js.map +1 -0
- package/dist/js/types/email/security.alert.type.d.ts +12 -0
- package/dist/js/types/email/security.alert.type.d.ts.map +1 -0
- package/dist/js/types/email/security.alert.type.js +2 -0
- package/dist/js/types/email/security.alert.type.js.map +1 -0
- package/dist/js/types/email/static-config.type.d.ts +8 -0
- package/dist/js/types/email/static-config.type.d.ts.map +1 -0
- package/dist/js/types/email/static-config.type.js +2 -0
- package/dist/js/types/email/static-config.type.js.map +1 -0
- package/dist/js/types/email/subscription.cancelled.type.d.ts +12 -0
- package/dist/js/types/email/subscription.cancelled.type.d.ts.map +1 -0
- package/dist/js/types/email/subscription.cancelled.type.js +2 -0
- package/dist/js/types/email/subscription.cancelled.type.js.map +1 -0
- package/dist/js/types/email/subscription.created.type.d.ts +13 -0
- package/dist/js/types/email/subscription.created.type.d.ts.map +1 -0
- package/dist/js/types/email/subscription.created.type.js +2 -0
- package/dist/js/types/email/subscription.created.type.js.map +1 -0
- package/dist/js/types/email/subscription.renewed.type.d.ts +14 -0
- package/dist/js/types/email/subscription.renewed.type.d.ts.map +1 -0
- package/dist/js/types/email/subscription.renewed.type.js +2 -0
- package/dist/js/types/email/subscription.renewed.type.js.map +1 -0
- package/dist/js/types/email/support.ticket.type.d.ts +14 -0
- package/dist/js/types/email/support.ticket.type.d.ts.map +1 -0
- package/dist/js/types/email/support.ticket.type.js +2 -0
- package/dist/js/types/email/support.ticket.type.js.map +1 -0
- package/dist/js/types/email/team.invitation.type.d.ts +13 -0
- package/dist/js/types/email/team.invitation.type.d.ts.map +1 -0
- package/dist/js/types/email/team.invitation.type.js +2 -0
- package/dist/js/types/email/team.invitation.type.js.map +1 -0
- package/dist/js/types/email/trial.ending.type.d.ts +13 -0
- package/dist/js/types/email/trial.ending.type.d.ts.map +1 -0
- package/dist/js/types/email/trial.ending.type.js +2 -0
- package/dist/js/types/email/trial.ending.type.js.map +1 -0
- package/dist/js/types/email/two.factor.code.type.d.ts +11 -0
- package/dist/js/types/email/two.factor.code.type.d.ts.map +1 -0
- package/dist/js/types/email/two.factor.code.type.js +2 -0
- package/dist/js/types/email/two.factor.code.type.js.map +1 -0
- package/dist/js/types/email/verify.email.type.d.ts +11 -0
- package/dist/js/types/email/verify.email.type.d.ts.map +1 -0
- package/dist/js/types/email/verify.email.type.js +2 -0
- package/dist/js/types/email/verify.email.type.js.map +1 -0
- package/dist/js/types/email/weekly.report.type.d.ts +14 -0
- package/dist/js/types/email/weekly.report.type.d.ts.map +1 -0
- package/dist/js/types/email/weekly.report.type.js +2 -0
- package/dist/js/types/email/weekly.report.type.js.map +1 -0
- package/dist/js/types/email/welcome.type.d.ts +10 -0
- package/dist/js/types/email/welcome.type.d.ts.map +1 -0
- package/dist/js/types/email/welcome.type.js +2 -0
- package/dist/js/types/email/welcome.type.js.map +1 -0
- package/dist/js/types/email.js +0 -13
- package/dist/js/types/email.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalize an IP address.
|
|
3
|
+
*
|
|
4
|
+
* Node may return IPv4 addresses as IPv4-mapped IPv6 addresses:
|
|
5
|
+
*
|
|
6
|
+
* ::ffff:127.0.0.1
|
|
7
|
+
* ::ffff:192.168.1.10
|
|
8
|
+
*
|
|
9
|
+
* Converting them makes local/private IP detection much easier.
|
|
10
|
+
*/
|
|
11
|
+
function normalizeIp(ip) {
|
|
12
|
+
const value = ip.trim();
|
|
13
|
+
if (value.startsWith("::ffff:")) {
|
|
14
|
+
return value.slice(7);
|
|
15
|
+
}
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Whether an IP belongs to the local machine.
|
|
20
|
+
*/
|
|
21
|
+
function isLocalhostIp(ip) {
|
|
22
|
+
const normalized = normalizeIp(ip).toLowerCase();
|
|
23
|
+
return (normalized === "127.0.0.1" ||
|
|
24
|
+
normalized === "::1" ||
|
|
25
|
+
normalized === "0.0.0.0" ||
|
|
26
|
+
normalized === "::");
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Whether an IPv4 address belongs to a private/local network.
|
|
30
|
+
*
|
|
31
|
+
* Private IPv4 ranges:
|
|
32
|
+
*
|
|
33
|
+
* 10.0.0.0/8
|
|
34
|
+
* 172.16.0.0/12
|
|
35
|
+
* 192.168.0.0/16
|
|
36
|
+
*/
|
|
37
|
+
function isPrivateIpv4(ip) {
|
|
38
|
+
const normalized = normalizeIp(ip);
|
|
39
|
+
const parts = normalized.split(".").map(Number);
|
|
40
|
+
if (parts.length !== 4 ||
|
|
41
|
+
parts.some((part) => !Number.isInteger(part) || part < 0 || part > 255)) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
const [a, b] = parts;
|
|
45
|
+
return (a === 10 ||
|
|
46
|
+
(a === 172 && b >= 16 && b <= 31) ||
|
|
47
|
+
(a === 192 && b === 168));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Whether an IP is a private/local address.
|
|
51
|
+
*/
|
|
52
|
+
function isPrivateIp(ip) {
|
|
53
|
+
const normalized = normalizeIp(ip).toLowerCase();
|
|
54
|
+
// IPv4 private ranges.
|
|
55
|
+
if (isPrivateIpv4(normalized)) {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
// IPv6 unique-local addresses: fc00::/7
|
|
59
|
+
if (/^f[cd][0-9a-f]{2}:/i.test(normalized)) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
// IPv6 link-local: fe80::/10
|
|
63
|
+
if (/^fe[89ab][0-9a-f]{2}:/i.test(normalized)) {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Extract a single User-Agent value from the request headers.
|
|
70
|
+
*/
|
|
71
|
+
function getUserAgent(req) {
|
|
72
|
+
const value = req.headers["user-agent"];
|
|
73
|
+
if (typeof value === "string") {
|
|
74
|
+
return value;
|
|
75
|
+
}
|
|
76
|
+
if (Array.isArray(value)) {
|
|
77
|
+
return value[0];
|
|
78
|
+
}
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Client IP address.
|
|
83
|
+
*
|
|
84
|
+
* Priority:
|
|
85
|
+
*
|
|
86
|
+
* 1. x-forwarded-for
|
|
87
|
+
* 2. framework-resolved req.ip
|
|
88
|
+
* 3. req.socket.remoteAddress
|
|
89
|
+
* 4. req.connection.remoteAddress
|
|
90
|
+
*
|
|
91
|
+
* NOTE:
|
|
92
|
+
* x-forwarded-for should only be trusted when your application is behind
|
|
93
|
+
* a trusted proxy/load balancer and proxy trust is configured correctly.
|
|
94
|
+
*/
|
|
95
|
+
export function getClientIp(req) {
|
|
96
|
+
const forwarded = req.headers["x-forwarded-for"];
|
|
97
|
+
if (typeof forwarded === "string") {
|
|
98
|
+
const firstIp = forwarded
|
|
99
|
+
.split(",")
|
|
100
|
+
.map((ip) => ip.trim())
|
|
101
|
+
.find(Boolean);
|
|
102
|
+
if (firstIp) {
|
|
103
|
+
return normalizeIp(firstIp);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (Array.isArray(forwarded)) {
|
|
107
|
+
const firstIp = forwarded
|
|
108
|
+
.map((ip) => ip.trim())
|
|
109
|
+
.find(Boolean);
|
|
110
|
+
if (firstIp) {
|
|
111
|
+
return normalizeIp(firstIp);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (req.ip) {
|
|
115
|
+
return normalizeIp(req.ip);
|
|
116
|
+
}
|
|
117
|
+
if (req.socket?.remoteAddress) {
|
|
118
|
+
return normalizeIp(req.socket.remoteAddress);
|
|
119
|
+
}
|
|
120
|
+
if (req.connection?.remoteAddress) {
|
|
121
|
+
return normalizeIp(req.connection.remoteAddress);
|
|
122
|
+
}
|
|
123
|
+
return "Unknown";
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Human-readable device name derived from User-Agent.
|
|
127
|
+
*
|
|
128
|
+
* This intentionally uses lightweight detection so Forge does not need
|
|
129
|
+
* a UA parsing dependency.
|
|
130
|
+
*/
|
|
131
|
+
export function getDeviceName(req) {
|
|
132
|
+
const userAgent = getUserAgent(req);
|
|
133
|
+
if (!userAgent) {
|
|
134
|
+
return "Unknown device";
|
|
135
|
+
}
|
|
136
|
+
if (/postmanruntime/i.test(userAgent)) {
|
|
137
|
+
return "Postman";
|
|
138
|
+
}
|
|
139
|
+
if (/ipad/i.test(userAgent)) {
|
|
140
|
+
return "iPad";
|
|
141
|
+
}
|
|
142
|
+
if (/iphone/i.test(userAgent)) {
|
|
143
|
+
return "iPhone";
|
|
144
|
+
}
|
|
145
|
+
if (/android/i.test(userAgent)) {
|
|
146
|
+
if (/mobile/i.test(userAgent)) {
|
|
147
|
+
return "Android phone";
|
|
148
|
+
}
|
|
149
|
+
return "Android device";
|
|
150
|
+
}
|
|
151
|
+
if (/windows phone/i.test(userAgent)) {
|
|
152
|
+
return "Windows phone";
|
|
153
|
+
}
|
|
154
|
+
if (/macintosh|mac os x/i.test(userAgent)) {
|
|
155
|
+
return "Mac";
|
|
156
|
+
}
|
|
157
|
+
if (/windows/i.test(userAgent)) {
|
|
158
|
+
return "Windows PC";
|
|
159
|
+
}
|
|
160
|
+
if (/linux/i.test(userAgent)) {
|
|
161
|
+
return "Linux device";
|
|
162
|
+
}
|
|
163
|
+
return "Unknown device";
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Get a human-readable location for an IP.
|
|
167
|
+
*
|
|
168
|
+
* Localhost:
|
|
169
|
+
* ::1 / 127.0.0.1 -> "Localhost"
|
|
170
|
+
*
|
|
171
|
+
* Private LAN:
|
|
172
|
+
* 192.168.x.x
|
|
173
|
+
* 10.x.x.x
|
|
174
|
+
* 172.16.x.x - 172.31.x.x
|
|
175
|
+
*
|
|
176
|
+
* These addresses cannot be geolocated because they are not globally
|
|
177
|
+
* routable. We therefore return a useful development/network label.
|
|
178
|
+
*
|
|
179
|
+
* Public IPs require a GeoIP provider/database.
|
|
180
|
+
*/
|
|
181
|
+
export async function getLocationFromIp(ip) {
|
|
182
|
+
if (!ip || ip === "Unknown") {
|
|
183
|
+
return "Unknown location";
|
|
184
|
+
}
|
|
185
|
+
const normalized = normalizeIp(ip);
|
|
186
|
+
if (isLocalhostIp(normalized)) {
|
|
187
|
+
return "Localhost";
|
|
188
|
+
}
|
|
189
|
+
if (isPrivateIp(normalized)) {
|
|
190
|
+
return "Local network";
|
|
191
|
+
}
|
|
192
|
+
// TODO: Add a GeoIP provider here for public IP addresses.
|
|
193
|
+
//
|
|
194
|
+
// Example:
|
|
195
|
+
//
|
|
196
|
+
// const res = await fetch(`https://ipapi.co/${normalized}/json/`);
|
|
197
|
+
// const data = await res.json();
|
|
198
|
+
//
|
|
199
|
+
// if (data.city && data.country_name) {
|
|
200
|
+
// return `${data.city}, ${data.country_name}`;
|
|
201
|
+
// }
|
|
202
|
+
return "Unknown location";
|
|
203
|
+
}
|
|
204
|
+
/** Current year for email footer/copyright fields. */
|
|
205
|
+
export function getCurrentYear() {
|
|
206
|
+
return new Date().getFullYear();
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Current date/time formatted for human-readable email fields.
|
|
210
|
+
*/
|
|
211
|
+
export function getFormattedNow(locale = "en-US", timeZone) {
|
|
212
|
+
return new Date().toLocaleString(locale, {
|
|
213
|
+
dateStyle: "long",
|
|
214
|
+
timeStyle: "short",
|
|
215
|
+
timeZone,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Compute all automatically-derived email fields.
|
|
220
|
+
*/
|
|
221
|
+
export async function getAutoDerivedFields(req) {
|
|
222
|
+
const ipAddress = getClientIp(req);
|
|
223
|
+
const deviceName = getDeviceName(req);
|
|
224
|
+
const location = await getLocationFromIp(ipAddress);
|
|
225
|
+
return {
|
|
226
|
+
currentYear: getCurrentYear(),
|
|
227
|
+
ipAddress,
|
|
228
|
+
deviceName,
|
|
229
|
+
location,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=auto-fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-fields.js","sourceRoot":"","sources":["../../../../src/js/email/utils/auto-fields.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fields the framework can figure out on its own at send time — from the
|
|
3
|
+
* incoming request or the system clock — so the developer using the
|
|
4
|
+
* framework never has to pass these in manually.
|
|
5
|
+
*
|
|
6
|
+
* Field -> where it's used (X/45 templates):
|
|
7
|
+
* currentYear -> every template (footer copyright year)
|
|
8
|
+
* ipAddress -> login-alert, new-device-login, password-changed
|
|
9
|
+
* deviceName -> login-alert, new-device-login, password-changed
|
|
10
|
+
* location -> login-alert, new-device-login, password-changed, security-alert
|
|
11
|
+
*/
|
|
12
|
+
export type AutoDerivedEmailFields = {
|
|
13
|
+
currentYear: number;
|
|
14
|
+
ipAddress: string;
|
|
15
|
+
deviceName: string;
|
|
16
|
+
location: string;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=auto-fields.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-fields.type.d.ts","sourceRoot":"","sources":["../../../../src/js/email/utils/auto-fields.type.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-fields.type.js","sourceRoot":"","sources":["../../../../src/js/email/utils/auto-fields.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emailTemplates.d.ts","sourceRoot":"","sources":["../../../../src/js/email/utils/emailTemplates.ts"],"names":[],"mappings":"AAiDA,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAuDL,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { accountCreated, accountDeleted, accountUpdated, announcement, apiKeyCreated, apiKeyRevoked, contactForm, dailyReport, emailChanged, feedback, invoice, loginAlert, magicLink, maintenance, memberAdded, memberRemoved, mention, monthlyReport, newComment, newDeviceLogin, newMessage, notification, orderCancelled, orderConfirmation, orderDelivered, orderShipped, organizationInvitation, passwordChanged, passwordExpiring, passwordReset, paymentFailed, paymentSuccess, receipt, reminder, securityAlert, subscriptionCancelled, subscriptionCreated, subscriptionRenewed, supportTicket, teamInvitation, trialEnding, twoFactorCode, verifyEmail, weeklyReport, welcome, } from "../templates/index.js";
|
|
2
|
+
export const emailTemplates = {
|
|
3
|
+
welcome: welcome,
|
|
4
|
+
"verify-email": verifyEmail,
|
|
5
|
+
"password-reset": passwordReset,
|
|
6
|
+
"password-changed": passwordChanged,
|
|
7
|
+
"login-alert": loginAlert,
|
|
8
|
+
"two-factor-code": twoFactorCode,
|
|
9
|
+
"magic-link": magicLink,
|
|
10
|
+
"account-created": accountCreated,
|
|
11
|
+
"account-updated": accountUpdated,
|
|
12
|
+
"account-deleted": accountDeleted,
|
|
13
|
+
"email-changed": emailChanged,
|
|
14
|
+
"team-invitation": teamInvitation,
|
|
15
|
+
"organization-invitation": organizationInvitation,
|
|
16
|
+
"member-added": memberAdded,
|
|
17
|
+
"member-removed": memberRemoved,
|
|
18
|
+
"new-message": newMessage,
|
|
19
|
+
"new-comment": newComment,
|
|
20
|
+
mention: mention,
|
|
21
|
+
notification: notification,
|
|
22
|
+
reminder: reminder,
|
|
23
|
+
invoice: invoice,
|
|
24
|
+
receipt: receipt,
|
|
25
|
+
"payment-success": paymentSuccess,
|
|
26
|
+
"payment-failed": paymentFailed,
|
|
27
|
+
"subscription-created": subscriptionCreated,
|
|
28
|
+
"subscription-renewed": subscriptionRenewed,
|
|
29
|
+
"subscription-cancelled": subscriptionCancelled,
|
|
30
|
+
"trial-ending": trialEnding,
|
|
31
|
+
"order-confirmation": orderConfirmation,
|
|
32
|
+
"order-shipped": orderShipped,
|
|
33
|
+
"order-delivered": orderDelivered,
|
|
34
|
+
"order-cancelled": orderCancelled,
|
|
35
|
+
"password-expiring": passwordExpiring,
|
|
36
|
+
"security-alert": securityAlert,
|
|
37
|
+
"new-device-login": newDeviceLogin,
|
|
38
|
+
"api-key-created": apiKeyCreated,
|
|
39
|
+
"api-key-revoked": apiKeyRevoked,
|
|
40
|
+
"contact-form": contactForm,
|
|
41
|
+
"support-ticket": supportTicket,
|
|
42
|
+
feedback: feedback,
|
|
43
|
+
"daily-report": dailyReport,
|
|
44
|
+
"weekly-report": weeklyReport,
|
|
45
|
+
"monthly-report": monthlyReport,
|
|
46
|
+
maintenance: maintenance,
|
|
47
|
+
announcement: announcement,
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=emailTemplates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emailTemplates.js","sourceRoot":"","sources":["../../../../src/js/email/utils/emailTemplates.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,cAAc,EACd,cAAc,EACd,YAAY,EACZ,aAAa,EACb,aAAa,EACb,WAAW,EACX,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,UAAU,EACV,SAAS,EACT,WAAW,EACX,WAAW,EACX,aAAa,EACb,OAAO,EACP,aAAa,EACb,UAAU,EACV,cAAc,EACd,UAAU,EACV,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,cAAc,EACd,OAAO,EACP,QAAQ,EACR,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,WAAW,EACX,aAAa,EACb,WAAW,EACX,YAAY,EACZ,OAAO,GACR,MAAM,uBAAuB,CAAC;AAE/B,MAAM,CAAC,MAAM,cAAc,GAAwB;IACjD,OAAO,EAAE,OAAO;IAChB,cAAc,EAAE,WAAW;IAC3B,gBAAgB,EAAE,aAAa;IAC/B,kBAAkB,EAAE,eAAe;IACnC,aAAa,EAAE,UAAU;IACzB,iBAAiB,EAAE,aAAa;IAChC,YAAY,EAAE,SAAS;IAEvB,iBAAiB,EAAE,cAAc;IACjC,iBAAiB,EAAE,cAAc;IACjC,iBAAiB,EAAE,cAAc;IACjC,eAAe,EAAE,YAAY;IAE7B,iBAAiB,EAAE,cAAc;IACjC,yBAAyB,EAAE,sBAAsB;IACjD,cAAc,EAAE,WAAW;IAC3B,gBAAgB,EAAE,aAAa;IAE/B,aAAa,EAAE,UAAU;IACzB,aAAa,EAAE,UAAU;IACzB,OAAO,EAAE,OAAO;IAChB,YAAY,EAAE,YAAY;IAC1B,QAAQ,EAAE,QAAQ;IAElB,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,OAAO;IAChB,iBAAiB,EAAE,cAAc;IACjC,gBAAgB,EAAE,aAAa;IAC/B,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,mBAAmB;IAC3C,wBAAwB,EAAE,qBAAqB;IAC/C,cAAc,EAAE,WAAW;IAE3B,oBAAoB,EAAE,iBAAiB;IACvC,eAAe,EAAE,YAAY;IAC7B,iBAAiB,EAAE,cAAc;IACjC,iBAAiB,EAAE,cAAc;IAEjC,mBAAmB,EAAE,gBAAgB;IACrC,gBAAgB,EAAE,aAAa;IAC/B,kBAAkB,EAAE,cAAc;IAClC,iBAAiB,EAAE,aAAa;IAChC,iBAAiB,EAAE,aAAa;IAEhC,cAAc,EAAE,WAAW;IAC3B,gBAAgB,EAAE,aAAa;IAC/B,QAAQ,EAAE,QAAQ;IAElB,cAAc,EAAE,WAAW;IAC3B,eAAe,EAAE,YAAY;IAC7B,gBAAgB,EAAE,aAAa;IAE/B,WAAW,EAAE,WAAW;IACxB,YAAY,EAAE,YAAY;CACc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleEmailTemplateConfig.d.ts","sourceRoot":"","sources":["../../../../src/js/email/utils/handleEmailTemplateConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAIlE,QAAA,MAAM,yBAAyB,GAC7B,QAAQ,GAAG,EACX,SAAS,aAAa,iBAmDvB,CAAC;AACF,eAAe,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import AppLog from "../../utils/AppLog.js";
|
|
2
|
+
import { getAutoDerivedFields, getCurrentYear } from "./auto-fields.js";
|
|
3
|
+
const handleEmailTemplateConfig = async (config, context) => {
|
|
4
|
+
for (const [key, value] of Object.entries(config)) {
|
|
5
|
+
// current-date
|
|
6
|
+
if (value === "current-date") {
|
|
7
|
+
config[key] = new Date().toLocaleDateString("en-PK", {
|
|
8
|
+
dateStyle: "full",
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
// current-time
|
|
12
|
+
if (value === "current-time") {
|
|
13
|
+
config[key] = new Date().toLocaleTimeString("en-PK", {
|
|
14
|
+
timeStyle: "medium",
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
// function
|
|
18
|
+
if (typeof value === "function") {
|
|
19
|
+
try {
|
|
20
|
+
const result = await value(context);
|
|
21
|
+
config[key] = result;
|
|
22
|
+
if (result === undefined || result === null) {
|
|
23
|
+
AppLog("x", "emailTemplateConfig", `Invalid configuration for '${key}'. Make sure the function returns correct value in routes -> route -> actions.`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
console.error(`Function '${key}' failed:`, error);
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// autoDerivedFields
|
|
33
|
+
const autoDerivedFields = await getAutoDerivedFields({
|
|
34
|
+
headers: context.req.headers,
|
|
35
|
+
connection: context.req.connection,
|
|
36
|
+
ip: context.req.ip,
|
|
37
|
+
ips: context.req.ips,
|
|
38
|
+
socket: context.req.socket,
|
|
39
|
+
});
|
|
40
|
+
// return spread config
|
|
41
|
+
return {
|
|
42
|
+
...config,
|
|
43
|
+
...autoDerivedFields,
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
export default handleEmailTemplateConfig;
|
|
47
|
+
//# sourceMappingURL=handleEmailTemplateConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleEmailTemplateConfig.js","sourceRoot":"","sources":["../../../../src/js/email/utils/handleEmailTemplateConfig.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,uBAAuB,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAExE,MAAM,yBAAyB,GAAG,KAAK,EACrC,MAAW,EACX,OAAsB,EACtB,EAAE;IACF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,eAAe;QACf,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE;gBACnD,SAAS,EAAE,MAAM;aAClB,CAAC,CAAC;QACL,CAAC;QAED,eAAe;QACf,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE;gBACnD,SAAS,EAAE,QAAQ;aACpB,CAAC,CAAC;QACL,CAAC;QAED,WAAW;QACX,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;gBACpC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;gBAErB,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBAC5C,MAAM,CACJ,GAAG,EACH,qBAAqB,EACrB,8BAA8B,GAAG,gFAAgF,CAClH,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,WAAW,EAAE,KAAK,CAAC,CAAC;gBAClD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,MAAM,iBAAiB,GAAG,MAAM,oBAAoB,CAAC;QACnD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO;QAC5B,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;QAClC,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG;QACpB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM;KAC3B,CAAC,CAAC;IAEH,uBAAuB;IACvB,OAAO;QACL,GAAG,MAAM;QACT,GAAG,iBAAiB;KACrB,CAAC;AACJ,CAAC,CAAC;AACF,eAAe,yBAAyB,CAAC"}
|
|
@@ -1,25 +1,22 @@
|
|
|
1
1
|
import type { Request } from "express";
|
|
2
2
|
import type { Document, Model } from "mongoose";
|
|
3
|
+
import type { EmailActionTemplate } from "./EmailActionTemplate.js";
|
|
3
4
|
/**
|
|
4
|
-
* Context
|
|
5
|
+
* Context provided to Forge actions before or after a route operation.
|
|
5
6
|
*/
|
|
6
7
|
export interface ActionContext {
|
|
7
|
-
/**
|
|
8
|
-
* Express request object.
|
|
9
|
-
*/
|
|
8
|
+
/** Express request object. */
|
|
10
9
|
req: Request;
|
|
11
|
-
/**
|
|
12
|
-
* Currently authenticated user profile attached to the request.
|
|
13
|
-
*/
|
|
10
|
+
/** Authenticated user attached to the request, if available. */
|
|
14
11
|
user?: Request["user"];
|
|
15
12
|
/**
|
|
16
|
-
*
|
|
13
|
+
* Name of the Forge resource/route.
|
|
17
14
|
*
|
|
18
15
|
* @example "products"
|
|
19
16
|
*/
|
|
20
17
|
route: string;
|
|
21
18
|
/**
|
|
22
|
-
* Database operation being
|
|
19
|
+
* Database operation being performed.
|
|
23
20
|
*/
|
|
24
21
|
operation: "read" | "readAll" | "create" | "update" | "remove" | "removeMultiple" | "removeAll";
|
|
25
22
|
/**
|
|
@@ -28,73 +25,69 @@ export interface ActionContext {
|
|
|
28
25
|
* @example "Product"
|
|
29
26
|
*/
|
|
30
27
|
model: string;
|
|
31
|
-
/**
|
|
32
|
-
* Mongoose Model instance for performing direct database queries.
|
|
33
|
-
*/
|
|
28
|
+
/** Mongoose model for direct database access. */
|
|
34
29
|
Model?: Model<any>;
|
|
35
30
|
/**
|
|
36
|
-
*
|
|
31
|
+
* Data associated with the current request and operation.
|
|
37
32
|
*/
|
|
38
33
|
data?: {
|
|
39
|
-
/**
|
|
40
|
-
* ID or reference of the resource owner.
|
|
41
|
-
*/
|
|
42
|
-
owner?: string;
|
|
43
|
-
/**
|
|
44
|
-
* Parsed request body object.
|
|
45
|
-
*/
|
|
34
|
+
/** Parsed request body. */
|
|
46
35
|
body?: any;
|
|
47
|
-
/**
|
|
48
|
-
* Metadata from uploaded files (if multipart route).
|
|
49
|
-
*/
|
|
36
|
+
/** Uploaded file metadata. */
|
|
50
37
|
files?: any;
|
|
51
|
-
/**
|
|
52
|
-
* Encrypted field values.
|
|
53
|
-
*/
|
|
38
|
+
/** Values encrypted by Forge. */
|
|
54
39
|
encrypted?: any;
|
|
55
|
-
/**
|
|
56
|
-
* Decrypted field values.
|
|
57
|
-
*/
|
|
40
|
+
/** Values decrypted by Forge. */
|
|
58
41
|
decrypted?: any;
|
|
59
|
-
/**
|
|
60
|
-
* Hashed field values.
|
|
61
|
-
*/
|
|
42
|
+
/** Values hashed by Forge. */
|
|
62
43
|
hashed?: any;
|
|
63
44
|
};
|
|
64
45
|
/**
|
|
65
|
-
*
|
|
46
|
+
* Document(s) affected by the operation.
|
|
66
47
|
*/
|
|
67
48
|
item?: Document | Document[];
|
|
68
49
|
/**
|
|
69
|
-
*
|
|
50
|
+
* Current result produced by the operation/action chain.
|
|
51
|
+
*
|
|
52
|
+
* Return a value from a custom action to replace this result.
|
|
70
53
|
*/
|
|
71
54
|
result?: any;
|
|
72
55
|
}
|
|
73
56
|
/**
|
|
74
|
-
*
|
|
57
|
+
* Executes custom developer-defined logic.
|
|
75
58
|
*
|
|
76
|
-
*
|
|
77
|
-
* ```ts
|
|
78
|
-
* const sendWelcomeEmail: Action = {
|
|
79
|
-
* type: "email",
|
|
80
|
-
* handler: async ({ user, data }) => {
|
|
81
|
-
* console.log(`Sending email to ${user?.email}`);
|
|
82
|
-
* },
|
|
83
|
-
* };
|
|
84
|
-
* ```
|
|
59
|
+
* Returning a value replaces the current action result.
|
|
85
60
|
*/
|
|
86
|
-
export interface
|
|
87
|
-
/**
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
61
|
+
export interface CustomAction {
|
|
62
|
+
/** Custom action handler. */
|
|
63
|
+
customAction: (context: ActionContext) => Promise<any> | any;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Sends an email through Forge's configured email provider.
|
|
67
|
+
*/
|
|
68
|
+
export interface EmailAction {
|
|
69
|
+
/** Email action configuration. */
|
|
70
|
+
emailAction: {
|
|
71
|
+
/** Sender configuration. */
|
|
72
|
+
from: "system-email-sender" | ({} & string);
|
|
73
|
+
/** Recipient email address. */
|
|
74
|
+
to: string | ((context: ActionContext) => string);
|
|
75
|
+
/** Email content mode. */
|
|
76
|
+
type: "template" | "raw";
|
|
77
|
+
/** Raw email body when `type` is `raw`. */
|
|
78
|
+
rawBody?: string;
|
|
79
|
+
/** Email template when `type` is `template`. */
|
|
80
|
+
template?: EmailActionTemplate;
|
|
81
|
+
/** Email subject. */
|
|
82
|
+
subject?: string | ((context: ActionContext) => string);
|
|
83
|
+
};
|
|
98
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Action executed before or after a Forge route operation.
|
|
87
|
+
*/
|
|
88
|
+
export type Action = CustomAction | EmailAction;
|
|
89
|
+
/**
|
|
90
|
+
* @deprecated Use `ActionContext` instead.
|
|
91
|
+
*/
|
|
99
92
|
export type CreateContext = ActionContext;
|
|
100
93
|
//# sourceMappingURL=ActionHandler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionHandler.d.ts","sourceRoot":"","sources":["../../../src/js/types/ActionHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"ActionHandler.d.ts","sourceRoot":"","sources":["../../../src/js/types/ActionHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,8BAA8B;IAC9B,GAAG,EAAE,OAAO,CAAC;IAEb,gEAAgE;IAChE,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvB;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,SAAS,EACL,MAAM,GACN,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,gBAAgB,GAChB,WAAW,CAAC;IAEhB;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd,iDAAiD;IACjD,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAEnB;;OAEG;IACH,IAAI,CAAC,EAAE;QACL,2BAA2B;QAC3B,IAAI,CAAC,EAAE,GAAG,CAAC;QAEX,8BAA8B;QAC9B,KAAK,CAAC,EAAE,GAAG,CAAC;QAEZ,iCAAiC;QACjC,SAAS,CAAC,EAAE,GAAG,CAAC;QAEhB,iCAAiC;QACjC,SAAS,CAAC,EAAE,GAAG,CAAC;QAEhB,8BAA8B;QAC9B,MAAM,CAAC,EAAE,GAAG,CAAC;KACd,CAAC;IAEF;;OAEG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAAC;IAE7B;;;;OAIG;IACH,MAAM,CAAC,EAAE,GAAG,CAAC;CACd;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,6BAA6B;IAC7B,YAAY,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;CAC9D;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,kCAAkC;IAElC,WAAW,EAAE;QACX,4BAA4B;QAC5B,IAAI,EAAE,qBAAqB,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;QAE5C,+BAA+B;QAC/B,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,KAAK,MAAM,CAAC,CAAC;QAElD,0BAA0B;QAC1B,IAAI,EAAE,UAAU,GAAG,KAAK,CAAC;QAEzB,2CAA2C;QAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;QAEjB,gDAAgD;QAChD,QAAQ,CAAC,EAAE,mBAAmB,CAAC;QAE/B,qBAAqB;QACrB,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,KAAK,MAAM,CAAC,CAAC;KACzD,CAAC;CACH;AAED;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,YAAY,GAAG,WAAW,CAAC;AAEhD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,aAAa,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Collection } from "./Collection.ts";
|
|
2
2
|
import type { DurationType } from "../config/duration.ts";
|
|
3
3
|
import type { UnifiedField } from "../lib/unified.types.js";
|
|
4
|
+
import type { CommonEmailPlaceholders } from "./email/static-config.type.js";
|
|
4
5
|
export type authMode = "credentials" | "otp";
|
|
5
6
|
export interface AuthConfig {
|
|
6
7
|
mode: "builtin" | "manual";
|
|
@@ -38,6 +39,7 @@ export interface Constructor {
|
|
|
38
39
|
databaseName?: string;
|
|
39
40
|
domain?: string;
|
|
40
41
|
ENV: string;
|
|
42
|
+
emailConfig?: CommonEmailPlaceholders;
|
|
41
43
|
frontendURL?: string;
|
|
42
44
|
frontendURLs?: string[];
|
|
43
45
|
internalRoles?: string[];
|
|
@@ -49,7 +51,7 @@ export interface Constructor {
|
|
|
49
51
|
port: number;
|
|
50
52
|
rateLimitDuration: DurationType;
|
|
51
53
|
rateLimitMsg: string;
|
|
52
|
-
|
|
54
|
+
systemEmailSender?: string;
|
|
53
55
|
resendAPIKey?: string;
|
|
54
56
|
}
|
|
55
57
|
export interface InternalConstructor extends Constructor {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Constructor.d.ts","sourceRoot":"","sources":["../../../src/js/types/Constructor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAA4B,MAAM,iBAAiB,CAAC;AAC5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"Constructor.d.ts","sourceRoot":"","sources":["../../../src/js/types/Constructor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { EmailTemplate } from "./email.js";
|
|
2
|
+
import type { AccountCreatedEmailPlaceholders, AccountDeletedEmailPlaceholders, AccountUpdatedEmailPlaceholders, AnnouncementEmailPlaceholders, ApiKeyCreatedEmailPlaceholders, ApiKeyRevokedEmailPlaceholders, ContactFormEmailPlaceholders, DailyReportEmailPlaceholders, EmailChangedEmailPlaceholders, FeedbackEmailPlaceholders, InvoiceEmailPlaceholders, LoginAlertEmailPlaceholders, MagicLinkEmailPlaceholders, MaintenanceEmailPlaceholders, MemberAddedEmailPlaceholders, MemberRemovedEmailPlaceholders, MentionEmailPlaceholders, MonthlyReportEmailPlaceholders, NewCommentEmailPlaceholders, NewDeviceLoginEmailPlaceholders, NewMessageEmailPlaceholders, NotificationEmailPlaceholders, OrderCancelledEmailPlaceholders, OrderConfirmationEmailPlaceholders, OrderDeliveredEmailPlaceholders, OrderShippedEmailPlaceholders, OrganizationInvitationEmailPlaceholders, PasswordChangedEmailPlaceholders, PasswordExpiringEmailPlaceholders, PasswordResetEmailPlaceholders, PaymentFailedEmailPlaceholders, PaymentSuccessEmailPlaceholders, ReceiptEmailPlaceholders, ReminderEmailPlaceholders, SecurityAlertEmailPlaceholders, SubscriptionCancelledEmailPlaceholders, SubscriptionCreatedEmailPlaceholders, SubscriptionRenewedEmailPlaceholders, SupportTicketEmailPlaceholders, TeamInvitationEmailPlaceholders, TrialEndingEmailPlaceholders, TwoFactorCodeEmailPlaceholders, VerifyEmailEmailPlaceholders, WeeklyReportEmailPlaceholders, WelcomeEmailPlaceholders } from "./email/index.js";
|
|
3
|
+
export type ExcludedEmailFields = "currentYear" | "companyName" | "companyUrl" | "companyAddress" | "supportEmail" | "unsubscribeUrl" | "ipAddress" | "deviceName" | "location";
|
|
4
|
+
export interface EmailActionTemplate {
|
|
5
|
+
name: EmailTemplate;
|
|
6
|
+
accountCreated?: Omit<AccountCreatedEmailPlaceholders, ExcludedEmailFields>;
|
|
7
|
+
accountDeleted?: Omit<AccountDeletedEmailPlaceholders, ExcludedEmailFields>;
|
|
8
|
+
accountUpdated?: Omit<AccountUpdatedEmailPlaceholders, ExcludedEmailFields>;
|
|
9
|
+
announcement?: Omit<AnnouncementEmailPlaceholders, ExcludedEmailFields>;
|
|
10
|
+
apiKeyCreated?: Omit<ApiKeyCreatedEmailPlaceholders, ExcludedEmailFields>;
|
|
11
|
+
apiKeyRevoked?: Omit<ApiKeyRevokedEmailPlaceholders, ExcludedEmailFields>;
|
|
12
|
+
contactForm?: Omit<ContactFormEmailPlaceholders, ExcludedEmailFields>;
|
|
13
|
+
dailyReport?: Omit<DailyReportEmailPlaceholders, ExcludedEmailFields>;
|
|
14
|
+
emailChanged?: Omit<EmailChangedEmailPlaceholders, ExcludedEmailFields>;
|
|
15
|
+
feedback?: Omit<FeedbackEmailPlaceholders, ExcludedEmailFields>;
|
|
16
|
+
invoice?: Omit<InvoiceEmailPlaceholders, ExcludedEmailFields>;
|
|
17
|
+
loginAlert?: Omit<LoginAlertEmailPlaceholders, ExcludedEmailFields>;
|
|
18
|
+
magicLink?: Omit<MagicLinkEmailPlaceholders, ExcludedEmailFields>;
|
|
19
|
+
maintenance?: Omit<MaintenanceEmailPlaceholders, ExcludedEmailFields>;
|
|
20
|
+
memberAdded?: Omit<MemberAddedEmailPlaceholders, ExcludedEmailFields>;
|
|
21
|
+
memberRemoved?: Omit<MemberRemovedEmailPlaceholders, ExcludedEmailFields>;
|
|
22
|
+
mention?: Omit<MentionEmailPlaceholders, ExcludedEmailFields>;
|
|
23
|
+
monthlyReport?: Omit<MonthlyReportEmailPlaceholders, ExcludedEmailFields>;
|
|
24
|
+
newComment?: Omit<NewCommentEmailPlaceholders, ExcludedEmailFields>;
|
|
25
|
+
newDeviceLogin?: Omit<NewDeviceLoginEmailPlaceholders, ExcludedEmailFields>;
|
|
26
|
+
newMessage?: Omit<NewMessageEmailPlaceholders, ExcludedEmailFields>;
|
|
27
|
+
notification?: Omit<NotificationEmailPlaceholders, ExcludedEmailFields>;
|
|
28
|
+
orderCancelled?: Omit<OrderCancelledEmailPlaceholders, ExcludedEmailFields>;
|
|
29
|
+
orderConfirmation?: Omit<OrderConfirmationEmailPlaceholders, ExcludedEmailFields>;
|
|
30
|
+
orderDelivered?: Omit<OrderDeliveredEmailPlaceholders, ExcludedEmailFields>;
|
|
31
|
+
orderShipped?: Omit<OrderShippedEmailPlaceholders, ExcludedEmailFields>;
|
|
32
|
+
organizationInvitation?: Omit<OrganizationInvitationEmailPlaceholders, ExcludedEmailFields>;
|
|
33
|
+
passwordChanged?: Omit<PasswordChangedEmailPlaceholders, ExcludedEmailFields>;
|
|
34
|
+
passwordExpiring?: Omit<PasswordExpiringEmailPlaceholders, ExcludedEmailFields>;
|
|
35
|
+
passwordReset?: Omit<PasswordResetEmailPlaceholders, ExcludedEmailFields>;
|
|
36
|
+
paymentFailed?: Omit<PaymentFailedEmailPlaceholders, ExcludedEmailFields>;
|
|
37
|
+
paymentSuccess?: Omit<PaymentSuccessEmailPlaceholders, ExcludedEmailFields>;
|
|
38
|
+
receipt?: Omit<ReceiptEmailPlaceholders, ExcludedEmailFields>;
|
|
39
|
+
reminder?: Omit<ReminderEmailPlaceholders, ExcludedEmailFields>;
|
|
40
|
+
securityAlert?: Omit<SecurityAlertEmailPlaceholders, ExcludedEmailFields>;
|
|
41
|
+
subscriptionCancelled?: Omit<SubscriptionCancelledEmailPlaceholders, ExcludedEmailFields>;
|
|
42
|
+
subscriptionCreated?: Omit<SubscriptionCreatedEmailPlaceholders, ExcludedEmailFields>;
|
|
43
|
+
subscriptionRenewed?: Omit<SubscriptionRenewedEmailPlaceholders, ExcludedEmailFields>;
|
|
44
|
+
supportTicket?: Omit<SupportTicketEmailPlaceholders, ExcludedEmailFields>;
|
|
45
|
+
teamInvitation?: Omit<TeamInvitationEmailPlaceholders, ExcludedEmailFields>;
|
|
46
|
+
trialEnding?: Omit<TrialEndingEmailPlaceholders, ExcludedEmailFields>;
|
|
47
|
+
twoFactorCode?: Omit<TwoFactorCodeEmailPlaceholders, ExcludedEmailFields>;
|
|
48
|
+
verifyEmail?: Omit<VerifyEmailEmailPlaceholders, ExcludedEmailFields>;
|
|
49
|
+
weeklyReport?: Omit<WeeklyReportEmailPlaceholders, ExcludedEmailFields>;
|
|
50
|
+
welcome?: Omit<WelcomeEmailPlaceholders, ExcludedEmailFields>;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=EmailActionTemplate.d.ts.map
|