@selvajs/selva 4.5.0 → 4.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/client/_app/immutable/chunks/{DuHtWI31.js → BYBRW46Q.js} +1 -1
- package/build/client/_app/immutable/chunks/BYBRW46Q.js.br +0 -0
- package/build/client/_app/immutable/chunks/BYBRW46Q.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DsuMOTav.js → BfWZCn9D.js} +2 -2
- package/build/client/_app/immutable/chunks/BfWZCn9D.js.br +0 -0
- package/build/client/_app/immutable/chunks/BfWZCn9D.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DnURu9OT.js → BoelBenK.js} +1 -1
- package/build/client/_app/immutable/chunks/BoelBenK.js.br +0 -0
- package/build/client/_app/immutable/chunks/BoelBenK.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{D_C_YIH8.js → BuvUOrz-.js} +1 -1
- package/build/client/_app/immutable/chunks/BuvUOrz-.js.br +0 -0
- package/build/client/_app/immutable/chunks/BuvUOrz-.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{Dtx1M6QG.js → CQjJB6sZ.js} +1 -1
- package/build/client/_app/immutable/chunks/CQjJB6sZ.js.br +0 -0
- package/build/client/_app/immutable/chunks/CQjJB6sZ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{U_alzAUv.js → jJihnyaB.js} +1 -1
- package/build/client/_app/immutable/chunks/jJihnyaB.js.br +0 -0
- package/build/client/_app/immutable/chunks/jJihnyaB.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.DXOixdTQ.js → app.CUlU8Xgx.js} +2 -2
- package/build/client/_app/immutable/entry/app.CUlU8Xgx.js.br +0 -0
- package/build/client/_app/immutable/entry/app.CUlU8Xgx.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.yXH7NuOH.js +1 -0
- package/build/client/_app/immutable/entry/start.yXH7NuOH.js.br +2 -0
- package/build/client/_app/immutable/entry/start.yXH7NuOH.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.Cgpx1yHy.js → 1.ntriGXw3.js} +1 -1
- package/build/client/_app/immutable/nodes/1.ntriGXw3.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.ntriGXw3.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.BBxGjNus.js +4 -0
- package/build/client/_app/immutable/nodes/11.BBxGjNus.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.BBxGjNus.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{13.ByWkldPP.js → 13.BOOSKgNQ.js} +1 -1
- package/build/client/_app/immutable/nodes/13.BOOSKgNQ.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.BOOSKgNQ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{14.87fRSA-Y.js → 14.st6sThI5.js} +1 -1
- package/build/client/_app/immutable/nodes/14.st6sThI5.js.br +0 -0
- package/build/client/_app/immutable/nodes/14.st6sThI5.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{16.DWG3CLUv.js → 16.fAXfHZXp.js} +1 -1
- package/build/client/_app/immutable/nodes/16.fAXfHZXp.js.br +0 -0
- package/build/client/_app/immutable/nodes/16.fAXfHZXp.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{17.CgiETa37.js → 17.BL_btSTd.js} +1 -1
- package/build/client/_app/immutable/nodes/17.BL_btSTd.js.br +0 -0
- package/build/client/_app/immutable/nodes/17.BL_btSTd.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{19.DO2ja5iW.js → 19.D4mkSjY9.js} +1 -1
- package/build/client/_app/immutable/nodes/19.D4mkSjY9.js.br +0 -0
- package/build/client/_app/immutable/nodes/19.D4mkSjY9.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{2.DIAYMP4_.js → 2.CNkzjKpD.js} +1 -1
- package/build/client/_app/immutable/nodes/2.CNkzjKpD.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.CNkzjKpD.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{20.DYgQYcr-.js → 20.93bCfNGI.js} +188 -188
- package/build/client/_app/immutable/nodes/20.93bCfNGI.js.br +0 -0
- package/build/client/_app/immutable/nodes/20.93bCfNGI.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{21.CTwryTPC.js → 21.ClzCdrlw.js} +1 -1
- package/build/client/_app/immutable/nodes/21.ClzCdrlw.js.br +0 -0
- package/build/client/_app/immutable/nodes/21.ClzCdrlw.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{23.uUN6jlSq.js → 23.DJerRiZ2.js} +1 -1
- package/build/client/_app/immutable/nodes/23.DJerRiZ2.js.br +0 -0
- package/build/client/_app/immutable/nodes/23.DJerRiZ2.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{24.cDDvPQLh.js → 24.DOHyLmBO.js} +1 -1
- package/build/client/_app/immutable/nodes/24.DOHyLmBO.js.br +0 -0
- package/build/client/_app/immutable/nodes/24.DOHyLmBO.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{27.lHQ_8tDM.js → 27.CkzNBFns.js} +1 -1
- package/build/client/_app/immutable/nodes/27.CkzNBFns.js.br +0 -0
- package/build/client/_app/immutable/nodes/27.CkzNBFns.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{28.DZO_WZjq.js → 28.BGNl-6WV.js} +1 -1
- package/build/client/_app/immutable/nodes/28.BGNl-6WV.js.br +0 -0
- package/build/client/_app/immutable/nodes/28.BGNl-6WV.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{29.BBkvtbbm.js → 29.BF0JasWQ.js} +1 -1
- package/build/client/_app/immutable/nodes/29.BF0JasWQ.js.br +0 -0
- package/build/client/_app/immutable/nodes/29.BF0JasWQ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{3.Clu5JbAY.js → 3.BLNJLcvR.js} +1 -1
- package/build/client/_app/immutable/nodes/3.BLNJLcvR.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.BLNJLcvR.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{30.CunrYTKW.js → 30.C33KvKLy.js} +1 -1
- package/build/client/_app/immutable/nodes/30.C33KvKLy.js.br +0 -0
- package/build/client/_app/immutable/nodes/30.C33KvKLy.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{5.CwEyn2eq.js → 5.DcViAFBY.js} +1 -1
- package/build/client/_app/immutable/nodes/5.DcViAFBY.js.br +1 -0
- package/build/client/_app/immutable/nodes/5.DcViAFBY.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{6.Cybg-4zL.js → 6.Jpw_unqM.js} +1 -1
- package/build/client/_app/immutable/nodes/6.Jpw_unqM.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.Jpw_unqM.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{7.U-nwvAMy.js → 7.DI4lv1qr.js} +1 -1
- package/build/client/_app/immutable/nodes/7.DI4lv1qr.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.DI4lv1qr.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{8.Ds78IC3h.js → 8.BJeZ3Zka.js} +1 -1
- package/build/client/_app/immutable/nodes/8.BJeZ3Zka.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.BJeZ3Zka.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{9.B4Dh5-cJ.js → 9.BS42pKml.js} +1 -1
- package/build/client/_app/immutable/nodes/9.BS42pKml.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.BS42pKml.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/server/chunks/{1-B3qAsEuf.js → 1-CCtIB9oC.js} +2 -2
- package/build/server/chunks/{1-B3qAsEuf.js.map → 1-CCtIB9oC.js.map} +1 -1
- package/build/server/chunks/{10-YMBFU3cy.js → 10-Cj20BodR.js} +3 -3
- package/build/server/chunks/{10-YMBFU3cy.js.map → 10-Cj20BodR.js.map} +1 -1
- package/build/server/chunks/{11-DEH3nbKm.js → 11-C-goGrGx.js} +5 -5
- package/build/server/chunks/{11-DEH3nbKm.js.map → 11-C-goGrGx.js.map} +1 -1
- package/build/server/chunks/{13-D_djeolg.js → 13-DN-4EHom.js} +2 -2
- package/build/server/chunks/{13-D_djeolg.js.map → 13-DN-4EHom.js.map} +1 -1
- package/build/server/chunks/{14-B1A-3AIw.js → 14-j22gtg6q.js} +2 -2
- package/build/server/chunks/{14-B1A-3AIw.js.map → 14-j22gtg6q.js.map} +1 -1
- package/build/server/chunks/{15-KF7YQWQR.js → 15-CJJTHKeq.js} +2 -2
- package/build/server/chunks/{15-KF7YQWQR.js.map → 15-CJJTHKeq.js.map} +1 -1
- package/build/server/chunks/{16-27Ug2Gl4.js → 16-CPVRxJfK.js} +4 -4
- package/build/server/chunks/{16-27Ug2Gl4.js.map → 16-CPVRxJfK.js.map} +1 -1
- package/build/server/chunks/{17-B9EWzdfY.js → 17-CEs6NSIj.js} +2 -2
- package/build/server/chunks/{17-B9EWzdfY.js.map → 17-CEs6NSIj.js.map} +1 -1
- package/build/server/chunks/{19-DFpWVk9Q.js → 19-BK_uDFHq.js} +3 -3
- package/build/server/chunks/{19-DFpWVk9Q.js.map → 19-BK_uDFHq.js.map} +1 -1
- package/build/server/chunks/{2-psSdZh8h.js → 2-BBFUEdIk.js} +5 -5
- package/build/server/chunks/{2-psSdZh8h.js.map → 2-BBFUEdIk.js.map} +1 -1
- package/build/server/chunks/{20-B3RVyzHq.js → 20-TgvBHCqT.js} +7 -7
- package/build/server/chunks/{20-B3RVyzHq.js.map → 20-TgvBHCqT.js.map} +1 -1
- package/build/server/chunks/{21-DjJlF-s8.js → 21-CpVgaOZP.js} +2 -2
- package/build/server/chunks/{21-DjJlF-s8.js.map → 21-CpVgaOZP.js.map} +1 -1
- package/build/server/chunks/{23-Cv-iXsup.js → 23-DpZ-VAmj.js} +4 -4
- package/build/server/chunks/{23-Cv-iXsup.js.map → 23-DpZ-VAmj.js.map} +1 -1
- package/build/server/chunks/{24-C9N_eRrr.js → 24-IG8oF3LR.js} +2 -2
- package/build/server/chunks/{24-C9N_eRrr.js.map → 24-IG8oF3LR.js.map} +1 -1
- package/build/server/chunks/{27-HUwDEbMb.js → 27-BNuVmBlC.js} +2 -2
- package/build/server/chunks/{27-HUwDEbMb.js.map → 27-BNuVmBlC.js.map} +1 -1
- package/build/server/chunks/{28-l4BuMkhA.js → 28-O2gMewvR.js} +2 -2
- package/build/server/chunks/{28-l4BuMkhA.js.map → 28-O2gMewvR.js.map} +1 -1
- package/build/server/chunks/{29-DefkuWIf.js → 29-DeHI_lg6.js} +2 -2
- package/build/server/chunks/{29-DefkuWIf.js.map → 29-DeHI_lg6.js.map} +1 -1
- package/build/server/chunks/{3-FhxHeIS3.js → 3-_z4ofaYa.js} +2 -2
- package/build/server/chunks/{3-FhxHeIS3.js.map → 3-_z4ofaYa.js.map} +1 -1
- package/build/server/chunks/{30-BC7V7mS7.js → 30-B8zrsGBW.js} +2 -2
- package/build/server/chunks/{30-BC7V7mS7.js.map → 30-B8zrsGBW.js.map} +1 -1
- package/build/server/chunks/{5-BSabZ7B0.js → 5-jUoewty6.js} +3 -3
- package/build/server/chunks/{5-BSabZ7B0.js.map → 5-jUoewty6.js.map} +1 -1
- package/build/server/chunks/{6-BDAMjeLc.js → 6-Da49O-RB.js} +3 -3
- package/build/server/chunks/{6-BDAMjeLc.js.map → 6-Da49O-RB.js.map} +1 -1
- package/build/server/chunks/{7-C5uuYI8Y.js → 7-C4TEFQmD.js} +3 -3
- package/build/server/chunks/{7-C5uuYI8Y.js.map → 7-C4TEFQmD.js.map} +1 -1
- package/build/server/chunks/{8-Yg3bHJY8.js → 8-6Lblm8Bu.js} +2 -2
- package/build/server/chunks/{8-Yg3bHJY8.js.map → 8-6Lblm8Bu.js.map} +1 -1
- package/build/server/chunks/{9-BOWShy6C.js → 9-bV3k1piX.js} +3 -3
- package/build/server/chunks/{9-BOWShy6C.js.map → 9-bV3k1piX.js.map} +1 -1
- package/build/server/chunks/{AppHeader-vae2Doza.js → AppHeader-C76PLheq.js} +2 -2
- package/build/server/chunks/{AppHeader-vae2Doza.js.map → AppHeader-C76PLheq.js.map} +1 -1
- package/build/server/chunks/{UserChip-BPLEgzMp.js → UserChip-i0_3jHOb.js} +8 -3
- package/build/server/chunks/UserChip-i0_3jHOb.js.map +1 -0
- package/build/server/chunks/{_layout.svelte-D5GiNGr6.js → _layout.svelte-B-tWsdy4.js} +3 -3
- package/build/server/chunks/{_layout.svelte-D5GiNGr6.js.map → _layout.svelte-B-tWsdy4.js.map} +1 -1
- package/build/server/chunks/{_layout.svelte-_enyp5QE.js → _layout.svelte-B2RbgABg.js} +3 -3
- package/build/server/chunks/{_layout.svelte-_enyp5QE.js.map → _layout.svelte-B2RbgABg.js.map} +1 -1
- package/build/server/chunks/{_layout.svelte-aflz8r6I.js → _layout.svelte-DUeER8oS.js} +3 -3
- package/build/server/chunks/{_layout.svelte-aflz8r6I.js.map → _layout.svelte-DUeER8oS.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-By_vYfbZ.js → _page.svelte-0KErHswo.js} +94 -4
- package/build/server/chunks/_page.svelte-0KErHswo.js.map +1 -0
- package/build/server/chunks/{_page.svelte-ZxjqrKH8.js → _page.svelte-BSHEM3UY.js} +3 -3
- package/build/server/chunks/{_page.svelte-ZxjqrKH8.js.map → _page.svelte-BSHEM3UY.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-FDFRMnmB.js → _page.svelte-CDEfhXLp.js} +3 -3
- package/build/server/chunks/{_page.svelte-FDFRMnmB.js.map → _page.svelte-CDEfhXLp.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-BDLD6pXj.js → _page.svelte-DDzV91b5.js} +124 -12
- package/build/server/chunks/{_page.svelte-BDLD6pXj.js.map → _page.svelte-DDzV91b5.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DamGRKop.js → _server.ts-3LBSaM7L.js} +24 -12
- package/build/server/chunks/_server.ts-3LBSaM7L.js.map +1 -0
- package/build/server/chunks/{_server.ts-DRlwVsIx.js → _server.ts-B-un1ZTf.js} +3 -3
- package/build/server/chunks/{_server.ts-DRlwVsIx.js.map → _server.ts-B-un1ZTf.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CF65FKS6.js → _server.ts-B6gtWjZd.js} +7 -7
- package/build/server/chunks/_server.ts-B6gtWjZd.js.map +1 -0
- package/build/server/chunks/{_server.ts-CMHRHdCD.js → _server.ts-B9Fdut8P.js} +14 -10
- package/build/server/chunks/_server.ts-B9Fdut8P.js.map +1 -0
- package/build/server/chunks/{_server.ts-kTCuqLDl.js → _server.ts-BJEEQ8tH.js} +15 -11
- package/build/server/chunks/_server.ts-BJEEQ8tH.js.map +1 -0
- package/build/server/chunks/{_server.ts-Ca_OJJFC.js → _server.ts-BKPaoj3Y.js} +14 -9
- package/build/server/chunks/_server.ts-BKPaoj3Y.js.map +1 -0
- package/build/server/chunks/{_server.ts-kbr9HYg5.js → _server.ts-BVpHuRup.js} +8 -8
- package/build/server/chunks/_server.ts-BVpHuRup.js.map +1 -0
- package/build/server/chunks/{_server.ts-DzA4EZf_.js → _server.ts-BplW_hNF.js} +7 -7
- package/build/server/chunks/_server.ts-BplW_hNF.js.map +1 -0
- package/build/server/chunks/{_server.ts-d6YTPmkY.js → _server.ts-Bv-G75Ze.js} +7 -7
- package/build/server/chunks/_server.ts-Bv-G75Ze.js.map +1 -0
- package/build/server/chunks/{_server.ts-DethCmgs.js → _server.ts-C5fD6gFa.js} +10 -10
- package/build/server/chunks/_server.ts-C5fD6gFa.js.map +1 -0
- package/build/server/chunks/{_server.ts-Cg6LtEov.js → _server.ts-C6rUlJpJ.js} +13 -6
- package/build/server/chunks/_server.ts-C6rUlJpJ.js.map +1 -0
- package/build/server/chunks/_server.ts-CLku3Kgz.js +66 -0
- package/build/server/chunks/_server.ts-CLku3Kgz.js.map +1 -0
- package/build/server/chunks/{_server.ts-AtxnIvMI.js → _server.ts-CNRwBoMm.js} +3 -3
- package/build/server/chunks/{_server.ts-AtxnIvMI.js.map → _server.ts-CNRwBoMm.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BgVWq0qd.js → _server.ts-COuXITb8.js} +10 -10
- package/build/server/chunks/_server.ts-COuXITb8.js.map +1 -0
- package/build/server/chunks/{_server.ts-BZH3tqYX.js → _server.ts-CT1KXbVK.js} +34 -22
- package/build/server/chunks/_server.ts-CT1KXbVK.js.map +1 -0
- package/build/server/chunks/{_server.ts-Dz4bsmph.js → _server.ts-CTXCbdsb.js} +10 -9
- package/build/server/chunks/_server.ts-CTXCbdsb.js.map +1 -0
- package/build/server/chunks/{_server.ts-BQetLy9N.js → _server.ts-CXEl8kvu.js} +14 -13
- package/build/server/chunks/_server.ts-CXEl8kvu.js.map +1 -0
- package/build/server/chunks/{_server.ts-BmjNVAmP.js → _server.ts-CZ9lwb1J.js} +5 -5
- package/build/server/chunks/_server.ts-CZ9lwb1J.js.map +1 -0
- package/build/server/chunks/{_server.ts-Oi8Qzh0h.js → _server.ts-CaytsdFp.js} +7 -7
- package/build/server/chunks/_server.ts-CaytsdFp.js.map +1 -0
- package/build/server/chunks/{_server.ts-6F3Ly0cY.js → _server.ts-Cd6dVQ2J.js} +17 -9
- package/build/server/chunks/_server.ts-Cd6dVQ2J.js.map +1 -0
- package/build/server/chunks/{_server.ts-cHSphefi.js → _server.ts-CgRuMyJ9.js} +8 -8
- package/build/server/chunks/_server.ts-CgRuMyJ9.js.map +1 -0
- package/build/server/chunks/{_server.ts-PKbOblCf.js → _server.ts-CmCeYB9h.js} +25 -15
- package/build/server/chunks/_server.ts-CmCeYB9h.js.map +1 -0
- package/build/server/chunks/{_server.ts-13_Xvown.js → _server.ts-Codg_zX0.js} +8 -7
- package/build/server/chunks/_server.ts-Codg_zX0.js.map +1 -0
- package/build/server/chunks/{_server.ts-DW-Oh4l9.js → _server.ts-D-WjMJlD.js} +10 -6
- package/build/server/chunks/_server.ts-D-WjMJlD.js.map +1 -0
- package/build/server/chunks/{_server.ts-Bke_K04J.js → _server.ts-D4z7bYT1.js} +23 -10
- package/build/server/chunks/_server.ts-D4z7bYT1.js.map +1 -0
- package/build/server/chunks/{_server.ts-L9PpKy16.js → _server.ts-D7URpGBv.js} +13 -9
- package/build/server/chunks/_server.ts-D7URpGBv.js.map +1 -0
- package/build/server/chunks/{_server.ts-D2Qb9pui.js → _server.ts-DMwrtYEK.js} +13 -13
- package/build/server/chunks/_server.ts-DMwrtYEK.js.map +1 -0
- package/build/server/chunks/{_server.ts-B9uegfmw.js → _server.ts-DSVtVVVK.js} +16 -10
- package/build/server/chunks/_server.ts-DSVtVVVK.js.map +1 -0
- package/build/server/chunks/{_server.ts-Be15h83H.js → _server.ts-Df72lBuz.js} +23 -14
- package/build/server/chunks/_server.ts-Df72lBuz.js.map +1 -0
- package/build/server/chunks/{_server.ts-BlVwuKrl.js → _server.ts-DsXq-KLm.js} +25 -16
- package/build/server/chunks/_server.ts-DsXq-KLm.js.map +1 -0
- package/build/server/chunks/{_server.ts-DEBzt_W2.js → _server.ts-OQ5_sYi3.js} +30 -17
- package/build/server/chunks/_server.ts-OQ5_sYi3.js.map +1 -0
- package/build/server/chunks/{_server.ts-XAkApigL.js → _server.ts-UYOqhuxS.js} +11 -7
- package/build/server/chunks/_server.ts-UYOqhuxS.js.map +1 -0
- package/build/server/chunks/{_server.ts-DVOhTvBf.js → _server.ts-Xt4gRfAl.js} +15 -9
- package/build/server/chunks/_server.ts-Xt4gRfAl.js.map +1 -0
- package/build/server/chunks/{_server.ts-CpsGzKQC.js → _server.ts-ZtjukIa0.js} +15 -12
- package/build/server/chunks/_server.ts-ZtjukIa0.js.map +1 -0
- package/build/server/chunks/_server.ts-bR98vjY2.js +47 -0
- package/build/server/chunks/_server.ts-bR98vjY2.js.map +1 -0
- package/build/server/chunks/{_server.ts-Cg1WgIQn.js → _server.ts-deI69oUs.js} +7 -7
- package/build/server/chunks/_server.ts-deI69oUs.js.map +1 -0
- package/build/server/chunks/{_server.ts-bhjqtBoy.js → _server.ts-fxzTH5KH.js} +6 -6
- package/build/server/chunks/_server.ts-fxzTH5KH.js.map +1 -0
- package/build/server/chunks/{_server.ts-DvBucq0r.js → _server.ts-mFb6RwID.js} +6 -6
- package/build/server/chunks/_server.ts-mFb6RwID.js.map +1 -0
- package/build/server/chunks/{_server.ts-Cc-srcRk.js → _server.ts-sdl64bpd.js} +10 -7
- package/build/server/chunks/_server.ts-sdl64bpd.js.map +1 -0
- package/build/server/chunks/{access.server-CAPd1-c2.js → access.server-Rd56k7vs.js} +2 -2
- package/build/server/chunks/{access.server-CAPd1-c2.js.map → access.server-Rd56k7vs.js.map} +1 -1
- package/build/server/chunks/{api-errors-BhVEeWTV.js → api-errors-BrqxD-El.js} +52 -13
- package/build/server/chunks/api-errors-BrqxD-El.js.map +1 -0
- package/build/server/chunks/{computeLimits-DPO6NbLd.js → computeLimits-DnJ77wR9.js} +3 -3
- package/build/server/chunks/computeLimits-DnJ77wR9.js.map +1 -0
- package/build/server/chunks/{hooks.server-BEbVZKxO.js → hooks.server-BZKLAgww.js} +7 -6
- package/build/server/chunks/hooks.server-BZKLAgww.js.map +1 -0
- package/build/server/chunks/{package-MTlbeZ-4.js → package-K5EkWw87.js} +2 -2
- package/build/server/chunks/{package-MTlbeZ-4.js.map → package-K5EkWw87.js.map} +1 -1
- package/build/server/index.js +2 -2
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +70 -63
- package/build/server/manifest.js.map +1 -1
- package/package.json +7 -7
- package/templates/.env.example +14 -5
- package/build/client/_app/immutable/chunks/D_C_YIH8.js.br +0 -0
- package/build/client/_app/immutable/chunks/D_C_YIH8.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DnURu9OT.js.br +0 -0
- package/build/client/_app/immutable/chunks/DnURu9OT.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DsuMOTav.js.br +0 -0
- package/build/client/_app/immutable/chunks/DsuMOTav.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dtx1M6QG.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dtx1M6QG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DuHtWI31.js.br +0 -0
- package/build/client/_app/immutable/chunks/DuHtWI31.js.gz +0 -0
- package/build/client/_app/immutable/chunks/U_alzAUv.js.br +0 -0
- package/build/client/_app/immutable/chunks/U_alzAUv.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.DXOixdTQ.js.br +0 -0
- package/build/client/_app/immutable/entry/app.DXOixdTQ.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.lHsRDqJ_.js +0 -1
- package/build/client/_app/immutable/entry/start.lHsRDqJ_.js.br +0 -2
- package/build/client/_app/immutable/entry/start.lHsRDqJ_.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.Cgpx1yHy.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.Cgpx1yHy.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.BIaqG9xz.js +0 -2
- package/build/client/_app/immutable/nodes/11.BIaqG9xz.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.BIaqG9xz.js.gz +0 -0
- package/build/client/_app/immutable/nodes/13.ByWkldPP.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.ByWkldPP.js.gz +0 -0
- package/build/client/_app/immutable/nodes/14.87fRSA-Y.js.br +0 -0
- package/build/client/_app/immutable/nodes/14.87fRSA-Y.js.gz +0 -0
- package/build/client/_app/immutable/nodes/16.DWG3CLUv.js.br +0 -0
- package/build/client/_app/immutable/nodes/16.DWG3CLUv.js.gz +0 -0
- package/build/client/_app/immutable/nodes/17.CgiETa37.js.br +0 -0
- package/build/client/_app/immutable/nodes/17.CgiETa37.js.gz +0 -0
- package/build/client/_app/immutable/nodes/19.DO2ja5iW.js.br +0 -0
- package/build/client/_app/immutable/nodes/19.DO2ja5iW.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.DIAYMP4_.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.DIAYMP4_.js.gz +0 -0
- package/build/client/_app/immutable/nodes/20.DYgQYcr-.js.br +0 -0
- package/build/client/_app/immutable/nodes/20.DYgQYcr-.js.gz +0 -0
- package/build/client/_app/immutable/nodes/21.CTwryTPC.js.br +0 -0
- package/build/client/_app/immutable/nodes/21.CTwryTPC.js.gz +0 -0
- package/build/client/_app/immutable/nodes/23.uUN6jlSq.js.br +0 -0
- package/build/client/_app/immutable/nodes/23.uUN6jlSq.js.gz +0 -0
- package/build/client/_app/immutable/nodes/24.cDDvPQLh.js.br +0 -0
- package/build/client/_app/immutable/nodes/24.cDDvPQLh.js.gz +0 -0
- package/build/client/_app/immutable/nodes/27.lHQ_8tDM.js.br +0 -0
- package/build/client/_app/immutable/nodes/27.lHQ_8tDM.js.gz +0 -0
- package/build/client/_app/immutable/nodes/28.DZO_WZjq.js.br +0 -0
- package/build/client/_app/immutable/nodes/28.DZO_WZjq.js.gz +0 -0
- package/build/client/_app/immutable/nodes/29.BBkvtbbm.js.br +0 -0
- package/build/client/_app/immutable/nodes/29.BBkvtbbm.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.Clu5JbAY.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.Clu5JbAY.js.gz +0 -0
- package/build/client/_app/immutable/nodes/30.CunrYTKW.js.br +0 -0
- package/build/client/_app/immutable/nodes/30.CunrYTKW.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.CwEyn2eq.js.br +0 -1
- package/build/client/_app/immutable/nodes/5.CwEyn2eq.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.Cybg-4zL.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.Cybg-4zL.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.U-nwvAMy.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.U-nwvAMy.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.Ds78IC3h.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.Ds78IC3h.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.B4Dh5-cJ.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.B4Dh5-cJ.js.gz +0 -0
- package/build/server/chunks/UserChip-BPLEgzMp.js.map +0 -1
- package/build/server/chunks/_page.svelte-By_vYfbZ.js.map +0 -1
- package/build/server/chunks/_server.ts-13_Xvown.js.map +0 -1
- package/build/server/chunks/_server.ts-6F3Ly0cY.js.map +0 -1
- package/build/server/chunks/_server.ts-B9uegfmw.js.map +0 -1
- package/build/server/chunks/_server.ts-BQetLy9N.js.map +0 -1
- package/build/server/chunks/_server.ts-BZH3tqYX.js.map +0 -1
- package/build/server/chunks/_server.ts-Be15h83H.js.map +0 -1
- package/build/server/chunks/_server.ts-BgVWq0qd.js.map +0 -1
- package/build/server/chunks/_server.ts-Bke_K04J.js.map +0 -1
- package/build/server/chunks/_server.ts-BlVwuKrl.js.map +0 -1
- package/build/server/chunks/_server.ts-BmjNVAmP.js.map +0 -1
- package/build/server/chunks/_server.ts-BwMyXo0z.js +0 -65
- package/build/server/chunks/_server.ts-BwMyXo0z.js.map +0 -1
- package/build/server/chunks/_server.ts-CF65FKS6.js.map +0 -1
- package/build/server/chunks/_server.ts-CMHRHdCD.js.map +0 -1
- package/build/server/chunks/_server.ts-Ca_OJJFC.js.map +0 -1
- package/build/server/chunks/_server.ts-Cc-srcRk.js.map +0 -1
- package/build/server/chunks/_server.ts-Cg1WgIQn.js.map +0 -1
- package/build/server/chunks/_server.ts-Cg6LtEov.js.map +0 -1
- package/build/server/chunks/_server.ts-CpsGzKQC.js.map +0 -1
- package/build/server/chunks/_server.ts-D2Qb9pui.js.map +0 -1
- package/build/server/chunks/_server.ts-DEBzt_W2.js.map +0 -1
- package/build/server/chunks/_server.ts-DVOhTvBf.js.map +0 -1
- package/build/server/chunks/_server.ts-DW-Oh4l9.js.map +0 -1
- package/build/server/chunks/_server.ts-DamGRKop.js.map +0 -1
- package/build/server/chunks/_server.ts-DethCmgs.js.map +0 -1
- package/build/server/chunks/_server.ts-DvBucq0r.js.map +0 -1
- package/build/server/chunks/_server.ts-Dz4bsmph.js.map +0 -1
- package/build/server/chunks/_server.ts-DzA4EZf_.js.map +0 -1
- package/build/server/chunks/_server.ts-L9PpKy16.js.map +0 -1
- package/build/server/chunks/_server.ts-Oi8Qzh0h.js.map +0 -1
- package/build/server/chunks/_server.ts-PKbOblCf.js.map +0 -1
- package/build/server/chunks/_server.ts-XAkApigL.js.map +0 -1
- package/build/server/chunks/_server.ts-bhjqtBoy.js.map +0 -1
- package/build/server/chunks/_server.ts-cHSphefi.js.map +0 -1
- package/build/server/chunks/_server.ts-d6YTPmkY.js.map +0 -1
- package/build/server/chunks/_server.ts-kTCuqLDl.js.map +0 -1
- package/build/server/chunks/_server.ts-kbr9HYg5.js.map +0 -1
- package/build/server/chunks/api-errors-BhVEeWTV.js.map +0 -1
- package/build/server/chunks/computeLimits-DPO6NbLd.js.map +0 -1
- package/build/server/chunks/hooks.server-BEbVZKxO.js.map +0 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { json } from '@sveltejs/kit';
|
|
2
2
|
import { randomUUID } from 'node:crypto';
|
|
3
3
|
import { n as getProjectProvider, i as getDefinitionService } from './providers.server-C3fQ7ZdV.js';
|
|
4
|
-
import { r as requireCanCreateDefinition } from './access.server-
|
|
5
|
-
import { t as throwZodError, r as resolveServerForOrg, f as fetchSchemaFromCompute, h as handleApiError } from './api-errors-
|
|
4
|
+
import { r as requireCanCreateDefinition } from './access.server-Rd56k7vs.js';
|
|
5
|
+
import { a as apiError, t as throwZodError, r as resolveServerForOrg, f as fetchSchemaFromCompute, h as handleApiError, A as ApiErrorCode } from './api-errors-BrqxD-El.js';
|
|
6
6
|
import { G as GH_EXTENSIONS } from './types-DxzJoaA4.js';
|
|
7
7
|
import { C as CreateDefinitionInputSchema } from './context-BJnJL8ES.js';
|
|
8
|
-
import { M as MAX_GH_FILE_SIZE, b as MAX_IMAGE_FILE_SIZE } from './computeLimits-
|
|
8
|
+
import { M as MAX_GH_FILE_SIZE, b as MAX_IMAGE_FILE_SIZE } from './computeLimits-DnJ77wR9.js';
|
|
9
9
|
import './shared-server-C3WdcJCQ.js';
|
|
10
10
|
import 'node:url';
|
|
11
11
|
import 'node:path';
|
|
@@ -26,27 +26,39 @@ const POST = async ({ request, locals }) => {
|
|
|
26
26
|
const formData = await request.formData();
|
|
27
27
|
const file = formData.get("file");
|
|
28
28
|
if (!(file instanceof File)) {
|
|
29
|
-
|
|
29
|
+
apiError(400, ApiErrorCode.VALIDATION_FAILED, "A Grasshopper (.gh or .ghx) file is required");
|
|
30
30
|
}
|
|
31
31
|
const ext = file.name.slice(file.name.lastIndexOf(".")).toLowerCase();
|
|
32
32
|
if (!GH_EXTENSIONS.includes(ext)) {
|
|
33
|
-
|
|
33
|
+
apiError(
|
|
34
|
+
400,
|
|
35
|
+
ApiErrorCode.VALIDATION_FAILED,
|
|
36
|
+
`File type not allowed. Allowed: ${GH_EXTENSIONS.join(", ")}`
|
|
37
|
+
);
|
|
34
38
|
}
|
|
35
39
|
if (file.size > MAX_GH_FILE_SIZE) {
|
|
36
|
-
|
|
40
|
+
apiError(
|
|
41
|
+
400,
|
|
42
|
+
ApiErrorCode.VALIDATION_FAILED,
|
|
43
|
+
`File too large. Max size: ${MAX_GH_FILE_SIZE / (1024 * 1024)} MB`
|
|
44
|
+
);
|
|
37
45
|
}
|
|
38
46
|
const imageFile = formData.get("image");
|
|
39
47
|
if (imageFile instanceof File && imageFile.size > MAX_IMAGE_FILE_SIZE) {
|
|
40
|
-
|
|
48
|
+
apiError(
|
|
49
|
+
400,
|
|
50
|
+
ApiErrorCode.VALIDATION_FAILED,
|
|
51
|
+
`Image too large. Max size: ${MAX_IMAGE_FILE_SIZE / (1024 * 1024)} MB`
|
|
52
|
+
);
|
|
41
53
|
}
|
|
42
54
|
let projectId = formData.get("projectId");
|
|
43
55
|
if (typeof projectId !== "string" || !projectId) {
|
|
44
|
-
if (!ctx.actingOrgId)
|
|
56
|
+
if (!ctx.actingOrgId) apiError(400, ApiErrorCode.VALIDATION_FAILED, "No active organization");
|
|
45
57
|
const projectsPage = await getProjectProvider().listProjects(ctx, ctx.actingOrgId, {
|
|
46
58
|
limit: 1
|
|
47
59
|
});
|
|
48
60
|
const defaultProject = projectsPage.items[0];
|
|
49
|
-
if (!defaultProject)
|
|
61
|
+
if (!defaultProject) apiError(500, ApiErrorCode.INTERNAL, "No project configured");
|
|
50
62
|
projectId = defaultProject.id;
|
|
51
63
|
}
|
|
52
64
|
const { project } = await requireCanCreateDefinition(locals, projectId);
|
|
@@ -91,11 +103,11 @@ const POST = async ({ request, locals }) => {
|
|
|
91
103
|
const imageData = new Uint8Array(await imageFile.arrayBuffer());
|
|
92
104
|
coverImage = await getDefinitionService().saveCoverImage(ctx, guid, imageData);
|
|
93
105
|
}
|
|
94
|
-
return json({
|
|
106
|
+
return json({ guid, version, coverImage }, { status: 201 });
|
|
95
107
|
} catch (err) {
|
|
96
108
|
handleApiError(err, "Failed to create definition");
|
|
97
109
|
}
|
|
98
110
|
};
|
|
99
111
|
|
|
100
112
|
export { POST };
|
|
101
|
-
//# sourceMappingURL=_server.ts-
|
|
113
|
+
//# sourceMappingURL=_server.ts-3LBSaM7L.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_server.ts-3LBSaM7L.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/definitions/_server.ts.js"],"sourcesContent":["import { json } from \"@sveltejs/kit\";\nimport { randomUUID } from \"node:crypto\";\nimport { n as getProjectProvider, i as getDefinitionService } from \"../../../../chunks/providers.server.js\";\nimport { r as requireCanCreateDefinition } from \"../../../../chunks/access.server.js\";\nimport { a as apiError, t as throwZodError, r as resolveServerForOrg, f as fetchSchemaFromCompute, h as handleApiError, A as ApiErrorCode } from \"../../../../chunks/api-errors.js\";\nimport { G as GH_EXTENSIONS } from \"../../../../chunks/types.js\";\nimport { C as CreateDefinitionInputSchema } from \"../../../../chunks/context.js\";\nimport { M as MAX_GH_FILE_SIZE, b as MAX_IMAGE_FILE_SIZE } from \"../../../../chunks/computeLimits.js\";\nfunction parseTags(raw) {\n if (typeof raw !== \"string\" || !raw.trim()) return void 0;\n const tags = raw.split(\",\").map((t) => t.trim()).filter(Boolean);\n return tags.length ? tags : void 0;\n}\nconst POST = async ({ request, locals }) => {\n const ctx = locals.ctx;\n const formData = await request.formData();\n const file = formData.get(\"file\");\n if (!(file instanceof File)) {\n apiError(400, ApiErrorCode.VALIDATION_FAILED, \"A Grasshopper (.gh or .ghx) file is required\");\n }\n const ext = file.name.slice(file.name.lastIndexOf(\".\")).toLowerCase();\n if (!GH_EXTENSIONS.includes(ext)) {\n apiError(\n 400,\n ApiErrorCode.VALIDATION_FAILED,\n `File type not allowed. Allowed: ${GH_EXTENSIONS.join(\", \")}`\n );\n }\n if (file.size > MAX_GH_FILE_SIZE) {\n apiError(\n 400,\n ApiErrorCode.VALIDATION_FAILED,\n `File too large. Max size: ${MAX_GH_FILE_SIZE / (1024 * 1024)} MB`\n );\n }\n const imageFile = formData.get(\"image\");\n if (imageFile instanceof File && imageFile.size > MAX_IMAGE_FILE_SIZE) {\n apiError(\n 400,\n ApiErrorCode.VALIDATION_FAILED,\n `Image too large. Max size: ${MAX_IMAGE_FILE_SIZE / (1024 * 1024)} MB`\n );\n }\n let projectId = formData.get(\"projectId\");\n if (typeof projectId !== \"string\" || !projectId) {\n if (!ctx.actingOrgId) apiError(400, ApiErrorCode.VALIDATION_FAILED, \"No active organization\");\n const projectsPage = await getProjectProvider().listProjects(ctx, ctx.actingOrgId, {\n limit: 1\n });\n const defaultProject = projectsPage.items[0];\n if (!defaultProject) apiError(500, ApiErrorCode.INTERNAL, \"No project configured\");\n projectId = defaultProject.id;\n }\n const { project } = await requireCanCreateDefinition(locals, projectId);\n const parsed = CreateDefinitionInputSchema.safeParse({\n displayName: formData.get(\"displayName\"),\n description: formData.get(\"description\") || void 0,\n category: formData.get(\"category\") || void 0,\n coverImage: formData.get(\"coverImage\") || void 0,\n tags: parseTags(formData.get(\"tags\")),\n projectId,\n computeServerId: formData.get(\"computeServerId\") || void 0\n });\n if (!parsed.success) throwZodError(parsed.error);\n const fileExt = ext.slice(1);\n const guid = randomUUID();\n try {\n const fileData = new Uint8Array(await file.arrayBuffer());\n const server = await resolveServerForOrg(ctx, project.orgId, {\n definitionPin: parsed.data.computeServerId ?? null\n });\n const schema = await fetchSchemaFromCompute(fileData, server);\n const { record, version } = await getDefinitionService().create(\n ctx,\n {\n guid,\n projectId: parsed.data.projectId,\n ownerId: locals.user.id,\n fileExt,\n originalFilename: file.name,\n computeServerId: parsed.data.computeServerId,\n displayName: parsed.data.displayName.trim(),\n description: parsed.data.description,\n category: parsed.data.category,\n tags: parsed.data.tags,\n coverImage: parsed.data.coverImage\n },\n fileData,\n schema\n );\n let coverImage = record.coverImage;\n if (imageFile instanceof File && imageFile.size > 0) {\n const imageData = new Uint8Array(await imageFile.arrayBuffer());\n coverImage = await getDefinitionService().saveCoverImage(ctx, guid, imageData);\n }\n return json({ guid, version, coverImage }, { status: 201 });\n } catch (err) {\n handleApiError(err, \"Failed to create definition\");\n }\n};\nexport {\n POST\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -6,12 +6,12 @@ import { p as private_env } from './shared-server-C3WdcJCQ.js';
|
|
|
6
6
|
import './context-BJnJL8ES.js';
|
|
7
7
|
import { f as findServerById } from './utils2-BqfluBM6.js';
|
|
8
8
|
import { u as providers, L as LocalComputeServerStore, c as getComputeServerConfigStore } from './providers.server-C3fQ7ZdV.js';
|
|
9
|
-
import { z as requirePermission } from './access.server-
|
|
9
|
+
import { z as requirePermission } from './access.server-Rd56k7vs.js';
|
|
10
10
|
import 'zod';
|
|
11
11
|
import 'node:url';
|
|
12
12
|
import 'node:fs';
|
|
13
13
|
import '@supabase/supabase-js';
|
|
14
|
-
import './api-errors-
|
|
14
|
+
import './api-errors-BrqxD-El.js';
|
|
15
15
|
import '@selvajs/compute/core';
|
|
16
16
|
|
|
17
17
|
function atRestSecretsCheck(report) {
|
|
@@ -159,4 +159,4 @@ const GET = async ({ locals }) => {
|
|
|
159
159
|
};
|
|
160
160
|
|
|
161
161
|
export { GET };
|
|
162
|
-
//# sourceMappingURL=_server.ts-
|
|
162
|
+
//# sourceMappingURL=_server.ts-B-un1ZTf.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_server.ts-DRlwVsIx.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/admin/api/system/health/_server.ts.js"],"sourcesContent":["import { json } from \"@sveltejs/kit\";\nimport { randomUUID } from \"node:crypto\";\nimport { mkdir, writeFile, unlink } from \"node:fs/promises\";\nimport { resolve, join } from \"node:path\";\nimport { p as private_env } from \"../../../../../../chunks/shared-server.js\";\nimport \"../../../../../../chunks/context.js\";\nimport { f as findServerById } from \"../../../../../../chunks/utils2.js\";\nimport { u as providers, L as LocalComputeServerStore, c as getComputeServerConfigStore } from \"../../../../../../chunks/providers.server.js\";\nimport { z as requirePermission } from \"../../../../../../chunks/access.server.js\";\nfunction atRestSecretsCheck(report) {\n const base = { id: \"at-rest-secrets\", label: \"Compute server secrets\" };\n if (report === null) {\n return {\n ...base,\n status: \"not_applicable\",\n summary: \"The active data provider does not encrypt secrets at this layer — nothing to verify.\"\n };\n }\n if (report.ok) {\n return {\n ...base,\n status: \"ok\",\n summary: \"All stored compute server API keys decrypt under the current SELVA_AT_REST_KEY.\"\n };\n }\n const failed = report.failures.map((f) => `\"${f.serverLabel}\" (${f.reason}${f.cause ? `: ${f.cause}` : \"\"})`).join(\", \");\n const plaintext = report.plaintextFound;\n return {\n ...base,\n status: \"degraded\",\n summary: `${report.failures.length} compute server key(s) could not be loaded: ${failed}.`,\n remediation: plaintext ? \"A key is stored in plaintext on disk — re-enter it via /admin/compute so it is encrypted.\" : \"The stored ciphertext does not match the current SELVA_AT_REST_KEY (rotated key or restored backup). Re-enter the affected keys via /admin/compute, or restore the original SELVA_AT_REST_KEY, then run this check again.\"\n };\n}\nconst COMPUTE_PING_TIMEOUT_MS = 8e3;\nasync function computeReachabilityCheck(locals) {\n const base = { id: \"compute-reachable\", label: \"Default compute server\" };\n let config;\n try {\n config = await getComputeServerConfigStore().getConfig(locals.ctx);\n } catch (err) {\n return {\n ...base,\n status: \"error\",\n summary: `Could not read compute config: ${err instanceof Error ? err.message : String(err)}`\n };\n }\n const server = config.defaultServerId ? findServerById(config, config.defaultServerId) : void 0;\n if (!server) {\n return {\n ...base,\n status: \"not_applicable\",\n summary: \"No default compute server is configured — nothing to reach.\",\n remediation: \"Add a server and set it as default in /admin/compute.\"\n };\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), COMPUTE_PING_TIMEOUT_MS);\n try {\n const headers = {};\n if (server.apiKey) headers[\"RhinoComputeKey\"] = server.apiKey;\n const res = await fetch(new URL(\"/healthcheck\", server.serverUrl).toString(), {\n signal: controller.signal,\n headers\n });\n if (res.ok) {\n return { ...base, status: \"ok\", summary: `\"${server.label}\" answered /healthcheck (200).` };\n }\n return {\n ...base,\n status: \"degraded\",\n summary: `\"${server.label}\" responded ${res.status} to /healthcheck.`,\n remediation: res.status === 401 || res.status === 403 ? \"Authentication rejected — verify the API key in /admin/compute.\" : \"The server is reachable but unhealthy. Check the Rhino.Compute host.\"\n };\n } catch (err) {\n const aborted = err instanceof Error && err.name === \"AbortError\";\n return {\n ...base,\n status: \"degraded\",\n summary: aborted ? `\"${server.label}\" did not respond within ${COMPUTE_PING_TIMEOUT_MS / 1e3}s.` : `\"${server.label}\" is unreachable: ${err instanceof Error ? err.message : String(err)}.`,\n remediation: `Confirm the Rhino.Compute host is running and ${server.serverUrl} is correct.`\n };\n } finally {\n clearTimeout(timer);\n }\n}\nasync function dataPathWritableCheck() {\n const base = { id: \"data-path-writable\", label: \"Data path writable\" };\n if (!(providers.data.computeServer instanceof LocalComputeServerStore)) {\n return {\n ...base,\n status: \"not_applicable\",\n summary: \"The active data provider does not persist to a local DATA_PATH.\"\n };\n }\n const dataPath = private_env.DATA_PATH;\n if (!dataPath) {\n return {\n ...base,\n status: \"error\",\n summary: \"DATA_PATH is unset but the local provider is active.\",\n remediation: \"Set DATA_PATH in .env and restart.\"\n };\n }\n const absolute = resolve(dataPath);\n const probe = join(absolute, `.health-probe-${randomUUID()}`);\n try {\n await mkdir(absolute, { recursive: true });\n await writeFile(probe, \"ok\");\n await unlink(probe);\n return { ...base, status: \"ok\", summary: `DATA_PATH (${dataPath}) is writable.` };\n } catch (err) {\n return {\n ...base,\n status: \"degraded\",\n summary: `DATA_PATH (${dataPath}) is not writable: ${err instanceof Error ? err.message : String(err)}.`,\n remediation: \"Check free disk space and that the directory is owned by the user running the app (`df -h`, `ls -la`).\"\n };\n }\n}\nconst GET = async ({ locals }) => {\n requirePermission(locals, \"instance_admin\");\n const checks = [];\n const store = providers.data.computeServer;\n if (store instanceof LocalComputeServerStore) {\n try {\n checks.push(atRestSecretsCheck(await store.verifySecrets()));\n } catch (err) {\n checks.push({\n id: \"at-rest-secrets\",\n label: \"Compute server secrets\",\n status: \"error\",\n summary: `Verification threw: ${err instanceof Error ? err.message : String(err)}`,\n remediation: \"Check server logs (`pm2 logs selva-compute`) for the underlying error.\"\n });\n }\n } else {\n checks.push(atRestSecretsCheck(null));\n }\n checks.push(...await Promise.all([computeReachabilityCheck(locals), dataPathWritableCheck()]));\n const rank = {\n ok: 0,\n not_applicable: 0,\n degraded: 2,\n error: 3\n };\n const overall = checks.reduce(\n (worst, c) => rank[c.status] > rank[worst] ? c.status : worst,\n \"ok\"\n );\n return json({ overall, checkedAt: (/* @__PURE__ */ new Date()).toISOString(), checks });\n};\nexport {\n GET\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"_server.ts-B-un1ZTf.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/admin/api/system/health/_server.ts.js"],"sourcesContent":["import { json } from \"@sveltejs/kit\";\nimport { randomUUID } from \"node:crypto\";\nimport { mkdir, writeFile, unlink } from \"node:fs/promises\";\nimport { resolve, join } from \"node:path\";\nimport { p as private_env } from \"../../../../../../chunks/shared-server.js\";\nimport \"../../../../../../chunks/context.js\";\nimport { f as findServerById } from \"../../../../../../chunks/utils2.js\";\nimport { u as providers, L as LocalComputeServerStore, c as getComputeServerConfigStore } from \"../../../../../../chunks/providers.server.js\";\nimport { z as requirePermission } from \"../../../../../../chunks/access.server.js\";\nfunction atRestSecretsCheck(report) {\n const base = { id: \"at-rest-secrets\", label: \"Compute server secrets\" };\n if (report === null) {\n return {\n ...base,\n status: \"not_applicable\",\n summary: \"The active data provider does not encrypt secrets at this layer — nothing to verify.\"\n };\n }\n if (report.ok) {\n return {\n ...base,\n status: \"ok\",\n summary: \"All stored compute server API keys decrypt under the current SELVA_AT_REST_KEY.\"\n };\n }\n const failed = report.failures.map((f) => `\"${f.serverLabel}\" (${f.reason}${f.cause ? `: ${f.cause}` : \"\"})`).join(\", \");\n const plaintext = report.plaintextFound;\n return {\n ...base,\n status: \"degraded\",\n summary: `${report.failures.length} compute server key(s) could not be loaded: ${failed}.`,\n remediation: plaintext ? \"A key is stored in plaintext on disk — re-enter it via /admin/compute so it is encrypted.\" : \"The stored ciphertext does not match the current SELVA_AT_REST_KEY (rotated key or restored backup). Re-enter the affected keys via /admin/compute, or restore the original SELVA_AT_REST_KEY, then run this check again.\"\n };\n}\nconst COMPUTE_PING_TIMEOUT_MS = 8e3;\nasync function computeReachabilityCheck(locals) {\n const base = { id: \"compute-reachable\", label: \"Default compute server\" };\n let config;\n try {\n config = await getComputeServerConfigStore().getConfig(locals.ctx);\n } catch (err) {\n return {\n ...base,\n status: \"error\",\n summary: `Could not read compute config: ${err instanceof Error ? err.message : String(err)}`\n };\n }\n const server = config.defaultServerId ? findServerById(config, config.defaultServerId) : void 0;\n if (!server) {\n return {\n ...base,\n status: \"not_applicable\",\n summary: \"No default compute server is configured — nothing to reach.\",\n remediation: \"Add a server and set it as default in /admin/compute.\"\n };\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), COMPUTE_PING_TIMEOUT_MS);\n try {\n const headers = {};\n if (server.apiKey) headers[\"RhinoComputeKey\"] = server.apiKey;\n const res = await fetch(new URL(\"/healthcheck\", server.serverUrl).toString(), {\n signal: controller.signal,\n headers\n });\n if (res.ok) {\n return { ...base, status: \"ok\", summary: `\"${server.label}\" answered /healthcheck (200).` };\n }\n return {\n ...base,\n status: \"degraded\",\n summary: `\"${server.label}\" responded ${res.status} to /healthcheck.`,\n remediation: res.status === 401 || res.status === 403 ? \"Authentication rejected — verify the API key in /admin/compute.\" : \"The server is reachable but unhealthy. Check the Rhino.Compute host.\"\n };\n } catch (err) {\n const aborted = err instanceof Error && err.name === \"AbortError\";\n return {\n ...base,\n status: \"degraded\",\n summary: aborted ? `\"${server.label}\" did not respond within ${COMPUTE_PING_TIMEOUT_MS / 1e3}s.` : `\"${server.label}\" is unreachable: ${err instanceof Error ? err.message : String(err)}.`,\n remediation: `Confirm the Rhino.Compute host is running and ${server.serverUrl} is correct.`\n };\n } finally {\n clearTimeout(timer);\n }\n}\nasync function dataPathWritableCheck() {\n const base = { id: \"data-path-writable\", label: \"Data path writable\" };\n if (!(providers.data.computeServer instanceof LocalComputeServerStore)) {\n return {\n ...base,\n status: \"not_applicable\",\n summary: \"The active data provider does not persist to a local DATA_PATH.\"\n };\n }\n const dataPath = private_env.DATA_PATH;\n if (!dataPath) {\n return {\n ...base,\n status: \"error\",\n summary: \"DATA_PATH is unset but the local provider is active.\",\n remediation: \"Set DATA_PATH in .env and restart.\"\n };\n }\n const absolute = resolve(dataPath);\n const probe = join(absolute, `.health-probe-${randomUUID()}`);\n try {\n await mkdir(absolute, { recursive: true });\n await writeFile(probe, \"ok\");\n await unlink(probe);\n return { ...base, status: \"ok\", summary: `DATA_PATH (${dataPath}) is writable.` };\n } catch (err) {\n return {\n ...base,\n status: \"degraded\",\n summary: `DATA_PATH (${dataPath}) is not writable: ${err instanceof Error ? err.message : String(err)}.`,\n remediation: \"Check free disk space and that the directory is owned by the user running the app (`df -h`, `ls -la`).\"\n };\n }\n}\nconst GET = async ({ locals }) => {\n requirePermission(locals, \"instance_admin\");\n const checks = [];\n const store = providers.data.computeServer;\n if (store instanceof LocalComputeServerStore) {\n try {\n checks.push(atRestSecretsCheck(await store.verifySecrets()));\n } catch (err) {\n checks.push({\n id: \"at-rest-secrets\",\n label: \"Compute server secrets\",\n status: \"error\",\n summary: `Verification threw: ${err instanceof Error ? err.message : String(err)}`,\n remediation: \"Check server logs (`pm2 logs selva-compute`) for the underlying error.\"\n });\n }\n } else {\n checks.push(atRestSecretsCheck(null));\n }\n checks.push(...await Promise.all([computeReachabilityCheck(locals), dataPathWritableCheck()]));\n const rank = {\n ok: 0,\n not_applicable: 0,\n degraded: 2,\n error: 3\n };\n const overall = checks.reduce(\n (worst, c) => rank[c.status] > rank[worst] ? c.status : worst,\n \"ok\"\n );\n return json({ overall, checkedAt: (/* @__PURE__ */ new Date()).toISOString(), checks });\n};\nexport {\n GET\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { json } from '@sveltejs/kit';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { n as getProjectProvider } from './providers.server-C3fQ7ZdV.js';
|
|
4
|
-
import { n as requireCanManageMembers, A as requireTargetIsOrgMember } from './access.server-
|
|
5
|
-
import { h as handleApiError, t as throwZodError } from './api-errors-
|
|
4
|
+
import { n as requireCanManageMembers, A as requireTargetIsOrgMember } from './access.server-Rd56k7vs.js';
|
|
5
|
+
import { a as apiError, h as handleApiError, t as throwZodError, A as ApiErrorCode } from './api-errors-BrqxD-El.js';
|
|
6
6
|
import { f as ProjectRoleSchema } from './context-BJnJL8ES.js';
|
|
7
7
|
import './shared-server-C3WdcJCQ.js';
|
|
8
8
|
import 'node:url';
|
|
@@ -20,7 +20,7 @@ const AddMemberSchema = z.object({
|
|
|
20
20
|
});
|
|
21
21
|
const GET = async ({ params, locals }) => {
|
|
22
22
|
const { id } = params;
|
|
23
|
-
if (!id)
|
|
23
|
+
if (!id) apiError(400, ApiErrorCode.VALIDATION_FAILED, "Missing project ID");
|
|
24
24
|
await requireCanManageMembers(locals, id);
|
|
25
25
|
const ctx = locals.ctx;
|
|
26
26
|
try {
|
|
@@ -32,14 +32,14 @@ const GET = async ({ params, locals }) => {
|
|
|
32
32
|
};
|
|
33
33
|
const POST = async ({ params, request, locals }) => {
|
|
34
34
|
const { id } = params;
|
|
35
|
-
if (!id)
|
|
35
|
+
if (!id) apiError(400, ApiErrorCode.VALIDATION_FAILED, "Missing project ID");
|
|
36
36
|
await requireCanManageMembers(locals, id);
|
|
37
37
|
const ctx = locals.ctx;
|
|
38
38
|
const body = await request.json().catch(() => null);
|
|
39
39
|
const parsed = AddMemberSchema.safeParse(body);
|
|
40
40
|
if (!parsed.success) throwZodError(parsed.error);
|
|
41
41
|
const project = await getProjectProvider().getProject(ctx, id);
|
|
42
|
-
if (!project)
|
|
42
|
+
if (!project) apiError(404, ApiErrorCode.NOT_FOUND, "Project not found");
|
|
43
43
|
await requireTargetIsOrgMember(locals, project.orgId, parsed.data.userId);
|
|
44
44
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
45
45
|
const member = {
|
|
@@ -60,4 +60,4 @@ const POST = async ({ params, request, locals }) => {
|
|
|
60
60
|
};
|
|
61
61
|
|
|
62
62
|
export { GET, POST };
|
|
63
|
-
//# sourceMappingURL=_server.ts-
|
|
63
|
+
//# sourceMappingURL=_server.ts-B6gtWjZd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_server.ts-B6gtWjZd.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/projects/_id_/members/_server.ts.js"],"sourcesContent":["import { json } from \"@sveltejs/kit\";\nimport { z } from \"zod\";\nimport { n as getProjectProvider } from \"../../../../../../chunks/providers.server.js\";\nimport { n as requireCanManageMembers, A as requireTargetIsOrgMember } from \"../../../../../../chunks/access.server.js\";\nimport { a as apiError, h as handleApiError, t as throwZodError, A as ApiErrorCode } from \"../../../../../../chunks/api-errors.js\";\nimport { f as ProjectRoleSchema } from \"../../../../../../chunks/context.js\";\nconst AddMemberSchema = z.object({\n userId: z.string().min(1, \"userId is required\"),\n role: ProjectRoleSchema\n});\nconst GET = async ({ params, locals }) => {\n const { id } = params;\n if (!id) apiError(400, ApiErrorCode.VALIDATION_FAILED, \"Missing project ID\");\n await requireCanManageMembers(locals, id);\n const ctx = locals.ctx;\n try {\n const page = await getProjectProvider().listProjectMembers(ctx, id, { limit: 200 });\n return json({ members: page.items });\n } catch (err) {\n handleApiError(err, \"Failed to load members\");\n }\n};\nconst POST = async ({ params, request, locals }) => {\n const { id } = params;\n if (!id) apiError(400, ApiErrorCode.VALIDATION_FAILED, \"Missing project ID\");\n await requireCanManageMembers(locals, id);\n const ctx = locals.ctx;\n const body = await request.json().catch(() => null);\n const parsed = AddMemberSchema.safeParse(body);\n if (!parsed.success) throwZodError(parsed.error);\n const project = await getProjectProvider().getProject(ctx, id);\n if (!project) apiError(404, ApiErrorCode.NOT_FOUND, \"Project not found\");\n await requireTargetIsOrgMember(locals, project.orgId, parsed.data.userId);\n const now = (/* @__PURE__ */ new Date()).toISOString();\n const member = {\n projectId: id,\n userId: parsed.data.userId,\n role: parsed.data.role,\n joinedAt: now,\n updatedAt: now,\n updatedBy: ctx.userId || parsed.data.userId,\n deletedAt: null\n };\n try {\n await getProjectProvider().addProjectMember(ctx, member);\n return json(member, { status: 201 });\n } catch (err) {\n handleApiError(err, \"Failed to add member\");\n }\n};\nexport {\n GET,\n POST\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { error, json } from '@sveltejs/kit';
|
|
2
1
|
import { z } from 'zod';
|
|
3
2
|
import { n as getProjectProvider, k as getOrganizationProvider } from './providers.server-C3fQ7ZdV.js';
|
|
4
|
-
import { m as requireCanManage, l as requireCanEditProjectSettings, B as withAdminBypass, f as canChangeVisibilityToPublic } from './access.server-
|
|
5
|
-
import { h as handleApiError, t as throwZodError } from './api-errors-
|
|
3
|
+
import { m as requireCanManage, l as requireCanEditProjectSettings, B as withAdminBypass, f as canChangeVisibilityToPublic } from './access.server-Rd56k7vs.js';
|
|
4
|
+
import { a as apiError, h as handleApiError, t as throwZodError, A as ApiErrorCode } from './api-errors-BrqxD-El.js';
|
|
6
5
|
import { s as slugify } from './slug-BGuFQjqe.js';
|
|
7
6
|
import { g as ProjectVisibilitySchema, v as validateProjectFlags } from './context-BJnJL8ES.js';
|
|
8
7
|
import './shared-server-C3WdcJCQ.js';
|
|
@@ -12,6 +11,7 @@ import 'node:fs';
|
|
|
12
11
|
import 'node:crypto';
|
|
13
12
|
import 'node:fs/promises';
|
|
14
13
|
import '@supabase/supabase-js';
|
|
14
|
+
import '@sveltejs/kit';
|
|
15
15
|
import '@selvajs/compute/core';
|
|
16
16
|
import './utils2-BqfluBM6.js';
|
|
17
17
|
|
|
@@ -23,7 +23,7 @@ const UpdateProjectBody = z.object({
|
|
|
23
23
|
}).partial();
|
|
24
24
|
const PATCH = async ({ params, request, locals }) => {
|
|
25
25
|
const { id } = params;
|
|
26
|
-
if (!id)
|
|
26
|
+
if (!id) apiError(400, ApiErrorCode.VALIDATION_FAILED, "Missing project ID");
|
|
27
27
|
const { ctx, project: existing } = await requireCanEditProjectSettings(locals, id);
|
|
28
28
|
const body = await request.json().catch(() => null);
|
|
29
29
|
const parsed = UpdateProjectBody.safeParse(body);
|
|
@@ -35,7 +35,7 @@ const PATCH = async ({ params, request, locals }) => {
|
|
|
35
35
|
() => canChangeVisibilityToPublic({ orgMember })
|
|
36
36
|
);
|
|
37
37
|
if (!passes) {
|
|
38
|
-
|
|
38
|
+
apiError(403, ApiErrorCode.FORBIDDEN, "Only org owners or admins can make a project public.");
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
const mergedVisibility = parsed.data.visibility ?? existing.visibility;
|
|
@@ -45,7 +45,11 @@ const PATCH = async ({ params, request, locals }) => {
|
|
|
45
45
|
autoJoinOnUpload: mergedAutoJoin
|
|
46
46
|
});
|
|
47
47
|
if (flagIssues.length > 0) {
|
|
48
|
-
|
|
48
|
+
apiError(
|
|
49
|
+
400,
|
|
50
|
+
ApiErrorCode.VALIDATION_FAILED,
|
|
51
|
+
flagIssues.map((i) => `${i.path}: ${i.message}`).join("; ")
|
|
52
|
+
);
|
|
49
53
|
}
|
|
50
54
|
const patch = {};
|
|
51
55
|
if (parsed.data.name !== void 0) {
|
|
@@ -61,23 +65,23 @@ const PATCH = async ({ params, request, locals }) => {
|
|
|
61
65
|
}
|
|
62
66
|
try {
|
|
63
67
|
await getProjectProvider().updateProject(ctx, id, patch);
|
|
64
|
-
return
|
|
68
|
+
return new Response(null, { status: 204 });
|
|
65
69
|
} catch (err) {
|
|
66
70
|
handleApiError(err, "Failed to update project");
|
|
67
71
|
}
|
|
68
72
|
};
|
|
69
73
|
const DELETE = async ({ params, locals }) => {
|
|
70
74
|
const { id } = params;
|
|
71
|
-
if (!id)
|
|
75
|
+
if (!id) apiError(400, ApiErrorCode.VALIDATION_FAILED, "Missing project ID");
|
|
72
76
|
await requireCanManage(locals, id);
|
|
73
77
|
const ctx = locals.ctx;
|
|
74
78
|
try {
|
|
75
79
|
await getProjectProvider().deleteProject(ctx, id);
|
|
76
|
-
return
|
|
80
|
+
return new Response(null, { status: 204 });
|
|
77
81
|
} catch (err) {
|
|
78
82
|
handleApiError(err, "Failed to delete project");
|
|
79
83
|
}
|
|
80
84
|
};
|
|
81
85
|
|
|
82
86
|
export { DELETE, PATCH };
|
|
83
|
-
//# sourceMappingURL=_server.ts-
|
|
87
|
+
//# sourceMappingURL=_server.ts-B9Fdut8P.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_server.ts-B9Fdut8P.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/projects/_id_/_server.ts.js"],"sourcesContent":["import { z } from \"zod\";\nimport { n as getProjectProvider, k as getOrganizationProvider } from \"../../../../../chunks/providers.server.js\";\nimport { m as requireCanManage, l as requireCanEditProjectSettings, B as withAdminBypass, f as canChangeVisibilityToPublic } from \"../../../../../chunks/access.server.js\";\nimport { a as apiError, h as handleApiError, t as throwZodError, A as ApiErrorCode } from \"../../../../../chunks/api-errors.js\";\nimport { s as slugify } from \"../../../../../chunks/slug.js\";\nimport { g as ProjectVisibilitySchema, v as validateProjectFlags } from \"../../../../../chunks/context.js\";\nconst UpdateProjectBody = z.object({\n name: z.string().min(1).max(128).trim(),\n description: z.string().max(2e3).nullish(),\n visibility: ProjectVisibilitySchema,\n autoJoinOnUpload: z.boolean()\n}).partial();\nconst PATCH = async ({ params, request, locals }) => {\n const { id } = params;\n if (!id) apiError(400, ApiErrorCode.VALIDATION_FAILED, \"Missing project ID\");\n const { ctx, project: existing } = await requireCanEditProjectSettings(locals, id);\n const body = await request.json().catch(() => null);\n const parsed = UpdateProjectBody.safeParse(body);\n if (!parsed.success) throwZodError(parsed.error);\n if (parsed.data.visibility !== void 0 && parsed.data.visibility === \"public\" && existing.visibility !== \"public\") {\n const orgMember = await getOrganizationProvider().getOrgMember(ctx, existing.orgId, ctx.userId);\n const passes = withAdminBypass(\n ctx.platformPermissions,\n () => canChangeVisibilityToPublic({ orgMember })\n );\n if (!passes) {\n apiError(403, ApiErrorCode.FORBIDDEN, \"Only org owners or admins can make a project public.\");\n }\n }\n const mergedVisibility = parsed.data.visibility ?? existing.visibility;\n const mergedAutoJoin = parsed.data.autoJoinOnUpload ?? existing.autoJoinOnUpload;\n const flagIssues = validateProjectFlags({\n visibility: mergedVisibility,\n autoJoinOnUpload: mergedAutoJoin\n });\n if (flagIssues.length > 0) {\n apiError(\n 400,\n ApiErrorCode.VALIDATION_FAILED,\n flagIssues.map((i) => `${i.path}: ${i.message}`).join(\"; \")\n );\n }\n const patch = {};\n if (parsed.data.name !== void 0) {\n patch.name = parsed.data.name;\n patch.slug = slugify(parsed.data.name);\n }\n if (parsed.data.description !== void 0) {\n patch.description = parsed.data.description ?? void 0;\n }\n if (parsed.data.visibility !== void 0) patch.visibility = parsed.data.visibility;\n if (parsed.data.autoJoinOnUpload !== void 0) {\n patch.autoJoinOnUpload = parsed.data.autoJoinOnUpload;\n }\n try {\n await getProjectProvider().updateProject(ctx, id, patch);\n return new Response(null, { status: 204 });\n } catch (err) {\n handleApiError(err, \"Failed to update project\");\n }\n};\nconst DELETE = async ({ params, locals }) => {\n const { id } = params;\n if (!id) apiError(400, ApiErrorCode.VALIDATION_FAILED, \"Missing project ID\");\n await requireCanManage(locals, id);\n const ctx = locals.ctx;\n try {\n await getProjectProvider().deleteProject(ctx, id);\n return new Response(null, { status: 204 });\n } catch (err) {\n handleApiError(err, \"Failed to delete project\");\n }\n};\nexport {\n DELETE,\n PATCH\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { error, json } from '@sveltejs/kit';
|
|
2
1
|
import { z } from 'zod';
|
|
3
2
|
import { n as getProjectProvider } from './providers.server-C3fQ7ZdV.js';
|
|
4
|
-
import { n as requireCanManageMembers, i as checkOwnerRemoval } from './access.server-
|
|
5
|
-
import { h as handleApiError, t as throwZodError } from './api-errors-
|
|
3
|
+
import { n as requireCanManageMembers, i as checkOwnerRemoval } from './access.server-Rd56k7vs.js';
|
|
4
|
+
import { a as apiError, h as handleApiError, t as throwZodError, A as ApiErrorCode } from './api-errors-BrqxD-El.js';
|
|
6
5
|
import { f as ProjectRoleSchema } from './context-BJnJL8ES.js';
|
|
7
6
|
import './shared-server-C3WdcJCQ.js';
|
|
8
7
|
import 'node:url';
|
|
@@ -11,13 +10,15 @@ import 'node:fs';
|
|
|
11
10
|
import 'node:crypto';
|
|
12
11
|
import 'node:fs/promises';
|
|
13
12
|
import '@supabase/supabase-js';
|
|
13
|
+
import '@sveltejs/kit';
|
|
14
14
|
import '@selvajs/compute/core';
|
|
15
15
|
import './utils2-BqfluBM6.js';
|
|
16
16
|
|
|
17
17
|
const UpdateRoleSchema = z.object({ role: ProjectRoleSchema });
|
|
18
18
|
const PATCH = async ({ params, request, locals }) => {
|
|
19
19
|
const { id, userId } = params;
|
|
20
|
-
if (!id || !userId)
|
|
20
|
+
if (!id || !userId)
|
|
21
|
+
apiError(400, ApiErrorCode.VALIDATION_FAILED, "Missing project ID or user ID");
|
|
21
22
|
await requireCanManageMembers(locals, id);
|
|
22
23
|
const ctx = locals.ctx;
|
|
23
24
|
const body = await request.json().catch(() => null);
|
|
@@ -25,21 +26,22 @@ const PATCH = async ({ params, request, locals }) => {
|
|
|
25
26
|
if (!parsed.success) throwZodError(parsed.error);
|
|
26
27
|
try {
|
|
27
28
|
await getProjectProvider().updateProjectMemberRole(ctx, id, userId, parsed.data.role);
|
|
28
|
-
return
|
|
29
|
+
return new Response(null, { status: 204 });
|
|
29
30
|
} catch (err) {
|
|
30
31
|
handleApiError(err, "Failed to update role");
|
|
31
32
|
}
|
|
32
33
|
};
|
|
33
34
|
const DELETE = async ({ params, url, locals }) => {
|
|
34
35
|
const { id, userId } = params;
|
|
35
|
-
if (!id || !userId)
|
|
36
|
+
if (!id || !userId)
|
|
37
|
+
apiError(400, ApiErrorCode.VALIDATION_FAILED, "Missing project ID or user ID");
|
|
36
38
|
await requireCanManageMembers(locals, id);
|
|
37
39
|
const ctx = locals.ctx;
|
|
38
40
|
const confirmed = url.searchParams.get("confirm") === "true";
|
|
39
41
|
const projects = getProjectProvider();
|
|
40
42
|
const target = await projects.getProjectMember(ctx, id, userId);
|
|
41
43
|
if (!target) {
|
|
42
|
-
return
|
|
44
|
+
return new Response(null, { status: 204 });
|
|
43
45
|
}
|
|
44
46
|
if (target.role === "owner") {
|
|
45
47
|
const page = await projects.listProjectMembers(ctx, id, { limit: 200 });
|
|
@@ -49,25 +51,27 @@ const DELETE = async ({ params, url, locals }) => {
|
|
|
49
51
|
confirmed
|
|
50
52
|
});
|
|
51
53
|
if (decision === "sole_owner") {
|
|
52
|
-
|
|
54
|
+
apiError(
|
|
53
55
|
409,
|
|
56
|
+
ApiErrorCode.CONFLICT,
|
|
54
57
|
"Cannot remove the sole owner of a project. Assign another owner first, or use reclaim to add a co-owner."
|
|
55
58
|
);
|
|
56
59
|
}
|
|
57
60
|
if (decision === "needs_confirm") {
|
|
58
|
-
|
|
61
|
+
apiError(
|
|
59
62
|
409,
|
|
63
|
+
ApiErrorCode.CONFLICT,
|
|
60
64
|
"Removing another project owner requires explicit confirmation. Retry with ?confirm=true."
|
|
61
65
|
);
|
|
62
66
|
}
|
|
63
67
|
}
|
|
64
68
|
try {
|
|
65
69
|
await projects.removeProjectMember(ctx, id, userId);
|
|
66
|
-
return
|
|
70
|
+
return new Response(null, { status: 204 });
|
|
67
71
|
} catch (err) {
|
|
68
72
|
handleApiError(err, "Failed to remove member");
|
|
69
73
|
}
|
|
70
74
|
};
|
|
71
75
|
|
|
72
76
|
export { DELETE, PATCH };
|
|
73
|
-
//# sourceMappingURL=_server.ts-
|
|
77
|
+
//# sourceMappingURL=_server.ts-BJEEQ8tH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_server.ts-BJEEQ8tH.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/projects/_id_/members/_userId_/_server.ts.js"],"sourcesContent":["import { z } from \"zod\";\nimport { n as getProjectProvider } from \"../../../../../../../chunks/providers.server.js\";\nimport { n as requireCanManageMembers, i as checkOwnerRemoval } from \"../../../../../../../chunks/access.server.js\";\nimport { a as apiError, h as handleApiError, t as throwZodError, A as ApiErrorCode } from \"../../../../../../../chunks/api-errors.js\";\nimport { f as ProjectRoleSchema } from \"../../../../../../../chunks/context.js\";\nconst UpdateRoleSchema = z.object({ role: ProjectRoleSchema });\nconst PATCH = async ({ params, request, locals }) => {\n const { id, userId } = params;\n if (!id || !userId)\n apiError(400, ApiErrorCode.VALIDATION_FAILED, \"Missing project ID or user ID\");\n await requireCanManageMembers(locals, id);\n const ctx = locals.ctx;\n const body = await request.json().catch(() => null);\n const parsed = UpdateRoleSchema.safeParse(body);\n if (!parsed.success) throwZodError(parsed.error);\n try {\n await getProjectProvider().updateProjectMemberRole(ctx, id, userId, parsed.data.role);\n return new Response(null, { status: 204 });\n } catch (err) {\n handleApiError(err, \"Failed to update role\");\n }\n};\nconst DELETE = async ({ params, url, locals }) => {\n const { id, userId } = params;\n if (!id || !userId)\n apiError(400, ApiErrorCode.VALIDATION_FAILED, \"Missing project ID or user ID\");\n await requireCanManageMembers(locals, id);\n const ctx = locals.ctx;\n const confirmed = url.searchParams.get(\"confirm\") === \"true\";\n const projects = getProjectProvider();\n const target = await projects.getProjectMember(ctx, id, userId);\n if (!target) {\n return new Response(null, { status: 204 });\n }\n if (target.role === \"owner\") {\n const page = await projects.listProjectMembers(ctx, id, { limit: 200 });\n const decision = checkOwnerRemoval({\n target: { role: target.role },\n allMembers: page.items.map((m) => ({ role: m.role })),\n confirmed\n });\n if (decision === \"sole_owner\") {\n apiError(\n 409,\n ApiErrorCode.CONFLICT,\n \"Cannot remove the sole owner of a project. Assign another owner first, or use reclaim to add a co-owner.\"\n );\n }\n if (decision === \"needs_confirm\") {\n apiError(\n 409,\n ApiErrorCode.CONFLICT,\n \"Removing another project owner requires explicit confirmation. Retry with ?confirm=true.\"\n );\n }\n }\n try {\n await projects.removeProjectMember(ctx, id, userId);\n return new Response(null, { status: 204 });\n } catch (err) {\n handleApiError(err, \"Failed to remove member\");\n }\n};\nexport {\n DELETE,\n PATCH\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { error, json } from '@sveltejs/kit';
|
|
2
1
|
import { f as flag, u as providers } from './providers.server-C3fQ7ZdV.js';
|
|
3
|
-
import { t as requireEditableDefinition } from './access.server-
|
|
4
|
-
import { h as handleApiError } from './api-errors-
|
|
2
|
+
import { t as requireEditableDefinition } from './access.server-Rd56k7vs.js';
|
|
3
|
+
import { a as apiError, A as ApiErrorCode, h as handleApiError } from './api-errors-BrqxD-El.js';
|
|
5
4
|
import { G as GuidSchema } from './context-BJnJL8ES.js';
|
|
6
5
|
import './shared-server-C3WdcJCQ.js';
|
|
7
6
|
import 'node:url';
|
|
@@ -10,30 +9,36 @@ import 'node:fs';
|
|
|
10
9
|
import 'node:crypto';
|
|
11
10
|
import 'node:fs/promises';
|
|
12
11
|
import '@supabase/supabase-js';
|
|
12
|
+
import '@sveltejs/kit';
|
|
13
13
|
import 'zod';
|
|
14
14
|
import '@selvajs/compute/core';
|
|
15
15
|
import './utils2-BqfluBM6.js';
|
|
16
16
|
|
|
17
17
|
const DELETE = async ({ params, locals }) => {
|
|
18
18
|
if (!flag("ENABLE_SHARING")) {
|
|
19
|
-
|
|
19
|
+
apiError(
|
|
20
|
+
404,
|
|
21
|
+
ApiErrorCode.NOT_FOUND,
|
|
22
|
+
"Share links are disabled on this instance (ENABLE_SHARING)."
|
|
23
|
+
);
|
|
20
24
|
}
|
|
21
25
|
const guidParsed = GuidSchema.safeParse(params.guid);
|
|
22
|
-
if (!guidParsed.success)
|
|
26
|
+
if (!guidParsed.success) apiError(400, ApiErrorCode.VALIDATION_FAILED, "Invalid or missing GUID");
|
|
23
27
|
const linkParsed = GuidSchema.safeParse(params.linkId);
|
|
24
|
-
if (!linkParsed.success)
|
|
28
|
+
if (!linkParsed.success)
|
|
29
|
+
apiError(400, ApiErrorCode.VALIDATION_FAILED, "Invalid or missing link ID");
|
|
25
30
|
const { ctx } = await requireEditableDefinition(locals, guidParsed.data);
|
|
26
31
|
try {
|
|
27
32
|
const existing = await providers.data.shareLinks.getById(ctx, linkParsed.data);
|
|
28
33
|
if (!existing || existing.definitionId !== guidParsed.data) {
|
|
29
|
-
|
|
34
|
+
apiError(404, ApiErrorCode.NOT_FOUND, "Share link not found.");
|
|
30
35
|
}
|
|
31
36
|
await providers.data.shareLinks.revoke(ctx, linkParsed.data);
|
|
32
|
-
return
|
|
37
|
+
return new Response(null, { status: 204 });
|
|
33
38
|
} catch (err) {
|
|
34
39
|
handleApiError(err, "Failed to revoke share link");
|
|
35
40
|
}
|
|
36
41
|
};
|
|
37
42
|
|
|
38
43
|
export { DELETE };
|
|
39
|
-
//# sourceMappingURL=_server.ts-
|
|
44
|
+
//# sourceMappingURL=_server.ts-BKPaoj3Y.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_server.ts-BKPaoj3Y.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/definitions/_guid_/share-links/_linkId_/_server.ts.js"],"sourcesContent":["import { f as flag, u as providers } from \"../../../../../../../chunks/providers.server.js\";\nimport { t as requireEditableDefinition } from \"../../../../../../../chunks/access.server.js\";\nimport { a as apiError, A as ApiErrorCode, h as handleApiError } from \"../../../../../../../chunks/api-errors.js\";\nimport { G as GuidSchema } from \"../../../../../../../chunks/context.js\";\nconst DELETE = async ({ params, locals }) => {\n if (!flag(\"ENABLE_SHARING\")) {\n apiError(\n 404,\n ApiErrorCode.NOT_FOUND,\n \"Share links are disabled on this instance (ENABLE_SHARING).\"\n );\n }\n const guidParsed = GuidSchema.safeParse(params.guid);\n if (!guidParsed.success) apiError(400, ApiErrorCode.VALIDATION_FAILED, \"Invalid or missing GUID\");\n const linkParsed = GuidSchema.safeParse(params.linkId);\n if (!linkParsed.success)\n apiError(400, ApiErrorCode.VALIDATION_FAILED, \"Invalid or missing link ID\");\n const { ctx } = await requireEditableDefinition(locals, guidParsed.data);\n try {\n const existing = await providers.data.shareLinks.getById(ctx, linkParsed.data);\n if (!existing || existing.definitionId !== guidParsed.data) {\n apiError(404, ApiErrorCode.NOT_FOUND, \"Share link not found.\");\n }\n await providers.data.shareLinks.revoke(ctx, linkParsed.data);\n return new Response(null, { status: 204 });\n } catch (err) {\n handleApiError(err, \"Failed to revoke share link\");\n }\n};\nexport {\n DELETE\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAIK,MAAC,MAAM,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK;AAC7C,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;AAC/B,IAAI,QAAQ;AACZ,MAAM,GAAG;AACT,MAAM,YAAY,CAAC,SAAS;AAC5B,MAAM;AACN,KAAK;AACL,EAAE;AACF,EAAE,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACtD,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,iBAAiB,EAAE,yBAAyB,CAAC;AACnG,EAAE,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;AACxD,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO;AACzB,IAAI,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,iBAAiB,EAAE,4BAA4B,CAAC;AAC/E,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,yBAAyB,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC;AAC1E,EAAE,IAAI;AACN,IAAI,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC;AAClF,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,YAAY,KAAK,UAAU,CAAC,IAAI,EAAE;AAChE,MAAM,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,SAAS,EAAE,uBAAuB,CAAC;AACpE,IAAI;AACJ,IAAI,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC;AAChE,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC9C,EAAE,CAAC,CAAC,OAAO,GAAG,EAAE;AAChB,IAAI,cAAc,CAAC,GAAG,EAAE,6BAA6B,CAAC;AACtD,EAAE;AACF;;;;"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { json } from '@sveltejs/kit';
|
|
2
2
|
import { randomUUID } from 'node:crypto';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { j as getInviteStore } from './providers.server-C3fQ7ZdV.js';
|
|
5
|
-
import { y as requireManageOrgMembers } from './access.server-
|
|
6
|
-
import { h as handleApiError, t as throwZodError } from './api-errors-
|
|
5
|
+
import { y as requireManageOrgMembers } from './access.server-Rd56k7vs.js';
|
|
6
|
+
import { a as apiError, h as handleApiError, t as throwZodError, A as ApiErrorCode } from './api-errors-BrqxD-El.js';
|
|
7
7
|
import { M as MEMBER_ASSIGNABLE_PERMISSIONS, D as DEFAULT_ORG_PERMISSIONS, e as OrgRoleSchema, P as PlatformPermissionSchema, d as OrgPermissionSchema } from './context-BJnJL8ES.js';
|
|
8
8
|
import { s as splitFlatPermissions } from './permissions-compat.server-G174xsh6.js';
|
|
9
9
|
import { m as mintRawToken, h as hashToken } from './token.server2-CaWL-Isp.js';
|
|
@@ -26,11 +26,11 @@ const INVITE_TTL_MS = 7 * 24 * 60 * 60 * 1e3;
|
|
|
26
26
|
const GET = async ({ locals }) => {
|
|
27
27
|
requireManageOrgMembers(locals);
|
|
28
28
|
const ctx = locals.ctx;
|
|
29
|
-
if (!ctx.actingOrgId)
|
|
29
|
+
if (!ctx.actingOrgId) apiError(400, ApiErrorCode.VALIDATION_FAILED, "No active organization");
|
|
30
30
|
try {
|
|
31
31
|
const page = await getInviteStore().listByOrg(ctx, ctx.actingOrgId, { limit: 200 });
|
|
32
|
-
const
|
|
33
|
-
return json(
|
|
32
|
+
const invites = page.items.map(({ tokenHash: _omit, ...rest }) => rest);
|
|
33
|
+
return json({ invites });
|
|
34
34
|
} catch (err) {
|
|
35
35
|
handleApiError(err, "Failed to list invites");
|
|
36
36
|
}
|
|
@@ -39,7 +39,7 @@ const POST = async ({ request, locals, url }) => {
|
|
|
39
39
|
requireManageOrgMembers(locals);
|
|
40
40
|
const ctx = locals.ctx;
|
|
41
41
|
const user = locals.user;
|
|
42
|
-
if (!ctx.actingOrgId)
|
|
42
|
+
if (!ctx.actingOrgId) apiError(400, ApiErrorCode.VALIDATION_FAILED, "No active organization");
|
|
43
43
|
const body = await request.json().catch(() => null);
|
|
44
44
|
const parsed = CreateBody.safeParse(body);
|
|
45
45
|
if (!parsed.success) throwZodError(parsed.error);
|
|
@@ -69,4 +69,4 @@ const POST = async ({ request, locals, url }) => {
|
|
|
69
69
|
};
|
|
70
70
|
|
|
71
71
|
export { GET, POST };
|
|
72
|
-
//# sourceMappingURL=_server.ts-
|
|
72
|
+
//# sourceMappingURL=_server.ts-BVpHuRup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_server.ts-BVpHuRup.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/invites/_server.ts.js"],"sourcesContent":["import { json } from \"@sveltejs/kit\";\nimport { randomUUID } from \"node:crypto\";\nimport { z } from \"zod\";\nimport { j as getInviteStore } from \"../../../../chunks/providers.server.js\";\nimport { y as requireManageOrgMembers } from \"../../../../chunks/access.server.js\";\nimport { a as apiError, h as handleApiError, t as throwZodError, A as ApiErrorCode } from \"../../../../chunks/api-errors.js\";\nimport { P as PlatformPermissionSchema, d as OrgPermissionSchema, e as OrgRoleSchema, M as MEMBER_ASSIGNABLE_PERMISSIONS, D as DEFAULT_ORG_PERMISSIONS } from \"../../../../chunks/context.js\";\nimport { s as splitFlatPermissions } from \"../../../../chunks/permissions-compat.server.js\";\nimport { m as mintRawToken, h as hashToken } from \"../../../../chunks/token.server2.js\";\nconst FlatPermissionSchema = z.union([PlatformPermissionSchema, OrgPermissionSchema]);\nconst CreateBody = z.object({\n email: z.string().email(\"Valid email is required\").transform((s) => s.toLowerCase().trim()),\n orgRole: OrgRoleSchema.default(\"member\"),\n permissions: z.array(FlatPermissionSchema).default([])\n});\nconst INVITE_TTL_MS = 7 * 24 * 60 * 60 * 1e3;\nconst GET = async ({ locals }) => {\n requireManageOrgMembers(locals);\n const ctx = locals.ctx;\n if (!ctx.actingOrgId) apiError(400, ApiErrorCode.VALIDATION_FAILED, \"No active organization\");\n try {\n const page = await getInviteStore().listByOrg(ctx, ctx.actingOrgId, { limit: 200 });\n const invites = page.items.map(({ tokenHash: _omit, ...rest }) => rest);\n return json({ invites });\n } catch (err) {\n handleApiError(err, \"Failed to list invites\");\n }\n};\nconst POST = async ({ request, locals, url }) => {\n requireManageOrgMembers(locals);\n const ctx = locals.ctx;\n const user = locals.user;\n if (!ctx.actingOrgId) apiError(400, ApiErrorCode.VALIDATION_FAILED, \"No active organization\");\n const body = await request.json().catch(() => null);\n const parsed = CreateBody.safeParse(body);\n if (!parsed.success) throwZodError(parsed.error);\n try {\n const { org: submittedOrgPerms } = splitFlatPermissions(parsed.data.permissions);\n const orgPermissions = parsed.data.orgRole === \"member\" ? submittedOrgPerms.filter((p) => MEMBER_ASSIGNABLE_PERMISSIONS.includes(p)) : [...DEFAULT_ORG_PERMISSIONS[parsed.data.orgRole]];\n const rawToken = mintRawToken();\n const now = /* @__PURE__ */ new Date();\n const invite = {\n id: randomUUID(),\n tokenHash: hashToken(rawToken),\n email: parsed.data.email,\n orgId: ctx.actingOrgId,\n orgRole: parsed.data.orgRole,\n orgPermissions,\n invitedBy: user.id,\n createdAt: now.toISOString(),\n expiresAt: new Date(now.getTime() + INVITE_TTL_MS).toISOString()\n };\n await getInviteStore().create(ctx, invite);\n const acceptUrl = `${url.origin}/accept-invite?token=${rawToken}`;\n const { tokenHash: _omit, ...inviteForClient } = invite;\n return json({ invite: inviteForClient, acceptUrl }, { status: 201 });\n } catch (err) {\n handleApiError(err, \"Failed to create invite\");\n }\n};\nexport {\n GET,\n POST\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { error, json } from '@sveltejs/kit';
|
|
2
1
|
import { j as getInviteStore } from './providers.server-C3fQ7ZdV.js';
|
|
3
|
-
import { y as requireManageOrgMembers } from './access.server-
|
|
4
|
-
import { h as handleApiError } from './api-errors-
|
|
2
|
+
import { y as requireManageOrgMembers } from './access.server-Rd56k7vs.js';
|
|
3
|
+
import { a as apiError, A as ApiErrorCode, h as handleApiError } from './api-errors-BrqxD-El.js';
|
|
5
4
|
import './shared-server-C3WdcJCQ.js';
|
|
6
5
|
import 'node:url';
|
|
7
6
|
import 'node:path';
|
|
@@ -11,13 +10,14 @@ import 'zod';
|
|
|
11
10
|
import 'node:crypto';
|
|
12
11
|
import 'node:fs/promises';
|
|
13
12
|
import '@supabase/supabase-js';
|
|
13
|
+
import '@sveltejs/kit';
|
|
14
14
|
import '@selvajs/compute/core';
|
|
15
15
|
import './utils2-BqfluBM6.js';
|
|
16
16
|
|
|
17
17
|
const DELETE = async ({ params, locals }) => {
|
|
18
18
|
requireManageOrgMembers(locals);
|
|
19
19
|
const ctx = locals.ctx;
|
|
20
|
-
if (!ctx.actingOrgId)
|
|
20
|
+
if (!ctx.actingOrgId) apiError(400, ApiErrorCode.VALIDATION_FAILED, "No active organization");
|
|
21
21
|
const id = params.id;
|
|
22
22
|
try {
|
|
23
23
|
const store = getInviteStore();
|
|
@@ -31,13 +31,13 @@ const DELETE = async ({ params, locals }) => {
|
|
|
31
31
|
}
|
|
32
32
|
cursor = page.nextCursor ?? void 0;
|
|
33
33
|
} while (cursor);
|
|
34
|
-
if (!found)
|
|
34
|
+
if (!found) apiError(404, ApiErrorCode.NOT_FOUND, "Invite not found");
|
|
35
35
|
await store.revoke(ctx, id);
|
|
36
|
-
return
|
|
36
|
+
return new Response(null, { status: 204 });
|
|
37
37
|
} catch (err) {
|
|
38
38
|
handleApiError(err, "Failed to revoke invite");
|
|
39
39
|
}
|
|
40
40
|
};
|
|
41
41
|
|
|
42
42
|
export { DELETE };
|
|
43
|
-
//# sourceMappingURL=_server.ts-
|
|
43
|
+
//# sourceMappingURL=_server.ts-BplW_hNF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_server.ts-BplW_hNF.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/invites/_id_/_server.ts.js"],"sourcesContent":["import { j as getInviteStore } from \"../../../../../chunks/providers.server.js\";\nimport { y as requireManageOrgMembers } from \"../../../../../chunks/access.server.js\";\nimport { a as apiError, A as ApiErrorCode, h as handleApiError } from \"../../../../../chunks/api-errors.js\";\nconst DELETE = async ({ params, locals }) => {\n requireManageOrgMembers(locals);\n const ctx = locals.ctx;\n if (!ctx.actingOrgId) apiError(400, ApiErrorCode.VALIDATION_FAILED, \"No active organization\");\n const id = params.id;\n try {\n const store = getInviteStore();\n let cursor;\n let found = false;\n do {\n const page = await store.listByOrg(ctx, ctx.actingOrgId, { limit: 200, cursor });\n if (page.items.some((i) => i.id === id)) {\n found = true;\n break;\n }\n cursor = page.nextCursor ?? void 0;\n } while (cursor);\n if (!found) apiError(404, ApiErrorCode.NOT_FOUND, \"Invite not found\");\n await store.revoke(ctx, id);\n return new Response(null, { status: 204 });\n } catch (err) {\n handleApiError(err, \"Failed to revoke invite\");\n }\n};\nexport {\n DELETE\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGK,MAAC,MAAM,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK;AAC7C,EAAE,uBAAuB,CAAC,MAAM,CAAC;AACjC,EAAE,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG;AACxB,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;AAC/F,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE;AACtB,EAAE,IAAI;AACN,IAAI,MAAM,KAAK,GAAG,cAAc,EAAE;AAClC,IAAI,IAAI,MAAM;AACd,IAAI,IAAI,KAAK,GAAG,KAAK;AACrB,IAAI,GAAG;AACP,MAAM,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACtF,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AAC/C,QAAQ,KAAK,GAAG,IAAI;AACpB,QAAQ;AACR,MAAM;AACN,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC;AACxC,IAAI,CAAC,QAAQ,MAAM;AACnB,IAAI,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,SAAS,EAAE,kBAAkB,CAAC;AACzE,IAAI,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC;AAC/B,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC9C,EAAE,CAAC,CAAC,OAAO,GAAG,EAAE;AAChB,IAAI,cAAc,CAAC,GAAG,EAAE,yBAAyB,CAAC;AAClD,EAAE;AACF;;;;"}
|