@codemation/host 0.2.5 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/dist/{AppConfigFactory-CqKWXqOm.js → AppConfigFactory-BPp02HMv.js} +82 -5
  3. package/dist/{AppConfigFactory-CqKWXqOm.js.map → AppConfigFactory-BPp02HMv.js.map} +1 -1
  4. package/dist/{AppConfigFactory-CK28UPK0.d.ts → AppConfigFactory-Dq7ttwQ_.d.ts} +6001 -144
  5. package/dist/{AppContainerFactory-CcSGFNLW.js → AppContainerFactory-DL_qZ80U.js} +2665 -264
  6. package/dist/AppContainerFactory-DL_qZ80U.js.map +1 -0
  7. package/dist/{CodemationAppContext-KqDoeHqN.d.ts → CodemationAppContext-P7P-xZhQ.d.ts} +2 -2
  8. package/dist/{CodemationAuthoring.types-BP6Inucu.d.ts → CodemationAuthoring.types-OMYu7vKP.d.ts} +3 -3
  9. package/dist/{CodemationConfigNormalizer-DIAE0VHw.d.ts → CodemationConfigNormalizer-BCtBrJDe.d.ts} +2 -2
  10. package/dist/{CodemationConsumerConfigLoader-nj9kTmfJ.d.ts → CodemationConsumerConfigLoader-evvw4b_a.d.ts} +2 -2
  11. package/dist/CodemationPluginListMerger-PSTtEQjC.d.ts +674 -0
  12. package/dist/{CredentialServices-BFQD_VN1.d.ts → CredentialServices-0Hk8RFY1.d.ts} +3 -3
  13. package/dist/{CredentialServices-BPKUF8Xs.js → CredentialServices-BNBMFOPt.js} +6 -1
  14. package/dist/CredentialServices-BNBMFOPt.js.map +1 -0
  15. package/dist/{PublicFrontendBootstrapFactory-DTA1iDo0.d.ts → PublicFrontendBootstrapFactory-D0_ds7nS.d.ts} +2 -2
  16. package/dist/authoring.d.ts +3 -3
  17. package/dist/consumer.d.ts +4 -4
  18. package/dist/credentials.d.ts +3 -3
  19. package/dist/credentials.js +1 -1
  20. package/dist/devServerSidecar.d.ts +1 -1
  21. package/dist/{index-Dd6BrWyH.d.ts → index-CeS2saCe.d.ts} +105 -2
  22. package/dist/index.d.ts +12 -11
  23. package/dist/index.js +5 -5
  24. package/dist/nextServer.d.ts +8 -58
  25. package/dist/nextServer.js +6 -100
  26. package/dist/{persistenceServer-DKbFDxoS.js → persistenceServer-CA0_q0D7.js} +2 -2
  27. package/dist/{persistenceServer-DKbFDxoS.js.map → persistenceServer-CA0_q0D7.js.map} +1 -1
  28. package/dist/{persistenceServer-Y-u7lV7f.d.ts → persistenceServer-CJeu1STC.d.ts} +2 -2
  29. package/dist/persistenceServer.d.ts +5 -5
  30. package/dist/persistenceServer.js +2 -2
  31. package/dist/{server-axppTMgo.d.ts → server-Clvg5x1w.d.ts} +11 -5
  32. package/dist/{server-CFpgKuVE.js → server-DteBORJX.js} +4 -4
  33. package/dist/{server-CFpgKuVE.js.map → server-DteBORJX.js.map} +1 -1
  34. package/dist/server.d.ts +8 -8
  35. package/dist/server.js +5 -5
  36. package/package.json +6 -5
  37. package/prisma/migrations/20260414120000_telemetry_foundation/migration.sql +112 -0
  38. package/prisma/migrations/20260414153000_telemetry_retention_metrics_refactor/migration.sql +239 -0
  39. package/prisma/migrations.sqlite/20260414120000_telemetry_foundation/migration.sql +103 -0
  40. package/prisma/migrations.sqlite/20260414153000_telemetry_retention_metrics_refactor/migration.sql +540 -0
  41. package/prisma/schema.postgresql.prisma +100 -1
  42. package/prisma/schema.sqlite.prisma +100 -1
  43. package/scripts/generate-prisma-clients.mjs +89 -1
  44. package/src/application/contracts/TelemetryDashboardContracts.ts +113 -0
  45. package/src/application/contracts/TelemetryRunTraceContracts.ts +13 -0
  46. package/src/application/cost/FrameworkCostCatalogEntries.ts +126 -0
  47. package/src/application/queries/GetTelemetryDashboardDimensionsQuery.ts +11 -0
  48. package/src/application/queries/GetTelemetryDashboardDimensionsQueryHandler.ts +20 -0
  49. package/src/application/queries/GetTelemetryDashboardRunsQuery.ts +11 -0
  50. package/src/application/queries/GetTelemetryDashboardRunsQueryHandler.ts +20 -0
  51. package/src/application/queries/GetTelemetryDashboardSummaryQuery.ts +11 -0
  52. package/src/application/queries/GetTelemetryDashboardSummaryQueryHandler.ts +29 -0
  53. package/src/application/queries/GetTelemetryDashboardTimeseriesQuery.ts +11 -0
  54. package/src/application/queries/GetTelemetryDashboardTimeseriesQueryHandler.ts +36 -0
  55. package/src/application/queries/GetTelemetryRunTraceQuery.ts +8 -0
  56. package/src/application/queries/GetTelemetryRunTraceQueryHandler.ts +20 -0
  57. package/src/application/queries/WorkflowQueryHandlers.ts +5 -0
  58. package/src/application/runs/WorkflowRunRetentionPruneScheduler.ts +71 -26
  59. package/src/application/telemetry/CompositeTelemetryExporter.ts +13 -0
  60. package/src/application/telemetry/LazyExecutionTelemetryFactory.ts +21 -0
  61. package/src/application/telemetry/NoOpTelemetryExporter.ts +7 -0
  62. package/src/application/telemetry/OtelExecutionTelemetry.types.ts +41 -0
  63. package/src/application/telemetry/OtelExecutionTelemetryFactory.ts +56 -0
  64. package/src/application/telemetry/OtelIdentityFactory.ts +41 -0
  65. package/src/application/telemetry/RunEventBusTelemetryReporter.ts +188 -0
  66. package/src/application/telemetry/StoredExecutionTelemetry.ts +56 -0
  67. package/src/application/telemetry/StoredNodeExecutionTelemetry.ts +35 -0
  68. package/src/application/telemetry/StoredTelemetrySpanScope.ts +188 -0
  69. package/src/application/telemetry/TelemetryEnricherChain.ts +85 -0
  70. package/src/application/telemetry/TelemetryPrivacyPolicy.ts +19 -0
  71. package/src/application/telemetry/TelemetryQueryService.ts +815 -0
  72. package/src/application/telemetry/TelemetryRetentionTimestampFactory.ts +40 -0
  73. package/src/applicationTokens.ts +18 -0
  74. package/src/bootstrap/AppContainerFactory.ts +183 -64
  75. package/src/bootstrap/AppContainerLifecycle.ts +8 -0
  76. package/src/bootstrap/CodemationContainerRegistrationRegistrar.ts +1 -3
  77. package/src/bootstrap/runtime/FrontendRuntime.ts +8 -0
  78. package/src/bootstrap/runtime/WorkerRuntime.ts +8 -0
  79. package/src/domain/runs/WorkflowRunRepository.ts +3 -1
  80. package/src/domain/telemetry/TelemetryContracts.ts +197 -0
  81. package/src/infrastructure/config/CodemationPluginRegistrar.ts +2 -6
  82. package/src/infrastructure/di/HandlesDomainEventRegistry.ts +5 -7
  83. package/src/infrastructure/persistence/InMemoryRunTraceContextRepository.ts +56 -0
  84. package/src/infrastructure/persistence/InMemoryTelemetryArtifactStore.ts +56 -0
  85. package/src/infrastructure/persistence/InMemoryTelemetryMetricPointStore.ts +97 -0
  86. package/src/infrastructure/persistence/InMemoryTelemetrySpanStore.ts +113 -0
  87. package/src/infrastructure/persistence/InMemoryWorkflowRunRepository.ts +4 -2
  88. package/src/infrastructure/persistence/PrismaRunTraceContextRepository.ts +92 -0
  89. package/src/infrastructure/persistence/PrismaTelemetryArtifactStore.ts +125 -0
  90. package/src/infrastructure/persistence/PrismaTelemetryMetricPointStore.ts +134 -0
  91. package/src/infrastructure/persistence/PrismaTelemetrySpanStore.ts +166 -0
  92. package/src/infrastructure/persistence/PrismaWorkflowRunRepository.ts +20 -7
  93. package/src/infrastructure/persistence/generated/prisma-postgresql-client/edge.js +85 -4
  94. package/src/infrastructure/persistence/generated/prisma-postgresql-client/index-browser.js +81 -0
  95. package/src/infrastructure/persistence/generated/prisma-postgresql-client/index.d.ts +6488 -102
  96. package/src/infrastructure/persistence/generated/prisma-postgresql-client/index.js +85 -4
  97. package/src/infrastructure/persistence/generated/prisma-postgresql-client/package.json +1 -1
  98. package/src/infrastructure/persistence/generated/prisma-postgresql-client/schema.prisma +100 -0
  99. package/src/infrastructure/persistence/generated/prisma-sqlite-client/edge.js +85 -4
  100. package/src/infrastructure/persistence/generated/prisma-sqlite-client/index-browser.js +81 -0
  101. package/src/infrastructure/persistence/generated/prisma-sqlite-client/index.d.ts +6476 -98
  102. package/src/infrastructure/persistence/generated/prisma-sqlite-client/index.js +85 -4
  103. package/src/infrastructure/persistence/generated/prisma-sqlite-client/package.json +1 -1
  104. package/src/infrastructure/persistence/generated/prisma-sqlite-client/schema.prisma +100 -0
  105. package/src/presentation/http/ApiPaths.ts +22 -0
  106. package/src/presentation/http/hono/registrars/AuthHonoApiRouteRegistrar.ts +1 -3
  107. package/src/presentation/http/hono/registrars/BinaryHonoApiRouteRegistrar.ts +1 -3
  108. package/src/presentation/http/hono/registrars/BootstrapHonoApiRouteRegistrar.ts +1 -3
  109. package/src/presentation/http/hono/registrars/CredentialHonoApiRouteRegistrar.ts +1 -3
  110. package/src/presentation/http/hono/registrars/DevHonoApiRouteRegistrar.ts +1 -3
  111. package/src/presentation/http/hono/registrars/OAuth2HonoApiRouteRegistrar.ts +1 -3
  112. package/src/presentation/http/hono/registrars/RunHonoApiRouteRegistrar.ts +1 -3
  113. package/src/presentation/http/hono/registrars/TelemetryHonoApiRouteRegistrar.ts +17 -0
  114. package/src/presentation/http/hono/registrars/UserHonoApiRouteRegistrar.ts +1 -3
  115. package/src/presentation/http/hono/registrars/WebhookHonoApiRouteRegistrar.ts +1 -3
  116. package/src/presentation/http/hono/registrars/WhitelabelHonoApiRouteRegistrar.ts +1 -3
  117. package/src/presentation/http/hono/registrars/WorkflowHonoApiRouteRegistrar.ts +1 -3
  118. package/src/presentation/http/routeHandlers/TelemetryDashboardRequestError.ts +1 -0
  119. package/src/presentation/http/routeHandlers/TelemetryHttpRouteHandler.ts +181 -0
  120. package/dist/AppContainerFactory-CcSGFNLW.js.map +0 -1
  121. package/dist/CodemationPluginListMerger-QvUa2SIt.d.ts +0 -357
  122. package/dist/CredentialServices-BPKUF8Xs.js.map +0 -1
  123. package/dist/nextServer.js.map +0 -1
@@ -2,16 +2,16 @@ import { i as __toESM, r as __require, t as __commonJS } from "./chunk-7V6ThxGB.
2
2
  import { o as LogLevelPolicyFactory, s as logLevelPolicyFactory, t as ServerLoggerFactory } from "./ServerLoggerFactory-CsNW5qhz.js";
3
3
  import { n as __decorateMetadata, t as __decorateParam } from "./decorateParam-D7WPDFAf.js";
4
4
  import { t as __decorate } from "./decorate-Dq0XLibd.js";
5
- import { a as CredentialInstanceService, c as CredentialSecretCipher, d as ApplicationTokens, f as ApplicationRequestError, h as OpenAiApiKeyCredentialHealthTester, i as CredentialBindingService, l as CredentialFieldEnvOverlayService, m as OpenAiApiKeyCredentialTypeFactory, n as CredentialSessionServiceImpl, o as CredentialOAuth2ScopeResolver, p as CredentialTypeRegistryImpl, r as CredentialRuntimeMaterialService, s as CredentialMaterialResolver, t as CredentialTestService, u as WorkflowCredentialNodeResolver } from "./CredentialServices-BPKUF8Xs.js";
6
- import { i as require_client$2, r as PrismaMigrationDeployer } from "./AppConfigFactory-CqKWXqOm.js";
5
+ import { a as CredentialInstanceService, c as CredentialSecretCipher, d as ApplicationTokens, f as ApplicationRequestError, h as OpenAiApiKeyCredentialHealthTester, i as CredentialBindingService, l as CredentialFieldEnvOverlayService, m as OpenAiApiKeyCredentialTypeFactory, n as CredentialSessionServiceImpl, o as CredentialOAuth2ScopeResolver, p as CredentialTypeRegistryImpl, r as CredentialRuntimeMaterialService, s as CredentialMaterialResolver, t as CredentialTestService, u as WorkflowCredentialNodeResolver } from "./CredentialServices-BNBMFOPt.js";
6
+ import { i as require_client$2, r as PrismaMigrationDeployer } from "./AppConfigFactory-BPp02HMv.js";
7
7
  import { AIAgentConnectionWorkflowExpander, ConnectionCredentialNodeConfigFactory, ManualTriggerNode } from "@codemation/core-nodes";
8
8
  import { mkdir, rm, stat } from "node:fs/promises";
9
9
  import path from "node:path";
10
10
  import { pathToFileURL } from "node:url";
11
- import { AgentConfigInspector, AgentConnectionNodeCollector, CoreTokens, DefaultExecutionBinaryService, EventPublishingWorkflowExecutionRepository, InMemoryLiveWorkflowRepository, InMemoryRunEventBus, ItemsInputNormalizer, RunFinishedAtFactory, SystemClock, container, getPersistedRuntimeTypeMetadata, inject, injectAll, injectable, instanceCachingFactory, registry } from "@codemation/core";
11
+ import { AgentConfigInspector, AgentConnectionNodeCollector, CoreTokens, CostTrackingTelemetryAttributeNames, CostTrackingTelemetryMetricNames, DefaultExecutionBinaryService, EventPublishingWorkflowExecutionRepository, GenAiTelemetryAttributeNames, InMemoryLiveWorkflowRepository, InMemoryRunEventBus, ItemsInputNormalizer, NoOpTelemetryArtifactReference, RunFinishedAtFactory, SystemClock, container, getPersistedRuntimeTypeMetadata, inject, injectAll, injectable, instanceCachingFactory } from "@codemation/core";
12
12
  import { createHash, randomBytes } from "node:crypto";
13
13
  import "reflect-metadata";
14
- import { ConfigDrivenOffloadPolicy, DefaultDrivingScheduler, DefaultExecutionContextFactory, Engine, EngineRuntimeRegistrar, InMemoryBinaryStorage, InMemoryRunDataFactory, InlineDrivingScheduler, MissingRuntimeTriggerToken, PersistedWorkflowTokenRegistry, RunIntentService, RunSummaryMapper, WorkflowRepositoryWebhookTriggerMatcher } from "@codemation/core/bootstrap";
14
+ import { CatalogBackedCostTrackingTelemetryFactory, ConfigDrivenOffloadPolicy, DefaultDrivingScheduler, DefaultExecutionContextFactory, Engine, EngineRuntimeRegistrar, InMemoryBinaryStorage, InMemoryRunDataFactory, InlineDrivingScheduler, MissingRuntimeTriggerToken, PersistedWorkflowTokenRegistry, RunIntentService, RunSummaryMapper, StaticCostCatalog, WorkflowRepositoryWebhookTriggerMatcher } from "@codemation/core/bootstrap";
15
15
  import { compare, hash } from "bcryptjs";
16
16
  import sanitizeFilename from "sanitize-filename";
17
17
  import { WebSocket, WebSocketServer } from "ws";
@@ -83,7 +83,7 @@ var HandlesCommand = class {
83
83
 
84
84
  //#endregion
85
85
  //#region src/application/commands/CreateCredentialInstanceCommandHandler.ts
86
- var _ref$60;
86
+ var _ref$77;
87
87
  let CreateCredentialInstanceCommandHandler = class CreateCredentialInstanceCommandHandler$1 extends CommandHandler {
88
88
  constructor(credentialInstanceService) {
89
89
  super();
@@ -96,7 +96,7 @@ let CreateCredentialInstanceCommandHandler = class CreateCredentialInstanceComma
96
96
  CreateCredentialInstanceCommandHandler = __decorate([
97
97
  HandlesCommand.forCommand(CreateCredentialInstanceCommand),
98
98
  __decorateParam(0, inject(CredentialInstanceService)),
99
- __decorateMetadata("design:paramtypes", [typeof (_ref$60 = typeof CredentialInstanceService !== "undefined" && CredentialInstanceService) === "function" ? _ref$60 : Object])
99
+ __decorateMetadata("design:paramtypes", [typeof (_ref$77 = typeof CredentialInstanceService !== "undefined" && CredentialInstanceService) === "function" ? _ref$77 : Object])
100
100
  ], CreateCredentialInstanceCommandHandler);
101
101
 
102
102
  //#endregion
@@ -110,7 +110,7 @@ var DeleteCredentialInstanceCommand = class extends Command {
110
110
 
111
111
  //#endregion
112
112
  //#region src/application/commands/DeleteCredentialInstanceCommandHandler.ts
113
- var _ref$59;
113
+ var _ref$76;
114
114
  let DeleteCredentialInstanceCommandHandler = class DeleteCredentialInstanceCommandHandler$1 extends CommandHandler {
115
115
  constructor(credentialInstanceService) {
116
116
  super();
@@ -124,7 +124,7 @@ let DeleteCredentialInstanceCommandHandler = class DeleteCredentialInstanceComma
124
124
  DeleteCredentialInstanceCommandHandler = __decorate([
125
125
  HandlesCommand.forCommand(DeleteCredentialInstanceCommand),
126
126
  __decorateParam(0, inject(CredentialInstanceService)),
127
- __decorateMetadata("design:paramtypes", [typeof (_ref$59 = typeof CredentialInstanceService !== "undefined" && CredentialInstanceService) === "function" ? _ref$59 : Object])
127
+ __decorateMetadata("design:paramtypes", [typeof (_ref$76 = typeof CredentialInstanceService !== "undefined" && CredentialInstanceService) === "function" ? _ref$76 : Object])
128
128
  ], DeleteCredentialInstanceCommandHandler);
129
129
 
130
130
  //#endregion
@@ -138,7 +138,7 @@ var TestCredentialInstanceCommand = class extends Command {
138
138
 
139
139
  //#endregion
140
140
  //#region src/application/commands/TestCredentialInstanceCommandHandler.ts
141
- var _ref$58;
141
+ var _ref$75;
142
142
  let TestCredentialInstanceCommandHandler = class TestCredentialInstanceCommandHandler$1 extends CommandHandler {
143
143
  constructor(credentialTestService) {
144
144
  super();
@@ -151,7 +151,7 @@ let TestCredentialInstanceCommandHandler = class TestCredentialInstanceCommandHa
151
151
  TestCredentialInstanceCommandHandler = __decorate([
152
152
  HandlesCommand.forCommand(TestCredentialInstanceCommand),
153
153
  __decorateParam(0, inject(CredentialTestService)),
154
- __decorateMetadata("design:paramtypes", [typeof (_ref$58 = typeof CredentialTestService !== "undefined" && CredentialTestService) === "function" ? _ref$58 : Object])
154
+ __decorateMetadata("design:paramtypes", [typeof (_ref$75 = typeof CredentialTestService !== "undefined" && CredentialTestService) === "function" ? _ref$75 : Object])
155
155
  ], TestCredentialInstanceCommandHandler);
156
156
 
157
157
  //#endregion
@@ -166,7 +166,7 @@ var UpdateCredentialInstanceCommand = class extends Command {
166
166
 
167
167
  //#endregion
168
168
  //#region src/application/commands/UpdateCredentialInstanceCommandHandler.ts
169
- var _ref$57;
169
+ var _ref$74;
170
170
  let UpdateCredentialInstanceCommandHandler = class UpdateCredentialInstanceCommandHandler$1 extends CommandHandler {
171
171
  constructor(credentialInstanceService) {
172
172
  super();
@@ -179,7 +179,7 @@ let UpdateCredentialInstanceCommandHandler = class UpdateCredentialInstanceComma
179
179
  UpdateCredentialInstanceCommandHandler = __decorate([
180
180
  HandlesCommand.forCommand(UpdateCredentialInstanceCommand),
181
181
  __decorateParam(0, inject(CredentialInstanceService)),
182
- __decorateMetadata("design:paramtypes", [typeof (_ref$57 = typeof CredentialInstanceService !== "undefined" && CredentialInstanceService) === "function" ? _ref$57 : Object])
182
+ __decorateMetadata("design:paramtypes", [typeof (_ref$74 = typeof CredentialInstanceService !== "undefined" && CredentialInstanceService) === "function" ? _ref$74 : Object])
183
183
  ], UpdateCredentialInstanceCommandHandler);
184
184
 
185
185
  //#endregion
@@ -193,7 +193,7 @@ var UpsertCredentialBindingCommand = class extends Command {
193
193
 
194
194
  //#endregion
195
195
  //#region src/application/commands/UpsertCredentialBindingCommandHandler.ts
196
- var _ref$56;
196
+ var _ref$73;
197
197
  let UpsertCredentialBindingCommandHandler = class UpsertCredentialBindingCommandHandler$1 extends CommandHandler {
198
198
  constructor(credentialBindingService) {
199
199
  super();
@@ -206,7 +206,7 @@ let UpsertCredentialBindingCommandHandler = class UpsertCredentialBindingCommand
206
206
  UpsertCredentialBindingCommandHandler = __decorate([
207
207
  HandlesCommand.forCommand(UpsertCredentialBindingCommand),
208
208
  __decorateParam(0, inject(CredentialBindingService)),
209
- __decorateMetadata("design:paramtypes", [typeof (_ref$56 = typeof CredentialBindingService !== "undefined" && CredentialBindingService) === "function" ? _ref$56 : Object])
209
+ __decorateMetadata("design:paramtypes", [typeof (_ref$73 = typeof CredentialBindingService !== "undefined" && CredentialBindingService) === "function" ? _ref$73 : Object])
210
210
  ], UpsertCredentialBindingCommandHandler);
211
211
 
212
212
  //#endregion
@@ -527,7 +527,7 @@ var UserAccountService = class UserAccountService {
527
527
 
528
528
  //#endregion
529
529
  //#region src/application/commands/AcceptUserInviteCommandHandler.ts
530
- var _ref$55;
530
+ var _ref$72;
531
531
  let AcceptUserInviteCommandHandler = class AcceptUserInviteCommandHandler$1 extends CommandHandler {
532
532
  constructor(userAccounts) {
533
533
  super();
@@ -540,7 +540,7 @@ let AcceptUserInviteCommandHandler = class AcceptUserInviteCommandHandler$1 exte
540
540
  AcceptUserInviteCommandHandler = __decorate([
541
541
  HandlesCommand.forCommand(AcceptUserInviteCommand),
542
542
  __decorateParam(0, inject(UserAccountService)),
543
- __decorateMetadata("design:paramtypes", [typeof (_ref$55 = typeof UserAccountService !== "undefined" && UserAccountService) === "function" ? _ref$55 : Object])
543
+ __decorateMetadata("design:paramtypes", [typeof (_ref$72 = typeof UserAccountService !== "undefined" && UserAccountService) === "function" ? _ref$72 : Object])
544
544
  ], AcceptUserInviteCommandHandler);
545
545
 
546
546
  //#endregion
@@ -555,7 +555,7 @@ var InviteUserCommand = class extends Command {
555
555
 
556
556
  //#endregion
557
557
  //#region src/application/commands/InviteUserCommandHandler.ts
558
- var _ref$54;
558
+ var _ref$71;
559
559
  let InviteUserCommandHandler = class InviteUserCommandHandler$1 extends CommandHandler {
560
560
  constructor(userAccounts) {
561
561
  super();
@@ -568,7 +568,7 @@ let InviteUserCommandHandler = class InviteUserCommandHandler$1 extends CommandH
568
568
  InviteUserCommandHandler = __decorate([
569
569
  HandlesCommand.forCommand(InviteUserCommand),
570
570
  __decorateParam(0, inject(UserAccountService)),
571
- __decorateMetadata("design:paramtypes", [typeof (_ref$54 = typeof UserAccountService !== "undefined" && UserAccountService) === "function" ? _ref$54 : Object])
571
+ __decorateMetadata("design:paramtypes", [typeof (_ref$71 = typeof UserAccountService !== "undefined" && UserAccountService) === "function" ? _ref$71 : Object])
572
572
  ], InviteUserCommandHandler);
573
573
 
574
574
  //#endregion
@@ -583,7 +583,7 @@ var RegenerateUserInviteCommand = class extends Command {
583
583
 
584
584
  //#endregion
585
585
  //#region src/application/commands/RegenerateUserInviteCommandHandler.ts
586
- var _ref$53;
586
+ var _ref$70;
587
587
  let RegenerateUserInviteCommandHandler = class RegenerateUserInviteCommandHandler$1 extends CommandHandler {
588
588
  constructor(userAccounts) {
589
589
  super();
@@ -596,7 +596,7 @@ let RegenerateUserInviteCommandHandler = class RegenerateUserInviteCommandHandle
596
596
  RegenerateUserInviteCommandHandler = __decorate([
597
597
  HandlesCommand.forCommand(RegenerateUserInviteCommand),
598
598
  __decorateParam(0, inject(UserAccountService)),
599
- __decorateMetadata("design:paramtypes", [typeof (_ref$53 = typeof UserAccountService !== "undefined" && UserAccountService) === "function" ? _ref$53 : Object])
599
+ __decorateMetadata("design:paramtypes", [typeof (_ref$70 = typeof UserAccountService !== "undefined" && UserAccountService) === "function" ? _ref$70 : Object])
600
600
  ], RegenerateUserInviteCommandHandler);
601
601
 
602
602
  //#endregion
@@ -611,7 +611,7 @@ var UpdateUserAccountStatusCommand = class extends Command {
611
611
 
612
612
  //#endregion
613
613
  //#region src/application/commands/UpdateUserAccountStatusCommandHandler.ts
614
- var _ref$52;
614
+ var _ref$69;
615
615
  let UpdateUserAccountStatusCommandHandler = class UpdateUserAccountStatusCommandHandler$1 extends CommandHandler {
616
616
  constructor(userAccounts) {
617
617
  super();
@@ -624,12 +624,12 @@ let UpdateUserAccountStatusCommandHandler = class UpdateUserAccountStatusCommand
624
624
  UpdateUserAccountStatusCommandHandler = __decorate([
625
625
  HandlesCommand.forCommand(UpdateUserAccountStatusCommand),
626
626
  __decorateParam(0, inject(UserAccountService)),
627
- __decorateMetadata("design:paramtypes", [typeof (_ref$52 = typeof UserAccountService !== "undefined" && UserAccountService) === "function" ? _ref$52 : Object])
627
+ __decorateMetadata("design:paramtypes", [typeof (_ref$69 = typeof UserAccountService !== "undefined" && UserAccountService) === "function" ? _ref$69 : Object])
628
628
  ], UpdateUserAccountStatusCommandHandler);
629
629
 
630
630
  //#endregion
631
631
  //#region src/application/commands/UpsertLocalBootstrapUserCommandHandler.ts
632
- var _ref$51;
632
+ var _ref$68;
633
633
  let UpsertLocalBootstrapUserCommandHandler = class UpsertLocalBootstrapUserCommandHandler$1 extends CommandHandler {
634
634
  constructor(userAccounts) {
635
635
  super();
@@ -642,7 +642,7 @@ let UpsertLocalBootstrapUserCommandHandler = class UpsertLocalBootstrapUserComma
642
642
  UpsertLocalBootstrapUserCommandHandler = __decorate([
643
643
  HandlesCommand.forCommand(UpsertLocalBootstrapUserCommand),
644
644
  __decorateParam(0, inject(UserAccountService)),
645
- __decorateMetadata("design:paramtypes", [typeof (_ref$51 = typeof UserAccountService !== "undefined" && UserAccountService) === "function" ? _ref$51 : Object])
645
+ __decorateMetadata("design:paramtypes", [typeof (_ref$68 = typeof UserAccountService !== "undefined" && UserAccountService) === "function" ? _ref$68 : Object])
646
646
  ], UpsertLocalBootstrapUserCommandHandler);
647
647
 
648
648
  //#endregion
@@ -777,7 +777,7 @@ var HandleWebhookInvocationCommand = class extends Command {
777
777
 
778
778
  //#endregion
779
779
  //#region src/application/commands/HandleWebhookInvocationCommandHandler.ts
780
- var _ref$50;
780
+ var _ref$67;
781
781
  let HandleWebhookInvocationCommandHandler = class HandleWebhookInvocationCommandHandler$1 extends CommandHandler {
782
782
  constructor(runIntentService) {
783
783
  super();
@@ -806,7 +806,7 @@ let HandleWebhookInvocationCommandHandler = class HandleWebhookInvocationCommand
806
806
  HandleWebhookInvocationCommandHandler = __decorate([
807
807
  HandlesCommand.forCommand(HandleWebhookInvocationCommand),
808
808
  __decorateParam(0, inject(RunIntentService)),
809
- __decorateMetadata("design:paramtypes", [typeof (_ref$50 = typeof RunIntentService !== "undefined" && RunIntentService) === "function" ? _ref$50 : Object])
809
+ __decorateMetadata("design:paramtypes", [typeof (_ref$67 = typeof RunIntentService !== "undefined" && RunIntentService) === "function" ? _ref$67 : Object])
810
810
  ], HandleWebhookInvocationCommandHandler);
811
811
 
812
812
  //#endregion
@@ -897,7 +897,7 @@ var ReplayWorkflowNodeCommand = class extends Command {
897
897
 
898
898
  //#endregion
899
899
  //#region src/application/commands/ReplayWorkflowNodeCommandHandler.ts
900
- var _ref$49, _ref2$13, _ref3$7;
900
+ var _ref$66, _ref2$15, _ref3$9;
901
901
  let ReplayWorkflowNodeCommandHandler = class ReplayWorkflowNodeCommandHandler$1 extends CommandHandler {
902
902
  constructor(engine, itemsInputNormalizer, runIntentService, workflowRunRepository) {
903
903
  super();
@@ -984,9 +984,9 @@ ReplayWorkflowNodeCommandHandler = __decorate([
984
984
  __decorateParam(2, inject(RunIntentService)),
985
985
  __decorateParam(3, inject(ApplicationTokens.WorkflowRunRepository)),
986
986
  __decorateMetadata("design:paramtypes", [
987
- typeof (_ref$49 = typeof Engine !== "undefined" && Engine) === "function" ? _ref$49 : Object,
988
- typeof (_ref2$13 = typeof ItemsInputNormalizer !== "undefined" && ItemsInputNormalizer) === "function" ? _ref2$13 : Object,
989
- typeof (_ref3$7 = typeof RunIntentService !== "undefined" && RunIntentService) === "function" ? _ref3$7 : Object,
987
+ typeof (_ref$66 = typeof Engine !== "undefined" && Engine) === "function" ? _ref$66 : Object,
988
+ typeof (_ref2$15 = typeof ItemsInputNormalizer !== "undefined" && ItemsInputNormalizer) === "function" ? _ref2$15 : Object,
989
+ typeof (_ref3$9 = typeof RunIntentService !== "undefined" && RunIntentService) === "function" ? _ref3$9 : Object,
990
990
  Object
991
991
  ])
992
992
  ], ReplayWorkflowNodeCommandHandler);
@@ -1004,7 +1004,7 @@ var SetPinnedNodeInputCommand = class extends Command {
1004
1004
 
1005
1005
  //#endregion
1006
1006
  //#region src/application/commands/SetPinnedNodeInputCommandHandler.ts
1007
- var _ref$48;
1007
+ var _ref$65;
1008
1008
  let SetPinnedNodeInputCommandHandler = class SetPinnedNodeInputCommandHandler$1 extends CommandHandler {
1009
1009
  constructor(workflowRunRepository, itemsInputNormalizer) {
1010
1010
  super();
@@ -1037,7 +1037,7 @@ SetPinnedNodeInputCommandHandler = __decorate([
1037
1037
  HandlesCommand.forCommand(SetPinnedNodeInputCommand),
1038
1038
  __decorateParam(0, inject(ApplicationTokens.WorkflowRunRepository)),
1039
1039
  __decorateParam(1, inject(ItemsInputNormalizer)),
1040
- __decorateMetadata("design:paramtypes", [Object, typeof (_ref$48 = typeof ItemsInputNormalizer !== "undefined" && ItemsInputNormalizer) === "function" ? _ref$48 : Object])
1040
+ __decorateMetadata("design:paramtypes", [Object, typeof (_ref$65 = typeof ItemsInputNormalizer !== "undefined" && ItemsInputNormalizer) === "function" ? _ref$65 : Object])
1041
1041
  ], SetPinnedNodeInputCommandHandler);
1042
1042
 
1043
1043
  //#endregion
@@ -1089,7 +1089,7 @@ WorkflowActivationPreflightRules = __decorate([injectable(), __decorateMetadata(
1089
1089
 
1090
1090
  //#endregion
1091
1091
  //#region src/domain/workflows/WorkflowActivationPreflight.ts
1092
- var _ref$47, _ref2$12;
1092
+ var _ref$64, _ref2$14;
1093
1093
  let WorkflowActivationPreflight = class WorkflowActivationPreflight$1 {
1094
1094
  constructor(workflowRepository, credentialBindingService, rules) {
1095
1095
  this.workflowRepository = workflowRepository;
@@ -1112,8 +1112,8 @@ WorkflowActivationPreflight = __decorate([
1112
1112
  __decorateParam(2, inject(WorkflowActivationPreflightRules)),
1113
1113
  __decorateMetadata("design:paramtypes", [
1114
1114
  Object,
1115
- typeof (_ref$47 = typeof CredentialBindingService !== "undefined" && CredentialBindingService) === "function" ? _ref$47 : Object,
1116
- typeof (_ref2$12 = typeof WorkflowActivationPreflightRules !== "undefined" && WorkflowActivationPreflightRules) === "function" ? _ref2$12 : Object
1115
+ typeof (_ref$64 = typeof CredentialBindingService !== "undefined" && CredentialBindingService) === "function" ? _ref$64 : Object,
1116
+ typeof (_ref2$14 = typeof WorkflowActivationPreflightRules !== "undefined" && WorkflowActivationPreflightRules) === "function" ? _ref2$14 : Object
1117
1117
  ])
1118
1118
  ], WorkflowActivationPreflight);
1119
1119
 
@@ -1147,7 +1147,7 @@ var SetWorkflowActivationCommand = class extends Command {
1147
1147
 
1148
1148
  //#endregion
1149
1149
  //#region src/application/commands/SetWorkflowActivationCommandHandler.ts
1150
- var _ref$46, _ref2$11, _ref3$6;
1150
+ var _ref$63, _ref2$13, _ref3$8;
1151
1151
  let SetWorkflowActivationCommandHandler = class SetWorkflowActivationCommandHandler$1 extends CommandHandler {
1152
1152
  constructor(workflowActivationRepository, workflowActivationPolicy, engine, workflowActivationPreflight) {
1153
1153
  super();
@@ -1173,9 +1173,9 @@ SetWorkflowActivationCommandHandler = __decorate([
1173
1173
  __decorateParam(3, inject(WorkflowActivationPreflight)),
1174
1174
  __decorateMetadata("design:paramtypes", [
1175
1175
  Object,
1176
- typeof (_ref$46 = typeof RuntimeWorkflowActivationPolicy !== "undefined" && RuntimeWorkflowActivationPolicy) === "function" ? _ref$46 : Object,
1177
- typeof (_ref2$11 = typeof Engine !== "undefined" && Engine) === "function" ? _ref2$11 : Object,
1178
- typeof (_ref3$6 = typeof WorkflowActivationPreflight !== "undefined" && WorkflowActivationPreflight) === "function" ? _ref3$6 : Object
1176
+ typeof (_ref$63 = typeof RuntimeWorkflowActivationPolicy !== "undefined" && RuntimeWorkflowActivationPolicy) === "function" ? _ref$63 : Object,
1177
+ typeof (_ref2$13 = typeof Engine !== "undefined" && Engine) === "function" ? _ref2$13 : Object,
1178
+ typeof (_ref3$8 = typeof WorkflowActivationPreflight !== "undefined" && WorkflowActivationPreflight) === "function" ? _ref3$8 : Object
1179
1179
  ])
1180
1180
  ], SetWorkflowActivationCommandHandler);
1181
1181
 
@@ -1190,7 +1190,7 @@ var StartWorkflowRunCommand = class extends Command {
1190
1190
 
1191
1191
  //#endregion
1192
1192
  //#region src/application/commands/StartWorkflowRunCommandHandler.ts
1193
- var _ref$45, _ref2$10, _ref3$5;
1193
+ var _ref$62, _ref2$12, _ref3$7;
1194
1194
  let StartWorkflowRunCommandHandler = class StartWorkflowRunCommandHandler$1 extends CommandHandler {
1195
1195
  routesLog;
1196
1196
  constructor(engine, itemsInputNormalizer, runIntentService, workflowDefinitionRepository, workflowRunRepository, workflowDebuggerOverlayRepository, loggerFactory) {
@@ -1363,9 +1363,9 @@ StartWorkflowRunCommandHandler = __decorate([
1363
1363
  __decorateParam(5, inject(ApplicationTokens.WorkflowDebuggerOverlayRepository)),
1364
1364
  __decorateParam(6, inject(ApplicationTokens.LoggerFactory)),
1365
1365
  __decorateMetadata("design:paramtypes", [
1366
- typeof (_ref$45 = typeof Engine !== "undefined" && Engine) === "function" ? _ref$45 : Object,
1367
- typeof (_ref2$10 = typeof ItemsInputNormalizer !== "undefined" && ItemsInputNormalizer) === "function" ? _ref2$10 : Object,
1368
- typeof (_ref3$5 = typeof RunIntentService !== "undefined" && RunIntentService) === "function" ? _ref3$5 : Object,
1366
+ typeof (_ref$62 = typeof Engine !== "undefined" && Engine) === "function" ? _ref$62 : Object,
1367
+ typeof (_ref2$12 = typeof ItemsInputNormalizer !== "undefined" && ItemsInputNormalizer) === "function" ? _ref2$12 : Object,
1368
+ typeof (_ref3$7 = typeof RunIntentService !== "undefined" && RunIntentService) === "function" ? _ref3$7 : Object,
1369
1369
  Object,
1370
1370
  Object,
1371
1371
  Object,
@@ -1469,7 +1469,7 @@ var UploadOverlayPinnedBinaryCommand = class extends Command {
1469
1469
 
1470
1470
  //#endregion
1471
1471
  //#region src/application/commands/UploadOverlayPinnedBinaryCommandHandler.ts
1472
- var _ref$44;
1472
+ var _ref$61;
1473
1473
  let UploadOverlayPinnedBinaryCommandHandler = class UploadOverlayPinnedBinaryCommandHandler$1 extends CommandHandler {
1474
1474
  constructor(overlayPinnedBinaryUpload) {
1475
1475
  super();
@@ -1490,7 +1490,7 @@ let UploadOverlayPinnedBinaryCommandHandler = class UploadOverlayPinnedBinaryCom
1490
1490
  UploadOverlayPinnedBinaryCommandHandler = __decorate([
1491
1491
  HandlesCommand.forCommand(UploadOverlayPinnedBinaryCommand),
1492
1492
  __decorateParam(0, inject(OverlayPinnedBinaryUploadService)),
1493
- __decorateMetadata("design:paramtypes", [typeof (_ref$44 = typeof OverlayPinnedBinaryUploadService !== "undefined" && OverlayPinnedBinaryUploadService) === "function" ? _ref$44 : Object])
1493
+ __decorateMetadata("design:paramtypes", [typeof (_ref$61 = typeof OverlayPinnedBinaryUploadService !== "undefined" && OverlayPinnedBinaryUploadService) === "function" ? _ref$61 : Object])
1494
1494
  ], UploadOverlayPinnedBinaryCommandHandler);
1495
1495
 
1496
1496
  //#endregion
@@ -1520,7 +1520,7 @@ var HandlesQuery = class {
1520
1520
 
1521
1521
  //#endregion
1522
1522
  //#region src/application/queries/GetCredentialInstanceQueryHandler.ts
1523
- var _ref$43;
1523
+ var _ref$60;
1524
1524
  let GetCredentialInstanceQueryHandler = class GetCredentialInstanceQueryHandler$1 extends QueryHandler {
1525
1525
  constructor(credentialInstanceService) {
1526
1526
  super();
@@ -1533,7 +1533,7 @@ let GetCredentialInstanceQueryHandler = class GetCredentialInstanceQueryHandler$
1533
1533
  GetCredentialInstanceQueryHandler = __decorate([
1534
1534
  HandlesQuery.for(GetCredentialInstanceQuery),
1535
1535
  __decorateParam(0, inject(CredentialInstanceService)),
1536
- __decorateMetadata("design:paramtypes", [typeof (_ref$43 = typeof CredentialInstanceService !== "undefined" && CredentialInstanceService) === "function" ? _ref$43 : Object])
1536
+ __decorateMetadata("design:paramtypes", [typeof (_ref$60 = typeof CredentialInstanceService !== "undefined" && CredentialInstanceService) === "function" ? _ref$60 : Object])
1537
1537
  ], GetCredentialInstanceQueryHandler);
1538
1538
 
1539
1539
  //#endregion
@@ -1547,7 +1547,7 @@ var GetCredentialInstanceWithSecretsQuery = class extends Query {
1547
1547
 
1548
1548
  //#endregion
1549
1549
  //#region src/application/queries/GetCredentialInstanceWithSecretsQueryHandler.ts
1550
- var _ref$42;
1550
+ var _ref$59;
1551
1551
  let GetCredentialInstanceWithSecretsQueryHandler = class GetCredentialInstanceWithSecretsQueryHandler$1 extends QueryHandler {
1552
1552
  constructor(credentialInstanceService) {
1553
1553
  super();
@@ -1560,7 +1560,7 @@ let GetCredentialInstanceWithSecretsQueryHandler = class GetCredentialInstanceWi
1560
1560
  GetCredentialInstanceWithSecretsQueryHandler = __decorate([
1561
1561
  HandlesQuery.for(GetCredentialInstanceWithSecretsQuery),
1562
1562
  __decorateParam(0, inject(CredentialInstanceService)),
1563
- __decorateMetadata("design:paramtypes", [typeof (_ref$42 = typeof CredentialInstanceService !== "undefined" && CredentialInstanceService) === "function" ? _ref$42 : Object])
1563
+ __decorateMetadata("design:paramtypes", [typeof (_ref$59 = typeof CredentialInstanceService !== "undefined" && CredentialInstanceService) === "function" ? _ref$59 : Object])
1564
1564
  ], GetCredentialInstanceWithSecretsQueryHandler);
1565
1565
 
1566
1566
  //#endregion
@@ -1574,7 +1574,7 @@ var GetWorkflowCredentialHealthQuery = class extends Query {
1574
1574
 
1575
1575
  //#endregion
1576
1576
  //#region src/application/queries/GetWorkflowCredentialHealthQueryHandler.ts
1577
- var _ref$41;
1577
+ var _ref$58;
1578
1578
  let GetWorkflowCredentialHealthQueryHandler = class GetWorkflowCredentialHealthQueryHandler$1 extends QueryHandler {
1579
1579
  constructor(credentialBindingService) {
1580
1580
  super();
@@ -1587,7 +1587,7 @@ let GetWorkflowCredentialHealthQueryHandler = class GetWorkflowCredentialHealthQ
1587
1587
  GetWorkflowCredentialHealthQueryHandler = __decorate([
1588
1588
  HandlesQuery.for(GetWorkflowCredentialHealthQuery),
1589
1589
  __decorateParam(0, inject(CredentialBindingService)),
1590
- __decorateMetadata("design:paramtypes", [typeof (_ref$41 = typeof CredentialBindingService !== "undefined" && CredentialBindingService) === "function" ? _ref$41 : Object])
1590
+ __decorateMetadata("design:paramtypes", [typeof (_ref$58 = typeof CredentialBindingService !== "undefined" && CredentialBindingService) === "function" ? _ref$58 : Object])
1591
1591
  ], GetWorkflowCredentialHealthQueryHandler);
1592
1592
 
1593
1593
  //#endregion
@@ -1596,7 +1596,7 @@ var ListCredentialInstancesQuery = class extends Query {};
1596
1596
 
1597
1597
  //#endregion
1598
1598
  //#region src/application/queries/ListCredentialInstancesQueryHandler.ts
1599
- var _ref$40;
1599
+ var _ref$57;
1600
1600
  let ListCredentialInstancesQueryHandler = class ListCredentialInstancesQueryHandler$1 extends QueryHandler {
1601
1601
  constructor(credentialInstanceService) {
1602
1602
  super();
@@ -1609,7 +1609,7 @@ let ListCredentialInstancesQueryHandler = class ListCredentialInstancesQueryHand
1609
1609
  ListCredentialInstancesQueryHandler = __decorate([
1610
1610
  HandlesQuery.for(ListCredentialInstancesQuery),
1611
1611
  __decorateParam(0, inject(CredentialInstanceService)),
1612
- __decorateMetadata("design:paramtypes", [typeof (_ref$40 = typeof CredentialInstanceService !== "undefined" && CredentialInstanceService) === "function" ? _ref$40 : Object])
1612
+ __decorateMetadata("design:paramtypes", [typeof (_ref$57 = typeof CredentialInstanceService !== "undefined" && CredentialInstanceService) === "function" ? _ref$57 : Object])
1613
1613
  ], ListCredentialInstancesQueryHandler);
1614
1614
 
1615
1615
  //#endregion
@@ -1618,7 +1618,7 @@ var ListCredentialTypesQuery = class extends Query {};
1618
1618
 
1619
1619
  //#endregion
1620
1620
  //#region src/application/queries/ListCredentialTypesQueryHandler.ts
1621
- var _ref$39;
1621
+ var _ref$56;
1622
1622
  let ListCredentialTypesQueryHandler = class ListCredentialTypesQueryHandler$1 extends QueryHandler {
1623
1623
  constructor(credentialTypeRegistry) {
1624
1624
  super();
@@ -1631,7 +1631,7 @@ let ListCredentialTypesQueryHandler = class ListCredentialTypesQueryHandler$1 ex
1631
1631
  ListCredentialTypesQueryHandler = __decorate([
1632
1632
  HandlesQuery.for(ListCredentialTypesQuery),
1633
1633
  __decorateParam(0, inject(CredentialTypeRegistryImpl)),
1634
- __decorateMetadata("design:paramtypes", [typeof (_ref$39 = typeof CredentialTypeRegistryImpl !== "undefined" && CredentialTypeRegistryImpl) === "function" ? _ref$39 : Object])
1634
+ __decorateMetadata("design:paramtypes", [typeof (_ref$56 = typeof CredentialTypeRegistryImpl !== "undefined" && CredentialTypeRegistryImpl) === "function" ? _ref$56 : Object])
1635
1635
  ], ListCredentialTypesQueryHandler);
1636
1636
 
1637
1637
  //#endregion
@@ -1640,7 +1640,7 @@ var GetCredentialFieldEnvStatusQuery = class extends Query {};
1640
1640
 
1641
1641
  //#endregion
1642
1642
  //#region src/application/queries/GetCredentialFieldEnvStatusQueryHandler.ts
1643
- var _ref$38;
1643
+ var _ref$55;
1644
1644
  let GetCredentialFieldEnvStatusQueryHandler = class GetCredentialFieldEnvStatusQueryHandler$1 extends QueryHandler {
1645
1645
  constructor(credentialTypeRegistry, appConfig) {
1646
1646
  super();
@@ -1669,12 +1669,12 @@ GetCredentialFieldEnvStatusQueryHandler = __decorate([
1669
1669
  HandlesQuery.for(GetCredentialFieldEnvStatusQuery),
1670
1670
  __decorateParam(0, inject(CredentialTypeRegistryImpl)),
1671
1671
  __decorateParam(1, inject(ApplicationTokens.AppConfig)),
1672
- __decorateMetadata("design:paramtypes", [typeof (_ref$38 = typeof CredentialTypeRegistryImpl !== "undefined" && CredentialTypeRegistryImpl) === "function" ? _ref$38 : Object, Object])
1672
+ __decorateMetadata("design:paramtypes", [typeof (_ref$55 = typeof CredentialTypeRegistryImpl !== "undefined" && CredentialTypeRegistryImpl) === "function" ? _ref$55 : Object, Object])
1673
1673
  ], GetCredentialFieldEnvStatusQueryHandler);
1674
1674
 
1675
1675
  //#endregion
1676
1676
  //#region src/application/queries/ListUserAccountsQueryHandler.ts
1677
- var _ref$37;
1677
+ var _ref$54;
1678
1678
  let ListUserAccountsQueryHandler = class ListUserAccountsQueryHandler$1 extends QueryHandler {
1679
1679
  constructor(userAccounts) {
1680
1680
  super();
@@ -1687,7 +1687,7 @@ let ListUserAccountsQueryHandler = class ListUserAccountsQueryHandler$1 extends
1687
1687
  ListUserAccountsQueryHandler = __decorate([
1688
1688
  HandlesQuery.for(ListUserAccountsQuery),
1689
1689
  __decorateParam(0, inject(UserAccountService)),
1690
- __decorateMetadata("design:paramtypes", [typeof (_ref$37 = typeof UserAccountService !== "undefined" && UserAccountService) === "function" ? _ref$37 : Object])
1690
+ __decorateMetadata("design:paramtypes", [typeof (_ref$54 = typeof UserAccountService !== "undefined" && UserAccountService) === "function" ? _ref$54 : Object])
1691
1691
  ], ListUserAccountsQueryHandler);
1692
1692
 
1693
1693
  //#endregion
@@ -1701,7 +1701,7 @@ var VerifyUserInviteQuery = class extends Query {
1701
1701
 
1702
1702
  //#endregion
1703
1703
  //#region src/application/queries/VerifyUserInviteQueryHandler.ts
1704
- var _ref$36;
1704
+ var _ref$53;
1705
1705
  let VerifyUserInviteQueryHandler = class VerifyUserInviteQueryHandler$1 extends QueryHandler {
1706
1706
  constructor(userAccounts) {
1707
1707
  super();
@@ -1714,7 +1714,7 @@ let VerifyUserInviteQueryHandler = class VerifyUserInviteQueryHandler$1 extends
1714
1714
  VerifyUserInviteQueryHandler = __decorate([
1715
1715
  HandlesQuery.for(VerifyUserInviteQuery),
1716
1716
  __decorateParam(0, inject(UserAccountService)),
1717
- __decorateMetadata("design:paramtypes", [typeof (_ref$36 = typeof UserAccountService !== "undefined" && UserAccountService) === "function" ? _ref$36 : Object])
1717
+ __decorateMetadata("design:paramtypes", [typeof (_ref$53 = typeof UserAccountService !== "undefined" && UserAccountService) === "function" ? _ref$53 : Object])
1718
1718
  ], VerifyUserInviteQueryHandler);
1719
1719
 
1720
1720
  //#endregion
@@ -1807,7 +1807,7 @@ var GetRunBinaryAttachmentQuery = class extends Query {
1807
1807
 
1808
1808
  //#endregion
1809
1809
  //#region src/application/queries/GetRunBinaryAttachmentQueryHandler.ts
1810
- var _ref$35;
1810
+ var _ref$52;
1811
1811
  let GetRunBinaryAttachmentQueryHandler = class GetRunBinaryAttachmentQueryHandler$1 extends QueryHandler {
1812
1812
  constructor(lookupService) {
1813
1813
  super();
@@ -1820,7 +1820,7 @@ let GetRunBinaryAttachmentQueryHandler = class GetRunBinaryAttachmentQueryHandle
1820
1820
  GetRunBinaryAttachmentQueryHandler = __decorate([
1821
1821
  HandlesQuery.for(GetRunBinaryAttachmentQuery),
1822
1822
  __decorateParam(0, inject(RunBinaryAttachmentLookupService)),
1823
- __decorateMetadata("design:paramtypes", [typeof (_ref$35 = typeof RunBinaryAttachmentLookupService !== "undefined" && RunBinaryAttachmentLookupService) === "function" ? _ref$35 : Object])
1823
+ __decorateMetadata("design:paramtypes", [typeof (_ref$52 = typeof RunBinaryAttachmentLookupService !== "undefined" && RunBinaryAttachmentLookupService) === "function" ? _ref$52 : Object])
1824
1824
  ], GetRunBinaryAttachmentQueryHandler);
1825
1825
 
1826
1826
  //#endregion
@@ -1849,6 +1849,696 @@ GetRunStateQueryHandler = __decorate([
1849
1849
  __decorateMetadata("design:paramtypes", [Object])
1850
1850
  ], GetRunStateQueryHandler);
1851
1851
 
1852
+ //#endregion
1853
+ //#region src/application/telemetry/OtelIdentityFactory.ts
1854
+ let OtelIdentityFactory = class OtelIdentityFactory$1 {
1855
+ createTraceId(runId) {
1856
+ return this.hashToHex(runId, 32);
1857
+ }
1858
+ createRootSpanId(runId) {
1859
+ return this.hashToHex(`run:${runId}`, 16);
1860
+ }
1861
+ createNodeSpanId(activationId) {
1862
+ return this.hashToHex(`activation:${activationId}`, 16);
1863
+ }
1864
+ createConnectionInvocationSpanId(invocationId) {
1865
+ return this.hashToHex(`invocation:${invocationId}`, 16);
1866
+ }
1867
+ createArtifactId() {
1868
+ return randomBytes(16).toString("hex");
1869
+ }
1870
+ createEphemeralSpanId() {
1871
+ return randomBytes(8).toString("hex");
1872
+ }
1873
+ hashToHex(value, length) {
1874
+ const hex = createHash("sha256").update(value).digest("hex").slice(0, length);
1875
+ return this.ensureNonZeroHex(hex, length);
1876
+ }
1877
+ ensureNonZeroHex(hex, length) {
1878
+ if (!/^0+$/.test(hex)) return hex;
1879
+ return `${"0".repeat(Math.max(0, length - 1))}1`;
1880
+ }
1881
+ };
1882
+ OtelIdentityFactory = __decorate([injectable()], OtelIdentityFactory);
1883
+
1884
+ //#endregion
1885
+ //#region src/application/telemetry/TelemetryQueryService.ts
1886
+ var _ref$51, _TelemetryQueryService;
1887
+ let TelemetryQueryService = class TelemetryQueryService$1 {
1888
+ static {
1889
+ _TelemetryQueryService = this;
1890
+ }
1891
+ static workflowRunSpanName = "workflow.run";
1892
+ static queryScanLimit = 5e4;
1893
+ static maxBucketCount = 180;
1894
+ constructor(telemetrySpanStore, telemetryArtifactStore, telemetryMetricPointStore, workflowRunRepository, runTraceContextRepository, otelIdentityFactory) {
1895
+ this.telemetrySpanStore = telemetrySpanStore;
1896
+ this.telemetryArtifactStore = telemetryArtifactStore;
1897
+ this.telemetryMetricPointStore = telemetryMetricPointStore;
1898
+ this.workflowRunRepository = workflowRunRepository;
1899
+ this.runTraceContextRepository = runTraceContextRepository;
1900
+ this.otelIdentityFactory = otelIdentityFactory;
1901
+ }
1902
+ async summarizeRuns(filters = {}) {
1903
+ const spans = await this.resolveFilteredWorkflowRunSpans(filters);
1904
+ const totalDurationMs = spans.reduce((sum, span) => sum + this.durationMs(span), 0);
1905
+ const totalRuns = spans.length;
1906
+ return {
1907
+ totalRuns,
1908
+ completedRuns: spans.filter((span) => span.status === "completed").length,
1909
+ failedRuns: spans.filter((span) => span.status === "failed").length,
1910
+ runningRuns: spans.filter((span) => span.status === "running").length,
1911
+ averageDurationMs: totalRuns === 0 ? 0 : Math.round(totalDurationMs / totalRuns)
1912
+ };
1913
+ }
1914
+ async summarizeAiUsage(filters = {}) {
1915
+ const spans = await this.resolveFilteredWorkflowRunSpans(filters);
1916
+ if (spans.length === 0) return {
1917
+ inputTokens: 0,
1918
+ outputTokens: 0,
1919
+ totalTokens: 0,
1920
+ cachedInputTokens: 0,
1921
+ reasoningTokens: 0
1922
+ };
1923
+ const points = await this.listAiMetricPoints(filters, spans.map((span) => span.runId));
1924
+ return {
1925
+ inputTokens: this.sumMetric(points, GenAiTelemetryAttributeNames.usageInputTokens),
1926
+ outputTokens: this.sumMetric(points, GenAiTelemetryAttributeNames.usageOutputTokens),
1927
+ totalTokens: this.sumMetric(points, GenAiTelemetryAttributeNames.usageTotalTokens),
1928
+ cachedInputTokens: this.sumMetric(points, GenAiTelemetryAttributeNames.usageCacheReadInputTokens),
1929
+ reasoningTokens: this.sumMetric(points, GenAiTelemetryAttributeNames.usageReasoningTokens)
1930
+ };
1931
+ }
1932
+ async summarizeCosts(filters = {}) {
1933
+ const spans = await this.resolveFilteredWorkflowRunSpans(filters);
1934
+ if (spans.length === 0) return { currencies: [] };
1935
+ const costModelNamesBySpanId = await this.loadCostModelNamesBySpanId(filters, spans.map((span) => span.runId));
1936
+ const points = await this.listCostMetricPoints(filters, spans.map((span) => span.runId));
1937
+ return { currencies: this.buildCostCurrencyTotals(points, spans.length, costModelNamesBySpanId) };
1938
+ }
1939
+ async summarizeRunsTimeseries(filters, interval) {
1940
+ const buckets = this.createBuckets(filters, interval);
1941
+ const spans = await this.resolveFilteredWorkflowRunSpans(filters);
1942
+ for (const span of spans) {
1943
+ const bucket = this.findBucket(buckets, span.endTime ?? span.startTime);
1944
+ if (!bucket) continue;
1945
+ bucket.totalRuns += 1;
1946
+ if (span.status === "completed") bucket.completedRuns += 1;
1947
+ else if (span.status === "failed") bucket.failedRuns += 1;
1948
+ else if (span.status === "running") bucket.runningRuns += 1;
1949
+ bucket.averageDurationMs += this.durationMs(span);
1950
+ bucket.durationSamples += 1;
1951
+ }
1952
+ return {
1953
+ interval,
1954
+ buckets: buckets.map((bucket) => this.toTimeseriesBucketDto(bucket))
1955
+ };
1956
+ }
1957
+ async summarizeAiUsageTimeseries(filters, interval) {
1958
+ const buckets = this.createBuckets(filters, interval);
1959
+ const spans = await this.resolveFilteredWorkflowRunSpans(filters);
1960
+ if (spans.length === 0) return {
1961
+ interval,
1962
+ buckets: buckets.map((bucket) => this.toTimeseriesBucketDto(bucket))
1963
+ };
1964
+ const points = await this.listAiMetricPoints(filters, spans.map((span) => span.runId));
1965
+ for (const point of points) {
1966
+ const bucket = this.findBucket(buckets, point.observedAt);
1967
+ if (!bucket) continue;
1968
+ if (point.metricName === GenAiTelemetryAttributeNames.usageInputTokens) bucket.inputTokens += point.value;
1969
+ else if (point.metricName === GenAiTelemetryAttributeNames.usageOutputTokens) bucket.outputTokens += point.value;
1970
+ else if (point.metricName === GenAiTelemetryAttributeNames.usageTotalTokens) bucket.totalTokens += point.value;
1971
+ else if (point.metricName === GenAiTelemetryAttributeNames.usageCacheReadInputTokens) bucket.cachedInputTokens += point.value;
1972
+ else if (point.metricName === GenAiTelemetryAttributeNames.usageReasoningTokens) bucket.reasoningTokens += point.value;
1973
+ }
1974
+ return {
1975
+ interval,
1976
+ buckets: buckets.map((bucket) => this.toTimeseriesBucketDto(bucket))
1977
+ };
1978
+ }
1979
+ async summarizeCostsTimeseries(filters, interval) {
1980
+ const buckets = this.createBuckets(filters, interval);
1981
+ const spans = await this.resolveFilteredWorkflowRunSpans(filters);
1982
+ if (spans.length === 0) return {
1983
+ interval,
1984
+ buckets: buckets.map((bucket) => this.toTimeseriesBucketDto(bucket))
1985
+ };
1986
+ const costModelNamesBySpanId = await this.loadCostModelNamesBySpanId(filters, spans.map((span) => span.runId));
1987
+ const points = await this.listCostMetricPoints(filters, spans.map((span) => span.runId));
1988
+ for (const point of points) {
1989
+ const bucket = this.findBucket(buckets, point.observedAt);
1990
+ if (!bucket) continue;
1991
+ this.addCostPointToBucket(bucket, point, costModelNamesBySpanId);
1992
+ }
1993
+ return {
1994
+ interval,
1995
+ buckets: buckets.map((bucket) => this.toTimeseriesBucketDto(bucket))
1996
+ };
1997
+ }
1998
+ async listModelNames(filters = {}) {
1999
+ const spans = await this.resolveFilteredWorkflowRunSpans(filters);
2000
+ if (spans.length === 0) return { modelNames: [] };
2001
+ const modelSpans = await this.telemetrySpanStore.list({
2002
+ workflowId: filters.workflowId,
2003
+ workflowIds: filters.workflowIds,
2004
+ runIds: [...new Set(spans.map((span) => span.runId))],
2005
+ startTimeGte: filters.startTimeGte,
2006
+ endTimeLte: filters.endTimeLte,
2007
+ limit: _TelemetryQueryService.queryScanLimit + 1
2008
+ });
2009
+ this.throwWhenQueryLimitExceeded(modelSpans.length);
2010
+ return { modelNames: [...new Set(modelSpans.flatMap((span) => span.modelName ? [span.modelName] : []))].sort((a$1, b$2) => a$1.localeCompare(b$2)) };
2011
+ }
2012
+ async listRuns(request) {
2013
+ const spans = await this.resolveFilteredWorkflowRunSpans(request.filters);
2014
+ const originByRunId = await this.loadRunOrigins(spans.map((span) => span.runId));
2015
+ const costsByRunId = await this.loadCostsByRunId(request.filters, spans.map((span) => span.runId));
2016
+ const items = spans.slice().sort((left, right) => right.startTime.localeCompare(left.startTime)).map((span) => ({
2017
+ runId: span.runId,
2018
+ workflowId: span.workflowId,
2019
+ status: span.status ?? "running",
2020
+ origin: originByRunId.get(span.runId) ?? "triggered",
2021
+ startedAt: span.startTime ?? span.endTime ?? (/* @__PURE__ */ new Date(0)).toISOString(),
2022
+ finishedAt: span.endTime,
2023
+ costs: costsByRunId.get(span.runId) ?? []
2024
+ }));
2025
+ const offset = (request.page - 1) * request.pageSize;
2026
+ return {
2027
+ items: items.slice(offset, offset + request.pageSize),
2028
+ totalCount: items.length,
2029
+ page: request.page,
2030
+ pageSize: request.pageSize
2031
+ };
2032
+ }
2033
+ async loadRunTrace(runId) {
2034
+ const traceId = (await this.runTraceContextRepository.load(runId))?.traceId ?? this.otelIdentityFactory.createTraceId(runId);
2035
+ const [spans, artifacts, metricPoints] = await Promise.all([
2036
+ this.telemetrySpanStore.listByTraceId(traceId),
2037
+ this.telemetryArtifactStore.listByTraceId(traceId),
2038
+ this.telemetryMetricPointStore.list({
2039
+ runId,
2040
+ traceId,
2041
+ limit: _TelemetryQueryService.queryScanLimit + 1
2042
+ })
2043
+ ]);
2044
+ this.throwWhenQueryLimitExceeded(metricPoints.length);
2045
+ return {
2046
+ traceId,
2047
+ runId,
2048
+ spans,
2049
+ artifacts,
2050
+ metricPoints
2051
+ };
2052
+ }
2053
+ durationMs(span) {
2054
+ if (!span.startTime || !span.endTime) return 0;
2055
+ return Math.max(0, new Date(span.endTime).getTime() - new Date(span.startTime).getTime());
2056
+ }
2057
+ async listWorkflowRunSpans(filters) {
2058
+ const spans = await this.telemetrySpanStore.list({
2059
+ workflowId: filters.workflowId,
2060
+ workflowIds: filters.workflowIds,
2061
+ statuses: filters.statuses,
2062
+ names: [_TelemetryQueryService.workflowRunSpanName],
2063
+ startTimeGte: filters.startTimeGte,
2064
+ endTimeLte: filters.endTimeLte,
2065
+ limit: _TelemetryQueryService.queryScanLimit + 1
2066
+ });
2067
+ this.throwWhenQueryLimitExceeded(spans.length);
2068
+ return spans.filter((span) => Boolean(span.startTime));
2069
+ }
2070
+ sumMetric(points, metricName) {
2071
+ return points.filter((point) => point.metricName === metricName).reduce((sum, point) => sum + point.value, 0);
2072
+ }
2073
+ async resolveFilteredWorkflowRunSpans(filters) {
2074
+ const spans = await this.listWorkflowRunSpans(filters);
2075
+ if (spans.length === 0) return [];
2076
+ const eligibleRunIds = await this.resolveEligibleRunIds(filters, spans);
2077
+ if (eligibleRunIds === null) return spans;
2078
+ return spans.filter((span) => eligibleRunIds.has(span.runId));
2079
+ }
2080
+ async resolveEligibleRunIds(filters, spans) {
2081
+ let eligibleRunIds = null;
2082
+ if (filters.modelNames && filters.modelNames.length > 0) eligibleRunIds = await this.listModelMatchedRunIds(filters);
2083
+ if (this.shouldApplyRunOriginFilter(filters.runOrigins)) {
2084
+ const originMatchedRunIds = await this.listOriginMatchedRunIds(spans, filters.runOrigins);
2085
+ eligibleRunIds = eligibleRunIds ? this.intersectRunIds(eligibleRunIds, originMatchedRunIds) : originMatchedRunIds;
2086
+ }
2087
+ return eligibleRunIds;
2088
+ }
2089
+ async listModelMatchedRunIds(filters) {
2090
+ const spans = await this.telemetrySpanStore.list({
2091
+ workflowId: filters.workflowId,
2092
+ workflowIds: filters.workflowIds,
2093
+ modelNames: filters.modelNames,
2094
+ startTimeGte: filters.startTimeGte,
2095
+ endTimeLte: filters.endTimeLte,
2096
+ limit: _TelemetryQueryService.queryScanLimit + 1
2097
+ });
2098
+ this.throwWhenQueryLimitExceeded(spans.length);
2099
+ return new Set(spans.map((span) => span.runId));
2100
+ }
2101
+ async listOriginMatchedRunIds(spans, runOrigins) {
2102
+ const originByRunId = await this.loadRunOrigins(spans.map((span) => span.runId));
2103
+ const matchedRunIds = /* @__PURE__ */ new Set();
2104
+ for (const span of spans) {
2105
+ const origin = originByRunId.get(span.runId) ?? "triggered";
2106
+ if (runOrigins.includes(origin)) matchedRunIds.add(span.runId);
2107
+ }
2108
+ return matchedRunIds;
2109
+ }
2110
+ async loadRunOrigins(runIds) {
2111
+ const uniqueRunIds = [...new Set(runIds)];
2112
+ const states = await Promise.all(uniqueRunIds.map(async (runId) => await this.workflowRunRepository.load(runId)));
2113
+ const originByRunId = /* @__PURE__ */ new Map();
2114
+ for (const state of states) {
2115
+ if (!state) continue;
2116
+ const mode = state.executionOptions?.mode;
2117
+ originByRunId.set(state.runId, mode === "manual" || mode === "debug" ? "manual" : "triggered");
2118
+ }
2119
+ return originByRunId;
2120
+ }
2121
+ intersectRunIds(left, right) {
2122
+ const intersection = /* @__PURE__ */ new Set();
2123
+ for (const value of left) if (right.has(value)) intersection.add(value);
2124
+ return intersection;
2125
+ }
2126
+ shouldApplyRunOriginFilter(runOrigins) {
2127
+ return Boolean(runOrigins && runOrigins.length > 0 && runOrigins.length < 2);
2128
+ }
2129
+ async listAiMetricPoints(filters, runIds) {
2130
+ const points = await this.telemetryMetricPointStore.list({
2131
+ workflowId: filters.workflowId,
2132
+ workflowIds: filters.workflowIds,
2133
+ runIds: runIds.length > 0 ? runIds : void 0,
2134
+ modelNames: filters.modelNames,
2135
+ metricNames: [
2136
+ GenAiTelemetryAttributeNames.usageInputTokens,
2137
+ GenAiTelemetryAttributeNames.usageOutputTokens,
2138
+ GenAiTelemetryAttributeNames.usageTotalTokens,
2139
+ GenAiTelemetryAttributeNames.usageCacheReadInputTokens,
2140
+ GenAiTelemetryAttributeNames.usageReasoningTokens
2141
+ ],
2142
+ observedAtGte: filters.startTimeGte,
2143
+ observedAtLte: filters.endTimeLte,
2144
+ limit: _TelemetryQueryService.queryScanLimit + 1
2145
+ });
2146
+ this.throwWhenQueryLimitExceeded(points.length);
2147
+ return points;
2148
+ }
2149
+ async listCostMetricPoints(filters, runIds) {
2150
+ const points = await this.telemetryMetricPointStore.list({
2151
+ workflowId: filters.workflowId,
2152
+ workflowIds: filters.workflowIds,
2153
+ runIds: runIds.length > 0 ? runIds : void 0,
2154
+ modelNames: filters.modelNames,
2155
+ metricNames: [CostTrackingTelemetryMetricNames.estimatedCost],
2156
+ observedAtGte: filters.startTimeGte,
2157
+ observedAtLte: filters.endTimeLte,
2158
+ limit: _TelemetryQueryService.queryScanLimit + 1
2159
+ });
2160
+ this.throwWhenQueryLimitExceeded(points.length);
2161
+ return points;
2162
+ }
2163
+ async loadCostsByRunId(filters, runIds) {
2164
+ if (runIds.length === 0) return /* @__PURE__ */ new Map();
2165
+ const points = await this.listCostMetricPoints(filters, runIds);
2166
+ const totalsByRunId = /* @__PURE__ */ new Map();
2167
+ for (const point of points) {
2168
+ if (!point.runId) continue;
2169
+ const currency = this.readCostCurrency(point);
2170
+ const currencyScale$1 = this.readCostCurrencyScale(point);
2171
+ if (!currency || currencyScale$1 === void 0) continue;
2172
+ const totals = this.getOrCreateRunCostTotals(totalsByRunId, point.runId);
2173
+ this.accumulateCostTotal(totals, currency, currencyScale$1, point.value);
2174
+ }
2175
+ return new Map([...totalsByRunId.entries()].map(([runId, totals]) => [runId, this.toCostDtos(totals)]));
2176
+ }
2177
+ buildCostCurrencyTotals(points, runCount, costModelNamesBySpanId) {
2178
+ const totals = /* @__PURE__ */ new Map();
2179
+ for (const point of points) {
2180
+ const currency = this.readCostCurrency(point);
2181
+ const currencyScale$1 = this.readCostCurrencyScale(point);
2182
+ if (!currency || currencyScale$1 === void 0) continue;
2183
+ const costKey = this.readCostKey(point, costModelNamesBySpanId);
2184
+ const aggregate = this.getOrCreateCostAggregate(totals, currency, currencyScale$1);
2185
+ aggregate.estimatedCostMinor += point.value;
2186
+ if (costKey) aggregate.costKeyTotals.set(costKey, (aggregate.costKeyTotals.get(costKey) ?? 0) + point.value);
2187
+ }
2188
+ return [...totals.values()].map((aggregate) => ({
2189
+ currency: aggregate.currency,
2190
+ currencyScale: aggregate.currencyScale,
2191
+ estimatedCostMinor: aggregate.estimatedCostMinor,
2192
+ averageCostPerRunMinor: runCount === 0 ? 0 : Math.round(aggregate.estimatedCostMinor / runCount),
2193
+ costKeys: [...aggregate.costKeyTotals.entries()].sort(([left], [right]) => left.localeCompare(right)).map(([costKey, estimatedCostMinor]) => ({
2194
+ costKey,
2195
+ estimatedCostMinor
2196
+ }))
2197
+ })).sort((left, right) => left.currency.localeCompare(right.currency));
2198
+ }
2199
+ createBuckets(filters, interval) {
2200
+ if (!filters.startTimeGte || !filters.endTimeLte) throw new Error("Dashboard timeseries requires startTimeGte and endTimeLte.");
2201
+ const buckets = [];
2202
+ const cursor = new Date(filters.startTimeGte);
2203
+ const end = new Date(filters.endTimeLte);
2204
+ if (Number.isNaN(cursor.getTime()) || Number.isNaN(end.getTime()) || cursor > end) throw new Error("Dashboard timeseries requires a valid date range.");
2205
+ while (cursor <= end) {
2206
+ const bucketStart = new Date(cursor);
2207
+ const bucketEnd = this.advanceBucket(cursor, interval);
2208
+ buckets.push({
2209
+ bucketStartIso: bucketStart.toISOString(),
2210
+ bucketEndIso: bucketEnd.toISOString(),
2211
+ totalRuns: 0,
2212
+ completedRuns: 0,
2213
+ failedRuns: 0,
2214
+ runningRuns: 0,
2215
+ averageDurationMs: 0,
2216
+ durationSamples: 0,
2217
+ inputTokens: 0,
2218
+ outputTokens: 0,
2219
+ totalTokens: 0,
2220
+ cachedInputTokens: 0,
2221
+ reasoningTokens: 0,
2222
+ costs: /* @__PURE__ */ new Map()
2223
+ });
2224
+ cursor.setTime(bucketEnd.getTime());
2225
+ if (buckets.length > _TelemetryQueryService.maxBucketCount) throw new Error(`Dashboard timeseries exceeded ${String(_TelemetryQueryService.maxBucketCount)} buckets.`);
2226
+ }
2227
+ return buckets;
2228
+ }
2229
+ advanceBucket(cursor, interval) {
2230
+ const next = new Date(cursor);
2231
+ if (interval === "minute_5") {
2232
+ next.setUTCMinutes(next.getUTCMinutes() + 5, 0, 0);
2233
+ return next;
2234
+ }
2235
+ if (interval === "minute_15") {
2236
+ next.setUTCMinutes(next.getUTCMinutes() + 15, 0, 0);
2237
+ return next;
2238
+ }
2239
+ if (interval === "hour") {
2240
+ next.setUTCHours(next.getUTCHours() + 1, 0, 0, 0);
2241
+ return next;
2242
+ }
2243
+ if (interval === "day") {
2244
+ next.setUTCDate(next.getUTCDate() + 1);
2245
+ return next;
2246
+ }
2247
+ next.setUTCDate(next.getUTCDate() + 7);
2248
+ return next;
2249
+ }
2250
+ findBucket(buckets, observedAtIso) {
2251
+ if (!observedAtIso) return;
2252
+ const observedAt = new Date(observedAtIso).getTime();
2253
+ if (Number.isNaN(observedAt)) return;
2254
+ return buckets.find((bucket) => {
2255
+ const start = new Date(bucket.bucketStartIso).getTime();
2256
+ const end = new Date(bucket.bucketEndIso).getTime();
2257
+ return observedAt >= start && observedAt < end;
2258
+ });
2259
+ }
2260
+ toTimeseriesBucketDto(bucket) {
2261
+ return {
2262
+ bucketStartIso: bucket.bucketStartIso,
2263
+ bucketEndIso: bucket.bucketEndIso,
2264
+ totalRuns: bucket.totalRuns,
2265
+ completedRuns: bucket.completedRuns,
2266
+ failedRuns: bucket.failedRuns,
2267
+ runningRuns: bucket.runningRuns,
2268
+ averageDurationMs: bucket.durationSamples === 0 ? 0 : Math.round(bucket.averageDurationMs / bucket.durationSamples),
2269
+ inputTokens: bucket.inputTokens,
2270
+ outputTokens: bucket.outputTokens,
2271
+ totalTokens: bucket.totalTokens,
2272
+ cachedInputTokens: bucket.cachedInputTokens,
2273
+ reasoningTokens: bucket.reasoningTokens,
2274
+ costs: this.toCostDtos(bucket.costs)
2275
+ };
2276
+ }
2277
+ addCostPointToBucket(bucket, point, costModelNamesBySpanId) {
2278
+ const currency = this.readCostCurrency(point);
2279
+ const currencyScale$1 = this.readCostCurrencyScale(point);
2280
+ if (!currency || currencyScale$1 === void 0) return;
2281
+ this.accumulateCostTotal(bucket.costs, currency, currencyScale$1, point.value, this.readCostComponent(point), this.readCostKey(point, costModelNamesBySpanId));
2282
+ }
2283
+ toCostDtos(totals) {
2284
+ return [...totals.values()].map((entry) => ({
2285
+ currency: entry.currency,
2286
+ currencyScale: entry.currencyScale,
2287
+ estimatedCostMinor: entry.estimatedCostMinor,
2288
+ component: entry.component,
2289
+ costKey: entry.costKey
2290
+ })).sort((left, right) => left.currency.localeCompare(right.currency));
2291
+ }
2292
+ accumulateCostTotal(totals, currency, currencyScale$1, value, component, costKey) {
2293
+ const key = this.createCostCurrencyKey(currency, currencyScale$1, component, costKey);
2294
+ const existing = totals.get(key);
2295
+ if (existing) {
2296
+ existing.estimatedCostMinor += value;
2297
+ return;
2298
+ }
2299
+ totals.set(key, {
2300
+ currency,
2301
+ currencyScale: currencyScale$1,
2302
+ estimatedCostMinor: value,
2303
+ component,
2304
+ costKey
2305
+ });
2306
+ }
2307
+ getOrCreateRunCostTotals(totalsByRunId, runId) {
2308
+ const existing = totalsByRunId.get(runId);
2309
+ if (existing) return existing;
2310
+ const totals = /* @__PURE__ */ new Map();
2311
+ totalsByRunId.set(runId, totals);
2312
+ return totals;
2313
+ }
2314
+ getOrCreateCostAggregate(totals, currency, currencyScale$1) {
2315
+ const key = this.createCostCurrencyKey(currency, currencyScale$1);
2316
+ const existing = totals.get(key);
2317
+ if (existing) return existing;
2318
+ const aggregate = {
2319
+ currency,
2320
+ currencyScale: currencyScale$1,
2321
+ estimatedCostMinor: 0,
2322
+ costKeyTotals: /* @__PURE__ */ new Map()
2323
+ };
2324
+ totals.set(key, aggregate);
2325
+ return aggregate;
2326
+ }
2327
+ createCostCurrencyKey(currency, currencyScale$1, component, costKey) {
2328
+ return `${currency}::${String(currencyScale$1)}::${component ?? ""}::${costKey ?? ""}`;
2329
+ }
2330
+ readCostComponent(point) {
2331
+ return this.readStringDimension(point, CostTrackingTelemetryAttributeNames.component);
2332
+ }
2333
+ readCostKey(point, costModelNamesBySpanId) {
2334
+ return point.modelName ?? (point.spanId ? costModelNamesBySpanId.get(point.spanId) : void 0) ?? this.readStringDimension(point, CostTrackingTelemetryAttributeNames.pricingKey) ?? this.readStringDimension(point, CostTrackingTelemetryAttributeNames.provider) ?? this.readStringDimension(point, CostTrackingTelemetryAttributeNames.component);
2335
+ }
2336
+ async loadCostModelNamesBySpanId(filters, runIds) {
2337
+ if (runIds.length === 0) return /* @__PURE__ */ new Map();
2338
+ const spans = await this.telemetrySpanStore.list({
2339
+ workflowId: filters.workflowId,
2340
+ workflowIds: filters.workflowIds,
2341
+ runIds: [...new Set(runIds)],
2342
+ startTimeGte: filters.startTimeGte,
2343
+ endTimeLte: filters.endTimeLte,
2344
+ limit: _TelemetryQueryService.queryScanLimit + 1
2345
+ });
2346
+ this.throwWhenQueryLimitExceeded(spans.length);
2347
+ return new Map(spans.filter((span) => typeof span.modelName === "string").map((span) => [span.spanId, span.modelName]));
2348
+ }
2349
+ readCostCurrency(point) {
2350
+ return this.readStringDimension(point, CostTrackingTelemetryAttributeNames.currency) ?? point.unit;
2351
+ }
2352
+ readCostCurrencyScale(point) {
2353
+ const value = point.dimensions?.[CostTrackingTelemetryAttributeNames.currencyScale];
2354
+ return typeof value === "number" && Number.isFinite(value) ? value : void 0;
2355
+ }
2356
+ readStringDimension(point, key) {
2357
+ const value = point.dimensions?.[key];
2358
+ return typeof value === "string" && value.length > 0 ? value : void 0;
2359
+ }
2360
+ throwWhenQueryLimitExceeded(rowCount) {
2361
+ if (rowCount > _TelemetryQueryService.queryScanLimit) throw new Error(`Telemetry dashboard query exceeded ${String(_TelemetryQueryService.queryScanLimit)} rows.`);
2362
+ }
2363
+ };
2364
+ TelemetryQueryService = _TelemetryQueryService = __decorate([
2365
+ injectable(),
2366
+ __decorateParam(0, inject(ApplicationTokens.TelemetrySpanStore)),
2367
+ __decorateParam(1, inject(ApplicationTokens.TelemetryArtifactStore)),
2368
+ __decorateParam(2, inject(ApplicationTokens.TelemetryMetricPointStore)),
2369
+ __decorateParam(3, inject(ApplicationTokens.WorkflowRunRepository)),
2370
+ __decorateParam(4, inject(ApplicationTokens.RunTraceContextRepository)),
2371
+ __decorateParam(5, inject(OtelIdentityFactory)),
2372
+ __decorateMetadata("design:paramtypes", [
2373
+ Object,
2374
+ Object,
2375
+ Object,
2376
+ Object,
2377
+ Object,
2378
+ typeof (_ref$51 = typeof OtelIdentityFactory !== "undefined" && OtelIdentityFactory) === "function" ? _ref$51 : Object
2379
+ ])
2380
+ ], TelemetryQueryService);
2381
+
2382
+ //#endregion
2383
+ //#region src/application/queries/GetTelemetryDashboardDimensionsQuery.ts
2384
+ var GetTelemetryDashboardDimensionsQuery = class extends Query {
2385
+ constructor(filters) {
2386
+ super();
2387
+ this.filters = filters;
2388
+ }
2389
+ };
2390
+
2391
+ //#endregion
2392
+ //#region src/application/queries/GetTelemetryDashboardDimensionsQueryHandler.ts
2393
+ var _ref$50;
2394
+ let GetTelemetryDashboardDimensionsQueryHandler = class GetTelemetryDashboardDimensionsQueryHandler$1 extends QueryHandler {
2395
+ constructor(telemetryQueryService) {
2396
+ super();
2397
+ this.telemetryQueryService = telemetryQueryService;
2398
+ }
2399
+ async execute(query) {
2400
+ return await this.telemetryQueryService.listModelNames(query.filters);
2401
+ }
2402
+ };
2403
+ GetTelemetryDashboardDimensionsQueryHandler = __decorate([
2404
+ HandlesQuery.for(GetTelemetryDashboardDimensionsQuery),
2405
+ __decorateParam(0, inject(TelemetryQueryService)),
2406
+ __decorateMetadata("design:paramtypes", [typeof (_ref$50 = typeof TelemetryQueryService !== "undefined" && TelemetryQueryService) === "function" ? _ref$50 : Object])
2407
+ ], GetTelemetryDashboardDimensionsQueryHandler);
2408
+
2409
+ //#endregion
2410
+ //#region src/application/queries/GetTelemetryDashboardRunsQuery.ts
2411
+ var GetTelemetryDashboardRunsQuery = class extends Query {
2412
+ constructor(request) {
2413
+ super();
2414
+ this.request = request;
2415
+ }
2416
+ };
2417
+
2418
+ //#endregion
2419
+ //#region src/application/queries/GetTelemetryDashboardRunsQueryHandler.ts
2420
+ var _ref$49;
2421
+ let GetTelemetryDashboardRunsQueryHandler = class GetTelemetryDashboardRunsQueryHandler$1 extends QueryHandler {
2422
+ constructor(telemetryQueryService) {
2423
+ super();
2424
+ this.telemetryQueryService = telemetryQueryService;
2425
+ }
2426
+ async execute(query) {
2427
+ return await this.telemetryQueryService.listRuns(query.request);
2428
+ }
2429
+ };
2430
+ GetTelemetryDashboardRunsQueryHandler = __decorate([
2431
+ HandlesQuery.for(GetTelemetryDashboardRunsQuery),
2432
+ __decorateParam(0, inject(TelemetryQueryService)),
2433
+ __decorateMetadata("design:paramtypes", [typeof (_ref$49 = typeof TelemetryQueryService !== "undefined" && TelemetryQueryService) === "function" ? _ref$49 : Object])
2434
+ ], GetTelemetryDashboardRunsQueryHandler);
2435
+
2436
+ //#endregion
2437
+ //#region src/application/queries/GetTelemetryRunTraceQuery.ts
2438
+ var GetTelemetryRunTraceQuery = class extends Query {
2439
+ constructor(runId) {
2440
+ super();
2441
+ this.runId = runId;
2442
+ }
2443
+ };
2444
+
2445
+ //#endregion
2446
+ //#region src/application/queries/GetTelemetryRunTraceQueryHandler.ts
2447
+ var _ref$48;
2448
+ let GetTelemetryRunTraceQueryHandler = class GetTelemetryRunTraceQueryHandler$1 extends QueryHandler {
2449
+ constructor(telemetryQueryService) {
2450
+ super();
2451
+ this.telemetryQueryService = telemetryQueryService;
2452
+ }
2453
+ async execute(query) {
2454
+ return await this.telemetryQueryService.loadRunTrace(query.runId);
2455
+ }
2456
+ };
2457
+ GetTelemetryRunTraceQueryHandler = __decorate([
2458
+ HandlesQuery.for(GetTelemetryRunTraceQuery),
2459
+ __decorateParam(0, inject(TelemetryQueryService)),
2460
+ __decorateMetadata("design:paramtypes", [typeof (_ref$48 = typeof TelemetryQueryService !== "undefined" && TelemetryQueryService) === "function" ? _ref$48 : Object])
2461
+ ], GetTelemetryRunTraceQueryHandler);
2462
+
2463
+ //#endregion
2464
+ //#region src/application/queries/GetTelemetryDashboardSummaryQuery.ts
2465
+ var GetTelemetryDashboardSummaryQuery = class extends Query {
2466
+ constructor(filters) {
2467
+ super();
2468
+ this.filters = filters;
2469
+ }
2470
+ };
2471
+
2472
+ //#endregion
2473
+ //#region src/application/queries/GetTelemetryDashboardSummaryQueryHandler.ts
2474
+ var _ref$47;
2475
+ let GetTelemetryDashboardSummaryQueryHandler = class GetTelemetryDashboardSummaryQueryHandler$1 extends QueryHandler {
2476
+ constructor(telemetryQueryService) {
2477
+ super();
2478
+ this.telemetryQueryService = telemetryQueryService;
2479
+ }
2480
+ async execute(query) {
2481
+ const [runs, ai$1, costs] = await Promise.all([
2482
+ this.telemetryQueryService.summarizeRuns(query.filters),
2483
+ this.telemetryQueryService.summarizeAiUsage(query.filters),
2484
+ this.telemetryQueryService.summarizeCosts(query.filters)
2485
+ ]);
2486
+ return {
2487
+ runs,
2488
+ ai: ai$1,
2489
+ costs
2490
+ };
2491
+ }
2492
+ };
2493
+ GetTelemetryDashboardSummaryQueryHandler = __decorate([
2494
+ HandlesQuery.for(GetTelemetryDashboardSummaryQuery),
2495
+ __decorateParam(0, inject(TelemetryQueryService)),
2496
+ __decorateMetadata("design:paramtypes", [typeof (_ref$47 = typeof TelemetryQueryService !== "undefined" && TelemetryQueryService) === "function" ? _ref$47 : Object])
2497
+ ], GetTelemetryDashboardSummaryQueryHandler);
2498
+
2499
+ //#endregion
2500
+ //#region src/application/queries/GetTelemetryDashboardTimeseriesQuery.ts
2501
+ var GetTelemetryDashboardTimeseriesQuery = class extends Query {
2502
+ constructor(request) {
2503
+ super();
2504
+ this.request = request;
2505
+ }
2506
+ };
2507
+
2508
+ //#endregion
2509
+ //#region src/application/queries/GetTelemetryDashboardTimeseriesQueryHandler.ts
2510
+ var _ref$46;
2511
+ let GetTelemetryDashboardTimeseriesQueryHandler = class GetTelemetryDashboardTimeseriesQueryHandler$1 extends QueryHandler {
2512
+ constructor(telemetryQueryService) {
2513
+ super();
2514
+ this.telemetryQueryService = telemetryQueryService;
2515
+ }
2516
+ async execute(query) {
2517
+ const [runSeries, aiSeries, costSeries] = await Promise.all([
2518
+ this.telemetryQueryService.summarizeRunsTimeseries(query.request.filters, query.request.interval),
2519
+ this.telemetryQueryService.summarizeAiUsageTimeseries(query.request.filters, query.request.interval),
2520
+ this.telemetryQueryService.summarizeCostsTimeseries(query.request.filters, query.request.interval)
2521
+ ]);
2522
+ return {
2523
+ interval: query.request.interval,
2524
+ buckets: runSeries.buckets.map((runBucket, index) => ({
2525
+ ...runBucket,
2526
+ inputTokens: aiSeries.buckets[index]?.inputTokens ?? 0,
2527
+ outputTokens: aiSeries.buckets[index]?.outputTokens ?? 0,
2528
+ totalTokens: aiSeries.buckets[index]?.totalTokens ?? 0,
2529
+ cachedInputTokens: aiSeries.buckets[index]?.cachedInputTokens ?? 0,
2530
+ reasoningTokens: aiSeries.buckets[index]?.reasoningTokens ?? 0,
2531
+ costs: costSeries.buckets[index]?.costs ?? []
2532
+ }))
2533
+ };
2534
+ }
2535
+ };
2536
+ GetTelemetryDashboardTimeseriesQueryHandler = __decorate([
2537
+ HandlesQuery.for(GetTelemetryDashboardTimeseriesQuery),
2538
+ __decorateParam(0, inject(TelemetryQueryService)),
2539
+ __decorateMetadata("design:paramtypes", [typeof (_ref$46 = typeof TelemetryQueryService !== "undefined" && TelemetryQueryService) === "function" ? _ref$46 : Object])
2540
+ ], GetTelemetryDashboardTimeseriesQueryHandler);
2541
+
1852
2542
  //#endregion
1853
2543
  //#region src/application/queries/GetWorkflowRunDetailQuery.ts
1854
2544
  var GetWorkflowRunDetailQuery = class extends Query {
@@ -1939,7 +2629,7 @@ var GetWorkflowOverlayBinaryAttachmentQuery = class extends Query {
1939
2629
 
1940
2630
  //#endregion
1941
2631
  //#region src/application/queries/GetWorkflowOverlayBinaryAttachmentQueryHandler.ts
1942
- var _ref$34;
2632
+ var _ref$45;
1943
2633
  let GetWorkflowOverlayBinaryAttachmentQueryHandler = class GetWorkflowOverlayBinaryAttachmentQueryHandler$1 extends QueryHandler {
1944
2634
  constructor(lookupService) {
1945
2635
  super();
@@ -1952,7 +2642,7 @@ let GetWorkflowOverlayBinaryAttachmentQueryHandler = class GetWorkflowOverlayBin
1952
2642
  GetWorkflowOverlayBinaryAttachmentQueryHandler = __decorate([
1953
2643
  HandlesQuery.for(GetWorkflowOverlayBinaryAttachmentQuery),
1954
2644
  __decorateParam(0, inject(RunBinaryAttachmentLookupService)),
1955
- __decorateMetadata("design:paramtypes", [typeof (_ref$34 = typeof RunBinaryAttachmentLookupService !== "undefined" && RunBinaryAttachmentLookupService) === "function" ? _ref$34 : Object])
2645
+ __decorateMetadata("design:paramtypes", [typeof (_ref$45 = typeof RunBinaryAttachmentLookupService !== "undefined" && RunBinaryAttachmentLookupService) === "function" ? _ref$45 : Object])
1956
2646
  ], GetWorkflowOverlayBinaryAttachmentQueryHandler);
1957
2647
 
1958
2648
  //#endregion
@@ -2018,13 +2708,13 @@ var CodemationPluginRegistrar = class {
2018
2708
  loggerFactory: args.loggerFactory,
2019
2709
  registerCredentialType: (type) => args.registerCredentialType(type),
2020
2710
  registerNode: (token, implementation) => {
2021
- args.container.register(token, { useClass: implementation ?? token });
2711
+ args.container.registerSingleton(token, implementation ?? token);
2022
2712
  },
2023
2713
  registerValue: (token, value) => {
2024
2714
  args.container.registerInstance(token, value);
2025
2715
  },
2026
2716
  registerClass: (token, implementation) => {
2027
- args.container.register(token, { useClass: implementation });
2717
+ args.container.registerSingleton(token, implementation);
2028
2718
  },
2029
2719
  registerFactory: (token, factory) => {
2030
2720
  args.container.register(token, { useFactory: (dependencyContainer) => factory(dependencyContainer) });
@@ -2064,6 +2754,687 @@ WorkflowRunEventWebsocketRelay = __decorate([
2064
2754
  __decorateMetadata("design:paramtypes", [Object, Object])
2065
2755
  ], WorkflowRunEventWebsocketRelay);
2066
2756
 
2757
+ //#endregion
2758
+ //#region src/application/cost/FrameworkCostCatalogEntries.ts
2759
+ const currencyScale = 1e9;
2760
+ const FrameworkCostCatalogEntries = [
2761
+ {
2762
+ component: "chat",
2763
+ provider: "openai",
2764
+ operation: "completion.input",
2765
+ pricingKey: "demo-gpt",
2766
+ usageUnit: "input_tokens",
2767
+ currency: "USD",
2768
+ currencyScale,
2769
+ pricePerUnitMinor: 1e3
2770
+ },
2771
+ {
2772
+ component: "chat",
2773
+ provider: "openai",
2774
+ operation: "completion.output",
2775
+ pricingKey: "demo-gpt",
2776
+ usageUnit: "output_tokens",
2777
+ currency: "USD",
2778
+ currencyScale,
2779
+ pricePerUnitMinor: 2e3
2780
+ },
2781
+ {
2782
+ component: "chat",
2783
+ provider: "openai",
2784
+ operation: "completion.input",
2785
+ pricingKey: "gpt-4o-mini",
2786
+ usageUnit: "input_tokens",
2787
+ currency: "USD",
2788
+ currencyScale,
2789
+ pricePerUnitMinor: 150
2790
+ },
2791
+ {
2792
+ component: "chat",
2793
+ provider: "openai",
2794
+ operation: "completion.output",
2795
+ pricingKey: "gpt-4o-mini",
2796
+ usageUnit: "output_tokens",
2797
+ currency: "USD",
2798
+ currencyScale,
2799
+ pricePerUnitMinor: 600
2800
+ },
2801
+ {
2802
+ component: "chat",
2803
+ provider: "openai",
2804
+ operation: "completion.input",
2805
+ pricingKey: "gpt-4.1-nano",
2806
+ usageUnit: "input_tokens",
2807
+ currency: "USD",
2808
+ currencyScale,
2809
+ pricePerUnitMinor: 100
2810
+ },
2811
+ {
2812
+ component: "chat",
2813
+ provider: "openai",
2814
+ operation: "completion.output",
2815
+ pricingKey: "gpt-4.1-nano",
2816
+ usageUnit: "output_tokens",
2817
+ currency: "USD",
2818
+ currencyScale,
2819
+ pricePerUnitMinor: 400
2820
+ },
2821
+ {
2822
+ component: "chat",
2823
+ provider: "openai",
2824
+ operation: "completion.input",
2825
+ pricingKey: "gpt-4.1-mini",
2826
+ usageUnit: "input_tokens",
2827
+ currency: "USD",
2828
+ currencyScale,
2829
+ pricePerUnitMinor: 400
2830
+ },
2831
+ {
2832
+ component: "chat",
2833
+ provider: "openai",
2834
+ operation: "completion.output",
2835
+ pricingKey: "gpt-4.1-mini",
2836
+ usageUnit: "output_tokens",
2837
+ currency: "USD",
2838
+ currencyScale,
2839
+ pricePerUnitMinor: 1600
2840
+ },
2841
+ {
2842
+ component: "chat",
2843
+ provider: "openai",
2844
+ operation: "completion.input",
2845
+ pricingKey: "gpt-4.1",
2846
+ usageUnit: "input_tokens",
2847
+ currency: "USD",
2848
+ currencyScale,
2849
+ pricePerUnitMinor: 2e3
2850
+ },
2851
+ {
2852
+ component: "chat",
2853
+ provider: "openai",
2854
+ operation: "completion.output",
2855
+ pricingKey: "gpt-4.1",
2856
+ usageUnit: "output_tokens",
2857
+ currency: "USD",
2858
+ currencyScale,
2859
+ pricePerUnitMinor: 8e3
2860
+ },
2861
+ {
2862
+ component: "rag",
2863
+ provider: "openai",
2864
+ operation: "embed_documents",
2865
+ pricingKey: "text-embedding-3-small",
2866
+ usageUnit: "input_tokens",
2867
+ currency: "USD",
2868
+ currencyScale,
2869
+ pricePerUnitMinor: 20
2870
+ },
2871
+ {
2872
+ component: "ocr",
2873
+ provider: "azure_document_intelligence",
2874
+ operation: "analyze_document",
2875
+ pricingKey: "prebuilt_read",
2876
+ usageUnit: "pages",
2877
+ currency: "EUR",
2878
+ currencyScale,
2879
+ pricePerUnitMinor: 15e6
2880
+ }
2881
+ ];
2882
+
2883
+ //#endregion
2884
+ //#region src/application/telemetry/CompositeTelemetryExporter.ts
2885
+ var _ref$44;
2886
+ let CompositeTelemetryExporter = class CompositeTelemetryExporter$1 {
2887
+ constructor(exporters) {
2888
+ this.exporters = exporters;
2889
+ }
2890
+ async exportSpans(spans) {
2891
+ for (const exporter of this.exporters) await exporter.exportSpans(spans);
2892
+ }
2893
+ };
2894
+ CompositeTelemetryExporter = __decorate([injectable(), __decorateMetadata("design:paramtypes", [typeof (_ref$44 = typeof ReadonlyArray !== "undefined" && ReadonlyArray) === "function" ? _ref$44 : Object])], CompositeTelemetryExporter);
2895
+
2896
+ //#endregion
2897
+ //#region src/application/telemetry/LazyExecutionTelemetryFactory.ts
2898
+ var LazyExecutionTelemetryFactory = class {
2899
+ constructor(resolveFactory) {
2900
+ this.resolveFactory = resolveFactory;
2901
+ }
2902
+ create(args) {
2903
+ return this.resolveFactory().create(args);
2904
+ }
2905
+ };
2906
+
2907
+ //#endregion
2908
+ //#region src/application/telemetry/NoOpTelemetryExporter.ts
2909
+ let NoOpTelemetryExporter = class NoOpTelemetryExporter$1 {
2910
+ async exportSpans(_$1) {}
2911
+ };
2912
+ NoOpTelemetryExporter = __decorate([injectable()], NoOpTelemetryExporter);
2913
+
2914
+ //#endregion
2915
+ //#region src/application/telemetry/StoredTelemetrySpanScope.ts
2916
+ var StoredTelemetrySpanScope = class {
2917
+ traceId;
2918
+ spanId;
2919
+ deps;
2920
+ nodeId;
2921
+ activationId;
2922
+ parentSpanId;
2923
+ spanName;
2924
+ spanKind;
2925
+ initialAttributes;
2926
+ initialStartTime;
2927
+ connectionInvocationId;
2928
+ modelName;
2929
+ constructor(args) {
2930
+ this.deps = args;
2931
+ this.traceId = args.traceId;
2932
+ this.spanId = args.spanId;
2933
+ this.parentSpanId = args.parentSpanId;
2934
+ this.nodeId = args.nodeId;
2935
+ this.activationId = args.activationId;
2936
+ this.spanName = args.spanName;
2937
+ this.spanKind = args.spanKind;
2938
+ this.initialAttributes = args.initialAttributes;
2939
+ this.initialStartTime = args.initialStartTime;
2940
+ this.connectionInvocationId = args.connectionInvocationId;
2941
+ this.modelName = args.modelName;
2942
+ }
2943
+ async addSpanEvent(args) {
2944
+ await this.upsert({ events: [args] });
2945
+ }
2946
+ async recordMetric(args) {
2947
+ const enrichment = await this.resolveEnrichment();
2948
+ const observedAt = /* @__PURE__ */ new Date();
2949
+ await this.deps.telemetryMetricPointStore.save({
2950
+ traceId: this.traceId,
2951
+ spanId: this.spanId,
2952
+ runId: this.deps.runId,
2953
+ workflowId: this.deps.workflowId,
2954
+ nodeId: this.nodeId,
2955
+ activationId: this.activationId,
2956
+ name: args.name,
2957
+ value: args.value,
2958
+ unit: args.unit,
2959
+ attributes: args.attributes,
2960
+ observedAt: observedAt.toISOString(),
2961
+ workflowFolder: enrichment.workflowFolder,
2962
+ nodeType: enrichment.nodeType,
2963
+ nodeRole: enrichment.nodeRole,
2964
+ modelName: this.modelName,
2965
+ retentionExpiresAt: this.deps.telemetryRetentionTimestampFactory.createMetricExpiry(this.deps.policySnapshot, observedAt)
2966
+ });
2967
+ await this.touchTraceContextExpiry(this.deps.telemetryRetentionTimestampFactory.createTraceContextExpiry(this.deps.policySnapshot, observedAt));
2968
+ }
2969
+ async attachArtifact(args) {
2970
+ if (!this.deps.telemetryPrivacyPolicy.shouldCaptureArtifact(args)) return NoOpTelemetryArtifactReference.value;
2971
+ const observedAt = /* @__PURE__ */ new Date();
2972
+ const artifact = await this.deps.telemetryArtifactStore.save({
2973
+ traceId: this.traceId,
2974
+ spanId: this.spanId,
2975
+ runId: this.deps.runId,
2976
+ workflowId: this.deps.workflowId,
2977
+ nodeId: this.nodeId,
2978
+ activationId: this.activationId,
2979
+ kind: args.kind,
2980
+ contentType: args.contentType,
2981
+ previewText: this.deps.telemetryPrivacyPolicy.trimPreviewText(args.previewText),
2982
+ previewJson: args.previewJson,
2983
+ payloadText: args.payloadText,
2984
+ payloadJson: args.payloadJson,
2985
+ bytes: args.bytes,
2986
+ truncated: args.truncated,
2987
+ expiresAt: args.expiresAt,
2988
+ retentionExpiresAt: this.deps.telemetryRetentionTimestampFactory.createArtifactExpiry(this.deps.policySnapshot, observedAt)
2989
+ });
2990
+ await this.touchTraceContextExpiry(this.deps.telemetryRetentionTimestampFactory.createTraceContextExpiry(this.deps.policySnapshot, observedAt));
2991
+ return {
2992
+ artifactId: artifact.artifactId,
2993
+ traceId: artifact.traceId,
2994
+ spanId: artifact.spanId
2995
+ };
2996
+ }
2997
+ async end(args = {}) {
2998
+ await this.upsert({
2999
+ status: args.status === "error" ? "failed" : "completed",
3000
+ statusMessage: args.statusMessage,
3001
+ endTime: (args.endedAt ?? /* @__PURE__ */ new Date()).toISOString(),
3002
+ attributes: args.attributes
3003
+ });
3004
+ }
3005
+ async markStarted() {
3006
+ await this.upsert({
3007
+ status: "running",
3008
+ startTime: (this.initialStartTime ?? /* @__PURE__ */ new Date()).toISOString(),
3009
+ attributes: this.initialAttributes,
3010
+ modelName: this.modelName,
3011
+ connectionInvocationId: this.connectionInvocationId
3012
+ });
3013
+ }
3014
+ async upsert(update) {
3015
+ const enrichment = await this.resolveEnrichment();
3016
+ const observedAt = this.resolveObservedAt(update);
3017
+ const retentionExpiresAt = update.retentionExpiresAt ?? this.deps.telemetryRetentionTimestampFactory.createSpanExpiry(this.deps.policySnapshot, observedAt);
3018
+ await this.deps.telemetrySpanStore.upsert({
3019
+ traceId: this.traceId,
3020
+ spanId: this.spanId,
3021
+ parentSpanId: this.parentSpanId,
3022
+ runId: this.deps.runId,
3023
+ workflowId: this.deps.workflowId,
3024
+ nodeId: this.nodeId,
3025
+ activationId: this.activationId,
3026
+ name: this.spanName,
3027
+ kind: this.spanKind,
3028
+ workflowFolder: enrichment.workflowFolder,
3029
+ nodeType: enrichment.nodeType,
3030
+ nodeRole: enrichment.nodeRole,
3031
+ retentionExpiresAt,
3032
+ ...update
3033
+ });
3034
+ await this.touchTraceContextExpiry(this.deps.telemetryRetentionTimestampFactory.createTraceContextExpiry(this.deps.policySnapshot, observedAt));
3035
+ }
3036
+ async resolveEnrichment() {
3037
+ if (this.nodeId) return await this.deps.telemetryEnricherChain.enrichNode({
3038
+ workflowId: this.deps.workflowId,
3039
+ nodeId: this.nodeId
3040
+ });
3041
+ return await this.deps.telemetryEnricherChain.enrichRun(this.deps.workflowId);
3042
+ }
3043
+ resolveObservedAt(update) {
3044
+ const iso = update.endTime ?? update.startTime;
3045
+ return iso ? new Date(iso) : /* @__PURE__ */ new Date();
3046
+ }
3047
+ async touchTraceContextExpiry(expiresAt) {
3048
+ await this.deps.runTraceContextRepository.upsertExpiry({
3049
+ runId: this.deps.runId,
3050
+ expiresAt
3051
+ });
3052
+ }
3053
+ toStringAttribute(value) {
3054
+ return typeof value === "string" ? value : void 0;
3055
+ }
3056
+ };
3057
+
3058
+ //#endregion
3059
+ //#region src/application/telemetry/StoredNodeExecutionTelemetry.ts
3060
+ var StoredNodeExecutionTelemetry = class extends StoredTelemetrySpanScope {
3061
+ constructor(args) {
3062
+ super(args);
3063
+ }
3064
+ forNode(_$1) {
3065
+ return this;
3066
+ }
3067
+ startChildSpan(args) {
3068
+ const span = new StoredTelemetrySpanScope({
3069
+ ...this.deps,
3070
+ spanId: this.deps.otelIdentityFactory.createEphemeralSpanId(),
3071
+ parentSpanId: this.spanId,
3072
+ nodeId: this.nodeId,
3073
+ activationId: this.activationId,
3074
+ spanName: args.name,
3075
+ spanKind: args.kind ?? "internal",
3076
+ initialAttributes: args.attributes,
3077
+ initialStartTime: args.startedAt,
3078
+ connectionInvocationId: this.toStringAttribute(args.attributes?.["codemation.connection.invocation_id"] ?? args.attributes?.["connection.invocation_id"]),
3079
+ modelName: this.toStringAttribute(args.attributes?.[GenAiTelemetryAttributeNames.requestModel])
3080
+ });
3081
+ span.markStarted();
3082
+ return span;
3083
+ }
3084
+ };
3085
+
3086
+ //#endregion
3087
+ //#region src/application/telemetry/StoredExecutionTelemetry.ts
3088
+ var StoredExecutionTelemetry = class {
3089
+ traceId;
3090
+ spanId;
3091
+ constructor(deps) {
3092
+ this.deps = deps;
3093
+ this.traceId = deps.traceId;
3094
+ this.spanId = deps.rootSpanId;
3095
+ }
3096
+ async addSpanEvent(args) {
3097
+ await this.createRunScope().addSpanEvent(args);
3098
+ }
3099
+ async recordMetric(args) {
3100
+ await this.createRunScope().recordMetric(args);
3101
+ }
3102
+ async attachArtifact(args) {
3103
+ return await this.createRunScope().attachArtifact(args);
3104
+ }
3105
+ forNode(args) {
3106
+ return new StoredNodeExecutionTelemetry({
3107
+ ...this.deps,
3108
+ spanId: this.deps.otelIdentityFactory.createNodeSpanId(args.activationId),
3109
+ parentSpanId: this.deps.rootSpanId,
3110
+ nodeId: args.nodeId,
3111
+ activationId: args.activationId,
3112
+ spanName: "workflow.node",
3113
+ spanKind: "internal"
3114
+ });
3115
+ }
3116
+ createRunScope() {
3117
+ return new StoredTelemetrySpanScope({
3118
+ ...this.deps,
3119
+ spanId: this.deps.rootSpanId,
3120
+ spanName: "workflow.run",
3121
+ spanKind: "internal"
3122
+ });
3123
+ }
3124
+ };
3125
+
3126
+ //#endregion
3127
+ //#region src/application/telemetry/TelemetryEnricherChain.ts
3128
+ let TelemetryEnricherChain = class TelemetryEnricherChain$1 {
3129
+ definitionsByWorkflowId = /* @__PURE__ */ new Map();
3130
+ constructor(workflowDefinitionRepository) {
3131
+ this.workflowDefinitionRepository = workflowDefinitionRepository;
3132
+ }
3133
+ async enrichNode(args) {
3134
+ const workflow = await this.loadDefinition(args.workflowId);
3135
+ if (!workflow) return {};
3136
+ const node = workflow.nodes.find((entry) => entry.id === args.nodeId);
3137
+ if (!node) return { workflowFolder: this.toWorkflowFolder(workflow) };
3138
+ return {
3139
+ workflowFolder: this.toWorkflowFolder(workflow),
3140
+ nodeType: this.toNodeType(node),
3141
+ nodeRole: this.toNodeRole(workflow, args.nodeId)
3142
+ };
3143
+ }
3144
+ async enrichRun(workflowId) {
3145
+ const workflow = await this.loadDefinition(workflowId);
3146
+ return { workflowFolder: workflow ? this.toWorkflowFolder(workflow) : void 0 };
3147
+ }
3148
+ async loadDefinition(workflowId) {
3149
+ const key = decodeURIComponent(workflowId);
3150
+ if (this.definitionsByWorkflowId.has(key)) return this.definitionsByWorkflowId.get(key) ?? void 0;
3151
+ const loaded = await this.workflowDefinitionRepository.getDefinition(key) ?? null;
3152
+ this.definitionsByWorkflowId.set(key, loaded);
3153
+ return loaded ?? void 0;
3154
+ }
3155
+ toWorkflowFolder(workflow) {
3156
+ const segments = workflow.discoveryPathSegments ?? [];
3157
+ if (segments.length === 0) return;
3158
+ return segments.slice(0, -1).join("/");
3159
+ }
3160
+ toNodeType(node) {
3161
+ const token = node.type;
3162
+ if (typeof token === "function" && token.name) return token.name;
3163
+ if (typeof token === "symbol") return token.description ?? token.toString();
3164
+ }
3165
+ toNodeRole(workflow, nodeId) {
3166
+ const connection = workflow.connections?.find((entry) => entry.childNodeIds.includes(nodeId));
3167
+ if (!connection) return "workflowNode";
3168
+ if (connection.connectionName === "llm") return "languageModel";
3169
+ return "tool";
3170
+ }
3171
+ };
3172
+ TelemetryEnricherChain = __decorate([
3173
+ injectable(),
3174
+ __decorateParam(0, inject(ApplicationTokens.WorkflowDefinitionRepository)),
3175
+ __decorateMetadata("design:paramtypes", [Object])
3176
+ ], TelemetryEnricherChain);
3177
+
3178
+ //#endregion
3179
+ //#region src/application/telemetry/TelemetryPrivacyPolicy.ts
3180
+ let TelemetryPrivacyPolicy = class TelemetryPrivacyPolicy$1 {
3181
+ captureArtifacts = false;
3182
+ maxPreviewLength = 1e3;
3183
+ shouldCaptureArtifact(_$1) {
3184
+ return this.captureArtifacts;
3185
+ }
3186
+ trimPreviewText(value) {
3187
+ if (!value) return;
3188
+ return value.length > this.maxPreviewLength ? value.slice(0, this.maxPreviewLength) : value;
3189
+ }
3190
+ };
3191
+ TelemetryPrivacyPolicy = __decorate([injectable()], TelemetryPrivacyPolicy);
3192
+
3193
+ //#endregion
3194
+ //#region src/application/telemetry/TelemetryRetentionTimestampFactory.ts
3195
+ let TelemetryRetentionTimestampFactory = class TelemetryRetentionTimestampFactory$1 {
3196
+ createSpanExpiry(policySnapshot, observedAt) {
3197
+ return this.createExpiry(policySnapshot?.telemetrySpanRetentionSeconds, observedAt);
3198
+ }
3199
+ createArtifactExpiry(policySnapshot, observedAt) {
3200
+ return this.createExpiry(policySnapshot?.telemetryArtifactRetentionSeconds, observedAt);
3201
+ }
3202
+ createMetricExpiry(policySnapshot, observedAt) {
3203
+ return this.createExpiry(policySnapshot?.telemetryMetricRetentionSeconds, observedAt);
3204
+ }
3205
+ createTraceContextExpiry(policySnapshot, observedAt) {
3206
+ const candidates = [
3207
+ policySnapshot?.telemetrySpanRetentionSeconds,
3208
+ policySnapshot?.telemetryArtifactRetentionSeconds,
3209
+ policySnapshot?.telemetryMetricRetentionSeconds
3210
+ ].filter((value) => typeof value === "number" && value > 0);
3211
+ if (candidates.length === 0) return;
3212
+ const maxSeconds = Math.max(...candidates);
3213
+ return this.createExpiry(maxSeconds, observedAt);
3214
+ }
3215
+ createExpiry(retentionSeconds, observedAt) {
3216
+ if (!retentionSeconds || retentionSeconds <= 0) return;
3217
+ return new Date(observedAt.getTime() + retentionSeconds * 1e3).toISOString();
3218
+ }
3219
+ };
3220
+ TelemetryRetentionTimestampFactory = __decorate([injectable()], TelemetryRetentionTimestampFactory);
3221
+
3222
+ //#endregion
3223
+ //#region src/application/telemetry/OtelExecutionTelemetryFactory.ts
3224
+ var _ref$43, _ref2$11, _ref3$6, _ref4$3;
3225
+ let OtelExecutionTelemetryFactory = class OtelExecutionTelemetryFactory$1 {
3226
+ constructor(runTraceContextRepository, telemetrySpanStore, telemetryArtifactStore, telemetryMetricPointStore, telemetryEnricherChain, telemetryPrivacyPolicy, telemetryRetentionTimestampFactory, otelIdentityFactory) {
3227
+ this.runTraceContextRepository = runTraceContextRepository;
3228
+ this.telemetrySpanStore = telemetrySpanStore;
3229
+ this.telemetryArtifactStore = telemetryArtifactStore;
3230
+ this.telemetryMetricPointStore = telemetryMetricPointStore;
3231
+ this.telemetryEnricherChain = telemetryEnricherChain;
3232
+ this.telemetryPrivacyPolicy = telemetryPrivacyPolicy;
3233
+ this.telemetryRetentionTimestampFactory = telemetryRetentionTimestampFactory;
3234
+ this.otelIdentityFactory = otelIdentityFactory;
3235
+ }
3236
+ create(args) {
3237
+ return new StoredExecutionTelemetry({
3238
+ traceId: this.otelIdentityFactory.createTraceId(args.runId),
3239
+ rootSpanId: this.otelIdentityFactory.createRootSpanId(args.runId),
3240
+ runId: args.runId,
3241
+ workflowId: args.workflowId,
3242
+ policySnapshot: args.policySnapshot,
3243
+ runTraceContextRepository: this.runTraceContextRepository,
3244
+ telemetrySpanStore: this.telemetrySpanStore,
3245
+ telemetryArtifactStore: this.telemetryArtifactStore,
3246
+ telemetryMetricPointStore: this.telemetryMetricPointStore,
3247
+ telemetryEnricherChain: this.telemetryEnricherChain,
3248
+ telemetryPrivacyPolicy: this.telemetryPrivacyPolicy,
3249
+ telemetryRetentionTimestampFactory: this.telemetryRetentionTimestampFactory,
3250
+ otelIdentityFactory: this.otelIdentityFactory
3251
+ });
3252
+ }
3253
+ };
3254
+ OtelExecutionTelemetryFactory = __decorate([
3255
+ injectable(),
3256
+ __decorateParam(0, inject(ApplicationTokens.RunTraceContextRepository)),
3257
+ __decorateParam(1, inject(ApplicationTokens.TelemetrySpanStore)),
3258
+ __decorateParam(2, inject(ApplicationTokens.TelemetryArtifactStore)),
3259
+ __decorateParam(3, inject(ApplicationTokens.TelemetryMetricPointStore)),
3260
+ __decorateParam(4, inject(TelemetryEnricherChain)),
3261
+ __decorateParam(5, inject(TelemetryPrivacyPolicy)),
3262
+ __decorateParam(6, inject(TelemetryRetentionTimestampFactory)),
3263
+ __decorateParam(7, inject(OtelIdentityFactory)),
3264
+ __decorateMetadata("design:paramtypes", [
3265
+ Object,
3266
+ Object,
3267
+ Object,
3268
+ Object,
3269
+ typeof (_ref$43 = typeof TelemetryEnricherChain !== "undefined" && TelemetryEnricherChain) === "function" ? _ref$43 : Object,
3270
+ typeof (_ref2$11 = typeof TelemetryPrivacyPolicy !== "undefined" && TelemetryPrivacyPolicy) === "function" ? _ref2$11 : Object,
3271
+ typeof (_ref3$6 = typeof TelemetryRetentionTimestampFactory !== "undefined" && TelemetryRetentionTimestampFactory) === "function" ? _ref3$6 : Object,
3272
+ typeof (_ref4$3 = typeof OtelIdentityFactory !== "undefined" && OtelIdentityFactory) === "function" ? _ref4$3 : Object
3273
+ ])
3274
+ ], OtelExecutionTelemetryFactory);
3275
+
3276
+ //#endregion
3277
+ //#region src/application/telemetry/RunEventBusTelemetryReporter.ts
3278
+ var _ref$42, _ref2$10, _ref3$5;
3279
+ let RunEventBusTelemetryReporter = class RunEventBusTelemetryReporter$1 {
3280
+ subscription = null;
3281
+ constructor(runEventBus, runTraceContextRepository, workflowRunRepository, telemetrySpanStore, telemetryEnricherChain, telemetryRetentionTimestampFactory, otelIdentityFactory) {
3282
+ this.runEventBus = runEventBus;
3283
+ this.runTraceContextRepository = runTraceContextRepository;
3284
+ this.workflowRunRepository = workflowRunRepository;
3285
+ this.telemetrySpanStore = telemetrySpanStore;
3286
+ this.telemetryEnricherChain = telemetryEnricherChain;
3287
+ this.telemetryRetentionTimestampFactory = telemetryRetentionTimestampFactory;
3288
+ this.otelIdentityFactory = otelIdentityFactory;
3289
+ }
3290
+ async start() {
3291
+ if (this.subscription) return;
3292
+ this.subscription = await this.runEventBus.subscribe(async (event) => {
3293
+ try {
3294
+ await this.handleEvent(event);
3295
+ } catch {}
3296
+ });
3297
+ }
3298
+ async stop() {
3299
+ if (!this.subscription) return;
3300
+ await this.subscription.close();
3301
+ this.subscription = null;
3302
+ }
3303
+ async handleEvent(event) {
3304
+ switch (event.kind) {
3305
+ case "runCreated":
3306
+ await this.handleRunCreated(event);
3307
+ return;
3308
+ case "runSaved":
3309
+ await this.handleRunSaved(event);
3310
+ return;
3311
+ case "nodeQueued":
3312
+ case "nodeStarted":
3313
+ case "nodeCompleted":
3314
+ case "nodeFailed":
3315
+ await this.handleNodeSnapshot(event);
3316
+ return;
3317
+ }
3318
+ }
3319
+ async handleRunCreated(event) {
3320
+ const trace = await this.runTraceContextRepository.getOrCreate({
3321
+ runId: event.runId,
3322
+ workflowId: event.workflowId,
3323
+ serviceName: "codemation.workflow"
3324
+ });
3325
+ const policySnapshot = await this.loadPolicySnapshot(event.runId);
3326
+ await this.runTraceContextRepository.upsertExpiry({
3327
+ runId: event.runId,
3328
+ expiresAt: this.telemetryRetentionTimestampFactory.createTraceContextExpiry(policySnapshot, new Date(event.at))
3329
+ });
3330
+ const enrichment = await this.telemetryEnricherChain.enrichRun(event.workflowId);
3331
+ await this.telemetrySpanStore.upsert({
3332
+ traceId: trace.traceId,
3333
+ spanId: trace.rootSpanId,
3334
+ runId: event.runId,
3335
+ workflowId: event.workflowId,
3336
+ name: "workflow.run",
3337
+ kind: "internal",
3338
+ status: "running",
3339
+ startTime: event.at,
3340
+ workflowFolder: enrichment.workflowFolder,
3341
+ retentionExpiresAt: this.telemetryRetentionTimestampFactory.createSpanExpiry(policySnapshot, new Date(event.at))
3342
+ });
3343
+ }
3344
+ async handleRunSaved(event) {
3345
+ const trace = await this.runTraceContextRepository.getOrCreate({
3346
+ runId: event.runId,
3347
+ workflowId: event.workflowId,
3348
+ serviceName: "codemation.workflow"
3349
+ });
3350
+ const policySnapshot = await this.loadPolicySnapshot(event.runId);
3351
+ const observedAt = new Date(event.state.finishedAt ?? event.at);
3352
+ await this.runTraceContextRepository.upsertExpiry({
3353
+ runId: event.runId,
3354
+ expiresAt: this.telemetryRetentionTimestampFactory.createTraceContextExpiry(policySnapshot, observedAt)
3355
+ });
3356
+ const enrichment = await this.telemetryEnricherChain.enrichRun(event.workflowId);
3357
+ const isTerminal = event.state.status === "completed" || event.state.status === "failed";
3358
+ await this.telemetrySpanStore.upsert({
3359
+ traceId: trace.traceId,
3360
+ spanId: trace.rootSpanId,
3361
+ runId: event.runId,
3362
+ workflowId: event.workflowId,
3363
+ name: "workflow.run",
3364
+ kind: "internal",
3365
+ status: event.state.status === "failed" ? "failed" : isTerminal ? "completed" : "running",
3366
+ startTime: event.state.startedAt,
3367
+ endTime: isTerminal ? event.state.finishedAt ?? event.at : void 0,
3368
+ workflowFolder: enrichment.workflowFolder,
3369
+ retentionExpiresAt: this.telemetryRetentionTimestampFactory.createSpanExpiry(policySnapshot, observedAt)
3370
+ });
3371
+ }
3372
+ async handleNodeSnapshot(event) {
3373
+ const trace = await this.runTraceContextRepository.getOrCreate({
3374
+ runId: event.runId,
3375
+ workflowId: event.workflowId,
3376
+ serviceName: "codemation.workflow"
3377
+ });
3378
+ const policySnapshot = await this.loadPolicySnapshot(event.runId);
3379
+ await this.runTraceContextRepository.upsertExpiry({
3380
+ runId: event.runId,
3381
+ expiresAt: this.telemetryRetentionTimestampFactory.createTraceContextExpiry(policySnapshot, new Date(event.at))
3382
+ });
3383
+ const enrichment = await this.telemetryEnricherChain.enrichNode({
3384
+ workflowId: event.workflowId,
3385
+ nodeId: event.snapshot.nodeId
3386
+ });
3387
+ await this.telemetrySpanStore.upsert(this.createNodeSpanUpsert(event, trace.traceId, trace.rootSpanId, enrichment, policySnapshot));
3388
+ }
3389
+ createNodeSpanUpsert(event, traceId, rootSpanId, enrichment, policySnapshot) {
3390
+ const snapshot = event.snapshot;
3391
+ const status = event.kind === "nodeFailed" ? "failed" : snapshot.finishedAt ? "completed" : "running";
3392
+ const observedAt = new Date(snapshot.finishedAt ?? snapshot.startedAt ?? snapshot.queuedAt ?? event.at);
3393
+ return {
3394
+ traceId,
3395
+ spanId: this.otelIdentityFactory.createNodeSpanId(snapshot.activationId ?? snapshot.nodeId),
3396
+ parentSpanId: rootSpanId,
3397
+ runId: event.runId,
3398
+ workflowId: event.workflowId,
3399
+ nodeId: snapshot.nodeId,
3400
+ activationId: snapshot.activationId,
3401
+ name: "workflow.node",
3402
+ kind: "internal",
3403
+ status,
3404
+ statusMessage: snapshot.error?.message,
3405
+ startTime: snapshot.startedAt ?? snapshot.queuedAt ?? event.at,
3406
+ endTime: snapshot.finishedAt,
3407
+ workflowFolder: enrichment.workflowFolder,
3408
+ nodeType: enrichment.nodeType,
3409
+ nodeRole: enrichment.nodeRole,
3410
+ retentionExpiresAt: this.telemetryRetentionTimestampFactory.createSpanExpiry(policySnapshot, observedAt),
3411
+ attributes: { usedPinnedOutput: snapshot.usedPinnedOutput ?? void 0 }
3412
+ };
3413
+ }
3414
+ async loadPolicySnapshot(runId) {
3415
+ return (await this.workflowRunRepository.load(runId))?.policySnapshot;
3416
+ }
3417
+ };
3418
+ RunEventBusTelemetryReporter = __decorate([
3419
+ injectable(),
3420
+ __decorateParam(0, inject(CoreTokens.RunEventBus)),
3421
+ __decorateParam(1, inject(ApplicationTokens.RunTraceContextRepository)),
3422
+ __decorateParam(2, inject(ApplicationTokens.WorkflowRunRepository)),
3423
+ __decorateParam(3, inject(ApplicationTokens.TelemetrySpanStore)),
3424
+ __decorateParam(4, inject(TelemetryEnricherChain)),
3425
+ __decorateParam(5, inject(TelemetryRetentionTimestampFactory)),
3426
+ __decorateParam(6, inject(OtelIdentityFactory)),
3427
+ __decorateMetadata("design:paramtypes", [
3428
+ Object,
3429
+ Object,
3430
+ Object,
3431
+ Object,
3432
+ typeof (_ref$42 = typeof TelemetryEnricherChain !== "undefined" && TelemetryEnricherChain) === "function" ? _ref$42 : Object,
3433
+ typeof (_ref2$10 = typeof TelemetryRetentionTimestampFactory !== "undefined" && TelemetryRetentionTimestampFactory) === "function" ? _ref2$10 : Object,
3434
+ typeof (_ref3$5 = typeof OtelIdentityFactory !== "undefined" && OtelIdentityFactory) === "function" ? _ref3$5 : Object
3435
+ ])
3436
+ ], RunEventBusTelemetryReporter);
3437
+
2067
3438
  //#endregion
2068
3439
  //#region src/domain/credentials/OAuth2ProviderRegistry.ts
2069
3440
  var _OAuth2ProviderRegistry;
@@ -2113,7 +3484,7 @@ OAuth2ProviderRegistry = _OAuth2ProviderRegistry = __decorate([injectable()], OA
2113
3484
 
2114
3485
  //#endregion
2115
3486
  //#region src/domain/credentials/OAuth2ConnectServiceFactory.ts
2116
- var _ref$33, _ref2$9, _ref3$4, _ref4$2, _ref5$1, _ref6, _ref7, _ref8, _OAuth2ConnectService;
3487
+ var _ref$41, _ref2$9, _ref3$4, _ref4$2, _ref5$2, _ref6$2, _ref7$1, _ref8, _OAuth2ConnectService;
2117
3488
  let OAuth2ConnectService = class OAuth2ConnectService$1 {
2118
3489
  static {
2119
3490
  _OAuth2ConnectService = this;
@@ -2364,13 +3735,13 @@ OAuth2ConnectService = _OAuth2ConnectService = __decorate([
2364
3735
  __decorateParam(9, inject(ApplicationTokens.AppConfig)),
2365
3736
  __decorateMetadata("design:paramtypes", [
2366
3737
  Object,
2367
- typeof (_ref$33 = typeof CredentialInstanceService !== "undefined" && CredentialInstanceService) === "function" ? _ref$33 : Object,
3738
+ typeof (_ref$41 = typeof CredentialInstanceService !== "undefined" && CredentialInstanceService) === "function" ? _ref$41 : Object,
2368
3739
  typeof (_ref2$9 = typeof CredentialTypeRegistryImpl !== "undefined" && CredentialTypeRegistryImpl) === "function" ? _ref2$9 : Object,
2369
3740
  typeof (_ref3$4 = typeof CredentialRuntimeMaterialService !== "undefined" && CredentialRuntimeMaterialService) === "function" ? _ref3$4 : Object,
2370
3741
  typeof (_ref4$2 = typeof CredentialFieldEnvOverlayService !== "undefined" && CredentialFieldEnvOverlayService) === "function" ? _ref4$2 : Object,
2371
- typeof (_ref5$1 = typeof CredentialMaterialResolver !== "undefined" && CredentialMaterialResolver) === "function" ? _ref5$1 : Object,
2372
- typeof (_ref6 = typeof CredentialSecretCipher !== "undefined" && CredentialSecretCipher) === "function" ? _ref6 : Object,
2373
- typeof (_ref7 = typeof CredentialOAuth2ScopeResolver !== "undefined" && CredentialOAuth2ScopeResolver) === "function" ? _ref7 : Object,
3742
+ typeof (_ref5$2 = typeof CredentialMaterialResolver !== "undefined" && CredentialMaterialResolver) === "function" ? _ref5$2 : Object,
3743
+ typeof (_ref6$2 = typeof CredentialSecretCipher !== "undefined" && CredentialSecretCipher) === "function" ? _ref6$2 : Object,
3744
+ typeof (_ref7$1 = typeof CredentialOAuth2ScopeResolver !== "undefined" && CredentialOAuth2ScopeResolver) === "function" ? _ref7$1 : Object,
2374
3745
  typeof (_ref8 = typeof OAuth2ProviderRegistry !== "undefined" && OAuth2ProviderRegistry) === "function" ? _ref8 : Object,
2375
3746
  Object
2376
3747
  ])
@@ -2415,7 +3786,7 @@ BootRuntimeSnapshotHolder = __decorate([injectable()], BootRuntimeSnapshotHolder
2415
3786
 
2416
3787
  //#endregion
2417
3788
  //#region src/application/dev/DevBootstrapSummaryAssembler.ts
2418
- var _ref$32, _ref2$8, _ref3$3;
3789
+ var _ref$40, _ref2$8, _ref3$3;
2419
3790
  let DevBootstrapSummaryAssembler = class DevBootstrapSummaryAssembler$1 {
2420
3791
  constructor(bootRuntimeSnapshot, logLevelPolicyFactory$1, workflowActivationPolicy, workflowRepository) {
2421
3792
  this.bootRuntimeSnapshot = bootRuntimeSnapshot;
@@ -2479,7 +3850,7 @@ DevBootstrapSummaryAssembler = __decorate([
2479
3850
  __decorateParam(2, inject(RuntimeWorkflowActivationPolicy)),
2480
3851
  __decorateParam(3, inject(CoreTokens.WorkflowRepository)),
2481
3852
  __decorateMetadata("design:paramtypes", [
2482
- typeof (_ref$32 = typeof BootRuntimeSnapshotHolder !== "undefined" && BootRuntimeSnapshotHolder) === "function" ? _ref$32 : Object,
3853
+ typeof (_ref$40 = typeof BootRuntimeSnapshotHolder !== "undefined" && BootRuntimeSnapshotHolder) === "function" ? _ref$40 : Object,
2483
3854
  typeof (_ref2$8 = typeof LogLevelPolicyFactory !== "undefined" && LogLevelPolicyFactory) === "function" ? _ref2$8 : Object,
2484
3855
  typeof (_ref3$3 = typeof RuntimeWorkflowActivationPolicy !== "undefined" && RuntimeWorkflowActivationPolicy) === "function" ? _ref3$3 : Object,
2485
3856
  Object
@@ -2521,7 +3892,7 @@ var WorkflowPolicyUiPresentationFactory = class {
2521
3892
 
2522
3893
  //#endregion
2523
3894
  //#region src/application/mapping/WorkflowDefinitionMapper.ts
2524
- var _ref$31;
3895
+ var _ref$39;
2525
3896
  let WorkflowDefinitionMapper = class WorkflowDefinitionMapper$1 {
2526
3897
  constructor(policyUi, workflowActivationPolicy) {
2527
3898
  this.policyUi = policyUi;
@@ -2731,7 +4102,7 @@ WorkflowDefinitionMapper = __decorate([
2731
4102
  injectable(),
2732
4103
  __decorateParam(0, inject(WorkflowPolicyUiPresentationFactory)),
2733
4104
  __decorateParam(1, inject(CoreTokens.WorkflowActivationPolicy)),
2734
- __decorateMetadata("design:paramtypes", [typeof (_ref$31 = typeof WorkflowPolicyUiPresentationFactory !== "undefined" && WorkflowPolicyUiPresentationFactory) === "function" ? _ref$31 : Object, Object])
4105
+ __decorateMetadata("design:paramtypes", [typeof (_ref$39 = typeof WorkflowPolicyUiPresentationFactory !== "undefined" && WorkflowPolicyUiPresentationFactory) === "function" ? _ref$39 : Object, Object])
2735
4106
  ], WorkflowDefinitionMapper);
2736
4107
 
2737
4108
  //#endregion
@@ -2744,6 +4115,7 @@ var ApiPaths = class {
2744
4115
  static oauth2BasePath = `${this.apiBasePath}/oauth2`;
2745
4116
  static webhooksBasePath = `${this.apiBasePath}/webhooks`;
2746
4117
  static usersBasePath = `${this.apiBasePath}/users`;
4118
+ static telemetryBasePath = `${this.apiBasePath}/telemetry`;
2747
4119
  static whitelabelBasePath = `${this.apiBasePath}/whitelabel`;
2748
4120
  static bootstrapBasePath = `${this.apiBasePath}/bootstrap`;
2749
4121
  static authBasePath = `${this.apiBasePath}/auth`;
@@ -2825,6 +4197,21 @@ var ApiPaths = class {
2825
4197
  static users() {
2826
4198
  return this.usersBasePath;
2827
4199
  }
4200
+ static telemetryDashboardSummary() {
4201
+ return `${this.telemetryBasePath}/dashboard/summary`;
4202
+ }
4203
+ static telemetryDashboardTimeseries() {
4204
+ return `${this.telemetryBasePath}/dashboard/timeseries`;
4205
+ }
4206
+ static telemetryDashboardDimensions() {
4207
+ return `${this.telemetryBasePath}/dashboard/dimensions`;
4208
+ }
4209
+ static telemetryDashboardRuns() {
4210
+ return `${this.telemetryBasePath}/dashboard/runs`;
4211
+ }
4212
+ static telemetryRunTrace(runId) {
4213
+ return `${this.telemetryBasePath}/runs/${runId}/trace`;
4214
+ }
2828
4215
  static authSession() {
2829
4216
  return `${this.authBasePath}/session`;
2830
4217
  }
@@ -3086,7 +4473,7 @@ CodemationFrontendAuthSnapshotFactory = __decorate([injectable()], CodemationFro
3086
4473
 
3087
4474
  //#endregion
3088
4475
  //#region src/presentation/frontend/FrontendAppConfigFactory.ts
3089
- var _ref$30;
4476
+ var _ref$38;
3090
4477
  let FrontendAppConfigFactory = class FrontendAppConfigFactory$1 {
3091
4478
  constructor(appConfig, authSnapshotFactory) {
3092
4479
  this.appConfig = appConfig;
@@ -3106,12 +4493,12 @@ FrontendAppConfigFactory = __decorate([
3106
4493
  injectable(),
3107
4494
  __decorateParam(0, inject(ApplicationTokens.AppConfig)),
3108
4495
  __decorateParam(1, inject(CodemationFrontendAuthSnapshotFactory)),
3109
- __decorateMetadata("design:paramtypes", [Object, typeof (_ref$30 = typeof CodemationFrontendAuthSnapshotFactory !== "undefined" && CodemationFrontendAuthSnapshotFactory) === "function" ? _ref$30 : Object])
4496
+ __decorateMetadata("design:paramtypes", [Object, typeof (_ref$38 = typeof CodemationFrontendAuthSnapshotFactory !== "undefined" && CodemationFrontendAuthSnapshotFactory) === "function" ? _ref$38 : Object])
3110
4497
  ], FrontendAppConfigFactory);
3111
4498
 
3112
4499
  //#endregion
3113
4500
  //#region src/presentation/frontend/InternalAuthBootstrapFactory.ts
3114
- var _ref$29;
4501
+ var _ref$37;
3115
4502
  let InternalAuthBootstrapFactory = class InternalAuthBootstrapFactory$1 {
3116
4503
  constructor(appConfig, authSnapshotFactory) {
3117
4504
  this.appConfig = appConfig;
@@ -3131,12 +4518,12 @@ InternalAuthBootstrapFactory = __decorate([
3131
4518
  injectable(),
3132
4519
  __decorateParam(0, inject(ApplicationTokens.AppConfig)),
3133
4520
  __decorateParam(1, inject(CodemationFrontendAuthSnapshotFactory)),
3134
- __decorateMetadata("design:paramtypes", [Object, typeof (_ref$29 = typeof CodemationFrontendAuthSnapshotFactory !== "undefined" && CodemationFrontendAuthSnapshotFactory) === "function" ? _ref$29 : Object])
4521
+ __decorateMetadata("design:paramtypes", [Object, typeof (_ref$37 = typeof CodemationFrontendAuthSnapshotFactory !== "undefined" && CodemationFrontendAuthSnapshotFactory) === "function" ? _ref$37 : Object])
3135
4522
  ], InternalAuthBootstrapFactory);
3136
4523
 
3137
4524
  //#endregion
3138
4525
  //#region src/presentation/frontend/PublicFrontendBootstrapFactory.ts
3139
- var _ref$28;
4526
+ var _ref$36;
3140
4527
  let PublicFrontendBootstrapFactory = class PublicFrontendBootstrapFactory$1 {
3141
4528
  constructor(frontendAppConfigFactory) {
3142
4529
  this.frontendAppConfigFactory = frontendAppConfigFactory;
@@ -3155,7 +4542,7 @@ let PublicFrontendBootstrapFactory = class PublicFrontendBootstrapFactory$1 {
3155
4542
  PublicFrontendBootstrapFactory = __decorate([
3156
4543
  injectable(),
3157
4544
  __decorateParam(0, inject(FrontendAppConfigFactory)),
3158
- __decorateMetadata("design:paramtypes", [typeof (_ref$28 = typeof FrontendAppConfigFactory !== "undefined" && FrontendAppConfigFactory) === "function" ? _ref$28 : Object])
4545
+ __decorateMetadata("design:paramtypes", [typeof (_ref$36 = typeof FrontendAppConfigFactory !== "undefined" && FrontendAppConfigFactory) === "function" ? _ref$36 : Object])
3159
4546
  ], PublicFrontendBootstrapFactory);
3160
4547
 
3161
4548
  //#endregion
@@ -3170,7 +4557,7 @@ SecureRequestDetector = __decorate([injectable()], SecureRequestDetector);
3170
4557
 
3171
4558
  //#endregion
3172
4559
  //#region src/infrastructure/auth/AuthSessionCookieFactory.ts
3173
- var _ref$27, _AuthSessionCookieFactory;
4560
+ var _ref$35, _AuthSessionCookieFactory;
3174
4561
  let AuthSessionCookieFactory = class AuthSessionCookieFactory$1 {
3175
4562
  static {
3176
4563
  _AuthSessionCookieFactory = this;
@@ -3272,7 +4659,7 @@ AuthSessionCookieFactory = _AuthSessionCookieFactory = __decorate([
3272
4659
  injectable(),
3273
4660
  __decorateParam(0, inject(ApplicationTokens.AppConfig)),
3274
4661
  __decorateParam(1, inject(SecureRequestDetector)),
3275
- __decorateMetadata("design:paramtypes", [Object, typeof (_ref$27 = typeof SecureRequestDetector !== "undefined" && SecureRequestDetector) === "function" ? _ref$27 : Object])
4662
+ __decorateMetadata("design:paramtypes", [Object, typeof (_ref$35 = typeof SecureRequestDetector !== "undefined" && SecureRequestDetector) === "function" ? _ref$35 : Object])
3276
4663
  ], AuthSessionCookieFactory);
3277
4664
 
3278
4665
  //#endregion
@@ -3481,7 +4868,7 @@ var ServerHttpErrorResponseFactory = class {
3481
4868
 
3482
4869
  //#endregion
3483
4870
  //#region src/presentation/http/routeHandlers/AuthHttpRouteHandlerFactory.ts
3484
- var _ref$26, _ref2$7, _ref3$2;
4871
+ var _ref$34, _ref2$7, _ref3$2;
3485
4872
  let AuthHttpRouteHandler = class AuthHttpRouteHandler$1 {
3486
4873
  constructor(sessionVerifier, appConfig, authSessionCookieFactory, betterAuthRuntime, inAppCallbackUrlPolicy) {
3487
4874
  this.sessionVerifier = sessionVerifier;
@@ -3655,7 +5042,7 @@ AuthHttpRouteHandler = __decorate([
3655
5042
  __decorateMetadata("design:paramtypes", [
3656
5043
  Object,
3657
5044
  Object,
3658
- typeof (_ref$26 = typeof AuthSessionCookieFactory !== "undefined" && AuthSessionCookieFactory) === "function" ? _ref$26 : Object,
5045
+ typeof (_ref$34 = typeof AuthSessionCookieFactory !== "undefined" && AuthSessionCookieFactory) === "function" ? _ref$34 : Object,
3659
5046
  typeof (_ref2$7 = typeof CodemationBetterAuthRuntime !== "undefined" && CodemationBetterAuthRuntime) === "function" ? _ref2$7 : Object,
3660
5047
  typeof (_ref3$2 = typeof InAppCallbackUrlPolicy !== "undefined" && InAppCallbackUrlPolicy) === "function" ? _ref3$2 : Object
3661
5048
  ])
@@ -3663,7 +5050,7 @@ AuthHttpRouteHandler = __decorate([
3663
5050
 
3664
5051
  //#endregion
3665
5052
  //#region src/presentation/http/routeHandlers/DevBootstrapSummaryHttpRouteHandler.ts
3666
- var _ref$25;
5053
+ var _ref$33;
3667
5054
  let DevBootstrapSummaryHttpRouteHandler = class DevBootstrapSummaryHttpRouteHandler$1 {
3668
5055
  constructor(assembler) {
3669
5056
  this.assembler = assembler;
@@ -3683,12 +5070,12 @@ let DevBootstrapSummaryHttpRouteHandler = class DevBootstrapSummaryHttpRouteHand
3683
5070
  DevBootstrapSummaryHttpRouteHandler = __decorate([
3684
5071
  injectable(),
3685
5072
  __decorateParam(0, inject(DevBootstrapSummaryAssembler)),
3686
- __decorateMetadata("design:paramtypes", [typeof (_ref$25 = typeof DevBootstrapSummaryAssembler !== "undefined" && DevBootstrapSummaryAssembler) === "function" ? _ref$25 : Object])
5073
+ __decorateMetadata("design:paramtypes", [typeof (_ref$33 = typeof DevBootstrapSummaryAssembler !== "undefined" && DevBootstrapSummaryAssembler) === "function" ? _ref$33 : Object])
3687
5074
  ], DevBootstrapSummaryHttpRouteHandler);
3688
5075
 
3689
5076
  //#endregion
3690
5077
  //#region src/presentation/http/routeHandlers/InternalAuthBootstrapHttpRouteHandler.ts
3691
- var _ref$24;
5078
+ var _ref$32;
3692
5079
  let InternalAuthBootstrapHttpRouteHandler = class InternalAuthBootstrapHttpRouteHandler$1 {
3693
5080
  constructor(bootstrapFactory) {
3694
5081
  this.bootstrapFactory = bootstrapFactory;
@@ -3703,12 +5090,12 @@ let InternalAuthBootstrapHttpRouteHandler = class InternalAuthBootstrapHttpRoute
3703
5090
  InternalAuthBootstrapHttpRouteHandler = __decorate([
3704
5091
  injectable(),
3705
5092
  __decorateParam(0, inject(InternalAuthBootstrapFactory)),
3706
- __decorateMetadata("design:paramtypes", [typeof (_ref$24 = typeof InternalAuthBootstrapFactory !== "undefined" && InternalAuthBootstrapFactory) === "function" ? _ref$24 : Object])
5093
+ __decorateMetadata("design:paramtypes", [typeof (_ref$32 = typeof InternalAuthBootstrapFactory !== "undefined" && InternalAuthBootstrapFactory) === "function" ? _ref$32 : Object])
3707
5094
  ], InternalAuthBootstrapHttpRouteHandler);
3708
5095
 
3709
5096
  //#endregion
3710
5097
  //#region src/presentation/http/routeHandlers/PublicFrontendBootstrapHttpRouteHandler.ts
3711
- var _ref$23;
5098
+ var _ref$31;
3712
5099
  let PublicFrontendBootstrapHttpRouteHandler = class PublicFrontendBootstrapHttpRouteHandler$1 {
3713
5100
  constructor(bootstrapFactory) {
3714
5101
  this.bootstrapFactory = bootstrapFactory;
@@ -3723,7 +5110,7 @@ let PublicFrontendBootstrapHttpRouteHandler = class PublicFrontendBootstrapHttpR
3723
5110
  PublicFrontendBootstrapHttpRouteHandler = __decorate([
3724
5111
  injectable(),
3725
5112
  __decorateParam(0, inject(PublicFrontendBootstrapFactory)),
3726
- __decorateMetadata("design:paramtypes", [typeof (_ref$23 = typeof PublicFrontendBootstrapFactory !== "undefined" && PublicFrontendBootstrapFactory) === "function" ? _ref$23 : Object])
5113
+ __decorateMetadata("design:paramtypes", [typeof (_ref$31 = typeof PublicFrontendBootstrapFactory !== "undefined" && PublicFrontendBootstrapFactory) === "function" ? _ref$31 : Object])
3727
5114
  ], PublicFrontendBootstrapHttpRouteHandler);
3728
5115
 
3729
5116
  //#endregion
@@ -3901,7 +5288,7 @@ var HonoHttpAnonymousRoutePolicy = class {
3901
5288
 
3902
5289
  //#endregion
3903
5290
  //#region src/presentation/http/hono/CodemationHonoApiAppFactory.ts
3904
- var _ref$22, _ref2$6;
5291
+ var _ref$30, _ref2$6;
3905
5292
  let CodemationHonoApiApp = class CodemationHonoApiApp$1 {
3906
5293
  app;
3907
5294
  constructor(sessionVerifier, registrars, binaryHttpRouteHandler) {
@@ -3942,14 +5329,14 @@ CodemationHonoApiApp = __decorate([
3942
5329
  __decorateParam(2, inject(BinaryHttpRouteHandler)),
3943
5330
  __decorateMetadata("design:paramtypes", [
3944
5331
  Object,
3945
- typeof (_ref$22 = typeof ReadonlyArray !== "undefined" && ReadonlyArray) === "function" ? _ref$22 : Object,
5332
+ typeof (_ref$30 = typeof ReadonlyArray !== "undefined" && ReadonlyArray) === "function" ? _ref$30 : Object,
3946
5333
  typeof (_ref2$6 = typeof BinaryHttpRouteHandler !== "undefined" && BinaryHttpRouteHandler) === "function" ? _ref2$6 : Object
3947
5334
  ])
3948
5335
  ], CodemationHonoApiApp);
3949
5336
 
3950
5337
  //#endregion
3951
5338
  //#region src/presentation/http/hono/registrars/AuthHonoApiRouteRegistrar.ts
3952
- var _ref$21, _ref2$5;
5339
+ var _ref$29, _ref2$5;
3953
5340
  let AuthHonoApiRouteRegistrar = class AuthHonoApiRouteRegistrar$1 {
3954
5341
  constructor(handler, betterAuthRuntime) {
3955
5342
  this.handler = handler;
@@ -3969,18 +5356,14 @@ let AuthHonoApiRouteRegistrar = class AuthHonoApiRouteRegistrar$1 {
3969
5356
  };
3970
5357
  AuthHonoApiRouteRegistrar = __decorate([
3971
5358
  injectable(),
3972
- registry([{
3973
- token: ApplicationTokens.HonoApiRouteRegistrar,
3974
- useClass: AuthHonoApiRouteRegistrar
3975
- }]),
3976
5359
  __decorateParam(0, inject(AuthHttpRouteHandler)),
3977
5360
  __decorateParam(1, inject(CodemationBetterAuthRuntime)),
3978
- __decorateMetadata("design:paramtypes", [typeof (_ref$21 = typeof AuthHttpRouteHandler !== "undefined" && AuthHttpRouteHandler) === "function" ? _ref$21 : Object, typeof (_ref2$5 = typeof CodemationBetterAuthRuntime !== "undefined" && CodemationBetterAuthRuntime) === "function" ? _ref2$5 : Object])
5361
+ __decorateMetadata("design:paramtypes", [typeof (_ref$29 = typeof AuthHttpRouteHandler !== "undefined" && AuthHttpRouteHandler) === "function" ? _ref$29 : Object, typeof (_ref2$5 = typeof CodemationBetterAuthRuntime !== "undefined" && CodemationBetterAuthRuntime) === "function" ? _ref2$5 : Object])
3979
5362
  ], AuthHonoApiRouteRegistrar);
3980
5363
 
3981
5364
  //#endregion
3982
5365
  //#region src/presentation/http/hono/registrars/BinaryHonoApiRouteRegistrar.ts
3983
- var _ref$20;
5366
+ var _ref$28;
3984
5367
  let BinaryHonoApiRouteRegistrar = class BinaryHonoApiRouteRegistrar$1 {
3985
5368
  constructor(handler) {
3986
5369
  this.handler = handler;
@@ -3994,17 +5377,13 @@ let BinaryHonoApiRouteRegistrar = class BinaryHonoApiRouteRegistrar$1 {
3994
5377
  };
3995
5378
  BinaryHonoApiRouteRegistrar = __decorate([
3996
5379
  injectable(),
3997
- registry([{
3998
- token: ApplicationTokens.HonoApiRouteRegistrar,
3999
- useClass: BinaryHonoApiRouteRegistrar
4000
- }]),
4001
5380
  __decorateParam(0, inject(BinaryHttpRouteHandler)),
4002
- __decorateMetadata("design:paramtypes", [typeof (_ref$20 = typeof BinaryHttpRouteHandler !== "undefined" && BinaryHttpRouteHandler) === "function" ? _ref$20 : Object])
5381
+ __decorateMetadata("design:paramtypes", [typeof (_ref$28 = typeof BinaryHttpRouteHandler !== "undefined" && BinaryHttpRouteHandler) === "function" ? _ref$28 : Object])
4003
5382
  ], BinaryHonoApiRouteRegistrar);
4004
5383
 
4005
5384
  //#endregion
4006
5385
  //#region src/presentation/http/hono/registrars/BootstrapHonoApiRouteRegistrar.ts
4007
- var _ref$19, _ref2$4;
5386
+ var _ref$27, _ref2$4;
4008
5387
  let BootstrapHonoApiRouteRegistrar = class BootstrapHonoApiRouteRegistrar$1 {
4009
5388
  constructor(publicFrontendBootstrapHttpRouteHandler, internalAuthBootstrapHttpRouteHandler) {
4010
5389
  this.publicFrontendBootstrapHttpRouteHandler = publicFrontendBootstrapHttpRouteHandler;
@@ -4020,13 +5399,9 @@ let BootstrapHonoApiRouteRegistrar = class BootstrapHonoApiRouteRegistrar$1 {
4020
5399
  };
4021
5400
  BootstrapHonoApiRouteRegistrar = __decorate([
4022
5401
  injectable(),
4023
- registry([{
4024
- token: ApplicationTokens.HonoApiRouteRegistrar,
4025
- useClass: BootstrapHonoApiRouteRegistrar
4026
- }]),
4027
5402
  __decorateParam(0, inject(PublicFrontendBootstrapHttpRouteHandler)),
4028
5403
  __decorateParam(1, inject(InternalAuthBootstrapHttpRouteHandler)),
4029
- __decorateMetadata("design:paramtypes", [typeof (_ref$19 = typeof PublicFrontendBootstrapHttpRouteHandler !== "undefined" && PublicFrontendBootstrapHttpRouteHandler) === "function" ? _ref$19 : Object, typeof (_ref2$4 = typeof InternalAuthBootstrapHttpRouteHandler !== "undefined" && InternalAuthBootstrapHttpRouteHandler) === "function" ? _ref2$4 : Object])
5404
+ __decorateMetadata("design:paramtypes", [typeof (_ref$27 = typeof PublicFrontendBootstrapHttpRouteHandler !== "undefined" && PublicFrontendBootstrapHttpRouteHandler) === "function" ? _ref$27 : Object, typeof (_ref2$4 = typeof InternalAuthBootstrapHttpRouteHandler !== "undefined" && InternalAuthBootstrapHttpRouteHandler) === "function" ? _ref2$4 : Object])
4030
5405
  ], BootstrapHonoApiRouteRegistrar);
4031
5406
 
4032
5407
  //#endregion
@@ -4134,7 +5509,7 @@ CredentialHttpRouteHandler = __decorate([
4134
5509
 
4135
5510
  //#endregion
4136
5511
  //#region src/presentation/http/hono/registrars/CredentialHonoApiRouteRegistrar.ts
4137
- var _ref$18;
5512
+ var _ref$26;
4138
5513
  let CredentialHonoApiRouteRegistrar = class CredentialHonoApiRouteRegistrar$1 {
4139
5514
  constructor(handler) {
4140
5515
  this.handler = handler;
@@ -4154,17 +5529,13 @@ let CredentialHonoApiRouteRegistrar = class CredentialHonoApiRouteRegistrar$1 {
4154
5529
  };
4155
5530
  CredentialHonoApiRouteRegistrar = __decorate([
4156
5531
  injectable(),
4157
- registry([{
4158
- token: ApplicationTokens.HonoApiRouteRegistrar,
4159
- useClass: CredentialHonoApiRouteRegistrar
4160
- }]),
4161
5532
  __decorateParam(0, inject(CredentialHttpRouteHandler)),
4162
- __decorateMetadata("design:paramtypes", [typeof (_ref$18 = typeof CredentialHttpRouteHandler !== "undefined" && CredentialHttpRouteHandler) === "function" ? _ref$18 : Object])
5533
+ __decorateMetadata("design:paramtypes", [typeof (_ref$26 = typeof CredentialHttpRouteHandler !== "undefined" && CredentialHttpRouteHandler) === "function" ? _ref$26 : Object])
4163
5534
  ], CredentialHonoApiRouteRegistrar);
4164
5535
 
4165
5536
  //#endregion
4166
5537
  //#region src/presentation/http/hono/registrars/DevHonoApiRouteRegistrar.ts
4167
- var _ref$17;
5538
+ var _ref$25;
4168
5539
  let DevHonoApiRouteRegistrar = class DevHonoApiRouteRegistrar$1 {
4169
5540
  constructor(handler) {
4170
5541
  this.handler = handler;
@@ -4175,17 +5546,13 @@ let DevHonoApiRouteRegistrar = class DevHonoApiRouteRegistrar$1 {
4175
5546
  };
4176
5547
  DevHonoApiRouteRegistrar = __decorate([
4177
5548
  injectable(),
4178
- registry([{
4179
- token: ApplicationTokens.HonoApiRouteRegistrar,
4180
- useClass: DevHonoApiRouteRegistrar
4181
- }]),
4182
5549
  __decorateParam(0, inject(DevBootstrapSummaryHttpRouteHandler)),
4183
- __decorateMetadata("design:paramtypes", [typeof (_ref$17 = typeof DevBootstrapSummaryHttpRouteHandler !== "undefined" && DevBootstrapSummaryHttpRouteHandler) === "function" ? _ref$17 : Object])
5550
+ __decorateMetadata("design:paramtypes", [typeof (_ref$25 = typeof DevBootstrapSummaryHttpRouteHandler !== "undefined" && DevBootstrapSummaryHttpRouteHandler) === "function" ? _ref$25 : Object])
4184
5551
  ], DevHonoApiRouteRegistrar);
4185
5552
 
4186
5553
  //#endregion
4187
5554
  //#region src/presentation/http/routeHandlers/OAuth2HttpRouteHandlerFactory.ts
4188
- var _ref$16, _ref2$3, _OAuth2HttpRouteHandler;
5555
+ var _ref$24, _ref2$3, _OAuth2HttpRouteHandler;
4189
5556
  let OAuth2HttpRouteHandler = _OAuth2HttpRouteHandler = class OAuth2HttpRouteHandler$1 {
4190
5557
  constructor(oauth2ConnectService, credentialInstanceService) {
4191
5558
  this.oauth2ConnectService = oauth2ConnectService;
@@ -4285,12 +5652,12 @@ OAuth2HttpRouteHandler = _OAuth2HttpRouteHandler = __decorate([
4285
5652
  injectable(),
4286
5653
  __decorateParam(0, inject(OAuth2ConnectService)),
4287
5654
  __decorateParam(1, inject(CredentialInstanceService)),
4288
- __decorateMetadata("design:paramtypes", [typeof (_ref$16 = typeof OAuth2ConnectService !== "undefined" && OAuth2ConnectService) === "function" ? _ref$16 : Object, typeof (_ref2$3 = typeof CredentialInstanceService !== "undefined" && CredentialInstanceService) === "function" ? _ref2$3 : Object])
5655
+ __decorateMetadata("design:paramtypes", [typeof (_ref$24 = typeof OAuth2ConnectService !== "undefined" && OAuth2ConnectService) === "function" ? _ref$24 : Object, typeof (_ref2$3 = typeof CredentialInstanceService !== "undefined" && CredentialInstanceService) === "function" ? _ref2$3 : Object])
4289
5656
  ], OAuth2HttpRouteHandler);
4290
5657
 
4291
5658
  //#endregion
4292
5659
  //#region src/presentation/http/hono/registrars/OAuth2HonoApiRouteRegistrar.ts
4293
- var _ref$15;
5660
+ var _ref$23;
4294
5661
  let OAuth2HonoApiRouteRegistrar = class OAuth2HonoApiRouteRegistrar$1 {
4295
5662
  constructor(handler) {
4296
5663
  this.handler = handler;
@@ -4304,12 +5671,8 @@ let OAuth2HonoApiRouteRegistrar = class OAuth2HonoApiRouteRegistrar$1 {
4304
5671
  };
4305
5672
  OAuth2HonoApiRouteRegistrar = __decorate([
4306
5673
  injectable(),
4307
- registry([{
4308
- token: ApplicationTokens.HonoApiRouteRegistrar,
4309
- useClass: OAuth2HonoApiRouteRegistrar
4310
- }]),
4311
5674
  __decorateParam(0, inject(OAuth2HttpRouteHandler)),
4312
- __decorateMetadata("design:paramtypes", [typeof (_ref$15 = typeof OAuth2HttpRouteHandler !== "undefined" && OAuth2HttpRouteHandler) === "function" ? _ref$15 : Object])
5675
+ __decorateMetadata("design:paramtypes", [typeof (_ref$23 = typeof OAuth2HttpRouteHandler !== "undefined" && OAuth2HttpRouteHandler) === "function" ? _ref$23 : Object])
4313
5676
  ], OAuth2HonoApiRouteRegistrar);
4314
5677
 
4315
5678
  //#endregion
@@ -4379,7 +5742,7 @@ RunHttpRouteHandler = __decorate([
4379
5742
 
4380
5743
  //#endregion
4381
5744
  //#region src/presentation/http/hono/registrars/RunHonoApiRouteRegistrar.ts
4382
- var _ref$14;
5745
+ var _ref$22;
4383
5746
  let RunHonoApiRouteRegistrar = class RunHonoApiRouteRegistrar$1 {
4384
5747
  constructor(handler) {
4385
5748
  this.handler = handler;
@@ -4399,15 +5762,150 @@ let RunHonoApiRouteRegistrar = class RunHonoApiRouteRegistrar$1 {
4399
5762
  }));
4400
5763
  }
4401
5764
  };
4402
- RunHonoApiRouteRegistrar = __decorate([
5765
+ RunHonoApiRouteRegistrar = __decorate([
5766
+ injectable(),
5767
+ __decorateParam(0, inject(RunHttpRouteHandler)),
5768
+ __decorateMetadata("design:paramtypes", [typeof (_ref$22 = typeof RunHttpRouteHandler !== "undefined" && RunHttpRouteHandler) === "function" ? _ref$22 : Object])
5769
+ ], RunHonoApiRouteRegistrar);
5770
+
5771
+ //#endregion
5772
+ //#region src/presentation/http/routeHandlers/TelemetryDashboardRequestError.ts
5773
+ var TelemetryDashboardRequestError = class extends Error {};
5774
+
5775
+ //#endregion
5776
+ //#region src/presentation/http/routeHandlers/TelemetryHttpRouteHandler.ts
5777
+ let TelemetryHttpRouteHandler = class TelemetryHttpRouteHandler$1 {
5778
+ constructor(queryBus) {
5779
+ this.queryBus = queryBus;
5780
+ }
5781
+ async getDashboardSummary(request) {
5782
+ try {
5783
+ const filters = this.parseFilters(request);
5784
+ return Response.json(await this.queryBus.execute(new GetTelemetryDashboardSummaryQuery(filters)));
5785
+ } catch (error) {
5786
+ if (error instanceof TelemetryDashboardRequestError) return Response.json({ error: error.message }, { status: 400 });
5787
+ return ServerHttpErrorResponseFactory.fromUnknown(error);
5788
+ }
5789
+ }
5790
+ async getDashboardTimeseries(request) {
5791
+ try {
5792
+ const parsed = this.parseTimeseriesRequest(request);
5793
+ return Response.json(await this.queryBus.execute(new GetTelemetryDashboardTimeseriesQuery(parsed)));
5794
+ } catch (error) {
5795
+ if (error instanceof TelemetryDashboardRequestError) return Response.json({ error: error.message }, { status: 400 });
5796
+ return ServerHttpErrorResponseFactory.fromUnknown(error);
5797
+ }
5798
+ }
5799
+ async getDashboardDimensions(request) {
5800
+ try {
5801
+ const filters = this.parseFilters(request);
5802
+ return Response.json(await this.queryBus.execute(new GetTelemetryDashboardDimensionsQuery(filters)));
5803
+ } catch (error) {
5804
+ if (error instanceof TelemetryDashboardRequestError) return Response.json({ error: error.message }, { status: 400 });
5805
+ return ServerHttpErrorResponseFactory.fromUnknown(error);
5806
+ }
5807
+ }
5808
+ async getDashboardRuns(request) {
5809
+ try {
5810
+ const parsed = this.parseRunsRequest(request);
5811
+ return Response.json(await this.queryBus.execute(new GetTelemetryDashboardRunsQuery(parsed)));
5812
+ } catch (error) {
5813
+ if (error instanceof TelemetryDashboardRequestError) return Response.json({ error: error.message }, { status: 400 });
5814
+ return ServerHttpErrorResponseFactory.fromUnknown(error);
5815
+ }
5816
+ }
5817
+ async getRunTrace(runId) {
5818
+ try {
5819
+ if (!runId.trim()) throw new TelemetryDashboardRequestError("Run trace request requires a run id.");
5820
+ return Response.json(await this.queryBus.execute(new GetTelemetryRunTraceQuery(runId)));
5821
+ } catch (error) {
5822
+ if (error instanceof TelemetryDashboardRequestError) return Response.json({ error: error.message }, { status: 400 });
5823
+ return ServerHttpErrorResponseFactory.fromUnknown(error);
5824
+ }
5825
+ }
5826
+ parseTimeseriesRequest(request) {
5827
+ const interval = new URL(request.url).searchParams.get("interval");
5828
+ if (interval !== "minute_5" && interval !== "minute_15" && interval !== "hour" && interval !== "day" && interval !== "week") throw new TelemetryDashboardRequestError("Query string must include interval=minute_5|minute_15|hour|day|week.");
5829
+ return {
5830
+ interval,
5831
+ filters: this.parseFilters(request)
5832
+ };
5833
+ }
5834
+ parseRunsRequest(request) {
5835
+ const url = new URL(request.url);
5836
+ return {
5837
+ filters: this.parseFilters(request),
5838
+ page: this.readPositiveInt(url, "page", 1),
5839
+ pageSize: this.readPositiveInt(url, "pageSize", 10)
5840
+ };
5841
+ }
5842
+ parseFilters(request) {
5843
+ const url = new URL(request.url);
5844
+ return {
5845
+ workflowIds: this.readMany(url, "workflowId"),
5846
+ statuses: this.readStatuses(url),
5847
+ runOrigins: this.readRunOrigins(url),
5848
+ modelNames: this.readMany(url, "modelName"),
5849
+ startTimeGte: this.readIso(url, "startTimeGte"),
5850
+ endTimeLte: this.readIso(url, "endTimeLte")
5851
+ };
5852
+ }
5853
+ readMany(url, key) {
5854
+ const values = url.searchParams.getAll(key).map((value) => value.trim()).filter((value) => value.length > 0);
5855
+ return values.length > 0 ? values : void 0;
5856
+ }
5857
+ readStatuses(url) {
5858
+ const values = this.readMany(url, "status");
5859
+ if (!values) return;
5860
+ for (const value of values) if (value !== "running" && value !== "completed" && value !== "failed") throw new TelemetryDashboardRequestError(`Unsupported telemetry status filter: ${value}`);
5861
+ return values;
5862
+ }
5863
+ readRunOrigins(url) {
5864
+ const values = this.readMany(url, "runOrigin");
5865
+ if (!values) return;
5866
+ for (const value of values) if (value !== "triggered" && value !== "manual") throw new TelemetryDashboardRequestError(`Unsupported telemetry run origin filter: ${value}`);
5867
+ return values;
5868
+ }
5869
+ readIso(url, key) {
5870
+ const value = url.searchParams.get(key)?.trim();
5871
+ if (!value) return;
5872
+ if (Number.isNaN(new Date(value).getTime())) throw new TelemetryDashboardRequestError(`Invalid ISO timestamp for ${key}.`);
5873
+ return value;
5874
+ }
5875
+ readPositiveInt(url, key, fallback) {
5876
+ const raw$1 = url.searchParams.get(key)?.trim();
5877
+ if (!raw$1) return fallback;
5878
+ const value = Number(raw$1);
5879
+ if (!Number.isInteger(value) || value <= 0) throw new TelemetryDashboardRequestError(`${key} must be a positive integer.`);
5880
+ return value;
5881
+ }
5882
+ };
5883
+ TelemetryHttpRouteHandler = __decorate([
5884
+ injectable(),
5885
+ __decorateParam(0, inject(ApplicationTokens.QueryBus)),
5886
+ __decorateMetadata("design:paramtypes", [Object])
5887
+ ], TelemetryHttpRouteHandler);
5888
+
5889
+ //#endregion
5890
+ //#region src/presentation/http/hono/registrars/TelemetryHonoApiRouteRegistrar.ts
5891
+ var _ref$21;
5892
+ let TelemetryHonoApiRouteRegistrar = class TelemetryHonoApiRouteRegistrar$1 {
5893
+ constructor(handler) {
5894
+ this.handler = handler;
5895
+ }
5896
+ register(app) {
5897
+ app.get("/telemetry/dashboard/summary", (c) => this.handler.getDashboardSummary(c.req.raw));
5898
+ app.get("/telemetry/dashboard/timeseries", (c) => this.handler.getDashboardTimeseries(c.req.raw));
5899
+ app.get("/telemetry/dashboard/dimensions", (c) => this.handler.getDashboardDimensions(c.req.raw));
5900
+ app.get("/telemetry/dashboard/runs", (c) => this.handler.getDashboardRuns(c.req.raw));
5901
+ app.get("/telemetry/runs/:runId/trace", (c) => this.handler.getRunTrace(c.req.param("runId")));
5902
+ }
5903
+ };
5904
+ TelemetryHonoApiRouteRegistrar = __decorate([
4403
5905
  injectable(),
4404
- registry([{
4405
- token: ApplicationTokens.HonoApiRouteRegistrar,
4406
- useClass: RunHonoApiRouteRegistrar
4407
- }]),
4408
- __decorateParam(0, inject(RunHttpRouteHandler)),
4409
- __decorateMetadata("design:paramtypes", [typeof (_ref$14 = typeof RunHttpRouteHandler !== "undefined" && RunHttpRouteHandler) === "function" ? _ref$14 : Object])
4410
- ], RunHonoApiRouteRegistrar);
5906
+ __decorateParam(0, inject(TelemetryHttpRouteHandler)),
5907
+ __decorateMetadata("design:paramtypes", [typeof (_ref$21 = typeof TelemetryHttpRouteHandler !== "undefined" && TelemetryHttpRouteHandler) === "function" ? _ref$21 : Object])
5908
+ ], TelemetryHonoApiRouteRegistrar);
4411
5909
 
4412
5910
  //#endregion
4413
5911
  //#region src/presentation/http/routeHandlers/UserHttpRouteHandlerFactory.ts
@@ -4490,7 +5988,7 @@ UserHttpRouteHandler = __decorate([
4490
5988
 
4491
5989
  //#endregion
4492
5990
  //#region src/presentation/http/hono/registrars/UserHonoApiRouteRegistrar.ts
4493
- var _ref$13;
5991
+ var _ref$20;
4494
5992
  let UserHonoApiRouteRegistrar = class UserHonoApiRouteRegistrar$1 {
4495
5993
  constructor(handler) {
4496
5994
  this.handler = handler;
@@ -4506,12 +6004,8 @@ let UserHonoApiRouteRegistrar = class UserHonoApiRouteRegistrar$1 {
4506
6004
  };
4507
6005
  UserHonoApiRouteRegistrar = __decorate([
4508
6006
  injectable(),
4509
- registry([{
4510
- token: ApplicationTokens.HonoApiRouteRegistrar,
4511
- useClass: UserHonoApiRouteRegistrar
4512
- }]),
4513
6007
  __decorateParam(0, inject(UserHttpRouteHandler)),
4514
- __decorateMetadata("design:paramtypes", [typeof (_ref$13 = typeof UserHttpRouteHandler !== "undefined" && UserHttpRouteHandler) === "function" ? _ref$13 : Object])
6008
+ __decorateMetadata("design:paramtypes", [typeof (_ref$20 = typeof UserHttpRouteHandler !== "undefined" && UserHttpRouteHandler) === "function" ? _ref$20 : Object])
4515
6009
  ], UserHonoApiRouteRegistrar);
4516
6010
 
4517
6011
  //#endregion
@@ -4612,7 +6106,7 @@ RequestToWebhookItemMapper = __decorate([
4612
6106
 
4613
6107
  //#endregion
4614
6108
  //#region src/presentation/http/routeHandlers/WebhookHttpRouteHandler.ts
4615
- var _ref$12, _ref2$2;
6109
+ var _ref$19, _ref2$2;
4616
6110
  let WebhookHttpRouteHandler = class WebhookHttpRouteHandler$1 {
4617
6111
  constructor(commandBus, runIntentService, requestToWebhookItemMapper) {
4618
6112
  this.commandBus = commandBus;
@@ -4643,14 +6137,14 @@ WebhookHttpRouteHandler = __decorate([
4643
6137
  __decorateParam(2, inject(RequestToWebhookItemMapper)),
4644
6138
  __decorateMetadata("design:paramtypes", [
4645
6139
  Object,
4646
- typeof (_ref$12 = typeof RunIntentService !== "undefined" && RunIntentService) === "function" ? _ref$12 : Object,
6140
+ typeof (_ref$19 = typeof RunIntentService !== "undefined" && RunIntentService) === "function" ? _ref$19 : Object,
4647
6141
  typeof (_ref2$2 = typeof RequestToWebhookItemMapper !== "undefined" && RequestToWebhookItemMapper) === "function" ? _ref2$2 : Object
4648
6142
  ])
4649
6143
  ], WebhookHttpRouteHandler);
4650
6144
 
4651
6145
  //#endregion
4652
6146
  //#region src/presentation/http/hono/registrars/WebhookHonoApiRouteRegistrar.ts
4653
- var _ref$11;
6147
+ var _ref$18;
4654
6148
  let WebhookHonoApiRouteRegistrar = class WebhookHonoApiRouteRegistrar$1 {
4655
6149
  constructor(handler) {
4656
6150
  this.handler = handler;
@@ -4667,17 +6161,13 @@ let WebhookHonoApiRouteRegistrar = class WebhookHonoApiRouteRegistrar$1 {
4667
6161
  };
4668
6162
  WebhookHonoApiRouteRegistrar = __decorate([
4669
6163
  injectable(),
4670
- registry([{
4671
- token: ApplicationTokens.HonoApiRouteRegistrar,
4672
- useClass: WebhookHonoApiRouteRegistrar
4673
- }]),
4674
6164
  __decorateParam(0, inject(WebhookHttpRouteHandler)),
4675
- __decorateMetadata("design:paramtypes", [typeof (_ref$11 = typeof WebhookHttpRouteHandler !== "undefined" && WebhookHttpRouteHandler) === "function" ? _ref$11 : Object])
6165
+ __decorateMetadata("design:paramtypes", [typeof (_ref$18 = typeof WebhookHttpRouteHandler !== "undefined" && WebhookHttpRouteHandler) === "function" ? _ref$18 : Object])
4676
6166
  ], WebhookHonoApiRouteRegistrar);
4677
6167
 
4678
6168
  //#endregion
4679
6169
  //#region src/presentation/http/hono/registrars/WhitelabelHonoApiRouteRegistrar.ts
4680
- var _ref$10;
6170
+ var _ref$17;
4681
6171
  let WhitelabelHonoApiRouteRegistrar = class WhitelabelHonoApiRouteRegistrar$1 {
4682
6172
  constructor(whitelabelLogoHttpRouteHandler) {
4683
6173
  this.whitelabelLogoHttpRouteHandler = whitelabelLogoHttpRouteHandler;
@@ -4688,17 +6178,13 @@ let WhitelabelHonoApiRouteRegistrar = class WhitelabelHonoApiRouteRegistrar$1 {
4688
6178
  };
4689
6179
  WhitelabelHonoApiRouteRegistrar = __decorate([
4690
6180
  injectable(),
4691
- registry([{
4692
- token: ApplicationTokens.HonoApiRouteRegistrar,
4693
- useClass: WhitelabelHonoApiRouteRegistrar
4694
- }]),
4695
6181
  __decorateParam(0, inject(WhitelabelLogoHttpRouteHandler)),
4696
- __decorateMetadata("design:paramtypes", [typeof (_ref$10 = typeof WhitelabelLogoHttpRouteHandler !== "undefined" && WhitelabelLogoHttpRouteHandler) === "function" ? _ref$10 : Object])
6182
+ __decorateMetadata("design:paramtypes", [typeof (_ref$17 = typeof WhitelabelLogoHttpRouteHandler !== "undefined" && WhitelabelLogoHttpRouteHandler) === "function" ? _ref$17 : Object])
4697
6183
  ], WhitelabelHonoApiRouteRegistrar);
4698
6184
 
4699
6185
  //#endregion
4700
6186
  //#region src/presentation/http/routeHandlers/WorkflowHttpRouteHandler.ts
4701
- var _ref$9;
6187
+ var _ref$16;
4702
6188
  let WorkflowHttpRouteHandler = class WorkflowHttpRouteHandler$1 {
4703
6189
  constructor(queryBus, commandBus, workflowDefinitionMapper) {
4704
6190
  this.queryBus = queryBus;
@@ -4772,13 +6258,13 @@ WorkflowHttpRouteHandler = __decorate([
4772
6258
  __decorateMetadata("design:paramtypes", [
4773
6259
  Object,
4774
6260
  Object,
4775
- typeof (_ref$9 = typeof WorkflowDefinitionMapper !== "undefined" && WorkflowDefinitionMapper) === "function" ? _ref$9 : Object
6261
+ typeof (_ref$16 = typeof WorkflowDefinitionMapper !== "undefined" && WorkflowDefinitionMapper) === "function" ? _ref$16 : Object
4776
6262
  ])
4777
6263
  ], WorkflowHttpRouteHandler);
4778
6264
 
4779
6265
  //#endregion
4780
6266
  //#region src/presentation/http/hono/registrars/WorkflowHonoApiRouteRegistrar.ts
4781
- var _ref$8;
6267
+ var _ref$15;
4782
6268
  let WorkflowHonoApiRouteRegistrar = class WorkflowHonoApiRouteRegistrar$1 {
4783
6269
  constructor(handler) {
4784
6270
  this.handler = handler;
@@ -4795,12 +6281,8 @@ let WorkflowHonoApiRouteRegistrar = class WorkflowHonoApiRouteRegistrar$1 {
4795
6281
  };
4796
6282
  WorkflowHonoApiRouteRegistrar = __decorate([
4797
6283
  injectable(),
4798
- registry([{
4799
- token: ApplicationTokens.HonoApiRouteRegistrar,
4800
- useClass: WorkflowHonoApiRouteRegistrar
4801
- }]),
4802
6284
  __decorateParam(0, inject(WorkflowHttpRouteHandler)),
4803
- __decorateMetadata("design:paramtypes", [typeof (_ref$8 = typeof WorkflowHttpRouteHandler !== "undefined" && WorkflowHttpRouteHandler) === "function" ? _ref$8 : Object])
6285
+ __decorateMetadata("design:paramtypes", [typeof (_ref$15 = typeof WorkflowHttpRouteHandler !== "undefined" && WorkflowHttpRouteHandler) === "function" ? _ref$15 : Object])
4804
6286
  ], WorkflowHonoApiRouteRegistrar);
4805
6287
 
4806
6288
  //#endregion
@@ -4841,7 +6323,7 @@ CodemationIdFactory = __decorate([injectable()], CodemationIdFactory);
4841
6323
 
4842
6324
  //#endregion
4843
6325
  //#region src/infrastructure/di/InMemoryCommandBus.ts
4844
- var _ref$7;
6326
+ var _ref$14;
4845
6327
  let InMemoryCommandBus = class InMemoryCommandBus$1 {
4846
6328
  handlersByCommandType;
4847
6329
  constructor(handlers) {
@@ -4866,7 +6348,7 @@ let InMemoryCommandBus = class InMemoryCommandBus$1 {
4866
6348
  InMemoryCommandBus = __decorate([
4867
6349
  injectable(),
4868
6350
  __decorateParam(0, injectAll(ApplicationTokens.CommandHandler)),
4869
- __decorateMetadata("design:paramtypes", [typeof (_ref$7 = typeof ReadonlyArray !== "undefined" && ReadonlyArray) === "function" ? _ref$7 : Object])
6351
+ __decorateMetadata("design:paramtypes", [typeof (_ref$14 = typeof ReadonlyArray !== "undefined" && ReadonlyArray) === "function" ? _ref$14 : Object])
4870
6352
  ], InMemoryCommandBus);
4871
6353
 
4872
6354
  //#endregion
@@ -4875,7 +6357,7 @@ const domainEventHandlerMetadataKey = Symbol.for("codemation.infrastructure.di.D
4875
6357
 
4876
6358
  //#endregion
4877
6359
  //#region src/infrastructure/di/InMemoryDomainEventBus.ts
4878
- var _ref$6;
6360
+ var _ref$13;
4879
6361
  let InMemoryDomainEventBus = class InMemoryDomainEventBus$1 {
4880
6362
  handlersByEventType;
4881
6363
  constructor(handlers) {
@@ -4900,12 +6382,12 @@ let InMemoryDomainEventBus = class InMemoryDomainEventBus$1 {
4900
6382
  InMemoryDomainEventBus = __decorate([
4901
6383
  injectable(),
4902
6384
  __decorateParam(0, injectAll(ApplicationTokens.DomainEventHandler)),
4903
- __decorateMetadata("design:paramtypes", [typeof (_ref$6 = typeof ReadonlyArray !== "undefined" && ReadonlyArray) === "function" ? _ref$6 : Object])
6385
+ __decorateMetadata("design:paramtypes", [typeof (_ref$13 = typeof ReadonlyArray !== "undefined" && ReadonlyArray) === "function" ? _ref$13 : Object])
4904
6386
  ], InMemoryDomainEventBus);
4905
6387
 
4906
6388
  //#endregion
4907
6389
  //#region src/infrastructure/di/InMemoryQueryBus.ts
4908
- var _ref$5;
6390
+ var _ref$12;
4909
6391
  let InMemoryQueryBus = class InMemoryQueryBus$1 {
4910
6392
  handlersByQueryType;
4911
6393
  constructor(handlers) {
@@ -4930,7 +6412,7 @@ let InMemoryQueryBus = class InMemoryQueryBus$1 {
4930
6412
  InMemoryQueryBus = __decorate([
4931
6413
  injectable(),
4932
6414
  __decorateParam(0, injectAll(ApplicationTokens.QueryHandler)),
4933
- __decorateMetadata("design:paramtypes", [typeof (_ref$5 = typeof ReadonlyArray !== "undefined" && ReadonlyArray) === "function" ? _ref$5 : Object])
6415
+ __decorateMetadata("design:paramtypes", [typeof (_ref$12 = typeof ReadonlyArray !== "undefined" && ReadonlyArray) === "function" ? _ref$12 : Object])
4934
6416
  ], InMemoryQueryBus);
4935
6417
 
4936
6418
  //#endregion
@@ -5141,7 +6623,7 @@ var CodemationBetterAuthBaseUrlPolicy = class {
5141
6623
 
5142
6624
  //#endregion
5143
6625
  //#region src/infrastructure/auth/CodemationSessionVerifier.ts
5144
- var _ref$4;
6626
+ var _ref$11;
5145
6627
  let CodemationSessionVerifier = class CodemationSessionVerifier$1 {
5146
6628
  constructor(betterAuthApiSessionVerifier) {
5147
6629
  this.betterAuthApiSessionVerifier = betterAuthApiSessionVerifier;
@@ -5153,7 +6635,7 @@ let CodemationSessionVerifier = class CodemationSessionVerifier$1 {
5153
6635
  CodemationSessionVerifier = __decorate([
5154
6636
  injectable(),
5155
6637
  __decorateParam(0, inject(BetterAuthApiSessionVerifier)),
5156
- __decorateMetadata("design:paramtypes", [typeof (_ref$4 = typeof BetterAuthApiSessionVerifier !== "undefined" && BetterAuthApiSessionVerifier) === "function" ? _ref$4 : Object])
6638
+ __decorateMetadata("design:paramtypes", [typeof (_ref$11 = typeof BetterAuthApiSessionVerifier !== "undefined" && BetterAuthApiSessionVerifier) === "function" ? _ref$11 : Object])
5157
6639
  ], CodemationSessionVerifier);
5158
6640
 
5159
6641
  //#endregion
@@ -5536,6 +7018,234 @@ let InMemoryTriggerSetupStateRepository = class InMemoryTriggerSetupStateReposit
5536
7018
  };
5537
7019
  InMemoryTriggerSetupStateRepository = __decorate([injectable()], InMemoryTriggerSetupStateRepository);
5538
7020
 
7021
+ //#endregion
7022
+ //#region src/infrastructure/persistence/InMemoryRunTraceContextRepository.ts
7023
+ var _ref$10;
7024
+ let InMemoryRunTraceContextRepository = class InMemoryRunTraceContextRepository$1 {
7025
+ rows = /* @__PURE__ */ new Map();
7026
+ constructor(otelIdentityFactory) {
7027
+ this.otelIdentityFactory = otelIdentityFactory;
7028
+ }
7029
+ async load(runId) {
7030
+ return this.rows.get(decodeURIComponent(runId));
7031
+ }
7032
+ async getOrCreate(args) {
7033
+ const key = decodeURIComponent(args.runId);
7034
+ const existing = this.rows.get(key);
7035
+ if (existing) return existing;
7036
+ const created = {
7037
+ runId: key,
7038
+ workflowId: decodeURIComponent(args.workflowId),
7039
+ traceId: this.otelIdentityFactory.createTraceId(key),
7040
+ rootSpanId: this.otelIdentityFactory.createRootSpanId(key),
7041
+ serviceName: args.serviceName,
7042
+ createdAt: (/* @__PURE__ */ new Date()).toISOString()
7043
+ };
7044
+ this.rows.set(key, created);
7045
+ return created;
7046
+ }
7047
+ async upsertExpiry(args) {
7048
+ const key = decodeURIComponent(args.runId);
7049
+ const existing = this.rows.get(key);
7050
+ if (!existing) return;
7051
+ this.rows.set(key, {
7052
+ ...existing,
7053
+ expiresAt: this.resolveLaterExpiry(existing.expiresAt, args.expiresAt)
7054
+ });
7055
+ }
7056
+ resolveLaterExpiry(current, candidate) {
7057
+ if (!current) return candidate;
7058
+ if (!candidate) return current;
7059
+ return current >= candidate ? current : candidate;
7060
+ }
7061
+ };
7062
+ InMemoryRunTraceContextRepository = __decorate([
7063
+ injectable(),
7064
+ __decorateParam(0, inject(OtelIdentityFactory)),
7065
+ __decorateMetadata("design:paramtypes", [typeof (_ref$10 = typeof OtelIdentityFactory !== "undefined" && OtelIdentityFactory) === "function" ? _ref$10 : Object])
7066
+ ], InMemoryRunTraceContextRepository);
7067
+
7068
+ //#endregion
7069
+ //#region src/infrastructure/persistence/InMemoryTelemetryArtifactStore.ts
7070
+ var _ref$9;
7071
+ let InMemoryTelemetryArtifactStore = class InMemoryTelemetryArtifactStore$1 {
7072
+ rows = /* @__PURE__ */ new Map();
7073
+ constructor(otelIdentityFactory) {
7074
+ this.otelIdentityFactory = otelIdentityFactory;
7075
+ }
7076
+ async save(record) {
7077
+ const created = {
7078
+ artifactId: this.otelIdentityFactory.createArtifactId(),
7079
+ traceId: record.traceId,
7080
+ spanId: record.spanId,
7081
+ runId: record.runId,
7082
+ workflowId: record.workflowId,
7083
+ nodeId: record.nodeId,
7084
+ activationId: record.activationId,
7085
+ kind: record.kind,
7086
+ contentType: record.contentType,
7087
+ previewText: record.previewText,
7088
+ previewJson: record.previewJson,
7089
+ payloadText: record.payloadText,
7090
+ payloadJson: record.payloadJson,
7091
+ bytes: record.bytes,
7092
+ truncated: record.truncated,
7093
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
7094
+ expiresAt: record.expiresAt?.toISOString(),
7095
+ retentionExpiresAt: record.retentionExpiresAt
7096
+ };
7097
+ this.rows.set(created.artifactId, created);
7098
+ return created;
7099
+ }
7100
+ async listByTraceId(traceId) {
7101
+ return [...this.rows.values()].filter((row) => row.traceId === traceId).sort((left, right) => left.createdAt.localeCompare(right.createdAt));
7102
+ }
7103
+ async pruneExpired(args) {
7104
+ const candidates = [...this.rows.entries()].filter(([, row]) => row.retentionExpiresAt !== void 0 && row.retentionExpiresAt <= args.nowIso).sort((left, right) => (left[1].retentionExpiresAt ?? "").localeCompare(right[1].retentionExpiresAt ?? "")).slice(0, args.limit ?? Number.MAX_SAFE_INTEGER);
7105
+ for (const [key] of candidates) this.rows.delete(key);
7106
+ return candidates.length;
7107
+ }
7108
+ };
7109
+ InMemoryTelemetryArtifactStore = __decorate([
7110
+ injectable(),
7111
+ __decorateParam(0, inject(OtelIdentityFactory)),
7112
+ __decorateMetadata("design:paramtypes", [typeof (_ref$9 = typeof OtelIdentityFactory !== "undefined" && OtelIdentityFactory) === "function" ? _ref$9 : Object])
7113
+ ], InMemoryTelemetryArtifactStore);
7114
+
7115
+ //#endregion
7116
+ //#region src/infrastructure/persistence/InMemoryTelemetryMetricPointStore.ts
7117
+ var _ref$8;
7118
+ let InMemoryTelemetryMetricPointStore = class InMemoryTelemetryMetricPointStore$1 {
7119
+ rows = /* @__PURE__ */ new Map();
7120
+ constructor(otelIdentityFactory) {
7121
+ this.otelIdentityFactory = otelIdentityFactory;
7122
+ }
7123
+ async save(record) {
7124
+ const created = {
7125
+ metricPointId: this.otelIdentityFactory.createArtifactId(),
7126
+ traceId: record.traceId,
7127
+ spanId: record.spanId,
7128
+ runId: record.runId,
7129
+ workflowId: record.workflowId,
7130
+ nodeId: record.nodeId,
7131
+ activationId: record.activationId,
7132
+ metricName: record.name,
7133
+ value: record.value,
7134
+ unit: record.unit,
7135
+ observedAt: record.observedAt,
7136
+ workflowFolder: record.workflowFolder,
7137
+ nodeType: record.nodeType,
7138
+ nodeRole: record.nodeRole,
7139
+ modelName: record.modelName,
7140
+ dimensions: record.attributes,
7141
+ retentionExpiresAt: record.retentionExpiresAt
7142
+ };
7143
+ this.rows.set(created.metricPointId, created);
7144
+ return created;
7145
+ }
7146
+ async list(args = {}) {
7147
+ return [...this.rows.values()].filter((row) => this.matches(row, args)).sort((left, right) => {
7148
+ const observedCompare = left.observedAt.localeCompare(right.observedAt);
7149
+ if (observedCompare !== 0) return observedCompare;
7150
+ return left.metricPointId.localeCompare(right.metricPointId);
7151
+ }).slice(0, args.limit ?? Number.MAX_SAFE_INTEGER);
7152
+ }
7153
+ async pruneExpired(args) {
7154
+ const candidates = [...this.rows.entries()].filter(([, row]) => row.retentionExpiresAt !== void 0 && row.retentionExpiresAt <= args.nowIso).sort((left, right) => (left[1].retentionExpiresAt ?? "").localeCompare(right[1].retentionExpiresAt ?? "")).slice(0, args.limit ?? Number.MAX_SAFE_INTEGER);
7155
+ for (const [key] of candidates) this.rows.delete(key);
7156
+ return candidates.length;
7157
+ }
7158
+ matches(row, args) {
7159
+ if (args.traceId && row.traceId !== args.traceId) return false;
7160
+ if (args.runId && row.runId !== args.runId) return false;
7161
+ if (args.runIds && args.runIds.length > 0 && (!row.runId || !args.runIds.includes(row.runId))) return false;
7162
+ if (args.workflowId && row.workflowId !== args.workflowId) return false;
7163
+ if (args.workflowIds && args.workflowIds.length > 0 && !args.workflowIds.includes(row.workflowId)) return false;
7164
+ if (args.nodeId && row.nodeId !== args.nodeId) return false;
7165
+ if (args.metricNames && args.metricNames.length > 0 && !args.metricNames.includes(row.metricName)) return false;
7166
+ if (args.modelNames && args.modelNames.length > 0 && (!row.modelName || !args.modelNames.includes(row.modelName))) return false;
7167
+ if (args.observedAtGte && row.observedAt < args.observedAtGte) return false;
7168
+ if (args.observedAtLte && row.observedAt > args.observedAtLte) return false;
7169
+ return true;
7170
+ }
7171
+ };
7172
+ InMemoryTelemetryMetricPointStore = __decorate([
7173
+ injectable(),
7174
+ __decorateParam(0, inject(OtelIdentityFactory)),
7175
+ __decorateMetadata("design:paramtypes", [typeof (_ref$8 = typeof OtelIdentityFactory !== "undefined" && OtelIdentityFactory) === "function" ? _ref$8 : Object])
7176
+ ], InMemoryTelemetryMetricPointStore);
7177
+
7178
+ //#endregion
7179
+ //#region src/infrastructure/persistence/InMemoryTelemetrySpanStore.ts
7180
+ let InMemoryTelemetrySpanStore = class InMemoryTelemetrySpanStore$1 {
7181
+ rows = /* @__PURE__ */ new Map();
7182
+ async upsert(record) {
7183
+ const key = this.createKey(record.traceId, record.spanId);
7184
+ const existing = this.rows.get(key);
7185
+ this.rows.set(key, this.merge(existing, record));
7186
+ }
7187
+ async list(args = {}) {
7188
+ return [...this.rows.values()].filter((row) => this.matches(row, args)).sort((left, right) => {
7189
+ const startCompare = (left.startTime ?? "").localeCompare(right.startTime ?? "");
7190
+ if (startCompare !== 0) return startCompare;
7191
+ return left.spanId.localeCompare(right.spanId);
7192
+ }).slice(0, args.limit ?? Number.MAX_SAFE_INTEGER);
7193
+ }
7194
+ async listByTraceId(traceId) {
7195
+ return await this.list({ traceId });
7196
+ }
7197
+ createKey(traceId, spanId) {
7198
+ return `${traceId}:${spanId}`;
7199
+ }
7200
+ merge(existing, update) {
7201
+ return {
7202
+ traceId: update.traceId,
7203
+ spanId: update.spanId,
7204
+ parentSpanId: update.parentSpanId ?? existing?.parentSpanId,
7205
+ runId: update.runId,
7206
+ workflowId: update.workflowId,
7207
+ nodeId: update.nodeId ?? existing?.nodeId,
7208
+ activationId: update.activationId ?? existing?.activationId,
7209
+ connectionInvocationId: update.connectionInvocationId ?? existing?.connectionInvocationId,
7210
+ name: update.name ?? existing?.name ?? "codemation.span",
7211
+ kind: update.kind ?? existing?.kind ?? "internal",
7212
+ status: update.status ?? existing?.status,
7213
+ statusMessage: update.statusMessage ?? existing?.statusMessage,
7214
+ startTime: update.startTime ?? existing?.startTime,
7215
+ endTime: update.endTime ?? existing?.endTime,
7216
+ workflowFolder: update.workflowFolder ?? existing?.workflowFolder,
7217
+ nodeType: update.nodeType ?? existing?.nodeType,
7218
+ nodeRole: update.nodeRole ?? existing?.nodeRole,
7219
+ modelName: update.modelName ?? existing?.modelName,
7220
+ attributes: {
7221
+ ...existing?.attributes ?? {},
7222
+ ...update.attributes ?? {}
7223
+ },
7224
+ events: [...existing?.events ?? [], ...update.events ?? []],
7225
+ retentionExpiresAt: update.retentionExpiresAt ?? existing?.retentionExpiresAt
7226
+ };
7227
+ }
7228
+ matches(row, args) {
7229
+ if (args.traceId && row.traceId !== args.traceId) return false;
7230
+ if (args.runId && row.runId !== args.runId) return false;
7231
+ if (args.runIds && args.runIds.length > 0 && !args.runIds.includes(row.runId)) return false;
7232
+ if (args.workflowId && row.workflowId !== args.workflowId) return false;
7233
+ if (args.workflowIds && args.workflowIds.length > 0 && !args.workflowIds.includes(row.workflowId)) return false;
7234
+ if (args.statuses && args.statuses.length > 0 && (!row.status || !args.statuses.includes(row.status))) return false;
7235
+ if (args.names && args.names.length > 0 && !args.names.includes(row.name)) return false;
7236
+ if (args.modelNames && args.modelNames.length > 0 && (!row.modelName || !args.modelNames.includes(row.modelName))) return false;
7237
+ if (args.startTimeGte && row.startTime && row.startTime < args.startTimeGte) return false;
7238
+ if (args.endTimeLte && row.endTime && row.endTime > args.endTimeLte) return false;
7239
+ return true;
7240
+ }
7241
+ async pruneExpired(args) {
7242
+ const candidates = [...this.rows.entries()].filter(([, row]) => row.retentionExpiresAt !== void 0 && row.retentionExpiresAt <= args.nowIso).sort((left, right) => (left[1].retentionExpiresAt ?? "").localeCompare(right[1].retentionExpiresAt ?? "")).slice(0, args.limit ?? Number.MAX_SAFE_INTEGER);
7243
+ for (const [key] of candidates) this.rows.delete(key);
7244
+ return candidates.length;
7245
+ }
7246
+ };
7247
+ InMemoryTelemetrySpanStore = __decorate([injectable()], InMemoryTelemetrySpanStore);
7248
+
5539
7249
  //#endregion
5540
7250
  //#region src/infrastructure/persistence/InMemoryWorkflowActivationRepository.ts
5541
7251
  let InMemoryWorkflowActivationRepository = class InMemoryWorkflowActivationRepository$1 {
@@ -5668,7 +7378,9 @@ let InMemoryWorkflowRunRepository = class InMemoryWorkflowRunRepository$1 {
5668
7378
  for (const s of this.runs.values()) {
5669
7379
  if (s.status !== "completed" && s.status !== "failed") continue;
5670
7380
  const finishedAt = RunFinishedAtFactory.resolveIso(s);
5671
- if (!finishedAt || finishedAt >= args.beforeIso) continue;
7381
+ const retentionSeconds = s.policySnapshot?.retentionSeconds ?? args.defaultRetentionSeconds;
7382
+ const cutoffIso = (/* @__PURE__ */ new Date(new Date(args.nowIso).getTime() - retentionSeconds * 1e3)).toISOString();
7383
+ if (!finishedAt || finishedAt >= cutoffIso) continue;
5672
7384
  out.push({
5673
7385
  runId: s.runId,
5674
7386
  workflowId: s.workflowId,
@@ -13607,6 +15319,79 @@ var require_prisma_sqlite_client = /* @__PURE__ */ __commonJS({ "src/infrastruct
13607
15319
  updatedAt: "updatedAt",
13608
15320
  stateJson: "stateJson"
13609
15321
  };
15322
+ exports.Prisma.RunTraceContextScalarFieldEnum = {
15323
+ runId: "runId",
15324
+ workflowId: "workflowId",
15325
+ traceId: "traceId",
15326
+ rootSpanId: "rootSpanId",
15327
+ serviceName: "serviceName",
15328
+ createdAt: "createdAt",
15329
+ expiresAt: "expiresAt"
15330
+ };
15331
+ exports.Prisma.TelemetrySpanScalarFieldEnum = {
15332
+ telemetrySpanId: "telemetrySpanId",
15333
+ traceId: "traceId",
15334
+ spanId: "spanId",
15335
+ parentSpanId: "parentSpanId",
15336
+ runId: "runId",
15337
+ workflowId: "workflowId",
15338
+ nodeId: "nodeId",
15339
+ activationId: "activationId",
15340
+ connectionInvocationId: "connectionInvocationId",
15341
+ name: "name",
15342
+ kind: "kind",
15343
+ status: "status",
15344
+ statusMessage: "statusMessage",
15345
+ startTime: "startTime",
15346
+ endTime: "endTime",
15347
+ workflowFolder: "workflowFolder",
15348
+ nodeType: "nodeType",
15349
+ nodeRole: "nodeRole",
15350
+ modelName: "modelName",
15351
+ attributesJson: "attributesJson",
15352
+ eventsJson: "eventsJson",
15353
+ retentionExpiresAt: "retentionExpiresAt",
15354
+ updatedAt: "updatedAt"
15355
+ };
15356
+ exports.Prisma.TelemetryArtifactScalarFieldEnum = {
15357
+ artifactId: "artifactId",
15358
+ traceId: "traceId",
15359
+ spanId: "spanId",
15360
+ runId: "runId",
15361
+ workflowId: "workflowId",
15362
+ nodeId: "nodeId",
15363
+ activationId: "activationId",
15364
+ kind: "kind",
15365
+ contentType: "contentType",
15366
+ previewText: "previewText",
15367
+ previewJson: "previewJson",
15368
+ payloadText: "payloadText",
15369
+ payloadJson: "payloadJson",
15370
+ bytes: "bytes",
15371
+ truncated: "truncated",
15372
+ createdAt: "createdAt",
15373
+ expiresAt: "expiresAt",
15374
+ retentionExpiresAt: "retentionExpiresAt"
15375
+ };
15376
+ exports.Prisma.TelemetryMetricPointScalarFieldEnum = {
15377
+ metricPointId: "metricPointId",
15378
+ traceId: "traceId",
15379
+ spanId: "spanId",
15380
+ runId: "runId",
15381
+ workflowId: "workflowId",
15382
+ nodeId: "nodeId",
15383
+ activationId: "activationId",
15384
+ metricName: "metricName",
15385
+ value: "value",
15386
+ unit: "unit",
15387
+ observedAt: "observedAt",
15388
+ workflowFolder: "workflowFolder",
15389
+ nodeType: "nodeType",
15390
+ nodeRole: "nodeRole",
15391
+ modelName: "modelName",
15392
+ dimensionsJson: "dimensionsJson",
15393
+ retentionExpiresAt: "retentionExpiresAt"
15394
+ };
13610
15395
  exports.Prisma.CredentialInstanceScalarFieldEnum = {
13611
15396
  instanceId: "instanceId",
13612
15397
  typeId: "typeId",
@@ -13734,6 +15519,10 @@ var require_prisma_sqlite_client = /* @__PURE__ */ __commonJS({ "src/infrastruct
13734
15519
  WorkflowDebuggerOverlay: "WorkflowDebuggerOverlay",
13735
15520
  WorkflowActivation: "WorkflowActivation",
13736
15521
  TriggerSetupState: "TriggerSetupState",
15522
+ RunTraceContext: "RunTraceContext",
15523
+ TelemetrySpan: "TelemetrySpan",
15524
+ TelemetryArtifact: "TelemetryArtifact",
15525
+ TelemetryMetricPoint: "TelemetryMetricPoint",
13737
15526
  CredentialInstance: "CredentialInstance",
13738
15527
  CredentialSecretMaterial: "CredentialSecretMaterial",
13739
15528
  CredentialOAuth2Material: "CredentialOAuth2Material",
@@ -13754,13 +15543,13 @@ var require_prisma_sqlite_client = /* @__PURE__ */ __commonJS({ "src/infrastruct
13754
15543
  "clientVersion": "7.5.0",
13755
15544
  "engineVersion": "280c870be64f457428992c43c1f6d557fab6e29e",
13756
15545
  "activeProvider": "sqlite",
13757
- "inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n output = \"../src/infrastructure/persistence/generated/prisma-sqlite-client\"\n}\n\ndatasource db {\n provider = \"sqlite\"\n}\n\nmodel Run {\n runId String @id @map(\"run_id\")\n workflowId String @map(\"workflow_id\")\n startedAt String @map(\"started_at\")\n finishedAt String? @map(\"finished_at\")\n status String\n revision Int @default(0)\n parentJson String? @map(\"parent_json\")\n executionOptionsJson String? @map(\"execution_options_json\")\n controlJson String? @map(\"control_json\")\n workflowSnapshotJson String? @map(\"workflow_snapshot_json\")\n policySnapshotJson String? @map(\"policy_snapshot_json\")\n engineCountersJson String? @map(\"engine_counters_json\")\n mutableStateJson String? @map(\"mutable_state_json\")\n outputsByNodeJson String @map(\"outputs_by_node_json\")\n updatedAt String @map(\"updated_at\")\n\n workItems RunWorkItem[]\n executionInstances ExecutionInstance[]\n slotProjection RunSlotProjection?\n\n @@index([workflowId, startedAt])\n @@index([workflowId, status, finishedAt])\n}\n\nmodel RunWorkItem {\n workItemId String @id @map(\"work_item_id\")\n runId String @map(\"run_id\")\n workflowId String @map(\"workflow_id\")\n status String\n targetNodeId String @map(\"target_node_id\")\n batchId String @map(\"batch_id\")\n queueName String? @map(\"queue_name\")\n claimToken String? @map(\"claim_token\")\n claimedBy String? @map(\"claimed_by\")\n claimedAt String? @map(\"claimed_at\")\n availableAt String @map(\"available_at\")\n enqueuedAt String @map(\"enqueued_at\")\n completedAt String? @map(\"completed_at\")\n failedAt String? @map(\"failed_at\")\n sourceInstanceId String? @map(\"source_instance_id\")\n parentInstanceId String? @map(\"parent_instance_id\")\n itemsIn Int @map(\"items_in\")\n inputsByPortJson String @map(\"inputs_by_port_json\")\n errorJson String? @map(\"error_json\")\n\n run Run @relation(fields: [runId], references: [runId], onDelete: Cascade)\n\n @@index([runId, status, availableAt])\n @@index([runId, targetNodeId, batchId])\n}\n\nmodel ExecutionInstance {\n instanceId String @id @map(\"instance_id\")\n runId String @map(\"run_id\")\n workflowId String @map(\"workflow_id\")\n slotNodeId String @map(\"slot_node_id\")\n workflowNodeId String @map(\"workflow_node_id\")\n kind String\n connectionKind String? @map(\"connection_kind\")\n activationId String? @map(\"activation_id\")\n batchId String @map(\"batch_id\")\n runIndex Int @map(\"run_index\")\n parentInstanceId String? @map(\"parent_instance_id\")\n parentRunId String? @map(\"parent_run_id\")\n workerClaimToken String? @map(\"worker_claim_token\")\n status String\n queuedAt String? @map(\"queued_at\")\n startedAt String? @map(\"started_at\")\n finishedAt String? @map(\"finished_at\")\n updatedAt String @map(\"updated_at\")\n itemCount Int @map(\"item_count\")\n inputJson String? @map(\"input_json\")\n outputJson String? @map(\"output_json\")\n errorJson String? @map(\"error_json\")\n inputItemIndicesJson String? @map(\"input_item_indices_json\")\n outputItemCount Int? @map(\"output_item_count\")\n successfulItemCount Int? @map(\"successful_item_count\")\n failedItemCount Int? @map(\"failed_item_count\")\n inputStorageKind String? @map(\"input_storage_kind\")\n outputStorageKind String? @map(\"output_storage_kind\")\n inputBytes Int? @map(\"input_bytes\")\n outputBytes Int? @map(\"output_bytes\")\n inputPreviewJson String? @map(\"input_preview_json\")\n outputPreviewJson String? @map(\"output_preview_json\")\n inputPayloadRef String? @map(\"input_payload_ref\")\n outputPayloadRef String? @map(\"output_payload_ref\")\n inputTruncated Boolean? @map(\"input_truncated\")\n outputTruncated Boolean? @map(\"output_truncated\")\n usedPinnedOutput Boolean? @map(\"used_pinned_output\")\n\n run Run @relation(fields: [runId], references: [runId], onDelete: Cascade)\n\n @@unique([runId, slotNodeId, runIndex])\n @@index([runId, slotNodeId, updatedAt])\n @@index([runId, parentInstanceId, updatedAt])\n @@index([runId, kind, updatedAt])\n}\n\nmodel RunSlotProjection {\n runId String @id @map(\"run_id\")\n workflowId String @map(\"workflow_id\")\n revision Int\n updatedAt String @map(\"updated_at\")\n slotStatesJson String @map(\"slot_states_json\")\n\n run Run @relation(fields: [runId], references: [runId], onDelete: Cascade)\n\n @@index([workflowId, updatedAt])\n}\n\nmodel WorkflowDebuggerOverlay {\n workflowId String @id @map(\"workflow_id\")\n updatedAt String @map(\"updated_at\")\n copiedFromRunId String? @map(\"copied_from_run_id\")\n stateJson String @map(\"state_json\")\n}\n\nmodel WorkflowActivation {\n workflowId String @id @map(\"workflow_id\")\n isActive Boolean @default(false) @map(\"is_active\")\n updatedAt String @map(\"updated_at\")\n}\n\nmodel TriggerSetupState {\n workflowId String @map(\"workflow_id\")\n nodeId String @map(\"node_id\")\n updatedAt String @map(\"updated_at\")\n stateJson String @map(\"state_json\")\n\n @@id([workflowId, nodeId])\n}\n\nmodel CredentialInstance {\n instanceId String @id @map(\"instance_id\")\n typeId String @map(\"type_id\")\n displayName String @map(\"display_name\")\n sourceKind String @map(\"source_kind\")\n publicConfigJson String @map(\"public_config_json\")\n secretRefJson String @map(\"secret_ref_json\")\n tagsJson String @map(\"tags_json\")\n setupStatus String @map(\"setup_status\")\n createdAt String @map(\"created_at\")\n updatedAt String @map(\"updated_at\")\n}\n\nmodel CredentialSecretMaterial {\n instanceId String @id @map(\"instance_id\")\n encryptedJson String @map(\"encrypted_json\")\n encryptionKeyId String @map(\"encryption_key_id\")\n schemaVersion Int @map(\"schema_version\")\n updatedAt String @map(\"updated_at\")\n}\n\nmodel CredentialOAuth2Material {\n instanceId String @id @map(\"instance_id\")\n encryptedJson String @map(\"encrypted_json\")\n encryptionKeyId String @map(\"encryption_key_id\")\n schemaVersion Int @map(\"schema_version\")\n providerId String @map(\"provider_id\")\n connectedEmail String? @map(\"connected_email\")\n connectedAt String? @map(\"connected_at\")\n scopesJson String @map(\"scopes_json\")\n updatedAt String @map(\"updated_at\")\n}\n\nmodel CredentialOAuth2State {\n state String @id\n instanceId String @map(\"instance_id\")\n codeVerifier String? @map(\"code_verifier\")\n providerId String? @map(\"provider_id\")\n requestedScopesJson String @map(\"requested_scopes_json\")\n createdAt String @map(\"created_at\")\n expiresAt String @map(\"expires_at\")\n\n @@index([instanceId])\n @@index([expiresAt])\n}\n\nmodel CredentialBinding {\n workflowId String @map(\"workflow_id\")\n nodeId String @map(\"node_id\")\n slotKey String @map(\"slot_key\")\n instanceId String @map(\"instance_id\")\n updatedAt String @map(\"updated_at\")\n\n @@id([workflowId, nodeId, slotKey])\n @@index([instanceId])\n}\n\nmodel CredentialTestResult {\n testId String @id @map(\"test_id\")\n instanceId String @map(\"instance_id\")\n status String\n message String?\n detailsJson String @map(\"details_json\")\n testedAt String @map(\"tested_at\")\n expiresAt String? @map(\"expires_at\")\n\n @@index([instanceId, testedAt])\n}\n\n/// Better Auth user directory (DB sessions + optional OAuth linking)\nmodel User {\n id String @id @default(cuid())\n name String?\n email String? @unique\n emailVerified Boolean @default(false) @map(\"email_verified\")\n image String?\n passwordHash String? @map(\"password_hash\")\n /// invited | active | inactive (local directory / invite flow)\n accountStatus String @default(\"active\") @map(\"account_status\")\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n accounts Account[]\n sessions Session[]\n invites UserInvite[]\n\n @@map(\"codemation_auth_user\")\n}\n\nmodel UserInvite {\n id String @id @default(cuid())\n userId String @map(\"user_id\")\n tokenHash String @unique @map(\"token_hash\")\n expiresAt DateTime @map(\"expires_at\")\n createdAt DateTime @map(\"created_at\")\n revokedAt DateTime? @map(\"revoked_at\")\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@index([userId])\n @@map(\"codemation_auth_user_invite\")\n}\n\nmodel Account {\n id String @id @default(cuid())\n userId String @map(\"user_id\")\n /// Legacy Auth.js discriminator; Better Auth omits it on create — default keeps OAuth/credential rows valid.\n type String @default(\"oauth\")\n provider String\n providerAccountId String @map(\"provider_account_id\")\n /// Better Auth email/password (credential provider) hash; kept in sync with `User.passwordHash` for local flows.\n password String? @map(\"password\")\n refresh_token String?\n access_token String?\n expires_at Int?\n accessTokenExpiresAt DateTime? @map(\"access_token_expires_at\")\n refreshTokenExpiresAt DateTime? @map(\"refresh_token_expires_at\")\n token_type String?\n scope String?\n id_token String?\n session_state String?\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@unique([provider, providerAccountId])\n @@map(\"codemation_auth_account\")\n}\n\nmodel Session {\n id String @id @default(cuid())\n sessionToken String @unique @map(\"session_token\")\n userId String @map(\"user_id\")\n expires DateTime\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n ipAddress String? @map(\"ip_address\")\n userAgent String? @map(\"user_agent\")\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@map(\"codemation_auth_session\")\n}\n\nmodel VerificationToken {\n id String @id @default(cuid())\n identifier String\n token String\n expires DateTime\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n @@unique([identifier, token])\n @@map(\"codemation_auth_verification_token\")\n}\n"
15546
+ "inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n output = \"../src/infrastructure/persistence/generated/prisma-sqlite-client\"\n}\n\ndatasource db {\n provider = \"sqlite\"\n}\n\nmodel Run {\n runId String @id @map(\"run_id\")\n workflowId String @map(\"workflow_id\")\n startedAt String @map(\"started_at\")\n finishedAt String? @map(\"finished_at\")\n status String\n revision Int @default(0)\n parentJson String? @map(\"parent_json\")\n executionOptionsJson String? @map(\"execution_options_json\")\n controlJson String? @map(\"control_json\")\n workflowSnapshotJson String? @map(\"workflow_snapshot_json\")\n policySnapshotJson String? @map(\"policy_snapshot_json\")\n engineCountersJson String? @map(\"engine_counters_json\")\n mutableStateJson String? @map(\"mutable_state_json\")\n outputsByNodeJson String @map(\"outputs_by_node_json\")\n updatedAt String @map(\"updated_at\")\n\n workItems RunWorkItem[]\n executionInstances ExecutionInstance[]\n slotProjection RunSlotProjection?\n\n @@index([workflowId, startedAt])\n @@index([workflowId, status, finishedAt])\n}\n\nmodel RunWorkItem {\n workItemId String @id @map(\"work_item_id\")\n runId String @map(\"run_id\")\n workflowId String @map(\"workflow_id\")\n status String\n targetNodeId String @map(\"target_node_id\")\n batchId String @map(\"batch_id\")\n queueName String? @map(\"queue_name\")\n claimToken String? @map(\"claim_token\")\n claimedBy String? @map(\"claimed_by\")\n claimedAt String? @map(\"claimed_at\")\n availableAt String @map(\"available_at\")\n enqueuedAt String @map(\"enqueued_at\")\n completedAt String? @map(\"completed_at\")\n failedAt String? @map(\"failed_at\")\n sourceInstanceId String? @map(\"source_instance_id\")\n parentInstanceId String? @map(\"parent_instance_id\")\n itemsIn Int @map(\"items_in\")\n inputsByPortJson String @map(\"inputs_by_port_json\")\n errorJson String? @map(\"error_json\")\n\n run Run @relation(fields: [runId], references: [runId], onDelete: Cascade)\n\n @@index([runId, status, availableAt])\n @@index([runId, targetNodeId, batchId])\n}\n\nmodel ExecutionInstance {\n instanceId String @id @map(\"instance_id\")\n runId String @map(\"run_id\")\n workflowId String @map(\"workflow_id\")\n slotNodeId String @map(\"slot_node_id\")\n workflowNodeId String @map(\"workflow_node_id\")\n kind String\n connectionKind String? @map(\"connection_kind\")\n activationId String? @map(\"activation_id\")\n batchId String @map(\"batch_id\")\n runIndex Int @map(\"run_index\")\n parentInstanceId String? @map(\"parent_instance_id\")\n parentRunId String? @map(\"parent_run_id\")\n workerClaimToken String? @map(\"worker_claim_token\")\n status String\n queuedAt String? @map(\"queued_at\")\n startedAt String? @map(\"started_at\")\n finishedAt String? @map(\"finished_at\")\n updatedAt String @map(\"updated_at\")\n itemCount Int @map(\"item_count\")\n inputJson String? @map(\"input_json\")\n outputJson String? @map(\"output_json\")\n errorJson String? @map(\"error_json\")\n inputItemIndicesJson String? @map(\"input_item_indices_json\")\n outputItemCount Int? @map(\"output_item_count\")\n successfulItemCount Int? @map(\"successful_item_count\")\n failedItemCount Int? @map(\"failed_item_count\")\n inputStorageKind String? @map(\"input_storage_kind\")\n outputStorageKind String? @map(\"output_storage_kind\")\n inputBytes Int? @map(\"input_bytes\")\n outputBytes Int? @map(\"output_bytes\")\n inputPreviewJson String? @map(\"input_preview_json\")\n outputPreviewJson String? @map(\"output_preview_json\")\n inputPayloadRef String? @map(\"input_payload_ref\")\n outputPayloadRef String? @map(\"output_payload_ref\")\n inputTruncated Boolean? @map(\"input_truncated\")\n outputTruncated Boolean? @map(\"output_truncated\")\n usedPinnedOutput Boolean? @map(\"used_pinned_output\")\n\n run Run @relation(fields: [runId], references: [runId], onDelete: Cascade)\n\n @@unique([runId, slotNodeId, runIndex])\n @@index([runId, slotNodeId, updatedAt])\n @@index([runId, parentInstanceId, updatedAt])\n @@index([runId, kind, updatedAt])\n}\n\nmodel RunSlotProjection {\n runId String @id @map(\"run_id\")\n workflowId String @map(\"workflow_id\")\n revision Int\n updatedAt String @map(\"updated_at\")\n slotStatesJson String @map(\"slot_states_json\")\n\n run Run @relation(fields: [runId], references: [runId], onDelete: Cascade)\n\n @@index([workflowId, updatedAt])\n}\n\nmodel WorkflowDebuggerOverlay {\n workflowId String @id @map(\"workflow_id\")\n updatedAt String @map(\"updated_at\")\n copiedFromRunId String? @map(\"copied_from_run_id\")\n stateJson String @map(\"state_json\")\n}\n\nmodel WorkflowActivation {\n workflowId String @id @map(\"workflow_id\")\n isActive Boolean @default(false) @map(\"is_active\")\n updatedAt String @map(\"updated_at\")\n}\n\nmodel TriggerSetupState {\n workflowId String @map(\"workflow_id\")\n nodeId String @map(\"node_id\")\n updatedAt String @map(\"updated_at\")\n stateJson String @map(\"state_json\")\n\n @@id([workflowId, nodeId])\n}\n\nmodel RunTraceContext {\n runId String @id @map(\"run_id\")\n workflowId String @map(\"workflow_id\")\n traceId String @unique @map(\"trace_id\")\n rootSpanId String @map(\"root_span_id\")\n serviceName String? @map(\"service_name\")\n createdAt String @map(\"created_at\")\n expiresAt String? @map(\"expires_at\")\n\n @@index([workflowId, createdAt])\n}\n\nmodel TelemetrySpan {\n telemetrySpanId String @id @map(\"telemetry_span_id\")\n traceId String @map(\"trace_id\")\n spanId String @map(\"span_id\")\n parentSpanId String? @map(\"parent_span_id\")\n runId String @map(\"run_id\")\n workflowId String @map(\"workflow_id\")\n nodeId String? @map(\"node_id\")\n activationId String? @map(\"activation_id\")\n connectionInvocationId String? @map(\"connection_invocation_id\")\n name String\n kind String\n status String?\n statusMessage String? @map(\"status_message\")\n startTime String? @map(\"start_time\")\n endTime String? @map(\"end_time\")\n workflowFolder String? @map(\"workflow_folder\")\n nodeType String? @map(\"node_type\")\n nodeRole String? @map(\"node_role\")\n modelName String? @map(\"model_name\")\n attributesJson String? @map(\"attributes_json\")\n eventsJson String? @map(\"events_json\")\n retentionExpiresAt String? @map(\"retention_expires_at\")\n updatedAt String @map(\"updated_at\")\n\n @@unique([traceId, spanId])\n @@index([traceId, startTime])\n @@index([workflowId, endTime])\n @@index([workflowId, status, endTime])\n @@index([runId, endTime])\n @@index([modelName, endTime])\n @@index([connectionInvocationId])\n @@index([retentionExpiresAt])\n}\n\nmodel TelemetryArtifact {\n artifactId String @id @map(\"artifact_id\")\n traceId String @map(\"trace_id\")\n spanId String @map(\"span_id\")\n runId String @map(\"run_id\")\n workflowId String @map(\"workflow_id\")\n nodeId String? @map(\"node_id\")\n activationId String? @map(\"activation_id\")\n kind String\n contentType String @map(\"content_type\")\n previewText String? @map(\"preview_text\")\n previewJson String? @map(\"preview_json\")\n payloadText String? @map(\"payload_text\")\n payloadJson String? @map(\"payload_json\")\n bytes Int?\n truncated Boolean?\n createdAt String @map(\"created_at\")\n expiresAt String? @map(\"expires_at\")\n retentionExpiresAt String? @map(\"retention_expires_at\")\n\n @@index([traceId, createdAt])\n @@index([spanId, createdAt])\n @@index([runId, createdAt])\n @@index([retentionExpiresAt])\n}\n\nmodel TelemetryMetricPoint {\n metricPointId String @id @map(\"metric_point_id\")\n traceId String? @map(\"trace_id\")\n spanId String? @map(\"span_id\")\n runId String? @map(\"run_id\")\n workflowId String @map(\"workflow_id\")\n nodeId String? @map(\"node_id\")\n activationId String? @map(\"activation_id\")\n metricName String @map(\"metric_name\")\n value Float\n unit String?\n observedAt String @map(\"observed_at\")\n workflowFolder String? @map(\"workflow_folder\")\n nodeType String? @map(\"node_type\")\n nodeRole String? @map(\"node_role\")\n modelName String? @map(\"model_name\")\n dimensionsJson String? @map(\"dimensions_json\")\n retentionExpiresAt String? @map(\"retention_expires_at\")\n\n @@index([workflowId, observedAt])\n @@index([workflowId, metricName, observedAt])\n @@index([runId, observedAt])\n @@index([traceId, observedAt])\n @@index([modelName, observedAt])\n @@index([retentionExpiresAt])\n}\n\nmodel CredentialInstance {\n instanceId String @id @map(\"instance_id\")\n typeId String @map(\"type_id\")\n displayName String @map(\"display_name\")\n sourceKind String @map(\"source_kind\")\n publicConfigJson String @map(\"public_config_json\")\n secretRefJson String @map(\"secret_ref_json\")\n tagsJson String @map(\"tags_json\")\n setupStatus String @map(\"setup_status\")\n createdAt String @map(\"created_at\")\n updatedAt String @map(\"updated_at\")\n}\n\nmodel CredentialSecretMaterial {\n instanceId String @id @map(\"instance_id\")\n encryptedJson String @map(\"encrypted_json\")\n encryptionKeyId String @map(\"encryption_key_id\")\n schemaVersion Int @map(\"schema_version\")\n updatedAt String @map(\"updated_at\")\n}\n\nmodel CredentialOAuth2Material {\n instanceId String @id @map(\"instance_id\")\n encryptedJson String @map(\"encrypted_json\")\n encryptionKeyId String @map(\"encryption_key_id\")\n schemaVersion Int @map(\"schema_version\")\n providerId String @map(\"provider_id\")\n connectedEmail String? @map(\"connected_email\")\n connectedAt String? @map(\"connected_at\")\n scopesJson String @map(\"scopes_json\")\n updatedAt String @map(\"updated_at\")\n}\n\nmodel CredentialOAuth2State {\n state String @id\n instanceId String @map(\"instance_id\")\n codeVerifier String? @map(\"code_verifier\")\n providerId String? @map(\"provider_id\")\n requestedScopesJson String @map(\"requested_scopes_json\")\n createdAt String @map(\"created_at\")\n expiresAt String @map(\"expires_at\")\n\n @@index([instanceId])\n @@index([expiresAt])\n}\n\nmodel CredentialBinding {\n workflowId String @map(\"workflow_id\")\n nodeId String @map(\"node_id\")\n slotKey String @map(\"slot_key\")\n instanceId String @map(\"instance_id\")\n updatedAt String @map(\"updated_at\")\n\n @@id([workflowId, nodeId, slotKey])\n @@index([instanceId])\n}\n\nmodel CredentialTestResult {\n testId String @id @map(\"test_id\")\n instanceId String @map(\"instance_id\")\n status String\n message String?\n detailsJson String @map(\"details_json\")\n testedAt String @map(\"tested_at\")\n expiresAt String? @map(\"expires_at\")\n\n @@index([instanceId, testedAt])\n}\n\n/// Better Auth user directory (DB sessions + optional OAuth linking)\nmodel User {\n id String @id @default(cuid())\n name String?\n email String? @unique\n emailVerified Boolean @default(false) @map(\"email_verified\")\n image String?\n passwordHash String? @map(\"password_hash\")\n /// invited | active | inactive (local directory / invite flow)\n accountStatus String @default(\"active\") @map(\"account_status\")\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n accounts Account[]\n sessions Session[]\n invites UserInvite[]\n\n @@map(\"codemation_auth_user\")\n}\n\nmodel UserInvite {\n id String @id @default(cuid())\n userId String @map(\"user_id\")\n tokenHash String @unique @map(\"token_hash\")\n expiresAt DateTime @map(\"expires_at\")\n createdAt DateTime @map(\"created_at\")\n revokedAt DateTime? @map(\"revoked_at\")\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@index([userId])\n @@map(\"codemation_auth_user_invite\")\n}\n\nmodel Account {\n id String @id @default(cuid())\n userId String @map(\"user_id\")\n /// Legacy Auth.js discriminator; Better Auth omits it on create — default keeps OAuth/credential rows valid.\n type String @default(\"oauth\")\n provider String\n providerAccountId String @map(\"provider_account_id\")\n /// Better Auth email/password (credential provider) hash; kept in sync with `User.passwordHash` for local flows.\n password String? @map(\"password\")\n refresh_token String?\n access_token String?\n expires_at Int?\n accessTokenExpiresAt DateTime? @map(\"access_token_expires_at\")\n refreshTokenExpiresAt DateTime? @map(\"refresh_token_expires_at\")\n token_type String?\n scope String?\n id_token String?\n session_state String?\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@unique([provider, providerAccountId])\n @@map(\"codemation_auth_account\")\n}\n\nmodel Session {\n id String @id @default(cuid())\n sessionToken String @unique @map(\"session_token\")\n userId String @map(\"user_id\")\n expires DateTime\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n ipAddress String? @map(\"ip_address\")\n userAgent String? @map(\"user_agent\")\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@map(\"codemation_auth_session\")\n}\n\nmodel VerificationToken {\n id String @id @default(cuid())\n identifier String\n token String\n expires DateTime\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n @@unique([identifier, token])\n @@map(\"codemation_auth_verification_token\")\n}\n"
13758
15547
  };
13759
- config.runtimeDataModel = JSON.parse("{\"models\":{\"Run\":{\"fields\":[{\"name\":\"runId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"run_id\"},{\"name\":\"workflowId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_id\"},{\"name\":\"startedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"started_at\"},{\"name\":\"finishedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"finished_at\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"revision\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"parentJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"parent_json\"},{\"name\":\"executionOptionsJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"execution_options_json\"},{\"name\":\"controlJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"control_json\"},{\"name\":\"workflowSnapshotJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_snapshot_json\"},{\"name\":\"policySnapshotJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"policy_snapshot_json\"},{\"name\":\"engineCountersJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"engine_counters_json\"},{\"name\":\"mutableStateJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"mutable_state_json\"},{\"name\":\"outputsByNodeJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"outputs_by_node_json\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"updated_at\"},{\"name\":\"workItems\",\"kind\":\"object\",\"type\":\"RunWorkItem\",\"relationName\":\"RunToRunWorkItem\"},{\"name\":\"executionInstances\",\"kind\":\"object\",\"type\":\"ExecutionInstance\",\"relationName\":\"ExecutionInstanceToRun\"},{\"name\":\"slotProjection\",\"kind\":\"object\",\"type\":\"RunSlotProjection\",\"relationName\":\"RunToRunSlotProjection\"}],\"dbName\":null},\"RunWorkItem\":{\"fields\":[{\"name\":\"workItemId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"work_item_id\"},{\"name\":\"runId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"run_id\"},{\"name\":\"workflowId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_id\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"targetNodeId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"target_node_id\"},{\"name\":\"batchId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"batch_id\"},{\"name\":\"queueName\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"queue_name\"},{\"name\":\"claimToken\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"claim_token\"},{\"name\":\"claimedBy\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"claimed_by\"},{\"name\":\"claimedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"claimed_at\"},{\"name\":\"availableAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"available_at\"},{\"name\":\"enqueuedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"enqueued_at\"},{\"name\":\"completedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"completed_at\"},{\"name\":\"failedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"failed_at\"},{\"name\":\"sourceInstanceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"source_instance_id\"},{\"name\":\"parentInstanceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"parent_instance_id\"},{\"name\":\"itemsIn\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"items_in\"},{\"name\":\"inputsByPortJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"inputs_by_port_json\"},{\"name\":\"errorJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"error_json\"},{\"name\":\"run\",\"kind\":\"object\",\"type\":\"Run\",\"relationName\":\"RunToRunWorkItem\"}],\"dbName\":null},\"ExecutionInstance\":{\"fields\":[{\"name\":\"instanceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"instance_id\"},{\"name\":\"runId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"run_id\"},{\"name\":\"workflowId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_id\"},{\"name\":\"slotNodeId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"slot_node_id\"},{\"name\":\"workflowNodeId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_node_id\"},{\"name\":\"kind\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"connectionKind\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"connection_kind\"},{\"name\":\"activationId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"activation_id\"},{\"name\":\"batchId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"batch_id\"},{\"name\":\"runIndex\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"run_index\"},{\"name\":\"parentInstanceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"parent_instance_id\"},{\"name\":\"parentRunId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"parent_run_id\"},{\"name\":\"workerClaimToken\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"worker_claim_token\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"queuedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"queued_at\"},{\"name\":\"startedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"started_at\"},{\"name\":\"finishedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"finished_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"updated_at\"},{\"name\":\"itemCount\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"item_count\"},{\"name\":\"inputJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"input_json\"},{\"name\":\"outputJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"output_json\"},{\"name\":\"errorJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"error_json\"},{\"name\":\"inputItemIndicesJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"input_item_indices_json\"},{\"name\":\"outputItemCount\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"output_item_count\"},{\"name\":\"successfulItemCount\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"successful_item_count\"},{\"name\":\"failedItemCount\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"failed_item_count\"},{\"name\":\"inputStorageKind\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"input_storage_kind\"},{\"name\":\"outputStorageKind\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"output_storage_kind\"},{\"name\":\"inputBytes\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"input_bytes\"},{\"name\":\"outputBytes\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"output_bytes\"},{\"name\":\"inputPreviewJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"input_preview_json\"},{\"name\":\"outputPreviewJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"output_preview_json\"},{\"name\":\"inputPayloadRef\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"input_payload_ref\"},{\"name\":\"outputPayloadRef\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"output_payload_ref\"},{\"name\":\"inputTruncated\",\"kind\":\"scalar\",\"type\":\"Boolean\",\"dbName\":\"input_truncated\"},{\"name\":\"outputTruncated\",\"kind\":\"scalar\",\"type\":\"Boolean\",\"dbName\":\"output_truncated\"},{\"name\":\"usedPinnedOutput\",\"kind\":\"scalar\",\"type\":\"Boolean\",\"dbName\":\"used_pinned_output\"},{\"name\":\"run\",\"kind\":\"object\",\"type\":\"Run\",\"relationName\":\"ExecutionInstanceToRun\"}],\"dbName\":null},\"RunSlotProjection\":{\"fields\":[{\"name\":\"runId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"run_id\"},{\"name\":\"workflowId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_id\"},{\"name\":\"revision\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"updated_at\"},{\"name\":\"slotStatesJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"slot_states_json\"},{\"name\":\"run\",\"kind\":\"object\",\"type\":\"Run\",\"relationName\":\"RunToRunSlotProjection\"}],\"dbName\":null},\"WorkflowDebuggerOverlay\":{\"fields\":[{\"name\":\"workflowId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_id\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"updated_at\"},{\"name\":\"copiedFromRunId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"copied_from_run_id\"},{\"name\":\"stateJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"state_json\"}],\"dbName\":null},\"WorkflowActivation\":{\"fields\":[{\"name\":\"workflowId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_id\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\",\"dbName\":\"is_active\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"updated_at\"}],\"dbName\":null},\"TriggerSetupState\":{\"fields\":[{\"name\":\"workflowId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_id\"},{\"name\":\"nodeId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"node_id\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"updated_at\"},{\"name\":\"stateJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"state_json\"}],\"dbName\":null},\"CredentialInstance\":{\"fields\":[{\"name\":\"instanceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"instance_id\"},{\"name\":\"typeId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"type_id\"},{\"name\":\"displayName\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"display_name\"},{\"name\":\"sourceKind\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"source_kind\"},{\"name\":\"publicConfigJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"public_config_json\"},{\"name\":\"secretRefJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"secret_ref_json\"},{\"name\":\"tagsJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"tags_json\"},{\"name\":\"setupStatus\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"setup_status\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"updated_at\"}],\"dbName\":null},\"CredentialSecretMaterial\":{\"fields\":[{\"name\":\"instanceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"instance_id\"},{\"name\":\"encryptedJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"encrypted_json\"},{\"name\":\"encryptionKeyId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"encryption_key_id\"},{\"name\":\"schemaVersion\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"schema_version\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"updated_at\"}],\"dbName\":null},\"CredentialOAuth2Material\":{\"fields\":[{\"name\":\"instanceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"instance_id\"},{\"name\":\"encryptedJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"encrypted_json\"},{\"name\":\"encryptionKeyId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"encryption_key_id\"},{\"name\":\"schemaVersion\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"schema_version\"},{\"name\":\"providerId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"provider_id\"},{\"name\":\"connectedEmail\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"connected_email\"},{\"name\":\"connectedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"connected_at\"},{\"name\":\"scopesJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"scopes_json\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"updated_at\"}],\"dbName\":null},\"CredentialOAuth2State\":{\"fields\":[{\"name\":\"state\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"instanceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"instance_id\"},{\"name\":\"codeVerifier\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"code_verifier\"},{\"name\":\"providerId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"provider_id\"},{\"name\":\"requestedScopesJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"requested_scopes_json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"created_at\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"expires_at\"}],\"dbName\":null},\"CredentialBinding\":{\"fields\":[{\"name\":\"workflowId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_id\"},{\"name\":\"nodeId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"node_id\"},{\"name\":\"slotKey\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"slot_key\"},{\"name\":\"instanceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"instance_id\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"updated_at\"}],\"dbName\":null},\"CredentialTestResult\":{\"fields\":[{\"name\":\"testId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"test_id\"},{\"name\":\"instanceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"instance_id\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"message\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"detailsJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"details_json\"},{\"name\":\"testedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"tested_at\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"expires_at\"}],\"dbName\":null},\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"emailVerified\",\"kind\":\"scalar\",\"type\":\"Boolean\",\"dbName\":\"email_verified\"},{\"name\":\"image\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"passwordHash\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"password_hash\"},{\"name\":\"accountStatus\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"account_status\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"accounts\",\"kind\":\"object\",\"type\":\"Account\",\"relationName\":\"AccountToUser\"},{\"name\":\"sessions\",\"kind\":\"object\",\"type\":\"Session\",\"relationName\":\"SessionToUser\"},{\"name\":\"invites\",\"kind\":\"object\",\"type\":\"UserInvite\",\"relationName\":\"UserToUserInvite\"}],\"dbName\":\"codemation_auth_user\"},\"UserInvite\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"user_id\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"token_hash\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"expires_at\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"revokedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"revoked_at\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserInvite\"}],\"dbName\":\"codemation_auth_user_invite\"},\"Account\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"user_id\"},{\"name\":\"type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"provider\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"providerAccountId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"provider_account_id\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"password\"},{\"name\":\"refresh_token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"access_token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expires_at\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"accessTokenExpiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"access_token_expires_at\"},{\"name\":\"refreshTokenExpiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"refresh_token_expires_at\"},{\"name\":\"token_type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"scope\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"id_token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"session_state\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"AccountToUser\"}],\"dbName\":\"codemation_auth_account\"},\"Session\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionToken\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"session_token\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"user_id\"},{\"name\":\"expires\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"ipAddress\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"ip_address\"},{\"name\":\"userAgent\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"user_agent\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"SessionToUser\"}],\"dbName\":\"codemation_auth_session\"},\"VerificationToken\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"identifier\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expires\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"}],\"dbName\":\"codemation_auth_verification_token\"}},\"enums\":{},\"types\":{}}");
15548
+ config.runtimeDataModel = JSON.parse("{\"models\":{\"Run\":{\"fields\":[{\"name\":\"runId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"run_id\"},{\"name\":\"workflowId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_id\"},{\"name\":\"startedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"started_at\"},{\"name\":\"finishedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"finished_at\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"revision\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"parentJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"parent_json\"},{\"name\":\"executionOptionsJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"execution_options_json\"},{\"name\":\"controlJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"control_json\"},{\"name\":\"workflowSnapshotJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_snapshot_json\"},{\"name\":\"policySnapshotJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"policy_snapshot_json\"},{\"name\":\"engineCountersJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"engine_counters_json\"},{\"name\":\"mutableStateJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"mutable_state_json\"},{\"name\":\"outputsByNodeJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"outputs_by_node_json\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"updated_at\"},{\"name\":\"workItems\",\"kind\":\"object\",\"type\":\"RunWorkItem\",\"relationName\":\"RunToRunWorkItem\"},{\"name\":\"executionInstances\",\"kind\":\"object\",\"type\":\"ExecutionInstance\",\"relationName\":\"ExecutionInstanceToRun\"},{\"name\":\"slotProjection\",\"kind\":\"object\",\"type\":\"RunSlotProjection\",\"relationName\":\"RunToRunSlotProjection\"}],\"dbName\":null},\"RunWorkItem\":{\"fields\":[{\"name\":\"workItemId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"work_item_id\"},{\"name\":\"runId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"run_id\"},{\"name\":\"workflowId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_id\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"targetNodeId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"target_node_id\"},{\"name\":\"batchId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"batch_id\"},{\"name\":\"queueName\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"queue_name\"},{\"name\":\"claimToken\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"claim_token\"},{\"name\":\"claimedBy\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"claimed_by\"},{\"name\":\"claimedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"claimed_at\"},{\"name\":\"availableAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"available_at\"},{\"name\":\"enqueuedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"enqueued_at\"},{\"name\":\"completedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"completed_at\"},{\"name\":\"failedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"failed_at\"},{\"name\":\"sourceInstanceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"source_instance_id\"},{\"name\":\"parentInstanceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"parent_instance_id\"},{\"name\":\"itemsIn\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"items_in\"},{\"name\":\"inputsByPortJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"inputs_by_port_json\"},{\"name\":\"errorJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"error_json\"},{\"name\":\"run\",\"kind\":\"object\",\"type\":\"Run\",\"relationName\":\"RunToRunWorkItem\"}],\"dbName\":null},\"ExecutionInstance\":{\"fields\":[{\"name\":\"instanceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"instance_id\"},{\"name\":\"runId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"run_id\"},{\"name\":\"workflowId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_id\"},{\"name\":\"slotNodeId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"slot_node_id\"},{\"name\":\"workflowNodeId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_node_id\"},{\"name\":\"kind\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"connectionKind\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"connection_kind\"},{\"name\":\"activationId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"activation_id\"},{\"name\":\"batchId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"batch_id\"},{\"name\":\"runIndex\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"run_index\"},{\"name\":\"parentInstanceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"parent_instance_id\"},{\"name\":\"parentRunId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"parent_run_id\"},{\"name\":\"workerClaimToken\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"worker_claim_token\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"queuedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"queued_at\"},{\"name\":\"startedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"started_at\"},{\"name\":\"finishedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"finished_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"updated_at\"},{\"name\":\"itemCount\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"item_count\"},{\"name\":\"inputJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"input_json\"},{\"name\":\"outputJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"output_json\"},{\"name\":\"errorJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"error_json\"},{\"name\":\"inputItemIndicesJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"input_item_indices_json\"},{\"name\":\"outputItemCount\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"output_item_count\"},{\"name\":\"successfulItemCount\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"successful_item_count\"},{\"name\":\"failedItemCount\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"failed_item_count\"},{\"name\":\"inputStorageKind\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"input_storage_kind\"},{\"name\":\"outputStorageKind\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"output_storage_kind\"},{\"name\":\"inputBytes\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"input_bytes\"},{\"name\":\"outputBytes\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"output_bytes\"},{\"name\":\"inputPreviewJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"input_preview_json\"},{\"name\":\"outputPreviewJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"output_preview_json\"},{\"name\":\"inputPayloadRef\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"input_payload_ref\"},{\"name\":\"outputPayloadRef\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"output_payload_ref\"},{\"name\":\"inputTruncated\",\"kind\":\"scalar\",\"type\":\"Boolean\",\"dbName\":\"input_truncated\"},{\"name\":\"outputTruncated\",\"kind\":\"scalar\",\"type\":\"Boolean\",\"dbName\":\"output_truncated\"},{\"name\":\"usedPinnedOutput\",\"kind\":\"scalar\",\"type\":\"Boolean\",\"dbName\":\"used_pinned_output\"},{\"name\":\"run\",\"kind\":\"object\",\"type\":\"Run\",\"relationName\":\"ExecutionInstanceToRun\"}],\"dbName\":null},\"RunSlotProjection\":{\"fields\":[{\"name\":\"runId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"run_id\"},{\"name\":\"workflowId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_id\"},{\"name\":\"revision\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"updated_at\"},{\"name\":\"slotStatesJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"slot_states_json\"},{\"name\":\"run\",\"kind\":\"object\",\"type\":\"Run\",\"relationName\":\"RunToRunSlotProjection\"}],\"dbName\":null},\"WorkflowDebuggerOverlay\":{\"fields\":[{\"name\":\"workflowId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_id\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"updated_at\"},{\"name\":\"copiedFromRunId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"copied_from_run_id\"},{\"name\":\"stateJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"state_json\"}],\"dbName\":null},\"WorkflowActivation\":{\"fields\":[{\"name\":\"workflowId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_id\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\",\"dbName\":\"is_active\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"updated_at\"}],\"dbName\":null},\"TriggerSetupState\":{\"fields\":[{\"name\":\"workflowId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_id\"},{\"name\":\"nodeId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"node_id\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"updated_at\"},{\"name\":\"stateJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"state_json\"}],\"dbName\":null},\"RunTraceContext\":{\"fields\":[{\"name\":\"runId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"run_id\"},{\"name\":\"workflowId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_id\"},{\"name\":\"traceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"trace_id\"},{\"name\":\"rootSpanId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"root_span_id\"},{\"name\":\"serviceName\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"service_name\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"created_at\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"expires_at\"}],\"dbName\":null},\"TelemetrySpan\":{\"fields\":[{\"name\":\"telemetrySpanId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"telemetry_span_id\"},{\"name\":\"traceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"trace_id\"},{\"name\":\"spanId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"span_id\"},{\"name\":\"parentSpanId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"parent_span_id\"},{\"name\":\"runId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"run_id\"},{\"name\":\"workflowId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_id\"},{\"name\":\"nodeId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"node_id\"},{\"name\":\"activationId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"activation_id\"},{\"name\":\"connectionInvocationId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"connection_invocation_id\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"kind\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"statusMessage\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"status_message\"},{\"name\":\"startTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"start_time\"},{\"name\":\"endTime\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"end_time\"},{\"name\":\"workflowFolder\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_folder\"},{\"name\":\"nodeType\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"node_type\"},{\"name\":\"nodeRole\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"node_role\"},{\"name\":\"modelName\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"model_name\"},{\"name\":\"attributesJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"attributes_json\"},{\"name\":\"eventsJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"events_json\"},{\"name\":\"retentionExpiresAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"retention_expires_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"updated_at\"}],\"dbName\":null},\"TelemetryArtifact\":{\"fields\":[{\"name\":\"artifactId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"artifact_id\"},{\"name\":\"traceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"trace_id\"},{\"name\":\"spanId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"span_id\"},{\"name\":\"runId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"run_id\"},{\"name\":\"workflowId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_id\"},{\"name\":\"nodeId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"node_id\"},{\"name\":\"activationId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"activation_id\"},{\"name\":\"kind\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"contentType\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"content_type\"},{\"name\":\"previewText\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"preview_text\"},{\"name\":\"previewJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"preview_json\"},{\"name\":\"payloadText\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"payload_text\"},{\"name\":\"payloadJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"payload_json\"},{\"name\":\"bytes\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"truncated\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"created_at\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"expires_at\"},{\"name\":\"retentionExpiresAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"retention_expires_at\"}],\"dbName\":null},\"TelemetryMetricPoint\":{\"fields\":[{\"name\":\"metricPointId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"metric_point_id\"},{\"name\":\"traceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"trace_id\"},{\"name\":\"spanId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"span_id\"},{\"name\":\"runId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"run_id\"},{\"name\":\"workflowId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_id\"},{\"name\":\"nodeId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"node_id\"},{\"name\":\"activationId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"activation_id\"},{\"name\":\"metricName\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"metric_name\"},{\"name\":\"value\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"unit\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"observedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"observed_at\"},{\"name\":\"workflowFolder\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_folder\"},{\"name\":\"nodeType\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"node_type\"},{\"name\":\"nodeRole\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"node_role\"},{\"name\":\"modelName\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"model_name\"},{\"name\":\"dimensionsJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"dimensions_json\"},{\"name\":\"retentionExpiresAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"retention_expires_at\"}],\"dbName\":null},\"CredentialInstance\":{\"fields\":[{\"name\":\"instanceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"instance_id\"},{\"name\":\"typeId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"type_id\"},{\"name\":\"displayName\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"display_name\"},{\"name\":\"sourceKind\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"source_kind\"},{\"name\":\"publicConfigJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"public_config_json\"},{\"name\":\"secretRefJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"secret_ref_json\"},{\"name\":\"tagsJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"tags_json\"},{\"name\":\"setupStatus\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"setup_status\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"updated_at\"}],\"dbName\":null},\"CredentialSecretMaterial\":{\"fields\":[{\"name\":\"instanceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"instance_id\"},{\"name\":\"encryptedJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"encrypted_json\"},{\"name\":\"encryptionKeyId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"encryption_key_id\"},{\"name\":\"schemaVersion\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"schema_version\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"updated_at\"}],\"dbName\":null},\"CredentialOAuth2Material\":{\"fields\":[{\"name\":\"instanceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"instance_id\"},{\"name\":\"encryptedJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"encrypted_json\"},{\"name\":\"encryptionKeyId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"encryption_key_id\"},{\"name\":\"schemaVersion\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"schema_version\"},{\"name\":\"providerId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"provider_id\"},{\"name\":\"connectedEmail\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"connected_email\"},{\"name\":\"connectedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"connected_at\"},{\"name\":\"scopesJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"scopes_json\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"updated_at\"}],\"dbName\":null},\"CredentialOAuth2State\":{\"fields\":[{\"name\":\"state\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"instanceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"instance_id\"},{\"name\":\"codeVerifier\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"code_verifier\"},{\"name\":\"providerId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"provider_id\"},{\"name\":\"requestedScopesJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"requested_scopes_json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"created_at\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"expires_at\"}],\"dbName\":null},\"CredentialBinding\":{\"fields\":[{\"name\":\"workflowId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"workflow_id\"},{\"name\":\"nodeId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"node_id\"},{\"name\":\"slotKey\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"slot_key\"},{\"name\":\"instanceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"instance_id\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"updated_at\"}],\"dbName\":null},\"CredentialTestResult\":{\"fields\":[{\"name\":\"testId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"test_id\"},{\"name\":\"instanceId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"instance_id\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"message\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"detailsJson\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"details_json\"},{\"name\":\"testedAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"tested_at\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"expires_at\"}],\"dbName\":null},\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"emailVerified\",\"kind\":\"scalar\",\"type\":\"Boolean\",\"dbName\":\"email_verified\"},{\"name\":\"image\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"passwordHash\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"password_hash\"},{\"name\":\"accountStatus\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"account_status\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"accounts\",\"kind\":\"object\",\"type\":\"Account\",\"relationName\":\"AccountToUser\"},{\"name\":\"sessions\",\"kind\":\"object\",\"type\":\"Session\",\"relationName\":\"SessionToUser\"},{\"name\":\"invites\",\"kind\":\"object\",\"type\":\"UserInvite\",\"relationName\":\"UserToUserInvite\"}],\"dbName\":\"codemation_auth_user\"},\"UserInvite\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"user_id\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"token_hash\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"expires_at\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"revokedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"revoked_at\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserInvite\"}],\"dbName\":\"codemation_auth_user_invite\"},\"Account\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"user_id\"},{\"name\":\"type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"provider\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"providerAccountId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"provider_account_id\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"password\"},{\"name\":\"refresh_token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"access_token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expires_at\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"accessTokenExpiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"access_token_expires_at\"},{\"name\":\"refreshTokenExpiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"refresh_token_expires_at\"},{\"name\":\"token_type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"scope\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"id_token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"session_state\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"AccountToUser\"}],\"dbName\":\"codemation_auth_account\"},\"Session\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionToken\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"session_token\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"user_id\"},{\"name\":\"expires\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"ipAddress\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"ip_address\"},{\"name\":\"userAgent\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"user_agent\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"SessionToUser\"}],\"dbName\":\"codemation_auth_session\"},\"VerificationToken\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"identifier\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expires\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"}],\"dbName\":\"codemation_auth_verification_token\"}},\"enums\":{},\"types\":{}}");
13760
15549
  defineDmmfProperty(exports.Prisma, config.runtimeDataModel);
13761
15550
  config.parameterizationSchema = {
13762
- strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"run\",\"workItems\",\"executionInstances\",\"slotProjection\",\"_count\",\"Run.findUnique\",\"Run.findUniqueOrThrow\",\"Run.findFirst\",\"Run.findFirstOrThrow\",\"Run.findMany\",\"data\",\"Run.createOne\",\"Run.createMany\",\"Run.createManyAndReturn\",\"Run.updateOne\",\"Run.updateMany\",\"Run.updateManyAndReturn\",\"create\",\"update\",\"Run.upsertOne\",\"Run.deleteOne\",\"Run.deleteMany\",\"having\",\"_avg\",\"_sum\",\"_min\",\"_max\",\"Run.groupBy\",\"Run.aggregate\",\"RunWorkItem.findUnique\",\"RunWorkItem.findUniqueOrThrow\",\"RunWorkItem.findFirst\",\"RunWorkItem.findFirstOrThrow\",\"RunWorkItem.findMany\",\"RunWorkItem.createOne\",\"RunWorkItem.createMany\",\"RunWorkItem.createManyAndReturn\",\"RunWorkItem.updateOne\",\"RunWorkItem.updateMany\",\"RunWorkItem.updateManyAndReturn\",\"RunWorkItem.upsertOne\",\"RunWorkItem.deleteOne\",\"RunWorkItem.deleteMany\",\"RunWorkItem.groupBy\",\"RunWorkItem.aggregate\",\"ExecutionInstance.findUnique\",\"ExecutionInstance.findUniqueOrThrow\",\"ExecutionInstance.findFirst\",\"ExecutionInstance.findFirstOrThrow\",\"ExecutionInstance.findMany\",\"ExecutionInstance.createOne\",\"ExecutionInstance.createMany\",\"ExecutionInstance.createManyAndReturn\",\"ExecutionInstance.updateOne\",\"ExecutionInstance.updateMany\",\"ExecutionInstance.updateManyAndReturn\",\"ExecutionInstance.upsertOne\",\"ExecutionInstance.deleteOne\",\"ExecutionInstance.deleteMany\",\"ExecutionInstance.groupBy\",\"ExecutionInstance.aggregate\",\"RunSlotProjection.findUnique\",\"RunSlotProjection.findUniqueOrThrow\",\"RunSlotProjection.findFirst\",\"RunSlotProjection.findFirstOrThrow\",\"RunSlotProjection.findMany\",\"RunSlotProjection.createOne\",\"RunSlotProjection.createMany\",\"RunSlotProjection.createManyAndReturn\",\"RunSlotProjection.updateOne\",\"RunSlotProjection.updateMany\",\"RunSlotProjection.updateManyAndReturn\",\"RunSlotProjection.upsertOne\",\"RunSlotProjection.deleteOne\",\"RunSlotProjection.deleteMany\",\"RunSlotProjection.groupBy\",\"RunSlotProjection.aggregate\",\"WorkflowDebuggerOverlay.findUnique\",\"WorkflowDebuggerOverlay.findUniqueOrThrow\",\"WorkflowDebuggerOverlay.findFirst\",\"WorkflowDebuggerOverlay.findFirstOrThrow\",\"WorkflowDebuggerOverlay.findMany\",\"WorkflowDebuggerOverlay.createOne\",\"WorkflowDebuggerOverlay.createMany\",\"WorkflowDebuggerOverlay.createManyAndReturn\",\"WorkflowDebuggerOverlay.updateOne\",\"WorkflowDebuggerOverlay.updateMany\",\"WorkflowDebuggerOverlay.updateManyAndReturn\",\"WorkflowDebuggerOverlay.upsertOne\",\"WorkflowDebuggerOverlay.deleteOne\",\"WorkflowDebuggerOverlay.deleteMany\",\"WorkflowDebuggerOverlay.groupBy\",\"WorkflowDebuggerOverlay.aggregate\",\"WorkflowActivation.findUnique\",\"WorkflowActivation.findUniqueOrThrow\",\"WorkflowActivation.findFirst\",\"WorkflowActivation.findFirstOrThrow\",\"WorkflowActivation.findMany\",\"WorkflowActivation.createOne\",\"WorkflowActivation.createMany\",\"WorkflowActivation.createManyAndReturn\",\"WorkflowActivation.updateOne\",\"WorkflowActivation.updateMany\",\"WorkflowActivation.updateManyAndReturn\",\"WorkflowActivation.upsertOne\",\"WorkflowActivation.deleteOne\",\"WorkflowActivation.deleteMany\",\"WorkflowActivation.groupBy\",\"WorkflowActivation.aggregate\",\"TriggerSetupState.findUnique\",\"TriggerSetupState.findUniqueOrThrow\",\"TriggerSetupState.findFirst\",\"TriggerSetupState.findFirstOrThrow\",\"TriggerSetupState.findMany\",\"TriggerSetupState.createOne\",\"TriggerSetupState.createMany\",\"TriggerSetupState.createManyAndReturn\",\"TriggerSetupState.updateOne\",\"TriggerSetupState.updateMany\",\"TriggerSetupState.updateManyAndReturn\",\"TriggerSetupState.upsertOne\",\"TriggerSetupState.deleteOne\",\"TriggerSetupState.deleteMany\",\"TriggerSetupState.groupBy\",\"TriggerSetupState.aggregate\",\"CredentialInstance.findUnique\",\"CredentialInstance.findUniqueOrThrow\",\"CredentialInstance.findFirst\",\"CredentialInstance.findFirstOrThrow\",\"CredentialInstance.findMany\",\"CredentialInstance.createOne\",\"CredentialInstance.createMany\",\"CredentialInstance.createManyAndReturn\",\"CredentialInstance.updateOne\",\"CredentialInstance.updateMany\",\"CredentialInstance.updateManyAndReturn\",\"CredentialInstance.upsertOne\",\"CredentialInstance.deleteOne\",\"CredentialInstance.deleteMany\",\"CredentialInstance.groupBy\",\"CredentialInstance.aggregate\",\"CredentialSecretMaterial.findUnique\",\"CredentialSecretMaterial.findUniqueOrThrow\",\"CredentialSecretMaterial.findFirst\",\"CredentialSecretMaterial.findFirstOrThrow\",\"CredentialSecretMaterial.findMany\",\"CredentialSecretMaterial.createOne\",\"CredentialSecretMaterial.createMany\",\"CredentialSecretMaterial.createManyAndReturn\",\"CredentialSecretMaterial.updateOne\",\"CredentialSecretMaterial.updateMany\",\"CredentialSecretMaterial.updateManyAndReturn\",\"CredentialSecretMaterial.upsertOne\",\"CredentialSecretMaterial.deleteOne\",\"CredentialSecretMaterial.deleteMany\",\"CredentialSecretMaterial.groupBy\",\"CredentialSecretMaterial.aggregate\",\"CredentialOAuth2Material.findUnique\",\"CredentialOAuth2Material.findUniqueOrThrow\",\"CredentialOAuth2Material.findFirst\",\"CredentialOAuth2Material.findFirstOrThrow\",\"CredentialOAuth2Material.findMany\",\"CredentialOAuth2Material.createOne\",\"CredentialOAuth2Material.createMany\",\"CredentialOAuth2Material.createManyAndReturn\",\"CredentialOAuth2Material.updateOne\",\"CredentialOAuth2Material.updateMany\",\"CredentialOAuth2Material.updateManyAndReturn\",\"CredentialOAuth2Material.upsertOne\",\"CredentialOAuth2Material.deleteOne\",\"CredentialOAuth2Material.deleteMany\",\"CredentialOAuth2Material.groupBy\",\"CredentialOAuth2Material.aggregate\",\"CredentialOAuth2State.findUnique\",\"CredentialOAuth2State.findUniqueOrThrow\",\"CredentialOAuth2State.findFirst\",\"CredentialOAuth2State.findFirstOrThrow\",\"CredentialOAuth2State.findMany\",\"CredentialOAuth2State.createOne\",\"CredentialOAuth2State.createMany\",\"CredentialOAuth2State.createManyAndReturn\",\"CredentialOAuth2State.updateOne\",\"CredentialOAuth2State.updateMany\",\"CredentialOAuth2State.updateManyAndReturn\",\"CredentialOAuth2State.upsertOne\",\"CredentialOAuth2State.deleteOne\",\"CredentialOAuth2State.deleteMany\",\"CredentialOAuth2State.groupBy\",\"CredentialOAuth2State.aggregate\",\"CredentialBinding.findUnique\",\"CredentialBinding.findUniqueOrThrow\",\"CredentialBinding.findFirst\",\"CredentialBinding.findFirstOrThrow\",\"CredentialBinding.findMany\",\"CredentialBinding.createOne\",\"CredentialBinding.createMany\",\"CredentialBinding.createManyAndReturn\",\"CredentialBinding.updateOne\",\"CredentialBinding.updateMany\",\"CredentialBinding.updateManyAndReturn\",\"CredentialBinding.upsertOne\",\"CredentialBinding.deleteOne\",\"CredentialBinding.deleteMany\",\"CredentialBinding.groupBy\",\"CredentialBinding.aggregate\",\"CredentialTestResult.findUnique\",\"CredentialTestResult.findUniqueOrThrow\",\"CredentialTestResult.findFirst\",\"CredentialTestResult.findFirstOrThrow\",\"CredentialTestResult.findMany\",\"CredentialTestResult.createOne\",\"CredentialTestResult.createMany\",\"CredentialTestResult.createManyAndReturn\",\"CredentialTestResult.updateOne\",\"CredentialTestResult.updateMany\",\"CredentialTestResult.updateManyAndReturn\",\"CredentialTestResult.upsertOne\",\"CredentialTestResult.deleteOne\",\"CredentialTestResult.deleteMany\",\"CredentialTestResult.groupBy\",\"CredentialTestResult.aggregate\",\"user\",\"accounts\",\"sessions\",\"invites\",\"User.findUnique\",\"User.findUniqueOrThrow\",\"User.findFirst\",\"User.findFirstOrThrow\",\"User.findMany\",\"User.createOne\",\"User.createMany\",\"User.createManyAndReturn\",\"User.updateOne\",\"User.updateMany\",\"User.updateManyAndReturn\",\"User.upsertOne\",\"User.deleteOne\",\"User.deleteMany\",\"User.groupBy\",\"User.aggregate\",\"UserInvite.findUnique\",\"UserInvite.findUniqueOrThrow\",\"UserInvite.findFirst\",\"UserInvite.findFirstOrThrow\",\"UserInvite.findMany\",\"UserInvite.createOne\",\"UserInvite.createMany\",\"UserInvite.createManyAndReturn\",\"UserInvite.updateOne\",\"UserInvite.updateMany\",\"UserInvite.updateManyAndReturn\",\"UserInvite.upsertOne\",\"UserInvite.deleteOne\",\"UserInvite.deleteMany\",\"UserInvite.groupBy\",\"UserInvite.aggregate\",\"Account.findUnique\",\"Account.findUniqueOrThrow\",\"Account.findFirst\",\"Account.findFirstOrThrow\",\"Account.findMany\",\"Account.createOne\",\"Account.createMany\",\"Account.createManyAndReturn\",\"Account.updateOne\",\"Account.updateMany\",\"Account.updateManyAndReturn\",\"Account.upsertOne\",\"Account.deleteOne\",\"Account.deleteMany\",\"Account.groupBy\",\"Account.aggregate\",\"Session.findUnique\",\"Session.findUniqueOrThrow\",\"Session.findFirst\",\"Session.findFirstOrThrow\",\"Session.findMany\",\"Session.createOne\",\"Session.createMany\",\"Session.createManyAndReturn\",\"Session.updateOne\",\"Session.updateMany\",\"Session.updateManyAndReturn\",\"Session.upsertOne\",\"Session.deleteOne\",\"Session.deleteMany\",\"Session.groupBy\",\"Session.aggregate\",\"VerificationToken.findUnique\",\"VerificationToken.findUniqueOrThrow\",\"VerificationToken.findFirst\",\"VerificationToken.findFirstOrThrow\",\"VerificationToken.findMany\",\"VerificationToken.createOne\",\"VerificationToken.createMany\",\"VerificationToken.createManyAndReturn\",\"VerificationToken.updateOne\",\"VerificationToken.updateMany\",\"VerificationToken.updateManyAndReturn\",\"VerificationToken.upsertOne\",\"VerificationToken.deleteOne\",\"VerificationToken.deleteMany\",\"VerificationToken.groupBy\",\"VerificationToken.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"identifier\",\"token\",\"expires\",\"createdAt\",\"updatedAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"contains\",\"startsWith\",\"endsWith\",\"identifier_token\",\"sessionToken\",\"userId\",\"ipAddress\",\"userAgent\",\"type\",\"provider\",\"providerAccountId\",\"password\",\"refresh_token\",\"access_token\",\"expires_at\",\"accessTokenExpiresAt\",\"refreshTokenExpiresAt\",\"token_type\",\"scope\",\"id_token\",\"session_state\",\"tokenHash\",\"expiresAt\",\"revokedAt\",\"name\",\"email\",\"emailVerified\",\"image\",\"passwordHash\",\"accountStatus\",\"every\",\"some\",\"none\",\"provider_providerAccountId\",\"testId\",\"instanceId\",\"status\",\"message\",\"detailsJson\",\"testedAt\",\"workflowId\",\"nodeId\",\"slotKey\",\"workflowId_nodeId_slotKey\",\"state\",\"codeVerifier\",\"providerId\",\"requestedScopesJson\",\"encryptedJson\",\"encryptionKeyId\",\"schemaVersion\",\"connectedEmail\",\"connectedAt\",\"scopesJson\",\"typeId\",\"displayName\",\"sourceKind\",\"publicConfigJson\",\"secretRefJson\",\"tagsJson\",\"setupStatus\",\"stateJson\",\"workflowId_nodeId\",\"isActive\",\"copiedFromRunId\",\"runId\",\"revision\",\"slotStatesJson\",\"slotNodeId\",\"workflowNodeId\",\"kind\",\"connectionKind\",\"activationId\",\"batchId\",\"runIndex\",\"parentInstanceId\",\"parentRunId\",\"workerClaimToken\",\"queuedAt\",\"startedAt\",\"finishedAt\",\"itemCount\",\"inputJson\",\"outputJson\",\"errorJson\",\"inputItemIndicesJson\",\"outputItemCount\",\"successfulItemCount\",\"failedItemCount\",\"inputStorageKind\",\"outputStorageKind\",\"inputBytes\",\"outputBytes\",\"inputPreviewJson\",\"outputPreviewJson\",\"inputPayloadRef\",\"outputPayloadRef\",\"inputTruncated\",\"outputTruncated\",\"usedPinnedOutput\",\"workItemId\",\"targetNodeId\",\"queueName\",\"claimToken\",\"claimedBy\",\"claimedAt\",\"availableAt\",\"enqueuedAt\",\"completedAt\",\"failedAt\",\"sourceInstanceId\",\"itemsIn\",\"inputsByPortJson\",\"parentJson\",\"executionOptionsJson\",\"controlJson\",\"workflowSnapshotJson\",\"policySnapshotJson\",\"engineCountersJson\",\"mutableStateJson\",\"outputsByNodeJson\",\"runId_slotNodeId_runIndex\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"),
13763
- graph: "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_ADAZAACAAQAgAwAAAG0AIAEAAG4AMAIAAGoAIAa0AgAAjQQAMLUCAACGAQAQtgIAAI0EADC8AgEA1wMAIe0CAQAAAAGEAyAA7QMAIQEAAACDAQAgAQAAAIMBACAGtAIAAI0EADC1AgAAhgEAELYCAACNBAAwvAIBANcDACHtAgEA1wMAIYQDIADtAwAhAAMAAACGAQAgAQAAhwEAMAIAAIMBACADAAAAhgEAIAEAAIcBADACAACDAQAgAwAAAIYBACABAACHAQAwAgAAgwEAIAO8AgEAAAAB7QIBAAAAAYQDIAAAAAEBDQAAiwEAIAO8AgEAAAAB7QIBAAAAAYQDIAAAAAEBDQAAjQEAMAENAACNAQAwA7wCAQCkBAAh7QIBAKQEACGEAyAAvgQAIQIAAACDAQAgDQAAkAEAIAO8AgEApAQAIe0CAQCkBAAhhAMgAL4EACECAAAAhgEAIA0AAJIBACACAAAAhgEAIA0AAJIBACADAAAAgwEAIBQAAIsBACAVAACQAQAgAQAAAIMBACABAAAAhgEAIAMHAACHBQAgHAAAiQUAIB0AAIgFACAGtAIAAIwEADC1AgAAmQEAELYCAACMBAAwvAIBAM8DACHtAgEAzwMAIYQDIADoAwAhAwAAAIYBACABAACYAQAwGQAAmQEAIAMAAACGAQAgAQAAhwEAMAIAAIMBACAItAIAAIoEADC1AgAAnwEAELYCAACKBAAwvAIBANcDACHtAgEA1wMAIe4CAQDXAwAhggMBANcDACGDAwAAiwQAIAEAAACcAQAgAQAAAJwBACAHtAIAAIoEADC1AgAAnwEAELYCAACKBAAwvAIBANcDACHtAgEA1wMAIe4CAQDXAwAhggMBANcDACEAAwAAAJ8BACABAACgAQAwAgAAnAEAIAMAAACfAQAgAQAAoAEAMAIAAJwBACADAAAAnwEAIAEAAKABADACAACcAQAgBLwCAQAAAAHtAgEAAAAB7gIBAAAAAYIDAQAAAAEBDQAApAEAIAS8AgEAAAAB7QIBAAAAAe4CAQAAAAGCAwEAAAABAQ0AAKYBADABDQAApgEAMAS8AgEApAQAIe0CAQCkBAAh7gIBAKQEACGCAwEApAQAIQIAAACcAQAgDQAAqQEAIAS8AgEApAQAIe0CAQCkBAAh7gIBAKQEACGCAwEApAQAIQIAAACfAQAgDQAAqwEAIAIAAACfAQAgDQAAqwEAIAMAAACcAQAgFAAApAEAIBUAAKkBACABAAAAnAEAIAEAAACfAQAgAwcAAIQFACAcAACGBQAgHQAAhQUAIAe0AgAAiQQAMLUCAACyAQAQtgIAAIkEADC8AgEAzwMAIe0CAQDPAwAh7gIBAM8DACGCAwEAzwMAIQMAAACfAQAgAQAAsQEAMBkAALIBACADAAAAnwEAIAEAAKABADACAACcAQAgDbQCAACIBAAwtQIAALgBABC2AgAAiAQAMLsCAQDXAwAhvAIBANcDACHoAgEAAAAB-wIBANcDACH8AgEA1wMAIf0CAQDXAwAh_gIBANcDACH_AgEA1wMAIYADAQDXAwAhgQMBANcDACEBAAAAtQEAIAEAAAC1AQAgDbQCAACIBAAwtQIAALgBABC2AgAAiAQAMLsCAQDXAwAhvAIBANcDACHoAgEA1wMAIfsCAQDXAwAh_AIBANcDACH9AgEA1wMAIf4CAQDXAwAh_wIBANcDACGAAwEA1wMAIYEDAQDXAwAhAAMAAAC4AQAgAQAAuQEAMAIAALUBACADAAAAuAEAIAEAALkBADACAAC1AQAgAwAAALgBACABAAC5AQAwAgAAtQEAIAq7AgEAAAABvAIBAAAAAegCAQAAAAH7AgEAAAAB_AIBAAAAAf0CAQAAAAH-AgEAAAAB_wIBAAAAAYADAQAAAAGBAwEAAAABAQ0AAL0BACAKuwIBAAAAAbwCAQAAAAHoAgEAAAAB-wIBAAAAAfwCAQAAAAH9AgEAAAAB_gIBAAAAAf8CAQAAAAGAAwEAAAABgQMBAAAAAQENAAC_AQAwAQ0AAL8BADAKuwIBAKQEACG8AgEApAQAIegCAQCkBAAh-wIBAKQEACH8AgEApAQAIf0CAQCkBAAh_gIBAKQEACH_AgEApAQAIYADAQCkBAAhgQMBAKQEACECAAAAtQEAIA0AAMIBACAKuwIBAKQEACG8AgEApAQAIegCAQCkBAAh-wIBAKQEACH8AgEApAQAIf0CAQCkBAAh_gIBAKQEACH_AgEApAQAIYADAQCkBAAhgQMBAKQEACECAAAAuAEAIA0AAMQBACACAAAAuAEAIA0AAMQBACADAAAAtQEAIBQAAL0BACAVAADCAQAgAQAAALUBACABAAAAuAEAIAMHAACBBQAgHAAAgwUAIB0AAIIFACANtAIAAIcEADC1AgAAywEAELYCAACHBAAwuwIBAM8DACG8AgEAzwMAIegCAQDPAwAh-wIBAM8DACH8AgEAzwMAIf0CAQDPAwAh_gIBAM8DACH_AgEAzwMAIYADAQDPAwAhgQMBAM8DACEDAAAAuAEAIAEAAMoBADAZAADLAQAgAwAAALgBACABAAC5AQAwAgAAtQEAIAi0AgAAhgQAMLUCAADRAQAQtgIAAIYEADC8AgEA1wMAIegCAQAAAAH1AgEA1wMAIfYCAQDXAwAh9wICAIQEACEBAAAAzgEAIAEAAADOAQAgCLQCAACGBAAwtQIAANEBABC2AgAAhgQAMLwCAQDXAwAh6AIBANcDACH1AgEA1wMAIfYCAQDXAwAh9wICAIQEACEAAwAAANEBACABAADSAQAwAgAAzgEAIAMAAADRAQAgAQAA0gEAMAIAAM4BACADAAAA0QEAIAEAANIBADACAADOAQAgBbwCAQAAAAHoAgEAAAAB9QIBAAAAAfYCAQAAAAH3AgIAAAABAQ0AANYBACAFvAIBAAAAAegCAQAAAAH1AgEAAAAB9gIBAAAAAfcCAgAAAAEBDQAA2AEAMAENAADYAQAwBbwCAQCkBAAh6AIBAKQEACH1AgEApAQAIfYCAQCkBAAh9wICAPsEACECAAAAzgEAIA0AANsBACAFvAIBAKQEACHoAgEApAQAIfUCAQCkBAAh9gIBAKQEACH3AgIA-wQAIQIAAADRAQAgDQAA3QEAIAIAAADRAQAgDQAA3QEAIAMAAADOAQAgFAAA1gEAIBUAANsBACABAAAAzgEAIAEAAADRAQAgBQcAAPwEACAaAAD9BAAgGwAAgAUAIBwAAP8EACAdAAD-BAAgCLQCAACFBAAwtQIAAOQBABC2AgAAhQQAMLwCAQDPAwAh6AIBAM8DACH1AgEAzwMAIfYCAQDPAwAh9wICAIAEACEDAAAA0QEAIAEAAOMBADAZAADkAQAgAwAAANEBACABAADSAQAwAgAAzgEAIAy0AgAAgwQAMLUCAADqAQAQtgIAAIMEADC8AgEA1wMAIegCAQAAAAHzAgEA1wMAIfUCAQDXAwAh9gIBANcDACH3AgIAhAQAIfgCAQDsAwAh-QIBAOwDACH6AgEA1wMAIQEAAADnAQAgAQAAAOcBACAMtAIAAIMEADC1AgAA6gEAELYCAACDBAAwvAIBANcDACHoAgEA1wMAIfMCAQDXAwAh9QIBANcDACH2AgEA1wMAIfcCAgCEBAAh-AIBAOwDACH5AgEA7AMAIfoCAQDXAwAhAvgCAACmBAAg-QIAAKYEACADAAAA6gEAIAEAAOsBADACAADnAQAgAwAAAOoBACABAADrAQAwAgAA5wEAIAMAAADqAQAgAQAA6wEAMAIAAOcBACAJvAIBAAAAAegCAQAAAAHzAgEAAAAB9QIBAAAAAfYCAQAAAAH3AgIAAAAB-AIBAAAAAfkCAQAAAAH6AgEAAAABAQ0AAO8BACAJvAIBAAAAAegCAQAAAAHzAgEAAAAB9QIBAAAAAfYCAQAAAAH3AgIAAAAB-AIBAAAAAfkCAQAAAAH6AgEAAAABAQ0AAPEBADABDQAA8QEAMAm8AgEApAQAIegCAQCkBAAh8wIBAKQEACH1AgEApAQAIfYCAQCkBAAh9wICAPsEACH4AgEAqgQAIfkCAQCqBAAh-gIBAKQEACECAAAA5wEAIA0AAPQBACAJvAIBAKQEACHoAgEApAQAIfMCAQCkBAAh9QIBAKQEACH2AgEApAQAIfcCAgD7BAAh-AIBAKoEACH5AgEAqgQAIfoCAQCkBAAhAgAAAOoBACANAAD2AQAgAgAAAOoBACANAAD2AQAgAwAAAOcBACAUAADvAQAgFQAA9AEAIAEAAADnAQAgAQAAAOoBACAHBwAA9gQAIBoAAPcEACAbAAD6BAAgHAAA-QQAIB0AAPgEACD4AgAApgQAIPkCAACmBAAgDLQCAAD_AwAwtQIAAP0BABC2AgAA_wMAMLwCAQDPAwAh6AIBAM8DACHzAgEAzwMAIfUCAQDPAwAh9gIBAM8DACH3AgIAgAQAIfgCAQDbAwAh-QIBANsDACH6AgEAzwMAIQMAAADqAQAgAQAA_AEAMBkAAP0BACADAAAA6gEAIAEAAOsBADACAADnAQAgCrQCAAD-AwAwtQIAAIMCABC2AgAA_gMAMLsCAQDXAwAh2wIBANcDACHoAgEA1wMAIfECAQAAAAHyAgEA7AMAIfMCAQDsAwAh9AIBANcDACEBAAAAgAIAIAEAAACAAgAgCrQCAAD-AwAwtQIAAIMCABC2AgAA_gMAMLsCAQDXAwAh2wIBANcDACHoAgEA1wMAIfECAQDXAwAh8gIBAOwDACHzAgEA7AMAIfQCAQDXAwAhAvICAACmBAAg8wIAAKYEACADAAAAgwIAIAEAAIQCADACAACAAgAgAwAAAIMCACABAACEAgAwAgAAgAIAIAMAAACDAgAgAQAAhAIAMAIAAIACACAHuwIBAAAAAdsCAQAAAAHoAgEAAAAB8QIBAAAAAfICAQAAAAHzAgEAAAAB9AIBAAAAAQENAACIAgAgB7sCAQAAAAHbAgEAAAAB6AIBAAAAAfECAQAAAAHyAgEAAAAB8wIBAAAAAfQCAQAAAAEBDQAAigIAMAENAACKAgAwB7sCAQCkBAAh2wIBAKQEACHoAgEApAQAIfECAQCkBAAh8gIBAKoEACHzAgEAqgQAIfQCAQCkBAAhAgAAAIACACANAACNAgAgB7sCAQCkBAAh2wIBAKQEACHoAgEApAQAIfECAQCkBAAh8gIBAKoEACHzAgEAqgQAIfQCAQCkBAAhAgAAAIMCACANAACPAgAgAgAAAIMCACANAACPAgAgAwAAAIACACAUAACIAgAgFQAAjQIAIAEAAACAAgAgAQAAAIMCACAFBwAA8wQAIBwAAPUEACAdAAD0BAAg8gIAAKYEACDzAgAApgQAIAq0AgAA_QMAMLUCAACWAgAQtgIAAP0DADC7AgEAzwMAIdsCAQDPAwAh6AIBAM8DACHxAgEAzwMAIfICAQDbAwAh8wIBANsDACH0AgEAzwMAIQMAAACDAgAgAQAAlQIAMBkAAJYCACADAAAAgwIAIAEAAIQCADACAACAAgAgCbQCAAD7AwAwtQIAAJwCABC2AgAA-wMAMLwCAQDXAwAh6AIBANcDACHtAgEA1wMAIe4CAQDXAwAh7wIBANcDACHwAgAA_AMAIAEAAACZAgAgAQAAAJkCACAItAIAAPsDADC1AgAAnAIAELYCAAD7AwAwvAIBANcDACHoAgEA1wMAIe0CAQDXAwAh7gIBANcDACHvAgEA1wMAIQADAAAAnAIAIAEAAJ0CADACAACZAgAgAwAAAJwCACABAACdAgAwAgAAmQIAIAMAAACcAgAgAQAAnQIAMAIAAJkCACAFvAIBAAAAAegCAQAAAAHtAgEAAAAB7gIBAAAAAe8CAQAAAAEBDQAAoQIAIAW8AgEAAAAB6AIBAAAAAe0CAQAAAAHuAgEAAAAB7wIBAAAAAQENAACjAgAwAQ0AAKMCADAFvAIBAKQEACHoAgEApAQAIe0CAQCkBAAh7gIBAKQEACHvAgEApAQAIQIAAACZAgAgDQAApgIAIAW8AgEApAQAIegCAQCkBAAh7QIBAKQEACHuAgEApAQAIe8CAQCkBAAhAgAAAJwCACANAACoAgAgAgAAAJwCACANAACoAgAgAwAAAJkCACAUAAChAgAgFQAApgIAIAEAAACZAgAgAQAAAJwCACADBwAA8AQAIBwAAPIEACAdAADxBAAgCLQCAAD6AwAwtQIAAK8CABC2AgAA-gMAMLwCAQDPAwAh6AIBAM8DACHtAgEAzwMAIe4CAQDPAwAh7wIBAM8DACEDAAAAnAIAIAEAAK4CADAZAACvAgAgAwAAAJwCACABAACdAgAwAgAAmQIAIAq0AgAA-QMAMLUCAAC1AgAQtgIAAPkDADDbAgEA7AMAIecCAQAAAAHoAgEA1wMAIekCAQDXAwAh6gIBAOwDACHrAgEA1wMAIewCAQDXAwAhAQAAALICACABAAAAsgIAIAq0AgAA-QMAMLUCAAC1AgAQtgIAAPkDADDbAgEA7AMAIecCAQDXAwAh6AIBANcDACHpAgEA1wMAIeoCAQDsAwAh6wIBANcDACHsAgEA1wMAIQLbAgAApgQAIOoCAACmBAAgAwAAALUCACABAAC2AgAwAgAAsgIAIAMAAAC1AgAgAQAAtgIAMAIAALICACADAAAAtQIAIAEAALYCADACAACyAgAgB9sCAQAAAAHnAgEAAAAB6AIBAAAAAekCAQAAAAHqAgEAAAAB6wIBAAAAAewCAQAAAAEBDQAAugIAIAfbAgEAAAAB5wIBAAAAAegCAQAAAAHpAgEAAAAB6gIBAAAAAesCAQAAAAHsAgEAAAABAQ0AALwCADABDQAAvAIAMAfbAgEAqgQAIecCAQCkBAAh6AIBAKQEACHpAgEApAQAIeoCAQCqBAAh6wIBAKQEACHsAgEApAQAIQIAAACyAgAgDQAAvwIAIAfbAgEAqgQAIecCAQCkBAAh6AIBAKQEACHpAgEApAQAIeoCAQCqBAAh6wIBAKQEACHsAgEApAQAIQIAAAC1AgAgDQAAwQIAIAIAAAC1AgAgDQAAwQIAIAMAAACyAgAgFAAAugIAIBUAAL8CACABAAAAsgIAIAEAAAC1AgAgBQcAAO0EACAcAADvBAAgHQAA7gQAINsCAACmBAAg6gIAAKYEACAKtAIAAPgDADC1AgAAyAIAELYCAAD4AwAw2wIBANsDACHnAgEAzwMAIegCAQDPAwAh6QIBAM8DACHqAgEA2wMAIesCAQDPAwAh7AIBAM8DACEDAAAAtQIAIAEAAMcCADAZAADIAgAgAwAAALUCACABAAC2AgAwAgAAsgIAIA_hAQAA7gMAIOIBAADvAwAg4wEAAPADACC0AgAA6wMAMLUCAADdAgAQtgIAAOsDADC3AgEAAAABuwJAANgDACG8AkAA2AMAId0CAQDsAwAh3gIBAAAAAd8CIADtAwAh4AIBAOwDACHhAgEA7AMAIeICAQDXAwAhAQAAAMsCACAV4AEAAPMDACC0AgAA9gMAMLUCAADNAgAQtgIAAPYDADC3AgEA1wMAIbsCQADYAwAhvAJAANgDACHKAgEA1wMAIc0CAQDXAwAhzgIBANcDACHPAgEA1wMAIdACAQDsAwAh0QIBAOwDACHSAgEA7AMAIdMCAgD3AwAh1AJAAPIDACHVAkAA8gMAIdYCAQDsAwAh1wIBAOwDACHYAgEA7AMAIdkCAQDsAwAhC-ABAADsBAAg0AIAAKYEACDRAgAApgQAINICAACmBAAg0wIAAKYEACDUAgAApgQAINUCAACmBAAg1gIAAKYEACDXAgAApgQAINgCAACmBAAg2QIAAKYEACAW4AEAAPMDACC0AgAA9gMAMLUCAADNAgAQtgIAAPYDADC3AgEAAAABuwJAANgDACG8AkAA2AMAIcoCAQDXAwAhzQIBANcDACHOAgEA1wMAIc8CAQDXAwAh0AIBAOwDACHRAgEA7AMAIdICAQDsAwAh0wICAPcDACHUAkAA8gMAIdUCQADyAwAh1gIBAOwDACHXAgEA7AMAIdgCAQDsAwAh2QIBAOwDACHmAgAA9QMAIAMAAADNAgAgAQAAzgIAMAIAAM8CACAM4AEAAPMDACC0AgAA9AMAMLUCAADRAgAQtgIAAPQDADC3AgEA1wMAIboCQADYAwAhuwJAANgDACG8AkAA2AMAIckCAQDXAwAhygIBANcDACHLAgEA7AMAIcwCAQDsAwAhA-ABAADsBAAgywIAAKYEACDMAgAApgQAIAzgAQAA8wMAILQCAAD0AwAwtQIAANECABC2AgAA9AMAMLcCAQAAAAG6AkAA2AMAIbsCQADYAwAhvAJAANgDACHJAgEAAAABygIBANcDACHLAgEA7AMAIcwCAQDsAwAhAwAAANECACABAADSAgAwAgAA0wIAIArgAQAA8wMAILQCAADxAwAwtQIAANUCABC2AgAA8QMAMLcCAQDXAwAhuwJAANgDACHKAgEA1wMAIdoCAQDXAwAh2wJAANgDACHcAkAA8gMAIQLgAQAA7AQAINwCAACmBAAgCuABAADzAwAgtAIAAPEDADC1AgAA1QIAELYCAADxAwAwtwIBAAAAAbsCQADYAwAhygIBANcDACHaAgEAAAAB2wJAANgDACHcAkAA8gMAIQMAAADVAgAgAQAA1gIAMAIAANcCACABAAAAzQIAIAEAAADRAgAgAQAAANUCACABAAAAywIAIA_hAQAA7gMAIOIBAADvAwAg4wEAAPADACC0AgAA6wMAMLUCAADdAgAQtgIAAOsDADC3AgEA1wMAIbsCQADYAwAhvAJAANgDACHdAgEA7AMAId4CAQDsAwAh3wIgAO0DACHgAgEA7AMAIeECAQDsAwAh4gIBANcDACEH4QEAAOkEACDiAQAA6gQAIOMBAADrBAAg3QIAAKYEACDeAgAApgQAIOACAACmBAAg4QIAAKYEACADAAAA3QIAIAEAAN4CADACAADLAgAgAwAAAN0CACABAADeAgAwAgAAywIAIAMAAADdAgAgAQAA3gIAMAIAAMsCACAM4QEAAOYEACDiAQAA5wQAIOMBAADoBAAgtwIBAAAAAbsCQAAAAAG8AkAAAAAB3QIBAAAAAd4CAQAAAAHfAiAAAAAB4AIBAAAAAeECAQAAAAHiAgEAAAABAQ0AAOICACAJtwIBAAAAAbsCQAAAAAG8AkAAAAAB3QIBAAAAAd4CAQAAAAHfAiAAAAAB4AIBAAAAAeECAQAAAAHiAgEAAAABAQ0AAOQCADABDQAA5AIAMAzhAQAAvwQAIOIBAADABAAg4wEAAMEEACC3AgEApAQAIbsCQAClBAAhvAJAAKUEACHdAgEAqgQAId4CAQCqBAAh3wIgAL4EACHgAgEAqgQAIeECAQCqBAAh4gIBAKQEACECAAAAywIAIA0AAOcCACAJtwIBAKQEACG7AkAApQQAIbwCQAClBAAh3QIBAKoEACHeAgEAqgQAId8CIAC-BAAh4AIBAKoEACHhAgEAqgQAIeICAQCkBAAhAgAAAN0CACANAADpAgAgAgAAAN0CACANAADpAgAgAwAAAMsCACAUAADiAgAgFQAA5wIAIAEAAADLAgAgAQAAAN0CACAHBwAAuwQAIBwAAL0EACAdAAC8BAAg3QIAAKYEACDeAgAApgQAIOACAACmBAAg4QIAAKYEACAMtAIAAOcDADC1AgAA8AIAELYCAADnAwAwtwIBAM8DACG7AkAA0AMAIbwCQADQAwAh3QIBANsDACHeAgEA2wMAId8CIADoAwAh4AIBANsDACHhAgEA2wMAIeICAQDPAwAhAwAAAN0CACABAADvAgAwGQAA8AIAIAMAAADdAgAgAQAA3gIAMAIAAMsCACABAAAA1wIAIAEAAADXAgAgAwAAANUCACABAADWAgAwAgAA1wIAIAMAAADVAgAgAQAA1gIAMAIAANcCACADAAAA1QIAIAEAANYCADACAADXAgAgB-ABAAC6BAAgtwIBAAAAAbsCQAAAAAHKAgEAAAAB2gIBAAAAAdsCQAAAAAHcAkAAAAABAQ0AAPgCACAGtwIBAAAAAbsCQAAAAAHKAgEAAAAB2gIBAAAAAdsCQAAAAAHcAkAAAAABAQ0AAPoCADABDQAA-gIAMAfgAQAAuQQAILcCAQCkBAAhuwJAAKUEACHKAgEApAQAIdoCAQCkBAAh2wJAAKUEACHcAkAAswQAIQIAAADXAgAgDQAA_QIAIAa3AgEApAQAIbsCQAClBAAhygIBAKQEACHaAgEApAQAIdsCQAClBAAh3AJAALMEACECAAAA1QIAIA0AAP8CACACAAAA1QIAIA0AAP8CACADAAAA1wIAIBQAAPgCACAVAAD9AgAgAQAAANcCACABAAAA1QIAIAQHAAC2BAAgHAAAuAQAIB0AALcEACDcAgAApgQAIAm0AgAA5gMAMLUCAACGAwAQtgIAAOYDADC3AgEAzwMAIbsCQADQAwAhygIBAM8DACHaAgEAzwMAIdsCQADQAwAh3AJAAOEDACEDAAAA1QIAIAEAAIUDADAZAACGAwAgAwAAANUCACABAADWAgAwAgAA1wIAIAEAAADPAgAgAQAAAM8CACADAAAAzQIAIAEAAM4CADACAADPAgAgAwAAAM0CACABAADOAgAwAgAAzwIAIAMAAADNAgAgAQAAzgIAMAIAAM8CACAS4AEAALUEACC3AgEAAAABuwJAAAAAAbwCQAAAAAHKAgEAAAABzQIBAAAAAc4CAQAAAAHPAgEAAAAB0AIBAAAAAdECAQAAAAHSAgEAAAAB0wICAAAAAdQCQAAAAAHVAkAAAAAB1gIBAAAAAdcCAQAAAAHYAgEAAAAB2QIBAAAAAQENAACOAwAgEbcCAQAAAAG7AkAAAAABvAJAAAAAAcoCAQAAAAHNAgEAAAABzgIBAAAAAc8CAQAAAAHQAgEAAAAB0QIBAAAAAdICAQAAAAHTAgIAAAAB1AJAAAAAAdUCQAAAAAHWAgEAAAAB1wIBAAAAAdgCAQAAAAHZAgEAAAABAQ0AAJADADABDQAAkAMAMBLgAQAAtAQAILcCAQCkBAAhuwJAAKUEACG8AkAApQQAIcoCAQCkBAAhzQIBAKQEACHOAgEApAQAIc8CAQCkBAAh0AIBAKoEACHRAgEAqgQAIdICAQCqBAAh0wICALIEACHUAkAAswQAIdUCQACzBAAh1gIBAKoEACHXAgEAqgQAIdgCAQCqBAAh2QIBAKoEACECAAAAzwIAIA0AAJMDACARtwIBAKQEACG7AkAApQQAIbwCQAClBAAhygIBAKQEACHNAgEApAQAIc4CAQCkBAAhzwIBAKQEACHQAgEAqgQAIdECAQCqBAAh0gIBAKoEACHTAgIAsgQAIdQCQACzBAAh1QJAALMEACHWAgEAqgQAIdcCAQCqBAAh2AIBAKoEACHZAgEAqgQAIQIAAADNAgAgDQAAlQMAIAIAAADNAgAgDQAAlQMAIAMAAADPAgAgFAAAjgMAIBUAAJMDACABAAAAzwIAIAEAAADNAgAgDwcAAK0EACAaAACuBAAgGwAAsQQAIBwAALAEACAdAACvBAAg0AIAAKYEACDRAgAApgQAINICAACmBAAg0wIAAKYEACDUAgAApgQAINUCAACmBAAg1gIAAKYEACDXAgAApgQAINgCAACmBAAg2QIAAKYEACAUtAIAAN8DADC1AgAAnAMAELYCAADfAwAwtwIBAM8DACG7AkAA0AMAIbwCQADQAwAhygIBAM8DACHNAgEAzwMAIc4CAQDPAwAhzwIBAM8DACHQAgEA2wMAIdECAQDbAwAh0gIBANsDACHTAgIA4AMAIdQCQADhAwAh1QJAAOEDACHWAgEA2wMAIdcCAQDbAwAh2AIBANsDACHZAgEA2wMAIQMAAADNAgAgAQAAmwMAMBkAAJwDACADAAAAzQIAIAEAAM4CADACAADPAgAgAQAAANMCACABAAAA0wIAIAMAAADRAgAgAQAA0gIAMAIAANMCACADAAAA0QIAIAEAANICADACAADTAgAgAwAAANECACABAADSAgAwAgAA0wIAIAngAQAArAQAILcCAQAAAAG6AkAAAAABuwJAAAAAAbwCQAAAAAHJAgEAAAABygIBAAAAAcsCAQAAAAHMAgEAAAABAQ0AAKQDACAItwIBAAAAAboCQAAAAAG7AkAAAAABvAJAAAAAAckCAQAAAAHKAgEAAAABywIBAAAAAcwCAQAAAAEBDQAApgMAMAENAACmAwAwCeABAACrBAAgtwIBAKQEACG6AkAApQQAIbsCQAClBAAhvAJAAKUEACHJAgEApAQAIcoCAQCkBAAhywIBAKoEACHMAgEAqgQAIQIAAADTAgAgDQAAqQMAIAi3AgEApAQAIboCQAClBAAhuwJAAKUEACG8AkAApQQAIckCAQCkBAAhygIBAKQEACHLAgEAqgQAIcwCAQCqBAAhAgAAANECACANAACrAwAgAgAAANECACANAACrAwAgAwAAANMCACAUAACkAwAgFQAAqQMAIAEAAADTAgAgAQAAANECACAFBwAApwQAIBwAAKkEACAdAACoBAAgywIAAKYEACDMAgAApgQAIAu0AgAA2gMAMLUCAACyAwAQtgIAANoDADC3AgEAzwMAIboCQADQAwAhuwJAANADACG8AkAA0AMAIckCAQDPAwAhygIBAM8DACHLAgEA2wMAIcwCAQDbAwAhAwAAANECACABAACxAwAwGQAAsgMAIAMAAADRAgAgAQAA0gIAMAIAANMCACAKtAIAANYDADC1AgAAuAMAELYCAADWAwAwtwIBAAAAAbgCAQDXAwAhuQIBANcDACG6AkAA2AMAIbsCQADYAwAhvAJAANgDACHIAgAA2QMAIAEAAAC1AwAgAQAAALUDACAJtAIAANYDADC1AgAAuAMAELYCAADWAwAwtwIBANcDACG4AgEA1wMAIbkCAQDXAwAhugJAANgDACG7AkAA2AMAIbwCQADYAwAhAAMAAAC4AwAgAQAAuQMAMAIAALUDACADAAAAuAMAIAEAALkDADACAAC1AwAgAwAAALgDACABAAC5AwAwAgAAtQMAIAa3AgEAAAABuAIBAAAAAbkCAQAAAAG6AkAAAAABuwJAAAAAAbwCQAAAAAEBDQAAvQMAIAa3AgEAAAABuAIBAAAAAbkCAQAAAAG6AkAAAAABuwJAAAAAAbwCQAAAAAEBDQAAvwMAMAENAAC_AwAwBrcCAQCkBAAhuAIBAKQEACG5AgEApAQAIboCQAClBAAhuwJAAKUEACG8AkAApQQAIQIAAAC1AwAgDQAAwgMAIAa3AgEApAQAIbgCAQCkBAAhuQIBAKQEACG6AkAApQQAIbsCQAClBAAhvAJAAKUEACECAAAAuAMAIA0AAMQDACACAAAAuAMAIA0AAMQDACADAAAAtQMAIBQAAL0DACAVAADCAwAgAQAAALUDACABAAAAuAMAIAMHAAChBAAgHAAAowQAIB0AAKIEACAJtAIAAM4DADC1AgAAywMAELYCAADOAwAwtwIBAM8DACG4AgEAzwMAIbkCAQDPAwAhugJAANADACG7AkAA0AMAIbwCQADQAwAhAwAAALgDACABAADKAwAwGQAAywMAIAMAAAC4AwAgAQAAuQMAMAIAALUDACAJtAIAAM4DADC1AgAAywMAELYCAADOAwAwtwIBAM8DACG4AgEAzwMAIbkCAQDPAwAhugJAANADACG7AkAA0AMAIbwCQADQAwAhDgcAANIDACAcAADVAwAgHQAA1QMAIL0CAQAAAAG-AgEAAAAEvwIBAAAABMACAQAAAAHBAgEAAAABwgIBAAAAAcMCAQAAAAHEAgEA1AMAIcUCAQAAAAHGAgEAAAABxwIBAAAAAQsHAADSAwAgHAAA0wMAIB0AANMDACC9AkAAAAABvgJAAAAABL8CQAAAAATAAkAAAAABwQJAAAAAAcICQAAAAAHDAkAAAAABxAJAANEDACELBwAA0gMAIBwAANMDACAdAADTAwAgvQJAAAAAAb4CQAAAAAS_AkAAAAAEwAJAAAAAAcECQAAAAAHCAkAAAAABwwJAAAAAAcQCQADRAwAhCL0CAgAAAAG-AgIAAAAEvwICAAAABMACAgAAAAHBAgIAAAABwgICAAAAAcMCAgAAAAHEAgIA0gMAIQi9AkAAAAABvgJAAAAABL8CQAAAAATAAkAAAAABwQJAAAAAAcICQAAAAAHDAkAAAAABxAJAANMDACEOBwAA0gMAIBwAANUDACAdAADVAwAgvQIBAAAAAb4CAQAAAAS_AgEAAAAEwAIBAAAAAcECAQAAAAHCAgEAAAABwwIBAAAAAcQCAQDUAwAhxQIBAAAAAcYCAQAAAAHHAgEAAAABC70CAQAAAAG-AgEAAAAEvwIBAAAABMACAQAAAAHBAgEAAAABwgIBAAAAAcMCAQAAAAHEAgEA1QMAIcUCAQAAAAHGAgEAAAABxwIBAAAAAQm0AgAA1gMAMLUCAAC4AwAQtgIAANYDADC3AgEA1wMAIbgCAQDXAwAhuQIBANcDACG6AkAA2AMAIbsCQADYAwAhvAJAANgDACELvQIBAAAAAb4CAQAAAAS_AgEAAAAEwAIBAAAAAcECAQAAAAHCAgEAAAABwwIBAAAAAcQCAQDVAwAhxQIBAAAAAcYCAQAAAAHHAgEAAAABCL0CQAAAAAG-AkAAAAAEvwJAAAAABMACQAAAAAHBAkAAAAABwgJAAAAAAcMCQAAAAAHEAkAA0wMAIQK4AgEAAAABuQIBAAAAAQu0AgAA2gMAMLUCAACyAwAQtgIAANoDADC3AgEAzwMAIboCQADQAwAhuwJAANADACG8AkAA0AMAIckCAQDPAwAhygIBAM8DACHLAgEA2wMAIcwCAQDbAwAhDgcAAN0DACAcAADeAwAgHQAA3gMAIL0CAQAAAAG-AgEAAAAFvwIBAAAABcACAQAAAAHBAgEAAAABwgIBAAAAAcMCAQAAAAHEAgEA3AMAIcUCAQAAAAHGAgEAAAABxwIBAAAAAQ4HAADdAwAgHAAA3gMAIB0AAN4DACC9AgEAAAABvgIBAAAABb8CAQAAAAXAAgEAAAABwQIBAAAAAcICAQAAAAHDAgEAAAABxAIBANwDACHFAgEAAAABxgIBAAAAAccCAQAAAAEIvQICAAAAAb4CAgAAAAW_AgIAAAAFwAICAAAAAcECAgAAAAHCAgIAAAABwwICAAAAAcQCAgDdAwAhC70CAQAAAAG-AgEAAAAFvwIBAAAABcACAQAAAAHBAgEAAAABwgIBAAAAAcMCAQAAAAHEAgEA3gMAIcUCAQAAAAHGAgEAAAABxwIBAAAAARS0AgAA3wMAMLUCAACcAwAQtgIAAN8DADC3AgEAzwMAIbsCQADQAwAhvAJAANADACHKAgEAzwMAIc0CAQDPAwAhzgIBAM8DACHPAgEAzwMAIdACAQDbAwAh0QIBANsDACHSAgEA2wMAIdMCAgDgAwAh1AJAAOEDACHVAkAA4QMAIdYCAQDbAwAh1wIBANsDACHYAgEA2wMAIdkCAQDbAwAhDQcAAN0DACAaAADlAwAgGwAA3QMAIBwAAN0DACAdAADdAwAgvQICAAAAAb4CAgAAAAW_AgIAAAAFwAICAAAAAcECAgAAAAHCAgIAAAABwwICAAAAAcQCAgDkAwAhCwcAAN0DACAcAADjAwAgHQAA4wMAIL0CQAAAAAG-AkAAAAAFvwJAAAAABcACQAAAAAHBAkAAAAABwgJAAAAAAcMCQAAAAAHEAkAA4gMAIQsHAADdAwAgHAAA4wMAIB0AAOMDACC9AkAAAAABvgJAAAAABb8CQAAAAAXAAkAAAAABwQJAAAAAAcICQAAAAAHDAkAAAAABxAJAAOIDACEIvQJAAAAAAb4CQAAAAAW_AkAAAAAFwAJAAAAAAcECQAAAAAHCAkAAAAABwwJAAAAAAcQCQADjAwAhDQcAAN0DACAaAADlAwAgGwAA3QMAIBwAAN0DACAdAADdAwAgvQICAAAAAb4CAgAAAAW_AgIAAAAFwAICAAAAAcECAgAAAAHCAgIAAAABwwICAAAAAcQCAgDkAwAhCL0CCAAAAAG-AggAAAAFvwIIAAAABcACCAAAAAHBAggAAAABwgIIAAAAAcMCCAAAAAHEAggA5QMAIQm0AgAA5gMAMLUCAACGAwAQtgIAAOYDADC3AgEAzwMAIbsCQADQAwAhygIBAM8DACHaAgEAzwMAIdsCQADQAwAh3AJAAOEDACEMtAIAAOcDADC1AgAA8AIAELYCAADnAwAwtwIBAM8DACG7AkAA0AMAIbwCQADQAwAh3QIBANsDACHeAgEA2wMAId8CIADoAwAh4AIBANsDACHhAgEA2wMAIeICAQDPAwAhBQcAANIDACAcAADqAwAgHQAA6gMAIL0CIAAAAAHEAiAA6QMAIQUHAADSAwAgHAAA6gMAIB0AAOoDACC9AiAAAAABxAIgAOkDACECvQIgAAAAAcQCIADqAwAhD-EBAADuAwAg4gEAAO8DACDjAQAA8AMAILQCAADrAwAwtQIAAN0CABC2AgAA6wMAMLcCAQDXAwAhuwJAANgDACG8AkAA2AMAId0CAQDsAwAh3gIBAOwDACHfAiAA7QMAIeACAQDsAwAh4QIBAOwDACHiAgEA1wMAIQu9AgEAAAABvgIBAAAABb8CAQAAAAXAAgEAAAABwQIBAAAAAcICAQAAAAHDAgEAAAABxAIBAN4DACHFAgEAAAABxgIBAAAAAccCAQAAAAECvQIgAAAAAcQCIADqAwAhA-MCAADNAgAg5AIAAM0CACDlAgAAzQIAIAPjAgAA0QIAIOQCAADRAgAg5QIAANECACAD4wIAANUCACDkAgAA1QIAIOUCAADVAgAgCuABAADzAwAgtAIAAPEDADC1AgAA1QIAELYCAADxAwAwtwIBANcDACG7AkAA2AMAIcoCAQDXAwAh2gIBANcDACHbAkAA2AMAIdwCQADyAwAhCL0CQAAAAAG-AkAAAAAFvwJAAAAABcACQAAAAAHBAkAAAAABwgJAAAAAAcMCQAAAAAHEAkAA4wMAIRHhAQAA7gMAIOIBAADvAwAg4wEAAPADACC0AgAA6wMAMLUCAADdAgAQtgIAAOsDADC3AgEA1wMAIbsCQADYAwAhvAJAANgDACHdAgEA7AMAId4CAQDsAwAh3wIgAO0DACHgAgEA7AMAIeECAQDsAwAh4gIBANcDACG_AwAA3QIAIMADAADdAgAgDOABAADzAwAgtAIAAPQDADC1AgAA0QIAELYCAAD0AwAwtwIBANcDACG6AkAA2AMAIbsCQADYAwAhvAJAANgDACHJAgEA1wMAIcoCAQDXAwAhywIBAOwDACHMAgEA7AMAIQLOAgEAAAABzwIBAAAAARXgAQAA8wMAILQCAAD2AwAwtQIAAM0CABC2AgAA9gMAMLcCAQDXAwAhuwJAANgDACG8AkAA2AMAIcoCAQDXAwAhzQIBANcDACHOAgEA1wMAIc8CAQDXAwAh0AIBAOwDACHRAgEA7AMAIdICAQDsAwAh0wICAPcDACHUAkAA8gMAIdUCQADyAwAh1gIBAOwDACHXAgEA7AMAIdgCAQDsAwAh2QIBAOwDACEIvQICAAAAAb4CAgAAAAW_AgIAAAAFwAICAAAAAcECAgAAAAHCAgIAAAABwwICAAAAAcQCAgDdAwAhCrQCAAD4AwAwtQIAAMgCABC2AgAA-AMAMNsCAQDbAwAh5wIBAM8DACHoAgEAzwMAIekCAQDPAwAh6gIBANsDACHrAgEAzwMAIewCAQDPAwAhCrQCAAD5AwAwtQIAALUCABC2AgAA-QMAMNsCAQDsAwAh5wIBANcDACHoAgEA1wMAIekCAQDXAwAh6gIBAOwDACHrAgEA1wMAIewCAQDXAwAhCLQCAAD6AwAwtQIAAK8CABC2AgAA-gMAMLwCAQDPAwAh6AIBAM8DACHtAgEAzwMAIe4CAQDPAwAh7wIBAM8DACEItAIAAPsDADC1AgAAnAIAELYCAAD7AwAwvAIBANcDACHoAgEA1wMAIe0CAQDXAwAh7gIBANcDACHvAgEA1wMAIQPtAgEAAAAB7gIBAAAAAe8CAQAAAAEKtAIAAP0DADC1AgAAlgIAELYCAAD9AwAwuwIBAM8DACHbAgEAzwMAIegCAQDPAwAh8QIBAM8DACHyAgEA2wMAIfMCAQDbAwAh9AIBAM8DACEKtAIAAP4DADC1AgAAgwIAELYCAAD-AwAwuwIBANcDACHbAgEA1wMAIegCAQDXAwAh8QIBANcDACHyAgEA7AMAIfMCAQDsAwAh9AIBANcDACEMtAIAAP8DADC1AgAA_QEAELYCAAD_AwAwvAIBAM8DACHoAgEAzwMAIfMCAQDPAwAh9QIBAM8DACH2AgEAzwMAIfcCAgCABAAh-AIBANsDACH5AgEA2wMAIfoCAQDPAwAhDQcAANIDACAaAACCBAAgGwAA0gMAIBwAANIDACAdAADSAwAgvQICAAAAAb4CAgAAAAS_AgIAAAAEwAICAAAAAcECAgAAAAHCAgIAAAABwwICAAAAAcQCAgCBBAAhDQcAANIDACAaAACCBAAgGwAA0gMAIBwAANIDACAdAADSAwAgvQICAAAAAb4CAgAAAAS_AgIAAAAEwAICAAAAAcECAgAAAAHCAgIAAAABwwICAAAAAcQCAgCBBAAhCL0CCAAAAAG-AggAAAAEvwIIAAAABMACCAAAAAHBAggAAAABwgIIAAAAAcMCCAAAAAHEAggAggQAIQy0AgAAgwQAMLUCAADqAQAQtgIAAIMEADC8AgEA1wMAIegCAQDXAwAh8wIBANcDACH1AgEA1wMAIfYCAQDXAwAh9wICAIQEACH4AgEA7AMAIfkCAQDsAwAh-gIBANcDACEIvQICAAAAAb4CAgAAAAS_AgIAAAAEwAICAAAAAcECAgAAAAHCAgIAAAABwwICAAAAAcQCAgDSAwAhCLQCAACFBAAwtQIAAOQBABC2AgAAhQQAMLwCAQDPAwAh6AIBAM8DACH1AgEAzwMAIfYCAQDPAwAh9wICAIAEACEItAIAAIYEADC1AgAA0QEAELYCAACGBAAwvAIBANcDACHoAgEA1wMAIfUCAQDXAwAh9gIBANcDACH3AgIAhAQAIQ20AgAAhwQAMLUCAADLAQAQtgIAAIcEADC7AgEAzwMAIbwCAQDPAwAh6AIBAM8DACH7AgEAzwMAIfwCAQDPAwAh_QIBAM8DACH-AgEAzwMAIf8CAQDPAwAhgAMBAM8DACGBAwEAzwMAIQ20AgAAiAQAMLUCAAC4AQAQtgIAAIgEADC7AgEA1wMAIbwCAQDXAwAh6AIBANcDACH7AgEA1wMAIfwCAQDXAwAh_QIBANcDACH-AgEA1wMAIf8CAQDXAwAhgAMBANcDACGBAwEA1wMAIQe0AgAAiQQAMLUCAACyAQAQtgIAAIkEADC8AgEAzwMAIe0CAQDPAwAh7gIBAM8DACGCAwEAzwMAIQe0AgAAigQAMLUCAACfAQAQtgIAAIoEADC8AgEA1wMAIe0CAQDXAwAh7gIBANcDACGCAwEA1wMAIQLtAgEAAAAB7gIBAAAAAQa0AgAAjAQAMLUCAACZAQAQtgIAAIwEADC8AgEAzwMAIe0CAQDPAwAhhAMgAOgDACEGtAIAAI0EADC1AgAAhgEAELYCAACNBAAwvAIBANcDACHtAgEA1wMAIYQDIADtAwAhB7QCAACOBAAwtQIAAIABABC2AgAAjgQAMLwCAQDPAwAh7QIBAM8DACGCAwEAzwMAIYUDAQDbAwAhB7QCAACPBAAwtQIAAG0AELYCAACPBAAwvAIBANcDACHtAgEA1wMAIYIDAQDXAwAhhQMBAOwDACEItAIAAJAEADC1AgAAZwAQtgIAAJAEADC8AgEAzwMAIe0CAQDPAwAhhgMBAM8DACGHAwIAgAQAIYgDAQDPAwAhCQMAAJIEACC0AgAAkQQAMLUCAAALABC2AgAAkQQAMLwCAQDXAwAh7QIBANcDACGGAwEA1wMAIYcDAgCEBAAhiAMBANcDACEXBAAAmgQAIAUAAJsEACAGAACcBAAgtAIAAJkEADC1AgAAEAAQtgIAAJkEADC8AgEA1wMAIekCAQDXAwAh7QIBANcDACGGAwEA1wMAIYcDAgCEBAAhlAMBANcDACGVAwEA7AMAIbYDAQDsAwAhtwMBAOwDACG4AwEA7AMAIbkDAQDsAwAhugMBAOwDACG7AwEA7AMAIbwDAQDsAwAhvQMBANcDACG_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-BAAh4AIBAKoEACHhAgEAqgQAIeICAQCkBAAhC-IBAADnBAAg4wEAAOgEACC3AgEAAAABuwJAAAAAAbwCQAAAAAHdAgEAAAAB3gIBAAAAAd8CIAAAAAHgAgEAAAAB4QIBAAAAAeICAQAAAAECAAAAywIAIBQAAOgFACADAAAA3QIAIBQAAOgFACAVAADsBQAgDQAAAN0CACANAADsBQAg4gEAAMAEACDjAQAAwQQAILcCAQCkBAAhuwJAAKUEACG8AkAApQQAId0CAQCqBAAh3gIBAKoEACHfAiAAvgQAIeACAQCqBAAh4QIBAKoEACHiAgEApAQAIQviAQAAwAQAIOMBAADBBAAgtwIBAKQEACG7AkAApQQAIbwCQAClBAAh3QIBAKoEACHeAgEAqgQAId8CIAC-BAAh4AIBAKoEACHhAgEAqgQAIeICAQCkBAAhC-EBAADmBAAg4wEAAOgEACC3AgEAAAABuwJAAAAAAbwCQAAAAAHdAgEAAAAB3gIBAAAAAd8CIAAAAAHgAgEAAAAB4QIBAAAAAeICAQAAAAECAAAAywIAIBQAAO0FACADAAAA3QIAIBQAAO0FACAVAADxBQAgDQAAAN0CACANAADxBQAg4QEAAL8EACDjAQAAwQQAILcCAQCkBAAhuwJAAKUEACG8AkAApQQAId0CAQCqBAAh3gIBAKoEACHfAiAAvgQAIeACAQCqBAAh4QIBAKoEACHiAgEApAQAIQvhAQAAvwQAIOMBAADBBAAgtwIBAKQEACG7AkAApQQAIbwCQAClBAAh3QIBAKoEACHeAgEAqgQAId8CIAC-BAAh4AIBAKoEACHhAgEAqgQAIeICAQCkBAAhBAQGAgUKAwYMBAcABQEDAAEBAwABAQMAAQIEDQAFDgAAAAAFBwAKGgALGwAMHAANHQAOAAAAAAAFBwAKGgALGwAMHAANHQAOAQMAAQEDAAEFBwATGgAUGwAVHAAWHQAXAAAAAAAFBwATGgAUGwAVHAAWHQAXAQMAAQEDAAEFBwAcGgAdGwAeHAAfHQAgAAAAAAAFBwAcGgAdGwAeHAAfHQAgAQMAAQEDAAEFBwAlGgAmGwAnHAAoHQApAAAAAAAFBwAlGgAmGwAnHAAoHQApAAAAAwcALxwAMB0AMQAAAAMHAC8cADAdADEAAAADBwA3HAA4HQA5AAAAAwcANxwAOB0AOQAAAAMHAD8cAEAdAEEAAAADBwA_HABAHQBBAAAAAwcARxwASB0ASQAAAAMHAEccAEgdAEkAAAAFBwBPGgBQGwBRHABSHQBTAAAAAAAFBwBPGgBQGwBRHABSHQBTAAAABQcAWRoAWhsAWxwAXB0AXQAAAAAABQcAWRoAWhsAWxwAXB0AXQAAAAMHAGMcAGQdAGUAAAADBwBjHABkHQBlAAAAAwcAaxwAbB0AbQAAAAMHAGscAGwdAG0AAAADBwBzHAB0HQB1AAAAAwcAcxwAdB0AdQQHAHvhAdACeOIB1AJ54wHYAnoB4AEAdwHgAQB3AeABAHcD4QHZAgDiAdoCAOMB2wIAAAADBwB_HACAAR0AgQEAAAADBwB_HACAAR0AgQEB4AEAdwHgAQB3AwcAhgEcAIcBHQCIAQAAAAMHAIYBHACHAR0AiAEB4AEAdwHgAQB3BQcAjQEaAI4BGwCPARwAkAEdAJEBAAAAAAAFBwCNARoAjgEbAI8BHACQAR0AkQEB4AEAdwHgAQB3AwcAlgEcAJcBHQCYAQAAAAMHAJYBHACXAR0AmAEAAAADBwCeARwAnwEdAKABAAAAAwcAngEcAJ8BHQCgAQgCAQkPAQoSAQsTAQwUAQ4WAQ8YBhAZBxEbARIdBhMeCBYfARcgARghBh4kCR8lDyAmAiEnAiIoAiMpAiQqAiUsAiYuBicvECgxAikzBio0ESs1Aiw2Ai03Bi46Ei87GDA8AzE9AzI-AzM_AzRAAzVCAzZEBjdFGThHAzlJBjpKGjtLAzxMAz1NBj5QGz9RIUBTBEFUBEJWBENXBERYBEVaBEZcBkddIkhfBElhBkpiI0tjBExkBE1lBk5oJE9pKlBrK1FsK1JvK1NwK1RxK1VzK1Z1Bld2LFh4K1l6Blp7LVt8K1x9K11-Bl6BAS5fggEyYIQBM2GFATNiiAEzY4kBM2SKATNljAEzZo4BBmePATRokQEzaZMBBmqUATVrlQEzbJYBM22XAQZumgE2b5sBOnCdATtxngE7cqEBO3OiATt0owE7daUBO3anAQZ3qAE8eKoBO3msAQZ6rQE9e64BO3yvATt9sAEGfrMBPn-0AUKAAbYBQ4EBtwFDggG6AUODAbsBQ4QBvAFDhQG-AUOGAcABBocBwQFEiAHDAUOJAcUBBooBxgFFiwHHAUOMAcgBQ40ByQEGjgHMAUaPAc0BSpABzwFLkQHQAUuSAdMBS5MB1AFLlAHVAUuVAdcBS5YB2QEGlwHaAUyYAdwBS5kB3gEGmgHfAU2bAeABS5wB4QFLnQHiAQaeAeUBTp8B5gFUoAHoAVWhAekBVaIB7AFVowHtAVWkAe4BVaUB8AFVpgHyAQanAfMBVqgB9QFVqQH3AQaqAfgBV6sB-QFVrAH6AVWtAfsBBq4B_gFYrwH_AV6wAYECX7EBggJfsgGFAl-zAYYCX7QBhwJftQGJAl-2AYsCBrcBjAJguAGOAl-5AZACBroBkQJhuwGSAl-8AZMCX70BlAIGvgGXAmK_AZgCZsABmgJnwQGbAmfCAZ4CZ8MBnwJnxAGgAmfFAaICZ8YBpAIGxwGlAmjIAacCZ8kBqQIGygGqAmnLAasCZ8wBrAJnzQGtAgbOAbACas8BsQJu0AGzAm_RAbQCb9IBtwJv0wG4Am_UAbkCb9UBuwJv1gG9AgbXAb4CcNgBwAJv2QHCAgbaAcMCcdsBxAJv3AHFAm_dAcYCBt4ByQJy3wHKAnbkAcwCd-UB3AJ35gHfAnfnAeACd-gB4QJ36QHjAnfqAeUCBusB5gJ87AHoAnftAeoCBu4B6wJ97wHsAnfwAe0Cd_EB7gIG8gHxAn7zAfICggH0AfMCevUB9AJ69gH1Anr3AfYCevgB9wJ6-QH5Anr6AfsCBvsB_AKDAfwB_gJ6_QGAAwb-AYEDhAH_AYIDeoACgwN6gQKEAwaCAocDhQGDAogDiQGEAokDeIUCigN4hgKLA3iHAowDeIgCjQN4iQKPA3iKApEDBosCkgOKAYwClAN4jQKWAwaOApcDiwGPApgDeJACmQN4kQKaAwaSAp0DjAGTAp4DkgGUAp8DeZUCoAN5lgKhA3mXAqIDeZgCowN5mQKlA3maAqcDBpsCqAOTAZwCqgN5nQKsAwaeAq0DlAGfAq4DeaACrwN5oQKwAwaiArMDlQGjArQDmQGkArYDmgGlArcDmgGmAroDmgGnArsDmgGoArwDmgGpAr4DmgGqAsADBqsCwQObAawCwwOaAa0CxQMGrgLGA5wBrwLHA5oBsALIA5oBsQLJAwayAswDnQGzAs0DoQE"
15551
+ strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"run\",\"workItems\",\"executionInstances\",\"slotProjection\",\"_count\",\"Run.findUnique\",\"Run.findUniqueOrThrow\",\"Run.findFirst\",\"Run.findFirstOrThrow\",\"Run.findMany\",\"data\",\"Run.createOne\",\"Run.createMany\",\"Run.createManyAndReturn\",\"Run.updateOne\",\"Run.updateMany\",\"Run.updateManyAndReturn\",\"create\",\"update\",\"Run.upsertOne\",\"Run.deleteOne\",\"Run.deleteMany\",\"having\",\"_avg\",\"_sum\",\"_min\",\"_max\",\"Run.groupBy\",\"Run.aggregate\",\"RunWorkItem.findUnique\",\"RunWorkItem.findUniqueOrThrow\",\"RunWorkItem.findFirst\",\"RunWorkItem.findFirstOrThrow\",\"RunWorkItem.findMany\",\"RunWorkItem.createOne\",\"RunWorkItem.createMany\",\"RunWorkItem.createManyAndReturn\",\"RunWorkItem.updateOne\",\"RunWorkItem.updateMany\",\"RunWorkItem.updateManyAndReturn\",\"RunWorkItem.upsertOne\",\"RunWorkItem.deleteOne\",\"RunWorkItem.deleteMany\",\"RunWorkItem.groupBy\",\"RunWorkItem.aggregate\",\"ExecutionInstance.findUnique\",\"ExecutionInstance.findUniqueOrThrow\",\"ExecutionInstance.findFirst\",\"ExecutionInstance.findFirstOrThrow\",\"ExecutionInstance.findMany\",\"ExecutionInstance.createOne\",\"ExecutionInstance.createMany\",\"ExecutionInstance.createManyAndReturn\",\"ExecutionInstance.updateOne\",\"ExecutionInstance.updateMany\",\"ExecutionInstance.updateManyAndReturn\",\"ExecutionInstance.upsertOne\",\"ExecutionInstance.deleteOne\",\"ExecutionInstance.deleteMany\",\"ExecutionInstance.groupBy\",\"ExecutionInstance.aggregate\",\"RunSlotProjection.findUnique\",\"RunSlotProjection.findUniqueOrThrow\",\"RunSlotProjection.findFirst\",\"RunSlotProjection.findFirstOrThrow\",\"RunSlotProjection.findMany\",\"RunSlotProjection.createOne\",\"RunSlotProjection.createMany\",\"RunSlotProjection.createManyAndReturn\",\"RunSlotProjection.updateOne\",\"RunSlotProjection.updateMany\",\"RunSlotProjection.updateManyAndReturn\",\"RunSlotProjection.upsertOne\",\"RunSlotProjection.deleteOne\",\"RunSlotProjection.deleteMany\",\"RunSlotProjection.groupBy\",\"RunSlotProjection.aggregate\",\"WorkflowDebuggerOverlay.findUnique\",\"WorkflowDebuggerOverlay.findUniqueOrThrow\",\"WorkflowDebuggerOverlay.findFirst\",\"WorkflowDebuggerOverlay.findFirstOrThrow\",\"WorkflowDebuggerOverlay.findMany\",\"WorkflowDebuggerOverlay.createOne\",\"WorkflowDebuggerOverlay.createMany\",\"WorkflowDebuggerOverlay.createManyAndReturn\",\"WorkflowDebuggerOverlay.updateOne\",\"WorkflowDebuggerOverlay.updateMany\",\"WorkflowDebuggerOverlay.updateManyAndReturn\",\"WorkflowDebuggerOverlay.upsertOne\",\"WorkflowDebuggerOverlay.deleteOne\",\"WorkflowDebuggerOverlay.deleteMany\",\"WorkflowDebuggerOverlay.groupBy\",\"WorkflowDebuggerOverlay.aggregate\",\"WorkflowActivation.findUnique\",\"WorkflowActivation.findUniqueOrThrow\",\"WorkflowActivation.findFirst\",\"WorkflowActivation.findFirstOrThrow\",\"WorkflowActivation.findMany\",\"WorkflowActivation.createOne\",\"WorkflowActivation.createMany\",\"WorkflowActivation.createManyAndReturn\",\"WorkflowActivation.updateOne\",\"WorkflowActivation.updateMany\",\"WorkflowActivation.updateManyAndReturn\",\"WorkflowActivation.upsertOne\",\"WorkflowActivation.deleteOne\",\"WorkflowActivation.deleteMany\",\"WorkflowActivation.groupBy\",\"WorkflowActivation.aggregate\",\"TriggerSetupState.findUnique\",\"TriggerSetupState.findUniqueOrThrow\",\"TriggerSetupState.findFirst\",\"TriggerSetupState.findFirstOrThrow\",\"TriggerSetupState.findMany\",\"TriggerSetupState.createOne\",\"TriggerSetupState.createMany\",\"TriggerSetupState.createManyAndReturn\",\"TriggerSetupState.updateOne\",\"TriggerSetupState.updateMany\",\"TriggerSetupState.updateManyAndReturn\",\"TriggerSetupState.upsertOne\",\"TriggerSetupState.deleteOne\",\"TriggerSetupState.deleteMany\",\"TriggerSetupState.groupBy\",\"TriggerSetupState.aggregate\",\"RunTraceContext.findUnique\",\"RunTraceContext.findUniqueOrThrow\",\"RunTraceContext.findFirst\",\"RunTraceContext.findFirstOrThrow\",\"RunTraceContext.findMany\",\"RunTraceContext.createOne\",\"RunTraceContext.createMany\",\"RunTraceContext.createManyAndReturn\",\"RunTraceContext.updateOne\",\"RunTraceContext.updateMany\",\"RunTraceContext.updateManyAndReturn\",\"RunTraceContext.upsertOne\",\"RunTraceContext.deleteOne\",\"RunTraceContext.deleteMany\",\"RunTraceContext.groupBy\",\"RunTraceContext.aggregate\",\"TelemetrySpan.findUnique\",\"TelemetrySpan.findUniqueOrThrow\",\"TelemetrySpan.findFirst\",\"TelemetrySpan.findFirstOrThrow\",\"TelemetrySpan.findMany\",\"TelemetrySpan.createOne\",\"TelemetrySpan.createMany\",\"TelemetrySpan.createManyAndReturn\",\"TelemetrySpan.updateOne\",\"TelemetrySpan.updateMany\",\"TelemetrySpan.updateManyAndReturn\",\"TelemetrySpan.upsertOne\",\"TelemetrySpan.deleteOne\",\"TelemetrySpan.deleteMany\",\"TelemetrySpan.groupBy\",\"TelemetrySpan.aggregate\",\"TelemetryArtifact.findUnique\",\"TelemetryArtifact.findUniqueOrThrow\",\"TelemetryArtifact.findFirst\",\"TelemetryArtifact.findFirstOrThrow\",\"TelemetryArtifact.findMany\",\"TelemetryArtifact.createOne\",\"TelemetryArtifact.createMany\",\"TelemetryArtifact.createManyAndReturn\",\"TelemetryArtifact.updateOne\",\"TelemetryArtifact.updateMany\",\"TelemetryArtifact.updateManyAndReturn\",\"TelemetryArtifact.upsertOne\",\"TelemetryArtifact.deleteOne\",\"TelemetryArtifact.deleteMany\",\"TelemetryArtifact.groupBy\",\"TelemetryArtifact.aggregate\",\"TelemetryMetricPoint.findUnique\",\"TelemetryMetricPoint.findUniqueOrThrow\",\"TelemetryMetricPoint.findFirst\",\"TelemetryMetricPoint.findFirstOrThrow\",\"TelemetryMetricPoint.findMany\",\"TelemetryMetricPoint.createOne\",\"TelemetryMetricPoint.createMany\",\"TelemetryMetricPoint.createManyAndReturn\",\"TelemetryMetricPoint.updateOne\",\"TelemetryMetricPoint.updateMany\",\"TelemetryMetricPoint.updateManyAndReturn\",\"TelemetryMetricPoint.upsertOne\",\"TelemetryMetricPoint.deleteOne\",\"TelemetryMetricPoint.deleteMany\",\"TelemetryMetricPoint.groupBy\",\"TelemetryMetricPoint.aggregate\",\"CredentialInstance.findUnique\",\"CredentialInstance.findUniqueOrThrow\",\"CredentialInstance.findFirst\",\"CredentialInstance.findFirstOrThrow\",\"CredentialInstance.findMany\",\"CredentialInstance.createOne\",\"CredentialInstance.createMany\",\"CredentialInstance.createManyAndReturn\",\"CredentialInstance.updateOne\",\"CredentialInstance.updateMany\",\"CredentialInstance.updateManyAndReturn\",\"CredentialInstance.upsertOne\",\"CredentialInstance.deleteOne\",\"CredentialInstance.deleteMany\",\"CredentialInstance.groupBy\",\"CredentialInstance.aggregate\",\"CredentialSecretMaterial.findUnique\",\"CredentialSecretMaterial.findUniqueOrThrow\",\"CredentialSecretMaterial.findFirst\",\"CredentialSecretMaterial.findFirstOrThrow\",\"CredentialSecretMaterial.findMany\",\"CredentialSecretMaterial.createOne\",\"CredentialSecretMaterial.createMany\",\"CredentialSecretMaterial.createManyAndReturn\",\"CredentialSecretMaterial.updateOne\",\"CredentialSecretMaterial.updateMany\",\"CredentialSecretMaterial.updateManyAndReturn\",\"CredentialSecretMaterial.upsertOne\",\"CredentialSecretMaterial.deleteOne\",\"CredentialSecretMaterial.deleteMany\",\"CredentialSecretMaterial.groupBy\",\"CredentialSecretMaterial.aggregate\",\"CredentialOAuth2Material.findUnique\",\"CredentialOAuth2Material.findUniqueOrThrow\",\"CredentialOAuth2Material.findFirst\",\"CredentialOAuth2Material.findFirstOrThrow\",\"CredentialOAuth2Material.findMany\",\"CredentialOAuth2Material.createOne\",\"CredentialOAuth2Material.createMany\",\"CredentialOAuth2Material.createManyAndReturn\",\"CredentialOAuth2Material.updateOne\",\"CredentialOAuth2Material.updateMany\",\"CredentialOAuth2Material.updateManyAndReturn\",\"CredentialOAuth2Material.upsertOne\",\"CredentialOAuth2Material.deleteOne\",\"CredentialOAuth2Material.deleteMany\",\"CredentialOAuth2Material.groupBy\",\"CredentialOAuth2Material.aggregate\",\"CredentialOAuth2State.findUnique\",\"CredentialOAuth2State.findUniqueOrThrow\",\"CredentialOAuth2State.findFirst\",\"CredentialOAuth2State.findFirstOrThrow\",\"CredentialOAuth2State.findMany\",\"CredentialOAuth2State.createOne\",\"CredentialOAuth2State.createMany\",\"CredentialOAuth2State.createManyAndReturn\",\"CredentialOAuth2State.updateOne\",\"CredentialOAuth2State.updateMany\",\"CredentialOAuth2State.updateManyAndReturn\",\"CredentialOAuth2State.upsertOne\",\"CredentialOAuth2State.deleteOne\",\"CredentialOAuth2State.deleteMany\",\"CredentialOAuth2State.groupBy\",\"CredentialOAuth2State.aggregate\",\"CredentialBinding.findUnique\",\"CredentialBinding.findUniqueOrThrow\",\"CredentialBinding.findFirst\",\"CredentialBinding.findFirstOrThrow\",\"CredentialBinding.findMany\",\"CredentialBinding.createOne\",\"CredentialBinding.createMany\",\"CredentialBinding.createManyAndReturn\",\"CredentialBinding.updateOne\",\"CredentialBinding.updateMany\",\"CredentialBinding.updateManyAndReturn\",\"CredentialBinding.upsertOne\",\"CredentialBinding.deleteOne\",\"CredentialBinding.deleteMany\",\"CredentialBinding.groupBy\",\"CredentialBinding.aggregate\",\"CredentialTestResult.findUnique\",\"CredentialTestResult.findUniqueOrThrow\",\"CredentialTestResult.findFirst\",\"CredentialTestResult.findFirstOrThrow\",\"CredentialTestResult.findMany\",\"CredentialTestResult.createOne\",\"CredentialTestResult.createMany\",\"CredentialTestResult.createManyAndReturn\",\"CredentialTestResult.updateOne\",\"CredentialTestResult.updateMany\",\"CredentialTestResult.updateManyAndReturn\",\"CredentialTestResult.upsertOne\",\"CredentialTestResult.deleteOne\",\"CredentialTestResult.deleteMany\",\"CredentialTestResult.groupBy\",\"CredentialTestResult.aggregate\",\"user\",\"accounts\",\"sessions\",\"invites\",\"User.findUnique\",\"User.findUniqueOrThrow\",\"User.findFirst\",\"User.findFirstOrThrow\",\"User.findMany\",\"User.createOne\",\"User.createMany\",\"User.createManyAndReturn\",\"User.updateOne\",\"User.updateMany\",\"User.updateManyAndReturn\",\"User.upsertOne\",\"User.deleteOne\",\"User.deleteMany\",\"User.groupBy\",\"User.aggregate\",\"UserInvite.findUnique\",\"UserInvite.findUniqueOrThrow\",\"UserInvite.findFirst\",\"UserInvite.findFirstOrThrow\",\"UserInvite.findMany\",\"UserInvite.createOne\",\"UserInvite.createMany\",\"UserInvite.createManyAndReturn\",\"UserInvite.updateOne\",\"UserInvite.updateMany\",\"UserInvite.updateManyAndReturn\",\"UserInvite.upsertOne\",\"UserInvite.deleteOne\",\"UserInvite.deleteMany\",\"UserInvite.groupBy\",\"UserInvite.aggregate\",\"Account.findUnique\",\"Account.findUniqueOrThrow\",\"Account.findFirst\",\"Account.findFirstOrThrow\",\"Account.findMany\",\"Account.createOne\",\"Account.createMany\",\"Account.createManyAndReturn\",\"Account.updateOne\",\"Account.updateMany\",\"Account.updateManyAndReturn\",\"Account.upsertOne\",\"Account.deleteOne\",\"Account.deleteMany\",\"Account.groupBy\",\"Account.aggregate\",\"Session.findUnique\",\"Session.findUniqueOrThrow\",\"Session.findFirst\",\"Session.findFirstOrThrow\",\"Session.findMany\",\"Session.createOne\",\"Session.createMany\",\"Session.createManyAndReturn\",\"Session.updateOne\",\"Session.updateMany\",\"Session.updateManyAndReturn\",\"Session.upsertOne\",\"Session.deleteOne\",\"Session.deleteMany\",\"Session.groupBy\",\"Session.aggregate\",\"VerificationToken.findUnique\",\"VerificationToken.findUniqueOrThrow\",\"VerificationToken.findFirst\",\"VerificationToken.findFirstOrThrow\",\"VerificationToken.findMany\",\"VerificationToken.createOne\",\"VerificationToken.createMany\",\"VerificationToken.createManyAndReturn\",\"VerificationToken.updateOne\",\"VerificationToken.updateMany\",\"VerificationToken.updateManyAndReturn\",\"VerificationToken.upsertOne\",\"VerificationToken.deleteOne\",\"VerificationToken.deleteMany\",\"VerificationToken.groupBy\",\"VerificationToken.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"identifier\",\"token\",\"expires\",\"createdAt\",\"updatedAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"contains\",\"startsWith\",\"endsWith\",\"identifier_token\",\"sessionToken\",\"userId\",\"ipAddress\",\"userAgent\",\"type\",\"provider\",\"providerAccountId\",\"password\",\"refresh_token\",\"access_token\",\"expires_at\",\"accessTokenExpiresAt\",\"refreshTokenExpiresAt\",\"token_type\",\"scope\",\"id_token\",\"session_state\",\"tokenHash\",\"expiresAt\",\"revokedAt\",\"name\",\"email\",\"emailVerified\",\"image\",\"passwordHash\",\"accountStatus\",\"every\",\"some\",\"none\",\"provider_providerAccountId\",\"testId\",\"instanceId\",\"status\",\"message\",\"detailsJson\",\"testedAt\",\"workflowId\",\"nodeId\",\"slotKey\",\"workflowId_nodeId_slotKey\",\"state\",\"codeVerifier\",\"providerId\",\"requestedScopesJson\",\"encryptedJson\",\"encryptionKeyId\",\"schemaVersion\",\"connectedEmail\",\"connectedAt\",\"scopesJson\",\"typeId\",\"displayName\",\"sourceKind\",\"publicConfigJson\",\"secretRefJson\",\"tagsJson\",\"setupStatus\",\"metricPointId\",\"traceId\",\"spanId\",\"runId\",\"activationId\",\"metricName\",\"value\",\"unit\",\"observedAt\",\"workflowFolder\",\"nodeType\",\"nodeRole\",\"modelName\",\"dimensionsJson\",\"retentionExpiresAt\",\"artifactId\",\"kind\",\"contentType\",\"previewText\",\"previewJson\",\"payloadText\",\"payloadJson\",\"bytes\",\"truncated\",\"telemetrySpanId\",\"parentSpanId\",\"connectionInvocationId\",\"statusMessage\",\"startTime\",\"endTime\",\"attributesJson\",\"eventsJson\",\"traceId_spanId\",\"rootSpanId\",\"serviceName\",\"stateJson\",\"workflowId_nodeId\",\"isActive\",\"copiedFromRunId\",\"revision\",\"slotStatesJson\",\"slotNodeId\",\"workflowNodeId\",\"connectionKind\",\"batchId\",\"runIndex\",\"parentInstanceId\",\"parentRunId\",\"workerClaimToken\",\"queuedAt\",\"startedAt\",\"finishedAt\",\"itemCount\",\"inputJson\",\"outputJson\",\"errorJson\",\"inputItemIndicesJson\",\"outputItemCount\",\"successfulItemCount\",\"failedItemCount\",\"inputStorageKind\",\"outputStorageKind\",\"inputBytes\",\"outputBytes\",\"inputPreviewJson\",\"outputPreviewJson\",\"inputPayloadRef\",\"outputPayloadRef\",\"inputTruncated\",\"outputTruncated\",\"usedPinnedOutput\",\"workItemId\",\"targetNodeId\",\"queueName\",\"claimToken\",\"claimedBy\",\"claimedAt\",\"availableAt\",\"enqueuedAt\",\"completedAt\",\"failedAt\",\"sourceInstanceId\",\"itemsIn\",\"inputsByPortJson\",\"parentJson\",\"executionOptionsJson\",\"controlJson\",\"workflowSnapshotJson\",\"policySnapshotJson\",\"engineCountersJson\",\"mutableStateJson\",\"outputsByNodeJson\",\"runId_slotNodeId_runIndex\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"),
15552
+ graph: "8gbFAeACFQQAAIsFACAFAACMBQAgBgAAjQUAIPQCAACKBQAw9QIAABAAEPYCAACKBQAw_AIBALsEACGpAwEAuwQAIa0DAQC7BAAhxQMBAAAAAekDAgDoBAAh9AMBALsEACH1AwEA0AQAIZYEAQDQBAAhlwQBANAEACGYBAEA0AQAIZkEAQDQBAAhmgQBANAEACGbBAEA0AQAIZwEAQDQBAAhnQQBALsEACEBAAAAAQAgFwMAAIYFACD0AgAAkAUAMPUCAAADABD2AgAAkAUAMKkDAQC7BAAhrQMBALsEACHFAwEAuwQAIe4DAQC7BAAh8AMBANAEACH5AwEA0AQAIYkEAQC7BAAhigQBALsEACGLBAEA0AQAIYwEAQDQBAAhjQQBANAEACGOBAEA0AQAIY8EAQC7BAAhkAQBALsEACGRBAEA0AQAIZIEAQDQBAAhkwQBANAEACGUBAIA6AQAIZUEAQC7BAAhCgMAAJYGACDwAwAAlgUAIPkDAACWBQAgiwQAAJYFACCMBAAAlgUAII0EAACWBQAgjgQAAJYFACCRBAAAlgUAIJIEAACWBQAgkwQAAJYFACAXAwAAhgUAIPQCAACQBQAw9QIAAAMAEPYCAACQBQAwqQMBALsEACGtAwEAuwQAIcUDAQC7BAAh7gMBALsEACHwAwEA0AQAIfkDAQDQBAAhiQQBAAAAAYoEAQC7BAAhiwQBANAEACGMBAEA0AQAIY0EAQDQBAAhjgQBANAEACGPBAEAuwQAIZAEAQC7BAAhkQQBANAEACGSBAEA0AQAIZMEAQDQBAAhlAQCAOgEACGVBAEAuwQAIQMAAAADACABAAAEADACAAAFACApAwAAhgUAIPQCAACPBQAw9QIAAAcAEPYCAACPBQAw_AIBALsEACGoAwEAuwQAIakDAQC7BAAhrQMBALsEACHFAwEAuwQAIcYDAQDQBAAh0gMBALsEACHrAwEAuwQAIewDAQC7BAAh7QMBANAEACHuAwEAuwQAIe8DAgDoBAAh8AMBANAEACHxAwEA0AQAIfIDAQDQBAAh8wMBANAEACH0AwEA0AQAIfUDAQDQBAAh9gMCAOgEACH3AwEA0AQAIfgDAQDQBAAh-QMBANAEACH6AwEA0AQAIfsDAgDbBAAh_AMCANsEACH9AwIA2wQAIf4DAQDQBAAh_wMBANAEACGABAIA2wQAIYEEAgDbBAAhggQBANAEACGDBAEA0AQAIYQEAQDQBAAhhQQBANAEACGGBCAA9wQAIYcEIAD3BAAhiAQgAPcEACEbAwAAlgYAIMYDAACWBQAg7QMAAJYFACDwAwAAlgUAIPEDAACWBQAg8gMAAJYFACDzAwAAlgUAIPQDAACWBQAg9QMAAJYFACD3AwAAlgUAIPgDAACWBQAg-QMAAJYFACD6AwAAlgUAIPsDAACWBQAg_AMAAJYFACD9AwAAlgUAIP4DAACWBQAg_wMAAJYFACCABAAAlgUAIIEEAACWBQAgggQAAJYFACCDBAAAlgUAIIQEAACWBQAghQQAAJYFACCGBAAAlgUAIIcEAACWBQAgiAQAAJYFACAqAwAAhgUAIPQCAACPBQAw9QIAAAcAEPYCAACPBQAw_AIBALsEACGoAwEAAAABqQMBALsEACGtAwEAuwQAIcUDAQC7BAAhxgMBANAEACHSAwEAuwQAIesDAQC7BAAh7AMBALsEACHtAwEA0AQAIe4DAQC7BAAh7wMCAOgEACHwAwEA0AQAIfEDAQDQBAAh8gMBANAEACHzAwEA0AQAIfQDAQDQBAAh9QMBANAEACH2AwIA6AQAIfcDAQDQBAAh-AMBANAEACH5AwEA0AQAIfoDAQDQBAAh-wMCANsEACH8AwIA2wQAIf0DAgDbBAAh_gMBANAEACH_AwEA0AQAIYAEAgDbBAAhgQQCANsEACGCBAEA0AQAIYMEAQDQBAAhhAQBANAEACGFBAEA0AQAIYYEIAD3BAAhhwQgAPcEACGIBCAA9wQAIZ4EAACOBQAgAwAAAAcAIAEAAAgAMAIAAAkAIAkDAACGBQAg9AIAAIUFADD1AgAACwAQ9gIAAIUFADD8AgEAuwQAIa0DAQC7BAAhxQMBALsEACHpAwIA6AQAIeoDAQC7BAAhAQAAAAsAIAEAAAADACABAAAABwAgAQAAAAEAIBUEAACLBQAgBQAAjAUAIAYAAI0FACD0AgAAigUAMPUCAAAQABD2AgAAigUAMPwCAQC7BAAhqQMBALsEACGtAwEAuwQAIcUDAQC7BAAh6QMCAOgEACH0AwEAuwQAIfUDAQDQBAAhlgQBANAEACGXBAEA0AQAIZgEAQDQBAAhmQQBANAEACGaBAEA0AQAIZsEAQDQBAAhnAQBANAEACGdBAEAuwQAIQsEAADNBgAgBQAAzgYAIAYAAM8GACD1AwAAlgUAIJYEAACWBQAglwQAAJYFACCYBAAAlgUAIJkEAACWBQAgmgQAAJYFACCbBAAAlgUAIJwEAACWBQAgAwAAABAAIAEAABEAMAIAAAEAIAMAAAAQACABAAARADACAAABACADAAAAEAAgAQAAEQAwAgAAAQAgEgQAAMoGACAFAADLBgAgBgAAzAYAIPwCAQAAAAGpAwEAAAABrQMBAAAAAcUDAQAAAAHpAwIAAAAB9AMBAAAAAfUDAQAAAAGWBAEAAAABlwQBAAAAAZgEAQAAAAGZBAEAAAABmgQBAAAAAZsEAQAAAAGcBAEAAAABnQQBAAAAAQENAAAVACAP_AIBAAAAAakDAQAAAAGtAwEAAAABxQMBAAAAAekDAgAAAAH0AwEAAAAB9QMBAAAAAZYEAQAAAAGXBAEAAAABmAQBAAAAAZkEAQAAAAGaBAEAAAABmwQBAAAAAZwEAQAAAAGdBAEAAAABAQ0AABcAMAENAAAXADASBAAAqgYAIAUAAKsGACAGAACsBgAg_AIBAJQFACGpAwEAlAUAIa0DAQCUBQAhxQMBAJQFACHpAwIA6wUAIfQDAQCUBQAh9QMBAJoFACGWBAEAmgUAIZcEAQCaBQAhmAQBAJoFACGZBAEAmgUAIZoEAQCaBQAhmwQBAJoFACGcBAEAmgUAIZ0EAQCUBQAhAgAAAAEAIA0AABoAIA_8AgEAlAUAIakDAQCUBQAhrQMBAJQFACHFAwEAlAUAIekDAgDrBQAh9AMBAJQFACH1AwEAmgUAIZYEAQCaBQAhlwQBAJoFACGYBAEAmgUAIZkEAQCaBQAhmgQBAJoFACGbBAEAmgUAIZwEAQCaBQAhnQQBAJQFACECAAAAEAAgDQAAHAAgAgAAABAAIA0AABwAIAMAAAABACAUAAAVACAVAAAaACABAAAAAQAgAQAAABAAIA0HAAClBgAgGgAApgYAIBsAAKkGACAcAACoBgAgHQAApwYAIPUDAACWBQAglgQAAJYFACCXBAAAlgUAIJgEAACWBQAgmQQAAJYFACCaBAAAlgUAIJsEAACWBQAgnAQAAJYFACAS9AIAAIkFADD1AgAAIwAQ9gIAAIkFADD8AgEAswQAIakDAQCzBAAhrQMBALMEACHFAwEAswQAIekDAgDkBAAh9AMBALMEACH1AwEAvwQAIZYEAQC_BAAhlwQBAL8EACGYBAEAvwQAIZkEAQC_BAAhmgQBAL8EACGbBAEAvwQAIZwEAQC_BAAhnQQBALMEACEDAAAAEAAgAQAAIgAwGQAAIwAgAwAAABAAIAEAABEAMAIAAAEAIAEAAAAFACABAAAABQAgAwAAAAMAIAEAAAQAMAIAAAUAIAMAAAADACABAAAEADACAAAFACADAAAAAwAgAQAABAAwAgAABQAgFAMAAKQGACCpAwEAAAABrQMBAAAAAcUDAQAAAAHuAwEAAAAB8AMBAAAAAfkDAQAAAAGJBAEAAAABigQBAAAAAYsEAQAAAAGMBAEAAAABjQQBAAAAAY4EAQAAAAGPBAEAAAABkAQBAAAAAZEEAQAAAAGSBAEAAAABkwQBAAAAAZQEAgAAAAGVBAEAAAABAQ0AACsAIBOpAwEAAAABrQMBAAAAAcUDAQAAAAHuAwEAAAAB8AMBAAAAAfkDAQAAAAGJBAEAAAABigQBAAAAAYsEAQAAAAGMBAEAAAABjQQBAAAAAY4EAQAAAAGPBAEAAAABkAQBAAAAAZEEAQAAAAGSBAEAAAABkwQBAAAAAZQEAgAAAAGVBAEAAAABAQ0AAC0AMAENAAAtADAUAwAAowYAIKkDAQCUBQAhrQMBAJQFACHFAwEAlAUAIe4DAQCUBQAh8AMBAJoFACH5AwEAmgUAIYkEAQCUBQAhigQBAJQFACGLBAEAmgUAIYwEAQCaBQAhjQQBAJoFACGOBAEAmgUAIY8EAQCUBQAhkAQBAJQFACGRBAEAmgUAIZIEAQCaBQAhkwQBAJoFACGUBAIA6wUAIZUEAQCUBQAhAgAAAAUAIA0AADAAIBOpAwEAlAUAIa0DAQCUBQAhxQMBAJQFACHuAwEAlAUAIfADAQCaBQAh-QMBAJoFACGJBAEAlAUAIYoEAQCUBQAhiwQBAJoFACGMBAEAmgUAIY0EAQCaBQAhjgQBAJoFACGPBAEAlAUAIZAEAQCUBQAhkQQBAJoFACGSBAEAmgUAIZMEAQCaBQAhlAQCAOsFACGVBAEAlAUAIQIAAAADACANAAAyACACAAAAAwAgDQAAMgAgAwAAAAUAIBQAACsAIBUAADAAIAEAAAAFACABAAAAAwAgDgcAAJ4GACAaAACfBgAgGwAAogYAIBwAAKEGACAdAACgBgAg8AMAAJYFACD5AwAAlgUAIIsEAACWBQAgjAQAAJYFACCNBAAAlgUAII4EAACWBQAgkQQAAJYFACCSBAAAlgUAIJMEAACWBQAgFvQCAACIBQAw9QIAADkAEPYCAACIBQAwqQMBALMEACGtAwEAswQAIcUDAQCzBAAh7gMBALMEACHwAwEAvwQAIfkDAQC_BAAhiQQBALMEACGKBAEAswQAIYsEAQC_BAAhjAQBAL8EACGNBAEAvwQAIY4EAQC_BAAhjwQBALMEACGQBAEAswQAIZEEAQC_BAAhkgQBAL8EACGTBAEAvwQAIZQEAgDkBAAhlQQBALMEACEDAAAAAwAgAQAAOAAwGQAAOQAgAwAAAAMAIAEAAAQAMAIAAAUAIAEAAAAJACABAAAACQAgAwAAAAcAIAEAAAgAMAIAAAkAIAMAAAAHACABAAAIADACAAAJACADAAAABwAgAQAACAAwAgAACQAgJgMAAJ0GACD8AgEAAAABqAMBAAAAAakDAQAAAAGtAwEAAAABxQMBAAAAAcYDAQAAAAHSAwEAAAAB6wMBAAAAAewDAQAAAAHtAwEAAAAB7gMBAAAAAe8DAgAAAAHwAwEAAAAB8QMBAAAAAfIDAQAAAAHzAwEAAAAB9AMBAAAAAfUDAQAAAAH2AwIAAAAB9wMBAAAAAfgDAQAAAAH5AwEAAAAB-gMBAAAAAfsDAgAAAAH8AwIAAAAB_QMCAAAAAf4DAQAAAAH_AwEAAAABgAQCAAAAAYEEAgAAAAGCBAEAAAABgwQBAAAAAYQEAQAAAAGFBAEAAAABhgQgAAAAAYcEIAAAAAGIBCAAAAABAQ0AAEEAICX8AgEAAAABqAMBAAAAAakDAQAAAAGtAwEAAAABxQMBAAAAAcYDAQAAAAHSAwEAAAAB6wMBAAAAAewDAQAAAAHtAwEAAAAB7gMBAAAAAe8DAgAAAAHwAwEAAAAB8QMBAAAAAfIDAQAAAAHzAwEAAAAB9AMBAAAAAfUDAQAAAAH2AwIAAAAB9wMBAAAAAfgDAQAAAAH5AwEAAAAB-gMBAAAAAfsDAgAAAAH8AwIAAAAB_QMCAAAAAf4DAQAAAAH_AwEAAAABgAQCAAAAAYEEAgAAAAGCBAEAAAABgwQBAAAAAYQEAQAAAAGFBAEAAAABhgQgAAAAAYcEIAAAAAGIBCAAAAABAQ0AAEMAMAENAABDADAmAwAAnAYAIPwCAQCUBQAhqAMBAJQFACGpAwEAlAUAIa0DAQCUBQAhxQMBAJQFACHGAwEAmgUAIdIDAQCUBQAh6wMBAJQFACHsAwEAlAUAIe0DAQCaBQAh7gMBAJQFACHvAwIA6wUAIfADAQCaBQAh8QMBAJoFACHyAwEAmgUAIfMDAQCaBQAh9AMBAJoFACH1AwEAmgUAIfYDAgDrBQAh9wMBAJoFACH4AwEAmgUAIfkDAQCaBQAh-gMBAJoFACH7AwIAogUAIfwDAgCiBQAh_QMCAKIFACH-AwEAmgUAIf8DAQCaBQAhgAQCAKIFACGBBAIAogUAIYIEAQCaBQAhgwQBAJoFACGEBAEAmgUAIYUEAQCaBQAhhgQgAP8FACGHBCAA_wUAIYgEIAD_BQAhAgAAAAkAIA0AAEYAICX8AgEAlAUAIagDAQCUBQAhqQMBAJQFACGtAwEAlAUAIcUDAQCUBQAhxgMBAJoFACHSAwEAlAUAIesDAQCUBQAh7AMBAJQFACHtAwEAmgUAIe4DAQCUBQAh7wMCAOsFACHwAwEAmgUAIfEDAQCaBQAh8gMBAJoFACHzAwEAmgUAIfQDAQCaBQAh9QMBAJoFACH2AwIA6wUAIfcDAQCaBQAh-AMBAJoFACH5AwEAmgUAIfoDAQCaBQAh-wMCAKIFACH8AwIAogUAIf0DAgCiBQAh_gMBAJoFACH_AwEAmgUAIYAEAgCiBQAhgQQCAKIFACGCBAEAmgUAIYMEAQCaBQAhhAQBAJoFACGFBAEAmgUAIYYEIAD_BQAhhwQgAP8FACGIBCAA_wUAIQIAAAAHACANAABIACACAAAABwAgDQAASAAgAwAAAAkAIBQAAEEAIBUAAEYAIAEAAAAJACABAAAABwAgHwcAAJcGACAaAACYBgAgGwAAmwYAIBwAAJoGACAdAACZBgAgxgMAAJYFACDtAwAAlgUAIPADAACWBQAg8QMAAJYFACDyAwAAlgUAIPMDAACWBQAg9AMAAJYFACD1AwAAlgUAIPcDAACWBQAg-AMAAJYFACD5AwAAlgUAIPoDAACWBQAg-wMAAJYFACD8AwAAlgUAIP0DAACWBQAg_gMAAJYFACD_AwAAlgUAIIAEAACWBQAggQQAAJYFACCCBAAAlgUAIIMEAACWBQAghAQAAJYFACCFBAAAlgUAIIYEAACWBQAghwQAAJYFACCIBAAAlgUAICj0AgAAhwUAMPUCAABPABD2AgAAhwUAMPwCAQCzBAAhqAMBALMEACGpAwEAswQAIa0DAQCzBAAhxQMBALMEACHGAwEAvwQAIdIDAQCzBAAh6wMBALMEACHsAwEAswQAIe0DAQC_BAAh7gMBALMEACHvAwIA5AQAIfADAQC_BAAh8QMBAL8EACHyAwEAvwQAIfMDAQC_BAAh9AMBAL8EACH1AwEAvwQAIfYDAgDkBAAh9wMBAL8EACH4AwEAvwQAIfkDAQC_BAAh-gMBAL8EACH7AwIAxAQAIfwDAgDEBAAh_QMCAMQEACH-AwEAvwQAIf8DAQC_BAAhgAQCAMQEACGBBAIAxAQAIYIEAQC_BAAhgwQBAL8EACGEBAEAvwQAIYUEAQC_BAAhhgQgAPMEACGHBCAA8wQAIYgEIADzBAAhAwAAAAcAIAEAAE4AMBkAAE8AIAMAAAAHACABAAAIADACAAAJACAJAwAAhgUAIPQCAACFBQAw9QIAAAsAEPYCAACFBQAw_AIBALsEACGtAwEAuwQAIcUDAQAAAAHpAwIA6AQAIeoDAQC7BAAhAQAAAFIAIAEAAABSACABAwAAlgYAIAMAAAALACABAABVADACAABSACADAAAACwAgAQAAVQAwAgAAUgAgAwAAAAsAIAEAAFUAMAIAAFIAIAYDAACVBgAg_AIBAAAAAa0DAQAAAAHFAwEAAAAB6QMCAAAAAeoDAQAAAAEBDQAAWQAgBfwCAQAAAAGtAwEAAAABxQMBAAAAAekDAgAAAAHqAwEAAAABAQ0AAFsAMAENAABbADAGAwAAlAYAIPwCAQCUBQAhrQMBAJQFACHFAwEAlAUAIekDAgDrBQAh6gMBAJQFACECAAAAUgAgDQAAXgAgBfwCAQCUBQAhrQMBAJQFACHFAwEAlAUAIekDAgDrBQAh6gMBAJQFACECAAAACwAgDQAAYAAgAgAAAAsAIA0AAGAAIAMAAABSACAUAABZACAVAABeACABAAAAUgAgAQAAAAsAIAUHAACPBgAgGgAAkAYAIBsAAJMGACAcAACSBgAgHQAAkQYAIAj0AgAAhAUAMPUCAABnABD2AgAAhAUAMPwCAQCzBAAhrQMBALMEACHFAwEAswQAIekDAgDkBAAh6gMBALMEACEDAAAACwAgAQAAZgAwGQAAZwAgAwAAAAsAIAEAAFUAMAIAAFIAIAf0AgAAgwUAMPUCAABtABD2AgAAgwUAMPwCAQC7BAAhrQMBAAAAAeUDAQC7BAAh6AMBANAEACEBAAAAagAgAQAAAGoAIAf0AgAAgwUAMPUCAABtABD2AgAAgwUAMPwCAQC7BAAhrQMBALsEACHlAwEAuwQAIegDAQDQBAAhAegDAACWBQAgAwAAAG0AIAEAAG4AMAIAAGoAIAMAAABtACABAABuADACAABqACADAAAAbQAgAQAAbgAwAgAAagAgBPwCAQAAAAGtAwEAAAAB5QMBAAAAAegDAQAAAAEBDQAAcgAgBPwCAQAAAAGtAwEAAAAB5QMBAAAAAegDAQAAAAEBDQAAdAAwAQ0AAHQAMAT8AgEAlAUAIa0DAQCUBQAh5QMBAJQFACHoAwEAmgUAIQIAAABqACANAAB3ACAE_AIBAJQFACGtAwEAlAUAIeUDAQCUBQAh6AMBAJoFACECAAAAbQAgDQAAeQAgAgAAAG0AIA0AAHkAIAMAAABqACAUAAByACAVAAB3ACABAAAAagAgAQAAAG0AIAQHAACMBgAgHAAAjgYAIB0AAI0GACDoAwAAlgUAIAf0AgAAggUAMPUCAACAAQAQ9gIAAIIFADD8AgEAswQAIa0DAQCzBAAh5QMBALMEACHoAwEAvwQAIQMAAABtACABAAB_ADAZAACAAQAgAwAAAG0AIAEAAG4AMAIAAGoAIAb0AgAAgQUAMPUCAACGAQAQ9gIAAIEFADD8AgEAuwQAIa0DAQAAAAHnAyAA0QQAIQEAAACDAQAgAQAAAIMBACAG9AIAAIEFADD1AgAAhgEAEPYCAACBBQAw_AIBALsEACGtAwEAuwQAIecDIADRBAAhAAMAAACGAQAgAQAAhwEAMAIAAIMBACADAAAAhgEAIAEAAIcBADACAACDAQAgAwAAAIYBACABAACHAQAwAgAAgwEAIAP8AgEAAAABrQMBAAAAAecDIAAAAAEBDQAAiwEAIAP8AgEAAAABrQMBAAAAAecDIAAAAAEBDQAAjQEAMAENAACNAQAwA_wCAQCUBQAhrQMBAJQFACHnAyAArgUAIQIAAACDAQAgDQAAkAEAIAP8AgEAlAUAIa0DAQCUBQAh5wMgAK4FACECAAAAhgEAIA0AAJIBACACAAAAhgEAIA0AAJIBACADAAAAgwEAIBQAAIsBACAVAACQAQAgAQAAAIMBACABAAAAhgEAIAMHAACJBgAgHAAAiwYAIB0AAIoGACAG9AIAAIAFADD1AgAAmQEAEPYCAACABQAw_AIBALMEACGtAwEAswQAIecDIADMBAAhAwAAAIYBACABAACYAQAwGQAAmQEAIAMAAACGAQAgAQAAhwEAMAIAAIMBACAI9AIAAP4EADD1AgAAnwEAEPYCAAD-BAAw_AIBALsEACGtAwEAuwQAIa4DAQC7BAAh5QMBALsEACHmAwAA_wQAIAEAAACcAQAgAQAAAJwBACAH9AIAAP4EADD1AgAAnwEAEPYCAAD-BAAw_AIBALsEACGtAwEAuwQAIa4DAQC7BAAh5QMBALsEACEAAwAAAJ8BACABAACgAQAwAgAAnAEAIAMAAACfAQAgAQAAoAEAMAIAAJwBACADAAAAnwEAIAEAAKABADACAACcAQAgBPwCAQAAAAGtAwEAAAABrgMBAAAAAeUDAQAAAAEBDQAApAEAIAT8AgEAAAABrQMBAAAAAa4DAQAAAAHlAwEAAAABAQ0AAKYBADABDQAApgEAMAT8AgEAlAUAIa0DAQCUBQAhrgMBAJQFACHlAwEAlAUAIQIAAACcAQAgDQAAqQEAIAT8AgEAlAUAIa0DAQCUBQAhrgMBAJQFACHlAwEAlAUAIQIAAACfAQAgDQAAqwEAIAIAAACfAQAgDQAAqwEAIAMAAACcAQAgFAAApAEAIBUAAKkBACABAAAAnAEAIAEAAACfAQAgAwcAAIYGACAcAACIBgAgHQAAhwYAIAf0AgAA_QQAMPUCAACyAQAQ9gIAAP0EADD8AgEAswQAIa0DAQCzBAAhrgMBALMEACHlAwEAswQAIQMAAACfAQAgAQAAsQEAMBkAALIBACADAAAAnwEAIAEAAKABADACAACcAQAgCvQCAAD8BAAw9QIAALgBABD2AgAA_AQAMPsCAQC7BAAhmwMBANAEACGtAwEAuwQAIcMDAQAAAAHFAwEAAAAB4wMBALsEACHkAwEA0AQAIQEAAAC1AQAgAQAAALUBACAK9AIAAPwEADD1AgAAuAEAEPYCAAD8BAAw-wIBALsEACGbAwEA0AQAIa0DAQC7BAAhwwMBALsEACHFAwEAuwQAIeMDAQC7BAAh5AMBANAEACECmwMAAJYFACDkAwAAlgUAIAMAAAC4AQAgAQAAuQEAMAIAALUBACADAAAAuAEAIAEAALkBADACAAC1AQAgAwAAALgBACABAAC5AQAwAgAAtQEAIAf7AgEAAAABmwMBAAAAAa0DAQAAAAHDAwEAAAABxQMBAAAAAeMDAQAAAAHkAwEAAAABAQ0AAL0BACAH-wIBAAAAAZsDAQAAAAGtAwEAAAABwwMBAAAAAcUDAQAAAAHjAwEAAAAB5AMBAAAAAQENAAC_AQAwAQ0AAL8BADAH-wIBAJQFACGbAwEAmgUAIa0DAQCUBQAhwwMBAJQFACHFAwEAlAUAIeMDAQCUBQAh5AMBAJoFACECAAAAtQEAIA0AAMIBACAH-wIBAJQFACGbAwEAmgUAIa0DAQCUBQAhwwMBAJQFACHFAwEAlAUAIeMDAQCUBQAh5AMBAJoFACECAAAAuAEAIA0AAMQBACACAAAAuAEAIA0AAMQBACADAAAAtQEAIBQAAL0BACAVAADCAQAgAQAAALUBACABAAAAuAEAIAUHAACDBgAgHAAAhQYAIB0AAIQGACCbAwAAlgUAIOQDAACWBQAgCvQCAAD7BAAw9QIAAMsBABD2AgAA-wQAMPsCAQCzBAAhmwMBAL8EACGtAwEAswQAIcMDAQCzBAAhxQMBALMEACHjAwEAswQAIeQDAQC_BAAhAwAAALgBACABAADKAQAwGQAAywEAIAMAAAC4AQAgAQAAuQEAMAIAALUBACAb9AIAAPkEADD1AgAA0QEAEPYCAAD5BAAw_AIBALsEACGdAwEAuwQAIakDAQDQBAAhrQMBALsEACGuAwEA0AQAIcMDAQC7BAAhxAMBALsEACHFAwEAuwQAIcYDAQDQBAAhywMBANAEACHMAwEA0AQAIc0DAQDQBAAhzgMBANAEACHQAwEA0AQAIdIDAQC7BAAh2gMBAAAAAdsDAQDQBAAh3AMBANAEACHdAwEA0AQAId4DAQDQBAAh3wMBANAEACHgAwEA0AQAIeEDAQDQBAAh4gMAAPoEACABAAAAzgEAIAEAAADOAQAgGvQCAAD5BAAw9QIAANEBABD2AgAA-QQAMPwCAQC7BAAhnQMBALsEACGpAwEA0AQAIa0DAQC7BAAhrgMBANAEACHDAwEAuwQAIcQDAQC7BAAhxQMBALsEACHGAwEA0AQAIcsDAQDQBAAhzAMBANAEACHNAwEA0AQAIc4DAQDQBAAh0AMBANAEACHSAwEAuwQAIdoDAQC7BAAh2wMBANAEACHcAwEA0AQAId0DAQDQBAAh3gMBANAEACHfAwEA0AQAIeADAQDQBAAh4QMBANAEACEPqQMAAJYFACCuAwAAlgUAIMYDAACWBQAgywMAAJYFACDMAwAAlgUAIM0DAACWBQAgzgMAAJYFACDQAwAAlgUAINsDAACWBQAg3AMAAJYFACDdAwAAlgUAIN4DAACWBQAg3wMAAJYFACDgAwAAlgUAIOEDAACWBQAgAwAAANEBACABAADSAQAwAgAAzgEAIAMAAADRAQAgAQAA0gEAMAIAAM4BACADAAAA0QEAIAEAANIBADACAADOAQAgF_wCAQAAAAGdAwEAAAABqQMBAAAAAa0DAQAAAAGuAwEAAAABwwMBAAAAAcQDAQAAAAHFAwEAAAABxgMBAAAAAcsDAQAAAAHMAwEAAAABzQMBAAAAAc4DAQAAAAHQAwEAAAAB0gMBAAAAAdoDAQAAAAHbAwEAAAAB3AMBAAAAAd0DAQAAAAHeAwEAAAAB3wMBAAAAAeADAQAAAAHhAwEAAAABAQ0AANYBACAX_AIBAAAAAZ0DAQAAAAGpAwEAAAABrQMBAAAAAa4DAQAAAAHDAwEAAAABxAMBAAAAAcUDAQAAAAHGAwEAAAABywMBAAAAAcwDAQAAAAHNAwEAAAABzgMBAAAAAdADAQAAAAHSAwEAAAAB2gMBAAAAAdsDAQAAAAHcAwEAAAAB3QMBAAAAAd4DAQAAAAHfAwEAAAAB4AMBAAAAAeEDAQAAAAEBDQAA2AEAMAENAADYAQAwF_wCAQCUBQAhnQMBAJQFACGpAwEAmgUAIa0DAQCUBQAhrgMBAJoFACHDAwEAlAUAIcQDAQCUBQAhxQMBAJQFACHGAwEAmgUAIcsDAQCaBQAhzAMBAJoFACHNAwEAmgUAIc4DAQCaBQAh0AMBAJoFACHSAwEAlAUAIdoDAQCUBQAh2wMBAJoFACHcAwEAmgUAId0DAQCaBQAh3gMBAJoFACHfAwEAmgUAIeADAQCaBQAh4QMBAJoFACECAAAAzgEAIA0AANsBACAX_AIBAJQFACGdAwEAlAUAIakDAQCaBQAhrQMBAJQFACGuAwEAmgUAIcMDAQCUBQAhxAMBAJQFACHFAwEAlAUAIcYDAQCaBQAhywMBAJoFACHMAwEAmgUAIc0DAQCaBQAhzgMBAJoFACHQAwEAmgUAIdIDAQCUBQAh2gMBAJQFACHbAwEAmgUAIdwDAQCaBQAh3QMBAJoFACHeAwEAmgUAId8DAQCaBQAh4AMBAJoFACHhAwEAmgUAIQIAAADRAQAgDQAA3QEAIAIAAADRAQAgDQAA3QEAIAMAAADOAQAgFAAA1gEAIBUAANsBACABAAAAzgEAIAEAAADRAQAgEgcAAIAGACAcAACCBgAgHQAAgQYAIKkDAACWBQAgrgMAAJYFACDGAwAAlgUAIMsDAACWBQAgzAMAAJYFACDNAwAAlgUAIM4DAACWBQAg0AMAAJYFACDbAwAAlgUAINwDAACWBQAg3QMAAJYFACDeAwAAlgUAIN8DAACWBQAg4AMAAJYFACDhAwAAlgUAIBr0AgAA-AQAMPUCAADkAQAQ9gIAAPgEADD8AgEAswQAIZ0DAQCzBAAhqQMBAL8EACGtAwEAswQAIa4DAQC_BAAhwwMBALMEACHEAwEAswQAIcUDAQCzBAAhxgMBAL8EACHLAwEAvwQAIcwDAQC_BAAhzQMBAL8EACHOAwEAvwQAIdADAQC_BAAh0gMBALMEACHaAwEAswQAIdsDAQC_BAAh3AMBAL8EACHdAwEAvwQAId4DAQC_BAAh3wMBAL8EACHgAwEAvwQAIeEDAQC_BAAhAwAAANEBACABAADjAQAwGQAA5AEAIAMAAADRAQAgAQAA0gEAMAIAAM4BACAV9AIAAPYEADD1AgAA6gEAEPYCAAD2BAAw-wIBALsEACGbAwEA0AQAIa0DAQC7BAAhrgMBANAEACHDAwEAuwQAIcQDAQC7BAAhxQMBALsEACHGAwEA0AQAIdADAQDQBAAh0QMBAAAAAdIDAQC7BAAh0wMBALsEACHUAwEA0AQAIdUDAQDQBAAh1gMBANAEACHXAwEA0AQAIdgDAgDbBAAh2QMgAPcEACEBAAAA5wEAIAEAAADnAQAgFfQCAAD2BAAw9QIAAOoBABD2AgAA9gQAMPsCAQC7BAAhmwMBANAEACGtAwEAuwQAIa4DAQDQBAAhwwMBALsEACHEAwEAuwQAIcUDAQC7BAAhxgMBANAEACHQAwEA0AQAIdEDAQC7BAAh0gMBALsEACHTAwEAuwQAIdQDAQDQBAAh1QMBANAEACHWAwEA0AQAIdcDAQDQBAAh2AMCANsEACHZAyAA9wQAIQqbAwAAlgUAIK4DAACWBQAgxgMAAJYFACDQAwAAlgUAINQDAACWBQAg1QMAAJYFACDWAwAAlgUAINcDAACWBQAg2AMAAJYFACDZAwAAlgUAIAMAAADqAQAgAQAA6wEAMAIAAOcBACADAAAA6gEAIAEAAOsBADACAADnAQAgAwAAAOoBACABAADrAQAwAgAA5wEAIBL7AgEAAAABmwMBAAAAAa0DAQAAAAGuAwEAAAABwwMBAAAAAcQDAQAAAAHFAwEAAAABxgMBAAAAAdADAQAAAAHRAwEAAAAB0gMBAAAAAdMDAQAAAAHUAwEAAAAB1QMBAAAAAdYDAQAAAAHXAwEAAAAB2AMCAAAAAdkDIAAAAAEBDQAA7wEAIBL7AgEAAAABmwMBAAAAAa0DAQAAAAGuAwEAAAABwwMBAAAAAcQDAQAAAAHFAwEAAAABxgMBAAAAAdADAQAAAAHRAwEAAAAB0gMBAAAAAdMDAQAAAAHUAwEAAAAB1QMBAAAAAdYDAQAAAAHXAwEAAAAB2AMCAAAAAdkDIAAAAAEBDQAA8QEAMAENAADxAQAwEvsCAQCUBQAhmwMBAJoFACGtAwEAlAUAIa4DAQCaBQAhwwMBAJQFACHEAwEAlAUAIcUDAQCUBQAhxgMBAJoFACHQAwEAmgUAIdEDAQCUBQAh0gMBAJQFACHTAwEAlAUAIdQDAQCaBQAh1QMBAJoFACHWAwEAmgUAIdcDAQCaBQAh2AMCAKIFACHZAyAA_wUAIQIAAADnAQAgDQAA9AEAIBL7AgEAlAUAIZsDAQCaBQAhrQMBAJQFACGuAwEAmgUAIcMDAQCUBQAhxAMBAJQFACHFAwEAlAUAIcYDAQCaBQAh0AMBAJoFACHRAwEAlAUAIdIDAQCUBQAh0wMBAJQFACHUAwEAmgUAIdUDAQCaBQAh1gMBAJoFACHXAwEAmgUAIdgDAgCiBQAh2QMgAP8FACECAAAA6gEAIA0AAPYBACACAAAA6gEAIA0AAPYBACADAAAA5wEAIBQAAO8BACAVAAD0AQAgAQAAAOcBACABAAAA6gEAIA8HAAD6BQAgGgAA-wUAIBsAAP4FACAcAAD9BQAgHQAA_AUAIJsDAACWBQAgrgMAAJYFACDGAwAAlgUAINADAACWBQAg1AMAAJYFACDVAwAAlgUAINYDAACWBQAg1wMAAJYFACDYAwAAlgUAINkDAACWBQAgFfQCAADyBAAw9QIAAP0BABD2AgAA8gQAMPsCAQCzBAAhmwMBAL8EACGtAwEAswQAIa4DAQC_BAAhwwMBALMEACHEAwEAswQAIcUDAQCzBAAhxgMBAL8EACHQAwEAvwQAIdEDAQCzBAAh0gMBALMEACHTAwEAswQAIdQDAQC_BAAh1QMBAL8EACHWAwEAvwQAIdcDAQC_BAAh2AMCAMQEACHZAyAA8wQAIQMAAADqAQAgAQAA_AEAMBkAAP0BACADAAAA6gEAIAEAAOsBADACAADnAQAgFPQCAADwBAAw9QIAAIMCABD2AgAA8AQAMK0DAQC7BAAhrgMBANAEACHCAwEAAAABwwMBANAEACHEAwEA0AQAIcUDAQDQBAAhxgMBANAEACHHAwEAuwQAIcgDCADxBAAhyQMBANAEACHKAwEAuwQAIcsDAQDQBAAhzAMBANAEACHNAwEA0AQAIc4DAQDQBAAhzwMBANAEACHQAwEA0AQAIQEAAACAAgAgAQAAAIACACAU9AIAAPAEADD1AgAAgwIAEPYCAADwBAAwrQMBALsEACGuAwEA0AQAIcIDAQC7BAAhwwMBANAEACHEAwEA0AQAIcUDAQDQBAAhxgMBANAEACHHAwEAuwQAIcgDCADxBAAhyQMBANAEACHKAwEAuwQAIcsDAQDQBAAhzAMBANAEACHNAwEA0AQAIc4DAQDQBAAhzwMBANAEACHQAwEA0AQAIQyuAwAAlgUAIMMDAACWBQAgxAMAAJYFACDFAwAAlgUAIMYDAACWBQAgyQMAAJYFACDLAwAAlgUAIMwDAACWBQAgzQMAAJYFACDOAwAAlgUAIM8DAACWBQAg0AMAAJYFACADAAAAgwIAIAEAAIQCADACAACAAgAgAwAAAIMCACABAACEAgAwAgAAgAIAIAMAAACDAgAgAQAAhAIAMAIAAIACACARrQMBAAAAAa4DAQAAAAHCAwEAAAABwwMBAAAAAcQDAQAAAAHFAwEAAAABxgMBAAAAAccDAQAAAAHIAwgAAAAByQMBAAAAAcoDAQAAAAHLAwEAAAABzAMBAAAAAc0DAQAAAAHOAwEAAAABzwMBAAAAAdADAQAAAAEBDQAAiAIAIBGtAwEAAAABrgMBAAAAAcIDAQAAAAHDAwEAAAABxAMBAAAAAcUDAQAAAAHGAwEAAAABxwMBAAAAAcgDCAAAAAHJAwEAAAABygMBAAAAAcsDAQAAAAHMAwEAAAABzQMBAAAAAc4DAQAAAAHPAwEAAAAB0AMBAAAAAQENAACKAgAwAQ0AAIoCADARrQMBAJQFACGuAwEAmgUAIcIDAQCUBQAhwwMBAJoFACHEAwEAmgUAIcUDAQCaBQAhxgMBAJoFACHHAwEAlAUAIcgDCAD5BQAhyQMBAJoFACHKAwEAlAUAIcsDAQCaBQAhzAMBAJoFACHNAwEAmgUAIc4DAQCaBQAhzwMBAJoFACHQAwEAmgUAIQIAAACAAgAgDQAAjQIAIBGtAwEAlAUAIa4DAQCaBQAhwgMBAJQFACHDAwEAmgUAIcQDAQCaBQAhxQMBAJoFACHGAwEAmgUAIccDAQCUBQAhyAMIAPkFACHJAwEAmgUAIcoDAQCUBQAhywMBAJoFACHMAwEAmgUAIc0DAQCaBQAhzgMBAJoFACHPAwEAmgUAIdADAQCaBQAhAgAAAIMCACANAACPAgAgAgAAAIMCACANAACPAgAgAwAAAIACACAUAACIAgAgFQAAjQIAIAEAAACAAgAgAQAAAIMCACARBwAA9AUAIBoAAPUFACAbAAD4BQAgHAAA9wUAIB0AAPYFACCuAwAAlgUAIMMDAACWBQAgxAMAAJYFACDFAwAAlgUAIMYDAACWBQAgyQMAAJYFACDLAwAAlgUAIMwDAACWBQAgzQMAAJYFACDOAwAAlgUAIM8DAACWBQAg0AMAAJYFACAU9AIAAO0EADD1AgAAlgIAEPYCAADtBAAwrQMBALMEACGuAwEAvwQAIcIDAQCzBAAhwwMBAL8EACHEAwEAvwQAIcUDAQC_BAAhxgMBAL8EACHHAwEAswQAIcgDCADuBAAhyQMBAL8EACHKAwEAswQAIcsDAQC_BAAhzAMBAL8EACHNAwEAvwQAIc4DAQC_BAAhzwMBAL8EACHQAwEAvwQAIQMAAACDAgAgAQAAlQIAMBkAAJYCACADAAAAgwIAIAEAAIQCADACAACAAgAgDfQCAADsBAAw9QIAAJwCABD2AgAA7AQAMPsCAQC7BAAh_AIBALsEACGoAwEAAAABuwMBALsEACG8AwEAuwQAIb0DAQC7BAAhvgMBALsEACG_AwEAuwQAIcADAQC7BAAhwQMBALsEACEBAAAAmQIAIAEAAACZAgAgDfQCAADsBAAw9QIAAJwCABD2AgAA7AQAMPsCAQC7BAAh_AIBALsEACGoAwEAuwQAIbsDAQC7BAAhvAMBALsEACG9AwEAuwQAIb4DAQC7BAAhvwMBALsEACHAAwEAuwQAIcEDAQC7BAAhAAMAAACcAgAgAQAAnQIAMAIAAJkCACADAAAAnAIAIAEAAJ0CADACAACZAgAgAwAAAJwCACABAACdAgAwAgAAmQIAIAr7AgEAAAAB_AIBAAAAAagDAQAAAAG7AwEAAAABvAMBAAAAAb0DAQAAAAG-AwEAAAABvwMBAAAAAcADAQAAAAHBAwEAAAABAQ0AAKECACAK-wIBAAAAAfwCAQAAAAGoAwEAAAABuwMBAAAAAbwDAQAAAAG9AwEAAAABvgMBAAAAAb8DAQAAAAHAAwEAAAABwQMBAAAAAQENAACjAgAwAQ0AAKMCADAK-wIBAJQFACH8AgEAlAUAIagDAQCUBQAhuwMBAJQFACG8AwEAlAUAIb0DAQCUBQAhvgMBAJQFACG_AwEAlAUAIcADAQCUBQAhwQMBAJQFACECAAAAmQIAIA0AAKYCACAK-wIBAJQFACH8AgEAlAUAIagDAQCUBQAhuwMBAJQFACG8AwEAlAUAIb0DAQCUBQAhvgMBAJQFACG_AwEAlAUAIcADAQCUBQAhwQMBAJQFACECAAAAnAIAIA0AAKgCACACAAAAnAIAIA0AAKgCACADAAAAmQIAIBQAAKECACAVAACmAgAgAQAAAJkCACABAAAAnAIAIAMHAADxBQAgHAAA8wUAIB0AAPIFACAN9AIAAOsEADD1AgAArwIAEPYCAADrBAAw-wIBALMEACH8AgEAswQAIagDAQCzBAAhuwMBALMEACG8AwEAswQAIb0DAQCzBAAhvgMBALMEACG_AwEAswQAIcADAQCzBAAhwQMBALMEACEDAAAAnAIAIAEAAK4CADAZAACvAgAgAwAAAJwCACABAACdAgAwAgAAmQIAIAj0AgAA6gQAMPUCAAC1AgAQ9gIAAOoEADD8AgEAuwQAIagDAQAAAAG1AwEAuwQAIbYDAQC7BAAhtwMCAOgEACEBAAAAsgIAIAEAAACyAgAgCPQCAADqBAAw9QIAALUCABD2AgAA6gQAMPwCAQC7BAAhqAMBALsEACG1AwEAuwQAIbYDAQC7BAAhtwMCAOgEACEAAwAAALUCACABAAC2AgAwAgAAsgIAIAMAAAC1AgAgAQAAtgIAMAIAALICACADAAAAtQIAIAEAALYCADACAACyAgAgBfwCAQAAAAGoAwEAAAABtQMBAAAAAbYDAQAAAAG3AwIAAAABAQ0AALoCACAF_AIBAAAAAagDAQAAAAG1AwEAAAABtgMBAAAAAbcDAgAAAAEBDQAAvAIAMAENAAC8AgAwBfwCAQCUBQAhqAMBAJQFACG1AwEAlAUAIbYDAQCUBQAhtwMCAOsFACECAAAAsgIAIA0AAL8CACAF_AIBAJQFACGoAwEAlAUAIbUDAQCUBQAhtgMBAJQFACG3AwIA6wUAIQIAAAC1AgAgDQAAwQIAIAIAAAC1AgAgDQAAwQIAIAMAAACyAgAgFAAAugIAIBUAAL8CACABAAAAsgIAIAEAAAC1AgAgBQcAAOwFACAaAADtBQAgGwAA8AUAIBwAAO8FACAdAADuBQAgCPQCAADpBAAw9QIAAMgCABD2AgAA6QQAMPwCAQCzBAAhqAMBALMEACG1AwEAswQAIbYDAQCzBAAhtwMCAOQEACEDAAAAtQIAIAEAAMcCADAZAADIAgAgAwAAALUCACABAAC2AgAwAgAAsgIAIAz0AgAA5wQAMPUCAADOAgAQ9gIAAOcEADD8AgEAuwQAIagDAQAAAAGzAwEAuwQAIbUDAQC7BAAhtgMBALsEACG3AwIA6AQAIbgDAQDQBAAhuQMBANAEACG6AwEAuwQAIQEAAADLAgAgAQAAAMsCACAM9AIAAOcEADD1AgAAzgIAEPYCAADnBAAw_AIBALsEACGoAwEAuwQAIbMDAQC7BAAhtQMBALsEACG2AwEAuwQAIbcDAgDoBAAhuAMBANAEACG5AwEA0AQAIboDAQC7BAAhArgDAACWBQAguQMAAJYFACADAAAAzgIAIAEAAM8CADACAADLAgAgAwAAAM4CACABAADPAgAwAgAAywIAIAMAAADOAgAgAQAAzwIAMAIAAMsCACAJ_AIBAAAAAagDAQAAAAGzAwEAAAABtQMBAAAAAbYDAQAAAAG3AwIAAAABuAMBAAAAAbkDAQAAAAG6AwEAAAABAQ0AANMCACAJ_AIBAAAAAagDAQAAAAGzAwEAAAABtQMBAAAAAbYDAQAAAAG3AwIAAAABuAMBAAAAAbkDAQAAAAG6AwEAAAABAQ0AANUCADABDQAA1QIAMAn8AgEAlAUAIagDAQCUBQAhswMBAJQFACG1AwEAlAUAIbYDAQCUBQAhtwMCAOsFACG4AwEAmgUAIbkDAQCaBQAhugMBAJQFACECAAAAywIAIA0AANgCACAJ_AIBAJQFACGoAwEAlAUAIbMDAQCUBQAhtQMBAJQFACG2AwEAlAUAIbcDAgDrBQAhuAMBAJoFACG5AwEAmgUAIboDAQCUBQAhAgAAAM4CACANAADaAgAgAgAAAM4CACANAADaAgAgAwAAAMsCACAUAADTAgAgFQAA2AIAIAEAAADLAgAgAQAAAM4CACAHBwAA5gUAIBoAAOcFACAbAADqBQAgHAAA6QUAIB0AAOgFACC4AwAAlgUAILkDAACWBQAgDPQCAADjBAAw9QIAAOECABD2AgAA4wQAMPwCAQCzBAAhqAMBALMEACGzAwEAswQAIbUDAQCzBAAhtgMBALMEACG3AwIA5AQAIbgDAQC_BAAhuQMBAL8EACG6AwEAswQAIQMAAADOAgAgAQAA4AIAMBkAAOECACADAAAAzgIAIAEAAM8CADACAADLAgAgCvQCAADiBAAw9QIAAOcCABD2AgAA4gQAMPsCAQC7BAAhmwMBALsEACGoAwEAuwQAIbEDAQAAAAGyAwEA0AQAIbMDAQDQBAAhtAMBALsEACEBAAAA5AIAIAEAAADkAgAgCvQCAADiBAAw9QIAAOcCABD2AgAA4gQAMPsCAQC7BAAhmwMBALsEACGoAwEAuwQAIbEDAQC7BAAhsgMBANAEACGzAwEA0AQAIbQDAQC7BAAhArIDAACWBQAgswMAAJYFACADAAAA5wIAIAEAAOgCADACAADkAgAgAwAAAOcCACABAADoAgAwAgAA5AIAIAMAAADnAgAgAQAA6AIAMAIAAOQCACAH-wIBAAAAAZsDAQAAAAGoAwEAAAABsQMBAAAAAbIDAQAAAAGzAwEAAAABtAMBAAAAAQENAADsAgAgB_sCAQAAAAGbAwEAAAABqAMBAAAAAbEDAQAAAAGyAwEAAAABswMBAAAAAbQDAQAAAAEBDQAA7gIAMAENAADuAgAwB_sCAQCUBQAhmwMBAJQFACGoAwEAlAUAIbEDAQCUBQAhsgMBAJoFACGzAwEAmgUAIbQDAQCUBQAhAgAAAOQCACANAADxAgAgB_sCAQCUBQAhmwMBAJQFACGoAwEAlAUAIbEDAQCUBQAhsgMBAJoFACGzAwEAmgUAIbQDAQCUBQAhAgAAAOcCACANAADzAgAgAgAAAOcCACANAADzAgAgAwAAAOQCACAUAADsAgAgFQAA8QIAIAEAAADkAgAgAQAAAOcCACAFBwAA4wUAIBwAAOUFACAdAADkBQAgsgMAAJYFACCzAwAAlgUAIAr0AgAA4QQAMPUCAAD6AgAQ9gIAAOEEADD7AgEAswQAIZsDAQCzBAAhqAMBALMEACGxAwEAswQAIbIDAQC_BAAhswMBAL8EACG0AwEAswQAIQMAAADnAgAgAQAA-QIAMBkAAPoCACADAAAA5wIAIAEAAOgCADACAADkAgAgCfQCAADfBAAw9QIAAIADABD2AgAA3wQAMPwCAQC7BAAhqAMBALsEACGtAwEAuwQAIa4DAQC7BAAhrwMBALsEACGwAwAA4AQAIAEAAAD9AgAgAQAAAP0CACAI9AIAAN8EADD1AgAAgAMAEPYCAADfBAAw_AIBALsEACGoAwEAuwQAIa0DAQC7BAAhrgMBALsEACGvAwEAuwQAIQADAAAAgAMAIAEAAIEDADACAAD9AgAgAwAAAIADACABAACBAwAwAgAA_QIAIAMAAACAAwAgAQAAgQMAMAIAAP0CACAF_AIBAAAAAagDAQAAAAGtAwEAAAABrgMBAAAAAa8DAQAAAAEBDQAAhQMAIAX8AgEAAAABqAMBAAAAAa0DAQAAAAGuAwEAAAABrwMBAAAAAQENAACHAwAwAQ0AAIcDADAF_AIBAJQFACGoAwEAlAUAIa0DAQCUBQAhrgMBAJQFACGvAwEAlAUAIQIAAAD9AgAgDQAAigMAIAX8AgEAlAUAIagDAQCUBQAhrQMBAJQFACGuAwEAlAUAIa8DAQCUBQAhAgAAAIADACANAACMAwAgAgAAAIADACANAACMAwAgAwAAAP0CACAUAACFAwAgFQAAigMAIAEAAAD9AgAgAQAAAIADACADBwAA4AUAIBwAAOIFACAdAADhBQAgCPQCAADeBAAw9QIAAJMDABD2AgAA3gQAMPwCAQCzBAAhqAMBALMEACGtAwEAswQAIa4DAQCzBAAhrwMBALMEACEDAAAAgAMAIAEAAJIDADAZAACTAwAgAwAAAIADACABAACBAwAwAgAA_QIAIAr0AgAA3QQAMPUCAACZAwAQ9gIAAN0EADCbAwEA0AQAIacDAQAAAAGoAwEAuwQAIakDAQC7BAAhqgMBANAEACGrAwEAuwQAIawDAQC7BAAhAQAAAJYDACABAAAAlgMAIAr0AgAA3QQAMPUCAACZAwAQ9gIAAN0EADCbAwEA0AQAIacDAQC7BAAhqAMBALsEACGpAwEAuwQAIaoDAQDQBAAhqwMBALsEACGsAwEAuwQAIQKbAwAAlgUAIKoDAACWBQAgAwAAAJkDACABAACaAwAwAgAAlgMAIAMAAACZAwAgAQAAmgMAMAIAAJYDACADAAAAmQMAIAEAAJoDADACAACWAwAgB5sDAQAAAAGnAwEAAAABqAMBAAAAAakDAQAAAAGqAwEAAAABqwMBAAAAAawDAQAAAAEBDQAAngMAIAebAwEAAAABpwMBAAAAAagDAQAAAAGpAwEAAAABqgMBAAAAAasDAQAAAAGsAwEAAAABAQ0AAKADADABDQAAoAMAMAebAwEAmgUAIacDAQCUBQAhqAMBAJQFACGpAwEAlAUAIaoDAQCaBQAhqwMBAJQFACGsAwEAlAUAIQIAAACWAwAgDQAAowMAIAebAwEAmgUAIacDAQCUBQAhqAMBAJQFACGpAwEAlAUAIaoDAQCaBQAhqwMBAJQFACGsAwEAlAUAIQIAAACZAwAgDQAApQMAIAIAAACZAwAgDQAApQMAIAMAAACWAwAgFAAAngMAIBUAAKMDACABAAAAlgMAIAEAAACZAwAgBQcAAN0FACAcAADfBQAgHQAA3gUAIJsDAACWBQAgqgMAAJYFACAK9AIAANwEADD1AgAArAMAEPYCAADcBAAwmwMBAL8EACGnAwEAswQAIagDAQCzBAAhqQMBALMEACGqAwEAvwQAIasDAQCzBAAhrAMBALMEACEDAAAAmQMAIAEAAKsDADAZAACsAwAgAwAAAJkDACABAACaAwAwAgAAlgMAIA-hAgAA0gQAIKICAADTBAAgowIAANQEACD0AgAAzwQAMPUCAADBAwAQ9gIAAM8EADD3AgEAAAAB-wJAALwEACH8AkAAvAQAIZ0DAQDQBAAhngMBAAAAAZ8DIADRBAAhoAMBANAEACGhAwEA0AQAIaIDAQC7BAAhAQAAAK8DACAVoAIAANcEACD0AgAA2gQAMPUCAACxAwAQ9gIAANoEADD3AgEAuwQAIfsCQAC8BAAh_AJAALwEACGKAwEAuwQAIY0DAQC7BAAhjgMBALsEACGPAwEAuwQAIZADAQDQBAAhkQMBANAEACGSAwEA0AQAIZMDAgDbBAAhlANAANYEACGVA0AA1gQAIZYDAQDQBAAhlwMBANAEACGYAwEA0AQAIZkDAQDQBAAhC6ACAADcBQAgkAMAAJYFACCRAwAAlgUAIJIDAACWBQAgkwMAAJYFACCUAwAAlgUAIJUDAACWBQAglgMAAJYFACCXAwAAlgUAIJgDAACWBQAgmQMAAJYFACAWoAIAANcEACD0AgAA2gQAMPUCAACxAwAQ9gIAANoEADD3AgEAAAAB-wJAALwEACH8AkAAvAQAIYoDAQC7BAAhjQMBALsEACGOAwEAuwQAIY8DAQC7BAAhkAMBANAEACGRAwEA0AQAIZIDAQDQBAAhkwMCANsEACGUA0AA1gQAIZUDQADWBAAhlgMBANAEACGXAwEA0AQAIZgDAQDQBAAhmQMBANAEACGmAwAA2QQAIAMAAACxAwAgAQAAsgMAMAIAALMDACAMoAIAANcEACD0AgAA2AQAMPUCAAC1AwAQ9gIAANgEADD3AgEAuwQAIfoCQAC8BAAh-wJAALwEACH8AkAAvAQAIYkDAQC7BAAhigMBALsEACGLAwEA0AQAIYwDAQDQBAAhA6ACAADcBQAgiwMAAJYFACCMAwAAlgUAIAygAgAA1wQAIPQCAADYBAAw9QIAALUDABD2AgAA2AQAMPcCAQAAAAH6AkAAvAQAIfsCQAC8BAAh_AJAALwEACGJAwEAAAABigMBALsEACGLAwEA0AQAIYwDAQDQBAAhAwAAALUDACABAAC2AwAwAgAAtwMAIAqgAgAA1wQAIPQCAADVBAAw9QIAALkDABD2AgAA1QQAMPcCAQC7BAAh-wJAALwEACGKAwEAuwQAIZoDAQC7BAAhmwNAALwEACGcA0AA1gQAIQKgAgAA3AUAIJwDAACWBQAgCqACAADXBAAg9AIAANUEADD1AgAAuQMAEPYCAADVBAAw9wIBAAAAAfsCQAC8BAAhigMBALsEACGaAwEAAAABmwNAALwEACGcA0AA1gQAIQMAAAC5AwAgAQAAugMAMAIAALsDACABAAAAsQMAIAEAAAC1AwAgAQAAALkDACABAAAArwMAIA-hAgAA0gQAIKICAADTBAAgowIAANQEACD0AgAAzwQAMPUCAADBAwAQ9gIAAM8EADD3AgEAuwQAIfsCQAC8BAAh_AJAALwEACGdAwEA0AQAIZ4DAQDQBAAhnwMgANEEACGgAwEA0AQAIaEDAQDQBAAhogMBALsEACEHoQIAANkFACCiAgAA2gUAIKMCAADbBQAgnQMAAJYFACCeAwAAlgUAIKADAACWBQAgoQMAAJYFACADAAAAwQMAIAEAAMIDADACAACvAwAgAwAAAMEDACABAADCAwAwAgAArwMAIAMAAADBAwAgAQAAwgMAMAIAAK8DACAMoQIAANYFACCiAgAA1wUAIKMCAADYBQAg9wIBAAAAAfsCQAAAAAH8AkAAAAABnQMBAAAAAZ4DAQAAAAGfAyAAAAABoAMBAAAAAaEDAQAAAAGiAwEAAAABAQ0AAMYDACAJ9wIBAAAAAfsCQAAAAAH8AkAAAAABnQMBAAAAAZ4DAQAAAAGfAyAAAAABoAMBAAAAAaEDAQAAAAGiAwEAAAABAQ0AAMgDADABDQAAyAMAMAyhAgAArwUAIKICAACwBQAgowIAALEFACD3AgEAlAUAIfsCQACVBQAh_AJAAJUFACGdAwEAmgUAIZ4DAQCaBQAhnwMgAK4FACGgAwEAmgUAIaEDAQCaBQAhogMBAJQFACECAAAArwMAIA0AAMsDACAJ9wIBAJQFACH7AkAAlQUAIfwCQACVBQAhnQMBAJoFACGeAwEAmgUAIZ8DIACuBQAhoAMBAJoFACGhAwEAmgUAIaIDAQCUBQAhAgAAAMEDACANAADNAwAgAgAAAMEDACANAADNAwAgAwAAAK8DACAUAADGAwAgFQAAywMAIAEAAACvAwAgAQAAAMEDACAHBwAAqwUAIBwAAK0FACAdAACsBQAgnQMAAJYFACCeAwAAlgUAIKADAACWBQAgoQMAAJYFACAM9AIAAMsEADD1AgAA1AMAEPYCAADLBAAw9wIBALMEACH7AkAAtAQAIfwCQAC0BAAhnQMBAL8EACGeAwEAvwQAIZ8DIADMBAAhoAMBAL8EACGhAwEAvwQAIaIDAQCzBAAhAwAAAMEDACABAADTAwAwGQAA1AMAIAMAAADBAwAgAQAAwgMAMAIAAK8DACABAAAAuwMAIAEAAAC7AwAgAwAAALkDACABAAC6AwAwAgAAuwMAIAMAAAC5AwAgAQAAugMAMAIAALsDACADAAAAuQMAIAEAALoDADACAAC7AwAgB6ACAACqBQAg9wIBAAAAAfsCQAAAAAGKAwEAAAABmgMBAAAAAZsDQAAAAAGcA0AAAAABAQ0AANwDACAG9wIBAAAAAfsCQAAAAAGKAwEAAAABmgMBAAAAAZsDQAAAAAGcA0AAAAABAQ0AAN4DADABDQAA3gMAMAegAgAAqQUAIPcCAQCUBQAh-wJAAJUFACGKAwEAlAUAIZoDAQCUBQAhmwNAAJUFACGcA0AAowUAIQIAAAC7AwAgDQAA4QMAIAb3AgEAlAUAIfsCQACVBQAhigMBAJQFACGaAwEAlAUAIZsDQACVBQAhnANAAKMFACECAAAAuQMAIA0AAOMDACACAAAAuQMAIA0AAOMDACADAAAAuwMAIBQAANwDACAVAADhAwAgAQAAALsDACABAAAAuQMAIAQHAACmBQAgHAAAqAUAIB0AAKcFACCcAwAAlgUAIAn0AgAAygQAMPUCAADqAwAQ9gIAAMoEADD3AgEAswQAIfsCQAC0BAAhigMBALMEACGaAwEAswQAIZsDQAC0BAAhnANAAMUEACEDAAAAuQMAIAEAAOkDADAZAADqAwAgAwAAALkDACABAAC6AwAwAgAAuwMAIAEAAACzAwAgAQAAALMDACADAAAAsQMAIAEAALIDADACAACzAwAgAwAAALEDACABAACyAwAwAgAAswMAIAMAAACxAwAgAQAAsgMAMAIAALMDACASoAIAAKUFACD3AgEAAAAB-wJAAAAAAfwCQAAAAAGKAwEAAAABjQMBAAAAAY4DAQAAAAGPAwEAAAABkAMBAAAAAZEDAQAAAAGSAwEAAAABkwMCAAAAAZQDQAAAAAGVA0AAAAABlgMBAAAAAZcDAQAAAAGYAwEAAAABmQMBAAAAAQENAADyAwAgEfcCAQAAAAH7AkAAAAAB_AJAAAAAAYoDAQAAAAGNAwEAAAABjgMBAAAAAY8DAQAAAAGQAwEAAAABkQMBAAAAAZIDAQAAAAGTAwIAAAABlANAAAAAAZUDQAAAAAGWAwEAAAABlwMBAAAAAZgDAQAAAAGZAwEAAAABAQ0AAPQDADABDQAA9AMAMBKgAgAApAUAIPcCAQCUBQAh-wJAAJUFACH8AkAAlQUAIYoDAQCUBQAhjQMBAJQFACGOAwEAlAUAIY8DAQCUBQAhkAMBAJoFACGRAwEAmgUAIZIDAQCaBQAhkwMCAKIFACGUA0AAowUAIZUDQACjBQAhlgMBAJoFACGXAwEAmgUAIZgDAQCaBQAhmQMBAJoFACECAAAAswMAIA0AAPcDACAR9wIBAJQFACH7AkAAlQUAIfwCQACVBQAhigMBAJQFACGNAwEAlAUAIY4DAQCUBQAhjwMBAJQFACGQAwEAmgUAIZEDAQCaBQAhkgMBAJoFACGTAwIAogUAIZQDQACjBQAhlQNAAKMFACGWAwEAmgUAIZcDAQCaBQAhmAMBAJoFACGZAwEAmgUAIQIAAACxAwAgDQAA-QMAIAIAAACxAwAgDQAA-QMAIAMAAACzAwAgFAAA8gMAIBUAAPcDACABAAAAswMAIAEAAACxAwAgDwcAAJ0FACAaAACeBQAgGwAAoQUAIBwAAKAFACAdAACfBQAgkAMAAJYFACCRAwAAlgUAIJIDAACWBQAgkwMAAJYFACCUAwAAlgUAIJUDAACWBQAglgMAAJYFACCXAwAAlgUAIJgDAACWBQAgmQMAAJYFACAU9AIAAMMEADD1AgAAgAQAEPYCAADDBAAw9wIBALMEACH7AkAAtAQAIfwCQAC0BAAhigMBALMEACGNAwEAswQAIY4DAQCzBAAhjwMBALMEACGQAwEAvwQAIZEDAQC_BAAhkgMBAL8EACGTAwIAxAQAIZQDQADFBAAhlQNAAMUEACGWAwEAvwQAIZcDAQC_BAAhmAMBAL8EACGZAwEAvwQAIQMAAACxAwAgAQAA_wMAMBkAAIAEACADAAAAsQMAIAEAALIDADACAACzAwAgAQAAALcDACABAAAAtwMAIAMAAAC1AwAgAQAAtgMAMAIAALcDACADAAAAtQMAIAEAALYDADACAAC3AwAgAwAAALUDACABAAC2AwAwAgAAtwMAIAmgAgAAnAUAIPcCAQAAAAH6AkAAAAAB-wJAAAAAAfwCQAAAAAGJAwEAAAABigMBAAAAAYsDAQAAAAGMAwEAAAABAQ0AAIgEACAI9wIBAAAAAfoCQAAAAAH7AkAAAAAB_AJAAAAAAYkDAQAAAAGKAwEAAAABiwMBAAAAAYwDAQAAAAEBDQAAigQAMAENAACKBAAwCaACAACbBQAg9wIBAJQFACH6AkAAlQUAIfsCQACVBQAh_AJAAJUFACGJAwEAlAUAIYoDAQCUBQAhiwMBAJoFACGMAwEAmgUAIQIAAAC3AwAgDQAAjQQAIAj3AgEAlAUAIfoCQACVBQAh-wJAAJUFACH8AkAAlQUAIYkDAQCUBQAhigMBAJQFACGLAwEAmgUAIYwDAQCaBQAhAgAAALUDACANAACPBAAgAgAAALUDACANAACPBAAgAwAAALcDACAUAACIBAAgFQAAjQQAIAEAAAC3AwAgAQAAALUDACAFBwAAlwUAIBwAAJkFACAdAACYBQAgiwMAAJYFACCMAwAAlgUAIAv0AgAAvgQAMPUCAACWBAAQ9gIAAL4EADD3AgEAswQAIfoCQAC0BAAh-wJAALQEACH8AkAAtAQAIYkDAQCzBAAhigMBALMEACGLAwEAvwQAIYwDAQC_BAAhAwAAALUDACABAACVBAAwGQAAlgQAIAMAAAC1AwAgAQAAtgMAMAIAALcDACAK9AIAALoEADD1AgAAnAQAEPYCAAC6BAAw9wIBAAAAAfgCAQC7BAAh-QIBALsEACH6AkAAvAQAIfsCQAC8BAAh_AJAALwEACGIAwAAvQQAIAEAAACZBAAgAQAAAJkEACAJ9AIAALoEADD1AgAAnAQAEPYCAAC6BAAw9wIBALsEACH4AgEAuwQAIfkCAQC7BAAh-gJAALwEACH7AkAAvAQAIfwCQAC8BAAhAAMAAACcBAAgAQAAnQQAMAIAAJkEACADAAAAnAQAIAEAAJ0EADACAACZBAAgAwAAAJwEACABAACdBAAwAgAAmQQAIAb3AgEAAAAB-AIBAAAAAfkCAQAAAAH6AkAAAAAB-wJAAAAAAfwCQAAAAAEBDQAAoQQAIAb3AgEAAAAB-AIBAAAAAfkCAQAAAAH6AkAAAAAB-wJAAAAAAfwCQAAAAAEBDQAAowQAMAENAACjBAAwBvcCAQCUBQAh-AIBAJQFACH5AgEAlAUAIfoCQACVBQAh-wJAAJUFACH8AkAAlQUAIQIAAACZBAAgDQAApgQAIAb3AgEAlAUAIfgCAQCUBQAh-QIBAJQFACH6AkAAlQUAIfsCQACVBQAh_AJAAJUFACECAAAAnAQAIA0AAKgEACACAAAAnAQAIA0AAKgEACADAAAAmQQAIBQAAKEEACAVAACmBAAgAQAAAJkEACABAAAAnAQAIAMHAACRBQAgHAAAkwUAIB0AAJIFACAJ9AIAALIEADD1AgAArwQAEPYCAACyBAAw9wIBALMEACH4AgEAswQAIfkCAQCzBAAh-gJAALQEACH7AkAAtAQAIfwCQAC0BAAhAwAAAJwEACABAACuBAAwGQAArwQAIAMAAACcBAAgAQAAnQQAMAIAAJkEACAJ9AIAALIEADD1AgAArwQAEPYCAACyBAAw9wIBALMEACH4AgEAswQAIfkCAQCzBAAh-gJAALQEACH7AkAAtAQAIfwCQAC0BAAhDgcAALYEACAcAAC5BAAgHQAAuQQAIP0CAQAAAAH-AgEAAAAE_wIBAAAABIADAQAAAAGBAwEAAAABggMBAAAAAYMDAQAAAAGEAwEAuAQAIYUDAQAAAAGGAwEAAAABhwMBAAAAAQsHAAC2BAAgHAAAtwQAIB0AALcEACD9AkAAAAAB_gJAAAAABP8CQAAAAASAA0AAAAABgQNAAAAAAYIDQAAAAAGDA0AAAAABhANAALUEACELBwAAtgQAIBwAALcEACAdAAC3BAAg_QJAAAAAAf4CQAAAAAT_AkAAAAAEgANAAAAAAYEDQAAAAAGCA0AAAAABgwNAAAAAAYQDQAC1BAAhCP0CAgAAAAH-AgIAAAAE_wICAAAABIADAgAAAAGBAwIAAAABggMCAAAAAYMDAgAAAAGEAwIAtgQAIQj9AkAAAAAB_gJAAAAABP8CQAAAAASAA0AAAAABgQNAAAAAAYIDQAAAAAGDA0AAAAABhANAALcEACEOBwAAtgQAIBwAALkEACAdAAC5BAAg_QIBAAAAAf4CAQAAAAT_AgEAAAAEgAMBAAAAAYEDAQAAAAGCAwEAAAABgwMBAAAAAYQDAQC4BAAhhQMBAAAAAYYDAQAAAAGHAwEAAAABC_0CAQAAAAH-AgEAAAAE_wIBAAAABIADAQAAAAGBAwEAAAABggMBAAAAAYMDAQAAAAGEAwEAuQQAIYUDAQAAAAGGAwEAAAABhwMBAAAAAQn0AgAAugQAMPUCAACcBAAQ9gIAALoEADD3AgEAuwQAIfgCAQC7BAAh-QIBALsEACH6AkAAvAQAIfsCQAC8BAAh_AJAALwEACEL_QIBAAAAAf4CAQAAAAT_AgEAAAAEgAMBAAAAAYEDAQAAAAGCAwEAAAABgwMBAAAAAYQDAQC5BAAhhQMBAAAAAYYDAQAAAAGHAwEAAAABCP0CQAAAAAH-AkAAAAAE_wJAAAAABIADQAAAAAGBA0AAAAABggNAAAAAAYMDQAAAAAGEA0AAtwQAIQL4AgEAAAAB-QIBAAAAAQv0AgAAvgQAMPUCAACWBAAQ9gIAAL4EADD3AgEAswQAIfoCQAC0BAAh-wJAALQEACH8AkAAtAQAIYkDAQCzBAAhigMBALMEACGLAwEAvwQAIYwDAQC_BAAhDgcAAMEEACAcAADCBAAgHQAAwgQAIP0CAQAAAAH-AgEAAAAF_wIBAAAABYADAQAAAAGBAwEAAAABggMBAAAAAYMDAQAAAAGEAwEAwAQAIYUDAQAAAAGGAwEAAAABhwMBAAAAAQ4HAADBBAAgHAAAwgQAIB0AAMIEACD9AgEAAAAB_gIBAAAABf8CAQAAAAWAAwEAAAABgQMBAAAAAYIDAQAAAAGDAwEAAAABhAMBAMAEACGFAwEAAAABhgMBAAAAAYcDAQAAAAEI_QICAAAAAf4CAgAAAAX_AgIAAAAFgAMCAAAAAYEDAgAAAAGCAwIAAAABgwMCAAAAAYQDAgDBBAAhC_0CAQAAAAH-AgEAAAAF_wIBAAAABYADAQAAAAGBAwEAAAABggMBAAAAAYMDAQAAAAGEAwEAwgQAIYUDAQAAAAGGAwEAAAABhwMBAAAAART0AgAAwwQAMPUCAACABAAQ9gIAAMMEADD3AgEAswQAIfsCQAC0BAAh_AJAALQEACGKAwEAswQAIY0DAQCzBAAhjgMBALMEACGPAwEAswQAIZADAQC_BAAhkQMBAL8EACGSAwEAvwQAIZMDAgDEBAAhlANAAMUEACGVA0AAxQQAIZYDAQC_BAAhlwMBAL8EACGYAwEAvwQAIZkDAQC_BAAhDQcAAMEEACAaAADJBAAgGwAAwQQAIBwAAMEEACAdAADBBAAg_QICAAAAAf4CAgAAAAX_AgIAAAAFgAMCAAAAAYEDAgAAAAGCAwIAAAABgwMCAAAAAYQDAgDIBAAhCwcAAMEEACAcAADHBAAgHQAAxwQAIP0CQAAAAAH-AkAAAAAF_wJAAAAABYADQAAAAAGBA0AAAAABggNAAAAAAYMDQAAAAAGEA0AAxgQAIQsHAADBBAAgHAAAxwQAIB0AAMcEACD9AkAAAAAB_gJAAAAABf8CQAAAAAWAA0AAAAABgQNAAAAAAYIDQAAAAAGDA0AAAAABhANAAMYEACEI_QJAAAAAAf4CQAAAAAX_AkAAAAAFgANAAAAAAYEDQAAAAAGCA0AAAAABgwNAAAAAAYQDQADHBAAhDQcAAMEEACAaAADJBAAgGwAAwQQAIBwAAMEEACAdAADBBAAg_QICAAAAAf4CAgAAAAX_AgIAAAAFgAMCAAAAAYEDAgAAAAGCAwIAAAABgwMCAAAAAYQDAgDIBAAhCP0CCAAAAAH-AggAAAAF_wIIAAAABYADCAAAAAGBAwgAAAABggMIAAAAAYMDCAAAAAGEAwgAyQQAIQn0AgAAygQAMPUCAADqAwAQ9gIAAMoEADD3AgEAswQAIfsCQAC0BAAhigMBALMEACGaAwEAswQAIZsDQAC0BAAhnANAAMUEACEM9AIAAMsEADD1AgAA1AMAEPYCAADLBAAw9wIBALMEACH7AkAAtAQAIfwCQAC0BAAhnQMBAL8EACGeAwEAvwQAIZ8DIADMBAAhoAMBAL8EACGhAwEAvwQAIaIDAQCzBAAhBQcAALYEACAcAADOBAAgHQAAzgQAIP0CIAAAAAGEAyAAzQQAIQUHAAC2BAAgHAAAzgQAIB0AAM4EACD9AiAAAAABhAMgAM0EACEC_QIgAAAAAYQDIADOBAAhD6ECAADSBAAgogIAANMEACCjAgAA1AQAIPQCAADPBAAw9QIAAMEDABD2AgAAzwQAMPcCAQC7BAAh-wJAALwEACH8AkAAvAQAIZ0DAQDQBAAhngMBANAEACGfAyAA0QQAIaADAQDQBAAhoQMBANAEACGiAwEAuwQAIQv9AgEAAAAB_gIBAAAABf8CAQAAAAWAAwEAAAABgQMBAAAAAYIDAQAAAAGDAwEAAAABhAMBAMIEACGFAwEAAAABhgMBAAAAAYcDAQAAAAEC_QIgAAAAAYQDIADOBAAhA6MDAACxAwAgpAMAALEDACClAwAAsQMAIAOjAwAAtQMAIKQDAAC1AwAgpQMAALUDACADowMAALkDACCkAwAAuQMAIKUDAAC5AwAgCqACAADXBAAg9AIAANUEADD1AgAAuQMAEPYCAADVBAAw9wIBALsEACH7AkAAvAQAIYoDAQC7BAAhmgMBALsEACGbA0AAvAQAIZwDQADWBAAhCP0CQAAAAAH-AkAAAAAF_wJAAAAABYADQAAAAAGBA0AAAAABggNAAAAAAYMDQAAAAAGEA0AAxwQAIRGhAgAA0gQAIKICAADTBAAgowIAANQEACD0AgAAzwQAMPUCAADBAwAQ9gIAAM8EADD3AgEAuwQAIfsCQAC8BAAh_AJAALwEACGdAwEA0AQAIZ4DAQDQBAAhnwMgANEEACGgAwEA0AQAIaEDAQDQBAAhogMBALsEACGfBAAAwQMAIKAEAADBAwAgDKACAADXBAAg9AIAANgEADD1AgAAtQMAEPYCAADYBAAw9wIBALsEACH6AkAAvAQAIfsCQAC8BAAh_AJAALwEACGJAwEAuwQAIYoDAQC7BAAhiwMBANAEACGMAwEA0AQAIQKOAwEAAAABjwMBAAAAARWgAgAA1wQAIPQCAADaBAAw9QIAALEDABD2AgAA2gQAMPcCAQC7BAAh-wJAALwEACH8AkAAvAQAIYoDAQC7BAAhjQMBALsEACGOAwEAuwQAIY8DAQC7BAAhkAMBANAEACGRAwEA0AQAIZIDAQDQBAAhkwMCANsEACGUA0AA1gQAIZUDQADWBAAhlgMBANAEACGXAwEA0AQAIZgDAQDQBAAhmQMBANAEACEI_QICAAAAAf4CAgAAAAX_AgIAAAAFgAMCAAAAAYEDAgAAAAGCAwIAAAABgwMCAAAAAYQDAgDBBAAhCvQCAADcBAAw9QIAAKwDABD2AgAA3AQAMJsDAQC_BAAhpwMBALMEACGoAwEAswQAIakDAQCzBAAhqgMBAL8EACGrAwEAswQAIawDAQCzBAAhCvQCAADdBAAw9QIAAJkDABD2AgAA3QQAMJsDAQDQBAAhpwMBALsEACGoAwEAuwQAIakDAQC7BAAhqgMBANAEACGrAwEAuwQAIawDAQC7BAAhCPQCAADeBAAw9QIAAJMDABD2AgAA3gQAMPwCAQCzBAAhqAMBALMEACGtAwEAswQAIa4DAQCzBAAhrwMBALMEACEI9AIAAN8EADD1AgAAgAMAEPYCAADfBAAw_AIBALsEACGoAwEAuwQAIa0DAQC7BAAhrgMBALsEACGvAwEAuwQAIQOtAwEAAAABrgMBAAAAAa8DAQAAAAEK9AIAAOEEADD1AgAA-gIAEPYCAADhBAAw-wIBALMEACGbAwEAswQAIagDAQCzBAAhsQMBALMEACGyAwEAvwQAIbMDAQC_BAAhtAMBALMEACEK9AIAAOIEADD1AgAA5wIAEPYCAADiBAAw-wIBALsEACGbAwEAuwQAIagDAQC7BAAhsQMBALsEACGyAwEA0AQAIbMDAQDQBAAhtAMBALsEACEM9AIAAOMEADD1AgAA4QIAEPYCAADjBAAw_AIBALMEACGoAwEAswQAIbMDAQCzBAAhtQMBALMEACG2AwEAswQAIbcDAgDkBAAhuAMBAL8EACG5AwEAvwQAIboDAQCzBAAhDQcAALYEACAaAADmBAAgGwAAtgQAIBwAALYEACAdAAC2BAAg_QICAAAAAf4CAgAAAAT_AgIAAAAEgAMCAAAAAYEDAgAAAAGCAwIAAAABgwMCAAAAAYQDAgDlBAAhDQcAALYEACAaAADmBAAgGwAAtgQAIBwAALYEACAdAAC2BAAg_QICAAAAAf4CAgAAAAT_AgIAAAAEgAMCAAAAAYEDAgAAAAGCAwIAAAABgwMCAAAAAYQDAgDlBAAhCP0CCAAAAAH-AggAAAAE_wIIAAAABIADCAAAAAGBAwgAAAABggMIAAAAAYMDCAAAAAGEAwgA5gQAIQz0AgAA5wQAMPUCAADOAgAQ9gIAAOcEADD8AgEAuwQAIagDAQC7BAAhswMBALsEACG1AwEAuwQAIbYDAQC7BAAhtwMCAOgEACG4AwEA0AQAIbkDAQDQBAAhugMBALsEACEI_QICAAAAAf4CAgAAAAT_AgIAAAAEgAMCAAAAAYEDAgAAAAGCAwIAAAABgwMCAAAAAYQDAgC2BAAhCPQCAADpBAAw9QIAAMgCABD2AgAA6QQAMPwCAQCzBAAhqAMBALMEACG1AwEAswQAIbYDAQCzBAAhtwMCAOQEACEI9AIAAOoEADD1AgAAtQIAEPYCAADqBAAw_AIBALsEACGoAwEAuwQAIbUDAQC7BAAhtgMBALsEACG3AwIA6AQAIQ30AgAA6wQAMPUCAACvAgAQ9gIAAOsEADD7AgEAswQAIfwCAQCzBAAhqAMBALMEACG7AwEAswQAIbwDAQCzBAAhvQMBALMEACG-AwEAswQAIb8DAQCzBAAhwAMBALMEACHBAwEAswQAIQ30AgAA7AQAMPUCAACcAgAQ9gIAAOwEADD7AgEAuwQAIfwCAQC7BAAhqAMBALsEACG7AwEAuwQAIbwDAQC7BAAhvQMBALsEACG-AwEAuwQAIb8DAQC7BAAhwAMBALsEACHBAwEAuwQAIRT0AgAA7QQAMPUCAACWAgAQ9gIAAO0EADCtAwEAswQAIa4DAQC_BAAhwgMBALMEACHDAwEAvwQAIcQDAQC_BAAhxQMBAL8EACHGAwEAvwQAIccDAQCzBAAhyAMIAO4EACHJAwEAvwQAIcoDAQCzBAAhywMBAL8EACHMAwEAvwQAIc0DAQC_BAAhzgMBAL8EACHPAwEAvwQAIdADAQC_BAAhDQcAALYEACAaAADmBAAgGwAA5gQAIBwAAOYEACAdAADmBAAg_QIIAAAAAf4CCAAAAAT_AggAAAAEgAMIAAAAAYEDCAAAAAGCAwgAAAABgwMIAAAAAYQDCADvBAAhDQcAALYEACAaAADmBAAgGwAA5gQAIBwAAOYEACAdAADmBAAg_QIIAAAAAf4CCAAAAAT_AggAAAAEgAMIAAAAAYEDCAAAAAGCAwgAAAABgwMIAAAAAYQDCADvBAAhFPQCAADwBAAw9QIAAIMCABD2AgAA8AQAMK0DAQC7BAAhrgMBANAEACHCAwEAuwQAIcMDAQDQBAAhxAMBANAEACHFAwEA0AQAIcYDAQDQBAAhxwMBALsEACHIAwgA8QQAIckDAQDQBAAhygMBALsEACHLAwEA0AQAIcwDAQDQBAAhzQMBANAEACHOAwEA0AQAIc8DAQDQBAAh0AMBANAEACEI_QIIAAAAAf4CCAAAAAT_AggAAAAEgAMIAAAAAYEDCAAAAAGCAwgAAAABgwMIAAAAAYQDCADmBAAhFfQCAADyBAAw9QIAAP0BABD2AgAA8gQAMPsCAQCzBAAhmwMBAL8EACGtAwEAswQAIa4DAQC_BAAhwwMBALMEACHEAwEAswQAIcUDAQCzBAAhxgMBAL8EACHQAwEAvwQAIdEDAQCzBAAh0gMBALMEACHTAwEAswQAIdQDAQC_BAAh1QMBAL8EACHWAwEAvwQAIdcDAQC_BAAh2AMCAMQEACHZAyAA8wQAIQUHAADBBAAgHAAA9QQAIB0AAPUEACD9AiAAAAABhAMgAPQEACEFBwAAwQQAIBwAAPUEACAdAAD1BAAg_QIgAAAAAYQDIAD0BAAhAv0CIAAAAAGEAyAA9QQAIRX0AgAA9gQAMPUCAADqAQAQ9gIAAPYEADD7AgEAuwQAIZsDAQDQBAAhrQMBALsEACGuAwEA0AQAIcMDAQC7BAAhxAMBALsEACHFAwEAuwQAIcYDAQDQBAAh0AMBANAEACHRAwEAuwQAIdIDAQC7BAAh0wMBALsEACHUAwEA0AQAIdUDAQDQBAAh1gMBANAEACHXAwEA0AQAIdgDAgDbBAAh2QMgAPcEACEC_QIgAAAAAYQDIAD1BAAhGvQCAAD4BAAw9QIAAOQBABD2AgAA-AQAMPwCAQCzBAAhnQMBALMEACGpAwEAvwQAIa0DAQCzBAAhrgMBAL8EACHDAwEAswQAIcQDAQCzBAAhxQMBALMEACHGAwEAvwQAIcsDAQC_BAAhzAMBAL8EACHNAwEAvwQAIc4DAQC_BAAh0AMBAL8EACHSAwEAswQAIdoDAQCzBAAh2wMBAL8EACHcAwEAvwQAId0DAQC_BAAh3gMBAL8EACHfAwEAvwQAIeADAQC_BAAh4QMBAL8EACEa9AIAAPkEADD1AgAA0QEAEPYCAAD5BAAw_AIBALsEACGdAwEAuwQAIakDAQDQBAAhrQMBALsEACGuAwEA0AQAIcMDAQC7BAAhxAMBALsEACHFAwEAuwQAIcYDAQDQBAAhywMBANAEACHMAwEA0AQAIc0DAQDQBAAhzgMBANAEACHQAwEA0AQAIdIDAQC7BAAh2gMBALsEACHbAwEA0AQAIdwDAQDQBAAh3QMBANAEACHeAwEA0AQAId8DAQDQBAAh4AMBANAEACHhAwEA0AQAIQLDAwEAAAABxAMBAAAAAQr0AgAA-wQAMPUCAADLAQAQ9gIAAPsEADD7AgEAswQAIZsDAQC_BAAhrQMBALMEACHDAwEAswQAIcUDAQCzBAAh4wMBALMEACHkAwEAvwQAIQr0AgAA_AQAMPUCAAC4AQAQ9gIAAPwEADD7AgEAuwQAIZsDAQDQBAAhrQMBALsEACHDAwEAuwQAIcUDAQC7BAAh4wMBALsEACHkAwEA0AQAIQf0AgAA_QQAMPUCAACyAQAQ9gIAAP0EADD8AgEAswQAIa0DAQCzBAAhrgMBALMEACHlAwEAswQAIQf0AgAA_gQAMPUCAACfAQAQ9gIAAP4EADD8AgEAuwQAIa0DAQC7BAAhrgMBALsEACHlAwEAuwQAIQKtAwEAAAABrgMBAAAAAQb0AgAAgAUAMPUCAACZAQAQ9gIAAIAFADD8AgEAswQAIa0DAQCzBAAh5wMgAMwEACEG9AIAAIEFADD1AgAAhgEAEPYCAACBBQAw_AIBALsEACGtAwEAuwQAIecDIADRBAAhB_QCAACCBQAw9QIAAIABABD2AgAAggUAMPwCAQCzBAAhrQMBALMEACHlAwEAswQAIegDAQC_BAAhB_QCAACDBQAw9QIAAG0AEPYCAACDBQAw_AIBALsEACGtAwEAuwQAIeUDAQC7BAAh6AMBANAEACEI9AIAAIQFADD1AgAAZwAQ9gIAAIQFADD8AgEAswQAIa0DAQCzBAAhxQMBALMEACHpAwIA5AQAIeoDAQCzBAAhCQMAAIYFACD0AgAAhQUAMPUCAAALABD2AgAAhQUAMPwCAQC7BAAhrQMBALsEACHFAwEAuwQAIekDAgDoBAAh6gMBALsEACEXBAAAiwUAIAUAAIwFACAGAACNBQAg9AIAAIoFADD1AgAAEAAQ9gIAAIoFADD8AgEAuwQAIakDAQC7BAAhrQMBALsEACHFAwEAuwQAIekDAgDoBAAh9AMBALsEACH1AwEA0AQAIZYEAQDQBAAhlwQBANAEACGYBAEA0AQAIZkEAQDQBAAhmgQBANAEACGbBAEA0AQAIZwEAQDQBAAhnQQBALsEACGfBAAAEAAgoAQAABAAICj0AgAAhwUAMPUCAABPABD2AgAAhwUAMPwCAQCzBAAhqAMBALMEACGpAwEAswQAIa0DAQCzBAAhxQMBALMEACHGAwEAvwQAIdIDAQCzBAAh6wMBALMEACHsAwEAswQAIe0DAQC_BAAh7gMBALMEACHvAwIA5AQAIfADAQC_BAAh8QMBAL8EACHyAwEAvwQAIfMDAQC_BAAh9AMBAL8EACH1AwEAvwQAIfYDAgDkBAAh9wMBAL8EACH4AwEAvwQAIfkDAQC_BAAh-gMBAL8EACH7AwIAxAQAIfwDAgDEBAAh_QMCAMQEACH-AwEAvwQAIf8DAQC_BAAhgAQCAMQEACGBBAIAxAQAIYIEAQC_BAAhgwQBAL8EACGEBAEAvwQAIYUEAQC_BAAhhgQgAPMEACGHBCAA8wQAIYgEIADzBAAhFvQCAACIBQAw9QIAADkAEPYCAACIBQAwqQMBALMEACGtAwEAswQAIcUDAQCzBAAh7gMBALMEACHwAwEAvwQAIfkDAQC_BAAhiQQBALMEACGKBAEAswQAIYsEAQC_BAAhjAQBAL8EACGNBAEAvwQAIY4EAQC_BAAhjwQBALMEACGQBAEAswQAIZEEAQC_BAAhkgQBAL8EACGTBAEAvwQAIZQEAgDkBAAhlQQBALMEACES9AIAAIkFADD1AgAAIwAQ9gIAAIkFADD8AgEAswQAIakDAQCzBAAhrQMBALMEACHFAwEAswQAIekDAgDkBAAh9AMBALMEACH1AwEAvwQAIZYEAQC_BAAhlwQBAL8EACGYBAEAvwQAIZkEAQC_BAAhmgQBAL8EACGbBAEAvwQAIZwEAQC_BAAhnQQBALMEACEVBAAAiwUAIAUAAIwFACAGAACNBQAg9AIAAIoFADD1AgAAEAAQ9gIAAIoFADD8AgEAuwQAIakDAQC7BAAhrQMBALsEACHFAwEAuwQAIekDAgDoBAAh9AMBALsEACH1AwEA0AQAIZYEAQDQBAAhlwQBANAEACGYBAEA0AQAIZkEAQDQBAAhmgQBANAEACGbBAEA0AQAIZwEAQDQBAAhnQQBALsEACEDowMAAAMAIKQDAAADACClAwAAAwAgA6MDAAAHACCkAwAABwAgpQMAAAcAIAsDAACGBQAg9AIAAIUFADD1AgAACwAQ9gIAAIUFADD8AgEAuwQAIa0DAQC7BAAhxQMBALsEACHpAwIA6AQAIeoDAQC7BAAhnwQAAAsAIKAEAAALACADxQMBAAAAAesDAQAAAAHvAwIAAAABKQMAAIYFACD0AgAAjwUAMPUCAAAHABD2AgAAjwUAMPwCAQC7BAAhqAMBALsEACGpAwEAuwQAIa0DAQC7BAAhxQMBALsEACHGAwEA0AQAIdIDAQC7BAAh6wMBALsEACHsAwEAuwQAIe0DAQDQBAAh7gMBALsEACHvAwIA6AQAIfADAQDQBAAh8QMBANAEACHyAwEA0AQAIfMDAQDQBAAh9AMBANAEACH1AwEA0AQAIfYDAgDoBAAh9wMBANAEACH4AwEA0AQAIfkDAQDQBAAh-gMBANAEACH7AwIA2wQAIfwDAgDbBAAh_QMCANsEACH-AwEA0AQAIf8DAQDQBAAhgAQCANsEACGBBAIA2wQAIYIEAQDQBAAhgwQBANAEACGEBAEA0AQAIYUEAQDQBAAhhgQgAPcEACGHBCAA9wQAIYgEIAD3BAAhFwMAAIYFACD0AgAAkAUAMPUCAAADABD2AgAAkAUAMKkDAQC7BAAhrQMBALsEACHFAwEAuwQAIe4DAQC7BAAh8AMBANAEACH5AwEA0AQAIYkEAQC7BAAhigQBALsEACGLBAEA0AQAIYwEAQDQBAAhjQQBANAEACGOBAEA0AQAIY8EAQC7BAAhkAQBALsEACGRBAEA0AQAIZIEAQDQBAAhkwQBANAEACGUBAIA6AQAIZUEAQC7BAAhAAAAAaQEAQAAAAEBpARAAAAAAQAAAAABpAQBAAAAAQUUAADuBgAgFQAA8QYAIKEEAADvBgAgogQAAPAGACCnBAAArwMAIAMUAADuBgAgoQQAAO8GACCnBAAArwMAIAAAAAAABaQEAgAAAAGqBAIAAAABqwQCAAAAAawEAgAAAAGtBAIAAAABAaQEQAAAAAEFFAAA6QYAIBUAAOwGACChBAAA6gYAIKIEAADrBgAgpwQAAK8DACADFAAA6QYAIKEEAADqBgAgpwQAAK8DACAAAAAFFAAA5AYAIBUAAOcGACChBAAA5QYAIKIEAADmBgAgpwQAAK8DACADFAAA5AYAIKEEAADlBgAgpwQAAK8DACAAAAABpAQgAAAAAQsUAADKBQAwFQAAzwUAMKEEAADLBQAwogQAAMwFADCjBAAAzQUAIKQEAADOBQAwpQQAAM4FADCmBAAAzgUAMKcEAADOBQAwqAQAANAFADCpBAAA0QUAMAsUAAC-BQAwFQAAwwUAMKEEAAC_BQAwogQAAMAFADCjBAAAwQUAIKQEAADCBQAwpQQAAMIFADCmBAAAwgUAMKcEAADCBQAwqAQAAMQFADCpBAAAxQUAMAsUAACyBQAwFQAAtwUAMKEEAACzBQAwogQAALQFADCjBAAAtQUAIKQEAAC2BQAwpQQAALYFADCmBAAAtgUAMKcEAAC2BQAwqAQAALgFADCpBAAAuQUAMAX3AgEAAAAB-wJAAAAAAZoDAQAAAAGbA0AAAAABnANAAAAAAQIAAAC7AwAgFAAAvQUAIAMAAAC7AwAgFAAAvQUAIBUAALwFACABDQAA4wYAMAqgAgAA1wQAIPQCAADVBAAw9QIAALkDABD2AgAA1QQAMPcCAQAAAAH7AkAAvAQAIYoDAQC7BAAhmgMBAAAAAZsDQAC8BAAhnANAANYEACECAAAAuwMAIA0AALwFACACAAAAugUAIA0AALsFACAJ9AIAALkFADD1AgAAugUAEPYCAAC5BQAw9wIBALsEACH7AkAAvAQAIYoDAQC7BAAhmgMBALsEACGbA0AAvAQAIZwDQADWBAAhCfQCAAC5BQAw9QIAALoFABD2AgAAuQUAMPcCAQC7BAAh-wJAALwEACGKAwEAuwQAIZoDAQC7BAAhmwNAALwEACGcA0AA1gQAIQX3AgEAlAUAIfsCQACVBQAhmgMBAJQFACGbA0AAlQUAIZwDQACjBQAhBfcCAQCUBQAh-wJAAJUFACGaAwEAlAUAIZsDQACVBQAhnANAAKMFACEF9wIBAAAAAfsCQAAAAAGaAwEAAAABmwNAAAAAAZwDQAAAAAEH9wIBAAAAAfoCQAAAAAH7AkAAAAAB_AJAAAAAAYkDAQAAAAGLAwEAAAABjAMBAAAAAQIAAAC3AwAgFAAAyQUAIAMAAAC3AwAgFAAAyQUAIBUAAMgFACABDQAA4gYAMAygAgAA1wQAIPQCAADYBAAw9QIAALUDABD2AgAA2AQAMPcCAQAAAAH6AkAAvAQAIfsCQAC8BAAh_AJAALwEACGJAwEAAAABigMBALsEACGLAwEA0AQAIYwDAQDQBAAhAgAAALcDACANAADIBQAgAgAAAMYFACANAADHBQAgC_QCAADFBQAw9QIAAMYFABD2AgAAxQUAMPcCAQC7BAAh-gJAALwEACH7AkAAvAQAIfwCQAC8BAAhiQMBALsEACGKAwEAuwQAIYsDAQDQBAAhjAMBANAEACEL9AIAAMUFADD1AgAAxgUAEPYCAADFBQAw9wIBALsEACH6AkAAvAQAIfsCQAC8BAAh_AJAALwEACGJAwEAuwQAIYoDAQC7BAAhiwMBANAEACGMAwEA0AQAIQf3AgEAlAUAIfoCQACVBQAh-wJAAJUFACH8AkAAlQUAIYkDAQCUBQAhiwMBAJoFACGMAwEAmgUAIQf3AgEAlAUAIfoCQACVBQAh-wJAAJUFACH8AkAAlQUAIYkDAQCUBQAhiwMBAJoFACGMAwEAmgUAIQf3AgEAAAAB-gJAAAAAAfsCQAAAAAH8AkAAAAABiQMBAAAAAYsDAQAAAAGMAwEAAAABEPcCAQAAAAH7AkAAAAAB_AJAAAAAAY0DAQAAAAGOAwEAAAABjwMBAAAAAZADAQAAAAGRAwEAAAABkgMBAAAAAZMDAgAAAAGUA0AAAAABlQNAAAAAAZYDAQAAAAGXAwEAAAABmAMBAAAAAZkDAQAAAAECAAAAswMAIBQAANUFACADAAAAswMAIBQAANUFACAVAADUBQAgAQ0AAOEGADAWoAIAANcEACD0AgAA2gQAMPUCAACxAwAQ9gIAANoEADD3AgEAAAAB-wJAALwEACH8AkAAvAQAIYoDAQC7BAAhjQMBALsEACGOAwEAuwQAIY8DAQC7BAAhkAMBANAEACGRAwEA0AQAIZIDAQDQBAAhkwMCANsEACGUA0AA1gQAIZUDQADWBAAhlgMBANAEACGXAwEA0AQAIZgDAQDQBAAhmQMBANAEACGmAwAA2QQAIAIAAACzAwAgDQAA1AUAIAIAAADSBQAgDQAA0wUAIBT0AgAA0QUAMPUCAADSBQAQ9gIAANEFADD3AgEAuwQAIfsCQAC8BAAh_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-QMBAAAAAfoDAQAAAAH7AwIAAAAB_AMCAAAAAf0DAgAAAAH-AwEAAAAB_wMBAAAAAYAEAgAAAAGBBAIAAAABggQBAAAAAYMEAQAAAAGEBAEAAAABhQQBAAAAAYYEIAAAAAGHBCAAAAABiAQgAAAAAQIAAAAJACAUAAC9BgAgAwAAAAkAIBQAAL0GACAVAAC8BgAgAQ0AANEGADAqAwAAhgUAIPQCAACPBQAw9QIAAAcAEPYCAACPBQAw_AIBALsEACGoAwEAAAABqQMBALsEACGtAwEAuwQAIcUDAQC7BAAhxgMBANAEACHSAwEAuwQAIesDAQC7BAAh7AMBALsEACHtAwEA0AQAIe4DAQC7BAAh7wMCAOgEACHwAwEA0AQAIfEDAQDQBAAh8gMBANAEACHzAwEA0AQAIfQDAQDQBAAh9QMBANAEACH2AwIA6AQAIfcDAQDQBAAh-AMBANAEACH5AwEA0AQAIfoDAQDQBAAh-wMCANsEACH8AwIA2wQAIf0DAgDbBAAh_gMBANAEACH_AwEA0AQAIYAEAgDbBAAhgQQCANsEACGCBAEA0AQAIYMEAQDQBAAhhAQBANAEACGFBAEA0AQAIYYEIAD3BAAhhwQgAPcEACGIBCAA9wQAIZ4EAACOBQAgAgAAAAkAIA0AALwGACACAAAAugYAIA0AALsGACAo9AIAALkGADD1AgAAugYAEPYCAAC5BgAw_AIBALsEACGoAwEAuwQAIakDAQC7BAAhrQMBALsEACHFAwEAuwQAIcYDAQDQBAAh0gMBALsEACHrAwEAuwQAIewDAQC7BAAh7QMBANAEACHuAwEAuwQAIe8DAgDoBAAh8AMBANAEACHxAwEA0AQAIfIDAQDQBAAh8wMBANAEACH0AwEA0AQAIfUDAQDQBAAh9gMCAOgEACH3AwEA0AQAIfgDAQDQBAAh-QMBANAEACH6AwEA0AQAIfsDAgDbBAAh_AMCANsEACH9AwIA2wQAIf4DAQDQBAAh_wMBANAEACGABAIA2wQAIYEEAgDbBAAhggQBANAEACGDBAEA0AQAIYQEAQDQBAAhhQQBANAEACGGBCAA9wQAIYcEIAD3BAAhiAQgAPcEACEo9AIAALkGADD1AgAAugYAEPYCAAC5BgAw_AIBALsEACGoAwEAuwQAIakDAQC7BAAhrQMBALsEACHFAwEAuwQAIcYDAQDQBAAh0gMBALsEACHrAwEAuwQAIewDAQC7BAAh7QMBANAEACHuAwEAuwQAIe8DAgDoBAAh8AMBANAEACHxAwEA0AQAIfIDAQDQBAAh8wMBANAEACH0AwEA0AQAIfUDAQDQBAAh9gMCAOgEACH3AwEA0AQAIfgDAQDQBAAh-QMBANAEACH6AwEA0AQAIfsDAgDbBAAh_AMCANsEACH9AwIA2wQAIf4DAQDQBAAh_wMBANAEACGABAIA2wQAIYEEAgDbBAAhggQBANAEACGDBAEA0AQAIYQEAQDQBAAhhQQBANAEACGGBCAA9wQAIYcEIAD3BAAhiAQgAPcEACEk_AIBAJQFACGoAwEAlAUAIakDAQCUBQAhrQMBAJQFACHGAwEAmgUAIdIDAQCUBQAh6wMBAJQFACHsAwEAlAUAIe0DAQCaBQAh7gMBAJQFACHvAwIA6wUAIfADAQCaBQAh8QMBAJoFACHyAwEAmgUAIfMDAQCaBQAh9AMBAJoFACH1AwEAmgUAIfYDAgDrBQAh9wMBAJoFACH4AwEAmgUAIfkDAQCaBQAh-gMBAJoFACH7AwIAogUAIfwDAgCiBQAh_QMCAKIFACH-AwEAmgUAIf8DAQCaBQAhgAQCAKIFACGBBAIAogUAIYIEAQCaBQAhgwQBAJoFACGEBAEAmgUAIYUEAQCaBQAhhgQgAP8FACGHBCAA_wUAIYgEIAD_BQAhJPwCAQCUBQAhqAMBAJQFACGpAwEAlAUAIa0DAQCUBQAhxgMBAJoFACHSAwEAlAUAIesDAQCUBQAh7AMBAJQFACHtAwEAmgUAIe4DAQCUBQAh7wMCAOsFACHwAwEAmgUAIfEDAQCaBQAh8gMBAJoFACHzAwEAmgUAIfQDAQCaBQAh9QMBAJoFACH2AwIA6wUAIfcDAQCaBQAh-AMBAJoFACH5AwEAmgUAIfoDAQCaBQAh-wMCAKIFACH8AwIAogUAIf0DAgCiBQAh_gMBAJoFACH_AwEAmgUAIYAEAgCiBQAhgQQCAKIFACGCBAEAmgUAIYMEAQCaBQAhhAQBAJoFACGFBAEAmgUAIYYEIAD_BQAhhwQgAP8FACGIBCAA_wUAIST8AgEAAAABqAMBAAAAAakDAQAAAAGtAwEAAAABxgMBAAAAAdIDAQAAAAHrAwEAAAAB7AMBAAAAAe0DAQAAAAHuAwEAAAAB7wMCAAAAAfADAQAAAAHxAwEAAAAB8gMBAAAAAfMDAQAAAAH0AwEAAAAB9QMBAAAAAfYDAgAAAAH3AwEAAAAB-AMBAAAAAfkDAQAAAAH6AwEAAAAB-wMCAAAAAfwDAgAAAAH9AwIAAAAB_gMBAAAAAf8DAQAAAAGABAIAAAABgQQCAAAAAYIEAQAAAAGDBAEAAAABhAQBAAAAAYUEAQAAAAGGBCAAAAABhwQgAAAAAYgEIAAAAAESqQMBAAAAAa0DAQAAAAHuAwEAAAAB8AMBAAAAAfkDAQAAAAGJBAEAAAABigQBAAAAAYsEAQAAAAGMBAEAAAABjQQBAAAAAY4EAQAAAAGPBAEAAAABkAQBAAAAAZEEAQAAAAGSBAEAAAABkwQBAAAAAZQEAgAAAAGVBAEAAAABAgAAAAUAIBQAAMkGACADAAAABQAgFAAAyQYAIBUAAMgGACABDQAA0AYAMBcDAACGBQAg9AIAAJAFADD1AgAAAwAQ9gIAAJAFADCpAwEAuwQAIa0DAQC7BAAhxQMBALsEACHuAwEAuwQAIfADAQDQBAAh-QMBANAEACGJBAEAAAABigQBALsEACGLBAEA0AQAIYwEAQDQBAAhjQQBANAEACGOBAEA0AQAIY8EAQC7BAAhkAQBALsEACGRBAEA0AQAIZIEAQDQBAAhkwQBANAEACGUBAIA6AQAIZUEAQC7BAAhAgAAAAUAIA0AAMgGACACAAAAxgYAIA0AAMcGACAW9AIAAMUGADD1AgAAxgYAEPYCAADFBgAwqQMBALsEACGtAwEAuwQAIcUDAQC7BAAh7gMBALsEACHwAwEA0AQAIfkDAQDQBAAhiQQBALsEACGKBAEAuwQAIYsEAQDQBAAhjAQBANAEACGNBAEA0AQAIY4EAQDQBAAhjwQBALsEACGQBAEAuwQAIZEEAQDQBAAhkgQBANAEACGTBAEA0AQAIZQEAgDoBAAhlQQBALsEACEW9AIAAMUGADD1AgAAxgYAEPYCAADFBgAwqQMBALsEACGtAwEAuwQAIcUDAQC7BAAh7gMBALsEACHwAwEA0AQAIfkDAQDQBAAhiQQBALsEACGKBAEAuwQAIYsEAQDQBAAhjAQBANAEACGNBAEA0AQAIY4EAQDQBAAhjwQBALsEACGQBAEAuwQAIZEEAQDQBAAhkgQBANAEACGTBAEA0AQAIZQEAgDoBAAhlQQBALsEACESqQMBAJQFACGtAwEAlAUAIe4DAQCUBQAh8AMBAJoFACH5AwEAmgUAIYkEAQCUBQAhigQBAJQFACGLBAEAmgUAIYwEAQCaBQAhjQQBAJoFACGOBAEAmgUAIY8EAQCUBQAhkAQBAJQFACGRBAEAmgUAIZIEAQCaBQAhkwQBAJoFACGUBAIA6wUAIZUEAQCUBQAhEqkDAQCUBQAhrQMBAJQFACHuAwEAlAUAIfADAQCaBQAh-QMBAJoFACGJBAEAlAUAIYoEAQCUBQAhiwQBAJoFACGMBAEAmgUAIY0EAQCaBQAhjgQBAJoFACGPBAEAlAUAIZAEAQCUBQAhkQQBAJoFACGSBAEAmgUAIZMEAQCaBQAhlAQCAOsFACGVBAEAlAUAIRKpAwEAAAABrQMBAAAAAe4DAQAAAAHwAwEAAAAB-QMBAAAAAYkEAQAAAAGKBAEAAAABiwQBAAAAAYwEAQAAAAGNBAEAAAABjgQBAAAAAY8EAQAAAAGQBAEAAAABkQQBAAAAAZIEAQAAAAGTBAEAAAABlAQCAAAAAZUEAQAAAAEEFAAAvgYAMKEEAAC_BgAwowQAAMEGACCnBAAAwgYAMAQUAACyBgAwoQQAALMGADCjBAAAtQYAIKcEAAC2BgAwAxQAAK0GACChBAAArgYAIKcEAABSACAAAAEDAACWBgAgEqkDAQAAAAGtAwEAAAAB7gMBAAAAAfADAQAAAAH5AwEAAAABiQQBAAAAAYoEAQAAAAGLBAEAAAABjAQBAAAAAY0EAQAAAAGOBAEAAAABjwQBAAAAAZAEAQAAAAGRBAEAAAABkgQBAAAAAZMEAQAAAAGUBAIAAAABlQQBAAAAAST8AgEAAAABqAMBAAAAAakDAQAAAAGtAwEAAAABxgMBAAAAAdIDAQAAAAHrAwEAAAAB7AMBAAAAAe0DAQAAAAHuAwEAAAAB7wMCAAAAAfADAQAAAAHxAwEAAAAB8gMBAAAAAfMDAQAAAAH0AwEAAAAB9QMBAAAAAfYDAgAAAAH3AwEAAAAB-AMBAAAAAfkDAQAAAAH6AwEAAAAB-wMCAAAAAfwDAgAAAAH9AwIAAAAB_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_HABAHQBBAAAAAwcARxwASB0ASQAAAAMHAEccAEgdAEkAAAADBwBPHABQHQBRAAAAAwcATxwAUB0AUQAAAAUHAFcaAFgbAFkcAFodAFsAAAAAAAUHAFcaAFgbAFkcAFodAFsAAAAFBwBhGgBiGwBjHABkHQBlAAAAAAAFBwBhGgBiGwBjHABkHQBlAAAAAwcAaxwAbB0AbQAAAAMHAGscAGwdAG0AAAAFBwBzGgB0GwB1HAB2HQB3AAAAAAAFBwBzGgB0GwB1HAB2HQB3AAAABQcAfRoAfhsAfxwAgAEdAIEBAAAAAAAFBwB9GgB-GwB_HACAAR0AgQEAAAADBwCHARwAiAEdAIkBAAAAAwcAhwEcAIgBHQCJAQAAAAMHAI8BHACQAR0AkQEAAAADBwCPARwAkAEdAJEBAAAAAwcAlwEcAJgBHQCZAQAAAAMHAJcBHACYAR0AmQEEBwCfAaECtAOcAaICuAOdAaMCvAOeAQGgAgCbAQGgAgCbAQGgAgCbAQOhAr0DAKICvgMAowK_AwAAAAMHAKMBHACkAR0ApQEAAAADBwCjARwApAEdAKUBAaACAJsBAaACAJsBAwcAqgEcAKsBHQCsAQAAAAMHAKoBHACrAR0ArAEBoAIAmwEBoAIAmwEFBwCxARoAsgEbALMBHAC0AR0AtQEAAAAAAAUHALEBGgCyARsAswEcALQBHQC1AQGgAgCbAQGgAgCbAQMHALoBHAC7AR0AvAEAAAADBwC6ARwAuwEdALwBAAAAAwcAwgEcAMMBHQDEAQAAAAMHAMIBHADDAR0AxAEIAgEJDwEKEgELEwEMFAEOFgEPGAYQGQcRGwESHQYTHggWHwEXIAEYIQYeJAkfJQ8gJgIhJwIiKAIjKQIkKgIlLAImLgYnLxAoMQIpMwYqNBErNQIsNgItNwYuOhIvOxgwPAMxPQMyPgMzPwM0QAM1QgM2RAY3RRk4RwM5SQY6Sho7SwM8TAM9TQY-UBs_USFAUwRBVARCVgRDVwREWARFWgRGXAZHXSJIXwRJYQZKYiNLYwRMZARNZQZOaCRPaSpQaytRbCtSbytTcCtUcStVcytWdQZXdixYeCtZegZaey1bfCtcfStdfgZegQEuX4IBMmCEATNhhQEzYogBM2OJATNkigEzZYwBM2aOAQZnjwE0aJEBM2mTAQZqlAE1a5UBM2yWATNtlwEGbpoBNm-bATpwnQE7cZ4BO3KhATtzogE7dKMBO3WlATt2pwEGd6gBPHiqATt5rAEGeq0BPXuuATt8rwE7fbABBn6zAT5_tAFCgAG2AUOBAbcBQ4IBugFDgwG7AUOEAbwBQ4UBvgFDhgHAAQaHAcEBRIgBwwFDiQHFAQaKAcYBRYsBxwFDjAHIAUONAckBBo4BzAFGjwHNAUqQAc8BS5EB0AFLkgHTAUuTAdQBS5QB1QFLlQHXAUuWAdkBBpcB2gFMmAHcAUuZAd4BBpoB3wFNmwHgAUucAeEBS50B4gEGngHlAU6fAeYBUqAB6AFToQHpAVOiAewBU6MB7QFTpAHuAVOlAfABU6YB8gEGpwHzAVSoAfUBU6kB9wEGqgH4AVWrAfkBU6wB-gFTrQH7AQauAf4BVq8B_wFcsAGBAl2xAYICXbIBhQJdswGGAl20AYcCXbUBiQJdtgGLAga3AYwCXrgBjgJduQGQAga6AZECX7sBkgJdvAGTAl29AZQCBr4BlwJgvwGYAmbAAZoCZ8EBmwJnwgGeAmfDAZ8CZ8QBoAJnxQGiAmfGAaQCBscBpQJoyAGnAmfJAakCBsoBqgJpywGrAmfMAawCZ80BrQIGzgGwAmrPAbECbtABswJv0QG0Am_SAbcCb9MBuAJv1AG5Am_VAbsCb9YBvQIG1wG-AnDYAcACb9kBwgIG2gHDAnHbAcQCb9wBxQJv3QHGAgbeAckCct8BygJ44AHMAnnhAc0CeeIB0AJ54wHRAnnkAdICeeUB1AJ55gHWAgbnAdcCeugB2QJ56QHbAgbqAdwCe-sB3QJ57AHeAnntAd8CBu4B4gJ87wHjAoIB8AHlAoMB8QHmAoMB8gHpAoMB8wHqAoMB9AHrAoMB9QHtAoMB9gHvAgb3AfAChAH4AfICgwH5AfQCBvoB9QKFAfsB9gKDAfwB9wKDAf0B-AIG_gH7AoYB_wH8AooBgAL-AosBgQL_AosBggKCA4sBgwKDA4sBhAKEA4sBhQKGA4sBhgKIAwaHAokDjAGIAosDiwGJAo0DBooCjgONAYsCjwOLAYwCkAOLAY0CkQMGjgKUA44BjwKVA5IBkAKXA5MBkQKYA5MBkgKbA5MBkwKcA5MBlAKdA5MBlQKfA5MBlgKhAwaXAqIDlAGYAqQDkwGZAqYDBpoCpwOVAZsCqAOTAZwCqQOTAZ0CqgMGngKtA5YBnwKuA5oBpAKwA5sBpQLAA5sBpgLDA5sBpwLEA5sBqALFA5sBqQLHA5sBqgLJAwarAsoDoAGsAswDmwGtAs4DBq4CzwOhAa8C0AObAbAC0QObAbEC0gMGsgLVA6IBswLWA6YBtALXA54BtQLYA54BtgLZA54BtwLaA54BuALbA54BuQLdA54BugLfAwa7AuADpwG8AuIDngG9AuQDBr4C5QOoAb8C5gOeAcAC5wOeAcEC6AMGwgLrA6kBwwLsA60BxALtA5wBxQLuA5wBxgLvA5wBxwLwA5wByALxA5wByQLzA5wBygL1AwbLAvYDrgHMAvgDnAHNAvoDBs4C-wOvAc8C_AOcAdAC_QOcAdEC_gMG0gKBBLAB0wKCBLYB1AKDBJ0B1QKEBJ0B1gKFBJ0B1wKGBJ0B2AKHBJ0B2QKJBJ0B2gKLBAbbAowEtwHcAo4EnQHdApAEBt4CkQS4Ad8CkgSdAeACkwSdAeEClAQG4gKXBLkB4wKYBL0B5AKaBL4B5QKbBL4B5gKeBL4B5wKfBL4B6AKgBL4B6QKiBL4B6gKkBAbrAqUEvwHsAqcEvgHtAqkEBu4CqgTAAe8CqwS-AfACrAS-AfECrQQG8gKwBMEB8wKxBMUB"
13764
15553
  };
13765
15554
  config.compilerWasm = {
13766
15555
  getRuntime: async () => require_query_compiler_fast_bg(),
@@ -13849,6 +15638,403 @@ PrismaTriggerSetupStateRepository = __decorate([
13849
15638
  __decorateMetadata("design:paramtypes", [Object])
13850
15639
  ], PrismaTriggerSetupStateRepository);
13851
15640
 
15641
+ //#endregion
15642
+ //#region src/infrastructure/persistence/PrismaRunTraceContextRepository.ts
15643
+ var _ref$7;
15644
+ let PrismaRunTraceContextRepository = class PrismaRunTraceContextRepository$1 {
15645
+ constructor(prisma, otelIdentityFactory) {
15646
+ this.prisma = prisma;
15647
+ this.otelIdentityFactory = otelIdentityFactory;
15648
+ }
15649
+ async load(runId) {
15650
+ const row = await this.prisma.runTraceContext.findUnique({ where: { runId: decodeURIComponent(runId) } });
15651
+ if (!row) return;
15652
+ return {
15653
+ runId: row.runId,
15654
+ workflowId: row.workflowId,
15655
+ traceId: row.traceId,
15656
+ rootSpanId: row.rootSpanId,
15657
+ serviceName: row.serviceName ?? void 0,
15658
+ createdAt: row.createdAt,
15659
+ expiresAt: row.expiresAt ?? void 0
15660
+ };
15661
+ }
15662
+ async getOrCreate(args) {
15663
+ const existing = await this.load(args.runId);
15664
+ if (existing) return existing;
15665
+ const created = {
15666
+ runId: decodeURIComponent(args.runId),
15667
+ workflowId: decodeURIComponent(args.workflowId),
15668
+ traceId: this.otelIdentityFactory.createTraceId(args.runId),
15669
+ rootSpanId: this.otelIdentityFactory.createRootSpanId(args.runId),
15670
+ serviceName: args.serviceName,
15671
+ createdAt: (/* @__PURE__ */ new Date()).toISOString()
15672
+ };
15673
+ await this.prisma.runTraceContext.create({ data: {
15674
+ runId: created.runId,
15675
+ workflowId: created.workflowId,
15676
+ traceId: created.traceId,
15677
+ rootSpanId: created.rootSpanId,
15678
+ serviceName: created.serviceName ?? null,
15679
+ createdAt: created.createdAt,
15680
+ expiresAt: null
15681
+ } });
15682
+ return created;
15683
+ }
15684
+ async upsertExpiry(args) {
15685
+ if (!args.expiresAt) return;
15686
+ const runId = decodeURIComponent(args.runId);
15687
+ const existing = await this.prisma.runTraceContext.findUnique({
15688
+ where: { runId },
15689
+ select: { expiresAt: true }
15690
+ });
15691
+ if (!existing) return;
15692
+ const expiresAt = this.resolveLaterExpiry(existing.expiresAt ?? void 0, args.expiresAt);
15693
+ await this.prisma.runTraceContext.update({
15694
+ where: { runId },
15695
+ data: { expiresAt: expiresAt ?? null }
15696
+ });
15697
+ }
15698
+ resolveLaterExpiry(current, candidate) {
15699
+ if (!current) return candidate;
15700
+ if (!candidate) return current;
15701
+ return current >= candidate ? current : candidate;
15702
+ }
15703
+ };
15704
+ PrismaRunTraceContextRepository = __decorate([
15705
+ injectable(),
15706
+ __decorateParam(0, inject(PrismaDatabaseClientToken)),
15707
+ __decorateParam(1, inject(OtelIdentityFactory)),
15708
+ __decorateMetadata("design:paramtypes", [Object, typeof (_ref$7 = typeof OtelIdentityFactory !== "undefined" && OtelIdentityFactory) === "function" ? _ref$7 : Object])
15709
+ ], PrismaRunTraceContextRepository);
15710
+
15711
+ //#endregion
15712
+ //#region src/infrastructure/persistence/PrismaTelemetryArtifactStore.ts
15713
+ var _ref$6;
15714
+ let PrismaTelemetryArtifactStore = class PrismaTelemetryArtifactStore$1 {
15715
+ constructor(prisma, otelIdentityFactory) {
15716
+ this.prisma = prisma;
15717
+ this.otelIdentityFactory = otelIdentityFactory;
15718
+ }
15719
+ async save(record) {
15720
+ const artifactId = this.otelIdentityFactory.createArtifactId();
15721
+ const createdAt = (/* @__PURE__ */ new Date()).toISOString();
15722
+ await this.prisma.telemetryArtifact.create({ data: {
15723
+ artifactId,
15724
+ traceId: record.traceId,
15725
+ spanId: record.spanId,
15726
+ runId: record.runId,
15727
+ workflowId: record.workflowId,
15728
+ nodeId: record.nodeId ?? null,
15729
+ activationId: record.activationId ?? null,
15730
+ kind: record.kind,
15731
+ contentType: record.contentType,
15732
+ previewText: record.previewText ?? null,
15733
+ previewJson: record.previewJson !== void 0 ? JSON.stringify(record.previewJson) : null,
15734
+ payloadText: record.payloadText ?? null,
15735
+ payloadJson: record.payloadJson !== void 0 ? JSON.stringify(record.payloadJson) : null,
15736
+ bytes: record.bytes ?? null,
15737
+ truncated: record.truncated ?? null,
15738
+ createdAt,
15739
+ expiresAt: record.expiresAt?.toISOString() ?? null,
15740
+ retentionExpiresAt: record.retentionExpiresAt ?? null
15741
+ } });
15742
+ return {
15743
+ artifactId,
15744
+ traceId: record.traceId,
15745
+ spanId: record.spanId,
15746
+ runId: record.runId,
15747
+ workflowId: record.workflowId,
15748
+ nodeId: record.nodeId,
15749
+ activationId: record.activationId,
15750
+ kind: record.kind,
15751
+ contentType: record.contentType,
15752
+ previewText: record.previewText,
15753
+ previewJson: record.previewJson,
15754
+ payloadText: record.payloadText,
15755
+ payloadJson: record.payloadJson,
15756
+ bytes: record.bytes,
15757
+ truncated: record.truncated,
15758
+ createdAt,
15759
+ expiresAt: record.expiresAt?.toISOString(),
15760
+ retentionExpiresAt: record.retentionExpiresAt
15761
+ };
15762
+ }
15763
+ async listByTraceId(traceId) {
15764
+ return (await this.prisma.telemetryArtifact.findMany({
15765
+ where: { traceId },
15766
+ orderBy: [{ createdAt: "asc" }, { artifactId: "asc" }]
15767
+ })).map((row) => ({
15768
+ artifactId: row.artifactId,
15769
+ traceId: row.traceId,
15770
+ spanId: row.spanId,
15771
+ runId: row.runId,
15772
+ workflowId: row.workflowId,
15773
+ nodeId: row.nodeId ?? void 0,
15774
+ activationId: row.activationId ?? void 0,
15775
+ kind: row.kind,
15776
+ contentType: row.contentType,
15777
+ previewText: row.previewText ?? void 0,
15778
+ previewJson: this.parseJson(row.previewJson),
15779
+ payloadText: row.payloadText ?? void 0,
15780
+ payloadJson: this.parseJson(row.payloadJson),
15781
+ bytes: row.bytes ?? void 0,
15782
+ truncated: row.truncated ?? void 0,
15783
+ createdAt: row.createdAt,
15784
+ expiresAt: row.expiresAt ?? void 0,
15785
+ retentionExpiresAt: row.retentionExpiresAt ?? void 0
15786
+ }));
15787
+ }
15788
+ async pruneExpired(args) {
15789
+ const rows = await this.prisma.telemetryArtifact.findMany({
15790
+ where: { retentionExpiresAt: { lte: args.nowIso } },
15791
+ select: { artifactId: true },
15792
+ orderBy: [{ retentionExpiresAt: "asc" }, { artifactId: "asc" }],
15793
+ ...args.limit ? { take: args.limit } : {}
15794
+ });
15795
+ if (rows.length === 0) return 0;
15796
+ return (await this.prisma.telemetryArtifact.deleteMany({ where: { artifactId: { in: rows.map((row) => row.artifactId) } } })).count;
15797
+ }
15798
+ parseJson(value) {
15799
+ if (!value) return;
15800
+ return JSON.parse(value);
15801
+ }
15802
+ };
15803
+ PrismaTelemetryArtifactStore = __decorate([
15804
+ injectable(),
15805
+ __decorateParam(0, inject(PrismaDatabaseClientToken)),
15806
+ __decorateParam(1, inject(OtelIdentityFactory)),
15807
+ __decorateMetadata("design:paramtypes", [Object, typeof (_ref$6 = typeof OtelIdentityFactory !== "undefined" && OtelIdentityFactory) === "function" ? _ref$6 : Object])
15808
+ ], PrismaTelemetryArtifactStore);
15809
+
15810
+ //#endregion
15811
+ //#region src/infrastructure/persistence/PrismaTelemetryMetricPointStore.ts
15812
+ var _ref$5;
15813
+ let PrismaTelemetryMetricPointStore = class PrismaTelemetryMetricPointStore$1 {
15814
+ constructor(prisma, otelIdentityFactory) {
15815
+ this.prisma = prisma;
15816
+ this.otelIdentityFactory = otelIdentityFactory;
15817
+ }
15818
+ async save(record) {
15819
+ const metricPointId = this.otelIdentityFactory.createArtifactId();
15820
+ await this.prisma.telemetryMetricPoint.create({ data: {
15821
+ metricPointId,
15822
+ traceId: record.traceId ?? null,
15823
+ spanId: record.spanId ?? null,
15824
+ runId: record.runId ?? null,
15825
+ workflowId: record.workflowId,
15826
+ nodeId: record.nodeId ?? null,
15827
+ activationId: record.activationId ?? null,
15828
+ metricName: record.name,
15829
+ value: record.value,
15830
+ unit: record.unit ?? null,
15831
+ observedAt: record.observedAt,
15832
+ workflowFolder: record.workflowFolder ?? null,
15833
+ nodeType: record.nodeType ?? null,
15834
+ nodeRole: record.nodeRole ?? null,
15835
+ modelName: record.modelName ?? null,
15836
+ dimensionsJson: record.attributes ? JSON.stringify(record.attributes) : null,
15837
+ retentionExpiresAt: record.retentionExpiresAt ?? null
15838
+ } });
15839
+ return {
15840
+ metricPointId,
15841
+ traceId: record.traceId,
15842
+ spanId: record.spanId,
15843
+ runId: record.runId,
15844
+ workflowId: record.workflowId,
15845
+ nodeId: record.nodeId,
15846
+ activationId: record.activationId,
15847
+ metricName: record.name,
15848
+ value: record.value,
15849
+ unit: record.unit,
15850
+ observedAt: record.observedAt,
15851
+ workflowFolder: record.workflowFolder,
15852
+ nodeType: record.nodeType,
15853
+ nodeRole: record.nodeRole,
15854
+ modelName: record.modelName,
15855
+ dimensions: record.attributes,
15856
+ retentionExpiresAt: record.retentionExpiresAt
15857
+ };
15858
+ }
15859
+ async list(args = {}) {
15860
+ return (await this.prisma.telemetryMetricPoint.findMany({
15861
+ where: {
15862
+ ...args.traceId ? { traceId: args.traceId } : {},
15863
+ ...args.runId ? { runId: args.runId } : {},
15864
+ ...args.runIds && args.runIds.length > 0 ? { runId: { in: [...args.runIds] } } : {},
15865
+ ...args.workflowId ? { workflowId: args.workflowId } : {},
15866
+ ...args.workflowIds && args.workflowIds.length > 0 ? { workflowId: { in: [...args.workflowIds] } } : {},
15867
+ ...args.nodeId ? { nodeId: args.nodeId } : {},
15868
+ ...args.metricNames && args.metricNames.length > 0 ? { metricName: { in: [...args.metricNames] } } : {},
15869
+ ...args.modelNames && args.modelNames.length > 0 ? { modelName: { in: [...args.modelNames] } } : {},
15870
+ ...args.observedAtGte ? { observedAt: { gte: args.observedAtGte } } : {},
15871
+ ...args.observedAtLte ? { observedAt: { lte: args.observedAtLte } } : {}
15872
+ },
15873
+ orderBy: [{ observedAt: "asc" }, { metricPointId: "asc" }],
15874
+ ...args.limit ? { take: args.limit } : {}
15875
+ })).map((row) => ({
15876
+ metricPointId: row.metricPointId,
15877
+ traceId: row.traceId ?? void 0,
15878
+ spanId: row.spanId ?? void 0,
15879
+ runId: row.runId ?? void 0,
15880
+ workflowId: row.workflowId,
15881
+ nodeId: row.nodeId ?? void 0,
15882
+ activationId: row.activationId ?? void 0,
15883
+ metricName: row.metricName,
15884
+ value: row.value,
15885
+ unit: row.unit ?? void 0,
15886
+ observedAt: row.observedAt,
15887
+ workflowFolder: row.workflowFolder ?? void 0,
15888
+ nodeType: row.nodeType ?? void 0,
15889
+ nodeRole: row.nodeRole ?? void 0,
15890
+ modelName: row.modelName ?? void 0,
15891
+ dimensions: this.parseJson(row.dimensionsJson),
15892
+ retentionExpiresAt: row.retentionExpiresAt ?? void 0
15893
+ }));
15894
+ }
15895
+ async pruneExpired(args) {
15896
+ const rows = await this.prisma.telemetryMetricPoint.findMany({
15897
+ where: { retentionExpiresAt: { lte: args.nowIso } },
15898
+ select: { metricPointId: true },
15899
+ orderBy: [{ retentionExpiresAt: "asc" }, { metricPointId: "asc" }],
15900
+ ...args.limit ? { take: args.limit } : {}
15901
+ });
15902
+ if (rows.length === 0) return 0;
15903
+ return (await this.prisma.telemetryMetricPoint.deleteMany({ where: { metricPointId: { in: rows.map((row) => row.metricPointId) } } })).count;
15904
+ }
15905
+ parseJson(value) {
15906
+ if (!value) return;
15907
+ return JSON.parse(value);
15908
+ }
15909
+ };
15910
+ PrismaTelemetryMetricPointStore = __decorate([
15911
+ injectable(),
15912
+ __decorateParam(0, inject(PrismaDatabaseClientToken)),
15913
+ __decorateParam(1, inject(OtelIdentityFactory)),
15914
+ __decorateMetadata("design:paramtypes", [Object, typeof (_ref$5 = typeof OtelIdentityFactory !== "undefined" && OtelIdentityFactory) === "function" ? _ref$5 : Object])
15915
+ ], PrismaTelemetryMetricPointStore);
15916
+
15917
+ //#endregion
15918
+ //#region src/infrastructure/persistence/PrismaTelemetrySpanStore.ts
15919
+ let PrismaTelemetrySpanStore = class PrismaTelemetrySpanStore$1 {
15920
+ constructor(prisma) {
15921
+ this.prisma = prisma;
15922
+ }
15923
+ async upsert(record) {
15924
+ const telemetrySpanId = this.createTelemetrySpanId(record.traceId, record.spanId);
15925
+ const existing = await this.prisma.telemetrySpan.findUnique({ where: { telemetrySpanId } });
15926
+ const attributes = this.mergeAttributes(this.parseJson(existing?.attributesJson ?? null), record.attributes);
15927
+ const events = this.mergeEvents(this.parseJson(existing?.eventsJson ?? null), record.events);
15928
+ const data = {
15929
+ traceId: record.traceId,
15930
+ spanId: record.spanId,
15931
+ parentSpanId: record.parentSpanId ?? existing?.parentSpanId ?? null,
15932
+ runId: record.runId,
15933
+ workflowId: record.workflowId,
15934
+ nodeId: record.nodeId ?? existing?.nodeId ?? null,
15935
+ activationId: record.activationId ?? existing?.activationId ?? null,
15936
+ connectionInvocationId: record.connectionInvocationId ?? existing?.connectionInvocationId ?? null,
15937
+ name: record.name ?? existing?.name ?? "codemation.span",
15938
+ kind: record.kind ?? existing?.kind ?? "internal",
15939
+ status: record.status ?? existing?.status ?? null,
15940
+ statusMessage: record.statusMessage ?? existing?.statusMessage ?? null,
15941
+ startTime: record.startTime ?? existing?.startTime ?? null,
15942
+ endTime: record.endTime ?? existing?.endTime ?? null,
15943
+ workflowFolder: record.workflowFolder ?? existing?.workflowFolder ?? null,
15944
+ nodeType: record.nodeType ?? existing?.nodeType ?? null,
15945
+ nodeRole: record.nodeRole ?? existing?.nodeRole ?? null,
15946
+ modelName: record.modelName ?? existing?.modelName ?? null,
15947
+ attributesJson: attributes ? JSON.stringify(attributes) : null,
15948
+ eventsJson: events.length > 0 ? JSON.stringify(events) : null,
15949
+ retentionExpiresAt: record.retentionExpiresAt ?? existing?.retentionExpiresAt ?? null,
15950
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
15951
+ };
15952
+ await this.prisma.telemetrySpan.upsert({
15953
+ where: { telemetrySpanId },
15954
+ create: {
15955
+ telemetrySpanId,
15956
+ ...data
15957
+ },
15958
+ update: data
15959
+ });
15960
+ }
15961
+ async list(args = {}) {
15962
+ return (await this.prisma.telemetrySpan.findMany({
15963
+ where: {
15964
+ ...args.traceId ? { traceId: args.traceId } : {},
15965
+ ...args.runId ? { runId: args.runId } : {},
15966
+ ...args.runIds && args.runIds.length > 0 ? { runId: { in: [...args.runIds] } } : {},
15967
+ ...args.workflowId ? { workflowId: args.workflowId } : {},
15968
+ ...args.workflowIds && args.workflowIds.length > 0 ? { workflowId: { in: [...args.workflowIds] } } : {},
15969
+ ...args.statuses && args.statuses.length > 0 ? { status: { in: [...args.statuses] } } : {},
15970
+ ...args.names && args.names.length > 0 ? { name: { in: [...args.names] } } : {},
15971
+ ...args.modelNames && args.modelNames.length > 0 ? { modelName: { in: [...args.modelNames] } } : {},
15972
+ ...args.startTimeGte ? { startTime: { gte: args.startTimeGte } } : {},
15973
+ ...args.endTimeLte ? { endTime: { lte: args.endTimeLte } } : {}
15974
+ },
15975
+ orderBy: [{ startTime: "asc" }, { spanId: "asc" }],
15976
+ ...args.limit ? { take: args.limit } : {}
15977
+ })).map((row) => ({
15978
+ traceId: row.traceId,
15979
+ spanId: row.spanId,
15980
+ parentSpanId: row.parentSpanId ?? void 0,
15981
+ runId: row.runId,
15982
+ workflowId: row.workflowId,
15983
+ nodeId: row.nodeId ?? void 0,
15984
+ activationId: row.activationId ?? void 0,
15985
+ connectionInvocationId: row.connectionInvocationId ?? void 0,
15986
+ name: row.name,
15987
+ kind: row.kind,
15988
+ status: row.status ? row.status : void 0,
15989
+ statusMessage: row.statusMessage ?? void 0,
15990
+ startTime: row.startTime ?? void 0,
15991
+ endTime: row.endTime ?? void 0,
15992
+ workflowFolder: row.workflowFolder ?? void 0,
15993
+ nodeType: row.nodeType ?? void 0,
15994
+ nodeRole: row.nodeRole ?? void 0,
15995
+ modelName: row.modelName ?? void 0,
15996
+ attributes: this.parseJson(row.attributesJson),
15997
+ events: this.parseJson(row.eventsJson) ?? [],
15998
+ retentionExpiresAt: row.retentionExpiresAt ?? void 0
15999
+ }));
16000
+ }
16001
+ async listByTraceId(traceId) {
16002
+ return await this.list({ traceId });
16003
+ }
16004
+ async pruneExpired(args) {
16005
+ const rows = await this.prisma.telemetrySpan.findMany({
16006
+ where: { retentionExpiresAt: { lte: args.nowIso } },
16007
+ select: { telemetrySpanId: true },
16008
+ orderBy: [{ retentionExpiresAt: "asc" }, { telemetrySpanId: "asc" }],
16009
+ ...args.limit ? { take: args.limit } : {}
16010
+ });
16011
+ if (rows.length === 0) return 0;
16012
+ return (await this.prisma.telemetrySpan.deleteMany({ where: { telemetrySpanId: { in: rows.map((row) => row.telemetrySpanId) } } })).count;
16013
+ }
16014
+ createTelemetrySpanId(traceId, spanId) {
16015
+ return `${traceId}:${spanId}`;
16016
+ }
16017
+ parseJson(value) {
16018
+ if (!value) return;
16019
+ return JSON.parse(value);
16020
+ }
16021
+ mergeAttributes(existing, update) {
16022
+ if (!existing && !update) return;
16023
+ return {
16024
+ ...existing ?? {},
16025
+ ...update ?? {}
16026
+ };
16027
+ }
16028
+ mergeEvents(existing, update) {
16029
+ return [...existing ?? [], ...update ?? []];
16030
+ }
16031
+ };
16032
+ PrismaTelemetrySpanStore = __decorate([
16033
+ injectable(),
16034
+ __decorateParam(0, inject(PrismaDatabaseClientToken)),
16035
+ __decorateMetadata("design:paramtypes", [Object])
16036
+ ], PrismaTelemetrySpanStore);
16037
+
13852
16038
  //#endregion
13853
16039
  //#region src/infrastructure/persistence/PrismaWorkflowActivationRepository.ts
13854
16040
  let PrismaWorkflowActivationRepository = class PrismaWorkflowActivationRepository$1 {
@@ -14221,13 +16407,22 @@ let PrismaWorkflowRunRepository = class PrismaWorkflowRunRepository$1 {
14221
16407
  async listRunsOlderThan(args) {
14222
16408
  const limit = args.limit ?? 100;
14223
16409
  return (await this.prisma.run.findMany({
14224
- where: {
14225
- status: { in: ["completed", "failed"] },
14226
- OR: [{ AND: [{ finishedAt: { not: null } }, { finishedAt: { lt: args.beforeIso } }] }, { AND: [{ finishedAt: null }, { updatedAt: { lt: args.beforeIso } }] }]
16410
+ where: { status: { in: ["completed", "failed"] } },
16411
+ select: {
16412
+ runId: true,
16413
+ workflowId: true,
16414
+ startedAt: true,
16415
+ finishedAt: true,
16416
+ updatedAt: true,
16417
+ policySnapshotJson: true
14227
16418
  },
14228
16419
  orderBy: { updatedAt: "asc" },
14229
- take: limit
14230
- })).map((r) => this.rowToPruneCandidate(r));
16420
+ take: limit * 4
16421
+ })).filter((row) => {
16422
+ const finishedAt = row.finishedAt ?? row.updatedAt;
16423
+ const retentionSeconds = this.parseJson(row.policySnapshotJson)?.retentionSeconds ?? args.defaultRetentionSeconds;
16424
+ return finishedAt < (/* @__PURE__ */ new Date(new Date(args.nowIso).getTime() - retentionSeconds * 1e3)).toISOString();
16425
+ }).slice(0, limit).map((row) => this.rowToPruneCandidate(row));
14231
16426
  }
14232
16427
  instancesToDomain(runId, workflowId, instances) {
14233
16428
  const nodeSnapshotsByNodeId = {};
@@ -14604,7 +16799,7 @@ PrismaWorkflowRunRepository = __decorate([
14604
16799
 
14605
16800
  //#endregion
14606
16801
  //#region src/infrastructure/persistence/WorkflowDefinitionRepositoryAdapter.ts
14607
- var _ref$3;
16802
+ var _ref$4;
14608
16803
  let WorkflowDefinitionRepositoryAdapter = class WorkflowDefinitionRepositoryAdapter$1 {
14609
16804
  constructor(engine, workflowRepository) {
14610
16805
  this.engine = engine;
@@ -14627,7 +16822,7 @@ WorkflowDefinitionRepositoryAdapter = __decorate([
14627
16822
  injectable(),
14628
16823
  __decorateParam(0, inject(Engine)),
14629
16824
  __decorateParam(1, inject(CoreTokens.WorkflowRepository)),
14630
- __decorateMetadata("design:paramtypes", [typeof (_ref$3 = typeof Engine !== "undefined" && Engine) === "function" ? _ref$3 : Object, Object])
16825
+ __decorateMetadata("design:paramtypes", [typeof (_ref$4 = typeof Engine !== "undefined" && Engine) === "function" ? _ref$4 : Object, Object])
14631
16826
  ], WorkflowDefinitionRepositoryAdapter);
14632
16827
 
14633
16828
  //#endregion
@@ -14687,7 +16882,7 @@ var CodemationContainerRegistrationRegistrar = class {
14687
16882
  return;
14688
16883
  }
14689
16884
  if (this.isClassRegistration(registration)) {
14690
- container$1.register(registration.token, { useClass: registration.useClass });
16885
+ container$1.registerSingleton(registration.token, registration.useClass);
14691
16886
  return;
14692
16887
  }
14693
16888
  container$1.register(registration.token, { useFactory: (dependencyContainer) => registration.useFactory(dependencyContainer) });
@@ -14785,6 +16980,141 @@ var LocalFilesystemBinaryStorage = class {
14785
16980
  }
14786
16981
  };
14787
16982
 
16983
+ //#endregion
16984
+ //#region src/application/runs/WorkflowRunRetentionPruneScheduler.ts
16985
+ var _ref$3, _WorkflowRunRetentionPruneScheduler;
16986
+ let WorkflowRunRetentionPruneScheduler = class WorkflowRunRetentionPruneScheduler$1 {
16987
+ static {
16988
+ _WorkflowRunRetentionPruneScheduler = this;
16989
+ }
16990
+ static defaultIntervalMs = 3600 * 1e3;
16991
+ timer;
16992
+ logger;
16993
+ constructor(clock, runs, binaryStorage, telemetrySpanStore, telemetryArtifactStore, telemetryMetricPointStore, appConfig, loggerFactory) {
16994
+ this.clock = clock;
16995
+ this.runs = runs;
16996
+ this.binaryStorage = binaryStorage;
16997
+ this.telemetrySpanStore = telemetrySpanStore;
16998
+ this.telemetryArtifactStore = telemetryArtifactStore;
16999
+ this.telemetryMetricPointStore = telemetryMetricPointStore;
17000
+ this.appConfig = appConfig;
17001
+ this.logger = loggerFactory.create("codemation.runRetentionPrune");
17002
+ }
17003
+ start() {
17004
+ if (this.appConfig.env.CODEMATION_RUN_PRUNE_ENABLED === "false" && this.appConfig.env.CODEMATION_TELEMETRY_PRUNE_ENABLED === "false") return;
17005
+ if (this.timer) return;
17006
+ const intervalMs = Number(this.appConfig.env.CODEMATION_RUN_PRUNE_INTERVAL_MS ?? _WorkflowRunRetentionPruneScheduler.defaultIntervalMs);
17007
+ this.runScheduledTick();
17008
+ this.timer = setInterval(() => {
17009
+ this.runScheduledTick();
17010
+ }, intervalMs);
17011
+ }
17012
+ stop() {
17013
+ if (this.timer) {
17014
+ clearInterval(this.timer);
17015
+ this.timer = void 0;
17016
+ }
17017
+ }
17018
+ /** Exposed for tests; production path is the interval started by {@link start}. */
17019
+ async runOnce() {
17020
+ const defaultRetentionSec = Number(this.appConfig.env.CODEMATION_RUN_RETENTION_DEFAULT_SECONDS ?? 86400);
17021
+ const nowIso = this.clock.now().toISOString();
17022
+ let foundCount = 0;
17023
+ let prunedCount = 0;
17024
+ if (this.appConfig.env.CODEMATION_RUN_PRUNE_ENABLED !== "false") {
17025
+ const candidates = await this.runs.listRunsOlderThan?.({
17026
+ nowIso,
17027
+ defaultRetentionSeconds: defaultRetentionSec,
17028
+ limit: 500
17029
+ }) ?? (await this.runs.listRuns({ limit: 500 })).filter((summary) => summary.status === "completed" || summary.status === "failed");
17030
+ for (const candidate of candidates) {
17031
+ const runId = candidate.runId;
17032
+ const workflowId = candidate.workflowId;
17033
+ foundCount += 1;
17034
+ const storageKeys = await this.runs.listBinaryStorageKeys?.(runId) ?? await this.loadStorageKeysFromRunStateFallback(runId);
17035
+ for (const key of storageKeys) await this.binaryStorage.delete(key);
17036
+ await this.runs.deleteRun(runId);
17037
+ prunedCount += 1;
17038
+ this.logger.debug(`Run retention prune: pruned run ${runId} for workflow ${workflowId}`);
17039
+ }
17040
+ }
17041
+ let prunedSpanCount = 0;
17042
+ let prunedArtifactCount = 0;
17043
+ let prunedMetricCount = 0;
17044
+ if (this.appConfig.env.CODEMATION_TELEMETRY_PRUNE_ENABLED !== "false") {
17045
+ const telemetryLimit = Number(this.appConfig.env.CODEMATION_TELEMETRY_PRUNE_LIMIT ?? 2e3);
17046
+ prunedSpanCount = await this.telemetrySpanStore.pruneExpired({
17047
+ nowIso,
17048
+ limit: telemetryLimit
17049
+ });
17050
+ prunedArtifactCount = await this.telemetryArtifactStore.pruneExpired({
17051
+ nowIso,
17052
+ limit: telemetryLimit
17053
+ });
17054
+ prunedMetricCount = await this.telemetryMetricPointStore.pruneExpired({
17055
+ nowIso,
17056
+ limit: telemetryLimit
17057
+ });
17058
+ }
17059
+ if (foundCount + prunedCount + prunedSpanCount + prunedArtifactCount + prunedMetricCount === 0) return;
17060
+ this.logger.info(`Run retention prune: found ${foundCount} run(s) to prune`);
17061
+ this.logger.info(`Run retention prune: pruned ${prunedCount} run(s)`);
17062
+ this.logger.info(`Run retention prune: pruned ${prunedSpanCount} telemetry span(s)`);
17063
+ this.logger.info(`Run retention prune: pruned ${prunedArtifactCount} telemetry artifact(s)`);
17064
+ this.logger.info(`Run retention prune: pruned ${prunedMetricCount} telemetry metric point(s)`);
17065
+ }
17066
+ async runScheduledTick() {
17067
+ try {
17068
+ await this.runOnce();
17069
+ } catch (error) {
17070
+ this.logger.warn(`Run retention prune tick failed: ${error instanceof Error ? error.message : String(error)}`);
17071
+ }
17072
+ }
17073
+ async loadStorageKeysFromRunStateFallback(runId) {
17074
+ const state = await this.runs.load(runId);
17075
+ if (!state) return [];
17076
+ const keys = /* @__PURE__ */ new Set();
17077
+ this.collectStorageKeysFromValue(state.outputsByNode, keys);
17078
+ this.collectStorageKeysFromValue(state.nodeSnapshotsByNodeId, keys);
17079
+ this.collectStorageKeysFromValue(state.mutableState, keys);
17080
+ return [...keys];
17081
+ }
17082
+ collectStorageKeysFromValue(value, keys) {
17083
+ if (Array.isArray(value)) {
17084
+ for (const entry of value) this.collectStorageKeysFromValue(entry, keys);
17085
+ return;
17086
+ }
17087
+ if (!value || typeof value !== "object") return;
17088
+ const record = value;
17089
+ if (typeof record.id === "string" && typeof record.storageKey === "string" && typeof record.mimeType === "string" && typeof record.size === "number") {
17090
+ if (record.storageKey.length > 0) keys.add(record.storageKey);
17091
+ return;
17092
+ }
17093
+ for (const child of Object.values(record)) this.collectStorageKeysFromValue(child, keys);
17094
+ }
17095
+ };
17096
+ WorkflowRunRetentionPruneScheduler = _WorkflowRunRetentionPruneScheduler = __decorate([
17097
+ injectable(),
17098
+ __decorateParam(0, inject(ApplicationTokens.Clock)),
17099
+ __decorateParam(1, inject(ApplicationTokens.WorkflowRunRepository)),
17100
+ __decorateParam(2, inject(CoreTokens.BinaryStorage)),
17101
+ __decorateParam(3, inject(ApplicationTokens.TelemetrySpanStore)),
17102
+ __decorateParam(4, inject(ApplicationTokens.TelemetryArtifactStore)),
17103
+ __decorateParam(5, inject(ApplicationTokens.TelemetryMetricPointStore)),
17104
+ __decorateParam(6, inject(ApplicationTokens.AppConfig)),
17105
+ __decorateParam(7, inject(ServerLoggerFactory)),
17106
+ __decorateMetadata("design:paramtypes", [
17107
+ Object,
17108
+ Object,
17109
+ Object,
17110
+ Object,
17111
+ Object,
17112
+ Object,
17113
+ Object,
17114
+ typeof (_ref$3 = typeof ServerLoggerFactory !== "undefined" && ServerLoggerFactory) === "function" ? _ref$3 : Object
17115
+ ])
17116
+ ], WorkflowRunRetentionPruneScheduler);
17117
+
14788
17118
  //#endregion
14789
17119
  //#region src/bootstrap/AppContainerLifecycle.ts
14790
17120
  var AppContainerLifecycle = class {
@@ -14795,6 +17125,8 @@ var AppContainerLifecycle = class {
14795
17125
  async stop(args) {
14796
17126
  if (this.container.isRegistered(Engine, true)) await this.container.resolve(Engine).stop();
14797
17127
  if (this.container.isRegistered(WorkflowRunEventWebsocketRelay, true)) await this.container.resolve(WorkflowRunEventWebsocketRelay).stop();
17128
+ if (this.container.isRegistered(RunEventBusTelemetryReporter, true)) await this.container.resolve(RunEventBusTelemetryReporter).stop();
17129
+ if (this.container.isRegistered(WorkflowRunRetentionPruneScheduler, true)) this.container.resolve(WorkflowRunRetentionPruneScheduler).stop();
14798
17130
  if (args?.stopWebsocketServer !== false && this.container.isRegistered(WorkflowWebsocketServer, true)) await this.container.resolve(WorkflowWebsocketServer).stop();
14799
17131
  if (this.ownedPrismaClient) await this.ownedPrismaClient.$disconnect();
14800
17132
  }
@@ -14821,9 +17153,9 @@ DatabaseMigrations = __decorate([
14821
17153
 
14822
17154
  //#endregion
14823
17155
  //#region src/bootstrap/runtime/FrontendRuntime.ts
14824
- var _ref$1, _ref2$1, _ref3$1, _ref4$1, _ref5;
17156
+ var _ref$1, _ref2$1, _ref3$1, _ref4$1, _ref5$1, _ref6$1, _ref7;
14825
17157
  let FrontendRuntime = class FrontendRuntime$1 {
14826
- constructor(appConfig, databaseMigrations, runtimeWorkflowActivationPolicy, workflowActivationRepository, workflowRepository, workflowWebsocketServer, workflowRunEventWebsocketRelay, engine) {
17158
+ constructor(appConfig, databaseMigrations, runtimeWorkflowActivationPolicy, workflowActivationRepository, workflowRepository, workflowWebsocketServer, workflowRunEventWebsocketRelay, runEventBusTelemetryReporter, workflowRunRetentionPruneScheduler, engine) {
14827
17159
  this.appConfig = appConfig;
14828
17160
  this.databaseMigrations = databaseMigrations;
14829
17161
  this.runtimeWorkflowActivationPolicy = runtimeWorkflowActivationPolicy;
@@ -14831,6 +17163,8 @@ let FrontendRuntime = class FrontendRuntime$1 {
14831
17163
  this.workflowRepository = workflowRepository;
14832
17164
  this.workflowWebsocketServer = workflowWebsocketServer;
14833
17165
  this.workflowRunEventWebsocketRelay = workflowRunEventWebsocketRelay;
17166
+ this.runEventBusTelemetryReporter = runEventBusTelemetryReporter;
17167
+ this.workflowRunRetentionPruneScheduler = workflowRunRetentionPruneScheduler;
14834
17168
  this.engine = engine;
14835
17169
  }
14836
17170
  async start(args) {
@@ -14839,6 +17173,8 @@ let FrontendRuntime = class FrontendRuntime$1 {
14839
17173
  if (args?.skipPresentationServers === true) return;
14840
17174
  await this.engine.start([...this.workflowRepository.list()]);
14841
17175
  await this.workflowWebsocketServer.start();
17176
+ await this.runEventBusTelemetryReporter.start();
17177
+ this.workflowRunRetentionPruneScheduler.start();
14842
17178
  await this.workflowRunEventWebsocketRelay.start();
14843
17179
  }
14844
17180
  };
@@ -14851,7 +17187,9 @@ FrontendRuntime = __decorate([
14851
17187
  __decorateParam(4, inject(CoreTokens.WorkflowRepository)),
14852
17188
  __decorateParam(5, inject(WorkflowWebsocketServer)),
14853
17189
  __decorateParam(6, inject(WorkflowRunEventWebsocketRelay)),
14854
- __decorateParam(7, inject(Engine)),
17190
+ __decorateParam(7, inject(RunEventBusTelemetryReporter)),
17191
+ __decorateParam(8, inject(WorkflowRunRetentionPruneScheduler)),
17192
+ __decorateParam(9, inject(Engine)),
14855
17193
  __decorateMetadata("design:paramtypes", [
14856
17194
  Object,
14857
17195
  typeof (_ref$1 = typeof DatabaseMigrations !== "undefined" && DatabaseMigrations) === "function" ? _ref$1 : Object,
@@ -14860,21 +17198,25 @@ FrontendRuntime = __decorate([
14860
17198
  Object,
14861
17199
  typeof (_ref3$1 = typeof WorkflowWebsocketServer !== "undefined" && WorkflowWebsocketServer) === "function" ? _ref3$1 : Object,
14862
17200
  typeof (_ref4$1 = typeof WorkflowRunEventWebsocketRelay !== "undefined" && WorkflowRunEventWebsocketRelay) === "function" ? _ref4$1 : Object,
14863
- typeof (_ref5 = typeof Engine !== "undefined" && Engine) === "function" ? _ref5 : Object
17201
+ typeof (_ref5$1 = typeof RunEventBusTelemetryReporter !== "undefined" && RunEventBusTelemetryReporter) === "function" ? _ref5$1 : Object,
17202
+ typeof (_ref6$1 = typeof WorkflowRunRetentionPruneScheduler !== "undefined" && WorkflowRunRetentionPruneScheduler) === "function" ? _ref6$1 : Object,
17203
+ typeof (_ref7 = typeof Engine !== "undefined" && Engine) === "function" ? _ref7 : Object
14864
17204
  ])
14865
17205
  ], FrontendRuntime);
14866
17206
 
14867
17207
  //#endregion
14868
17208
  //#region src/bootstrap/runtime/WorkerRuntime.ts
14869
- var _ref, _ref2, _ref3, _ref4;
17209
+ var _ref, _ref2, _ref3, _ref4, _ref5, _ref6;
14870
17210
  let WorkerRuntime = class WorkerRuntime$1 {
14871
- constructor(appConfig, databaseMigrations, runtimeWorkflowActivationPolicy, workflowActivationRepository, workflowRepository, engine, scheduler, lifecycle) {
17211
+ constructor(appConfig, databaseMigrations, runtimeWorkflowActivationPolicy, workflowActivationRepository, workflowRepository, engine, runEventBusTelemetryReporter, workflowRunRetentionPruneScheduler, scheduler, lifecycle) {
14872
17212
  this.appConfig = appConfig;
14873
17213
  this.databaseMigrations = databaseMigrations;
14874
17214
  this.runtimeWorkflowActivationPolicy = runtimeWorkflowActivationPolicy;
14875
17215
  this.workflowActivationRepository = workflowActivationRepository;
14876
17216
  this.workflowRepository = workflowRepository;
14877
17217
  this.engine = engine;
17218
+ this.runEventBusTelemetryReporter = runEventBusTelemetryReporter;
17219
+ this.workflowRunRetentionPruneScheduler = workflowRunRetentionPruneScheduler;
14878
17220
  this.scheduler = scheduler;
14879
17221
  this.lifecycle = lifecycle;
14880
17222
  }
@@ -14883,6 +17225,8 @@ let WorkerRuntime = class WorkerRuntime$1 {
14883
17225
  await this.runtimeWorkflowActivationPolicy.hydrateFromRepository(this.workflowActivationRepository);
14884
17226
  const workflows = [...this.workflowRepository.list()];
14885
17227
  await this.engine.start(workflows);
17228
+ await this.runEventBusTelemetryReporter.start();
17229
+ this.workflowRunRetentionPruneScheduler.start();
14886
17230
  const worker = this.scheduler.createWorker({
14887
17231
  queues,
14888
17232
  requestHandler: this.engine
@@ -14902,8 +17246,10 @@ WorkerRuntime = __decorate([
14902
17246
  __decorateParam(3, inject(ApplicationTokens.WorkflowActivationRepository)),
14903
17247
  __decorateParam(4, inject(CoreTokens.WorkflowRepository)),
14904
17248
  __decorateParam(5, inject(Engine)),
14905
- __decorateParam(6, inject(ApplicationTokens.WorkerRuntimeScheduler)),
14906
- __decorateParam(7, inject(AppContainerLifecycle)),
17249
+ __decorateParam(6, inject(RunEventBusTelemetryReporter)),
17250
+ __decorateParam(7, inject(WorkflowRunRetentionPruneScheduler)),
17251
+ __decorateParam(8, inject(ApplicationTokens.WorkerRuntimeScheduler)),
17252
+ __decorateParam(9, inject(AppContainerLifecycle)),
14907
17253
  __decorateMetadata("design:paramtypes", [
14908
17254
  Object,
14909
17255
  typeof (_ref = typeof DatabaseMigrations !== "undefined" && DatabaseMigrations) === "function" ? _ref : Object,
@@ -14911,8 +17257,10 @@ WorkerRuntime = __decorate([
14911
17257
  Object,
14912
17258
  Object,
14913
17259
  typeof (_ref3 = typeof Engine !== "undefined" && Engine) === "function" ? _ref3 : Object,
17260
+ typeof (_ref4 = typeof RunEventBusTelemetryReporter !== "undefined" && RunEventBusTelemetryReporter) === "function" ? _ref4 : Object,
17261
+ typeof (_ref5 = typeof WorkflowRunRetentionPruneScheduler !== "undefined" && WorkflowRunRetentionPruneScheduler) === "function" ? _ref5 : Object,
14914
17262
  Object,
14915
- typeof (_ref4 = typeof AppContainerLifecycle !== "undefined" && AppContainerLifecycle) === "function" ? _ref4 : Object
17263
+ typeof (_ref6 = typeof AppContainerLifecycle !== "undefined" && AppContainerLifecycle) === "function" ? _ref6 : Object
14916
17264
  ])
14917
17265
  ], WorkerRuntime);
14918
17266
 
@@ -15045,6 +17393,11 @@ var AppContainerFactory = class AppContainerFactory {
15045
17393
  ListUserAccountsQueryHandler,
15046
17394
  VerifyUserInviteQueryHandler,
15047
17395
  GetRunBinaryAttachmentQueryHandler,
17396
+ GetTelemetryDashboardDimensionsQueryHandler,
17397
+ GetTelemetryDashboardRunsQueryHandler,
17398
+ GetTelemetryRunTraceQueryHandler,
17399
+ GetTelemetryDashboardSummaryQueryHandler,
17400
+ GetTelemetryDashboardTimeseriesQueryHandler,
15048
17401
  GetRunStateQueryHandler,
15049
17402
  GetWorkflowRunDetailQueryHandler,
15050
17403
  GetWorkflowDebuggerOverlayQueryHandler,
@@ -15082,6 +17435,7 @@ var AppContainerFactory = class AppContainerFactory {
15082
17435
  DevHonoApiRouteRegistrar,
15083
17436
  OAuth2HonoApiRouteRegistrar,
15084
17437
  RunHonoApiRouteRegistrar,
17438
+ TelemetryHonoApiRouteRegistrar,
15085
17439
  UserHonoApiRouteRegistrar,
15086
17440
  WebhookHonoApiRouteRegistrar,
15087
17441
  WhitelabelHonoApiRouteRegistrar,
@@ -15126,8 +17480,8 @@ var AppContainerFactory = class AppContainerFactory {
15126
17480
  });
15127
17481
  }
15128
17482
  registerCredentialTypes(container$1, credentialTypes) {
15129
- const registry$1 = container$1.resolve(CredentialTypeRegistryImpl);
15130
- for (const credentialType of credentialTypes) registry$1.register(credentialType);
17483
+ const registry = container$1.resolve(CredentialTypeRegistryImpl);
17484
+ for (const credentialType of credentialTypes) registry.register(credentialType);
15131
17485
  }
15132
17486
  registerConfiguredRegistrations(container$1, appConfig) {
15133
17487
  if (appConfig.containerRegistrations.length === 0) return;
@@ -15145,7 +17499,7 @@ var AppContainerFactory = class AppContainerFactory {
15145
17499
  container$1.registerInstance(CoreTokens.PersistedWorkflowTokenRegistry, container$1.resolve(PersistedWorkflowTokenRegistry));
15146
17500
  container$1.register(CredentialTypeRegistryImpl, { useFactory: instanceCachingFactory(() => new CredentialTypeRegistryImpl()) });
15147
17501
  container$1.register(CoreTokens.CredentialTypeRegistry, { useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(CredentialTypeRegistryImpl)) });
15148
- container$1.register(CodemationIdFactory, { useClass: CodemationIdFactory });
17502
+ container$1.registerSingleton(CodemationIdFactory, CodemationIdFactory);
15149
17503
  container$1.register(CoreTokens.RunIdFactory, { useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(CodemationIdFactory)) });
15150
17504
  container$1.register(CoreTokens.ActivationIdFactory, { useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(CodemationIdFactory)) });
15151
17505
  container$1.register(CoreTokens.LiveWorkflowRepository, { useFactory: instanceCachingFactory(() => new LiveWorkflowRepository(new AIAgentConnectionWorkflowExpander(new ConnectionCredentialNodeConfigFactory()))) });
@@ -15156,6 +17510,7 @@ var AppContainerFactory = class AppContainerFactory {
15156
17510
  container$1.registerInstance(CoreTokens.WorkflowActivationPolicy, runtimeWorkflowActivationPolicy);
15157
17511
  new EngineRuntimeRegistrar().register(container$1, {
15158
17512
  resolveEngineExecutionLimits: () => inputs.appConfig.engineExecutionLimits,
17513
+ workflowPolicyRuntimeDefaults: this.createWorkflowPolicyRuntimeDefaults(inputs.appConfig),
15159
17514
  webhookTriggerMatcherProvider: { createMatcher: (dependencyContainer) => {
15160
17515
  const webhookRoutingLogger = dependencyContainer.resolve(ServerLoggerFactory).create("codemation.webhooks.routing");
15161
17516
  return new WorkflowRepositoryWebhookTriggerMatcher(dependencyContainer.resolve(CoreTokens.WorkflowRepository), dependencyContainer.resolve(CoreTokens.WorkflowActivationPolicy), {
@@ -15172,46 +17527,46 @@ var AppContainerFactory = class AppContainerFactory {
15172
17527
  } }
15173
17528
  });
15174
17529
  container$1.registerInstance(LogLevelPolicyFactory, logLevelPolicyFactory);
15175
- container$1.register(ServerLoggerFactory, { useClass: ServerLoggerFactory });
17530
+ container$1.registerSingleton(ServerLoggerFactory, ServerLoggerFactory);
15176
17531
  container$1.register(ApplicationTokens.LoggerFactory, { useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(ServerLoggerFactory)) });
15177
17532
  container$1.register(ApplicationTokens.PerformanceDiagnosticsLogger, { useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(ServerLoggerFactory).createPerformanceDiagnostics("codemation.performance")) });
15178
17533
  container$1.register(WorkflowWebsocketServer, { useFactory: instanceCachingFactory((dependencyContainer) => {
15179
17534
  if (inputs.sharedWorkflowWebsocketServer) return inputs.sharedWorkflowWebsocketServer;
15180
17535
  return new WorkflowWebsocketServer(dependencyContainer.resolve(ApplicationTokens.WebSocketPort), dependencyContainer.resolve(ApplicationTokens.WebSocketBindHost), dependencyContainer.resolve(ServerLoggerFactory).create("codemation-websocket.server"));
15181
17536
  }) });
15182
- container$1.register(PrismaClientFactory, { useClass: PrismaClientFactory });
15183
- container$1.register(WorkflowPolicyUiPresentationFactory, { useClass: WorkflowPolicyUiPresentationFactory });
15184
- container$1.register(WorkflowDefinitionMapper, { useClass: WorkflowDefinitionMapper });
15185
- container$1.register(RequestToWebhookItemMapper, { useClass: RequestToWebhookItemMapper });
15186
- container$1.register(WebhookEndpointPathValidator, { useClass: WebhookEndpointPathValidator });
15187
- container$1.register(CredentialSecretCipher, { useClass: CredentialSecretCipher });
15188
- container$1.register(CredentialMaterialResolver, { useClass: CredentialMaterialResolver });
15189
- container$1.register(CredentialFieldEnvOverlayService, { useClass: CredentialFieldEnvOverlayService });
15190
- container$1.register(CredentialRuntimeMaterialService, { useClass: CredentialRuntimeMaterialService });
15191
- container$1.register(WorkflowCredentialNodeResolver, { useClass: WorkflowCredentialNodeResolver });
15192
- container$1.register(CredentialInstanceService, { useClass: CredentialInstanceService });
15193
- container$1.register(CredentialBindingService, { useClass: CredentialBindingService });
15194
- container$1.register(WorkflowActivationPreflightRules, { useClass: WorkflowActivationPreflightRules });
15195
- container$1.register(WorkflowActivationPreflight, { useClass: WorkflowActivationPreflight });
15196
- container$1.register(CredentialTestService, { useClass: CredentialTestService });
15197
- container$1.register(CredentialSessionServiceImpl, { useClass: CredentialSessionServiceImpl });
17537
+ container$1.registerSingleton(PrismaClientFactory, PrismaClientFactory);
17538
+ container$1.registerSingleton(WorkflowPolicyUiPresentationFactory, WorkflowPolicyUiPresentationFactory);
17539
+ container$1.registerSingleton(WorkflowDefinitionMapper, WorkflowDefinitionMapper);
17540
+ container$1.registerSingleton(RequestToWebhookItemMapper, RequestToWebhookItemMapper);
17541
+ container$1.registerSingleton(WebhookEndpointPathValidator, WebhookEndpointPathValidator);
17542
+ container$1.registerSingleton(CredentialSecretCipher, CredentialSecretCipher);
17543
+ container$1.registerSingleton(CredentialMaterialResolver, CredentialMaterialResolver);
17544
+ container$1.registerSingleton(CredentialFieldEnvOverlayService, CredentialFieldEnvOverlayService);
17545
+ container$1.registerSingleton(CredentialRuntimeMaterialService, CredentialRuntimeMaterialService);
17546
+ container$1.registerSingleton(WorkflowCredentialNodeResolver, WorkflowCredentialNodeResolver);
17547
+ container$1.registerSingleton(CredentialInstanceService, CredentialInstanceService);
17548
+ container$1.registerSingleton(CredentialBindingService, CredentialBindingService);
17549
+ container$1.registerSingleton(WorkflowActivationPreflightRules, WorkflowActivationPreflightRules);
17550
+ container$1.registerSingleton(WorkflowActivationPreflight, WorkflowActivationPreflight);
17551
+ container$1.registerSingleton(CredentialTestService, CredentialTestService);
17552
+ container$1.registerSingleton(CredentialSessionServiceImpl, CredentialSessionServiceImpl);
15198
17553
  if (!inputs.appConfig.hasConfiguredCredentialSessionServiceRegistration) container$1.register(CoreTokens.CredentialSessionService, { useToken: CredentialSessionServiceImpl });
15199
- container$1.register(OAuth2ProviderRegistry, { useClass: OAuth2ProviderRegistry });
15200
- container$1.register(OAuth2ConnectService, { useClass: OAuth2ConnectService });
15201
- container$1.register(CodemationFrontendAuthSnapshotFactory, { useClass: CodemationFrontendAuthSnapshotFactory });
15202
- container$1.register(FrontendAppConfigFactory, { useClass: FrontendAppConfigFactory });
15203
- container$1.register(PublicFrontendBootstrapFactory, { useClass: PublicFrontendBootstrapFactory });
15204
- container$1.register(InternalAuthBootstrapFactory, { useClass: InternalAuthBootstrapFactory });
15205
- container$1.register(DatabaseMigrations, { useClass: DatabaseMigrations });
15206
- container$1.register(FrontendRuntime, { useClass: FrontendRuntime });
15207
- container$1.register(WorkerRuntime, { useClass: WorkerRuntime });
15208
- container$1.register(DevelopmentSessionBypassVerifier, { useClass: DevelopmentSessionBypassVerifier });
15209
- container$1.register(SecureRequestDetector, { useClass: SecureRequestDetector });
15210
- container$1.register(InAppCallbackUrlPolicy, { useClass: InAppCallbackUrlPolicy });
15211
- container$1.register(AuthSessionCookieFactory, { useClass: AuthSessionCookieFactory });
15212
- container$1.register(CodemationBetterAuthBcryptPasswordCodec, { useClass: CodemationBetterAuthBcryptPasswordCodec });
15213
- container$1.register(CodemationBetterAuthDatabaseOptionsFactory, { useClass: CodemationBetterAuthDatabaseOptionsFactory });
15214
- container$1.register(UserAccountSessionPolicy, { useClass: UserAccountSessionPolicy });
17554
+ container$1.registerSingleton(OAuth2ProviderRegistry, OAuth2ProviderRegistry);
17555
+ container$1.registerSingleton(OAuth2ConnectService, OAuth2ConnectService);
17556
+ container$1.registerSingleton(CodemationFrontendAuthSnapshotFactory, CodemationFrontendAuthSnapshotFactory);
17557
+ container$1.registerSingleton(FrontendAppConfigFactory, FrontendAppConfigFactory);
17558
+ container$1.registerSingleton(PublicFrontendBootstrapFactory, PublicFrontendBootstrapFactory);
17559
+ container$1.registerSingleton(InternalAuthBootstrapFactory, InternalAuthBootstrapFactory);
17560
+ container$1.registerSingleton(DatabaseMigrations, DatabaseMigrations);
17561
+ container$1.registerSingleton(FrontendRuntime, FrontendRuntime);
17562
+ container$1.registerSingleton(WorkerRuntime, WorkerRuntime);
17563
+ container$1.registerSingleton(DevelopmentSessionBypassVerifier, DevelopmentSessionBypassVerifier);
17564
+ container$1.registerSingleton(SecureRequestDetector, SecureRequestDetector);
17565
+ container$1.registerSingleton(InAppCallbackUrlPolicy, InAppCallbackUrlPolicy);
17566
+ container$1.registerSingleton(AuthSessionCookieFactory, AuthSessionCookieFactory);
17567
+ container$1.registerSingleton(CodemationBetterAuthBcryptPasswordCodec, CodemationBetterAuthBcryptPasswordCodec);
17568
+ container$1.registerSingleton(CodemationBetterAuthDatabaseOptionsFactory, CodemationBetterAuthDatabaseOptionsFactory);
17569
+ container$1.registerSingleton(UserAccountSessionPolicy, UserAccountSessionPolicy);
15215
17570
  container$1.register(CodemationBetterAuthBaseUrlPolicy, { useFactory: instanceCachingFactory((dependencyContainer) => new CodemationBetterAuthBaseUrlPolicy(dependencyContainer.resolve(ServerLoggerFactory).create("codemation.auth.better-auth.base-url"))) });
15216
17571
  container$1.register(CodemationBetterAuthServerFactory, { useFactory: instanceCachingFactory((dependencyContainer) => new CodemationBetterAuthServerFactory(dependencyContainer.resolve(ApplicationTokens.AppConfig), dependencyContainer.resolve(CodemationBetterAuthDatabaseOptionsFactory), dependencyContainer.resolve(CodemationBetterAuthBcryptPasswordCodec), dependencyContainer.resolve(UserAccountSessionPolicy), dependencyContainer.resolve(CodemationBetterAuthBaseUrlPolicy))) });
15217
17572
  container$1.register(CodemationBetterAuthRuntime, { useFactory: instanceCachingFactory((dependencyContainer) => {
@@ -15225,7 +17580,7 @@ var AppContainerFactory = class AppContainerFactory {
15225
17580
  const policy = dependencyContainer.resolve(UserAccountSessionPolicy);
15226
17581
  return new BetterAuthApiSessionVerifier(runtime, prismaClient ? new PrismaUserAccountSessionEligibilityChecker(prismaClient, policy) : void 0);
15227
17582
  }) });
15228
- container$1.register(CodemationSessionVerifier, { useClass: CodemationSessionVerifier });
17583
+ container$1.registerSingleton(CodemationSessionVerifier, CodemationSessionVerifier);
15229
17584
  container$1.register(ApplicationTokens.SessionVerifier, { useFactory: instanceCachingFactory((dependencyContainer) => {
15230
17585
  const appConfig = dependencyContainer.resolve(ApplicationTokens.AppConfig);
15231
17586
  const isPackagedDevRuntime = Boolean(appConfig.env.CODEMATION_RUNTIME_DEV_URL?.trim());
@@ -15244,40 +17599,59 @@ var AppContainerFactory = class AppContainerFactory {
15244
17599
  }) });
15245
17600
  }
15246
17601
  registerRepositoriesAndBuses(container$1) {
15247
- container$1.register(WorkflowDefinitionRepositoryAdapter, { useClass: WorkflowDefinitionRepositoryAdapter });
15248
- container$1.register(InMemoryWorkflowRunRepository, { useClass: InMemoryWorkflowRunRepository });
15249
- container$1.register(InMemoryTriggerSetupStateRepository, { useClass: InMemoryTriggerSetupStateRepository });
15250
- container$1.register(InMemoryCredentialStore, { useClass: InMemoryCredentialStore });
15251
- container$1.register(WorkflowRunRepository, { useClass: WorkflowRunRepository });
15252
- container$1.register(InMemoryWorkflowDebuggerOverlayRepository, { useClass: InMemoryWorkflowDebuggerOverlayRepository });
15253
- container$1.register(PrismaTriggerSetupStateRepository, { useClass: PrismaTriggerSetupStateRepository });
15254
- container$1.register(PrismaWorkflowDebuggerOverlayRepository, { useClass: PrismaWorkflowDebuggerOverlayRepository });
15255
- container$1.register(PrismaWorkflowActivationRepository, { useClass: PrismaWorkflowActivationRepository });
15256
- container$1.register(InMemoryWorkflowActivationRepository, { useClass: InMemoryWorkflowActivationRepository });
15257
- container$1.register(PrismaCredentialStore, { useClass: PrismaCredentialStore });
17602
+ container$1.registerSingleton(OtelIdentityFactory, OtelIdentityFactory);
17603
+ container$1.registerSingleton(TelemetryPrivacyPolicy, TelemetryPrivacyPolicy);
17604
+ container$1.registerSingleton(TelemetryEnricherChain, TelemetryEnricherChain);
17605
+ container$1.registerSingleton(TelemetryRetentionTimestampFactory, TelemetryRetentionTimestampFactory);
17606
+ container$1.registerSingleton(TelemetryQueryService, TelemetryQueryService);
17607
+ container$1.registerSingleton(NoOpTelemetryExporter, NoOpTelemetryExporter);
17608
+ container$1.register(CompositeTelemetryExporter, { useFactory: instanceCachingFactory((dependencyContainer) => new CompositeTelemetryExporter([dependencyContainer.resolve(NoOpTelemetryExporter)])) });
17609
+ container$1.registerSingleton(OtelExecutionTelemetryFactory, OtelExecutionTelemetryFactory);
17610
+ container$1.registerSingleton(InMemoryRunTraceContextRepository, InMemoryRunTraceContextRepository);
17611
+ container$1.registerSingleton(InMemoryTelemetrySpanStore, InMemoryTelemetrySpanStore);
17612
+ container$1.registerSingleton(InMemoryTelemetryArtifactStore, InMemoryTelemetryArtifactStore);
17613
+ container$1.registerSingleton(InMemoryTelemetryMetricPointStore, InMemoryTelemetryMetricPointStore);
17614
+ container$1.registerSingleton(PrismaRunTraceContextRepository, PrismaRunTraceContextRepository);
17615
+ container$1.registerSingleton(PrismaTelemetrySpanStore, PrismaTelemetrySpanStore);
17616
+ container$1.registerSingleton(PrismaTelemetryArtifactStore, PrismaTelemetryArtifactStore);
17617
+ container$1.registerSingleton(PrismaTelemetryMetricPointStore, PrismaTelemetryMetricPointStore);
17618
+ container$1.registerSingleton(WorkflowDefinitionRepositoryAdapter, WorkflowDefinitionRepositoryAdapter);
17619
+ container$1.registerSingleton(InMemoryWorkflowRunRepository, InMemoryWorkflowRunRepository);
17620
+ container$1.registerSingleton(InMemoryTriggerSetupStateRepository, InMemoryTriggerSetupStateRepository);
17621
+ container$1.registerSingleton(InMemoryCredentialStore, InMemoryCredentialStore);
17622
+ container$1.registerSingleton(WorkflowRunRepository, WorkflowRunRepository);
17623
+ container$1.registerSingleton(InMemoryWorkflowDebuggerOverlayRepository, InMemoryWorkflowDebuggerOverlayRepository);
17624
+ container$1.registerSingleton(PrismaTriggerSetupStateRepository, PrismaTriggerSetupStateRepository);
17625
+ container$1.registerSingleton(PrismaWorkflowDebuggerOverlayRepository, PrismaWorkflowDebuggerOverlayRepository);
17626
+ container$1.registerSingleton(PrismaWorkflowActivationRepository, PrismaWorkflowActivationRepository);
17627
+ container$1.registerSingleton(InMemoryWorkflowActivationRepository, InMemoryWorkflowActivationRepository);
17628
+ container$1.registerSingleton(PrismaCredentialStore, PrismaCredentialStore);
15258
17629
  container$1.register(ApplicationTokens.WorkflowDefinitionRepository, { useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(WorkflowDefinitionRepositoryAdapter)) });
15259
- container$1.register(InMemoryQueryBus, { useClass: InMemoryQueryBus });
15260
- container$1.register(InMemoryCommandBus, { useClass: InMemoryCommandBus });
15261
- container$1.register(InMemoryDomainEventBus, { useClass: InMemoryDomainEventBus });
15262
- for (const handler of AppContainerFactory.queryHandlers) container$1.register(ApplicationTokens.QueryHandler, { useClass: handler });
15263
- for (const handler of AppContainerFactory.commandHandlers) container$1.register(ApplicationTokens.CommandHandler, { useClass: handler });
17630
+ container$1.registerSingleton(InMemoryQueryBus, InMemoryQueryBus);
17631
+ container$1.registerSingleton(InMemoryCommandBus, InMemoryCommandBus);
17632
+ container$1.registerSingleton(InMemoryDomainEventBus, InMemoryDomainEventBus);
17633
+ for (const handler of AppContainerFactory.queryHandlers) container$1.registerSingleton(ApplicationTokens.QueryHandler, handler);
17634
+ for (const handler of AppContainerFactory.commandHandlers) container$1.registerSingleton(ApplicationTokens.CommandHandler, handler);
15264
17635
  container$1.register(ApplicationTokens.QueryBus, { useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(InMemoryQueryBus)) });
15265
17636
  container$1.register(ApplicationTokens.CommandBus, { useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(InMemoryCommandBus)) });
15266
17637
  container$1.register(ApplicationTokens.DomainEventBus, { useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(InMemoryDomainEventBus)) });
17638
+ container$1.register(ApplicationTokens.TelemetryExporter, { useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(CompositeTelemetryExporter)) });
15267
17639
  }
15268
17640
  registerApplicationServicesAndRoutes(container$1) {
15269
- container$1.register(DevBootstrapSummaryAssembler, { useClass: DevBootstrapSummaryAssembler });
15270
- container$1.register(DevBootstrapSummaryHttpRouteHandler, { useClass: DevBootstrapSummaryHttpRouteHandler });
15271
- container$1.register(AuthHttpRouteHandler, { useClass: AuthHttpRouteHandler });
15272
- container$1.register(PublicFrontendBootstrapHttpRouteHandler, { useClass: PublicFrontendBootstrapHttpRouteHandler });
15273
- container$1.register(InternalAuthBootstrapHttpRouteHandler, { useClass: InternalAuthBootstrapHttpRouteHandler });
15274
- container$1.register(WhitelabelLogoHttpRouteHandler, { useClass: WhitelabelLogoHttpRouteHandler });
15275
- for (const registrar of AppContainerFactory.honoRouteRegistrars) container$1.register(ApplicationTokens.HonoApiRouteRegistrar, { useClass: registrar });
15276
- container$1.register(CodemationHonoApiApp, { useClass: CodemationHonoApiApp });
17641
+ container$1.registerSingleton(DevBootstrapSummaryAssembler, DevBootstrapSummaryAssembler);
17642
+ container$1.registerSingleton(DevBootstrapSummaryHttpRouteHandler, DevBootstrapSummaryHttpRouteHandler);
17643
+ container$1.registerSingleton(AuthHttpRouteHandler, AuthHttpRouteHandler);
17644
+ container$1.registerSingleton(PublicFrontendBootstrapHttpRouteHandler, PublicFrontendBootstrapHttpRouteHandler);
17645
+ container$1.registerSingleton(InternalAuthBootstrapHttpRouteHandler, InternalAuthBootstrapHttpRouteHandler);
17646
+ container$1.registerSingleton(WhitelabelLogoHttpRouteHandler, WhitelabelLogoHttpRouteHandler);
17647
+ for (const registrar of AppContainerFactory.honoRouteRegistrars) container$1.registerSingleton(ApplicationTokens.HonoApiRouteRegistrar, registrar);
17648
+ container$1.registerSingleton(CodemationHonoApiApp, CodemationHonoApiApp);
15277
17649
  }
15278
17650
  registerOperationalInfrastructure(container$1) {
15279
17651
  container$1.register(ApplicationTokens.WorkflowWebsocketPublisher, { useFactory: instanceCachingFactory((dependencyContainer) => dependencyContainer.resolve(WorkflowWebsocketServer)) });
15280
- container$1.register(WorkflowRunEventWebsocketRelay, { useClass: WorkflowRunEventWebsocketRelay });
17652
+ container$1.registerSingleton(WorkflowRunEventWebsocketRelay, WorkflowRunEventWebsocketRelay);
17653
+ container$1.registerSingleton(RunEventBusTelemetryReporter, RunEventBusTelemetryReporter);
17654
+ container$1.registerSingleton(WorkflowRunRetentionPruneScheduler, WorkflowRunRetentionPruneScheduler);
15281
17655
  }
15282
17656
  async registerRuntimeInfrastructure(container$1, appConfig) {
15283
17657
  const queuePrefix = appConfig.scheduler.queuePrefix ?? appConfig.eventing.queuePrefix ?? "codemation";
@@ -15286,7 +17660,6 @@ var AppContainerFactory = class AppContainerFactory {
15286
17660
  const binaryStorage = this.createBinaryStorage(appConfig.repoRoot);
15287
17661
  container$1.registerInstance(CoreTokens.RunDataFactory, new InMemoryRunDataFactory());
15288
17662
  container$1.registerInstance(CoreTokens.BinaryStorage, binaryStorage);
15289
- container$1.registerInstance(CoreTokens.ExecutionContextFactory, new DefaultExecutionContextFactory(binaryStorage));
15290
17663
  container$1.registerInstance(ApplicationTokens.Clock, new SystemClock());
15291
17664
  if (appConfig.persistence.kind === "none") {
15292
17665
  const workflowRunRepository$1 = container$1.resolve(InMemoryWorkflowRunRepository);
@@ -15296,6 +17669,11 @@ var AppContainerFactory = class AppContainerFactory {
15296
17669
  container$1.registerInstance(ApplicationTokens.WorkflowDebuggerOverlayRepository, container$1.resolve(InMemoryWorkflowDebuggerOverlayRepository));
15297
17670
  container$1.registerInstance(ApplicationTokens.WorkflowActivationRepository, container$1.resolve(InMemoryWorkflowActivationRepository));
15298
17671
  container$1.registerInstance(ApplicationTokens.CredentialStore, container$1.resolve(InMemoryCredentialStore));
17672
+ container$1.registerInstance(ApplicationTokens.RunTraceContextRepository, container$1.resolve(InMemoryRunTraceContextRepository));
17673
+ container$1.registerInstance(ApplicationTokens.TelemetrySpanStore, container$1.resolve(InMemoryTelemetrySpanStore));
17674
+ container$1.registerInstance(ApplicationTokens.TelemetryArtifactStore, container$1.resolve(InMemoryTelemetryArtifactStore));
17675
+ container$1.registerInstance(ApplicationTokens.TelemetryMetricPointStore, container$1.resolve(InMemoryTelemetryMetricPointStore));
17676
+ container$1.registerInstance(CoreTokens.ExecutionContextFactory, new DefaultExecutionContextFactory(binaryStorage, new LazyExecutionTelemetryFactory(() => container$1.resolve(OtelExecutionTelemetryFactory)), new CatalogBackedCostTrackingTelemetryFactory(new StaticCostCatalog(FrameworkCostCatalogEntries))));
15299
17677
  this.registerRuntimeNodeActivationScheduler(container$1);
15300
17678
  return { ownedPrismaClient: null };
15301
17679
  }
@@ -15305,6 +17683,10 @@ var AppContainerFactory = class AppContainerFactory {
15305
17683
  const workflowRunRepository = childContainer.resolve(PrismaWorkflowRunRepository);
15306
17684
  const triggerSetupStateRepository = childContainer.resolve(PrismaTriggerSetupStateRepository);
15307
17685
  const workflowDebuggerOverlayRepository = childContainer.resolve(PrismaWorkflowDebuggerOverlayRepository);
17686
+ const runTraceContextRepository = childContainer.resolve(PrismaRunTraceContextRepository);
17687
+ const telemetrySpanStore = childContainer.resolve(PrismaTelemetrySpanStore);
17688
+ const telemetryArtifactStore = childContainer.resolve(PrismaTelemetryArtifactStore);
17689
+ const telemetryMetricPointStore = childContainer.resolve(PrismaTelemetryMetricPointStore);
15308
17690
  container$1.registerInstance(PrismaDatabaseClientToken, prismaOwnership.prismaClient);
15309
17691
  container$1.registerInstance(ApplicationTokens.PrismaClient, prismaOwnership.prismaClient);
15310
17692
  container$1.registerInstance(CoreTokens.WorkflowExecutionRepository, new EventPublishingWorkflowExecutionRepository(workflowRunRepository, eventBus));
@@ -15313,6 +17695,11 @@ var AppContainerFactory = class AppContainerFactory {
15313
17695
  container$1.registerInstance(ApplicationTokens.WorkflowDebuggerOverlayRepository, workflowDebuggerOverlayRepository);
15314
17696
  container$1.registerInstance(ApplicationTokens.WorkflowActivationRepository, container$1.resolve(PrismaWorkflowActivationRepository));
15315
17697
  container$1.registerInstance(ApplicationTokens.CredentialStore, container$1.resolve(PrismaCredentialStore));
17698
+ container$1.registerInstance(ApplicationTokens.RunTraceContextRepository, runTraceContextRepository);
17699
+ container$1.registerInstance(ApplicationTokens.TelemetrySpanStore, telemetrySpanStore);
17700
+ container$1.registerInstance(ApplicationTokens.TelemetryArtifactStore, telemetryArtifactStore);
17701
+ container$1.registerInstance(ApplicationTokens.TelemetryMetricPointStore, telemetryMetricPointStore);
17702
+ container$1.registerInstance(CoreTokens.ExecutionContextFactory, new DefaultExecutionContextFactory(binaryStorage, new LazyExecutionTelemetryFactory(() => container$1.resolve(OtelExecutionTelemetryFactory)), new CatalogBackedCostTrackingTelemetryFactory(new StaticCostCatalog(FrameworkCostCatalogEntries))));
15316
17703
  if (appConfig.scheduler.kind === "bullmq") container$1.registerInstance(ApplicationTokens.WorkerRuntimeScheduler, new BullmqScheduler({ url: this.requireRedisUrl(appConfig.scheduler.redisUrl) }, queuePrefix));
15317
17704
  this.registerRuntimeNodeActivationScheduler(container$1);
15318
17705
  return { ownedPrismaClient: prismaOwnership.ownedPrismaClient };
@@ -15344,6 +17731,15 @@ var AppContainerFactory = class AppContainerFactory {
15344
17731
  return new DefaultDrivingScheduler(new ConfigDrivenOffloadPolicy(), dependencyContainer.resolve(ApplicationTokens.WorkerRuntimeScheduler), inlineScheduler);
15345
17732
  }) });
15346
17733
  }
17734
+ createWorkflowPolicyRuntimeDefaults(appConfig) {
17735
+ return {
17736
+ retentionSeconds: this.readPositiveInteger(appConfig.env.CODEMATION_RUN_RETENTION_DEFAULT_SECONDS),
17737
+ binaryRetentionSeconds: this.readPositiveInteger(appConfig.env.CODEMATION_BINARY_RETENTION_DEFAULT_SECONDS),
17738
+ telemetrySpanRetentionSeconds: this.readPositiveInteger(appConfig.env.CODEMATION_TELEMETRY_SPAN_RETENTION_DEFAULT_SECONDS),
17739
+ telemetryArtifactRetentionSeconds: this.readPositiveInteger(appConfig.env.CODEMATION_TELEMETRY_ARTIFACT_RETENTION_DEFAULT_SECONDS),
17740
+ telemetryMetricRetentionSeconds: this.readPositiveInteger(appConfig.env.CODEMATION_TELEMETRY_METRIC_RETENTION_DEFAULT_SECONDS)
17741
+ };
17742
+ }
15347
17743
  createBinaryStorage(repoRoot) {
15348
17744
  if (!repoRoot) return new InMemoryBinaryStorage();
15349
17745
  return new LocalFilesystemBinaryStorage(`${repoRoot}/.codemation/binary`);
@@ -15362,6 +17758,11 @@ var AppContainerFactory = class AppContainerFactory {
15362
17758
  if (!redisUrl) throw new Error("Redis-backed runtime requires runtime.eventBus.redisUrl or REDIS_URL.");
15363
17759
  return redisUrl;
15364
17760
  }
17761
+ readPositiveInteger(value) {
17762
+ if (!value) return;
17763
+ const parsed = Number(value);
17764
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : void 0;
17765
+ }
15365
17766
  synchronizeLiveWorkflowRepository(container$1, workflows) {
15366
17767
  container$1.resolve(CoreTokens.LiveWorkflowRepository).setWorkflows(workflows);
15367
17768
  if (container$1.isRegistered(WebhookEndpointPathValidator, true)) container$1.resolve(WebhookEndpointPathValidator).validateAndWarn(workflows);
@@ -15369,5 +17770,5 @@ var AppContainerFactory = class AppContainerFactory {
15369
17770
  };
15370
17771
 
15371
17772
  //#endregion
15372
- export { GetWorkflowDetailQuery as C, ListUserAccountsQuery as E, GetWorkflowSummariesQuery as S, UpsertLocalBootstrapUserCommand as T, CodemationFrontendAuthSnapshotFactory as _, AppContainerLifecycle as a, WorkflowDefinitionMapper as b, RequestToWebhookItemMapper as c, CredentialHttpRouteHandler as d, CodemationHonoApiApp as f, FrontendAppConfigFactory as g, InternalAuthBootstrapFactory as h, DatabaseMigrations as i, RunHttpRouteHandler as l, PublicFrontendBootstrapFactory as m, WorkerRuntime as n, WorkflowHttpRouteHandler as o, BinaryHttpRouteHandler as p, FrontendRuntime as r, WebhookHttpRouteHandler as s, AppContainerFactory as t, OAuth2HttpRouteHandler as u, WorkflowWebsocketServer as v, RunBinaryAttachmentLookupService as w, WorkflowPolicyUiPresentationFactory as x, ApiPaths as y };
15373
- //# sourceMappingURL=AppContainerFactory-CcSGFNLW.js.map
17773
+ export { GetWorkflowSummariesQuery as C, ListUserAccountsQuery as D, UpsertLocalBootstrapUserCommand as E, WorkflowPolicyUiPresentationFactory as S, RunBinaryAttachmentLookupService as T, FrontendAppConfigFactory as _, AppContainerLifecycle as a, ApiPaths as b, WebhookHttpRouteHandler as c, OAuth2HttpRouteHandler as d, CredentialHttpRouteHandler as f, InternalAuthBootstrapFactory as g, PublicFrontendBootstrapFactory as h, DatabaseMigrations as i, RequestToWebhookItemMapper as l, BinaryHttpRouteHandler as m, WorkerRuntime as n, WorkflowRunRetentionPruneScheduler as o, CodemationHonoApiApp as p, FrontendRuntime as r, WorkflowHttpRouteHandler as s, AppContainerFactory as t, RunHttpRouteHandler as u, CodemationFrontendAuthSnapshotFactory as v, GetWorkflowDetailQuery as w, WorkflowDefinitionMapper as x, WorkflowWebsocketServer as y };
17774
+ //# sourceMappingURL=AppContainerFactory-DL_qZ80U.js.map