@naturalcycles/nodejs-lib
Version:
Standard library for Node.js
106 lines (105 loc) • 3.02 kB
TypeScript
import { AnyObject, CommonLogger } from '@naturalcycles/js-lib';
import { InspectAnyOptions } from '..';
/**
* Properties that exists both in SlackApiBody (as per Slack API) and SlackMessage (our abstraction).
*/
export interface SlackMessageProps {
/**
* @default bot
*/
username?: string;
channel?: string;
icon_url?: string;
/**
* @default :spider_web:
*/
icon_emoji?: string;
attachments?: SlackMessageAttachment[];
}
export interface SlackApiBody extends SlackMessageProps {
text: string;
}
export interface SlackMessage<CTX = any> extends SlackMessageProps {
/**
* The only *required* field.
*
* You can throw anything at it, it'll handle it appropriately:
* String - as is
* Object - pass via util.inspect()
* Array - will pass each item via util.inspect() and join with \n
* Error - print the stack nicely
*
* If you don't want the default Array behavior - you can pre-util.inspect() it yourself to your liking.
*/
items: any;
/**
* Optional "context object", to be used by `messagePrefixHook`.
*/
ctx?: CTX;
/**
* Keys-values will be rendered as MessageAttachment with Fields
*/
kv?: AnyObject;
/**
* If specified - adds @name1, @name2 in the end of the message
*/
mentions?: string[];
/**
* By default it ignores possible errors from slack
*
* @default false
*/
throwOnError?: boolean;
}
export interface SlackAttachmentField {
title: string;
value: string;
short?: boolean;
}
export interface SlackMessageAttachment {
fallback?: string;
color?: 'good' | 'warning' | 'danger' | string;
pretext?: string;
author_name?: string;
author_link?: string;
author_icon?: string;
title?: string;
title_link?: string;
text?: string;
fields?: SlackAttachmentField[];
image_url?: string;
thumb_url?: string;
footer?: string;
footer_icon?: string;
ts?: number;
callback_id?: string;
mrkdwn_in?: ('pretext' | 'text' | 'fields')[];
}
/**
* Return `null` to skip (filter out) the message completely.
*/
export declare type SlackMessagePrefixHook<CTX = any> = (msg: SlackMessage<CTX>) => string[] | null | Promise<string[] | null>;
export interface SlackServiceCfg<CTX = any> {
/**
* Undefined means slack is disabled.
*/
webhookUrl?: string;
defaults?: Partial<SlackMessage>;
/**
* Function to return an array of "prefix tokens" (will be joined by ': ').
* Allows to skip (filter out) the message by returning `null`.
*/
messagePrefixHook: SlackMessagePrefixHook<CTX>;
/**
* By default SlackService logs every message to console.log
* Pass another logger if needed.
* Pass `noopLogger` to suppress logging completely.
*/
logger: CommonLogger;
/**
* Defaults to:
* includeErrorData: true
* includeErrorStack: true
*/
inspectOptions: InspectAnyOptions;
}