{"version":3,"sources":["../../src/security/Jwt.ts"],"sourcesContent":["import { Algorithm, sign, verify } from 'jsonwebtoken';\nimport { ctx, Json, OneOrMore, Optional, tryTo, Validatable, Jwt as JwtBase } from '@thisisagile/easy';\n\ninterface SignOptions {\n  audience?: Optional<OneOrMore<string>>;\n  issuer?: Optional<string>;\n}\nexport class Jwt extends JwtBase implements Validatable {\n  static of = (a: { jwt: string }): Jwt => new Jwt(a.jwt);\n\n  get isValid(): boolean {\n    return (\n      tryTo(() => ctx.env.get('tokenPublicKey') ?? '')\n        .map(key => verify(this.value, key))\n        .map(() => true)\n        .orElse() ?? false\n    );\n  }\n\n  static sign = (token: Json, options?: SignOptions): Jwt =>\n    tryTo(() => ctx.env.get('tokenPrivateKey') ?? '')\n      .is.not.empty()\n      .map(key =>\n        sign(token, key, {\n          ...options,\n          expiresIn: ctx.env.get('tokenExpiresIn') as any ?? '1h',\n          keyid: ctx.env.get('tokenKeyid') ?? 'easy',\n          algorithm: ctx.env.get('tokenAlgorithm', 'RS256') as Algorithm,\n        })\n      )\n      .map(s => new Jwt(s)).value;\n}\n"],"mappings":";;;AAAA,SAAoB,MAAM,cAAc;AACxC,SAAS,KAAgC,OAAoB,OAAO,eAAe;AAM5E,IAAM,MAAN,MAAM,aAAY,QAA+B;AAAA,EACtD,OAAO,KAAK,CAAC,MAA4B,IAAI,KAAI,EAAE,GAAG;AAAA,EAEtD,IAAI,UAAmB;AACrB,WACE,MAAM,MAAM,IAAI,IAAI,IAAI,gBAAgB,KAAK,EAAE,EAC5C,IAAI,SAAO,OAAO,KAAK,OAAO,GAAG,CAAC,EAClC,IAAI,MAAM,IAAI,EACd,OAAO,KAAK;AAAA,EAEnB;AAAA,EAEA,OAAO,OAAO,CAAC,OAAa,YAC1B,MAAM,MAAM,IAAI,IAAI,IAAI,iBAAiB,KAAK,EAAE,EAC7C,GAAG,IAAI,MAAM,EACb;AAAA,IAAI,SACH,KAAK,OAAO,KAAK;AAAA,MACf,GAAG;AAAA,MACH,WAAW,IAAI,IAAI,IAAI,gBAAgB,KAAY;AAAA,MACnD,OAAO,IAAI,IAAI,IAAI,YAAY,KAAK;AAAA,MACpC,WAAW,IAAI,IAAI,IAAI,kBAAkB,OAAO;AAAA,IAClD,CAAC;AAAA,EACH,EACC,IAAI,OAAK,IAAI,KAAI,CAAC,CAAC,EAAE;AAC5B;","names":[]}