| chatData |
Type : Prisma.ChatUncheckedCreateInput[]
|
Default value : [
{
id: 1,
title: "ChatA",
userId: "test@me.com",
status: "ACTIVE",
summary: "User started chat",
},
{
id: 2,
title: "ChatB",
userId: "test@me.com",
status: "ACTIVE",
summary: "User started chat",
},
{
id: 3,
title: "ChatC",
userId: "test@me.com",
status: "ACTIVE",
summary: "User started chat",
},
]
|
| prisma |
Default value : new PrismaClient()
|
| userData |
Type : Prisma.UserCreateInput[]
|
Default value : [
{
id: process.env.TURO_ADMIN_EMAIL,
},
{
id: "pallavi@me.com",
},
{
id: "veerain@me.com",
},
{
id: "testreadonly@me.com",
},
{
id: "mohammed_elnabawy@mckinsey.com",
},
{
id: "maria_olivia_lihn@mckinsey.com",
},
{
id: "vladimir_nikolic@external.mckinsey.com",
},
]
|
| activities |
Default value : wf.proxyActivities<typeof _activities>({
startToCloseTimeout: "1 minute",
retry: {
maximumAttempts: 3,
nonRetryableErrorTypes: [],
},
})
|
| commonActivities |
Default value : wf.proxyActivities<typeof _commonActivities>({
startToCloseTimeout: "1 minute",
retry: {
maximumAttempts: 3,
nonRetryableErrorTypes: [],
},
})
|
| activities |
Default value : wf.proxyActivities<typeof complianceActivities>({
startToCloseTimeout: "5 minutes",
retry: {
maximumAttempts: 3,
nonRetryableErrorTypes: [],
},
})
|
| activities |
Default value : wf.proxyActivities<typeof complianceActivities>({
startToCloseTimeout: "5 minutes",
retry: {
maximumAttempts: 3,
nonRetryableErrorTypes: [],
},
})
|
| approvedRiskSubmissionSignal |
Default value : wf.defineSignal<[SignalArgs]>(
"approvedRiskSubmission",
)
|
| rejectedRiskSubmissionSignal |
Default value : wf.defineSignal<[SignalArgs]>(
"rejectedRiskSubmission",
)
|
| activities |
Default value : wf.proxyActivities<typeof complianceActivities>({
startToCloseTimeout: "5 minutes",
retry: {
maximumAttempts: 3,
nonRetryableErrorTypes: [],
},
})
|
| activities |
Default value : proxyActivities<typeof complianceActivities>({
startToCloseTimeout: "5 minutes",
retry: {
maximumAttempts: 3,
nonRetryableErrorTypes: [],
},
})
|
| activities |
Default value : proxyActivities<typeof modelActivities>({
startToCloseTimeout: "10 minutes",
})
|
| activities |
Default value : proxyActivities<typeof modelActivities>({
startToCloseTimeout: "1 minute",
retry: {
maximumAttempts: 3,
nonRetryableErrorTypes: [],
},
})
|
| commonActivities |
Default value : proxyActivities<typeof _commonActivities>({
startToCloseTimeout: "1 minute",
retry: {
maximumAttempts: 3,
nonRetryableErrorTypes: [],
},
})
|
| activities |
Default value : wf.proxyActivities<typeof _activities>({
startToCloseTimeout: "1 minute",
retry: {
maximumAttempts: 3,
nonRetryableErrorTypes: ["METRIC_NOT_FOUND"],
},
})
|
| activities |
Default value : proxyActivities<typeof modelActivities>({
startToCloseTimeout: "10 minutes",
retry: {
maximumAttempts: 3,
nonRetryableErrorTypes: [],
},
})
|
| activities |
Default value : proxyActivities<typeof notificationActivities>({
startToCloseTimeout: "5 minutes",
retry: {
maximumAttempts: 3,
nonRetryableErrorTypes: [],
},
})
|
| approvedProjectCreateSignal |
Default value : wf.defineSignal<[SignalArgs]>(
"approvedProjectCreate",
)
|
| rejectedProjectCreateSignal |
Default value : wf.defineSignal<[SignalArgs]>(
"rejectedProjectCreate",
)
|
| approvedProjectAccessSignal |
Default value : wf.defineSignal<[SignalArgs]>(
"approvedProjectAccess",
)
|
| rejectedProjectAccessSignal |
Default value : wf.defineSignal<[SignalArgs]>(
"rejectedProjectAccess",
)
|
| activities |
Default value : proxyActivities<typeof prismaActivities>({
startToCloseTimeout: '10 minutes',
retry: {
maximumAttempts: 3,
nonRetryableErrorTypes: [],
},
})
|
| activities |
Default value : wf.proxyActivities<typeof _activities>({
startToCloseTimeout: "1 minute",
retry: {
maximumAttempts: 3,
nonRetryableErrorTypes: [],
},
})
|
| activities |
Default value : wf.proxyActivities<typeof _activities>({
startToCloseTimeout: "3 minute",
retry: {
maximumAttempts: 3,
nonRetryableErrorTypes: [],
},
})
|
| activities |
Default value : wf.proxyActivities<typeof _activities>({
startToCloseTimeout: "60 minute",
retry: {
maximumAttempts: 3,
nonRetryableErrorTypes: [],
},
})
|
| activities |
Default value : wf.proxyActivities<typeof _activities>({
startToCloseTimeout: "10 minutes",
retry: {
maximumAttempts: 3,
nonRetryableErrorTypes: [],
},
})
|
| activities |
Default value : wf.proxyActivities<typeof _activities>({
startToCloseTimeout: "10 minute",
retry: {
maximumAttempts: 3,
nonRetryableErrorTypes: [],
},
})
|
| ALERT_SET_APP_TEMPLATE |
Type : object
|
Default value : {
subject: "{{ project.name }} - Alert Set for Metric: {{ metric.name }}",
body: `An alert has been set for the following metric: <strong>{{ metric.name }}</strong>`,
}
|
| METRIC_BREACH_MAX_APP_TEMPLATE |
Type : object
|
Default value : {
subject: '"{{ metric.name }}" has increased',
body: `{{ metric.name }} for {{ project.name }} has increased by {{ diff }} - Detected Value: {{alertTrigger.targetValue}}`,
}
|
| METRIC_BREACH_MIN_APP_TEMPLATE |
Type : object
|
Default value : {
subject: '"{{ metric.name }}" has decreased',
body: `{{ metric.name }} for {{ project.name }} has decreased by {{ diff }} - Detected Value: {{alertTrigger.targetValue}}`,
}
|
| METRIC_PCC_BREACH_MAX_APP_TEMPLATE |
Type : object
|
Default value : {
subject: '"{{ metric.name }}" has increased',
body: `{{ metric.name }} for {{ project.name }} has increased by {{ diff }}% - Detected Value: {{alertTrigger.targetValue}}`,
}
|
| METRIC_PCC_BREACH_MIN_APP_TEMPLATE |
Type : object
|
Default value : {
subject: '"{{ metric.name }}" has decreased',
body: `{{ metric.name }} for {{ project.name }} has decreased by {{ diff }}% - Detected Value: {{alertTrigger.targetValue}}`,
}
|
| ALERT_SET_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject: "{{ project.name }} - Alert Set for Metric: {{ metric.name }}",
body: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
An alert has been set for the following metric: <strong>{{ metric.name }}</strong> <br><br>
<table>
<tr>
<td>Project</td>
<td>{{project.name}}</td>
</tr>
<tr>
<td>Model</td>
<td>{{model.name}}</td>
</tr>
<tr>
<td>Metric</td>
<td>{{metric.name}}</td>
</tr>
</table>
If you have any questions or need further assistance, please contact our support team.
<br><br><br>
<a class="button" href="{{ metricsURL }}">View metrics</a>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| METRIC_BREACH_MAX_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject:
"{{ project.name }} - Maximum Threshold Breach Detected for Metric: {{ metric.name }}",
body: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
We have detected a breach of the maximum threshold for the following metric: <strong>{{ metric.name }}</strong> <br><br>
<table>
<tr>
<td>Project</td>
<td>{{project.name}}</td>
</tr>
<tr>
<td>Model</td>
<td>{{model.name}}</td>
</tr>
<tr>
<td>Metric</td>
<td>{{metric.name}}</td>
</tr>
<tr>
<td>Timestamp</td>
<td>{{alertTrigger.timestamp}}</td>
</tr>
<tr>
<td>Detected Value</td>
<td>{{alertTrigger.targetValue}}</td>
</tr>
<tr>
<td>Maximum Threshold</td>
<td>{{alertParams.max}}</td>
</tr>
</table>
Please take the necessary actions to address this issue.
If you have any questions or need further assistance, please contact our support team.
<br><br><br>
<a class="button" href="{{ metricsURL }}">View metrics</a>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| METRIC_BREACH_MIN_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject:
"{{ project.name }} - Minimum Threshold Breach Detected for Metric: {{ metric.name }}",
body: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
We have detected a breach of the minimum threshold for the following metric: <strong>{{ metric.name }}</strong> <br><br>
<table>
<tr>
<td>Project</td>
<td>{{project.name}}</td>
</tr>
<tr>
<td>Model</td>
<td>{{model.name}}</td>
</tr>
<tr>
<td>Metric</td>
<td>{{metric.name}}</td>
</tr>
<tr>
<td>Timestamp</td>
<td>{{alertTrigger.timestamp}}</td>
</tr>
<tr>
<td>Detected Value</td>
<td>{{alertTrigger.targetValue}}</td>
</tr>
<tr>
<td>Minimum Threshold</td>
<td>{{alertParams.min}}</td>
</tr>
</table>
Please take the necessary actions to address this issue.
If you have any questions or need further assistance, please contact our support team.
<br><br><br>
<a class="button" href="{{ metricsURL }}">View metrics</a>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| METRIC_PCC_BREACH_MAX_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject:
"{{ project.name }} - Maximum Percentage Change Threshold Breach Detected for Metric: {{ metric.name }}",
body: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
We have detected a breach of the maximum percentage change threshold for the following metric: <strong>{{ metric.name }}</strong> <br><br>
<table>
<tr>
<td>Project</td>
<td>{{project.name}}</td>
</tr>
<tr>
<td>Model</td>
<td>{{model.name}}</td>
</tr>
<tr>
<td>Metric</td>
<td>{{metric.name}}</td>
</tr>
<tr>
<td>Timestamp</td>
<td>{{alertTrigger.timestamp}}</td>
</tr>
<tr>
<td>Detected Value</td>
<td>{{alertTrigger.targetValue}}</td>
</tr>
<tr>
<td>Maximum Percentage Change Threshold</td>
<td>{{alertParams.pcc}}%</td>
</tr>
</table>
Please take the necessary actions to address this issue.
If you have any questions or need further assistance, please contact our support team.
<br><br><br>
<a class="button" href="{{ metricsURL }}">View metrics</a>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| METRIC_PCC_BREACH_MIN_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject:
"{{ project.name }} - Minimum Percentage Change Threshold Breach Detected for Metric: {{ metric.name }}",
body: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
We have detected a breach of the minimum percentage change threshold for the following metric: <strong>{{ metric.name }}</strong> <br><br>
<table>
<tr>
<td>Project</td>
<td>{{project.name}}</td>
</tr>
<tr>
<td>Model</td>
<td>{{model.name}}</td>
</tr>
<tr>
<td>Metric</td>
<td>{{metric.name}}</td>
</tr>
<tr>
<td>Timestamp</td>
<td>{{alertTrigger.timestamp}}</td>
</tr>
<tr>
<td>Detected Value</td>
<td>{{alertTrigger.targetValue}}</td>
</tr>
<tr>
<td>Minimum Percentage Change Threshold</td>
<td>{{alertParams.pcc}}%</td>
</tr>
</table>
Please take the necessary actions to address this issue.
If you have any questions or need further assistance, please contact our support team.
<br><br><br>
<a class="button" href="{{ metricsURL }}">View metrics</a>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| alertEventsConfig |
Type : object
|
Default value : {
[AlertEvents.METRIC_BREACH_MAX]: {
entityTable: "metricsData",
severity: NotificationSeverity.WARNING,
channelConfig: {
[NotificationChannel.APP]: METRIC_BREACH_MAX_APP_TEMPLATE,
[NotificationChannel.EMAIL]: METRIC_BREACH_MAX_EMAIL_TEMPLATE,
},
},
[AlertEvents.METRIC_BREACH_MIN]: {
entityTable: "metricsData",
severity: NotificationSeverity.WARNING,
channelConfig: {
[NotificationChannel.APP]: METRIC_BREACH_MIN_APP_TEMPLATE,
[NotificationChannel.EMAIL]: METRIC_BREACH_MIN_EMAIL_TEMPLATE,
},
},
[AlertEvents.METRIC_PCC_BREACH_MAX]: {
entityTable: "metricsData",
severity: NotificationSeverity.WARNING,
channelConfig: {
[NotificationChannel.APP]: METRIC_PCC_BREACH_MAX_APP_TEMPLATE,
[NotificationChannel.EMAIL]: METRIC_PCC_BREACH_MAX_EMAIL_TEMPLATE,
},
},
[AlertEvents.METRIC_PCC_BREACH_MIN]: {
entityTable: "metricsData",
severity: NotificationSeverity.WARNING,
channelConfig: {
[NotificationChannel.APP]: METRIC_PCC_BREACH_MIN_APP_TEMPLATE,
[NotificationChannel.EMAIL]: METRIC_PCC_BREACH_MIN_EMAIL_TEMPLATE,
},
},
[AlertEvents.ALERT_SET]: {
entityTable: "alerts",
severity: NotificationSeverity.INFO,
channelConfig: {
[NotificationChannel.APP]: ALERT_SET_APP_TEMPLATE,
[NotificationChannel.EMAIL]: ALERT_SET_EMAIL_TEMPLATE,
},
},
}
|
| metricEvents |
Type : []
|
Default value : [
AlertEvents.METRIC_BREACH_MAX,
AlertEvents.METRIC_BREACH_MIN,
AlertEvents.METRIC_PCC_BREACH_MAX,
AlertEvents.METRIC_PCC_BREACH_MIN,
]
|
| alertsService |
Default value : new AlertService(prisma)
|
| metricsService |
Default value : new MetricsService(
prisma,
projectService,
modelService,
null,
)
|
| modelService |
Default value : new ModelService(
prisma,
projectService,
null,
null,
null,
null,
)
|
| notificationService |
Default value : new NotificationService(prisma, null, null)
|
| prisma |
Default value : new PrismaService()
|
| projectService |
Default value : new ProjectService(prisma, null, null)
|
| APPROVED_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject: "Project Approved: {{ project.name }}",
html: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }},<br><br>
Your <b>{{ project.name }}</b> project proposal has been thoroughly reviewed and approved by {{ approvedBy }}. We are excited to move forward with the development of your analytics use case and are enthusiastic about the positive impact it can have on our goals and objectives.<br><br>
To kick off the development phase, please consider the following:<br>
<ol>
<li>
<b>Kick-off Meeting</b>: Schedule a kick-off meeting to discuss the project timeline, milestones, and any specific requirements you may have with your team.
</li>
<li>
<b>Development Resources</b>: If you require any additional resources or support during the development process, please let {{ approvedBy }} know. We are here to ensure you have everything you need for a successful implementation.
</li>
<li>
<b>Regular Updates</b> : We encourage regular updates on your progress and any challenges you may encounter. Open communication is key to addressing issues promptly and ensuring the project stays on track.
</li>
</ol>
Congratulations on reaching this milestone, and we appreciate your dedication to advancing this initiative. If you have any questions or need clarification on any aspect of the project, feel free to reach out to {{ approvedBy }}.<br><br>
Thank you for your commitment, and we look forward to witnessing the success of your analytics use case. <br><br>
</div>
<a class="button" href="{{ projectURL }}">View Project</a>
</div>
${EMAIL_FOOTER}
`,
}
|
| APPROVER_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject: "Project Pending approval: {{ project.name }} ",
html: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
{{ requestedBy }} has requested your approval for project <b>{{ project.name }}</b>. <br><br>
Please find below, project details:<br><br>
<table>
<tr>
<td>Project</td>
<td>{{project.name}}</td>
</tr>
<tr>
<td>Description</td>
<td>{{project.description}}</td>
</tr>
<tr>
<td>Business Objective</td>
<td>{{project.businessObjective}}</td>
</tr>
<tr>
<td>Estimated Revenue</td>
<td>{{project.estimatedRevenue}}</td>
</tr>
<tr>
<td>Budget</td>
<td>{{project.budget}}</td>
</tr>
<tr>
<td>Target Variable</td>
<td>{{project.targetVariable}}</td>
</tr>
</table>
<br><br>
</div>
<a class="button" href="{{ requestsURL }}">View Requests</a>
</div>
${EMAIL_FOOTER}
`,
}
|
| DECLINED_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject: "Project Declined: {{ project.name }} ",
html: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
After careful consideration, {{ rejectedBy }} has decided to reject your project proposal. While we understand that this news may be disappointing, please know that the decision was made after a thorough evaluation of various factors, including alignment with our current priorities, resource availability, and project objectives. <br><br>
We appreciate the time and effort you dedicated to preparing and submitting your proposal. Your commitment to advancing our goals is commendable, and we value your contributions to our team.<br><br>
If you have any questions or would like feedback on the decision, {{ rejectedBy }} is available to discuss the specifics. Additionally, we encourage you to consider resubmitting your proposal in the future, as priorities and circumstances within the organisation may evolve.<br><br>
We are here to support you in finding new opportunities or exploring alternative projects. Feel free to reach out if you would like to discuss potential next steps or if there's anything else we can assist you with.<br><br>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| REQUESTER_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject: "Project Submitted for approval: {{ project.name }} ",
html: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
Thanks for submitting a new project to Turo <br><br>
Please find below, project details:<br><br>
<table>
<tr>
<td>Project</td>
<td>{{project.name}}</td>
</tr>
<tr>
<td>Description</td>
<td>{{project.description}}</td>
</tr>
<tr>
<td>Business Objective</td>
<td>{{project.businessObjective}}</td>
</tr>
<tr>
<td>Estimated Revenue</td>
<td>{{project.estimatedRevenue}}</td>
</tr>
<tr>
<td>Budget</td>
<td>{{project.budget}}</td>
</tr>
<tr>
<td>Target Variable</td>
<td>{{project.targetVariable}}</td>
</tr>
</table>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| APPROVED_USER_PROJECT_ACCESS_APP_TEMPLATE |
Type : object
|
Default value : {
subject: "{{project.name}} project access approved ",
body: `Your access request has been approved by {{ approvedBy }}`,
}
|
| ASSIGN_USER_PROJECT_ROLE_APP_TEMPLATE |
Type : object
|
Default value : {
subject: "{{ project.name }} project collaboration",
body: `You've been added as {{ role.article }} {{ role.roleText }} by {{ assigner }}`,
}
|
| DECLINED_USER_PROJECT_ACCESS_APP_TEMPLATE |
Type : object
|
Default value : {
subject: "{{project.name}} project access declined ",
body: `Your access request has been declined by {{ rejectedBy }}`,
}
|
| REQUEST_USER_PROJECT_ACCESS_APP_TEMPLATE |
Type : object
|
Default value : {
subject: "{{ project.name }} project access request ",
body: `{{ requestedBy }} has requested access to the {{ project.name }} project.`,
}
|
| UPDATE_USER_PROJECT_ROLE_APP_TEMPLATE |
Type : object
|
Default value : {
subject: "{{ project.name }} project role change",
body: `You've been added as {{ role.article }} {{ role.roleText }} by {{ assigner }}`,
}
|
| APPROVED_USER_PROJECT_ACCESS_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject: "Access request approved: {{ project.name }}",
body: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
Your <strong>{{project.name}}</strong> project access request has been approved by {{ approvedBy }}. <br><br>
<a class="button" href="{{ projectURL }}">Open project</a>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| ASSIGN_USER_PROJECT_ROLE_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject:
"{{assigner}} has invited you to {{role.verbText}} the {{ project.name }}",
body: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
You have been invited as {{role.article}} <strong>{{ role.roleText }}</strong> to the <strong>{{project.name}}</strong> project by {{assigner}}. <br><br>
<a class="button" href="{{ projectURL }}">View project</a>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| DECLINED_USER_PROJECT_ACCESS_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject: "Access request declined: {{ project.name }}",
body: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
{{ rejectedBy }} has declined your access request to project <strong>{{project.name}}</strong>. Please reach out to the project team for further explanation. <br><br>
<a class="button" href="{{ projectURL }}">Open project</a>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| REQUEST_USER_PROJECT_ACCESS_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject: "Project access request: {{ project.name }}",
body: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
We wanted to inform you that {{ requestedBy }} has requested access to the <strong>{{project.name}}</strong> project. <br><br>
<div class="description" >"{{ description }}"</div> <br><br>
<a class="button" href="{{ requestURL }}">View request</a>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| UPDATE_USER_PROJECT_ROLE_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject: "Project role change: {{project.name}}",
body: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
You have been invited as {{role.article}} <strong>{{ role.roleText }}</strong> to the <strong>{{project.name}}</strong> project by {{assigner}}. <br><br>
<a class="button" href="{{ projectURL }}">View project</a>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| ASSIGN_USER_BU_ROLE_APP_TEMPLATE |
Type : object
|
Default value : {
subject: "Turo {{ role.name }} collaboration",
body: `You've been added as {{ role.name }} on {{{ bu.name }}} by {{ assigner }}`,
}
|
| DELETE_USER_BU_ROLE_APP_TEMPLATE |
Type : object
|
Default value : {
subject: "Turo {{ role.name }} update",
body: `You've been removed as {{ role.name }} on {{{ bu.name }}} by {{ removedBy }}`,
}
|
| ASSIGN_USER_BU_ROLE_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject: "{{assigner}} has added you as {{{ bu.name }}} {{ role.name}}",
body: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
{{assigner}} has added you as a {{{ bu.name }}} {{ role.name}}. You will now have an overview of all Projects in {{{ bu.name}}}. You will automatically be added as an admin to all new and existing projects, allowing you to manage collaborators at the project level. <br><br>
<a class="button" href="{{ overviewURL }}">See projects overview</a>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| DELETE_USER_BU_ROLE_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject: "Business Unit role change",
body: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
{{removedBy}} has removed you as {{{ bu.name }}} {{ role.name}}. You will no longer have access to the organisation overview of all Projects in {{ bu.name}}. You will still be admin of any business units that are still active for you. This removal does not affect admin rights on any projects you have been added to as admin. <br><br>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| ASSIGN_USER_TURO_ROLE_APP_TEMPLATE |
Type : object
|
Default value : {
subject: "Turo {{ role.name }} collaboration",
body: `You've been added as {{ role.name }} on Turo by {{ assigner }}`,
}
|
| DELETE_USER_TURO_ROLE_APP_TEMPLATE |
Type : object
|
Default value : {
subject: "Turo {{ role.name }} update",
body: `You've been removed as {{ role.name }} on Turo by {{ removedBy }}`,
}
|
| ASSIGN_USER_TURO_ROLE_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject: "{{assigner}} has added you as {{role.name}} on Turo",
body: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
{{assigner}} has added you as {{ role.name }} on Turo. You will now have an overview of all Projects across all Business Units. In the settings section on Turo, you will be able to select other Turo admins as well as admins for each of the Business Units. <br><br>
<a class="button" href="{{ overviewURL }}">See projects overview</a>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| DELETE_USER_TURO_ROLE_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject: "Turo role change",
body: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
{{removedBy}} has removed you as {{ role.name }} on Turo. You will no longer have access to the organisation overview of all Projects. You will still be admin of any business units that are still active for you. This removal does not affect admin rights on any projects you have been added to as admin. <br><br>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| awsProvider |
Default value : costProvider.getCostProvider(provider.aws)
|
| costProvider |
Default value : new CostProvider()
|
| costService |
Default value : new CostService(prisma, null, costProvider)
|
| prisma |
Default value : new PrismaService()
|
| azureProvider |
Default value : costProvider.getCostProvider(provider.azure)
|
| costProvider |
Default value : new CostProvider()
|
| costService |
Default value : new CostService(prisma, null, costProvider)
|
| prisma |
Default value : new PrismaService()
|
| BU_ADMIN_POLICY |
Type : object
|
Default value : {
name: "BU Admin Policy",
statements: [
...PROJECT_ADMIN_POLICY.statements,
{
resource: "turo:compliance",
action: "compliance:ReadSettings"
},
{
resource: "turo:compliance",
action: "compliance:ReadRule"
},
{
resource: "turo:compliance",
action: "compliance:ReadPolicy"
},
],
}
|
| POLICY_DATA |
Type : []
|
Default value : [
TURO_ADMIN_POLICY,
PROJECT_ADMIN_POLICY,
BU_ADMIN_POLICY,
PROJECT_USER_POLICY,
PROJECT_READONLY_POLICY,
TURO_READONLY_POLICY,
TURO_SECURITY_MANAGER_POLICY,
]
|
| PROJECT_ADMIN_POLICY |
Type : object
|
Default value : {
name: "Project Admin Policy",
statements: [
{
resource: "turo:project",
action: "project:ReadProject",
},
{
resource: "turo:project",
action: "project:UpdateProject",
},
{
resource: "turo:project",
action: "project:ArchiveProject",
},
{
resource: "turo:project",
action: "project:CreateKey",
},
{
resource: "turo:model",
action: "*",
},
{
resource: "turo:cost",
action: "*",
},
{
resource: "turo:metrics",
action: "*",
},
...PROJECT_COMPLIANCE_USER_ACTIONS,
],
}
|
| PROJECT_READONLY_POLICY |
Type : object
|
Default value : {
name: "Project Readonly Policy",
statements: [
{
resource: "turo:project",
action: "project:ReadProject",
},
{
resource: "turo:model",
action: "model:ReadModel",
},
{
resource: "turo:cost",
action: "cost:ReadCost",
},
{
resource: "turo:metrics",
action: "metrics:ReadMetrics",
},
...PROJECT_COMPLIANCE_READ_ACTIONS
],
}
|
| PROJECT_USER_POLICY |
Type : object
|
Default value : {
name: "Project User Policy",
statements: [
{
resource: "turo:project",
action: "project:ReadProject",
},
{
resource: "turo:project",
action: "project:CreateKey"
},
{
resource: "turo:model",
action: "*",
},
{
resource: "turo:cost",
action: "*",
},
{
resource: "turo:metrics",
action: "*",
},
...PROJECT_COMPLIANCE_USER_ACTIONS
],
}
|
| TURO_ADMIN_POLICY |
Type : object
|
Default value : {
name: "Turo Admin Policy",
statements: [
{
resource: "*",
action: "*",
},
],
}
|
| TURO_READONLY_POLICY |
Type : object
|
Default value : {
name: "Turo Readonly Policy",
statements: [
{
resource: "turo:project",
action: "project:ReadProject",
},
{
resource: "turo:model",
action: "model:ReadModel",
},
{
resource: "turo:cost",
action: "cost:ReadCost",
},
{
resource: "turo:compliance",
action: "compliance:ReadCompliance",
},
{
resource: "turo:compliance",
action: "compliance:ReadRisk",
},
{
resource: "turo:compliance",
action: "compliance:ReadEvidence",
},
{
resource: "turo:compliance",
action: "compliance:ReadSettings"
},
{
resource: "turo:compliance",
action: "compliance:ReadRule"
},
{
resource: "turo:compliance",
action: "compliance:ReadPolicy"
},
],
}
|
| TURO_SECURITY_MANAGER_POLICY |
Type : object
|
Default value : {
name: "Turo Security Manager Policy",
statements: [
...PROJECT_COMPLIANCE_READ_ACTIONS,
{
resource: "turo:compliance",
action: "compliance:ReadSettings"
},
{
resource: "turo:compliance",
action: "compliance:CreateRule"
},
{
resource: "turo:compliance",
action: "compliance:ReadRule"
},
{
resource: "turo:compliance",
action: "compliance:UpdateRule"
},
{
resource: "turo:compliance",
action: "compliance:DeleteRule"
},
{
resource: "turo:compliance",
action: "compliance:CreatePolicy"
},
{
resource: "turo:compliance",
action: "compliance:ReadPolicy"
},
{
resource: "turo:compliance",
action: "compliance:UpdatePolicy"
},
{
resource: "turo:compliance",
action: "compliance:DeletePolicy"
},
]
}
|
| BUSINESS_UNIT_CREATE_ACTION |
Type : string
|
Default value : "businessUnit:CreateBusinessUnit"
|
| BUSINESS_UNIT_DELETE_ACTION |
Type : string
|
Default value : "businessUnit:DeleteBusinessUnit"
|
| BUSINESS_UNIT_READ_ACTION |
Type : string
|
Default value : "businessUnit:ReadBusinessUnit"
|
| BUSINESS_UNIT_RESOURCE_NAME |
Type : string
|
Default value : "turo:businessUnit"
|
| BUSINESS_UNIT_UPDATE_ACTION |
Type : string
|
Default value : "businessUnit:UpdateBusinessUnit"
|
| businessUnitService |
Default value : new BusinessUnitService(
prisma,
userService,
roleService,
notificationService,
)
|
| complianceRiskService |
Default value : new ComplianceRiskService(
prisma,
temporalProvider,
notificationService,
requestService,
)
|
| complianceRuleService |
Default value : new ComplianceRuleService(
prisma,
userService,
temporalProvider,
)
|
| complianceService |
Default value : new ComplianceService(
prisma,
temporalProvider,
complianceRiskService,
projectSettingsService,
policyService,
)
|
| emailProvider |
Default value : new EmailProvider()
|
| keycloakProvider |
Default value : new KeycloakProvider()
|
| notificationService |
Default value : new NotificationService(
prisma,
temporalProvider,
emailProvider,
)
|
| policyService |
Default value : new PolicyService(prisma, keycloakProvider)
|
| prisma |
Default value : new PrismaService()
|
| projectSettingsService |
Default value : new SettingsService(
prisma,
roleService,
requestService,
notificationService,
temporalProvider,
userService,
businessUnitService,
)
|
| requestService |
Default value : new RequestService(
prisma,
temporalProvider,
notificationService,
)
|
| roleService |
Default value : new RoleService(prisma)
|
| temporalProvider |
Default value : new TemporalProvider()
|
| userService |
Default value : new UserService(prisma, keycloakProvider)
|
| businessUnitService |
Default value : new BusinessUnitService(
prisma,
userService,
roleService,
notificationService,
)
|
| emailProvider |
Default value : new EmailProvider()
|
| httpService |
Default value : new HttpService()
|
| influxDbProvider |
Default value : new InfluxDbProvider()
|
| keycloakProvider |
Default value : new KeycloakProvider()
|
| mlflowProvider |
Default value : new MLflowProvider(httpService, influxDbProvider)
|
| modelService |
Default value : new ModelService(
prisma,
projectService,
mlflowProvider,
opentelemetryProvider,
temporalProvider,
notificationService,
)
|
| notificationService |
Default value : new NotificationService(
prisma,
temporalProvider,
emailProvider,
)
|
| opentelemetryProvider |
Default value : new OpentelemetryProvider(influxDbProvider)
|
| policyService |
Default value : new PolicyService(prisma, keycloakProvider)
|
| prisma |
Default value : new PrismaService()
|
| projectService |
Default value : new ProjectService(
prisma,
requestService,
policyService,
projectSettingsService,
)
|
| projectSettingsService |
Default value : new SettingsService(
prisma,
roleService,
requestService,
notificationService,
temporalProvider,
userService,
businessUnitService,
)
|
| requestService |
Default value : new RequestService(
prisma,
temporalProvider,
notificationService,
)
|
| roleService |
Default value : new RoleService(prisma)
|
| temporalProvider |
Default value : new TemporalProvider()
|
| userService |
Default value : new UserService(prisma, keycloakProvider)
|
| businessUnitService |
Default value : new BusinessUnitService(
prisma,
userService,
roleService,
notificationService,
)
|
| costProvider |
Default value : new CostProvider()
|
| costService |
Default value : new CostService(prisma, null, costProvider)
|
| emailProvider |
Default value : new EmailProvider()
|
| keycloakProvider |
Default value : new KeycloakProvider()
|
| notificationService |
Default value : new NotificationService(
prisma,
temporalProvider,
emailProvider,
)
|
| prisma |
Default value : new PrismaService()
|
| projectService |
Default value : new ProjectService(prisma, null, null, null)
|
| roleService |
Default value : new RoleService(prisma)
|
| settingsService |
Default value : new SettingsService(
prisma,
roleService,
null,
notificationService,
temporalProvider,
userService,
businessUnitService,
turoSettingsService,
)
|
| temporalProvider |
Default value : new TemporalProvider()
|
| turoSettingsService |
Default value : new TuroSettingsService(
prisma,
userService,
roleService,
notificationService,
)
|
| userService |
Default value : new UserService(prisma, keycloakProvider)
|
| businessUnitSettingsEventsConfig |
Type : object
|
Default value : {
[BusinessUnitSettingsEvents.ASSIGN_USER_BU_ROLE]: {
entityTable: "userBURole",
severity: NotificationSeverity.INFO,
channelConfig: {
[NotificationChannel.APP]: ASSIGN_USER_BU_ROLE_APP_TEMPLATE,
[NotificationChannel.EMAIL]: ASSIGN_USER_BU_ROLE_EMAIL_TEMPLATE,
},
},
[BusinessUnitSettingsEvents.DELETE_USER_BU_ROLE]: {
entityTable: "userBURole",
severity: NotificationSeverity.INFO,
channelConfig: {
[NotificationChannel.APP]: DELETE_USER_BU_ROLE_APP_TEMPLATE,
[NotificationChannel.EMAIL]: DELETE_USER_BU_ROLE_EMAIL_TEMPLATE,
},
},
}
|
| COMMENT_APP_TEMPLATE |
Type : object
|
Default value : {
subject: "New comment on request - {{ request.name }}",
body: `There's a new comment by {{ commenter }} on {{ requestType }} request titled {{ request.name }}.`,
}
|
| COMMENT_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject: "New comment: {{ request.name }} {{ requestType }} request",
body: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
You have received a new comment on the <strong>{{ request.name }}</strong> {{ requestType }} request by {{ commenter }}. <br><br>
<a class="button" href="{{ requestURL }}">View comment</a>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| COMPLIANCE_APPROVE_RISK_APP_TEMPLATE |
Type : object
|
Default value : {
subject: "{{{ project.name }}} - Compliance Risk Approved",
body: `A compliance risk has been approved: {{{ rule.name }}}`,
}
|
| COMPLIANCE_ASSIGN_RISK_APP_TEMPLATE |
Type : object
|
Default value : {
subject: "{{{ project.name }}} - Compliance Risk Assigned",
body: `A compliance risk has been assigned to you: {{{ rule.name }}}`,
}
|
| COMPLIANCE_REJECT_RISK_APP_TEMPLATE |
Type : object
|
Default value : {
subject: "{{{ project.name }}} - Compliance Risk Rejected",
body: `A compliance risk has been rejected: {{{ rule.name }}}`,
}
|
| COMPLIANCE_SUBMIT_RISK_APP_TEMPLATE |
Type : object
|
Default value : {
subject: "{{{ project.name }}} - Compliance Risk Submitted",
body: `A compliance risk has been submitted: {{{ rule.name }}}`,
}
|
| COMPLIANCE_UPDATE_INTERNAL_POLICY_APP_TEMPLATE |
Type : object
|
Default value : {
subject: "{{{ policy.name }}}: Policy has been edited",
body: `Internal policy has been edited by {{ updatedBy }}`,
}
|
| COMPLIANCE_UPDATE_RULE_APP_TEMPLATE |
Type : object
|
Default value : {
subject: "{{{ rule.name }}} has been edited",
body: `Control has been edited by {{ updatedBy }}`,
}
|
| COMPLIANCE_APPROVE_RISK_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject: "{{{ project.name }}} - Compliance Risk Approved: {{{ rule.name }}}",
body: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
Your compliance risk submission has been approved: <strong>{{{ rule.name }}}</strong> by {{ approver }}. <br><br>
<table>
<tr>
<td>Project</td>
<td>{{project.name}}</td>
</tr>
<tr>
<td>Risk</td>
<td>{{rule.name}}</td>
</tr>
<tr>
<td>Severity</td>
<td>{{rule.severity}}</td>
</tr>
<tr>
<td>Category</td>
<td>{{rule.category}}</td>
</tr>
<tr>
<td>Description</td>
<td>{{rule.description}}</td>
</tr>
</table>
<br><br>
If you have any questions or need further assistance, please contact our support team. <br><br>
<a class="button" href="{{ formattedRequestUrl }}">View Request</a>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| COMPLIANCE_ASSIGN_RISK_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject: "{{{ project.name }}} - Compliance Risk Assigned: {{{ rule.name }}}",
body: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
A compliance risk has been assigned to you: <strong>{{{ rule.name }}}</strong> by {{ assigner }}. <br><br>
<table>
<tr>
<td>Project</td>
<td>{{project.name}}</td>
</tr>
<tr>
<td>Risk</td>
<td>{{rule.name}}</td>
</tr>
<tr>
<td>Severity</td>
<td>{{rule.severity}}</td>
</tr>
<tr>
<td>Category</td>
<td>{{rule.category}}</td>
</tr>
<tr>
<td>Description</td>
<td>{{rule.description}}</td>
</tr>
</table>
<br><br>
If you have any questions or need further assistance, please contact our support team. <br><br>
<a class="button" href="{{ complianceUrl }}">View Risks</a>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| COMPLIANCE_REJECT_RISK_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject: "{{{ project.name }}} - Compliance Risk Rejected: {{{ rule.name }}}",
body: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
Your compliance risk submission has been rejected: <strong>{{{ rule.name }}}</strong> by {{ approver }}. <br><br>
<table>
<tr>
<td>Project</td>
<td>{{project.name}}</td>
</tr>
<tr>
<td>Risk</td>
<td>{{rule.name}}</td>
</tr>
<tr>
<td>Severity</td>
<td>{{rule.severity}}</td>
</tr>
<tr>
<td>Category</td>
<td>{{rule.category}}</td>
</tr>
<tr>
<td>Description</td>
<td>{{rule.description}}</td>
</tr>
</table>
<br><br>
If you have any questions or need further assistance, please contact our support team. <br><br>
<a class="button" href="{{ formattedRequestUrl }}">View Request</a>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| COMPLIANCE_SUBMIT_RISK_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject: "{{{ project.name }}} - Compliance Risk Submitted: {{{ rule.name }}}",
body: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
New compliance risk submission for compliance risk: <strong>{{{ rule.name }}}</strong> has been submitted by {{ submittedBy }}. <br><br>
<table>
<tr>
<td>Project</td>
<td>{{project.name}}</td>
</tr>
<tr>
<td>Risk</td>
<td>{{rule.name}}</td>
</tr>
<tr>
<td>Severity</td>
<td>{{rule.severity}}</td>
</tr>
<tr>
<td>Category</td>
<td>{{rule.category}}</td>
</tr>
<tr>
<td>Description</td>
<td>{{rule.description}}</td>
</tr>
</table>
<br><br>
If you have any questions or need further assistance, please contact our support team. <br><br>
<a class="button" href="{{ complianceUrl }}">View Risks</a>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| COMPLIANCE_UPDATE_INTERNAL_POLICY_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject: "Policy updates: {{{ policy.name }}}",
body: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
The internal policy <strong>{{{ policy.name }}}</strong> has been edited by {{ updatedBy }}. <br><br>
Please find the changes below:
<table>
<tr>
<td>Policy name</td>
<td>{{policy.name}}</td>
</tr>
</table>
<br><br>
<a class="button" href="{{ policyUrl }}">View Changes</a>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| COMPLIANCE_UPDATE_RULE_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject: "Control updates: {{{ rule.name }}}",
body: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
The control <strong>{{{ rule.name }}}</strong> has been edited by {{ updatedBy }}. <br><br>
Please find the changes below:
<table>
<tr>
<td>Control category</td>
<td>{{rule.category}}</td>
</tr>
</table>
<br><br>
<a class="button" href="{{ ruleUrl }}">View Changes</a>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| COMPLIANCE_CONNECTION_ERROR_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject: "Connection interrupted: {{{ endpoint.name }}}",
body: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hi {{ sendToName }}, <br><br>
Your API key doesn't work anymore. Please check it to restore your <strong>{{{ endpoint.name }}}</strong> connection.
<br><br>
<a class="button" href="{{ connectionEditUrl }}">Edit connection</a>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| COMPLIANCE_EVIDENCE_READ_ACTION |
Type : string
|
Default value : "compliance:ReadEvidence"
|
| COMPLIANCE_EVIDENCE_SUBMIT_ACTION |
Type : string
|
Default value : "compliance:SubmitEvidence"
|
| COMPLIANCE_JURISDICTIONS |
Type : object
|
Default value : {
[Jurisdiction.INTERNATIONAL]: {
key: Jurisdiction.INTERNATIONAL,
name: "International",
description: "Applies to multiple countries or regions",
},
[Jurisdiction.US]: {
key: Jurisdiction.US,
name: "United States",
description: "Applies to the United States",
},
[Jurisdiction.EU]: {
key: Jurisdiction.EU,
name: "European Union",
description: "Applies to the European Union",
},
[Jurisdiction.UK]: {
key: Jurisdiction.UK,
name: "United Kingdom",
description: "Applies to the United Kingdom",
},
}
|
| COMPLIANCE_POLICY_CREATE_ACTION |
Type : string
|
Default value : "compliance:CreatePolicy"
|
| COMPLIANCE_POLICY_DELETE_ACTION |
Type : string
|
Default value : "compliance:DeletePolicy"
|
| COMPLIANCE_POLICY_READ_ACTION |
Type : string
|
Default value : "compliance:ReadPolicy"
|
| COMPLIANCE_POLICY_UPDATE_ACTION |
Type : string
|
Default value : "compliance:UpdatePolicy"
|
| COMPLIANCE_READ_ACTION |
Type : string
|
Default value : "compliance:ReadCompliance"
|
| COMPLIANCE_RESOURCE_NAME |
Type : string
|
Default value : "turo:compliance"
|
| COMPLIANCE_RISK_READ_ACTION |
Type : string
|
Default value : "compliance:ReadRisk"
|
| COMPLIANCE_RISK_SUBMIT_ACTION |
Type : string
|
Default value : "compliance:SubmitRisk"
|
| COMPLIANCE_RISK_UPDATE_ACTION |
Type : string
|
Default value : "compliance:UpdateRisk"
|
| COMPLIANCE_RULE_CREATE_ACTION |
Type : string
|
Default value : "compliance:CreateRule"
|
| COMPLIANCE_RULE_DELETE_ACTION |
Type : string
|
Default value : "compliance:DeleteRule"
|
| COMPLIANCE_RULE_READ_ACTION |
Type : string
|
Default value : "compliance:ReadRule"
|
| COMPLIANCE_RULE_UPDATE_ACTION |
Type : string
|
Default value : "compliance:UpdateRule"
|
| COMPLIANCE_SETTINGS_READ_ACTION |
Type : string
|
Default value : "compliance:ReadSettings"
|
| COMPLIANCE_SUBMIT_ACTION |
Type : string
|
Default value : "compliance:SubmitCompliance"
|
| COMPLIANCE_UPDATE_INTERNAL_POLICY_PING_TEMPLATE |
Type : object
|
Default value : {
subject: "Policy edited",
body: `{{{ policy.name }}} has been edited in the Policy Centre.`,
}
|
| COMPLIANCE_UPDATE_RULE_PING_TEMPLATE |
Type : object
|
Default value : {
subject: "Control edited",
body: `{{{ rule.name }}} has been edited in the Policy Centre.`,
}
|
| complianceEventsConfig |
Type : object
|
Default value : {
[ComplianceEvents.COMPLIANCE_ASSIGN_RISK]: {
entityTable: "complianceRisk",
severity: NotificationSeverity.INFO,
channelConfig: {
[NotificationChannel.APP]: COMPLIANCE_ASSIGN_RISK_APP_TEMPLATE,
[NotificationChannel.EMAIL]: COMPLIANCE_ASSIGN_RISK_EMAIL_TEMPLATE,
},
},
[ComplianceEvents.COMPLIANCE_SUBMIT_RISK]: {
entityTable: "complianceRisk",
severity: NotificationSeverity.INFO,
channelConfig: {
[NotificationChannel.APP]: COMPLIANCE_SUBMIT_RISK_APP_TEMPLATE,
[NotificationChannel.EMAIL]: COMPLIANCE_SUBMIT_RISK_EMAIL_TEMPLATE,
},
},
[ComplianceEvents.COMPLIANCE_APPROVE_RISK]: {
entityTable: "complianceRisk",
severity: NotificationSeverity.SUCCESS,
channelConfig: {
[NotificationChannel.APP]: COMPLIANCE_APPROVE_RISK_APP_TEMPLATE,
[NotificationChannel.EMAIL]: COMPLIANCE_APPROVE_RISK_EMAIL_TEMPLATE,
},
},
[ComplianceEvents.COMPLIANCE_REJECT_RISK]: {
entityTable: "complianceRisk",
severity: NotificationSeverity.ERROR,
channelConfig: {
[NotificationChannel.APP]: COMPLIANCE_REJECT_RISK_APP_TEMPLATE,
[NotificationChannel.EMAIL]: COMPLIANCE_REJECT_RISK_EMAIL_TEMPLATE,
},
},
[ComplianceEvents.COMPLIANCE_UPDATE_RULE]: {
entityTable: "complianceRule",
severity: NotificationSeverity.INFO,
channelConfig: {
[NotificationChannel.APP]: COMPLIANCE_UPDATE_RULE_APP_TEMPLATE,
[NotificationChannel.EMAIL]: COMPLIANCE_UPDATE_RULE_EMAIL_TEMPLATE,
[NotificationChannel.PING]: COMPLIANCE_UPDATE_RULE_PING_TEMPLATE,
},
},
[ComplianceEvents.COMPLIANCE_UPDATE_POLICY]: {
entityTable: "compliancePolicy",
severity: NotificationSeverity.INFO,
channelConfig: {
[NotificationChannel.APP]: COMPLIANCE_UPDATE_INTERNAL_POLICY_APP_TEMPLATE,
[NotificationChannel.EMAIL]:
COMPLIANCE_UPDATE_INTERNAL_POLICY_EMAIL_TEMPLATE,
[NotificationChannel.PING]:
COMPLIANCE_UPDATE_INTERNAL_POLICY_PING_TEMPLATE,
},
},
}
|
| CONNECT_MODEL_APP_TEMPLATE |
Type : object
|
Default value : {
subject: "Model connection request",
body: `{{requestedByName}} has requested to connect a model to {{projectName}}. \n\n {{description}}`,
}
|
| CONNECT_MODEL_EMAIL_TEMPLATE |
Type : object
|
Default value : {
subject: "{{ projectName }} - request for connecting a model",
body: `
${EMAIL_HEADER}
<div class="content">
<div class="paragraph">
Hello {{ sendToName }}, <br><br>
<strong>{{ requestedByName }}</strong> has submitted a request to register a model for {{ projectName }}. <br><br>
<blockquote>
"{{ description }}"
</blockquote>
<br><br>
<a class="button" href="{{ requestURL }}">Connect model</a>
</div>
</div>
${EMAIL_FOOTER}
`,
}
|
| COST_CATEGORIES |
Type : object
|
Default value : {
SECURITY: "Security",
COST_MANAGEMENT: "Cost Management",
ANALYTICS: "Analytics",
COMPUTE: "Compute",
STORAGE: "Storage",
NETWORKING: "Networking",
MESSAGING: "Messaging",
TAX: "Tax",
MONITORING: "Monitoring",
}
|
| COST_CREATE_ACTION |
Type : string
|
Default value : "cost:CreateCost"
|
| COST_DELETE_ACTION |
Type : string
|
Default value : "cost:DeleteCost"
|
| COST_PUSH_METRICS_ACTION |
Type : string
|
Default value : "cost:PushMetrics"
|
| COST_READ_ACTION |
Type : string
|
Default value : "cost:ReadCost"
|
| COST_RESOURCE_NAME |
Type : string
|
Default value : "turo:cost"
|
| COST_UPDATE_ACTION |
Type : string
|
Default value : "cost:UpdateCost"
|
| COST_CONNECTION_ERROR_MESSAGE |
Type : string
|
Default value : "Failed to connect to the cost provider."
|
| COST_CONNECTION_ERROR_TYPE |
Type : string
|
Default value : "CostConnectionError"
|
| COST_PUSH_METRICS_PROVIDERS |
Type : []
|
Default value : [
CostProvider.openai,
CostProvider.anthropic,
]
|
| costEventsConfig |
Type : object
|
Default value : {
[CostEvents.COST_CONNECTION_ERROR]: {
entityTable: "costEndpoint",
severity: NotificationSeverity.ERROR,
channelConfig: {
[NotificationChannel.APP]: null,
[NotificationChannel.EMAIL]: COMPLIANCE_CONNECTION_ERROR_EMAIL_TEMPLATE,
},
},
}
|
| costProvider |
Default value : new CostProvider()
|
| costService |
Default value : new CostService(prisma, null, costProvider)
|
| kubecostProvider |
Default value : costProvider.getCostProvider(provider.kubecost)
|
| prisma |
Default value : new PrismaService()
|
| costProvider |
Default value : new CostProvider()
|
| costService |
Default value : new CostService(prisma, null, costProvider)
|
| prisma |
Default value : new PrismaService()
|
| costTypes |
Type : object
|
Default value : {
"cpuCost": "Compute",
"gpuCost": "Compute",
"ramCost": "Compute",
"pvCost": "Storage",
"networkCost": "Networking",
"loadBalancerCost": "Compute",
"sharedCost": "Compute",
}
|
| CRYPTO_ALGO |
Default value : process.env.CRYPTO_ALGO
|
| CRYPTO_ENCRYPTION_KEY |
Default value : process.env.CRYPTO_ENCRYPTION_KEY
|
| days |
Type : number
|
Default value : 90
|
| decreasePeriod |
Type : object
|
Default value : { start: 30, end: 40 }
|
| floatData |
Default value : generateRandomData(METRICS_DATA_START_DATE, days, 0.25, 20, decreasePeriod)
|
| integerData |
Default value : generateRandomData(METRICS_DATA_START_DATE, days, 10, 1000, decreasePeriod, true)
|
| METRICS_DATA_START_DATE |
Default value : new Date()
|
| percentageData |
Default value : generateRandomData(METRICS_DATA_START_DATE, days, 0.25, 0.7, decreasePeriod)
|
| emailProvider |
Default value : new EmailProvider()
|
| httpService |
Default value : new HttpService()
|
| influxDbProvider |
Default value : new InfluxDbProvider()
|
| metricsService |
Default value : new MetricsService(
prisma,
projectService,
modelService,
temporalProvider,
)
|
| mlflowProvider |
Default value : new MLflowProvider(httpService, influxDbProvider)
|
| modelService |
Default value : new ModelService(
prisma,
projectService,
mlflowProvider,
opentelemetryProvider,
temporalProvider,
notificationService,
)
|
| notificationService |
Default value : new NotificationService(
prisma,
temporalProvider,
emailProvider,
)
|
| opentelemetryProvider |
Default value : new OpentelemetryProvider(influxDbProvider)
|
| prisma |
Default value : new PrismaService()
|
| projectService |
Default value : new ProjectService(prisma)
|
| temporalProvider |
Default value : new TemporalProvider()
|
| emailProvider |
Default value : new EmailProvider()
|
| notificationService |
Default value : new NotificationService(
prisma,
null,
emailProvider,
)
|
| prisma |
Default value : new PrismaService()
|
| EventIdentifierConfigs |
Type : object
|
Default value : {
...alertEventsConfig,
...projectEventsConfig,
...projectSettingsEventsConfig,
...requestEventsConfig,
...complianceEventsConfig,
...turoSettingsEventsConfig,
...costEventsConfig,
}
|
| EventIdentifiers |
Type : object
|
Default value : {
...AlertEvents,
...ProjectEvents,
...ProjectSettingsEvents,
...RequestEvents,
...ComplianceEvents,
...TuroSettingsEvents,
...CostEvents,
}
|
| IAM_CREATE_POLICY_ACTION |
Type : string
|
Default value : "iam:CreatePolicy"
|
| IAM_CREATE_ROLE_ACTION |
Type : string
|
Default value : "iam:CreateRole"
|
| IAM_DELETE_POLICY_ACTION |
Type : string
|
Default value : "iam:DeletePolicy"
|
| IAM_DELETE_ROLE_ACTION |
Type : string
|
Default value : "iam:DeleteRole"
|
| IAM_READ_ROLE_ACTION |
Type : string
|
Default value : "iam:ReadRole"
|
| IAM_RESOURCE_NAME |
Type : string
|
Default value : "turo:iam"
|
| IAM_UPDATE_ROLE_ACTION |
Type : string
|
Default value : "iam:UpdateRole"
|
| KUBECOST_COST_TYPE_MAP |
Type : object
|
Default value : {
cpuCost: COST_CATEGORIES.COMPUTE,
gpuCost: COST_CATEGORIES.COMPUTE,
ramCost: COST_CATEGORIES.STORAGE,
pvCost: COST_CATEGORIES.STORAGE,
networkCost: COST_CATEGORIES.NETWORKING,
loadBalancerCost: COST_CATEGORIES.COMPUTE,
sharedCost: COST_CATEGORIES.COMPUTE,
}
|
| metricsService |
Default value : new MetricsService(
prisma,
projectService,
modelService,
null,
)
|
| modelService |
Default value : new ModelService(
prisma,
projectService,
null,
null,
null,
null,
)
|
| prisma |
Default value : new PrismaService()
|
| projectService |
Default value : new ProjectService(prisma)
|
| metricsService |
Default value : new MetricsService(prisma, projectService, modelService, null)
|
| modelService |
Default value : new ModelService(prisma, projectService, null, null, null, null)
|
| prisma |
Default value : new PrismaService()
|
| projectService |
Default value : new ProjectService(prisma)
|
| MODEL_COST_PER_1K_COMPLETION_TOKENS |
Type : object
|
Default value : {
"claude-instant-v1": 0.0024,
"claude-v2": 0.024,
"claude-v2:1": 0.024,
"claude-3-sonnet-20240229-v1:0": 0.015,
"claude-3-5-sonnet-20240620-v1:0": 0.015,
"claude-3-5-sonnet-20241022-v2:0": 0.015,
"claude-3-haiku-20240307-v1:0": 0.00125,
}
|
| MODEL_COST_PER_1K_PROMPT_TOKENS |
Type : object
|
Default value : {
"claude-instant-v1": 0.0008,
"claude-v2": 0.008,
"claude-v2:1": 0.008,
"claude-3-sonnet-20240229-v1:0": 0.003,
"claude-3-5-sonnet-20240620-v1:0": 0.003,
"claude-3-5-sonnet-20241022-v2:0": 0.003,
"claude-3-haiku-20240307-v1:0": 0.00025,
}
|
| MODEL_COST_PER_1K_COMPLETION_TOKENS |
Type : object
|
Default value : {
// OpenAI o1-preview output
"o1-preview": 0.06,
"o1-preview-2024-09-12": 0.06,
// OpenAI o1-mini output
"o1-mini": 0.012,
"o1-mini-2024-09-12": 0.012,
// GPT-4o-mini output
"gpt-4o-mini": 0.0006,
"gpt-4o-mini-2024-07-18": 0.0006,
// GPT-4o output
"gpt-4o": 0.01,
"gpt-4o-2024-05-13": 0.015,
"gpt-4o-2024-08-06": 0.01,
// GPT-4 output
"gpt-4": 0.06,
"gpt-4-0314": 0.06,
"gpt-4-0613": 0.06,
"gpt-4-32k": 0.12,
"gpt-4-32k-0314": 0.12,
"gpt-4-32k-0613": 0.12,
"gpt-4-vision-preview": 0.03,
"gpt-4-1106-preview": 0.03,
"gpt-4-0125-preview": 0.03,
"gpt-4-turbo-preview": 0.03,
"gpt-4-turbo": 0.03,
"gpt-4-turbo-2024-04-09": 0.03,
// # GPT-3.5 output
// # gpt-3.5-turbo points at gpt-3.5-turbo-0613 until Feb 16, 2024.
// # Switches to gpt-3.5-turbo-0125 after.
"gpt-3.5-turbo": 0.002,
"gpt-3.5-turbo-0125": 0.0015,
"gpt-3.5-turbo-0301": 0.002,
"gpt-3.5-turbo-0613": 0.002,
"gpt-3.5-turbo-1106": 0.002,
"gpt-3.5-turbo-instruct": 0.002,
"gpt-3.5-turbo-16k": 0.004,
"gpt-3.5-turbo-16k-0613": 0.004,
// # Azure GPT-35 output
"gpt-35-turbo": 0.002, // Azure OpenAI version of ChatGPT
"gpt-35-turbo-0125": 0.0015,
"gpt-35-turbo-0301": 0.002, // Azure OpenAI version of ChatGPT
"gpt-35-turbo-0613": 0.002,
"gpt-35-turbo-instruct": 0.002,
"gpt-35-turbo-16k": 0.004,
"gpt-35-turbo-16k-0613": 0.004,
// # Others
"text-ada-001": 0.0004,
ada: 0.0004,
"text-babbage-001": 0.0005,
babbage: 0.0005,
"text-curie-001": 0.002,
curie: 0.002,
"text-davinci-003": 0.02,
"text-davinci-002": 0.02,
"code-davinci-002": 0.02,
// # Fine Tuned output
"babbage-002-finetuned": 0.0016,
"davinci-002-finetuned": 0.012,
"gpt-3.5-turbo-0613-finetuned": 0.006,
"gpt-3.5-turbo-1106-finetuned": 0.006,
"gpt-3.5-turbo-0125-finetuned": 0.006,
"gpt-4o-mini-2024-07-18-finetuned": 0.0012,
// # Azure Fine Tuned output
"babbage-002-azure-finetuned": 0.0004,
"davinci-002-azure-finetuned": 0.002,
"gpt-35-turbo-0613-azure-finetuned": 0.002,
// # Legacy fine-tuned models
"ada-finetuned-legacy": 0.0016,
"babbage-finetuned-legacy": 0.0024,
"curie-finetuned-legacy": 0.012,
"davinci-finetuned-legacy": 0.12,
}
|
| MODEL_COST_PER_1K_PROMPT_TOKENS |
Type : object
|
Default value : {
// OpenAI o1-preview input
"o1-preview": 0.015,
"o1-preview-2024-09-12": 0.015,
// OpenAI o1-mini input
"o1-mini": 0.003,
"o1-mini-2024-09-12": 0.003,
// GPT-4o-mini input
"gpt-4o-mini": 0.00015,
"gpt-4o-mini-2024-07-18": 0.00015,
// GPT-4o input
"gpt-4o": 0.0025,
"gpt-4o-2024-05-13": 0.005,
"gpt-4o-2024-08-06": 0.0025,
// GPT-4 input
"gpt-4": 0.03,
"gpt-4-0314": 0.03,
"gpt-4-0613": 0.03,
"gpt-4-32k": 0.06,
"gpt-4-32k-0314": 0.06,
"gpt-4-32k-0613": 0.06,
"gpt-4-vision-preview": 0.01,
"gpt-4-1106-preview": 0.01,
"gpt-4-0125-preview": 0.01,
"gpt-4-turbo-preview": 0.01,
"gpt-4-turbo": 0.01,
"gpt-4-turbo-2024-04-09": 0.01,
// GPT-3.5 input
// gpt-3.5-turbo points at gpt-3.5-turbo-0613 until Feb 16, 2024.
// Switches to gpt-3.5-turbo-0125 after.
"gpt-3.5-turbo": 0.0015,
"gpt-3.5-turbo-0125": 0.0005,
"gpt-3.5-turbo-0301": 0.0015,
"gpt-3.5-turbo-0613": 0.0015,
"gpt-3.5-turbo-1106": 0.001,
"gpt-3.5-turbo-instruct": 0.0015,
"gpt-3.5-turbo-16k": 0.003,
"gpt-3.5-turbo-16k-0613": 0.003,
// # Azure GPT-35 input
"gpt-35-turbo": 0.0015, // Azure OpenAI version of ChatGPT
"gpt-35-turbo-0125": 0.0005,
"gpt-35-turbo-0301": 0.002, // Azure OpenAI version of ChatGPT
"gpt-35-turbo-0613": 0.0015,
"gpt-35-turbo-instruct": 0.0015,
"gpt-35-turbo-16k": 0.003,
"gpt-35-turbo-16k-0613": 0.003,
// # Others
"text-ada-001": 0.0004,
ada: 0.0004,
"text-babbage-001": 0.0005,
babbage: 0.0005,
"text-curie-001": 0.002,
curie: 0.002,
"text-davinci-003": 0.02,
"text-davinci-002": 0.02,
"code-davinci-002": 0.02,
// # Fine Tuned input
"babbage-002-finetuned": 0.0016,
"davinci-002-finetuned": 0.012,
"gpt-3.5-turbo-0613-finetuned": 0.003,
"gpt-3.5-turbo-1106-finetuned": 0.003,
"gpt-3.5-turbo-0125-finetuned": 0.003,
"gpt-4o-mini-2024-07-18-finetuned": 0.0003,
// # Azure Fine Tuned input
"babbage-002-azure-finetuned": 0.0004,
"davinci-002-azure-finetuned": 0.002,
"gpt-35-turbo-0613-azure-finetuned": 0.0015,
// # Legacy fine-tuned models
"ada-finetuned-legacy": 0.0016,
"babbage-finetuned-legacy": 0.0024,
"curie-finetuned-legacy": 0.012,
"davinci-finetuned-legacy": 0.12,
}
|
| MODEL_CREATE_ACTION |
Type : string
|
Default value : "model:CreateModel"
|
| MODEL_DELETE_ACTION |
Type : string
|
Default value : "model:DeleteModel"
|
| MODEL_PUSH_METRICS_ACTION |
Type : string
|
Default value : "model:PushMetrics"
|
| MODEL_READ_ACTION |
Type : string
|
Default value : "model:ReadModel"
|
| MODEL_RESOURCE_NAME |
Type : string
|
Default value : "turo:model"
|
| MODEL_UPDATE_ACTION |
Type : string
|
Default value : "model:UpdateModel"
|
| modelEventsConfig |
Type : object
|
Default value : {
[ModelEvents.MODEL_CONNECTION_REQUEST]: {
entityTable: "models",
severity: NotificationSeverity.INFO,
channelConfig: {
[NotificationChannel.APP]: CONNECT_MODEL_APP_TEMPLATE,
[NotificationChannel.EMAIL]: CONNECT_MODEL_EMAIL_TEMPLATE,
},
},
}
|
| prisma |
Default value : new PrismaService()
|
| PROJECT_CREATE_ACTION |
Type : string
|
Default value : "project:CreateProject"
|
| PROJECT_CREATE_KEY_ACTION |
Type : string
|
Default value : "project:CreateKey"
|
| PROJECT_DELETE_ACTION |
Type : string
|
Default value : "project:DeleteProject"
|
| PROJECT_READ_ACTION |
Type : string
|
Default value : "project:ReadProject"
|
| PROJECT_RESOURCE_NAME |
Type : string
|
Default value : "turo:project"
|
| PROJECT_UPDATE_ACTION |
Type : string
|
Default value : "project:UpdateProject"
|
| projectEventsConfig |
Type : object
|
Default value : {
[ProjectEvents.PROJECT_BUDGET_BREACH_MAX]: {
entityTable: "project",
},
[ProjectEvents.PROJECT_BUDGET_BREACH_MIN]: {
entityTable: "project",
},
[ProjectEvents.PROJECT_BUDGET_PCC_BREACH_HIGH]: {
entityTable: "project",
},
[ProjectEvents.PROJECT_BUDGET_PCC_BREACH_LOW]: {
entityTable: "project",
},
}
|
| projectSettingsEventsConfig |
Type : object
|
Default value : {
[ProjectSettingsEvents.ASSIGN_USER_PROJECT_ROLE]: {
entityTable: "userProjectRole",
severity: NotificationSeverity.INFO,
channelConfig: {
[NotificationChannel.APP]: ASSIGN_USER_PROJECT_ROLE_APP_TEMPLATE,
[NotificationChannel.EMAIL]: ASSIGN_USER_PROJECT_ROLE_EMAIL_TEMPLATE,
},
},
[ProjectSettingsEvents.UPDATE_USER_PROJECT_ROLE]: {
entityTable: "userProjectRole",
severity: NotificationSeverity.INFO,
channelConfig: {
[NotificationChannel.APP]: UPDATE_USER_PROJECT_ROLE_APP_TEMPLATE,
[NotificationChannel.EMAIL]: UPDATE_USER_PROJECT_ROLE_EMAIL_TEMPLATE,
},
},
[ProjectSettingsEvents.REQUEST_USER_PROJECT_ACCESS]: {
entityTable: "userProjectRole",
severity: NotificationSeverity.INFO,
channelConfig: {
[NotificationChannel.APP]: REQUEST_USER_PROJECT_ACCESS_APP_TEMPLATE,
[NotificationChannel.EMAIL]: REQUEST_USER_PROJECT_ACCESS_EMAIL_TEMPLATE,
},
},
[ProjectSettingsEvents.APPROVED_USER_PROJECT_ACCESS]: {
entityTable: "userProjectRole",
severity: NotificationSeverity.INFO,
channelConfig: {
[NotificationChannel.APP]: APPROVED_USER_PROJECT_ACCESS_APP_TEMPLATE,
[NotificationChannel.EMAIL]: APPROVED_USER_PROJECT_ACCESS_EMAIL_TEMPLATE,
},
},
[ProjectSettingsEvents.DECLINED_USER_PROJECT_ACCESS]: {
entityTable: "userProjectRole",
severity: NotificationSeverity.INFO,
channelConfig: {
[NotificationChannel.APP]: DECLINED_USER_PROJECT_ACCESS_APP_TEMPLATE,
[NotificationChannel.EMAIL]: DECLINED_USER_PROJECT_ACCESS_EMAIL_TEMPLATE,
},
},
}
|
| requestEventsConfig |
Type : object
|
Default value : {
[RequestEvents.COMMENT]: {
entityTable: "request",
severity: NotificationSeverity.INFO,
channelConfig: {
[NotificationChannel.APP]: COMMENT_APP_TEMPLATE,
[NotificationChannel.EMAIL]: COMMENT_EMAIL_TEMPLATE,
},
},
}
|
| requestTypeTemplates |
Type : object
|
Default value : {
[RequestType.PROJECT]: {
requestText: "project",
},
[RequestType.PROJECT_ACCESS]: {
requestText: "project access",
},
[RequestType.INFRA]: {
requestText: "infrastructure",
},
[RequestType.USER]: {
requestText: "user",
},
[RequestType.MODEL]: {
requestText: "model",
},
[RequestType.COMPLIANCE_RISK]: {
requestText: "compliance risk",
},
}
|
| roleTemplates |
Type : object
|
Default value : {
[Roles.PROJECT_ADMIN]: {
verbText: "administer",
roleText: "Administrator",
article: "an",
},
[Roles.PROJECT_READONLY]: {
verbText: "view",
roleText: "Viewer",
article: "a",
},
[Roles.PROJECT_USER]: {
verbText: "edit",
roleText: "Editor",
article: "an",
},
}
|
| temporalProvider |
Default value : new TemporalProvider()
|
| SETTINGS_DELETE_ACTION |
Type : string
|
Default value : "settings:DeleteSettings"
|
| SETTINGS_READ_ACTION |
Type : string
|
Default value : "settings:ReadSettings"
|
| SETTINGS_RESOURCE_NAME |
Type : string
|
Default value : "turo:settings"
|
| SETTINGS_UPDATE_ACTION |
Type : string
|
Default value : "settings:UpdateSettings"
|
| temporalProvider |
Default value : new TemporalProvider()
|
| turoSettingsEventsConfig |
Type : object
|
Default value : {
[TuroSettingsEvents.ASSIGN_USER_TURO_ROLE]: {
entityTable: "userTuroRole",
severity: NotificationSeverity.INFO,
channelConfig: {
[NotificationChannel.APP]: ASSIGN_USER_TURO_ROLE_APP_TEMPLATE,
[NotificationChannel.EMAIL]: ASSIGN_USER_TURO_ROLE_EMAIL_TEMPLATE,
},
},
[TuroSettingsEvents.DELETE_USER_TURO_ROLE]: {
entityTable: "userTuroRole",
severity: NotificationSeverity.INFO,
channelConfig: {
[NotificationChannel.APP]: DELETE_USER_TURO_ROLE_APP_TEMPLATE,
[NotificationChannel.EMAIL]: DELETE_USER_TURO_ROLE_EMAIL_TEMPLATE,
},
},
}
|
| validationPipe |
Default value : new ValidationPipe({
whitelist: true,
forbidNonWhitelisted: true,
})
|
| validationPipe |
Default value : new ValidationPipe({
whitelist: true,
forbidNonWhitelisted: true,
})
|
| validationPipe |
Default value : new ValidationPipe({
whitelist: true,
forbidNonWhitelisted: true,
})
|
| validationPipe |
Default value : new ValidationPipe({
whitelist: true,
forbidNonWhitelisted: true,
})
|