glasswork 0.6.0 → 0.6.1

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.
Files changed (47) hide show
  1. package/dist/openapi/openapi-transformer.d.ts +5 -0
  2. package/dist/openapi/openapi-transformer.d.ts.map +1 -1
  3. package/dist/openapi/openapi-transformer.js +5 -0
  4. package/dist/openapi/openapi-transformer.js.map +1 -1
  5. package/dist/utils/serialize-prisma-types.d.ts +14 -6
  6. package/dist/utils/serialize-prisma-types.d.ts.map +1 -1
  7. package/package.json +1 -1
  8. package/dist/authorization/ability-middleware.d.ts +0 -61
  9. package/dist/authorization/ability-middleware.d.ts.map +0 -1
  10. package/dist/authorization/ability-middleware.js +0 -74
  11. package/dist/authorization/ability-middleware.js.map +0 -1
  12. package/dist/authorization/index.d.ts +0 -46
  13. package/dist/authorization/index.d.ts.map +0 -1
  14. package/dist/authorization/index.js +0 -46
  15. package/dist/authorization/index.js.map +0 -1
  16. package/dist/authorization/route-helpers.d.ts +0 -106
  17. package/dist/authorization/route-helpers.d.ts.map +0 -1
  18. package/dist/authorization/route-helpers.js +0 -136
  19. package/dist/authorization/route-helpers.js.map +0 -1
  20. package/dist/authorization/service-proxy.d.ts +0 -59
  21. package/dist/authorization/service-proxy.d.ts.map +0 -1
  22. package/dist/authorization/service-proxy.js +0 -110
  23. package/dist/authorization/service-proxy.js.map +0 -1
  24. package/dist/authorization/types.d.ts +0 -58
  25. package/dist/authorization/types.d.ts.map +0 -1
  26. package/dist/authorization/types.js +0 -7
  27. package/dist/authorization/types.js.map +0 -1
  28. package/dist/hooks/authorization-hook.d.ts +0 -100
  29. package/dist/hooks/authorization-hook.d.ts.map +0 -1
  30. package/dist/hooks/authorization-hook.js +0 -93
  31. package/dist/hooks/authorization-hook.js.map +0 -1
  32. package/dist/hooks/index.d.ts +0 -54
  33. package/dist/hooks/index.d.ts.map +0 -1
  34. package/dist/hooks/index.js +0 -55
  35. package/dist/hooks/index.js.map +0 -1
  36. package/dist/hooks/service-hooks.d.ts +0 -82
  37. package/dist/hooks/service-hooks.d.ts.map +0 -1
  38. package/dist/hooks/service-hooks.js +0 -158
  39. package/dist/hooks/service-hooks.js.map +0 -1
  40. package/dist/hooks/types.d.ts +0 -151
  41. package/dist/hooks/types.d.ts.map +0 -1
  42. package/dist/hooks/types.js +0 -2
  43. package/dist/hooks/types.js.map +0 -1
  44. package/dist/utils/pagination.d.ts +0 -48
  45. package/dist/utils/pagination.d.ts.map +0 -1
  46. package/dist/utils/pagination.js +0 -42
  47. package/dist/utils/pagination.js.map +0 -1
@@ -6,6 +6,11 @@ import type { OpenAPIV3_1 } from 'openapi-types';
6
6
  * - Converts OpenAPI 3.0-style nullable syntax to OpenAPI 3.1.0 format
7
7
  * - Recursively processes all schemas in components, paths, and responses
8
8
  *
9
+ * **Note**: As of hono-openapi 1.x, this transformation is no longer needed for
10
+ * hono-openapi generated specs, as they already produce proper OpenAPI 3.1 format.
11
+ * This function is kept for backwards compatibility and for transforming external
12
+ * OpenAPI 3.0 specs.
13
+ *
9
14
  * @param doc - OpenAPI document to transform
10
15
  * @returns Transformed OpenAPI document
11
16
  */
@@ -1 +1 @@
1
- {"version":3,"file":"openapi-transformer.d.ts","sourceRoot":"","sources":["../../src/openapi/openapi-transformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAmFjD;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAExF"}
1
+ {"version":3,"file":"openapi-transformer.d.ts","sourceRoot":"","sources":["../../src/openapi/openapi-transformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAmFjD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAExF"}
@@ -78,6 +78,11 @@ function transformNullable(schema) {
78
78
  * - Converts OpenAPI 3.0-style nullable syntax to OpenAPI 3.1.0 format
79
79
  * - Recursively processes all schemas in components, paths, and responses
80
80
  *
81
+ * **Note**: As of hono-openapi 1.x, this transformation is no longer needed for
82
+ * hono-openapi generated specs, as they already produce proper OpenAPI 3.1 format.
83
+ * This function is kept for backwards compatibility and for transforming external
84
+ * OpenAPI 3.0 specs.
85
+ *
81
86
  * @param doc - OpenAPI document to transform
82
87
  * @returns Transformed OpenAPI document
83
88
  */
@@ -1 +1 @@
1
- {"version":3,"file":"openapi-transformer.js","sourceRoot":"","sources":["../../src/openapi/openapi-transformer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openapi-transformer.js","sourceRoot":"","sources":["../../src/openapi/openapi-transformer.ts"],"names":[],"mappings":"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"}
@@ -104,6 +104,18 @@ export declare const defaultConfig: SerializationConfig;
104
104
  * ```
105
105
  */
106
106
  export declare function serializePrismaTypes<T>(data: T, config?: SerializationConfig, _depth?: number, _seen?: WeakSet<object>): SerializedTypes<T>;
107
+ /**
108
+ * Type representing Prisma's Decimal type structure.
109
+ * We use a structural type to avoid importing from @prisma/client.
110
+ * Prisma's Decimal has constructor.name as string (not literal 'Decimal'),
111
+ * so we match on the toNumber() method which is the key interface we need.
112
+ */
113
+ type PrismaDecimalLike = {
114
+ toNumber(): number;
115
+ constructor: {
116
+ name: string;
117
+ };
118
+ };
107
119
  /**
108
120
  * Reverse type helper that accepts both serialized types AND their Prisma equivalents.
109
121
  * This allows handlers to return Prisma objects directly while TypeScript knows they'll be serialized.
@@ -167,12 +179,8 @@ export declare function serializePrismaTypes<T>(data: T, config?: SerializationC
167
179
  * // Result: { createdAt: string | Date; amount: number | Decimal }
168
180
  * ```
169
181
  */
170
- export type AcceptPrismaTypes<T> = T extends string ? string | Date : T extends number ? number | {
171
- constructor: {
172
- name: 'Decimal';
173
- };
174
- toNumber(): number;
175
- } : T extends Array<infer U> ? Array<AcceptPrismaTypes<U>> : T extends object ? {
182
+ export type AcceptPrismaTypes<T> = T extends string ? string | Date : T extends number ? number | PrismaDecimalLike : T extends Array<infer U> ? Array<AcceptPrismaTypes<U>> : T extends object ? {
176
183
  [K in keyof T]: AcceptPrismaTypes<T[K]>;
177
184
  } : T;
185
+ export {};
178
186
  //# sourceMappingURL=serialize-prisma-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"serialize-prisma-types.d.ts","sourceRoot":"","sources":["../../src/utils/serialize-prisma-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,GAC3C,MAAM,GACN,CAAC,SAAS;IAAE,WAAW,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAA;CAAE,GAC5C,MAAM,GACN,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GACtB,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GACzB,CAAC,SAAS,MAAM,GACd;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GACzC,CAAC,CAAC;AAEZ;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,YAAY,EAAE,eAAe,EAAE,CAAC;CACjC;AAsCD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,aAAa,EAAE,mBAE3B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,IAAI,EAAE,CAAC,EACP,MAAM,GAAE,mBAAmC,EAC3C,MAAM,SAAI,EACV,KAAK,kBAAwB,GAC5B,eAAe,CAAC,CAAC,CAAC,CAqDpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GAC/C,MAAM,GAAG,IAAI,GACb,CAAC,SAAS,MAAM,GACd,MAAM,GAAG;IAAE,WAAW,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;IAAC,QAAQ,IAAI,MAAM,CAAA;CAAE,GACjE,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GACtB,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAC3B,CAAC,SAAS,MAAM,GACd;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GAC3C,CAAC,CAAC"}
1
+ {"version":3,"file":"serialize-prisma-types.d.ts","sourceRoot":"","sources":["../../src/utils/serialize-prisma-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,GAC3C,MAAM,GACN,CAAC,SAAS;IAAE,WAAW,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAA;CAAE,GAC5C,MAAM,GACN,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GACtB,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GACzB,CAAC,SAAS,MAAM,GACd;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GACzC,CAAC,CAAC;AAEZ;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,YAAY,EAAE,eAAe,EAAE,CAAC;CACjC;AAsCD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,aAAa,EAAE,mBAE3B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,IAAI,EAAE,CAAC,EACP,MAAM,GAAE,mBAAmC,EAC3C,MAAM,SAAI,EACV,KAAK,kBAAwB,GAC5B,eAAe,CAAC,CAAC,CAAC,CAqDpB;AAED;;;;;GAKG;AACH,KAAK,iBAAiB,GAAG;IACvB,QAAQ,IAAI,MAAM,CAAC;IACnB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GAC/C,MAAM,GAAG,IAAI,GACb,CAAC,SAAS,MAAM,GACd,MAAM,GAAG,iBAAiB,GAC1B,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GACtB,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAC3B,CAAC,SAAS,MAAM,GACd;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GAC3C,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "glasswork",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "A transparent, Lambda-optimized web framework for building OpenAPI-compliant REST APIs.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,61 +0,0 @@
1
- import type { Context, MiddlewareHandler } from 'hono';
2
- import type { AbilityConfig, BaseAbility } from './types.js';
3
- /**
4
- * Creates Hono middleware that attaches a CASL ability to the request context.
5
- *
6
- * This middleware is transparent - it exposes the CASL ability directly in the
7
- * Hono context, making it accessible to route handlers. All CASL features
8
- * remain available.
9
- *
10
- * @param config - Ability configuration with factory function
11
- * @returns Hono middleware that creates and attaches the ability
12
- *
13
- * @example
14
- * ```typescript
15
- * import { createPrismaAbility } from '@casl/prisma';
16
- * import { AbilityBuilder } from '@casl/ability';
17
- *
18
- * const abilityMiddleware = withAbility({
19
- * factory: (c) => {
20
- * const user = c.get('user');
21
- * const { can, build } = new AbilityBuilder(createPrismaAbility);
22
- *
23
- * if (user.role === 'admin') {
24
- * can('manage', 'all');
25
- * } else {
26
- * can('read', 'User', { id: user.id });
27
- * }
28
- *
29
- * return build();
30
- * }
31
- * });
32
- *
33
- * app.use('*', abilityMiddleware);
34
- * ```
35
- */
36
- export declare function withAbility<T extends BaseAbility = BaseAbility>(config: AbilityConfig<T>): MiddlewareHandler;
37
- /**
38
- * Helper to retrieve the ability from Hono context.
39
- * This provides type-safe access to the CASL ability stored by `withAbility`.
40
- *
41
- * @param context - Hono context
42
- * @param contextKey - The key used to store the ability (default: 'ability')
43
- * @returns The CASL ability instance
44
- * @throws Error if ability is not found in context
45
- *
46
- * @example
47
- * ```typescript
48
- * router.get('/users', async (c) => {
49
- * const ability = getAbility(c);
50
- *
51
- * // Use CASL ability directly
52
- * if (ability.can('read', 'User')) {
53
- * return c.json(users);
54
- * }
55
- *
56
- * return c.json({ error: 'Forbidden' }, 403);
57
- * });
58
- * ```
59
- */
60
- export declare function getAbility<T extends BaseAbility = BaseAbility>(context: Context, contextKey?: string): T;
61
- //# sourceMappingURL=ability-middleware.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ability-middleware.d.ts","sourceRoot":"","sources":["../../src/authorization/ability-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EAC7D,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,GACvB,iBAAiB,CAYnB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EAC5D,OAAO,EAAE,OAAO,EAChB,UAAU,SAAY,GACrB,CAAC,CAUH"}
@@ -1,74 +0,0 @@
1
- /**
2
- * Creates Hono middleware that attaches a CASL ability to the request context.
3
- *
4
- * This middleware is transparent - it exposes the CASL ability directly in the
5
- * Hono context, making it accessible to route handlers. All CASL features
6
- * remain available.
7
- *
8
- * @param config - Ability configuration with factory function
9
- * @returns Hono middleware that creates and attaches the ability
10
- *
11
- * @example
12
- * ```typescript
13
- * import { createPrismaAbility } from '@casl/prisma';
14
- * import { AbilityBuilder } from '@casl/ability';
15
- *
16
- * const abilityMiddleware = withAbility({
17
- * factory: (c) => {
18
- * const user = c.get('user');
19
- * const { can, build } = new AbilityBuilder(createPrismaAbility);
20
- *
21
- * if (user.role === 'admin') {
22
- * can('manage', 'all');
23
- * } else {
24
- * can('read', 'User', { id: user.id });
25
- * }
26
- *
27
- * return build();
28
- * }
29
- * });
30
- *
31
- * app.use('*', abilityMiddleware);
32
- * ```
33
- */
34
- export function withAbility(config) {
35
- const contextKey = config.contextKey || 'ability';
36
- return async (c, next) => {
37
- // Create ability using factory
38
- const ability = await config.factory(c);
39
- // Store in Hono context
40
- c.set(contextKey, ability);
41
- await next();
42
- };
43
- }
44
- /**
45
- * Helper to retrieve the ability from Hono context.
46
- * This provides type-safe access to the CASL ability stored by `withAbility`.
47
- *
48
- * @param context - Hono context
49
- * @param contextKey - The key used to store the ability (default: 'ability')
50
- * @returns The CASL ability instance
51
- * @throws Error if ability is not found in context
52
- *
53
- * @example
54
- * ```typescript
55
- * router.get('/users', async (c) => {
56
- * const ability = getAbility(c);
57
- *
58
- * // Use CASL ability directly
59
- * if (ability.can('read', 'User')) {
60
- * return c.json(users);
61
- * }
62
- *
63
- * return c.json({ error: 'Forbidden' }, 403);
64
- * });
65
- * ```
66
- */
67
- export function getAbility(context, contextKey = 'ability') {
68
- const ability = context.get(contextKey);
69
- if (!ability) {
70
- throw new Error(`Ability not found in context. Did you forget to use withAbility() middleware?`);
71
- }
72
- return ability;
73
- }
74
- //# sourceMappingURL=ability-middleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ability-middleware.js","sourceRoot":"","sources":["../../src/authorization/ability-middleware.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,WAAW,CACzB,MAAwB;IAExB,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,SAAS,CAAC;IAElD,OAAO,KAAK,EAAE,CAAU,EAAE,IAAI,EAAE,EAAE;QAChC,+BAA+B;QAC/B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAExC,wBAAwB;QACxB,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAE3B,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,UAAU,CACxB,OAAgB,EAChB,UAAU,GAAG,SAAS;IAEtB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAExC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;IACJ,CAAC;IAED,OAAO,OAAY,CAAC;AACtB,CAAC"}
@@ -1,46 +0,0 @@
1
- /**
2
- * Authorization module for integrating CASL with Glasswork.
3
- *
4
- * This module provides transparent integration with CASL while maintaining framework principles.
5
- *
6
- * ## Recommended Approach: Service Hooks
7
- *
8
- * Configure authorization globally using the hooks system:
9
- *
10
- * ```typescript
11
- * import { authorizationHook, defineServiceMetadata, defineAuthorize } from 'glasswork';
12
- *
13
- * const authServiceMeta = defineServiceMetadata({
14
- * deleteSession: { authorize: defineAuthorize('delete', 'Session') }
15
- * });
16
- *
17
- * bootstrap(AppModule, {
18
- * serviceHooks: [authorizationHook],
19
- * serviceMetadata: { authService: authServiceMeta }
20
- * });
21
- *
22
- * // In routes - authorization happens automatically!
23
- * await services.authService.deleteSession(token);
24
- * ```
25
- *
26
- * ## Alternative: Explicit Authorization
27
- *
28
- * For fine-grained control, use explicit authorize() calls:
29
- *
30
- * ```typescript
31
- * router.delete('/sessions/:id', async (c) => {
32
- * authorize(c, 'delete', 'Session', { id: c.req.param('id') });
33
- * await sessionService.delete(c.req.param('id'));
34
- * });
35
- * ```
36
- *
37
- * @module authorization
38
- * @see https://casl.js.org/ for CASL documentation
39
- * @see HOOKS_SYSTEM.md for hooks documentation
40
- */
41
- export type { PureAbility } from '@casl/ability';
42
- export { ForbiddenError, subject } from '@casl/ability';
43
- export { getAbility, withAbility } from './ability-middleware.js';
44
- export { accessibleWhere, authorize, can, cannot } from './route-helpers.js';
45
- export type { AbilityConfig, AbilityFactory, BaseAbility } from './types.js';
46
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/authorization/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAGH,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE7E,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
@@ -1,46 +0,0 @@
1
- /**
2
- * Authorization module for integrating CASL with Glasswork.
3
- *
4
- * This module provides transparent integration with CASL while maintaining framework principles.
5
- *
6
- * ## Recommended Approach: Service Hooks
7
- *
8
- * Configure authorization globally using the hooks system:
9
- *
10
- * ```typescript
11
- * import { authorizationHook, defineServiceMetadata, defineAuthorize } from 'glasswork';
12
- *
13
- * const authServiceMeta = defineServiceMetadata({
14
- * deleteSession: { authorize: defineAuthorize('delete', 'Session') }
15
- * });
16
- *
17
- * bootstrap(AppModule, {
18
- * serviceHooks: [authorizationHook],
19
- * serviceMetadata: { authService: authServiceMeta }
20
- * });
21
- *
22
- * // In routes - authorization happens automatically!
23
- * await services.authService.deleteSession(token);
24
- * ```
25
- *
26
- * ## Alternative: Explicit Authorization
27
- *
28
- * For fine-grained control, use explicit authorize() calls:
29
- *
30
- * ```typescript
31
- * router.delete('/sessions/:id', async (c) => {
32
- * authorize(c, 'delete', 'Session', { id: c.req.param('id') });
33
- * await sessionService.delete(c.req.param('id'));
34
- * });
35
- * ```
36
- *
37
- * @module authorization
38
- * @see https://casl.js.org/ for CASL documentation
39
- * @see HOOKS_SYSTEM.md for hooks documentation
40
- */
41
- export { ForbiddenError, subject } from '@casl/ability';
42
- // Ability middleware (attaches CASL abilities to context)
43
- export { getAbility, withAbility } from './ability-middleware.js';
44
- // Route helpers (explicit authorization - recommended for fine-grained control)
45
- export { accessibleWhere, authorize, can, cannot } from './route-helpers.js';
46
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/authorization/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAIH,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxD,0DAA0D;AAC1D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAClE,gFAAgF;AAChF,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1,106 +0,0 @@
1
- import type { Context } from 'hono';
2
- import type { BaseAbility } from './types.js';
3
- /**
4
- * Authorizes an action on a subject using the CASL ability from context.
5
- * Throws ForbiddenError if the action is not permitted.
6
- *
7
- * This is a thin wrapper around CASL's authorize functionality, exposing
8
- * the native CASL API while providing convenient access to the ability
9
- * stored in Hono context.
10
- *
11
- * @param context - Hono context containing the ability
12
- * @param action - CASL action (e.g., 'create', 'read', 'update', 'delete')
13
- * @param subjectType - Subject type string (e.g., 'User', 'Post')
14
- * @param subjectData - Optional subject instance data
15
- * @throws ForbiddenError from CASL if action is not permitted
16
- *
17
- * @example
18
- * ```typescript
19
- * router.delete('/sessions/:id', async (c) => {
20
- * const sessionId = c.req.param('id');
21
- * const user = c.get('user');
22
- *
23
- * // Explicit authorization - clear and obvious
24
- * authorize(c, 'delete', 'Session', { userId: user.id, sessionId });
25
- *
26
- * await sessionService.delete(sessionId);
27
- * return c.json({ success: true });
28
- * });
29
- * ```
30
- */
31
- export declare function authorize<T extends BaseAbility = BaseAbility>(context: Context, action: string, subjectType: string, subjectData?: object): void;
32
- /**
33
- * Checks if an action is permitted without throwing an error.
34
- * Returns boolean indicating if the action is allowed.
35
- *
36
- * @param context - Hono context containing the ability
37
- * @param action - CASL action
38
- * @param subjectType - Subject type string
39
- * @param subjectData - Optional subject instance data
40
- * @returns True if action is permitted, false otherwise
41
- *
42
- * @example
43
- * ```typescript
44
- * router.get('/users', async (c) => {
45
- * if (!can(c, 'read', 'User')) {
46
- * return c.json({ error: 'Forbidden' }, 403);
47
- * }
48
- *
49
- * const users = await userService.findAll();
50
- * return c.json(users);
51
- * });
52
- * ```
53
- */
54
- export declare function can<T extends BaseAbility = BaseAbility>(context: Context, action: string, subjectType: string, subjectData?: object): boolean;
55
- /**
56
- * Checks if an action is forbidden (opposite of can).
57
- *
58
- * @param context - Hono context containing the ability
59
- * @param action - CASL action
60
- * @param subjectType - Subject type string
61
- * @param subjectData - Optional subject instance data
62
- * @returns True if action is forbidden, false if permitted
63
- *
64
- * @example
65
- * ```typescript
66
- * router.post('/admin/users', async (c) => {
67
- * if (cannot(c, 'create', 'User')) {
68
- * return c.json({ error: 'Forbidden' }, 403);
69
- * }
70
- *
71
- * // ... create user
72
- * });
73
- * ```
74
- */
75
- export declare function cannot<T extends BaseAbility = BaseAbility>(context: Context, action: string, subjectType: string, subjectData?: object): boolean;
76
- /**
77
- * Creates a Prisma where clause using CASL's accessibleBy helper.
78
- * This is a transparent wrapper that exposes @casl/prisma functionality.
79
- *
80
- * Requires @casl/prisma to be installed as a peer dependency.
81
- *
82
- * @param context - Hono context containing the ability
83
- * @param subjectType - Prisma model name (e.g., 'User', 'Post')
84
- * @param additionalWhere - Optional additional where conditions to combine
85
- * @returns Prisma where clause that filters by ability permissions
86
- *
87
- * @example
88
- * ```typescript
89
- * import { accessibleBy } from '@casl/prisma';
90
- *
91
- * router.get('/posts', async (c) => {
92
- * const ability = getAbility(c);
93
- *
94
- * // Use CASL Prisma integration directly
95
- * const posts = await prisma.post.findMany({
96
- * where: accessibleBy(ability).Post
97
- * });
98
- *
99
- * return c.json(posts);
100
- * });
101
- * ```
102
- *
103
- * @see https://casl.js.org/v6/en/package/casl-prisma
104
- */
105
- export declare function accessibleWhere<T extends BaseAbility = BaseAbility>(context: Context, subjectType: string, additionalWhere?: object): object;
106
- //# sourceMappingURL=route-helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"route-helpers.d.ts","sourceRoot":"","sources":["../../src/authorization/route-helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EAC3D,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,IAAI,CAUN;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EACrD,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAKT;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EACxD,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAET;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EACjE,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,MAAM,EACnB,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,CAuBR"}
@@ -1,136 +0,0 @@
1
- import { ForbiddenError, subject } from '@casl/ability';
2
- import { getAbility } from './ability-middleware.js';
3
- /**
4
- * Authorizes an action on a subject using the CASL ability from context.
5
- * Throws ForbiddenError if the action is not permitted.
6
- *
7
- * This is a thin wrapper around CASL's authorize functionality, exposing
8
- * the native CASL API while providing convenient access to the ability
9
- * stored in Hono context.
10
- *
11
- * @param context - Hono context containing the ability
12
- * @param action - CASL action (e.g., 'create', 'read', 'update', 'delete')
13
- * @param subjectType - Subject type string (e.g., 'User', 'Post')
14
- * @param subjectData - Optional subject instance data
15
- * @throws ForbiddenError from CASL if action is not permitted
16
- *
17
- * @example
18
- * ```typescript
19
- * router.delete('/sessions/:id', async (c) => {
20
- * const sessionId = c.req.param('id');
21
- * const user = c.get('user');
22
- *
23
- * // Explicit authorization - clear and obvious
24
- * authorize(c, 'delete', 'Session', { userId: user.id, sessionId });
25
- *
26
- * await sessionService.delete(sessionId);
27
- * return c.json({ success: true });
28
- * });
29
- * ```
30
- */
31
- export function authorize(context, action, subjectType, subjectData) {
32
- const ability = getAbility(context);
33
- // Use CASL's native ForbiddenError.from() pattern
34
- // This exposes CASL API directly - no wrapper
35
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
36
- ForbiddenError.from(ability).throwUnlessCan(action, subject(subjectType, subjectData || {}));
37
- }
38
- /**
39
- * Checks if an action is permitted without throwing an error.
40
- * Returns boolean indicating if the action is allowed.
41
- *
42
- * @param context - Hono context containing the ability
43
- * @param action - CASL action
44
- * @param subjectType - Subject type string
45
- * @param subjectData - Optional subject instance data
46
- * @returns True if action is permitted, false otherwise
47
- *
48
- * @example
49
- * ```typescript
50
- * router.get('/users', async (c) => {
51
- * if (!can(c, 'read', 'User')) {
52
- * return c.json({ error: 'Forbidden' }, 403);
53
- * }
54
- *
55
- * const users = await userService.findAll();
56
- * return c.json(users);
57
- * });
58
- * ```
59
- */
60
- export function can(context, action, subjectType, subjectData) {
61
- const ability = getAbility(context);
62
- // Use CASL's native can() method directly
63
- return ability.can(action, subject(subjectType, subjectData || {}));
64
- }
65
- /**
66
- * Checks if an action is forbidden (opposite of can).
67
- *
68
- * @param context - Hono context containing the ability
69
- * @param action - CASL action
70
- * @param subjectType - Subject type string
71
- * @param subjectData - Optional subject instance data
72
- * @returns True if action is forbidden, false if permitted
73
- *
74
- * @example
75
- * ```typescript
76
- * router.post('/admin/users', async (c) => {
77
- * if (cannot(c, 'create', 'User')) {
78
- * return c.json({ error: 'Forbidden' }, 403);
79
- * }
80
- *
81
- * // ... create user
82
- * });
83
- * ```
84
- */
85
- export function cannot(context, action, subjectType, subjectData) {
86
- return !can(context, action, subjectType, subjectData);
87
- }
88
- /**
89
- * Creates a Prisma where clause using CASL's accessibleBy helper.
90
- * This is a transparent wrapper that exposes @casl/prisma functionality.
91
- *
92
- * Requires @casl/prisma to be installed as a peer dependency.
93
- *
94
- * @param context - Hono context containing the ability
95
- * @param subjectType - Prisma model name (e.g., 'User', 'Post')
96
- * @param additionalWhere - Optional additional where conditions to combine
97
- * @returns Prisma where clause that filters by ability permissions
98
- *
99
- * @example
100
- * ```typescript
101
- * import { accessibleBy } from '@casl/prisma';
102
- *
103
- * router.get('/posts', async (c) => {
104
- * const ability = getAbility(c);
105
- *
106
- * // Use CASL Prisma integration directly
107
- * const posts = await prisma.post.findMany({
108
- * where: accessibleBy(ability).Post
109
- * });
110
- *
111
- * return c.json(posts);
112
- * });
113
- * ```
114
- *
115
- * @see https://casl.js.org/v6/en/package/casl-prisma
116
- */
117
- export function accessibleWhere(context, subjectType, additionalWhere) {
118
- const ability = getAbility(context);
119
- // Use CASL Prisma's accessibleBy directly
120
- // Import is done dynamically to avoid hard dependency
121
- try {
122
- // eslint-disable-next-line @typescript-eslint/no-var-requires
123
- const { accessibleBy } = require('@casl/prisma');
124
- const abilityWhere = accessibleBy(ability)[subjectType];
125
- if (additionalWhere) {
126
- return {
127
- AND: [abilityWhere, additionalWhere].filter(Boolean),
128
- };
129
- }
130
- return abilityWhere;
131
- }
132
- catch {
133
- throw new Error('@casl/prisma is required for accessibleWhere(). Install it with: npm install @casl/prisma');
134
- }
135
- }
136
- //# sourceMappingURL=route-helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"route-helpers.js","sourceRoot":"","sources":["../../src/authorization/route-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,SAAS,CACvB,OAAgB,EAChB,MAAc,EACd,WAAmB,EACnB,WAAoB;IAEpB,MAAM,OAAO,GAAG,UAAU,CAAI,OAAO,CAAC,CAAC;IAEvC,kDAAkD;IAClD,8CAA8C;IAC9C,8DAA8D;IAC7D,cAAc,CAAC,IAAI,CAAC,OAAO,CAAS,CAAC,cAAc,CAClD,MAAM,EACN,OAAO,CAAC,WAAW,EAAE,WAAW,IAAI,EAAE,CAAC,CACxC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,GAAG,CACjB,OAAgB,EAChB,MAAc,EACd,WAAmB,EACnB,WAAoB;IAEpB,MAAM,OAAO,GAAG,UAAU,CAAI,OAAO,CAAC,CAAC;IAEvC,0CAA0C;IAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;AACtE,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,MAAM,CACpB,OAAgB,EAChB,MAAc,EACd,WAAmB,EACnB,WAAoB;IAEpB,OAAO,CAAC,GAAG,CAAI,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAgB,EAChB,WAAmB,EACnB,eAAwB;IAExB,MAAM,OAAO,GAAG,UAAU,CAAI,OAAO,CAAC,CAAC;IAEvC,0CAA0C;IAC1C,sDAAsD;IACtD,IAAI,CAAC;QACH,8DAA8D;QAC9D,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;QAEjD,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC;QAExD,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO;gBACL,GAAG,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;aACrD,CAAC;QACJ,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,2FAA2F,CAC5F,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1,59 +0,0 @@
1
- import type { AuthorizedServiceOptions, BaseAbility, ServiceAuthMetadata } from './types.js';
2
- /**
3
- * Creates a transparent proxy around a service that automatically
4
- * checks CASL permissions before executing methods.
5
- *
6
- * **⚠️ DEPRECATED: Use the hooks system instead!**
7
- *
8
- * This function is deprecated in favor of the more flexible hooks system.
9
- * Instead of manually wrapping services, configure authorization globally:
10
- *
11
- * ```typescript
12
- * // NEW APPROACH (Recommended):
13
- * import { authorizationHook, defineServiceMetadata, defineAuthorize } from 'glasswork';
14
- *
15
- * const authServiceMeta = defineServiceMetadata({
16
- * deleteSession: {
17
- * authorize: defineAuthorize('delete', 'Session')
18
- * }
19
- * });
20
- *
21
- * bootstrap(AppModule, {
22
- * serviceHooks: [authorizationHook],
23
- * serviceMetadata: { authService: authServiceMeta }
24
- * });
25
- *
26
- * // In routes - services are automatically authorized!
27
- * await services.authService.deleteSession(token);
28
- * ```
29
- *
30
- * @deprecated Use hooks system with authorizationHook instead
31
- * @see {@link https://github.com/rolandboon/glasswork/blob/main/HOOKS_SYSTEM.md}
32
- *
33
- * @param service - The service instance to wrap
34
- * @param options - Authorization configuration
35
- * @returns Proxied service with automatic authorization
36
- */
37
- export declare function withAuthorization<T extends object>(service: T, options: AuthorizedServiceOptions): T;
38
- /**
39
- * Helper to define service authorization metadata.
40
- *
41
- * **⚠️ DEPRECATED: Use `defineServiceMetadata` and `defineAuthorize` from hooks system instead!**
42
- *
43
- * @deprecated Use `defineServiceMetadata` with `defineAuthorize` from hooks module
44
- * @param metadata - Service authorization metadata
45
- * @returns The same metadata (identity function)
46
- */
47
- export declare function defineServiceAuth(metadata: ServiceAuthMetadata): ServiceAuthMetadata;
48
- /**
49
- * Creates a factory function that wraps services with authorization.
50
- *
51
- * **⚠️ DEPRECATED: Use hooks system configured in bootstrap instead!**
52
- *
53
- * @deprecated Configure authorization globally with serviceHooks in bootstrap
54
- * @param ability - The CASL ability to use
55
- * @param metadataMap - Map of service names to their authorization metadata
56
- * @returns Function that wraps services with authorization
57
- */
58
- export declare function createServiceWrapper<T extends BaseAbility = BaseAbility>(ability: T, metadataMap: Record<string, ServiceAuthMetadata>): <S extends object>(serviceName: string, service: S) => S;
59
- //# sourceMappingURL=service-proxy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service-proxy.d.ts","sourceRoot":"","sources":["../../src/authorization/service-proxy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE7F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAChD,OAAO,EAAE,CAAC,EACV,OAAO,EAAE,wBAAwB,GAChC,CAAC,CAmDH;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,mBAAmB,CAEpF;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EACtE,OAAO,EAAE,CAAC,EACV,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAC/C,CAAC,CAAC,SAAS,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,CAW1D"}