Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 13 additions & 13 deletions src/deploy/functions/prepare.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import * as events from "../../functions/events/v1";
import { getDatabase } from "./services/firestore";
import { getBucket } from "./services/storage";
import { getDatabaseInstanceDetails } from "./services/database";
import { isGlobalAILogicEndpoint } from "./services/ailogic";
import { isGlobalAILogicTrigger } from "./services/ailogic";
import { parseServiceName, parseConnectorName } from "../../dataconnect/names";
import {
functionsOrigin,
Expand Down Expand Up @@ -381,11 +381,13 @@ export async function resolveDefaultRegionsForBuild(
} else {
// Match triggers.
try {
const fullEndpoint = { ...endpoint, id } as any;
if (build.isBlockingTriggered(endpoint)) {
resolvedRegion = resolveRegionForBlockingTrigger(fullEndpoint);
resolvedRegion = resolveRegionForBlockingTrigger(endpoint.blockingTrigger);
} else if (build.isEventTriggered(endpoint)) {
resolvedRegion = await resolveRegionForEventTrigger(fullEndpoint);
resolvedRegion = await resolveRegionForEventTrigger(
endpoint.project,
endpoint.eventTrigger,
);
}
} catch (err: any) {
logger.debug(
Expand All @@ -400,25 +402,23 @@ export async function resolveDefaultRegionsForBuild(
}
}

function resolveRegionForBlockingTrigger(
endpoint: backend.Endpoint & backend.BlockingTriggered,
): string {
const eventType = endpoint.blockingTrigger.eventType;
function resolveRegionForBlockingTrigger(blockingTrigger: build.BlockingTrigger): string {
const eventType = blockingTrigger.eventType;
if ((events.AUTH_BLOCKING_EVENTS as readonly string[]).includes(eventType)) {
return "us-east1";
}

if (isGlobalAILogicEndpoint(endpoint)) {
if (isGlobalAILogicTrigger(blockingTrigger)) {
return "us-east1";
}

return DEFAULT_FUNCTION_REGION;
}

async function resolveRegionForEventTrigger(
endpoint: backend.Endpoint & backend.EventTriggered,
project: string,
eventTrigger: build.EventTrigger,
): Promise<string> {
const eventTrigger = endpoint.eventTrigger;
const eventType = eventTrigger.eventType;

// Global functions should be deployed to us-east1.
Expand All @@ -441,7 +441,7 @@ async function resolveRegionForEventTrigger(
if (eventType.startsWith("google.cloud.firestore.")) {
try {
const databaseId = eventTrigger.eventFilters?.database || "(default)";
const db = await getDatabase(endpoint.project, databaseId);
const db = await getDatabase(project, databaseId);
const locationId = db.locationId.toLowerCase();

if (locationId === "nam5" || locationId === "nam7") return "us-central1";
Expand Down Expand Up @@ -481,7 +481,7 @@ async function resolveRegionForEventTrigger(
try {
const instanceName = eventTrigger.eventFilters?.instance;
if (instanceName) {
const details = await getDatabaseInstanceDetails(endpoint.project, instanceName);
const details = await getDatabaseInstanceDetails(project, instanceName);
if (details.location && details.location !== "-") {
return details.location.toLowerCase();
}
Expand Down
14 changes: 9 additions & 5 deletions src/deploy/functions/services/ailogic.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import * as backend from "../backend";
import * as build from "../build";
import { FirebaseError, getErrStatus } from "../../../error";
import { Name, Service } from "./index";
import * as ailogicApi from "../../../gcp/ailogic";
Expand Down Expand Up @@ -33,11 +34,14 @@ export function isAILogicEvent(endpoint: backend.Endpoint): endpoint is AILogicE
);
}

export function isGlobalAILogicEndpoint(endpoint: backend.Endpoint): boolean {
if (!isAILogicEvent(endpoint)) {
return false;
}
return !endpoint.blockingTrigger.options?.regionalWebhook;
/**
* Check if a blocking trigger is a global AI Logic trigger (not a regional webhook).
*/
export function isGlobalAILogicTrigger(blockingTrigger: build.BlockingTrigger): boolean {
return (
AI_LOGIC_EVENTS.includes(blockingTrigger.eventType as (typeof AI_LOGIC_EVENTS)[number]) &&
!blockingTrigger.options?.regionalWebhook
);
}

export class AILogicService implements Service {
Expand Down
Loading