glasswork 1.0.0 → 1.1.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/CHANGELOG.md +23 -0
- package/README.md +34 -2
- package/dist/audit/audit-logger.d.ts +22 -0
- package/dist/audit/audit-logger.d.ts.map +1 -0
- package/dist/audit/audit-logger.js +44 -0
- package/dist/audit/audit-logger.js.map +1 -0
- package/dist/audit/context.d.ts +13 -0
- package/dist/audit/context.d.ts.map +1 -0
- package/dist/audit/context.js +66 -0
- package/dist/audit/context.js.map +1 -0
- package/dist/audit/index.d.ts +8 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +7 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/audit/types.d.ts +74 -0
- package/dist/audit/types.d.ts.map +1 -0
- package/dist/audit/types.js +2 -0
- package/dist/audit/types.js.map +1 -0
- package/dist/auth/abilities.d.ts +1 -1
- package/dist/auth/abilities.d.ts.map +1 -1
- package/dist/auth/abilities.js.map +1 -1
- package/dist/auth/better-auth-provider.d.ts +6 -3
- package/dist/auth/better-auth-provider.d.ts.map +1 -1
- package/dist/auth/better-auth-provider.js +1 -3
- package/dist/auth/better-auth-provider.js.map +1 -1
- package/dist/auth/index.d.ts +2 -2
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/middleware.d.ts +9 -7
- package/dist/auth/middleware.d.ts.map +1 -1
- package/dist/auth/middleware.js +9 -1
- package/dist/auth/middleware.js.map +1 -1
- package/dist/auth/types.d.ts +7 -0
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/config/config-service.d.ts.map +1 -1
- package/dist/config/config-service.js.map +1 -1
- package/dist/config/providers.js.map +1 -1
- package/dist/core/bootstrap.js.map +1 -1
- package/dist/email/compiler/compiler.js +3 -3
- package/dist/email/compiler/compiler.js.map +1 -1
- package/dist/email/email-service.d.ts.map +1 -1
- package/dist/email/template-registry.d.ts.map +1 -1
- package/dist/email/templated-email-service.d.ts.map +1 -1
- package/dist/email/transports/mock-transport.d.ts.map +1 -1
- package/dist/email/transports/ses-transport.d.ts.map +1 -1
- package/dist/email/webhooks/handler-factory.js.map +1 -1
- package/dist/email/webhooks/signature-verification.js.map +1 -1
- package/dist/email/webhooks/subscription-handler.js.map +1 -1
- package/dist/hono-context.d.ts +1 -1
- package/dist/hono-context.d.ts.map +1 -1
- package/dist/http/error-handler.js.map +1 -1
- package/dist/http/errors.d.ts.map +1 -1
- package/dist/http/errors.js.map +1 -1
- package/dist/http/route-authorization.d.ts +1 -2
- package/dist/http/route-authorization.d.ts.map +1 -1
- package/dist/http/route-authorization.js.map +1 -1
- package/dist/http/route-context.d.ts +4 -2
- package/dist/http/route-context.d.ts.map +1 -1
- package/dist/http/route-context.js +7 -2
- package/dist/http/route-context.js.map +1 -1
- package/dist/http/route-helpers.d.ts +3 -3
- package/dist/http/route-helpers.d.ts.map +1 -1
- package/dist/http/route-helpers.js.map +1 -1
- package/dist/http/route-openapi.d.ts +1 -1
- package/dist/http/route-openapi.d.ts.map +1 -1
- package/dist/http/route-openapi.js.map +1 -1
- package/dist/http/route-types.d.ts +26 -23
- package/dist/http/route-types.d.ts.map +1 -1
- package/dist/jobs/drivers/eventbridge-scheduler-driver.d.ts.map +1 -1
- package/dist/jobs/drivers/eventbridge-scheduler-driver.js.map +1 -1
- package/dist/jobs/drivers/mock-driver.d.ts.map +1 -1
- package/dist/jobs/drivers/mock-driver.js.map +1 -1
- package/dist/jobs/drivers/sqs-driver.d.ts.map +1 -1
- package/dist/jobs/drivers/sqs-driver.js.map +1 -1
- package/dist/jobs/errors.d.ts.map +1 -1
- package/dist/jobs/job-registry.d.ts.map +1 -1
- package/dist/jobs/job-registry.js.map +1 -1
- package/dist/jobs/job-service.d.ts.map +1 -1
- package/dist/jobs/job-service.js.map +1 -1
- package/dist/jobs/observability/client.d.ts +26 -0
- package/dist/jobs/observability/client.d.ts.map +1 -0
- package/dist/jobs/observability/client.js +286 -0
- package/dist/jobs/observability/client.js.map +1 -0
- package/dist/jobs/observability/dashboard.d.ts +19 -0
- package/dist/jobs/observability/dashboard.d.ts.map +1 -0
- package/dist/jobs/observability/dashboard.js +144 -0
- package/dist/jobs/observability/dashboard.js.map +1 -0
- package/dist/jobs/observability/emf.d.ts +24 -0
- package/dist/jobs/observability/emf.d.ts.map +1 -0
- package/dist/jobs/observability/emf.js +100 -0
- package/dist/jobs/observability/emf.js.map +1 -0
- package/dist/jobs/observability/index.d.ts +5 -0
- package/dist/jobs/observability/index.d.ts.map +1 -0
- package/dist/jobs/observability/index.js +4 -0
- package/dist/jobs/observability/index.js.map +1 -0
- package/dist/jobs/observability/types.d.ts +234 -0
- package/dist/jobs/observability/types.d.ts.map +1 -0
- package/dist/jobs/observability/types.js +2 -0
- package/dist/jobs/observability/types.js.map +1 -0
- package/dist/jobs/worker.d.ts +1 -1
- package/dist/jobs/worker.d.ts.map +1 -1
- package/dist/list-query/builder.d.ts +11 -2
- package/dist/list-query/builder.d.ts.map +1 -1
- package/dist/list-query/builder.js +29 -5
- package/dist/list-query/builder.js.map +1 -1
- package/dist/list-query/filter-mapping.d.ts +89 -0
- package/dist/list-query/filter-mapping.d.ts.map +1 -0
- package/dist/list-query/filter-mapping.js +254 -0
- package/dist/list-query/filter-mapping.js.map +1 -0
- package/dist/list-query/filter-value-schemas.d.ts +16 -0
- package/dist/list-query/filter-value-schemas.d.ts.map +1 -0
- package/dist/list-query/filter-value-schemas.js +56 -0
- package/dist/list-query/filter-value-schemas.js.map +1 -0
- package/dist/list-query/index.d.ts +5 -2
- package/dist/list-query/index.d.ts.map +1 -1
- package/dist/list-query/index.js +5 -2
- package/dist/list-query/index.js.map +1 -1
- package/dist/list-query/parse-filter-values.d.ts +21 -0
- package/dist/list-query/parse-filter-values.d.ts.map +1 -0
- package/dist/list-query/parse-filter-values.js +177 -0
- package/dist/list-query/parse-filter-values.js.map +1 -0
- package/dist/list-query/parser.d.ts +3 -2
- package/dist/list-query/parser.d.ts.map +1 -1
- package/dist/list-query/parser.js.map +1 -1
- package/dist/list-query/prisma-builder.d.ts.map +1 -1
- package/dist/list-query/prisma-builder.js +3 -50
- package/dist/list-query/prisma-builder.js.map +1 -1
- package/dist/list-query/prisma-executor.d.ts +44 -29
- package/dist/list-query/prisma-executor.d.ts.map +1 -1
- package/dist/list-query/prisma-executor.js +48 -33
- package/dist/list-query/prisma-executor.js.map +1 -1
- package/dist/list-query/query-schema.d.ts +8 -13
- package/dist/list-query/query-schema.d.ts.map +1 -1
- package/dist/list-query/query-schema.js +11 -12
- package/dist/list-query/query-schema.js.map +1 -1
- package/dist/list-query/schema-helpers.d.ts +34 -31
- package/dist/list-query/schema-helpers.d.ts.map +1 -1
- package/dist/list-query/schema-helpers.js +47 -37
- package/dist/list-query/schema-helpers.js.map +1 -1
- package/dist/list-query/sort-mapping.d.ts +37 -0
- package/dist/list-query/sort-mapping.d.ts.map +1 -0
- package/dist/list-query/sort-mapping.js +88 -0
- package/dist/list-query/sort-mapping.js.map +1 -0
- package/dist/list-query/types.d.ts +3 -10
- package/dist/list-query/types.d.ts.map +1 -1
- package/dist/list-query/validator.d.ts.map +1 -1
- package/dist/list-query/validator.js +28 -10
- package/dist/list-query/validator.js.map +1 -1
- package/dist/observability/exception-tracking.d.ts.map +1 -1
- package/dist/observability/exception-tracking.js.map +1 -1
- package/dist/observability/index.d.ts +1 -1
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +1 -1
- package/dist/observability/index.js.map +1 -1
- package/dist/observability/pino-logger.d.ts +0 -28
- package/dist/observability/pino-logger.d.ts.map +1 -1
- package/dist/observability/pino-logger.js +21 -12
- package/dist/observability/pino-logger.js.map +1 -1
- package/dist/observability/request-context.d.ts +36 -1
- package/dist/observability/request-context.d.ts.map +1 -1
- package/dist/observability/request-context.js +43 -0
- package/dist/observability/request-context.js.map +1 -1
- package/dist/rls/configuration.d.ts +3 -0
- package/dist/rls/configuration.d.ts.map +1 -0
- package/dist/rls/configuration.js +13 -0
- package/dist/rls/configuration.js.map +1 -0
- package/dist/rls/context.d.ts +37 -0
- package/dist/rls/context.d.ts.map +1 -0
- package/dist/rls/context.js +56 -0
- package/dist/rls/context.js.map +1 -0
- package/dist/rls/extension.d.ts +7 -0
- package/dist/rls/extension.d.ts.map +1 -0
- package/dist/rls/extension.js +91 -0
- package/dist/rls/extension.js.map +1 -0
- package/dist/rls/generator.d.ts +17 -0
- package/dist/rls/generator.d.ts.map +1 -0
- package/dist/rls/generator.js +47 -0
- package/dist/rls/generator.js.map +1 -0
- package/dist/rls/index.d.ts +7 -0
- package/dist/rls/index.d.ts.map +1 -0
- package/dist/rls/index.js +7 -0
- package/dist/rls/index.js.map +1 -0
- package/dist/rls/middleware.d.ts +17 -0
- package/dist/rls/middleware.d.ts.map +1 -0
- package/dist/rls/middleware.js +51 -0
- package/dist/rls/middleware.js.map +1 -0
- package/dist/rls/testing.d.ts +24 -0
- package/dist/rls/testing.d.ts.map +1 -0
- package/dist/rls/testing.js +31 -0
- package/dist/rls/testing.js.map +1 -0
- package/dist/rls/types.d.ts +51 -0
- package/dist/rls/types.d.ts.map +1 -0
- package/dist/rls/types.js +16 -0
- package/dist/rls/types.js.map +1 -0
- package/dist/uploads/uploads.service.d.ts.map +1 -1
- package/dist/uploads/validators.d.ts.map +1 -1
- package/dist/utils/serialize-prisma-types.js.map +1 -1
- package/package.json +47 -34
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,29 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **`glasswork/rls`** — PostgreSQL tenant isolation through Prisma Client Extensions, AsyncLocalStorage, Hono middleware, and a policy generator; includes transaction-scoped context, explicit bypass, and PostgreSQL integration tests.
|
|
13
|
+
|
|
14
|
+
- **`parseFilterLiteral`**, **`parseFilterValue`**, **`parseWhereFilterValues`** — centralized filter value parsing for query params and Prisma `where` clauses
|
|
15
|
+
- **`filter-value-schemas`** — Valibot operand schemas with transforms for typed Prisma filters
|
|
16
|
+
- **`executePrismaList`** — direct execution of `findMany`, `count`, and optional `groupBy` aggregations on any Prisma model delegate, with optional `map` row-transformation callback
|
|
17
|
+
- **`createPrismaListExecutor` row mapping** — added optional `map: (item: TItem) => TResult` callback to transform raw Prisma records into domain models or DTOs
|
|
18
|
+
- **Virtual filter mapping (`mapFilters`)** — transform virtual/composite API filter fields into real database columns prior to search and scope merging; includes `mapPresenceFilter`, `mapBooleanFilter`, `mapValueFilter`, `renameFilter`, `nestFilter`, and `composeFilterMappers`
|
|
19
|
+
- **Sort mapping (`mapSorts`)** — transform public API sort fields to nested relation paths (`'user.name'`) or custom sort clauses via `nestSort`, `renameSort`, or custom mapper functions in `createListQuery`
|
|
20
|
+
- **`glasswork/audit`** — impersonation-aware auditing subsystem with ambient actor and tenant resolution, pluggable `AuditSink<TTx>` transactional sinks, and dual-logging
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
|
|
24
|
+
- Build and typecheck with stable TypeScript 7.0.2; verify published declarations and route inference with TypeScript 5.9, 6, and 7 in isolated npm consumers.
|
|
25
|
+
- Update development dependencies, including Biome 2.5, AWS SDK clients, Hono, CASL, MJML, and documentation tooling. Keep Prisma on stable 7.10 and Vitest on the latest 4.x release compatible with Better Auth's testing peer range.
|
|
26
|
+
- Add Node.js 26 to the CI test matrix alongside Node.js 20, 22, and 24; check packed-package imports and types on Node.js 20.
|
|
27
|
+
- Make `ListQuerySchema` strict and bounded; malformed pagination, oversized strings, and unknown query parameters now return 422 instead of being clamped or ignored.
|
|
28
|
+
- Reject unknown list-query filter fields, filter operators, and sort fields; validate date operands as existing calendar dates.
|
|
29
|
+
- Typed filter schemas (`dateFilterSchema`, `intFilterSchema`, `numberFilterSchema`, `booleanFilterSchema`) parse string operands to Prisma types via Valibot transforms
|
|
30
|
+
- `parseWhereFilterValues` reuses those schemas with `parse()` instead of custom coercion logic
|
|
31
|
+
- List-query `where` deep copy uses `structuredClone` so parsed `Date` values are preserved
|
|
32
|
+
|
|
10
33
|
## [1.0.0] - 2026-06-10
|
|
11
34
|
|
|
12
35
|
Major release: subpath exports, dependency upgrades (CASL 7, MJML 5, Valibot 1.4, Prisma 7), Prisma list-query helpers, and internal refactors. Breaking changes when upgrading from 0.x.
|
package/README.md
CHANGED
|
@@ -170,12 +170,44 @@ export default app; // Ready for Lambda or local server
|
|
|
170
170
|
## Requirements
|
|
171
171
|
|
|
172
172
|
- Node.js 20+
|
|
173
|
-
- TypeScript 5
|
|
173
|
+
- TypeScript 5.9, 6, or 7 (verified against the published declarations)
|
|
174
174
|
|
|
175
175
|
## Contributing
|
|
176
176
|
|
|
177
177
|
Glasswork is in active development. Feedback, issues, and contributions are welcome!
|
|
178
178
|
|
|
179
|
+
Builds and typechecks use stable TypeScript 7. Vitest stays on the latest 4.x
|
|
180
|
+
release to remain compatible with Better Auth's testing peer range. CI runs the
|
|
181
|
+
full test suite on Node.js 20, 22, 24, and 26, and checks the packed package's
|
|
182
|
+
TypeScript 5.9, 6, and 7 consumer inference on Node.js 20.
|
|
183
|
+
|
|
184
|
+
The repository can be developed and verified independently with npm:
|
|
185
|
+
|
|
186
|
+
```sh
|
|
187
|
+
npm ci
|
|
188
|
+
npm run verify
|
|
189
|
+
npm run docs:build
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
`npm run smoke:pack` installs the tarball in an isolated npm project, checks its
|
|
193
|
+
published types, and imports its public entry points. Set `TYPESCRIPT_VERSION`
|
|
194
|
+
to test another supported compiler, for example
|
|
195
|
+
`TYPESCRIPT_VERSION=5.9.3 npm run smoke:pack` after building. Prisma's development
|
|
196
|
+
tooling requires Node.js 20.19+, 22.12+, or 24+ on the respective supported lines.
|
|
197
|
+
|
|
198
|
+
The RLS integration suite creates a temporary schema and restricted role in an
|
|
199
|
+
existing PostgreSQL **test database**, then removes them afterwards. Set
|
|
200
|
+
`RLS_TEST_DATABASE_URL` to a test administrator connection allowed to create schemas
|
|
201
|
+
and roles; the actual isolation checks run as the restricted role:
|
|
202
|
+
|
|
203
|
+
```sh
|
|
204
|
+
RLS_TEST_DATABASE_URL=postgresql://test_admin:password@localhost:5432/test_db npm run verify
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
Without this variable, the PostgreSQL suite is skipped. CI sets it for both tests
|
|
208
|
+
and coverage. To run coverage locally, use the same variable with
|
|
209
|
+
`npm run test:coverage`.
|
|
210
|
+
|
|
179
211
|
## License
|
|
180
212
|
|
|
181
213
|
MIT
|
|
@@ -191,5 +223,5 @@ MIT
|
|
|
191
223
|
[build-href]: https://github.com/rolandboon/glasswork/actions/workflows/ci.yml
|
|
192
224
|
[license-src]: https://img.shields.io/github/license/rolandboon/glasswork.svg?flat&colorA=1b1b1f&colorB=3e63dd
|
|
193
225
|
[license-href]: https://opensource.org/licenses/MIT
|
|
194
|
-
[type-script-src]: https://img.shields.io/badge/TypeScript-5.
|
|
226
|
+
[type-script-src]: https://img.shields.io/badge/TypeScript-5.9%20%7C%206%20%7C%207-blue?style=flat&labelColor=1b1b1f&color=3e63dd
|
|
195
227
|
[type-script-href]: https://www.typescriptlang.org/
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Logger } from '../utils/logger.js';
|
|
2
|
+
import type { AuditingLogger, AuditRecordInput, AuditSink } from './types.js';
|
|
3
|
+
export interface CreateAuditLoggerOptions<TTx = unknown> {
|
|
4
|
+
/** Persistence sink for audit records */
|
|
5
|
+
sink: AuditSink<TTx>;
|
|
6
|
+
/** Underlying logger (e.g. Pino logger) */
|
|
7
|
+
logger: Logger;
|
|
8
|
+
/** Service name to tag audit events with */
|
|
9
|
+
service?: string;
|
|
10
|
+
/** Custom formatter for the structured log payload */
|
|
11
|
+
formatLogPayload?: (record: AuditRecordInput) => Record<string, unknown>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Creates an AuditingLogger that combines structured logging with persistence via an AuditSink.
|
|
15
|
+
*
|
|
16
|
+
* Each call to `logger.audit(message, entry, options)`:
|
|
17
|
+
* 1. Resolves ambient request context (actor, impersonation, tenant, correlation ID).
|
|
18
|
+
* 2. Emits a structured log (`audit: true` with audit attributes) via the underlying logger.
|
|
19
|
+
* 3. Persists the resolved audit record atomically using the provided sink.
|
|
20
|
+
*/
|
|
21
|
+
export declare function createAuditLogger<TTx = unknown>(options: CreateAuditLoggerOptions<TTx>): AuditingLogger<TTx>;
|
|
22
|
+
//# sourceMappingURL=audit-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-logger.d.ts","sourceRoot":"","sources":["../../src/audit/audit-logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,KAAK,EAAmB,cAAc,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE/F,MAAM,WAAW,wBAAwB,CAAC,GAAG,GAAG,OAAO;IACrD,yCAAyC;IACzC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;IACrB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1E;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAG,OAAO,EAC7C,OAAO,EAAE,wBAAwB,CAAC,GAAG,CAAC,GACrC,cAAc,CAAC,GAAG,CAAC,CA6CrB"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { resolveAuditRecord } from './context.js';
|
|
2
|
+
/**
|
|
3
|
+
* Creates an AuditingLogger that combines structured logging with persistence via an AuditSink.
|
|
4
|
+
*
|
|
5
|
+
* Each call to `logger.audit(message, entry, options)`:
|
|
6
|
+
* 1. Resolves ambient request context (actor, impersonation, tenant, correlation ID).
|
|
7
|
+
* 2. Emits a structured log (`audit: true` with audit attributes) via the underlying logger.
|
|
8
|
+
* 3. Persists the resolved audit record atomically using the provided sink.
|
|
9
|
+
*/
|
|
10
|
+
export function createAuditLogger(options) {
|
|
11
|
+
const { sink, logger, service, formatLogPayload } = options;
|
|
12
|
+
const audit = async (message, entry, auditOptions) => {
|
|
13
|
+
const record = resolveAuditRecord({
|
|
14
|
+
...entry,
|
|
15
|
+
message: entry.message ?? message,
|
|
16
|
+
}, service);
|
|
17
|
+
const logPayload = formatLogPayload
|
|
18
|
+
? formatLogPayload(record)
|
|
19
|
+
: {
|
|
20
|
+
audit: true,
|
|
21
|
+
action: record.action,
|
|
22
|
+
category: record.category,
|
|
23
|
+
subjectType: record.subjectType,
|
|
24
|
+
subjectId: record.subjectId,
|
|
25
|
+
actorUserId: record.actorUserId,
|
|
26
|
+
effectiveUserId: record.effectiveUserId,
|
|
27
|
+
isImpersonating: record.isImpersonating,
|
|
28
|
+
tenantId: record.tenantId,
|
|
29
|
+
service: record.service,
|
|
30
|
+
metadata: record.metadata,
|
|
31
|
+
};
|
|
32
|
+
logger.info(message, logPayload);
|
|
33
|
+
await sink.record(record, auditOptions);
|
|
34
|
+
};
|
|
35
|
+
return {
|
|
36
|
+
debug: logger.debug.bind(logger),
|
|
37
|
+
info: logger.info.bind(logger),
|
|
38
|
+
warn: logger.warn.bind(logger),
|
|
39
|
+
error: logger.error.bind(logger),
|
|
40
|
+
child: logger.child?.bind(logger),
|
|
41
|
+
audit,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=audit-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-logger.js","sourceRoot":"","sources":["../../src/audit/audit-logger.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAclD;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAsC;IAEtC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;IAE5D,MAAM,KAAK,GAAG,KAAK,EACjB,OAAe,EACf,KAAsB,EACtB,YAA2B,EACZ,EAAE;QACjB,MAAM,MAAM,GAAG,kBAAkB,CAC/B;YACE,GAAG,KAAK;YACR,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,OAAO;SAClC,EACD,OAAO,CACR,CAAC;QAEF,MAAM,UAAU,GAAG,gBAAgB;YACjC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC;YAC1B,CAAC,CAAC;gBACE,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B,CAAC;QAEN,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAEjC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;QAChC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9B,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;QAChC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;QACjC,KAAK;KACN,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { AuditContext, AuditEntryInput, AuditRecordInput } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Get contextual information about the current actor and request for auditing.
|
|
4
|
+
* Returns undefined if called outside an authenticated request lifecycle.
|
|
5
|
+
*/
|
|
6
|
+
export declare function getAuditContext(): AuditContext | undefined;
|
|
7
|
+
/**
|
|
8
|
+
* Resolve an audit entry input with ambient request context to produce a complete AuditRecordInput.
|
|
9
|
+
*
|
|
10
|
+
* @throws Error if no actorUserId can be resolved from either the entry or the request context.
|
|
11
|
+
*/
|
|
12
|
+
export declare function resolveAuditRecord(entry: AuditEntryInput, service?: string): AuditRecordInput;
|
|
13
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/audit/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAElF;;;GAGG;AACH,wBAAgB,eAAe,IAAI,YAAY,GAAG,SAAS,CAU1D;AAyCD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAgB7F"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { getRequestActor, getRequestId } from '../observability/request-context.js';
|
|
2
|
+
/**
|
|
3
|
+
* Get contextual information about the current actor and request for auditing.
|
|
4
|
+
* Returns undefined if called outside an authenticated request lifecycle.
|
|
5
|
+
*/
|
|
6
|
+
export function getAuditContext() {
|
|
7
|
+
const actor = getRequestActor();
|
|
8
|
+
if (!actor?.actorUserId)
|
|
9
|
+
return undefined;
|
|
10
|
+
return {
|
|
11
|
+
actorUserId: actor.actorUserId,
|
|
12
|
+
effectiveUserId: actor.effectiveUserId,
|
|
13
|
+
isImpersonating: actor.isImpersonating,
|
|
14
|
+
tenantId: actor.tenantId,
|
|
15
|
+
requestId: getRequestId(),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function resolveActor(entry, ctx) {
|
|
19
|
+
if (ctx?.isImpersonating) {
|
|
20
|
+
return {
|
|
21
|
+
actorUserId: ctx.actorUserId,
|
|
22
|
+
effectiveUserId: ctx.effectiveUserId ?? null,
|
|
23
|
+
isImpersonating: Boolean(ctx.effectiveUserId && ctx.effectiveUserId !== ctx.actorUserId),
|
|
24
|
+
tenantId: ctx.tenantId ?? entry.tenantId ?? null,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const actorUserId = entry.actorUserId ?? ctx?.actorUserId;
|
|
28
|
+
if (!actorUserId) {
|
|
29
|
+
throw new Error(`Audit entry '${entry.action}' requires an actorUserId, but none was provided or available in request context`);
|
|
30
|
+
}
|
|
31
|
+
const effectiveUserId = entry.effectiveUserId ?? ctx?.effectiveUserId ?? null;
|
|
32
|
+
return {
|
|
33
|
+
actorUserId,
|
|
34
|
+
effectiveUserId,
|
|
35
|
+
isImpersonating: Boolean(effectiveUserId && effectiveUserId !== actorUserId),
|
|
36
|
+
tenantId: entry.tenantId ?? ctx?.tenantId ?? null,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function formatAuditMessage(entry) {
|
|
40
|
+
if (entry.message)
|
|
41
|
+
return entry.message;
|
|
42
|
+
const target = entry.subjectId ? ` ${entry.subjectId}` : '';
|
|
43
|
+
return `Audit: ${entry.action} on ${entry.subjectType}${target}`;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Resolve an audit entry input with ambient request context to produce a complete AuditRecordInput.
|
|
47
|
+
*
|
|
48
|
+
* @throws Error if no actorUserId can be resolved from either the entry or the request context.
|
|
49
|
+
*/
|
|
50
|
+
export function resolveAuditRecord(entry, service) {
|
|
51
|
+
const ctx = getAuditContext();
|
|
52
|
+
const actors = resolveActor(entry, ctx);
|
|
53
|
+
return {
|
|
54
|
+
...actors,
|
|
55
|
+
requestId: ctx?.requestId ?? null,
|
|
56
|
+
action: entry.action,
|
|
57
|
+
category: entry.category ?? 'DATA',
|
|
58
|
+
subjectType: entry.subjectType,
|
|
59
|
+
subjectId: entry.subjectId ?? null,
|
|
60
|
+
message: formatAuditMessage(entry),
|
|
61
|
+
metadata: entry.metadata ?? null,
|
|
62
|
+
service: service ?? null,
|
|
63
|
+
createdAt: new Date(),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/audit/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAGpF;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,IAAI,CAAC,KAAK,EAAE,WAAW;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO;QACL,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,SAAS,EAAE,YAAY,EAAE;KAC1B,CAAC;AACJ,CAAC;AASD,SAAS,YAAY,CAAC,KAAsB,EAAE,GAAkB;IAC9D,IAAI,GAAG,EAAE,eAAe,EAAE,CAAC;QACzB,OAAO;YACL,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,eAAe,EAAE,GAAG,CAAC,eAAe,IAAI,IAAI;YAC5C,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,eAAe,KAAK,GAAG,CAAC,WAAW,CAAC;YACxF,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI;SACjD,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,GAAG,EAAE,WAAW,CAAC;IAC1D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,gBAAgB,KAAK,CAAC,MAAM,kFAAkF,CAC/G,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,IAAI,GAAG,EAAE,eAAe,IAAI,IAAI,CAAC;IAC9E,OAAO;QACL,WAAW;QACX,eAAe;QACf,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,eAAe,KAAK,WAAW,CAAC;QAC5E,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,GAAG,EAAE,QAAQ,IAAI,IAAI;KAClD,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAsB;IAChD,IAAI,KAAK,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IACxC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,OAAO,UAAU,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,WAAW,GAAG,MAAM,EAAE,CAAC;AACnE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAsB,EAAE,OAAgB;IACzE,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAExC,OAAO;QACL,GAAG,MAAM;QACT,SAAS,EAAE,GAAG,EAAE,SAAS,IAAI,IAAI;QACjC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,MAAM;QAClC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;QAClC,OAAO,EAAE,kBAAkB,CAAC,KAAK,CAAC;QAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;QAChC,OAAO,EAAE,OAAO,IAAI,IAAI;QACxB,SAAS,EAAE,IAAI,IAAI,EAAE;KACtB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module glasswork/audit
|
|
3
|
+
* Audit logging, impersonation correlation, and audit sink abstraction.
|
|
4
|
+
*/
|
|
5
|
+
export { type CreateAuditLoggerOptions, createAuditLogger, } from './audit-logger.js';
|
|
6
|
+
export { getAuditContext, resolveAuditRecord } from './context.js';
|
|
7
|
+
export type { AuditContext, AuditEntryInput, AuditingLogger, AuditRecordInput, AuditSink, } from './types.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/audit/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,KAAK,wBAAwB,EAC7B,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACnE,YAAY,EACV,YAAY,EACZ,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,SAAS,GACV,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module glasswork/audit
|
|
3
|
+
* Audit logging, impersonation correlation, and audit sink abstraction.
|
|
4
|
+
*/
|
|
5
|
+
export { createAuditLogger, } from './audit-logger.js';
|
|
6
|
+
export { getAuditContext, resolveAuditRecord } from './context.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/audit/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { Logger } from '../utils/logger.js';
|
|
2
|
+
/**
|
|
3
|
+
* Contextual information about the actor and request for an audit event.
|
|
4
|
+
*/
|
|
5
|
+
export interface AuditContext {
|
|
6
|
+
/** Physical authenticated user who initiated the request */
|
|
7
|
+
actorUserId: string;
|
|
8
|
+
/** Effective user identity when acting via impersonation */
|
|
9
|
+
effectiveUserId?: string;
|
|
10
|
+
/** Whether the request is being executed via impersonation */
|
|
11
|
+
isImpersonating: boolean;
|
|
12
|
+
/** Tenant / organization identifier */
|
|
13
|
+
tenantId?: string;
|
|
14
|
+
/** Request identifier for distributed correlation */
|
|
15
|
+
requestId?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Input for creating an audit event from business logic.
|
|
19
|
+
*/
|
|
20
|
+
export interface AuditEntryInput {
|
|
21
|
+
/** Unique action identifier (e.g. 'poll.create', 'member.archive') */
|
|
22
|
+
action: string;
|
|
23
|
+
/** Audit category (defaults to 'DATA') */
|
|
24
|
+
category?: string;
|
|
25
|
+
/** Target entity type (e.g. 'Poll', 'User', 'MedicalGroup') */
|
|
26
|
+
subjectType: string;
|
|
27
|
+
/** Target entity ID */
|
|
28
|
+
subjectId?: string | null;
|
|
29
|
+
/** Human-readable description of the event */
|
|
30
|
+
message?: string;
|
|
31
|
+
/** Additional structured metadata or changed fields */
|
|
32
|
+
metadata?: Record<string, unknown> | null;
|
|
33
|
+
/** Explicit actor override (e.g. for background jobs / seeders) */
|
|
34
|
+
actorUserId?: string | null;
|
|
35
|
+
/** Explicit effective user override */
|
|
36
|
+
effectiveUserId?: string | null;
|
|
37
|
+
/** Explicit tenant override */
|
|
38
|
+
tenantId?: string | null;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Fully resolved audit record ready for persistence and structured logging.
|
|
42
|
+
*/
|
|
43
|
+
export interface AuditRecordInput {
|
|
44
|
+
actorUserId: string;
|
|
45
|
+
effectiveUserId: string | null;
|
|
46
|
+
isImpersonating: boolean;
|
|
47
|
+
tenantId: string | null;
|
|
48
|
+
requestId: string | null;
|
|
49
|
+
action: string;
|
|
50
|
+
category: string;
|
|
51
|
+
subjectType: string;
|
|
52
|
+
subjectId: string | null;
|
|
53
|
+
message: string;
|
|
54
|
+
metadata: Record<string, unknown> | null;
|
|
55
|
+
service: string | null;
|
|
56
|
+
createdAt: Date;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Pluggable persistence sink for audit records (e.g. Prisma, DynamoDB, CloudWatch).
|
|
60
|
+
*/
|
|
61
|
+
export interface AuditSink<TTx = unknown> {
|
|
62
|
+
record(entry: AuditRecordInput, options?: {
|
|
63
|
+
tx?: TTx;
|
|
64
|
+
}): Promise<void>;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Logger extended with an `.audit()` method that writes structured logs and persists via a sink.
|
|
68
|
+
*/
|
|
69
|
+
export type AuditingLogger<TTx = unknown> = Logger & {
|
|
70
|
+
audit(message: string, entry: AuditEntryInput, options?: {
|
|
71
|
+
tx?: TTx;
|
|
72
|
+
}): Promise<void>;
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/audit/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8DAA8D;IAC9D,eAAe,EAAE,OAAO,CAAC;IACzB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC1C,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,uCAAuC;IACvC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS,CAAC,GAAG,GAAG,OAAO;IACtC,MAAM,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,GAAG,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxE;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,GAAG,GAAG,OAAO,IAAI,MAAM,GAAG;IACnD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,GAAG,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/audit/types.ts"],"names":[],"mappings":""}
|
package/dist/auth/abilities.d.ts
CHANGED
|
@@ -24,7 +24,7 @@ export type AuthorizedAbility<TActions extends string, TSubjects extends string>
|
|
|
24
24
|
*
|
|
25
25
|
* const ability = defineAbility(currentUser);
|
|
26
26
|
*/
|
|
27
|
-
export declare function createAbilityFactory<TSubjects extends string, TActions extends string = 'create' | 'read' | 'update' | 'delete' | 'manage'>(): (define: (can: AbilityBuilder<AuthorizedAbility<TActions, TSubjects>>[
|
|
27
|
+
export declare function createAbilityFactory<TSubjects extends string, TActions extends string = 'create' | 'read' | 'update' | 'delete' | 'manage'>(): (define: (can: AbilityBuilder<AuthorizedAbility<TActions, TSubjects>>['can'], cannot: AbilityBuilder<AuthorizedAbility<TActions, TSubjects>>['cannot'], user: AuthUser) => void) => (user: AuthUser) => AuthorizedAbility<TActions, TSubjects>;
|
|
28
28
|
/**
|
|
29
29
|
* Define abilities using a declarative role-based configuration.
|
|
30
30
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abilities.d.ts","sourceRoot":"","sources":["../../src/auth/abilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGlD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,QAAQ,SAAS,MAAM,EAAE,SAAS,SAAS,MAAM,IAAI,aAAa,CAC9F;IAAC,QAAQ;IAAE,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;CAAC,CACjD,GAAG;IACF,SAAS,EAAE,CACT,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,EAC7C,OAAO,CAAC,EAAE,MAAM,KACb,IAAI,CAAC;CACX,CAAC;AAqBF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,SAAS,MAAM,EACxB,QAAQ,SAAS,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,
|
|
1
|
+
{"version":3,"file":"abilities.d.ts","sourceRoot":"","sources":["../../src/auth/abilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGlD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,QAAQ,SAAS,MAAM,EAAE,SAAS,SAAS,MAAM,IAAI,aAAa,CAC9F;IAAC,QAAQ;IAAE,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;CAAC,CACjD,GAAG;IACF,SAAS,EAAE,CACT,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,EAC7C,OAAO,CAAC,EAAE,MAAM,KACb,IAAI,CAAC;CACX,CAAC;AAqBF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,SAAS,MAAM,EACxB,QAAQ,SAAS,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,cAKlE,CACN,GAAG,EAAE,cAAc,wCAAY,CAAC,KAAK,CAAC,EACtC,MAAM,EAAE,cAAc,wCAAY,CAAC,QAAQ,CAAC,EAC5C,IAAI,EAAE,QAAQ,KACX,IAAI,YAEK,QAAQ,4CAOzB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,SAAS,MAAM,EACxB,QAAQ,SAAS,MAAM,EACvB,MAAM,SAAS,MAAM,EAErB,MAAM,EAAE,MAAM,CACZ,MAAM,EACN,CAAC,GAAG,EAAE;IACJ,GAAG,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5F,MAAM,EAAE,cAAc,CACpB,aAAa,CAAC,CAAC,QAAQ,EAAE,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAChE,CAAC,QAAQ,CAAC,CAAC;IACZ,IAAI,EAAE,QAAQ,CAAC;CAChB,KAAK,IAAI,CACX;IAKC,GAAG,OAAO,QAAQ;IAelB,4DAA4D;IAC5D,OAAO,OAAO,MAAM,SAAQ,OAAO,CAAC,QAAQ,CAAC;EAIhD;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abilities.js","sourceRoot":"","sources":["../../src/auth/abilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAsB,MAAM,eAAe,CAAC;AAEnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAgB3D,SAAS,eAAe,CACtB,OAAwE;IAExE,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;QAC5B,SAAS,CACP,MAAgB,EAChB,OAA6C,EAC7C,OAAgB;YAEhB,sHAAsH;YACtH,IAAI,CAAE,OAAe,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC3C,MAAM,IAAI,kBAAkB,CAC1B,OAAO,IAAI,gCAAgC,MAAM,gBAAgB,CAClE,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAA2C,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,oBAAoB;IAMlC,OAAO,SAAS,aAAa,CAC3B,MAIS;QAET,OAAO,CAAC,IAAc,EAAc,EAAE;YACpC,MAAM,mBAAmB,GAAG,uBAAuB,EAAE,CAAC;YACtD,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,cAAc,CAAa,mBAAmB,CAAC,CAAC;YACnF,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAC1B,OAAO,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAKjC,MASC;IAID,OAAO;QACL,GAAG,CAAC,IAAc;YAChB,MAAM,mBAAmB,GAAG,uBAAuB,EAAE,CAAC;YACtD,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,cAAc,CAE/C,mBAAmB,CAAC,CAAC;YAEvB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAc,CAAC,CAAC;YAE/C,IAAI,UAAU,EAAE,CAAC;gBACf,UAAU,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACpC,CAAC;YAED,OAAO,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC;QAClC,CAAC;QAED,4DAA4D;QAC5D,OAAO,CAAC,IAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"abilities.js","sourceRoot":"","sources":["../../src/auth/abilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAsB,MAAM,eAAe,CAAC;AAEnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAgB3D,SAAS,eAAe,CACtB,OAAwE;IAExE,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;QAC5B,SAAS,CACP,MAAgB,EAChB,OAA6C,EAC7C,OAAgB;YAEhB,sHAAsH;YACtH,IAAI,CAAE,OAAe,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC3C,MAAM,IAAI,kBAAkB,CAC1B,OAAO,IAAI,gCAAgC,MAAM,gBAAgB,CAClE,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAA2C,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,oBAAoB;IAMlC,OAAO,SAAS,aAAa,CAC3B,MAIS;QAET,OAAO,CAAC,IAAc,EAAc,EAAE;YACpC,MAAM,mBAAmB,GAAG,uBAAuB,EAAE,CAAC;YACtD,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,cAAc,CAAa,mBAAmB,CAAC,CAAC;YACnF,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAC1B,OAAO,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAKjC,MASC;IAID,OAAO;QACL,GAAG,CAAC,IAAc;YAChB,MAAM,mBAAmB,GAAG,uBAAuB,EAAE,CAAC;YACtD,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,cAAc,CAE/C,mBAAmB,CAAC,CAAC;YAEvB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAc,CAAC,CAAC;YAE/C,IAAI,UAAU,EAAE,CAAC;gBACf,UAAU,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACpC,CAAC;YAED,OAAO,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC;QAClC,CAAC;QAED,4DAA4D;QAC5D,OAAO,CAAC,IAAY,EAAE,IAAI,GAAsB,EAAE;YAChD,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,IAAI,EAAc,CAAC,CAAC;QAC7D,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -31,11 +31,11 @@ export interface BetterAuthClient {
|
|
|
31
31
|
};
|
|
32
32
|
handler?: (request: Request) => Promise<Response>;
|
|
33
33
|
}
|
|
34
|
-
export interface BetterAuthProviderConfig {
|
|
34
|
+
export interface BetterAuthProviderConfig<TUser extends AuthUser = AuthUser> {
|
|
35
35
|
/** better-auth client instance */
|
|
36
36
|
auth: BetterAuthClient;
|
|
37
37
|
/** Map better-auth user to AuthUser */
|
|
38
|
-
mapUser?: (user: Record<string, unknown>) =>
|
|
38
|
+
mapUser?: (user: Record<string, unknown>) => TUser;
|
|
39
39
|
/** Cookie name for session token (default: 'session') */
|
|
40
40
|
cookieName?: string;
|
|
41
41
|
}
|
|
@@ -51,6 +51,9 @@ interface BetterAuthSession {
|
|
|
51
51
|
/**
|
|
52
52
|
* Wrap better-auth as a Glasswork AuthProvider.
|
|
53
53
|
*/
|
|
54
|
-
export declare function createBetterAuthProvider(config: BetterAuthProviderConfig
|
|
54
|
+
export declare function createBetterAuthProvider<TUser extends AuthUser>(config: BetterAuthProviderConfig<TUser> & {
|
|
55
|
+
mapUser: (user: Record<string, unknown>) => TUser;
|
|
56
|
+
}): AuthProvider<TUser>;
|
|
57
|
+
export declare function createBetterAuthProvider(config: BetterAuthProviderConfig<AuthUser>): AuthProvider<AuthUser>;
|
|
55
58
|
export {};
|
|
56
59
|
//# sourceMappingURL=better-auth-provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"better-auth-provider.d.ts","sourceRoot":"","sources":["../../src/auth/better-auth-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAe,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE;QACH,UAAU,EAAE,CAAC,OAAO,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,KAAK,OAAO,CAAC;YACrE,OAAO,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;YACnC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;SACvC,GAAG,IAAI,CAAC,CAAC;QACV,aAAa,EAAE,CAAC,OAAO,EAAE;YAAE,IAAI,EAAE;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACpE,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE;YAAE,IAAI,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,QAAQ,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3F,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/E,YAAY,CAAC,EACT,CAAC,CAAC,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GAClE,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG;YAClB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;aAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;SAC9E,CAAC,CAAC;KACR,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,wBAAwB;
|
|
1
|
+
{"version":3,"file":"better-auth-provider.d.ts","sourceRoot":"","sources":["../../src/auth/better-auth-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAe,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE;QACH,UAAU,EAAE,CAAC,OAAO,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,KAAK,OAAO,CAAC;YACrE,OAAO,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;YACnC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;SACvC,GAAG,IAAI,CAAC,CAAC;QACV,aAAa,EAAE,CAAC,OAAO,EAAE;YAAE,IAAI,EAAE;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACpE,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE;YAAE,IAAI,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,QAAQ,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3F,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/E,YAAY,CAAC,EACT,CAAC,CAAC,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GAClE,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG;YAClB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;aAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;SAC9E,CAAC,CAAC;KACR,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,wBAAwB,CAAC,KAAK,SAAS,QAAQ,GAAG,QAAQ;IACzE,kCAAkC;IAClC,IAAI,EAAE,gBAAgB,CAAC;IACvB,uCAAuC;IACvC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,KAAK,CAAC;IACnD,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,iBAAiB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,SAAS,QAAQ,EAC7D,MAAM,EAAE,wBAAwB,CAAC,KAAK,CAAC,GAAG;IACxC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,KAAK,CAAC;CACnD,GACA,YAAY,CAAC,KAAK,CAAC,CAAC;AACvB,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC,GACzC,YAAY,CAAC,QAAQ,CAAC,CAAC"}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
const DEFAULT_COOKIE_NAME = 'session';
|
|
2
|
-
/**
|
|
3
|
-
* Wrap better-auth as a Glasswork AuthProvider.
|
|
4
|
-
*/
|
|
5
2
|
export function createBetterAuthProvider(config) {
|
|
6
3
|
const { auth, mapUser, cookieName = DEFAULT_COOKIE_NAME } = config;
|
|
7
4
|
const defaultMapUser = (user) => ({
|
|
@@ -53,6 +50,7 @@ function mapSession(session) {
|
|
|
53
50
|
expiresAt: toDate(session.expiresAt),
|
|
54
51
|
createdAt: toDate(session.createdAt),
|
|
55
52
|
lastAccessedAt: session.lastAccessedAt ? toDate(session.lastAccessedAt) : undefined,
|
|
53
|
+
impersonatedBy: typeof session.impersonatedBy === 'string' ? session.impersonatedBy : undefined,
|
|
56
54
|
metadata: session,
|
|
57
55
|
};
|
|
58
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"better-auth-provider.js","sourceRoot":"","sources":["../../src/auth/better-auth-provider.ts"],"names":[],"mappings":"AAuCA,MAAM,mBAAmB,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"better-auth-provider.js","sourceRoot":"","sources":["../../src/auth/better-auth-provider.ts"],"names":[],"mappings":"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"}
|
package/dist/auth/index.d.ts
CHANGED
|
@@ -2,6 +2,6 @@ export { createAbilityFactory, defineRoleAbilities, type InferAbility, } from '.
|
|
|
2
2
|
export { assertCan, can, subject } from './assert.js';
|
|
3
3
|
export { type BetterAuthClient, type BetterAuthProviderConfig, createBetterAuthProvider, } from './better-auth-provider.js';
|
|
4
4
|
export { type PrismaAbilityFactory, registerAuthCasl } from './casl-bridge.js';
|
|
5
|
-
export { type AuthMiddlewareConfig, createAuthMiddleware, } from './middleware.js';
|
|
6
|
-
export type { AuthContext, AuthProvider, AuthSession, AuthUser } from './types.js';
|
|
5
|
+
export { type AuthAuthorizeConfig, type AuthMiddleware, type AuthMiddlewareConfig, createAuthMiddleware, } from './middleware.js';
|
|
6
|
+
export type { AuthContext, AuthenticatedAuthContext, AuthProvider, AuthSession, AuthUser, } from './types.js';
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/auth/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,YAAY,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE/E,OAAO,EACL,KAAK,oBAAoB,EACzB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,YAAY,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE/E,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,WAAW,EACX,wBAAwB,EACxB,YAAY,EACZ,WAAW,EACX,QAAQ,GACT,MAAM,YAAY,CAAC"}
|
package/dist/auth/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GAEpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAGL,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAA6B,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE/E,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GAEpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAGL,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAA6B,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE/E,OAAO,EAIL,oBAAoB,GACrB,MAAM,iBAAiB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type AnyAbility } from '@casl/ability';
|
|
2
2
|
import type { Context, MiddlewareHandler } from 'hono';
|
|
3
|
-
import type { AuthProvider, AuthSession, AuthUser } from './types.js';
|
|
3
|
+
import type { AuthContext, AuthProvider, AuthSession, AuthUser } from './types.js';
|
|
4
4
|
export interface AuthMiddlewareConfig<TUser extends AuthUser = AuthUser, TAbility extends AnyAbility = AnyAbility, TSession extends AuthSession = AuthSession> {
|
|
5
5
|
/** Auth provider instance. */
|
|
6
6
|
provider: AuthProvider<TUser, TSession>;
|
|
@@ -17,15 +17,17 @@ export interface AuthMiddlewareConfig<TUser extends AuthUser = AuthUser, TAbilit
|
|
|
17
17
|
/** Called when a session token is invalid. */
|
|
18
18
|
onInvalidSession?: (c: Context) => void | Promise<void>;
|
|
19
19
|
}
|
|
20
|
-
type
|
|
21
|
-
action:
|
|
22
|
-
subject:
|
|
23
|
-
__caslSubjectType__?: string;
|
|
24
|
-
};
|
|
20
|
+
export type AuthAuthorizeConfig<TAbility extends AnyAbility = AnyAbility> = {
|
|
21
|
+
action: Parameters<TAbility['can']>[0];
|
|
22
|
+
subject: Parameters<TAbility['can']>[1];
|
|
25
23
|
};
|
|
24
|
+
type AuthEnvironment<TUser extends AuthUser, TAbility extends AnyAbility, TSession extends AuthSession> = {
|
|
25
|
+
Variables: AuthContext<TUser, TSession, TAbility>;
|
|
26
|
+
};
|
|
27
|
+
export type AuthMiddleware<TUser extends AuthUser = AuthUser, TAbility extends AnyAbility = AnyAbility, TSession extends AuthSession = AuthSession> = (authorize?: AuthAuthorizeConfig<TAbility>) => MiddlewareHandler<AuthEnvironment<TUser, TAbility, TSession>>;
|
|
26
28
|
/**
|
|
27
29
|
* Create auth middleware that validates sessions and builds abilities.
|
|
28
30
|
*/
|
|
29
|
-
export declare function createAuthMiddleware<TUser extends AuthUser = AuthUser, TAbility extends AnyAbility = AnyAbility, TSession extends AuthSession = AuthSession>(config: AuthMiddlewareConfig<TUser, TAbility, TSession>):
|
|
31
|
+
export declare function createAuthMiddleware<TUser extends AuthUser = AuthUser, TAbility extends AnyAbility = AnyAbility, TSession extends AuthSession = AuthSession>(config: AuthMiddlewareConfig<TUser, TAbility, TSession>): AuthMiddleware<TUser, TAbility, TSession>;
|
|
30
32
|
export {};
|
|
31
33
|
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/auth/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAQ,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/auth/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAQ,MAAM,MAAM,CAAC;AAI7D,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEnF,MAAM,WAAW,oBAAoB,CACnC,KAAK,SAAS,QAAQ,GAAG,QAAQ,EACjC,QAAQ,SAAS,UAAU,GAAG,UAAU,EACxC,QAAQ,SAAS,WAAW,GAAG,WAAW;IAE1C,8BAA8B;IAC9B,QAAQ,EAAE,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACxC,2CAA2C;IAC3C,YAAY,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,QAAQ,CAAC;IACxC,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,QAAQ,CAAC;IAC9B,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD;AAED,MAAM,MAAM,mBAAmB,CAAC,QAAQ,SAAS,UAAU,GAAG,UAAU,IAAI;IAC1E,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACzC,CAAC;AAEF,KAAK,eAAe,CAClB,KAAK,SAAS,QAAQ,EACtB,QAAQ,SAAS,UAAU,EAC3B,QAAQ,SAAS,WAAW,IAC1B;IACF,SAAS,EAAE,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,cAAc,CACxB,KAAK,SAAS,QAAQ,GAAG,QAAQ,EACjC,QAAQ,SAAS,UAAU,GAAG,UAAU,EACxC,QAAQ,SAAS,WAAW,GAAG,WAAW,IACxC,CACF,SAAS,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,KACtC,iBAAiB,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEnE;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,SAAS,QAAQ,GAAG,QAAQ,EACjC,QAAQ,SAAS,UAAU,GAAG,UAAU,EACxC,QAAQ,SAAS,WAAW,GAAG,WAAW,EAE1C,MAAM,EAAE,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,GACtD,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAqC3C"}
|
package/dist/auth/middleware.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Ability } from '@casl/ability';
|
|
2
2
|
import { deleteCookie, getCookie } from 'hono/cookie';
|
|
3
3
|
import { ForbiddenException, UnauthorizedException } from '../http/errors.js';
|
|
4
|
+
import { setRequestAuth } from '../observability/request-context.js';
|
|
4
5
|
/**
|
|
5
6
|
* Create auth middleware that validates sessions and builds abilities.
|
|
6
7
|
*/
|
|
@@ -62,9 +63,16 @@ async function validateSession(provider, token) {
|
|
|
62
63
|
}
|
|
63
64
|
function applyAuthContext(c, state) {
|
|
64
65
|
c.set('user', state.user);
|
|
65
|
-
c.set('session', state.session
|
|
66
|
+
c.set('session', state.session);
|
|
66
67
|
c.set('ability', state.ability);
|
|
67
68
|
c.set('isAuthenticated', state.isAuthenticated);
|
|
69
|
+
if (state.user?.id) {
|
|
70
|
+
setRequestAuth({
|
|
71
|
+
userId: state.user.id,
|
|
72
|
+
tenantId: state.user.tenantId,
|
|
73
|
+
impersonatedBy: state.session?.impersonatedBy,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
68
76
|
}
|
|
69
77
|
function enforceAuthorization(authorize, state, allowGuest) {
|
|
70
78
|
if (!state.user && !allowGuest) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/auth/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAmB,MAAM,eAAe,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/auth/middleware.ts"],"names":[],"mappings":"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"}
|
package/dist/auth/types.d.ts
CHANGED
|
@@ -18,6 +18,8 @@ export interface AuthSession {
|
|
|
18
18
|
expiresAt: Date;
|
|
19
19
|
createdAt: Date;
|
|
20
20
|
lastAccessedAt?: Date;
|
|
21
|
+
/** Impersonator user ID if the session was created via impersonation */
|
|
22
|
+
impersonatedBy?: string;
|
|
21
23
|
metadata?: Record<string, unknown>;
|
|
22
24
|
}
|
|
23
25
|
/**
|
|
@@ -51,4 +53,9 @@ export interface AuthContext<TUser extends AuthUser = AuthUser, TSession extends
|
|
|
51
53
|
ability: TAbility;
|
|
52
54
|
isAuthenticated: boolean;
|
|
53
55
|
}
|
|
56
|
+
export type AuthenticatedAuthContext<TUser extends AuthUser = AuthUser, TSession extends AuthSession = AuthSession, TAbility extends AnyAbility = AnyAbility> = Omit<AuthContext<TUser, TSession, TAbility>, 'user' | 'session' | 'isAuthenticated'> & {
|
|
57
|
+
user: TUser;
|
|
58
|
+
session: TSession;
|
|
59
|
+
isAuthenticated: true;
|
|
60
|
+
};
|
|
54
61
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/auth/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAC3B,KAAK,SAAS,QAAQ,GAAG,QAAQ,EACjC,QAAQ,SAAS,WAAW,GAAG,WAAW;IAE1C,iCAAiC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QACtC,OAAO,EAAE,QAAQ,CAAC;QAClB,IAAI,EAAE,KAAK,CAAC;KACb,GAAG,IAAI,CAAC,CAAC;IAEV;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpD;;OAEG;IACH,cAAc,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;CAC1D;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAC1B,KAAK,SAAS,QAAQ,GAAG,QAAQ,EACjC,QAAQ,SAAS,WAAW,GAAG,WAAW,EAC1C,QAAQ,SAAS,UAAU,GAAG,UAAU;IAExC,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC;IACnB,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,QAAQ,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;CAC1B"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAC3B,KAAK,SAAS,QAAQ,GAAG,QAAQ,EACjC,QAAQ,SAAS,WAAW,GAAG,WAAW;IAE1C,iCAAiC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QACtC,OAAO,EAAE,QAAQ,CAAC;QAClB,IAAI,EAAE,KAAK,CAAC;KACb,GAAG,IAAI,CAAC,CAAC;IAEV;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpD;;OAEG;IACH,cAAc,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;CAC1D;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAC1B,KAAK,SAAS,QAAQ,GAAG,QAAQ,EACjC,QAAQ,SAAS,WAAW,GAAG,WAAW,EAC1C,QAAQ,SAAS,UAAU,GAAG,UAAU;IAExC,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC;IACnB,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,QAAQ,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,MAAM,wBAAwB,CAClC,KAAK,SAAS,QAAQ,GAAG,QAAQ,EACjC,QAAQ,SAAS,WAAW,GAAG,WAAW,EAC1C,QAAQ,SAAS,UAAU,GAAG,UAAU,IACtC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,iBAAiB,CAAC,GAAG;IACzF,IAAI,EAAE,KAAK,CAAC;IACZ,OAAO,EAAE,QAAQ,CAAC;IAClB,eAAe,EAAE,IAAI,CAAC;CACvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-service.d.ts","sourceRoot":"","sources":["../../src/config/config-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAsC,MAAM,SAAS,CAAC;AAG9F,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAExD;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;aAGhC,MAAM,EAAE,OAAO,EAAE;
|
|
1
|
+
{"version":3,"file":"config-service.d.ts","sourceRoot":"","sources":["../../src/config/config-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAsC,MAAM,SAAS,CAAC;AAG9F,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAExD;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;aAGhC,MAAM,EAAE,OAAO,EAAE;IAFnC,YACE,OAAO,EAAE,MAAM,EACC,MAAM,EAAE,OAAO,EAAE,EAIlC;CACF;AAuBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkEG;AACH,wBAAsB,YAAY,CAChC,OAAO,SAAS,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,EAChE,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAyC3D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,OAAO,SAAS,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,EAC7F,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,CAAC,OAAO,CAAC,CAUjB"}
|