38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
const jwa = require("jwa");
|
|
|
|
var STR64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".split("");
|
|
|
|
function base64url(string: string, encoding: string) {
|
|
// @ts-ignore
|
|
return Buffer.from(string, encoding).toString("base64").replace(/=/g, "").replace(/\+/g, "-").replace(/\//g, "_");
|
|
}
|
|
|
|
function to64String(input: number, current = ""): string {
|
|
if (input < 0 && current.length == 0) {
|
|
input = input * -1;
|
|
}
|
|
var modify = input % 64;
|
|
var remain = Math.floor(input / 64);
|
|
var result = STR64[modify] + current;
|
|
return remain <= 0 ? result : to64String(remain, result);
|
|
}
|
|
|
|
function to64Parse(input: string) {
|
|
var result = 0;
|
|
var toProc = input.split("");
|
|
var e;
|
|
for (e in toProc) {
|
|
result = result * 64 + STR64.indexOf(toProc[e]);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
// @ts-ignore
|
|
const start = `${base64url("311129357362135041")}.${to64String(Date.now())}`;
|
|
const signature = jwa("HS256").sign(start, `test`);
|
|
const token = `${start}.${signature}`;
|
|
console.log(token);
|
|
|
|
// MzExMTI5MzU3MzYyMTM1MDQx.XdQb_rA.907VgF60kocnOTl32MSUWGSSzbAytQ0jbt36KjLaxuY
|
|
// MzExMTI5MzU3MzYyMTM1MDQx.XdQbaPy.4vGx4L7IuFJGsRe6IL3BeybLIvbx4Vauvx12pwNsy2U
|