@knpkv/control-center 0.1.0 → 0.2.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 (115) hide show
  1. package/dist/client/.vite/manifest.json +127 -125
  2. package/dist/client/assets/{ActiveWorkPage-Bvji6Tys.js → ActiveWorkPage-C6QwDV1Y.js} +2 -2
  3. package/dist/client/assets/{ActiveWorkPage-Bvji6Tys.js.map → ActiveWorkPage-C6QwDV1Y.js.map} +1 -1
  4. package/dist/client/assets/{AgentPage-Bom41la2.js → AgentPage-OqwP6uRi.js} +2 -2
  5. package/dist/client/assets/{AgentPage-Bom41la2.js.map → AgentPage-OqwP6uRi.js.map} +1 -1
  6. package/dist/client/assets/{AtlassianOAuthCallbackPage-dr-B9-DD.js → AtlassianOAuthCallbackPage-Bm7UhU-h.js} +2 -2
  7. package/dist/client/assets/{AtlassianOAuthCallbackPage-dr-B9-DD.js.map → AtlassianOAuthCallbackPage-Bm7UhU-h.js.map} +1 -1
  8. package/dist/client/assets/{AuthorizedSharePage-C-P-PNfm.js → AuthorizedSharePage-DblP3USU.js} +2 -2
  9. package/dist/client/assets/{AuthorizedSharePage-C-P-PNfm.js.map → AuthorizedSharePage-DblP3USU.js.map} +1 -1
  10. package/dist/client/assets/{BrowserCrypto-BPiuCuW-.js → BrowserCrypto-BGGRC6iW.js} +2 -2
  11. package/dist/client/assets/{BrowserCrypto-BPiuCuW-.js.map → BrowserCrypto-BGGRC6iW.js.map} +1 -1
  12. package/dist/client/assets/{BrowserSessionHydrator-C8F_LGhg.js → BrowserSessionHydrator-39UDbHf0.js} +2 -2
  13. package/dist/client/assets/{BrowserSessionHydrator-C8F_LGhg.js.map → BrowserSessionHydrator-39UDbHf0.js.map} +1 -1
  14. package/dist/client/assets/{CommandSearch-D6iFcdvj.js → CommandSearch-D4Fnjsl-.js} +2 -2
  15. package/dist/client/assets/{CommandSearch-D6iFcdvj.js.map → CommandSearch-D4Fnjsl-.js.map} +1 -1
  16. package/dist/client/assets/{ItemsPage-x39U11an.js → ItemsPage-BZQiTh9b.js} +2 -2
  17. package/dist/client/assets/{ItemsPage-x39U11an.js.map → ItemsPage-BZQiTh9b.js.map} +1 -1
  18. package/dist/client/assets/{PairPage-D5vlz4OG.js → PairPage-Dvfse5ky.js} +2 -2
  19. package/dist/client/assets/{PairPage-D5vlz4OG.js.map → PairPage-Dvfse5ky.js.map} +1 -1
  20. package/dist/client/assets/{PortfolioOverview-DSUabOmm.js → PortfolioOverview-DeJcfXcw.js} +2 -2
  21. package/dist/client/assets/{PortfolioOverview-DSUabOmm.js.map → PortfolioOverview-DeJcfXcw.js.map} +1 -1
  22. package/dist/client/assets/{ReleaseRoute-DyDm5s85.js → ReleaseRoute-D9q8_sCk.js} +2 -2
  23. package/dist/client/assets/{ReleaseRoute-DyDm5s85.js.map → ReleaseRoute-D9q8_sCk.js.map} +1 -1
  24. package/dist/client/assets/ReleaseWorkset-Bs_FXlbC.js +2 -0
  25. package/dist/client/assets/ReleaseWorkset-Bs_FXlbC.js.map +1 -0
  26. package/dist/client/assets/{ServicesPage-CoMVH2Si.js → ServicesPage-Co6GJHgc.js} +2 -2
  27. package/dist/client/assets/{ServicesPage-CoMVH2Si.js.map → ServicesPage-Co6GJHgc.js.map} +1 -1
  28. package/dist/client/assets/{TimelinePage-D8Fj_351.js → TimelinePage-CM2og72M.js} +2 -2
  29. package/dist/client/assets/{TimelinePage-D8Fj_351.js.map → TimelinePage-CM2og72M.js.map} +1 -1
  30. package/dist/client/assets/{WorkspaceEntityLink-BRifdJHn.js → WorkspaceEntityLink-CTw_He-8.js} +2 -2
  31. package/dist/client/assets/{WorkspaceEntityLink-BRifdJHn.js.map → WorkspaceEntityLink-CTw_He-8.js.map} +1 -1
  32. package/dist/client/assets/{WorkspaceEntityRoute-BwpujSqk.css → WorkspaceEntityRoute-Bdmv6ki4.css} +1 -1
  33. package/dist/client/assets/WorkspaceEntityRoute-BnsmaeS2.js +30 -0
  34. package/dist/client/assets/WorkspaceEntityRoute-BnsmaeS2.js.map +1 -0
  35. package/dist/client/assets/{WorkspaceReleaseLayout-DDLdY0rU.js → WorkspaceReleaseLayout-Ba6keUju.js} +2 -2
  36. package/dist/client/assets/{WorkspaceReleaseLayout-DDLdY0rU.js.map → WorkspaceReleaseLayout-Ba6keUju.js.map} +1 -1
  37. package/dist/client/assets/{authenticatedMutationClient-D5yD0rch.js → authenticatedMutationClient-CJklf3iD.js} +2 -2
  38. package/dist/client/assets/{authenticatedMutationClient-D5yD0rch.js.map → authenticatedMutationClient-CJklf3iD.js.map} +1 -1
  39. package/dist/client/assets/{authorizedShareTransport-Dyj53kJf.js → authorizedShareTransport-Xg20SHJ5.js} +2 -2
  40. package/dist/client/assets/{authorizedShareTransport-Dyj53kJf.js.map → authorizedShareTransport-Xg20SHJ5.js.map} +1 -1
  41. package/dist/client/assets/{client-OmvShYdC.js → client-P7FaPwzJ.js} +2 -2
  42. package/dist/client/assets/{client-OmvShYdC.js.map → client-P7FaPwzJ.js.map} +1 -1
  43. package/dist/client/assets/{connectionTestTransport-c25QXx7A.js → connectionTestTransport-C9iPOkKM.js} +2 -2
  44. package/dist/client/assets/{connectionTestTransport-c25QXx7A.js.map → connectionTestTransport-C9iPOkKM.js.map} +1 -1
  45. package/dist/client/assets/{index-DLoOV6Hp.js → index-DpW_ckau.js} +3 -3
  46. package/dist/client/assets/{index-DLoOV6Hp.js.map → index-DpW_ckau.js.map} +1 -1
  47. package/dist/client/assets/{patterns-DEbg7R-A-Cw0A2uKS.js → patterns-DEbg7R-A-BhsMyh9D.js} +2 -2
  48. package/dist/client/assets/{patterns-DEbg7R-A-Cw0A2uKS.js.map → patterns-DEbg7R-A-BhsMyh9D.js.map} +1 -1
  49. package/dist/client/assets/{presentPortfolio-CkRqd_zz.js → presentPortfolio-D-v615bg.js} +2 -2
  50. package/dist/client/assets/{presentPortfolio-CkRqd_zz.js.map → presentPortfolio-D-v615bg.js.map} +1 -1
  51. package/dist/client/assets/presentWorkspaceItems-IAp5SnpB.js +2 -0
  52. package/dist/client/assets/presentWorkspaceItems-IAp5SnpB.js.map +1 -0
  53. package/dist/client/assets/{releaseRoutes-DSWkTh-E.js → releaseRoutes-CfaNElmG.js} +2 -2
  54. package/dist/client/assets/{releaseRoutes-DSWkTh-E.js.map → releaseRoutes-CfaNElmG.js.map} +1 -1
  55. package/dist/client/assets/{serviceOnboarding-B9pvdyWf.js → serviceOnboarding-BZ2U_Ugw.js} +2 -2
  56. package/dist/client/assets/{serviceOnboarding-B9pvdyWf.js.map → serviceOnboarding-BZ2U_Ugw.js.map} +1 -1
  57. package/dist/client/assets/{useWorkspaceItems-D0FuHGto.js → useWorkspaceItems-DQTYaq1R.js} +2 -2
  58. package/dist/client/assets/{useWorkspaceItems-D0FuHGto.js.map → useWorkspaceItems-DQTYaq1R.js.map} +1 -1
  59. package/dist/client/assets/workspaceEntityRoutes-Biw67kRR.js +2 -0
  60. package/dist/client/assets/workspaceEntityRoutes-Biw67kRR.js.map +1 -0
  61. package/dist/client/build-graph.json +32 -2
  62. package/dist/client/index.html +1 -1
  63. package/dist/server/api/deliveryGraph.d.ts +126 -0
  64. package/dist/server/api/deliveryGraph.d.ts.map +1 -1
  65. package/dist/server/api/index.js +2 -2
  66. package/dist/server/api/shares.d.ts +14 -0
  67. package/dist/server/api/shares.d.ts.map +1 -1
  68. package/dist/server/assets/{BindConfig-BjK10BEb.js → BindConfig-Dk3vjYZc.js} +7 -7
  69. package/dist/server/assets/{BindConfig-BjK10BEb.js.map → BindConfig-Dk3vjYZc.js.map} +1 -1
  70. package/dist/server/assets/{controlCenterApi-tZPvRPRH.js → controlCenterApi-Dsug4Rzi.js} +2 -2
  71. package/dist/server/assets/{controlCenterApi-tZPvRPRH.js.map → controlCenterApi-Dsug4Rzi.js.map} +1 -1
  72. package/dist/server/assets/{domainEvent-x7yeq-gU.js → domainEvent-CZLKMqgn.js} +13 -2
  73. package/dist/server/assets/{domainEvent-x7yeq-gU.js.map → domainEvent-CZLKMqgn.js.map} +1 -1
  74. package/dist/server/assets/{firstPartyServices-Y41P8uke.js → firstPartyServices-BWdrzdfD.js} +2 -2
  75. package/dist/server/assets/{firstPartyServices-Y41P8uke.js.map → firstPartyServices-BWdrzdfD.js.map} +1 -1
  76. package/dist/server/assets/{manualPluginSynchronization-C0aHB4UM.js → manualPluginSynchronization-CDnX9qXi.js} +64 -23
  77. package/dist/server/assets/manualPluginSynchronization-CDnX9qXi.js.map +1 -0
  78. package/dist/server/assets/{portfolioInvalidation-Ds9Xm4_P.js → portfolioInvalidation-iTUo5N4r.js} +26 -6
  79. package/dist/server/assets/portfolioInvalidation-iTUo5N4r.js.map +1 -0
  80. package/dist/server/assets/{readiness-CzU3vjYQ.js → readiness-CZBkcjLP.js} +2 -2
  81. package/dist/server/assets/{readiness-CzU3vjYQ.js.map → readiness-CZBkcjLP.js.map} +1 -1
  82. package/dist/server/build-graph.json +1 -0
  83. package/dist/server/domain/deliveryGraph.d.ts +14 -0
  84. package/dist/server/domain/deliveryGraph.d.ts.map +1 -1
  85. package/dist/server/domain/index.js +3 -3
  86. package/dist/server/index.js +4 -4
  87. package/dist/server/server/application/normalizedPluginPageMaterialization.d.ts +1 -1
  88. package/dist/server/server/application/normalizedPluginPageMaterialization.d.ts.map +1 -1
  89. package/dist/server/server/cli.js +4 -4
  90. package/dist/server/server/index.js +3 -3
  91. package/dist/server/server/persistence/Persistence.d.ts +35 -0
  92. package/dist/server/server/persistence/Persistence.d.ts.map +1 -1
  93. package/dist/server/server/persistence/repositories/delivery-graph/contract.d.ts +56 -0
  94. package/dist/server/server/persistence/repositories/delivery-graph/contract.d.ts.map +1 -1
  95. package/dist/server/server/persistence/repositories/delivery-graph/decode.d.ts +7 -0
  96. package/dist/server/server/persistence/repositories/delivery-graph/decode.d.ts.map +1 -1
  97. package/dist/server/server/persistence/repositories/delivery-graph/read.d.ts +35 -0
  98. package/dist/server/server/persistence/repositories/delivery-graph/read.d.ts.map +1 -1
  99. package/dist/server/server/persistence/repositories/delivery-graph/rows.d.ts +7 -0
  100. package/dist/server/server/persistence/repositories/delivery-graph/rows.d.ts.map +1 -1
  101. package/dist/server/server/persistence/repositories/delivery-graph/write.d.ts +14 -0
  102. package/dist/server/server/persistence/repositories/delivery-graph/write.d.ts.map +1 -1
  103. package/dist/server/server/persistence/repositories/deliveryGraphRepository.d.ts +35 -0
  104. package/dist/server/server/persistence/repositories/deliveryGraphRepository.d.ts.map +1 -1
  105. package/package.json +6 -6
  106. package/dist/client/assets/ReleaseWorkset-BhGacsgb.js +0 -2
  107. package/dist/client/assets/ReleaseWorkset-BhGacsgb.js.map +0 -1
  108. package/dist/client/assets/WorkspaceEntityRoute-DPci8Q8I.js +0 -30
  109. package/dist/client/assets/WorkspaceEntityRoute-DPci8Q8I.js.map +0 -1
  110. package/dist/client/assets/presentWorkspaceItems-BU__8LcC.js +0 -2
  111. package/dist/client/assets/presentWorkspaceItems-BU__8LcC.js.map +0 -1
  112. package/dist/client/assets/workspaceEntityRoutes-CRcfSq7c.js +0 -2
  113. package/dist/client/assets/workspaceEntityRoutes-CRcfSq7c.js.map +0 -1
  114. package/dist/server/assets/manualPluginSynchronization-C0aHB4UM.js.map +0 -1
  115. package/dist/server/assets/portfolioInvalidation-Ds9Xm4_P.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { mr as ProviderId } from "./domainEvent-x7yeq-gU.js";
1
+ import { mr as ProviderId } from "./domainEvent-CZLKMqgn.js";
2
2
  import * as Schema from "effect/Schema";
3
3
  //#region src/domain/firstPartyServices.ts
4
4
  /** Safe provider identity rendered before a browser has access to workspace connections. */
@@ -46,4 +46,4 @@ var firstPartyServiceIdentities = [
46
46
  //#endregion
47
47
  export { firstPartyServiceIdentities as n, firstPartyServiceIdentityByProvider as r, FirstPartyServiceIdentity as t };
48
48
 
49
- //# sourceMappingURL=firstPartyServices-Y41P8uke.js.map
49
+ //# sourceMappingURL=firstPartyServices-BWdrzdfD.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"firstPartyServices-Y41P8uke.js","names":[],"sources":["../../../src/domain/firstPartyServices.ts"],"sourcesContent":["import * as Schema from \"effect/Schema\"\n\nimport { ProviderId } from \"./sourceRevision.js\"\n\n/** Safe provider identity rendered before a browser has access to workspace connections. */\nexport const FirstPartyServiceIdentity = Schema.Struct({\n providerId: ProviderId,\n displayName: Schema.String,\n description: Schema.String\n}).annotate({ identifier: \"FirstPartyServiceIdentity\" })\n\n/** Decoded safe first-party provider identity. */\nexport type FirstPartyServiceIdentity = typeof FirstPartyServiceIdentity.Type\n\n/** Stable provider lookup shared by public previews and the server-owned setup catalog. */\nexport const firstPartyServiceIdentityByProvider = {\n codecommit: {\n providerId: \"codecommit\",\n displayName: \"CodeCommit\",\n description: \"Read pull requests from one AWS CodeCommit repository.\"\n },\n codepipeline: {\n providerId: \"codepipeline\",\n displayName: \"CodePipeline\",\n description: \"Read pipeline and execution state from AWS CodePipeline.\"\n },\n jira: {\n providerId: \"jira\",\n displayName: \"Jira\",\n description: \"Read delivery issues from Jira Cloud.\"\n },\n confluence: {\n providerId: \"confluence\",\n displayName: \"Confluence\",\n description: \"Read release documentation from Confluence Cloud.\"\n },\n clockify: {\n providerId: \"clockify\",\n displayName: \"Clockify\",\n description: \"Read bounded time-entry evidence from Clockify.\"\n }\n} satisfies Readonly<Record<typeof ProviderId.Type, FirstPartyServiceIdentity>>\n\n/** Stable first-party services available to every Control Center installation. */\nexport const firstPartyServiceIdentities = [\n firstPartyServiceIdentityByProvider.codecommit,\n firstPartyServiceIdentityByProvider.codepipeline,\n firstPartyServiceIdentityByProvider.jira,\n firstPartyServiceIdentityByProvider.confluence,\n firstPartyServiceIdentityByProvider.clockify\n] satisfies ReadonlyArray<FirstPartyServiceIdentity>\n"],"mappings":";;;;AAKA,IAAa,4BAA4B,OAAO,OAAO;CACrD,YAAY;CACZ,aAAa,OAAO;CACpB,aAAa,OAAO;AACtB,CAAC,CAAC,CAAC,SAAS,EAAE,YAAY,4BAA4B,CAAC;;AAMvD,IAAa,sCAAsC;CACjD,YAAY;EACV,YAAY;EACZ,aAAa;EACb,aAAa;CACf;CACA,cAAc;EACZ,YAAY;EACZ,aAAa;EACb,aAAa;CACf;CACA,MAAM;EACJ,YAAY;EACZ,aAAa;EACb,aAAa;CACf;CACA,YAAY;EACV,YAAY;EACZ,aAAa;EACb,aAAa;CACf;CACA,UAAU;EACR,YAAY;EACZ,aAAa;EACb,aAAa;CACf;AACF;;AAGA,IAAa,8BAA8B;CACzC,oCAAoC;CACpC,oCAAoC;CACpC,oCAAoC;CACpC,oCAAoC;CACpC,oCAAoC;AACtC"}
1
+ {"version":3,"file":"firstPartyServices-BWdrzdfD.js","names":[],"sources":["../../../src/domain/firstPartyServices.ts"],"sourcesContent":["import * as Schema from \"effect/Schema\"\n\nimport { ProviderId } from \"./sourceRevision.js\"\n\n/** Safe provider identity rendered before a browser has access to workspace connections. */\nexport const FirstPartyServiceIdentity = Schema.Struct({\n providerId: ProviderId,\n displayName: Schema.String,\n description: Schema.String\n}).annotate({ identifier: \"FirstPartyServiceIdentity\" })\n\n/** Decoded safe first-party provider identity. */\nexport type FirstPartyServiceIdentity = typeof FirstPartyServiceIdentity.Type\n\n/** Stable provider lookup shared by public previews and the server-owned setup catalog. */\nexport const firstPartyServiceIdentityByProvider = {\n codecommit: {\n providerId: \"codecommit\",\n displayName: \"CodeCommit\",\n description: \"Read pull requests from one AWS CodeCommit repository.\"\n },\n codepipeline: {\n providerId: \"codepipeline\",\n displayName: \"CodePipeline\",\n description: \"Read pipeline and execution state from AWS CodePipeline.\"\n },\n jira: {\n providerId: \"jira\",\n displayName: \"Jira\",\n description: \"Read delivery issues from Jira Cloud.\"\n },\n confluence: {\n providerId: \"confluence\",\n displayName: \"Confluence\",\n description: \"Read release documentation from Confluence Cloud.\"\n },\n clockify: {\n providerId: \"clockify\",\n displayName: \"Clockify\",\n description: \"Read bounded time-entry evidence from Clockify.\"\n }\n} satisfies Readonly<Record<typeof ProviderId.Type, FirstPartyServiceIdentity>>\n\n/** Stable first-party services available to every Control Center installation. */\nexport const firstPartyServiceIdentities = [\n firstPartyServiceIdentityByProvider.codecommit,\n firstPartyServiceIdentityByProvider.codepipeline,\n firstPartyServiceIdentityByProvider.jira,\n firstPartyServiceIdentityByProvider.confluence,\n firstPartyServiceIdentityByProvider.clockify\n] satisfies ReadonlyArray<FirstPartyServiceIdentity>\n"],"mappings":";;;;AAKA,IAAa,4BAA4B,OAAO,OAAO;CACrD,YAAY;CACZ,aAAa,OAAO;CACpB,aAAa,OAAO;AACtB,CAAC,CAAC,CAAC,SAAS,EAAE,YAAY,4BAA4B,CAAC;;AAMvD,IAAa,sCAAsC;CACjD,YAAY;EACV,YAAY;EACZ,aAAa;EACb,aAAa;CACf;CACA,cAAc;EACZ,YAAY;EACZ,aAAa;EACb,aAAa;CACf;CACA,MAAM;EACJ,YAAY;EACZ,aAAa;EACb,aAAa;CACf;CACA,YAAY;EACV,YAAY;EACZ,aAAa;EACb,aAAa;CACf;CACA,UAAU;EACR,YAAY;EACZ,aAAa;EACb,aAAa;CACf;AACF;;AAGA,IAAa,8BAA8B;CACzC,oCAAoC;CACpC,oCAAoC;CACpC,oCAAoC;CACpC,oCAAoC;CACpC,oCAAoC;AACtC"}
@@ -1,6 +1,6 @@
1
- import { Cr as EntityId, Dr as EvidenceId, Er as EvidenceClaimId, F as EvidenceValue, Fr as PersonId, H as RelationshipKind, Hr as ReleaseId, It as deriveReleaseRelay, N as EvidencePredicate, Nr as GraphNodeId, R as LedgerRevision, Vt as Person, dr as PluginHealth, mt as NegotiatedPluginDescriptorV1, pr as NormalizationSchemaVersion, qt as derivePersonInitials, rt as NormalizedIssueAttributes, vr as VendorImmutableId, wr as EnvironmentId, xt as Release, zr as RelationshipId } from "./domainEvent-x7yeq-gU.js";
2
- import { Ct as PluginCheckpointV1, jt as PluginSyncRequestV1 } from "./readiness-CzU3vjYQ.js";
3
- import { Kn as PersistenceOperationError, L as Persistence, Ot as DeliveryGraphWriteBatch, Q as PluginMalformedResponseFailure, S as ApplicationInvalidRequest, T as ApplicationServiceUnavailable, Z as PluginConflictFailure, i as supportsFirstPartySynchronization, it as pluginFailureClass, n as DomainEventWakeups, r as firstPartySyncStreamKey, st as PluginStreamKey, t as appendPortfolioInvalidation, v as PluginConnection, w as ApplicationResourceNotFound } from "./portfolioInvalidation-Ds9Xm4_P.js";
1
+ import { Cr as EntityId, Dr as EvidenceId, Er as EvidenceClaimId, F as EvidenceValue, Fr as PersonId, H as RelationshipKind, Hr as ReleaseId, It as deriveReleaseRelay, N as EvidencePredicate, Nr as GraphNodeId, R as LedgerRevision, Vt as Person, dr as PluginHealth, mt as NegotiatedPluginDescriptorV1, pr as NormalizationSchemaVersion, qt as derivePersonInitials, rt as NormalizedIssueAttributes, vr as VendorImmutableId, wr as EnvironmentId, xt as Release, yr as UtcTimestamp, zr as RelationshipId } from "./domainEvent-CZLKMqgn.js";
2
+ import { Ct as PluginCheckpointV1, jt as PluginSyncRequestV1 } from "./readiness-CZBkcjLP.js";
3
+ import { Kn as PersistenceOperationError, L as Persistence, Ot as DeliveryGraphWriteBatch, Q as PluginMalformedResponseFailure, S as ApplicationInvalidRequest, T as ApplicationServiceUnavailable, Z as PluginConflictFailure, i as supportsFirstPartySynchronization, it as pluginFailureClass, n as DomainEventWakeups, r as firstPartySyncStreamKey, st as PluginStreamKey, t as appendPortfolioInvalidation, v as PluginConnection, w as ApplicationResourceNotFound } from "./portfolioInvalidation-iTUo5N4r.js";
4
4
  import * as Schema from "effect/Schema";
5
5
  import * as DateTime from "effect/DateTime";
6
6
  import * as Effect from "effect/Effect";
@@ -749,6 +749,7 @@ var materializeRelationshipInference = Effect.fn("RelationshipInferenceMateriali
749
749
  //#endregion
750
750
  //#region src/server/application/normalizedPluginPageMaterialization.ts
751
751
  var OptionalText = Schema.optionalKey(Schema.NullOr(Schema.String));
752
+ var OptionalUnknown = Schema.optionalKey(Schema.NullOr(Schema.Unknown));
752
753
  var NamedText = Schema.Union([Schema.String, Schema.Struct({ name: Schema.optionalKey(Schema.NullOr(Schema.String)) })]);
753
754
  var EntityAttributes = Schema.Struct({
754
755
  key: OptionalText,
@@ -759,6 +760,12 @@ var EntityAttributes = Schema.Struct({
759
760
  sourceBranch: OptionalText,
760
761
  targetBranch: OptionalText,
761
762
  headRevision: OptionalText,
763
+ baseRevision: OptionalText,
764
+ mergeBase: OptionalText,
765
+ description: OptionalText,
766
+ authorArn: OptionalText,
767
+ creationDate: OptionalUnknown,
768
+ lastActivityDate: OptionalUnknown,
762
769
  reviewState: OptionalText,
763
770
  spaceKey: OptionalText,
764
771
  spaceId: OptionalText,
@@ -828,7 +835,15 @@ var bounded = (value, fallback, maximum) => {
828
835
  const normalized = value?.trim();
829
836
  return (normalized === void 0 || normalized.length === 0 ? fallback : normalized).slice(0, maximum);
830
837
  };
838
+ var optionalBounded = (value, maximum) => {
839
+ const normalized = value?.trim();
840
+ return normalized === void 0 || normalized.length === 0 ? null : normalized.slice(0, maximum);
841
+ };
831
842
  var namedText = (value) => typeof value === "string" ? value : value?.name ?? null;
843
+ var decodedPullRequestTimestamp = Effect.fn("NormalizedPluginPageMaterialization.decodePullRequestTimestamp")(function* (value, eventId) {
844
+ if (value === null || value === void 0) return null;
845
+ return yield* Schema.decodeUnknownEffect(UtcTimestamp)(value).pipe(Effect.mapError(() => malformed("normalized-pull-request-timestamp-invalid", eventId)));
846
+ });
832
847
  var decodedIssueAttributes = Effect.fn("NormalizedPluginPageMaterialization.decodeIssueAttributes")(function* (event) {
833
848
  const normalized = Schema.decodeUnknownResult(NormalizedIssueAttributes)(event.attributes);
834
849
  if (Result.isSuccess(normalized)) return normalized.success;
@@ -859,16 +874,22 @@ var canonicalKind = (entityType) => {
859
874
  };
860
875
  var reviewState = (value) => {
861
876
  switch (value?.toLowerCase()) {
862
- case "requested":
863
- case "open": return "requested";
877
+ case "requested": return "requested";
864
878
  case "changes-requested":
865
879
  case "changes requested": return "changes-requested";
866
880
  case "approved": return "approved";
867
- case "merged":
868
- case "closed": return "merged";
881
+ case "merged": return "merged";
869
882
  default: return "not-requested";
870
883
  }
871
884
  };
885
+ var pullRequestLifecycle = (value) => {
886
+ switch (value?.toLowerCase()) {
887
+ case "open": return "open";
888
+ case "closed": return "closed";
889
+ case "merged": return "merged";
890
+ default: return null;
891
+ }
892
+ };
872
893
  var pipelineStatus = (value) => {
873
894
  switch (value?.toLowerCase()) {
874
895
  case "inprogress":
@@ -907,17 +928,29 @@ var entityPresentation = Effect.fn("NormalizedPluginPageMaterialization.entityPr
907
928
  }
908
929
  };
909
930
  }
910
- case "pull-request": return {
911
- displayKey: bounded(event.vendorImmutableId, event.vendorImmutableId, 200),
912
- details: {
913
- _tag: "pull-request",
914
- repository: bounded(attributes.repository, "unknown", 200),
915
- sourceBranch: bounded(attributes.sourceBranch, "unknown", 500),
916
- targetBranch: bounded(attributes.targetBranch, "unknown", 500),
917
- headRevision: bounded(attributes.headRevision, event.revision, 512),
918
- reviewState: reviewState(attributes.reviewState ?? namedText(attributes.status))
919
- }
920
- };
931
+ case "pull-request": {
932
+ const creationDate = yield* decodedPullRequestTimestamp(attributes.creationDate, event.eventId);
933
+ const lastActivityDate = yield* decodedPullRequestTimestamp(attributes.lastActivityDate, event.eventId);
934
+ const status = namedText(attributes.status);
935
+ return {
936
+ displayKey: bounded(event.vendorImmutableId, event.vendorImmutableId, 200),
937
+ details: {
938
+ _tag: "pull-request",
939
+ repository: bounded(attributes.repository, "unknown", 200),
940
+ sourceBranch: bounded(attributes.sourceBranch, "unknown", 500),
941
+ targetBranch: bounded(attributes.targetBranch, "unknown", 500),
942
+ headRevision: bounded(attributes.headRevision, event.revision, 512),
943
+ reviewState: reviewState(attributes.reviewState ?? (pullRequestLifecycle(status) === null ? status : null)),
944
+ lifecycle: pullRequestLifecycle(status),
945
+ description: optionalBounded(attributes.description, 5e4),
946
+ authorReference: optionalBounded(attributes.authorArn, 512),
947
+ baseRevision: optionalBounded(attributes.baseRevision, 512),
948
+ mergeBaseRevision: optionalBounded(attributes.mergeBase, 512),
949
+ createdAt: creationDate === null ? null : DateTime.formatIso(creationDate),
950
+ updatedAt: lastActivityDate === null ? null : DateTime.formatIso(lastActivityDate)
951
+ }
952
+ };
953
+ }
921
954
  case "page": return {
922
955
  displayKey: bounded(event.vendorImmutableId, event.vendorImmutableId, 200),
923
956
  details: {
@@ -1019,6 +1052,7 @@ var sourceRevision = (scope, event, firstObservedAt, sourceUrl) => ({
1019
1052
  });
1020
1053
  var laterTimestamp = (left, right) => DateTime.Order(left, right) >= 0 ? left : right;
1021
1054
  var sameSourceUrl = (left, right) => left?.href === right?.href;
1055
+ var projectionSchemaVersion = (kind) => kind === "pull-request" ? 2 : 1;
1022
1056
  var writeGraph = Effect.fn("NormalizedPluginPageMaterialization.writeGraph")(function* (persistence, workspaceId, batch, eventId) {
1023
1057
  const encoded = yield* Schema.encodeEffect(DeliveryGraphWriteBatch)(batch).pipe(Effect.mapError(() => malformed("normalized-delivery-graph-batch-invalid", eventId)));
1024
1058
  return yield* persistence.deliveryGraph.write(workspaceId, encoded);
@@ -1034,7 +1068,14 @@ var materializeUpsertEntity = Effect.fn("NormalizedPluginPageMaterialization.ups
1034
1068
  const existing = yield* findEntity(persistence, scope, event.vendorImmutableId);
1035
1069
  const entityId = existing?.entityId ?? (yield* entityIdFor(cryptoService, scope, event.vendorImmutableId, event.eventId));
1036
1070
  const currentProjection = existing === null ? null : yield* readProjection(persistence, scope.workspaceId, entityId);
1037
- if (existing !== null && existing.sourceRevision.revision === event.revision && currentProjection?.projection.entityState === "present") return {
1071
+ const schemaVersion = projectionSchemaVersion(kind);
1072
+ const refreshedSource = existing === null ? null : {
1073
+ ...sourceRevision(scope, event, existing.sourceRevision.firstObservedAt, event.sourceUrl),
1074
+ lastObservedAt: laterTimestamp(existing.sourceRevision.lastObservedAt, event.observedAt),
1075
+ synchronizedAt: laterTimestamp(existing.sourceRevision.synchronizedAt, scope.committedAt)
1076
+ };
1077
+ const sourceMetadataChanged = existing !== null && refreshedSource !== null && (!sameSourceUrl(existing.sourceRevision.sourceUrl, refreshedSource.sourceUrl) || !DateTime.Equivalence(existing.sourceRevision.lastObservedAt, refreshedSource.lastObservedAt) || !DateTime.Equivalence(existing.sourceRevision.synchronizedAt, refreshedSource.synchronizedAt));
1078
+ if (existing !== null && existing.sourceRevision.revision === event.revision && currentProjection?.projection.entityState === "present" && currentProjection.projection.projectionSchemaVersion === schemaVersion && !sourceMetadataChanged) return {
1038
1079
  entityProjectionCount: 0,
1039
1080
  nodeCount: 0,
1040
1081
  skippedEntityCount: 0
@@ -1044,8 +1085,8 @@ var materializeUpsertEntity = Effect.fn("NormalizedPluginPageMaterialization.ups
1044
1085
  entityType: kind,
1045
1086
  sourceRevision: sourceRevision(scope, event, event.observedAt, event.sourceUrl),
1046
1087
  createdAt: scope.committedAt
1047
- }) : existing.sourceRevision.revision === event.revision ? existing : yield* persistence.entities.updateSourceRevision(scope.workspaceId, entityId, {
1048
- sourceRevision: sourceRevision(scope, event, existing.sourceRevision.firstObservedAt, event.sourceUrl),
1088
+ }) : yield* persistence.entities.updateSourceRevision(scope.workspaceId, entityId, {
1089
+ sourceRevision: refreshedSource ?? sourceRevision(scope, event, existing.sourceRevision.firstObservedAt, event.sourceUrl),
1049
1090
  expectedRevision: existing.revision,
1050
1091
  updatedAt: scope.committedAt
1051
1092
  });
@@ -1059,7 +1100,7 @@ var materializeUpsertEntity = Effect.fn("NormalizedPluginPageMaterialization.ups
1059
1100
  projectionRevision,
1060
1101
  sourceEntityRevision: LedgerRevision.make(persisted.revision),
1061
1102
  supersedesProjectionRevision: currentProjection?.projection.projectionRevision ?? null,
1062
- projectionSchemaVersion: 1,
1103
+ projectionSchemaVersion: schemaVersion,
1063
1104
  entityState: "present",
1064
1105
  entityType: kind,
1065
1106
  displayKey: presentation.displayKey,
@@ -1802,4 +1843,4 @@ var makeManualPluginSynchronization = Effect.fn("ManualPluginSynchronization.mak
1802
1843
  //#endregion
1803
1844
  export { firstPartyManualPluginSyncDrivers, makeManualPluginSyncDriverRegistry, makeManualPluginSynchronization };
1804
1845
 
1805
- //# sourceMappingURL=manualPluginSynchronization-C0aHB4UM.js.map
1846
+ //# sourceMappingURL=manualPluginSynchronization-CDnX9qXi.js.map