import { CollectionModuleConfigNetwork } from './collection-module-config'; export interface NetworkPath { path_segments: string[]; } export interface NetworkPathWithUrl extends NetworkPath { signed_url: string; } export interface NetworkManualTransactionWorkflow { key: string; workflow_schema: Record[]; } export interface NetworkCollectionModuleDefinitionsWorkflows { manual_transaction_workflows: ManualTransactionWorkflow[]; } export interface NetworkCollectionModuleDefinitionRequest { root_config: CollectionModuleConfigNetwork; workflows: NetworkCollectionModuleDefinitionsWorkflows; lambda_package_s3_key: string; } export interface NetworkCollectionModuleDefinitionRequestCodeBased { root_config: CollectionModuleConfigNetwork; workflows: NetworkCollectionModuleDefinitionsWorkflows; code: string; paths: NetworkPath[]; } export interface NetworkCollectionModuleDefinitionResponse { organization_id: string; collection_module_name: string; collection_module_definition_id: string; collection_module_key: string; code?: string; // Optional - not returned with Lambda package flow paths?: NetworkPath[]; // Optional - not returned with Lambda package flow root_config: CollectionModuleConfigNetwork; workflows: NetworkCollectionModuleDefinitionsWorkflows; lambda_package_s3_key?: string; } export interface CollectionModuleCodeFileBase { pathSegments: string[]; } export interface CollectionModuleCodeFileWithUrl extends CollectionModuleCodeFileBase { signedUrl: string; } export interface CollectionModuleCodeFileWithContent extends CollectionModuleCodeFileBase { content: string; } export type CollectionModuleCodeFileWithContentAndUrl = CollectionModuleCodeFileWithContent & CollectionModuleCodeFileWithUrl; export interface CollectionModuleDefinitionBase { collectionModuleKey: string; code: string; rootConfig: CollectionModuleConfigNetwork; workflows: CollectionModuleDefinitionWorkflows; } export interface ManualTransactionWorkflow { key: string; schema: Record[]; } export interface CollectionModuleDefinitionWorkflows { manualTransactionWorkflows: ManualTransactionWorkflow[]; } export interface CollectionModuleDefinitionRequest extends CollectionModuleDefinitionBase { codeFiles: CollectionModuleCodeFileWithContent[]; } export interface CollectionModuleDefinitionResponse extends CollectionModuleDefinitionBase { organizationId: string; collectionModuleName: string; collectionModuleDefinitionId: string; codeFiles: CollectionModuleCodeFileBase[]; } export const collectionModuleDefinitionFromNetwork = ( networkDefinition: NetworkCollectionModuleDefinitionResponse, ): CollectionModuleDefinitionResponse => { return { organizationId: networkDefinition.organization_id, collectionModuleName: networkDefinition.collection_module_name, collectionModuleDefinitionId: networkDefinition.collection_module_definition_id, collectionModuleKey: networkDefinition.collection_module_key, code: networkDefinition.code || '', // Default to empty string if not provided codeFiles: networkDefinition.paths?.map((path) => ({ pathSegments: path.path_segments, })) || [], // Default to empty array if not provided rootConfig: networkDefinition.root_config, workflows: { manualTransactionWorkflows: networkDefinition.workflows.manual_transaction_workflows, }, }; }; export const collectionModuleDefinitionToNetwork = ( definition: CollectionModuleDefinitionRequest, lambdaPackageS3Key: string, ): NetworkCollectionModuleDefinitionRequest => { return { root_config: definition.rootConfig, workflows: { manual_transaction_workflows: definition.workflows.manualTransactionWorkflows, }, lambda_package_s3_key: lambdaPackageS3Key, }; }; export const collectionModuleDefinitionToNetworkCodeBased = ( definition: CollectionModuleDefinitionRequest, ): NetworkCollectionModuleDefinitionRequestCodeBased => { return { root_config: definition.rootConfig, workflows: { manual_transaction_workflows: definition.workflows.manualTransactionWorkflows, }, code: definition.code, paths: definition.codeFiles.map((file) => ({ path_segments: file.pathSegments, })), }; };