@shipfox/api-definitions 10.2.0 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/.turbo/turbo-build.log +13 -12
  2. package/CHANGELOG.md +91 -0
  3. package/dist/core/entities/index.d.ts +1 -0
  4. package/dist/core/entities/index.d.ts.map +1 -1
  5. package/dist/core/entities/index.js +1 -0
  6. package/dist/core/entities/index.js.map +1 -1
  7. package/dist/core/entities/sync-state.d.ts +4 -0
  8. package/dist/core/entities/sync-state.d.ts.map +1 -1
  9. package/dist/core/entities/sync-state.js +10 -0
  10. package/dist/core/entities/sync-state.js.map +1 -1
  11. package/dist/core/entities/validation-warning.d.ts +6 -0
  12. package/dist/core/entities/validation-warning.d.ts.map +1 -0
  13. package/dist/core/entities/validation-warning.js +3 -0
  14. package/dist/core/entities/validation-warning.js.map +1 -0
  15. package/dist/core/parse-definition.d.ts +9 -7
  16. package/dist/core/parse-definition.d.ts.map +1 -1
  17. package/dist/core/parse-definition.js +14 -2
  18. package/dist/core/parse-definition.js.map +1 -1
  19. package/dist/core/sync-definitions.d.ts +2 -0
  20. package/dist/core/sync-definitions.d.ts.map +1 -1
  21. package/dist/core/sync-definitions.js +6 -5
  22. package/dist/core/sync-definitions.js.map +1 -1
  23. package/dist/core/validate-definition.d.ts +9 -5
  24. package/dist/core/validate-definition.d.ts.map +1 -1
  25. package/dist/core/validate-definition.js +23 -2
  26. package/dist/core/validate-definition.js.map +1 -1
  27. package/dist/core/workflow-model/index.d.ts +1 -1
  28. package/dist/core/workflow-model/index.d.ts.map +1 -1
  29. package/dist/core/workflow-model/index.js.map +1 -1
  30. package/dist/core/workflow-model/invalid-workflow-model-error.d.ts +3 -1
  31. package/dist/core/workflow-model/invalid-workflow-model-error.d.ts.map +1 -1
  32. package/dist/core/workflow-model/invalid-workflow-model-error.js.map +1 -1
  33. package/dist/core/workflow-model/normalize-if-condition.d.ts +0 -1
  34. package/dist/core/workflow-model/normalize-if-condition.d.ts.map +1 -1
  35. package/dist/core/workflow-model/normalize-if-condition.js +0 -1
  36. package/dist/core/workflow-model/normalize-if-condition.js.map +1 -1
  37. package/dist/core/workflow-model/normalize-job-checkout.d.ts +15 -3
  38. package/dist/core/workflow-model/normalize-job-checkout.d.ts.map +1 -1
  39. package/dist/core/workflow-model/normalize-job-checkout.js +83 -4
  40. package/dist/core/workflow-model/normalize-job-checkout.js.map +1 -1
  41. package/dist/core/workflow-model/normalize-job-listening.js +0 -1
  42. package/dist/core/workflow-model/normalize-job-listening.js.map +1 -1
  43. package/dist/core/workflow-model/normalize-job-success.d.ts.map +1 -1
  44. package/dist/core/workflow-model/normalize-job-success.js +0 -1
  45. package/dist/core/workflow-model/normalize-job-success.js.map +1 -1
  46. package/dist/core/workflow-model/normalize-jobs.d.ts.map +1 -1
  47. package/dist/core/workflow-model/normalize-jobs.js +310 -45
  48. package/dist/core/workflow-model/normalize-jobs.js.map +1 -1
  49. package/dist/core/workflow-model/normalize-step-gate.js +0 -1
  50. package/dist/core/workflow-model/normalize-step-gate.js.map +1 -1
  51. package/dist/core/workflow-model/normalize-triggers.d.ts.map +1 -1
  52. package/dist/core/workflow-model/normalize-triggers.js +0 -1
  53. package/dist/core/workflow-model/normalize-triggers.js.map +1 -1
  54. package/dist/core/workflow-model/normalize-workflow-document.d.ts +3 -0
  55. package/dist/core/workflow-model/normalize-workflow-document.d.ts.map +1 -1
  56. package/dist/core/workflow-model/normalize-workflow-document.js +34 -4
  57. package/dist/core/workflow-model/normalize-workflow-document.js.map +1 -1
  58. package/dist/core/workflow-model/parse-interpolation-field.d.ts +1 -1
  59. package/dist/core/workflow-model/parse-interpolation-field.d.ts.map +1 -1
  60. package/dist/core/workflow-model/parse-interpolation-field.js +27 -57
  61. package/dist/core/workflow-model/parse-interpolation-field.js.map +1 -1
  62. package/dist/core/workflow-model/validate-literal-name.d.ts +12 -0
  63. package/dist/core/workflow-model/validate-literal-name.d.ts.map +1 -0
  64. package/dist/core/workflow-model/validate-literal-name.js +36 -0
  65. package/dist/core/workflow-model/validate-literal-name.js.map +1 -0
  66. package/dist/core/workflow-model/validate-predicate-expression.d.ts +1 -2
  67. package/dist/core/workflow-model/validate-predicate-expression.d.ts.map +1 -1
  68. package/dist/core/workflow-model/validate-predicate-expression.js +31 -90
  69. package/dist/core/workflow-model/validate-predicate-expression.js.map +1 -1
  70. package/dist/core/workflow-model/validation-issue.d.ts +2 -1
  71. package/dist/core/workflow-model/validation-issue.d.ts.map +1 -1
  72. package/dist/core/workflow-model/validation-issue.js +8 -2
  73. package/dist/core/workflow-model/validation-issue.js.map +1 -1
  74. package/dist/core/workflow-model/workflow-field-label.d.ts.map +1 -1
  75. package/dist/core/workflow-model/workflow-field-label.js +16 -2
  76. package/dist/core/workflow-model/workflow-field-label.js.map +1 -1
  77. package/dist/db/db.d.ts +38 -0
  78. package/dist/db/db.d.ts.map +1 -1
  79. package/dist/db/schema/sync-states.d.ts +19 -0
  80. package/dist/db/schema/sync-states.d.ts.map +1 -1
  81. package/dist/db/schema/sync-states.js +3 -1
  82. package/dist/db/schema/sync-states.js.map +1 -1
  83. package/dist/db/sync-states.d.ts +2 -1
  84. package/dist/db/sync-states.d.ts.map +1 -1
  85. package/dist/db/sync-states.js +4 -0
  86. package/dist/db/sync-states.js.map +1 -1
  87. package/dist/presentation/dto/definition.d.ts.map +1 -1
  88. package/dist/presentation/dto/definition.js +2 -1
  89. package/dist/presentation/dto/definition.js.map +1 -1
  90. package/dist/presentation/routes/project-access.d.ts +1 -0
  91. package/dist/presentation/routes/project-access.d.ts.map +1 -1
  92. package/dist/presentation/routes/validate-definition.d.ts.map +1 -1
  93. package/dist/presentation/routes/validate-definition.js +5 -3
  94. package/dist/presentation/routes/validate-definition.js.map +1 -1
  95. package/dist/temporal/activities/sync-activities.d.ts +6 -2
  96. package/dist/temporal/activities/sync-activities.d.ts.map +1 -1
  97. package/dist/temporal/activities/sync-activities.js +8 -1
  98. package/dist/temporal/activities/sync-activities.js.map +1 -1
  99. package/dist/temporal/workflows/definition-sync.js +4 -1
  100. package/dist/temporal/workflows/definition-sync.js.map +1 -1
  101. package/dist/temporal/workflows/index.bundle.js +9029 -3
  102. package/dist/tsconfig.test.tsbuildinfo +1 -1
  103. package/drizzle/0002_lumpy_ben_parker.sql +1 -0
  104. package/drizzle/meta/0002_snapshot.json +534 -0
  105. package/drizzle/meta/_journal.json +7 -0
  106. package/package.json +14 -14
  107. package/src/core/entities/index.ts +1 -0
  108. package/src/core/entities/sync-state.ts +23 -0
  109. package/src/core/entities/validation-warning.ts +5 -0
  110. package/src/core/parse-definition-warnings.test.ts +33 -0
  111. package/src/core/parse-definition.test.ts +7 -1
  112. package/src/core/parse-definition.ts +28 -10
  113. package/src/core/sync-definitions.test.ts +39 -0
  114. package/src/core/sync-definitions.ts +14 -4
  115. package/src/core/validate-definition.test.ts +128 -0
  116. package/src/core/validate-definition.ts +39 -8
  117. package/src/core/workflow-model/README.md +2 -2
  118. package/src/core/workflow-model/index.ts +1 -0
  119. package/src/core/workflow-model/invalid-workflow-model-error.ts +8 -2
  120. package/src/core/workflow-model/normalize-if-condition.ts +0 -2
  121. package/src/core/workflow-model/normalize-job-checkout.ts +105 -8
  122. package/src/core/workflow-model/normalize-job-listening.ts +0 -1
  123. package/src/core/workflow-model/normalize-job-success.ts +0 -1
  124. package/src/core/workflow-model/normalize-jobs.ts +330 -49
  125. package/src/core/workflow-model/normalize-step-gate.ts +0 -1
  126. package/src/core/workflow-model/normalize-triggers.ts +0 -1
  127. package/src/core/workflow-model/normalize-workflow-document.test.ts +759 -185
  128. package/src/core/workflow-model/normalize-workflow-document.ts +29 -4
  129. package/src/core/workflow-model/parse-interpolation-field.ts +50 -79
  130. package/src/core/workflow-model/validate-literal-name.ts +64 -0
  131. package/src/core/workflow-model/validate-predicate-expression.test.ts +153 -15
  132. package/src/core/workflow-model/validate-predicate-expression.ts +52 -120
  133. package/src/core/workflow-model/validation-issue.ts +4 -0
  134. package/src/core/workflow-model/workflow-field-label.ts +16 -2
  135. package/src/core/workflow-yaml/README.md +2 -2
  136. package/src/db/schema/sync-states.ts +4 -1
  137. package/src/db/sync-states.test.ts +57 -0
  138. package/src/db/sync-states.ts +6 -0
  139. package/src/presentation/dto/definition.ts +1 -0
  140. package/src/presentation/routes/create-definition.test.ts +3 -3
  141. package/src/presentation/routes/get-definition.test.ts +1 -1
  142. package/src/presentation/routes/list-definitions.test.ts +2 -1
  143. package/src/presentation/routes/validate-definition.test.ts +1 -0
  144. package/src/presentation/routes/validate-definition.ts +7 -1
  145. package/src/temporal/activities/sync-activities.test.ts +16 -0
  146. package/src/temporal/activities/sync-activities.ts +18 -3
  147. package/src/temporal/workflows/definition-sync.ts +1 -1
  148. package/test/agent-validation-catalog.ts +17 -0
  149. package/test/fixtures/valid-listening-job.yml +2 -1
  150. package/tsconfig.build.tsbuildinfo +1 -1
@@ -28,6 +28,7 @@ function createPrepareDefinitionSyncActivity(sourceControl) {
28
28
  status: 'syncing',
29
29
  lastErrorCode: null,
30
30
  lastErrorMessage: null,
31
+ warnings: [],
31
32
  startedAt: new Date(),
32
33
  finishedAt: null
33
34
  });
@@ -65,7 +66,7 @@ function createFetchAndApplyActivity(sourceControl, agent, integrations) {
65
66
  return await loadIntegrationValidationContext(integrations, input.workspaceId, input.sourceConnectionId);
66
67
  }
67
68
  });
68
- return await applyVcsDefinitionsBatch({
69
+ const result = await applyVcsDefinitionsBatch({
69
70
  projectId: input.projectId,
70
71
  workspaceId: input.workspaceId,
71
72
  ref: input.sourceRef,
@@ -78,6 +79,10 @@ function createFetchAndApplyActivity(sourceControl, agent, integrations) {
78
79
  contentHash: entry.contentHash
79
80
  }))
80
81
  });
82
+ return {
83
+ ...result,
84
+ warnings: definitions.flatMap((entry)=>entry.warnings)
85
+ };
81
86
  });
82
87
  };
83
88
  }
@@ -91,6 +96,7 @@ function createMarkSyncSucceededActivity() {
91
96
  status: 'succeeded',
92
97
  lastErrorCode: null,
93
98
  lastErrorMessage: null,
99
+ warnings: input.warnings ?? [],
94
100
  finishedAt: new Date()
95
101
  });
96
102
  };
@@ -105,6 +111,7 @@ function createMarkSyncFailedActivity() {
105
111
  status: 'failed',
106
112
  lastErrorCode: input.code,
107
113
  lastErrorMessage: input.message,
114
+ warnings: [],
108
115
  finishedAt: new Date()
109
116
  });
110
117
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/temporal/activities/sync-activities.ts"],"sourcesContent":["import type {AgentInterModuleClient} from '@shipfox/api-agent-dto/inter-module';\nimport type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto/inter-module';\nimport {markErrorReported} from '@shipfox/node-error-monitoring';\nimport {Context} from '@temporalio/activity';\nimport {ApplicationFailure} from '@temporalio/common';\nimport type {DefinitionSyncErrorCode} from '#core/entities/sync-state.js';\nimport {\n classifySyncFailure,\n discoverWorkflowFiles,\n fetchAndParseWorkflows,\n resolveSyncSource,\n UNRESOLVED_SYNC_REF,\n} from '#core/index.js';\nimport type {DefinitionsSourceControl} from '#core/integrations.js';\nimport {loadIntegrationValidationContext} from '#core/integrations.js';\nimport {applyVcsDefinitionsBatch, markDefinitionSyncState} from '#db/index.js';\n\nexport interface SyncWorkflowInput {\n projectId: string;\n workspaceId: string;\n sourceConnectionId: string;\n sourceExternalRepositoryId: string;\n sourceRef?: string | undefined;\n sourceCommitSha?: string | undefined;\n}\n\nexport interface SyncRefScopedInput extends SyncWorkflowInput {\n sourceRef: string;\n}\n\nexport interface FetchAndApplyActivityInput extends SyncRefScopedInput {\n paths: string[];\n}\n\nexport interface MarkSyncFailedActivityInput extends Omit<SyncWorkflowInput, 'sourceRef'> {\n sourceRef: string | null;\n code: DefinitionSyncErrorCode;\n message: string;\n}\n\nexport interface PrepareSyncResult {\n sourceRef: string;\n sourceCommitSha?: string | undefined;\n}\n\nexport interface DiscoverWorkflowsActivityResult {\n paths: string[];\n}\n\nexport interface FetchAndApplyActivityResult {\n appliedCount: number;\n deletedCount: number;\n}\n\nexport interface DefinitionSyncActivityOptions {\n workflowPath: string;\n}\n\nexport function createDefinitionSyncActivities(\n sourceControl: DefinitionsSourceControl,\n agent: AgentInterModuleClient,\n integrations?: IntegrationsModuleClient | undefined,\n options?: DefinitionSyncActivityOptions | undefined,\n) {\n return {\n prepareDefinitionSync: createPrepareDefinitionSyncActivity(sourceControl),\n discoverDefinitionWorkflows: createDiscoverDefinitionWorkflowsActivity(\n sourceControl,\n options?.workflowPath,\n ),\n fetchAndApplyDefinitionWorkflows: createFetchAndApplyActivity(\n sourceControl,\n agent,\n integrations,\n ),\n markDefinitionSyncSucceeded: createMarkSyncSucceededActivity(),\n markDefinitionSyncFailed: createMarkSyncFailedActivity(),\n };\n}\n\nfunction createPrepareDefinitionSyncActivity(sourceControl: DefinitionsSourceControl) {\n return async function prepareDefinitionSync(\n input: SyncWorkflowInput,\n ): Promise<PrepareSyncResult> {\n return await runWithPermanentTranslation(async () => {\n const sourceRef = input.sourceRef ?? (await resolveSyncSource({...input, sourceControl})).ref;\n\n await markDefinitionSyncState({\n projectId: input.projectId,\n sourceConnectionId: input.sourceConnectionId,\n sourceExternalRepositoryId: input.sourceExternalRepositoryId,\n ref: sourceRef,\n status: 'syncing',\n lastErrorCode: null,\n lastErrorMessage: null,\n startedAt: new Date(),\n finishedAt: null,\n });\n\n return {sourceRef, sourceCommitSha: input.sourceCommitSha};\n });\n };\n}\n\nfunction createDiscoverDefinitionWorkflowsActivity(\n sourceControl: DefinitionsSourceControl,\n workflowPath?: string | undefined,\n) {\n return async function discoverDefinitionWorkflows(\n input: SyncRefScopedInput,\n ): Promise<DiscoverWorkflowsActivityResult> {\n return await runWithPermanentTranslation(async () => {\n return await discoverWorkflowFiles({\n ...input,\n ref: input.sourceCommitSha ?? input.sourceRef,\n sourceControl,\n workflowPath,\n });\n });\n };\n}\n\nfunction createFetchAndApplyActivity(\n sourceControl: DefinitionsSourceControl,\n agent: AgentInterModuleClient,\n integrations?: IntegrationsModuleClient | undefined,\n) {\n return async function fetchAndApplyDefinitionWorkflows(\n input: FetchAndApplyActivityInput,\n ): Promise<FetchAndApplyActivityResult> {\n return await runWithPermanentTranslation(async () => {\n const definitions = await fetchAndParseWorkflows({\n ...input,\n ref: input.sourceCommitSha ?? input.sourceRef,\n sourceControl,\n agentValidationCatalog: await agent.getValidationCatalog({}),\n onProgress: (path) => Context.current().heartbeat({path}),\n loadIntegrationValidationContext:\n integrations === undefined\n ? undefined\n : async () => {\n return await loadIntegrationValidationContext(\n integrations,\n input.workspaceId,\n input.sourceConnectionId,\n );\n },\n });\n\n return await applyVcsDefinitionsBatch({\n projectId: input.projectId,\n workspaceId: input.workspaceId,\n ref: input.sourceRef,\n upserts: definitions.map((entry) => ({\n configPath: entry.path,\n name: entry.name,\n document: entry.definition.document,\n model: entry.definition.model,\n sourceSnapshot: entry.definition.sourceSnapshot,\n contentHash: entry.contentHash,\n })),\n });\n });\n };\n}\n\nfunction createMarkSyncSucceededActivity() {\n return async function markDefinitionSyncSucceeded(input: SyncRefScopedInput): Promise<void> {\n await markDefinitionSyncState({\n projectId: input.projectId,\n sourceConnectionId: input.sourceConnectionId,\n sourceExternalRepositoryId: input.sourceExternalRepositoryId,\n ref: input.sourceRef,\n status: 'succeeded',\n lastErrorCode: null,\n lastErrorMessage: null,\n finishedAt: new Date(),\n });\n };\n}\n\nfunction createMarkSyncFailedActivity() {\n return async function markDefinitionSyncFailed(\n input: MarkSyncFailedActivityInput,\n ): Promise<void> {\n await markDefinitionSyncState({\n projectId: input.projectId,\n sourceConnectionId: input.sourceConnectionId,\n sourceExternalRepositoryId: input.sourceExternalRepositoryId,\n ref: input.sourceRef ?? UNRESOLVED_SYNC_REF,\n status: 'failed',\n lastErrorCode: input.code,\n lastErrorMessage: input.message,\n finishedAt: new Date(),\n });\n };\n}\n\nasync function runWithPermanentTranslation<T>(operation: () => Promise<T>): Promise<T> {\n try {\n return await operation();\n } catch (error) {\n if (error instanceof ApplicationFailure) {\n throw error;\n }\n const failure = classifySyncFailure(error);\n const translatedError = failure.retryable\n ? ApplicationFailure.retryable(failure.message, failure.code)\n : ApplicationFailure.nonRetryable(failure.message, failure.code);\n if (failure.code !== 'unknown') markErrorReported(translatedError);\n throw translatedError;\n }\n}\n"],"names":["markErrorReported","Context","ApplicationFailure","classifySyncFailure","discoverWorkflowFiles","fetchAndParseWorkflows","resolveSyncSource","UNRESOLVED_SYNC_REF","loadIntegrationValidationContext","applyVcsDefinitionsBatch","markDefinitionSyncState","createDefinitionSyncActivities","sourceControl","agent","integrations","options","prepareDefinitionSync","createPrepareDefinitionSyncActivity","discoverDefinitionWorkflows","createDiscoverDefinitionWorkflowsActivity","workflowPath","fetchAndApplyDefinitionWorkflows","createFetchAndApplyActivity","markDefinitionSyncSucceeded","createMarkSyncSucceededActivity","markDefinitionSyncFailed","createMarkSyncFailedActivity","input","runWithPermanentTranslation","sourceRef","ref","projectId","sourceConnectionId","sourceExternalRepositoryId","status","lastErrorCode","lastErrorMessage","startedAt","Date","finishedAt","sourceCommitSha","definitions","agentValidationCatalog","getValidationCatalog","onProgress","path","current","heartbeat","undefined","workspaceId","upserts","map","entry","configPath","name","document","definition","model","sourceSnapshot","contentHash","code","message","operation","error","failure","translatedError","retryable","nonRetryable"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/temporal/activities/sync-activities.ts"],"sourcesContent":["import type {AgentInterModuleClient} from '@shipfox/api-agent-dto/inter-module';\nimport type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto/inter-module';\nimport {markErrorReported} from '@shipfox/node-error-monitoring';\nimport {Context} from '@temporalio/activity';\nimport {ApplicationFailure} from '@temporalio/common';\nimport type {DefinitionSyncErrorCode, DefinitionSyncWarning} from '#core/entities/sync-state.js';\nimport {\n classifySyncFailure,\n discoverWorkflowFiles,\n fetchAndParseWorkflows,\n resolveSyncSource,\n UNRESOLVED_SYNC_REF,\n} from '#core/index.js';\nimport type {DefinitionsSourceControl} from '#core/integrations.js';\nimport {loadIntegrationValidationContext} from '#core/integrations.js';\nimport {applyVcsDefinitionsBatch, markDefinitionSyncState} from '#db/index.js';\n\nexport interface SyncWorkflowInput {\n projectId: string;\n workspaceId: string;\n sourceConnectionId: string;\n sourceExternalRepositoryId: string;\n sourceRef?: string | undefined;\n sourceCommitSha?: string | undefined;\n}\n\nexport interface SyncRefScopedInput extends SyncWorkflowInput {\n sourceRef: string;\n}\n\nexport interface FetchAndApplyActivityInput extends SyncRefScopedInput {\n paths: string[];\n}\n\nexport interface MarkSyncFailedActivityInput extends Omit<SyncWorkflowInput, 'sourceRef'> {\n sourceRef: string | null;\n code: DefinitionSyncErrorCode;\n message: string;\n}\n\nexport interface PrepareSyncResult {\n sourceRef: string;\n sourceCommitSha?: string | undefined;\n}\n\nexport interface DiscoverWorkflowsActivityResult {\n paths: string[];\n}\n\nexport interface FetchAndApplyActivityResult {\n appliedCount: number;\n deletedCount: number;\n warnings: DefinitionSyncWarning[];\n}\n\nexport interface MarkSyncSucceededActivityInput extends SyncRefScopedInput {\n warnings?: readonly DefinitionSyncWarning[] | undefined;\n}\n\nexport interface DefinitionSyncActivityOptions {\n workflowPath: string;\n}\n\nexport function createDefinitionSyncActivities(\n sourceControl: DefinitionsSourceControl,\n agent: AgentInterModuleClient,\n integrations?: IntegrationsModuleClient | undefined,\n options?: DefinitionSyncActivityOptions | undefined,\n) {\n return {\n prepareDefinitionSync: createPrepareDefinitionSyncActivity(sourceControl),\n discoverDefinitionWorkflows: createDiscoverDefinitionWorkflowsActivity(\n sourceControl,\n options?.workflowPath,\n ),\n fetchAndApplyDefinitionWorkflows: createFetchAndApplyActivity(\n sourceControl,\n agent,\n integrations,\n ),\n markDefinitionSyncSucceeded: createMarkSyncSucceededActivity(),\n markDefinitionSyncFailed: createMarkSyncFailedActivity(),\n };\n}\n\nfunction createPrepareDefinitionSyncActivity(sourceControl: DefinitionsSourceControl) {\n return async function prepareDefinitionSync(\n input: SyncWorkflowInput,\n ): Promise<PrepareSyncResult> {\n return await runWithPermanentTranslation(async () => {\n const sourceRef = input.sourceRef ?? (await resolveSyncSource({...input, sourceControl})).ref;\n\n await markDefinitionSyncState({\n projectId: input.projectId,\n sourceConnectionId: input.sourceConnectionId,\n sourceExternalRepositoryId: input.sourceExternalRepositoryId,\n ref: sourceRef,\n status: 'syncing',\n lastErrorCode: null,\n lastErrorMessage: null,\n warnings: [],\n startedAt: new Date(),\n finishedAt: null,\n });\n\n return {sourceRef, sourceCommitSha: input.sourceCommitSha};\n });\n };\n}\n\nfunction createDiscoverDefinitionWorkflowsActivity(\n sourceControl: DefinitionsSourceControl,\n workflowPath?: string | undefined,\n) {\n return async function discoverDefinitionWorkflows(\n input: SyncRefScopedInput,\n ): Promise<DiscoverWorkflowsActivityResult> {\n return await runWithPermanentTranslation(async () => {\n return await discoverWorkflowFiles({\n ...input,\n ref: input.sourceCommitSha ?? input.sourceRef,\n sourceControl,\n workflowPath,\n });\n });\n };\n}\n\nfunction createFetchAndApplyActivity(\n sourceControl: DefinitionsSourceControl,\n agent: AgentInterModuleClient,\n integrations?: IntegrationsModuleClient | undefined,\n) {\n return async function fetchAndApplyDefinitionWorkflows(\n input: FetchAndApplyActivityInput,\n ): Promise<FetchAndApplyActivityResult> {\n return await runWithPermanentTranslation(async () => {\n const definitions = await fetchAndParseWorkflows({\n ...input,\n ref: input.sourceCommitSha ?? input.sourceRef,\n sourceControl,\n agentValidationCatalog: await agent.getValidationCatalog({}),\n onProgress: (path) => Context.current().heartbeat({path}),\n loadIntegrationValidationContext:\n integrations === undefined\n ? undefined\n : async () => {\n return await loadIntegrationValidationContext(\n integrations,\n input.workspaceId,\n input.sourceConnectionId,\n );\n },\n });\n\n const result = await applyVcsDefinitionsBatch({\n projectId: input.projectId,\n workspaceId: input.workspaceId,\n ref: input.sourceRef,\n upserts: definitions.map((entry) => ({\n configPath: entry.path,\n name: entry.name,\n document: entry.definition.document,\n model: entry.definition.model,\n sourceSnapshot: entry.definition.sourceSnapshot,\n contentHash: entry.contentHash,\n })),\n });\n\n return {\n ...result,\n warnings: definitions.flatMap((entry) => entry.warnings),\n };\n });\n };\n}\n\nfunction createMarkSyncSucceededActivity() {\n return async function markDefinitionSyncSucceeded(\n input: MarkSyncSucceededActivityInput,\n ): Promise<void> {\n await markDefinitionSyncState({\n projectId: input.projectId,\n sourceConnectionId: input.sourceConnectionId,\n sourceExternalRepositoryId: input.sourceExternalRepositoryId,\n ref: input.sourceRef,\n status: 'succeeded',\n lastErrorCode: null,\n lastErrorMessage: null,\n warnings: input.warnings ?? [],\n finishedAt: new Date(),\n });\n };\n}\n\nfunction createMarkSyncFailedActivity() {\n return async function markDefinitionSyncFailed(\n input: MarkSyncFailedActivityInput,\n ): Promise<void> {\n await markDefinitionSyncState({\n projectId: input.projectId,\n sourceConnectionId: input.sourceConnectionId,\n sourceExternalRepositoryId: input.sourceExternalRepositoryId,\n ref: input.sourceRef ?? UNRESOLVED_SYNC_REF,\n status: 'failed',\n lastErrorCode: input.code,\n lastErrorMessage: input.message,\n warnings: [],\n finishedAt: new Date(),\n });\n };\n}\n\nasync function runWithPermanentTranslation<T>(operation: () => Promise<T>): Promise<T> {\n try {\n return await operation();\n } catch (error) {\n if (error instanceof ApplicationFailure) {\n throw error;\n }\n const failure = classifySyncFailure(error);\n const translatedError = failure.retryable\n ? ApplicationFailure.retryable(failure.message, failure.code)\n : ApplicationFailure.nonRetryable(failure.message, failure.code);\n if (failure.code !== 'unknown') markErrorReported(translatedError);\n throw translatedError;\n }\n}\n"],"names":["markErrorReported","Context","ApplicationFailure","classifySyncFailure","discoverWorkflowFiles","fetchAndParseWorkflows","resolveSyncSource","UNRESOLVED_SYNC_REF","loadIntegrationValidationContext","applyVcsDefinitionsBatch","markDefinitionSyncState","createDefinitionSyncActivities","sourceControl","agent","integrations","options","prepareDefinitionSync","createPrepareDefinitionSyncActivity","discoverDefinitionWorkflows","createDiscoverDefinitionWorkflowsActivity","workflowPath","fetchAndApplyDefinitionWorkflows","createFetchAndApplyActivity","markDefinitionSyncSucceeded","createMarkSyncSucceededActivity","markDefinitionSyncFailed","createMarkSyncFailedActivity","input","runWithPermanentTranslation","sourceRef","ref","projectId","sourceConnectionId","sourceExternalRepositoryId","status","lastErrorCode","lastErrorMessage","warnings","startedAt","Date","finishedAt","sourceCommitSha","definitions","agentValidationCatalog","getValidationCatalog","onProgress","path","current","heartbeat","undefined","workspaceId","result","upserts","map","entry","configPath","name","document","definition","model","sourceSnapshot","contentHash","flatMap","code","message","operation","error","failure","translatedError","retryable","nonRetryable"],"mappings":"AAEA,SAAQA,iBAAiB,QAAO,iCAAiC;AACjE,SAAQC,OAAO,QAAO,uBAAuB;AAC7C,SAAQC,kBAAkB,QAAO,qBAAqB;AAEtD,SACEC,mBAAmB,EACnBC,qBAAqB,EACrBC,sBAAsB,EACtBC,iBAAiB,EACjBC,mBAAmB,QACd,iBAAiB;AAExB,SAAQC,gCAAgC,QAAO,wBAAwB;AACvE,SAAQC,wBAAwB,EAAEC,uBAAuB,QAAO,eAAe;AAgD/E,OAAO,SAASC,+BACdC,aAAuC,EACvCC,KAA6B,EAC7BC,YAAmD,EACnDC,OAAmD;IAEnD,OAAO;QACLC,uBAAuBC,oCAAoCL;QAC3DM,6BAA6BC,0CAC3BP,eACAG,SAASK;QAEXC,kCAAkCC,4BAChCV,eACAC,OACAC;QAEFS,6BAA6BC;QAC7BC,0BAA0BC;IAC5B;AACF;AAEA,SAAST,oCAAoCL,aAAuC;IAClF,OAAO,eAAeI,sBACpBW,KAAwB;QAExB,OAAO,MAAMC,4BAA4B;YACvC,MAAMC,YAAYF,MAAME,SAAS,IAAI,AAAC,CAAA,MAAMvB,kBAAkB;gBAAC,GAAGqB,KAAK;gBAAEf;YAAa,EAAC,EAAGkB,GAAG;YAE7F,MAAMpB,wBAAwB;gBAC5BqB,WAAWJ,MAAMI,SAAS;gBAC1BC,oBAAoBL,MAAMK,kBAAkB;gBAC5CC,4BAA4BN,MAAMM,0BAA0B;gBAC5DH,KAAKD;gBACLK,QAAQ;gBACRC,eAAe;gBACfC,kBAAkB;gBAClBC,UAAU,EAAE;gBACZC,WAAW,IAAIC;gBACfC,YAAY;YACd;YAEA,OAAO;gBAACX;gBAAWY,iBAAiBd,MAAMc,eAAe;YAAA;QAC3D;IACF;AACF;AAEA,SAAStB,0CACPP,aAAuC,EACvCQ,YAAiC;IAEjC,OAAO,eAAeF,4BACpBS,KAAyB;QAEzB,OAAO,MAAMC,4BAA4B;YACvC,OAAO,MAAMxB,sBAAsB;gBACjC,GAAGuB,KAAK;gBACRG,KAAKH,MAAMc,eAAe,IAAId,MAAME,SAAS;gBAC7CjB;gBACAQ;YACF;QACF;IACF;AACF;AAEA,SAASE,4BACPV,aAAuC,EACvCC,KAA6B,EAC7BC,YAAmD;IAEnD,OAAO,eAAeO,iCACpBM,KAAiC;QAEjC,OAAO,MAAMC,4BAA4B;YACvC,MAAMc,cAAc,MAAMrC,uBAAuB;gBAC/C,GAAGsB,KAAK;gBACRG,KAAKH,MAAMc,eAAe,IAAId,MAAME,SAAS;gBAC7CjB;gBACA+B,wBAAwB,MAAM9B,MAAM+B,oBAAoB,CAAC,CAAC;gBAC1DC,YAAY,CAACC,OAAS7C,QAAQ8C,OAAO,GAAGC,SAAS,CAAC;wBAACF;oBAAI;gBACvDtC,kCACEM,iBAAiBmC,YACbA,YACA;oBACE,OAAO,MAAMzC,iCACXM,cACAa,MAAMuB,WAAW,EACjBvB,MAAMK,kBAAkB;gBAE5B;YACR;YAEA,MAAMmB,SAAS,MAAM1C,yBAAyB;gBAC5CsB,WAAWJ,MAAMI,SAAS;gBAC1BmB,aAAavB,MAAMuB,WAAW;gBAC9BpB,KAAKH,MAAME,SAAS;gBACpBuB,SAASV,YAAYW,GAAG,CAAC,CAACC,QAAW,CAAA;wBACnCC,YAAYD,MAAMR,IAAI;wBACtBU,MAAMF,MAAME,IAAI;wBAChBC,UAAUH,MAAMI,UAAU,CAACD,QAAQ;wBACnCE,OAAOL,MAAMI,UAAU,CAACC,KAAK;wBAC7BC,gBAAgBN,MAAMI,UAAU,CAACE,cAAc;wBAC/CC,aAAaP,MAAMO,WAAW;oBAChC,CAAA;YACF;YAEA,OAAO;gBACL,GAAGV,MAAM;gBACTd,UAAUK,YAAYoB,OAAO,CAAC,CAACR,QAAUA,MAAMjB,QAAQ;YACzD;QACF;IACF;AACF;AAEA,SAASb;IACP,OAAO,eAAeD,4BACpBI,KAAqC;QAErC,MAAMjB,wBAAwB;YAC5BqB,WAAWJ,MAAMI,SAAS;YAC1BC,oBAAoBL,MAAMK,kBAAkB;YAC5CC,4BAA4BN,MAAMM,0BAA0B;YAC5DH,KAAKH,MAAME,SAAS;YACpBK,QAAQ;YACRC,eAAe;YACfC,kBAAkB;YAClBC,UAAUV,MAAMU,QAAQ,IAAI,EAAE;YAC9BG,YAAY,IAAID;QAClB;IACF;AACF;AAEA,SAASb;IACP,OAAO,eAAeD,yBACpBE,KAAkC;QAElC,MAAMjB,wBAAwB;YAC5BqB,WAAWJ,MAAMI,SAAS;YAC1BC,oBAAoBL,MAAMK,kBAAkB;YAC5CC,4BAA4BN,MAAMM,0BAA0B;YAC5DH,KAAKH,MAAME,SAAS,IAAItB;YACxB2B,QAAQ;YACRC,eAAeR,MAAMoC,IAAI;YACzB3B,kBAAkBT,MAAMqC,OAAO;YAC/B3B,UAAU,EAAE;YACZG,YAAY,IAAID;QAClB;IACF;AACF;AAEA,eAAeX,4BAA+BqC,SAA2B;IACvE,IAAI;QACF,OAAO,MAAMA;IACf,EAAE,OAAOC,OAAO;QACd,IAAIA,iBAAiBhE,oBAAoB;YACvC,MAAMgE;QACR;QACA,MAAMC,UAAUhE,oBAAoB+D;QACpC,MAAME,kBAAkBD,QAAQE,SAAS,GACrCnE,mBAAmBmE,SAAS,CAACF,QAAQH,OAAO,EAAEG,QAAQJ,IAAI,IAC1D7D,mBAAmBoE,YAAY,CAACH,QAAQH,OAAO,EAAEG,QAAQJ,IAAI;QACjE,IAAII,QAAQJ,IAAI,KAAK,WAAW/D,kBAAkBoE;QAClD,MAAMA;IACR;AACF"}
@@ -36,7 +36,10 @@ export async function definitionSyncWorkflow(input) {
36
36
  ...source,
37
37
  paths
38
38
  });
39
- await markDefinitionSyncSucceeded(source);
39
+ await markDefinitionSyncSucceeded({
40
+ ...source,
41
+ warnings: applied.warnings
42
+ });
40
43
  return {
41
44
  sourceRef,
42
45
  appliedCount: applied.appliedCount,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/temporal/workflows/definition-sync.ts"],"sourcesContent":["import {ActivityFailure, ApplicationFailure, proxyActivities} from '@temporalio/workflow';\nimport {\n type DefinitionSyncErrorCode,\n isDefinitionSyncErrorCode,\n} from '#core/entities/sync-state.js';\nimport type {createDefinitionSyncActivities} from '../activities/index.js';\n\nexport interface DefinitionSyncWorkflowInput {\n projectId: string;\n workspaceId: string;\n sourceConnectionId: string;\n sourceExternalRepositoryId: string;\n sourceRef?: string | undefined;\n sourceCommitSha?: string | undefined;\n}\n\nexport interface DefinitionSyncWorkflowResult {\n sourceRef: string;\n appliedCount: number;\n deletedCount: number;\n}\n\nconst PROVIDER_RETRY = {\n initialInterval: '5 seconds',\n backoffCoefficient: 2,\n maximumInterval: '1 minute',\n maximumAttempts: 5,\n} as const;\n\nconst DB_RETRY = {\n initialInterval: '1 second',\n backoffCoefficient: 2,\n maximumInterval: '15 seconds',\n maximumAttempts: 5,\n} as const;\n\nconst {prepareDefinitionSync, discoverDefinitionWorkflows, fetchAndApplyDefinitionWorkflows} =\n proxyActivities<ReturnType<typeof createDefinitionSyncActivities>>({\n startToCloseTimeout: '5 minutes',\n heartbeatTimeout: '30 seconds',\n retry: PROVIDER_RETRY,\n });\n\nconst {markDefinitionSyncSucceeded, markDefinitionSyncFailed} = proxyActivities<\n ReturnType<typeof createDefinitionSyncActivities>\n>({\n startToCloseTimeout: '30 seconds',\n retry: DB_RETRY,\n});\n\nexport async function definitionSyncWorkflow(\n input: DefinitionSyncWorkflowInput,\n): Promise<DefinitionSyncWorkflowResult> {\n let sourceRef: string | null = null;\n\n try {\n const prepared = await prepareDefinitionSync(input);\n sourceRef = prepared.sourceRef;\n\n const source = {\n ...input,\n sourceRef: prepared.sourceRef,\n sourceCommitSha: prepared.sourceCommitSha,\n };\n const {paths} = await discoverDefinitionWorkflows(source);\n const applied = await fetchAndApplyDefinitionWorkflows({...source, paths});\n\n await markDefinitionSyncSucceeded(source);\n\n return {\n sourceRef,\n appliedCount: applied.appliedCount,\n deletedCount: applied.deletedCount,\n };\n } catch (error) {\n const {code, message} = classifyWorkflowError(error);\n try {\n await markDefinitionSyncFailed({...input, sourceRef, code, message});\n } catch (markFailedError) {\n const failureOptions = {\n message: `Definition sync failed with ${code}: ${message}; additionally failed to persist failure state: ${formatWorkflowError(markFailedError)}`,\n type: 'definition-sync-failure-persistence-failed',\n nonRetryable: true,\n details: [\n {\n syncFailureCode: code,\n syncFailureMessage: message,\n failurePersistenceMessage: formatWorkflowError(markFailedError),\n },\n ],\n };\n throw ApplicationFailure.create(\n error instanceof Error ? {...failureOptions, cause: error} : failureOptions,\n );\n }\n throw error;\n }\n}\n\nexport function classifyWorkflowError(error: unknown): {\n code: DefinitionSyncErrorCode;\n message: string;\n} {\n if (error instanceof ActivityFailure && error.cause instanceof ApplicationFailure) {\n return classifyWorkflowError(error.cause);\n }\n if (error instanceof ApplicationFailure) {\n const code = isDefinitionSyncErrorCode(error.type) ? error.type : 'unknown';\n return {code, message: error.message ?? code};\n }\n return {code: 'unknown', message: error instanceof Error ? error.message : String(error)};\n}\n\nfunction formatWorkflowError(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n"],"names":["ActivityFailure","ApplicationFailure","proxyActivities","isDefinitionSyncErrorCode","PROVIDER_RETRY","initialInterval","backoffCoefficient","maximumInterval","maximumAttempts","DB_RETRY","prepareDefinitionSync","discoverDefinitionWorkflows","fetchAndApplyDefinitionWorkflows","startToCloseTimeout","heartbeatTimeout","retry","markDefinitionSyncSucceeded","markDefinitionSyncFailed","definitionSyncWorkflow","input","sourceRef","prepared","source","sourceCommitSha","paths","applied","appliedCount","deletedCount","error","code","message","classifyWorkflowError","markFailedError","failureOptions","formatWorkflowError","type","nonRetryable","details","syncFailureCode","syncFailureMessage","failurePersistenceMessage","create","Error","cause","String"],"mappings":"AAAA,SAAQA,eAAe,EAAEC,kBAAkB,EAAEC,eAAe,QAAO,uBAAuB;AAC1F,SAEEC,yBAAyB,QACpB,+BAA+B;AAkBtC,MAAMC,iBAAiB;IACrBC,iBAAiB;IACjBC,oBAAoB;IACpBC,iBAAiB;IACjBC,iBAAiB;AACnB;AAEA,MAAMC,WAAW;IACfJ,iBAAiB;IACjBC,oBAAoB;IACpBC,iBAAiB;IACjBC,iBAAiB;AACnB;AAEA,MAAM,EAACE,qBAAqB,EAAEC,2BAA2B,EAAEC,gCAAgC,EAAC,GAC1FV,gBAAmE;IACjEW,qBAAqB;IACrBC,kBAAkB;IAClBC,OAAOX;AACT;AAEF,MAAM,EAACY,2BAA2B,EAAEC,wBAAwB,EAAC,GAAGf,gBAE9D;IACAW,qBAAqB;IACrBE,OAAON;AACT;AAEA,OAAO,eAAeS,uBACpBC,KAAkC;IAElC,IAAIC,YAA2B;IAE/B,IAAI;QACF,MAAMC,WAAW,MAAMX,sBAAsBS;QAC7CC,YAAYC,SAASD,SAAS;QAE9B,MAAME,SAAS;YACb,GAAGH,KAAK;YACRC,WAAWC,SAASD,SAAS;YAC7BG,iBAAiBF,SAASE,eAAe;QAC3C;QACA,MAAM,EAACC,KAAK,EAAC,GAAG,MAAMb,4BAA4BW;QAClD,MAAMG,UAAU,MAAMb,iCAAiC;YAAC,GAAGU,MAAM;YAAEE;QAAK;QAExE,MAAMR,4BAA4BM;QAElC,OAAO;YACLF;YACAM,cAAcD,QAAQC,YAAY;YAClCC,cAAcF,QAAQE,YAAY;QACpC;IACF,EAAE,OAAOC,OAAO;QACd,MAAM,EAACC,IAAI,EAAEC,OAAO,EAAC,GAAGC,sBAAsBH;QAC9C,IAAI;YACF,MAAMX,yBAAyB;gBAAC,GAAGE,KAAK;gBAAEC;gBAAWS;gBAAMC;YAAO;QACpE,EAAE,OAAOE,iBAAiB;YACxB,MAAMC,iBAAiB;gBACrBH,SAAS,CAAC,4BAA4B,EAAED,KAAK,EAAE,EAAEC,QAAQ,gDAAgD,EAAEI,oBAAoBF,kBAAkB;gBACjJG,MAAM;gBACNC,cAAc;gBACdC,SAAS;oBACP;wBACEC,iBAAiBT;wBACjBU,oBAAoBT;wBACpBU,2BAA2BN,oBAAoBF;oBACjD;iBACD;YACH;YACA,MAAM/B,mBAAmBwC,MAAM,CAC7Bb,iBAAiBc,QAAQ;gBAAC,GAAGT,cAAc;gBAAEU,OAAOf;YAAK,IAAIK;QAEjE;QACA,MAAML;IACR;AACF;AAEA,OAAO,SAASG,sBAAsBH,KAAc;IAIlD,IAAIA,iBAAiB5B,mBAAmB4B,MAAMe,KAAK,YAAY1C,oBAAoB;QACjF,OAAO8B,sBAAsBH,MAAMe,KAAK;IAC1C;IACA,IAAIf,iBAAiB3B,oBAAoB;QACvC,MAAM4B,OAAO1B,0BAA0ByB,MAAMO,IAAI,IAAIP,MAAMO,IAAI,GAAG;QAClE,OAAO;YAACN;YAAMC,SAASF,MAAME,OAAO,IAAID;QAAI;IAC9C;IACA,OAAO;QAACA,MAAM;QAAWC,SAASF,iBAAiBc,QAAQd,MAAME,OAAO,GAAGc,OAAOhB;IAAM;AAC1F;AAEA,SAASM,oBAAoBN,KAAc;IACzC,OAAOA,iBAAiBc,QAAQd,MAAME,OAAO,GAAGc,OAAOhB;AACzD"}
1
+ {"version":3,"sources":["../../../src/temporal/workflows/definition-sync.ts"],"sourcesContent":["import {ActivityFailure, ApplicationFailure, proxyActivities} from '@temporalio/workflow';\nimport {\n type DefinitionSyncErrorCode,\n isDefinitionSyncErrorCode,\n} from '#core/entities/sync-state.js';\nimport type {createDefinitionSyncActivities} from '../activities/index.js';\n\nexport interface DefinitionSyncWorkflowInput {\n projectId: string;\n workspaceId: string;\n sourceConnectionId: string;\n sourceExternalRepositoryId: string;\n sourceRef?: string | undefined;\n sourceCommitSha?: string | undefined;\n}\n\nexport interface DefinitionSyncWorkflowResult {\n sourceRef: string;\n appliedCount: number;\n deletedCount: number;\n}\n\nconst PROVIDER_RETRY = {\n initialInterval: '5 seconds',\n backoffCoefficient: 2,\n maximumInterval: '1 minute',\n maximumAttempts: 5,\n} as const;\n\nconst DB_RETRY = {\n initialInterval: '1 second',\n backoffCoefficient: 2,\n maximumInterval: '15 seconds',\n maximumAttempts: 5,\n} as const;\n\nconst {prepareDefinitionSync, discoverDefinitionWorkflows, fetchAndApplyDefinitionWorkflows} =\n proxyActivities<ReturnType<typeof createDefinitionSyncActivities>>({\n startToCloseTimeout: '5 minutes',\n heartbeatTimeout: '30 seconds',\n retry: PROVIDER_RETRY,\n });\n\nconst {markDefinitionSyncSucceeded, markDefinitionSyncFailed} = proxyActivities<\n ReturnType<typeof createDefinitionSyncActivities>\n>({\n startToCloseTimeout: '30 seconds',\n retry: DB_RETRY,\n});\n\nexport async function definitionSyncWorkflow(\n input: DefinitionSyncWorkflowInput,\n): Promise<DefinitionSyncWorkflowResult> {\n let sourceRef: string | null = null;\n\n try {\n const prepared = await prepareDefinitionSync(input);\n sourceRef = prepared.sourceRef;\n\n const source = {\n ...input,\n sourceRef: prepared.sourceRef,\n sourceCommitSha: prepared.sourceCommitSha,\n };\n const {paths} = await discoverDefinitionWorkflows(source);\n const applied = await fetchAndApplyDefinitionWorkflows({...source, paths});\n\n await markDefinitionSyncSucceeded({...source, warnings: applied.warnings});\n\n return {\n sourceRef,\n appliedCount: applied.appliedCount,\n deletedCount: applied.deletedCount,\n };\n } catch (error) {\n const {code, message} = classifyWorkflowError(error);\n try {\n await markDefinitionSyncFailed({...input, sourceRef, code, message});\n } catch (markFailedError) {\n const failureOptions = {\n message: `Definition sync failed with ${code}: ${message}; additionally failed to persist failure state: ${formatWorkflowError(markFailedError)}`,\n type: 'definition-sync-failure-persistence-failed',\n nonRetryable: true,\n details: [\n {\n syncFailureCode: code,\n syncFailureMessage: message,\n failurePersistenceMessage: formatWorkflowError(markFailedError),\n },\n ],\n };\n throw ApplicationFailure.create(\n error instanceof Error ? {...failureOptions, cause: error} : failureOptions,\n );\n }\n throw error;\n }\n}\n\nexport function classifyWorkflowError(error: unknown): {\n code: DefinitionSyncErrorCode;\n message: string;\n} {\n if (error instanceof ActivityFailure && error.cause instanceof ApplicationFailure) {\n return classifyWorkflowError(error.cause);\n }\n if (error instanceof ApplicationFailure) {\n const code = isDefinitionSyncErrorCode(error.type) ? error.type : 'unknown';\n return {code, message: error.message ?? code};\n }\n return {code: 'unknown', message: error instanceof Error ? error.message : String(error)};\n}\n\nfunction formatWorkflowError(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n"],"names":["ActivityFailure","ApplicationFailure","proxyActivities","isDefinitionSyncErrorCode","PROVIDER_RETRY","initialInterval","backoffCoefficient","maximumInterval","maximumAttempts","DB_RETRY","prepareDefinitionSync","discoverDefinitionWorkflows","fetchAndApplyDefinitionWorkflows","startToCloseTimeout","heartbeatTimeout","retry","markDefinitionSyncSucceeded","markDefinitionSyncFailed","definitionSyncWorkflow","input","sourceRef","prepared","source","sourceCommitSha","paths","applied","warnings","appliedCount","deletedCount","error","code","message","classifyWorkflowError","markFailedError","failureOptions","formatWorkflowError","type","nonRetryable","details","syncFailureCode","syncFailureMessage","failurePersistenceMessage","create","Error","cause","String"],"mappings":"AAAA,SAAQA,eAAe,EAAEC,kBAAkB,EAAEC,eAAe,QAAO,uBAAuB;AAC1F,SAEEC,yBAAyB,QACpB,+BAA+B;AAkBtC,MAAMC,iBAAiB;IACrBC,iBAAiB;IACjBC,oBAAoB;IACpBC,iBAAiB;IACjBC,iBAAiB;AACnB;AAEA,MAAMC,WAAW;IACfJ,iBAAiB;IACjBC,oBAAoB;IACpBC,iBAAiB;IACjBC,iBAAiB;AACnB;AAEA,MAAM,EAACE,qBAAqB,EAAEC,2BAA2B,EAAEC,gCAAgC,EAAC,GAC1FV,gBAAmE;IACjEW,qBAAqB;IACrBC,kBAAkB;IAClBC,OAAOX;AACT;AAEF,MAAM,EAACY,2BAA2B,EAAEC,wBAAwB,EAAC,GAAGf,gBAE9D;IACAW,qBAAqB;IACrBE,OAAON;AACT;AAEA,OAAO,eAAeS,uBACpBC,KAAkC;IAElC,IAAIC,YAA2B;IAE/B,IAAI;QACF,MAAMC,WAAW,MAAMX,sBAAsBS;QAC7CC,YAAYC,SAASD,SAAS;QAE9B,MAAME,SAAS;YACb,GAAGH,KAAK;YACRC,WAAWC,SAASD,SAAS;YAC7BG,iBAAiBF,SAASE,eAAe;QAC3C;QACA,MAAM,EAACC,KAAK,EAAC,GAAG,MAAMb,4BAA4BW;QAClD,MAAMG,UAAU,MAAMb,iCAAiC;YAAC,GAAGU,MAAM;YAAEE;QAAK;QAExE,MAAMR,4BAA4B;YAAC,GAAGM,MAAM;YAAEI,UAAUD,QAAQC,QAAQ;QAAA;QAExE,OAAO;YACLN;YACAO,cAAcF,QAAQE,YAAY;YAClCC,cAAcH,QAAQG,YAAY;QACpC;IACF,EAAE,OAAOC,OAAO;QACd,MAAM,EAACC,IAAI,EAAEC,OAAO,EAAC,GAAGC,sBAAsBH;QAC9C,IAAI;YACF,MAAMZ,yBAAyB;gBAAC,GAAGE,KAAK;gBAAEC;gBAAWU;gBAAMC;YAAO;QACpE,EAAE,OAAOE,iBAAiB;YACxB,MAAMC,iBAAiB;gBACrBH,SAAS,CAAC,4BAA4B,EAAED,KAAK,EAAE,EAAEC,QAAQ,gDAAgD,EAAEI,oBAAoBF,kBAAkB;gBACjJG,MAAM;gBACNC,cAAc;gBACdC,SAAS;oBACP;wBACEC,iBAAiBT;wBACjBU,oBAAoBT;wBACpBU,2BAA2BN,oBAAoBF;oBACjD;iBACD;YACH;YACA,MAAMhC,mBAAmByC,MAAM,CAC7Bb,iBAAiBc,QAAQ;gBAAC,GAAGT,cAAc;gBAAEU,OAAOf;YAAK,IAAIK;QAEjE;QACA,MAAML;IACR;AACF;AAEA,OAAO,SAASG,sBAAsBH,KAAc;IAIlD,IAAIA,iBAAiB7B,mBAAmB6B,MAAMe,KAAK,YAAY3C,oBAAoB;QACjF,OAAO+B,sBAAsBH,MAAMe,KAAK;IAC1C;IACA,IAAIf,iBAAiB5B,oBAAoB;QACvC,MAAM6B,OAAO3B,0BAA0B0B,MAAMO,IAAI,IAAIP,MAAMO,IAAI,GAAG;QAClE,OAAO;YAACN;YAAMC,SAASF,MAAME,OAAO,IAAID;QAAI;IAC9C;IACA,OAAO;QAACA,MAAM;QAAWC,SAASF,iBAAiBc,QAAQd,MAAME,OAAO,GAAGc,OAAOhB;IAAM;AAC1F;AAEA,SAASM,oBAAoBN,KAAc;IACzC,OAAOA,iBAAiBc,QAAQd,MAAME,OAAO,GAAGc,OAAOhB;AACzD"}