import "reflect-metadata"; import { CoreTokens, instanceCachingFactory, PollingTriggerDedupWindow, container as globalContainer, } from "@codemation/core"; import { CredentialResolverFactory, DefaultExecutionContextFactory, EngineExecutionLimitsPolicy, InMemoryBinaryStorage, InMemoryRunDataFactory, } from "@codemation/core/bootstrap"; import type { BinaryStorage, CredentialSessionService, DependencyContainer } from "@codemation/core"; import { CodemationIdFactory } from "../infrastructure/ids/CodemationIdFactory"; import { InMemoryTriggerSetupStateRepository } from "../infrastructure/persistence/InMemoryTriggerSetupStateRepository"; import { InProcessTriggerInvoker } from "./InProcessTriggerInvoker"; export class TriggerRuntimeContainerFactory { constructor(private readonly binaryStorage: BinaryStorage = new InMemoryBinaryStorage()) {} create(credentialSessions: CredentialSessionService): DependencyContainer { const child = globalContainer.createChildContainer(); child.registerInstance(CoreTokens.NodeResolver, child); child.registerInstance(CoreTokens.CredentialSessionService, credentialSessions); child.registerInstance(CoreTokens.TriggerSetupStateRepository, new InMemoryTriggerSetupStateRepository()); const idFactory = new CodemationIdFactory(); child.registerInstance(CoreTokens.RunIdFactory, idFactory); child.registerInstance(CoreTokens.ActivationIdFactory, idFactory); child.registerInstance(CoreTokens.RunDataFactory, new InMemoryRunDataFactory()); child.registerInstance(CoreTokens.BinaryStorage, this.binaryStorage); child.registerInstance(CoreTokens.ExecutionContextFactory, new DefaultExecutionContextFactory(this.binaryStorage)); child.registerInstance(CoreTokens.EngineExecutionLimitsPolicy, new EngineExecutionLimitsPolicy()); child.registerInstance(PollingTriggerDedupWindow, new PollingTriggerDedupWindow()); child.register(CredentialResolverFactory, { useFactory: instanceCachingFactory( (dc) => new CredentialResolverFactory(dc.resolve(CoreTokens.CredentialSessionService)), ), }); child.registerSingleton(CoreTokens.TriggerInvoker, InProcessTriggerInvoker); return child; } }