UNPKG

@aimee-blue/ab-service-kit

Version:
1 lines 4.05 kB
{"version":3,"sources":["../../../src/shared/auth/selfSignedTokens.ts"],"names":["createSelfSignedTokens","params","deps","now","Promise","resolve","Date","signJwt","args","nextJwt","pipe","iat","exp","expireInMillis","aud","result","expiresAtMillis","rollNewTokenInMillis","scheduler","bufferSize","refCount","windowTime","buildSelfSignedTokensLazy","tokensStream","selfSignedTokens","currentSelfSignedToken","toPromise","signedJwt"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AAQO,SAASA,sBAAT,CACLC,MADK,EAMLC,IAAI,GAAG;AACLC,EAAAA,GAAG,EAAE,MAAM,gBAAKC,OAAO,CAACC,OAAR,CAAgBC,IAAI,CAACH,GAAL,EAAhB,CAAL,CADN;AAELI,EAAAA,OAAO,EAAE,CAAC,GAAGC,IAAJ,KACP,gBAAK,2CAA8B,GAAGA,IAAjC,CAAL;AAHG,CANF,EAWsB;AAC3B,QAAMC,OAAO,GAAG,iBAAM,MACpBP,IAAI,CAACC,GAAL,GAAWO,IAAX,CACE,qBAAK,CAAL,CADF,EAEE,0BAAUP,GAAG,IAAI;AACf,UAAMQ,GAAG,GAAGR,GAAG,GAAG,IAAlB;AACA,UAAMS,GAAG,GAAGD,GAAG,GAAGV,MAAM,CAACY,cAAP,GAAwB,IAA1C;AAEA,WAAOX,IAAI,CACRK,OADI,CACI;AACPO,MAAAA,GAAG,EAAE,iCADE;AAEPH,MAAAA,GAFO;AAGPC,MAAAA;AAHO,KADJ,EAMJF,IANI,CAOH,qBAAK,CAAL,CAPG,EAQH,oBAAIK,MAAM,KAAK,EACb,GAAGA,MADU;AAEbC,MAAAA,eAAe,EAAEb,GAAG,GAAGF,MAAM,CAACY;AAFjB,KAAL,CAAV,CARG,CAAP;AAaD,GAjBD,CAFF,CADc,CAAhB;AAwBA,SAAO,iBAAM,CAAN,EAASZ,MAAM,CAACgB,oBAAhB,EAAsChB,MAAM,CAACiB,SAA7C,EAAwDR,IAAxD,CACL,2BAAW,MAAMD,OAAjB,CADK,EAEL,4BAAY;AACVU,IAAAA,UAAU,EAAE,CADF;AAEVC,IAAAA,QAAQ,EAAE,IAFA;AAGVC,IAAAA,UAAU,EAAEpB,MAAM,CAACgB,oBAHT;AAIVC,IAAAA,SAAS,EAAEjB,MAAM,CAACiB;AAJR,GAAZ,CAFK,CAAP;AASD;;AAED,SAASI,yBAAT,GAAqC;AACnC,MAAIC,YAA8D,GAAG,IAArE;AACA,SAAO,MAAM;AACX,QAAIA,YAAJ,EAAkB;AAChB,aAAOA,YAAP;AACD;;AACD,WAAQA,YAAY,GAAGvB,sBAAsB,CAAC;AAC5Ca,MAAAA,cAAc,EAAE,OAAO,IADqB;AAE5CI,MAAAA,oBAAoB,EAAE,OAAO;AAFe,KAAD,CAA7C;AAID,GARD;AASD;;AAEM,MAAMO,gBAAgB,GAAGF,yBAAyB,EAAlD;;;AAEA,eAAeG,sBAAf,GAAyD;AAC9D,QAAMV,MAAM,GAAG,MAAMS,gBAAgB,GAClCd,IADkB,CACb,qBAAK,CAAL,CADa,EAElBgB,SAFkB,EAArB;AAGA,SAAOX,MAAM,CAACY,SAAd;AACD","sourcesContent":["import { defer, SchedulerLike, from, Observable, timer } from 'rxjs';\nimport { signJwtUsingServiceAccountKey } from '@aimee-blue/ab-auth';\nimport { switchMap, map, take, shareReplay, exhaustMap } from 'rxjs/operators';\n\ninterface ITokenWithExp {\n keyId: string;\n signedJwt: string;\n expiresAtMillis: number;\n}\n\nexport function createSelfSignedTokens(\n params: {\n expireInMillis: number;\n rollNewTokenInMillis: number;\n scheduler?: SchedulerLike;\n },\n deps = {\n now: () => from(Promise.resolve(Date.now())),\n signJwt: (...args: Parameters<typeof signJwtUsingServiceAccountKey>) =>\n from(signJwtUsingServiceAccountKey(...args)),\n }\n): Observable<ITokenWithExp> {\n const nextJwt = defer(() =>\n deps.now().pipe(\n take(1),\n switchMap(now => {\n const iat = now / 1000;\n const exp = iat + params.expireInMillis / 1000;\n\n return deps\n .signJwt({\n aud: 'https://aimeeblue.com/functions',\n iat,\n exp,\n })\n .pipe(\n take(1),\n map(result => ({\n ...result,\n expiresAtMillis: now + params.expireInMillis,\n }))\n );\n })\n )\n );\n\n return timer(0, params.rollNewTokenInMillis, params.scheduler).pipe(\n exhaustMap(() => nextJwt),\n shareReplay({\n bufferSize: 1,\n refCount: true,\n windowTime: params.rollNewTokenInMillis,\n scheduler: params.scheduler,\n })\n );\n}\n\nfunction buildSelfSignedTokensLazy() {\n let tokensStream: ReturnType<typeof createSelfSignedTokens> | null = null;\n return () => {\n if (tokensStream) {\n return tokensStream;\n }\n return (tokensStream = createSelfSignedTokens({\n expireInMillis: 3600 * 1000,\n rollNewTokenInMillis: 3000 * 1000,\n }));\n };\n}\n\nexport const selfSignedTokens = buildSelfSignedTokensLazy();\n\nexport async function currentSelfSignedToken(): Promise<string> {\n const result = await selfSignedTokens()\n .pipe(take(1))\n .toPromise();\n return result.signedJwt;\n}\n"],"file":"selfSignedTokens.js"}