@usebetterdev/audit-hono 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -25,11 +25,8 @@ __export(index_exports, {
25
25
  });
26
26
  module.exports = __toCommonJS(index_exports);
27
27
  var import_audit_core = require("@usebetterdev/audit-core");
28
- var defaultExtractor = {
29
- actor: (0, import_audit_core.fromBearerToken)("sub")
30
- };
31
28
  function createHonoMiddleware(options = {}) {
32
- const extractor = options.extractor ?? defaultExtractor;
29
+ const extractor = options.extractor ?? import_audit_core.defaultExtractor;
33
30
  const handlerOptions = {};
34
31
  if (options.onError) {
35
32
  handlerOptions.onError = options.onError;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type {\n AuditContext,\n ContextExtractor,\n MiddlewareHandlerOptions,\n} from \"@usebetterdev/audit-core\";\nimport {\n handleMiddleware,\n fromBearerToken,\n} from \"@usebetterdev/audit-core\";\n\nexport interface HonoContextLike {\n req: { raw: Request };\n}\n\nexport type HonoMiddleware = (\n context: HonoContextLike,\n next: () => Promise<void>,\n) => Promise<Response | void>;\n\nexport interface CreateHonoMiddlewareOptions {\n /** Context extractor for pulling actor identity from the request. */\n extractor?: ContextExtractor;\n /** Called when an extractor throws. Defaults to silent fail-open. */\n onError?: (error: unknown) => void;\n}\n\n/** Default extractor: reads `sub` from `Authorization: Bearer <jwt>` as actor. */\nconst defaultExtractor: ContextExtractor = {\n actor: fromBearerToken(\"sub\"),\n};\n\n/**\n * Creates a Hono-compatible middleware that populates audit context\n * via AsyncLocalStorage on every request.\n *\n * Delegates to the shared `handleMiddleware()` from audit-core,\n * which all framework adapters share.\n *\n * The middleware is non-blocking: if context extraction fails, the\n * request proceeds without audit context (fail open).\n */\nexport function createHonoMiddleware(\n options: CreateHonoMiddlewareOptions = {},\n): HonoMiddleware {\n const extractor = options.extractor ?? defaultExtractor;\n const handlerOptions: MiddlewareHandlerOptions = {};\n if (options.onError) {\n handlerOptions.onError = options.onError;\n }\n\n return async (context, next) => {\n await handleMiddleware(extractor, context.req.raw, next, handlerOptions);\n return undefined;\n };\n}\n\n/**\n * Convenience wrapper: `app.use('*', betterAuditHono())`.\n *\n * Uses the default JWT extractor (reads `sub` from `Authorization: Bearer <jwt>`).\n * Pass options to customize extraction.\n */\nexport function betterAuditHono(\n options: CreateHonoMiddlewareOptions = {},\n): HonoMiddleware {\n return createHonoMiddleware(options);\n}\n\nexport type { AuditContext, ContextExtractor };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,wBAGO;AAmBP,IAAM,mBAAqC;AAAA,EACzC,WAAO,mCAAgB,KAAK;AAC9B;AAYO,SAAS,qBACd,UAAuC,CAAC,GACxB;AAChB,QAAM,YAAY,QAAQ,aAAa;AACvC,QAAM,iBAA2C,CAAC;AAClD,MAAI,QAAQ,SAAS;AACnB,mBAAe,UAAU,QAAQ;AAAA,EACnC;AAEA,SAAO,OAAO,SAAS,SAAS;AAC9B,cAAM,oCAAiB,WAAW,QAAQ,IAAI,KAAK,MAAM,cAAc;AACvE,WAAO;AAAA,EACT;AACF;AAQO,SAAS,gBACd,UAAuC,CAAC,GACxB;AAChB,SAAO,qBAAqB,OAAO;AACrC;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type {\n AuditContext,\n ContextExtractor,\n MiddlewareHandlerOptions,\n} from \"@usebetterdev/audit-core\";\nimport {\n defaultExtractor,\n handleMiddleware,\n} from \"@usebetterdev/audit-core\";\n\nexport interface HonoContextLike {\n req: { raw: Request };\n}\n\nexport type HonoMiddleware = (\n context: HonoContextLike,\n next: () => Promise<void>,\n) => Promise<Response | void>;\n\nexport interface CreateHonoMiddlewareOptions {\n /** Context extractor for pulling actor identity from the request. */\n extractor?: ContextExtractor;\n /** Called when an extractor throws. Defaults to silent fail-open. */\n onError?: (error: unknown) => void;\n}\n\n/**\n * Creates a Hono-compatible middleware that populates audit context\n * via AsyncLocalStorage on every request.\n *\n * Delegates to the shared `handleMiddleware()` from audit-core,\n * which all framework adapters share.\n *\n * The middleware is non-blocking: if context extraction fails, the\n * request proceeds without audit context (fail open).\n */\nexport function createHonoMiddleware(\n options: CreateHonoMiddlewareOptions = {},\n): HonoMiddleware {\n const extractor = options.extractor ?? defaultExtractor;\n const handlerOptions: MiddlewareHandlerOptions = {};\n if (options.onError) {\n handlerOptions.onError = options.onError;\n }\n\n return async (context, next) => {\n await handleMiddleware(extractor, context.req.raw, next, handlerOptions);\n return undefined;\n };\n}\n\n/**\n * Convenience wrapper: `app.use('*', betterAuditHono())`.\n *\n * Uses the default JWT extractor (reads `sub` from `Authorization: Bearer <jwt>`).\n * Pass options to customize extraction.\n */\nexport function betterAuditHono(\n options: CreateHonoMiddlewareOptions = {},\n): HonoMiddleware {\n return createHonoMiddleware(options);\n}\n\nexport type { AuditContext, ContextExtractor };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,wBAGO;AA4BA,SAAS,qBACd,UAAuC,CAAC,GACxB;AAChB,QAAM,YAAY,QAAQ,aAAa;AACvC,QAAM,iBAA2C,CAAC;AAClD,MAAI,QAAQ,SAAS;AACnB,mBAAe,UAAU,QAAQ;AAAA,EACnC;AAEA,SAAO,OAAO,SAAS,SAAS;AAC9B,cAAM,oCAAiB,WAAW,QAAQ,IAAI,KAAK,MAAM,cAAc;AACvE,WAAO;AAAA,EACT;AACF;AAQO,SAAS,gBACd,UAAuC,CAAC,GACxB;AAChB,SAAO,qBAAqB,OAAO;AACrC;","names":[]}
package/dist/index.js CHANGED
@@ -1,11 +1,8 @@
1
1
  // src/index.ts
2
2
  import {
3
- handleMiddleware,
4
- fromBearerToken
3
+ defaultExtractor,
4
+ handleMiddleware
5
5
  } from "@usebetterdev/audit-core";
6
- var defaultExtractor = {
7
- actor: fromBearerToken("sub")
8
- };
9
6
  function createHonoMiddleware(options = {}) {
10
7
  const extractor = options.extractor ?? defaultExtractor;
11
8
  const handlerOptions = {};
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type {\n AuditContext,\n ContextExtractor,\n MiddlewareHandlerOptions,\n} from \"@usebetterdev/audit-core\";\nimport {\n handleMiddleware,\n fromBearerToken,\n} from \"@usebetterdev/audit-core\";\n\nexport interface HonoContextLike {\n req: { raw: Request };\n}\n\nexport type HonoMiddleware = (\n context: HonoContextLike,\n next: () => Promise<void>,\n) => Promise<Response | void>;\n\nexport interface CreateHonoMiddlewareOptions {\n /** Context extractor for pulling actor identity from the request. */\n extractor?: ContextExtractor;\n /** Called when an extractor throws. Defaults to silent fail-open. */\n onError?: (error: unknown) => void;\n}\n\n/** Default extractor: reads `sub` from `Authorization: Bearer <jwt>` as actor. */\nconst defaultExtractor: ContextExtractor = {\n actor: fromBearerToken(\"sub\"),\n};\n\n/**\n * Creates a Hono-compatible middleware that populates audit context\n * via AsyncLocalStorage on every request.\n *\n * Delegates to the shared `handleMiddleware()` from audit-core,\n * which all framework adapters share.\n *\n * The middleware is non-blocking: if context extraction fails, the\n * request proceeds without audit context (fail open).\n */\nexport function createHonoMiddleware(\n options: CreateHonoMiddlewareOptions = {},\n): HonoMiddleware {\n const extractor = options.extractor ?? defaultExtractor;\n const handlerOptions: MiddlewareHandlerOptions = {};\n if (options.onError) {\n handlerOptions.onError = options.onError;\n }\n\n return async (context, next) => {\n await handleMiddleware(extractor, context.req.raw, next, handlerOptions);\n return undefined;\n };\n}\n\n/**\n * Convenience wrapper: `app.use('*', betterAuditHono())`.\n *\n * Uses the default JWT extractor (reads `sub` from `Authorization: Bearer <jwt>`).\n * Pass options to customize extraction.\n */\nexport function betterAuditHono(\n options: CreateHonoMiddlewareOptions = {},\n): HonoMiddleware {\n return createHonoMiddleware(options);\n}\n\nexport type { AuditContext, ContextExtractor };\n"],"mappings":";AAKA;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAmBP,IAAM,mBAAqC;AAAA,EACzC,OAAO,gBAAgB,KAAK;AAC9B;AAYO,SAAS,qBACd,UAAuC,CAAC,GACxB;AAChB,QAAM,YAAY,QAAQ,aAAa;AACvC,QAAM,iBAA2C,CAAC;AAClD,MAAI,QAAQ,SAAS;AACnB,mBAAe,UAAU,QAAQ;AAAA,EACnC;AAEA,SAAO,OAAO,SAAS,SAAS;AAC9B,UAAM,iBAAiB,WAAW,QAAQ,IAAI,KAAK,MAAM,cAAc;AACvE,WAAO;AAAA,EACT;AACF;AAQO,SAAS,gBACd,UAAuC,CAAC,GACxB;AAChB,SAAO,qBAAqB,OAAO;AACrC;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type {\n AuditContext,\n ContextExtractor,\n MiddlewareHandlerOptions,\n} from \"@usebetterdev/audit-core\";\nimport {\n defaultExtractor,\n handleMiddleware,\n} from \"@usebetterdev/audit-core\";\n\nexport interface HonoContextLike {\n req: { raw: Request };\n}\n\nexport type HonoMiddleware = (\n context: HonoContextLike,\n next: () => Promise<void>,\n) => Promise<Response | void>;\n\nexport interface CreateHonoMiddlewareOptions {\n /** Context extractor for pulling actor identity from the request. */\n extractor?: ContextExtractor;\n /** Called when an extractor throws. Defaults to silent fail-open. */\n onError?: (error: unknown) => void;\n}\n\n/**\n * Creates a Hono-compatible middleware that populates audit context\n * via AsyncLocalStorage on every request.\n *\n * Delegates to the shared `handleMiddleware()` from audit-core,\n * which all framework adapters share.\n *\n * The middleware is non-blocking: if context extraction fails, the\n * request proceeds without audit context (fail open).\n */\nexport function createHonoMiddleware(\n options: CreateHonoMiddlewareOptions = {},\n): HonoMiddleware {\n const extractor = options.extractor ?? defaultExtractor;\n const handlerOptions: MiddlewareHandlerOptions = {};\n if (options.onError) {\n handlerOptions.onError = options.onError;\n }\n\n return async (context, next) => {\n await handleMiddleware(extractor, context.req.raw, next, handlerOptions);\n return undefined;\n };\n}\n\n/**\n * Convenience wrapper: `app.use('*', betterAuditHono())`.\n *\n * Uses the default JWT extractor (reads `sub` from `Authorization: Bearer <jwt>`).\n * Pass options to customize extraction.\n */\nexport function betterAuditHono(\n options: CreateHonoMiddlewareOptions = {},\n): HonoMiddleware {\n return createHonoMiddleware(options);\n}\n\nexport type { AuditContext, ContextExtractor };\n"],"mappings":";AAKA;AAAA,EACE;AAAA,EACA;AAAA,OACK;AA4BA,SAAS,qBACd,UAAuC,CAAC,GACxB;AAChB,QAAM,YAAY,QAAQ,aAAa;AACvC,QAAM,iBAA2C,CAAC;AAClD,MAAI,QAAQ,SAAS;AACnB,mBAAe,UAAU,QAAQ;AAAA,EACnC;AAEA,SAAO,OAAO,SAAS,SAAS;AAC9B,UAAM,iBAAiB,WAAW,QAAQ,IAAI,KAAK,MAAM,cAAc;AACvE,WAAO;AAAA,EACT;AACF;AAQO,SAAS,gBACd,UAAuC,CAAC,GACxB;AAChB,SAAO,qBAAqB,OAAO;AACrC;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@usebetterdev/audit-hono",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "repository": "github:usebetter-dev/usebetter",
5
5
  "bugs": "https://github.com/usebetter-dev/usebetter/issues",
6
6
  "homepage": "https://github.com/usebetter-dev/usebetter#readme",
@@ -24,17 +24,18 @@
24
24
  "README.md"
25
25
  ],
26
26
  "dependencies": {
27
- "@usebetterdev/audit-core": "0.6.0"
27
+ "@usebetterdev/audit-core": "0.7.0"
28
28
  },
29
29
  "peerDependencies": {
30
30
  "hono": ">=4"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@types/node": "^22.10.0",
34
- "hono": "^4.11.9",
34
+ "hono": "^4.11.10",
35
35
  "tsup": "^8.3.5",
36
36
  "typescript": "~5.7.2",
37
- "vitest": "^2.1.6"
37
+ "vitest": "^2.1.6",
38
+ "@usebetterdev/test-utils": "^0.5.2"
38
39
  },
39
40
  "engines": {
40
41
  "node": ">=22"