@knpkv/control-center 0.4.0 → 0.5.0

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 (220) hide show
  1. package/README.md +18 -8
  2. package/dist/client/.vite/manifest.json +214 -182
  3. package/dist/client/assets/{ActiveWorkPage-Dd1mxPrq.js → ActiveWorkPage-g2-Jyavo.js} +2 -2
  4. package/dist/client/assets/{ActiveWorkPage-Dd1mxPrq.js.map → ActiveWorkPage-g2-Jyavo.js.map} +1 -1
  5. package/dist/client/assets/AgentPage-B6GQdZAs.css +1 -0
  6. package/dist/client/assets/AgentPage-DmVsEe13.js +6 -0
  7. package/dist/client/assets/AgentPage-DmVsEe13.js.map +1 -0
  8. package/dist/client/assets/AtlassianOAuthCallbackPage-C8u9ItMj.js +2 -0
  9. package/dist/client/assets/{AtlassianOAuthCallbackPage-BPoF6oKf.js.map → AtlassianOAuthCallbackPage-C8u9ItMj.js.map} +1 -1
  10. package/dist/client/assets/{AuthorizedSharePage-jjqu6W_f.js → AuthorizedSharePage-CVBJ1NTm.js} +2 -2
  11. package/dist/client/assets/{AuthorizedSharePage-jjqu6W_f.js.map → AuthorizedSharePage-CVBJ1NTm.js.map} +1 -1
  12. package/dist/client/assets/BrowserCrypto-3BoTVFdl.js +2 -0
  13. package/dist/client/assets/{BrowserCrypto-BMbjhcvP.js.map → BrowserCrypto-3BoTVFdl.js.map} +1 -1
  14. package/dist/client/assets/BrowserSessionHydrator-CpZnNm4X.js +2 -0
  15. package/dist/client/assets/{BrowserSessionHydrator-BC1ymLkL.js.map → BrowserSessionHydrator-CpZnNm4X.js.map} +1 -1
  16. package/dist/client/assets/{CommandSearch-WwAVDrD9.js → CommandSearch-DUeRRbV2.js} +2 -2
  17. package/dist/client/assets/{CommandSearch-WwAVDrD9.js.map → CommandSearch-DUeRRbV2.js.map} +1 -1
  18. package/dist/client/assets/{ItemsPage-CKK_KkJ2.js → ItemsPage-BF2ZkSzh.js} +2 -2
  19. package/dist/client/assets/{ItemsPage-CKK_KkJ2.js.map → ItemsPage-BF2ZkSzh.js.map} +1 -1
  20. package/dist/client/assets/{PairPage-DA6cmyqF.js → PairPage-CkaZltHd.js} +2 -2
  21. package/dist/client/assets/{PairPage-DA6cmyqF.js.map → PairPage-CkaZltHd.js.map} +1 -1
  22. package/dist/client/assets/PortfolioOverview-CEUHJmGC.js +2 -0
  23. package/dist/client/assets/{PortfolioOverview-CEI4gpXi.js.map → PortfolioOverview-CEUHJmGC.js.map} +1 -1
  24. package/dist/client/assets/{PullRequestReviewPanel-D7AKnwL-.js → PullRequestReviewPanel-D1IpvHe2.js} +3 -3
  25. package/dist/client/assets/{PullRequestReviewPanel-D7AKnwL-.js.map → PullRequestReviewPanel-D1IpvHe2.js.map} +1 -1
  26. package/dist/client/assets/{ReleaseRoute-CbPW3qUT.js → ReleaseRoute-BuQybrsg.js} +2 -2
  27. package/dist/client/assets/{ReleaseRoute-CbPW3qUT.js.map → ReleaseRoute-BuQybrsg.js.map} +1 -1
  28. package/dist/client/assets/ReleaseWorkset-BclY0Nvj.js +2 -0
  29. package/dist/client/assets/ReleaseWorkset-BclY0Nvj.js.map +1 -0
  30. package/dist/client/assets/ServicesPage-hw5Ee69-.js +2 -0
  31. package/dist/client/assets/{ServicesPage-_B89DAvG.js.map → ServicesPage-hw5Ee69-.js.map} +1 -1
  32. package/dist/client/assets/{TimelinePage-DvpgD8AY.js → TimelinePage-Cj3V98uI.js} +2 -2
  33. package/dist/client/assets/{TimelinePage-DvpgD8AY.js.map → TimelinePage-Cj3V98uI.js.map} +1 -1
  34. package/dist/client/assets/{WorkspaceEntityLink-DPj6MKI2.js → WorkspaceEntityLink-C_rc8lxi.js} +2 -2
  35. package/dist/client/assets/{WorkspaceEntityLink-DPj6MKI2.js.map → WorkspaceEntityLink-C_rc8lxi.js.map} +1 -1
  36. package/dist/client/assets/WorkspaceEntityRoute-DLLT6fY0.css +1 -0
  37. package/dist/client/assets/WorkspaceEntityRoute-kbnrQ_lY.js +14 -0
  38. package/dist/client/assets/WorkspaceEntityRoute-kbnrQ_lY.js.map +1 -0
  39. package/dist/client/assets/WorkspaceHomeLink-DeYYLEsH.js +2 -0
  40. package/dist/client/assets/{WorkspaceHomeLink-CkJfzO25.js.map → WorkspaceHomeLink-DeYYLEsH.js.map} +1 -1
  41. package/dist/client/assets/WorkspacePullRequestDetails-CizqydjN.js +3 -0
  42. package/dist/client/assets/{WorkspacePullRequestDetails-HwDgp12e.js.map → WorkspacePullRequestDetails-CizqydjN.js.map} +1 -1
  43. package/dist/client/assets/{WorkspaceReleaseLayout-CGHi8eoo.js → WorkspaceReleaseLayout-CXAQUhkh.js} +2 -2
  44. package/dist/client/assets/{WorkspaceReleaseLayout-CGHi8eoo.js.map → WorkspaceReleaseLayout-CXAQUhkh.js.map} +1 -1
  45. package/dist/client/assets/{WorkspaceRichText-D1M637Ff.js → WorkspaceRichText-CCOciILO.js} +2 -2
  46. package/dist/client/assets/WorkspaceRichText-CCOciILO.js.map +1 -0
  47. package/dist/client/assets/WorkspaceSettingsPage-GoBfQzBx.css +1 -0
  48. package/dist/client/assets/WorkspaceSettingsPage-JG-pN_CA.js +2 -0
  49. package/dist/client/assets/WorkspaceSettingsPage-JG-pN_CA.js.map +1 -0
  50. package/dist/client/assets/agent-api-Dl9TuGOJ.js +19 -0
  51. package/dist/client/assets/agent-api-Dl9TuGOJ.js.map +1 -0
  52. package/dist/client/assets/atlassianOAuthSetupIntentStorage-DE4ySCTb.js +2 -0
  53. package/dist/client/assets/atlassianOAuthSetupIntentStorage-DE4ySCTb.js.map +1 -0
  54. package/dist/client/assets/authenticatedMutationClient-DdowMjyo.js +2 -0
  55. package/dist/client/assets/{authenticatedMutationClient-DYaieXUe.js.map → authenticatedMutationClient-DdowMjyo.js.map} +1 -1
  56. package/dist/client/assets/{authorizedShareTransport-cxBoQzQ2.js → authorizedShareTransport-CnclcYai.js} +2 -2
  57. package/dist/client/assets/{authorizedShareTransport-cxBoQzQ2.js.map → authorizedShareTransport-CnclcYai.js.map} +1 -1
  58. package/dist/client/assets/client-Dq_XQE_l.js +5 -0
  59. package/dist/client/assets/client-Dq_XQE_l.js.map +1 -0
  60. package/dist/client/assets/confluenceTasks-DtKq8_eU.js +5 -0
  61. package/dist/client/assets/confluenceTasks-DtKq8_eU.js.map +1 -0
  62. package/dist/client/assets/connectionTestTransport-CPK98z7H.js +2 -0
  63. package/dist/client/assets/connectionTestTransport-CPK98z7H.js.map +1 -0
  64. package/dist/client/assets/{index-C7_FDTU7.js → index-zVjlBm9l.js} +3 -3
  65. package/dist/client/assets/{index-C7_FDTU7.js.map → index-zVjlBm9l.js.map} +1 -1
  66. package/dist/client/assets/{patterns-5N-j-AD2-B9qgekXA.js → patterns-5N-j-AD2-DLfaGePK.js} +2 -2
  67. package/dist/client/assets/{patterns-5N-j-AD2-B9qgekXA.js.map → patterns-5N-j-AD2-DLfaGePK.js.map} +1 -1
  68. package/dist/client/assets/{presentPortfolio-C_JsoSWg.js → presentPortfolio-DLEq-vEz.js} +2 -2
  69. package/dist/client/assets/{presentPortfolio-C_JsoSWg.js.map → presentPortfolio-DLEq-vEz.js.map} +1 -1
  70. package/dist/client/assets/{presentWorkspaceItems-DboAfwGc.js → presentWorkspaceItems-BOY3FbhO.js} +2 -2
  71. package/dist/client/assets/{presentWorkspaceItems-DboAfwGc.js.map → presentWorkspaceItems-BOY3FbhO.js.map} +1 -1
  72. package/dist/client/assets/{pullRequestReviewFailures-DHmYwffV.js → pullRequestReviewFailures-CyjTVnSX.js} +2 -2
  73. package/dist/client/assets/{pullRequestReviewFailures-DHmYwffV.js.map → pullRequestReviewFailures-CyjTVnSX.js.map} +1 -1
  74. package/dist/client/assets/{pullRequestReviewThreadReplay-Vy1k53qE.js → pullRequestReviewThreadReplay-CXHspFTr.js} +2 -2
  75. package/dist/client/assets/{pullRequestReviewThreadReplay-Vy1k53qE.js.map → pullRequestReviewThreadReplay-CXHspFTr.js.map} +1 -1
  76. package/dist/client/assets/releaseAgentTransport-DaO4svPu.js +2 -0
  77. package/dist/client/assets/releaseAgentTransport-DaO4svPu.js.map +1 -0
  78. package/dist/client/assets/releaseRoutes-B4ciNOJj.js +2 -0
  79. package/dist/client/assets/{releaseRoutes-t9uCfs5T.js.map → releaseRoutes-B4ciNOJj.js.map} +1 -1
  80. package/dist/client/assets/{serviceOnboarding-DLINCon7.js → serviceOnboarding-D0FmodRi.js} +2 -2
  81. package/dist/client/assets/{serviceOnboarding-DLINCon7.js.map → serviceOnboarding-D0FmodRi.js.map} +1 -1
  82. package/dist/client/assets/{useWorkspaceDefaultLanding-CC5ImHkL.js → useWorkspaceDefaultLanding-BaQdg0sY.js} +3 -3
  83. package/dist/client/assets/{useWorkspaceDefaultLanding-CC5ImHkL.js.map → useWorkspaceDefaultLanding-BaQdg0sY.js.map} +1 -1
  84. package/dist/client/assets/{useWorkspaceItems-B1X-JNwq.js → useWorkspaceItems-B-7JHtm0.js} +2 -2
  85. package/dist/client/assets/{useWorkspaceItems-B1X-JNwq.js.map → useWorkspaceItems-B-7JHtm0.js.map} +1 -1
  86. package/dist/client/assets/workspaceEntityRoutes-DqqDa0AB.js +2 -0
  87. package/dist/client/assets/workspaceEntityRoutes-DqqDa0AB.js.map +1 -0
  88. package/dist/client/assets/{workspaceScrollCapture-BsjcWVsk.js → workspaceScrollCapture-BYNfR2wo.js} +2 -2
  89. package/dist/client/assets/{workspaceScrollCapture-BsjcWVsk.js.map → workspaceScrollCapture-BYNfR2wo.js.map} +1 -1
  90. package/dist/client/assets/{workspaceSettingsTransport-Dw2hueXv.js → workspaceSettingsTransport-Br4lBmvS.js} +2 -2
  91. package/dist/client/assets/{workspaceSettingsTransport-Dw2hueXv.js.map → workspaceSettingsTransport-Br4lBmvS.js.map} +1 -1
  92. package/dist/client/build-graph.json +98 -0
  93. package/dist/client/index.html +1 -1
  94. package/dist/server/api/agent.d.ts +12 -0
  95. package/dist/server/api/agent.d.ts.map +1 -1
  96. package/dist/server/api/deliveryGraph.d.ts +20 -0
  97. package/dist/server/api/deliveryGraph.d.ts.map +1 -1
  98. package/dist/server/api/index.d.ts +1 -1
  99. package/dist/server/api/index.d.ts.map +1 -1
  100. package/dist/server/api/index.js +3 -3
  101. package/dist/server/api/session.d.ts +23 -1
  102. package/dist/server/api/session.d.ts.map +1 -1
  103. package/dist/server/api/shares.d.ts +2 -0
  104. package/dist/server/api/shares.d.ts.map +1 -1
  105. package/dist/server/assets/{BindConfig-Bj282xDC.js → BindConfig-DAASchDn.js} +315 -36
  106. package/dist/server/assets/BindConfig-DAASchDn.js.map +1 -0
  107. package/dist/server/assets/{agent-ZvwskOQu.js → agent-xQhAQXly.js} +26 -6
  108. package/dist/server/assets/agent-xQhAQXly.js.map +1 -0
  109. package/dist/server/assets/{controlCenterApi-5j3gOXgE.js → controlCenterApi-DNXK7MT1.js} +4 -3
  110. package/dist/server/assets/controlCenterApi-DNXK7MT1.js.map +1 -0
  111. package/dist/server/assets/{manualPluginSynchronization-CzIhZ_Dw.js → manualPluginSynchronization-DFIeUHP9.js} +4 -3
  112. package/dist/server/assets/manualPluginSynchronization-DFIeUHP9.js.map +1 -0
  113. package/dist/server/assets/{readiness-BtntBhDj.js → readiness-31Mqc-9H.js} +2 -2
  114. package/dist/server/assets/{readiness-BtntBhDj.js.map → readiness-31Mqc-9H.js.map} +1 -1
  115. package/dist/server/assets/{relationshipInferenceMaterialization-CR6xyMNL.js → relationshipInferenceMaterialization-Dyix96px.js} +41 -14
  116. package/dist/server/assets/relationshipInferenceMaterialization-Dyix96px.js.map +1 -0
  117. package/dist/server/assets/{workspaceSettings-C2Zsk6RI.js → workspaceSettings-sv8h_h2P.js} +4 -1
  118. package/dist/server/assets/workspaceSettings-sv8h_h2P.js.map +1 -0
  119. package/dist/server/build-graph.json +28 -1
  120. package/dist/server/domain/confluenceTasks.d.ts +27 -0
  121. package/dist/server/domain/confluenceTasks.d.ts.map +1 -0
  122. package/dist/server/domain/deliveryGraph.d.ts +2 -0
  123. package/dist/server/domain/deliveryGraph.d.ts.map +1 -1
  124. package/dist/server/domain/governedAction/bindings.d.ts +2 -0
  125. package/dist/server/domain/governedAction/bindings.d.ts.map +1 -1
  126. package/dist/server/domain/governedAction/model.d.ts +6 -0
  127. package/dist/server/domain/governedAction/model.d.ts.map +1 -1
  128. package/dist/server/domain/index.js +2 -2
  129. package/dist/server/domain/normalizedPage.d.ts +1 -0
  130. package/dist/server/domain/normalizedPage.d.ts.map +1 -1
  131. package/dist/server/domain/releasePipelineApproval.d.ts +31 -0
  132. package/dist/server/domain/releasePipelineApproval.d.ts.map +1 -0
  133. package/dist/server/index.js +5 -5
  134. package/dist/server/server/api/Handlers.d.ts +1 -1
  135. package/dist/server/server/api/Handlers.d.ts.map +1 -1
  136. package/dist/server/server/application/deliveryGraphInspection.d.ts.map +1 -1
  137. package/dist/server/server/application/normalizedPluginPageMaterialization.d.ts.map +1 -1
  138. package/dist/server/server/application/pipelineExecutionProjection.d.ts +1 -0
  139. package/dist/server/server/application/pipelineExecutionProjection.d.ts.map +1 -1
  140. package/dist/server/server/application/portfolioSnapshots.d.ts +4 -0
  141. package/dist/server/server/application/portfolioSnapshots.d.ts.map +1 -1
  142. package/dist/server/server/application/releasePublicationSubmissions.d.ts +32 -1
  143. package/dist/server/server/application/releasePublicationSubmissions.d.ts.map +1 -1
  144. package/dist/server/server/application/releaseRunbookHydration.d.ts +2310 -0
  145. package/dist/server/server/application/releaseRunbookHydration.d.ts.map +1 -0
  146. package/dist/server/server/cli.js +3 -3
  147. package/dist/server/server/governance/governedActionDigests.d.ts +3 -0
  148. package/dist/server/server/governance/governedActionDigests.d.ts.map +1 -1
  149. package/dist/server/server/governance/internal/execution-store/recovery-claim.d.ts +1 -0
  150. package/dist/server/server/governance/internal/execution-store/recovery-claim.d.ts.map +1 -1
  151. package/dist/server/server/index.js +2 -2
  152. package/dist/server/server/persistence/Persistence.d.ts +10 -0
  153. package/dist/server/server/persistence/Persistence.d.ts.map +1 -1
  154. package/dist/server/server/persistence/object-store/BlobPublisher.d.ts.map +1 -1
  155. package/dist/server/server/persistence/object-store/PinnedDirectory.d.ts +2 -2
  156. package/dist/server/server/persistence/object-store/PinnedDirectory.d.ts.map +1 -1
  157. package/dist/server/server/persistence/repositories/delivery-graph/contract.d.ts +10 -0
  158. package/dist/server/server/persistence/repositories/delivery-graph/contract.d.ts.map +1 -1
  159. package/dist/server/server/persistence/repositories/delivery-graph/decode.d.ts +2 -0
  160. package/dist/server/server/persistence/repositories/delivery-graph/decode.d.ts.map +1 -1
  161. package/dist/server/server/persistence/repositories/delivery-graph/read.d.ts +6 -0
  162. package/dist/server/server/persistence/repositories/delivery-graph/read.d.ts.map +1 -1
  163. package/dist/server/server/persistence/repositories/delivery-graph/rows.d.ts +1 -0
  164. package/dist/server/server/persistence/repositories/delivery-graph/rows.d.ts.map +1 -1
  165. package/dist/server/server/persistence/repositories/delivery-graph/write.d.ts +2 -0
  166. package/dist/server/server/persistence/repositories/delivery-graph/write.d.ts.map +1 -1
  167. package/dist/server/server/persistence/repositories/deliveryGraphRepository.d.ts +6 -0
  168. package/dist/server/server/persistence/repositories/deliveryGraphRepository.d.ts.map +1 -1
  169. package/dist/server/server/persistence/repositories/governed-action/codec.d.ts +4 -0
  170. package/dist/server/server/persistence/repositories/governed-action/codec.d.ts.map +1 -1
  171. package/dist/server/server/persistence/repositories/governed-action/contract.d.ts +2 -0
  172. package/dist/server/server/persistence/repositories/governed-action/contract.d.ts.map +1 -1
  173. package/dist/server/server/persistence/repositories/governed-action/read.d.ts +4 -0
  174. package/dist/server/server/persistence/repositories/governed-action/read.d.ts.map +1 -1
  175. package/dist/server/server/persistence/repositories/governed-action/transaction.d.ts +4 -0
  176. package/dist/server/server/persistence/repositories/governed-action/transaction.d.ts.map +1 -1
  177. package/dist/server/server/persistence/repositories/governed-action/write-preparation.d.ts +1 -0
  178. package/dist/server/server/persistence/repositories/governed-action/write-preparation.d.ts.map +1 -1
  179. package/dist/server/server/persistence/repositories/governed-action/write-replay.d.ts +2 -0
  180. package/dist/server/server/persistence/repositories/governed-action/write-replay.d.ts.map +1 -1
  181. package/dist/server/server/persistence/repositories/governed-action/write.d.ts +2 -0
  182. package/dist/server/server/persistence/repositories/governed-action/write.d.ts.map +1 -1
  183. package/dist/server/server/persistence/repositories/governedActionRepository.d.ts +4 -0
  184. package/dist/server/server/persistence/repositories/governedActionRepository.d.ts.map +1 -1
  185. package/package.json +3 -3
  186. package/dist/client/assets/AgentPage-C3LThgPZ.js +0 -3
  187. package/dist/client/assets/AgentPage-C3LThgPZ.js.map +0 -1
  188. package/dist/client/assets/AgentPage-DVSgQgJa.css +0 -1
  189. package/dist/client/assets/AtlassianOAuthCallbackPage-BPoF6oKf.js +0 -2
  190. package/dist/client/assets/BrowserCrypto-BMbjhcvP.js +0 -2
  191. package/dist/client/assets/BrowserSessionHydrator-BC1ymLkL.js +0 -2
  192. package/dist/client/assets/PortfolioOverview-CEI4gpXi.js +0 -2
  193. package/dist/client/assets/ReleaseWorkset-BluAe7Sq.js +0 -2
  194. package/dist/client/assets/ReleaseWorkset-BluAe7Sq.js.map +0 -1
  195. package/dist/client/assets/ServicesPage-_B89DAvG.js +0 -2
  196. package/dist/client/assets/WorkspaceEntityRoute-9iMOV64J.css +0 -1
  197. package/dist/client/assets/WorkspaceEntityRoute-B01fxxB3.js +0 -3
  198. package/dist/client/assets/WorkspaceEntityRoute-B01fxxB3.js.map +0 -1
  199. package/dist/client/assets/WorkspaceHomeLink-CkJfzO25.js +0 -2
  200. package/dist/client/assets/WorkspacePullRequestDetails-HwDgp12e.js +0 -3
  201. package/dist/client/assets/WorkspaceRichText-D1M637Ff.js.map +0 -1
  202. package/dist/client/assets/WorkspaceSettingsPage-DyoGiGJG.js +0 -2
  203. package/dist/client/assets/WorkspaceSettingsPage-DyoGiGJG.js.map +0 -1
  204. package/dist/client/assets/WorkspaceSettingsPage-P6yfac0b.css +0 -1
  205. package/dist/client/assets/agent-api-CeONl_8w.js +0 -19
  206. package/dist/client/assets/agent-api-CeONl_8w.js.map +0 -1
  207. package/dist/client/assets/authenticatedMutationClient-DYaieXUe.js +0 -2
  208. package/dist/client/assets/client-DKS82kT_.js +0 -5
  209. package/dist/client/assets/client-DKS82kT_.js.map +0 -1
  210. package/dist/client/assets/connectionTestTransport-I_Ga9UNs.js +0 -2
  211. package/dist/client/assets/connectionTestTransport-I_Ga9UNs.js.map +0 -1
  212. package/dist/client/assets/releaseRoutes-t9uCfs5T.js +0 -2
  213. package/dist/client/assets/workspaceEntityRoutes-2TejMrzb.js +0 -2
  214. package/dist/client/assets/workspaceEntityRoutes-2TejMrzb.js.map +0 -1
  215. package/dist/server/assets/BindConfig-Bj282xDC.js.map +0 -1
  216. package/dist/server/assets/agent-ZvwskOQu.js.map +0 -1
  217. package/dist/server/assets/controlCenterApi-5j3gOXgE.js.map +0 -1
  218. package/dist/server/assets/manualPluginSynchronization-CzIhZ_Dw.js.map +0 -1
  219. package/dist/server/assets/relationshipInferenceMaterialization-CR6xyMNL.js.map +0 -1
  220. package/dist/server/assets/workspaceSettings-C2Zsk6RI.js.map +0 -1
@@ -1,2 +0,0 @@
1
- import{$i as e,$n as t,Fn as n,Jn as r,Mn as i,Pn as a,Xn as o,Zi as s,_i as c,ai as l,c as u,cr as d,er as f,fr as p,gr as m,nn as h,pi as g,s as _,ur as v}from"./agent-api-CeONl_8w.js";import{a as y,t as b}from"./client-DKS82kT_.js";import{n as x,t as S}from"./BrowserCrypto-BMbjhcvP.js";import{t as C}from"./authenticatedMutationClient-DYaieXUe.js";var w=`cc_atlassian_oauth_setup_intent_state`,T=f(n({preferredSiteId:i(a.check(p(),v(),d(512))),recoveryConnectionId:m(h),providers:u})),E=t=>{let n=o(_)(t);return e(n)?n.success:null},D=e=>`cc_atlassian_oauth_setup_intent:${e}`,O=e=>{try{let t=new URL(e).searchParams.getAll(`state`);return t.length===1?E(t[0]??null):null}catch{return null}},k=(e,n)=>{let r=O(e),i=t(T)(n);if(r===null||s(i))return!1;try{let e=E(sessionStorage.getItem(w));return e!==null&&e!==r&&sessionStorage.removeItem(D(e)),sessionStorage.setItem(D(r),i.success),sessionStorage.setItem(w,r),!0}catch{try{sessionStorage.removeItem(D(r))}catch{}return!1}},A=t=>{let n=E(t);if(n===null)return null;try{let t=D(n),r=sessionStorage.getItem(t);if(r===null)return null;let i=o(T)(r);return e(i)?i.success:(sessionStorage.removeItem(t),sessionStorage.getItem(w)===n&&sessionStorage.removeItem(w),null)}catch{return null}},j=e=>{let t=E(e);if(t!==null)try{sessionStorage.removeItem(D(t)),sessionStorage.getItem(w)===t&&sessionStorage.removeItem(w)}catch{}},M={startAtlassianOAuthGrant:(e,t,n)=>c(l(function*(){return yield*(yield*C).plugins.createAtlassianOAuthGrant({payload:{providers:e,...n===void 0?{}:{configuration:n}}})}).pipe(g(y)),{signal:t}),exchangeAtlassianOAuthGrant:(e,t,n)=>c(l(function*(){return yield*(yield*C).plugins.exchangeAtlassianOAuthGrant({params:{grantId:e},payload:{code:t}})}).pipe(g(y)),{signal:n}),completeAtlassianOAuthGrant:(e,t,n)=>c(l(function*(){return yield*(yield*C).plugins.completeAtlassianOAuthGrant({params:{grantId:e},payload:{cloudId:t}})}).pipe(g(y)),{signal:n}),discoverAtlassianProfiles:e=>c(l(function*(){return yield*(yield*b()).plugins.discoverAtlassianProfiles()}).pipe(g(y)),{signal:e}),discoverAwsProfiles:e=>c(l(function*(){return yield*(yield*b()).plugins.discoverAwsProfiles()}).pipe(g(y)),{signal:e}),discoverAwsResources:(e,t)=>c(l(function*(){return yield*(yield*C).plugins.discoverAwsResources({payload:e})}).pipe(g(y)),{signal:t}),overview:e=>c(l(function*(){return yield*(yield*b()).plugins.overview()}).pipe(g(y)),{signal:e}),patchAccount:(e,t,n)=>c(l(function*(){return yield*(yield*C).plugins.patchProviderAccount({params:{providerAccountId:e},payload:t})}).pipe(g(y)),{signal:n}),create:(e,t)=>c(l(function*(){return yield*(yield*C).plugins.createConnection({payload:e})}).pipe(g(y)),{signal:t}),createBatch:(e,t)=>c(l(function*(){return yield*(yield*C).plugins.createConnections({payload:e})}).pipe(g(y)),{signal:t}),makeConnectionId:()=>c(l(function*(){let e=yield*x;return yield*r(h)(yield*e.randomUUIDv7)}).pipe(g(S))),setEnabled:(e,t,n)=>c(l(function*(){return yield*(yield*C).plugins.setConnectionEnabled({params:{pluginConnectionId:e},payload:{isEnabled:t}})}).pipe(g(y)),{signal:n}),test:(e,t)=>c(l(function*(){return yield*(yield*C).plugins.testConnection({params:{pluginConnectionId:e}})}).pipe(g(y)),{signal:t}),synchronization:(e,t)=>c(l(function*(){return yield*(yield*b()).plugins.synchronization({params:{pluginConnectionId:e}})}).pipe(g(y)),{signal:t}),synchronize:(e,t)=>c(l(function*(){return yield*(yield*C).plugins.synchronizeConnection({params:{pluginConnectionId:e}})}).pipe(g(y)),{signal:t}),administration:(e,t)=>c(l(function*(){return yield*(yield*b()).plugins.administration({params:{pluginConnectionId:e}})}).pipe(g(y)),{signal:t}),reauthorize:(e,t,n,r)=>c(l(function*(){return yield*(yield*C).plugins.reauthorizeConnection({params:{pluginConnectionId:e},payload:{expectedRevision:t,credentials:n}})}).pipe(g(y)),{signal:r}),revoke:(e,t,n)=>c(l(function*(){return yield*(yield*C).plugins.revokeConnection({params:{pluginConnectionId:e},payload:{expectedRevision:t}})}).pipe(g(y)),{signal:n})};export{k as i,j as n,A as r,M as t};
2
- //# sourceMappingURL=connectionTestTransport-I_Ga9UNs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connectionTestTransport-I_Ga9UNs.js","names":[],"sources":["../../../src/client/services/atlassianOAuthSetupIntentStorage.ts","../../../src/client/services/connectionTestTransport.ts"],"sourcesContent":["import * as Result from \"effect/Result\"\nimport * as Schema from \"effect/Schema\"\n\nimport { AtlassianOAuthGrantId, AtlassianOAuthProviderIntent } from \"../../api/plugins.js\"\nimport { PluginConnectionId } from \"../../domain/identifiers.js\"\n\nconst activeGrantStorageKey = \"cc_atlassian_oauth_setup_intent_state\"\nconst StoredAtlassianOAuthSetupIntent = Schema.fromJsonString(Schema.Struct({\n preferredSiteId: Schema.NullOr(\n Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(512))\n ),\n recoveryConnectionId: Schema.optionalKey(PluginConnectionId),\n providers: AtlassianOAuthProviderIntent\n}))\n\n/** Bounded setup target that survives the same-tab OAuth redirect. */\nexport type AtlassianOAuthSetupIntent = typeof StoredAtlassianOAuthSetupIntent.Type\n\nconst decodedGrantId = (value: string | null): AtlassianOAuthGrantId | null => {\n const decoded = Schema.decodeUnknownResult(AtlassianOAuthGrantId)(value)\n return Result.isSuccess(decoded) ? decoded.success : null\n}\n\nconst setupIntentStorageKey = (grantId: AtlassianOAuthGrantId): string => `cc_atlassian_oauth_setup_intent:${grantId}`\n\nconst authorizationGrantId = (authorizationUrl: string): AtlassianOAuthGrantId | null => {\n try {\n const states = new URL(authorizationUrl).searchParams.getAll(\"state\")\n return states.length === 1 ? decodedGrantId(states[0] ?? null) : null\n } catch {\n return null\n }\n}\n\n/** Persist one bounded, schema-valid setup target for the next same-tab Atlassian redirect. */\nexport const rememberAtlassianOAuthSetupIntent = (\n authorizationUrl: string,\n intent: AtlassianOAuthSetupIntent\n): boolean => {\n const grantId = authorizationGrantId(authorizationUrl)\n const encoded = Schema.encodeUnknownResult(StoredAtlassianOAuthSetupIntent)(intent)\n if (grantId === null || Result.isFailure(encoded)) return false\n try {\n const previousGrantId = decodedGrantId(sessionStorage.getItem(activeGrantStorageKey))\n if (previousGrantId !== null && previousGrantId !== grantId) {\n sessionStorage.removeItem(setupIntentStorageKey(previousGrantId))\n }\n sessionStorage.setItem(setupIntentStorageKey(grantId), encoded.success)\n sessionStorage.setItem(activeGrantStorageKey, grantId)\n return true\n } catch {\n try {\n sessionStorage.removeItem(setupIntentStorageKey(grantId))\n } catch {\n // Storage is unavailable; the caller keeps the person on the setup form.\n }\n return false\n }\n}\n\n/** Read only a schema-valid setup target associated with the exact callback state. */\nexport const readAtlassianOAuthSetupIntent = (\n state: string | null\n): AtlassianOAuthSetupIntent | null => {\n const grantId = decodedGrantId(state)\n if (grantId === null) return null\n try {\n const key = setupIntentStorageKey(grantId)\n const source = sessionStorage.getItem(key)\n if (source === null) return null\n const decoded = Schema.decodeUnknownResult(StoredAtlassianOAuthSetupIntent)(source)\n if (Result.isSuccess(decoded)) return decoded.success\n sessionStorage.removeItem(key)\n if (sessionStorage.getItem(activeGrantStorageKey) === grantId) sessionStorage.removeItem(activeGrantStorageKey)\n return null\n } catch {\n return null\n }\n}\n\n/** Forget callback intent once navigation has safely encoded or discarded it. */\nexport const forgetAtlassianOAuthSetupIntent = (state: string | null): void => {\n const grantId = decodedGrantId(state)\n if (grantId === null) return\n try {\n sessionStorage.removeItem(setupIntentStorageKey(grantId))\n if (sessionStorage.getItem(activeGrantStorageKey) === grantId) sessionStorage.removeItem(activeGrantStorageKey)\n } catch {\n // Storage cleanup is best-effort in hardened browser contexts.\n }\n}\n","import * as BrowserCrypto from \"@effect/platform-browser/BrowserCrypto\"\nimport * as Crypto from \"effect/Crypto\"\nimport * as Effect from \"effect/Effect\"\nimport * as Schema from \"effect/Schema\"\nimport * as FetchHttpClient from \"effect/unstable/http/FetchHttpClient\"\n\nimport { makeControlCenterApiClient } from \"../../api/client.js\"\nimport type {\n AtlassianOAuthClientConfiguration,\n AtlassianOAuthGrantExchangeResponse,\n AtlassianOAuthGrantId,\n AtlassianOAuthGrantStartResponse,\n AtlassianOAuthProviderIntent,\n AtlassianProfileDiscoveryResponse,\n AwsProfileDiscoveryResponse,\n AwsResourceDiscoveryRequest,\n AwsResourceDiscoveryResponse,\n CreatePluginConnectionRequest,\n CreatePluginConnectionResponse,\n CreatePluginConnectionsRequest,\n CreatePluginConnectionsResponse,\n PatchProviderAccountRequest,\n PluginConnectionAdministration,\n PluginConnectionSummary,\n PluginConnectionTestResult,\n PluginCredentialReplacement,\n PluginOverviewResponse,\n PluginSynchronizationState\n} from \"../../api/index.js\"\nimport type { DiscoveredAtlassianProfile, ProviderAccountSummary } from \"../../api/plugins.js\"\nimport { PluginConnectionId, type ProviderAccountId } from \"../../domain/identifiers.js\"\nimport { makeAuthenticatedMutationClient } from \"../authenticatedMutationClient.js\"\n\n/** Browser boundary for connection administration reads and live tests. */\nexport interface ConnectionTestTransport {\n /** Optional only for injected legacy/test transports; the browser transport always discovers profiles. */\n readonly discoverAwsProfiles?: (signal: AbortSignal) => Promise<AwsProfileDiscoveryResponse>\n readonly discoverAwsResources?: (\n request: AwsResourceDiscoveryRequest,\n signal: AbortSignal\n ) => Promise<AwsResourceDiscoveryResponse>\n readonly discoverAtlassianProfiles?: (signal: AbortSignal) => Promise<AtlassianProfileDiscoveryResponse>\n readonly startAtlassianOAuthGrant?: (\n providers: AtlassianOAuthProviderIntent,\n signal: AbortSignal,\n configuration?: AtlassianOAuthClientConfiguration\n ) => Promise<AtlassianOAuthGrantStartResponse>\n readonly exchangeAtlassianOAuthGrant?: (\n grantId: AtlassianOAuthGrantId,\n code: string,\n signal: AbortSignal\n ) => Promise<AtlassianOAuthGrantExchangeResponse>\n readonly completeAtlassianOAuthGrant?: (\n grantId: AtlassianOAuthGrantId,\n cloudId: string,\n signal: AbortSignal\n ) => Promise<DiscoveredAtlassianProfile>\n readonly overview: (signal: AbortSignal) => Promise<PluginOverviewResponse>\n readonly patchAccount?: (\n providerAccountId: ProviderAccountId,\n patch: PatchProviderAccountRequest,\n signal: AbortSignal\n ) => Promise<ProviderAccountSummary>\n readonly create: (\n request: CreatePluginConnectionRequest,\n signal: AbortSignal\n ) => Promise<CreatePluginConnectionResponse>\n readonly createBatch?: (\n request: CreatePluginConnectionsRequest,\n signal: AbortSignal\n ) => Promise<CreatePluginConnectionsResponse>\n readonly makeConnectionId: () => Promise<PluginConnectionId>\n readonly setEnabled: (\n pluginConnectionId: PluginConnectionId,\n isEnabled: boolean,\n signal: AbortSignal\n ) => Promise<PluginConnectionSummary>\n readonly test: (pluginConnectionId: PluginConnectionId, signal: AbortSignal) => Promise<PluginConnectionTestResult>\n readonly synchronization?: (\n pluginConnectionId: PluginConnectionId,\n signal: AbortSignal\n ) => Promise<PluginSynchronizationState>\n readonly synchronize?: (\n pluginConnectionId: PluginConnectionId,\n signal: AbortSignal\n ) => Promise<PluginSynchronizationState>\n readonly administration?: (\n pluginConnectionId: PluginConnectionId,\n signal: AbortSignal\n ) => Promise<PluginConnectionAdministration>\n readonly reauthorize?: (\n pluginConnectionId: PluginConnectionId,\n expectedRevision: number,\n credentials: ReadonlyArray<PluginCredentialReplacement>,\n signal: AbortSignal\n ) => Promise<CreatePluginConnectionResponse>\n readonly revoke?: (\n pluginConnectionId: PluginConnectionId,\n expectedRevision: number,\n signal: AbortSignal\n ) => Promise<PluginConnectionSummary>\n}\n\n/** Generated-client transport carrying cookies and the current tab's mutation proof. */\nexport const browserConnectionTestTransport: ConnectionTestTransport = {\n startAtlassianOAuthGrant: (providers, signal, configuration) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.createAtlassianOAuthGrant({\n payload: { providers, ...(configuration === undefined ? {} : { configuration }) }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n exchangeAtlassianOAuthGrant: (grantId, code, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.exchangeAtlassianOAuthGrant({\n params: { grantId },\n payload: { code }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n completeAtlassianOAuthGrant: (grantId, cloudId, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.completeAtlassianOAuthGrant({\n params: { grantId },\n payload: { cloudId }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n discoverAtlassianProfiles: (signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeControlCenterApiClient()\n return yield* client.plugins.discoverAtlassianProfiles()\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n discoverAwsProfiles: (signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeControlCenterApiClient()\n return yield* client.plugins.discoverAwsProfiles()\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n discoverAwsResources: (request, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.discoverAwsResources({ payload: request })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n overview: (signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeControlCenterApiClient()\n return yield* client.plugins.overview()\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n patchAccount: (providerAccountId, patch, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.patchProviderAccount({\n params: { providerAccountId },\n payload: patch\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n create: (request, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.createConnection({ payload: request })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n createBatch: (request, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.createConnections({ payload: request })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n makeConnectionId: () =>\n Effect.runPromise(\n Effect.gen(function*() {\n const cryptoService = yield* Crypto.Crypto\n return yield* Schema.decodeUnknownEffect(PluginConnectionId)(yield* cryptoService.randomUUIDv7)\n }).pipe(Effect.provide(BrowserCrypto.layer))\n ),\n setEnabled: (pluginConnectionId, isEnabled, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.setConnectionEnabled({\n params: { pluginConnectionId },\n payload: { isEnabled }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n test: (pluginConnectionId, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.testConnection({ params: { pluginConnectionId } })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n synchronization: (pluginConnectionId, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeControlCenterApiClient()\n return yield* client.plugins.synchronization({ params: { pluginConnectionId } })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n synchronize: (pluginConnectionId, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.synchronizeConnection({ params: { pluginConnectionId } })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n administration: (pluginConnectionId, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeControlCenterApiClient()\n return yield* client.plugins.administration({ params: { pluginConnectionId } })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n reauthorize: (pluginConnectionId, expectedRevision, credentials, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.reauthorizeConnection({\n params: { pluginConnectionId },\n payload: { expectedRevision, credentials }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n ),\n revoke: (pluginConnectionId, expectedRevision, signal) =>\n Effect.runPromise(\n Effect.gen(function*() {\n const client = yield* makeAuthenticatedMutationClient\n return yield* client.plugins.revokeConnection({\n params: { pluginConnectionId },\n payload: { expectedRevision }\n })\n }).pipe(Effect.provide(FetchHttpClient.layer)),\n { signal }\n )\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{i as e,s as t}from"./releasePaths-XoI2BHX3.js";import{Fn as n,Pn as r,Yn as i,fa as a,kn as o,ln as s,on as c,pa as l}from"./agent-api-CeONl_8w.js";var u=n({hash:r,pathname:r,search:r}),d=n({_tag:o(`release-origin/v1`),origin:u,releaseId:c,workspaceId:s}),f=(e,t,n)=>{let r=i(d)(e);return a(r)?null:x(r.value,t,n).isStored?r.value:null},p=e=>{let t=i(s)(e);return l(t)?t.value:null},m=e=>{let t=i(c)(e);return l(t)?t.value:null},h=e=>({relay:`release-${e}-relay`,verdict:`release-${e}-verdict`,version:`release-${e}-version`}),g=({hash:e,pathname:t,search:n})=>({hash:e,pathname:t,search:n}),_=e=>e.length<=2048&&(e.length===0||e.startsWith(`?`)),v=e=>e.length<=1024&&(e.length===0||e.startsWith(`#`)),y=(n,r)=>n===e(r)||n===t(r),b=(e,t,n)=>({_tag:`release-origin/v1`,origin:n,releaseId:t,workspaceId:e}),x=(t,n,r)=>{let o={hash:``,pathname:e(n),search:``},s=i(d)(t);if(a(s))return{isStored:!1,origin:o};let c=s.value,l=c.workspaceId===n&&c.releaseId===r,u=y(c.origin.pathname,n);return l&&u&&_(c.origin.search)&&v(c.origin.hash)?{isStored:!0,origin:c.origin}:{isStored:!1,origin:o}},S=(e,t,n)=>x(e,t,n).origin,C=({hash:e,pathname:t,search:n})=>`${t}${n}${e}`;export{S as a,h as c,b as i,x as l,m as n,g as o,p as r,C as s,d as t,f as u};
2
- //# sourceMappingURL=releaseRoutes-t9uCfs5T.js.map
@@ -1,2 +0,0 @@
1
- import{n as e}from"./releasePaths-XoI2BHX3.js";import{s as t}from"./index-C7_FDTU7.js";import{Fn as n,Jt as r,Mn as i,Pn as a,Yn as o,fa as s,kn as c,ln as l,on as u,pa as d}from"./agent-api-CeONl_8w.js";import{t as f,u as p}from"./releaseRoutes-t9uCfs5T.js";import{t as m}from"./workspaceEntityPaths-xAl2jRFm.js";var h=n({hash:a,pathname:a,search:a,state:i(f)}),g=n({entityOrigin:n({_tag:c(`entity-origin/v2`),entityId:r,origin:h,workspaceId:l})}),_=e=>{if(e.includes(`?`)||e.includes(`#`))return null;let t=e.split(`/`);if(t.length!==5||t[0]!==``||t[1]!==`w`||t[3]!==`items`)return null;let n=o(l)(t[2]),i=o(r)(t[4]);return d(n)&&d(i)?{entityId:i.value,workspaceId:n.value}:null},v=e=>{let t=o(r)(e);return d(t)?t.value:null},y=e=>({hash:``,pathname:m(e),search:``,state:null}),b=e=>e.length<=2048&&(e.length===0||e.startsWith(`?`)),x=e=>e.length<=1024&&(e.length===0||e.startsWith(`#`)),S=(e,t)=>{if(e.length!==5&&e.length!==6||e[0]!==``||e[1]!==`w`||e[2]!==t||e[3]!==`releases`)return null;let n=o(u)(e[4]);return s(n)||e.length===6&&e[5]!==`preview`?null:{releaseId:n.value,workspaceId:t}},C=(e,t)=>{if(e.length>2048)return!1;let n=e.split(`/`);return n[0]!==``||n[1]!==`w`||n[2]!==t?!1:n.length===4?[`overview`,`work`,`items`,`timeline`].includes(n[3]??``):S(n,t)!==null},w=({hash:e,pathname:t,search:n,state:r})=>{let i=o(l)(t.split(`/`)[2]),a=d(i)?S(t.split(`/`),i.value):null;return{hash:e,pathname:t,search:n,state:a===null?null:p(r,a.workspaceId,a.releaseId)}},T=(e,t)=>{if(!C(e.pathname,t)||!b(e.search)||!x(e.hash))return!1;if(e.state===null)return!0;let n=S(e.pathname.split(`/`),t);return n!==null&&p(e.state,t,n.releaseId)!==null},E=(e,t)=>{let n=o(g)(e);if(s(n))return null;let r=n.value.entityOrigin;return r.workspaceId===t&&T(r.origin,t)?r.origin:null},D=(e,t,n,r)=>({entityOrigin:{_tag:`entity-origin/v2`,entityId:n,origin:E(e,t)??(T(r,t)?r:y(t)),workspaceId:t}}),O=(e,t,n)=>{let r=y(t),i=o(g)(e);if(s(i))return{isStored:!1,origin:r};let a=i.value.entityOrigin;return a.workspaceId===t&&a.entityId===n&&T(a.origin,t)?{isStored:!0,origin:a.origin}:{isStored:!1,origin:r}},k=({hash:e,pathname:t,search:n})=>`${t}${n}${e}`,A=(n,r,i,a,o)=>{let s=S(n.pathname.split(`/`),r),c=a.canonicalReleaseId,l=s===null?a.releaseMembershipsTruncated||a.releaseIds.length!==1||a.releaseIds[0]!==c||c===null||!o.has(c)?null:e(r,c):!a.releaseMembershipsTruncated&&a.releaseIds.includes(s.releaseId)&&o.has(s.releaseId)?e(r,s.releaseId):null;if(l!==null)return l;let u=_(i.pathname);if(u===null||u.workspaceId!==r)return t(i.pathname,i.search,i.hash);let d=new URLSearchParams(n.pathname===m(r)?n.search:``);return d.set(`object`,u.entityId),t(m(r),`?${d.toString()}`,`#item-details`)};export{A as a,O as i,w as n,k as o,D as r,_ as s,v as t};
2
- //# sourceMappingURL=workspaceEntityRoutes-2TejMrzb.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspaceEntityRoutes-2TejMrzb.js","names":[],"sources":["../../../src/client/items/workspaceEntityRoutes.ts"],"sourcesContent":["import * as Option from \"effect/Option\"\nimport * as Schema from \"effect/Schema\"\n\nimport {\n EntityId,\n type EntityId as EntityIdType,\n ReleaseId,\n type ReleaseId as ReleaseIdType,\n WorkspaceId,\n type WorkspaceId as WorkspaceIdType\n} from \"../../domain/identifiers.js\"\nimport { contextualAgentPath } from \"../contextualAgentPath.js\"\nimport { releaseAgentPath } from \"../releases/releasePaths.js\"\nimport { type ReleaseRouteState, ReleaseRouteStateSchema, retainReleaseRouteState } from \"../releases/releaseRoutes.js\"\nimport { workspaceEntityParentPath } from \"../workspaceEntityPaths.js\"\n\nexport { workspaceEntityParentPath, workspaceEntityPath } from \"../workspaceEntityPaths.js\"\n\n/** Exact in-application location preserved while a canonical entity route is open. */\nexport interface WorkspaceEntityOrigin {\n readonly hash: string\n readonly pathname: string\n readonly search: string\n readonly state: ReleaseRouteState | null\n}\n\n/** Versioned, bounded router state for one canonical entity activation. */\nexport interface WorkspaceEntityRouteState {\n readonly entityOrigin: {\n readonly _tag: \"entity-origin/v2\"\n readonly entityId: EntityIdType\n readonly origin: WorkspaceEntityOrigin\n readonly workspaceId: WorkspaceIdType\n }\n}\n\n/** Decoded entity origin plus whether it came from trusted matching history state. */\nexport interface ResolvedWorkspaceEntityOrigin {\n readonly isStored: boolean\n readonly origin: WorkspaceEntityOrigin\n}\n\n/** Decoded target of one exact canonical workspace entity href. */\nexport interface WorkspaceEntityTarget {\n readonly entityId: EntityIdType\n readonly workspaceId: WorkspaceIdType\n}\n\n/** Release membership evidence used to select an unambiguous entity-owned agent thread. */\nexport interface WorkspaceEntityReleaseContext {\n readonly canonicalReleaseId: ReleaseIdType | null\n readonly releaseIds: ReadonlyArray<ReleaseIdType>\n readonly releaseMembershipsTruncated: boolean\n}\n\ninterface LocationParts {\n readonly hash: string\n readonly pathname: string\n readonly search: string\n readonly state?: unknown\n}\n\nconst WorkspaceEntityOriginSchema = Schema.Struct({\n hash: Schema.String,\n pathname: Schema.String,\n search: Schema.String,\n state: Schema.NullOr(ReleaseRouteStateSchema)\n})\n\nconst WorkspaceEntityRouteStateSchema = Schema.Struct({\n entityOrigin: Schema.Struct({\n _tag: Schema.Literal(\"entity-origin/v2\"),\n entityId: EntityId,\n origin: WorkspaceEntityOriginSchema,\n workspaceId: WorkspaceId\n })\n})\n\n/** Decode only an exact canonical entity path, rejecting query, hash, and extra path material. */\nexport const workspaceEntityTargetFromHref = (href: string): WorkspaceEntityTarget | null => {\n if (href.includes(\"?\") || href.includes(\"#\")) return null\n const parts = href.split(\"/\")\n if (parts.length !== 5 || parts[0] !== \"\" || parts[1] !== \"w\" || parts[3] !== \"items\") return null\n const workspaceId = Schema.decodeUnknownOption(WorkspaceId)(parts[2])\n const entityId = Schema.decodeUnknownOption(EntityId)(parts[4])\n return Option.isSome(workspaceId) && Option.isSome(entityId)\n ? { entityId: entityId.value, workspaceId: workspaceId.value }\n : null\n}\n\n/** Decode one entity route segment at the browser boundary. */\nexport const decodeEntityRouteId = (value: unknown): EntityIdType | null => {\n const decoded = Schema.decodeUnknownOption(EntityId)(value)\n return Option.isSome(decoded) ? decoded.value : null\n}\n\nconst fallbackOrigin = (workspaceId: WorkspaceIdType): WorkspaceEntityOrigin => ({\n hash: \"\",\n pathname: workspaceEntityParentPath(workspaceId),\n search: \"\",\n state: null\n})\n\nconst isSearch = (search: string): boolean => search.length <= 2_048 && (search.length === 0 || search.startsWith(\"?\"))\n\nconst isHash = (hash: string): boolean => hash.length <= 1_024 && (hash.length === 0 || hash.startsWith(\"#\"))\n\nconst releaseOriginTarget = (\n parts: ReadonlyArray<string>,\n workspaceId: WorkspaceIdType\n): { readonly releaseId: ReleaseIdType; readonly workspaceId: WorkspaceIdType } | null => {\n if (parts.length !== 5 && parts.length !== 6) return null\n if (parts[0] !== \"\" || parts[1] !== \"w\" || parts[2] !== workspaceId || parts[3] !== \"releases\") return null\n const releaseId = Schema.decodeUnknownOption(ReleaseId)(parts[4])\n if (Option.isNone(releaseId) || (parts.length === 6 && parts[5] !== \"preview\")) return null\n return { releaseId: releaseId.value, workspaceId }\n}\n\nconst isRecognizedOriginPath = (pathname: string, workspaceId: WorkspaceIdType): boolean => {\n if (pathname.length > 2_048) return false\n const parts = pathname.split(\"/\")\n if (parts[0] !== \"\" || parts[1] !== \"w\" || parts[2] !== workspaceId) return false\n if (parts.length === 4) return [\"overview\", \"work\", \"items\", \"timeline\"].includes(parts[3] ?? \"\")\n return releaseOriginTarget(parts, workspaceId) !== null\n}\n\n/** Capture an exact location while retaining only matching, bounded release origin state. */\nexport const entityOriginFromLocation = ({\n hash,\n pathname,\n search,\n state\n}: LocationParts): WorkspaceEntityOrigin => {\n const workspaceId = Schema.decodeUnknownOption(WorkspaceId)(pathname.split(\"/\")[2])\n const target = Option.isSome(workspaceId) ? releaseOriginTarget(pathname.split(\"/\"), workspaceId.value) : null\n return {\n hash,\n pathname,\n search,\n state: target === null ? null : retainReleaseRouteState(state, target.workspaceId, target.releaseId)\n }\n}\n\n/** Confirm an origin is bounded and belongs to a supported page in the exact workspace. */\nexport const isSafeWorkspaceEntityOrigin = (\n origin: WorkspaceEntityOrigin,\n workspaceId: WorkspaceIdType\n): boolean => {\n if (!isRecognizedOriginPath(origin.pathname, workspaceId) || !isSearch(origin.search) || !isHash(origin.hash)) {\n return false\n }\n if (origin.state === null) return true\n const target = releaseOriginTarget(origin.pathname.split(\"/\"), workspaceId)\n return target !== null && retainReleaseRouteState(origin.state, workspaceId, target.releaseId) !== null\n}\n\nconst reusableStoredOrigin = (\n state: unknown,\n workspaceId: WorkspaceIdType\n): WorkspaceEntityOrigin | null => {\n const decoded = Schema.decodeUnknownOption(WorkspaceEntityRouteStateSchema)(state)\n if (Option.isNone(decoded)) return null\n const marker = decoded.value.entityOrigin\n return marker.workspaceId === workspaceId && isSafeWorkspaceEntityOrigin(marker.origin, workspaceId)\n ? marker.origin\n : null\n}\n\n/**\n * Construct bounded entity route state.\n *\n * A previously validated entity origin is carried through related-entity navigation so the\n * shell's explicit Back action still returns to the root activation surface.\n */\nexport const makeWorkspaceEntityRouteState = (\n state: unknown,\n workspaceId: WorkspaceIdType,\n entityId: EntityIdType,\n origin: WorkspaceEntityOrigin\n): WorkspaceEntityRouteState => ({\n entityOrigin: {\n _tag: \"entity-origin/v2\",\n entityId,\n origin: reusableStoredOrigin(state, workspaceId) ??\n (isSafeWorkspaceEntityOrigin(origin, workspaceId) ? origin : fallbackOrigin(workspaceId)),\n workspaceId\n }\n})\n\n/** Decode safe history state for the exact workspace/entity pair or use the Items parent. */\nexport const resolveWorkspaceEntityOrigin = (\n state: unknown,\n workspaceId: WorkspaceIdType,\n entityId: EntityIdType\n): ResolvedWorkspaceEntityOrigin => {\n const fallback = fallbackOrigin(workspaceId)\n const decoded = Schema.decodeUnknownOption(WorkspaceEntityRouteStateSchema)(state)\n if (Option.isNone(decoded)) return { isStored: false, origin: fallback }\n const marker = decoded.value.entityOrigin\n return marker.workspaceId === workspaceId &&\n marker.entityId === entityId &&\n isSafeWorkspaceEntityOrigin(marker.origin, workspaceId)\n ? { isStored: true, origin: marker.origin }\n : { isStored: false, origin: fallback }\n}\n\n/** Serialize an exact validated origin for React Router navigation. */\nexport const workspaceEntityOriginHref = ({\n hash,\n pathname,\n search\n}: WorkspaceEntityOrigin): string => `${pathname}${search}${hash}`\n\n/** Resolve a release-owned agent thread only when the stored origin is an exact release route. */\nexport const workspaceEntityOriginAgentPath = (\n origin: WorkspaceEntityOrigin,\n workspaceId: WorkspaceIdType,\n routableReleaseIds: ReadonlySet<ReleaseIdType>\n): string | null => {\n const target = releaseOriginTarget(origin.pathname.split(\"/\"), workspaceId)\n return target === null || !routableReleaseIds.has(target.releaseId)\n ? null\n : releaseAgentPath(target.workspaceId, target.releaseId)\n}\n\n/** Keep entity actions in a release-owned thread, falling back to the current-page context. */\nexport const workspaceEntityAgentPath = (\n origin: WorkspaceEntityOrigin,\n workspaceId: WorkspaceIdType,\n current: Pick<LocationParts, \"hash\" | \"pathname\" | \"search\">,\n releaseContext: WorkspaceEntityReleaseContext,\n routableReleaseIds: ReadonlySet<ReleaseIdType>\n): string => {\n const originRelease = releaseOriginTarget(origin.pathname.split(\"/\"), workspaceId)\n const canonicalReleaseId = releaseContext.canonicalReleaseId\n const releasePath = originRelease === null\n ? releaseContext.releaseMembershipsTruncated ||\n releaseContext.releaseIds.length !== 1 ||\n releaseContext.releaseIds[0] !== canonicalReleaseId ||\n canonicalReleaseId === null ||\n !routableReleaseIds.has(canonicalReleaseId)\n ? null\n : releaseAgentPath(workspaceId, canonicalReleaseId)\n : !releaseContext.releaseMembershipsTruncated &&\n releaseContext.releaseIds.includes(originRelease.releaseId) &&\n routableReleaseIds.has(originRelease.releaseId)\n ? releaseAgentPath(workspaceId, originRelease.releaseId)\n : null\n if (releasePath !== null) return releasePath\n\n const entity = workspaceEntityTargetFromHref(current.pathname)\n if (entity === null || entity.workspaceId !== workspaceId) {\n return contextualAgentPath(current.pathname, current.search, current.hash)\n }\n const itemSearch = new URLSearchParams(\n origin.pathname === workspaceEntityParentPath(workspaceId) ? origin.search : \"\"\n )\n itemSearch.set(\"object\", entity.entityId)\n return contextualAgentPath(\n workspaceEntityParentPath(workspaceId),\n `?${itemSearch.toString()}`,\n \"#item-details\"\n )\n}\n"],"mappings":"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"}