@rubytech/create-maxy-code 0.1.479 → 0.1.480

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/docs/superpowers/plans/2026-07-20-task-1829-platform-ui-typecheck.md +830 -0
  3. package/payload/platform/docs/superpowers/specs/2026-07-20-task-1829-platform-ui-typecheck-design.md +163 -0
  4. package/payload/platform/lib/storage-broker/dist/__tests__/cf-exec.test.js +155 -12
  5. package/payload/platform/lib/storage-broker/dist/__tests__/cf-exec.test.js.map +1 -1
  6. package/payload/platform/lib/storage-broker/dist/cf-exec.d.ts +3 -0
  7. package/payload/platform/lib/storage-broker/dist/cf-exec.d.ts.map +1 -1
  8. package/payload/platform/lib/storage-broker/dist/cf-exec.js +68 -28
  9. package/payload/platform/lib/storage-broker/dist/cf-exec.js.map +1 -1
  10. package/payload/platform/lib/storage-broker/src/__tests__/cf-exec.test.ts +194 -16
  11. package/payload/platform/lib/storage-broker/src/cf-exec.ts +74 -29
  12. package/payload/platform/plugins/outlook/mcp/dist/__tests__/device-flow.test.js +41 -1
  13. package/payload/platform/plugins/outlook/mcp/dist/__tests__/device-flow.test.js.map +1 -1
  14. package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client.test.js +249 -2
  15. package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client.test.js.map +1 -1
  16. package/payload/platform/plugins/outlook/mcp/dist/__tests__/token-store.test.js +127 -3
  17. package/payload/platform/plugins/outlook/mcp/dist/__tests__/token-store.test.js.map +1 -1
  18. package/payload/platform/plugins/outlook/mcp/dist/auth/device-flow.d.ts +17 -0
  19. package/payload/platform/plugins/outlook/mcp/dist/auth/device-flow.d.ts.map +1 -1
  20. package/payload/platform/plugins/outlook/mcp/dist/auth/device-flow.js +26 -1
  21. package/payload/platform/plugins/outlook/mcp/dist/auth/device-flow.js.map +1 -1
  22. package/payload/platform/plugins/outlook/mcp/dist/auth/token-store.d.ts +37 -1
  23. package/payload/platform/plugins/outlook/mcp/dist/auth/token-store.d.ts.map +1 -1
  24. package/payload/platform/plugins/outlook/mcp/dist/auth/token-store.js +126 -5
  25. package/payload/platform/plugins/outlook/mcp/dist/auth/token-store.js.map +1 -1
  26. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.d.ts +18 -0
  27. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.d.ts.map +1 -1
  28. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js +123 -18
  29. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js.map +1 -1
  30. package/payload/platform/plugins/outlook/references/auth.md +45 -2
  31. package/payload/server/{chunk-3XLLTG6R.js → chunk-REWXLAPC.js} +30 -10
  32. package/payload/server/package.json +1 -1
  33. package/payload/server/public/activity.html +6 -7
  34. package/payload/server/public/assets/{AdminLoginScreens-DkxQZnvB.js → AdminLoginScreens-DXYJWXaX.js} +1 -1
  35. package/payload/server/public/assets/AdminShell-UDgNN4CA.js +2 -0
  36. package/payload/server/public/assets/{Checkbox-CsTWK8mm.js → Checkbox-C08Ulc_a.js} +1 -1
  37. package/payload/server/public/assets/activity-06gsRDVv.js +1 -0
  38. package/payload/server/public/assets/admin-BhiHyORH.js +1 -0
  39. package/payload/server/public/assets/{arc-BrHWN2Kr.js → arc-BHXuzTwg.js} +1 -1
  40. package/payload/server/public/assets/architecture-YZFGNWBL-Ct5q6ks1.js +1 -0
  41. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-Clt9NOr0.js → architectureDiagram-Q4EWVU46-DsN_vxau.js} +1 -1
  42. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-BOe_jmXi.js → blockDiagram-DXYQGD6D-CvNat1uB.js} +1 -1
  43. package/payload/server/public/assets/browser-Cz4IKS47.js +1 -0
  44. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-B64FaKMV.js → c4Diagram-AHTNJAMY-E9yqTPTW.js} +1 -1
  45. package/payload/server/public/assets/calendar-D0xtNqH8.js +1 -0
  46. package/payload/server/public/assets/channel-PE9vBKEQ.js +1 -0
  47. package/payload/server/public/assets/chat-DwLJ830n.js +1 -0
  48. package/payload/server/public/assets/chevron-left-Cv-TFuEf.js +1 -0
  49. package/payload/server/public/assets/{chunk-2KRD3SAO-BGAUfWvM.js → chunk-2KRD3SAO-DpzI_0EY.js} +1 -1
  50. package/payload/server/public/assets/{chunk-336JU56O-PFi6uQZ0.js → chunk-336JU56O-eR_I9Eu4.js} +2 -2
  51. package/payload/server/public/assets/chunk-426QAEUC-BDNZtJsz.js +1 -0
  52. package/payload/server/public/assets/{chunk-4BX2VUAB-CkxXXCiF.js → chunk-4BX2VUAB-D-6xk1t8.js} +1 -1
  53. package/payload/server/public/assets/{chunk-4TB4RGXK-B-7tN4IA.js → chunk-4TB4RGXK-BkqUcFpL.js} +1 -1
  54. package/payload/server/public/assets/{chunk-55IACEB6-CBkNmqrt.js → chunk-55IACEB6-ChCl2pSP.js} +1 -1
  55. package/payload/server/public/assets/{chunk-5FUZZQ4R-wa9ujn7i.js → chunk-5FUZZQ4R-DasGsg54.js} +1 -1
  56. package/payload/server/public/assets/{chunk-5PVQY5BW-DIk-xBaE.js → chunk-5PVQY5BW-DXlHUX1h.js} +1 -1
  57. package/payload/server/public/assets/{chunk-67CJDMHE-BbMV1lgW.js → chunk-67CJDMHE-BZfVpTsE.js} +1 -1
  58. package/payload/server/public/assets/{chunk-7N4EOEYR-C49Mv-nQ.js → chunk-7N4EOEYR-C6U5TIgT.js} +1 -1
  59. package/payload/server/public/assets/{chunk-AA7GKIK3-Dy_pJOp_.js → chunk-AA7GKIK3-CA7cVDmw.js} +1 -1
  60. package/payload/server/public/assets/{chunk-BSJP7CBP-Ce-OmPqn.js → chunk-BSJP7CBP-DxN2GC3p.js} +1 -1
  61. package/payload/server/public/assets/{chunk-CIAEETIT-tnjq-APC.js → chunk-CIAEETIT-C0-4wA8y.js} +1 -1
  62. package/payload/server/public/assets/{chunk-EDXVE4YY-Bvv_deZ2.js → chunk-EDXVE4YY--kyb1rLc.js} +1 -1
  63. package/payload/server/public/assets/{chunk-ENJZ2VHE-CmxCPKyU.js → chunk-ENJZ2VHE-FBN6hR7V.js} +1 -1
  64. package/payload/server/public/assets/{chunk-FMBD7UC4-Top6y08S.js → chunk-FMBD7UC4-Lpge4M5g.js} +1 -1
  65. package/payload/server/public/assets/{chunk-FOC6F5B3-B9LPNCUS.js → chunk-FOC6F5B3-CM1rwOou.js} +1 -1
  66. package/payload/server/public/assets/{chunk-ICPOFSXX-Bi-_c351.js → chunk-ICPOFSXX-JdYLY3yu.js} +2 -2
  67. package/payload/server/public/assets/{chunk-K5T4RW27-DAnRM04h.js → chunk-K5T4RW27-DCUblGBr.js} +1 -1
  68. package/payload/server/public/assets/{chunk-KGLVRYIC-C0QYcbLe.js → chunk-KGLVRYIC-BP_cide2.js} +1 -1
  69. package/payload/server/public/assets/{chunk-LIHQZDEY-BjvA5ykt.js → chunk-LIHQZDEY-DjMa1lOl.js} +1 -1
  70. package/payload/server/public/assets/{chunk-ORNJ4GCN-Cs46Gj7z.js → chunk-ORNJ4GCN-D51eJAoV.js} +1 -1
  71. package/payload/server/public/assets/{chunk-OYMX7WX6-BBpimab5.js → chunk-OYMX7WX6-4hWIO544.js} +1 -1
  72. package/payload/server/public/assets/chunk-QZHKN3VN-B_Hris8x.js +1 -0
  73. package/payload/server/public/assets/{chunk-U2HBQHQK-CQUSBHoK.js → chunk-U2HBQHQK-BwdQf9cS.js} +1 -1
  74. package/payload/server/public/assets/{chunk-X2U36JSP-Dm8TevG0.js → chunk-X2U36JSP-DmDxwLOg.js} +1 -1
  75. package/payload/server/public/assets/{chunk-XPW4576I-B10QuxYb.js → chunk-XPW4576I-JQyAB7ND.js} +1 -1
  76. package/payload/server/public/assets/{chunk-YZCP3GAM-vaGsu4Wk.js → chunk-YZCP3GAM-BonLdCzI.js} +1 -1
  77. package/payload/server/public/assets/{chunk-ZZ45TVLE-D1Qi22bL.js → chunk-ZZ45TVLE-BXKB2wSk.js} +1 -1
  78. package/payload/server/public/assets/classDiagram-6PBFFD2Q-D8Q05iMI.js +1 -0
  79. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-Dm3hAxfm.js +1 -0
  80. package/payload/server/public/assets/clone-C-wOwvpY.js +1 -0
  81. package/payload/server/public/assets/{cose-bilkent-S5V4N54A-CRDvLRXs.js → cose-bilkent-S5V4N54A-BDnd4Blw.js} +1 -1
  82. package/payload/server/public/assets/{dagre-CEmqJTt3.js → dagre-BmexzuER.js} +1 -1
  83. package/payload/server/public/assets/{dagre-KV5264BT-LXMTo7Fp.js → dagre-KV5264BT-D4WVuwPj.js} +1 -1
  84. package/payload/server/public/assets/data-DUDJfnjI.js +1 -0
  85. package/payload/server/public/assets/{diagram-5BDNPKRD-zyis6nPt.js → diagram-5BDNPKRD-Bbf4mT8a.js} +1 -1
  86. package/payload/server/public/assets/{diagram-G4DWMVQ6-BiU0XAAD.js → diagram-G4DWMVQ6-BpqVTUmx.js} +1 -1
  87. package/payload/server/public/assets/{diagram-MMDJMWI5-rGFiz1SX.js → diagram-MMDJMWI5-DY-k5k6r.js} +1 -1
  88. package/payload/server/public/assets/{diagram-TYMM5635-B0wak1ZJ.js → diagram-TYMM5635-CXHxwacS.js} +1 -1
  89. package/payload/server/public/assets/{erDiagram-SMLLAGMA-D8AUxLyX.js → erDiagram-SMLLAGMA-BNKEc3l8.js} +1 -1
  90. package/payload/server/public/assets/{flatten-naJ5PJ4f.js → flatten-jn8bZgcI.js} +1 -1
  91. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-BtdUf68b.js → flowDiagram-DWJPFMVM-CbAeuJsi.js} +1 -1
  92. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-C-lkzDmf.js → ganttDiagram-T4ZO3ILL-CeeNnL4l.js} +1 -1
  93. package/payload/server/public/assets/gitGraph-7Q5UKJZL-BBHsY16R.js +1 -0
  94. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-DRUKumq2.js → gitGraphDiagram-UUTBAWPF-DG8RCtfg.js} +1 -1
  95. package/payload/server/public/assets/{graph-CDSGRoeb.js → graph-BAoktBcx.js} +19 -19
  96. package/payload/server/public/assets/{graph-labels-C5qLwnWA.js → graph-labels-LeIhl7ZG.js} +1 -1
  97. package/payload/server/public/assets/{graphlib-zRsaoFEC.js → graphlib-BkDExPQi.js} +1 -1
  98. package/payload/server/public/assets/info-OMHHGYJF-C1j5I_zx.js +1 -0
  99. package/payload/server/public/assets/infoDiagram-42DDH7IO-ZWkwHWEu.js +2 -0
  100. package/payload/server/public/assets/{isEmpty-Bnpg7b8f.js → isEmpty-Dkk6_L-B.js} +1 -1
  101. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-BguMgoR8.js → ishikawaDiagram-UXIWVN3A-D_iMHV64.js} +1 -1
  102. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-CXhyK1n-.js → journeyDiagram-VCZTEJTY-BvPRpulx.js} +1 -1
  103. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-C0UCWVx-.js → kanban-definition-6JOO6SKY-CkWaXWo2.js} +1 -1
  104. package/payload/server/public/assets/{line--uhS9YDE.js → line-BGQT9unx.js} +1 -1
  105. package/payload/server/public/assets/{linear-CAOWPodQ.js → linear-DzrYI8-8.js} +1 -1
  106. package/payload/server/public/assets/{maximize-2-CAzH8dED.js → maximize-2-2MgPSwlx.js} +1 -1
  107. package/payload/server/public/assets/{mermaid-parser.core-D6kPx7vc.js → mermaid-parser.core-DrMY7FMe.js} +2 -2
  108. package/payload/server/public/assets/{mermaid.core-CTd4DS6O.js → mermaid.core-BWdf6fZ7.js} +3 -3
  109. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-_AyvyG8C.js → mindmap-definition-QFDTVHPH-CgqM9h97.js} +1 -1
  110. package/payload/server/public/assets/operator-CZifmNhp.js +1 -0
  111. package/payload/server/public/assets/{ordinal-Wx4m9zHk.js → ordinal-DuJYM7p1.js} +1 -1
  112. package/payload/server/public/assets/packet-4T2RLAQJ-CGiTbe0N.js +1 -0
  113. package/payload/server/public/assets/{page-B5YngOrK.js → page-B4kllGd_.js} +6 -6
  114. package/payload/server/public/assets/page-DbfE7QwJ.js +1 -0
  115. package/payload/server/public/assets/{pdf-render-CeX6d2v7.js → pdf-render-riHufgrn.js} +1 -1
  116. package/payload/server/public/assets/pie-ZZUOXDRM-BrK023dE.js +1 -0
  117. package/payload/server/public/assets/{pieDiagram-DEJITSTG-6TsUDkkQ.js → pieDiagram-DEJITSTG-BeUGoYS7.js} +1 -1
  118. package/payload/server/public/assets/public-VtmyYz8E.js +1 -0
  119. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-CWw9gOI4.js → quadrantDiagram-34T5L4WZ-CX82WgKy.js} +1 -1
  120. package/payload/server/public/assets/radar-PYXPWWZC-p7NRamXX.js +1 -0
  121. package/payload/server/public/assets/{reduce-BUmc8RDR.js → reduce-COyotL2V.js} +1 -1
  122. package/payload/server/public/assets/{requirementDiagram-MS252O5E-DCOlxNvx.js → requirementDiagram-MS252O5E-CzqebQXj.js} +1 -1
  123. package/payload/server/public/assets/{rotate-ccw-UDln4Tou.js → rotate-ccw-DaZdB2cz.js} +1 -1
  124. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-CW4Xbir3.js → sankeyDiagram-XADWPNL6-CaHi1yzU.js} +1 -1
  125. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-vhb_pBLG.js → sequenceDiagram-FGHM5R23-BF2AeiKW.js} +1 -1
  126. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-Cb1WExEX.js → stateDiagram-FHFEXIEX-DtUCA8Ih.js} +1 -1
  127. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-a4FvB3L8.js +1 -0
  128. package/payload/server/public/assets/tasks-CvqVDbfO.js +1 -0
  129. package/payload/server/public/assets/{time-entry-format-DPOBIE18.js → time-entry-format-TD-PPEIu.js} +1 -1
  130. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-BAHTf_AF.js → timeline-definition-GMOUNBTQ-D3Q1YrKY.js} +1 -1
  131. package/payload/server/public/assets/treeView-SZITEDCU-CoWk8VoG.js +1 -0
  132. package/payload/server/public/assets/treemap-W4RFUUIX-BhWeGj8Y.js +1 -0
  133. package/payload/server/public/assets/{triangle-alert-Dz-CZKo5.js → triangle-alert-BaLhVNnn.js} +1 -1
  134. package/payload/server/public/assets/useCopyFeedback-BhjPzRa3.js +1 -0
  135. package/payload/server/public/assets/{useSubAccountSwitcher-BRIluIKf.css → useSubAccountSwitcher-CWRpVt1-.css} +1 -1
  136. package/payload/server/public/assets/{useSubAccountSwitcher-v8LyBzZN.js → useSubAccountSwitcher-HEVLb6Z9.js} +2 -2
  137. package/payload/server/public/assets/useVoiceRecorder-CfGgj3vm.js +2 -0
  138. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-DtEttvW4.js → vennDiagram-DHZGUBPP-DnjzQDGf.js} +1 -1
  139. package/payload/server/public/assets/wardley-RL74JXVD-C0q3Hqng.js +1 -0
  140. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-K06y6CVJ.js → wardleyDiagram-NUSXRM2D-T3WHrUvi.js} +1 -1
  141. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-D66c40lp.js → xychartDiagram-5P7HB3ND-2Efyv4h2.js} +1 -1
  142. package/payload/server/public/browser.html +4 -5
  143. package/payload/server/public/calendar.html +5 -6
  144. package/payload/server/public/chat.html +12 -13
  145. package/payload/server/public/data.html +11 -12
  146. package/payload/server/public/graph.html +10 -11
  147. package/payload/server/public/index.html +14 -15
  148. package/payload/server/public/operator.html +14 -15
  149. package/payload/server/public/public.html +12 -13
  150. package/payload/server/public/tasks.html +6 -5
  151. package/payload/server/server.js +93 -24
  152. package/payload/server/{src-XQ63FPRE.js → src-JJ6PHO5I.js} +1 -1
  153. package/payload/server/public/assets/AdminShell-Cv_nIFGe.js +0 -2
  154. package/payload/server/public/assets/activity-BbnTiVBT.js +0 -1
  155. package/payload/server/public/assets/admin-BZY3i_Ff.js +0 -1
  156. package/payload/server/public/assets/architecture-YZFGNWBL-CZQzGRSM.js +0 -1
  157. package/payload/server/public/assets/browser-BbIiSFKr.js +0 -1
  158. package/payload/server/public/assets/calendar-BvxeTHvQ.js +0 -1
  159. package/payload/server/public/assets/channel-zDUAN9Ks.js +0 -1
  160. package/payload/server/public/assets/chat-DUKxufRk.js +0 -1
  161. package/payload/server/public/assets/chevron-left-BtfJD6LL.js +0 -1
  162. package/payload/server/public/assets/chunk-426QAEUC-iJnqNRug.js +0 -1
  163. package/payload/server/public/assets/chunk-QZHKN3VN-Qlc2PFAj.js +0 -1
  164. package/payload/server/public/assets/classDiagram-6PBFFD2Q-CFsKL52p.js +0 -1
  165. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BWBUUCiO.js +0 -1
  166. package/payload/server/public/assets/clone-h5XhkDUL.js +0 -1
  167. package/payload/server/public/assets/data-hl1wa-Ax.js +0 -1
  168. package/payload/server/public/assets/gitGraph-7Q5UKJZL-CBZPQJLj.js +0 -1
  169. package/payload/server/public/assets/info-OMHHGYJF-1vIoX-kP.js +0 -1
  170. package/payload/server/public/assets/infoDiagram-42DDH7IO-KHcXRaan.js +0 -2
  171. package/payload/server/public/assets/operator-BK7r8DAB.js +0 -1
  172. package/payload/server/public/assets/packet-4T2RLAQJ-CTU0gCGb.js +0 -1
  173. package/payload/server/public/assets/page-BsCS0Dmc.js +0 -1
  174. package/payload/server/public/assets/pie-ZZUOXDRM-D-EEHxhC.js +0 -1
  175. package/payload/server/public/assets/public-C1Pz-IBs.js +0 -1
  176. package/payload/server/public/assets/radar-PYXPWWZC-DHXATZGB.js +0 -1
  177. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-CxOIKvXh.js +0 -1
  178. package/payload/server/public/assets/tasks-B-cLsn3p.js +0 -1
  179. package/payload/server/public/assets/treeView-SZITEDCU-CC7ouMFd.js +0 -1
  180. package/payload/server/public/assets/treemap-W4RFUUIX-CaCg27im.js +0 -1
  181. package/payload/server/public/assets/useCopyFeedback-wtUHGohk.js +0 -1
  182. package/payload/server/public/assets/useSelectionMode-sph7AQT5.js +0 -1
  183. package/payload/server/public/assets/useVoiceRecorder-DN4jYQ0A.js +0 -2
  184. package/payload/server/public/assets/wardley-RL74JXVD-bMPsqQZ7.js +0 -1
  185. /package/payload/server/public/assets/{_baseFor-k8hYPe-U.js → _baseFor-Bjj9It3Q.js} +0 -0
  186. /package/payload/server/public/assets/{array-BFDiaBgf.js → array-BrrxEo12.js} +0 -0
  187. /package/payload/server/public/assets/{cytoscape.esm-Ch0xptA4.js → cytoscape.esm-CTWJxUxo.js} +0 -0
  188. /package/payload/server/public/assets/{defaultLocale-ZeknFqNe.js → defaultLocale-CFDbRV4k.js} +0 -0
  189. /package/payload/server/public/assets/{dist-B2N0v8hZ.js → dist-BATfy7Sn.js} +0 -0
  190. /package/payload/server/public/assets/{init-0VJVrkRJ.js → init-dXCzGgLP.js} +0 -0
  191. /package/payload/server/public/assets/{katex-Br7bH10N.js → katex-CHA1JFYJ.js} +0 -0
  192. /package/payload/server/public/assets/{path-INs8XTPH.js → path-CCRpdXhK.js} +0 -0
  193. /package/payload/server/public/assets/{preload-helper-D_sPnjeL.js → preload-helper-CH6UZRzu.js} +0 -0
  194. /package/payload/server/public/assets/{rough.esm-DU9bZLvZ.js → rough.esm-Bud4g4fh.js} +0 -0
  195. /package/payload/server/public/assets/{src-DHSQDYx-.js → src-DNdBRXXx.js} +0 -0
@@ -7,9 +7,19 @@ exports.makeCfExec = makeCfExec;
7
7
  exports.makeHouseCfExec = makeHouseCfExec;
8
8
  exports.makeHousePagesExec = makeHousePagesExec;
9
9
  const node_child_process_1 = require("node:child_process");
10
+ const promises_1 = require("node:fs/promises");
11
+ const node_os_1 = require("node:os");
10
12
  const node_path_1 = require("node:path");
11
13
  const house_credential_js_1 = require("./house-credential.js");
12
14
  const house_scoped_token_js_1 = require("./house-scoped-token.js");
15
+ // The filenames `wrangler pages deploy` discovers as its own configuration
16
+ // (wrangler 4.112.0). Task 1782 — the upload walk has a fixed ignore list with
17
+ // no config hook, so a config sitting in the deployed tree is served publicly at
18
+ // /wrangler.toml, disclosing the D1 database id and R2 bucket name, both of
19
+ // which embed the account id. All three names are dropped rather than only the
20
+ // .toml the data-portal template ships, so a tree that later gains a .json
21
+ // config cannot quietly start republishing it.
22
+ const WRANGLER_CONFIG_NAMES = ["wrangler.json", "wrangler.jsonc", "wrangler.toml"];
13
23
  // An object key carries `/` as a real path separator (the data portal's
14
24
  // per-person prefixes), so it is encoded segment-wise rather than whole:
15
25
  // separators stay separators, and spaces and specials are escaped. This
@@ -267,35 +277,65 @@ function makeCfExec(cred, run = defaultRun, fetchFn = defaultFetch) {
267
277
  }
268
278
  },
269
279
  async pagesDeploy(dir, project, branch) {
270
- // wrangler is the only supported Pages upload path (it hashes the tree and
271
- // uploads only what is missing); the API has no single-call equivalent.
272
- const args = ["wrangler", "pages", "deploy", dir, "--project-name", project];
273
- if (branch !== undefined)
274
- args.push("--branch", branch);
275
- // Pin the working directory to the tree being published. Left to
276
- // inference, wrangler anchors `.wrangler/tmp` at the install's `server/`
277
- // directory (its nearest package.json/node_modules root), which the
278
- // platform marks immutable so the scratch mkdir returns EPERM and the
279
- // deploy never reaches the upload. `dir` is the realpath-confined deploy
280
- // directory the route resolved, it is writable, and it already holds this
281
- // site's own wrangler.toml.
282
- const { stdout } = await run("npx", args, env, { cwd: dir });
283
- // The deployment URL is what the caller relays, so parse it strictly.
284
- // Strip ANSI first: wrangler colours its output when it thinks it has a
285
- // terminal, and a colour reset adjacent to the URL would otherwise be
286
- // swallowed by the host character class and returned as part of it.
287
- const plain = stdout.replace(/\[[0-9;]*m/g, "");
288
- // Take the LAST match, not the first: wrangler prints the deployment URL
289
- // on its closing line, and any earlier .pages.dev mention (an alias or a
290
- // progress line) would otherwise win and hand back the wrong address.
291
- const urls = plain.match(/https:\/\/[A-Za-z0-9._-]+\.pages\.dev/g);
292
- const url = urls?.[urls.length - 1];
293
- // wrangler exits 0 on some partial paths, so a url-less success is an
294
- // anomaly to surface with its output, never a silent "deployed".
295
- if (!url) {
296
- throw new Error(`storage-broker: pages deploy returned no deployment url: ${stdout}`);
280
+ // Task 1782 publish a directory the broker composes, not whatever the
281
+ // account's tree happens to hold. wrangler takes the upload directory from
282
+ // the positional argument and finds its configuration by walking up from
283
+ // the working directory, which are two independent inputs; pointing them
284
+ // at different places is what removes the config from the published assets
285
+ // while leaving the D1 and R2 bindings it declares fully in force.
286
+ // Measured on the house account 2026-07-20: a brand-new project deployed
287
+ // with the config outside the upload received the same bindings and the
288
+ // same config hash as the control that uploaded it.
289
+ const staged = await (0, promises_1.mkdtemp)((0, node_path_1.join)((0, node_os_1.tmpdir)(), "maxy-pages-upload-"));
290
+ const excluded = [];
291
+ try {
292
+ await (0, promises_1.cp)(dir, staged, {
293
+ recursive: true,
294
+ // Only a config at the root of the tree is wrangler's own. A nested
295
+ // file of the same name is site content and stays published.
296
+ filter: (src) => {
297
+ const rel = (0, node_path_1.relative)(dir, src);
298
+ if (!WRANGLER_CONFIG_NAMES.includes(rel))
299
+ return true;
300
+ excluded.push(rel);
301
+ return false;
302
+ },
303
+ });
304
+ // wrangler is the only supported Pages upload path (it hashes the tree and
305
+ // uploads only what is missing); the API has no single-call equivalent.
306
+ const args = ["wrangler", "pages", "deploy", staged, "--project-name", project];
307
+ if (branch !== undefined)
308
+ args.push("--branch", branch);
309
+ // Pin the working directory to the tree being published. Left to
310
+ // inference, wrangler anchors `.wrangler/tmp` at the install's `server/`
311
+ // directory (its nearest package.json/node_modules root), which the
312
+ // platform marks immutable — so the scratch mkdir returns EPERM and the
313
+ // deploy never reaches the upload. `dir` is the realpath-confined deploy
314
+ // directory the route resolved, and it is writable. Since 1782 it is also
315
+ // the only place wrangler can still find this site's config, which no
316
+ // longer travels with the assets.
317
+ const { stdout } = await run("npx", args, env, { cwd: dir });
318
+ // The deployment URL is what the caller relays, so parse it strictly.
319
+ // Strip ANSI first: wrangler colours its output when it thinks it has a
320
+ // terminal, and a colour reset adjacent to the URL would otherwise be
321
+ // swallowed by the host character class and returned as part of it.
322
+ const plain = stdout.replace(/\[[0-9;]*m/g, "");
323
+ // Take the LAST match, not the first: wrangler prints the deployment URL
324
+ // on its closing line, and any earlier .pages.dev mention (an alias or a
325
+ // progress line) would otherwise win and hand back the wrong address.
326
+ const urls = plain.match(/https:\/\/[A-Za-z0-9._-]+\.pages\.dev/g);
327
+ const url = urls?.[urls.length - 1];
328
+ // wrangler exits 0 on some partial paths, so a url-less success is an
329
+ // anomaly to surface with its output, never a silent "deployed".
330
+ if (!url) {
331
+ throw new Error(`storage-broker: pages deploy returned no deployment url: ${stdout}`);
332
+ }
333
+ return { url, excluded: excluded.sort() };
334
+ }
335
+ finally {
336
+ // A failed deploy must not strand a second copy of the site on disk.
337
+ await (0, promises_1.rm)(staged, { recursive: true, force: true });
297
338
  }
298
- return { url };
299
339
  },
300
340
  // --- R2 objects (Task 1691) -------------------------------------------
301
341
  //
@@ -1 +1 @@
1
- {"version":3,"file":"cf-exec.js","sourceRoot":"","sources":["../src/cf-exec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cf-exec.js","sourceRoot":"","sources":["../src/cf-exec.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,17 @@
1
1
  import test from "node:test";
2
2
  import assert from "node:assert/strict";
3
- import { mkdtempSync, mkdirSync, writeFileSync, appendFileSync } from "node:fs";
3
+ import {
4
+ mkdtempSync,
5
+ mkdirSync,
6
+ writeFileSync,
7
+ appendFileSync,
8
+ existsSync,
9
+ readdirSync,
10
+ readFileSync,
11
+ symlinkSync,
12
+ } from "node:fs";
4
13
  import { tmpdir } from "node:os";
5
- import { join } from "node:path";
14
+ import { join, dirname } from "node:path";
6
15
  import { makeCfExec, makeHouseCfExec, type RunFn, type FetchFn } from "../cf-exec.js";
7
16
 
8
17
  const cred = { apiToken: "cfat_x", accountId: "acc-h" };
@@ -685,40 +694,208 @@ function projectPage(names: string[], cursor?: string) {
685
694
  });
686
695
  }
687
696
 
697
+ // A real site tree on disk. pagesDeploy copies the tree before uploading it, so
698
+ // these tests cannot hand it a path that does not exist.
699
+ function siteTree(files: Record<string, string>): string {
700
+ const dir = mkdtempSync(join(tmpdir(), "pages-site-"));
701
+ for (const [rel, body] of Object.entries(files)) {
702
+ const abs = join(dir, rel);
703
+ mkdirSync(dirname(abs), { recursive: true });
704
+ writeFileSync(abs, body);
705
+ }
706
+ return dir;
707
+ }
708
+
709
+ const PORTAL = {
710
+ "index.html": "<!doctype html>",
711
+ "portal.js": "export {}",
712
+ "functions/api/files.js": "export {}",
713
+ "wrangler.toml": 'name = "kit-data"\ndatabase_id = "secret-looking"\n',
714
+ };
715
+
716
+ /** Snapshots the uploaded directory's contents at call time, because
717
+ * pagesDeploy deletes the staging tree before it returns. */
718
+ function snapshottingRun(stdout: string) {
719
+ const calls: Array<{
720
+ args: string[];
721
+ cwd?: string;
722
+ uploadDir: string;
723
+ uploaded: string[];
724
+ }> = [];
725
+ const run: RunFn = async (_cmd, args, _env, opts) => {
726
+ const uploadDir = args[3];
727
+ const uploaded: string[] = [];
728
+ const walk = (d: string, prefix: string) => {
729
+ for (const entry of readdirSync(d, { withFileTypes: true })) {
730
+ if (entry.isDirectory()) walk(join(d, entry.name), `${prefix}${entry.name}/`);
731
+ else uploaded.push(`${prefix}${entry.name}`);
732
+ }
733
+ };
734
+ walk(uploadDir, "");
735
+ calls.push({ args, cwd: opts?.cwd, uploadDir, uploaded: uploaded.sort() });
736
+ return { stdout };
737
+ };
738
+ return { run, calls };
739
+ }
740
+
741
+ const DEPLOYED = "✨ Deployment complete! Take a peek over at https://abc123.glsmithandsons.pages.dev\n";
742
+
688
743
  test("pagesDeploy shells npx wrangler (never bare) and returns the deployment url", async () => {
689
- const { run, calls } = recordingRun(
690
- "Uploading... (2/2)\n✨ Deployment complete! Take a peek over at https://abc123.glsmithandsons.pages.dev\n",
691
- );
744
+ const dir = siteTree(PORTAL);
745
+ const { run, calls } = recordingRun(`Uploading... (2/2)\n${DEPLOYED}`);
692
746
  const cf = makeCfExec(cred, run);
693
- const { url } = await cf.pagesDeploy("/acct/sites/gls", "glsmithandsons", "main");
747
+ const { url } = await cf.pagesDeploy(dir, "glsmithandsons", "main");
694
748
  assert.equal(url, "https://abc123.glsmithandsons.pages.dev");
695
749
  assert.equal(calls[0].cmd, "npx");
696
- assert.deepEqual(calls[0].args, [
697
- "wrangler", "pages", "deploy", "/acct/sites/gls",
750
+ assert.deepEqual(calls[0].args.slice(0, 3), ["wrangler", "pages", "deploy"]);
751
+ assert.deepEqual(calls[0].args.slice(4), [
698
752
  "--project-name", "glsmithandsons", "--branch", "main",
699
753
  ]);
700
754
  assert.equal(calls[0].env.CLOUDFLARE_API_TOKEN, "cfat_x");
701
755
  });
702
756
 
703
757
  test("pagesDeploy omits --branch when no branch is given", async () => {
704
- const { run, calls } = recordingRun("✨ Deployment complete! Take a peek over at https://x.y.pages.dev\n");
758
+ const dir = siteTree(PORTAL);
759
+ const { run, calls } = recordingRun(DEPLOYED);
705
760
  const cf = makeCfExec(cred, run);
706
- await cf.pagesDeploy("/acct/sites/gls", "glsmithandsons");
707
- assert.deepEqual(calls[0].args, [
708
- "wrangler", "pages", "deploy", "/acct/sites/gls", "--project-name", "glsmithandsons",
709
- ]);
761
+ await cf.pagesDeploy(dir, "glsmithandsons");
762
+ assert.deepEqual(calls[0].args.slice(4), ["--project-name", "glsmithandsons"]);
710
763
  });
711
764
 
712
765
  test("pagesDeploy throws with the body when wrangler prints no deployment url", async () => {
766
+ const dir = siteTree(PORTAL);
713
767
  const { run } = recordingRun("Uploading... (0/0)\nsomething went sideways\n");
714
768
  const cf = makeCfExec(cred, run);
715
769
  await assert.rejects(
716
- () => cf.pagesDeploy("/acct/sites/gls", "glsmithandsons"),
770
+ () => cf.pagesDeploy(dir, "glsmithandsons"),
717
771
  /something went sideways/,
718
772
  "a url-less wrangler run must surface its output, never report a silent success",
719
773
  );
720
774
  });
721
775
 
776
+ // --- Task 1782: the uploaded set is the broker's, not whatever the tree holds ---
777
+
778
+ test("pagesDeploy uploads a staged copy with the wrangler config left out", async () => {
779
+ const dir = siteTree(PORTAL);
780
+ const { run, calls } = snapshottingRun(DEPLOYED);
781
+ const cf = makeCfExec(cred, run);
782
+ const { excluded } = await cf.pagesDeploy(dir, "kit-data", "main");
783
+ assert.notEqual(
784
+ calls[0].uploadDir,
785
+ dir,
786
+ "the directory handed to wrangler must not be the tree that holds the config",
787
+ );
788
+ assert.deepEqual(
789
+ calls[0].uploaded,
790
+ ["functions/api/files.js", "index.html", "portal.js"],
791
+ "every site file is published and the config is not",
792
+ );
793
+ assert.deepEqual(excluded, ["wrangler.toml"]);
794
+ });
795
+
796
+ test("pagesDeploy still runs wrangler in the tree that holds the config", async () => {
797
+ const dir = siteTree(PORTAL);
798
+ const { run, calls } = snapshottingRun(DEPLOYED);
799
+ const cf = makeCfExec(cred, run);
800
+ await cf.pagesDeploy(dir, "kit-data", "main");
801
+ // wrangler finds its config by walking up from the working directory, so the
802
+ // cwd is what keeps the D1 and R2 bindings applying once the file itself has
803
+ // left the upload. It is also still the writable scratch anchor Task 1770
804
+ // pinned it for.
805
+ assert.equal(calls[0].cwd, dir);
806
+ });
807
+
808
+ test("pagesDeploy excludes every config filename wrangler itself discovers", async () => {
809
+ const dir = siteTree({
810
+ "index.html": "<!doctype html>",
811
+ "wrangler.toml": "x",
812
+ "wrangler.json": "{}",
813
+ "wrangler.jsonc": "{}",
814
+ });
815
+ const { run, calls } = snapshottingRun(DEPLOYED);
816
+ const cf = makeCfExec(cred, run);
817
+ const { excluded } = await cf.pagesDeploy(dir, "kit-data");
818
+ assert.deepEqual(calls[0].uploaded, ["index.html"]);
819
+ assert.deepEqual(excluded, ["wrangler.json", "wrangler.jsonc", "wrangler.toml"]);
820
+ });
821
+
822
+ test("pagesDeploy keeps a nested file that merely shares the config's name", async () => {
823
+ const dir = siteTree({
824
+ "index.html": "<!doctype html>",
825
+ "wrangler.toml": "x",
826
+ "docs/wrangler.toml": "an example the site publishes on purpose",
827
+ });
828
+ const { run, calls } = snapshottingRun(DEPLOYED);
829
+ const cf = makeCfExec(cred, run);
830
+ const { excluded } = await cf.pagesDeploy(dir, "kit-data");
831
+ assert.deepEqual(calls[0].uploaded, ["docs/wrangler.toml", "index.html"]);
832
+ assert.deepEqual(excluded, ["wrangler.toml"], "only the config wrangler reads is dropped");
833
+ });
834
+
835
+ test("pagesDeploy reports nothing excluded for a tree that carries no config", async () => {
836
+ const dir = siteTree({ "index.html": "<!doctype html>" });
837
+ const { run, calls } = snapshottingRun(DEPLOYED);
838
+ const cf = makeCfExec(cred, run);
839
+ const { excluded } = await cf.pagesDeploy(dir, "glsmithandsons");
840
+ assert.deepEqual(calls[0].uploaded, ["index.html"]);
841
+ assert.deepEqual(excluded, []);
842
+ });
843
+
844
+ test("pagesDeploy publishes what a symlink pointed at, including one leaving the tree", async () => {
845
+ // wrangler's own upload walk stats each entry, so deploying in place published
846
+ // the link's target. Copying links verbatim would strand an escaping one.
847
+ // A relative link escaping the tree is the shape that would dangle if the copy
848
+ // reproduced it verbatim somewhere else on disk. It does not: node's fs.cp
849
+ // rewrites every symlink to its resolved absolute target, so the staged link
850
+ // still points at the real file and wrangler's stat-following walk publishes
851
+ // it exactly as an in-place deploy did. This pins that behaviour rather than
852
+ // trusting it — the whole change rests on the staged tree being what wrangler
853
+ // would have uploaded.
854
+ const base = mkdtempSync(join(tmpdir(), "pages-base-"));
855
+ mkdirSync(join(base, "shared"));
856
+ writeFileSync(join(base, "shared", "shared.css"), "body{}");
857
+ const dir = join(base, "site");
858
+ mkdirSync(dir);
859
+ writeFileSync(join(dir, "index.html"), "<!doctype html>");
860
+ writeFileSync(join(dir, "wrangler.toml"), "x");
861
+ symlinkSync(join("..", "shared", "shared.css"), join(dir, "theme.css"));
862
+ // Read during the run: the staging tree is gone by the time pagesDeploy returns.
863
+ let staged = "";
864
+ const run: RunFn = async (_cmd, args) => {
865
+ staged = readFileSync(join(args[3], "theme.css"), "utf8");
866
+ return { stdout: DEPLOYED };
867
+ };
868
+ const cf = makeCfExec(cred, run);
869
+ await cf.pagesDeploy(dir, "kit-data");
870
+ assert.equal(
871
+ staged,
872
+ "body{}",
873
+ "the staged copy carries the target's bytes, not a link that resolves to nothing",
874
+ );
875
+ });
876
+
877
+ test("pagesDeploy removes the staging tree on the success path", async () => {
878
+ const dir = siteTree(PORTAL);
879
+ const { run, calls } = snapshottingRun(DEPLOYED);
880
+ const cf = makeCfExec(cred, run);
881
+ await cf.pagesDeploy(dir, "kit-data");
882
+ assert.equal(existsSync(calls[0].uploadDir), false);
883
+ assert.equal(existsSync(join(dir, "wrangler.toml")), true, "the real tree is untouched");
884
+ });
885
+
886
+ test("pagesDeploy removes the staging tree when wrangler fails", async () => {
887
+ const dir = siteTree(PORTAL);
888
+ let uploadDir = "";
889
+ const run: RunFn = async (_cmd, args) => {
890
+ uploadDir = args[3];
891
+ throw new Error("wrangler exploded");
892
+ };
893
+ const cf = makeCfExec(cred, run);
894
+ await assert.rejects(() => cf.pagesDeploy(dir, "kit-data"), /wrangler exploded/);
895
+ assert.notEqual(uploadDir, "");
896
+ assert.equal(existsSync(uploadDir), false, "a failed deploy must not strand a copy of the site");
897
+ });
898
+
722
899
  test("pagesProjectList follows the pagination cursor to exhaustion via the API, never wrangler", async () => {
723
900
  const { fetchFn, calls } = sequenceFetch([
724
901
  { ok: true, status: 200, body: projectPage(["glsmithandsons"], "c1") },
@@ -804,14 +981,15 @@ test("pagesDeploy pins wrangler's working directory to the deploy dir", async ()
804
981
  const { run, calls } = recordingRun(
805
982
  "\u2728 Deployment complete! Take a peek over at https://abc.kit-data.pages.dev\n",
806
983
  );
984
+ const dir = siteTree(PORTAL);
807
985
  const cf = makeCfExec(cred, run);
808
- await cf.pagesDeploy("/acct/sites/kit-data", "kit-data", "main");
986
+ await cf.pagesDeploy(dir, "kit-data", "main");
809
987
  // Unpinned, wrangler resolves .wrangler/tmp against a directory it infers --
810
988
  // on a real install that is the immutable server tree, where the mkdir is
811
989
  // EPERM and every deploy dies before uploading.
812
990
  assert.equal(
813
991
  calls[0].cwd,
814
- "/acct/sites/kit-data",
992
+ dir,
815
993
  "wrangler must run in the deploy dir so its scratch dir lands beside the tree it uploads",
816
994
  );
817
995
  });
@@ -3,7 +3,9 @@
3
3
  // wrangler. `run` is injectable so the wiring is unit-testable without wrangler.
4
4
 
5
5
  import { execFile } from "node:child_process";
6
- import { join } from "node:path";
6
+ import { cp, mkdtemp, rm } from "node:fs/promises";
7
+ import { tmpdir } from "node:os";
8
+ import { join, relative } from "node:path";
7
9
  import type { HouseCredential } from "./house-credential.js";
8
10
  import { readHouseCredential } from "./house-credential.js";
9
11
  import { resolveHouseScopedToken } from "./house-scoped-token.js";
@@ -60,9 +62,24 @@ export interface CfExec {
60
62
  r2ObjectDelete(bucket: string, key: string): Promise<void>;
61
63
  pagesProjectList(): Promise<{ name: string }[]>;
62
64
  pagesProjectCreate(name: string, productionBranch: string): Promise<void>;
63
- pagesDeploy(dir: string, project: string, branch?: string): Promise<{ url: string }>;
65
+ /** `excluded` names the files dropped from the upload set, so the caller can
66
+ * log what was published rather than assert it (Task 1782). */
67
+ pagesDeploy(
68
+ dir: string,
69
+ project: string,
70
+ branch?: string,
71
+ ): Promise<{ url: string; excluded: string[] }>;
64
72
  }
65
73
 
74
+ // The filenames `wrangler pages deploy` discovers as its own configuration
75
+ // (wrangler 4.112.0). Task 1782 — the upload walk has a fixed ignore list with
76
+ // no config hook, so a config sitting in the deployed tree is served publicly at
77
+ // /wrangler.toml, disclosing the D1 database id and R2 bucket name, both of
78
+ // which embed the account id. All three names are dropped rather than only the
79
+ // .toml the data-portal template ships, so a tree that later gains a .json
80
+ // config cannot quietly start republishing it.
81
+ const WRANGLER_CONFIG_NAMES = ["wrangler.json", "wrangler.jsonc", "wrangler.toml"];
82
+
66
83
  // An object key carries `/` as a real path separator (the data portal's
67
84
  // per-person prefixes), so it is encoded segment-wise rather than whole:
68
85
  // separators stay separators, and spaces and specials are escaped. This
@@ -381,34 +398,62 @@ export function makeCfExec(
381
398
  }
382
399
  },
383
400
  async pagesDeploy(dir, project, branch) {
384
- // wrangler is the only supported Pages upload path (it hashes the tree and
385
- // uploads only what is missing); the API has no single-call equivalent.
386
- const args = ["wrangler", "pages", "deploy", dir, "--project-name", project];
387
- if (branch !== undefined) args.push("--branch", branch);
388
- // Pin the working directory to the tree being published. Left to
389
- // inference, wrangler anchors `.wrangler/tmp` at the install's `server/`
390
- // directory (its nearest package.json/node_modules root), which the
391
- // platform marks immutable so the scratch mkdir returns EPERM and the
392
- // deploy never reaches the upload. `dir` is the realpath-confined deploy
393
- // directory the route resolved, it is writable, and it already holds this
394
- // site's own wrangler.toml.
395
- const { stdout } = await run("npx", args, env, { cwd: dir });
396
- // The deployment URL is what the caller relays, so parse it strictly.
397
- // Strip ANSI first: wrangler colours its output when it thinks it has a
398
- // terminal, and a colour reset adjacent to the URL would otherwise be
399
- // swallowed by the host character class and returned as part of it.
400
- const plain = stdout.replace(/\[[0-9;]*m/g, "");
401
- // Take the LAST match, not the first: wrangler prints the deployment URL
402
- // on its closing line, and any earlier .pages.dev mention (an alias or a
403
- // progress line) would otherwise win and hand back the wrong address.
404
- const urls = plain.match(/https:\/\/[A-Za-z0-9._-]+\.pages\.dev/g);
405
- const url = urls?.[urls.length - 1];
406
- // wrangler exits 0 on some partial paths, so a url-less success is an
407
- // anomaly to surface with its output, never a silent "deployed".
408
- if (!url) {
409
- throw new Error(`storage-broker: pages deploy returned no deployment url: ${stdout}`);
401
+ // Task 1782 publish a directory the broker composes, not whatever the
402
+ // account's tree happens to hold. wrangler takes the upload directory from
403
+ // the positional argument and finds its configuration by walking up from
404
+ // the working directory, which are two independent inputs; pointing them
405
+ // at different places is what removes the config from the published assets
406
+ // while leaving the D1 and R2 bindings it declares fully in force.
407
+ // Measured on the house account 2026-07-20: a brand-new project deployed
408
+ // with the config outside the upload received the same bindings and the
409
+ // same config hash as the control that uploaded it.
410
+ const staged = await mkdtemp(join(tmpdir(), "maxy-pages-upload-"));
411
+ const excluded: string[] = [];
412
+ try {
413
+ await cp(dir, staged, {
414
+ recursive: true,
415
+ // Only a config at the root of the tree is wrangler's own. A nested
416
+ // file of the same name is site content and stays published.
417
+ filter: (src) => {
418
+ const rel = relative(dir, src);
419
+ if (!WRANGLER_CONFIG_NAMES.includes(rel)) return true;
420
+ excluded.push(rel);
421
+ return false;
422
+ },
423
+ });
424
+ // wrangler is the only supported Pages upload path (it hashes the tree and
425
+ // uploads only what is missing); the API has no single-call equivalent.
426
+ const args = ["wrangler", "pages", "deploy", staged, "--project-name", project];
427
+ if (branch !== undefined) args.push("--branch", branch);
428
+ // Pin the working directory to the tree being published. Left to
429
+ // inference, wrangler anchors `.wrangler/tmp` at the install's `server/`
430
+ // directory (its nearest package.json/node_modules root), which the
431
+ // platform marks immutable — so the scratch mkdir returns EPERM and the
432
+ // deploy never reaches the upload. `dir` is the realpath-confined deploy
433
+ // directory the route resolved, and it is writable. Since 1782 it is also
434
+ // the only place wrangler can still find this site's config, which no
435
+ // longer travels with the assets.
436
+ const { stdout } = await run("npx", args, env, { cwd: dir });
437
+ // The deployment URL is what the caller relays, so parse it strictly.
438
+ // Strip ANSI first: wrangler colours its output when it thinks it has a
439
+ // terminal, and a colour reset adjacent to the URL would otherwise be
440
+ // swallowed by the host character class and returned as part of it.
441
+ const plain = stdout.replace(/\[[0-9;]*m/g, "");
442
+ // Take the LAST match, not the first: wrangler prints the deployment URL
443
+ // on its closing line, and any earlier .pages.dev mention (an alias or a
444
+ // progress line) would otherwise win and hand back the wrong address.
445
+ const urls = plain.match(/https:\/\/[A-Za-z0-9._-]+\.pages\.dev/g);
446
+ const url = urls?.[urls.length - 1];
447
+ // wrangler exits 0 on some partial paths, so a url-less success is an
448
+ // anomaly to surface with its output, never a silent "deployed".
449
+ if (!url) {
450
+ throw new Error(`storage-broker: pages deploy returned no deployment url: ${stdout}`);
451
+ }
452
+ return { url, excluded: excluded.sort() };
453
+ } finally {
454
+ // A failed deploy must not strand a second copy of the site on disk.
455
+ await rm(staged, { recursive: true, force: true });
410
456
  }
411
- return { url };
412
457
  },
413
458
 
414
459
  // --- R2 objects (Task 1691) -------------------------------------------
@@ -3,7 +3,7 @@ import assert from "node:assert/strict";
3
3
  import { readFileSync } from "node:fs";
4
4
  import { fileURLToPath } from "node:url";
5
5
  import { dirname, resolve } from "node:path";
6
- import { _internals, startDeviceCode, pollDeviceToken, parseAzureTokenError } from "../auth/device-flow.js";
6
+ import { _internals, startDeviceCode, pollDeviceToken, parseAzureTokenError, refreshAccessToken, } from "../auth/device-flow.js";
7
7
  function mockFetch(handler) {
8
8
  const calls = [];
9
9
  const original = globalThis.fetch;
@@ -140,4 +140,44 @@ test("regression: device-flow.ts binds no HTTP server", () => {
140
140
  assert.ok(!/createServer/.test(src), "must not import/use createServer");
141
141
  assert.ok(!/\.listen\(/.test(src), "must not bind a listener");
142
142
  });
143
+ test("refreshAccessToken carries the parsed Azure error as structured state", async () => {
144
+ const { restore } = mockFetch(() => new Response(JSON.stringify({
145
+ error: "invalid_grant",
146
+ error_description: "AADSTS70008: The refresh token has expired due to inactivity.",
147
+ error_codes: [70008],
148
+ suberror: "token_expired",
149
+ correlation_id: "corr-1",
150
+ }), { status: 400 }));
151
+ try {
152
+ await assert.rejects(() => refreshAccessToken({ clientId: "c", tenantId: "t", refreshToken: "r" }), (err) => {
153
+ const e = err;
154
+ assert.equal(e.name, "TokenRefreshError");
155
+ assert.equal(e.oauthError, "invalid_grant");
156
+ assert.equal(e.statusCode, 400);
157
+ assert.equal(e.azure.aadsts, "AADSTS70008");
158
+ assert.equal(e.azure.suberror, "token_expired");
159
+ assert.equal(e.azure.correlationId, "corr-1");
160
+ assert.match(e.message, /AADSTS70008/, "the body must survive in the message");
161
+ return true;
162
+ });
163
+ }
164
+ finally {
165
+ restore();
166
+ }
167
+ });
168
+ test("refreshAccessToken leaves oauthError null on a non-JSON body", async () => {
169
+ const { restore } = mockFetch(() => new Response("<html>upstream exploded</html>", { status: 503 }));
170
+ try {
171
+ await assert.rejects(() => refreshAccessToken({ clientId: "c", tenantId: "t", refreshToken: "r" }), (err) => {
172
+ const e = err;
173
+ assert.equal(e.oauthError, null, "a gateway 5xx carries no OAuth error code");
174
+ assert.equal(e.statusCode, 503);
175
+ assert.match(e.azure.raw, /upstream exploded/, "the raw body must never be discarded");
176
+ return true;
177
+ });
178
+ }
179
+ finally {
180
+ restore();
181
+ }
182
+ });
143
183
  //# sourceMappingURL=device-flow.test.js.map