@rudderhq/server 0.6.5 → 0.6.6-canary.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 (185) hide show
  1. package/dist/app.js +1 -1
  2. package/dist/app.js.map +1 -1
  3. package/dist/bootstrap/auth-runtime.d.ts +36 -0
  4. package/dist/bootstrap/auth-runtime.d.ts.map +1 -0
  5. package/dist/bootstrap/auth-runtime.js +81 -0
  6. package/dist/bootstrap/auth-runtime.js.map +1 -0
  7. package/dist/bootstrap/auth-runtime.test.d.ts +2 -0
  8. package/dist/bootstrap/auth-runtime.test.d.ts.map +1 -0
  9. package/dist/bootstrap/auth-runtime.test.js +51 -0
  10. package/dist/bootstrap/auth-runtime.test.js.map +1 -0
  11. package/dist/bootstrap/create-http-app.d.ts.map +1 -1
  12. package/dist/bootstrap/create-http-app.js +5 -0
  13. package/dist/bootstrap/create-http-app.js.map +1 -1
  14. package/dist/bootstrap/plugin-host-runtime.d.ts +8 -8
  15. package/dist/bootstrap/register-api-routes.d.ts.map +1 -1
  16. package/dist/bootstrap/register-api-routes.js +8 -0
  17. package/dist/bootstrap/register-api-routes.js.map +1 -1
  18. package/dist/bootstrap/types.d.ts +9 -1
  19. package/dist/bootstrap/types.d.ts.map +1 -1
  20. package/dist/bundled-plugins/plugin-linear/dist/worker.js +21 -0
  21. package/dist/bundled-plugins/plugin-linear/dist/worker.js.map +3 -3
  22. package/dist/index.d.ts +2 -0
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +15 -36
  25. package/dist/index.js.map +1 -1
  26. package/dist/middleware/account-session-required.d.ts +4 -0
  27. package/dist/middleware/account-session-required.d.ts.map +1 -0
  28. package/dist/middleware/account-session-required.js +19 -0
  29. package/dist/middleware/account-session-required.js.map +1 -0
  30. package/dist/middleware/auth.d.ts +2 -1
  31. package/dist/middleware/auth.d.ts.map +1 -1
  32. package/dist/middleware/auth.js +4 -2
  33. package/dist/middleware/auth.js.map +1 -1
  34. package/dist/middleware/logger.d.ts +1 -0
  35. package/dist/middleware/logger.d.ts.map +1 -1
  36. package/dist/middleware/logger.js +25 -2
  37. package/dist/middleware/logger.js.map +1 -1
  38. package/dist/middleware/logger.test.js +41 -1
  39. package/dist/middleware/logger.test.js.map +1 -1
  40. package/dist/realtime/live-events-ws.d.ts +4 -1
  41. package/dist/realtime/live-events-ws.d.ts.map +1 -1
  42. package/dist/realtime/live-events-ws.js +33 -3
  43. package/dist/realtime/live-events-ws.js.map +1 -1
  44. package/dist/routes/access.helpers.d.ts +1 -1
  45. package/dist/routes/chats.runtime-controls.d.ts +1 -1
  46. package/dist/routes/local-account-auth.d.ts +9 -0
  47. package/dist/routes/local-account-auth.d.ts.map +1 -0
  48. package/dist/routes/local-account-auth.js +67 -0
  49. package/dist/routes/local-account-auth.js.map +1 -0
  50. package/dist/services/access.d.ts +3 -3
  51. package/dist/services/activity.d.ts +3 -3
  52. package/dist/services/agents.d.ts +13 -13
  53. package/dist/services/approvals.d.ts +4 -4
  54. package/dist/services/assets.d.ts +1 -1
  55. package/dist/services/automation-chat-output.d.ts +3 -3
  56. package/dist/services/board-auth.d.ts +1 -1
  57. package/dist/services/browser-capability.d.ts +5 -2
  58. package/dist/services/browser-capability.d.ts.map +1 -1
  59. package/dist/services/browser-capability.js +14 -2
  60. package/dist/services/browser-capability.js.map +1 -1
  61. package/dist/services/browser-capability.test.d.ts +2 -0
  62. package/dist/services/browser-capability.test.d.ts.map +1 -0
  63. package/dist/services/browser-capability.test.js +25 -0
  64. package/dist/services/browser-capability.test.js.map +1 -0
  65. package/dist/services/chat-annotation-copy-lineage.d.ts +3 -3
  66. package/dist/services/chat-generation-protocol.d.ts +27 -27
  67. package/dist/services/chat-queued-message-materialization.d.ts +2 -2
  68. package/dist/services/chat-work-manifest.d.ts.map +1 -1
  69. package/dist/services/chat-work-manifest.js +112 -4
  70. package/dist/services/chat-work-manifest.js.map +1 -1
  71. package/dist/services/chats.create.d.ts +2 -2
  72. package/dist/services/chats.d.ts +132 -132
  73. package/dist/services/chats.helpers.d.ts +2 -2
  74. package/dist/services/finance.d.ts +1 -1
  75. package/dist/services/goals.d.ts +2 -2
  76. package/dist/services/integrations/agent-integrations.d.ts +1 -1
  77. package/dist/services/integrations/custom-integrations.d.ts +2 -2
  78. package/dist/services/integrations/feishu/user-bindings.d.ts +1 -1
  79. package/dist/services/issue-approvals.d.ts +1 -1
  80. package/dist/services/issues.comments-attachments.d.ts +1 -1
  81. package/dist/services/issues.d.ts +4 -4
  82. package/dist/services/issues.d.ts.map +1 -1
  83. package/dist/services/issues.js +75 -10
  84. package/dist/services/issues.js.map +1 -1
  85. package/dist/services/local-account-auth.d.ts +94 -0
  86. package/dist/services/local-account-auth.d.ts.map +1 -0
  87. package/dist/services/local-account-auth.js +470 -0
  88. package/dist/services/local-account-auth.js.map +1 -0
  89. package/dist/services/local-account-session-revocation.d.ts +7 -0
  90. package/dist/services/local-account-session-revocation.d.ts.map +1 -0
  91. package/dist/services/local-account-session-revocation.js +19 -0
  92. package/dist/services/local-account-session-revocation.js.map +1 -0
  93. package/dist/services/messenger.d.ts +5 -5
  94. package/dist/services/orgs.d.ts +1 -1
  95. package/dist/services/plugin-registry.d.ts +8 -8
  96. package/dist/services/projects.d.ts +1 -1
  97. package/dist/services/run-events.d.ts +1 -1
  98. package/dist/services/secrets.d.ts +1 -1
  99. package/dist/services/workspace-runtime.services.d.ts +2 -2
  100. package/package.json +14 -13
  101. package/ui-dist/assets/{LibraryLiveSurface-DpX1FaVs.js → LibraryLiveSurface-CUgoFYvG.js} +1 -1
  102. package/ui-dist/assets/{abnfDiagram-VRR7QNED-BFqFFwVV.js → abnfDiagram-VRR7QNED-BdM6grBK.js} +1 -1
  103. package/ui-dist/assets/{arc-Dd7KXY7D.js → arc-B8Tukeix.js} +1 -1
  104. package/ui-dist/assets/{architectureDiagram-ZJ3FMSHR-CzfeXkyX.js → architectureDiagram-ZJ3FMSHR-DP_lYJIS.js} +1 -1
  105. package/ui-dist/assets/{blockDiagram-677ZJIJ3-BSiL3FsI.js → blockDiagram-677ZJIJ3-D_QKZNjP.js} +1 -1
  106. package/ui-dist/assets/{c4Diagram-LMCZKHZV-BjT_aSi4.js → c4Diagram-LMCZKHZV-DJwVavN4.js} +1 -1
  107. package/ui-dist/assets/channel-Cd4sqN24.js +1 -0
  108. package/ui-dist/assets/{chunk-2Q5K7J3B-CtGd7b4J.js → chunk-2Q5K7J3B-BjdKg2cx.js} +1 -1
  109. package/ui-dist/assets/{chunk-32BRIVSS-DLOelT5l.js → chunk-32BRIVSS-C_u4l725.js} +1 -1
  110. package/ui-dist/assets/{chunk-5VM5RSS4-BUPqCqOC.js → chunk-5VM5RSS4-DtzEQCc9.js} +1 -1
  111. package/ui-dist/assets/{chunk-EX3LRPZG-CIzOp80L.js → chunk-EX3LRPZG-Ds_gCBVz.js} +1 -1
  112. package/ui-dist/assets/{chunk-JWPE2WC7-CQ6lawYC.js → chunk-JWPE2WC7-CHX9VuQf.js} +1 -1
  113. package/ui-dist/assets/{chunk-MOJQB5TN-6yDvAm1z.js → chunk-MOJQB5TN-D_pj9OWe.js} +1 -1
  114. package/ui-dist/assets/{chunk-RYQCIY6F-BsWFsIK3.js → chunk-RYQCIY6F-aMYmnUaJ.js} +1 -1
  115. package/ui-dist/assets/{chunk-V7JOEXUC-C90E5Ayd.js → chunk-V7JOEXUC-Db3LrL-P.js} +1 -1
  116. package/ui-dist/assets/{chunk-VR4S4FIN-CRCxXqZI.js → chunk-VR4S4FIN-BssuUpMr.js} +1 -1
  117. package/ui-dist/assets/{chunk-XXDRQBXY-B3don1Cz.js → chunk-XXDRQBXY-DVzY-_Tv.js} +1 -1
  118. package/ui-dist/assets/classDiagram-OUVF2IWQ-Bi3tsM-q.js +1 -0
  119. package/ui-dist/assets/classDiagram-v2-EOCWNBFH-Bi3tsM-q.js +1 -0
  120. package/ui-dist/assets/{cose-bilkent-JH36ORCC-DEP7BeI3.js → cose-bilkent-JH36ORCC-Ch-fM2pW.js} +1 -1
  121. package/ui-dist/assets/{cynefin-VYW2F7L2-CJVhT4Mh.js → cynefin-VYW2F7L2-C7gJeesr.js} +1 -1
  122. package/ui-dist/assets/{cynefinDiagram-TSTJHNR4-BaE-6YFm.js → cynefinDiagram-TSTJHNR4-BwMpD6aZ.js} +1 -1
  123. package/ui-dist/assets/{dagre-VKFMJZFB-DjLUyC8r.js → dagre-VKFMJZFB-8TgHu2tj.js} +1 -1
  124. package/ui-dist/assets/{diagram-FQU43EPY-qFPhWckH.js → diagram-FQU43EPY-ChODej8C.js} +1 -1
  125. package/ui-dist/assets/{diagram-G47NLZAW-x2c8-YSi.js → diagram-G47NLZAW-CVq1GXvV.js} +1 -1
  126. package/ui-dist/assets/{diagram-NH7WQ7WH-DVJZnTdn.js → diagram-NH7WQ7WH-D1IO7xe3.js} +1 -1
  127. package/ui-dist/assets/{diagram-OA4YK3LP-CGmPSCZl.js → diagram-OA4YK3LP-CKlttJto.js} +1 -1
  128. package/ui-dist/assets/{diagram-WEI45ONY-CVrk0gkQ.js → diagram-WEI45ONY-DigjsORo.js} +1 -1
  129. package/ui-dist/assets/{ebnfDiagram-CCIWWBDH-ERUk1pe4.js → ebnfDiagram-CCIWWBDH-CZwO7RGO.js} +1 -1
  130. package/ui-dist/assets/{erDiagram-Q63AITRT-CTI3QQAr.js → erDiagram-Q63AITRT-C3fFVPod.js} +1 -1
  131. package/ui-dist/assets/{flowDiagram-23GEKE2U-CEsaHxu3.js → flowDiagram-23GEKE2U-CpccWfFo.js} +1 -1
  132. package/ui-dist/assets/{ganttDiagram-NO4QXBWP-gzxhoaFK.js → ganttDiagram-NO4QXBWP-g3KL--4W.js} +1 -1
  133. package/ui-dist/assets/{gitGraphDiagram-IHSO6WYX-DTL52PDj.js → gitGraphDiagram-IHSO6WYX-Bn59AW1B.js} +1 -1
  134. package/ui-dist/assets/{graph-Amp0nqof.js → graph-LZSMW9ku.js} +1 -1
  135. package/ui-dist/assets/{index-CSzq_DKH.js → index-BG46qMXw.js} +1 -1
  136. package/ui-dist/assets/{index-BHESmW5p.js → index-BI9d3zXw.js} +1 -1
  137. package/ui-dist/assets/{index-xJT81p6g.js → index-BLUJslyp.js} +1 -1
  138. package/ui-dist/assets/{index-msFHymhK.js → index-BQv2nBgV.js} +1 -1
  139. package/ui-dist/assets/{index-CPDrDmuH.js → index-BkbdH2n-.js} +1 -1
  140. package/ui-dist/assets/{index-BV7fBmZ3.js → index-BqhkUdAT.js} +1 -1
  141. package/ui-dist/assets/index-C-qWhcfC.css +1 -0
  142. package/ui-dist/assets/{index-BcVy8ihr.js → index-C3e6slEn.js} +1 -1
  143. package/ui-dist/assets/{index-DYrmKlSC.js → index-C5hYxLM9.js} +1 -1
  144. package/ui-dist/assets/{index-CRXGUaWn.js → index-CLETiubs.js} +1 -1
  145. package/ui-dist/assets/{index-gr3tM_aY.js → index-CLnCobCG.js} +1 -1
  146. package/ui-dist/assets/{index-HtRgAJ4M.js → index-CPIoQKcG.js} +1 -1
  147. package/ui-dist/assets/{index-B1m6wL07.js → index-CQLLvEua.js} +1 -1
  148. package/ui-dist/assets/{index-DoitzL1N.js → index-CVwGLbgm.js} +1 -1
  149. package/ui-dist/assets/{index-v7MQxR2M.js → index-ChTD9DV4.js} +1 -1
  150. package/ui-dist/assets/{index-CepgLuN-.js → index-CiyYjAsy.js} +1 -1
  151. package/ui-dist/assets/{index-BI4_BIid.js → index-CrU5g0XU.js} +569 -544
  152. package/ui-dist/assets/{index-QQAVYTub.js → index-EqVfudOJ.js} +1 -1
  153. package/ui-dist/assets/{index-D___9Wjc.js → index-ZFb9ZHAH.js} +1 -1
  154. package/ui-dist/assets/{infoDiagram-FWYZ7A6U-DGE65dHv.js → infoDiagram-FWYZ7A6U-uxPSmmcv.js} +1 -1
  155. package/ui-dist/assets/{ishikawaDiagram-FXEZZL3T-Cd4UBCAL.js → ishikawaDiagram-FXEZZL3T-BeKQmaaL.js} +1 -1
  156. package/ui-dist/assets/{journeyDiagram-5HDEW3XC-DGgKZBkH.js → journeyDiagram-5HDEW3XC-Cnqh1Fyp.js} +1 -1
  157. package/ui-dist/assets/{kanban-definition-HUTT4EX6-BKEVE30G.js → kanban-definition-HUTT4EX6-DRvoG8e7.js} +1 -1
  158. package/ui-dist/assets/{layout-ok0OdtMA.js → layout-By7bOuHZ.js} +1 -1
  159. package/ui-dist/assets/{linear-BIUm0r-d.js → linear-D-kfwm1O.js} +1 -1
  160. package/ui-dist/assets/{map-B3hrNe5c.js → map-d3zaWROJ.js} +1 -1
  161. package/ui-dist/assets/{mermaid.core-BB3ZW0W5.js → mermaid.core-1JtOXpMA.js} +4 -4
  162. package/ui-dist/assets/{mindmap-definition-LN4V7U3C-Ce2GzycL.js → mindmap-definition-LN4V7U3C-D8Jge-_m.js} +1 -1
  163. package/ui-dist/assets/{pegDiagram-2B236MQR-CsGZjyrh.js → pegDiagram-2B236MQR-UCd9-Gfd.js} +1 -1
  164. package/ui-dist/assets/{pieDiagram-ENE6RG2P-13XdwDXP.js → pieDiagram-ENE6RG2P-DffPYn-P.js} +1 -1
  165. package/ui-dist/assets/{quadrantDiagram-ABIIQ3AL-Dp1K1uSq.js → quadrantDiagram-ABIIQ3AL-Ds1lQ25G.js} +1 -1
  166. package/ui-dist/assets/{railroadDiagram-RFXS5EU6-Dw5jHw28.js → railroadDiagram-RFXS5EU6-P_pLStbY.js} +1 -1
  167. package/ui-dist/assets/{requirementDiagram-TGXJPOKE-C3_H_i7q.js → requirementDiagram-TGXJPOKE-E_1U7w_T.js} +1 -1
  168. package/ui-dist/assets/{sankeyDiagram-HTMAVEWB-DTEaptJZ.js → sankeyDiagram-HTMAVEWB-DFgwdZz7.js} +1 -1
  169. package/ui-dist/assets/{sequenceDiagram-DBY2YBRQ-DPbvDbuP.js → sequenceDiagram-DBY2YBRQ-CbI2EnTH.js} +1 -1
  170. package/ui-dist/assets/{sizeCapture-X5ZJPWSS-Ck2fmKhq.js → sizeCapture-X5ZJPWSS-Axl0diWc.js} +1 -1
  171. package/ui-dist/assets/{stateDiagram-2N3HPSRC-DpRZgrRj.js → stateDiagram-2N3HPSRC-DxZLENhX.js} +1 -1
  172. package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-KzYOpJ1T.js +1 -0
  173. package/ui-dist/assets/{swimlanes-5IMT3BWC-hhbRmwUj.js → swimlanes-5IMT3BWC-1G26qvUm.js} +2 -2
  174. package/ui-dist/assets/swimlanesDiagram-G3AALYLV--Vi3kUvi.js +8 -0
  175. package/ui-dist/assets/{timeline-definition-FHXFAJF6-DdDMc8Ts.js → timeline-definition-FHXFAJF6-B0Ha5bZS.js} +1 -1
  176. package/ui-dist/assets/{vennDiagram-L72KCM5P-o_kY0dM1.js → vennDiagram-L72KCM5P-BskD_1N5.js} +1 -1
  177. package/ui-dist/assets/{wardleyDiagram-EHGQE667-DSHITBPO.js → wardleyDiagram-EHGQE667-1wE4bYQ8.js} +1 -1
  178. package/ui-dist/assets/{xychartDiagram-FW5EYKEG-CDaFkU2E.js → xychartDiagram-FW5EYKEG-DfcOAfb8.js} +1 -1
  179. package/ui-dist/index.html +2 -2
  180. package/ui-dist/assets/channel-C3u-3GHU.js +0 -1
  181. package/ui-dist/assets/classDiagram-OUVF2IWQ-NsiQrj0J.js +0 -1
  182. package/ui-dist/assets/classDiagram-v2-EOCWNBFH-NsiQrj0J.js +0 -1
  183. package/ui-dist/assets/index-CThrdiOE.css +0 -1
  184. package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-DgWbRGjL.js +0 -1
  185. package/ui-dist/assets/swimlanesDiagram-G3AALYLV-DArbKvVx.js +0 -8
@@ -0,0 +1,94 @@
1
+ import type { Db } from "@rudderhq/db";
2
+ import { type OfflineGrantProof } from "@rudderhq/identity-core";
3
+ import type { IncomingHttpHeaders } from "node:http";
4
+ export type VerifiedServerExchange = {
5
+ issuer: string;
6
+ subject: string;
7
+ audience: string;
8
+ installationId: string;
9
+ jti: string;
10
+ expiresAt: Date;
11
+ email: string;
12
+ emailVerified: true;
13
+ name?: string | null;
14
+ };
15
+ export interface ServerExchangeVerifier {
16
+ verify(exchangeCode: string): Promise<VerifiedServerExchange>;
17
+ }
18
+ export type LocalAccountExchangePolicy = {
19
+ expectedIssuer: string;
20
+ audience: string;
21
+ installationId: string;
22
+ verifier: ServerExchangeVerifier;
23
+ /** Better Auth session secret used to sign its session cookie value. */
24
+ sessionSecret: string;
25
+ secureCookie?: boolean;
26
+ now?: () => Date;
27
+ offline?: {
28
+ identityKeyId: string;
29
+ identityPublicKeySpki: string;
30
+ expectedAccountId: string;
31
+ expectedDeviceId: string;
32
+ lastTrustedTimeMs: number;
33
+ localSignOutEpoch: number;
34
+ };
35
+ };
36
+ export type LocalSession = {
37
+ id: string;
38
+ userId: string;
39
+ expiresAt: Date;
40
+ setCookie: string;
41
+ };
42
+ export declare function createIdentityServerExchangeVerifier(options: {
43
+ identityOrigin: string;
44
+ expectedAudience: string;
45
+ expectedInstallationId: string;
46
+ fetch?: typeof globalThis.fetch;
47
+ }): ServerExchangeVerifier;
48
+ export declare function createLocalAccountSessionResolver(db: Db, options: {
49
+ sessionSecret: string;
50
+ secureCookie?: boolean;
51
+ }): (headers: IncomingHttpHeaders) => Promise<{
52
+ session: {
53
+ id: string;
54
+ userId: string;
55
+ };
56
+ user: {
57
+ id: string;
58
+ email: string;
59
+ name: string;
60
+ };
61
+ } | null>;
62
+ export declare function localAccountAuthService(db: Db, policy: LocalAccountExchangePolicy): {
63
+ redeem: (exchangeCode: string) => Promise<{
64
+ userId: string;
65
+ session: LocalSession;
66
+ }>;
67
+ redeemOffline: (input: {
68
+ grant: string;
69
+ proof: OfflineGrantProof;
70
+ devicePublicKeySpki: string;
71
+ }) => Promise<{
72
+ userId: string;
73
+ session: LocalSession;
74
+ nextTrustedTimeMs: number;
75
+ }>;
76
+ claimLegacyInstallation: (input: {
77
+ installationId: string;
78
+ issuer: string;
79
+ subject: string;
80
+ localUserId: string;
81
+ }) => Promise<{
82
+ status: "already_claimed";
83
+ localUserId: string;
84
+ orgIds: string[];
85
+ } | {
86
+ status: "claimed";
87
+ localUserId: string;
88
+ orgIds: string[];
89
+ }>;
90
+ revokeAllSessions: (localUserId: string) => Promise<{
91
+ revokedSessionCount: number;
92
+ }>;
93
+ };
94
+ //# sourceMappingURL=local-account-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-account-auth.d.ts","sourceRoot":"","sources":["../../src/services/local-account-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAWvC,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,yBAAyB,CAAC;AAUjC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAMrD,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,IAAI,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CAC/D;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,sBAAsB,CAAC;IACjC,wEAAwE;IACxE,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,OAAO,CAAC,EAAE;QACR,aAAa,EAAE,MAAM,CAAC;QACtB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,gBAAgB,EAAE,MAAM,CAAC;QACzB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AA4CF,wBAAgB,oCAAoC,CAAC,OAAO,EAAE;IAC5D,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC,GAAG,sBAAsB,CAyCzB;AA8BD,wBAAgB,iCAAiC,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE;IACjE,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,IAIe,SAAS,mBAAmB;;;;;;;;;;UAsB3C;AAiBD,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,0BAA0B;2BAC5C,MAAM,KAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,YAAY,CAAA;KAAE,CAAC;2BA0G3D;QAClC,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,iBAAiB,CAAC;QACzB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,KAAG,OAAO,CAAC;QACV,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,YAAY,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;qCA+H4C;QAC5C,cAAc,EAAE,MAAM,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;KACrB;;;gBAoBmG,MAAM,EAAE;;;;;;qCAgG9D,MAAM;;;EA8BrD"}
@@ -0,0 +1,470 @@
1
+ import { activityLog, authSessions, authUsers, externalUserBindings, installationAccountBindings, instanceUserRoles, organizationMemberships, serverExchangeRedemptions, } from "@rudderhq/db";
2
+ import { offlineRequestBodyHash, verifyOfflineGrantAndProof, } from "@rudderhq/identity-core";
3
+ import { and, eq, lt, sql } from "drizzle-orm";
4
+ import { createHash, createHmac, createPublicKey, randomBytes, randomUUID, timingSafeEqual, } from "node:crypto";
5
+ import { conflict, forbidden, unauthorized } from "../errors.js";
6
+ const LOCAL_BOARD_USER_ID = "local-board";
7
+ const LOCAL_SESSION_TTL_MS = 30 * 24 * 60 * 60 * 1000;
8
+ function normalizeIssuer(value) {
9
+ return value.trim().replace(/\/+$/, "");
10
+ }
11
+ function assertExchangeClaims(claims, policy, now) {
12
+ if (normalizeIssuer(claims.issuer) !== normalizeIssuer(policy.expectedIssuer)) {
13
+ throw unauthorized("Server exchange issuer is not accepted");
14
+ }
15
+ if (claims.audience !== policy.audience) {
16
+ throw unauthorized("Server exchange audience does not match this installation");
17
+ }
18
+ if (claims.installationId !== policy.installationId) {
19
+ throw unauthorized("Server exchange installation does not match this runtime");
20
+ }
21
+ if (claims.expiresAt.getTime() <= now.getTime()) {
22
+ throw unauthorized("Server exchange code has expired");
23
+ }
24
+ if (!claims.jti.trim() || !claims.subject.trim() || !claims.emailVerified) {
25
+ throw unauthorized("Server exchange claims are incomplete");
26
+ }
27
+ }
28
+ function allowedIdentityOrigin(value) {
29
+ const url = new URL(value);
30
+ const isLoopback = url.protocol === "http:"
31
+ && (url.hostname === "127.0.0.1" || url.hostname === "localhost");
32
+ if (url.protocol !== "https:" && !isLoopback) {
33
+ throw new Error("Rudder Identity verifier requires HTTPS or an explicit loopback development origin");
34
+ }
35
+ if (url.username || url.password)
36
+ throw new Error("Rudder Identity origin cannot contain credentials");
37
+ return url.origin;
38
+ }
39
+ function requiredString(record, key, max = 512) {
40
+ const value = record[key];
41
+ if (typeof value !== "string" || !value.trim() || value.length > max) {
42
+ throw unauthorized("Rudder Identity returned invalid server exchange claims");
43
+ }
44
+ return value;
45
+ }
46
+ export function createIdentityServerExchangeVerifier(options) {
47
+ const identityOrigin = allowedIdentityOrigin(options.identityOrigin);
48
+ const request = options.fetch ?? globalThis.fetch;
49
+ return {
50
+ async verify(exchangeCode) {
51
+ const response = await request(new URL("/api/server/exchange/verify", identityOrigin), {
52
+ method: "POST",
53
+ headers: { "content-type": "application/json" },
54
+ body: JSON.stringify({
55
+ code: exchangeCode,
56
+ expected_audience: options.expectedAudience,
57
+ expected_installation_id: options.expectedInstallationId,
58
+ }),
59
+ });
60
+ if (!response.ok)
61
+ throw unauthorized("Rudder Identity rejected the server exchange");
62
+ const value = await response.json();
63
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
64
+ throw unauthorized("Rudder Identity returned invalid server exchange claims");
65
+ }
66
+ const record = value;
67
+ const expiresAt = new Date(requiredString(record, "expiresAt"));
68
+ const email = requiredString(record, "email", 320).trim().toLowerCase();
69
+ if (Number.isNaN(expiresAt.getTime()) || !email.includes("@")) {
70
+ throw unauthorized("Rudder Identity returned invalid server exchange claims");
71
+ }
72
+ // The exchange endpoint only emits users whose email was verified by
73
+ // Rudder Identity. The local runtime accepts that assertion exclusively
74
+ // from its pinned HTTPS (or explicit loopback-dev) issuer.
75
+ return {
76
+ issuer: requiredString(record, "issuer"),
77
+ subject: requiredString(record, "subject"),
78
+ audience: requiredString(record, "audience"),
79
+ installationId: requiredString(record, "installationId"),
80
+ jti: requiredString(record, "jti"),
81
+ expiresAt,
82
+ email,
83
+ emailVerified: true,
84
+ name: typeof record.name === "string" ? record.name : null,
85
+ };
86
+ },
87
+ };
88
+ }
89
+ function cookieValue(headers, name) {
90
+ const raw = Array.isArray(headers.cookie) ? headers.cookie.join(";") : headers.cookie;
91
+ if (!raw)
92
+ return null;
93
+ for (const part of raw.split(";")) {
94
+ const separator = part.indexOf("=");
95
+ if (separator < 0 || part.slice(0, separator).trim() !== name)
96
+ continue;
97
+ try {
98
+ return decodeURIComponent(part.slice(separator + 1).trim());
99
+ }
100
+ catch {
101
+ return null;
102
+ }
103
+ }
104
+ return null;
105
+ }
106
+ function verifySignedSessionToken(value, secret) {
107
+ const separator = value.lastIndexOf(".");
108
+ if (separator <= 0)
109
+ return null;
110
+ const token = value.slice(0, separator);
111
+ const supplied = Buffer.from(value.slice(separator + 1), "utf8");
112
+ const expected = Buffer.from(createHmac("sha256", secret).update(token).digest("base64"), "utf8");
113
+ if (supplied.length !== expected.length || !timingSafeEqual(supplied, expected))
114
+ return null;
115
+ return token;
116
+ }
117
+ export function createLocalAccountSessionResolver(db, options) {
118
+ const cookieName = options.secureCookie
119
+ ? "__Secure-better-auth.session_token"
120
+ : "better-auth.session_token";
121
+ return async (headers) => {
122
+ const signed = cookieValue(headers, cookieName);
123
+ const token = signed ? verifySignedSessionToken(signed, options.sessionSecret) : null;
124
+ if (!token)
125
+ return null;
126
+ const row = await db
127
+ .select({
128
+ sessionId: authSessions.id,
129
+ userId: authUsers.id,
130
+ email: authUsers.email,
131
+ name: authUsers.name,
132
+ expiresAt: authSessions.expiresAt,
133
+ })
134
+ .from(authSessions)
135
+ .innerJoin(authUsers, eq(authSessions.userId, authUsers.id))
136
+ .where(eq(authSessions.token, token))
137
+ .then((rows) => rows[0] ?? null);
138
+ if (!row || row.expiresAt.getTime() <= Date.now())
139
+ return null;
140
+ return {
141
+ session: { id: row.sessionId, userId: row.userId },
142
+ user: { id: row.userId, email: row.email, name: row.name },
143
+ };
144
+ };
145
+ }
146
+ function localSessionCookie(token, expiresAt, secure, secret) {
147
+ const signature = createHmac("sha256", secret).update(token).digest("base64");
148
+ const signedToken = `${token}.${signature}`;
149
+ const cookieName = secure ? "__Secure-better-auth.session_token" : "better-auth.session_token";
150
+ const parts = [
151
+ `${cookieName}=${encodeURIComponent(signedToken)}`,
152
+ "Path=/",
153
+ "HttpOnly",
154
+ "SameSite=Lax",
155
+ `Expires=${expiresAt.toUTCString()}`,
156
+ ];
157
+ if (secure)
158
+ parts.push("Secure");
159
+ return parts.join("; ");
160
+ }
161
+ export function localAccountAuthService(db, policy) {
162
+ async function redeem(exchangeCode) {
163
+ const claims = await policy.verifier.verify(exchangeCode);
164
+ const now = policy.now?.() ?? new Date();
165
+ assertExchangeClaims(claims, policy, now);
166
+ const result = await db.transaction(async (tx) => {
167
+ const redemption = await tx
168
+ .insert(serverExchangeRedemptions)
169
+ .values({
170
+ issuer: normalizeIssuer(claims.issuer),
171
+ jti: claims.jti,
172
+ audience: claims.audience,
173
+ subject: claims.subject,
174
+ expiresAt: claims.expiresAt,
175
+ })
176
+ .onConflictDoNothing({
177
+ target: [serverExchangeRedemptions.issuer, serverExchangeRedemptions.jti],
178
+ })
179
+ .returning({ id: serverExchangeRedemptions.id })
180
+ .then((rows) => rows[0] ?? null);
181
+ if (!redemption)
182
+ throw conflict("Server exchange code has already been redeemed");
183
+ await tx.execute(sql `
184
+ select pg_advisory_xact_lock(
185
+ hashtext(${normalizeIssuer(claims.issuer)}),
186
+ hashtext(${claims.subject})
187
+ )
188
+ `);
189
+ let binding = await tx
190
+ .select({ localUserId: externalUserBindings.localUserId })
191
+ .from(externalUserBindings)
192
+ .where(and(eq(externalUserBindings.issuer, normalizeIssuer(claims.issuer)), eq(externalUserBindings.subject, claims.subject)))
193
+ .then((rows) => rows[0] ?? null);
194
+ if (!binding) {
195
+ const userId = randomUUID();
196
+ await tx.insert(authUsers).values({
197
+ id: userId,
198
+ name: claims.name?.trim() || claims.email,
199
+ email: claims.email,
200
+ emailVerified: true,
201
+ createdAt: now,
202
+ updatedAt: now,
203
+ });
204
+ binding = await tx
205
+ .insert(externalUserBindings)
206
+ .values({
207
+ issuer: normalizeIssuer(claims.issuer),
208
+ subject: claims.subject,
209
+ localUserId: userId,
210
+ lastVerifiedAt: now,
211
+ })
212
+ .returning({ localUserId: externalUserBindings.localUserId })
213
+ .then((rows) => rows[0]);
214
+ }
215
+ else {
216
+ await tx
217
+ .update(externalUserBindings)
218
+ .set({ lastVerifiedAt: now })
219
+ .where(and(eq(externalUserBindings.issuer, normalizeIssuer(claims.issuer)), eq(externalUserBindings.subject, claims.subject)));
220
+ }
221
+ const sessionId = randomUUID();
222
+ const token = randomBytes(32).toString("base64url");
223
+ const expiresAt = new Date(now.getTime() + LOCAL_SESSION_TTL_MS);
224
+ await tx.insert(authSessions).values({
225
+ id: sessionId,
226
+ token,
227
+ userId: binding.localUserId,
228
+ expiresAt,
229
+ createdAt: now,
230
+ updatedAt: now,
231
+ });
232
+ await tx
233
+ .update(serverExchangeRedemptions)
234
+ .set({ localUserId: binding.localUserId })
235
+ .where(eq(serverExchangeRedemptions.id, redemption.id));
236
+ return {
237
+ userId: binding.localUserId,
238
+ session: {
239
+ id: sessionId,
240
+ userId: binding.localUserId,
241
+ expiresAt,
242
+ setCookie: localSessionCookie(token, expiresAt, policy.secureCookie ?? true, policy.sessionSecret),
243
+ },
244
+ };
245
+ });
246
+ return result;
247
+ }
248
+ async function redeemOffline(input) {
249
+ const offline = policy.offline;
250
+ if (!offline)
251
+ throw unauthorized("Offline Grant authentication is unavailable");
252
+ const now = policy.now?.() ?? new Date();
253
+ let verified;
254
+ try {
255
+ verified = verifyOfflineGrantAndProof({
256
+ grant: input.grant,
257
+ proof: input.proof,
258
+ identityPublicKey: createPublicKey({
259
+ key: Buffer.from(offline.identityPublicKeySpki, "base64url"),
260
+ format: "der",
261
+ type: "spki",
262
+ }),
263
+ expectedKeyId: offline.identityKeyId,
264
+ devicePublicKey: createPublicKey({
265
+ key: Buffer.from(input.devicePublicKeySpki, "base64url"),
266
+ format: "der",
267
+ type: "spki",
268
+ }),
269
+ expectedIssuer: policy.expectedIssuer,
270
+ expectedInstallationId: policy.installationId,
271
+ expectedDeviceId: offline.expectedDeviceId,
272
+ expectedAccountId: offline.expectedAccountId,
273
+ expectedMethod: "POST",
274
+ expectedPath: "/api/auth/local-offline",
275
+ expectedBodyHash: offlineRequestBodyHash(""),
276
+ nowMs: now.getTime(),
277
+ lastTrustedTimeMs: offline.lastTrustedTimeMs,
278
+ localSignOutEpoch: offline.localSignOutEpoch,
279
+ // Durable consumption happens in the transaction below, after all
280
+ // cryptographic and binding checks have passed.
281
+ consumeNonce: () => true,
282
+ });
283
+ }
284
+ catch {
285
+ throw unauthorized("Offline Grant proof was rejected");
286
+ }
287
+ const result = await db.transaction(async (tx) => {
288
+ await tx
289
+ .delete(serverExchangeRedemptions)
290
+ .where(lt(serverExchangeRedemptions.expiresAt, now));
291
+ const nonceHash = createHash("sha256")
292
+ .update(input.proof.payload.nonce)
293
+ .digest("base64url");
294
+ const consumed = await tx
295
+ .insert(serverExchangeRedemptions)
296
+ .values({
297
+ issuer: normalizeIssuer(verified.claims.issuer),
298
+ jti: `offline:${verified.claims.jti}:${nonceHash}`,
299
+ audience: verified.claims.audience,
300
+ subject: verified.claims.accountId,
301
+ expiresAt: new Date(verified.claims.expiresAtMs),
302
+ })
303
+ .onConflictDoNothing({
304
+ target: [serverExchangeRedemptions.issuer, serverExchangeRedemptions.jti],
305
+ })
306
+ .returning({ id: serverExchangeRedemptions.id })
307
+ .then((rows) => rows[0] ?? null);
308
+ if (!consumed)
309
+ throw conflict("Offline Grant proof has already been redeemed");
310
+ const binding = await tx
311
+ .select({ localUserId: externalUserBindings.localUserId })
312
+ .from(externalUserBindings)
313
+ .where(and(eq(externalUserBindings.issuer, normalizeIssuer(verified.claims.issuer)), eq(externalUserBindings.subject, verified.claims.accountId)))
314
+ .then((rows) => rows[0] ?? null);
315
+ if (!binding)
316
+ throw forbidden("Offline Grant account is not bound to this Local Workspace");
317
+ const installation = await tx
318
+ .select({ localUserId: installationAccountBindings.localUserId })
319
+ .from(installationAccountBindings)
320
+ .where(and(eq(installationAccountBindings.installationId, policy.installationId), eq(installationAccountBindings.issuer, normalizeIssuer(verified.claims.issuer)), eq(installationAccountBindings.subject, verified.claims.accountId), eq(installationAccountBindings.localUserId, binding.localUserId)))
321
+ .then((rows) => rows[0] ?? null);
322
+ if (!installation)
323
+ throw forbidden("Offline Grant does not match the claimed Local Workspace");
324
+ const sessionId = randomUUID();
325
+ const token = randomBytes(32).toString("base64url");
326
+ const expiresAt = new Date(Math.min(now.getTime() + LOCAL_SESSION_TTL_MS, verified.claims.expiresAtMs));
327
+ await tx.insert(authSessions).values({
328
+ id: sessionId,
329
+ token,
330
+ userId: binding.localUserId,
331
+ expiresAt,
332
+ createdAt: now,
333
+ updatedAt: now,
334
+ });
335
+ await tx
336
+ .update(serverExchangeRedemptions)
337
+ .set({ localUserId: binding.localUserId })
338
+ .where(eq(serverExchangeRedemptions.id, consumed.id));
339
+ return {
340
+ userId: binding.localUserId,
341
+ nextTrustedTimeMs: verified.nextTrustedTimeMs,
342
+ session: {
343
+ id: sessionId,
344
+ userId: binding.localUserId,
345
+ expiresAt,
346
+ setCookie: localSessionCookie(token, expiresAt, policy.secureCookie ?? true, policy.sessionSecret),
347
+ },
348
+ };
349
+ });
350
+ // The server process must advance its own trusted-time floor immediately;
351
+ // Desktop persists the same returned value for the next process start.
352
+ offline.lastTrustedTimeMs = Math.max(offline.lastTrustedTimeMs, result.nextTrustedTimeMs);
353
+ return result;
354
+ }
355
+ async function claimLegacyInstallation(input) {
356
+ return db.transaction(async (tx) => {
357
+ await tx.execute(sql `select pg_advisory_xact_lock(hashtext(${input.installationId}))`);
358
+ const existing = await tx
359
+ .select()
360
+ .from(installationAccountBindings)
361
+ .where(eq(installationAccountBindings.installationId, input.installationId))
362
+ .then((rows) => rows[0] ?? null);
363
+ if (existing &&
364
+ (normalizeIssuer(existing.issuer) !== normalizeIssuer(input.issuer) ||
365
+ existing.subject !== input.subject ||
366
+ existing.localUserId !== input.localUserId)) {
367
+ throw forbidden("This Rudder installation is already claimed by another account");
368
+ }
369
+ if (existing) {
370
+ return { status: "already_claimed", localUserId: existing.localUserId, orgIds: [] };
371
+ }
372
+ const externalBinding = await tx
373
+ .select({ localUserId: externalUserBindings.localUserId })
374
+ .from(externalUserBindings)
375
+ .where(and(eq(externalUserBindings.issuer, normalizeIssuer(input.issuer)), eq(externalUserBindings.subject, input.subject), eq(externalUserBindings.localUserId, input.localUserId)))
376
+ .then((rows) => rows[0] ?? null);
377
+ if (!externalBinding)
378
+ throw forbidden("The local user does not match the authenticated Rudder Account");
379
+ const legacyMemberships = await tx
380
+ .select()
381
+ .from(organizationMemberships)
382
+ .where(and(eq(organizationMemberships.principalType, "user"), eq(organizationMemberships.principalId, LOCAL_BOARD_USER_ID), eq(organizationMemberships.status, "active")));
383
+ await tx.insert(installationAccountBindings).values({
384
+ installationId: input.installationId,
385
+ issuer: normalizeIssuer(input.issuer),
386
+ subject: input.subject,
387
+ localUserId: input.localUserId,
388
+ });
389
+ await tx
390
+ .insert(instanceUserRoles)
391
+ .values({ userId: input.localUserId, role: "instance_admin" })
392
+ .onConflictDoNothing({
393
+ target: [instanceUserRoles.userId, instanceUserRoles.role],
394
+ });
395
+ await tx
396
+ .delete(instanceUserRoles)
397
+ .where(and(eq(instanceUserRoles.userId, LOCAL_BOARD_USER_ID), eq(instanceUserRoles.role, "instance_admin")));
398
+ for (const membership of legacyMemberships) {
399
+ await tx
400
+ .insert(organizationMemberships)
401
+ .values({
402
+ orgId: membership.orgId,
403
+ principalType: "user",
404
+ principalId: input.localUserId,
405
+ status: "active",
406
+ membershipRole: membership.membershipRole,
407
+ })
408
+ .onConflictDoUpdate({
409
+ target: [
410
+ organizationMemberships.orgId,
411
+ organizationMemberships.principalType,
412
+ organizationMemberships.principalId,
413
+ ],
414
+ set: {
415
+ status: "active",
416
+ membershipRole: membership.membershipRole,
417
+ updatedAt: new Date(),
418
+ },
419
+ });
420
+ await tx
421
+ .update(organizationMemberships)
422
+ .set({ status: "revoked", updatedAt: new Date() })
423
+ .where(eq(organizationMemberships.id, membership.id));
424
+ await tx.insert(activityLog).values({
425
+ orgId: membership.orgId,
426
+ actorType: "user",
427
+ actorId: input.localUserId,
428
+ action: "installation.legacy_local_claimed",
429
+ entityType: "installation",
430
+ entityId: input.installationId,
431
+ details: {
432
+ priorPrincipalId: LOCAL_BOARD_USER_ID,
433
+ issuer: normalizeIssuer(input.issuer),
434
+ },
435
+ });
436
+ }
437
+ return {
438
+ status: "claimed",
439
+ localUserId: input.localUserId,
440
+ orgIds: legacyMemberships.map((membership) => membership.orgId),
441
+ };
442
+ });
443
+ }
444
+ async function revokeAllSessions(localUserId) {
445
+ return db.transaction(async (tx) => {
446
+ const revoked = await tx
447
+ .delete(authSessions)
448
+ .where(eq(authSessions.userId, localUserId))
449
+ .returning({ id: authSessions.id });
450
+ const memberships = await tx
451
+ .select({ orgId: organizationMemberships.orgId })
452
+ .from(organizationMemberships)
453
+ .where(and(eq(organizationMemberships.principalType, "user"), eq(organizationMemberships.principalId, localUserId), eq(organizationMemberships.status, "active")));
454
+ if (memberships.length > 0) {
455
+ await tx.insert(activityLog).values(memberships.map(({ orgId }) => ({
456
+ orgId,
457
+ actorType: "user",
458
+ actorId: localUserId,
459
+ action: "account.local_sessions_revoked",
460
+ entityType: "user",
461
+ entityId: localUserId,
462
+ details: { revokedSessionCount: revoked.length },
463
+ })));
464
+ }
465
+ return { revokedSessionCount: revoked.length };
466
+ });
467
+ }
468
+ return { redeem, redeemOffline, claimLegacyInstallation, revokeAllSessions };
469
+ }
470
+ //# sourceMappingURL=local-account-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-account-auth.js","sourceRoot":"","sources":["../../src/services/local-account-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface LocalAccountSessionRevocation {
2
+ publish(userId: string): void;
3
+ subscribe(listener: (userId: string) => void): () => void;
4
+ generation(): number;
5
+ }
6
+ export declare function createLocalAccountSessionRevocation(): LocalAccountSessionRevocation;
7
+ //# sourceMappingURL=local-account-session-revocation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-account-session-revocation.d.ts","sourceRoot":"","sources":["../../src/services/local-account-session-revocation.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,6BAA6B;IAC5C,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC1D,UAAU,IAAI,MAAM,CAAC;CACtB;AAED,wBAAgB,mCAAmC,IAAI,6BAA6B,CAiBnF"}
@@ -0,0 +1,19 @@
1
+ export function createLocalAccountSessionRevocation() {
2
+ const listeners = new Set();
3
+ let generation = 0;
4
+ return {
5
+ publish(userId) {
6
+ generation += 1;
7
+ for (const listener of listeners)
8
+ listener(userId);
9
+ },
10
+ subscribe(listener) {
11
+ listeners.add(listener);
12
+ return () => listeners.delete(listener);
13
+ },
14
+ generation() {
15
+ return generation;
16
+ },
17
+ };
18
+ }
19
+ //# sourceMappingURL=local-account-session-revocation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-account-session-revocation.js","sourceRoot":"","sources":["../../src/services/local-account-session-revocation.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,mCAAmC;IACjD,MAAM,SAAS,GAAG,IAAI,GAAG,EAA4B,CAAC;IACtD,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,OAAO;QACL,OAAO,CAAC,MAAM;YACZ,UAAU,IAAI,CAAC,CAAC;YAChB,KAAK,MAAM,QAAQ,IAAI,SAAS;gBAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC;QACD,SAAS,CAAC,QAAQ;YAChB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QACD,UAAU;YACR,OAAO,UAAU,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC"}