studiograph 1.3.3-next.9 → 1.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/orchestrator.d.ts +2 -0
- package/dist/agent/orchestrator.js +13 -5
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/skills/sync-configuration.md +4 -29
- package/dist/agent/skills/sync-setup.md +2 -4
- package/dist/agent/tools/ops-tools.js +15 -126
- package/dist/agent/tools/ops-tools.js.map +1 -1
- package/dist/agent/tools/sync-tools.d.ts +7 -6
- package/dist/agent/tools/sync-tools.js +205 -178
- package/dist/agent/tools/sync-tools.js.map +1 -1
- package/dist/cli/commands/about.d.ts +13 -0
- package/dist/cli/commands/about.js +97 -0
- package/dist/cli/commands/about.js.map +1 -0
- package/dist/cli/commands/clone.d.ts +5 -2
- package/dist/cli/commands/clone.js +131 -62
- package/dist/cli/commands/clone.js.map +1 -1
- package/dist/cli/commands/connector.d.ts +2 -16
- package/dist/cli/commands/connector.js +32 -109
- package/dist/cli/commands/connector.js.map +1 -1
- package/dist/cli/commands/deploy.d.ts +0 -1
- package/dist/cli/commands/deploy.js +13 -103
- package/dist/cli/commands/deploy.js.map +1 -1
- package/dist/cli/commands/init.js +6 -93
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/join.js +51 -1
- package/dist/cli/commands/join.js.map +1 -1
- package/dist/cli/commands/redeploy.js +1 -2
- package/dist/cli/commands/redeploy.js.map +1 -1
- package/dist/cli/commands/serve.d.ts +1 -3
- package/dist/cli/commands/serve.js +29 -109
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/start.js +1 -1
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/sync-collection.d.ts +14 -0
- package/dist/cli/commands/sync-collection.js +366 -0
- package/dist/cli/commands/sync-collection.js.map +1 -0
- package/dist/cli/commands/sync.js +518 -82
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/index.js +12 -30
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/setup-wizard.d.ts +0 -13
- package/dist/cli/setup-wizard.js +6 -81
- package/dist/cli/setup-wizard.js.map +1 -1
- package/dist/core/types.d.ts +140 -21
- package/dist/core/types.js +15 -4
- package/dist/core/types.js.map +1 -1
- package/dist/core/workspace.d.ts +11 -4
- package/dist/core/workspace.js +61 -26
- package/dist/core/workspace.js.map +1 -1
- package/dist/integrations/asana.d.ts +26 -0
- package/dist/integrations/asana.js +77 -0
- package/dist/integrations/asana.js.map +1 -0
- package/dist/integrations/figma-local.d.ts +16 -0
- package/dist/integrations/figma-local.js +10 -0
- package/dist/integrations/figma-local.js.map +1 -0
- package/dist/integrations/figma.d.ts +17 -0
- package/dist/integrations/figma.js +16 -0
- package/dist/integrations/figma.js.map +1 -0
- package/dist/integrations/granola.d.ts +24 -0
- package/dist/integrations/granola.js +59 -0
- package/dist/integrations/granola.js.map +1 -0
- package/dist/integrations/linear.d.ts +14 -0
- package/dist/integrations/linear.js +70 -0
- package/dist/integrations/linear.js.map +1 -0
- package/dist/integrations/paper-local.d.ts +14 -0
- package/dist/integrations/paper-local.js +10 -0
- package/dist/integrations/paper-local.js.map +1 -0
- package/dist/integrations/paper.d.ts +2 -0
- package/dist/integrations/paper.js +10 -0
- package/dist/integrations/paper.js.map +1 -0
- package/dist/integrations/pipedrive.d.ts +26 -0
- package/dist/integrations/pipedrive.js +97 -0
- package/dist/integrations/pipedrive.js.map +1 -0
- package/dist/integrations/registry.d.ts +15 -0
- package/dist/integrations/registry.js +27 -0
- package/dist/integrations/registry.js.map +1 -0
- package/dist/integrations/types.d.ts +34 -0
- package/dist/integrations/types.js +9 -0
- package/dist/integrations/types.js.map +1 -0
- package/dist/mcp/connector-manager.d.ts +45 -31
- package/dist/mcp/connector-manager.js +164 -116
- package/dist/mcp/connector-manager.js.map +1 -1
- package/dist/mcp/server-oauth-provider.d.ts +56 -0
- package/dist/mcp/server-oauth-provider.js +138 -0
- package/dist/mcp/server-oauth-provider.js.map +1 -0
- package/dist/server/chrome/chrome.css +142 -28
- package/dist/server/chrome/chrome.js +51 -25
- package/dist/server/collab-authority.d.ts +70 -0
- package/dist/server/collab-authority.js +218 -0
- package/dist/server/collab-authority.js.map +1 -0
- package/dist/server/collab.d.ts +29 -0
- package/dist/server/collab.js +195 -0
- package/dist/server/collab.js.map +1 -0
- package/dist/server/commit-scheduler.d.ts +1 -1
- package/dist/server/commit-scheduler.js +18 -4
- package/dist/server/commit-scheduler.js.map +1 -1
- package/dist/server/index.d.ts +0 -2
- package/dist/server/index.js +89 -18
- package/dist/server/index.js.map +1 -1
- package/dist/server/routes/auth-api.d.ts +6 -0
- package/dist/server/routes/auth-api.js +55 -0
- package/dist/server/routes/auth-api.js.map +1 -1
- package/dist/server/routes/collab.d.ts +6 -0
- package/dist/server/routes/collab.js +10 -0
- package/dist/server/routes/collab.js.map +1 -0
- package/dist/server/routes/git-http.d.ts +1 -1
- package/dist/server/routes/git-http.js +53 -15
- package/dist/server/routes/git-http.js.map +1 -1
- package/dist/server/routes/graph-api.d.ts +2 -2
- package/dist/server/routes/graph-api.js +59 -55
- package/dist/server/routes/graph-api.js.map +1 -1
- package/dist/server/routes/mcp.d.ts +12 -0
- package/dist/server/routes/mcp.js +35 -0
- package/dist/server/routes/mcp.js.map +1 -0
- package/dist/server/routes/permissions-api.d.ts +2 -1
- package/dist/server/routes/permissions-api.js +16 -2
- package/dist/server/routes/permissions-api.js.map +1 -1
- package/dist/server/routes/sync-api.d.ts +26 -0
- package/dist/server/routes/sync-api.js +757 -0
- package/dist/server/routes/sync-api.js.map +1 -0
- package/dist/server/routes/ws.d.ts +4 -2
- package/dist/server/routes/ws.js +100 -4
- package/dist/server/routes/ws.js.map +1 -1
- package/dist/server/session-manager.d.ts +40 -0
- package/dist/server/session-manager.js +132 -0
- package/dist/server/session-manager.js.map +1 -0
- package/dist/server/ws-hub.d.ts +95 -1
- package/dist/server/ws-hub.js +192 -5
- package/dist/server/ws-hub.js.map +1 -1
- package/dist/server/yjs-manager.d.ts +59 -0
- package/dist/server/yjs-manager.js +194 -0
- package/dist/server/yjs-manager.js.map +1 -0
- package/dist/services/auth-service.d.ts +30 -2
- package/dist/services/auth-service.js +116 -11
- package/dist/services/auth-service.js.map +1 -1
- package/dist/services/git.d.ts +6 -0
- package/dist/services/git.js +32 -2
- package/dist/services/git.js.map +1 -1
- package/dist/services/sync/collection-sync.d.ts +73 -0
- package/dist/services/sync/collection-sync.js +726 -0
- package/dist/services/sync/collection-sync.js.map +1 -0
- package/dist/services/sync/commit.js +5 -20
- package/dist/services/sync/commit.js.map +1 -1
- package/dist/services/sync/data-fetcher.d.ts +31 -0
- package/dist/services/sync/data-fetcher.js +12 -0
- package/dist/services/sync/data-fetcher.js.map +1 -0
- package/dist/services/sync/entity-refresh.d.ts +30 -0
- package/dist/services/sync/entity-refresh.js +275 -0
- package/dist/services/sync/entity-refresh.js.map +1 -0
- package/dist/services/sync/frontmatter-extractor.d.ts +2 -2
- package/dist/services/sync/frontmatter-extractor.js +1 -2
- package/dist/services/sync/frontmatter-extractor.js.map +1 -1
- package/dist/services/sync/graph-match.js +1 -1
- package/dist/services/sync/graph-match.js.map +1 -1
- package/dist/services/sync/mcp-client.d.ts +16 -4
- package/dist/services/sync/mcp-client.js +34 -20
- package/dist/services/sync/mcp-client.js.map +1 -1
- package/dist/services/sync/prompts.js +1 -1
- package/dist/services/sync/reconciler.js +1 -2
- package/dist/services/sync/reconciler.js.map +1 -1
- package/dist/services/sync/rest-client.d.ts +40 -0
- package/dist/services/sync/rest-client.js +100 -0
- package/dist/services/sync/rest-client.js.map +1 -0
- package/dist/services/sync/source-config.d.ts +23 -1
- package/dist/services/sync/source-config.js +112 -16
- package/dist/services/sync/source-config.js.map +1 -1
- package/dist/services/sync/source-definitions/asana.d.ts +3 -4
- package/dist/services/sync/source-definitions/asana.js +7 -13
- package/dist/services/sync/source-definitions/asana.js.map +1 -1
- package/dist/services/sync/source-definitions/definitions.d.ts +5 -18
- package/dist/services/sync/source-definitions/definitions.js +4 -22
- package/dist/services/sync/source-definitions/definitions.js.map +1 -1
- package/dist/services/sync/source-definitions/granola.d.ts +1 -1
- package/dist/services/sync/source-definitions/granola.js +11 -18
- package/dist/services/sync/source-definitions/granola.js.map +1 -1
- package/dist/services/sync/source-definitions/linear.d.ts +1 -1
- package/dist/services/sync/source-definitions/linear.js +17 -15
- package/dist/services/sync/source-definitions/linear.js.map +1 -1
- package/dist/services/sync/source-definitions/pipedrive.d.ts +1 -1
- package/dist/services/sync/source-definitions/pipedrive.js +6 -15
- package/dist/services/sync/source-definitions/pipedrive.js.map +1 -1
- package/dist/services/sync/staging.js +1 -2
- package/dist/services/sync/staging.js.map +1 -1
- package/dist/services/sync/structured-extractor.d.ts +8 -2
- package/dist/services/sync/structured-extractor.js +243 -35
- package/dist/services/sync/structured-extractor.js.map +1 -1
- package/dist/services/sync/types.d.ts +192 -23
- package/dist/services/sync/unstructured-extractor.d.ts +1 -3
- package/dist/services/sync/unstructured-extractor.js +2 -14
- package/dist/services/sync/unstructured-extractor.js.map +1 -1
- package/dist/utils/git.d.ts +24 -20
- package/dist/utils/git.js +99 -65
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/preflight.d.ts +1 -15
- package/dist/utils/preflight.js +1 -35
- package/dist/utils/preflight.js.map +1 -1
- package/dist/web/_app/immutable/assets/0.CupILLQs.css +1 -0
- package/dist/web/_app/immutable/assets/3.CtJi4Cy9.css +1 -0
- package/dist/web/_app/immutable/assets/5.CydFyZSu.css +1 -0
- package/dist/web/_app/immutable/assets/6.kqeOo0OW.css +1 -0
- package/dist/web/_app/immutable/assets/7.CseIx7qQ.css +1 -0
- package/dist/web/_app/immutable/assets/{8.Sm6jB3a0.css → 8.BYpFDZHK.css} +1 -1
- package/dist/web/_app/immutable/assets/AppShell.Ch_ef9hJ.css +1 -0
- package/dist/web/_app/immutable/assets/ChatPanel.CP-_8txt.css +1 -0
- package/dist/web/_app/immutable/chunks/0oxpWEgM.js +1 -0
- package/dist/web/_app/immutable/chunks/B1y7Wy5O.js +18 -0
- package/dist/web/_app/immutable/chunks/B7eduG_j.js +64 -0
- package/dist/web/_app/immutable/chunks/BBLgaWN8.js +1 -0
- package/dist/web/_app/immutable/chunks/BCB5cYCz.js +2 -0
- package/dist/web/_app/immutable/chunks/{aosHekRC.js → BPUy9_sS.js} +1 -1
- package/dist/web/_app/immutable/chunks/BVBRzmeQ.js +7 -0
- package/dist/web/_app/immutable/chunks/{CUzqHQY_.js → BXuvR8Ks.js} +2 -1
- package/dist/web/_app/immutable/chunks/BeBar3OL.js +1 -0
- package/dist/web/_app/immutable/chunks/BuOTIbJu.js +1 -0
- package/dist/web/_app/immutable/chunks/CLFba8FK.js +5 -0
- package/dist/web/_app/immutable/chunks/CQCkXCml.js +1 -0
- package/dist/web/_app/immutable/chunks/CXuhHL4d.js +1 -0
- package/dist/web/_app/immutable/chunks/Cg9NOuOl.js +27 -0
- package/dist/web/_app/immutable/chunks/Cs5oz2oJ.js +5 -0
- package/dist/web/_app/immutable/chunks/Cs_ROD7H.js +2 -0
- package/dist/web/_app/immutable/chunks/D2aTbzFm.js +3 -0
- package/dist/web/_app/immutable/chunks/D4FXhiC2.js +1 -0
- package/dist/web/_app/immutable/chunks/D4VHRYeB.js +1 -0
- package/dist/web/_app/immutable/chunks/DCGSm8Hl.js +1 -0
- package/dist/web/_app/immutable/chunks/DP09rP34.js +2 -0
- package/dist/web/_app/immutable/chunks/DiP47fAp.js +1 -0
- package/dist/web/_app/immutable/chunks/DptGlK8O.js +1 -0
- package/dist/web/_app/immutable/chunks/O0fx2ss6.js +1 -0
- package/dist/web/_app/immutable/chunks/xBRYfpah.js +1 -0
- package/dist/web/_app/immutable/entry/app.FgnywZP_.js +2 -0
- package/dist/web/_app/immutable/entry/start.Bsa-zlPf.js +1 -0
- package/dist/web/_app/immutable/nodes/0.D3SW-LMc.js +10 -0
- package/dist/web/_app/immutable/nodes/1.y0c5TQTP.js +1 -0
- package/dist/web/_app/immutable/nodes/2.BQfSep9-.js +1 -0
- package/dist/web/_app/immutable/nodes/3.CC4Y-xMM.js +11 -0
- package/dist/web/_app/immutable/nodes/4.Dp0Z-oPW.js +4 -0
- package/dist/web/_app/immutable/nodes/5.gjZ03DON.js +2 -0
- package/dist/web/_app/immutable/nodes/6.dRNIwcJQ.js +1 -0
- package/dist/web/_app/immutable/nodes/7.I4Gjes3o.js +2 -0
- package/dist/web/_app/immutable/nodes/8.Dj14D7uH.js +1 -0
- package/dist/web/_app/version.json +1 -1
- package/dist/web/index.html +10 -12
- package/package.json +4 -2
- package/dist/web/_app/immutable/assets/0.CF0XhAap.css +0 -1
- package/dist/web/_app/immutable/assets/3.BJy7pVXi.css +0 -1
- package/dist/web/_app/immutable/assets/4.Ad16uh9o.css +0 -1
- package/dist/web/_app/immutable/assets/6.Bm2i7O0j.css +0 -1
- package/dist/web/_app/immutable/assets/7.Cn2DG-J6.css +0 -1
- package/dist/web/_app/immutable/assets/AppShell.CztjTuKY.css +0 -1
- package/dist/web/_app/immutable/assets/ChatPanel.RFD5GGYI.css +0 -1
- package/dist/web/_app/immutable/assets/editor.CPAf2SRV.css +0 -1
- package/dist/web/_app/immutable/chunks/4QY4j-jX.js +0 -1
- package/dist/web/_app/immutable/chunks/B3Kdf1r4.js +0 -6
- package/dist/web/_app/immutable/chunks/BIo3H1KR.js +0 -2
- package/dist/web/_app/immutable/chunks/BJLM1w2L.js +0 -23
- package/dist/web/_app/immutable/chunks/BLCwEMdm.js +0 -1
- package/dist/web/_app/immutable/chunks/BSYvCVJt.js +0 -1
- package/dist/web/_app/immutable/chunks/Ba5JX1o9.js +0 -1
- package/dist/web/_app/immutable/chunks/Bj34y868.js +0 -64
- package/dist/web/_app/immutable/chunks/BrWpHgBJ.js +0 -1
- package/dist/web/_app/immutable/chunks/C3g_lwol.js +0 -1
- package/dist/web/_app/immutable/chunks/CXnPm09s.js +0 -1
- package/dist/web/_app/immutable/chunks/ClOTom10.js +0 -1
- package/dist/web/_app/immutable/chunks/CtT4aw_G.js +0 -1
- package/dist/web/_app/immutable/chunks/Dh_H7Owr.js +0 -18
- package/dist/web/_app/immutable/chunks/DnlgZ_Tk.js +0 -5
- package/dist/web/_app/immutable/chunks/DtVH--hH.js +0 -6
- package/dist/web/_app/immutable/chunks/Dzd9kdLj.js +0 -2
- package/dist/web/_app/immutable/chunks/L91a_BGe.js +0 -1
- package/dist/web/_app/immutable/chunks/bHAllEMt.js +0 -1
- package/dist/web/_app/immutable/entry/app.CdrgaaFb.js +0 -2
- package/dist/web/_app/immutable/entry/start.t9LMjt48.js +0 -1
- package/dist/web/_app/immutable/nodes/0.P-Xfebn4.js +0 -2
- package/dist/web/_app/immutable/nodes/1.DiZlq1e6.js +0 -1
- package/dist/web/_app/immutable/nodes/2.ByIZ5J2p.js +0 -1
- package/dist/web/_app/immutable/nodes/3.D7JhktsZ.js +0 -1
- package/dist/web/_app/immutable/nodes/4.BtMeWbPx.js +0 -16
- package/dist/web/_app/immutable/nodes/5.CCYG1pbQ.js +0 -4
- package/dist/web/_app/immutable/nodes/6.CL_Ah04j.js +0 -2
- package/dist/web/_app/immutable/nodes/7.BMTaosAj.js +0 -1
- package/dist/web/_app/immutable/nodes/8.mrPg67cz.js +0 -1
- /package/dist/web/_app/immutable/assets/{5.BhKgiXd2.css → 4.BhKgiXd2.css} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-api.js","sourceRoot":"","sources":["../../../src/server/routes/sync-api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAkB,QAAQ,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AACrG,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAwB,MAAM,gCAAgC,CAAC;AAC1G,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3F,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,0CAA0C,CAAC;AAI3E;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,QAAyB;IACjD,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QAEpG,2CAA2C;QAC3C,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACjC,yDAAyD;YACzD,IAAI,QAAQ,EAAE,sBAAsB,IAAI,QAAQ,EAAE,cAAc,EAAE,CAAC;gBACjE,MAAM,QAAQ,GAAG;oBACf,MAAM,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,MAAM;oBACvD,sBAAsB,EAAE,QAAQ,CAAC,sBAAsB;oBACvD,cAAc,EAAE,QAAQ,CAAC,cAAc;oBACvC,wBAAwB,EAAE,CAAC,MAAM,CAAC;oBAClC,gCAAgC,EAAE,CAAC,MAAM,CAAC;iBAC3C,CAAC;gBACF,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;oBAC5C,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAChD,CAAC,CAAC;YACL,CAAC;YAED,0DAA0D;YAC1D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACrC,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;gBACtB,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC7C,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QAED,OAAO,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC;AACJ,CAAC;AACD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uDAAuD,CAAC;AAE3F,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAK5B,+DAA+D;AAC/D,SAAS,OAAO,CAAC,GAAmB;IAClC,MAAM,IAAI,GAAI,GAAW,CAAC,IAA4B,CAAC;IACvD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC,CAAC,sBAAsB;IAC9C,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;AAC/B,CAAC;AAED,qGAAqG;AACrG,SAAS,aAAa,CAAC,GAAmB,EAAE,QAAgB,EAAE,gBAAkC,EAAE,WAAwB;IACxH,MAAM,IAAI,GAAI,GAAW,CAAC,IAA4B,CAAC;IACvD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC,CAAC,sBAAsB;IAC9C,MAAM,UAAU,GAAG,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC5D,IAAI,UAAU,EAAE,OAAO,IAAI,UAAU,EAAE,QAAQ,KAAK,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACzE,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACpE,CAAC;AAED,kFAAkF;AAClF,SAAS,OAAO,CAAC,GAAmB,EAAE,QAAgB,EAAE,gBAAkC,EAAE,WAAwB;IAClH,MAAM,IAAI,GAAI,GAAW,CAAC,IAA4B,CAAC;IACvD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC,CAAC,sBAAsB;IAC9C,MAAM,UAAU,GAAG,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC5D,IAAI,UAAU,EAAE,OAAO,IAAI,UAAU,EAAE,QAAQ,KAAK,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACzE,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAwB,EACxB,gBAAkC,EAClC,WAAwB,EACxB,aAAqB,EACrB,KAAa;IAGb,6EAA6E;IAC7E,iFAAiF;IACjF,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACzD,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAA0B,CAAC;QAEhD,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,CAAC;YACvD,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAC,CAAC;QACtF,CAAC;QAED,MAAM,KAAK,GAAI,GAAW,CAAC,IAAI,EAAE,WAAW,IAAI,MAAM,CAAC;QACvD,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE;YAC/B,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;YAC7B,KAAK,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC9G,CAAC,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;YAE5C,MAAM,IAAI,GAAI,GAAW,CAAC,IAA4B,CAAC;YACvD,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,GAAG,MAAM,QAAQ,CAAC;gBAC7D,aAAa;gBACb,cAAc,EAAE,IAAI;gBACpB,eAAe,EAAE,MAAM;gBACvB,gBAAgB,EAAE,MAAM,CAAC,iBAAiB;gBAC1C,UAAU,EAAE,QAAQ;gBACpB,MAAM,EAAE,IAAI,EAAE,EAAE;gBAChB,WAAW;gBACX,SAAS,EAAE,MAAM,YAAY,CAAC,GAAG,CAAC;aACnC,CAAC,CAAC;YAEH,MAAM,UAAU,GACd,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBACpD,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAE3F,MAAM,OAAO,GAAG;gBACd,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;gBACvC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;aACvC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;YAErB,KAAK,EAAE,SAAS,CAAC;gBACf,IAAI,EAAE,eAAe;gBACrB,IAAI;gBACJ,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,UAAU;gBACnB,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,CAAC;gBACV,KAAK;gBACL,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;YAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC5B,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAC5D,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,2EAA2E;IAC3E,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAC7C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,IAAI,GAAI,GAAW,CAAC,IAA4B,CAAC;QACvD,MAAM,KAAK,GAAG,IAAI,EAAE,WAAW,IAAI,MAAM,CAAC;QAE1C,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;YAErC,MAAM,gBAAgB,GAAU,EAAE,CAAC;YAEnC,0EAA0E;YAC1E,8EAA8E;YAC9E,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,EAAE;gBAChC,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;gBAC7B,KAAK,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YAC3H,CAAC,CAAC;YAEF,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAEnE,0EAA0E;YAC1E,gFAAgF;YAChF,MAAM,OAAO,GAAG,IAAI,GAAG,EAA+G,CAAC;YACvI,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChC,MAAM,eAAe,GAAI,IAAY,CAAC,IAAwC,CAAC;gBAC/E,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAS;gBAC/D,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;oBACnC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;oBACxD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBACtB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;oBACxF,CAAC;oBACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC3E,CAAC;YACH,CAAC;YAED,kEAAkE;YAClE,KAAK,MAAM,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC7C,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;wBACrC,aAAa;wBACb,IAAI,EAAE,aAAa;wBACnB,eAAe,EAAE,MAAM;wBACvB,gBAAgB,EAAE,MAAM,CAAC,iBAAiB;wBAC1C,UAAU,EAAE,SAAS;wBACrB,GAAG,OAAO;qBACX,CAAC,CAAC;oBACH,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAChC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC7D,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC1K,CAAC;YACH,CAAC;YAED,sDAAsD;YACtD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;gBACrC,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;wBACrC,aAAa;wBACb,IAAI;wBACJ,eAAe,EAAE,MAAM;wBACvB,gBAAgB,EAAE,MAAM,CAAC,iBAAiB;wBAC1C,UAAU,EAAE,SAAS;wBACrB,GAAG,OAAO;qBACX,CAAC,CAAC;oBACH,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAChC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC7D,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBACxJ,CAAC;YACH,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC;QACpE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC5B,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAC5D,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,sEAAsE;IACtE,OAAO,CAAC,IAAI,CAAC,6CAA6C,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAC/E,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,MAAoD,CAAC;QAEpF,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,CAAC;YAC7D,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;YAE5C,MAAM,IAAI,GAAI,GAAW,CAAC,IAA4B,CAAC;YACvD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;gBACjC,aAAa;gBACb,cAAc,EAAE,IAAI;gBACpB,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,EAAE;gBACZ,eAAe,EAAE,MAAM;gBACvB,gBAAgB,EAAE,MAAM,CAAC,iBAAiB;gBAC1C,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,IAAI,EAAE,EAAE;gBAChB,WAAW;gBACX,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC;aAC7B,CAAC,CAAC;YAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACnC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC5B,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAC5D,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,yEAAyE;IACzE,OAAO,CAAC,IAAI,CAAC,mDAAmD,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACrF,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,MAAoD,CAAC;QAEpF,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,CAAC;YAC7D,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;YAE5C,MAAM,IAAI,GAAI,GAAW,CAAC,IAA4B,CAAC;YACvD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;gBACjC,aAAa;gBACb,cAAc,EAAE,IAAI;gBACpB,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,EAAE;gBACZ,eAAe,EAAE,MAAM;gBACvB,gBAAgB,EAAE,MAAM,CAAC,iBAAiB;gBAC1C,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,IAAI,EAAE,EAAE;gBAChB,WAAW;gBACX,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC;aAC7B,CAAC,CAAC;YAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACnC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC5B,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAC5D,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,oEAAoE;IACpE,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAC/D,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAA0B,CAAC;QAEhD,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,CAAC;YAC7D,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;YAC5C,MAAM,UAAU,GAAG,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACxD,MAAM,SAAS,GAAI,UAAkB,EAAE,IAAwC,CAAC;YAEhF,6CAA6C;YAC7C,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,IAAI,QAAQ,GAAkB,IAAI,CAAC;YAEnC,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC9B,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;oBAC9B,MAAM,QAAQ,GAAI,MAAM,CAAC,IAAY,EAAE,SAAS,CAAC;oBACjD,IAAI,QAAQ,EAAE,CAAC;wBACb,WAAW,EAAE,CAAC;wBACd,IAAI,CAAC,QAAQ,IAAI,QAAQ,GAAG,QAAQ;4BAAE,QAAQ,GAAG,QAAQ,CAAC;oBAC5D,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,0BAA0B;YAC5B,CAAC;YAED,MAAM,kBAAkB,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;YAEjG,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,IAAI;gBAChB,SAAS,EAAE,SAAS,IAAI,EAAE;gBAC1B,kBAAkB;gBAClB,WAAW;gBACX,QAAQ;aACT,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC5B,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAC5D,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,iDAAiD;IACjD,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,mBAAmB,CAAC,aAAa,CAAC,CAAC;QACzD,MAAM,OAAO,GAA8J,EAAE,CAAC;QAE9K,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAErE,4BAA4B;QAC5B,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAAE,SAAS;gBACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACvC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAEf,MAAM,GAAG,GAAG,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBAC1C,IAAI,GAAG,EAAE,CAAC;oBACR,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI;wBACJ,MAAM,EAAE,KAAK;wBACb,SAAS,EAAE,GAAG,CAAC,SAAS;wBACxB,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;wBACtC,SAAS,EAAE,KAAK;wBAChB,YAAY,EAAE,GAAG,CAAC,aAAa,IAAI,EAAE;wBACrC,UAAU,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,SAAS,CAAC;qBACjE,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAChC,IAAI,GAAG,EAAE,CAAC;wBACR,OAAO,CAAC,IAAI,CAAC;4BACX,IAAI,EAAE,GAAG,CAAC,IAAI;4BACd,MAAM,EAAE,QAAQ;4BAChB,SAAS,EAAE,GAAG,CAAC,SAAS;4BACxB,WAAW,EAAE,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;4BACxD,SAAS,EAAE,KAAK;4BAChB,YAAY,EAAE,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,aAAa,IAAI,EAAE;4BACpE,UAAU,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,SAAS,CAAC;yBACjE,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,yDAAyD;QACzD,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC7D,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC7B,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI;gBACJ,MAAM,EAAE,KAAK;gBACb,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;gBACtC,SAAS,EAAE,KAAK;gBAChB,YAAY,EAAE,GAAG,CAAC,aAAa,IAAI,EAAE;gBACrC,UAAU,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,SAAS,CAAC;aACjE,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,sEAAsE;IACtE,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACrD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAA0B,CAAC;QAChD,MAAM,SAAS,GAAG,IAAI,mBAAmB,CAAC,aAAa,CAAC,CAAC;QAEzD,MAAM,GAAG,GAAG,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACxC,CAAC;QACD,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACxC,CAAC;QACD,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,IAAI,aAAa,EAAE,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,iEAAiE;IACjE,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACtD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAA0B,CAAC;QAChD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAW,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,mBAAmB,CAAC,aAAa,CAAC,CAAC;QAEzD,qCAAqC;QACrC,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBAC5B,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,mCAAmC,IAAI,GAAG;iBAClD,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtE,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBAC5B,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,iBAAiB,IAAI,yBAAyB;iBACtD,CAAC,CAAC;YACL,CAAC;YACD,MAAM,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;YAC1F,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,IAAI,yBAAyB,EAAE,CAAC;QAC9E,CAAC;QAED,8CAA8C;QAC9C,MAAM,UAAU,GAAG,SAAS,CAAC,kBAAkB,CAAC,IAAwB,CAAC,CAAC;QAE1E,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC5B,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;QACL,CAAC;QAED,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,IAAwB,CAAC,CAAC;QACzD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,IAAI,SAAS,EAAE,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,yDAAyD;IACzD,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACxD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAA0B,CAAC;QAChD,MAAM,SAAS,GAAG,IAAI,mBAAmB,CAAC,aAAa,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,IAAI,WAAW,EAAE,CAAC;QAChE,CAAC;QACD,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,IAAI,aAAa,EAAE,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,0EAA0E;IAC1E,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAClD,MAAM,IAAI,GAAI,GAAW,CAAC,IAA4B,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,EAAE,EAAE,CAAC;QAExB,MAAM,SAAS,GAAG,IAAI,mBAAmB,CAAC,aAAa,CAAC,CAAC;QACzD,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QACrE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAErE,MAAM,UAAU,GAUX,EAAE,CAAC;QAER,0CAA0C;QAC1C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC7D,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,SAAS,GAAG,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;YACzF,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAExF,4EAA4E;YAC5E,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,MAAM,EAAE,CAAC;gBACrC,SAAS,GAAG,WAAW,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACvD,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACjC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,mDAAmD;YAC9E,CAAC;iBAAM,IAAI,SAAS,EAAE,OAAO,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;gBACjD,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;YAED,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI;gBACJ,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,WAAW,EAAE,SAAS,EAAE,WAAW,IAAI,KAAK,CAAC,WAAW;gBACxD,UAAU,EAAE,CAAC,CAAC,SAAS;gBACvB,SAAS;gBACT,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,SAAS;gBACT,WAAW;gBACX,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;YACH,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAED,4DAA4D;QAC5D,KAAK,MAAM,MAAM,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,MAAM,SAAS,GAAG,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;YACvG,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACxF,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;gBACrC,UAAU,EAAE,IAAI;gBAChB,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,eAAe,CAAC;gBAC9C,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,SAAS;gBAC9B,SAAS;gBACT,WAAW;gBACX,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAC/D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAA0B,CAAC;QAChD,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAEhE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACzC,CAAC;QAED,4BAA4B;QAC5B,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,CAAC,OAAO,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACvC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9C,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,eAAe,EAAE,CAAC;oBAC1C,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,wEAAwE;IACxE,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAChE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAA0B,CAAC;QAChD,MAAM,IAAI,GAAG,GAAG,CAAC,IAA8B,CAAC;QAEhD,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,MAAM,GAAoB;YAC9B,IAAI;YACJ,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;SACtC,CAAC;QAEF,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACpC,gBAAgB,CAAC,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAE5D,4DAA4D;QAC5D,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,SAAS,GAAG,IAAI,mBAAmB,CAAC,aAAa,CAAC,CAAC;YACzD,MAAM,cAAc,GAAG,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,CAAC,cAAc,IAAI,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtF,MAAM,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC1F,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,IAAI,cAAc,EAAE,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,gEAAgE;IAChE,OAAO,CAAC,MAAM,CAAC,8BAA8B,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAClE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAA0B,CAAC;QAChD,MAAM,OAAO,GAAG,gBAAgB,CAAC,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACnE,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,IAAI,WAAW,EAAE,CAAC;QACnE,CAAC;QACD,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,IAAI,GAAG,EAAE,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,4EAA4E;IAE5E,8HAA8H;IAC9H,SAAS,YAAY,CAAC,GAAmB;QACvC,MAAM,KAAK,GAAI,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAY,IAAI,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC;QACrF,MAAM,IAAI,GAAI,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAY,IAAK,GAAG,CAAC,OAAO,CAAC,IAAe,IAAI,GAAG,CAAC,QAAQ,CAAC;QACzG,OAAO,GAAG,KAAK,MAAM,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,mEAAmE;IACnE,OAAO,CAAC,IAAI,CAAC,uCAAuC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACzE,MAAM,IAAI,GAAI,GAAW,CAAC,IAA4B,CAAC;QACvD,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,CAAC;QAE/E,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAA0B,CAAC;QAChD,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sBAAsB,IAAI,kDAAkD,EAAE,CAAC,CAAC;QACzH,CAAC;QAED,iCAAiC;QACjC,IAAI,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;YACjF,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACpC,gBAAgB,CAAC,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAE7F,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzG,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;gBAC5B,oCAAoC;gBACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAC5C,CAAC;YACD,2DAA2D;YAC3D,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;gBAC/B,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iDAAiD,EAAE,CAAC,CAAC;YAC9F,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QACxE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,CAAC,KAAK,CAAC,+BAA+B,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;YAC3D,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gCAAgC,GAAG,EAAE,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,wFAAwF;IACxF,6GAA6G;IAC7G,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAC5D,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAA0B,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,KAA0C,CAAC;YACvE,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAErC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,KAAK,GAAI,GAAG,CAAC,KAAa,CAAC,KAAK,IAAI,4BAA4B,CAAC;gBACvE,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CACjC,+CAA+C,KAAK,kDAAkD,CACvG,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAC7C,6CAA6C,IAAI,+CAA+C,CACjG,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACvD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAC7C,gIAAgI,CACjI,CAAC;YACJ,CAAC;YAED,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAEtH,MAAM,OAAO,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACpH,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CACjC,gCAAgC,IAAI,6EAA6E,CAClH,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;YAC1D,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CACjC,+CAA+C,GAAG,gEAAgE,CACnH,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,4EAA4E;IAC5E,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACrE,MAAM,IAAI,GAAI,GAAW,CAAC,IAA4B,CAAC;QACvD,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,CAAC;QAE/E,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAA0B,CAAC;QAChD,MAAM,SAAS,GAAG,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC5D,OAAO,EAAE,SAAS,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,mEAAmE;IACnE,OAAO,CAAC,IAAI,CAAC,wCAAwC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAC1E,MAAM,IAAI,GAAI,GAAW,CAAC,IAA4B,CAAC;QACvD,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,CAAC;QAE/E,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAA0B,CAAC;QAChD,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACrD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QAEvC,qBAAqB;QACrB,MAAM,OAAO,GAAwB,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;QAClE,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAAE,SAAS;gBACvC,IAAI,CAAC;oBACH,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;gBACnG,CAAC;gBAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,4DAA4D;QAC5D,MAAM,UAAU,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QAExE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,kFAAkF;IAClF,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACtD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,GAAG,CAAC,IAMX,CAAC;QAET,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QAClD,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,8EAA8E;QAC9E,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAQ,CAAC;YACpE,MAAM,MAAM,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;YACjD,+BAA+B;YAC/B,IAAI,KAAK,CAAC,UAAU;gBAAE,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;YAC3D,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACvF,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5B,CAAC;QAED,cAAc;QACd,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACxD,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QAED,eAAe;QACf,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAChG,WAAW,CAAC,SAAS,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC;QACrE,CAAC;QAED,aAAa;QACb,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC1C,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzD,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACzF,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtE,CAAC;QAED,4BAA4B;QAC5B,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YAChD,SAAS,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACrC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,GAAI,IAAY,CAAC,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3G,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvF,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* WebSocket endpoint — authenticates connections
|
|
2
|
+
* WebSocket endpoint — authenticates connections, registers them with the hub,
|
|
3
|
+
* and handles Yjs binary sync/awareness messages via YjsManager.
|
|
3
4
|
*/
|
|
4
5
|
import type { FastifyInstance } from 'fastify';
|
|
5
6
|
import type { AuthService } from '../../services/auth-service.js';
|
|
6
7
|
import type { WsHub } from '../ws-hub.js';
|
|
7
|
-
|
|
8
|
+
import type { YjsManager } from '../yjs-manager.js';
|
|
9
|
+
export declare function registerWsRoute(fastify: FastifyInstance, wsHub: WsHub, authService: AuthService, yjsManager: YjsManager): Promise<void>;
|
package/dist/server/routes/ws.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* WebSocket endpoint — authenticates connections
|
|
2
|
+
* WebSocket endpoint — authenticates connections, registers them with the hub,
|
|
3
|
+
* and handles Yjs binary sync/awareness messages via YjsManager.
|
|
3
4
|
*/
|
|
4
|
-
export async function registerWsRoute(fastify, wsHub, authService) {
|
|
5
|
+
export async function registerWsRoute(fastify, wsHub, authService, yjsManager) {
|
|
5
6
|
fastify.get('/ws', { websocket: true }, (socket, req) => {
|
|
6
7
|
// Authenticate via JWT cookie or ?token= query param
|
|
7
8
|
const cookies = req.cookies;
|
|
@@ -20,16 +21,111 @@ export async function registerWsRoute(fastify, wsHub, authService) {
|
|
|
20
21
|
socket.close(4001, 'Invalid token');
|
|
21
22
|
return;
|
|
22
23
|
}
|
|
23
|
-
// Determine accessible collections for this user
|
|
24
24
|
const collections = user.role === 'admin'
|
|
25
|
-
? null
|
|
25
|
+
? null
|
|
26
26
|
: authService.getUserCollections(user.id);
|
|
27
|
+
const collectionSet = collections ? new Set(collections) : null;
|
|
27
28
|
wsHub.addClient(socket, user, collections);
|
|
29
|
+
wsHub.sendPresenceSnapshot(socket, collectionSet);
|
|
30
|
+
socket.on('message', (raw) => {
|
|
31
|
+
// Binary messages = Yjs sync/awareness protocol
|
|
32
|
+
if (Buffer.isBuffer(raw) && raw.length >= 3 && raw[0] !== 0x7b) {
|
|
33
|
+
handleYjsBinary(yjsManager, socket, raw);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
handleClientMessage(wsHub, yjsManager, socket, raw, String(user.id), user.displayName);
|
|
37
|
+
});
|
|
38
|
+
socket.on('close', () => yjsManager.removeClientFromAll(socket));
|
|
28
39
|
}
|
|
29
40
|
else {
|
|
30
41
|
// Open mode — no auth, all collections
|
|
31
42
|
wsHub.addClient(socket, null, null);
|
|
43
|
+
wsHub.sendPresenceSnapshot(socket, null);
|
|
44
|
+
socket.on('message', (raw) => {
|
|
45
|
+
if (Buffer.isBuffer(raw) && raw.length >= 3 && raw[0] !== 0x7b) {
|
|
46
|
+
handleYjsBinary(yjsManager, socket, raw);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
handleClientMessage(wsHub, yjsManager, socket, raw, 'anon', 'Anonymous');
|
|
50
|
+
});
|
|
51
|
+
socket.on('close', () => yjsManager.removeClientFromAll(socket));
|
|
32
52
|
}
|
|
33
53
|
});
|
|
34
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Handle a binary Yjs frame. Parses the docName and message type from the
|
|
57
|
+
* frame header and delegates to YjsManager.
|
|
58
|
+
*
|
|
59
|
+
* Frame format: [2B docName length, uint16 BE][docName UTF-8][1B msgType][payload]
|
|
60
|
+
*/
|
|
61
|
+
function handleYjsBinary(yjsManager, sender, raw) {
|
|
62
|
+
try {
|
|
63
|
+
const docNameLen = raw.readUInt16BE(0);
|
|
64
|
+
if (raw.length < 2 + docNameLen + 1)
|
|
65
|
+
return;
|
|
66
|
+
const docName = raw.subarray(2, 2 + docNameLen).toString('utf8');
|
|
67
|
+
const msgType = raw[2 + docNameLen];
|
|
68
|
+
const payload = raw.subarray(2 + docNameLen + 1);
|
|
69
|
+
yjsManager.handleMessage(docName, sender, msgType, payload);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// ignore malformed binary frames
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function handleClientMessage(wsHub, yjsManager, socket, raw, userId, userName) {
|
|
76
|
+
// Binary frames → Yjs sync/awareness protocol (NOT JSON)
|
|
77
|
+
if (Buffer.isBuffer(raw) && raw.length >= 3) {
|
|
78
|
+
// Decode binary frame: [2B nameLen][name][1B msgType][payload]
|
|
79
|
+
const nameLen = raw.readUInt16BE(0);
|
|
80
|
+
if (nameLen > 0 && 2 + nameLen + 1 <= raw.length) {
|
|
81
|
+
const docName = raw.subarray(2, 2 + nameLen).toString('utf-8');
|
|
82
|
+
const msgType = raw[2 + nameLen];
|
|
83
|
+
const payload = raw.subarray(2 + nameLen + 1);
|
|
84
|
+
yjsManager.handleMessage(docName, socket, msgType, payload);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
const msg = JSON.parse(typeof raw === 'string' ? raw : raw.toString());
|
|
90
|
+
if (msg?.type === 'pong') {
|
|
91
|
+
wsHub.handlePong(socket);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (msg?.type === 'presence' && msg.action && msg.repo && msg.entityType && msg.entityId) {
|
|
95
|
+
wsHub.handlePresence(msg.action, msg.repo, msg.entityType, msg.entityId, { id: userId, name: userName });
|
|
96
|
+
// On enter: immediately send back current presence so the client
|
|
97
|
+
// doesn't have to wait for others' 30s heartbeats.
|
|
98
|
+
if (msg.action === 'enter') {
|
|
99
|
+
const now = new Date().toISOString();
|
|
100
|
+
for (const user of wsHub.getPresence(msg.repo, msg.entityType, msg.entityId)) {
|
|
101
|
+
if (user.id === userId)
|
|
102
|
+
continue;
|
|
103
|
+
socket.send(JSON.stringify({
|
|
104
|
+
type: 'presence',
|
|
105
|
+
action: 'enter',
|
|
106
|
+
repo: msg.repo,
|
|
107
|
+
entityType: msg.entityType,
|
|
108
|
+
entityId: msg.entityId,
|
|
109
|
+
user,
|
|
110
|
+
timestamp: now,
|
|
111
|
+
}));
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
// collab:join — register client for a Yjs doc (server seeds Y.Doc from disk)
|
|
117
|
+
if (msg?.type === 'collab:join' && msg.docName) {
|
|
118
|
+
yjsManager.addClient(msg.docName, socket);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
// collab:leave — unregister from a Yjs doc
|
|
122
|
+
if (msg?.type === 'collab:leave' && msg.docName) {
|
|
123
|
+
yjsManager.removeClient(msg.docName, socket);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
// ignore malformed messages
|
|
129
|
+
}
|
|
130
|
+
}
|
|
35
131
|
//# sourceMappingURL=ws.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws.js","sourceRoot":"","sources":["../../../src/server/routes/ws.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ws.js","sourceRoot":"","sources":["../../../src/server/routes/ws.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAwB,EACxB,KAAY,EACZ,WAAwB,EACxB,UAAsB;IAEtB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QACtD,qDAAqD;QACrD,MAAM,OAAO,GAAG,GAAG,CAAC,OAA6C,CAAC;QAClE,MAAM,aAAa,GAAG,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,YAAY,GAAI,GAAG,CAAC,KAAgC,EAAE,KAAK,CAAC;QAClE,MAAM,KAAK,GAAG,aAAa,IAAI,YAAY,CAAC;QAE5C,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;gBACvD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;gBACnC,OAAO;YACT,CAAC;YACD,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;gBACxD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;gBACpC,OAAO;YACT,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO;gBACvC,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE5C,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAChE,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;YAC3C,KAAK,CAAC,oBAAoB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YAClD,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAoB,EAAE,EAAE;gBAC5C,gDAAgD;gBAChD,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBAC/D,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;oBACzC,OAAO;gBACT,CAAC;gBACD,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACzF,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,uCAAuC;YACvC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACpC,KAAK,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACzC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAoB,EAAE,EAAE;gBAC5C,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBAC/D,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;oBACzC,OAAO;gBACT,CAAC;gBACD,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;QACnE,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CACtB,UAAsB,EACtB,MAA8B,EAC9B,GAAW;IAEX,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC;YAAE,OAAO;QAC5C,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC;QAEjD,UAAU,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAY,EACZ,UAAsB,EACtB,MAA8B,EAC9B,GAAoB,EACpB,MAAc,EACd,QAAgB;IAEhB,yDAAyD;IACzD,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC5C,+DAA+D;QAC/D,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACjD,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC/D,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;YACjC,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC;YAC9C,UAAU,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvE,IAAI,GAAG,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACzB,OAAO;QACT,CAAC;QACD,IAAI,GAAG,EAAE,IAAI,KAAK,UAAU,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACzF,KAAK,CAAC,cAAc,CAClB,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,IAAI,EACR,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,QAAQ,EACZ,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAC/B,CAAC;YAEF,iEAAiE;YACjE,mDAAmD;YACnD,IAAI,GAAG,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC3B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACrC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC7E,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM;wBAAE,SAAS;oBACjC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;wBACzB,IAAI,EAAE,UAAU;wBAChB,MAAM,EAAE,OAAO;wBACf,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,UAAU,EAAE,GAAG,CAAC,UAAU;wBAC1B,QAAQ,EAAE,GAAG,CAAC,QAAQ;wBACtB,IAAI;wBACJ,SAAS,EAAE,GAAG;qBACf,CAAC,CAAC,CAAC;gBACN,CAAC;YACH,CAAC;YACD,OAAO;QACT,CAAC;QAED,6EAA6E;QAC7E,IAAI,GAAG,EAAE,IAAI,KAAK,aAAa,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAC/C,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,2CAA2C;QAC3C,IAAI,GAAG,EAAE,IAAI,KAAK,cAAc,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChD,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4BAA4B;IAC9B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Manager — groups web UI entity edits into edit sessions for clean git history.
|
|
3
|
+
*
|
|
4
|
+
* Each session is scoped to a (user, repo) pair. Edits extend the session's
|
|
5
|
+
* idle timer. When a session goes idle for SESSION_IDLE_MS, a single commit
|
|
6
|
+
* is made covering all entities touched during that session, and a
|
|
7
|
+
* `session_commit` WebSocket event is broadcast.
|
|
8
|
+
*
|
|
9
|
+
* This replaces the old CommitScheduler 30s threshold with a 5-minute idle
|
|
10
|
+
* window per user, preventing git history pollution while keeping attribution
|
|
11
|
+
* accurate per user.
|
|
12
|
+
*/
|
|
13
|
+
import type { WorkspaceManager } from '../core/workspace-manager.js';
|
|
14
|
+
import type { GitUser } from '../services/git.js';
|
|
15
|
+
import type { WsHub } from './ws-hub.js';
|
|
16
|
+
export declare class SessionManager {
|
|
17
|
+
private sessions;
|
|
18
|
+
private timer;
|
|
19
|
+
private workspaceManager;
|
|
20
|
+
private wsHub;
|
|
21
|
+
constructor(workspaceManager: WorkspaceManager, wsHub?: WsHub);
|
|
22
|
+
/**
|
|
23
|
+
* Record a disk write within a user's session for the given repo.
|
|
24
|
+
* Resets the idle timer and accumulates entity + file path info.
|
|
25
|
+
*/
|
|
26
|
+
markDirty(repoName: string, user: GitUser, entityType: string, entityId: string, filePath?: string): void;
|
|
27
|
+
/**
|
|
28
|
+
* Flush all sessions for a repo immediately.
|
|
29
|
+
* Used by the /api/repos/:repo/commit route (CLI compatibility).
|
|
30
|
+
* Returns true if anything was committed.
|
|
31
|
+
*/
|
|
32
|
+
flush(repoName: string): Promise<boolean>;
|
|
33
|
+
/**
|
|
34
|
+
* Flush all open sessions (called on server shutdown).
|
|
35
|
+
*/
|
|
36
|
+
flushAll(): Promise<void>;
|
|
37
|
+
private flushStale;
|
|
38
|
+
private commitSession;
|
|
39
|
+
destroy(): void;
|
|
40
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Manager — groups web UI entity edits into edit sessions for clean git history.
|
|
3
|
+
*
|
|
4
|
+
* Each session is scoped to a (user, repo) pair. Edits extend the session's
|
|
5
|
+
* idle timer. When a session goes idle for SESSION_IDLE_MS, a single commit
|
|
6
|
+
* is made covering all entities touched during that session, and a
|
|
7
|
+
* `session_commit` WebSocket event is broadcast.
|
|
8
|
+
*
|
|
9
|
+
* This replaces the old CommitScheduler 30s threshold with a 5-minute idle
|
|
10
|
+
* window per user, preventing git history pollution while keeping attribution
|
|
11
|
+
* accurate per user.
|
|
12
|
+
*/
|
|
13
|
+
const SESSION_IDLE_MS = 5 * 60_000; // 5 minutes idle → commit
|
|
14
|
+
const CHECK_INTERVAL_MS = 30_000; // check for stale sessions every 30s
|
|
15
|
+
export class SessionManager {
|
|
16
|
+
sessions = new Map(); // key: `${userId}:${repo}`
|
|
17
|
+
timer = null;
|
|
18
|
+
workspaceManager;
|
|
19
|
+
wsHub;
|
|
20
|
+
constructor(workspaceManager, wsHub) {
|
|
21
|
+
this.workspaceManager = workspaceManager;
|
|
22
|
+
this.wsHub = wsHub;
|
|
23
|
+
this.timer = setInterval(() => this.flushStale(), CHECK_INTERVAL_MS);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Record a disk write within a user's session for the given repo.
|
|
27
|
+
* Resets the idle timer and accumulates entity + file path info.
|
|
28
|
+
*/
|
|
29
|
+
markDirty(repoName, user, entityType, entityId, filePath) {
|
|
30
|
+
const key = `${user.id}:${repoName}`;
|
|
31
|
+
const existing = this.sessions.get(key);
|
|
32
|
+
if (existing) {
|
|
33
|
+
existing.lastActivityAt = Date.now();
|
|
34
|
+
existing.entities.add(`${entityType}/${entityId}`);
|
|
35
|
+
if (filePath)
|
|
36
|
+
existing.filePaths.add(filePath);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
const session = {
|
|
40
|
+
user,
|
|
41
|
+
repo: repoName,
|
|
42
|
+
lastActivityAt: Date.now(),
|
|
43
|
+
entities: new Set([`${entityType}/${entityId}`]),
|
|
44
|
+
filePaths: new Set(),
|
|
45
|
+
};
|
|
46
|
+
if (filePath)
|
|
47
|
+
session.filePaths.add(filePath);
|
|
48
|
+
this.sessions.set(key, session);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Flush all sessions for a repo immediately.
|
|
53
|
+
* Used by the /api/repos/:repo/commit route (CLI compatibility).
|
|
54
|
+
* Returns true if anything was committed.
|
|
55
|
+
*/
|
|
56
|
+
async flush(repoName) {
|
|
57
|
+
const toFlush = [];
|
|
58
|
+
for (const [key, session] of this.sessions) {
|
|
59
|
+
if (session.repo === repoName)
|
|
60
|
+
toFlush.push([key, session]);
|
|
61
|
+
}
|
|
62
|
+
if (toFlush.length === 0)
|
|
63
|
+
return false;
|
|
64
|
+
for (const [key] of toFlush)
|
|
65
|
+
this.sessions.delete(key);
|
|
66
|
+
const results = await Promise.all(toFlush.map(([, session]) => this.commitSession(session)));
|
|
67
|
+
return results.some(Boolean);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Flush all open sessions (called on server shutdown).
|
|
71
|
+
*/
|
|
72
|
+
async flushAll() {
|
|
73
|
+
const entries = Array.from(this.sessions.entries());
|
|
74
|
+
console.log(`[session-manager] flushAll: flushing ${entries.length} open session(s) on shutdown`);
|
|
75
|
+
this.sessions.clear();
|
|
76
|
+
await Promise.all(entries.map(([, session]) => this.commitSession(session)));
|
|
77
|
+
console.log(`[session-manager] flushAll: done`);
|
|
78
|
+
}
|
|
79
|
+
async flushStale() {
|
|
80
|
+
const now = Date.now();
|
|
81
|
+
const toFlush = [];
|
|
82
|
+
for (const [key, session] of this.sessions) {
|
|
83
|
+
if (now - session.lastActivityAt >= SESSION_IDLE_MS) {
|
|
84
|
+
toFlush.push([key, session]);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
for (const [key] of toFlush)
|
|
88
|
+
this.sessions.delete(key);
|
|
89
|
+
await Promise.all(toFlush.map(([, session]) => this.commitSession(session)));
|
|
90
|
+
}
|
|
91
|
+
async commitSession(session) {
|
|
92
|
+
try {
|
|
93
|
+
const graph = this.workspaceManager.getGraph(session.repo);
|
|
94
|
+
const gitService = graph.getGitService();
|
|
95
|
+
if (!gitService)
|
|
96
|
+
return false;
|
|
97
|
+
if (!gitService.hasUncommittedChanges())
|
|
98
|
+
return false;
|
|
99
|
+
const entities = Array.from(session.entities);
|
|
100
|
+
const listed = entities.slice(0, 3).join(', ');
|
|
101
|
+
const overflow = entities.length > 3 ? ` (+${entities.length - 3} more)` : '';
|
|
102
|
+
const date = new Date().toISOString().slice(0, 10);
|
|
103
|
+
const message = `Edit session · ${listed}${overflow} · ${session.user.name} · ${date}`;
|
|
104
|
+
if (session.filePaths.size > 0) {
|
|
105
|
+
gitService.commitFiles(Array.from(session.filePaths), message, session.user);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
gitService.commitAll(message, session.user);
|
|
109
|
+
}
|
|
110
|
+
this.wsHub?.broadcast({
|
|
111
|
+
type: 'session_commit',
|
|
112
|
+
repo: session.repo,
|
|
113
|
+
entities: Array.from(session.entities),
|
|
114
|
+
actor: session.user.name,
|
|
115
|
+
timestamp: new Date().toISOString(),
|
|
116
|
+
});
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
console.warn(`[session-manager] Failed to commit ${session.repo}:`, err.message);
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
destroy() {
|
|
125
|
+
if (this.timer) {
|
|
126
|
+
clearInterval(this.timer);
|
|
127
|
+
this.timer = null;
|
|
128
|
+
}
|
|
129
|
+
this.sessions.clear();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=session-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/server/session-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/server/ws-hub.d.ts
CHANGED
|
@@ -23,13 +23,107 @@ export interface WsRepoSyncEvent {
|
|
|
23
23
|
actor: string;
|
|
24
24
|
timestamp: string;
|
|
25
25
|
}
|
|
26
|
-
|
|
26
|
+
/** Emitted when a user's edit session closes and changes are committed. */
|
|
27
|
+
export interface WsSessionCommitEvent {
|
|
28
|
+
type: 'session_commit';
|
|
29
|
+
repo: string;
|
|
30
|
+
entities: string[];
|
|
31
|
+
actor: string;
|
|
32
|
+
timestamp: string;
|
|
33
|
+
}
|
|
34
|
+
/** Emitted when a sync pipeline run completes for a collection. */
|
|
35
|
+
export interface WsSyncCompleteEvent {
|
|
36
|
+
type: 'sync_complete';
|
|
37
|
+
repo: string;
|
|
38
|
+
source: string;
|
|
39
|
+
created: number;
|
|
40
|
+
updated: number;
|
|
41
|
+
deleted: number;
|
|
42
|
+
actor: string;
|
|
43
|
+
timestamp: string;
|
|
44
|
+
}
|
|
45
|
+
/** Emitted during a sync run to report progress steps. */
|
|
46
|
+
export interface WsSyncProgressEvent {
|
|
47
|
+
type: 'sync_progress';
|
|
48
|
+
repo: string;
|
|
49
|
+
message: string;
|
|
50
|
+
actor: string;
|
|
51
|
+
timestamp: string;
|
|
52
|
+
}
|
|
53
|
+
/** Emitted when a collection is created or deleted. */
|
|
54
|
+
export interface WsCollectionEvent {
|
|
55
|
+
type: 'collection_created' | 'collection_deleted';
|
|
56
|
+
repo: string;
|
|
57
|
+
actor: string;
|
|
58
|
+
timestamp: string;
|
|
59
|
+
}
|
|
60
|
+
/** Emitted when a user's access to a collection is granted or revoked. */
|
|
61
|
+
export interface WsAccessEvent {
|
|
62
|
+
type: 'access_granted' | 'access_revoked';
|
|
63
|
+
repo: string;
|
|
64
|
+
userId: string;
|
|
65
|
+
actor: string;
|
|
66
|
+
timestamp: string;
|
|
67
|
+
}
|
|
68
|
+
/** Emitted when a user connects or disconnects (workspace-level online status). */
|
|
69
|
+
export interface WsOnlineEvent {
|
|
70
|
+
type: 'online';
|
|
71
|
+
action: 'join' | 'leave';
|
|
72
|
+
user: {
|
|
73
|
+
id: string;
|
|
74
|
+
name: string;
|
|
75
|
+
};
|
|
76
|
+
timestamp: string;
|
|
77
|
+
}
|
|
78
|
+
/** Emitted when a user enters or leaves an entity view (presence). */
|
|
79
|
+
export interface WsPresenceEvent {
|
|
80
|
+
type: 'presence';
|
|
81
|
+
action: 'enter' | 'leave' | 'heartbeat';
|
|
82
|
+
repo: string;
|
|
83
|
+
entityType: string;
|
|
84
|
+
entityId: string;
|
|
85
|
+
user: {
|
|
86
|
+
id: string;
|
|
87
|
+
name: string;
|
|
88
|
+
color?: string;
|
|
89
|
+
};
|
|
90
|
+
timestamp: string;
|
|
91
|
+
}
|
|
92
|
+
export type WsEvent = WsChangeEvent | WsRepoSyncEvent | WsSessionCommitEvent | WsSyncCompleteEvent | WsSyncProgressEvent | WsCollectionEvent | WsPresenceEvent | WsOnlineEvent | WsAccessEvent;
|
|
27
93
|
export declare class WsHub {
|
|
28
94
|
private clients;
|
|
29
95
|
private heartbeatTimer;
|
|
96
|
+
private presenceMap;
|
|
97
|
+
private onlineMap;
|
|
30
98
|
constructor();
|
|
31
99
|
addClient(ws: WebSocket, user: AuthUser | null, collections: string[] | null): void;
|
|
100
|
+
/**
|
|
101
|
+
* Handle a presence message sent by a client.
|
|
102
|
+
* Updates server-side presence state and broadcasts to collection peers.
|
|
103
|
+
*/
|
|
104
|
+
handlePresence(action: 'enter' | 'leave' | 'heartbeat', repo: string, entityType: string, entityId: string, user: {
|
|
105
|
+
id: string;
|
|
106
|
+
name: string;
|
|
107
|
+
color?: string;
|
|
108
|
+
}): void;
|
|
109
|
+
/** Return current presence for an entity (for initial state on connect). */
|
|
110
|
+
getPresence(repo: string, entityType: string, entityId: string): Array<{
|
|
111
|
+
id: string;
|
|
112
|
+
name: string;
|
|
113
|
+
color?: string;
|
|
114
|
+
}>;
|
|
115
|
+
/** Send the full current presence map to a single newly connected client. */
|
|
116
|
+
sendPresenceSnapshot(ws: WebSocket, collections: Set<string> | null): void;
|
|
117
|
+
private broadcastOnline;
|
|
118
|
+
private sendOnlineSnapshot;
|
|
119
|
+
private clearUserPresence;
|
|
32
120
|
broadcast(event: WsEvent): void;
|
|
121
|
+
/** Send an event directly to all connections belonging to a specific user, bypassing repo filtering. */
|
|
122
|
+
broadcastToUser(userId: string, event: WsEvent): void;
|
|
123
|
+
/** Record an app-level pong from a client (called by ws route on message). */
|
|
124
|
+
handlePong(ws: WebSocket): void;
|
|
125
|
+
/** Iterate over all connected client sockets (for collab broadcasting). */
|
|
126
|
+
forEachSocket(fn: (ws: WebSocket) => void): void;
|
|
33
127
|
get connectionCount(): number;
|
|
34
128
|
destroy(): void;
|
|
35
129
|
private canReceive;
|