@shipfox/api-definitions 5.0.0 → 6.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 (92) hide show
  1. package/.turbo/turbo-build.log +4 -4
  2. package/CHANGELOG.md +36 -0
  3. package/dist/core/entities/workflow-definition.d.ts +2 -5
  4. package/dist/core/entities/workflow-definition.d.ts.map +1 -1
  5. package/dist/core/entities/workflow-definition.js.map +1 -1
  6. package/dist/core/entities/workflow-model.d.ts +1 -137
  7. package/dist/core/entities/workflow-model.d.ts.map +1 -1
  8. package/dist/core/entities/workflow-model.js.map +1 -1
  9. package/dist/core/integrations.d.ts +25 -0
  10. package/dist/core/integrations.d.ts.map +1 -0
  11. package/dist/core/integrations.js +30 -0
  12. package/dist/core/integrations.js.map +1 -0
  13. package/dist/core/sync-definitions.d.ts +2 -2
  14. package/dist/core/sync-definitions.d.ts.map +1 -1
  15. package/dist/core/sync-definitions.js +23 -14
  16. package/dist/core/sync-definitions.js.map +1 -1
  17. package/dist/core/workflow-model/constants.d.ts +1 -1
  18. package/dist/core/workflow-model/constants.d.ts.map +1 -1
  19. package/dist/core/workflow-model/constants.js +1 -1
  20. package/dist/core/workflow-model/constants.js.map +1 -1
  21. package/dist/core/workflow-model/normalize-job-checkout.d.ts +2 -2
  22. package/dist/core/workflow-model/normalize-job-checkout.d.ts.map +1 -1
  23. package/dist/core/workflow-model/normalize-job-checkout.js +2 -6
  24. package/dist/core/workflow-model/normalize-job-checkout.js.map +1 -1
  25. package/dist/core/workflow-model/normalize-job-success.d.ts +2 -1
  26. package/dist/core/workflow-model/normalize-job-success.d.ts.map +1 -1
  27. package/dist/core/workflow-model/normalize-job-success.js +2 -1
  28. package/dist/core/workflow-model/normalize-job-success.js.map +1 -1
  29. package/dist/db/db.d.ts +2 -2
  30. package/dist/db/schema/sync-states.d.ts +1 -1
  31. package/dist/index.d.ts +5 -7
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +10 -11
  34. package/dist/index.js.map +1 -1
  35. package/dist/presentation/index.d.ts +1 -1
  36. package/dist/presentation/index.d.ts.map +1 -1
  37. package/dist/presentation/index.js +1 -1
  38. package/dist/presentation/index.js.map +1 -1
  39. package/dist/presentation/inter-module.d.ts +4 -0
  40. package/dist/presentation/inter-module.d.ts.map +1 -0
  41. package/dist/presentation/inter-module.js +25 -0
  42. package/dist/presentation/inter-module.js.map +1 -0
  43. package/dist/presentation/routes/create-definition.d.ts +5 -6
  44. package/dist/presentation/routes/create-definition.d.ts.map +1 -1
  45. package/dist/presentation/routes/create-definition.js +7 -19
  46. package/dist/presentation/routes/create-definition.js.map +1 -1
  47. package/dist/presentation/routes/get-definition.d.ts +2 -1
  48. package/dist/presentation/routes/get-definition.d.ts.map +1 -1
  49. package/dist/presentation/routes/get-definition.js +26 -35
  50. package/dist/presentation/routes/get-definition.js.map +1 -1
  51. package/dist/presentation/routes/index.d.ts +1 -2
  52. package/dist/presentation/routes/index.d.ts.map +1 -1
  53. package/dist/presentation/routes/index.js +5 -6
  54. package/dist/presentation/routes/index.js.map +1 -1
  55. package/dist/presentation/routes/list-definitions.d.ts +2 -1
  56. package/dist/presentation/routes/list-definitions.d.ts.map +1 -1
  57. package/dist/presentation/routes/list-definitions.js +36 -45
  58. package/dist/presentation/routes/list-definitions.js.map +1 -1
  59. package/dist/presentation/routes/project-access.d.ts +10 -0
  60. package/dist/presentation/routes/project-access.d.ts.map +1 -0
  61. package/dist/presentation/routes/project-access.js +17 -0
  62. package/dist/presentation/routes/project-access.js.map +1 -0
  63. package/dist/temporal/activities/sync-activities.d.ts +3 -9
  64. package/dist/temporal/activities/sync-activities.d.ts.map +1 -1
  65. package/dist/temporal/activities/sync-activities.js +6 -10
  66. package/dist/temporal/activities/sync-activities.js.map +1 -1
  67. package/dist/tsconfig.test.tsbuildinfo +1 -1
  68. package/package.json +16 -14
  69. package/src/core/entities/workflow-definition.ts +3 -6
  70. package/src/core/entities/workflow-model.ts +1 -162
  71. package/src/core/integrations.ts +39 -0
  72. package/src/core/sync-definitions.test.ts +19 -17
  73. package/src/core/sync-definitions.ts +26 -20
  74. package/src/core/workflow-model/constants.ts +1 -1
  75. package/src/core/workflow-model/normalize-job-checkout.ts +2 -5
  76. package/src/core/workflow-model/normalize-job-success.ts +2 -1
  77. package/src/db/definitions.test.ts +68 -7
  78. package/src/index.ts +12 -31
  79. package/src/presentation/index.ts +1 -1
  80. package/src/presentation/inter-module.ts +25 -0
  81. package/src/presentation/routes/create-definition.test.ts +59 -63
  82. package/src/presentation/routes/create-definition.ts +15 -34
  83. package/src/presentation/routes/get-definition.test.ts +14 -8
  84. package/src/presentation/routes/get-definition.ts +25 -28
  85. package/src/presentation/routes/index.test.ts +8 -1
  86. package/src/presentation/routes/index.ts +5 -7
  87. package/src/presentation/routes/list-definitions.test.ts +8 -7
  88. package/src/presentation/routes/list-definitions.ts +33 -36
  89. package/src/presentation/routes/project-access.ts +16 -0
  90. package/src/temporal/activities/sync-activities.test.ts +9 -6
  91. package/src/temporal/activities/sync-activities.ts +14 -29
  92. package/tsconfig.build.tsbuildinfo +1 -1
@@ -0,0 +1,17 @@
1
+ import { requireWorkspaceAccess } from '@shipfox/api-auth-context';
2
+ import { ClientError } from '@shipfox/node-fastify';
3
+ export async function requireProjectAccess(request, projectId, projects) {
4
+ const { project } = await projects.getProjectById({
5
+ projectId
6
+ });
7
+ if (project === null) throw new ClientError('Project not found', 'project-not-found', {
8
+ status: 404
9
+ });
10
+ requireWorkspaceAccess({
11
+ request,
12
+ workspaceId: project.workspaceId
13
+ });
14
+ return project;
15
+ }
16
+
17
+ //# sourceMappingURL=project-access.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/presentation/routes/project-access.ts"],"sourcesContent":["import {requireWorkspaceAccess} from '@shipfox/api-auth-context';\nimport type {ProjectsModuleClient} from '@shipfox/api-projects-dto';\nimport {ClientError} from '@shipfox/node-fastify';\nimport type {FastifyRequest} from 'fastify';\n\nexport async function requireProjectAccess(\n request: FastifyRequest,\n projectId: string,\n projects: ProjectsModuleClient,\n) {\n const {project} = await projects.getProjectById({projectId});\n if (project === null)\n throw new ClientError('Project not found', 'project-not-found', {status: 404});\n requireWorkspaceAccess({request, workspaceId: project.workspaceId});\n return project;\n}\n"],"names":["requireWorkspaceAccess","ClientError","requireProjectAccess","request","projectId","projects","project","getProjectById","status","workspaceId"],"mappings":"AAAA,SAAQA,sBAAsB,QAAO,4BAA4B;AAEjE,SAAQC,WAAW,QAAO,wBAAwB;AAGlD,OAAO,eAAeC,qBACpBC,OAAuB,EACvBC,SAAiB,EACjBC,QAA8B;IAE9B,MAAM,EAACC,OAAO,EAAC,GAAG,MAAMD,SAASE,cAAc,CAAC;QAACH;IAAS;IAC1D,IAAIE,YAAY,MACd,MAAM,IAAIL,YAAY,qBAAqB,qBAAqB;QAACO,QAAQ;IAAG;IAC9ER,uBAAuB;QAACG;QAASM,aAAaH,QAAQG,WAAW;IAAA;IACjE,OAAOH;AACT"}
@@ -1,5 +1,6 @@
1
- import type { AgentToolSelectionCatalogs, IntegrationSourceControlService, LoadWorkspaceConnectionSnapshot } from '@shipfox/api-integration-core';
1
+ import type { IntegrationsModuleClient } from '@shipfox/api-integration-core-dto';
2
2
  import type { DefinitionSyncErrorCode } from '#core/entities/sync-state.js';
3
+ import type { DefinitionsSourceControl } from '#core/integrations.js';
3
4
  export interface SyncWorkflowInput {
4
5
  projectId: string;
5
6
  workspaceId: string;
@@ -30,14 +31,7 @@ export interface FetchAndApplyActivityResult {
30
31
  appliedCount: number;
31
32
  deletedCount: number;
32
33
  }
33
- export interface DefinitionSyncIntegrationValidationOptions {
34
- agentToolSelectionCatalogs: AgentToolSelectionCatalogs;
35
- loadWorkspaceConnectionSnapshot: LoadWorkspaceConnectionSnapshot;
36
- getIntegrationConnectionById: (id: string) => Promise<{
37
- slug: string;
38
- } | undefined>;
39
- }
40
- export declare function createDefinitionSyncActivities(sourceControl: IntegrationSourceControlService, integrationValidation?: DefinitionSyncIntegrationValidationOptions | undefined): {
34
+ export declare function createDefinitionSyncActivities(sourceControl: DefinitionsSourceControl, integrations?: IntegrationsModuleClient | undefined): {
41
35
  prepareDefinitionSync: (input: SyncWorkflowInput) => Promise<PrepareSyncResult>;
42
36
  discoverDefinitionWorkflows: (input: SyncRefScopedInput) => Promise<DiscoverWorkflowsActivityResult>;
43
37
  fetchAndApplyDefinitionWorkflows: (input: FetchAndApplyActivityInput) => Promise<FetchAndApplyActivityResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"sync-activities.d.ts","sourceRoot":"","sources":["../../../src/temporal/activities/sync-activities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,0BAA0B,EAC1B,+BAA+B,EAC/B,+BAA+B,EAChC,MAAM,+BAA+B,CAAC;AAGvC,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AAU1E,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0BAA0B,EAAE,MAAM,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IAC3D,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA2B,SAAQ,kBAAkB;IACpE,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,2BAA4B,SAAQ,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC;IACvF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,uBAAuB,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,+BAA+B;IAC9C,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,2BAA2B;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,0CAA0C;IACzD,0BAA0B,EAAE,0BAA0B,CAAC;IACvD,+BAA+B,EAAE,+BAA+B,CAAC;IACjE,4BAA4B,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,GAAG,SAAS,CAAC,CAAC;CACnF;AAED,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,+BAA+B,EAC9C,qBAAqB,CAAC,EAAE,0CAA0C,GAAG,SAAS;mCAgBrE,iBAAiB,KACvB,OAAO,CAAC,iBAAiB,CAAC;yCAuBpB,kBAAkB,KACxB,OAAO,CAAC,+BAA+B,CAAC;8CAgBlC,0BAA0B,KAChC,OAAO,CAAC,2BAA2B,CAAC;yCAyCkB,kBAAkB,KAAG,OAAO,CAAC,IAAI,CAAC;sCAgBlF,2BAA2B,KACjC,OAAO,CAAC,IAAI,CAAC;EAxGjB"}
1
+ {"version":3,"file":"sync-activities.d.ts","sourceRoot":"","sources":["../../../src/temporal/activities/sync-activities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,mCAAmC,CAAC;AAGhF,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AAQ1E,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,uBAAuB,CAAC;AAIpE,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0BAA0B,EAAE,MAAM,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IAC3D,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA2B,SAAQ,kBAAkB;IACpE,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,2BAA4B,SAAQ,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC;IACvF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,uBAAuB,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,+BAA+B;IAC9C,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,2BAA2B;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,wBAAwB,EACvC,YAAY,CAAC,EAAE,wBAAwB,GAAG,SAAS;mCAa1C,iBAAiB,KACvB,OAAO,CAAC,iBAAiB,CAAC;yCAuBpB,kBAAkB,KACxB,OAAO,CAAC,+BAA+B,CAAC;8CAgBlC,0BAA0B,KAChC,OAAO,CAAC,2BAA2B,CAAC;yCAqCkB,kBAAkB,KAAG,OAAO,CAAC,IAAI,CAAC;sCAgBlF,2BAA2B,KACjC,OAAO,CAAC,IAAI,CAAC;EApGjB"}
@@ -1,12 +1,13 @@
1
1
  import { Context } from '@temporalio/activity';
2
2
  import { ApplicationFailure } from '@temporalio/common';
3
3
  import { classifySyncFailure, discoverWorkflowFiles, fetchAndParseWorkflows, resolveSyncSource, UNRESOLVED_SYNC_REF } from '#core/index.js';
4
+ import { loadIntegrationValidationContext } from '#core/integrations.js';
4
5
  import { applyVcsDefinitionsBatch, markDefinitionSyncState } from '#db/index.js';
5
- export function createDefinitionSyncActivities(sourceControl, integrationValidation) {
6
+ export function createDefinitionSyncActivities(sourceControl, integrations) {
6
7
  return {
7
8
  prepareDefinitionSync: createPrepareDefinitionSyncActivity(sourceControl),
8
9
  discoverDefinitionWorkflows: createDiscoverDefinitionWorkflowsActivity(sourceControl),
9
- fetchAndApplyDefinitionWorkflows: createFetchAndApplyActivity(sourceControl, integrationValidation),
10
+ fetchAndApplyDefinitionWorkflows: createFetchAndApplyActivity(sourceControl, integrations),
10
11
  markDefinitionSyncSucceeded: createMarkSyncSucceededActivity(),
11
12
  markDefinitionSyncFailed: createMarkSyncFailedActivity()
12
13
  };
@@ -47,7 +48,7 @@ function createDiscoverDefinitionWorkflowsActivity(sourceControl) {
47
48
  });
48
49
  };
49
50
  }
50
- function createFetchAndApplyActivity(sourceControl, integrationValidation) {
51
+ function createFetchAndApplyActivity(sourceControl, integrations) {
51
52
  return async function fetchAndApplyDefinitionWorkflows(input) {
52
53
  return await runWithPermanentTranslation(async ()=>{
53
54
  const definitions = await fetchAndParseWorkflows({
@@ -57,13 +58,8 @@ function createFetchAndApplyActivity(sourceControl, integrationValidation) {
57
58
  onProgress: (path)=>Context.current().heartbeat({
58
59
  path
59
60
  }),
60
- loadIntegrationValidationContext: integrationValidation === undefined ? undefined : async ()=>{
61
- const sourceConnection = await integrationValidation.getIntegrationConnectionById(input.sourceConnectionId);
62
- return {
63
- agentToolSelectionCatalogs: integrationValidation.agentToolSelectionCatalogs,
64
- workspaceConnectionSnapshot: await integrationValidation.loadWorkspaceConnectionSnapshot(input.workspaceId),
65
- defaultConnectionSlug: sourceConnection?.slug
66
- };
61
+ loadIntegrationValidationContext: integrations === undefined ? undefined : async ()=>{
62
+ return await loadIntegrationValidationContext(integrations, input.workspaceId, input.sourceConnectionId);
67
63
  }
68
64
  });
69
65
  return await applyVcsDefinitionsBatch({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/temporal/activities/sync-activities.ts"],"sourcesContent":["import type {\n AgentToolSelectionCatalogs,\n IntegrationSourceControlService,\n LoadWorkspaceConnectionSnapshot,\n} from '@shipfox/api-integration-core';\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 {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 DefinitionSyncIntegrationValidationOptions {\n agentToolSelectionCatalogs: AgentToolSelectionCatalogs;\n loadWorkspaceConnectionSnapshot: LoadWorkspaceConnectionSnapshot;\n getIntegrationConnectionById: (id: string) => Promise<{slug: string} | undefined>;\n}\n\nexport function createDefinitionSyncActivities(\n sourceControl: IntegrationSourceControlService,\n integrationValidation?: DefinitionSyncIntegrationValidationOptions | undefined,\n) {\n return {\n prepareDefinitionSync: createPrepareDefinitionSyncActivity(sourceControl),\n discoverDefinitionWorkflows: createDiscoverDefinitionWorkflowsActivity(sourceControl),\n fetchAndApplyDefinitionWorkflows: createFetchAndApplyActivity(\n sourceControl,\n integrationValidation,\n ),\n markDefinitionSyncSucceeded: createMarkSyncSucceededActivity(),\n markDefinitionSyncFailed: createMarkSyncFailedActivity(),\n };\n}\n\nfunction createPrepareDefinitionSyncActivity(sourceControl: IntegrationSourceControlService) {\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(sourceControl: IntegrationSourceControlService) {\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 });\n });\n };\n}\n\nfunction createFetchAndApplyActivity(\n sourceControl: IntegrationSourceControlService,\n integrationValidation?: DefinitionSyncIntegrationValidationOptions | 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 onProgress: (path) => Context.current().heartbeat({path}),\n loadIntegrationValidationContext:\n integrationValidation === undefined\n ? undefined\n : async () => {\n const sourceConnection = await integrationValidation.getIntegrationConnectionById(\n input.sourceConnectionId,\n );\n return {\n agentToolSelectionCatalogs: integrationValidation.agentToolSelectionCatalogs,\n workspaceConnectionSnapshot:\n await integrationValidation.loadWorkspaceConnectionSnapshot(input.workspaceId),\n defaultConnectionSlug: sourceConnection?.slug,\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 if (!failure.retryable) {\n throw ApplicationFailure.nonRetryable(failure.message, failure.code);\n }\n throw ApplicationFailure.retryable(failure.message, failure.code);\n }\n}\n"],"names":["Context","ApplicationFailure","classifySyncFailure","discoverWorkflowFiles","fetchAndParseWorkflows","resolveSyncSource","UNRESOLVED_SYNC_REF","applyVcsDefinitionsBatch","markDefinitionSyncState","createDefinitionSyncActivities","sourceControl","integrationValidation","prepareDefinitionSync","createPrepareDefinitionSyncActivity","discoverDefinitionWorkflows","createDiscoverDefinitionWorkflowsActivity","fetchAndApplyDefinitionWorkflows","createFetchAndApplyActivity","markDefinitionSyncSucceeded","createMarkSyncSucceededActivity","markDefinitionSyncFailed","createMarkSyncFailedActivity","input","runWithPermanentTranslation","sourceRef","ref","projectId","sourceConnectionId","sourceExternalRepositoryId","status","lastErrorCode","lastErrorMessage","startedAt","Date","finishedAt","sourceCommitSha","definitions","onProgress","path","current","heartbeat","loadIntegrationValidationContext","undefined","sourceConnection","getIntegrationConnectionById","agentToolSelectionCatalogs","workspaceConnectionSnapshot","loadWorkspaceConnectionSnapshot","workspaceId","defaultConnectionSlug","slug","upserts","map","entry","configPath","name","document","definition","model","sourceSnapshot","contentHash","code","message","operation","error","failure","retryable","nonRetryable"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/temporal/activities/sync-activities.ts"],"sourcesContent":["import type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto';\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 function createDefinitionSyncActivities(\n sourceControl: DefinitionsSourceControl,\n integrations?: IntegrationsModuleClient | undefined,\n) {\n return {\n prepareDefinitionSync: createPrepareDefinitionSyncActivity(sourceControl),\n discoverDefinitionWorkflows: createDiscoverDefinitionWorkflowsActivity(sourceControl),\n fetchAndApplyDefinitionWorkflows: createFetchAndApplyActivity(sourceControl, integrations),\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(sourceControl: DefinitionsSourceControl) {\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 });\n });\n };\n}\n\nfunction createFetchAndApplyActivity(\n sourceControl: DefinitionsSourceControl,\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 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 if (!failure.retryable) {\n throw ApplicationFailure.nonRetryable(failure.message, failure.code);\n }\n throw ApplicationFailure.retryable(failure.message, failure.code);\n }\n}\n"],"names":["Context","ApplicationFailure","classifySyncFailure","discoverWorkflowFiles","fetchAndParseWorkflows","resolveSyncSource","UNRESOLVED_SYNC_REF","loadIntegrationValidationContext","applyVcsDefinitionsBatch","markDefinitionSyncState","createDefinitionSyncActivities","sourceControl","integrations","prepareDefinitionSync","createPrepareDefinitionSyncActivity","discoverDefinitionWorkflows","createDiscoverDefinitionWorkflowsActivity","fetchAndApplyDefinitionWorkflows","createFetchAndApplyActivity","markDefinitionSyncSucceeded","createMarkSyncSucceededActivity","markDefinitionSyncFailed","createMarkSyncFailedActivity","input","runWithPermanentTranslation","sourceRef","ref","projectId","sourceConnectionId","sourceExternalRepositoryId","status","lastErrorCode","lastErrorMessage","startedAt","Date","finishedAt","sourceCommitSha","definitions","onProgress","path","current","heartbeat","undefined","workspaceId","upserts","map","entry","configPath","name","document","definition","model","sourceSnapshot","contentHash","code","message","operation","error","failure","retryable","nonRetryable"],"mappings":"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"}