@saluzi/saluzi-edu 0.2.11 → 0.2.13
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/cli.js +216 -142
- package/dist/oms-transition.js +2 -1
- package/dist/rcs-web/assets/Dashboard-YYwDrKTN.js +1 -0
- package/dist/rcs-web/assets/Join-DKCP5X6X.js +1 -0
- package/dist/rcs-web/assets/Login-0VGZs85I.js +1 -0
- package/{packages/remote-control-server/web/dist/assets/SessionDetail-DNdfPOYy.js → dist/rcs-web/assets/SessionDetail-DmK-DfBQ.js} +11 -11
- package/dist/rcs-web/assets/Setup-C0cjxXMt.js +1 -0
- package/dist/rcs-web/assets/{ShareLanding-CP3Z6ckr.js → ShareLanding-DUZrreJ7.js} +1 -1
- package/dist/rcs-web/assets/TeamCreate-B8ZV6EdY.js +1 -0
- package/dist/rcs-web/assets/{TeamDetail-CkNTFoMB.js → TeamDetail-DBAsJ__i.js} +2 -2
- package/dist/rcs-web/assets/{TeamList-Bf0sQ5RQ.js → TeamList-C-Hte4nV.js} +1 -1
- package/dist/rcs-web/assets/TeamSettings-CNVwYwcp.js +1 -0
- package/dist/rcs-web/assets/UserSettings-DRdz9kYE.js +1 -0
- package/dist/rcs-web/assets/{arc-BxxmNQO6.js → arc-CJxirXEQ.js} +1 -1
- package/dist/rcs-web/assets/{architectureDiagram-3BPJPVTR-DBjkRdbd.js → architectureDiagram-3BPJPVTR-BZvIHrLA.js} +1 -1
- package/dist/rcs-web/assets/{blockDiagram-GPEHLZMM-BF6COWlM.js → blockDiagram-GPEHLZMM-3p0y3Ija.js} +1 -1
- package/{packages/remote-control-server/web/dist/assets/c4Diagram-AAUBKEIU-DHOf390v.js → dist/rcs-web/assets/c4Diagram-AAUBKEIU-Bmz9A1wn.js} +1 -1
- package/dist/rcs-web/assets/channel-DaI_n8dp.js +1 -0
- package/dist/rcs-web/assets/{chunk-2J33WTMH-CeJN8yjM.js → chunk-2J33WTMH-B8gQz22j.js} +1 -1
- package/dist/rcs-web/assets/{chunk-4BX2VUAB-jP76_P2A.js → chunk-4BX2VUAB-CgLEZsTU.js} +1 -1
- package/dist/rcs-web/assets/{chunk-55IACEB6-BsFA6emB.js → chunk-55IACEB6-0mdE_-IS.js} +1 -1
- package/{packages/remote-control-server/web/dist/assets/chunk-727SXJPM-BF4HrQjZ.js → dist/rcs-web/assets/chunk-727SXJPM-DdtjnIHR.js} +1 -1
- package/{packages/remote-control-server/web/dist/assets/chunk-AQP2D5EJ-DToJ74Kc.js → dist/rcs-web/assets/chunk-AQP2D5EJ-BtwFPk50.js} +1 -1
- package/dist/rcs-web/assets/{chunk-FMBD7UC4-DVTARgsa.js → chunk-FMBD7UC4-BcO9mQ0P.js} +1 -1
- package/dist/rcs-web/assets/{chunk-ND2GUHAM-C50Gqv9c.js → chunk-ND2GUHAM-BvRq13S_.js} +1 -1
- package/dist/rcs-web/assets/{chunk-QZHKN3VN-EsIIh6zV.js → chunk-QZHKN3VN-D7GHkPpq.js} +1 -1
- package/dist/rcs-web/assets/classDiagram-4FO5ZUOK-pYllpkOq.js +1 -0
- package/dist/rcs-web/assets/classDiagram-v2-Q7XG4LA2-pYllpkOq.js +1 -0
- package/dist/rcs-web/assets/{code-block-IT6T5CEO-BnufHNTT.js → code-block-IT6T5CEO-B1p-vO-3.js} +1 -1
- package/{packages/remote-control-server/web/dist/assets/cose-bilkent-S5V4N54A-M6tNt14I.js → dist/rcs-web/assets/cose-bilkent-S5V4N54A-L0rUZuH5.js} +1 -1
- package/dist/rcs-web/assets/{dagre-BM42HDAG-DaTm29qG.js → dagre-BM42HDAG-CHGuio22.js} +1 -1
- package/dist/rcs-web/assets/{diagram-2AECGRRQ-fqoeOvq2.js → diagram-2AECGRRQ-DIDRyQk8.js} +1 -1
- package/dist/rcs-web/assets/{diagram-5GNKFQAL-6s2CiaGG.js → diagram-5GNKFQAL-CNubKb6P.js} +1 -1
- package/dist/rcs-web/assets/{diagram-KO2AKTUF-C0aw_N95.js → diagram-KO2AKTUF-CzQh664-.js} +1 -1
- package/dist/rcs-web/assets/{diagram-LMA3HP47-C8_Rv3rB.js → diagram-LMA3HP47-CWBR7-VG.js} +1 -1
- package/dist/rcs-web/assets/{diagram-OG6HWLK6-Dae4u8Uc.js → diagram-OG6HWLK6-BMHdlbcZ.js} +1 -1
- package/{packages/remote-control-server/web/dist/assets/erDiagram-TEJ5UH35-CosS5VWr.js → dist/rcs-web/assets/erDiagram-TEJ5UH35-OgT8dC-K.js} +1 -1
- package/{packages/remote-control-server/web/dist/assets/flowDiagram-I6XJVG4X-D_Mxs46-.js → dist/rcs-web/assets/flowDiagram-I6XJVG4X-DRrCY2oB.js} +1 -1
- package/dist/rcs-web/assets/{ganttDiagram-6RSMTGT7-B0jy8Am_.js → ganttDiagram-6RSMTGT7-DctpzEKN.js} +1 -1
- package/dist/rcs-web/assets/{gitGraphDiagram-PVQCEYII-CSdu2HVI.js → gitGraphDiagram-PVQCEYII-5KpLszm9.js} +1 -1
- package/dist/rcs-web/assets/{infoDiagram-5YYISTIA-Dcbc9L1S.js → infoDiagram-5YYISTIA-BAKD_Tt7.js} +1 -1
- package/{packages/remote-control-server/web/dist/assets/ishikawaDiagram-YF4QCWOH-BLMjFE4t.js → dist/rcs-web/assets/ishikawaDiagram-YF4QCWOH-VHOPG4Nc.js} +1 -1
- package/dist/rcs-web/assets/{journeyDiagram-JHISSGLW-Dw4nh1xI.js → journeyDiagram-JHISSGLW-BtGih-ik.js} +1 -1
- package/dist/rcs-web/assets/{kanban-definition-UN3LZRKU-DkU3j_ly.js → kanban-definition-UN3LZRKU-BsEGZsD1.js} +1 -1
- package/dist/rcs-web/assets/{linear-N5Cify7M.js → linear-Dj636PNG.js} +1 -1
- package/dist/rcs-web/assets/main-CkqtCllF.js +238 -0
- package/dist/rcs-web/assets/{mermaid-VLURNSYL-gfiJUpl_.js → mermaid-VLURNSYL-DutpHHm9.js} +4 -4
- package/dist/rcs-web/assets/{mermaid.core-B_Xc65Bf.js → mermaid.core-XHHf0pen.js} +5 -5
- package/dist/rcs-web/assets/{mindmap-definition-RKZ34NQL-DUavHfNu.js → mindmap-definition-RKZ34NQL-BBa8V_3g.js} +1 -1
- package/dist/rcs-web/assets/{pieDiagram-4H26LBE5-DSJaToTU.js → pieDiagram-4H26LBE5-BuNEdo9H.js} +1 -1
- package/dist/rcs-web/assets/{quadrantDiagram-W4KKPZXB-BFp6TnHj.js → quadrantDiagram-W4KKPZXB-CsJgyQIN.js} +1 -1
- package/dist/rcs-web/assets/{requirementDiagram-4Y6WPE33-eil6F3-O.js → requirementDiagram-4Y6WPE33-DqMJZ914.js} +1 -1
- package/{packages/remote-control-server/web/dist/assets/sankeyDiagram-5OEKKPKP-DbGhoepK.js → dist/rcs-web/assets/sankeyDiagram-5OEKKPKP-CVsz09q2.js} +1 -1
- package/{packages/remote-control-server/web/dist/assets/sequenceDiagram-3UESZ5HK-B0YrN1ud.js → dist/rcs-web/assets/sequenceDiagram-3UESZ5HK-BRp4Wddn.js} +1 -1
- package/dist/rcs-web/assets/{stateDiagram-AJRCARHV-CofFPj3N.js → stateDiagram-AJRCARHV-S-QqQr-D.js} +1 -1
- package/dist/rcs-web/assets/{stateDiagram-v2-BHNVJYJU-DPlcvPn1.js → stateDiagram-v2-BHNVJYJU-D77KfDr-.js} +1 -1
- package/{packages/remote-control-server/web/dist/assets/timeline-definition-PNZ67QCA-Bx4dusy8.js → dist/rcs-web/assets/timeline-definition-PNZ67QCA-De8bFWnE.js} +1 -1
- package/dist/rcs-web/assets/{useTeams-MDI4djXg.js → useTeams-CqJOqEy1.js} +1 -1
- package/dist/rcs-web/assets/{vennDiagram-CIIHVFJN-B_-3l-MF.js → vennDiagram-CIIHVFJN-Dikwrn1L.js} +1 -1
- package/dist/rcs-web/assets/{wardleyDiagram-YWT4CUSO-DNSn-pGp.js → wardleyDiagram-YWT4CUSO-DUzpiV6H.js} +1 -1
- package/dist/rcs-web/assets/{workerType-OM09y7Lk.js → workerType-DOQ0AHrq.js} +1 -1
- package/dist/rcs-web/assets/{xychartDiagram-2RQKCTM6-TqUbNp0j.js → xychartDiagram-2RQKCTM6-OZNbB32D.js} +1 -1
- package/dist/rcs-web/index.html +1 -1
- package/package.json +2 -2
- package/packages/remote-control-server/src/__tests__/auth-security.test.ts +18 -5
- package/packages/remote-control-server/src/__tests__/cookie.test.ts +0 -71
- package/packages/remote-control-server/src/__tests__/data-layer-round2.test.ts +556 -0
- package/packages/remote-control-server/src/__tests__/route-mounting.test.ts +212 -0
- package/packages/remote-control-server/src/__tests__/routes.test.ts +5 -44
- package/packages/remote-control-server/src/__tests__/security-fixes.test.ts +526 -0
- package/packages/remote-control-server/src/__tests__/security-round3.test.ts +780 -0
- package/packages/remote-control-server/src/__tests__/shares.test.ts +5 -2
- package/packages/remote-control-server/src/auth/constants.ts +0 -6
- package/packages/remote-control-server/src/auth/cookie.ts +0 -43
- package/packages/remote-control-server/src/auth/csrf.ts +58 -0
- package/packages/remote-control-server/src/auth/middleware.ts +7 -4
- package/packages/remote-control-server/src/index.ts +26 -0
- package/packages/remote-control-server/src/registerRoutes.ts +17 -1
- package/packages/remote-control-server/src/routes/web/auth-routes.ts +116 -78
- package/packages/remote-control-server/src/routes/web/auth.ts +16 -23
- package/packages/remote-control-server/src/routes/web/sessions.ts +30 -5
- package/packages/remote-control-server/src/routes/web/shares.ts +38 -1
- package/packages/remote-control-server/src/routes/web/teams.ts +22 -4
- package/packages/remote-control-server/src/services/session.ts +143 -9
- package/packages/remote-control-server/src/store.ts +34 -1
- package/packages/remote-control-server/src/types/api.ts +0 -1
- package/packages/remote-control-server/web/dist/assets/Dashboard-YYwDrKTN.js +1 -0
- package/packages/remote-control-server/web/dist/assets/Join-DKCP5X6X.js +1 -0
- package/packages/remote-control-server/web/dist/assets/Login-0VGZs85I.js +1 -0
- package/{dist/rcs-web/assets/SessionDetail-DNdfPOYy.js → packages/remote-control-server/web/dist/assets/SessionDetail-DmK-DfBQ.js} +11 -11
- package/packages/remote-control-server/web/dist/assets/Setup-C0cjxXMt.js +1 -0
- package/packages/remote-control-server/web/dist/assets/{ShareLanding-CP3Z6ckr.js → ShareLanding-DUZrreJ7.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/TeamCreate-B8ZV6EdY.js +1 -0
- package/packages/remote-control-server/web/dist/assets/{TeamDetail-CkNTFoMB.js → TeamDetail-DBAsJ__i.js} +2 -2
- package/packages/remote-control-server/web/dist/assets/{TeamList-Bf0sQ5RQ.js → TeamList-C-Hte4nV.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/TeamSettings-CNVwYwcp.js +1 -0
- package/packages/remote-control-server/web/dist/assets/UserSettings-DRdz9kYE.js +1 -0
- package/packages/remote-control-server/web/dist/assets/{arc-BxxmNQO6.js → arc-CJxirXEQ.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{architectureDiagram-3BPJPVTR-DBjkRdbd.js → architectureDiagram-3BPJPVTR-BZvIHrLA.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{blockDiagram-GPEHLZMM-BF6COWlM.js → blockDiagram-GPEHLZMM-3p0y3Ija.js} +1 -1
- package/{dist/rcs-web/assets/c4Diagram-AAUBKEIU-DHOf390v.js → packages/remote-control-server/web/dist/assets/c4Diagram-AAUBKEIU-Bmz9A1wn.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/channel-DaI_n8dp.js +1 -0
- package/packages/remote-control-server/web/dist/assets/{chunk-2J33WTMH-CeJN8yjM.js → chunk-2J33WTMH-B8gQz22j.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{chunk-4BX2VUAB-jP76_P2A.js → chunk-4BX2VUAB-CgLEZsTU.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{chunk-55IACEB6-BsFA6emB.js → chunk-55IACEB6-0mdE_-IS.js} +1 -1
- package/{dist/rcs-web/assets/chunk-727SXJPM-BF4HrQjZ.js → packages/remote-control-server/web/dist/assets/chunk-727SXJPM-DdtjnIHR.js} +1 -1
- package/{dist/rcs-web/assets/chunk-AQP2D5EJ-DToJ74Kc.js → packages/remote-control-server/web/dist/assets/chunk-AQP2D5EJ-BtwFPk50.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{chunk-FMBD7UC4-DVTARgsa.js → chunk-FMBD7UC4-BcO9mQ0P.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{chunk-ND2GUHAM-C50Gqv9c.js → chunk-ND2GUHAM-BvRq13S_.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{chunk-QZHKN3VN-EsIIh6zV.js → chunk-QZHKN3VN-D7GHkPpq.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/classDiagram-4FO5ZUOK-pYllpkOq.js +1 -0
- package/packages/remote-control-server/web/dist/assets/classDiagram-v2-Q7XG4LA2-pYllpkOq.js +1 -0
- package/packages/remote-control-server/web/dist/assets/{code-block-IT6T5CEO-BnufHNTT.js → code-block-IT6T5CEO-B1p-vO-3.js} +1 -1
- package/{dist/rcs-web/assets/cose-bilkent-S5V4N54A-M6tNt14I.js → packages/remote-control-server/web/dist/assets/cose-bilkent-S5V4N54A-L0rUZuH5.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{dagre-BM42HDAG-DaTm29qG.js → dagre-BM42HDAG-CHGuio22.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{diagram-2AECGRRQ-fqoeOvq2.js → diagram-2AECGRRQ-DIDRyQk8.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{diagram-5GNKFQAL-6s2CiaGG.js → diagram-5GNKFQAL-CNubKb6P.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{diagram-KO2AKTUF-C0aw_N95.js → diagram-KO2AKTUF-CzQh664-.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{diagram-LMA3HP47-C8_Rv3rB.js → diagram-LMA3HP47-CWBR7-VG.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{diagram-OG6HWLK6-Dae4u8Uc.js → diagram-OG6HWLK6-BMHdlbcZ.js} +1 -1
- package/{dist/rcs-web/assets/erDiagram-TEJ5UH35-CosS5VWr.js → packages/remote-control-server/web/dist/assets/erDiagram-TEJ5UH35-OgT8dC-K.js} +1 -1
- package/{dist/rcs-web/assets/flowDiagram-I6XJVG4X-D_Mxs46-.js → packages/remote-control-server/web/dist/assets/flowDiagram-I6XJVG4X-DRrCY2oB.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{ganttDiagram-6RSMTGT7-B0jy8Am_.js → ganttDiagram-6RSMTGT7-DctpzEKN.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{gitGraphDiagram-PVQCEYII-CSdu2HVI.js → gitGraphDiagram-PVQCEYII-5KpLszm9.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{infoDiagram-5YYISTIA-Dcbc9L1S.js → infoDiagram-5YYISTIA-BAKD_Tt7.js} +1 -1
- package/{dist/rcs-web/assets/ishikawaDiagram-YF4QCWOH-BLMjFE4t.js → packages/remote-control-server/web/dist/assets/ishikawaDiagram-YF4QCWOH-VHOPG4Nc.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{journeyDiagram-JHISSGLW-Dw4nh1xI.js → journeyDiagram-JHISSGLW-BtGih-ik.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{kanban-definition-UN3LZRKU-DkU3j_ly.js → kanban-definition-UN3LZRKU-BsEGZsD1.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{linear-N5Cify7M.js → linear-Dj636PNG.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/main-CkqtCllF.js +238 -0
- package/packages/remote-control-server/web/dist/assets/{mermaid-VLURNSYL-gfiJUpl_.js → mermaid-VLURNSYL-DutpHHm9.js} +4 -4
- package/packages/remote-control-server/web/dist/assets/{mermaid.core-B_Xc65Bf.js → mermaid.core-XHHf0pen.js} +5 -5
- package/packages/remote-control-server/web/dist/assets/{mindmap-definition-RKZ34NQL-DUavHfNu.js → mindmap-definition-RKZ34NQL-BBa8V_3g.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{pieDiagram-4H26LBE5-DSJaToTU.js → pieDiagram-4H26LBE5-BuNEdo9H.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{quadrantDiagram-W4KKPZXB-BFp6TnHj.js → quadrantDiagram-W4KKPZXB-CsJgyQIN.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{requirementDiagram-4Y6WPE33-eil6F3-O.js → requirementDiagram-4Y6WPE33-DqMJZ914.js} +1 -1
- package/{dist/rcs-web/assets/sankeyDiagram-5OEKKPKP-DbGhoepK.js → packages/remote-control-server/web/dist/assets/sankeyDiagram-5OEKKPKP-CVsz09q2.js} +1 -1
- package/{dist/rcs-web/assets/sequenceDiagram-3UESZ5HK-B0YrN1ud.js → packages/remote-control-server/web/dist/assets/sequenceDiagram-3UESZ5HK-BRp4Wddn.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{stateDiagram-AJRCARHV-CofFPj3N.js → stateDiagram-AJRCARHV-S-QqQr-D.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{stateDiagram-v2-BHNVJYJU-DPlcvPn1.js → stateDiagram-v2-BHNVJYJU-D77KfDr-.js} +1 -1
- package/{dist/rcs-web/assets/timeline-definition-PNZ67QCA-Bx4dusy8.js → packages/remote-control-server/web/dist/assets/timeline-definition-PNZ67QCA-De8bFWnE.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{useTeams-MDI4djXg.js → useTeams-CqJOqEy1.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{vennDiagram-CIIHVFJN-B_-3l-MF.js → vennDiagram-CIIHVFJN-Dikwrn1L.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{wardleyDiagram-YWT4CUSO-DNSn-pGp.js → wardleyDiagram-YWT4CUSO-DUzpiV6H.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{workerType-OM09y7Lk.js → workerType-DOQ0AHrq.js} +1 -1
- package/packages/remote-control-server/web/dist/assets/{xychartDiagram-2RQKCTM6-TqUbNp0j.js → xychartDiagram-2RQKCTM6-OZNbB32D.js} +1 -1
- package/packages/remote-control-server/web/dist/index.html +1 -1
- package/dist/rcs-web/assets/Dashboard-BwotBWlJ.js +0 -1
- package/dist/rcs-web/assets/Join-4yrksbdX.js +0 -1
- package/dist/rcs-web/assets/Login-Cxm_yEeE.js +0 -1
- package/dist/rcs-web/assets/Setup-BiAAxugt.js +0 -1
- package/dist/rcs-web/assets/TeamCreate-DgdCwRSb.js +0 -1
- package/dist/rcs-web/assets/TeamSettings-BaNAfXU3.js +0 -1
- package/dist/rcs-web/assets/UserSettings-CsutQjxG.js +0 -1
- package/dist/rcs-web/assets/channel-JsvbMQjW.js +0 -1
- package/dist/rcs-web/assets/classDiagram-4FO5ZUOK-BXn8Uc4c.js +0 -1
- package/dist/rcs-web/assets/classDiagram-v2-Q7XG4LA2-BXn8Uc4c.js +0 -1
- package/dist/rcs-web/assets/i18n-Dbt-vEQ3.js +0 -1
- package/dist/rcs-web/assets/main-30YqUvTd.js +0 -238
- package/packages/remote-control-server/web/dist/assets/Dashboard-BwotBWlJ.js +0 -1
- package/packages/remote-control-server/web/dist/assets/Join-4yrksbdX.js +0 -1
- package/packages/remote-control-server/web/dist/assets/Login-Cxm_yEeE.js +0 -1
- package/packages/remote-control-server/web/dist/assets/Setup-BiAAxugt.js +0 -1
- package/packages/remote-control-server/web/dist/assets/TeamCreate-DgdCwRSb.js +0 -1
- package/packages/remote-control-server/web/dist/assets/TeamSettings-BaNAfXU3.js +0 -1
- package/packages/remote-control-server/web/dist/assets/UserSettings-CsutQjxG.js +0 -1
- package/packages/remote-control-server/web/dist/assets/channel-JsvbMQjW.js +0 -1
- package/packages/remote-control-server/web/dist/assets/classDiagram-4FO5ZUOK-BXn8Uc4c.js +0 -1
- package/packages/remote-control-server/web/dist/assets/classDiagram-v2-Q7XG4LA2-BXn8Uc4c.js +0 -1
- package/packages/remote-control-server/web/dist/assets/i18n-Dbt-vEQ3.js +0 -1
- package/packages/remote-control-server/web/dist/assets/main-30YqUvTd.js +0 -238
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { describe, test, expect, beforeEach, mock } from 'bun:test'
|
|
2
|
+
import { mockConfigModule } from './helpers/mock-config'
|
|
3
|
+
|
|
4
|
+
// Mock config before any imports
|
|
5
|
+
mock.module('../config', () => mockConfigModule())
|
|
6
|
+
|
|
7
|
+
import { Hono } from 'hono'
|
|
8
|
+
import type { MiddlewareHandler } from 'hono/types'
|
|
9
|
+
import { resetDbSingleton, getDb } from '../db/sqlite'
|
|
10
|
+
|
|
11
|
+
// Dummy serveStatic — returns a middleware.
|
|
12
|
+
// When `path: 'index.html'` is set, serves SPA fallback HTML.
|
|
13
|
+
// Otherwise, passes through (simulates "file not found" so downstream routes handle it).
|
|
14
|
+
const serveStatic: (opts: Record<string, unknown>) => MiddlewareHandler = (
|
|
15
|
+
opts: Record<string, unknown>,
|
|
16
|
+
) => {
|
|
17
|
+
const path = opts.path as string | undefined
|
|
18
|
+
if (path === 'index.html') {
|
|
19
|
+
return c => c.html('<!DOCTYPE html><html><body>SPA</body></html>')
|
|
20
|
+
}
|
|
21
|
+
return async (_c, next) => {
|
|
22
|
+
await next()
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Dummy upgradeWebSocket
|
|
27
|
+
const upgradeWebSocket = (() => {
|
|
28
|
+
return () => (c: import('hono').Context, next: import('hono').Next) =>
|
|
29
|
+
next()
|
|
30
|
+
}) as import('hono/ws').UpgradeWebSocket<unknown>
|
|
31
|
+
|
|
32
|
+
import { registerRoutes } from '../registerRoutes'
|
|
33
|
+
|
|
34
|
+
function createApp(): Hono {
|
|
35
|
+
const app = new Hono()
|
|
36
|
+
registerRoutes(app, serveStatic, upgradeWebSocket)
|
|
37
|
+
return app
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function setupTestDb(): void {
|
|
41
|
+
resetDbSingleton()
|
|
42
|
+
// Force init with an in-memory-like temp path
|
|
43
|
+
getDb()
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
describe('Route mounting integration', () => {
|
|
47
|
+
let app: Hono
|
|
48
|
+
|
|
49
|
+
beforeEach(() => {
|
|
50
|
+
setupTestDb()
|
|
51
|
+
app = createApp()
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
// -------------------------------------------------------------------------
|
|
55
|
+
// Task 1: auth-routes mounted at /web/auth
|
|
56
|
+
// -------------------------------------------------------------------------
|
|
57
|
+
describe('auth-routes mounted at /web/auth', () => {
|
|
58
|
+
test('GET /web/auth/me returns 401 (not 404) when unauthenticated', async () => {
|
|
59
|
+
const res = await app.request('/web/auth/me', { method: 'GET' })
|
|
60
|
+
// Should NOT be 404 — route is mounted. 401 because no auth token.
|
|
61
|
+
expect(res.status).not.toBe(404)
|
|
62
|
+
expect(res.status).toBe(401)
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
test('POST /web/auth/login returns 400 (not 404) for empty body', async () => {
|
|
66
|
+
const res = await app.request('/web/auth/login', {
|
|
67
|
+
method: 'POST',
|
|
68
|
+
headers: { 'Content-Type': 'application/json' },
|
|
69
|
+
body: JSON.stringify({}),
|
|
70
|
+
})
|
|
71
|
+
// Route exists → should not 404. Missing fields → 400.
|
|
72
|
+
expect(res.status).not.toBe(404)
|
|
73
|
+
expect(res.status).toBe(400)
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
test('GET /web/auth/setup-status returns 200 (not 404)', async () => {
|
|
77
|
+
const res = await app.request('/web/auth/setup-status', {
|
|
78
|
+
method: 'GET',
|
|
79
|
+
})
|
|
80
|
+
expect(res.status).not.toBe(404)
|
|
81
|
+
expect(res.status).toBe(200)
|
|
82
|
+
})
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
// -------------------------------------------------------------------------
|
|
86
|
+
// Task 1: shares mounted at /web
|
|
87
|
+
// -------------------------------------------------------------------------
|
|
88
|
+
describe('shares routes mounted at /web', () => {
|
|
89
|
+
test('POST /web/sessions/test/share returns 401 (not 404)', async () => {
|
|
90
|
+
const res = await app.request('/web/sessions/test/share', {
|
|
91
|
+
method: 'POST',
|
|
92
|
+
headers: { 'Content-Type': 'application/json' },
|
|
93
|
+
body: JSON.stringify({}),
|
|
94
|
+
})
|
|
95
|
+
// Route mounted → not 404. No auth → 401.
|
|
96
|
+
expect(res.status).not.toBe(404)
|
|
97
|
+
expect(res.status).toBe(401)
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
test('GET /web/sessions/s/test-token returns 401 (not 404)', async () => {
|
|
101
|
+
const res = await app.request('/web/sessions/s/test-token', {
|
|
102
|
+
method: 'GET',
|
|
103
|
+
})
|
|
104
|
+
// Route mounted → not 404. No auth → 401.
|
|
105
|
+
expect(res.status).not.toBe(404)
|
|
106
|
+
expect(res.status).toBe(401)
|
|
107
|
+
})
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
// -------------------------------------------------------------------------
|
|
111
|
+
// Task 1: teams mounted at /web
|
|
112
|
+
// -------------------------------------------------------------------------
|
|
113
|
+
describe('teams routes mounted at /web', () => {
|
|
114
|
+
test('GET /web/teams returns 401 (not 404)', async () => {
|
|
115
|
+
const res = await app.request('/web/teams', { method: 'GET' })
|
|
116
|
+
// Route mounted → not 404. No auth → 401.
|
|
117
|
+
expect(res.status).not.toBe(404)
|
|
118
|
+
expect(res.status).toBe(401)
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
test('POST /web/teams returns 401 (not 404)', async () => {
|
|
122
|
+
const res = await app.request('/web/teams', {
|
|
123
|
+
method: 'POST',
|
|
124
|
+
headers: { 'Content-Type': 'application/json' },
|
|
125
|
+
body: JSON.stringify({ name: 'test', slug: 'test-team' }),
|
|
126
|
+
})
|
|
127
|
+
expect(res.status).not.toBe(404)
|
|
128
|
+
expect(res.status).toBe(401)
|
|
129
|
+
})
|
|
130
|
+
})
|
|
131
|
+
|
|
132
|
+
// -------------------------------------------------------------------------
|
|
133
|
+
// Existing /web/bind stub still works
|
|
134
|
+
// -------------------------------------------------------------------------
|
|
135
|
+
describe('legacy /web/bind stub preserved', () => {
|
|
136
|
+
test('POST /web/bind returns 410 Gone', async () => {
|
|
137
|
+
const res = await app.request('/web/bind', { method: 'POST' })
|
|
138
|
+
expect(res.status).toBe(410)
|
|
139
|
+
})
|
|
140
|
+
})
|
|
141
|
+
})
|
|
142
|
+
|
|
143
|
+
describe('SPA fallback', () => {
|
|
144
|
+
let app: Hono
|
|
145
|
+
|
|
146
|
+
beforeEach(() => {
|
|
147
|
+
setupTestDb()
|
|
148
|
+
app = createApp()
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
test('GET /login serves index.html (SPA fallback)', async () => {
|
|
152
|
+
const res = await app.request('/login', { method: 'GET' })
|
|
153
|
+
expect(res.status).toBe(200)
|
|
154
|
+
const text = await res.text()
|
|
155
|
+
expect(text).toContain('SPA')
|
|
156
|
+
})
|
|
157
|
+
|
|
158
|
+
test('GET /setup serves index.html', async () => {
|
|
159
|
+
const res = await app.request('/setup', { method: 'GET' })
|
|
160
|
+
expect(res.status).toBe(200)
|
|
161
|
+
const text = await res.text()
|
|
162
|
+
expect(text).toContain('SPA')
|
|
163
|
+
})
|
|
164
|
+
|
|
165
|
+
test('GET /join serves index.html', async () => {
|
|
166
|
+
const res = await app.request('/join', { method: 'GET' })
|
|
167
|
+
expect(res.status).toBe(200)
|
|
168
|
+
const text = await res.text()
|
|
169
|
+
expect(text).toContain('SPA')
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
test('GET /settings serves index.html', async () => {
|
|
173
|
+
const res = await app.request('/settings', { method: 'GET' })
|
|
174
|
+
expect(res.status).toBe(200)
|
|
175
|
+
const text = await res.text()
|
|
176
|
+
expect(text).toContain('SPA')
|
|
177
|
+
})
|
|
178
|
+
|
|
179
|
+
test('GET /teams serves index.html', async () => {
|
|
180
|
+
const res = await app.request('/teams', { method: 'GET' })
|
|
181
|
+
expect(res.status).toBe(200)
|
|
182
|
+
const text = await res.text()
|
|
183
|
+
expect(text).toContain('SPA')
|
|
184
|
+
})
|
|
185
|
+
|
|
186
|
+
test('GET /teams/some-id serves index.html', async () => {
|
|
187
|
+
const res = await app.request('/teams/some-id', { method: 'GET' })
|
|
188
|
+
expect(res.status).toBe(200)
|
|
189
|
+
const text = await res.text()
|
|
190
|
+
expect(text).toContain('SPA')
|
|
191
|
+
})
|
|
192
|
+
|
|
193
|
+
test('SPA fallback does NOT intercept /web/auth/me', async () => {
|
|
194
|
+
const res = await app.request('/web/auth/me', { method: 'GET' })
|
|
195
|
+
// Should be 401 from the auth route, not 200 from SPA fallback
|
|
196
|
+
expect(res.status).toBe(401)
|
|
197
|
+
})
|
|
198
|
+
|
|
199
|
+
test('SPA fallback does NOT intercept /v1/sessions', async () => {
|
|
200
|
+
const res = await app.request('/v1/sessions', { method: 'GET' })
|
|
201
|
+
// Should not be SPA fallback — expect a real API response (likely 401)
|
|
202
|
+
const text = await res.text()
|
|
203
|
+
expect(text).not.toContain('SPA')
|
|
204
|
+
})
|
|
205
|
+
|
|
206
|
+
test('Existing /code fallback still works', async () => {
|
|
207
|
+
const res = await app.request('/code', { method: 'GET' })
|
|
208
|
+
expect(res.status).toBe(200)
|
|
209
|
+
const text = await res.text()
|
|
210
|
+
expect(text).toContain('SPA')
|
|
211
|
+
})
|
|
212
|
+
})
|
|
@@ -539,61 +539,22 @@ describe('Web Auth Routes', () => {
|
|
|
539
539
|
app = createApp()
|
|
540
540
|
})
|
|
541
541
|
|
|
542
|
-
test('POST /web/bind —
|
|
543
|
-
// Create session first
|
|
544
|
-
const sessRes = await app.request('/v1/sessions', {
|
|
545
|
-
method: 'POST',
|
|
546
|
-
headers: { ...AUTH_HEADERS, 'Content-Type': 'application/json' },
|
|
547
|
-
body: JSON.stringify({}),
|
|
548
|
-
})
|
|
549
|
-
const { id } = await sessRes.json()
|
|
550
|
-
|
|
551
|
-
const bindRes = await app.request('/web/bind?uuid=test-uuid', {
|
|
552
|
-
method: 'POST',
|
|
553
|
-
headers: { 'Content-Type': 'application/json' },
|
|
554
|
-
body: JSON.stringify({ sessionId: id }),
|
|
555
|
-
})
|
|
556
|
-
expect(bindRes.status).toBe(200)
|
|
557
|
-
const body = await bindRes.json()
|
|
558
|
-
expect(body.ok).toBe(true)
|
|
559
|
-
})
|
|
560
|
-
|
|
561
|
-
test('POST /web/bind — binds compat code session ID to UUID', async () => {
|
|
562
|
-
const sessRes = await app.request('/v1/code/sessions', {
|
|
563
|
-
method: 'POST',
|
|
564
|
-
headers: { ...AUTH_HEADERS, 'Content-Type': 'application/json' },
|
|
565
|
-
body: JSON.stringify({}),
|
|
566
|
-
})
|
|
567
|
-
const body = await sessRes.json()
|
|
568
|
-
const compatId = toWebSessionId(body.session.id)
|
|
569
|
-
|
|
570
|
-
const bindRes = await app.request('/web/bind?uuid=test-uuid', {
|
|
571
|
-
method: 'POST',
|
|
572
|
-
headers: { 'Content-Type': 'application/json' },
|
|
573
|
-
body: JSON.stringify({ sessionId: compatId }),
|
|
574
|
-
})
|
|
575
|
-
expect(bindRes.status).toBe(200)
|
|
576
|
-
const bindBody = await bindRes.json()
|
|
577
|
-
expect(bindBody.ok).toBe(true)
|
|
578
|
-
expect(bindBody.sessionId).toBe(compatId)
|
|
579
|
-
})
|
|
580
|
-
|
|
581
|
-
test('POST /web/bind — 404 for unknown session', async () => {
|
|
542
|
+
test('POST /web/bind — returns 410 Gone (endpoint removed)', async () => {
|
|
582
543
|
const res = await app.request('/web/bind?uuid=test-uuid', {
|
|
583
544
|
method: 'POST',
|
|
584
545
|
headers: { 'Content-Type': 'application/json' },
|
|
585
|
-
body: JSON.stringify({ sessionId: '
|
|
546
|
+
body: JSON.stringify({ sessionId: 'ses_123' }),
|
|
586
547
|
})
|
|
587
|
-
expect(res.status).toBe(
|
|
548
|
+
expect(res.status).toBe(410)
|
|
588
549
|
})
|
|
589
550
|
|
|
590
|
-
test('POST /web/bind —
|
|
551
|
+
test('POST /web/bind — returns 410 for missing params too', async () => {
|
|
591
552
|
const res = await app.request('/web/bind', {
|
|
592
553
|
method: 'POST',
|
|
593
554
|
headers: { 'Content-Type': 'application/json' },
|
|
594
555
|
body: JSON.stringify({}),
|
|
595
556
|
})
|
|
596
|
-
expect(res.status).toBe(
|
|
557
|
+
expect(res.status).toBe(410)
|
|
597
558
|
})
|
|
598
559
|
})
|
|
599
560
|
|