{"version":3,"sources":["../../src/hono/authorizer.ts"],"sourcesContent":["import type { MiddlewareHandler } from 'hono';\nimport { METHOD_NAME_ALL } from 'hono/router';\nimport { RegExpRouter } from 'hono/router/reg-exp-router';\nimport { SmartRouter } from 'hono/router/smart-router';\nimport { TrieRouter } from 'hono/router/trie-router';\nimport { Status } from '../error/status';\n\ntype Methods = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n\ntype Auth = { isAuthenticated: (request: Request) => Promise<boolean> };\n\nexport type AuthRule = string | { path: string; methods?: [Methods, ...Methods[]] };\n\nexport interface AuthorizerConfig {\n  auth: Auth;\n  errorMessage?: string;\n  rules?: AuthRule[];\n}\n\nexport function authorizer({\n  auth,\n  errorMessage = 'Unauthorized, please login to continue.',\n  rules = [],\n}: AuthorizerConfig): MiddlewareHandler {\n  const router = new SmartRouter<null>({ routers: [new RegExpRouter(), new TrieRouter()] });\n\n  for (const rule of rules) {\n    if (typeof rule === 'string') {\n      router.add(METHOD_NAME_ALL, rule, null);\n    } else if (rule.methods && rule.methods.length > 0) {\n      for (const method of rule.methods) {\n        router.add(method, rule.path, null);\n      }\n    } else {\n      router.add(METHOD_NAME_ALL, rule.path, null);\n    }\n  }\n\n  return async (c, next) => {\n    if (c.req.method === 'OPTIONS') {\n      await next();\n      return;\n    }\n\n    const [matched] = router.match(c.req.method, c.req.path);\n    if (matched.length === 0) {\n      await next();\n      return;\n    }\n\n    const authenticated = await auth.isAuthenticated(c.req.raw);\n    if (!authenticated) throw Status.unauthorized(errorMessage).error();\n    await next();\n  };\n}\n"],"mappings":";AACA,SAAS,uBAAuB;AAChC,SAAS,oBAAoB;AAC7B,SAAS,mBAAmB;AAC5B,SAAS,kBAAkB;AAC3B,SAAS,cAAc;AAchB,SAAS,WAAW;AAAA,EACzB;AAAA,EACA,eAAe;AAAA,EACf,QAAQ,CAAC;AACX,GAAwC;AACtC,QAAM,SAAS,IAAI,YAAkB,EAAE,SAAS,CAAC,IAAI,aAAa,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC;AAExF,aAAW,QAAQ,OAAO;AACxB,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO,IAAI,iBAAiB,MAAM,IAAI;AAAA,IACxC,WAAW,KAAK,WAAW,KAAK,QAAQ,SAAS,GAAG;AAClD,iBAAW,UAAU,KAAK,SAAS;AACjC,eAAO,IAAI,QAAQ,KAAK,MAAM,IAAI;AAAA,MACpC;AAAA,IACF,OAAO;AACL,aAAO,IAAI,iBAAiB,KAAK,MAAM,IAAI;AAAA,IAC7C;AAAA,EACF;AAEA,SAAO,OAAO,GAAG,SAAS;AACxB,QAAI,EAAE,IAAI,WAAW,WAAW;AAC9B,YAAM,KAAK;AACX;AAAA,IACF;AAEA,UAAM,CAAC,OAAO,IAAI,OAAO,MAAM,EAAE,IAAI,QAAQ,EAAE,IAAI,IAAI;AACvD,QAAI,QAAQ,WAAW,GAAG;AACxB,YAAM,KAAK;AACX;AAAA,IACF;AAEA,UAAM,gBAAgB,MAAM,KAAK,gBAAgB,EAAE,IAAI,GAAG;AAC1D,QAAI,CAAC,cAAe,OAAM,OAAO,aAAa,YAAY,EAAE,MAAM;AAClE,UAAM,KAAK;AAAA,EACb;AACF;","names":[]}