Inject functions URL into logic function env (#22583)
<!-- This is an auto-generated description by cubic. --> <a href="https://cubic.dev/pr/twentyhq/twenty/pull/22583?utm_source=github" target="_blank" rel="noopener noreferrer" data-no-image-dialog="true"><picture><source media="(prefers-color-scheme: dark)" srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source media="(prefers-color-scheme: light)" srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img alt="Review in cubic" src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a> <!-- End of auto-generated description by cubic. -->
This commit is contained in:
+9
-1
@@ -2,14 +2,17 @@ import { Module } from '@nestjs/common';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
|
||||
import { ApplicationRegistrationVariableEntity } from 'src/engine/core-modules/application/application-registration-variable/application-registration-variable.entity';
|
||||
import { ApplicationModule } from 'src/engine/core-modules/application/application.module';
|
||||
import { EventLogEmitterModule } from 'src/engine/core-modules/event-logs/emit/event-log-emitter.module';
|
||||
import { EventLogLiveModule } from 'src/engine/core-modules/event-logs/live/event-log-live.module';
|
||||
import { TokenModule } from 'src/engine/core-modules/auth/token/token.module';
|
||||
import { BillingModule } from 'src/engine/core-modules/billing/billing.module';
|
||||
import { WorkspaceDomainsModule } from 'src/engine/core-modules/domain/workspace-domains/workspace-domains.module';
|
||||
import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module';
|
||||
import { LogicFunctionExecutorService } from 'src/engine/core-modules/logic-function/logic-function-executor/logic-function-executor.service';
|
||||
import { SecretEncryptionModule } from 'src/engine/core-modules/secret-encryption/secret-encryption.module';
|
||||
import { ThrottlerModule } from 'src/engine/core-modules/throttler/throttler.module';
|
||||
import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity';
|
||||
import { SubscriptionsModule } from 'src/engine/subscriptions/subscriptions.module';
|
||||
import { WorkspaceCacheModule } from 'src/engine/workspace-cache/workspace-cache.module';
|
||||
|
||||
@@ -24,7 +27,12 @@ import { WorkspaceCacheModule } from 'src/engine/workspace-cache/workspace-cache
|
||||
WorkspaceCacheModule,
|
||||
BillingModule,
|
||||
FeatureFlagModule,
|
||||
TypeOrmModule.forFeature([ApplicationRegistrationVariableEntity]),
|
||||
WorkspaceDomainsModule,
|
||||
ApplicationModule,
|
||||
TypeOrmModule.forFeature([
|
||||
ApplicationRegistrationVariableEntity,
|
||||
WorkspaceEntity,
|
||||
]),
|
||||
],
|
||||
providers: [LogicFunctionExecutorService],
|
||||
exports: [LogicFunctionExecutorService],
|
||||
|
||||
+41
@@ -5,6 +5,7 @@ import {
|
||||
DEFAULT_API_KEY_NAME,
|
||||
DEFAULT_API_URL_NAME,
|
||||
DEFAULT_APP_ACCESS_TOKEN_NAME,
|
||||
DEFAULT_FUNCTIONS_URL_NAME,
|
||||
} from 'twenty-shared/application';
|
||||
import { FeatureFlagKey } from 'twenty-shared/types';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
@@ -20,6 +21,7 @@ import {
|
||||
import { buildApplicationLogEnvelopes } from 'src/engine/core-modules/event-logs/producers/application-log/build-application-log-envelopes';
|
||||
import { parseApplicationLogLines } from 'src/engine/core-modules/event-logs/producers/application-log/parse-application-log-lines';
|
||||
import { ApplicationRegistrationVariableEntity } from 'src/engine/core-modules/application/application-registration-variable/application-registration-variable.entity';
|
||||
import { ApplicationService } from 'src/engine/core-modules/application/application.service';
|
||||
import type { FlatApplicationVariable } from 'src/engine/metadata-modules/flat-application-variable/types/flat-application-variable.type';
|
||||
import { FlatApplication } from 'src/engine/core-modules/application/types/flat-application.type';
|
||||
import { EventLogEmitterService } from 'src/engine/core-modules/event-logs/emit/event-log-emitter.service';
|
||||
@@ -28,6 +30,7 @@ import { ApplicationTokenService } from 'src/engine/core-modules/auth/token/serv
|
||||
import { NO_BILLING_SUBSCRIPTION } from 'src/engine/core-modules/billing/constants/no-billing-subscription.constant';
|
||||
import { BillingUsageService } from 'src/engine/core-modules/billing/services/billing-usage.service';
|
||||
import { BillingService } from 'src/engine/core-modules/billing/services/billing.service';
|
||||
import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service';
|
||||
import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service';
|
||||
import { LogicFunctionDriverFactory } from 'src/engine/core-modules/logic-function/logic-function-drivers/logic-function-driver.factory';
|
||||
import { buildEnvVar } from 'src/engine/core-modules/logic-function/logic-function-executor/utils/build-env-var';
|
||||
@@ -49,6 +52,7 @@ import { FlatLogicFunction } from 'src/engine/metadata-modules/logic-function/ty
|
||||
import { SubscriptionChannel } from 'src/engine/subscriptions/enums/subscription-channel.enum';
|
||||
import { SubscriptionService } from 'src/engine/subscriptions/subscription.service';
|
||||
import { EventLogLiveService } from 'src/engine/core-modules/event-logs/live/event-log-live.service';
|
||||
import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity';
|
||||
import { WorkspaceCacheService } from 'src/engine/workspace-cache/services/workspace-cache.service';
|
||||
import { WorkspaceEventEmitter } from 'src/engine/workspace-event-emitter/workspace-event-emitter';
|
||||
import { cleanServerUrl } from 'src/utils/clean-server-url';
|
||||
@@ -86,6 +90,10 @@ export class LogicFunctionExecutorService {
|
||||
private readonly billingService: BillingService,
|
||||
private readonly billingUsageService: BillingUsageService,
|
||||
private readonly featureFlagService: FeatureFlagService,
|
||||
private readonly workspaceDomainsService: WorkspaceDomainsService,
|
||||
private readonly applicationService: ApplicationService,
|
||||
@InjectRepository(WorkspaceEntity)
|
||||
private readonly workspaceRepository: Repository<WorkspaceEntity>,
|
||||
@InjectRepository(ApplicationRegistrationVariableEntity)
|
||||
private readonly applicationRegistrationVariableRepository: Repository<ApplicationRegistrationVariableEntity>,
|
||||
) {}
|
||||
@@ -321,6 +329,10 @@ export class LogicFunctionExecutorService {
|
||||
});
|
||||
|
||||
const baseUrl = cleanServerUrl(this.twentyConfigService.get('SERVER_URL'));
|
||||
const functionsBaseUrl = await this.buildFunctionsBaseUrl({
|
||||
workspaceId,
|
||||
flatApplication,
|
||||
});
|
||||
|
||||
const serverVariables = await this.buildServerVariableEnvMap(
|
||||
flatApplication.applicationRegistrationId,
|
||||
@@ -334,12 +346,41 @@ export class LogicFunctionExecutorService {
|
||||
[DEFAULT_API_URL_NAME]: baseUrl ?? '',
|
||||
[DEFAULT_APP_ACCESS_TOKEN_NAME]: applicationAccessToken.token,
|
||||
[DEFAULT_API_KEY_NAME]: applicationAccessToken.token,
|
||||
[DEFAULT_FUNCTIONS_URL_NAME]: functionsBaseUrl ?? '',
|
||||
APPLICATION_ID: flatApplication.id,
|
||||
...serverVariables,
|
||||
...workspaceVariables,
|
||||
};
|
||||
}
|
||||
|
||||
private async buildFunctionsBaseUrl({
|
||||
workspaceId,
|
||||
flatApplication,
|
||||
}: {
|
||||
workspaceId: string;
|
||||
flatApplication: FlatApplication;
|
||||
}): Promise<string | undefined> {
|
||||
const workspace = await this.workspaceRepository.findOne({
|
||||
where: { id: workspaceId },
|
||||
select: { subdomain: true },
|
||||
});
|
||||
|
||||
if (!isDefined(workspace)) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const primaryPublicDomain =
|
||||
await this.applicationService.findPrimaryPublicDomainName({
|
||||
applicationId: flatApplication.id,
|
||||
workspaceId,
|
||||
});
|
||||
|
||||
return this.workspaceDomainsService.buildPublicFunctionBaseUrl({
|
||||
workspace,
|
||||
primaryPublicDomain,
|
||||
});
|
||||
}
|
||||
|
||||
private async buildServerVariableEnvMap(
|
||||
applicationRegistrationId: string | null,
|
||||
): Promise<Record<string, string>> {
|
||||
|
||||
Reference in New Issue
Block a user