58 lines
1.6 KiB
TypeScript
58 lines
1.6 KiB
TypeScript
import { remark } from 'remark';
|
|
import html from 'remark-html';
|
|
import sanitizeHtml from 'sanitize-html'
|
|
|
|
export function formatDateToMonthDayYear(date: Date): string {
|
|
return date.toLocaleDateString("en-US", {
|
|
month: "long",
|
|
day: "numeric",
|
|
year: "numeric",
|
|
hour: "numeric",
|
|
minute: "numeric",
|
|
timeZoneName: "short",
|
|
});
|
|
}
|
|
|
|
export async function markdownToHtml(markdown: string): Promise<string> {
|
|
|
|
const result = await remark().use(html).process(markdown)
|
|
const sanitizedHtml = sanitizeHtml(result.toString(), {
|
|
allowedTags: sanitizeHtml.defaults.allowedTags.concat(['img', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'blockquote', 'code', 'pre']),
|
|
allowedAttributes: {
|
|
...sanitizeHtml.defaults.allowedAttributes,
|
|
img: ['src', 'alt'],
|
|
},
|
|
})
|
|
if(sanitizedHtml == ""){
|
|
//Already html
|
|
return markdown
|
|
}
|
|
return sanitizedHtml
|
|
}
|
|
|
|
export function encodeId(documentId: string): string {
|
|
const salt = "salty_aff"
|
|
return Buffer.from(documentId + salt).toString('base64')
|
|
}
|
|
|
|
export function decodeId(encodedId: string): string {
|
|
const salt = "salty_aff"
|
|
return Buffer.from(encodedId, 'base64').toString().replace(salt, '')
|
|
}
|
|
|
|
export function btoa(str: string): string {
|
|
let buffer: Buffer;
|
|
|
|
if (Buffer.isBuffer(str)) {
|
|
buffer = str;
|
|
} else {
|
|
buffer = Buffer.from(str, "binary");
|
|
}
|
|
return buffer.toString("base64");
|
|
}
|
|
|
|
export function linkvertise(userid: number, link: string): string {
|
|
let base_url = `https://link-to.net/${userid}/${Math.floor(Math.random() * 1000)}/dynamic`;
|
|
let href = `${base_url}?r=${btoa(encodeURI(link))}`;
|
|
return href;
|
|
} |