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.
Files changed (198) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +34 -2
  3. package/dist/audit/audit-logger.d.ts +22 -0
  4. package/dist/audit/audit-logger.d.ts.map +1 -0
  5. package/dist/audit/audit-logger.js +44 -0
  6. package/dist/audit/audit-logger.js.map +1 -0
  7. package/dist/audit/context.d.ts +13 -0
  8. package/dist/audit/context.d.ts.map +1 -0
  9. package/dist/audit/context.js +66 -0
  10. package/dist/audit/context.js.map +1 -0
  11. package/dist/audit/index.d.ts +8 -0
  12. package/dist/audit/index.d.ts.map +1 -0
  13. package/dist/audit/index.js +7 -0
  14. package/dist/audit/index.js.map +1 -0
  15. package/dist/audit/types.d.ts +74 -0
  16. package/dist/audit/types.d.ts.map +1 -0
  17. package/dist/audit/types.js +2 -0
  18. package/dist/audit/types.js.map +1 -0
  19. package/dist/auth/abilities.d.ts +1 -1
  20. package/dist/auth/abilities.d.ts.map +1 -1
  21. package/dist/auth/abilities.js.map +1 -1
  22. package/dist/auth/better-auth-provider.d.ts +6 -3
  23. package/dist/auth/better-auth-provider.d.ts.map +1 -1
  24. package/dist/auth/better-auth-provider.js +1 -3
  25. package/dist/auth/better-auth-provider.js.map +1 -1
  26. package/dist/auth/index.d.ts +2 -2
  27. package/dist/auth/index.d.ts.map +1 -1
  28. package/dist/auth/index.js.map +1 -1
  29. package/dist/auth/middleware.d.ts +9 -7
  30. package/dist/auth/middleware.d.ts.map +1 -1
  31. package/dist/auth/middleware.js +9 -1
  32. package/dist/auth/middleware.js.map +1 -1
  33. package/dist/auth/types.d.ts +7 -0
  34. package/dist/auth/types.d.ts.map +1 -1
  35. package/dist/config/config-service.d.ts.map +1 -1
  36. package/dist/config/config-service.js.map +1 -1
  37. package/dist/config/providers.js.map +1 -1
  38. package/dist/core/bootstrap.js.map +1 -1
  39. package/dist/email/compiler/compiler.js +3 -3
  40. package/dist/email/compiler/compiler.js.map +1 -1
  41. package/dist/email/email-service.d.ts.map +1 -1
  42. package/dist/email/template-registry.d.ts.map +1 -1
  43. package/dist/email/templated-email-service.d.ts.map +1 -1
  44. package/dist/email/transports/mock-transport.d.ts.map +1 -1
  45. package/dist/email/transports/ses-transport.d.ts.map +1 -1
  46. package/dist/email/webhooks/handler-factory.js.map +1 -1
  47. package/dist/email/webhooks/signature-verification.js.map +1 -1
  48. package/dist/email/webhooks/subscription-handler.js.map +1 -1
  49. package/dist/hono-context.d.ts +1 -1
  50. package/dist/hono-context.d.ts.map +1 -1
  51. package/dist/http/error-handler.js.map +1 -1
  52. package/dist/http/errors.d.ts.map +1 -1
  53. package/dist/http/errors.js.map +1 -1
  54. package/dist/http/route-authorization.d.ts +1 -2
  55. package/dist/http/route-authorization.d.ts.map +1 -1
  56. package/dist/http/route-authorization.js.map +1 -1
  57. package/dist/http/route-context.d.ts +4 -2
  58. package/dist/http/route-context.d.ts.map +1 -1
  59. package/dist/http/route-context.js +7 -2
  60. package/dist/http/route-context.js.map +1 -1
  61. package/dist/http/route-helpers.d.ts +3 -3
  62. package/dist/http/route-helpers.d.ts.map +1 -1
  63. package/dist/http/route-helpers.js.map +1 -1
  64. package/dist/http/route-openapi.d.ts +1 -1
  65. package/dist/http/route-openapi.d.ts.map +1 -1
  66. package/dist/http/route-openapi.js.map +1 -1
  67. package/dist/http/route-types.d.ts +26 -23
  68. package/dist/http/route-types.d.ts.map +1 -1
  69. package/dist/jobs/drivers/eventbridge-scheduler-driver.d.ts.map +1 -1
  70. package/dist/jobs/drivers/eventbridge-scheduler-driver.js.map +1 -1
  71. package/dist/jobs/drivers/mock-driver.d.ts.map +1 -1
  72. package/dist/jobs/drivers/mock-driver.js.map +1 -1
  73. package/dist/jobs/drivers/sqs-driver.d.ts.map +1 -1
  74. package/dist/jobs/drivers/sqs-driver.js.map +1 -1
  75. package/dist/jobs/errors.d.ts.map +1 -1
  76. package/dist/jobs/job-registry.d.ts.map +1 -1
  77. package/dist/jobs/job-registry.js.map +1 -1
  78. package/dist/jobs/job-service.d.ts.map +1 -1
  79. package/dist/jobs/job-service.js.map +1 -1
  80. package/dist/jobs/observability/client.d.ts +26 -0
  81. package/dist/jobs/observability/client.d.ts.map +1 -0
  82. package/dist/jobs/observability/client.js +286 -0
  83. package/dist/jobs/observability/client.js.map +1 -0
  84. package/dist/jobs/observability/dashboard.d.ts +19 -0
  85. package/dist/jobs/observability/dashboard.d.ts.map +1 -0
  86. package/dist/jobs/observability/dashboard.js +144 -0
  87. package/dist/jobs/observability/dashboard.js.map +1 -0
  88. package/dist/jobs/observability/emf.d.ts +24 -0
  89. package/dist/jobs/observability/emf.d.ts.map +1 -0
  90. package/dist/jobs/observability/emf.js +100 -0
  91. package/dist/jobs/observability/emf.js.map +1 -0
  92. package/dist/jobs/observability/index.d.ts +5 -0
  93. package/dist/jobs/observability/index.d.ts.map +1 -0
  94. package/dist/jobs/observability/index.js +4 -0
  95. package/dist/jobs/observability/index.js.map +1 -0
  96. package/dist/jobs/observability/types.d.ts +234 -0
  97. package/dist/jobs/observability/types.d.ts.map +1 -0
  98. package/dist/jobs/observability/types.js +2 -0
  99. package/dist/jobs/observability/types.js.map +1 -0
  100. package/dist/jobs/worker.d.ts +1 -1
  101. package/dist/jobs/worker.d.ts.map +1 -1
  102. package/dist/list-query/builder.d.ts +11 -2
  103. package/dist/list-query/builder.d.ts.map +1 -1
  104. package/dist/list-query/builder.js +29 -5
  105. package/dist/list-query/builder.js.map +1 -1
  106. package/dist/list-query/filter-mapping.d.ts +89 -0
  107. package/dist/list-query/filter-mapping.d.ts.map +1 -0
  108. package/dist/list-query/filter-mapping.js +254 -0
  109. package/dist/list-query/filter-mapping.js.map +1 -0
  110. package/dist/list-query/filter-value-schemas.d.ts +16 -0
  111. package/dist/list-query/filter-value-schemas.d.ts.map +1 -0
  112. package/dist/list-query/filter-value-schemas.js +56 -0
  113. package/dist/list-query/filter-value-schemas.js.map +1 -0
  114. package/dist/list-query/index.d.ts +5 -2
  115. package/dist/list-query/index.d.ts.map +1 -1
  116. package/dist/list-query/index.js +5 -2
  117. package/dist/list-query/index.js.map +1 -1
  118. package/dist/list-query/parse-filter-values.d.ts +21 -0
  119. package/dist/list-query/parse-filter-values.d.ts.map +1 -0
  120. package/dist/list-query/parse-filter-values.js +177 -0
  121. package/dist/list-query/parse-filter-values.js.map +1 -0
  122. package/dist/list-query/parser.d.ts +3 -2
  123. package/dist/list-query/parser.d.ts.map +1 -1
  124. package/dist/list-query/parser.js.map +1 -1
  125. package/dist/list-query/prisma-builder.d.ts.map +1 -1
  126. package/dist/list-query/prisma-builder.js +3 -50
  127. package/dist/list-query/prisma-builder.js.map +1 -1
  128. package/dist/list-query/prisma-executor.d.ts +44 -29
  129. package/dist/list-query/prisma-executor.d.ts.map +1 -1
  130. package/dist/list-query/prisma-executor.js +48 -33
  131. package/dist/list-query/prisma-executor.js.map +1 -1
  132. package/dist/list-query/query-schema.d.ts +8 -13
  133. package/dist/list-query/query-schema.d.ts.map +1 -1
  134. package/dist/list-query/query-schema.js +11 -12
  135. package/dist/list-query/query-schema.js.map +1 -1
  136. package/dist/list-query/schema-helpers.d.ts +34 -31
  137. package/dist/list-query/schema-helpers.d.ts.map +1 -1
  138. package/dist/list-query/schema-helpers.js +47 -37
  139. package/dist/list-query/schema-helpers.js.map +1 -1
  140. package/dist/list-query/sort-mapping.d.ts +37 -0
  141. package/dist/list-query/sort-mapping.d.ts.map +1 -0
  142. package/dist/list-query/sort-mapping.js +88 -0
  143. package/dist/list-query/sort-mapping.js.map +1 -0
  144. package/dist/list-query/types.d.ts +3 -10
  145. package/dist/list-query/types.d.ts.map +1 -1
  146. package/dist/list-query/validator.d.ts.map +1 -1
  147. package/dist/list-query/validator.js +28 -10
  148. package/dist/list-query/validator.js.map +1 -1
  149. package/dist/observability/exception-tracking.d.ts.map +1 -1
  150. package/dist/observability/exception-tracking.js.map +1 -1
  151. package/dist/observability/index.d.ts +1 -1
  152. package/dist/observability/index.d.ts.map +1 -1
  153. package/dist/observability/index.js +1 -1
  154. package/dist/observability/index.js.map +1 -1
  155. package/dist/observability/pino-logger.d.ts +0 -28
  156. package/dist/observability/pino-logger.d.ts.map +1 -1
  157. package/dist/observability/pino-logger.js +21 -12
  158. package/dist/observability/pino-logger.js.map +1 -1
  159. package/dist/observability/request-context.d.ts +36 -1
  160. package/dist/observability/request-context.d.ts.map +1 -1
  161. package/dist/observability/request-context.js +43 -0
  162. package/dist/observability/request-context.js.map +1 -1
  163. package/dist/rls/configuration.d.ts +3 -0
  164. package/dist/rls/configuration.d.ts.map +1 -0
  165. package/dist/rls/configuration.js +13 -0
  166. package/dist/rls/configuration.js.map +1 -0
  167. package/dist/rls/context.d.ts +37 -0
  168. package/dist/rls/context.d.ts.map +1 -0
  169. package/dist/rls/context.js +56 -0
  170. package/dist/rls/context.js.map +1 -0
  171. package/dist/rls/extension.d.ts +7 -0
  172. package/dist/rls/extension.d.ts.map +1 -0
  173. package/dist/rls/extension.js +91 -0
  174. package/dist/rls/extension.js.map +1 -0
  175. package/dist/rls/generator.d.ts +17 -0
  176. package/dist/rls/generator.d.ts.map +1 -0
  177. package/dist/rls/generator.js +47 -0
  178. package/dist/rls/generator.js.map +1 -0
  179. package/dist/rls/index.d.ts +7 -0
  180. package/dist/rls/index.d.ts.map +1 -0
  181. package/dist/rls/index.js +7 -0
  182. package/dist/rls/index.js.map +1 -0
  183. package/dist/rls/middleware.d.ts +17 -0
  184. package/dist/rls/middleware.d.ts.map +1 -0
  185. package/dist/rls/middleware.js +51 -0
  186. package/dist/rls/middleware.js.map +1 -0
  187. package/dist/rls/testing.d.ts +24 -0
  188. package/dist/rls/testing.d.ts.map +1 -0
  189. package/dist/rls/testing.js +31 -0
  190. package/dist/rls/testing.js.map +1 -0
  191. package/dist/rls/types.d.ts +51 -0
  192. package/dist/rls/types.d.ts.map +1 -0
  193. package/dist/rls/types.js +16 -0
  194. package/dist/rls/types.js.map +1 -0
  195. package/dist/uploads/uploads.service.d.ts.map +1 -1
  196. package/dist/uploads/validators.d.ts.map +1 -1
  197. package/dist/utils/serialize-prisma-types.js.map +1 -1
  198. package/package.json +47 -34
@@ -1,17 +1,30 @@
1
1
  import { parse } from 'valibot';
2
+ import { ValidationException } from '../http/errors.js';
3
+ function isRecord(value) {
4
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
5
+ }
6
+ function hasSameKeys(input, output) {
7
+ if (!isRecord(input) || !isRecord(output)) {
8
+ return true;
9
+ }
10
+ return Object.entries(input).every(([key, value]) => Object.hasOwn(output, key) && hasSameKeys(value, output[key]));
11
+ }
2
12
  /**
3
13
  * Validate and parse Prisma where clause against schema
4
14
  * Returns the validated and typed result
5
15
  */
6
16
  export function validateWhere(where, schema) {
7
17
  try {
8
- return parse(schema, where);
18
+ const validated = parse(schema, where);
19
+ if (!hasSameKeys(where, validated)) {
20
+ throw new ValidationException('Invalid filter query.');
21
+ }
22
+ return validated;
9
23
  }
10
24
  catch (error) {
11
- if (error instanceof Error) {
12
- throw new Error(`Invalid filter: ${error.message}`);
13
- }
14
- throw error;
25
+ if (error instanceof ValidationException)
26
+ throw error;
27
+ throw new ValidationException('Invalid filter query.');
15
28
  }
16
29
  }
17
30
  /**
@@ -20,13 +33,18 @@ export function validateWhere(where, schema) {
20
33
  */
21
34
  export function validateOrderBy(orderBy, schema) {
22
35
  try {
23
- return orderBy.map((order) => parse(schema, order));
36
+ return orderBy.map((order) => {
37
+ const validated = parse(schema, order);
38
+ if (!hasSameKeys(order, validated)) {
39
+ throw new ValidationException('Invalid sort query.');
40
+ }
41
+ return validated;
42
+ });
24
43
  }
25
44
  catch (error) {
26
- if (error instanceof Error) {
27
- throw new Error(`Invalid sort: ${error.message}`);
28
- }
29
- throw error;
45
+ if (error instanceof ValidationException)
46
+ throw error;
47
+ throw new ValidationException('Invalid sort query.');
30
48
  }
31
49
  }
32
50
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/list-query/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqD,KAAK,EAAE,MAAM,SAAS,CAAC;AA8BnF;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,KAA8B,EAC9B,MAAe;IAEf,IAAI,CAAC;QACH,OAAO,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,OAA2C,EAC3C,MAAe;IAEf,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAIhC,KAA8B,EAC9B,OAA2C,EAC3C,IAAwB,EACxB,IAAwB,EACxB,MAA4D;IAE5D,OAAO;QACL,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC;QAC/C,OAAO,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC;QACvD,IAAI;QACJ,IAAI;KACL,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/list-query/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqD,KAAK,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGxD,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,MAAe;IAClD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAChC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAChF,CAAC;AACJ,CAAC;AA6BD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,KAA8B,EAC9B,MAAe;IAEf,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,mBAAmB,CAAC,uBAAuB,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,mBAAmB;YAAE,MAAM,KAAK,CAAC;QACtD,MAAM,IAAI,mBAAmB,CAAC,uBAAuB,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,OAA2C,EAC3C,MAAe;IAEf,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACvC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,mBAAmB,CAAC,qBAAqB,CAAC,CAAC;YACvD,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,mBAAmB;YAAE,MAAM,KAAK,CAAC;QACtD,MAAM,IAAI,mBAAmB,CAAC,qBAAqB,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAIhC,KAA8B,EAC9B,OAA2C,EAC3C,IAAwB,EACxB,IAAwB,EACxB,MAA4D;IAE5D,OAAO;QACL,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC;QAC/C,OAAO,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC;QACvD,IAAI;QACJ,IAAI;KACL,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"exception-tracking.d.ts","sourceRoot":"","sources":["../../src/observability/exception-tracking.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAI9C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAExE;;;;;OAKG;IACH,cAAc,CACZ,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,EACnC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI,CAAC;IAER;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAE5E;;;;OAIG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC9D;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,OAAO,EAAE,gBAAgB,CAAC;IAE1B;;;;;;;;;;;;;;;;;;OAkBG;IACH,gBAAgB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;CACnD;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAI,YAAY,MAAM,KAAG,OAA4B,CAAC;AAE1F;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,OAAO,GAAG,SAAS,EAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAQT;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,uBAAuB,GAC9B,iBAAiB,CAenB;AAMD;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEpC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IAExC;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,wBAA6B,GAAG,gBAAgB,CA2HhG;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,oBAAoB,IAAI,gBAAgB,CAkCvD"}
1
+ {"version":3,"file":"exception-tracking.d.ts","sourceRoot":"","sources":["../../src/observability/exception-tracking.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAI9C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAExE;;;;;OAKG;IACH,cAAc,CACZ,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,EACnC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI,CAAC;IAER;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAE5E;;;;OAIG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC9D;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,OAAO,EAAE,gBAAgB,CAAC;IAE1B;;;;;;;;;;;;;;;;;;OAkBG;IACH,gBAAgB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;CACnD;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,eAAgB,MAAM,KAAG,OAA4B,CAAC;AAE1F;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,OAAO,GAAG,SAAS,EAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAQT;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,uBAAuB,GAC9B,iBAAiB,CAenB;AAMD;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEpC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IAExC;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,wBAA6B,GAAG,gBAAgB,CA2HhG;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,oBAAoB,IAAI,gBAAgB,CAkCvD"}
@@ -1 +1 @@
1
- {"version":3,"file":"exception-tracking.js","sourceRoot":"","sources":["../../src/observability/exception-tracking.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exception-tracking.js","sourceRoot":"","sources":["../../src/observability/exception-tracking.ts"],"names":[],"mappings":"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"}
@@ -4,5 +4,5 @@
4
4
  */
5
5
  export { type CloudWatchClientLike, type CloudWatchTrackerOptions, createCloudWatchTracker, createConsoleTracker, createExceptionTrackingMiddleware, defaultTrackStatusCodes, type ExceptionTracker, type ExceptionTrackingConfig, shouldTrackException, } from './exception-tracking.js';
6
6
  export { type ContextAwarePinoOptions, createContextAwarePinoLogger, createPinoHttpMiddleware, lambdaPinoConfig, type PinoLogger, } from './pino-logger.js';
7
- export { getRequestContext, getRequestId, type RequestContext, setRequestContextValue, setRequestUser, } from './request-context.js';
7
+ export { getRequestActor, getRequestContext, getRequestId, type RequestAuthContext, type RequestContext, setRequestAuth, setRequestContextValue, setRequestUser, } from './request-context.js';
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,uBAAuB,EACvB,oBAAoB,EACpB,iCAAiC,EACjC,uBAAuB,EACvB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,KAAK,uBAAuB,EAC5B,4BAA4B,EAC5B,wBAAwB,EACxB,gBAAgB,EAChB,KAAK,UAAU,GAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,KAAK,cAAc,EACnB,sBAAsB,EACtB,cAAc,GACf,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,uBAAuB,EACvB,oBAAoB,EACpB,iCAAiC,EACjC,uBAAuB,EACvB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,KAAK,uBAAuB,EAC5B,4BAA4B,EAC5B,wBAAwB,EACxB,gBAAgB,EAChB,KAAK,UAAU,GAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,cAAc,EACd,sBAAsB,EACtB,cAAc,GACf,MAAM,sBAAsB,CAAC"}
@@ -4,5 +4,5 @@
4
4
  */
5
5
  export { createCloudWatchTracker, createConsoleTracker, createExceptionTrackingMiddleware, defaultTrackStatusCodes, shouldTrackException, } from './exception-tracking.js';
6
6
  export { createContextAwarePinoLogger, createPinoHttpMiddleware, lambdaPinoConfig, } from './pino-logger.js';
7
- export { getRequestContext, getRequestId, setRequestContextValue, setRequestUser, } from './request-context.js';
7
+ export { getRequestActor, getRequestContext, getRequestId, setRequestAuth, setRequestContextValue, setRequestUser, } from './request-context.js';
8
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAGL,uBAAuB,EACvB,oBAAoB,EACpB,iCAAiC,EACjC,uBAAuB,EAGvB,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAEL,4BAA4B,EAC5B,wBAAwB,EACxB,gBAAgB,GAEjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,iBAAiB,EACjB,YAAY,EAEZ,sBAAsB,EACtB,cAAc,GACf,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAGL,uBAAuB,EACvB,oBAAoB,EACpB,iCAAiC,EACjC,uBAAuB,EAGvB,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAEL,4BAA4B,EAC5B,wBAAwB,EACxB,gBAAgB,GAEjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,YAAY,EAGZ,cAAc,EACd,sBAAsB,EACtB,cAAc,GACf,MAAM,sBAAsB,CAAC"}
@@ -28,34 +28,6 @@ export interface ContextAwarePinoOptions {
28
28
  */
29
29
  service?: string;
30
30
  }
31
- /**
32
- * Create a context-aware logger that automatically includes request context.
33
- *
34
- * This logger wraps a Pino instance and automatically injects:
35
- * - requestId (from AsyncLocalStorage)
36
- * - userId (if set via setRequestUser)
37
- * - service name
38
- *
39
- * The logger uses Pino's structured logging format, optimized for CloudWatch Logs Insights.
40
- *
41
- * @param options - Configuration options
42
- * @returns Logger instance compatible with Glasswork's Logger interface
43
- *
44
- * @example
45
- * ```typescript
46
- * import pino from 'pino';
47
- * import { createContextAwarePinoLogger } from 'glasswork/observability';
48
- *
49
- * const logger = createContextAwarePinoLogger({
50
- * pino: pino({ level: 'info' }),
51
- * service: 'user-service',
52
- * });
53
- *
54
- * // In your service (requestId automatically included!)
55
- * logger.info('Creating user', { email: 'test@example.com' });
56
- * // Output: {"level":"info","requestId":"abc-123","service":"user-service","msg":"Creating user","email":"test@example.com"}
57
- * ```
58
- */
59
31
  export declare function createContextAwarePinoLogger(options: ContextAwarePinoOptions): Logger;
60
32
  /**
61
33
  * Create HTTP request logging middleware for Pino.
@@ -1 +1 @@
1
- {"version":3,"file":"pino-logger.d.ts","sourceRoot":"","sources":["../../src/observability/pino-logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAGjD;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,UAAU,CAAC;IACzD,KAAK,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,IAAI,EAAE,UAAU,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,CA2DrF;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,GAAG,iBAAiB,CA8B5E;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,gBAAgB;;;uBAIV,MAAM;;;;;;CAMxB,CAAC"}
1
+ {"version":3,"file":"pino-logger.d.ts","sourceRoot":"","sources":["../../src/observability/pino-logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAGjD;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,UAAU,CAAC;IACzD,KAAK,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,IAAI,EAAE,UAAU,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA+CD,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,CA6CrF;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,GAAG,iBAAiB,CA8B5E;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,gBAAgB;IAC3B,KAAK;IAEL,UAAU;QACR,KAAK,UAAU,MAAM;YAAQ,KAAK;;;IAGpC,SAAS;IAET,IAAI;CACL,CAAC"}
@@ -27,24 +27,33 @@ import { getRequestContext } from './request-context.js';
27
27
  * // Output: {"level":"info","requestId":"abc-123","service":"user-service","msg":"Creating user","email":"test@example.com"}
28
28
  * ```
29
29
  */
30
+ function extractContextBindings(ctx) {
31
+ if (!ctx)
32
+ return {};
33
+ const bindings = {};
34
+ if (ctx.requestId)
35
+ bindings.requestId = ctx.requestId;
36
+ if (ctx.userId)
37
+ bindings.userId = ctx.userId;
38
+ if (ctx.actorUserId)
39
+ bindings.actorUserId = ctx.actorUserId;
40
+ if (ctx.effectiveUserId)
41
+ bindings.effectiveUserId = ctx.effectiveUserId;
42
+ if (ctx.isImpersonating)
43
+ bindings.isImpersonating = true;
44
+ if (ctx.tenantId)
45
+ bindings.tenantId = ctx.tenantId;
46
+ if (ctx.custom)
47
+ Object.assign(bindings, ctx.custom);
48
+ return bindings;
49
+ }
30
50
  export function createContextAwarePinoLogger(options) {
31
51
  const { pino, service } = options;
32
52
  function getBindings() {
33
- const ctx = getRequestContext();
34
- const bindings = {};
35
- if (ctx?.requestId) {
36
- bindings.requestId = ctx.requestId;
37
- }
38
- if (ctx?.userId) {
39
- bindings.userId = ctx.userId;
40
- }
53
+ const bindings = extractContextBindings(getRequestContext());
41
54
  if (service) {
42
55
  bindings.service = service;
43
56
  }
44
- // Include custom context
45
- if (ctx?.custom) {
46
- Object.assign(bindings, ctx.custom);
47
- }
48
57
  return bindings;
49
58
  }
50
59
  function createLogObject(_msg, meta) {
@@ -1 +1 @@
1
- {"version":3,"file":"pino-logger.js","sourceRoot":"","sources":["../../src/observability/pino-logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pino-logger.js","sourceRoot":"","sources":["../../src/observability/pino-logger.ts"],"names":[],"mappings":"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"}
@@ -11,8 +11,16 @@ export interface RequestContext {
11
11
  method: string;
12
12
  /** Request path */
13
13
  path: string;
14
- /** Optional user ID (set via setUser) */
14
+ /** Optional user ID (set via setUser or setRequestAuth) */
15
15
  userId?: string;
16
+ /** Physical actor user ID (e.g. Superadmin during impersonation, otherwise same as userId) */
17
+ actorUserId?: string;
18
+ /** Effective target user ID when impersonating */
19
+ effectiveUserId?: string;
20
+ /** Whether the request is being executed via user impersonation */
21
+ isImpersonating?: boolean;
22
+ /** Organization or tenant ID associated with the authenticated user/request */
23
+ tenantId?: string;
16
24
  /** Custom context data */
17
25
  custom: Record<string, unknown>;
18
26
  }
@@ -62,6 +70,14 @@ export declare function getRequestContext(): RequestContext | undefined;
62
70
  * ```
63
71
  */
64
72
  export declare function getRequestId(): string | undefined;
73
+ export interface RequestAuthContext {
74
+ /** Effective user ID (whose permissions and identity apply) */
75
+ userId: string;
76
+ /** Organization or tenant ID associated with the user/request */
77
+ tenantId?: string | null | undefined;
78
+ /** Impersonator user ID if this request is performed via impersonation */
79
+ impersonatedBy?: string | null | undefined;
80
+ }
65
81
  /**
66
82
  * Set user information in the current request context.
67
83
  * Useful for correlating logs and errors with users after authentication.
@@ -78,6 +94,25 @@ export declare function getRequestId(): string | undefined;
78
94
  * ```
79
95
  */
80
96
  export declare function setRequestUser(userId: string): void;
97
+ /**
98
+ * Set full authentication and actor context for the current request.
99
+ * Automatically resolves whether impersonation is active:
100
+ * - If impersonatedBy is provided: actorUserId is the impersonator, effectiveUserId is the target user, isImpersonating is true.
101
+ * - Otherwise: actorUserId is the user, effectiveUserId is undefined, isImpersonating is false.
102
+ *
103
+ * @param auth - Authentication context including user ID, tenant ID, and optional impersonator ID
104
+ */
105
+ export declare function setRequestAuth(auth: RequestAuthContext): void;
106
+ /**
107
+ * Get the current actor context for auditing and security correlation.
108
+ * Returns undefined if called outside a request lifecycle.
109
+ */
110
+ export declare function getRequestActor(): {
111
+ actorUserId?: string;
112
+ effectiveUserId?: string;
113
+ isImpersonating: boolean;
114
+ tenantId?: string;
115
+ } | undefined;
81
116
  /**
82
117
  * Set custom context data for the current request.
83
118
  * Useful for adding business-specific context to logs.
@@ -1 +1 @@
1
- {"version":3,"file":"request-context.d.ts","sourceRoot":"","sources":["../../src/observability/request-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAE9C;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,mCAA0C,CAAC;AAE7E;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,SAAS,CAE9D;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAEjD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAKnD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAKxE;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,IAAI,iBAAiB,CAelE"}
1
+ {"version":3,"file":"request-context.d.ts","sourceRoot":"","sources":["../../src/observability/request-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAE9C;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8FAA8F;IAC9F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mEAAmE;IACnE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,mCAA0C,CAAC;AAE7E;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,SAAS,CAE9D;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAEjD;AAED,MAAM,WAAW,kBAAkB;IACjC,+DAA+D;IAC/D,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrC,0EAA0E;IAC1E,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAC5C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAMnD;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAiB7D;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAC3B;IACE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACD,SAAS,CASZ;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAKxE;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,IAAI,iBAAiB,CAelE"}
@@ -68,8 +68,51 @@ export function setRequestUser(userId) {
68
68
  const store = requestContextStorage.getStore();
69
69
  if (store) {
70
70
  store.userId = userId;
71
+ store.actorUserId = store.actorUserId ?? userId;
71
72
  }
72
73
  }
74
+ /**
75
+ * Set full authentication and actor context for the current request.
76
+ * Automatically resolves whether impersonation is active:
77
+ * - If impersonatedBy is provided: actorUserId is the impersonator, effectiveUserId is the target user, isImpersonating is true.
78
+ * - Otherwise: actorUserId is the user, effectiveUserId is undefined, isImpersonating is false.
79
+ *
80
+ * @param auth - Authentication context including user ID, tenant ID, and optional impersonator ID
81
+ */
82
+ export function setRequestAuth(auth) {
83
+ const store = requestContextStorage.getStore();
84
+ if (store) {
85
+ store.userId = auth.userId;
86
+ if (typeof auth.tenantId === 'string') {
87
+ store.tenantId = auth.tenantId;
88
+ }
89
+ if (auth.impersonatedBy) {
90
+ store.actorUserId = auth.impersonatedBy;
91
+ store.effectiveUserId = auth.userId;
92
+ store.isImpersonating = true;
93
+ }
94
+ else {
95
+ store.actorUserId = auth.userId;
96
+ store.effectiveUserId = undefined;
97
+ store.isImpersonating = false;
98
+ }
99
+ }
100
+ }
101
+ /**
102
+ * Get the current actor context for auditing and security correlation.
103
+ * Returns undefined if called outside a request lifecycle.
104
+ */
105
+ export function getRequestActor() {
106
+ const store = requestContextStorage.getStore();
107
+ if (!store)
108
+ return undefined;
109
+ return {
110
+ actorUserId: store.actorUserId ?? store.userId,
111
+ effectiveUserId: store.effectiveUserId,
112
+ isImpersonating: Boolean(store.isImpersonating),
113
+ tenantId: store.tenantId,
114
+ };
115
+ }
73
116
  /**
74
117
  * Set custom context data for the current request.
75
118
  * Useful for adding business-specific context to logs.
@@ -1 +1 @@
1
- {"version":3,"file":"request-context.js","sourceRoot":"","sources":["../../src/observability/request-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAoBrD;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,iBAAiB,EAAkB,CAAC;AAE7E;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,qBAAqB,CAAC,QAAQ,EAAE,CAAC;AAC1C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,qBAAqB,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC;AACrD,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,KAAK,GAAG,qBAAqB,CAAC,QAAQ,EAAE,CAAC;IAC/C,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACxB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW,EAAE,KAAc;IAChE,MAAM,KAAK,GAAG,qBAAqB,CAAC,QAAQ,EAAE,CAAC;IAC/C,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC5B,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,8BAA8B;IAC5C,OAAO,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACvB,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAE5D,MAAM,OAAO,GAAmB;YAC9B,SAAS;YACT,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM;YACpB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI;YAChB,MAAM,EAAE,EAAE;SACX,CAAC;QAEF,MAAM,qBAAqB,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,IAAI,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"request-context.js","sourceRoot":"","sources":["../../src/observability/request-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** PostgreSQL settings use qualified, case-insensitive names. */
2
+ export declare function validateSessionVariables(sessionVariable: string, bypassVariable?: string): void;
3
+ //# sourceMappingURL=configuration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration.d.ts","sourceRoot":"","sources":["../../src/rls/configuration.ts"],"names":[],"mappings":"AAIA,iEAAiE;AACjE,wBAAgB,wBAAwB,CAAC,eAAe,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAU/F"}
@@ -0,0 +1,13 @@
1
+ import { RLSConfigurationException } from './types.js';
2
+ const parameterName = /^[a-z_][a-z0-9_]*(?:\.[a-z_][a-z0-9_]*)+$/i;
3
+ /** PostgreSQL settings use qualified, case-insensitive names. */
4
+ export function validateSessionVariables(sessionVariable, bypassVariable) {
5
+ if (!parameterName.test(sessionVariable) ||
6
+ sessionVariable.toLowerCase() === bypassVariable?.toLowerCase()) {
7
+ throw new RLSConfigurationException('Use distinct, qualified session variables.');
8
+ }
9
+ if (bypassVariable !== undefined && !parameterName.test(bypassVariable)) {
10
+ throw new RLSConfigurationException('The bypass variable must be qualified.');
11
+ }
12
+ }
13
+ //# sourceMappingURL=configuration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration.js","sourceRoot":"","sources":["../../src/rls/configuration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,aAAa,GAAG,4CAA4C,CAAC;AAEnE,iEAAiE;AACjE,MAAM,UAAU,wBAAwB,CAAC,eAAuB,EAAE,cAAuB;IACvF,IACE,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;QACpC,eAAe,CAAC,WAAW,EAAE,KAAK,cAAc,EAAE,WAAW,EAAE,EAC/D,CAAC;QACD,MAAM,IAAI,yBAAyB,CAAC,4CAA4C,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,cAAc,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,yBAAyB,CAAC,wCAAwC,CAAC,CAAC;IAChF,CAAC;AACH,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { type TenantContext } from './types.js';
2
+ /**
3
+ * Run an asynchronous function within a specific tenant context.
4
+ *
5
+ * @param context - The TenantContext to bind.
6
+ * @param fn - The asynchronous callback function.
7
+ * @returns The resolved return value of `fn`.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * const result = await runWithTenant({ tenantId: 'tenant_123' }, async () => {
12
+ * return await prisma.poll.findMany();
13
+ * });
14
+ * ```
15
+ */
16
+ export declare function runWithTenant<T>(context: TenantContext | undefined, fn: () => T | PromiseLike<T>): Promise<T>;
17
+ /**
18
+ * Run trusted system code with an explicit bypass.
19
+ *
20
+ * Only tables with a matching bypass policy allow access across tenants.
21
+ */
22
+ export declare function runWithBypass<T>(fn: () => T | PromiseLike<T>): Promise<T>;
23
+ /**
24
+ * Get the current active TenantContext, or undefined if outside a tenant execution boundary.
25
+ */
26
+ export declare function getTenantContext(): Readonly<TenantContext> | undefined;
27
+ /**
28
+ * Get the current active tenant ID, or undefined if outside a tenant boundary.
29
+ */
30
+ export declare function getTenantId(): string | undefined;
31
+ /**
32
+ * Get the current active tenant ID, throwing `MissingTenantContextException` if not present.
33
+ *
34
+ * @param modelName - Optional model name for descriptive error reporting.
35
+ */
36
+ export declare function requireTenantId(modelName?: string): string;
37
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/rls/context.ts"],"names":[],"mappings":"AACA,OAAO,EAAiC,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAO/E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC7B,OAAO,EAAE,aAAa,GAAG,SAAS,EAClC,EAAE,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAC3B,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEzE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,QAAQ,CAAC,aAAa,CAAC,GAAG,SAAS,CAEtE;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,GAAG,SAAS,CAEhD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAM1D"}
@@ -0,0 +1,56 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ import { MissingTenantContextException } from './types.js';
3
+ /**
4
+ * AsyncLocalStorage instance holding the active TenantContext for the current execution chain.
5
+ */
6
+ const tenantContextStorage = new AsyncLocalStorage();
7
+ /**
8
+ * Run an asynchronous function within a specific tenant context.
9
+ *
10
+ * @param context - The TenantContext to bind.
11
+ * @param fn - The asynchronous callback function.
12
+ * @returns The resolved return value of `fn`.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const result = await runWithTenant({ tenantId: 'tenant_123' }, async () => {
17
+ * return await prisma.poll.findMany();
18
+ * });
19
+ * ```
20
+ */
21
+ export function runWithTenant(context, fn) {
22
+ return tenantContextStorage.run(context && Object.freeze({ ...context }), async () => await fn());
23
+ }
24
+ /**
25
+ * Run trusted system code with an explicit bypass.
26
+ *
27
+ * Only tables with a matching bypass policy allow access across tenants.
28
+ */
29
+ export function runWithBypass(fn) {
30
+ return runWithTenant({ bypass: true }, fn);
31
+ }
32
+ /**
33
+ * Get the current active TenantContext, or undefined if outside a tenant execution boundary.
34
+ */
35
+ export function getTenantContext() {
36
+ return tenantContextStorage.getStore();
37
+ }
38
+ /**
39
+ * Get the current active tenant ID, or undefined if outside a tenant boundary.
40
+ */
41
+ export function getTenantId() {
42
+ return tenantContextStorage.getStore()?.tenantId;
43
+ }
44
+ /**
45
+ * Get the current active tenant ID, throwing `MissingTenantContextException` if not present.
46
+ *
47
+ * @param modelName - Optional model name for descriptive error reporting.
48
+ */
49
+ export function requireTenantId(modelName) {
50
+ const context = getTenantContext();
51
+ if (!context?.tenantId) {
52
+ throw new MissingTenantContextException(modelName);
53
+ }
54
+ return context.tenantId;
55
+ }
56
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/rls/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,6BAA6B,EAAsB,MAAM,YAAY,CAAC;AAE/E;;GAEG;AACH,MAAM,oBAAoB,GAAG,IAAI,iBAAiB,EAAuC,CAAC;AAE1F;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAkC,EAClC,EAA4B;IAE5B,OAAO,oBAAoB,CAAC,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACpG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAI,EAA4B;IAC3D,OAAO,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,oBAAoB,CAAC,QAAQ,EAAE,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,oBAAoB,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC;AACnD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,SAAkB;IAChD,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;QACvB,MAAM,IAAI,6BAA6B,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,OAAO,CAAC,QAAQ,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type RLSExtensionOptions, type RLSTransactionClient, type RLSTransactionOptions, type TenantContext } from './types.js';
2
+ /** Prisma extension for transaction-scoped PostgreSQL RLS. Apply this extension last. */
3
+ export declare function createRLSExtension(options?: RLSExtensionOptions): (client: any) => import("@prisma/client/extension").PrismaClientExtends<import("@prisma/client/runtime/client").InternalArgs<{}, {}, {}, {
4
+ $transaction<TClient, TResult>(this: TClient, fn: (tx: RLSTransactionClient<TClient>) => Promise<TResult>, transactionOptions?: RLSTransactionOptions): Promise<TResult>;
5
+ $withTenant<TClient, TResult>(this: TClient, context: TenantContext, fn: (tx: RLSTransactionClient<TClient>) => Promise<TResult>, transactionOptions?: RLSTransactionOptions): Promise<TResult>;
6
+ }> & import("@prisma/client/runtime/client").DefaultArgs>;
7
+ //# sourceMappingURL=extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../src/rls/extension.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AAQpB,yFAAyF;AACzF,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,mBAAwB;iBA6E/C,OAAO,EAAE,OAAO,QACrB,OAAO,MACT,CAAC,EAAE,EAAE,oBAAoB,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,uBACtC,qBAAqB;gBAIhC,OAAO,EAAE,OAAO,QACpB,OAAO,WACJ,aAAa,MAClB,CAAC,EAAE,EAAE,oBAAoB,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,uBACtC,qBAAqB;0DAqBnD"}
@@ -0,0 +1,91 @@
1
+ import { Prisma } from '@prisma/client/extension';
2
+ import { validateSessionVariables } from './configuration.js';
3
+ import { getTenantContext, runWithTenant } from './context.js';
4
+ import { MissingTenantContextException, RLSConfigurationException, } from './types.js';
5
+ /** Prisma extension for transaction-scoped PostgreSQL RLS. Apply this extension last. */
6
+ export function createRLSExtension(options = {}) {
7
+ const { sessionVariable = 'app.current_tenant_id', bypassVariable, models, missingContextBehavior = 'throw', } = options;
8
+ validateSessionVariables(sessionVariable, bypassVariable);
9
+ function resolveContext(model) {
10
+ const context = getTenantContext();
11
+ if (context?.bypass && !bypassVariable) {
12
+ throw new RLSConfigurationException('This RLS extension does not allow bypass.');
13
+ }
14
+ if (context?.tenantId || context?.bypass)
15
+ return context;
16
+ if (missingContextBehavior === 'throw' &&
17
+ (!models || (model !== undefined && models.includes(model)))) {
18
+ throw new MissingTenantContextException(model);
19
+ }
20
+ return undefined;
21
+ }
22
+ return Prisma.defineExtension((base) => {
23
+ function sessionConfig(context) {
24
+ const tenantId = context.tenantId ?? '';
25
+ // Set or clear both settings each time; values remain parameterized.
26
+ return bypassVariable
27
+ ? [
28
+ 'SELECT set_config($1, $2, true), set_config($3, $4, true)',
29
+ sessionVariable,
30
+ tenantId,
31
+ bypassVariable,
32
+ context.bypass ? 'true' : '',
33
+ ]
34
+ : ['SELECT set_config($1, $2, true)', sessionVariable, tenantId];
35
+ }
36
+ async function transact(fn, transactionOptions) {
37
+ if (typeof fn !== 'function') {
38
+ throw new RLSConfigurationException('Use the callback form of $transaction for RLS.');
39
+ }
40
+ const context = resolveContext();
41
+ if (!context)
42
+ throw new MissingTenantContextException();
43
+ // A separate extension keeps Prisma's query callback on the transaction client.
44
+ // No private Prisma transaction fields or global client redirection are needed.
45
+ const transactional = base.$extends({
46
+ name: 'glasswork-rls-transaction',
47
+ query: {
48
+ async $allOperations({ model, args, query }) {
49
+ const active = resolveContext(model);
50
+ if (active?.tenantId !== context.tenantId || active?.bypass !== context.bypass) {
51
+ throw new RLSConfigurationException('The RLS context cannot change within a transaction.');
52
+ }
53
+ return query(args);
54
+ },
55
+ },
56
+ });
57
+ return transactional.$transaction(async (tx) => {
58
+ await tx.$executeRawUnsafe(...sessionConfig(context));
59
+ // Prisma preserves the model delegates and previously applied extensions.
60
+ return fn(tx);
61
+ }, transactionOptions);
62
+ }
63
+ return base.$extends({
64
+ name: 'glasswork-rls',
65
+ client: {
66
+ $transaction(fn, transactionOptions) {
67
+ return transact(fn, transactionOptions);
68
+ },
69
+ $withTenant(context, fn, transactionOptions) {
70
+ return runWithTenant(context, () => transact(fn, transactionOptions));
71
+ },
72
+ },
73
+ query: {
74
+ async $allOperations({ model, args, query }) {
75
+ const context = resolveContext(model);
76
+ if (!context)
77
+ return query(args);
78
+ // A batch binds the original PrismaPromise to the same connection.
79
+ // Global models can also load tenant relations: scope every query.
80
+ const operation = query(args);
81
+ const [, result] = await base.$transaction([
82
+ base.$executeRawUnsafe(...sessionConfig(context)),
83
+ operation,
84
+ ]);
85
+ return result;
86
+ },
87
+ },
88
+ });
89
+ });
90
+ }
91
+ //# sourceMappingURL=extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../../src/rls/extension.ts"],"names":[],"mappings":"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"}