UNPKG

@4players/odin-tokens

Version:

A lightweight token generator for 4Players ODIN

2 lines (1 loc) 5.91 kB
var L=Object.create;var d=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var N=(e,t)=>{for(var n in t)d(e,n,{get:t[n],enumerable:!0})},B=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of $(t))!z.call(e,s)&&s!==n&&d(e,s,{get:()=>t[s],enumerable:!(r=P(t,s))||r.enumerable});return e};var Z=(e,t,n)=>(n=e!=null?L(j(e)):{},B(t||!e||!e.__esModule?d(n,"default",{value:e,enumerable:!0}):n,e)),J=e=>B(d({},"__esModule",{value:!0}),e);var ee={};N(ee,{TokenGenerator:()=>U,generateAccessKey:()=>b,getKeyId:()=>D,getPublicKey:()=>f,loadAccessKey:()=>I});module.exports=J(ee);var ne=new TextEncoder;var g={Base32:new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"),Base32Hex:new TextEncoder().encode("0123456789ABCDEFGHIJKLMNOPQRSTUV"),Base32Crockford:new TextEncoder().encode("0123456789ABCDEFGHJKMNPQRSTVWXYZ")},m={Base32:new Uint8Array(128).fill(32),Base32Hex:new Uint8Array(128).fill(32),Base32Crockford:new Uint8Array(128).fill(32)};g.Base32.forEach((e,t)=>m.Base32[e]=t);g.Base32Hex.forEach((e,t)=>m.Base32Hex[e]=t);g.Base32Crockford.forEach((e,t)=>m.Base32Crockford[e]=t);function y(e,t){let n=e.length;if(e.byteOffset){let r=new Uint8Array(e.buffer);r.set(e),e=r.subarray(0,n)}return e=new Uint8Array(e.buffer.transfer(t)),e.set(e.subarray(0,n),t-n),[e,t-n]}var Q=new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"),G=new Uint8Array(128).fill(32);Q.forEach((e,t)=>G[e]=t);var me="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz".split("");var F={Base64:new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),Base64Url:new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_")},E={Base64:new Uint8Array(128).fill(64),Base64Url:new Uint8Array(128).fill(64)};F.Base64.forEach((e,t)=>E.Base64[e]=t);F.Base64Url.forEach((e,t)=>E.Base64Url[e]=t);function l(e){return((e+2)/3|0)*4}function x(e,t,n,r,s){for(t+=2;t<e.length;t+=3){let o=e[t-2]<<16|e[t-1]<<8|e[t];e[n++]=r[o>>18],e[n++]=r[o>>12&63],e[n++]=r[o>>6&63],e[n++]=r[o&63]}switch(t){case e.length+1:{let o=e[t-2]<<16;e[n++]=r[o>>18],e[n++]=r[o>>12&63],e[n++]=s,e[n++]=s;break}case e.length:{let o=e[t-2]<<16|e[t-1]<<8;e[n++]=r[o>>18],e[n++]=r[o>>12&63],e[n++]=r[o>>6&63],e[n++]=s;break}}return n}function p(e,t,n,r,s){for(let o=e.length-2;o<e.length;++o)if(e[o]===s){for(let c=o+1;c<e.length;++c)if(e[c]!==s)throw new TypeError(`Cannot decode input as base64: Invalid character (${String.fromCharCode(e[c])})`);e=e.subarray(0,o);break}if((e.length-n)%4===1)throw new RangeError(`Cannot decode input as base64: Length (${e.length-n}), excluding padding, must not have a remainder of 1 when divided by 4`);for(t+=3;t<e.length;t+=4){let o=i(e[t-3],r)<<18|i(e[t-2],r)<<12|i(e[t-1],r)<<6|i(e[t],r);e[n++]=o>>16,e[n++]=o>>8&255,e[n++]=o&255}switch(t){case e.length+1:{let o=i(e[t-3],r)<<18|i(e[t-2],r)<<12;e[n++]=o>>16;break}case e.length:{let o=i(e[t-3],r)<<18|i(e[t-2],r)<<12|i(e[t-1],r)<<6;e[n++]=o>>16,e[n++]=o>>8&255;break}}return n}function i(e,t){let n=t[e]??64;if(n===64)throw new TypeError(`Cannot decode input as base64: Invalid character (${String.fromCharCode(e)})`);return n}var _=61,u=new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),C=new Uint8Array(128).fill(64);u.forEach((e,t)=>C[e]=t);function w(e){typeof e=="string"?e=new TextEncoder().encode(e):e instanceof ArrayBuffer?e=new Uint8Array(e).slice():e=e.slice();let[t,n]=y(e,l(e.length));return x(t,n,0,u,_),new TextDecoder().decode(t)}function T(e){let t=new TextEncoder().encode(e);return new Uint8Array(t.buffer.transfer(p(t,0,0,C,_)))}var k=61,v=new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"),X=new Uint8Array(128).fill(64);v.forEach((e,t)=>X[e]=t);function A(e){typeof e=="string"?e=new TextEncoder().encode(e):e instanceof ArrayBuffer?e=new Uint8Array(e).slice():e=e.slice();let[t,n]=y(e,l(e.length)),r=x(t,n,0,v,k);return r=t.indexOf(k,r-2),new TextDecoder().decode(r>0?new Uint8Array(t.buffer.transfer(r)):t)}var Y=new TextEncoder().encode("0123456789abcdef"),S=new Uint8Array(128).fill(16);Y.forEach((e,t)=>S[e]=t);new TextEncoder().encode("ABCDEF").forEach((e,t)=>S[e]=t+10);var q=new TextEncoder().encode("0123456789abcdef"),M=new Uint8Array(128).fill(16);q.forEach((e,t)=>M[e]=t);new TextEncoder().encode("ABCDEF").forEach((e,t)=>M[e]=t+10);var R=new ArrayBuffer(8),Re=new Uint32Array(R),Ke=new BigUint64Array(R);var a=Z(require("@noble/ed25519"));function b(){let e=new Uint8Array(33);return e[0]=1,crypto.getRandomValues(e.subarray(1,32)),e[32]=V(e.subarray(1,32)),w(e)}function I(e){let t=T(e);if(t[0]!==1||t.length!==33||V(t.subarray(1))!==0)throw new TypeError("invalid access key");return Promise.resolve(t.subarray(1))}async function D(e){let t=await a.getPublicKeyAsync(e),n=await a.etc.sha512Async(t),r=new Uint8Array(9);r[0]=1;for(let s=0,o=0;s<8;s++)for(let c=0;c<8;c++,o++)r[1+c]^=n[o];return w(r)}async function f(e){let t=await a.getPublicKeyAsync(e);return A(t)}var U=class{keyId;secretKey;constructor(t){let n=this.secretKey=(async()=>typeof t=="string"?await I(t):t)();this.keyId=(async()=>D(await n))()}async createToken(t,n,r){let s=Math.floor(Date.now()/1e3),o={rid:t,uid:n,adr:r?.address,tgs:r?.tags,ups:r?.upstream,cid:r?.customer,sub:r?.subject??"connect",aud:r?.audience,exp:s+(r?.lifetime??300),nbf:s,internal:r?.internal},c={alg:"EdDSA",kid:await this.keyId},h=`${K(c)}.${K(o)}`,O=new TextEncoder().encode(h),H=await a.signAsync(O,await this.secretKey);return`${h}.${A(H)}`}};function V(e){let t=255;for(let n=0;n<e.length;n++){t^=e[n];for(let r=0;r<8;r++)(t&128)!==0?t=t<<1^49:t<<=1;t=255&t}return t}function K(e){return A(JSON.stringify(e))}0&&(module.exports={TokenGenerator,generateAccessKey,getKeyId,getPublicKey,loadAccessKey});