156 lines
3 KiB
TypeScript
156 lines
3 KiB
TypeScript
namespace _heimdall.notification_kinds.email
|
|
{
|
|
|
|
/**
|
|
*/
|
|
function parameters_schema(
|
|
) : _heimdall.helpers.json_schema.type_schema
|
|
{
|
|
return {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"access": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"host": {
|
|
"type": "string"
|
|
},
|
|
"port": {
|
|
"type": "integer"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
},
|
|
"password": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"host",
|
|
"port",
|
|
"username",
|
|
"password"
|
|
]
|
|
},
|
|
"sender": {
|
|
"type": "string"
|
|
},
|
|
"receivers": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"tags": {
|
|
"description": "list of strings, which will be placed in the e-mail subject",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"default": []
|
|
}
|
|
},
|
|
"required": [
|
|
"access",
|
|
"sender",
|
|
"receivers"
|
|
]
|
|
};
|
|
}
|
|
|
|
|
|
/**
|
|
*/
|
|
function normalize_order_node(
|
|
node : any
|
|
) : any
|
|
{
|
|
return Object.assign(
|
|
{
|
|
},
|
|
node
|
|
);
|
|
}
|
|
|
|
|
|
/**
|
|
*/
|
|
async function notify(
|
|
parameters : any,
|
|
name : string,
|
|
check : type_check,
|
|
state : type_item_state,
|
|
info : any
|
|
) : Promise<void>
|
|
{
|
|
const nm_nodemailer = require("nodemailer");
|
|
|
|
// datetime = _datetime.datetime.utcnow()
|
|
const now : Date = new Date(Date.now());
|
|
|
|
const transporter = nm_nodemailer.createTransport(
|
|
{
|
|
"host": parameters.access.host,
|
|
"port": parameters.access.port,
|
|
"secure": true,
|
|
"auth": {
|
|
"user": parameters.access.username,
|
|
"pass": parameters.access.password,
|
|
}
|
|
}
|
|
);
|
|
const send_result = await transporter.sendMail(
|
|
{
|
|
"from": parameters.sender,
|
|
"to": parameters.receivers.join(","),
|
|
"subject": lib_plankton.string.coin(
|
|
"{{tags}} {{title}}",
|
|
{
|
|
"tags": (
|
|
parameters.tags
|
|
.concat([_heimdall.condition_show(state.condition)])
|
|
.map(tag => lib_plankton.string.coin("[{{tag}}]", tag.toUpperCase()))
|
|
.join(" ")
|
|
),
|
|
"title": check.name,
|
|
}
|
|
),
|
|
"text": JSON.stringify(info, undefined, "\t"),
|
|
"headers": {
|
|
"Date": lib_plankton.string.coin(
|
|
"{{day_of_week}}, {{day_of_month}} {{month}} {{year}} {{hour}}:{{minute}}:{{second}} {{time_offset}}",
|
|
{
|
|
"day_of_week": now.getDay().toFixed(0),
|
|
"day_of_month": now.getDate().toFixed(0),
|
|
"month": (now.getMonth() + 1).toFixed(0),
|
|
"year": now.getFullYear().toFixed(0),
|
|
"hour": now.getHours().toFixed(0),
|
|
"minute": now.getMinutes().toFixed(0),
|
|
"second": now.getSeconds().toFixed(0),
|
|
// "time_offset": (now.getTimezoneOffset() / 60).toFixed(0),
|
|
"time_offset": "+0000",
|
|
}
|
|
),
|
|
}
|
|
}
|
|
);
|
|
return Promise.resolve<void>(undefined);
|
|
}
|
|
|
|
|
|
/**
|
|
*/
|
|
export function notification_kind_implementation(
|
|
) : type_notification_kind
|
|
{
|
|
return {
|
|
"parameters_schema": parameters_schema,
|
|
"normalize_order_node": normalize_order_node,
|
|
"notify": notify,
|
|
};
|
|
}
|
|
|
|
}
|