UNPKG

@powership/server

Version:
1 lines 3.78 kB
{"version":3,"file":"ServerRequest.mjs","names":["httpErrors","BaseRequestHandler","ServerLogs","Unauthorized","__LOCAL_DEV_USERID__","process","env","NODE_ENV","ServerRequest","constructor","input","locals","userId","permissions","_userId","_permissions","Set","getPermissions","values","userIdOptional","undefined","assertPermission","permission","hasPermission","error","has","strict","create"],"sources":["../../src/ServerRequest.ts"],"sourcesContent":["import httpErrors from 'http-errors';\n\nimport {\n BaseRequestHandler,\n HeaderRecordInit,\n RequestBody,\n} from './BaseRequestHandler';\nimport { ServerLogs } from './ServerLogs';\n\nconst { Unauthorized } = httpErrors;\n\nexport type ServerRequestInit = {\n locals?: Record<string, unknown>;\n url: string | undefined;\n headers: HeaderRecordInit | Headers;\n body: RequestBody;\n method: string;\n userId?: string;\n permissions?: string[];\n};\n\nexport let __LOCAL_DEV_USERID__ =\n process.env.NODE_ENV === 'development' ? '__LOCAL_DEV_USERID__' : null;\n\nexport class ServerRequest extends BaseRequestHandler {\n private _userId?: string;\n private _permissions: Set<string>;\n input: ServerRequestInit;\n\n constructor(input: ServerRequestInit) {\n super(input);\n this.input = input;\n const { locals = {}, userId, permissions = [] } = input;\n this.locals = locals;\n this._userId = userId;\n this._permissions = new Set<string>(permissions);\n }\n\n getPermissions = () => {\n return [...this._permissions.values()];\n };\n\n locals: Record<string, unknown>;\n\n userIdOptional(): string | undefined {\n return this._userId || __LOCAL_DEV_USERID__ || undefined;\n }\n\n assertPermission(permission: string): boolean {\n const userId = this.userId();\n if (this.hasPermission(permission)) return true;\n ServerLogs.error('Unauthorized', { userId, permission });\n throw new Unauthorized();\n }\n\n hasPermission(permission: string): boolean {\n if (__LOCAL_DEV_USERID__) return true;\n return this._permissions.has(permission);\n }\n\n userId(strict = true): string {\n const userId = this.userIdOptional();\n if (userId) return userId;\n if (strict) {\n throw new Unauthorized();\n }\n return '';\n }\n\n static create = (input: ServerRequestInit): ServerRequest => {\n return new ServerRequest(input);\n };\n}\n"],"mappings":"AAAA,OAAOA,UAAU,MAAM,aAAa;AAAC,SAGnCC,kBAAkB;AAAA,SAIXC,UAAU;AAEnB,MAAM;EAAEC;AAAa,CAAC,GAAGH,UAAU;AAYnC,OAAO,IAAII,oBAAoB,GAC7BC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,GAAG,sBAAsB,GAAG,IAAI;AAExE,OAAO,MAAMC,aAAa,SAASP,kBAAkB,CAAC;EAKpDQ,WAAWA,CAACC,KAAwB,EAAE;IACpC,KAAK,CAACA,KAAK,CAAC;IACZ,IAAI,CAACA,KAAK,GAAGA,KAAK;IAClB,MAAM;MAAEC,MAAM,GAAG,CAAC,CAAC;MAAEC,MAAM;MAAEC,WAAW,GAAG;IAAG,CAAC,GAAGH,KAAK;IACvD,IAAI,CAACC,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACG,OAAO,GAAGF,MAAM;IACrB,IAAI,CAACG,YAAY,GAAG,IAAIC,GAAG,CAASH,WAAW,CAAC;EAClD;EAEAI,cAAc,GAAGA,CAAA,KAAM;IACrB,OAAO,CAAC,GAAG,IAAI,CAACF,YAAY,CAACG,MAAM,CAAC,CAAC,CAAC;EACxC,CAAC;EAIDC,cAAcA,CAAA,EAAuB;IACnC,OAAO,IAAI,CAACL,OAAO,IAAIV,oBAAoB,IAAIgB,SAAS;EAC1D;EAEAC,gBAAgBA,CAACC,UAAkB,EAAW;IAC5C,MAAMV,MAAM,GAAG,IAAI,CAACA,MAAM,CAAC,CAAC;IAC5B,IAAI,IAAI,CAACW,aAAa,CAACD,UAAU,CAAC,EAAE,OAAO,IAAI;IAC/CpB,UAAU,CAACsB,KAAK,CAAC,cAAc,EAAE;MAAEZ,MAAM;MAAEU;IAAW,CAAC,CAAC;IACxD,MAAM,IAAInB,YAAY,CAAC,CAAC;EAC1B;EAEAoB,aAAaA,CAACD,UAAkB,EAAW;IACzC,IAAIlB,oBAAoB,EAAE,OAAO,IAAI;IACrC,OAAO,IAAI,CAACW,YAAY,CAACU,GAAG,CAACH,UAAU,CAAC;EAC1C;EAEAV,MAAMA,CAACc,MAAM,GAAG,IAAI,EAAU;IAC5B,MAAMd,MAAM,GAAG,IAAI,CAACO,cAAc,CAAC,CAAC;IACpC,IAAIP,MAAM,EAAE,OAAOA,MAAM;IACzB,IAAIc,MAAM,EAAE;MACV,MAAM,IAAIvB,YAAY,CAAC,CAAC;IAC1B;IACA,OAAO,EAAE;EACX;EAEA,OAAOwB,MAAM,GAAIjB,KAAwB,IAAoB;IAC3D,OAAO,IAAIF,aAAa,CAACE,KAAK,CAAC;EACjC,CAAC;AACH","ignoreList":[]}