feat: add libraries
This commit is contained in:
27
libraries/deno-commons-mod.ts
Normal file
27
libraries/deno-commons-mod.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
export function compareVersion(ver1: string, ver2: string) {
|
||||
if (ver1 === ver2) { return 0; }
|
||||
let ver1Parts = ver1.split(".");
|
||||
let ver2Parts = ver2.split(".");
|
||||
let ver1Main = parseInt(ver1Parts[0]);
|
||||
let ver2Main = parseInt(ver2Parts[0]);
|
||||
if (ver1Main > ver2Main) { return 1; }
|
||||
if (ver1Main < ver2Main) { return -1; }
|
||||
let ver1Second = parseInt(ver1Parts[1]);
|
||||
let ver2Second = parseInt(ver2Parts[1]);
|
||||
if (ver1Second > ver2Second) { return 1; }
|
||||
if (ver1Second < ver2Second) { return -1; }
|
||||
let ver1Third = parseInt(ver1Parts[2]);
|
||||
let ver2Third = parseInt(ver2Parts[2]);
|
||||
if (ver1Third > ver2Third) { return 1; }
|
||||
if (ver1Third < ver2Third) { return -1; }
|
||||
return 0;
|
||||
}
|
||||
|
||||
export function isOn(val: string) {
|
||||
let lowerVal = (val == null)? val: val.toLowerCase();
|
||||
return lowerVal === "on" || lowerVal === "yes" || lowerVal === "1" || lowerVal === "true";
|
||||
}
|
||||
|
||||
export function isEnvOn(envKey: string) {
|
||||
return Deno.env.get(envKey);
|
||||
}
|
||||
79
libraries/deno-dingtalk-mod.ts
Normal file
79
libraries/deno-dingtalk-mod.ts
Normal file
@@ -0,0 +1,79 @@
|
||||
import { hmac } from "https://deno.land/x/hmac@v2.0.1/mod.ts";
|
||||
|
||||
async function postHttpJson(url: string, body: any) {
|
||||
const resp = await fetch(url, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify(body),
|
||||
});
|
||||
if (resp.status !== 200) {
|
||||
console.error("Send HTTP POST failed", resp);
|
||||
throw `Send HTTP POST to: ${url}, failed: ${resp.status}`;
|
||||
}
|
||||
return resp;
|
||||
}
|
||||
|
||||
const BASE_DING_TALK_URL = "https://oapi.dingtalk.com/robot/send";
|
||||
|
||||
export interface SendDingTalkMessageOptions {
|
||||
base_url?: string;
|
||||
access_token: string;
|
||||
sec_token?: string;
|
||||
}
|
||||
|
||||
export interface DingTalkMessageAt {
|
||||
atMobiles?: Array<string>;
|
||||
atUserIds?: Array<string>;
|
||||
isAtAll?: boolean,
|
||||
}
|
||||
|
||||
export interface DingTalkTextMessage {
|
||||
content: string;
|
||||
at?: DingTalkMessageAt;
|
||||
}
|
||||
|
||||
export interface DingTalkMarkdownMessage {
|
||||
title?: string,
|
||||
content: string;
|
||||
at?: DingTalkMessageAt;
|
||||
}
|
||||
|
||||
export async function sendDingTalkTextMessage(message: DingTalkTextMessage, options: SendDingTalkMessageOptions) {
|
||||
return await sendDingTalkMessage({
|
||||
msgtype: "text",
|
||||
text: {
|
||||
content: message.content,
|
||||
}
|
||||
}, options);
|
||||
}
|
||||
|
||||
export async function sendDingTalkMarkdownMessage(message: DingTalkMarkdownMessage, options: SendDingTalkMessageOptions) {
|
||||
return await sendDingTalkMessage({
|
||||
msgtype: "markdown",
|
||||
markdown: {
|
||||
title: message.title || "untitled",
|
||||
text: message.content,
|
||||
}
|
||||
}, options);
|
||||
}
|
||||
|
||||
export async function sendDingTalkMessage(message: any, options: SendDingTalkMessageOptions) {
|
||||
let send_url = options.base_url || BASE_DING_TALK_URL;
|
||||
send_url += "?access_token=" + encodeURIComponent(options.access_token);
|
||||
if (options.sec_token) {
|
||||
const timestamp = new Date().getTime();
|
||||
const timestamp_and_secret = `${timestamp}\n${options.sec_token}`;
|
||||
const sec_token_sign = hmac("sha256", options.sec_token, timestamp_and_secret, "utf8", "base64");
|
||||
send_url += "×tamp=" + timestamp;
|
||||
send_url += "&sign=" + encodeURIComponent(sec_token_sign);
|
||||
}
|
||||
const resp = await postHttpJson(send_url, message);
|
||||
const send_ding_talk_resp_body = await resp.json();
|
||||
if (send_ding_talk_resp_body.errcode !== 0) {
|
||||
console.error("Send DingTalk message failed", send_ding_talk_resp_body);
|
||||
throw `Send DingTalk message failed: ${send_ding_talk_resp_body.errcode}`;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user