PSA/shared/workflow/runtime/schemas/integrationEventSchemas.ts
Hermes 284313f908
Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

124 lines
5.2 KiB
TypeScript

import { z } from 'zod';
import { BaseDomainEventPayloadSchema, uuidSchema } from './commonEventPayloadSchemas';
const integrationIdSchema = uuidSchema('Integration ID');
const connectionIdSchema = uuidSchema('Connection ID');
const userIdSchema = uuidSchema('User ID');
export const integrationSyncStartedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
integrationId: integrationIdSchema,
provider: z.string().min(1),
connectionId: connectionIdSchema.optional(),
syncId: z.string().min(1),
scope: z.string().optional(),
initiatedByUserId: userIdSchema.optional(),
startedAt: z.string().datetime().optional(),
}).describe('Payload for INTEGRATION_SYNC_STARTED');
export type IntegrationSyncStartedEventPayload = z.infer<typeof integrationSyncStartedEventPayloadSchema>;
export const integrationSyncCompletedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
integrationId: integrationIdSchema,
provider: z.string().min(1),
connectionId: connectionIdSchema.optional(),
syncId: z.string().min(1),
startedAt: z.string().datetime().optional(),
completedAt: z.string().datetime().optional(),
durationMs: z.number().int().nonnegative().optional(),
summary: z
.object({
created: z.number().int().nonnegative().optional(),
updated: z.number().int().nonnegative().optional(),
deleted: z.number().int().nonnegative().optional(),
skipped: z.number().int().nonnegative().optional(),
})
.optional(),
warnings: z.array(z.string()).optional(),
}).describe('Payload for INTEGRATION_SYNC_COMPLETED');
export type IntegrationSyncCompletedEventPayload = z.infer<typeof integrationSyncCompletedEventPayloadSchema>;
export const integrationSyncFailedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
integrationId: integrationIdSchema,
provider: z.string().min(1),
connectionId: connectionIdSchema.optional(),
syncId: z.string().min(1),
startedAt: z.string().datetime().optional(),
failedAt: z.string().datetime().optional(),
durationMs: z.number().int().nonnegative().optional(),
errorCode: z.string().optional(),
errorMessage: z.string().min(1),
retryable: z.boolean().optional(),
}).describe('Payload for INTEGRATION_SYNC_FAILED');
export type IntegrationSyncFailedEventPayload = z.infer<typeof integrationSyncFailedEventPayloadSchema>;
export const integrationWebhookReceivedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
integrationId: integrationIdSchema,
provider: z.string().min(1),
connectionId: connectionIdSchema.optional(),
webhookId: z.string().min(1),
eventName: z.string().min(1),
receivedAt: z.string().datetime().optional(),
rawPayloadRef: z.string().optional(),
}).describe('Payload for INTEGRATION_WEBHOOK_RECEIVED');
export type IntegrationWebhookReceivedEventPayload = z.infer<typeof integrationWebhookReceivedEventPayloadSchema>;
export const integrationConnectedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
integrationId: integrationIdSchema,
provider: z.string().min(1),
connectionId: connectionIdSchema,
connectedAt: z.string().datetime().optional(),
connectedByUserId: userIdSchema.optional(),
}).describe('Payload for INTEGRATION_CONNECTED');
export type IntegrationConnectedEventPayload = z.infer<typeof integrationConnectedEventPayloadSchema>;
export const integrationDisconnectedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
integrationId: integrationIdSchema,
provider: z.string().min(1),
connectionId: connectionIdSchema,
disconnectedAt: z.string().datetime().optional(),
disconnectedByUserId: userIdSchema.optional(),
reason: z.string().optional(),
}).describe('Payload for INTEGRATION_DISCONNECTED');
export type IntegrationDisconnectedEventPayload = z.infer<typeof integrationDisconnectedEventPayloadSchema>;
export const integrationTokenExpiringEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
integrationId: integrationIdSchema,
provider: z.string().min(1),
connectionId: connectionIdSchema,
expiresAt: z.string().datetime(),
daysUntilExpiry: z.number().int().nonnegative(),
notifiedAt: z.string().datetime().optional(),
}).describe('Payload for INTEGRATION_TOKEN_EXPIRING');
export type IntegrationTokenExpiringEventPayload = z.infer<typeof integrationTokenExpiringEventPayloadSchema>;
export const integrationTokenRefreshFailedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
integrationId: integrationIdSchema,
provider: z.string().min(1),
connectionId: connectionIdSchema,
failedAt: z.string().datetime().optional(),
errorCode: z.string().optional(),
errorMessage: z.string().min(1),
retryable: z.boolean().optional(),
}).describe('Payload for INTEGRATION_TOKEN_REFRESH_FAILED');
export type IntegrationTokenRefreshFailedEventPayload = z.infer<
typeof integrationTokenRefreshFailedEventPayloadSchema
>;
export const externalMappingChangedEventPayloadSchema = BaseDomainEventPayloadSchema.extend({
provider: z.string().min(1),
mappingType: z.string().min(1),
mappingId: z.string().min(1),
changedAt: z.string().datetime().optional(),
previousValue: z.unknown().optional(),
newValue: z.unknown().optional(),
}).describe('Payload for EXTERNAL_MAPPING_CHANGED');
export type ExternalMappingChangedEventPayload = z.infer<typeof externalMappingChangedEventPayloadSchema>;