glasswork 0.13.3 → 1.0.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 (229) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +6 -2
  3. package/dist/auth/abilities.d.ts +9 -6
  4. package/dist/auth/abilities.d.ts.map +1 -1
  5. package/dist/auth/abilities.js +15 -19
  6. package/dist/auth/abilities.js.map +1 -1
  7. package/dist/auth/assert.d.ts +3 -3
  8. package/dist/auth/assert.d.ts.map +1 -1
  9. package/dist/auth/casl-bridge.d.ts +19 -0
  10. package/dist/auth/casl-bridge.d.ts.map +1 -0
  11. package/dist/auth/casl-bridge.js +29 -0
  12. package/dist/auth/casl-bridge.js.map +1 -0
  13. package/dist/auth/index.d.ts +1 -0
  14. package/dist/auth/index.d.ts.map +1 -1
  15. package/dist/auth/index.js +1 -0
  16. package/dist/auth/index.js.map +1 -1
  17. package/dist/auth/middleware.d.ts +3 -3
  18. package/dist/auth/middleware.d.ts.map +1 -1
  19. package/dist/auth/middleware.js +2 -2
  20. package/dist/auth/middleware.js.map +1 -1
  21. package/dist/auth/types.d.ts +2 -2
  22. package/dist/auth/types.d.ts.map +1 -1
  23. package/dist/config/index.d.ts +1 -1
  24. package/dist/config/index.js +1 -1
  25. package/dist/core/bootstrap.d.ts +0 -17
  26. package/dist/core/bootstrap.d.ts.map +1 -1
  27. package/dist/core/bootstrap.js +4 -240
  28. package/dist/core/bootstrap.js.map +1 -1
  29. package/dist/core/index.d.ts +19 -0
  30. package/dist/core/index.d.ts.map +1 -0
  31. package/dist/core/index.js +15 -0
  32. package/dist/core/index.js.map +1 -0
  33. package/dist/core/lifecycle.d.ts +7 -0
  34. package/dist/core/lifecycle.d.ts.map +1 -0
  35. package/dist/core/lifecycle.js +28 -0
  36. package/dist/core/lifecycle.js.map +1 -0
  37. package/dist/core/module-graph.d.ts +21 -0
  38. package/dist/core/module-graph.d.ts.map +1 -0
  39. package/dist/core/module-graph.js +169 -0
  40. package/dist/core/module-graph.js.map +1 -0
  41. package/dist/core/route-factory.d.ts +20 -0
  42. package/dist/core/route-factory.d.ts.map +1 -0
  43. package/dist/core/route-factory.js +2 -0
  44. package/dist/core/route-factory.js.map +1 -0
  45. package/dist/core/types.d.ts +4 -14
  46. package/dist/core/types.d.ts.map +1 -1
  47. package/dist/email/compiler/compile-templates.d.ts +3 -8
  48. package/dist/email/compiler/compile-templates.d.ts.map +1 -1
  49. package/dist/email/compiler/compile-templates.js +3 -3
  50. package/dist/email/compiler/compile-templates.js.map +1 -1
  51. package/dist/email/compiler/compiler.d.ts +5 -2
  52. package/dist/email/compiler/compiler.d.ts.map +1 -1
  53. package/dist/email/compiler/compiler.js +2 -21
  54. package/dist/email/compiler/compiler.js.map +1 -1
  55. package/dist/email/transports/ses-transport.d.ts.map +1 -1
  56. package/dist/email/transports/ses-transport.js +11 -18
  57. package/dist/email/transports/ses-transport.js.map +1 -1
  58. package/dist/email/webhooks/handler-factory.d.ts +1 -1
  59. package/dist/email/webhooks/handler-factory.js +1 -1
  60. package/dist/email/webhooks/notification-parser.d.ts +1 -1
  61. package/dist/email/webhooks/notification-parser.js +1 -1
  62. package/dist/email/webhooks/signature-verification.d.ts +1 -1
  63. package/dist/email/webhooks/signature-verification.js +1 -1
  64. package/dist/email/webhooks/subscription-handler.d.ts +1 -1
  65. package/dist/email/webhooks/subscription-handler.js +1 -1
  66. package/dist/hono-context.d.ts +13 -0
  67. package/dist/hono-context.d.ts.map +1 -0
  68. package/dist/hono-context.js +2 -0
  69. package/dist/hono-context.js.map +1 -0
  70. package/dist/http/index.d.ts +18 -0
  71. package/dist/http/index.d.ts.map +1 -0
  72. package/dist/http/index.js +15 -0
  73. package/dist/http/index.js.map +1 -0
  74. package/dist/http/route-authorization.d.ts +9 -0
  75. package/dist/http/route-authorization.d.ts.map +1 -0
  76. package/dist/http/route-authorization.js +19 -0
  77. package/dist/http/route-authorization.js.map +1 -0
  78. package/dist/http/route-context.d.ts +8 -0
  79. package/dist/http/route-context.d.ts.map +1 -0
  80. package/dist/http/route-context.js +26 -0
  81. package/dist/http/route-context.js.map +1 -0
  82. package/dist/http/route-helpers.d.ts +6 -419
  83. package/dist/http/route-helpers.d.ts.map +1 -1
  84. package/dist/http/route-helpers.js +7 -462
  85. package/dist/http/route-helpers.js.map +1 -1
  86. package/dist/http/route-openapi-context.d.ts +27 -0
  87. package/dist/http/route-openapi-context.d.ts.map +1 -0
  88. package/dist/http/route-openapi-context.js +16 -0
  89. package/dist/http/route-openapi-context.js.map +1 -0
  90. package/dist/http/route-openapi.d.ts +5 -0
  91. package/dist/http/route-openapi.d.ts.map +1 -0
  92. package/dist/http/route-openapi.js +112 -0
  93. package/dist/http/route-openapi.js.map +1 -0
  94. package/dist/http/route-response.d.ts +5 -0
  95. package/dist/http/route-response.d.ts.map +1 -0
  96. package/dist/http/route-response.js +78 -0
  97. package/dist/http/route-response.js.map +1 -0
  98. package/dist/http/route-types.d.ts +93 -0
  99. package/dist/http/route-types.d.ts.map +1 -0
  100. package/dist/http/route-types.js +22 -0
  101. package/dist/http/route-types.js.map +1 -0
  102. package/dist/http/route-validation.d.ts +11 -0
  103. package/dist/http/route-validation.d.ts.map +1 -0
  104. package/dist/http/route-validation.js +24 -0
  105. package/dist/http/route-validation.js.map +1 -0
  106. package/dist/index.d.ts +7 -45
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +5 -65
  109. package/dist/index.js.map +1 -1
  110. package/dist/jobs/drivers/eventbridge-scheduler-driver.d.ts.map +1 -1
  111. package/dist/jobs/drivers/eventbridge-scheduler-driver.js +1 -3
  112. package/dist/jobs/drivers/eventbridge-scheduler-driver.js.map +1 -1
  113. package/dist/jobs/drivers/sqs-driver.d.ts +1 -1
  114. package/dist/jobs/drivers/sqs-driver.d.ts.map +1 -1
  115. package/dist/jobs/drivers/sqs-driver.js +1 -3
  116. package/dist/jobs/drivers/sqs-driver.js.map +1 -1
  117. package/dist/jobs/worker.d.ts.map +1 -1
  118. package/dist/jobs/worker.js +3 -14
  119. package/dist/jobs/worker.js.map +1 -1
  120. package/dist/list-query/builder.d.ts +26 -5
  121. package/dist/list-query/builder.d.ts.map +1 -1
  122. package/dist/list-query/builder.js +18 -10
  123. package/dist/list-query/builder.js.map +1 -1
  124. package/dist/list-query/casl.d.ts +20 -4
  125. package/dist/list-query/casl.d.ts.map +1 -1
  126. package/dist/list-query/casl.js +3 -12
  127. package/dist/list-query/casl.js.map +1 -1
  128. package/dist/list-query/filter-value-schemas.d.ts +16 -0
  129. package/dist/list-query/filter-value-schemas.d.ts.map +1 -0
  130. package/dist/list-query/filter-value-schemas.js +46 -0
  131. package/dist/list-query/filter-value-schemas.js.map +1 -0
  132. package/dist/list-query/index.d.ts +7 -1
  133. package/dist/list-query/index.d.ts.map +1 -1
  134. package/dist/list-query/index.js +6 -2
  135. package/dist/list-query/index.js.map +1 -1
  136. package/dist/list-query/list-params.d.ts +17 -0
  137. package/dist/list-query/list-params.d.ts.map +1 -0
  138. package/dist/list-query/list-params.js +2 -0
  139. package/dist/list-query/list-params.js.map +1 -0
  140. package/dist/list-query/parse-filter-values.d.ts +21 -0
  141. package/dist/list-query/parse-filter-values.d.ts.map +1 -0
  142. package/dist/list-query/parse-filter-values.js +177 -0
  143. package/dist/list-query/parse-filter-values.js.map +1 -0
  144. package/dist/list-query/prisma-builder.d.ts.map +1 -1
  145. package/dist/list-query/prisma-builder.js +3 -50
  146. package/dist/list-query/prisma-builder.js.map +1 -1
  147. package/dist/list-query/prisma-executor.d.ts +63 -0
  148. package/dist/list-query/prisma-executor.d.ts.map +1 -0
  149. package/dist/list-query/prisma-executor.js +88 -0
  150. package/dist/list-query/prisma-executor.js.map +1 -0
  151. package/dist/list-query/schema-helpers.d.ts +37 -17
  152. package/dist/list-query/schema-helpers.d.ts.map +1 -1
  153. package/dist/list-query/schema-helpers.js +87 -24
  154. package/dist/list-query/schema-helpers.js.map +1 -1
  155. package/dist/list-query/sort-field-types.d.ts +21 -0
  156. package/dist/list-query/sort-field-types.d.ts.map +1 -0
  157. package/dist/list-query/sort-field-types.js +2 -0
  158. package/dist/list-query/sort-field-types.js.map +1 -0
  159. package/dist/list-query/unrestricted-schemas.d.ts +13 -0
  160. package/dist/list-query/unrestricted-schemas.d.ts.map +1 -0
  161. package/dist/list-query/unrestricted-schemas.js +9 -0
  162. package/dist/list-query/unrestricted-schemas.js.map +1 -0
  163. package/dist/list-query/validator.d.ts +2 -2
  164. package/dist/list-query/validator.d.ts.map +1 -1
  165. package/dist/observability/exception-tracking.d.ts +5 -4
  166. package/dist/observability/exception-tracking.d.ts.map +1 -1
  167. package/dist/observability/exception-tracking.js +4 -3
  168. package/dist/observability/exception-tracking.js.map +1 -1
  169. package/dist/observability/index.d.ts +8 -0
  170. package/dist/observability/index.d.ts.map +1 -0
  171. package/dist/observability/index.js +8 -0
  172. package/dist/observability/index.js.map +1 -0
  173. package/dist/observability/pino-logger.d.ts +3 -3
  174. package/dist/observability/pino-logger.js +3 -3
  175. package/dist/observability/request-context.d.ts +4 -4
  176. package/dist/observability/request-context.js +4 -4
  177. package/package.json +93 -53
  178. package/dist/authorization/ability-middleware.d.ts +0 -61
  179. package/dist/authorization/ability-middleware.d.ts.map +0 -1
  180. package/dist/authorization/ability-middleware.js +0 -74
  181. package/dist/authorization/ability-middleware.js.map +0 -1
  182. package/dist/authorization/index.d.ts +0 -46
  183. package/dist/authorization/index.d.ts.map +0 -1
  184. package/dist/authorization/index.js +0 -46
  185. package/dist/authorization/index.js.map +0 -1
  186. package/dist/authorization/route-helpers.d.ts +0 -106
  187. package/dist/authorization/route-helpers.d.ts.map +0 -1
  188. package/dist/authorization/route-helpers.js +0 -136
  189. package/dist/authorization/route-helpers.js.map +0 -1
  190. package/dist/authorization/service-proxy.d.ts +0 -59
  191. package/dist/authorization/service-proxy.d.ts.map +0 -1
  192. package/dist/authorization/service-proxy.js +0 -110
  193. package/dist/authorization/service-proxy.js.map +0 -1
  194. package/dist/authorization/types.d.ts +0 -58
  195. package/dist/authorization/types.d.ts.map +0 -1
  196. package/dist/authorization/types.js +0 -7
  197. package/dist/authorization/types.js.map +0 -1
  198. package/dist/hooks/authorization-hook.d.ts +0 -100
  199. package/dist/hooks/authorization-hook.d.ts.map +0 -1
  200. package/dist/hooks/authorization-hook.js +0 -93
  201. package/dist/hooks/authorization-hook.js.map +0 -1
  202. package/dist/hooks/index.d.ts +0 -54
  203. package/dist/hooks/index.d.ts.map +0 -1
  204. package/dist/hooks/index.js +0 -55
  205. package/dist/hooks/index.js.map +0 -1
  206. package/dist/hooks/service-hooks.d.ts +0 -82
  207. package/dist/hooks/service-hooks.d.ts.map +0 -1
  208. package/dist/hooks/service-hooks.js +0 -158
  209. package/dist/hooks/service-hooks.js.map +0 -1
  210. package/dist/hooks/types.d.ts +0 -151
  211. package/dist/hooks/types.d.ts.map +0 -1
  212. package/dist/hooks/types.js +0 -2
  213. package/dist/hooks/types.js.map +0 -1
  214. package/dist/openapi/hooks.d.ts +0 -14
  215. package/dist/openapi/hooks.d.ts.map +0 -1
  216. package/dist/openapi/hooks.js +0 -83
  217. package/dist/openapi/hooks.js.map +0 -1
  218. package/dist/openapi/openapi-transformer.d.ts +0 -13
  219. package/dist/openapi/openapi-transformer.d.ts.map +0 -1
  220. package/dist/openapi/openapi-transformer.js +0 -87
  221. package/dist/openapi/openapi-transformer.js.map +0 -1
  222. package/dist/utils/pagination.d.ts +0 -48
  223. package/dist/utils/pagination.d.ts.map +0 -1
  224. package/dist/utils/pagination.js +0 -42
  225. package/dist/utils/pagination.js.map +0 -1
  226. package/dist/utils/serialize-dates.d.ts +0 -27
  227. package/dist/utils/serialize-dates.d.ts.map +0 -1
  228. package/dist/utils/serialize-dates.js +0 -39
  229. package/dist/utils/serialize-dates.js.map +0 -1
@@ -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"}
@@ -1,110 +0,0 @@
1
- import { ForbiddenError, subject } from '@casl/ability';
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 function withAuthorization(service, options) {
38
- const { ability, metadata, onUnauthorized } = options;
39
- return new Proxy(service, {
40
- get(target, prop) {
41
- // Only intercept function calls
42
- if (typeof prop !== 'string') {
43
- return Reflect.get(target, prop);
44
- }
45
- const originalMethod = Reflect.get(target, prop);
46
- // If it's not a function, return as-is
47
- if (typeof originalMethod !== 'function') {
48
- return originalMethod;
49
- }
50
- // Check if this method has authorization metadata
51
- const authMeta = metadata[prop];
52
- // If no metadata, return original method (no authorization)
53
- if (!authMeta) {
54
- return originalMethod.bind(target);
55
- }
56
- // Return wrapped method with authorization
57
- return function (...args) {
58
- const { action, subject: subjectType, getSubject } = authMeta;
59
- // Get subject data if extractor provided
60
- const subjectData = getSubject ? getSubject(...args) : undefined;
61
- // Check authorization using CASL
62
- try {
63
- ForbiddenError.from(ability).throwUnlessCan(action, subject(subjectType, subjectData || {}));
64
- }
65
- catch (error) {
66
- if (onUnauthorized) {
67
- onUnauthorized(prop, args);
68
- throw error; // Still throw after custom handler
69
- }
70
- throw error;
71
- }
72
- // Authorization passed - execute original method
73
- return originalMethod.apply(target, args);
74
- };
75
- },
76
- });
77
- }
78
- /**
79
- * Helper to define service authorization metadata.
80
- *
81
- * **⚠️ DEPRECATED: Use `defineServiceMetadata` and `defineAuthorize` from hooks system instead!**
82
- *
83
- * @deprecated Use `defineServiceMetadata` with `defineAuthorize` from hooks module
84
- * @param metadata - Service authorization metadata
85
- * @returns The same metadata (identity function)
86
- */
87
- export function defineServiceAuth(metadata) {
88
- return metadata;
89
- }
90
- /**
91
- * Creates a factory function that wraps services with authorization.
92
- *
93
- * **⚠️ DEPRECATED: Use hooks system configured in bootstrap instead!**
94
- *
95
- * @deprecated Configure authorization globally with serviceHooks in bootstrap
96
- * @param ability - The CASL ability to use
97
- * @param metadataMap - Map of service names to their authorization metadata
98
- * @returns Function that wraps services with authorization
99
- */
100
- export function createServiceWrapper(ability, metadataMap) {
101
- return (serviceName, service) => {
102
- const metadata = metadataMap[serviceName];
103
- if (!metadata) {
104
- // No metadata, return unwrapped service
105
- return service;
106
- }
107
- return withAuthorization(service, { ability, metadata });
108
- };
109
- }
110
- //# sourceMappingURL=service-proxy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service-proxy.js","sourceRoot":"","sources":["../../src/authorization/service-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAU,EACV,OAAiC;IAEjC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAEtD,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;QACxB,GAAG,CAAC,MAAM,EAAE,IAAqB;YAC/B,gCAAgC;YAChC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACnC,CAAC;YAED,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAEjD,uCAAuC;YACvC,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE,CAAC;gBACzC,OAAO,cAAc,CAAC;YACxB,CAAC;YAED,kDAAkD;YAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;YAEhC,4DAA4D;YAC5D,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC;YAED,2CAA2C;YAC3C,OAAO,UAAyB,GAAG,IAAe;gBAChD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC;gBAE9D,yCAAyC;gBACzC,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAEjE,iCAAiC;gBACjC,IAAI,CAAC;oBACH,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,cAAc,CACzC,MAAM,EACN,OAAO,CAAC,WAAW,EAAE,WAAW,IAAI,EAAE,CAAC,CACxC,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,cAAc,EAAE,CAAC;wBACnB,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;wBAC3B,MAAM,KAAK,CAAC,CAAC,mCAAmC;oBAClD,CAAC;oBACD,MAAM,KAAK,CAAC;gBACd,CAAC;gBAED,iDAAiD;gBACjD,OAAO,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC5C,CAAC,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAA6B;IAC7D,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAU,EACV,WAAgD;IAEhD,OAAO,CAAmB,WAAmB,EAAE,OAAU,EAAK,EAAE;QAC9D,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;QAE1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,wCAAwC;YACxC,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,OAAO,iBAAiB,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC;AACJ,CAAC"}
@@ -1,58 +0,0 @@
1
- /**
2
- * Authorization types for CASL integration.
3
- *
4
- * This file contains core types for ability configuration and middleware.
5
- */
6
- import type { PureAbility } from '@casl/ability';
7
- import type { Context } from 'hono';
8
- /**
9
- * Base CASL ability type that applications can extend.
10
- * This type is re-exported from @casl/ability to maintain transparency.
11
- *
12
- * @example
13
- * ```typescript
14
- * import { createPrismaAbility } from '@casl/prisma';
15
- * import { AbilityBuilder } from '@casl/ability';
16
- *
17
- * type AppAbility = PureAbility<[Action, Subject]>;
18
- *
19
- * function defineAbility() {
20
- * const { can, build } = new AbilityBuilder<AppAbility>(createPrismaAbility);
21
- * can('read', 'User');
22
- * return build();
23
- * }
24
- * ```
25
- */
26
- export type BaseAbility = PureAbility<[string, string | object]>;
27
- /**
28
- * Factory function that creates an ability based on user context.
29
- * This function receives the full Hono context, allowing access to
30
- * user data, request information, etc.
31
- *
32
- * @example
33
- * ```typescript
34
- * const abilityFactory: AbilityFactory<AppAbility> = (c) => {
35
- * const user = c.get('user');
36
- * if (user.role === 'admin') {
37
- * return new AdminAbility();
38
- * }
39
- * return new UserAbility(user);
40
- * };
41
- * ```
42
- */
43
- export type AbilityFactory<T extends BaseAbility = BaseAbility> = (context: Context) => T | Promise<T>;
44
- /**
45
- * Configuration for ability-based authorization in routes.
46
- */
47
- export interface AbilityConfig<T extends BaseAbility = BaseAbility> {
48
- /**
49
- * Factory function to create the ability from request context.
50
- */
51
- factory: AbilityFactory<T>;
52
- /**
53
- * Optional key to store the ability in context variables.
54
- * @default 'ability'
55
- */
56
- contextKey?: string;
57
- }
58
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/authorization/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;AAEjE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,IAAI,CAChE,OAAO,EAAE,OAAO,KACb,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IAChE;;OAEG;IACH,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAE3B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Authorization types for CASL integration.
3
- *
4
- * This file contains core types for ability configuration and middleware.
5
- */
6
- export {};
7
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/authorization/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -1,100 +0,0 @@
1
- import type { ServiceHook } from './types.js';
2
- /**
3
- * Authorization metadata for a service method.
4
- * Defines what CASL action/subject to check before the method executes.
5
- */
6
- export interface AuthorizationMetadata {
7
- /**
8
- * CASL action (e.g., 'create', 'read', 'update', 'delete')
9
- */
10
- action: string;
11
- /**
12
- * CASL subject type (e.g., 'User', 'Post', 'Session')
13
- */
14
- subject: string;
15
- /**
16
- * Optional function to extract subject data from method arguments.
17
- * Used for field-level and instance-level authorization.
18
- *
19
- * @param args - The arguments passed to the service method
20
- * @returns The subject data to check against CASL rules
21
- *
22
- * @example
23
- * ```typescript
24
- * getSubjectData: (userId, updates) => ({ id: userId, ...updates })
25
- * ```
26
- */
27
- getSubjectData?: (...args: unknown[]) => object | undefined;
28
- }
29
- /**
30
- * Service hook that performs CASL authorization before method execution.
31
- *
32
- * This hook checks for `authorize` metadata on service methods and calls
33
- * the CASL `authorize()` function before allowing the method to execute.
34
- *
35
- * **Usage:**
36
- * 1. Define authorization metadata for your service methods
37
- * 2. Include this hook when wrapping services
38
- * 3. Ensure ability middleware is configured in your routes
39
- *
40
- * @example
41
- * ```typescript
42
- * import { authorizationHook, defineServiceMetadata } from 'glasswork';
43
- *
44
- * // Define metadata
45
- * export const authServiceMetadata = defineServiceMetadata({
46
- * deleteSession: {
47
- * authorize: {
48
- * action: 'delete',
49
- * subject: 'Session'
50
- * }
51
- * },
52
- * updateUser: {
53
- * authorize: {
54
- * action: 'update',
55
- * subject: 'User',
56
- * getSubjectData: (userId, data) => ({ id: userId, ...data })
57
- * }
58
- * }
59
- * });
60
- *
61
- * // Use in routes
62
- * router.delete('/session', async (c) => {
63
- * const services = withServiceHooks(
64
- * { authService },
65
- * {
66
- * hooks: [authorizationHook],
67
- * metadata: authServiceMetadata
68
- * },
69
- * c
70
- * );
71
- *
72
- * // This automatically checks authorization before executing
73
- * await services.authService.deleteSession(token);
74
- * });
75
- * ```
76
- */
77
- export declare const authorizationHook: ServiceHook;
78
- /**
79
- * Helper to define authorization metadata for service methods.
80
- * Provides better type inference for the authorize property.
81
- *
82
- * @param action - CASL action
83
- * @param subject - CASL subject type
84
- * @param getSubjectData - Optional function to extract subject data
85
- * @returns Authorization metadata object
86
- *
87
- * @example
88
- * ```typescript
89
- * export const userServiceMetadata = defineServiceMetadata({
90
- * update: {
91
- * authorize: defineAuthorize('update', 'User', (id, data) => ({ id, ...data }))
92
- * },
93
- * delete: {
94
- * authorize: defineAuthorize('delete', 'User', (id) => ({ id }))
95
- * }
96
- * });
97
- * ```
98
- */
99
- export declare function defineAuthorize(action: string, subject: string, getSubjectData?: (...args: unknown[]) => object | undefined): AuthorizationMetadata;
100
- //# sourceMappingURL=authorization-hook.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"authorization-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/authorization-hook.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,MAAM,GAAG,SAAS,CAAC;CAC7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAkB/B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,MAAM,GAAG,SAAS,GAC1D,qBAAqB,CAMvB"}
@@ -1,93 +0,0 @@
1
- import { authorize } from '../authorization/route-helpers.js';
2
- /**
3
- * Service hook that performs CASL authorization before method execution.
4
- *
5
- * This hook checks for `authorize` metadata on service methods and calls
6
- * the CASL `authorize()` function before allowing the method to execute.
7
- *
8
- * **Usage:**
9
- * 1. Define authorization metadata for your service methods
10
- * 2. Include this hook when wrapping services
11
- * 3. Ensure ability middleware is configured in your routes
12
- *
13
- * @example
14
- * ```typescript
15
- * import { authorizationHook, defineServiceMetadata } from 'glasswork';
16
- *
17
- * // Define metadata
18
- * export const authServiceMetadata = defineServiceMetadata({
19
- * deleteSession: {
20
- * authorize: {
21
- * action: 'delete',
22
- * subject: 'Session'
23
- * }
24
- * },
25
- * updateUser: {
26
- * authorize: {
27
- * action: 'update',
28
- * subject: 'User',
29
- * getSubjectData: (userId, data) => ({ id: userId, ...data })
30
- * }
31
- * }
32
- * });
33
- *
34
- * // Use in routes
35
- * router.delete('/session', async (c) => {
36
- * const services = withServiceHooks(
37
- * { authService },
38
- * {
39
- * hooks: [authorizationHook],
40
- * metadata: authServiceMetadata
41
- * },
42
- * c
43
- * );
44
- *
45
- * // This automatically checks authorization before executing
46
- * await services.authService.deleteSession(token);
47
- * });
48
- * ```
49
- */
50
- export const authorizationHook = {
51
- before: async (context, args) => {
52
- // Check if this method has authorization metadata
53
- const metadata = context.metadata;
54
- if (!metadata?.authorize) {
55
- // No authorization required for this method
56
- return;
57
- }
58
- const { action, subject, getSubjectData } = metadata.authorize;
59
- // Extract subject data if function provided
60
- const subjectData = getSubjectData ? getSubjectData(...args) : undefined;
61
- // Call CASL authorize - this will throw ForbiddenError if not allowed
62
- authorize(context.honoContext, action, subject, subjectData);
63
- },
64
- };
65
- /**
66
- * Helper to define authorization metadata for service methods.
67
- * Provides better type inference for the authorize property.
68
- *
69
- * @param action - CASL action
70
- * @param subject - CASL subject type
71
- * @param getSubjectData - Optional function to extract subject data
72
- * @returns Authorization metadata object
73
- *
74
- * @example
75
- * ```typescript
76
- * export const userServiceMetadata = defineServiceMetadata({
77
- * update: {
78
- * authorize: defineAuthorize('update', 'User', (id, data) => ({ id, ...data }))
79
- * },
80
- * delete: {
81
- * authorize: defineAuthorize('delete', 'User', (id) => ({ id }))
82
- * }
83
- * });
84
- * ```
85
- */
86
- export function defineAuthorize(action, subject, getSubjectData) {
87
- return {
88
- action,
89
- subject,
90
- getSubjectData,
91
- };
92
- }
93
- //# sourceMappingURL=authorization-hook.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"authorization-hook.js","sourceRoot":"","sources":["../../src/hooks/authorization-hook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAiC9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAgB;IAC5C,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC9B,kDAAkD;QAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAiD,CAAC;QAE3E,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC;YACzB,4CAA4C;YAC5C,OAAO;QACT,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE/D,4CAA4C;QAC5C,MAAM,WAAW,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEzE,sEAAsE;QACtE,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC/D,CAAC;CACF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAc,EACd,OAAe,EACf,cAA2D;IAE3D,OAAO;QACL,MAAM;QACN,OAAO;QACP,cAAc;KACf,CAAC;AACJ,CAAC"}
@@ -1,54 +0,0 @@
1
- /**
2
- * Service hooks system for wrapping service method calls with before/after/error hooks.
3
- *
4
- * This module provides a flexible hook system that can be used for:
5
- * - Authorization (using CASL)
6
- * - Audit logging
7
- * - Metrics and tracing
8
- * - Error handling
9
- * - Retry logic
10
- * - Timeouts
11
- * - Response transformation
12
- *
13
- * Hooks are transparent - they wrap service methods without modifying the service
14
- * implementation, keeping business logic clean and framework-agnostic.
15
- *
16
- * @module hooks
17
- *
18
- * @example Basic Usage
19
- * ```typescript
20
- * import { authorizationHook, defineServiceMetadata } from 'glasswork';
21
- *
22
- * // Define metadata for service methods
23
- * export const authServiceMetadata = defineServiceMetadata({
24
- * deleteSession: {
25
- * authorize: {
26
- * action: 'delete',
27
- * subject: 'Session'
28
- * }
29
- * }
30
- * });
31
- *
32
- * // Configure hooks globally in bootstrap
33
- * bootstrap({
34
- * serviceHooks: [authorizationHook],
35
- * serviceMetadata: {
36
- * authService: authServiceMetadata
37
- * }
38
- * });
39
- *
40
- * // In routes, service calls are automatically wrapped
41
- * export const authRoutes = createRoutes((router, { authService }) => {
42
- * router.delete('/session', ...route({
43
- * handler: async ({ context }) => {
44
- * // This automatically checks authorization before executing!
45
- * await authService.deleteSession(token);
46
- * }
47
- * }));
48
- * });
49
- * ```
50
- */
51
- export { type AuthorizationMetadata, authorizationHook, defineAuthorize, } from './authorization-hook.js';
52
- export { defineServiceMetadata, withServiceHooks, withServiceHooksMany, } from './service-hooks.js';
53
- export type { ServiceAfterHook, ServiceBeforeHook, ServiceErrorHook, ServiceHook, ServiceHookContext, ServiceHooksConfig, ServiceMethodMetadata, ServicesRegistry, } from './types.js';
54
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAGH,OAAO,EACL,KAAK,qBAAqB,EAC1B,iBAAiB,EACjB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,YAAY,CAAC"}