@keystrokehq/platform 0.1.139 → 0.1.140
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/{awk2-LA3USKJP-CBRDMAan.cjs → awk2-LA3USKJP-CAN3xR5b.cjs} +2 -2
- package/dist/{awk2-LA3USKJP-CBRDMAan.cjs.map → awk2-LA3USKJP-CAN3xR5b.cjs.map} +1 -1
- package/dist/{awk2-LA3USKJP-C7HIqG-Y.mjs → awk2-LA3USKJP-C_1LvA8G.mjs} +2 -2
- package/dist/{awk2-LA3USKJP-C7HIqG-Y.mjs.map → awk2-LA3USKJP-C_1LvA8G.mjs.map} +1 -1
- package/dist/{base64-C2AIWVNC-DFdQ4Wy4.cjs → base64-C2AIWVNC-C_Qd0PDi.cjs} +2 -2
- package/dist/{base64-C2AIWVNC-DFdQ4Wy4.cjs.map → base64-C2AIWVNC-C_Qd0PDi.cjs.map} +1 -1
- package/dist/{base64-C2AIWVNC-BOfHbhLV.mjs → base64-C2AIWVNC-DOm_abrA.mjs} +2 -2
- package/dist/{base64-C2AIWVNC-BOfHbhLV.mjs.map → base64-C2AIWVNC-DOm_abrA.mjs.map} +1 -1
- package/dist/{bash-YZ33HQZQ-B-gs_y9T.mjs → bash-YZ33HQZQ-DK4mz_fq.mjs} +2 -2
- package/dist/{bash-YZ33HQZQ-B-gs_y9T.mjs.map → bash-YZ33HQZQ-DK4mz_fq.mjs.map} +1 -1
- package/dist/{bash-YZ33HQZQ-Dctq21H_.cjs → bash-YZ33HQZQ-GQp2v6nh.cjs} +2 -2
- package/dist/{bash-YZ33HQZQ-Dctq21H_.cjs.map → bash-YZ33HQZQ-GQp2v6nh.cjs.map} +1 -1
- package/dist/{cat-TSFMZVYS-Nhsy_7eJ.cjs → cat-TSFMZVYS-CWNc8p5Q.cjs} +3 -3
- package/dist/{cat-TSFMZVYS-Nhsy_7eJ.cjs.map → cat-TSFMZVYS-CWNc8p5Q.cjs.map} +1 -1
- package/dist/{cat-TSFMZVYS-Bguvdwng.mjs → cat-TSFMZVYS-DcqBrUw5.mjs} +3 -3
- package/dist/{cat-TSFMZVYS-Bguvdwng.mjs.map → cat-TSFMZVYS-DcqBrUw5.mjs.map} +1 -1
- package/dist/{chunk-5H5SCKJM-JU-o3yyn.cjs → chunk-5H5SCKJM-Bemr9XK-.cjs} +2 -2
- package/dist/{chunk-5H5SCKJM-JU-o3yyn.cjs.map → chunk-5H5SCKJM-Bemr9XK-.cjs.map} +1 -1
- package/dist/{chunk-5H5SCKJM-wWlXvPet.mjs → chunk-5H5SCKJM-CTXjZinE.mjs} +2 -2
- package/dist/{chunk-5H5SCKJM-wWlXvPet.mjs.map → chunk-5H5SCKJM-CTXjZinE.mjs.map} +1 -1
- package/dist/{chunk-AQ6FYS2X-CiJEKxZx.mjs → chunk-AQ6FYS2X-DQ3IEeCg.mjs} +2 -2
- package/dist/{chunk-AQ6FYS2X-CiJEKxZx.mjs.map → chunk-AQ6FYS2X-DQ3IEeCg.mjs.map} +1 -1
- package/dist/{chunk-AQ6FYS2X-DX1_O--e.cjs → chunk-AQ6FYS2X-qrg-y13n.cjs} +2 -2
- package/dist/{chunk-AQ6FYS2X-DX1_O--e.cjs.map → chunk-AQ6FYS2X-qrg-y13n.cjs.map} +1 -1
- package/dist/{chunk-CHFEPBH4-D6eAoaH3.mjs → chunk-CHFEPBH4-Dq4POKpz.mjs} +2 -2
- package/dist/{chunk-CHFEPBH4-D6eAoaH3.mjs.map → chunk-CHFEPBH4-Dq4POKpz.mjs.map} +1 -1
- package/dist/{chunk-CHFEPBH4-Dl_4Ve2o.cjs → chunk-CHFEPBH4-kiGeqHWV.cjs} +2 -2
- package/dist/{chunk-CHFEPBH4-Dl_4Ve2o.cjs.map → chunk-CHFEPBH4-kiGeqHWV.cjs.map} +1 -1
- package/dist/{chunk-EBAPSGAO-DjaFpKa0.mjs → chunk-EBAPSGAO-2M1oNxDQ.mjs} +2 -2
- package/dist/{chunk-EBAPSGAO-DjaFpKa0.mjs.map → chunk-EBAPSGAO-2M1oNxDQ.mjs.map} +1 -1
- package/dist/{chunk-EBAPSGAO-BptaP6Es.cjs → chunk-EBAPSGAO-DL60sCx0.cjs} +2 -2
- package/dist/{chunk-EBAPSGAO-BptaP6Es.cjs.map → chunk-EBAPSGAO-DL60sCx0.cjs.map} +1 -1
- package/dist/{chunk-LEKBROJD-3dFGZEaP.mjs → chunk-LEKBROJD-D1kOTDjw.mjs} +2 -2
- package/dist/{chunk-LEKBROJD-3dFGZEaP.mjs.map → chunk-LEKBROJD-D1kOTDjw.mjs.map} +1 -1
- package/dist/{chunk-LEKBROJD-TDLioftI.cjs → chunk-LEKBROJD-R17bl_bw.cjs} +2 -2
- package/dist/{chunk-LEKBROJD-TDLioftI.cjs.map → chunk-LEKBROJD-R17bl_bw.cjs.map} +1 -1
- package/dist/{chunk-VPADYNBD-LO6r6CFp.cjs → chunk-VPADYNBD-DnPZQ0zX.cjs} +2 -2
- package/dist/{chunk-VPADYNBD-LO6r6CFp.cjs.map → chunk-VPADYNBD-DnPZQ0zX.cjs.map} +1 -1
- package/dist/{chunk-VPADYNBD-jt60EXEo.mjs → chunk-VPADYNBD-nGzQ8omZ.mjs} +2 -2
- package/dist/{chunk-VPADYNBD-jt60EXEo.mjs.map → chunk-VPADYNBD-nGzQ8omZ.mjs.map} +1 -1
- package/dist/{chunk-YCLFEX4T-D_N6ACyW.mjs → chunk-YCLFEX4T-DG46ayYz.mjs} +2 -2
- package/dist/{chunk-YCLFEX4T-D_N6ACyW.mjs.map → chunk-YCLFEX4T-DG46ayYz.mjs.map} +1 -1
- package/dist/{chunk-YCLFEX4T-BvMlCByz.cjs → chunk-YCLFEX4T-Q59HcY90.cjs} +2 -2
- package/dist/{chunk-YCLFEX4T-BvMlCByz.cjs.map → chunk-YCLFEX4T-Q59HcY90.cjs.map} +1 -1
- package/dist/{column-XT6UFXNQ-3mtxBkZ-.mjs → column-XT6UFXNQ-32fYA2k4.mjs} +2 -2
- package/dist/{column-XT6UFXNQ-3mtxBkZ-.mjs.map → column-XT6UFXNQ-32fYA2k4.mjs.map} +1 -1
- package/dist/{column-XT6UFXNQ-Brgdarf5.cjs → column-XT6UFXNQ-COjcEE3v.cjs} +2 -2
- package/dist/{column-XT6UFXNQ-Brgdarf5.cjs.map → column-XT6UFXNQ-COjcEE3v.cjs.map} +1 -1
- package/dist/{comm-VV2LDX2J-poqDMPQN.cjs → comm-VV2LDX2J-D4NkSAWV.cjs} +2 -2
- package/dist/{comm-VV2LDX2J-poqDMPQN.cjs.map → comm-VV2LDX2J-D4NkSAWV.cjs.map} +1 -1
- package/dist/{comm-VV2LDX2J-Dda-s_pB.mjs → comm-VV2LDX2J-_ukxQFX0.mjs} +2 -2
- package/dist/{comm-VV2LDX2J-Dda-s_pB.mjs.map → comm-VV2LDX2J-_ukxQFX0.mjs.map} +1 -1
- package/dist/{cp-BISAAS7A-Cdj_g_EI.mjs → cp-BISAAS7A---kH_JGm.mjs} +2 -2
- package/dist/{cp-BISAAS7A-Cdj_g_EI.mjs.map → cp-BISAAS7A---kH_JGm.mjs.map} +1 -1
- package/dist/{cp-BISAAS7A-CpsET9N2.cjs → cp-BISAAS7A-kto8NQNt.cjs} +2 -2
- package/dist/{cp-BISAAS7A-CpsET9N2.cjs.map → cp-BISAAS7A-kto8NQNt.cjs.map} +1 -1
- package/dist/{cut-OKARJCCV-D3zl9qlm.cjs → cut-OKARJCCV-BmjBIxa7.cjs} +3 -3
- package/dist/{cut-OKARJCCV-D3zl9qlm.cjs.map → cut-OKARJCCV-BmjBIxa7.cjs.map} +1 -1
- package/dist/{cut-OKARJCCV-svOh9K0k.mjs → cut-OKARJCCV-DUZo7CRB.mjs} +3 -3
- package/dist/{cut-OKARJCCV-svOh9K0k.mjs.map → cut-OKARJCCV-DUZo7CRB.mjs.map} +1 -1
- package/dist/{diff-MWJFIG7X-DiujN7nb.cjs → diff-MWJFIG7X-Cma2WPHt.cjs} +2 -2
- package/dist/{diff-MWJFIG7X-DiujN7nb.cjs.map → diff-MWJFIG7X-Cma2WPHt.cjs.map} +1 -1
- package/dist/{diff-MWJFIG7X-BlRlnTas.mjs → diff-MWJFIG7X-CzdLegTv.mjs} +2 -2
- package/dist/{diff-MWJFIG7X-BlRlnTas.mjs.map → diff-MWJFIG7X-CzdLegTv.mjs.map} +1 -1
- package/dist/{du-572XNP42-MGUILTga.mjs → du-572XNP42-2ewMWjcj.mjs} +2 -2
- package/dist/{du-572XNP42-MGUILTga.mjs.map → du-572XNP42-2ewMWjcj.mjs.map} +1 -1
- package/dist/{du-572XNP42-DsDf9B_u.cjs → du-572XNP42-CezcOMpc.cjs} +2 -2
- package/dist/{du-572XNP42-DsDf9B_u.cjs.map → du-572XNP42-CezcOMpc.cjs.map} +1 -1
- package/dist/{env-36M5BO7M-BFB8T1Xv.mjs → env-36M5BO7M-Ba05vlDH.mjs} +2 -2
- package/dist/{env-36M5BO7M-BFB8T1Xv.mjs.map → env-36M5BO7M-Ba05vlDH.mjs.map} +1 -1
- package/dist/{env-36M5BO7M-B1Ig8dv2.cjs → env-36M5BO7M-BlKYwc3N.cjs} +2 -2
- package/dist/{env-36M5BO7M-B1Ig8dv2.cjs.map → env-36M5BO7M-BlKYwc3N.cjs.map} +1 -1
- package/dist/{expand-JSPG6VOP-iCztQuOm.cjs → expand-JSPG6VOP-6DPCE7XP.cjs} +2 -2
- package/dist/{expand-JSPG6VOP-iCztQuOm.cjs.map → expand-JSPG6VOP-6DPCE7XP.cjs.map} +1 -1
- package/dist/{expand-JSPG6VOP-CbqHu_iG.mjs → expand-JSPG6VOP-D8NmYwRv.mjs} +2 -2
- package/dist/{expand-JSPG6VOP-CbqHu_iG.mjs.map → expand-JSPG6VOP-D8NmYwRv.mjs.map} +1 -1
- package/dist/{expr-5JAACS4X-DzKdQa_T.mjs → expr-5JAACS4X-C6sKKOKT.mjs} +2 -2
- package/dist/{expr-5JAACS4X-DzKdQa_T.mjs.map → expr-5JAACS4X-C6sKKOKT.mjs.map} +1 -1
- package/dist/{expr-5JAACS4X-dfZDCIo4.cjs → expr-5JAACS4X-DRZa6imM.cjs} +2 -2
- package/dist/{expr-5JAACS4X-dfZDCIo4.cjs.map → expr-5JAACS4X-DRZa6imM.cjs.map} +1 -1
- package/dist/{find-INTH3OLC-B9OnuI2z.cjs → find-INTH3OLC-C-bYhgeP.cjs} +3 -3
- package/dist/{find-INTH3OLC-B9OnuI2z.cjs.map → find-INTH3OLC-C-bYhgeP.cjs.map} +1 -1
- package/dist/{find-INTH3OLC-DfzbkIc8.mjs → find-INTH3OLC-CZor-tQG.mjs} +3 -3
- package/dist/{find-INTH3OLC-DfzbkIc8.mjs.map → find-INTH3OLC-CZor-tQG.mjs.map} +1 -1
- package/dist/{fold-4TQNYMSW-C9ZeWW9X.mjs → fold-4TQNYMSW-0AVfyBbT.mjs} +2 -2
- package/dist/{fold-4TQNYMSW-C9ZeWW9X.mjs.map → fold-4TQNYMSW-0AVfyBbT.mjs.map} +1 -1
- package/dist/{fold-4TQNYMSW-Z5rNofkJ.cjs → fold-4TQNYMSW-DUKxkmJF.cjs} +2 -2
- package/dist/{fold-4TQNYMSW-Z5rNofkJ.cjs.map → fold-4TQNYMSW-DUKxkmJF.cjs.map} +1 -1
- package/dist/{grep-V3LQVMRQ-mcCG7AzI.cjs → grep-V3LQVMRQ-DB_KKx-B.cjs} +4 -4
- package/dist/{grep-V3LQVMRQ-mcCG7AzI.cjs.map → grep-V3LQVMRQ-DB_KKx-B.cjs.map} +1 -1
- package/dist/{grep-V3LQVMRQ-TUKvGjZZ.mjs → grep-V3LQVMRQ-FEXzVkSU.mjs} +4 -4
- package/dist/{grep-V3LQVMRQ-TUKvGjZZ.mjs.map → grep-V3LQVMRQ-FEXzVkSU.mjs.map} +1 -1
- package/dist/{gzip-O5ASJAFY-BNu1ENax.mjs → gzip-O5ASJAFY-C8-JSw2W.mjs} +2 -2
- package/dist/{gzip-O5ASJAFY-BNu1ENax.mjs.map → gzip-O5ASJAFY-C8-JSw2W.mjs.map} +1 -1
- package/dist/{gzip-O5ASJAFY-D3jOhkoj.cjs → gzip-O5ASJAFY-CUzm4Uqe.cjs} +2 -2
- package/dist/{gzip-O5ASJAFY-D3jOhkoj.cjs.map → gzip-O5ASJAFY-CUzm4Uqe.cjs.map} +1 -1
- package/dist/{head-442HYESI-6SdfBcuE.cjs → head-442HYESI-BlLlTz-v.cjs} +2 -2
- package/dist/{head-442HYESI-6SdfBcuE.cjs.map → head-442HYESI-BlLlTz-v.cjs.map} +1 -1
- package/dist/{head-442HYESI-B7eu8_gu.mjs → head-442HYESI-CazL5ytf.mjs} +2 -2
- package/dist/{head-442HYESI-B7eu8_gu.mjs.map → head-442HYESI-CazL5ytf.mjs.map} +1 -1
- package/dist/{help-HZ6M2CKN-CwhwnQRo.cjs → help-HZ6M2CKN-BKZAXTFP.cjs} +2 -2
- package/dist/{help-HZ6M2CKN-CwhwnQRo.cjs.map → help-HZ6M2CKN-BKZAXTFP.cjs.map} +1 -1
- package/dist/{help-HZ6M2CKN-Cqa3cgev.mjs → help-HZ6M2CKN-BaVylS6q.mjs} +2 -2
- package/dist/{help-HZ6M2CKN-Cqa3cgev.mjs.map → help-HZ6M2CKN-BaVylS6q.mjs.map} +1 -1
- package/dist/{html-to-markdown-JW4MSQZO-5Z0eACHg.cjs → html-to-markdown-JW4MSQZO-C7wd_KXi.cjs} +2 -2
- package/dist/{html-to-markdown-JW4MSQZO-5Z0eACHg.cjs.map → html-to-markdown-JW4MSQZO-C7wd_KXi.cjs.map} +1 -1
- package/dist/{html-to-markdown-JW4MSQZO-CCnMRxG-.mjs → html-to-markdown-JW4MSQZO-CaFWN5Un.mjs} +2 -2
- package/dist/{html-to-markdown-JW4MSQZO-CCnMRxG-.mjs.map → html-to-markdown-JW4MSQZO-CaFWN5Un.mjs.map} +1 -1
- package/dist/internal.cjs +1 -1
- package/dist/internal.d.cts +1 -1
- package/dist/internal.d.mts +2 -2
- package/dist/internal.mjs +1 -1
- package/dist/{join-TBRGI3LQ-CzfDzaoD.mjs → join-TBRGI3LQ-Bvn7ZSrK.mjs} +2 -2
- package/dist/{join-TBRGI3LQ-CzfDzaoD.mjs.map → join-TBRGI3LQ-Bvn7ZSrK.mjs.map} +1 -1
- package/dist/{join-TBRGI3LQ-DKvnahEp.cjs → join-TBRGI3LQ-G-IPeDaj.cjs} +2 -2
- package/dist/{join-TBRGI3LQ-DKvnahEp.cjs.map → join-TBRGI3LQ-G-IPeDaj.cjs.map} +1 -1
- package/dist/{jq-4XLYLOS5-CQhuKeQf.cjs → jq-4XLYLOS5-BbksaS6s.cjs} +4 -4
- package/dist/{jq-4XLYLOS5-CQhuKeQf.cjs.map → jq-4XLYLOS5-BbksaS6s.cjs.map} +1 -1
- package/dist/{jq-4XLYLOS5-DItVqDnp.mjs → jq-4XLYLOS5-CnbCwpz1.mjs} +4 -4
- package/dist/{jq-4XLYLOS5-DItVqDnp.mjs.map → jq-4XLYLOS5-CnbCwpz1.mjs.map} +1 -1
- package/dist/{js-exec-N5KEZBH7-DUPt_Z7O.mjs → js-exec-N5KEZBH7-Bgn5g6rP.mjs} +3 -3
- package/dist/{js-exec-N5KEZBH7-DUPt_Z7O.mjs.map → js-exec-N5KEZBH7-Bgn5g6rP.mjs.map} +1 -1
- package/dist/{js-exec-N5KEZBH7-xabCsliy.cjs → js-exec-N5KEZBH7-CCTYms4u.cjs} +3 -3
- package/dist/{js-exec-N5KEZBH7-xabCsliy.cjs.map → js-exec-N5KEZBH7-CCTYms4u.cjs.map} +1 -1
- package/dist/{ln-4LGSXXGD-ukhDXFka.mjs → ln-4LGSXXGD--RmXkqWx.mjs} +2 -2
- package/dist/{ln-4LGSXXGD-ukhDXFka.mjs.map → ln-4LGSXXGD--RmXkqWx.mjs.map} +1 -1
- package/dist/{ln-4LGSXXGD-BV368N4L.cjs → ln-4LGSXXGD-D5dK36pP.cjs} +2 -2
- package/dist/{ln-4LGSXXGD-BV368N4L.cjs.map → ln-4LGSXXGD-D5dK36pP.cjs.map} +1 -1
- package/dist/{ls-ZJGQER7M-DyZfpoXQ.cjs → ls-ZJGQER7M-BEhzpV6r.cjs} +2 -2
- package/dist/{ls-ZJGQER7M-DyZfpoXQ.cjs.map → ls-ZJGQER7M-BEhzpV6r.cjs.map} +1 -1
- package/dist/{ls-ZJGQER7M-BIvrJOW0.mjs → ls-ZJGQER7M-BOQb-AmG.mjs} +2 -2
- package/dist/{ls-ZJGQER7M-BIvrJOW0.mjs.map → ls-ZJGQER7M-BOQb-AmG.mjs.map} +1 -1
- package/dist/{md5sum-SPU24VSG-C-oTPc3D.mjs → md5sum-SPU24VSG-DAgWo3Vr.mjs} +3 -3
- package/dist/{md5sum-SPU24VSG-C-oTPc3D.mjs.map → md5sum-SPU24VSG-DAgWo3Vr.mjs.map} +1 -1
- package/dist/{md5sum-SPU24VSG-DW-Yn5Ea.cjs → md5sum-SPU24VSG-DXO9YAZ6.cjs} +3 -3
- package/dist/{md5sum-SPU24VSG-DW-Yn5Ea.cjs.map → md5sum-SPU24VSG-DXO9YAZ6.cjs.map} +1 -1
- package/dist/{mkdir-MEPGZOB6-CDmkCE7T.cjs → mkdir-MEPGZOB6-CX2XdZ2j.cjs} +2 -2
- package/dist/{mkdir-MEPGZOB6-CDmkCE7T.cjs.map → mkdir-MEPGZOB6-CX2XdZ2j.cjs.map} +1 -1
- package/dist/{mkdir-MEPGZOB6-CW9J0ZoC.mjs → mkdir-MEPGZOB6-CiOE2JPm.mjs} +2 -2
- package/dist/{mkdir-MEPGZOB6-CW9J0ZoC.mjs.map → mkdir-MEPGZOB6-CiOE2JPm.mjs.map} +1 -1
- package/dist/{mv-W5BIQ646-CLyvWwPi.mjs → mv-W5BIQ646-DHityOjz.mjs} +2 -2
- package/dist/{mv-W5BIQ646-CLyvWwPi.mjs.map → mv-W5BIQ646-DHityOjz.mjs.map} +1 -1
- package/dist/{mv-W5BIQ646-wsQRa08r.cjs → mv-W5BIQ646-Dn6HpDgO.cjs} +2 -2
- package/dist/{mv-W5BIQ646-wsQRa08r.cjs.map → mv-W5BIQ646-Dn6HpDgO.cjs.map} +1 -1
- package/dist/{nl-WSDW7I4O-B3xICQca.cjs → nl-WSDW7I4O-BXjgWanV.cjs} +2 -2
- package/dist/{nl-WSDW7I4O-B3xICQca.cjs.map → nl-WSDW7I4O-BXjgWanV.cjs.map} +1 -1
- package/dist/{nl-WSDW7I4O-CAKElj1v.mjs → nl-WSDW7I4O-C2e08pES.mjs} +2 -2
- package/dist/{nl-WSDW7I4O-CAKElj1v.mjs.map → nl-WSDW7I4O-C2e08pES.mjs.map} +1 -1
- package/dist/{od-WOKFDJTP-DN2NbNt9.mjs → od-WOKFDJTP-CaW8GBjN.mjs} +2 -2
- package/dist/{od-WOKFDJTP-DN2NbNt9.mjs.map → od-WOKFDJTP-CaW8GBjN.mjs.map} +1 -1
- package/dist/{od-WOKFDJTP-lGGteT5o.cjs → od-WOKFDJTP-Murv5Ceh.cjs} +2 -2
- package/dist/{od-WOKFDJTP-lGGteT5o.cjs.map → od-WOKFDJTP-Murv5Ceh.cjs.map} +1 -1
- package/dist/{paste-7JC6S4DX-CxD9ipno.mjs → paste-7JC6S4DX-Bbny76Fg.mjs} +2 -2
- package/dist/{paste-7JC6S4DX-CxD9ipno.mjs.map → paste-7JC6S4DX-Bbny76Fg.mjs.map} +1 -1
- package/dist/{paste-7JC6S4DX-3HRUhme7.cjs → paste-7JC6S4DX-DZVJUd4u.cjs} +2 -2
- package/dist/{paste-7JC6S4DX-3HRUhme7.cjs.map → paste-7JC6S4DX-DZVJUd4u.cjs.map} +1 -1
- package/dist/{printf-TWGXF445-B973bM8O.mjs → printf-TWGXF445-BGdc0EvF.mjs} +2 -2
- package/dist/{printf-TWGXF445-B973bM8O.mjs.map → printf-TWGXF445-BGdc0EvF.mjs.map} +1 -1
- package/dist/{printf-TWGXF445-BQQbCafB.cjs → printf-TWGXF445-CjaQVWqh.cjs} +2 -2
- package/dist/{printf-TWGXF445-BQQbCafB.cjs.map → printf-TWGXF445-CjaQVWqh.cjs.map} +1 -1
- package/dist/{python3-POMOR4OA-BO86N2vc.cjs → python3-POMOR4OA-Bwa3_mTj.cjs} +3 -3
- package/dist/{python3-POMOR4OA-BO86N2vc.cjs.map → python3-POMOR4OA-Bwa3_mTj.cjs.map} +1 -1
- package/dist/{python3-POMOR4OA-C7BSBjey.mjs → python3-POMOR4OA-DiRnmypX.mjs} +3 -3
- package/dist/{python3-POMOR4OA-C7BSBjey.mjs.map → python3-POMOR4OA-DiRnmypX.mjs.map} +1 -1
- package/dist/{rev-5EHFX4EJ-BjIxmM3b.mjs → rev-5EHFX4EJ-9oAna1FJ.mjs} +2 -2
- package/dist/{rev-5EHFX4EJ-BjIxmM3b.mjs.map → rev-5EHFX4EJ-9oAna1FJ.mjs.map} +1 -1
- package/dist/{rev-5EHFX4EJ-JzWduX26.cjs → rev-5EHFX4EJ-B4UixAGe.cjs} +2 -2
- package/dist/{rev-5EHFX4EJ-JzWduX26.cjs.map → rev-5EHFX4EJ-B4UixAGe.cjs.map} +1 -1
- package/dist/{rg-S4FXYXWB-D4HAUjZI.cjs → rg-S4FXYXWB-BOIJSO9X.cjs} +3 -3
- package/dist/{rg-S4FXYXWB-D4HAUjZI.cjs.map → rg-S4FXYXWB-BOIJSO9X.cjs.map} +1 -1
- package/dist/{rg-S4FXYXWB-oJLYDaoJ.mjs → rg-S4FXYXWB-CQfQ762H.mjs} +3 -3
- package/dist/{rg-S4FXYXWB-oJLYDaoJ.mjs.map → rg-S4FXYXWB-CQfQ762H.mjs.map} +1 -1
- package/dist/{rm-SSGETQVQ-FgXF1nxi.cjs → rm-SSGETQVQ-ByigqttY.cjs} +2 -2
- package/dist/{rm-SSGETQVQ-FgXF1nxi.cjs.map → rm-SSGETQVQ-ByigqttY.cjs.map} +1 -1
- package/dist/{rm-SSGETQVQ-BHaxXFFY.mjs → rm-SSGETQVQ-MChIw0nt.mjs} +2 -2
- package/dist/{rm-SSGETQVQ-BHaxXFFY.mjs.map → rm-SSGETQVQ-MChIw0nt.mjs.map} +1 -1
- package/dist/{rmdir-OC4ZLPYA-DxSDciTb.mjs → rmdir-OC4ZLPYA-BQOS_G3q.mjs} +2 -2
- package/dist/{rmdir-OC4ZLPYA-DxSDciTb.mjs.map → rmdir-OC4ZLPYA-BQOS_G3q.mjs.map} +1 -1
- package/dist/{rmdir-OC4ZLPYA-DWHu7TK2.cjs → rmdir-OC4ZLPYA-SdNIxc6z.cjs} +2 -2
- package/dist/{rmdir-OC4ZLPYA-DWHu7TK2.cjs.map → rmdir-OC4ZLPYA-SdNIxc6z.cjs.map} +1 -1
- package/dist/run.cjs +2 -2
- package/dist/run.mjs +2 -2
- package/dist/{sed-S5UIK574-CHzZAY93.cjs → sed-S5UIK574-BPE8w82-.cjs} +2 -2
- package/dist/{sed-S5UIK574-CHzZAY93.cjs.map → sed-S5UIK574-BPE8w82-.cjs.map} +1 -1
- package/dist/{sed-S5UIK574-Ckxru1uk.mjs → sed-S5UIK574-CZvacwuu.mjs} +2 -2
- package/dist/{sed-S5UIK574-Ckxru1uk.mjs.map → sed-S5UIK574-CZvacwuu.mjs.map} +1 -1
- package/dist/{sha1sum-2PTOAFR6-DWKBYKEK.cjs → sha1sum-2PTOAFR6-BjeMy3q3.cjs} +3 -3
- package/dist/{sha1sum-2PTOAFR6-DWKBYKEK.cjs.map → sha1sum-2PTOAFR6-BjeMy3q3.cjs.map} +1 -1
- package/dist/{sha1sum-2PTOAFR6-D1-BgHM-.mjs → sha1sum-2PTOAFR6-CWM44P1C.mjs} +3 -3
- package/dist/{sha1sum-2PTOAFR6-D1-BgHM-.mjs.map → sha1sum-2PTOAFR6-CWM44P1C.mjs.map} +1 -1
- package/dist/{sha256sum-NS7D3IXX-7MQxTeNh.cjs → sha256sum-NS7D3IXX-CYGxHTso.cjs} +3 -3
- package/dist/{sha256sum-NS7D3IXX-7MQxTeNh.cjs.map → sha256sum-NS7D3IXX-CYGxHTso.cjs.map} +1 -1
- package/dist/{sha256sum-NS7D3IXX-C59F6mnb.mjs → sha256sum-NS7D3IXX-D_SRIOEZ.mjs} +3 -3
- package/dist/{sha256sum-NS7D3IXX-C59F6mnb.mjs.map → sha256sum-NS7D3IXX-D_SRIOEZ.mjs.map} +1 -1
- package/dist/{sleep-X22JJINO-DOElk_0p.mjs → sleep-X22JJINO-6kTHbyht.mjs} +2 -2
- package/dist/{sleep-X22JJINO-DOElk_0p.mjs.map → sleep-X22JJINO-6kTHbyht.mjs.map} +1 -1
- package/dist/{sleep-X22JJINO-iZT9cz90.cjs → sleep-X22JJINO-D7jchUkx.cjs} +2 -2
- package/dist/{sleep-X22JJINO-iZT9cz90.cjs.map → sleep-X22JJINO-D7jchUkx.cjs.map} +1 -1
- package/dist/{sort-SW2YEO5B-BQDa3k0A.mjs → sort-SW2YEO5B-CXDnTI54.mjs} +3 -3
- package/dist/{sort-SW2YEO5B-BQDa3k0A.mjs.map → sort-SW2YEO5B-CXDnTI54.mjs.map} +1 -1
- package/dist/{sort-SW2YEO5B-B6tWxaN4.cjs → sort-SW2YEO5B-CZNfR3mh.cjs} +3 -3
- package/dist/{sort-SW2YEO5B-B6tWxaN4.cjs.map → sort-SW2YEO5B-CZNfR3mh.cjs.map} +1 -1
- package/dist/{split-4KKZZXXE-BbfcW9dF.cjs → split-4KKZZXXE-Bp4ep_er.cjs} +2 -2
- package/dist/{split-4KKZZXXE-BbfcW9dF.cjs.map → split-4KKZZXXE-Bp4ep_er.cjs.map} +1 -1
- package/dist/{split-4KKZZXXE-D2nOvuJu.mjs → split-4KKZZXXE-DJ0R-OZO.mjs} +2 -2
- package/dist/{split-4KKZZXXE-D2nOvuJu.mjs.map → split-4KKZZXXE-DJ0R-OZO.mjs.map} +1 -1
- package/dist/{sqlite3-CGOEFJAO-DkJlvkmP.mjs → sqlite3-CGOEFJAO-1DWg4VmE.mjs} +2 -2
- package/dist/{sqlite3-CGOEFJAO-DkJlvkmP.mjs.map → sqlite3-CGOEFJAO-1DWg4VmE.mjs.map} +1 -1
- package/dist/{sqlite3-CGOEFJAO-CpeqcmAd.cjs → sqlite3-CGOEFJAO-BPFCTlw3.cjs} +2 -2
- package/dist/{sqlite3-CGOEFJAO-CpeqcmAd.cjs.map → sqlite3-CGOEFJAO-BPFCTlw3.cjs.map} +1 -1
- package/dist/{start-nLP0Cb2L.mjs → start-BDB6Umul.mjs} +82 -75
- package/dist/{start-nLP0Cb2L.mjs.map → start-BDB6Umul.mjs.map} +1 -1
- package/dist/{start-VJumUs_h.cjs → start-Dlhlns9h.cjs} +82 -75
- package/dist/start-Dlhlns9h.cjs.map +1 -0
- package/dist/start.cjs +1 -1
- package/dist/start.mjs +1 -1
- package/dist/{strings-6WDHLGMX-Cszd06io.cjs → strings-6WDHLGMX-CYrcSKLk.cjs} +2 -2
- package/dist/{strings-6WDHLGMX-Cszd06io.cjs.map → strings-6WDHLGMX-CYrcSKLk.cjs.map} +1 -1
- package/dist/{strings-6WDHLGMX-CsYLxo27.mjs → strings-6WDHLGMX-xkQiKa0e.mjs} +2 -2
- package/dist/{strings-6WDHLGMX-CsYLxo27.mjs.map → strings-6WDHLGMX-xkQiKa0e.mjs.map} +1 -1
- package/dist/{tac-2STMMJYW-FmuNfqcg.cjs → tac-2STMMJYW-C8--0ogl.cjs} +2 -2
- package/dist/{tac-2STMMJYW-FmuNfqcg.cjs.map → tac-2STMMJYW-C8--0ogl.cjs.map} +1 -1
- package/dist/{tac-2STMMJYW-BhnEvrdd.mjs → tac-2STMMJYW-DwDQtgKX.mjs} +2 -2
- package/dist/{tac-2STMMJYW-BhnEvrdd.mjs.map → tac-2STMMJYW-DwDQtgKX.mjs.map} +1 -1
- package/dist/{tail-R4PCA2C4-BjbPaOcT.cjs → tail-R4PCA2C4-K-6N4Vna.cjs} +2 -2
- package/dist/{tail-R4PCA2C4-BjbPaOcT.cjs.map → tail-R4PCA2C4-K-6N4Vna.cjs.map} +1 -1
- package/dist/{tail-R4PCA2C4-BCYiVFF0.mjs → tail-R4PCA2C4-KjeBUx57.mjs} +2 -2
- package/dist/{tail-R4PCA2C4-BCYiVFF0.mjs.map → tail-R4PCA2C4-KjeBUx57.mjs.map} +1 -1
- package/dist/{tar-STHHZTZ6-x82B5-e9.cjs → tar-STHHZTZ6-CeQjO6xy.cjs} +2 -2
- package/dist/{tar-STHHZTZ6-x82B5-e9.cjs.map → tar-STHHZTZ6-CeQjO6xy.cjs.map} +1 -1
- package/dist/{tar-STHHZTZ6-Dy9Q90Re.mjs → tar-STHHZTZ6-Kie-59oO.mjs} +2 -2
- package/dist/{tar-STHHZTZ6-Dy9Q90Re.mjs.map → tar-STHHZTZ6-Kie-59oO.mjs.map} +1 -1
- package/dist/{tee-YUZ2FKCJ-BSBb35Zh.cjs → tee-YUZ2FKCJ-DNvioTta.cjs} +2 -2
- package/dist/{tee-YUZ2FKCJ-BSBb35Zh.cjs.map → tee-YUZ2FKCJ-DNvioTta.cjs.map} +1 -1
- package/dist/{tee-YUZ2FKCJ-Dr3QKqsL.mjs → tee-YUZ2FKCJ-JGQxeV4O.mjs} +2 -2
- package/dist/{tee-YUZ2FKCJ-Dr3QKqsL.mjs.map → tee-YUZ2FKCJ-JGQxeV4O.mjs.map} +1 -1
- package/dist/{time-D4LNBSWX-CPiGP1zA.mjs → time-D4LNBSWX-B1gYaVwY.mjs} +2 -2
- package/dist/{time-D4LNBSWX-CPiGP1zA.mjs.map → time-D4LNBSWX-B1gYaVwY.mjs.map} +1 -1
- package/dist/{time-D4LNBSWX-DYyg7Ymb.cjs → time-D4LNBSWX-uPTvpnnl.cjs} +2 -2
- package/dist/{time-D4LNBSWX-DYyg7Ymb.cjs.map → time-D4LNBSWX-uPTvpnnl.cjs.map} +1 -1
- package/dist/{timeout-YDCRSLPQ-N9JiocO5.mjs → timeout-YDCRSLPQ-BcIN0Diu.mjs} +2 -2
- package/dist/{timeout-YDCRSLPQ-N9JiocO5.mjs.map → timeout-YDCRSLPQ-BcIN0Diu.mjs.map} +1 -1
- package/dist/{timeout-YDCRSLPQ-COZOqT5X.cjs → timeout-YDCRSLPQ-DR7XDPeI.cjs} +2 -2
- package/dist/{timeout-YDCRSLPQ-COZOqT5X.cjs.map → timeout-YDCRSLPQ-DR7XDPeI.cjs.map} +1 -1
- package/dist/{touch-UA33VN3N-CF5xOHyw.mjs → touch-UA33VN3N-DvPhP0jZ.mjs} +2 -2
- package/dist/{touch-UA33VN3N-CF5xOHyw.mjs.map → touch-UA33VN3N-DvPhP0jZ.mjs.map} +1 -1
- package/dist/{touch-UA33VN3N-D_M2oO-H.cjs → touch-UA33VN3N-vYzi7RQr.cjs} +2 -2
- package/dist/{touch-UA33VN3N-D_M2oO-H.cjs.map → touch-UA33VN3N-vYzi7RQr.cjs.map} +1 -1
- package/dist/{tr-36LHWFRQ-pM5o0YiB.mjs → tr-36LHWFRQ-DGZYCuRY.mjs} +2 -2
- package/dist/{tr-36LHWFRQ-pM5o0YiB.mjs.map → tr-36LHWFRQ-DGZYCuRY.mjs.map} +1 -1
- package/dist/{tr-36LHWFRQ-BxxGqLR6.cjs → tr-36LHWFRQ-Dl9OEImL.cjs} +2 -2
- package/dist/{tr-36LHWFRQ-BxxGqLR6.cjs.map → tr-36LHWFRQ-Dl9OEImL.cjs.map} +1 -1
- package/dist/{tree-YLD52CNT-eouNCE63.mjs → tree-YLD52CNT-B-8HZtJU.mjs} +2 -2
- package/dist/{tree-YLD52CNT-eouNCE63.mjs.map → tree-YLD52CNT-B-8HZtJU.mjs.map} +1 -1
- package/dist/{tree-YLD52CNT-E-_CIj_N.cjs → tree-YLD52CNT-BMGw8q8s.cjs} +2 -2
- package/dist/{tree-YLD52CNT-E-_CIj_N.cjs.map → tree-YLD52CNT-BMGw8q8s.cjs.map} +1 -1
- package/dist/{unexpand-CADSA4VO-QQL2PgJ3.mjs → unexpand-CADSA4VO-B_X6SYqF.mjs} +2 -2
- package/dist/{unexpand-CADSA4VO-QQL2PgJ3.mjs.map → unexpand-CADSA4VO-B_X6SYqF.mjs.map} +1 -1
- package/dist/{unexpand-CADSA4VO-Ck222Aii.cjs → unexpand-CADSA4VO-BgHOo60O.cjs} +2 -2
- package/dist/{unexpand-CADSA4VO-Ck222Aii.cjs.map → unexpand-CADSA4VO-BgHOo60O.cjs.map} +1 -1
- package/dist/{uniq-XSIZR6PB-BjvNsA8y.mjs → uniq-XSIZR6PB-DQyNiyWx.mjs} +3 -3
- package/dist/{uniq-XSIZR6PB-BjvNsA8y.mjs.map → uniq-XSIZR6PB-DQyNiyWx.mjs.map} +1 -1
- package/dist/{uniq-XSIZR6PB-ClvdMhCw.cjs → uniq-XSIZR6PB-Dcuj7PvS.cjs} +3 -3
- package/dist/{uniq-XSIZR6PB-ClvdMhCw.cjs.map → uniq-XSIZR6PB-Dcuj7PvS.cjs.map} +1 -1
- package/dist/{wc-LF7NU4LA-DBkbZYFa.mjs → wc-LF7NU4LA-DinTpKiD.mjs} +3 -3
- package/dist/{wc-LF7NU4LA-DBkbZYFa.mjs.map → wc-LF7NU4LA-DinTpKiD.mjs.map} +1 -1
- package/dist/{wc-LF7NU4LA-xMXUuJ5J.cjs → wc-LF7NU4LA-Dqp5h4ms.cjs} +3 -3
- package/dist/{wc-LF7NU4LA-xMXUuJ5J.cjs.map → wc-LF7NU4LA-Dqp5h4ms.cjs.map} +1 -1
- package/dist/{with-project-scope-Dzld2MEt.mjs → with-project-scope-B6ufNHoY.mjs} +58 -10
- package/dist/with-project-scope-B6ufNHoY.mjs.map +1 -0
- package/dist/{with-project-scope-C2rPW7fc.cjs → with-project-scope-BN5eNKzo.cjs} +57 -9
- package/dist/with-project-scope-BN5eNKzo.cjs.map +1 -0
- package/dist/{xan-Y6WF3IRG-BHefjmAQ.mjs → xan-Y6WF3IRG-BygV4pV1.mjs} +6 -6
- package/dist/{xan-Y6WF3IRG-BHefjmAQ.mjs.map → xan-Y6WF3IRG-BygV4pV1.mjs.map} +1 -1
- package/dist/{xan-Y6WF3IRG-BeA1kJsj.cjs → xan-Y6WF3IRG-SyYhu_Wp.cjs} +6 -6
- package/dist/{xan-Y6WF3IRG-BeA1kJsj.cjs.map → xan-Y6WF3IRG-SyYhu_Wp.cjs.map} +1 -1
- package/dist/{xan-view-HDVKHFC2-ztOfZkM4.cjs → xan-view-HDVKHFC2-CUrQndUW.cjs} +3 -3
- package/dist/{xan-view-HDVKHFC2-ztOfZkM4.cjs.map → xan-view-HDVKHFC2-CUrQndUW.cjs.map} +1 -1
- package/dist/{xan-view-HDVKHFC2-BoNBJrEz.mjs → xan-view-HDVKHFC2-DpbOVS3g.mjs} +3 -3
- package/dist/{xan-view-HDVKHFC2-BoNBJrEz.mjs.map → xan-view-HDVKHFC2-DpbOVS3g.mjs.map} +1 -1
- package/dist/{xargs-MGZPH7AX-DsME19CM.cjs → xargs-MGZPH7AX-Cgq_YjrW.cjs} +2 -2
- package/dist/{xargs-MGZPH7AX-DsME19CM.cjs.map → xargs-MGZPH7AX-Cgq_YjrW.cjs.map} +1 -1
- package/dist/{xargs-MGZPH7AX-v72pnbjC.mjs → xargs-MGZPH7AX-jYqCmodo.mjs} +2 -2
- package/dist/{xargs-MGZPH7AX-v72pnbjC.mjs.map → xargs-MGZPH7AX-jYqCmodo.mjs.map} +1 -1
- package/dist/{yq-4QJW3EQG-949T7XyY.cjs → yq-4QJW3EQG-BYMg5XKe.cjs} +3 -3
- package/dist/{yq-4QJW3EQG-949T7XyY.cjs.map → yq-4QJW3EQG-BYMg5XKe.cjs.map} +1 -1
- package/dist/{yq-4QJW3EQG-5FYBZGV9.mjs → yq-4QJW3EQG-C6v6oNzU.mjs} +3 -3
- package/dist/{yq-4QJW3EQG-5FYBZGV9.mjs.map → yq-4QJW3EQG-C6v6oNzU.mjs.map} +1 -1
- package/package.json +1 -1
- package/dist/start-VJumUs_h.cjs.map +0 -1
- package/dist/with-project-scope-C2rPW7fc.cjs.map +0 -1
- package/dist/with-project-scope-Dzld2MEt.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"with-project-scope-C2rPW7fc.cjs","names":["PROJECT_SERVER_HEALTH","AsyncLocalStorage","ACTIVE_ORG_HEADER","ErrorResponseSchema","mapProject","isIgnoredProjectSourcePath","projectFileId","isProbablyBinaryProjectSource","sleep","StoredProjectSourceManifestSchema","projectFileId","projectSourceBlobKey","projectSourceBlobKey","StoredProjectSourceManifestSchema","isIgnoredProjectSourcePath","isProjectArtifactIndexKey","projectModuleBlobKey","sha256Hex","isProjectArtifactTarballKey","parseStoredRouteManifest","extractRouteManifestFromArtifact","projectArtifactIndexKey","mapProjectArtifact","mapProject","DeployLeaseLostError","verifyOrgWorkerToken"],"sources":["../../../packages/hosting/dist/index.mjs","../../../packages/telemetry/dist/index.mjs","../../../packages/access-control/dist/index.mjs","../src/auth/access-context.ts","../../../packages/http/dist/require-session-fERJkKuQ.mjs","../src/auth/authorize.ts","../../../packages/project-git/dist/index.mjs","../src/services/project-repository-lifecycle.ts","../src/lib/product-analytics.ts","../src/services/project-source.ts","../src/services/project-repository-bootstrap.ts","../src/services/project-repository-ensure.ts","../src/services/project-draft-commit.ts","../src/services/managed-deploy.ts","../src/services/trusted-managed-deploy.ts","../src/middleware/require-worker-token.ts","../src/routes/internal/with-project-scope.ts"],"sourcesContent":["import { S as PROJECT_SERVER_ROOT, _ as PROJECT_SERVER_FRAMEWORK_NODE_MODULES, a as formatDockerEnv, b as PROJECT_SERVER_IMAGE, c as resolveRuntimeLaunch, d as rewriteLoopbackUrl, f as mintOrgWorkerToken, g as PROJECT_SERVER_DEPLOY_STATUS, h as resolveWorkerRuntimeConfig, i as buildRuntimeEnv, l as resolveWorkerPlatformUrl, m as WorkerRuntimeConfigError, n as DEV_PLATFORM_WORKER_TOKEN, o as resolvePlatformWorkerToken, p as verifyOrgWorkerToken, r as FORBIDDEN_WORKER_ENV_KEYS, s as resolveProjectServerImage, t as waitForHealth, u as rewriteLoopbackHost, v as PROJECT_SERVER_FRAMEWORK_ROOT, x as PROJECT_SERVER_PORT, y as PROJECT_SERVER_HEALTH } from \"./wait-for-health-CgCfteR7.mjs\";\nimport { n as parseOrgArtifactsFromEnv, t as encodeOrgArtifacts } from \"./runtime-BmfsHLrk.mjs\";\n//#region src/runtime-constants.ts\n/** Timeout for a single project runtime `/health` probe. */\nconst RUNTIME_PING_TIMEOUT_MS = 15e3;\n//#endregion\n//#region src/runtime-control.ts\nconst PROJECT_SERVER_CONTROL = {\n\tload: \"/control/projects/load\",\n\tpromote: \"/control/projects/promote\",\n\tunload: \"/control/projects/unload\",\n\tport: PROJECT_SERVER_PORT\n};\nasync function postControl(baseUrl, path, body, options = {}) {\n\tconst timeoutMs = options.timeoutMs ?? 15e3;\n\tconst headers = { \"content-type\": \"application/json\" };\n\tif (options.workerToken) headers.authorization = `Bearer ${options.workerToken}`;\n\tconst response = await (options.fetchImpl ?? fetch)(new URL(path, baseUrl), {\n\t\tmethod: \"POST\",\n\t\theaders,\n\t\tbody: JSON.stringify(body),\n\t\tsignal: AbortSignal.timeout(timeoutMs)\n\t});\n\tconst data = await response.json().catch(() => ({}));\n\tif (!response.ok || data.ok === false) throw new Error(typeof data.error === \"string\" ? data.error : `Runtime control ${path} failed (${response.status})`);\n\treturn data;\n}\nasync function loadProjectOnRuntime(baseUrl, input, options = {}) {\n\tawait postControl(baseUrl, PROJECT_SERVER_CONTROL.load, input, options);\n}\nasync function promoteProjectOnRuntime(baseUrl, input, options = {}) {\n\tawait postControl(baseUrl, PROJECT_SERVER_CONTROL.promote, input, options);\n}\nasync function unloadProjectOnRuntime(baseUrl, input, options = {}) {\n\tawait postControl(baseUrl, PROJECT_SERVER_CONTROL.unload, input, options);\n}\n/** True when the org runtime answers /health. */\nasync function pingRuntimeHealth(baseUrl, options = {}) {\n\tconst timeoutMs = options.timeoutMs ?? 15e3;\n\ttry {\n\t\treturn (await (options.fetchImpl ?? fetch)(new URL(\"/health\", baseUrl), { signal: AbortSignal.timeout(timeoutMs) })).ok;\n\t} catch {\n\t\treturn false;\n\t}\n}\n//#endregion\n//#region src/ping-project.ts\nasync function pingProject(baseUrl, options = {}) {\n\tconst timeoutMs = options.timeoutMs ?? 15e3;\n\tconst headers = options.plugin?.pingRequestHeaders?.(options.runtimeId ?? null) ?? {};\n\ttry {\n\t\treturn (await (options.fetchImpl ?? fetch)(new URL(PROJECT_SERVER_HEALTH.path, baseUrl), {\n\t\t\tsignal: AbortSignal.timeout(timeoutMs),\n\t\t\theaders\n\t\t})).ok;\n\t} catch {\n\t\treturn false;\n\t}\n}\n//#endregion\n//#region src/ping-project-target.ts\nfunction canPingProjectTarget(target, plugin) {\n\tif (plugin?.canPingTarget) return plugin.canPingTarget(target);\n\treturn !!target.baseUrl;\n}\nasync function pingProjectTarget(target, options = {}) {\n\tif (!canPingProjectTarget(target, options.plugin)) return false;\n\treturn pingProject(target.baseUrl, {\n\t\t...options,\n\t\truntimeId: target.runtimeId\n\t});\n}\n//#endregion\n//#region src/deploy-status.ts\nconst DEFAULT_WAIT_TIMEOUT_MS = 12e4;\nconst DEFAULT_WAIT_INTERVAL_MS = 500;\nconst REQUEST_TIMEOUT_MS = 2e3;\n/**\n* Ask a running org machine which projects bootstrapped and which failed.\n* Returns undefined when the endpoint is unreachable, non-OK, times out, or\n* returns an unusable payload — callers must treat that as non-affirmative\n* health for every pending project (never promote on silence).\n*/\nasync function fetchDeployStatus(baseUrl, options = {}) {\n\tconst timeoutMs = options.timeoutMs ?? 15e3;\n\ttry {\n\t\tconst response = await (options.fetchImpl ?? fetch)(new URL(PROJECT_SERVER_DEPLOY_STATUS.path, baseUrl), { signal: AbortSignal.timeout(timeoutMs) });\n\t\tif (!response.ok) return;\n\t\tconst data = await response.json();\n\t\tif (!data || !Array.isArray(data.projects)) return;\n\t\treturn data;\n\t} catch (error) {\n\t\tconsole.warn(`[deploy-status] failed to fetch from ${baseUrl}:`, error);\n\t\treturn;\n\t}\n}\n/**\n* Poll `/deploy-status` until the real worker returns a usable payload or the\n* deadline expires. Retries only transient unavailability (network errors,\n* non-2xx including early-health 404, timeouts, malformed bodies). Any valid\n* `{ projects: [...] }` response — including empty or explicit failures — is\n* terminal so genuine bootstrap errors surface immediately.\n*/\nasync function waitForDeployStatus(baseUrl, options = {}) {\n\tconst timeoutMs = options.timeoutMs ?? DEFAULT_WAIT_TIMEOUT_MS;\n\tconst intervalMs = options.intervalMs ?? DEFAULT_WAIT_INTERVAL_MS;\n\tconst deadline = Date.now() + timeoutMs;\n\twhile (Date.now() < deadline) {\n\t\tconst remainingMs = deadline - Date.now();\n\t\tconst requestTimeoutMs = Math.min(REQUEST_TIMEOUT_MS, Math.max(1, remainingMs));\n\t\tconst status = await fetchDeployStatus(baseUrl, {\n\t\t\tfetchImpl: options.fetchImpl,\n\t\t\ttimeoutMs: requestTimeoutMs\n\t\t});\n\t\tif (status) return status;\n\t\tif (Date.now() + intervalMs >= deadline) break;\n\t\tawait sleep(intervalMs);\n\t}\n}\nfunction sleep(ms) {\n\treturn new Promise((resolve) => {\n\t\tsetTimeout(resolve, ms);\n\t});\n}\n/**\n* Require an explicit `{ projectId, ok: true }` entry for each candidate.\n* Missing entries, `ok: false`, empty `projects`, or an unavailable status\n* response all fail closed for that project.\n*/\nfunction classifyDeployHealth(input) {\n\tconst verdicts = /* @__PURE__ */ new Map();\n\tif (!input.deployStatus) {\n\t\tfor (const projectId of input.projectIds) verdicts.set(projectId, {\n\t\t\tok: false,\n\t\t\terror: \"Deploy health status unavailable\"\n\t\t});\n\t\treturn verdicts;\n\t}\n\tconst byId = new Map(input.deployStatus.projects.filter((entry) => typeof entry?.projectId === \"string\" && entry.projectId.length > 0).map((entry) => [entry.projectId, entry]));\n\tfor (const projectId of input.projectIds) {\n\t\tconst entry = byId.get(projectId);\n\t\tif (!entry) {\n\t\t\tverdicts.set(projectId, {\n\t\t\t\tok: false,\n\t\t\t\terror: \"Deploy health status omitted project\"\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (entry.ok !== true) {\n\t\t\tverdicts.set(projectId, {\n\t\t\t\tok: false,\n\t\t\t\terror: entry.error?.trim() || \"Project failed to start\"\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tverdicts.set(projectId, { ok: true });\n\t}\n\treturn verdicts;\n}\n//#endregion\nexport { DEV_PLATFORM_WORKER_TOKEN, FORBIDDEN_WORKER_ENV_KEYS, PROJECT_SERVER_CONTROL, PROJECT_SERVER_DEPLOY_STATUS, PROJECT_SERVER_FRAMEWORK_NODE_MODULES, PROJECT_SERVER_FRAMEWORK_ROOT, PROJECT_SERVER_HEALTH, PROJECT_SERVER_IMAGE, PROJECT_SERVER_PORT, PROJECT_SERVER_ROOT, RUNTIME_PING_TIMEOUT_MS, WorkerRuntimeConfigError, buildRuntimeEnv, canPingProjectTarget, classifyDeployHealth, encodeOrgArtifacts, fetchDeployStatus, formatDockerEnv, loadProjectOnRuntime, mintOrgWorkerToken, parseOrgArtifactsFromEnv, pingProject, pingProjectTarget, pingRuntimeHealth, promoteProjectOnRuntime, resolvePlatformWorkerToken, resolveProjectServerImage, resolveRuntimeLaunch, resolveWorkerPlatformUrl, resolveWorkerRuntimeConfig, rewriteLoopbackHost, rewriteLoopbackUrl, unloadProjectOnRuntime, verifyOrgWorkerToken, waitForDeployStatus, waitForHealth };\n\n//# sourceMappingURL=index.mjs.map","import { AsyncLocalStorage } from \"node:async_hooks\";\n//#region src/context.ts\nconst storage = new AsyncLocalStorage();\nfunction getTelemetryContext() {\n\treturn storage.getStore();\n}\nfunction runWithTelemetryContext(context, fn) {\n\treturn storage.run({ ...context }, fn);\n}\n/** Patch the active store when present (no-op outside `runWithTelemetryContext`). */\nfunction setTelemetryContext(patch) {\n\tconst current = storage.getStore();\n\tif (!current) return;\n\tif (patch.actorId !== void 0) current.actorId = patch.actorId;\n\tif (patch.analyticsId !== void 0) current.analyticsId = patch.analyticsId;\n\tif (patch.organizationId !== void 0) current.organizationId = patch.organizationId;\n\tif (patch.projectId !== void 0) current.projectId = patch.projectId;\n\tif (patch.sessionId !== void 0) current.sessionId = patch.sessionId;\n\tif (patch.client !== void 0) current.client = patch.client;\n}\n//#endregion\n//#region src/expected-error.ts\n/**\n* Returns true when an error is an expected client/control-flow failure that\n* should not become an Error Tracking issue.\n*/\nfunction isExpectedError(error) {\n\tif (!error || typeof error !== \"object\") return false;\n\tconst status = readStatus(error);\n\tif (status !== void 0 && (status === 0 || status >= 400 && status < 500)) return true;\n\tif (\"name\" in error && typeof error.name === \"string\") {\n\t\tif (error.name === \"AbortError\" || error.name === \"CanceledError\" || error.name === \"CancelledError\" || error.name === \"RunTimeoutError\") return true;\n\t}\n\treturn false;\n}\nfunction readStatus(error) {\n\tif (\"status\" in error && typeof error.status === \"number\") return error.status;\n\tif (\"statusCode\" in error && typeof error.statusCode === \"number\") return error.statusCode;\n}\n//#endregion\n//#region src/telemetry.ts\nconst EVENT_NAME_PATTERN = /^[a-z][a-z0-9_]*(:[a-z][a-z0-9_]*)?$/;\nlet sink;\nfunction configureTelemetry(options) {\n\tsink = options.sink;\n}\nfunction resetTelemetryForTests() {\n\tsink = void 0;\n}\nasync function flushTelemetry() {\n\tawait sink?.flush?.();\n}\nasync function shutdownTelemetry() {\n\tconst current = sink;\n\tsink = void 0;\n\tawait current?.shutdown?.();\n}\nasync function captureException(input) {\n\tif (isExpectedError(input.error) || !sink?.captureException) return;\n\tconst context = getTelemetryContext();\n\tconst actorId = input.actorId ?? context?.actorId;\n\tconst analyticsId = input.analyticsId ?? context?.analyticsId;\n\tconst organizationId = input.organizationId ?? context?.organizationId;\n\tconst projectId = input.projectId ?? context?.projectId;\n\tconst sessionId = input.sessionId ?? context?.sessionId;\n\tconst enriched = {\n\t\terror: input.error,\n\t\t...actorId ? { actorId } : {},\n\t\t...analyticsId ? { analyticsId } : {},\n\t\t...organizationId ? { organizationId } : {},\n\t\t...projectId ? { projectId } : {},\n\t\t...sessionId ? { sessionId } : {},\n\t\t...input.operation ? { operation: input.operation } : {},\n\t\t...input.properties ? { properties: input.properties } : {}\n\t};\n\ttry {\n\t\tawait sink.captureException(enriched);\n\t} catch (error) {\n\t\tconsole.error(\"[telemetry] captureException sink failed\", error);\n\t}\n}\nasync function event(input) {\n\tif (!EVENT_NAME_PATTERN.test(input.name)) {\n\t\tconsole.error(`[telemetry] rejected invalid event name: ${input.name}`);\n\t\treturn;\n\t}\n\tconst actorId = input.actorId.trim();\n\tif (!actorId) {\n\t\tconsole.error(\"[telemetry] rejected event without actorId\");\n\t\treturn;\n\t}\n\tif (!sink?.event) return;\n\ttry {\n\t\tawait sink.event({\n\t\t\t...input,\n\t\t\tactorId,\n\t\t\ttimestamp: input.timestamp ?? /* @__PURE__ */ new Date(),\n\t\t\tuuid: input.uuid ?? globalThis.crypto.randomUUID()\n\t\t});\n\t} catch (error) {\n\t\tconsole.error(\"[telemetry] event sink failed\", error);\n\t}\n}\nasync function groupIdentify(input) {\n\tconst groupType = input.groupType.trim();\n\tconst groupKey = input.groupKey.trim();\n\tif (!groupType || !groupKey) {\n\t\tconsole.error(\"[telemetry] rejected groupIdentify without groupType/groupKey\");\n\t\treturn;\n\t}\n\tif (!sink?.groupIdentify) return;\n\ttry {\n\t\tawait sink.groupIdentify({\n\t\t\tgroupType,\n\t\t\tgroupKey,\n\t\t\t...input.properties ? { properties: input.properties } : {}\n\t\t});\n\t} catch (error) {\n\t\tconsole.error(\"[telemetry] groupIdentify sink failed\", error);\n\t}\n}\nasync function alias(input) {\n\tconst distinctId = input.distinctId.trim();\n\tconst aliasId = input.alias.trim();\n\tif (!distinctId || !aliasId) {\n\t\tconsole.error(\"[telemetry] rejected alias without distinctId/alias\");\n\t\treturn;\n\t}\n\tif (!sink?.alias) return;\n\ttry {\n\t\tawait sink.alias({\n\t\t\tdistinctId,\n\t\t\talias: aliasId\n\t\t});\n\t} catch (error) {\n\t\tconsole.error(\"[telemetry] alias sink failed\", error);\n\t}\n}\nfunction contextAttributes(attributes) {\n\tconst context = getTelemetryContext();\n\tconst merged = {\n\t\t...context?.actorId ? { actor_id: context.actorId } : {},\n\t\t...context?.analyticsId ? { analytics_id: context.analyticsId } : {},\n\t\t...context?.organizationId ? { organization_id: context.organizationId } : {},\n\t\t...context?.projectId ? { project_id: context.projectId } : {},\n\t\t...context?.sessionId ? { session_id: context.sessionId } : {},\n\t\t...attributes\n\t};\n\treturn Object.keys(merged).length > 0 ? merged : void 0;\n}\nfunction emitLog(level, message, attributes) {\n\tconst merged = contextAttributes(attributes);\n\tconst line = merged ? `${message} ${JSON.stringify(merged)}` : message;\n\t(level === \"debug\" ? console.debug : level === \"info\" ? console.info : level === \"warn\" ? console.warn : console.error)(line);\n\tif (!sink?.log) return;\n\tconst input = {\n\t\tlevel,\n\t\tmessage,\n\t\tattributes: merged\n\t};\n\tsink.log(input).catch((error) => {\n\t\tconsole.error(\"[telemetry] log sink failed\", error);\n\t});\n}\nconst log = {\n\tdebug: (message, attributes) => emitLog(\"debug\", message, attributes),\n\tinfo: (message, attributes) => emitLog(\"info\", message, attributes),\n\twarn: (message, attributes) => emitLog(\"warn\", message, attributes),\n\terror: (message, attributes) => emitLog(\"error\", message, attributes)\n};\n//#endregion\nexport { alias, captureException, configureTelemetry, event, flushTelemetry, getTelemetryContext, groupIdentify, isExpectedError, log, resetTelemetryForTests, runWithTelemetryContext, setTelemetryContext, shutdownTelemetry };\n\n//# sourceMappingURL=index.mjs.map","//#region src/api-keys/grants.ts\nconst apiKeysActions = {\n\tread: \"apiKeys:read\",\n\tcreate: \"apiKeys:create\"\n};\nconst apiKeysGrants = Object.values(apiKeysActions);\nconst apiKeysRoleGrants = {\n\towner: [apiKeysActions.read, apiKeysActions.create],\n\tadmin: [apiKeysActions.read, apiKeysActions.create],\n\tbuilder: [apiKeysActions.create]\n};\n//#endregion\n//#region src/billing/grants.ts\nconst billingActions = { manage: \"billing:manage\" };\nconst billingGrants = Object.values(billingActions);\nconst billingRoleGrants = {\n\towner: [billingActions.manage],\n\tadmin: [billingActions.manage],\n\tbuilder: []\n};\n//#endregion\n//#region src/managed-services/grants.ts\nconst managedServicesActions = {\n\tread: \"managedServices:read\",\n\tmanage: \"managedServices:manage\"\n};\nconst managedServicesGrants = Object.values(managedServicesActions);\nconst managedServicesRoleGrants = {\n\towner: [managedServicesActions.read, managedServicesActions.manage],\n\tadmin: [managedServicesActions.read, managedServicesActions.manage],\n\tbuilder: [managedServicesActions.read]\n};\n//#endregion\n//#region src/organization/grants.ts\nconst organizationActions = {\n\tupdate: \"organization:update\",\n\tdelete: \"organization:delete\"\n};\nconst organizationGrants = Object.values(organizationActions);\nconst organizationRoleGrants = {\n\towner: [organizationActions.update, organizationActions.delete],\n\tadmin: [organizationActions.update],\n\tbuilder: []\n};\n//#endregion\n//#region src/users/grants.ts\nconst userActions = {\n\tmanage: \"users:manage\",\n\tinvite: \"users:invite\"\n};\nconst userGrants = Object.values(userActions);\nconst userRoleGrants = {\n\towner: [userActions.manage, userActions.invite],\n\tadmin: [userActions.manage, userActions.invite],\n\tbuilder: [userActions.invite]\n};\n/** Role ceiling: which roles each inviter may grant. Owner is never invitable (shared schema). */\nconst invitableRolesByRole = {\n\towner: [\"admin\", \"builder\"],\n\tadmin: [\"admin\", \"builder\"],\n\tbuilder: [\"builder\"]\n};\nfunction canInviteRole(inviter, invited) {\n\treturn invitableRolesByRole[inviter].includes(invited);\n}\n//#endregion\n//#region src/policy.ts\nfunction mergeRoleGrants(role) {\n\treturn [\n\t\t...organizationRoleGrants[role],\n\t\t...userRoleGrants[role],\n\t\t...apiKeysRoleGrants[role],\n\t\t...managedServicesRoleGrants[role],\n\t\t...billingRoleGrants[role]\n\t];\n}\nconst orgRolePermissions = {\n\towner: mergeRoleGrants(\"owner\"),\n\tadmin: mergeRoleGrants(\"admin\"),\n\tbuilder: mergeRoleGrants(\"builder\")\n};\n//#endregion\n//#region src/projects/grants.ts\nconst projectActions = {\n\tread: \"project:read\",\n\tdeploy: \"project:deploy\",\n\trun: \"project:run\",\n\tupdate: \"project:update\",\n\tdelete: \"project:delete\",\n\tmanageMembers: \"project:manage-members\",\n\tinvite: \"project:invite\"\n};\nconst projectGrants = Object.values(projectActions);\nconst projectRoleGrants = {\n\tadmin: Object.values(projectActions),\n\tbuilder: [\n\t\tprojectActions.read,\n\t\tprojectActions.deploy,\n\t\tprojectActions.run\n\t]\n};\n//#endregion\n//#region src/check-permission.ts\nconst orgAdminRoles = new Set([\"owner\", \"admin\"]);\nconst projectActionSet = new Set(projectGrants);\nfunction isProjectAction(action) {\n\treturn projectActionSet.has(action);\n}\nfunction checkPermission(action, ctx) {\n\tif (isProjectAction(action)) {\n\t\tif (orgAdminRoles.has(ctx.orgRole)) return true;\n\t\treturn ctx.projectRole != null && projectRoleGrants[ctx.projectRole].includes(action);\n\t}\n\treturn orgRolePermissions[ctx.orgRole].includes(action);\n}\n//#endregion\n//#region src/projects/visibility.ts\nfunction projectListScope(ctx) {\n\treturn checkPermission(projectActions.read, ctx) ? { kind: \"all\" } : { kind: \"member-only\" };\n}\nfunction canReadProject(ctx, hasMembership) {\n\treturn checkPermission(projectActions.read, ctx) || hasMembership;\n}\n//#endregion\n//#region src/agents/visibility.ts\nconst agentListScope = projectListScope;\nconst canAccessAgent = canReadProject;\n//#endregion\n//#region src/api-keys/can-revoke-api-key.ts\nfunction canRevokeApiKey(ctx, input) {\n\treturn input.userId === input.createdByUserId || checkPermission(userActions.manage, ctx);\n}\n//#endregion\n//#region src/api-keys/visibility.ts\nfunction apiKeyListScope(ctx) {\n\treturn checkPermission(apiKeysActions.read, ctx) ? { kind: \"all\" } : { kind: \"creator-only\" };\n}\nfunction canReadApiKey(ctx, input) {\n\treturn checkPermission(apiKeysActions.read, ctx) || input.userId === input.createdByUserId;\n}\n//#endregion\n//#region src/actions.ts\nconst actions = [\n\t...organizationGrants,\n\t...userGrants,\n\t...apiKeysGrants,\n\t...managedServicesGrants,\n\t...projectGrants,\n\t...billingGrants\n];\n//#endregion\n//#region src/labels.ts\nconst ORG_ROLE_LABELS = {\n\towner: \"Owner\",\n\tadmin: \"Admin\",\n\tbuilder: \"Builder\"\n};\nconst PROJECT_ROLE_LABELS = {\n\tadmin: \"Project admin\",\n\tbuilder: \"Builder\"\n};\n//#endregion\n//#region src/history/visibility.ts\nconst historyListScope = projectListScope;\nconst canAccessHistoryRun = canReadProject;\n//#endregion\n//#region src/credentials/visibility.ts\nconst credentialListScope = projectListScope;\n/**\n* Apps-page visibility for a single credential. A member sees organization\n* credentials, their own user credentials, and credentials in projects they\n* belong to. `projectIds: \"all\"` means the caller may see every project's\n* credentials (org admin viewing all); otherwise it is their membership set.\n*/\nfunction canViewCredential(credential, viewer) {\n\tswitch (credential.scopeType) {\n\t\tcase \"organization\": return true;\n\t\tcase \"user\": return credential.scopeId === viewer.userId;\n\t\tcase \"project\": {\n\t\t\tconst projectId = credential.scopeId ?? credential.projectId;\n\t\t\treturn projectId !== null && (viewer.projectIds === \"all\" || viewer.projectIds.has(projectId));\n\t\t}\n\t}\n}\n//#endregion\n//#region src/projects/can-invite-to-project.ts\nfunction canInviteToProject(ctx, settings, invitedRole) {\n\tif (!(checkPermission(projectActions.invite, ctx) || settings.invitePermission === \"all\" && ctx.projectRole === \"builder\")) return false;\n\tif (checkPermission(projectActions.manageMembers, ctx)) return true;\n\treturn invitedRole === \"builder\";\n}\n//#endregion\n//#region src/recents/visibility.ts\nconst recentsListScope = projectListScope;\nconst canAccessRecentResource = canReadProject;\n//#endregion\n//#region src/skills/visibility.ts\nconst skillListScope = projectListScope;\nconst canAccessSkill = canReadProject;\n//#endregion\n//#region src/workflows/visibility.ts\nconst workflowListScope = projectListScope;\nconst canAccessWorkflow = canReadProject;\n//#endregion\nexport { ORG_ROLE_LABELS, PROJECT_ROLE_LABELS, actions, agentListScope, apiKeyListScope, apiKeysActions, apiKeysGrants, apiKeysRoleGrants, billingActions, billingGrants, billingRoleGrants, canAccessAgent, canAccessHistoryRun, canAccessRecentResource, canAccessSkill, canAccessWorkflow, canInviteRole, canInviteToProject, canReadApiKey, canReadProject, canRevokeApiKey, canViewCredential, checkPermission, credentialListScope, historyListScope, invitableRolesByRole, managedServicesActions, managedServicesGrants, managedServicesRoleGrants, orgRolePermissions, organizationActions, organizationGrants, organizationRoleGrants, projectActions, projectGrants, projectListScope, projectRoleGrants, recentsListScope, skillListScope, userActions, userGrants, userRoleGrants, workflowListScope };\n\n//# sourceMappingURL=index.mjs.map","import type { AccessContext } from \"@keystrokehq/access-control\";\nimport type { ProjectInvitePermission } from \"@keystrokehq/shared\";\nimport type { Context } from \"hono\";\n\nimport type { ProjectMemberContext } from \"@keystrokehq/http/auth\";\n\nexport function accessContext(c: Context): AccessContext {\n const organization = c.get(\"organization\");\n const projectMember = c.get(\"projectMember\") as ProjectMemberContext | undefined;\n\n return {\n orgRole: organization.role,\n projectRole: projectMember?.role,\n };\n}\n\nexport function getProjectInvitePermission(c: Context): ProjectInvitePermission {\n const project = c.get(\"project\") as { invitePermission: ProjectInvitePermission };\n return project.invitePermission;\n}\n","import { ACTIVE_ORG_HEADER, ErrorResponseSchema, mapProject } from \"@keystrokehq/shared\";\nimport { createDefaultAuthJwtVerifier, extractWebhookApiKeyFromRequest, resolveRequestAuth } from \"@keystrokehq/auth\";\nimport { loadOrgPlatformApiKeyUser, runWithWorkspaceContext, selectProjectForOrganization, selectUserOrganizationMembership, selectUserProjectMembership, verifyOrgPlatformApiKeySecret } from \"@keystrokehq/platform-database\";\nimport { setTelemetryContext } from \"@keystrokehq/telemetry\";\nimport { checkPermission, projectActions } from \"@keystrokehq/access-control\";\n//#region src/auth/resolve-org-id.ts\nfunction resolveActiveOrganizationId(c) {\n\tconst header = c.req.header(ACTIVE_ORG_HEADER)?.trim();\n\tif (header) return header;\n\treturn c.get(\"apiKeyAuth\")?.organizationId;\n}\n//#endregion\n//#region src/auth/require-organization.ts\nasync function resolveOrganizationContext(c) {\n\tconst organizationId = resolveActiveOrganizationId(c);\n\tif (!organizationId) return {\n\t\tok: false,\n\t\tresponse: c.json(ErrorResponseSchema.parse({\n\t\t\terror: \"Select an organization to continue\",\n\t\t\tcode: \"needs_org_selection\"\n\t\t}), 409)\n\t};\n\tconst apiKeyAuth = c.get(\"apiKeyAuth\");\n\tif (apiKeyAuth && apiKeyAuth.organizationId !== organizationId) return {\n\t\tok: false,\n\t\tresponse: c.json(ErrorResponseSchema.parse({ error: \"Forbidden\" }), 403)\n\t};\n\tconst membership = await selectUserOrganizationMembership(c.get(\"user\").id, organizationId);\n\tif (!membership) return {\n\t\tok: false,\n\t\tresponse: c.json(ErrorResponseSchema.parse({ error: \"Forbidden\" }), 403)\n\t};\n\treturn {\n\t\tok: true,\n\t\torganization: {\n\t\t\torganizationId: membership.organization.id,\n\t\t\torganizationName: membership.organization.name,\n\t\t\trole: membership.role,\n\t\t\tverified: membership.organization.verifiedAt != null,\n\t\t\trow: membership.organization\n\t\t}\n\t};\n}\nfunction requireVerifiedOrganization() {\n\treturn async (c, next) => {\n\t\tif (!c.get(\"organization\").verified) return c.json(ErrorResponseSchema.parse({\n\t\t\terror: \"This organization is pending verification\",\n\t\t\tcode: \"org_unverified\"\n\t\t}), 403);\n\t\tawait next();\n\t};\n}\nfunction requireOrganization() {\n\treturn async (c, next) => {\n\t\tconst resolved = await resolveOrganizationContext(c);\n\t\tif (!resolved.ok) return resolved.response;\n\t\tc.set(\"organization\", resolved.organization);\n\t\tsetTelemetryContext({ organizationId: resolved.organization.organizationId });\n\t\tawait next();\n\t};\n}\n//#endregion\n//#region src/auth/require-project.ts\nfunction requireProject() {\n\treturn async (c, next) => {\n\t\tconst organization = c.get(\"organization\");\n\t\tconst projectId = c.req.param(\"projectId\")?.trim();\n\t\tif (!projectId) return c.json(ErrorResponseSchema.parse({ error: \"Project id is required\" }), 400);\n\t\tconst project = await selectProjectForOrganization(organization.organizationId, projectId);\n\t\tif (!project) return c.json(ErrorResponseSchema.parse({ error: \"Project not found\" }), 404);\n\t\tc.set(\"project\", project);\n\t\tsetTelemetryContext({ projectId: project.id });\n\t\tawait runWithWorkspaceContext({\n\t\t\torganizationId: organization.organizationId,\n\t\t\trole: organization.role,\n\t\t\tprojectId: project.id,\n\t\t\tdbSchema: organization.row.dbSchema\n\t\t}, () => next());\n\t};\n}\nfunction routeProject(project) {\n\treturn mapProject(project);\n}\n//#endregion\n//#region src/auth/responses.ts\nfunction forbidden(c) {\n\treturn c.json(ErrorResponseSchema.parse({ error: \"Forbidden\" }), 403);\n}\nfunction notFound(c, message = \"Not found\") {\n\treturn c.json(ErrorResponseSchema.parse({ error: message }), 404);\n}\n//#endregion\n//#region src/auth/require-project-membership.ts\nfunction requireProjectMembership() {\n\treturn async (c, next) => {\n\t\tconst { role: orgRole } = c.get(\"organization\");\n\t\tconst project = c.get(\"project\");\n\t\tif (checkPermission(projectActions.read, { orgRole })) {\n\t\t\tawait next();\n\t\t\treturn;\n\t\t}\n\t\tconst membership = await selectUserProjectMembership(c.get(\"user\").id, project.id);\n\t\tif (!membership) return notFound(c, \"Project not found\");\n\t\tc.set(\"projectMember\", { role: membership.role });\n\t\tawait next();\n\t};\n}\n//#endregion\n//#region src/auth/require-session.ts\nfunction sessionFromApiKeyUser(user, token) {\n\treturn {\n\t\tuser: {\n\t\t\tid: user.id,\n\t\t\temail: user.email,\n\t\t\tname: user.name,\n\t\t\timage: user.image ?? null,\n\t\t\temailVerified: user.emailVerified,\n\t\t\tcreatedAt: user.createdAt,\n\t\t\tupdatedAt: user.updatedAt\n\t\t},\n\t\tsession: {\n\t\t\tid: user.id,\n\t\t\tuserId: user.id,\n\t\t\ttoken,\n\t\t\texpiresAt: new Date(Date.now() + 900 * 1e3),\n\t\t\tcreatedAt: /* @__PURE__ */ new Date(),\n\t\t\tupdatedAt: /* @__PURE__ */ new Date()\n\t\t}\n\t};\n}\nfunction requireSession(jwtVerifier) {\n\tconst verifier = jwtVerifier ?? createDefaultAuthJwtVerifier();\n\treturn async (c, next) => {\n\t\tconst result = await resolveRequestAuth(verifier, c.req.raw.headers);\n\t\tif (result) {\n\t\t\tc.set(\"user\", result.user);\n\t\t\tc.set(\"session\", result.session);\n\t\t\tsetTelemetryContext({ actorId: result.user.id });\n\t\t\tawait next();\n\t\t\treturn;\n\t\t}\n\t\tconst apiKeySecret = extractWebhookApiKeyFromRequest(c.req.raw);\n\t\tif (apiKeySecret) {\n\t\t\tconst verified = await verifyOrgPlatformApiKeySecret(apiKeySecret);\n\t\t\tif (verified) {\n\t\t\t\tconst user = await loadOrgPlatformApiKeyUser(verified.userId);\n\t\t\t\tif (user) {\n\t\t\t\t\tconst session = sessionFromApiKeyUser(user, apiKeySecret);\n\t\t\t\t\tc.set(\"user\", session.user);\n\t\t\t\t\tc.set(\"session\", session.session);\n\t\t\t\t\tc.set(\"apiKeyAuth\", {\n\t\t\t\t\t\tapiKeyId: verified.apiKeyId,\n\t\t\t\t\t\torganizationId: verified.organizationId\n\t\t\t\t\t});\n\t\t\t\t\tsetTelemetryContext({\n\t\t\t\t\t\tactorId: session.user.id,\n\t\t\t\t\t\torganizationId: verified.organizationId\n\t\t\t\t\t});\n\t\t\t\t\tawait next();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn c.json({ error: \"Unauthorized\" }, 401);\n\t};\n}\n//#endregion\nexport { requireProject as a, requireVerifiedOrganization as c, notFound as i, resolveOrganizationContext as l, requireProjectMembership as n, routeProject as o, forbidden as r, requireOrganization as s, requireSession as t, resolveActiveOrganizationId as u };\n\n//# sourceMappingURL=require-session-fERJkKuQ.mjs.map","import { checkPermission, type Action } from \"@keystrokehq/access-control\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport { accessContext } from \"./access-context\";\nimport { forbidden } from \"@keystrokehq/http/auth\";\nimport type { OrganizationVariables } from \"@keystrokehq/http/auth\";\n\nexport function authorize(action: Action): MiddlewareHandler<{ Variables: OrganizationVariables }> {\n return async (c, next) => {\n if (!checkPermission(action, accessContext(c))) {\n return forbidden(c);\n }\n\n await next();\n };\n}\n","import { PROJECT_SOURCE_MAX_FILES, PROJECT_SOURCE_MAX_FILE_BYTES, PROJECT_SOURCE_MAX_TOTAL_BYTES, isIgnoredProjectSourcePath, isProbablyBinaryProjectSource, projectFileId } from \"@keystrokehq/shared\";\n//#region src/errors.ts\n/**\n* Provider-neutral error. Never attach provider response bodies or credentials.\n*/\nvar ProjectGitProviderError = class extends Error {\n\tcode;\n\tretryable;\n\tretryAt;\n\tconstructor(options) {\n\t\tsuper(options.message, options.cause !== void 0 ? { cause: options.cause } : void 0);\n\t\tthis.name = \"ProjectGitProviderError\";\n\t\tthis.code = options.code;\n\t\tthis.retryable = options.retryable ?? false;\n\t\tthis.retryAt = options.retryAt;\n\t}\n};\nfunction isProjectGitProviderError(error) {\n\treturn error instanceof ProjectGitProviderError;\n}\n//#endregion\n//#region src/path.ts\n/**\n* Validates a repository-relative POSIX path.\n* Rejects absolute paths, backslashes, empty segments, and `..` traversal.\n*/\nfunction assertRepositoryRelativePath(path) {\n\tif (typeof path !== \"string\" || path.length === 0) throw new ProjectGitProviderError({\n\t\tcode: \"invalid_response\",\n\t\tmessage: \"Repository path is required\"\n\t});\n\tif (path.startsWith(\"/\") || path.includes(\"\\\\\")) throw new ProjectGitProviderError({\n\t\tcode: \"invalid_response\",\n\t\tmessage: \"Repository path must be a relative POSIX path\"\n\t});\n\tconst segments = path.split(\"/\");\n\tfor (const segment of segments) if (segment.length === 0 || segment === \".\" || segment === \"..\") throw new ProjectGitProviderError({\n\t\tcode: \"invalid_response\",\n\t\tmessage: \"Repository path must not contain empty, `.`, or `..` segments\"\n\t});\n\treturn path;\n}\n//#endregion\n//#region src/draft-branch.ts\n/** Shared unpublished project branch. User-visible remotes only need `main` + this draft. */\nconst MANAGED_DRAFT_BRANCH = \"ks/draft\";\nfunction managedDraftBranch() {\n\treturn MANAGED_DRAFT_BRANCH;\n}\n//#endregion\n//#region src/candidate-branch.ts\n/**\n* Deterministic per-artifact deploy candidate branch.\n* Seeded from M0; never mutates `ks/draft` or `main` until post-health promotion.\n*/\nfunction managedDeployCandidateBranch(artifactId) {\n\tconst id = artifactId.trim();\n\tif (!id) throw new Error(\"artifactId is required for managed deploy candidate branch\");\n\treturn `ks/candidate/${id}`;\n}\n//#endregion\n//#region src/create-commit-with-disjoint-retry.ts\nfunction touchedPaths(files) {\n\treturn new Set(files.map((file) => file.path));\n}\nfunction pathsOverlap$1(left, right) {\n\tfor (const path of left) if (right.has(path)) return true;\n\treturn false;\n}\n/**\n* Create an atomic commit with compare-and-swap. On CAS loss, retry exactly\n* once when paths changed since `expectedHeadSha` are disjoint from the\n* commit's touched paths; otherwise return the current tip as a conflict.\n*/\nasync function createCommitWithDisjointRetry(input) {\n\tconst { provider, repository, files, expectedHeadSha } = input;\n\tconst touched = touchedPaths(files);\n\ttry {\n\t\treturn {\n\t\t\tok: true,\n\t\t\tsha: (await provider.createCommit({\n\t\t\t\trepository,\n\t\t\t\tbranch: input.branch,\n\t\t\t\tmessage: input.message,\n\t\t\t\tauthor: input.author,\n\t\t\t\tfiles,\n\t\t\t\texpectedHeadSha\n\t\t\t})).sha\n\t\t};\n\t} catch (error) {\n\t\tif (!isProjectGitProviderError(error) || error.code !== \"conflict\") throw error;\n\t}\n\tconst latest = await provider.resolveRef({\n\t\trepository,\n\t\tbranch: input.branch\n\t});\n\tif (!latest) return {\n\t\tok: false,\n\t\tcurrentHeadSha: expectedHeadSha\n\t};\n\tif (latest.sha === expectedHeadSha) return {\n\t\tok: false,\n\t\tcurrentHeadSha: latest.sha\n\t};\n\tif (pathsOverlap$1((await provider.diffRefs({\n\t\trepository,\n\t\tbaseSha: expectedHeadSha,\n\t\theadSha: latest.sha\n\t})).changedPaths, touched)) return {\n\t\tok: false,\n\t\tcurrentHeadSha: latest.sha\n\t};\n\ttry {\n\t\treturn {\n\t\t\tok: true,\n\t\t\tsha: (await provider.createCommit({\n\t\t\t\trepository,\n\t\t\t\tbranch: input.branch,\n\t\t\t\tmessage: input.message,\n\t\t\t\tauthor: input.author,\n\t\t\t\tfiles,\n\t\t\t\texpectedHeadSha: latest.sha\n\t\t\t})).sha\n\t\t};\n\t} catch (error) {\n\t\tif (!isProjectGitProviderError(error) || error.code !== \"conflict\") throw error;\n\t\treturn {\n\t\t\tok: false,\n\t\t\tcurrentHeadSha: (await provider.resolveRef({\n\t\t\t\trepository,\n\t\t\t\tbranch: input.branch\n\t\t\t}))?.sha ?? latest.sha\n\t\t};\n\t}\n}\n//#endregion\n//#region src/parse-git-diff-touched-paths.ts\n/**\n* Decode a Git `core.quotePath` / C-style quoted path.\n* Supports standard escapes (`\\a\\b\\t\\n\\v\\f\\r\\\"\\\\`) and 1–3 digit octal escapes.\n* Rejects malformed quotes and unsupported encodings (e.g. `\\x`, `\\u`).\n*/\nfunction decodeGitCQuotedPath(raw) {\n\tconst trimmed = raw.trim();\n\tif (!trimmed.startsWith(\"\\\"\")) return trimmed;\n\tif (trimmed.length < 2 || !trimmed.endsWith(\"\\\"\")) throw new ProjectGitProviderError({\n\t\tcode: \"invalid_response\",\n\t\tmessage: \"Malformed quoted path in Git diff\"\n\t});\n\tlet out = \"\";\n\tfor (let index = 1; index < trimmed.length - 1; index += 1) {\n\t\tconst char = trimmed[index];\n\t\tif (char !== \"\\\\\") {\n\t\t\tout += char;\n\t\t\tcontinue;\n\t\t}\n\t\tconst next = trimmed[index + 1];\n\t\tif (next === void 0) throw new ProjectGitProviderError({\n\t\t\tcode: \"invalid_response\",\n\t\t\tmessage: \"Malformed escape in Git diff path\"\n\t\t});\n\t\tswitch (next) {\n\t\t\tcase \"a\":\n\t\t\t\tout += \"\\x07\";\n\t\t\t\tindex += 1;\n\t\t\t\tbreak;\n\t\t\tcase \"b\":\n\t\t\t\tout += \"\\b\";\n\t\t\t\tindex += 1;\n\t\t\t\tbreak;\n\t\t\tcase \"t\":\n\t\t\t\tout += \"\t\";\n\t\t\t\tindex += 1;\n\t\t\t\tbreak;\n\t\t\tcase \"n\":\n\t\t\t\tout += \"\\n\";\n\t\t\t\tindex += 1;\n\t\t\t\tbreak;\n\t\t\tcase \"v\":\n\t\t\t\tout += \"\\v\";\n\t\t\t\tindex += 1;\n\t\t\t\tbreak;\n\t\t\tcase \"f\":\n\t\t\t\tout += \"\\f\";\n\t\t\t\tindex += 1;\n\t\t\t\tbreak;\n\t\t\tcase \"r\":\n\t\t\t\tout += \"\\r\";\n\t\t\t\tindex += 1;\n\t\t\t\tbreak;\n\t\t\tcase \"\\\"\":\n\t\t\t\tout += \"\\\"\";\n\t\t\t\tindex += 1;\n\t\t\t\tbreak;\n\t\t\tcase \"\\\\\":\n\t\t\t\tout += \"\\\\\";\n\t\t\t\tindex += 1;\n\t\t\t\tbreak;\n\t\t\tdefault: {\n\t\t\t\tif (next < \"0\" || next > \"7\") throw new ProjectGitProviderError({\n\t\t\t\t\tcode: \"invalid_response\",\n\t\t\t\t\tmessage: `Unsupported escape in Git diff path: \\\\${next}`\n\t\t\t\t});\n\t\t\t\tlet value = next.charCodeAt(0) - 48;\n\t\t\t\tlet consumed = 1;\n\t\t\t\tconst second = trimmed[index + 2];\n\t\t\t\tif (second !== void 0 && second >= \"0\" && second <= \"7\") {\n\t\t\t\t\tvalue = (value << 3) + (second.charCodeAt(0) - 48);\n\t\t\t\t\tconsumed = 2;\n\t\t\t\t\tconst third = trimmed[index + 3];\n\t\t\t\t\tif (third !== void 0 && third >= \"0\" && third <= \"7\") {\n\t\t\t\t\t\tvalue = (value << 3) + (third.charCodeAt(0) - 48);\n\t\t\t\t\t\tconsumed = 3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tout += String.fromCharCode(value);\n\t\t\t\tindex += consumed;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn out;\n}\nfunction stripGitPathPrefix(path) {\n\tif (path.startsWith(\"a/\") || path.startsWith(\"b/\")) return path.slice(2);\n\treturn path;\n}\nfunction assertDraftDiffPath(path) {\n\tif (path === \"/dev/null\") throw new ProjectGitProviderError({\n\t\tcode: \"invalid_response\",\n\t\tmessage: \"Git diff path is missing\"\n\t});\n\tconst normalized = assertRepositoryRelativePath(path);\n\tif (normalized.split(\"/\").some((segment) => segment === \".git\")) throw new ProjectGitProviderError({\n\t\tcode: \"invalid_response\",\n\t\tmessage: \"Git diff must not touch .git paths\"\n\t});\n\tif (isIgnoredProjectSourcePath(normalized)) throw new ProjectGitProviderError({\n\t\tcode: \"invalid_response\",\n\t\tmessage: `Git diff must not touch ignored path: ${normalized}`\n\t});\n\treturn normalized;\n}\nfunction addPath(paths, raw) {\n\tconst trimmed = raw.trim();\n\tif (!trimmed || trimmed === \"/dev/null\") return;\n\tconst decoded = decodeGitCQuotedPath(trimmed);\n\tif (!decoded || decoded === \"/dev/null\") return;\n\tpaths.add(assertDraftDiffPath(stripGitPathPrefix(decoded)));\n}\n/**\n* Split `diff --git` path pair. Handles quoted pairs (with escapes) and the\n* common unquoted `a/… b/…` form.\n*/\nfunction parseDiffGitHeaderPaths(headerRest, paths) {\n\tconst trimmed = headerRest.trim();\n\tif (trimmed.startsWith(\"\\\"\")) {\n\t\tconst firstEnd = findClosingQuote(trimmed, 0);\n\t\tif (firstEnd < 0) throw new ProjectGitProviderError({\n\t\t\tcode: \"invalid_response\",\n\t\t\tmessage: \"Malformed diff --git header\"\n\t\t});\n\t\tconst rest = trimmed.slice(firstEnd + 1).trimStart();\n\t\tif (!rest.startsWith(\"\\\"\")) throw new ProjectGitProviderError({\n\t\t\tcode: \"invalid_response\",\n\t\t\tmessage: \"Malformed diff --git header\"\n\t\t});\n\t\tconst secondEnd = findClosingQuote(rest, 0);\n\t\tif (secondEnd < 0 || rest.slice(secondEnd + 1).trim() !== \"\") throw new ProjectGitProviderError({\n\t\t\tcode: \"invalid_response\",\n\t\t\tmessage: \"Malformed diff --git header\"\n\t\t});\n\t\taddPath(paths, trimmed.slice(0, firstEnd + 1));\n\t\taddPath(paths, rest.slice(0, secondEnd + 1));\n\t\treturn;\n\t}\n\tconst unquoted = /^a\\/(.+) b\\/(.+)$/.exec(trimmed);\n\tif (!unquoted) throw new ProjectGitProviderError({\n\t\tcode: \"invalid_response\",\n\t\tmessage: \"Malformed diff --git header\"\n\t});\n\taddPath(paths, `a/${unquoted[1]}`);\n\taddPath(paths, `b/${unquoted[2]}`);\n}\n/** Index of the closing `\"` for a C-quoted string starting at `start` (`\"`). */\nfunction findClosingQuote(text, start) {\n\tif (text[start] !== \"\\\"\") return -1;\n\tfor (let index = start + 1; index < text.length; index += 1) {\n\t\tif (text[index] === \"\\\\\") {\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (text[index] === \"\\\"\") return index;\n\t}\n\treturn -1;\n}\nfunction parseMinusPlusPathLine(line, paths) {\n\tconst match = /^(?:---|\\+\\+\\+) (.*)$/.exec(line);\n\tif (!match) return;\n\tlet rest = match[1];\n\tconst tab = rest.indexOf(\"\t\");\n\tif (tab >= 0) rest = rest.slice(0, tab);\n\taddPath(paths, rest);\n}\n/**\n* Identify every old/new path touched by a `git diff` / `git diff --binary`\n* patch, including rename/copy, binary headers, and `---`/`+++` lines.\n* Decodes Git C-quoted paths (incl. octal) before validation so ignored /\n* `.git` / traversal paths cannot hide behind escapes.\n*/\nfunction parseGitDiffTouchedPaths(diff) {\n\tif (diff.byteLength === 0) throw new ProjectGitProviderError({\n\t\tcode: \"invalid_response\",\n\t\tmessage: \"Diff is empty\"\n\t});\n\tconst text = new TextDecoder(\"utf8\", { fatal: false }).decode(diff);\n\tconst paths = /* @__PURE__ */ new Set();\n\tconst lines = text.split(/\\r?\\n/);\n\tfor (const line of lines) {\n\t\tif (line.startsWith(\"diff --git \")) {\n\t\t\tparseDiffGitHeaderPaths(line.slice(11), paths);\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(\"rename from \") || line.startsWith(\"rename to \") || line.startsWith(\"copy from \") || line.startsWith(\"copy to \")) {\n\t\t\taddPath(paths, line.replace(/^(?:rename|copy) (?:from|to) /, \"\"));\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(\"--- \") || line.startsWith(\"+++ \")) {\n\t\t\tparseMinusPlusPathLine(line, paths);\n\t\t\tcontinue;\n\t\t}\n\t\tconst binaryFiles = /^Binary files (.+) and (.+) differ$/.exec(line);\n\t\tif (binaryFiles) {\n\t\t\taddPath(paths, binaryFiles[1]);\n\t\t\taddPath(paths, binaryFiles[2]);\n\t\t}\n\t}\n\tif (paths.size === 0) throw new ProjectGitProviderError({\n\t\tcode: \"invalid_response\",\n\t\tmessage: \"Diff did not contain any file paths\"\n\t});\n\treturn [...paths].sort();\n}\n//#endregion\n//#region src/create-commit-from-diff-with-retry.ts\nfunction pathsOverlap(left, right) {\n\tfor (const path of left) if (right.has(path)) return true;\n\treturn false;\n}\n/**\n* Create a commit from a Git binary/text diff with compare-and-swap.\n*\n* On CAS loss, resolve the latest tip (D1) and retry **exactly once**:\n* - when touched paths are unchanged since D0 (disjoint), retry against D1\n* - when paths overlap, retry only via `createCommitFromDiff` against D1\n* (clean apply); map apply/CAS failure to conflict\n*\n* Never force-updates refs or pushes.\n*/\nasync function createCommitFromDiffWithRetry(input) {\n\tconst { provider, repository, expectedHeadSha, diff } = input;\n\tconst touched = new Set(parseGitDiffTouchedPaths(diff));\n\ttry {\n\t\treturn {\n\t\t\tok: true,\n\t\t\tsha: (await provider.createCommitFromDiff({\n\t\t\t\trepository,\n\t\t\t\tbranch: input.branch,\n\t\t\t\tmessage: input.message,\n\t\t\t\tauthor: input.author,\n\t\t\t\tdiff,\n\t\t\t\texpectedHeadSha\n\t\t\t})).sha\n\t\t};\n\t} catch (error) {\n\t\tif (!isProjectGitProviderError(error) || error.code !== \"conflict\") throw error;\n\t}\n\tconst latest = await provider.resolveRef({\n\t\trepository,\n\t\tbranch: input.branch\n\t});\n\tif (!latest) return {\n\t\tok: false,\n\t\tcurrentHeadSha: expectedHeadSha\n\t};\n\tif (latest.sha === expectedHeadSha) return {\n\t\tok: false,\n\t\tcurrentHeadSha: latest.sha\n\t};\n\tconst overlap = pathsOverlap((await provider.diffRefs({\n\t\trepository,\n\t\tbaseSha: expectedHeadSha,\n\t\theadSha: latest.sha\n\t})).changedPaths, touched);\n\ttry {\n\t\treturn {\n\t\t\tok: true,\n\t\t\tsha: (await provider.createCommitFromDiff({\n\t\t\t\trepository,\n\t\t\t\tbranch: input.branch,\n\t\t\t\tmessage: input.message,\n\t\t\t\tauthor: input.author,\n\t\t\t\tdiff,\n\t\t\t\texpectedHeadSha: latest.sha\n\t\t\t})).sha\n\t\t};\n\t} catch (error) {\n\t\tif (!isProjectGitProviderError(error)) throw error;\n\t\tif (error.code === \"conflict\" || overlap && error.code === \"invalid_response\") return {\n\t\t\tok: false,\n\t\t\tcurrentHeadSha: (await provider.resolveRef({\n\t\t\t\trepository,\n\t\t\t\tbranch: input.branch\n\t\t\t}))?.sha ?? latest.sha\n\t\t};\n\t\tthrow error;\n\t}\n}\n//#endregion\n//#region src/project-source-service.ts\nfunction hasAnyGitProvenance(artifact) {\n\treturn artifact.sourceRepositoryId != null || artifact.sourceCommitSha != null;\n}\nfunction hasCompleteGitProvenance(artifact) {\n\treturn artifact.sourceRepositoryId != null && artifact.sourceCommitSha != null;\n}\nfunction toProviderRepository(row) {\n\tif (!row.externalRepositoryId || !row.owner || !row.name) return;\n\treturn {\n\t\tprovider: row.provider,\n\t\texternalId: row.externalRepositoryId,\n\t\towner: row.owner,\n\t\tname: row.name,\n\t\tdefaultBranch: row.defaultBranch\n\t};\n}\nfunction classifyRevision(input) {\n\tconst { artifact, repository, provider } = input;\n\tif (!artifact) return {\n\t\tkind: \"unavailable\",\n\t\treason: \"not_deployed\"\n\t};\n\tif (!hasAnyGitProvenance(artifact)) {\n\t\tif (artifact.sourceManifestJson == null) return {\n\t\t\tkind: \"unavailable\",\n\t\t\tartifactId: artifact.artifactId,\n\t\t\treason: \"source_missing\"\n\t\t};\n\t\treturn {\n\t\t\tkind: \"snapshot\",\n\t\t\tartifactId: artifact.artifactId,\n\t\t\thandle: artifact.sourceManifestJson\n\t\t};\n\t}\n\tif (!hasCompleteGitProvenance(artifact)) return {\n\t\tkind: \"unavailable\",\n\t\tartifactId: artifact.artifactId,\n\t\treason: \"partial_git_provenance\"\n\t};\n\tif (!provider) return {\n\t\tkind: \"unavailable\",\n\t\tartifactId: artifact.artifactId,\n\t\treason: \"provider_unavailable\"\n\t};\n\tif (!repository) return {\n\t\tkind: \"unavailable\",\n\t\tartifactId: artifact.artifactId,\n\t\treason: \"repository_missing\"\n\t};\n\tif (repository.id !== artifact.sourceRepositoryId) return {\n\t\tkind: \"unavailable\",\n\t\tartifactId: artifact.artifactId,\n\t\treason: \"repository_mismatch\"\n\t};\n\tif (repository.desiredState !== \"active\" || repository.lifecycleStatus !== \"ready\") return {\n\t\tkind: \"unavailable\",\n\t\tartifactId: artifact.artifactId,\n\t\treason: \"repository_not_ready\"\n\t};\n\tif (repository.provider !== provider.name) return {\n\t\tkind: \"unavailable\",\n\t\tartifactId: artifact.artifactId,\n\t\treason: \"provider_mismatch\"\n\t};\n\tconst providerRepository = toProviderRepository(repository);\n\tif (!providerRepository) return {\n\t\tkind: \"unavailable\",\n\t\tartifactId: artifact.artifactId,\n\t\treason: \"repository_not_ready\"\n\t};\n\treturn {\n\t\tkind: \"git\",\n\t\tartifactId: artifact.artifactId,\n\t\tcommitSha: artifact.sourceCommitSha,\n\t\tbranch: providerRepository.defaultBranch,\n\t\trepositoryId: repository.id,\n\t\trepository: providerRepository\n\t};\n}\nfunction mapProviderFailure(artifactId, error) {\n\tif (error instanceof ProjectGitProviderError && error.code === \"not_found\") return {\n\t\tkind: \"unavailable\",\n\t\t...artifactId ? { artifactId } : {},\n\t\treason: \"source_missing\"\n\t};\n\treturn {\n\t\tkind: \"unavailable\",\n\t\t...artifactId ? { artifactId } : {},\n\t\treason: \"provider_unavailable\"\n\t};\n}\nfunction classifyAuthoringRepository(input) {\n\tconst { repository, provider } = input;\n\tif (!provider) return {\n\t\tkind: \"unavailable\",\n\t\treason: \"provider_unavailable\"\n\t};\n\tif (!repository) return {\n\t\tkind: \"unavailable\",\n\t\treason: \"repository_missing\"\n\t};\n\tif (repository.desiredState !== \"active\" || repository.lifecycleStatus !== \"ready\") return {\n\t\tkind: \"unavailable\",\n\t\treason: \"repository_not_ready\"\n\t};\n\tif (repository.provider !== provider.name) return {\n\t\tkind: \"unavailable\",\n\t\treason: \"provider_mismatch\"\n\t};\n\tconst providerRepository = toProviderRepository(repository);\n\tif (!providerRepository) return {\n\t\tkind: \"unavailable\",\n\t\treason: \"repository_not_ready\"\n\t};\n\treturn {\n\t\tkind: \"ready\",\n\t\trepository: providerRepository\n\t};\n}\nfunction applyTreeLimits(entries) {\n\tconst sorted = [...entries].sort((left, right) => left.path.localeCompare(right.path));\n\tconst files = [];\n\tlet totalBytes = 0;\n\tfor (const entry of sorted) {\n\t\tif (files.length >= PROJECT_SOURCE_MAX_FILES) break;\n\t\tconst size = entry.size ?? 0;\n\t\tif (size > PROJECT_SOURCE_MAX_FILE_BYTES) continue;\n\t\tif (totalBytes + size > PROJECT_SOURCE_MAX_TOTAL_BYTES) break;\n\t\ttotalBytes += size;\n\t\tfiles.push({\n\t\t\tid: projectFileId(entry.path),\n\t\t\tpath: entry.path\n\t\t});\n\t}\n\treturn files;\n}\n/**\n* Provider-neutral deployed-source and shared-draft reader.\n*\n* Published reads pin to artifact `sourceCommitSha` and never resolve branches.\n* Draft reads resolve `ks/draft` once per operation, then list/read at that SHA.\n* Snapshot fallback is only used when an artifact has no Git provenance fields.\n*/\nfunction createProjectSourceService(options) {\n\tasync function resolve(input) {\n\t\tconst { artifact, repository } = await options.resolveRevision(input);\n\t\treturn classifyRevision({\n\t\t\tartifact,\n\t\t\trepository,\n\t\t\tprovider: options.provider\n\t\t});\n\t}\n\tasync function resolveDraftRepository(projectId) {\n\t\tconst { repository } = await options.resolveRevision({ projectId });\n\t\treturn classifyAuthoringRepository({\n\t\t\trepository,\n\t\t\tprovider: options.provider\n\t\t});\n\t}\n\tasync function resolveDraft(projectId) {\n\t\tconst classified = await resolveDraftRepository(projectId);\n\t\tif (classified.kind === \"unavailable\") return classified;\n\t\tif (!options.provider) return {\n\t\t\tkind: \"unavailable\",\n\t\t\treason: \"provider_unavailable\"\n\t\t};\n\t\ttry {\n\t\t\tconst tip = await options.provider.resolveRef({\n\t\t\t\trepository: classified.repository,\n\t\t\t\tbranch: MANAGED_DRAFT_BRANCH\n\t\t\t});\n\t\t\tif (!tip) return {\n\t\t\t\tkind: \"unavailable\",\n\t\t\t\treason: \"source_missing\"\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tkind: \"draft\",\n\t\t\t\tcommitSha: tip.sha,\n\t\t\t\tbranch: MANAGED_DRAFT_BRANCH,\n\t\t\t\trepository: classified.repository\n\t\t\t};\n\t\t} catch (error) {\n\t\t\treturn mapProviderFailure(void 0, error);\n\t\t}\n\t}\n\tasync function readDraftBytes(input) {\n\t\tif (!options.provider) return {\n\t\t\tkind: \"unavailable\",\n\t\t\treason: \"provider_unavailable\"\n\t\t};\n\t\ttry {\n\t\t\tconst file = await options.provider.readFile({\n\t\t\t\trepository: input.repository,\n\t\t\t\tcommitSha: input.commitSha,\n\t\t\t\tpath: input.path\n\t\t\t});\n\t\t\tif (file.bytes.byteLength > PROJECT_SOURCE_MAX_FILE_BYTES) throw new ProjectGitProviderError({\n\t\t\t\tcode: \"repository_too_large\",\n\t\t\t\tmessage: \"Source file exceeds the maximum allowed size\"\n\t\t\t});\n\t\t\tif (isProbablyBinaryProjectSource(file.bytes)) return {\n\t\t\t\tkind: \"unavailable\",\n\t\t\t\treason: \"source_missing\"\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tkind: \"draft\",\n\t\t\t\tcommitSha: input.commitSha,\n\t\t\t\tpath: input.path,\n\t\t\t\tbytes: file.bytes,\n\t\t\t\tcontentId: file.blobSha.toLowerCase()\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tif (error instanceof ProjectGitProviderError && error.code === \"repository_too_large\") throw error;\n\t\t\treturn mapProviderFailure(void 0, error);\n\t\t}\n\t}\n\treturn {\n\t\tasync getRevision(input) {\n\t\t\tconst revision = await resolve({\n\t\t\t\tprojectId: input.projectId,\n\t\t\t\tartifactId: input.artifactId\n\t\t\t});\n\t\t\tif (revision.kind === \"unavailable\") return revision;\n\t\t\tif (revision.kind === \"snapshot\") {\n\t\t\t\toptions.onFallback?.({\n\t\t\t\t\tprojectId: input.projectId,\n\t\t\t\t\tartifactId: revision.artifactId,\n\t\t\t\t\toperation: \"getRevision\",\n\t\t\t\t\tconsumer: input.consumer\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"snapshot\",\n\t\t\t\t\tartifactId: revision.artifactId\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkind: \"git\",\n\t\t\t\tartifactId: revision.artifactId,\n\t\t\t\tcommitSha: revision.commitSha,\n\t\t\t\tbranch: revision.branch\n\t\t\t};\n\t\t},\n\t\tasync listFiles(input) {\n\t\t\tconst revision = await resolve({\n\t\t\t\tprojectId: input.projectId,\n\t\t\t\tartifactId: input.artifactId\n\t\t\t});\n\t\t\tif (revision.kind === \"unavailable\") return revision;\n\t\t\tif (revision.kind === \"snapshot\") {\n\t\t\t\toptions.onFallback?.({\n\t\t\t\t\tprojectId: input.projectId,\n\t\t\t\t\tartifactId: revision.artifactId,\n\t\t\t\t\toperation: \"listFiles\",\n\t\t\t\t\tconsumer: input.consumer\n\t\t\t\t});\n\t\t\t\tconst files = await options.legacySource.listFiles(revision.handle);\n\t\t\t\treturn {\n\t\t\t\t\tartifactId: revision.artifactId,\n\t\t\t\t\tfiles\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (!options.provider) return {\n\t\t\t\tkind: \"unavailable\",\n\t\t\t\tartifactId: revision.artifactId,\n\t\t\t\treason: \"provider_unavailable\"\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tconst blobs = (await options.provider.listTree({\n\t\t\t\t\trepository: revision.repository,\n\t\t\t\t\tcommitSha: revision.commitSha\n\t\t\t\t})).flatMap((entry) => {\n\t\t\t\t\tif (entry.kind !== \"blob\") return [];\n\t\t\t\t\tif (isIgnoredProjectSourcePath(entry.path)) return [];\n\t\t\t\t\treturn [{\n\t\t\t\t\t\tpath: entry.path,\n\t\t\t\t\t\tsize: entry.size\n\t\t\t\t\t}];\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\tartifactId: revision.artifactId,\n\t\t\t\t\tfiles: applyTreeLimits(blobs)\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\treturn mapProviderFailure(revision.artifactId, error);\n\t\t\t}\n\t\t},\n\t\tasync readFile(input) {\n\t\t\tconst revision = await resolve({\n\t\t\t\tprojectId: input.projectId,\n\t\t\t\tartifactId: input.artifactId\n\t\t\t});\n\t\t\tif (revision.kind === \"unavailable\") return revision;\n\t\t\tlet path;\n\t\t\ttry {\n\t\t\t\tpath = assertRepositoryRelativePath(input.path);\n\t\t\t} catch {\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"unavailable\",\n\t\t\t\t\tartifactId: revision.artifactId,\n\t\t\t\t\treason: \"source_missing\"\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (isIgnoredProjectSourcePath(path)) return {\n\t\t\t\tkind: \"unavailable\",\n\t\t\t\tartifactId: revision.artifactId,\n\t\t\t\treason: \"source_missing\"\n\t\t\t};\n\t\t\tif (revision.kind === \"snapshot\") {\n\t\t\t\toptions.onFallback?.({\n\t\t\t\t\tprojectId: input.projectId,\n\t\t\t\t\tartifactId: revision.artifactId,\n\t\t\t\t\toperation: \"readFile\",\n\t\t\t\t\tconsumer: input.consumer\n\t\t\t\t});\n\t\t\t\ttry {\n\t\t\t\t\tconst file = await options.legacySource.readFile(revision.handle, path);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tartifactId: revision.artifactId,\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\tbytes: file.bytes,\n\t\t\t\t\t\tcontentId: file.contentId\n\t\t\t\t\t};\n\t\t\t\t} catch {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkind: \"unavailable\",\n\t\t\t\t\t\tartifactId: revision.artifactId,\n\t\t\t\t\t\treason: \"source_missing\"\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!options.provider) return {\n\t\t\t\tkind: \"unavailable\",\n\t\t\t\tartifactId: revision.artifactId,\n\t\t\t\treason: \"provider_unavailable\"\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tconst file = await options.provider.readFile({\n\t\t\t\t\trepository: revision.repository,\n\t\t\t\t\tcommitSha: revision.commitSha,\n\t\t\t\t\tpath\n\t\t\t\t});\n\t\t\t\tif (file.bytes.byteLength > PROJECT_SOURCE_MAX_FILE_BYTES) throw new ProjectGitProviderError({\n\t\t\t\t\tcode: \"repository_too_large\",\n\t\t\t\t\tmessage: \"Source file exceeds the maximum allowed size\"\n\t\t\t\t});\n\t\t\t\tif (isProbablyBinaryProjectSource(file.bytes)) return {\n\t\t\t\t\tkind: \"unavailable\",\n\t\t\t\t\tartifactId: revision.artifactId,\n\t\t\t\t\treason: \"source_missing\"\n\t\t\t\t};\n\t\t\t\treturn {\n\t\t\t\t\tartifactId: revision.artifactId,\n\t\t\t\t\tpath,\n\t\t\t\t\tbytes: file.bytes,\n\t\t\t\t\tcontentId: file.blobSha.toLowerCase()\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof ProjectGitProviderError && error.code === \"repository_too_large\") throw error;\n\t\t\t\treturn mapProviderFailure(revision.artifactId, error);\n\t\t\t}\n\t\t},\n\t\tasync getDraftRevision(input) {\n\t\t\tconst revision = await resolveDraft(input.projectId);\n\t\t\tif (revision.kind === \"unavailable\") return revision;\n\t\t\treturn {\n\t\t\t\tkind: \"draft\",\n\t\t\t\tcommitSha: revision.commitSha,\n\t\t\t\tbranch: revision.branch\n\t\t\t};\n\t\t},\n\t\tasync listDraftFiles(input) {\n\t\t\tconst revision = await resolveDraft(input.projectId);\n\t\t\tif (revision.kind === \"unavailable\") return revision;\n\t\t\tif (!options.provider) return {\n\t\t\t\tkind: \"unavailable\",\n\t\t\t\treason: \"provider_unavailable\"\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tconst blobs = (await options.provider.listTree({\n\t\t\t\t\trepository: revision.repository,\n\t\t\t\t\tcommitSha: revision.commitSha\n\t\t\t\t})).flatMap((entry) => {\n\t\t\t\t\tif (entry.kind !== \"blob\") return [];\n\t\t\t\t\tif (isIgnoredProjectSourcePath(entry.path)) return [];\n\t\t\t\t\treturn [{\n\t\t\t\t\t\tpath: entry.path,\n\t\t\t\t\t\tsize: entry.size\n\t\t\t\t\t}];\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"draft\",\n\t\t\t\t\tcommitSha: revision.commitSha,\n\t\t\t\t\tfiles: applyTreeLimits(blobs)\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\treturn mapProviderFailure(void 0, error);\n\t\t\t}\n\t\t},\n\t\tasync readDraftFile(input) {\n\t\t\tlet path;\n\t\t\ttry {\n\t\t\t\tpath = assertRepositoryRelativePath(input.path);\n\t\t\t} catch {\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"unavailable\",\n\t\t\t\t\treason: \"source_missing\"\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (isIgnoredProjectSourcePath(path)) return {\n\t\t\t\tkind: \"unavailable\",\n\t\t\t\treason: \"source_missing\"\n\t\t\t};\n\t\t\tif (input.commitSha) {\n\t\t\t\tconst classified = await resolveDraftRepository(input.projectId);\n\t\t\t\tif (classified.kind === \"unavailable\") return classified;\n\t\t\t\treturn readDraftBytes({\n\t\t\t\t\trepository: classified.repository,\n\t\t\t\t\tcommitSha: input.commitSha,\n\t\t\t\t\tpath\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst revision = await resolveDraft(input.projectId);\n\t\t\tif (revision.kind === \"unavailable\") return revision;\n\t\t\treturn readDraftBytes({\n\t\t\t\trepository: revision.repository,\n\t\t\t\tcommitSha: revision.commitSha,\n\t\t\t\tpath\n\t\t\t});\n\t\t}\n\t};\n}\n//#endregion\nexport { MANAGED_DRAFT_BRANCH, ProjectGitProviderError, assertRepositoryRelativePath, createCommitFromDiffWithRetry, createCommitWithDisjointRetry, createProjectSourceService, decodeGitCQuotedPath, isProjectGitProviderError, managedDeployCandidateBranch, managedDraftBranch, parseGitDiffTouchedPaths };\n\n//# sourceMappingURL=index.mjs.map","import {\n markProjectRepositoryDeleted,\n markProjectRepositoryFailed,\n markProjectRepositoryReady,\n selectProjectRepositoryByProjectId,\n type ProjectRepositoryRow,\n} from \"@keystrokehq/platform-database\";\nimport {\n isProjectGitProviderError,\n type ProjectGitProviderPlugin,\n type ProjectGitRepository,\n} from \"@keystrokehq/project-git\";\n\nconst PROVIDER_RETRY_ATTEMPTS = 3;\nconst PROVIDER_RETRY_BASE_MS = 250;\nconst PROVIDER_RETRY_MAX_MS = 2_000;\n\nfunction safeError(error: unknown): { code: string; message: string } {\n if (isProjectGitProviderError(error)) {\n return { code: error.code, message: error.message };\n }\n return {\n code: \"provider_unavailable\",\n message: \"Repository provider request failed\",\n };\n}\n\nfunction isRetryableProviderError(error: unknown): boolean {\n if (isProjectGitProviderError(error)) {\n return error.retryable;\n }\n // Unexpected/network failures during the remote call — retry before giving up.\n return true;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nfunction backoffDelayMs(attemptIndex: number, retryAt?: Date): number {\n const exponential = Math.min(PROVIDER_RETRY_MAX_MS, PROVIDER_RETRY_BASE_MS * 2 ** attemptIndex);\n if (!retryAt) {\n return exponential;\n }\n return Math.max(exponential, retryAt.getTime() - Date.now());\n}\n\nasync function withRetry<T>(\n fn: () => Promise<T>,\n shouldRetry: (error: unknown) => boolean,\n): Promise<T> {\n let lastError: unknown;\n for (let attempt = 0; attempt < PROVIDER_RETRY_ATTEMPTS; attempt += 1) {\n try {\n return await fn();\n } catch (error) {\n lastError = error;\n const hasAttemptsLeft = attempt < PROVIDER_RETRY_ATTEMPTS - 1;\n if (!shouldRetry(error) || !hasAttemptsLeft) {\n throw error;\n }\n const retryAt = isProjectGitProviderError(error) ? error.retryAt : undefined;\n await sleep(backoffDelayMs(attempt, retryAt));\n }\n }\n throw lastError;\n}\n\nfunction withProviderRetry<T>(fn: () => Promise<T>): Promise<T> {\n return withRetry(fn, isRetryableProviderError);\n}\n\n/** Persist lifecycle after a successful remote call — brief retries reduce orphan windows. */\nfunction withPersistRetry<T>(fn: () => Promise<T>): Promise<T> {\n return withRetry(fn, () => true);\n}\n\nexport class ProjectRepositoryNotReadyError extends Error {\n readonly status = 409 as const;\n readonly code: string;\n\n constructor(message: string, code: string) {\n super(message);\n this.name = \"ProjectRepositoryNotReadyError\";\n this.code = code;\n }\n}\n\nexport function toProjectGitRepository(\n row: ProjectRepositoryRow,\n): ProjectGitRepository | undefined {\n if (!row.externalRepositoryId || !row.owner || !row.name) {\n return undefined;\n }\n return {\n provider: row.provider,\n externalId: row.externalRepositoryId,\n owner: row.owner,\n name: row.name,\n defaultBranch: row.defaultBranch,\n };\n}\n\nexport async function requireReadyProjectRepository(projectId: string): Promise<{\n row: ProjectRepositoryRow;\n repository: ProjectGitRepository;\n}> {\n const row = await selectProjectRepositoryByProjectId(projectId);\n if (!row) {\n throw new ProjectRepositoryNotReadyError(\n \"Project repository has not been provisioned yet\",\n \"repository_not_found\",\n );\n }\n if (row.desiredState !== \"active\") {\n throw new ProjectRepositoryNotReadyError(\n `Project repository is ${row.desiredState}`,\n \"repository_not_active\",\n );\n }\n if (row.lifecycleStatus !== \"ready\") {\n throw new ProjectRepositoryNotReadyError(\n `Project repository is ${row.lifecycleStatus}`,\n \"repository_not_ready\",\n );\n }\n const repository = toProjectGitRepository(row);\n if (!repository) {\n throw new ProjectRepositoryNotReadyError(\n \"Project repository is missing remote metadata\",\n \"repository_incomplete\",\n );\n }\n return { row, repository };\n}\n\nfunction storedRepository(\n row: Awaited<ReturnType<typeof selectProjectRepositoryByProjectId>>,\n): ProjectGitRepository | undefined {\n if (!row) {\n return undefined;\n }\n return toProjectGitRepository(row);\n}\n\nexport async function provisionProjectRepositoryInline(input: {\n provider: ProjectGitProviderPlugin;\n organizationId: string;\n projectId: string;\n projectSlug: string;\n}): Promise<void> {\n const row = await selectProjectRepositoryByProjectId(input.projectId);\n if (!row || row.provider !== input.provider.name || row.desiredState !== \"active\") {\n return;\n }\n\n let repository: ProjectGitRepository;\n try {\n repository = await withProviderRetry(() =>\n input.provider.provisionRepository({\n organizationId: input.organizationId,\n projectId: input.projectId,\n projectSlug: input.projectSlug,\n }),\n );\n } catch (error) {\n const safe = safeError(error);\n await markProjectRepositoryFailed({\n id: row.id,\n desiredState: \"active\",\n lastErrorCode: safe.code,\n lastError: safe.message,\n });\n return;\n }\n\n const ready = await withPersistRetry(() =>\n markProjectRepositoryReady({\n id: row.id,\n externalRepositoryId: repository.externalId,\n owner: repository.owner,\n name: repository.name,\n defaultBranch: repository.defaultBranch,\n contentStatus: \"empty\",\n }),\n );\n if (ready) {\n return;\n }\n\n const current = await selectProjectRepositoryByProjectId(input.projectId);\n if (current?.desiredState !== \"deleted\") {\n return;\n }\n\n try {\n await withProviderRetry(() => input.provider.archiveRepository(repository));\n await withPersistRetry(() => markProjectRepositoryDeleted({ id: row.id }));\n } catch (error) {\n const safe = safeError(error);\n await markProjectRepositoryFailed({\n id: row.id,\n desiredState: \"deleted\",\n lastErrorCode: safe.code,\n lastError: safe.message,\n });\n }\n}\n\nexport async function archiveProjectRepositoryInline(input: {\n provider: ProjectGitProviderPlugin;\n projectId: string;\n}): Promise<void> {\n const row = await selectProjectRepositoryByProjectId(input.projectId);\n if (!row || row.provider !== input.provider.name || row.desiredState !== \"deleted\") {\n return;\n }\n\n const repository = storedRepository(row);\n if (!repository) {\n await markProjectRepositoryDeleted({ id: row.id });\n return;\n }\n\n try {\n await withProviderRetry(() => input.provider.archiveRepository(repository));\n await withPersistRetry(() => markProjectRepositoryDeleted({ id: row.id }));\n } catch (error) {\n const safe = safeError(error);\n await markProjectRepositoryFailed({\n id: row.id,\n desiredState: \"deleted\",\n lastErrorCode: safe.code,\n lastError: safe.message,\n });\n }\n}\n","import {\n event,\n getTelemetryContext,\n groupIdentify,\n type TelemetryProperties,\n} from \"@keystrokehq/telemetry\";\n\n/** Fail-open product event with request-scoped client channel when available. */\nexport async function trackProductEvent(input: {\n name: string;\n actorId: string;\n organizationId?: string;\n projectId?: string;\n anonymous?: boolean;\n uuid?: string;\n properties?: TelemetryProperties;\n}): Promise<void> {\n const client = getTelemetryContext()?.client;\n await event({\n name: input.name,\n actorId: input.actorId,\n ...(input.organizationId ? { organizationId: input.organizationId } : {}),\n ...(input.projectId ? { projectId: input.projectId } : {}),\n ...(input.anonymous ? { anonymous: true } : {}),\n ...(input.uuid ? { uuid: input.uuid } : {}),\n properties: {\n ...(client ? { client } : {}),\n ...input.properties,\n },\n });\n}\n\nexport async function identifyOrganizationGroup(input: {\n organizationId: string;\n properties: TelemetryProperties;\n}): Promise<void> {\n await groupIdentify({\n groupType: \"organization\",\n groupKey: input.organizationId,\n properties: input.properties,\n });\n}\n","import {\n createOrgStorageClient,\n selectActiveArtifactSourceRevisionForProject,\n selectProjectArtifactSourceRevisionForProject,\n selectProjectRepositoryByProjectId,\n type OrganizationRow,\n type ProjectArtifactSourceRevisionRow,\n type ProjectRepositoryRow,\n} from \"@keystrokehq/platform-database\";\nimport {\n createProjectSourceService,\n isProjectGitProviderError,\n type ProjectGitProviderPlugin,\n type ProjectSourceConsumer,\n type ProjectSourceService,\n type ProjectSourceUnavailableReason,\n type ProjectSourceUnavailableRevision,\n} from \"@keystrokehq/project-git\";\nimport {\n StoredProjectSourceManifestSchema,\n projectFileId,\n type ProjectFileSummary,\n} from \"@keystrokehq/shared\";\nimport { projectSourceBlobKey } from \"@keystrokehq/storage\";\n\nimport { trackProductEvent } from \"../lib/product-analytics\";\n\nexport type ProjectSourceHttpStatus = 404 | 409 | 413 | 503;\n\nexport class ProjectSourceHttpError extends Error {\n readonly status: ProjectSourceHttpStatus;\n readonly reason?: ProjectSourceUnavailableReason;\n\n constructor(\n message: string,\n status: ProjectSourceHttpStatus,\n reason?: ProjectSourceUnavailableReason,\n ) {\n super(message);\n this.name = \"ProjectSourceHttpError\";\n this.status = status;\n this.reason = reason;\n }\n}\n\nfunction toArtifactRecord(row: ProjectArtifactSourceRevisionRow) {\n return {\n artifactId: row.artifactId,\n sourceRepositoryId: row.sourceRepositoryId,\n sourceCommitSha: row.sourceCommitSha,\n sourceManifestJson: row.sourceManifestJson,\n };\n}\n\nfunction toRepositoryRecord(row: ProjectRepositoryRow) {\n return {\n id: row.id,\n provider: row.provider,\n lifecycleStatus: row.lifecycleStatus,\n desiredState: row.desiredState,\n externalRepositoryId: row.externalRepositoryId,\n owner: row.owner,\n name: row.name,\n defaultBranch: row.defaultBranch,\n };\n}\n\nfunction unavailableMessage(reason: ProjectSourceUnavailableReason): string {\n switch (reason) {\n case \"not_deployed\":\n return \"No active deploy for project\";\n case \"source_missing\":\n return \"Source not found\";\n case \"partial_git_provenance\":\n return \"Artifact Git provenance is incomplete\";\n case \"repository_missing\":\n return \"Project repository has not been provisioned yet\";\n case \"repository_not_ready\":\n return \"Project repository is not ready\";\n case \"repository_mismatch\":\n return \"Artifact source repository does not match the project repository\";\n case \"provider_mismatch\":\n return \"Configured Git provider does not match the project repository\";\n case \"provider_unavailable\":\n return \"Project git provider is not configured\";\n }\n}\n\nfunction unavailableStatus(reason: ProjectSourceUnavailableReason): ProjectSourceHttpStatus {\n switch (reason) {\n case \"not_deployed\":\n case \"source_missing\":\n return 404;\n case \"partial_git_provenance\":\n case \"repository_missing\":\n case \"repository_not_ready\":\n case \"repository_mismatch\":\n case \"provider_mismatch\":\n return 409;\n case \"provider_unavailable\":\n return 503;\n }\n}\n\nexport function throwIfUnavailable<T>(\n result: T | ProjectSourceUnavailableRevision,\n): asserts result is T {\n if (result && typeof result === \"object\" && \"kind\" in result && result.kind === \"unavailable\") {\n throw new ProjectSourceHttpError(\n unavailableMessage(result.reason),\n unavailableStatus(result.reason),\n result.reason,\n );\n }\n}\n\nexport function assertAvailable<T>(result: T | ProjectSourceUnavailableRevision): T {\n throwIfUnavailable(result);\n return result;\n}\n\nasync function listLegacyFiles(handle: unknown): Promise<ProjectFileSummary[]> {\n const manifest = StoredProjectSourceManifestSchema.parse(handle);\n return manifest.files.map((file) => ({\n id: file.id || projectFileId(file.path),\n path: file.path,\n }));\n}\n\nasync function readLegacyFile(\n organization: OrganizationRow,\n projectId: string,\n handle: unknown,\n path: string,\n): Promise<{ bytes: Uint8Array; contentId: string }> {\n const manifest = StoredProjectSourceManifestSchema.parse(handle);\n const file = manifest.files.find((entry) => entry.path === path);\n if (!file) {\n throw new ProjectSourceHttpError(\"File not found\", 404, \"source_missing\");\n }\n const storage = createOrgStorageClient(organization);\n const bytes = await storage.getObject(projectSourceBlobKey(projectId, file.hash));\n return { bytes, contentId: file.hash };\n}\n\n/**\n * Organization-bound source service used by HTTP routes. Membership checks stay\n * in route middleware; this adapter only resolves revision + tree/blob data.\n */\nexport function createOrgBoundProjectSourceService(input: {\n provider?: ProjectGitProviderPlugin;\n organization: OrganizationRow;\n projectId: string;\n actorId?: string;\n organizationId?: string;\n}): ProjectSourceService {\n const { organization, projectId } = input;\n\n return createProjectSourceService({\n provider: input.provider,\n resolveRevision: async ({ artifactId }) => {\n const artifact = artifactId\n ? await selectProjectArtifactSourceRevisionForProject(artifactId, projectId)\n : await selectActiveArtifactSourceRevisionForProject(projectId);\n const repository = await selectProjectRepositoryByProjectId(projectId);\n return {\n artifact: artifact ? toArtifactRecord(artifact) : undefined,\n repository: repository ? toRepositoryRecord(repository) : undefined,\n };\n },\n legacySource: {\n listFiles: listLegacyFiles,\n readFile: (handle, path) => readLegacyFile(organization, projectId, handle, path),\n },\n onFallback: (observation) => {\n void trackProductEvent({\n name: \"project_source:fallback_read\",\n actorId: input.actorId ?? \"system\",\n ...(input.organizationId ? { organizationId: input.organizationId } : {}),\n projectId: observation.projectId,\n ...(input.actorId ? {} : { anonymous: true }),\n properties: {\n artifactId: observation.artifactId,\n operation: observation.operation,\n consumer: observation.consumer as ProjectSourceConsumer,\n },\n });\n },\n });\n}\n\nexport type ProjectSourceServiceFactory = (input: {\n organization: OrganizationRow;\n projectId: string;\n actorId?: string;\n organizationId?: string;\n}) => ProjectSourceService;\n\nexport function createProjectSourceServiceFactory(\n provider?: ProjectGitProviderPlugin,\n): ProjectSourceServiceFactory {\n return (input) =>\n createOrgBoundProjectSourceService({\n provider,\n ...input,\n });\n}\n\nexport function mapProjectSourceError(error: unknown): ProjectSourceHttpError {\n if (error instanceof ProjectSourceHttpError) {\n return error;\n }\n if (isProjectGitProviderError(error) && error.code === \"repository_too_large\") {\n return new ProjectSourceHttpError(error.message, 413);\n }\n if (isProjectGitProviderError(error) && error.code === \"not_found\") {\n return new ProjectSourceHttpError(\"Source not found\", 404, \"source_missing\");\n }\n if (isProjectGitProviderError(error)) {\n return new ProjectSourceHttpError(\n \"Project git provider is unavailable\",\n 503,\n \"provider_unavailable\",\n );\n }\n const message = error instanceof Error ? error.message : \"Failed to load source\";\n return new ProjectSourceHttpError(message, 503, \"provider_unavailable\");\n}\n","import {\n MANAGED_DRAFT_BRANCH,\n isProjectGitProviderError,\n type GitCommitFileChange,\n type ProjectGitProviderPlugin,\n type ProjectGitRepository,\n} from \"@keystrokehq/project-git\";\nimport {\n createOrgStorageClient,\n markProjectRepositoryContentStatus,\n selectActiveArtifactSourceManifestForProject,\n selectOrganizationById,\n selectProjectById,\n selectProjectRepositoryByProjectId,\n type ProjectRepositoryRow,\n} from \"@keystrokehq/platform-database\";\nimport { StoredProjectSourceManifestSchema } from \"@keystrokehq/shared\";\nimport { projectSourceBlobKey } from \"@keystrokehq/storage\";\n\nimport {\n requireReadyProjectRepository,\n toProjectGitRepository,\n} from \"./project-repository-lifecycle\";\n\nconst BOOTSTRAP_AUTHOR = {\n name: \"Keystroke\",\n email: \"noreply@keystroke.dev\",\n} as const;\nconst BOOTSTRAP_MARKER_PATH = \".keystroke/bootstrap.json\";\n\ntype BootstrapMarker = {\n version: 1;\n artifactId: string;\n generatedAt: string;\n};\n\nasync function loadSnapshotFiles(input: {\n organizationId: string;\n projectId: string;\n files: Array<{ path: string; hash: string }>;\n}): Promise<GitCommitFileChange[]> {\n const organization = await selectOrganizationById(input.organizationId);\n if (!organization) {\n throw new Error(`Organization ${input.organizationId} is missing`);\n }\n const storage = createOrgStorageClient(organization);\n const changes: GitCommitFileChange[] = [];\n for (const file of input.files) {\n const bytes = await storage.getObject(projectSourceBlobKey(input.projectId, file.hash));\n changes.push({ op: \"upsert\", path: file.path, content: bytes });\n }\n return changes;\n}\n\nfunction bootstrapMarkerContents(marker: BootstrapMarker): Uint8Array {\n return new TextEncoder().encode(`${JSON.stringify(marker, null, 2)}\\n`);\n}\n\nasync function hasBootstrapMarker(\n provider: ProjectGitProviderPlugin,\n repository: ProjectGitRepository,\n commitSha: string,\n marker: BootstrapMarker,\n): Promise<boolean> {\n try {\n const file = await provider.readFile({\n repository,\n commitSha,\n path: BOOTSTRAP_MARKER_PATH,\n });\n const parsed: unknown = JSON.parse(new TextDecoder().decode(file.bytes));\n if (typeof parsed !== \"object\" || parsed === null) {\n return false;\n }\n const candidate = parsed as Partial<BootstrapMarker>;\n return (\n candidate.version === marker.version &&\n candidate.artifactId === marker.artifactId &&\n candidate.generatedAt === marker.generatedAt\n );\n } catch (error) {\n if (isProjectGitProviderError(error) && error.code === \"not_found\") {\n return false;\n }\n // Duplicate package copies can break `instanceof`; treat explicit not_found codes the same.\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n (error as { code?: unknown }).code === \"not_found\"\n ) {\n return false;\n }\n if (error instanceof SyntaxError) {\n return false;\n }\n throw error;\n }\n}\n\n/**\n * Idempotent: when a ready repository still has empty/awaiting content, seed\n * `main` from the active source snapshot (when present) and fast-forward\n * `ks/draft` to match. Projects without an active snapshot stay on the\n * provision tip and are marked synced.\n */\nexport async function ensureProjectRepositoryContentBootstrapped(input: {\n provider: ProjectGitProviderPlugin;\n projectId: string;\n}): Promise<{\n row: ProjectRepositoryRow;\n repository: ProjectGitRepository;\n}> {\n const ready = await requireReadyProjectRepository(input.projectId);\n if (ready.row.contentStatus === \"synced\") {\n return ready;\n }\n\n const project = await selectProjectById(input.projectId);\n if (!project) {\n return ready;\n }\n\n const mainRef = await input.provider.resolveRef({\n repository: ready.repository,\n branch: \"main\",\n });\n if (!mainRef) {\n await markProjectRepositoryContentStatus({\n id: ready.row.id,\n contentStatus: \"failed\",\n });\n throw new Error(\"Default branch main is missing\");\n }\n\n let mainSha = mainRef.sha;\n const active = await selectActiveArtifactSourceManifestForProject(input.projectId);\n if (active?.sourceManifestJson != null) {\n const manifest = StoredProjectSourceManifestSchema.parse(active.sourceManifestJson);\n const marker: BootstrapMarker = {\n version: 1,\n artifactId: active.artifactId,\n generatedAt: manifest.generatedAt,\n };\n if (!(await hasBootstrapMarker(input.provider, ready.repository, mainSha, marker))) {\n const files = await loadSnapshotFiles({\n organizationId: project.organizationId,\n projectId: input.projectId,\n files: manifest.files,\n });\n files.push({\n op: \"upsert\",\n path: BOOTSTRAP_MARKER_PATH,\n content: bootstrapMarkerContents(marker),\n });\n try {\n const result = await input.provider.createCommit({\n repository: ready.repository,\n branch: \"main\",\n message: \"Bootstrap repository from active source snapshot\",\n author: BOOTSTRAP_AUTHOR,\n files,\n expectedHeadSha: mainSha,\n });\n mainSha = result.sha;\n } catch (error) {\n if (!isProjectGitProviderError(error) || error.code !== \"conflict\") {\n throw error;\n }\n const latestMain = await input.provider.resolveRef({\n repository: ready.repository,\n branch: \"main\",\n });\n if (\n !latestMain ||\n !(await hasBootstrapMarker(input.provider, ready.repository, latestMain.sha, marker))\n ) {\n throw error;\n }\n mainSha = latestMain.sha;\n }\n }\n }\n\n const draftRef = await input.provider.resolveRef({\n repository: ready.repository,\n branch: MANAGED_DRAFT_BRANCH,\n });\n if (!draftRef) {\n await markProjectRepositoryContentStatus({\n id: ready.row.id,\n contentStatus: \"failed\",\n });\n throw new Error(`Branch ${MANAGED_DRAFT_BRANCH} is missing`);\n }\n if (draftRef.sha !== mainSha) {\n try {\n await input.provider.mergeRefs({\n repository: ready.repository,\n sourceBranch: \"main\",\n targetBranch: MANAGED_DRAFT_BRANCH,\n expectedTargetSha: draftRef.sha,\n strategy: \"ff_only\",\n });\n } catch (error) {\n if (!isProjectGitProviderError(error) || error.code !== \"conflict\") {\n throw error;\n }\n // Concurrent bootstrap already advanced ks/draft — accept only when tip matches main.\n const latestDraft = await input.provider.resolveRef({\n repository: ready.repository,\n branch: MANAGED_DRAFT_BRANCH,\n });\n if (!latestDraft || latestDraft.sha !== mainSha) {\n throw error;\n }\n }\n }\n\n const updated = await markProjectRepositoryContentStatus({\n id: ready.row.id,\n contentStatus: \"synced\",\n });\n if (!updated) {\n const current = await selectProjectRepositoryByProjectId(input.projectId);\n if (current?.contentStatus === \"synced\") {\n return {\n row: current,\n repository: toProjectGitRepository(current) ?? ready.repository,\n };\n }\n throw new Error(\"Failed to persist synced repository content status\");\n }\n\n return {\n row: updated,\n repository: toProjectGitRepository(updated) ?? ready.repository,\n };\n}\n","import {\n ensureProjectRepositoryRow,\n selectProjectById,\n selectProjectRepositoryByProjectId,\n type ProjectRepositoryRow,\n} from \"@keystrokehq/platform-database\";\nimport type { ProjectGitProviderPlugin, ProjectGitRepository } from \"@keystrokehq/project-git\";\n\nimport { ensureProjectRepositoryContentBootstrapped } from \"./project-repository-bootstrap\";\nimport {\n ProjectRepositoryNotReadyError,\n provisionProjectRepositoryInline,\n requireReadyProjectRepository,\n toProjectGitRepository,\n} from \"./project-repository-lifecycle\";\n\ntype EnsureProjectRepositoryReadyResult = {\n row: ProjectRepositoryRow;\n repository: ProjectGitRepository;\n};\n\n/**\n * Coalesce concurrent ensure calls for the same project. Without this, the Files\n * UI retry storm re-runs snapshot→Git bootstrap (one createBlob per file) and\n * trips GitHub secondary rate limits (403), leaving the UI on \"Loading draft…\".\n */\nconst inFlightEnsureByProjectId = new Map<string, Promise<EnsureProjectRepositoryReadyResult>>();\n\n/**\n * Lazily ensures a managed repository exists and is content-bootstrapped for\n * authoring (draft reads/writes, remote mint). Idempotent and safe under\n * concurrent first access for existing snapshot-backed projects.\n *\n * Published snapshot reads do not call this — they keep snapshot fallback.\n */\nexport async function ensureProjectRepositoryReady(input: {\n provider: ProjectGitProviderPlugin;\n organizationId: string;\n projectId: string;\n projectSlug: string;\n}): Promise<EnsureProjectRepositoryReadyResult> {\n const existing = inFlightEnsureByProjectId.get(input.projectId);\n if (existing) {\n return existing;\n }\n\n const pending = ensureProjectRepositoryReadyUncoalesced(input).finally(() => {\n if (inFlightEnsureByProjectId.get(input.projectId) === pending) {\n inFlightEnsureByProjectId.delete(input.projectId);\n }\n });\n inFlightEnsureByProjectId.set(input.projectId, pending);\n return pending;\n}\n\nasync function ensureProjectRepositoryReadyUncoalesced(input: {\n provider: ProjectGitProviderPlugin;\n organizationId: string;\n projectId: string;\n projectSlug: string;\n}): Promise<EnsureProjectRepositoryReadyResult> {\n let row = await ensureProjectRepositoryRow({\n organizationId: input.organizationId,\n projectId: input.projectId,\n provider: input.provider.name,\n });\n\n if (row.desiredState !== \"active\") {\n throw new ProjectRepositoryNotReadyError(\n `Project repository is ${row.desiredState}`,\n \"repository_not_active\",\n );\n }\n if (row.provider !== input.provider.name) {\n throw new ProjectRepositoryNotReadyError(\n \"Configured Git provider does not match the project repository\",\n \"provider_mismatch\",\n );\n }\n\n if (row.lifecycleStatus !== \"ready\" || !toProjectGitRepository(row)) {\n const project = await selectProjectById(input.projectId);\n if (!project) {\n throw new ProjectRepositoryNotReadyError(\n \"Project repository has not been provisioned yet\",\n \"repository_not_found\",\n );\n }\n await provisionProjectRepositoryInline({\n provider: input.provider,\n organizationId: input.organizationId,\n projectId: input.projectId,\n projectSlug: input.projectSlug,\n });\n const refreshed = await selectProjectRepositoryByProjectId(input.projectId);\n if (refreshed) {\n row = refreshed;\n }\n }\n\n // Throws when provision failed or is still incomplete.\n await requireReadyProjectRepository(input.projectId);\n\n return ensureProjectRepositoryContentBootstrapped({\n provider: input.provider,\n projectId: input.projectId,\n });\n}\n","import {\n MANAGED_DRAFT_BRANCH,\n assertRepositoryRelativePath,\n createCommitFromDiffWithRetry,\n createCommitWithDisjointRetry,\n isProjectGitProviderError,\n parseGitDiffTouchedPaths,\n type GitCommitAuthor,\n type GitCommitFileChange,\n type ProjectGitProviderPlugin,\n type ProjectGitRepository,\n} from \"@keystrokehq/project-git\";\nimport {\n PROJECT_DRAFT_DIFF_MAX_BYTES,\n PROJECT_SOURCE_MAX_FILE_BYTES,\n isIgnoredProjectSourcePath,\n type CreateDraftCommitRequest,\n type CreateDraftDiffCommitRequest,\n} from \"@keystrokehq/shared\";\n\nexport class DraftCommitConflictError extends Error {\n readonly status = 409 as const;\n readonly code = \"conflict\" as const;\n readonly currentHeadSha: string;\n\n constructor(currentHeadSha: string) {\n super(\"Draft was updated by another edit\");\n this.name = \"DraftCommitConflictError\";\n this.currentHeadSha = currentHeadSha;\n }\n}\n\nexport class DraftCommitValidationError extends Error {\n readonly status = 400 as const;\n\n constructor(message: string) {\n super(message);\n this.name = \"DraftCommitValidationError\";\n }\n}\n\nfunction toProviderFiles(files: CreateDraftCommitRequest[\"files\"]): GitCommitFileChange[] {\n const encoder = new TextEncoder();\n const changes: GitCommitFileChange[] = [];\n const seen = new Set<string>();\n\n for (const file of files) {\n let path: string;\n try {\n path = assertRepositoryRelativePath(file.path);\n } catch {\n throw new DraftCommitValidationError(`Invalid file path: ${file.path}`);\n }\n if (isIgnoredProjectSourcePath(path)) {\n throw new DraftCommitValidationError(`File path is not allowed: ${path}`);\n }\n if (seen.has(path)) {\n throw new DraftCommitValidationError(`Duplicate file path: ${path}`);\n }\n seen.add(path);\n\n if (file.op === \"delete\") {\n changes.push({ op: \"delete\", path });\n continue;\n }\n\n const bytes = encoder.encode(file.content);\n if (bytes.byteLength > PROJECT_SOURCE_MAX_FILE_BYTES) {\n throw new DraftCommitValidationError(`File exceeds maximum size: ${path}`);\n }\n changes.push({ op: \"upsert\", path, content: bytes });\n }\n\n return changes;\n}\n\nfunction decodeDiffBase64(diffBase64: string): Uint8Array {\n let bytes: Uint8Array;\n try {\n bytes = Buffer.from(diffBase64, \"base64\");\n } catch {\n throw new DraftCommitValidationError(\"Diff payload is not valid base64\");\n }\n if (bytes.byteLength === 0) {\n throw new DraftCommitValidationError(\"Diff payload is empty\");\n }\n if (bytes.byteLength > PROJECT_DRAFT_DIFF_MAX_BYTES) {\n throw new DraftCommitValidationError(\"Diff exceeds maximum size\");\n }\n return bytes;\n}\n\nfunction assertDiffPathsAllowed(diff: Uint8Array): void {\n let paths: string[];\n try {\n paths = parseGitDiffTouchedPaths(diff);\n } catch (error) {\n if (isProjectGitProviderError(error)) {\n throw new DraftCommitValidationError(error.message);\n }\n throw error;\n }\n for (const path of paths) {\n if (isIgnoredProjectSourcePath(path)) {\n throw new DraftCommitValidationError(`File path is not allowed: ${path}`);\n }\n }\n}\n\n/**\n * Atomic draft commit against `ks/draft` with one disjoint-path CAS retry.\n * Does not force or push.\n */\nexport async function commitProjectDraft(input: {\n provider: ProjectGitProviderPlugin;\n repository: ProjectGitRepository;\n author: GitCommitAuthor;\n request: CreateDraftCommitRequest;\n}): Promise<{ commitSha: string }> {\n const files = toProviderFiles(input.request.files);\n const result = await createCommitWithDisjointRetry({\n provider: input.provider,\n repository: input.repository,\n branch: MANAGED_DRAFT_BRANCH,\n message: input.request.message ?? \"Update project draft\",\n author: input.author,\n files,\n expectedHeadSha: input.request.expectedHeadSha,\n });\n\n if (!result.ok) {\n throw new DraftCommitConflictError(result.currentHeadSha);\n }\n return { commitSha: result.sha };\n}\n\n/**\n * Commit a `git diff --binary` patch against `ks/draft` with one CAS retry\n * (disjoint paths, or overlapping clean apply). Does not force or push.\n */\nexport async function commitProjectDraftFromDiff(input: {\n provider: ProjectGitProviderPlugin;\n repository: ProjectGitRepository;\n author: GitCommitAuthor;\n request: CreateDraftDiffCommitRequest;\n}): Promise<{ commitSha: string }> {\n const diff = decodeDiffBase64(input.request.diffBase64);\n assertDiffPathsAllowed(diff);\n\n const result = await createCommitFromDiffWithRetry({\n provider: input.provider,\n repository: input.repository,\n branch: MANAGED_DRAFT_BRANCH,\n message: input.request.message ?? \"Update project draft\",\n author: input.author,\n diff,\n expectedHeadSha: input.request.expectedHeadSha,\n });\n\n if (!result.ok) {\n throw new DraftCommitConflictError(result.currentHeadSha);\n }\n return { commitSha: result.sha };\n}\n\nexport function mapDraftCommitError(error: unknown): {\n status: 400 | 409 | 503;\n body: Record<string, string>;\n} | null {\n if (error instanceof DraftCommitValidationError) {\n return { status: 400, body: { error: error.message } };\n }\n if (error instanceof DraftCommitConflictError) {\n return {\n status: 409,\n body: {\n error: error.message,\n code: error.code,\n currentHeadSha: error.currentHeadSha,\n },\n };\n }\n if (isProjectGitProviderError(error)) {\n return {\n status: 503,\n body: { error: \"Project git provider is unavailable\" },\n };\n }\n return null;\n}\n","import {\n isProjectGitProviderError,\n managedDraftBranch,\n ProjectGitProviderError,\n type ProjectGitProviderPlugin,\n type ProjectGitRepository,\n} from \"@keystrokehq/project-git\";\n\n/** Brief retries for Code.Storage read-after-write lag on a just-pushed draft pin. */\nconst COMMIT_LOOKUP_ATTEMPTS = 4;\nconst COMMIT_LOOKUP_BASE_DELAY_MS = 150;\n\nexport class ManagedDeployError extends Error {\n readonly status: 400 | 404 | 409 | 503;\n\n constructor(message: string, status: 400 | 404 | 409 | 503) {\n super(message);\n this.name = \"ManagedDeployError\";\n this.status = status;\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nasync function getCommitWithLagRetry(input: {\n provider: ProjectGitProviderPlugin;\n repository: ProjectGitRepository;\n commitSha: string;\n}): Promise<{ parentShas: string[] }> {\n let lastError: unknown;\n for (let attempt = 0; attempt < COMMIT_LOOKUP_ATTEMPTS; attempt += 1) {\n try {\n return await input.provider.getCommit({\n repository: input.repository,\n commitSha: input.commitSha,\n });\n } catch (error) {\n lastError = error;\n const retryable =\n isProjectGitProviderError(error) &&\n (error.code === \"not_found\" || error.code === \"provider_unavailable\" || error.retryable);\n if (!retryable || attempt >= COMMIT_LOOKUP_ATTEMPTS - 1) {\n throw error;\n }\n await sleep(COMMIT_LOOKUP_BASE_DELAY_MS * 2 ** attempt);\n }\n }\n throw lastError;\n}\n\nasync function isCommitAncestor(input: {\n provider: ProjectGitProviderPlugin;\n repository: ProjectGitRepository;\n ancestorSha: string;\n descendantSha: string;\n}): Promise<boolean> {\n const ancestor = input.ancestorSha.toLowerCase();\n const descendant = input.descendantSha.toLowerCase();\n if (ancestor === descendant) {\n return true;\n }\n\n const seen = new Set<string>();\n let queue = [descendant];\n for (let depth = 0; depth < 64 && queue.length > 0; depth += 1) {\n const next: string[] = [];\n for (const sha of queue) {\n if (sha === ancestor) {\n return true;\n }\n if (seen.has(sha)) {\n continue;\n }\n seen.add(sha);\n const commit = await getCommitWithLagRetry({\n provider: input.provider,\n repository: input.repository,\n commitSha: sha,\n });\n next.push(...commit.parentShas.map((parent) => parent.toLowerCase()));\n }\n queue = next;\n }\n return false;\n}\n\nfunction mapPinLookupError(error: unknown): never {\n if (isProjectGitProviderError(error) && error.code === \"not_found\") {\n throw new ManagedDeployError(\n \"Draft pin commit was not found in storage. Recompute and retry.\",\n 409,\n );\n }\n throw error;\n}\n\n/** Resolve live refs while tolerating brief read-after-write lag on ks/draft. */\nexport async function validateManagedDeployPins(input: {\n provider: ProjectGitProviderPlugin;\n repository: ProjectGitRepository;\n mainSha: string;\n draftSha: string;\n}): Promise<void> {\n const [main, draft] = await Promise.all([\n input.provider.resolveRef({ repository: input.repository, branch: \"main\" }),\n input.provider.resolveRef({ repository: input.repository, branch: managedDraftBranch() }),\n ]);\n if (!main?.sha || main.sha.toLowerCase() !== input.mainSha.toLowerCase()) {\n throw new ManagedDeployError(\"Main pin is stale; main moved. Recompute and retry.\", 409);\n }\n if (!draft?.sha) {\n throw new ManagedDeployError(\"Managed repository draft branch is missing\", 409);\n }\n if (draft.sha.toLowerCase() === input.draftSha.toLowerCase()) {\n return;\n }\n try {\n if (\n await isCommitAncestor({\n provider: input.provider,\n repository: input.repository,\n ancestorSha: draft.sha,\n descendantSha: input.draftSha,\n })\n ) {\n return;\n }\n } catch (error) {\n mapPinLookupError(error);\n }\n throw new ManagedDeployError(\"Draft pin is stale; draft moved. Recompute and retry.\", 409);\n}\n\n/** Fast-forward main to the healthy candidate. Never force. */\nexport async function promoteManagedDeployMain(input: {\n provider: ProjectGitProviderPlugin;\n repository: ProjectGitRepository;\n candidateRef: string;\n candidateEphemeral: boolean;\n candidateSha: string;\n baseMainSha: string;\n}): Promise<{ result: \"fast_forward\" | \"no_op\" | \"already_promoted\"; mainSha: string }> {\n const main = await input.provider.resolveRef({\n repository: input.repository,\n branch: \"main\",\n });\n if (!main) {\n throw new ManagedDeployError(\"Managed repository main branch is missing\", 409);\n }\n if (main.sha === input.candidateSha) {\n return { result: \"already_promoted\", mainSha: main.sha };\n }\n if (main.sha !== input.baseMainSha) {\n throw new ManagedDeployError(\"Main moved since this deploy started. Rebuild and retry.\", 409);\n }\n try {\n const merged = await input.provider.mergeRefs({\n repository: input.repository,\n sourceBranch: input.candidateRef,\n sourceEphemeral: input.candidateEphemeral,\n targetBranch: \"main\",\n expectedTargetSha: input.baseMainSha,\n strategy: \"ff_only\",\n });\n return {\n result: merged.result === \"no_op\" ? \"no_op\" : \"fast_forward\",\n mainSha: merged.sha,\n };\n } catch (error) {\n const currentMain = await input.provider\n .resolveRef({ repository: input.repository, branch: \"main\" })\n .catch(() => undefined);\n if (currentMain?.sha === input.candidateSha) {\n return { result: \"already_promoted\", mainSha: currentMain.sha };\n }\n if (error instanceof ProjectGitProviderError && error.code === \"conflict\") {\n throw new ManagedDeployError(\"Main moved since this deploy started. Rebuild and retry.\", 409);\n }\n throw error;\n }\n}\n\nexport async function deleteManagedDeployCandidateBestEffort(input: {\n provider: ProjectGitProviderPlugin;\n repository: ProjectGitRepository;\n candidateRef: string;\n candidateEphemeral: boolean;\n}): Promise<void> {\n try {\n await input.provider.deleteBranch({\n repository: input.repository,\n branch: input.candidateRef,\n ephemeral: input.candidateEphemeral,\n });\n } catch {\n // Best-effort cleanup after success or failure.\n }\n}\n","import { createHash, randomUUID } from \"node:crypto\";\n\nimport {\n cancelProjectDeploy,\n completeProjectArtifactUnderDeployLease,\n createOrgStorageClient,\n deleteProjectArtifactIfUnreferenced,\n DeployLeaseLostError,\n insertProjectArtifact,\n refreshProjectDeployLease,\n releaseProjectDeployLease,\n selectOrganizationById,\n selectProjectById,\n selectProjectArtifactForProject,\n transitionProjectArtifactProtocolState,\n tryAcquireProjectDeployLease,\n updateProjectArtifactCandidate,\n updateProjectArtifactProtocolState,\n type ProjectArtifactRow,\n type ProjectRow,\n} from \"@keystrokehq/platform-database\";\nimport {\n managedDeployCandidateBranch,\n type GitCommitTreeEntry,\n type ProjectGitProviderPlugin,\n type ProjectGitRepository,\n} from \"@keystrokehq/project-git\";\nimport { enqueueProjectRuntime } from \"@keystrokehq/projects\";\nimport {\n mapProject,\n mapProjectArtifact,\n parseStoredRouteManifest,\n type CancelManagedDeployRequest,\n type CancelManagedDeployResponse,\n type CompleteManagedDeployArtifactRequest,\n type CompleteManagedDeployArtifactResponse,\n type HeartbeatManagedDeployRequest,\n type HeartbeatManagedDeployResponse,\n type ManagedDeployCandidateOp,\n type ManagedDeployCandidateRecipe,\n type PrepareManagedDeployRequest,\n type PrepareManagedDeployResponse,\n type PublishManagedDeployCandidateRequest,\n type PublishManagedDeployCandidateResponse,\n type RenewManagedDeployUploadRequest,\n type RenewManagedDeployUploadResponse,\n} from \"@keystrokehq/shared\";\nimport {\n extractRouteManifestFromArtifact,\n isProjectArtifactIndexKey,\n isProjectArtifactTarballKey,\n projectArtifactIndexKey,\n projectModuleBlobKey,\n sha256Hex,\n} from \"@keystrokehq/storage\";\n\nimport {\n deleteManagedDeployCandidateBestEffort,\n ManagedDeployError,\n validateManagedDeployPins,\n} from \"./managed-deploy\";\n\nconst MODULE_BLOB_CONTENT_TYPE = \"application/octet-stream\";\nconst ARTIFACT_INDEX_CONTENT_TYPE = \"application/json\";\nconst DEFAULT_PRESIGN_TTL_SECONDS = 900;\nconst ARTIFACT_MAX_BYTES = 48 * 1_048_576;\n\ntype OrgStorage = ReturnType<typeof createOrgStorageClient>;\n\nasync function resolveCompleteRouteManifest(input: {\n storage: OrgStorage;\n projectId: string;\n artifact: ProjectArtifactRow;\n request: CompleteManagedDeployArtifactRequest;\n}): Promise<ReturnType<typeof parseStoredRouteManifest> | null> {\n // NEW modular complete — CAS index only; never write composed manifesto_json.\n if (\"index\" in input.request) {\n if (!isProjectArtifactIndexKey(input.artifact.storageKey)) {\n throw new ManagedDeployError(\"Artifact storage layout is not modular\", 409);\n }\n const totalBytes = input.request.index.files.reduce((sum, file) => sum + file.size, 0);\n if (totalBytes <= 0 || totalBytes > ARTIFACT_MAX_BYTES) {\n throw new ManagedDeployError(\n `Artifact exceeds maximum size of ${ARTIFACT_MAX_BYTES} bytes`,\n 400,\n );\n }\n await Promise.all(\n input.request.index.files.map(async (file) => {\n const bytes = await input.storage.getObject(\n projectModuleBlobKey(input.projectId, file.hash),\n );\n if (!bytes || bytes.byteLength !== file.size) {\n throw new ManagedDeployError(\n `Missing or incomplete module blob for ${file.path} (${file.hash})`,\n 400,\n );\n }\n const checksum = sha256Hex(bytes);\n if (checksum !== file.hash.toLowerCase()) {\n throw new ManagedDeployError(\n `Module blob checksum mismatch for ${file.path} (${file.hash})`,\n 400,\n );\n }\n }),\n );\n await input.storage.putObject({\n key: input.artifact.storageKey,\n body: Buffer.from(`${JSON.stringify(input.request.index)}\\n`, \"utf8\"),\n contentType: ARTIFACT_INDEX_CONTENT_TYPE,\n });\n // Dual-read consumers load shards from CAS; DB manifesto_json stays null.\n return null;\n }\n\n // LEGACY forever — complete for artifacts whose storage_key is still `.tgz`.\n // Customers with pre-modular deploys must keep completing/promoting without a format migration.\n if (!isProjectArtifactTarballKey(input.artifact.storageKey)) {\n throw new ManagedDeployError(\"Legacy tarball complete requires a .tgz storage key\", 409);\n }\n if (input.request.sizeBytes > ARTIFACT_MAX_BYTES) {\n throw new ManagedDeployError(\n `Artifact exceeds maximum size of ${ARTIFACT_MAX_BYTES} bytes`,\n 400,\n );\n }\n const head = await input.storage.headObject(input.artifact.storageKey);\n if (!head || head.contentLength !== input.request.sizeBytes) {\n throw new ManagedDeployError(\"Uploaded artifact size does not match declaration\", 400);\n }\n const artifactBytes = await input.storage.getObject(input.artifact.storageKey);\n if (\n !artifactBytes ||\n artifactBytes.byteLength <= 0 ||\n artifactBytes.byteLength > ARTIFACT_MAX_BYTES\n ) {\n throw new ManagedDeployError(\"Artifact upload is missing or exceeds the maximum size\", 400);\n }\n const checksum = createHash(\"sha256\").update(artifactBytes).digest(\"hex\");\n if (checksum !== input.request.checksumSha256.toLowerCase()) {\n throw new ManagedDeployError(\"Artifact checksum mismatch\", 400);\n }\n try {\n return parseStoredRouteManifest(extractRouteManifestFromArtifact(Buffer.from(artifactBytes)));\n } catch (error) {\n throw new ManagedDeployError(\n error instanceof Error ? error.message : \"Failed to extract route manifest from artifact\",\n 400,\n );\n }\n}\n\nfunction sortOps(ops: readonly ManagedDeployCandidateOp[]): ManagedDeployCandidateOp[] {\n return [...ops].sort((left, right) => {\n const byPath = left.path.localeCompare(right.path);\n return byPath !== 0 ? byPath : left.op.localeCompare(right.op);\n });\n}\n\nfunction canonicalizeOps(ops: readonly ManagedDeployCandidateOp[]): string {\n return JSON.stringify(sortOps(ops).map(({ path, op }) => ({ path, op })));\n}\n\nexport function candidateOperationsMatch(\n left: readonly ManagedDeployCandidateOp[],\n right: readonly ManagedDeployCandidateOp[],\n): boolean {\n return canonicalizeOps(left) === canonicalizeOps(right);\n}\n\nasync function requireDeployLease(projectId: string, artifactId: string): Promise<ProjectRow> {\n const refreshed = await refreshProjectDeployLease({ projectId, artifactId });\n if (!refreshed.refreshed) {\n throw new ManagedDeployError(\"Deploy lease expired or was lost\", 409);\n }\n return refreshed.project;\n}\n\nfunction recipeToTreeEntries(recipe: ManagedDeployCandidateRecipe): GitCommitTreeEntry[] {\n return recipe.entries.map((entry) => {\n if (entry.op === \"delete\") {\n return { path: entry.path, mode: \"100644\", type: \"blob\", sha: null };\n }\n if (entry.mode == null || entry.blobSha == null) {\n throw new ManagedDeployError(`Recipe upsert for ${entry.path} is missing mode/blobSha`, 400);\n }\n return {\n path: entry.path,\n mode: entry.mode,\n type: \"blob\" as const,\n sha: entry.blobSha,\n };\n });\n}\n\nasync function deleteArtifactResources(input: {\n provider: ProjectGitProviderPlugin;\n repository: ProjectGitRepository;\n organizationId: string;\n artifact: ProjectArtifactRow;\n}): Promise<void> {\n if (input.artifact.candidateRef) {\n await deleteManagedDeployCandidateBestEffort({\n provider: input.provider,\n repository: input.repository,\n candidateRef: input.artifact.candidateRef,\n candidateEphemeral: input.artifact.candidateEphemeral ?? false,\n });\n }\n const organization = await selectOrganizationById(input.organizationId);\n if (organization) {\n await createOrgStorageClient(organization)\n .deleteObject(input.artifact.storageKey)\n .catch(() => undefined);\n }\n await deleteProjectArtifactIfUnreferenced({\n artifactId: input.artifact.id,\n projectId: input.artifact.projectId,\n }).catch(() => false);\n}\n\nasync function cleanupReclaimedArtifact(input: {\n provider: ProjectGitProviderPlugin;\n repository: ProjectGitRepository;\n organizationId: string;\n projectId: string;\n artifactId: string | null;\n}): Promise<void> {\n if (!input.artifactId) {\n return;\n }\n const artifact = await selectProjectArtifactForProject(input.artifactId, input.projectId);\n if (!artifact) {\n return;\n }\n await updateProjectArtifactProtocolState({\n artifactId: artifact.id,\n projectId: input.projectId,\n protocolState: \"abandoned\",\n }).catch(() => undefined);\n await deleteArtifactResources({ ...input, artifact });\n}\n\nexport async function prepareManagedDeploy(input: {\n provider: ProjectGitProviderPlugin;\n repository: ProjectGitRepository;\n sourceRepositoryId: string;\n project: ProjectRow;\n organizationId: string;\n user: { id: string; name?: string | null; email?: string | null };\n request: PrepareManagedDeployRequest;\n}): Promise<PrepareManagedDeployResponse> {\n const artifactId = randomUUID();\n const candidateRef = managedDeployCandidateBranch(artifactId);\n const candidateEphemeral = input.provider.name === \"code_storage\";\n const publishMode = input.provider.name === \"code_storage\" ? \"git_push\" : \"recipe\";\n // NEW modular only — managed prepare always points storage_key at the artifact index.\n // LEGACY `.tgz` keys remain valid for already-deployed rows; new managed deploys do not write them.\n const storageKey = projectArtifactIndexKey(input.project.id, artifactId);\n const lease = await tryAcquireProjectDeployLease({\n projectId: input.project.id,\n artifactId,\n });\n if (!lease.acquired) {\n throw new ManagedDeployError(\"Another deploy is already in progress for this project\", 409);\n }\n\n let inserted: ProjectArtifactRow | undefined;\n try {\n await cleanupReclaimedArtifact({\n provider: input.provider,\n repository: input.repository,\n organizationId: input.organizationId,\n projectId: input.project.id,\n artifactId: lease.reclaimedArtifactId,\n });\n await validateManagedDeployPins({\n provider: input.provider,\n repository: input.repository,\n mainSha: input.request.mainSha,\n draftSha: input.request.draftSha,\n });\n inserted = await insertProjectArtifact({\n id: artifactId,\n projectId: input.project.id,\n storageKey,\n createdByUserId: input.user.id,\n sourceRepositoryId: input.sourceRepositoryId,\n sourceCommitSha: input.request.mainSha,\n baseMainSha: input.request.mainSha,\n baseDraftSha: input.request.draftSha,\n deployMode: input.request.mode,\n candidateOps:\n input.request.mode === \"filtered\" ? sortOps(input.request.candidateOps ?? []) : null,\n candidateRef,\n candidateEphemeral,\n protocolState: \"prepared\",\n });\n\n let candidateWriteRemote: PrepareManagedDeployResponse[\"candidateWriteRemote\"];\n if (publishMode === \"git_push\") {\n const remote = await input.provider.mintRemote({\n repository: input.repository,\n capability: \"candidate_write\",\n candidateRef,\n ephemeral: true,\n });\n candidateWriteRemote = {\n url: remote.url,\n username: remote.username,\n password: remote.password,\n expiresAt: remote.expiresAt.toISOString(),\n };\n }\n\n return {\n artifact: mapProjectArtifact(inserted),\n project: mapProject(input.project),\n mode: input.request.mode,\n mainSha: input.request.mainSha,\n draftSha: input.request.draftSha,\n candidateRef,\n candidateEphemeral,\n publishMode,\n ...(candidateWriteRemote ? { candidateWriteRemote } : {}),\n candidateOps: inserted.candidateOps,\n };\n } catch (error) {\n await releaseProjectDeployLease({ projectId: input.project.id, artifactId }).catch(\n () => undefined,\n );\n if (inserted) {\n await deleteArtifactResources({\n provider: input.provider,\n repository: input.repository,\n organizationId: input.organizationId,\n artifact: inserted,\n });\n }\n throw error;\n }\n}\n\nasync function verifyCandidateCommit(input: {\n provider: ProjectGitProviderPlugin;\n repository: ProjectGitRepository;\n candidateSha: string;\n mainSha: string;\n mode: \"full\" | \"filtered\";\n draftTreeSha?: string;\n candidateTreeSha?: string;\n}): Promise<void> {\n const commit = await input.provider.getCommit({\n repository: input.repository,\n commitSha: input.candidateSha,\n });\n if (commit.parentShas.length !== 1 || commit.parentShas[0] !== input.mainSha) {\n throw new ManagedDeployError(\n \"Candidate commit must have exactly one parent equal to pinned main\",\n 400,\n );\n }\n if (input.mode !== \"full\") {\n return;\n }\n const draftTreeSha = input.draftTreeSha?.toLowerCase();\n const candidateTreeSha = input.candidateTreeSha?.toLowerCase();\n if (!draftTreeSha || !candidateTreeSha || draftTreeSha !== candidateTreeSha) {\n throw new ManagedDeployError(\"Full candidate tree must equal the pinned draft tree\", 400);\n }\n if (commit.treeSha && commit.treeSha.toLowerCase() !== candidateTreeSha) {\n throw new ManagedDeployError(\"Candidate commit tree does not match its attestation\", 400);\n }\n}\n\nexport async function publishManagedDeployCandidate(input: {\n provider: ProjectGitProviderPlugin;\n repository: ProjectGitRepository;\n project: ProjectRow;\n user: { id: string; name?: string | null; email?: string | null };\n request: PublishManagedDeployCandidateRequest;\n}): Promise<PublishManagedDeployCandidateResponse> {\n await requireDeployLease(input.project.id, input.request.artifactId);\n const artifact = await selectProjectArtifactForProject(\n input.request.artifactId,\n input.project.id,\n );\n if (!artifact) {\n throw new ManagedDeployError(\"Artifact not found\", 404);\n }\n if (\n artifact.protocolState === \"candidate_published\" &&\n artifact.sourceCommitSha &&\n artifact.candidateRef\n ) {\n return {\n artifactId: artifact.id,\n candidateSha: artifact.sourceCommitSha,\n candidateRef: artifact.candidateRef,\n candidateEphemeral: artifact.candidateEphemeral ?? false,\n };\n }\n if (artifact.protocolState !== \"prepared\") {\n throw new ManagedDeployError(\"Artifact is not awaiting candidate publication\", 409);\n }\n if (!artifact.baseMainSha || !artifact.baseDraftSha || !artifact.candidateRef) {\n throw new ManagedDeployError(\"Artifact is missing managed deploy provenance\", 400);\n }\n const mode = artifact.deployMode;\n if (mode !== \"full\" && mode !== \"filtered\") {\n throw new ManagedDeployError(\"Artifact is missing managed deploy mode\", 400);\n }\n const recipe = input.request.recipe;\n if (recipe) {\n if (\n recipe.parentSha !== artifact.baseMainSha ||\n recipe.draftSha !== artifact.baseDraftSha ||\n recipe.mode !== mode\n ) {\n throw new ManagedDeployError(\"Candidate recipe does not match prepared pins/mode\", 400);\n }\n }\n if (mode === \"filtered\") {\n const actualOps = recipe?.entries.map(({ path, op }) => ({ path, op })) ?? [];\n if (\n !artifact.candidateOps?.length ||\n !candidateOperationsMatch(artifact.candidateOps, actualOps)\n ) {\n throw new ManagedDeployError(\n \"Filtered candidate operations do not match the prepared transaction\",\n 400,\n );\n }\n }\n\n const publishMode = input.provider.name === \"code_storage\" ? \"git_push\" : \"recipe\";\n const candidateEphemeral = artifact.candidateEphemeral ?? input.provider.name === \"code_storage\";\n let candidateSha: string;\n if (publishMode === \"recipe\") {\n if (!recipe) {\n throw new ManagedDeployError(\"GitHub candidate publication requires a recipe\", 400);\n }\n const author = {\n name: input.user.name || input.user.email || \"Keystroke deploy\",\n email: input.user.email || \"noreply@keystroke.dev\",\n };\n const created =\n mode === \"full\"\n ? await input.provider.createCommitFromTree({\n repository: input.repository,\n branch: artifact.candidateRef,\n message: `keystroke deploy candidate ${artifact.id}`,\n author,\n parentSha: artifact.baseMainSha,\n treeSha: recipe.treeSha,\n ephemeral: candidateEphemeral,\n baseBranch: \"main\",\n })\n : await input.provider.createCommitFromTree({\n repository: input.repository,\n branch: artifact.candidateRef,\n message: `keystroke deploy candidate ${artifact.id}`,\n author,\n parentSha: artifact.baseMainSha,\n treeEntries: recipeToTreeEntries(recipe),\n ephemeral: candidateEphemeral,\n baseBranch: \"main\",\n });\n candidateSha = created.sha;\n } else {\n if (!input.request.candidateSha) {\n throw new ManagedDeployError(\"git_push publication requires candidateSha\", 400);\n }\n candidateSha = input.request.candidateSha.toLowerCase();\n }\n\n await verifyCandidateCommit({\n provider: input.provider,\n repository: input.repository,\n candidateSha,\n mainSha: artifact.baseMainSha,\n mode,\n draftTreeSha:\n input.request.draftTreeSha ?? (mode === \"full\" ? input.request.recipe?.treeSha : undefined),\n candidateTreeSha:\n input.request.candidateTreeSha ??\n (mode === \"full\" ? input.request.recipe?.treeSha : undefined),\n });\n try {\n await updateProjectArtifactCandidate({\n artifactId: artifact.id,\n projectId: input.project.id,\n candidateRef: artifact.candidateRef,\n candidateEphemeral,\n sourceCommitSha: candidateSha,\n protocolState: \"candidate_published\",\n expectedProtocolState: \"prepared\",\n });\n } catch {\n throw new ManagedDeployError(\"Artifact is no longer publishable\", 409);\n }\n return {\n artifactId: artifact.id,\n candidateSha,\n candidateRef: artifact.candidateRef,\n candidateEphemeral,\n };\n}\n\nexport async function heartbeatManagedDeploy(input: {\n project: ProjectRow;\n request: HeartbeatManagedDeployRequest;\n}): Promise<HeartbeatManagedDeployResponse> {\n const project = await requireDeployLease(input.project.id, input.request.artifactId);\n if (!project.deployLeaseExpiresAt) {\n throw new ManagedDeployError(\"Deploy lease expiry is missing\", 409);\n }\n return { expiresAt: project.deployLeaseExpiresAt.toISOString() };\n}\n\nexport async function renewManagedDeployUpload(input: {\n project: ProjectRow;\n organizationId: string;\n request: RenewManagedDeployUploadRequest;\n}): Promise<RenewManagedDeployUploadResponse> {\n await requireDeployLease(input.project.id, input.request.artifactId);\n const organization = await selectOrganizationById(input.organizationId);\n if (!organization) {\n throw new ManagedDeployError(\"Organization not found\", 400);\n }\n const artifact = await selectProjectArtifactForProject(\n input.request.artifactId,\n input.project.id,\n );\n if (!artifact) {\n throw new ManagedDeployError(\"Artifact not found\", 404);\n }\n if (artifact.protocolState !== \"candidate_published\") {\n throw new ManagedDeployError(\"Artifact is not ready for upload\", 409);\n }\n if (!isProjectArtifactIndexKey(artifact.storageKey)) {\n throw new ManagedDeployError(\"Artifact storage layout is not modular\", 409);\n }\n\n const totalBytes = input.request.blobs.reduce((sum, blob) => sum + blob.size, 0);\n if (totalBytes > ARTIFACT_MAX_BYTES) {\n throw new ManagedDeployError(\n `Artifact exceeds maximum size of ${ARTIFACT_MAX_BYTES} bytes`,\n 400,\n );\n }\n\n const storage = createOrgStorageClient(organization);\n const hashes = [...new Set(input.request.blobs.map((blob) => blob.hash))];\n const uploads = await Promise.all(\n hashes.map(async (hash) => {\n const key = projectModuleBlobKey(input.project.id, hash);\n const head = await storage.headObject(key);\n if (head && head.contentLength > 0) {\n return null;\n }\n const url = await storage.presignPut({\n key,\n contentType: MODULE_BLOB_CONTENT_TYPE,\n expiresInSeconds: DEFAULT_PRESIGN_TTL_SECONDS,\n });\n return { hash, url };\n }),\n );\n\n return {\n uploads: uploads.filter((upload): upload is { hash: string; url: string } => upload !== null),\n expiresInSeconds: DEFAULT_PRESIGN_TTL_SECONDS,\n };\n}\n\nexport async function completeManagedDeployArtifact(input: {\n provider: ProjectGitProviderPlugin;\n repository: ProjectGitRepository;\n project: ProjectRow;\n organizationId: string;\n request: CompleteManagedDeployArtifactRequest;\n}): Promise<CompleteManagedDeployArtifactResponse> {\n const organization = await selectOrganizationById(input.organizationId);\n if (!organization) {\n throw new ManagedDeployError(\"Organization not found\", 400);\n }\n const artifact = await selectProjectArtifactForProject(\n input.request.artifactId,\n input.project.id,\n );\n if (!artifact) {\n throw new ManagedDeployError(\"Artifact not found\", 404);\n }\n const currentProject = (await selectProjectById(input.project.id)) ?? input.project;\n const alreadyCompleted =\n artifact.status === \"ready\" &&\n ([\"completed\", \"promoting\", \"active\"].includes(artifact.protocolState ?? \"\") ||\n currentProject.activeArtifactId === artifact.id);\n if (alreadyCompleted) {\n if (!artifact.sourceCommitSha || !artifact.deployMode) {\n throw new ManagedDeployError(\"Artifact is missing candidate provenance\", 400);\n }\n return {\n artifact: mapProjectArtifact(artifact),\n project: mapProject(currentProject),\n candidateSha: artifact.sourceCommitSha,\n mode: artifact.deployMode,\n };\n }\n if (![\"candidate_published\", \"staged\"].includes(artifact.protocolState ?? \"\")) {\n throw new ManagedDeployError(\"Artifact candidate must be published before complete\", 409);\n }\n if (!artifact.sourceCommitSha || !artifact.candidateRef || !artifact.deployMode) {\n throw new ManagedDeployError(\"Artifact is missing candidate provenance\", 400);\n }\n const alreadyStaged =\n artifact.status === \"ready\" && currentProject.pendingArtifactId === artifact.id;\n if (artifact.protocolState === \"staged\" && !alreadyStaged) {\n throw new ManagedDeployError(\"Staged deploy no longer owns the pending slot\", 409);\n }\n if (!alreadyStaged) {\n await requireDeployLease(input.project.id, artifact.id);\n }\n\n const storage = createOrgStorageClient(organization);\n const routeManifest = await resolveCompleteRouteManifest({\n storage,\n projectId: input.project.id,\n artifact,\n request: input.request,\n });\n\n let completed = alreadyStaged ? { artifact, project: currentProject } : undefined;\n if (!completed) {\n try {\n completed = await completeProjectArtifactUnderDeployLease({\n artifactId: artifact.id,\n projectId: input.project.id,\n manifestJson: routeManifest,\n });\n } catch (error) {\n if (error instanceof DeployLeaseLostError) {\n throw new ManagedDeployError(\"Deploy lease expired or was lost before staging\", 409);\n }\n throw error;\n }\n }\n if (artifact.protocolState === \"candidate_published\") {\n const staged = await transitionProjectArtifactProtocolState({\n artifactId: artifact.id,\n projectId: input.project.id,\n from: [\"candidate_published\"],\n to: \"staged\",\n });\n if (!staged) {\n throw new ManagedDeployError(\"Deploy was cancelled while staging\", 409);\n }\n }\n await enqueueProjectRuntime({\n projectId: input.project.id,\n name: input.project.name,\n artifactId: artifact.id,\n });\n const finalized = await transitionProjectArtifactProtocolState({\n artifactId: artifact.id,\n projectId: input.project.id,\n from: [\"staged\"],\n to: \"completed\",\n });\n if (!finalized) {\n const latest = await selectProjectArtifactForProject(artifact.id, input.project.id);\n if (!latest || ![\"completed\", \"promoting\", \"active\"].includes(latest.protocolState ?? \"\")) {\n throw new ManagedDeployError(\"Deploy was cancelled while completing\", 409);\n }\n }\n return {\n artifact: mapProjectArtifact(completed.artifact),\n project: mapProject(completed.project),\n candidateSha: artifact.sourceCommitSha,\n mode: artifact.deployMode,\n };\n}\n\nexport async function cancelManagedDeploy(input: {\n provider: ProjectGitProviderPlugin;\n repository: ProjectGitRepository;\n project: ProjectRow;\n organizationId: string;\n request: CancelManagedDeployRequest;\n}): Promise<CancelManagedDeployResponse> {\n const artifact = await selectProjectArtifactForProject(\n input.request.artifactId,\n input.project.id,\n );\n if (!artifact) {\n return { cancelled: true };\n }\n if (input.project.activeArtifactId === artifact.id) {\n throw new ManagedDeployError(\"Cannot cancel the active deploy\", 409);\n }\n if (artifact.protocolState === \"cancelled\") {\n return { cancelled: true };\n }\n const claimed = await transitionProjectArtifactProtocolState({\n artifactId: artifact.id,\n projectId: input.project.id,\n from: [\"prepared\", \"candidate_published\", \"staged\", \"completed\"],\n to: \"cancelled\",\n });\n if (!claimed) {\n const [currentArtifact, currentProject] = await Promise.all([\n selectProjectArtifactForProject(artifact.id, input.project.id),\n selectProjectById(input.project.id),\n ]);\n if (currentArtifact?.protocolState === \"cancelled\") {\n return { cancelled: true };\n }\n if (\n currentProject?.activeArtifactId === artifact.id ||\n [\"promoting\", \"active\"].includes(currentArtifact?.protocolState ?? \"\")\n ) {\n throw new ManagedDeployError(\"Cannot cancel a deploy after promotion has started\", 409);\n }\n throw new ManagedDeployError(\"Deploy is no longer cancellable\", 409);\n }\n const cancelledProject = await cancelProjectDeploy({\n projectId: input.project.id,\n artifactId: artifact.id,\n }).catch(() => undefined);\n if (!cancelledProject) {\n const currentProject = await selectProjectById(input.project.id);\n if (currentProject?.activeArtifactId === artifact.id) {\n throw new ManagedDeployError(\"Cannot cancel the active deploy\", 409);\n }\n }\n await releaseProjectDeployLease({\n projectId: input.project.id,\n artifactId: artifact.id,\n }).catch(() => undefined);\n await deleteArtifactResources({\n provider: input.provider,\n repository: input.repository,\n organizationId: input.organizationId,\n artifact,\n });\n return { cancelled: true };\n}\n","import type { Context, MiddlewareHandler } from \"hono\";\nimport { verifyOrgWorkerToken } from \"@keystrokehq/hosting\";\n\nexport type WorkerTokenVariables = {\n workerOrganizationId: string;\n};\n\n/** Worker auth from Bearer or x-api-key (Anthropic SDK uses the latter). */\nexport function readWorkerTokenFromRequest(c: Context): string | undefined {\n const authorization = c.req.header(\"authorization\");\n if (authorization?.startsWith(\"Bearer \")) {\n return authorization.slice(\"Bearer \".length).trim();\n }\n\n const apiKey = c.req.header(\"x-api-key\")?.trim();\n if (apiKey) {\n return apiKey;\n }\n\n return undefined;\n}\n\n/**\n * Verifies the per-org worker token (`{orgId}.{hmac}` signed with the shared\n * platform secret) and records which org the calling machine belongs to.\n */\nexport function requireWorkerToken(secret: string | undefined): MiddlewareHandler {\n return async (c, next) => {\n if (!secret) {\n return c.json(\n { error: \"worker_auth_unconfigured\", message: \"Worker auth is not configured.\" },\n 503,\n );\n }\n\n const token = readWorkerTokenFromRequest(c);\n const verified = verifyOrgWorkerToken(secret, token);\n if (!verified) {\n return c.json({ error: \"unauthorized\", message: \"Invalid worker token.\" }, 401);\n }\n\n c.set(\"workerOrganizationId\", verified.organizationId);\n return next();\n };\n}\n\n/** Organization id bound to the verified worker token, if present. */\nexport function workerOrganizationIdFromContext(c: Context): string | undefined {\n const value = c.get(\"workerOrganizationId\");\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n","import {\n runWithProjectDatabase,\n runWithProjectScope,\n runWithTenantScope,\n} from \"@keystrokehq/database\";\nimport {\n resolveOrgProjectDatabaseOptions,\n runWithOrganizationScope,\n selectOrganizationById,\n selectProjectById,\n} from \"@keystrokehq/platform-database\";\n\nexport async function withProjectScope<T>(\n projectId: string,\n fn: (ctx: { organizationId: string; projectId: string }) => Promise<T>,\n): Promise<T | undefined> {\n const project = await selectProjectById(projectId);\n if (!project) {\n return undefined;\n }\n\n const organization = await selectOrganizationById(project.organizationId);\n if (!organization) {\n return undefined;\n }\n\n const dbOptions = resolveOrgProjectDatabaseOptions(organization);\n let result: T | undefined;\n\n await runWithOrganizationScope(project.organizationId, () =>\n runWithProjectDatabase(dbOptions, () =>\n runWithProjectScope(project.id, () =>\n runWithTenantScope(project.organizationId, async () => {\n result = await fn({\n organizationId: project.organizationId,\n projectId: project.id,\n });\n }),\n ),\n ),\n );\n\n return result;\n}\n"],"mappings":"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"}
|